diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java index 664facd..ff6731e 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderService.java @@ -38,7 +38,7 @@ public interface IMesWorkOrderService { List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); @ApiOperation("新增工单") - List insertMesWorkOrder(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ); + MesWorkOrder insertMesWorkOrder(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ); @ApiOperation(value = "根据前一天待报工记录数插入工单并报工JOB(工单报工)") void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java index cd1f37d..7f9d298 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java @@ -28,10 +28,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -81,19 +78,22 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { if (CollectionUtils.isEmpty(mesProductionRecordList)) { continue; } - try { - LOGGER.info("产线:{}报工mesProductionRecordList:{}", workCenterCode, mesProductionRecordList.size()); - //3.插入生产工单表 - List mesWorkOrders = workOrderService.insertMesWorkOrder(mesProductionRecordList, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName); - if (CollectionUtils.isEmpty(mesWorkOrders)) { - continue; - } - LOGGER.info("产线:{}报工mesWorkOrders:{}", workCenterCode, mesWorkOrders.size()); - //4.根据产线+物料产生的工单报工 - for (MesWorkOrder mesWorkOrder : mesWorkOrders) { + Map> recordMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo())); + for (Map.Entry> entry : recordMap.entrySet()) { + String k = entry.getKey(); + List v = entry.getValue(); + try { + LOGGER.info("产线=-零件号:{},:{},报工mesProductionRecordList:{}",k, v.size()); + //3.插入生产工单表,根据产线和零件号会创建又给工单 + MesWorkOrder mesWorkOrder = workOrderService.insertMesWorkOrder(v, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName); + if (mesWorkOrder == null) { + continue; + } + LOGGER.info("产线:{}报工mesWorkOrder:{}", workCenterCode, mesWorkOrder.getWorkOrderNo()); + //4.根据产线+物料产生的工单报工 List mesProductionRecords = new ArrayList<>(); try { - mesProductionRecords = mesProductionRecordList.stream().filter( + mesProductionRecords = v.stream().filter( w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode()) && w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName, mesWorkOrder); @@ -101,11 +101,7 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { for (MesProductionRecord mesProductionRecord : mesProductionRecords) { if (StringUtil.isEmpty(mesProductionRecord.getWorkOrderNo())) { - List collect = mesWorkOrders.stream().filter(w -> w.getWorkCenterCode().equalsIgnoreCase(mesProductionRecord.getWorkCenterCode()) - && w.getPartNo().equalsIgnoreCase(mesProductionRecord.getPartNo())).collect(Collectors.toList()); - if (!CollectionUtils.isEmpty(collect)) { - mesProductionRecord.setWorkOrderNo(collect.get(0).getWorkOrderNo()); - } + mesProductionRecord.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); } mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); @@ -122,13 +118,13 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); } } - } - } catch (ImppBusiException e) { - List snList = mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()); - String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg() : e.getErrorDetail(); - LOGGER.info("条码:{}报工失败,{}", snList, errorMsg); - for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { - productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); + } catch (ImppBusiException e) { + List snList = v.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()); + String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg() : e.getErrorDetail(); + LOGGER.info("条码:{}报工失败,{}", snList, errorMsg); + for (MesProductionRecord mesProductionRecord : v) { + productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); + } } } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 6417a72..a60409a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -1292,15 +1292,12 @@ public class MesWorkOrderService implements IMesWorkOrderService { } @Override - public List insertMesWorkOrder(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName) { - List mesWorkOrderList = new ArrayList<>(); - Map> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo())); - for (Map.Entry> stringListEntry : mesProductionRecordListMap.entrySet()) { - List value = stringListEntry.getValue(); - MesProductionRecord mesProductionRecord = value.get(0); - String[] split = stringListEntry.getKey().split("="); - String workCenterCode = split[0]; - String partNo = split[1]; + public MesWorkOrder insertMesWorkOrder(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName) { + + MesProductionRecord mesProductionRecord = mesProductionRecordList.get(0); + + String workCenterCode = mesProductionRecord.getWorkCenterCode(); + String partNo = mesProductionRecord.getPartNo(); //查询工作中心 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); @@ -1344,7 +1341,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { item.setProduceTime(TimeTool.getToday()); item.setProductTime(item.getProduceTime()); item.setUnCompleteQty(0d); - item.setQty(value.stream().mapToDouble(MesProductionRecord::getQty).sum()); + item.setQty(mesProductionRecordList.stream().mapToDouble(MesProductionRecord::getQty).sum()); item.setCompleteQty(item.getQty()); item.setReportedQty(item.getQty()); item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); @@ -1362,13 +1359,13 @@ public class MesWorkOrderService implements IMesWorkOrderService { //校验物料生产版本是否存在 MesProductVersion mesProductVersion = checkMesProductVersion(item); if (Objects.isNull(mesProductVersion)) { - continue; + return null; } item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); if (org.springframework.util.CollectionUtils.isEmpty(bomList)) { - continue; + return null; } } @@ -1377,21 +1374,26 @@ public class MesWorkOrderService implements IMesWorkOrderService { ConvertBean.serviceModelInitialize(item, userName); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); saveMesWorkOrderLog(mesWorkOrder,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT.getValue(),item.getQty()); - mesWorkOrderList.add(mesWorkOrder); - } - return mesWorkOrderList; + return mesWorkOrder; } private MesProductVersion checkMesProductVersion(MesWorkOrder item) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { + List mesProductVersions = mesProductVersionRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesProductVersions)) { LOGGER.info("物料{}产线{}生产版本{}信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion() ); MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion()); } + MesProductVersion mesProductVersion = null; + List mesProductOneVersions = mesProductVersions.stream().filter(productVersion -> Objects.equals(productVersion.getProductVersion(),"0001")).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(mesProductOneVersions)) { + mesProductVersion = mesProductOneVersions.get(0); + } else { + mesProductVersion = mesProductVersions.get(0); + } return mesProductVersion; }