Merge remote-tracking branch 'origin/master'

liweidong
maxiangong 1 day ago
commit a5e3b81b7f
  1. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/device/mapper/MeasuringUpkeepMapper.xml
  2. 140
      blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java
  3. 1
      blade-service/blade-desk/src/main/java/org/springblade/desk/process/mapper/ProjectMilestoneMapper.xml
  4. 23
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/service/impl/WorkOrderServiceImpl.java

@ -104,14 +104,12 @@
st.sl_id, st.sl_id,
st.pi_no, st.pi_no,
st.quantity, st.quantity,
st.quantity_level,
st.balance_money, st.balance_money,
st.sum_num, st.sum_num,
st.stay_maintain_num,
g.goods_name, g.goods_name,
g.goods_code,
g.specifications, g.specifications,
sh.sh_name, sh.sh_name,
sl.location,
<!-- 状态名称可以通过CASE语句或字典表获取 --> <!-- 状态名称可以通过CASE语句或字典表获取 -->
CASE CASE
WHEN mmu.status = 0 THEN '新建' WHEN mmu.status = 0 THEN '新建'

@ -340,8 +340,80 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
yieldOrder.setValidationMomo("未找到ERP一级B号路线,请核查!"); yieldOrder.setValidationMomo("未找到ERP一级B号路线,请核查!");
this.updateById(yieldOrder); this.updateById(yieldOrder);
} }
// 验证烧结订单的b号描述,如果包含封接字样则验证子件,不包含则不验证 // 验证烧结订单的b号描述,如果包含封接字样则验证子件,不包含则不验证
if (primaryCraft.contains(YieldOrderConst.ROAMNO_TEXT_FJ)) { if (primaryCraft.contains(YieldOrderConst.ROAMNO_TEXT_FJ)) {
DsPartEntity partEntity = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion());
// 烧结订单 需要校验子件必须包含【玻璃饼、壳体、插针、石墨模】
if(yieldOrder.getYieldType().equals(YieldOrderEnum.YIELD_TYPE_2.getCode())){
if(partEntity == null){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(yieldOrder.getPartCode()+": 未查询到零件信息!");
this.updateById(yieldOrder);
return null;
}
List<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId());
List<Long> childPartIdList = partRelationEntityList.stream()
.map(DsPartRelationEntity::getChildPartId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(childPartIdList)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :未查询到子件信息");
this.updateById(yieldOrder);
return null;
}
List<DsPartEntity> dsPartEntityList = dsPartService.listByIds(childPartIdList);
// 收集所有子件的
Set<Integer> sinTerTypeSet = dsPartEntityList.stream()
.map(DsPartEntity::getSinTerType)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if(CollectionUtils.isEmpty(sinTerTypeSet)){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :子件类型为空");
this.updateById(yieldOrder);
return null;
}
// 校验必须包含的零件类型
List<Integer> requiredTypes = Arrays.asList(DsPartConstant.SIN_TER_TYPE_CZ, DsPartConstant.SIN_TER_TYPE_KT, DsPartConstant.SIN_TER_TYPE_BLB, DsPartConstant.SIN_TER_TYPE_SMM);
List<Integer> missingTypes = new ArrayList<>();
for (Integer requiredType : requiredTypes) {
if (!sinTerTypeSet.contains(requiredType)) {
missingTypes.add(requiredType);
}
}
if (!missingTypes.isEmpty()) {
String missingDesc = missingTypes.stream()
.map(type -> {
if (type.equals(DsPartConstant.SIN_TER_TYPE_CZ)) return "插针";
if (type.equals(DsPartConstant.SIN_TER_TYPE_KT)) return "壳体";
if (type.equals(DsPartConstant.SIN_TER_TYPE_BLB)) return "玻璃饼";
if (type.equals(DsPartConstant.SIN_TER_TYPE_SMM)) return "石墨模";
return "未知类型(" + type + ")";
})
.collect(Collectors.joining("、"));
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("零件:"+partEntity.getPartCode()+" 缺少子件类型: " + missingDesc);
this.updateById(yieldOrder);
return null;
}
}
try { try {
this.saveSubYieldOrder(yieldOrder, Boolean.FALSE, yieldOrder.getReceiveUser()); this.saveSubYieldOrder(yieldOrder, Boolean.FALSE, yieldOrder.getReceiveUser());
} catch (BusinessException e) { } catch (BusinessException e) {
@ -481,74 +553,6 @@ public class YieldOrderServiceImpl extends BaseServiceImpl<YieldOrderMapper, Yie
return null; return null;
} }
} }
// 烧结订单 需要校验子件必须包含【玻璃饼、壳体、插针、石墨模】
if(yieldOrder.getYieldType().equals(YieldOrderEnum.YIELD_TYPE_2.getCode())){
if(partEntity == null){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(yieldOrder.getPartCode()+": 未查询到零件信息!");
this.updateById(yieldOrder);
return null;
}
List<DsPartRelationEntity> partRelationEntityList = partRelationService.selectDsPartRelationByPartId(partEntity.getId());
List<Long> childPartIdList = partRelationEntityList.stream()
.map(DsPartRelationEntity::getChildPartId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(childPartIdList)) {
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :未查询到子件信息");
this.updateById(yieldOrder);
return null;
}
List<DsPartEntity> dsPartEntityList = dsPartService.listByIds(childPartIdList);
// 收集所有子件的
Set<Integer> sinTerTypeSet = dsPartEntityList.stream()
.map(DsPartEntity::getSinTerType)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if(CollectionUtils.isEmpty(sinTerTypeSet)){
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo(partEntity.getPartCode()+" :子件类型为空");
this.updateById(yieldOrder);
return null;
}
// 校验必须包含的零件类型
List<Integer> requiredTypes = Arrays.asList(DsPartConstant.SIN_TER_TYPE_CZ, DsPartConstant.SIN_TER_TYPE_KT, DsPartConstant.SIN_TER_TYPE_BLB, DsPartConstant.SIN_TER_TYPE_SMM);
List<Integer> missingTypes = new ArrayList<>();
for (Integer requiredType : requiredTypes) {
if (!sinTerTypeSet.contains(requiredType)) {
missingTypes.add(requiredType);
}
}
if (!missingTypes.isEmpty()) {
String missingDesc = missingTypes.stream()
.map(type -> {
if (type.equals(DsPartConstant.SIN_TER_TYPE_CZ)) return "插针";
if (type.equals(DsPartConstant.SIN_TER_TYPE_KT)) return "壳体";
if (type.equals(DsPartConstant.SIN_TER_TYPE_BLB)) return "玻璃饼";
if (type.equals(DsPartConstant.SIN_TER_TYPE_SMM)) return "石墨模";
return "未知类型(" + type + ")";
})
.collect(Collectors.joining("、"));
yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode());
yieldOrder.setValidationTime(DateUtil.now());
yieldOrder.setValidationMomo("零件:"+partEntity.getPartCode()+" 缺少子件类型: " + missingDesc);
this.updateById(yieldOrder);
return null;
}
}
Integer rank; Integer rank;
// 先判断是否是热表订单 不是返回二级工艺 // 先判断是否是热表订单 不是返回二级工艺

