|
@@ -17,12 +17,14 @@ import com.fjhx.customer.service.customer.CustomerService;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
+import com.fjhx.mes.entity.bom.dto.BomInfoDto;
|
|
|
import com.fjhx.mes.entity.bom.po.BomDetail;
|
|
|
import com.fjhx.mes.entity.bom.po.BomInfo;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionPlan;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionProcesses;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionTask;
|
|
|
import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
|
|
|
+import com.fjhx.mes.entity.work.dto.WorkOrderBomDto;
|
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderDto;
|
|
|
import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
|
|
|
import com.fjhx.mes.entity.work.po.WorkOrder;
|
|
@@ -48,8 +50,6 @@ import com.fjhx.wms.service.stock.StockService;
|
|
|
import com.fjhx.wms.service.stock.StockWaitDetailsService;
|
|
|
import com.fjhx.wms.service.stock.StockWaitService;
|
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
|
-import com.ruoyi.common.core.domain.entity.SysRole;
|
|
|
-import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
@@ -120,33 +120,21 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
wrapper.eq("wo", WorkOrder::getSource, dto.getSource());
|
|
|
|
|
|
|
|
|
+ //创建计划时工单要满足以下条件才能下工单
|
|
|
if (ObjectUtil.isNotEmpty(dto.getIsHandle())) {
|
|
|
- SysUser user = SecurityUtils.getLoginUser().getUser();
|
|
|
-
|
|
|
-
|
|
|
- List<SysRole> sysRoleList = user.getRoles();
|
|
|
- List<String> roleKeys = sysRoleList.stream().map(SysRole::getRoleKey).collect(Collectors.toList());
|
|
|
- //研发
|
|
|
- if (roleKeys.contains("dev")) {
|
|
|
- wrapper.eq("wo", WorkOrder::getResearchStatus, dto.getIsHandle());
|
|
|
- }
|
|
|
- //制图
|
|
|
- if (roleKeys.contains("design")) {
|
|
|
- wrapper.and(q -> q
|
|
|
- .eq("wo", WorkOrder::getBomStatus, dto.getIsHandle())
|
|
|
- .eq("wo", WorkOrder::getTechnologyStatus, dto.getIsHandle())
|
|
|
- );
|
|
|
- }
|
|
|
- //研发,制图
|
|
|
- if (roleKeys.contains("dev") && roleKeys.contains("design")) {
|
|
|
- wrapper.and(q -> q
|
|
|
- .eq("wo", WorkOrder::getResearchStatus, dto.getIsHandle())
|
|
|
- .or().and(q1 -> q1
|
|
|
- .eq("wo", WorkOrder::getBomStatus, dto.getIsHandle())
|
|
|
- .eq("wo", WorkOrder::getTechnologyStatus, dto.getIsHandle())
|
|
|
- )
|
|
|
- );
|
|
|
- }
|
|
|
+ //研发已上传附件
|
|
|
+ wrapper.eq("wo",WorkOrder::getResearchStatus,1);
|
|
|
+ //研发已调整BOM
|
|
|
+ wrapper.eq("wo",WorkOrder::getResearchBomStatus,1);
|
|
|
+ //电工(电控)已调整BOM
|
|
|
+ wrapper.eq("wo",WorkOrder::getElectricianBomStatus,1);
|
|
|
+ //制图已经调整定制工序[定制工单]
|
|
|
+ wrapper.eq("wo",WorkOrder::getTechnologyStatus,1);
|
|
|
+ //制图已经调整定制BOM[定制工单]
|
|
|
+ wrapper.eq("wo",WorkOrder::getBomStatus,1);
|
|
|
+ //制图已下发生产(生产数量不为空)
|
|
|
+ wrapper.isNotNull("wo.production_quantity");
|
|
|
+ wrapper.ne("wo.production_quantity","");
|
|
|
}
|
|
|
|
|
|
//过滤待排程(待创建计划的工单)
|
|
@@ -311,24 +299,31 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
* 检查定制工单BOM 工艺配置状态 如果配置完成则发送消息
|
|
|
*/
|
|
|
@Override
|
|
|
- public void checkCustomizedInfo(Long workOrderId) {
|
|
|
- WorkOrder workOrder1 = this.getById(workOrderId);
|
|
|
- if (Objects.equals(workOrder1.getBomStatus(), 1) && Objects.equals(workOrder1.getTechnologyStatus(), 1)) {
|
|
|
+ public void checkWorkOrderStatus(Long workOrderId) {
|
|
|
+ WorkOrder workOrder = this.getById(workOrderId);
|
|
|
+
|
|
|
+ //研发上传附件
|
|
|
+ boolean status = Objects.equals(workOrder.getResearchStatus(), 1);
|
|
|
+ //研发调整BOM
|
|
|
+ status = status && Objects.equals(workOrder.getResearchBomStatus(), 1);
|
|
|
+ //电工调整BOM
|
|
|
+ status = status && Objects.equals(workOrder.getElectricianBomStatus(), 1);
|
|
|
+ //制图调整定制工艺
|
|
|
+ status = status && Objects.equals(workOrder.getTechnologyStatus(), 1);
|
|
|
+ //制图调整定制BOM
|
|
|
+ status = status && Objects.equals(workOrder.getBomStatus(), 1);
|
|
|
+ //制图已经下发工单
|
|
|
+ status = status && ObjectUtil.isNotEmpty(workOrder.getProductionQuantity());
|
|
|
+ if (status) {
|
|
|
//推送消息给生产计划下发的负责人
|
|
|
- sendPlanInfo();
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.BASE);
|
|
|
+ List<Long> userIds = userService.getUserIdsByRoleKey("design");
|
|
|
+ DynamicDataSourceContextHolder.poll();
|
|
|
+ WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的工单待下发!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 给下发生产计划的人发消息
|
|
|
- */
|
|
|
- @Override
|
|
|
- public void sendPlanInfo() {
|
|
|
- DynamicDataSourceContextHolder.push(SourceConstant.BASE);
|
|
|
- List<Long> userIds = userService.getUserIdsByRoleKey("design");
|
|
|
- DynamicDataSourceContextHolder.poll();
|
|
|
- WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的工单待下发!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 下发需要人工干预的工单
|
|
@@ -490,9 +485,59 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
|
|
|
WebSocketPush.byUsers(PushTypeEnum.MESSAGE, userIds, "您有新的定制工单待配置!", PushBusinessTypeEnum.NEW_WORK_ORDER.getType());
|
|
|
} else if ("0".equals(workOrder.getIsCustomized())) {
|
|
|
//非定制工单 推送消息给生产计划下发的负责人
|
|
|
- sendPlanInfo();
|
|
|
+ checkWorkOrderStatus(workOrder.getId());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 修改BOM
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @DSTransactional
|
|
|
+ public synchronized void editBom(WorkOrderBomDto workOrderBomDto) {
|
|
|
+ Long workOrderId = workOrderBomDto.getWorkOrderId();
|
|
|
+ Assert.notEmpty(workOrderId,"工单Id不能为空");
|
|
|
+ WorkOrder workOrder = this.getById(workOrderId);
|
|
|
+ Assert.notEmpty(workOrder,"查询不到工单信息");
|
|
|
+
|
|
|
+ //修改状态
|
|
|
+ Integer researchBomStatus = workOrderBomDto.getResearchBomStatus();
|
|
|
+ Integer electricianBomStatus = workOrderBomDto.getElectricianBomStatus();
|
|
|
+ this.update(q->q
|
|
|
+ .eq(WorkOrder::getId,workOrderId)
|
|
|
+ .set(ObjectUtil.isNotEmpty(researchBomStatus),WorkOrder::getResearchBomStatus, researchBomStatus)
|
|
|
+ .set(ObjectUtil.isNotEmpty(electricianBomStatus),WorkOrder::getElectricianBomStatus, electricianBomStatus)
|
|
|
+ );
|
|
|
+
|
|
|
+ //判断定制还是非定制
|
|
|
+ if(Objects.equals(workOrder.getIsCustomized(),"1")){
|
|
|
+ //定制-修改定制BOM
|
|
|
+ workOrderBomService.edit(workOrderBomDto);
|
|
|
+ }else{
|
|
|
+ //非定制-修改普通BOM
|
|
|
+ List<WorkOrderBom> workOrderBomList = workOrderBomDto.getWorkOrderBomList();
|
|
|
+ //将数据转换成普通BOM
|
|
|
+ BomInfoDto bomInfoDto = new BomInfoDto();
|
|
|
+ List<BomDetail> bomDetailList = BeanUtil.copyToList(workOrderBomList, BomDetail.class);
|
|
|
+ bomInfoDto.setBomDetailList(bomDetailList);
|
|
|
+
|
|
|
+ //查询基本BOM
|
|
|
+ BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrder.getProductId()).eq(BomInfo::getCurrentVersion, 1));
|
|
|
+ if(ObjectUtil.isNotEmpty(bomInfo)){
|
|
|
+ //修改
|
|
|
+ bomInfoDto.setId(bomInfo.getId());
|
|
|
+ bomInfoService.editByJxst(bomInfoDto);
|
|
|
+ }else{
|
|
|
+ //添加
|
|
|
+ bomInfoDto.setAddType(1);
|
|
|
+ bomInfoDto.setProductId(workOrder.getProductId());
|
|
|
+ bomInfoService.addByJxst(bomInfoDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查工单状态
|
|
|
+ checkWorkOrderStatus(workOrderId);
|
|
|
+ }
|
|
|
+
|
|
|
}
|