|
|
|
@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingDefineService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
|
|
|
|
@ -17,6 +18,7 @@ import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
@ -230,37 +232,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
|
|
|
|
|
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderList(reqBean.getOrganizeCode(), workOrderNoList);
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderList))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息无效!", cutWorkOrderNo));
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息无效!", cutWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
for (MesWorkOrder workOrder : workOrderList) {
|
|
|
|
|
if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单信息工单状态[%s]!", cutWorkOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
|
|
|
|
|
|
|
|
|
|
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]信息绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,裁片工单[%s]绑定工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", cutWorkOrderNo, workOrder.getWorkOrderNo(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//保存零件数据信息
|
|
|
|
|
//封装 上下文 产出零件信息
|
|
|
|
|
packProductionPartContextList(productionProcessContext, equipVariableCollectContextList, productionPartContextList, cutScheme, mesWorkOrderCutDetailList, workOrderList);
|
|
|
|
|
|
|
|
|
|
//保存 上下文 零件数据信息
|
|
|
|
|
if (!firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, true).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
|
|
|
|
|
|
|
|
|
// 裁片方案成品配置
|
|
|
|
|
List<MesCutSchemeFg> mesCutSchemeFgList = workOrderCutService.queryCutSchemeFgList(cutScheme.getCutCode(), reqBean.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(mesCutSchemeFgList))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutScheme.getCutCode()));
|
|
|
|
|
|
|
|
|
|
List<String> fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<String> worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
worKOrderPartNoList.removeAll(fgPartNoList);
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(worKOrderPartNoList))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutScheme.getCutCode()));
|
|
|
|
|
// 校验裁片方案成品配置
|
|
|
|
|
if(!checkMesCutSchemeFgListValid(mesCutSchemeFgList, workOrderList, stepResult, cutWorkOrderNo, cutScheme.getCutCode()).isCompleted()) return stepResult;
|
|
|
|
|
|
|
|
|
|
// 最后一个工位 封装 包装条码打印所需参数
|
|
|
|
|
if (workCell.getIsEndWorkCell() != null && workCell.getIsEndWorkCell() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) {
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrderCutDetailModel> workOrderCutDetailModelList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
Map<String, MesPartContext> partDataExtContext = productionDispatchContextStepService.getPartDataExtContext(reqBean);
|
|
|
|
|
|
|
|
|
|
for (MesCutSchemeFg mesCutSchemeFg : mesCutSchemeFgList) {
|
|
|
|
@ -272,24 +270,33 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
|
|
|
|
|
if (mesPackingDefine == null)
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode()));
|
|
|
|
|
|
|
|
|
|
MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel();
|
|
|
|
|
BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel);
|
|
|
|
|
|
|
|
|
|
MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode());
|
|
|
|
|
|
|
|
|
|
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
|
|
|
|
|
mesPartContext.setCopies(cutScheme.getCopies());
|
|
|
|
|
mesPartContext.setCopies(mesPackingDefine.getPrintCopies());
|
|
|
|
|
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
|
|
|
|
|
mesPartContext.setPrinter(mesPackingDefine.getPrinter());
|
|
|
|
|
mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate());
|
|
|
|
|
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
|
|
|
|
|
|
|
|
|
|
workOrderCutDetailModel.setCopies(mesPackingDefine.getPrintCopies());
|
|
|
|
|
workOrderCutDetailModel.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
|
|
|
|
|
workOrderCutDetailModel.setPrinter(mesPackingDefine.getPrinter());
|
|
|
|
|
workOrderCutDetailModel.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
|
|
|
|
|
|
|
|
|
|
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);
|
|
|
|
|
workOrderCutDetailModelList.add(workOrderCutDetailModel);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
productionDispatchContextStepService.dispatchPartDataContext(reqBean, partDataExtContext);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, workOrderCutDetailModelList);
|
|
|
|
|
|
|
|
|
|
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<MesProduceSn> produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), cutWorkOrderNo);
|
|
|
|
|
|
|
|
|
@ -300,8 +307,32 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
|
|
|
|
|
productionPsOutContextList.add(new MesProductionPsOutContext().copy(o));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//封装产出零件信息
|
|
|
|
|
workOrderList.stream().filter(o -> null != o).forEach( o -> {
|
|
|
|
|
return stepResult;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private StepResult checkMesCutSchemeFgListValid(List<MesCutSchemeFg> mesCutSchemeFgList, List<MesWorkOrder> workOrderList, StepResult stepResult, String cutWorkOrderNo, String cutCode) {
|
|
|
|
|
if (CollectionUtils.isEmpty(mesCutSchemeFgList))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,裁片工单[%s]关联裁片方案[%s]无成品配置!", cutWorkOrderNo, cutCode));
|
|
|
|
|
|
|
|
|
|
List<String> fgPartNoList = mesCutSchemeFgList.stream().map(MesCutSchemeFg::getPartNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
List<String> worKOrderPartNoList = workOrderList.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
worKOrderPartNoList.removeAll(fgPartNoList);
|
|
|
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(worKOrderPartNoList))
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("请检查裁片方案成品信息,零件号[%s]未在裁片方案[%s]成品配置信息中维护!", worKOrderPartNoList, cutCode));
|
|
|
|
|
|
|
|
|
|
stepResult.setCompleted(true);
|
|
|
|
|
return stepResult;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void packProductionPartContextList(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList, MesCutScheme cutScheme, List<MesWorkOrderCutDetail> mesWorkOrderCutDetailList, List<MesWorkOrder> workOrderList) {
|
|
|
|
|
Map<String, MesWorkOrderCutDetail> workOrderCutDetailMap = mesWorkOrderCutDetailList.stream().collect(Collectors.toMap(MesWorkOrderCutDetail::getWorkOrderNo, Function.identity(), (x, y) -> y));
|
|
|
|
|
|
|
|
|
|
workOrderList.stream().filter(o -> null != o).forEach(o -> {
|
|
|
|
|
MesProductionPartContext productionPartContext = new MesProductionPartContext()
|
|
|
|
|
.copyPartNo(o, workOrderCutDetailMap.get(o.getWorkOrderNo()).getQty(), equipVariableCollectContextList.get(0).getMessageSource())
|
|
|
|
|
.isCheck(productionProcessContext.getWorkCell());
|
|
|
|
@ -309,9 +340,6 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
|
|
|
|
|
productionPartContext.setCutCode(cutScheme.getCutCode());
|
|
|
|
|
productionPartContextList.add(productionPartContext);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return stepResult;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|