@ -75,6 +75,7 @@
<if test = "fmProjectMilestone.milestoneNodeEnd != null and fmProjectMilestone.milestoneNodeEnd != ''"> <if test = "fmProjectMilestone.milestoneNodeEnd != null and fmProjectMilestone.milestoneNodeEnd != ''">
AND a.milestone_node <![CDATA[ <= ]]> to_date(concat(#{fmProjectMilestone.milestoneNodeEnd},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS') AND a.milestone_node <![CDATA[ <= ]]> to_date(concat(#{fmProjectMilestone.milestoneNodeEnd},' 23:59:59'),'YYYY-MM-DD HH24:MI:SS')
</if> </if>
and b.APPROVAL_STATUS not in ('0','1','2')
</where> </where>
order by a.update_time desc order by a.update_time desc
</select> </select>

@ -611,8 +611,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
equipAbilityList = equipAbilityService.list(Wrappers.<EquipAbilityEntity>lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId()).eq(EquipAbilityEntity::getProcessId,craft.getPpsId())); equipAbilityList = equipAbilityService.list(Wrappers.<EquipAbilityEntity>lambdaQuery().in(EquipAbilityEntity::getWorkCenterId, craft.getWorkCenterId()).eq(EquipAbilityEntity::getCraftId, craft.getCaId()).eq(EquipAbilityEntity::getProcessId,craft.getPpsId()));
} }
if (CollectionUtils.isEmpty(equipAbilityList)) { if (CollectionUtils.isEmpty(equipAbilityList)) {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的设备能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -653,7 +653,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isEmpty(equipResourceList)) { if (CollectionUtils.isEmpty(equipResourceList)) {
order.setStatus(YieldOrderEnum.STATUS_APS.getCode()); order.setStatus(YieldOrderEnum.STATUS_APS.getCode());
order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",设备资源已不足"); order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",设备资源已不足");
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
break; break;
@ -863,7 +863,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
hourMap.put("totalTime",totalTime); hourMap.put("totalTime",totalTime);
hourMap.put("standardTime",ability.getStandardTime()); hourMap.put("standardTime",ability.getStandardTime());
hourMap.put("prepareTime",ability.getPrepareTime()); hourMap.put("prepareTime",ability.getPrepareTime());
hourMap.put("hourType",ability.getType()); hourMap.put("hourType",ability.getType() == null ? 0 : ability.getType());
}else{ }else{
if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算 if("玻璃封接组装".equals(processMap.get(craft.getPpsId()))){//玻璃封接组装单独计算
hourMap = calPersonHoursByBlfjzz(order.getYpQty(),part); hourMap = calPersonHoursByBlfjzz(order.getYpQty(),part);
@ -900,8 +900,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (CollectionUtils.isNotEmpty(personResourceList)) { if (CollectionUtils.isNotEmpty(personResourceList)) {
workPlan.setMakeTeam(personResourceList.get(0).getTeamId()); workPlan.setMakeTeam(personResourceList.get(0).getTeamId());
}else{ }else{
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -918,8 +918,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
} }
} }
} else { } else {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力;");
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -945,9 +945,9 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
workPlanList.add(workPlan); workPlanList.add(workPlan);
log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成"); log.info("当前订单是:" + order.getId() + ",工序是:" + craft.getId()+",人员匹配完成");
} else { } else {
errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力;"); errorInfo.append("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力;");
log.info("未匹配到设备和人力资源的工序是:" + craft.getPpsId()); log.info("未匹配到设备和人力资源的工序是:" + craft.getPpsId());
// order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力"); // order.setErrorInfo("作业中心:" + workCenterMap.get(craft.getWorkCenterId()) + ",工艺能力:" + craftAbilityMap.get(craft.getCaId()) + ",工序:" + processMap.get(craft.getPpsId()) + ",未匹配到对应的人员能力和设备能力");
// order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); // order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
// yieldOrderService.updateById(order); // yieldOrderService.updateById(order);
isSchecuding = false; isSchecuding = false;
@ -963,6 +963,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if(errorInfo.length() > 0){ if(errorInfo.length() > 0){
order.setErrorInfo(errorInfo.toString()); order.setErrorInfo(errorInfo.toString());
order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode()); order.setStatus(YieldOrderEnum.STATUS_PROCESS_ERROR.getCode());
order.setUpdateTime(new Date());
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
} }
continue; continue;
@ -1039,7 +1040,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
yieldOrderService.updateById(order); yieldOrderService.updateById(order);
workOrderList.add(workOrder); workOrderList.add(workOrder);
//生成生产运行记录 //生成生产运行记录
disTaskingClient.saveWorkOrderRun(workOrder.getId().toString()); //disTaskingClient.saveWorkOrderRun(workOrder.getId().toString());
if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){ if(order.getYieldType() == YieldOrderEnum.YIELD_TYPE_3.getCode()){
StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO(); StGlassCakeOutDTO glassDto = new StGlassCakeOutDTO();
glassDto.setCardNo(workOrder.getCardNo()); glassDto.setCardNo(workOrder.getCardNo());

Loading…
Cancel
Save