diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java index 641acc0..6443ef6 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPullingOrderInfoService.java @@ -24,6 +24,8 @@ public interface IMesPullingOrderInfoService { List doMesPullingOrderInfoPrint(MesPullingOrderInfo mesPullingOrderInfo); + List doMesPullingOrderInfoPrintNew(MesPullingOrderInfo mesPullingOrderInfo); + ListPager queryMesPullingOrderPartInfoByPager(MesPullingOrderInfo mesPullingOrderInfo, Pager pager); List doMesPullingOrderInfoSend(List infoList, String userName); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderCutService.java index 85b7957..509bb1a 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderCutService.java @@ -31,6 +31,10 @@ public interface IMesWorkOrderCutService { @ApiOperation(value = "查询裁片方案成品配置") List queryCutSchemeFgList(String cutCode, String organizeCode); + @ApiOperation(value = "查询裁片方案成品配置") + List queryCutOrderMaterialList(String cutWorkOrder, String organizeCode); + + @ApiOperation(value = "查询裁片方案设备信息") MesCutSchemeEquipment getCutSchemeEquipment(String cutCode, String equipmentCode, String organizeCode); 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 96b4e50..664facd 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 @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.*; @@ -56,7 +57,7 @@ public interface IMesWorkOrderService { List getUnReportHasOrderMesProduceSn(String organizeCode); @ApiOperation(value = "生产报工") - void doProductReport(MesWorkOrder mesWorkOrder,String userName); + void doProductReport(MesWorkOrderExtModel mesWorkOrder, String userName); @ApiOperation(value = "报工调整") void doProductReportReversal(MesWorkOrder mesWorkOrder,MesProductVersion mesProductVersion,String userName); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java index ecc9636..9ff660f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesPullingOrderInfoController.java @@ -113,6 +113,46 @@ public class MesPullingOrderInfoController { return ResultBean.fail(e); } } + @PostMapping(value = "/new/doPrint") + @ApiOperation(value = "打印未打印拉动单后修改状态--带类型") + public ResultBean doMesPullingOrderInfoNewPrint(@RequestBody MesPullingOrderInfo mesPullingOrderInfo) { + try { + + if (StringUtils.isEmpty(mesPullingOrderInfo.getOrganizeCode())) { + throw new ImppBusiException("工厂不能为空"); + } + + if (StringUtils.isEmpty(mesPullingOrderInfo.getWorkCenterCode())) { + throw new ImppBusiException("产线不能为空"); + } + + if (StringUtils.isEmpty(mesPullingOrderInfo.getPullCode())) { + throw new ImppBusiException("拉动组不能为空"); + } + + if (StringUtils.isEmpty(mesPullingOrderInfo.getModifyUser())) { + throw new ImppBusiException("操作人不能为空"); + } + + String moduleKey = new StringJoiner(MesPcnExtConstWords.COLON) + .add(mesPullingOrderInfo.getOrganizeCode()) + .add("PRINT_PULLING_ORDER_INFO") + .add(mesPullingOrderInfo.getWorkCenterCode()).add(mesPullingOrderInfo.getPullCode()).toString(); + + synchronized (moduleKey.intern()) { + + List pullingOrderInfos = mesPullingOrderInfoService.doMesPullingOrderInfoPrint(mesPullingOrderInfo); + + return ResultBean.success(CollectionUtils.isEmpty(pullingOrderInfos) ? "查询暂无可打印数据!!!" : "打印队列查询成功!!!").setResultList(pullingOrderInfos); + + } + + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } @GetMapping("/template") @ApiOperation(value = "查询打印模板和明细") public ResultBean queryMesLabelTemplate(MesLabelTemplate labelTemplate ) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java index 22bec65..2f0311f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; @@ -64,9 +65,9 @@ public class MesWorkOrderController { @PostMapping(value = "/doProductReport") @ApiOperation(value = "生产报工") - public ResultBean doProductReport(MesWorkOrder mesWorkOrder) { + public ResultBean doProductReport(MesWorkOrderExtModel mesWorkOrder) { try { - workOrderService.doProductReport(mesWorkOrder, !StringUtils.isEmpty(mesWorkOrder.getModifyUser())?mesWorkOrder.getModifyUser():AuthUtil.getSessionUser().getUserName()); + workOrderService.doProductReport(mesWorkOrder, !StringUtils.isEmpty(mesWorkOrder.getModifyUser()) ? mesWorkOrder.getModifyUser() : AuthUtil.getSessionUser().getUserName()); return ResultBean.success("报工成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException e) { 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 0b3e4fa..cd1f37d 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 @@ -27,8 +27,10 @@ import org.springframework.beans.factory.annotation.Autowired; 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.stream.Collectors; @@ -79,44 +81,55 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { if (CollectionUtils.isEmpty(mesProductionRecordList)) { continue; } - 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.根据产线+物料产生的工单报工 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) { - List mesProductionRecords = mesProductionRecordList.stream().filter( + List mesProductionRecords = new ArrayList<>(); + try { + mesProductionRecords = mesProductionRecordList.stream().filter( w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode()) && w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, wmsJobParamModel.getOrganizeCode(), userName, mesWorkOrder); for (MesProductionRecord mesProductionRecord : mesProductionRecords) { - try { - 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()); - } + + 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.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); - mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - ConvertBean.serviceModelUpdate(mesProductionRecord, userName); - } catch (ImppBusiException e) { - String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg(): e.getErrorDetail(); - LOGGER.error("条码:{}报工失败,{}", mesProductionRecord.getProductSn(), errorMsg); - productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); - continue; } + mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); + mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesProductionRecord, userName); + mesProductionRecord.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); + } productionRecordRao.saveAll(mesProductionRecords); + } catch (ImppBusiException e) { + List snList = mesProductionRecords.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()); + String errorMsg = StringUtil.isEmpty(e.getErrorDetail()) ? e.getErrorMsg() : e.getErrorDetail(); + LOGGER.info("条码:{}报工失败,{}", snList, errorMsg); + for (MesProductionRecord mesProductionRecord : mesProductionRecords) { + productionRecordService.updateProductionRecord(mesProductionRecord.getOrganizeCode(), userName, mesProductionRecord.getId(), errorMsg); + } + } } } catch (ImppBusiException e) { - LOGGER.error("产线:{}报工失败:{}", workCenterCode, e.getErrorDetail()); + 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); + } } } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java index b4d70f5..02bf40c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesCutRawErrorProofingService.java @@ -172,6 +172,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer modifyRawLengthRecord.setLength(materialSnDb.getLength()); modifyRawLengthRecord.setSubLength(materialSnDb.getSurplusLength()); modifyRawLengthRecord.setSn(model.getSn()); + modifyRawLengthRecord.setPartNo(materialSnDb.getPartNo()); modifyRawLengthRecord.setCutWorkOrderNo(model.getCutWorkOrderNo()); modifyRawLengthRecord.setType(MesExtEnumUtil.CUT_RAW_LENGTH_TYPE.ORDER.getValue()); modifyRawLengthRecord.setOrganizeCode(model.getOrganizeCode()); @@ -234,6 +235,7 @@ public class MesCutRawErrorProofingService implements IMesCutRawErrorProofingSer modifyRawLengthRecord.setModifyReason(model.getModifyReason()); modifyRawLengthRecord.setType(MesExtEnumUtil.CUT_RAW_LENGTH_TYPE.OTHER.getValue()); modifyRawLengthRecord.setOrganizeCode(model.getOrganizeCode()); + modifyRawLengthRecord.setPartNo(model.getPartNo()); cutModifyRawLengthRecordRepository.save(modifyRawLengthRecord); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java index a3ccafe..67aa103 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesInputDefectRecordService.java @@ -427,7 +427,18 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, reworkPackBean); int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean); if (count > 0) { - throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); + // 如果是批次还需要移库 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); + MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); + String srcNo = configService.getCfgValue(org, "LGORT"); + if (version != null) { + srcNo = version.getReceiveInventoryPoint(); + } + String destLocateNo = getDestLocateNo(model, org); + if(!Objects.equals(srcNo, destLocateNo)) { + throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); + } } checkProduceSn(produceSn, model.getSn()); @@ -542,7 +553,18 @@ public class MesInputDefectRecordService implements IMesInputDefectRecordService DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, reworkPackBean); int count = reworkTaskRepository.findByHqlWhereCount(reworkPackBean); if (count > 0) { - throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); + // 如果是批次还需要移库 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(org); + DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); + MesProductVersion version = productVersionRepository.getByProperty(ddlPackBean); + String srcNo = configService.getCfgValue(org, "LGORT"); + if (version != null) { + srcNo = version.getReceiveInventoryPoint(); + } + String destLocateNo = getDestLocateNo(model, org); + if(!Objects.equals(srcNo, destLocateNo)) { + throw new ImppBusiException(String.format("【%s】该条码需要完成质检,再重新录入电子化检验", model.getSn())); + } } checkProduceSn(produceSn, model.getSn()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java index 847d0d2..92dbe16 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java @@ -4,8 +4,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -60,6 +58,9 @@ public class MesProductionRecordService implements IMesProductionRecordService { @Autowired private MesWorkCellRepository mesWorkCellRepository; + @Autowired + private MesProductionRecordRepository productionRecordRao; + @Override public List findProductionRecordList(String organizeCode, String productSn) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null; @@ -250,14 +251,14 @@ public class MesProductionRecordService implements IMesProductionRecordService { @Override public void updateProductionRecord(List recordList, String userName, Integer reportStatus, String msg) { + recordList.forEach(record->{ - record.setReportStatus(reportStatus); - record.setRemark(msg); - record.setSystemSyncStatus(CommonEnumUtil.FALSE); - record.setSystemSyncDatetime(MesPcnExtConstWords.EMPTY); - ConvertBean.serviceModelUpdate(record,userName); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(record.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(record.getId(), "id", ddlPackBean); + productionRecordRao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "reportStatus","remark","systemSyncStatus","systemSyncDatetime"}, + new Object[]{userName, DateUtil.format(new Date(), MesPcnExtConstWords.DATE_FORMAT_SSS), reportStatus,msg,CommonEnumUtil.FALSE,""}, ddlPackBean); + }); - productionRecordRepository.saveAll(recordList); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java index 3e6828a..9c34a5a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPullingOrderInfoService.java @@ -30,6 +30,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -62,6 +64,9 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { @Autowired private MesCustomerCarModelRepository carModelRepository; + @Autowired + private MesWorkOrderRepository workOrderRao; + @Override public ListPager queryMesPullingOrderInfoByPager(MesPullingOrderInfo bean, Pager pager) { @@ -196,6 +201,16 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { //把查出来的拉动单打印并修改打印状态为已打印 List snLogList = new ArrayList<>(); for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) { + //查询对应的工单 + DdlPackBean workOrderPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, workOrderPackBean); + List mesWorkOrders = workOrderRao.findByHqlTopWhere(workOrderPackBean, 1); + MesWorkOrder mesWorkOrder; + if (!CollectionUtils.isEmpty(mesWorkOrders)) { + mesWorkOrder = mesWorkOrders.get(0); + }else { + mesWorkOrder = new MesWorkOrder(); + } //查询拉动组明细 DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), MesPcnExtConstWords.PULLING_ORDER_NO, partPackBean); @@ -206,12 +221,97 @@ public class MesPullingOrderInfoService implements IMesPullingOrderInfoService { if(!StringUtil.isEmpty(item.getLocation()) && item.getLocation().contains(MesPcnExtConstWords.COMMA)){ item.setLocatAddr(item.getLocation().split(MesPcnExtConstWords.COMMA)[0]); item.setLightAddr(item.getLocation().split(MesPcnExtConstWords.COMMA)[1]); - } + }; + item.setAssemblyPartNo(pullingOrderInfo.getPartNo()); + }); + pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); + } + pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.FOUR):""); + pullingOrderInfo.setWorkOrderNoPre(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.FOUR):""); + pullingOrderInfo.setCustOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getCustOrderNo())?pullingOrderInfo.getCustOrderNo().substring(pullingOrderInfo.getCustOrderNo().length() - MesPcnExtConstWords.FOUR):""); + pullingOrderInfo.setCarModelName((Objects.isNull(mesCustomerCarModelMap) || StringUtil.isEmpty(pullingOrderInfo.getCarModelCode()) || !mesCustomerCarModelMap.containsKey(pullingOrderInfo.getCarModelCode()) ? "" : mesCustomerCarModelMap.get(pullingOrderInfo.getCarModelCode()).iterator().next().getCarModelName())); + + pullingOrderInfo.setPrintTime(TimeTool.getNowTime(true)); + pullingOrderInfo.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + pullingOrderInfo.setIsPrint(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + pullingOrderInfo.setShiftName(mesWorkOrder.getShiftName()); + pullingOrderInfo.setSummaryQty(mesWorkOrder.getQty()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + pullingOrderInfo.setPlanStartDate(sdf.format(sdf.parse(mesWorkOrder.getPlanStartTime()))); + } catch (ParseException e) { + log.error("格式化时间错误e:{}", e.getMessage()); + } + pullingOrderInfo.setPlanStartTime(mesWorkOrder.getPlanStartTime()); + pullingOrderInfo.setShiftName(mesWorkOrder.getShiftName()); + pullingOrderInfo.setCarModelCode(mesWorkOrder.getCarModelCode()); + pullingOrderInfo.setCustOrderNo(mesWorkOrder.getCustOrderNo()); + ConvertBean.serviceModelUpdate(pullingOrderInfo, bean.getModifyUser()); + + //10-12 打印补打拉动单新增log表 + MesPrintedSnLog snLog = new MesPrintedSnLog(); + snLog.setBarcode(pullingOrderInfo.getPullingOrderNo()); + snLog.setCustPartNo(pullingOrderInfo.getCustPartNo()); + snLog.setWorkOrderNo(pullingOrderInfo.getWorkOrderNo()); + snLog.setPartNo(pullingOrderInfo.getPartNo()); + snLog.setPartName(pullingOrderInfo.getPartName()); + ConvertBean.serviceModelInitialize(snLog, bean.getModifyUser()); + snLog.setOrganizeCode(bean.getOrganizeCode()); + snLogList.add(snLog); + + } + mesPullingOrderInfoRepository.saveAll(pullingOrderInfos); + //保存打印条码记录 + snLogRao.saveAll(snLogList); + } + return pullingOrderInfos; + } + + @Override + public List doMesPullingOrderInfoPrintNew(MesPullingOrderInfo bean) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + + List pullCodeList = Arrays.asList(bean.getPullCode().split(MesPcnExtConstWords.COMMA)); + List workCenterCodeList = Arrays.asList(bean.getWorkCenterCode().split(MesPcnExtConstWords.COMMA)); + + if (pullCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(pullCodeList.get(0), MesPcnExtConstWords.PULL_CODE, packBean); + else DdlPreparedPack.getInPackList(pullCodeList, MesPcnExtConstWords.PULL_CODE, packBean); + + if (workCenterCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(workCenterCodeList.get(0), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + else DdlPreparedPack.getInPackList(workCenterCodeList, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + + DdlPreparedPack.getNumEqualPack(bean.getPullOrderType(),"pullOrderType",packBean); + DdlPreparedPack.getStringEqualPack(bean.getPullingOrderNo(), MesPcnExtConstWords.PULLING_ORDER_NO, packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CUST_ORDER_NO}, packBean); + + List pullingOrderInfos = mesPullingOrderInfoRepository.findByHqlTopWhere(packBean, MesPcnExtConstWords.THREE); + + log.info("打印队列查询 --- 拉动单 --- 查询到打印数据: {} ---", CollectionUtils.isEmpty(pullingOrderInfos) ? "[]" : + pullingOrderInfos.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesPullingOrderInfo::getWorkOrderNo).collect(Collectors.toList()).toString()); + + if (!CollectionUtils.isEmpty(pullingOrderInfos)) { + //根据车型代码查询车型信息 + Map> mesCustomerCarModelMap = getMesCustomerCarModelMap(bean.getOrganizeCode(), pullingOrderInfos.stream().map(MesPullingOrderInfo::getCarModelCode).distinct().collect(Collectors.toList())); + //把查出来的拉动单打印并修改打印状态为已打印 + List snLogList = new ArrayList<>(); + for (MesPullingOrderInfo pullingOrderInfo : pullingOrderInfos) { + //查询拉动组明细 + DdlPackBean partPackBean = DdlPackBean.getDdlPackBean(pullingOrderInfo.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(pullingOrderInfo.getPullingOrderNo(), MesPcnExtConstWords.PULLING_ORDER_NO, partPackBean); + List pullingOrderPartInfos = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); + if (!CollectionUtils.isEmpty(pullingOrderPartInfos)) { + pullingOrderInfo.setPartCount(pullingOrderPartInfos.size()); + pullingOrderPartInfos.forEach(item->{ + String[] locationArr = StringUtils.isEmpty(item.getLocation()) ? null : item.getLocation().split(MesPcnExtConstWords.COMMA); + item.setLocatAddr((null != locationArr && locationArr.length >= 1 ? locationArr[0] : MesPcnExtConstWords.ZERO_STR)); + item.setLightAddr((null != locationArr && locationArr.length >= 2 ? locationArr[1] : MesPcnExtConstWords.EMPTY)); }); + pullingOrderPartInfos = pullingOrderPartInfos.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPullingOrderPartInfo::getLocatAddr)).collect(Collectors.toList()); pullingOrderInfo.setPullingOrderPartInfos(pullingOrderPartInfos); } - pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):""); - pullingOrderInfo.setWorkOrderNoPre(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.THREE):""); + pullingOrderInfo.setWorkOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.FOUR):""); + pullingOrderInfo.setWorkOrderNoPre(!StringUtil.isEmpty(pullingOrderInfo.getWorkOrderNo())?pullingOrderInfo.getWorkOrderNo().substring(MesPcnExtConstWords.ZERO,pullingOrderInfo.getWorkOrderNo().length() - MesPcnExtConstWords.FOUR):""); pullingOrderInfo.setCustOrderNoLast(!StringUtil.isEmpty(pullingOrderInfo.getCustOrderNo())?pullingOrderInfo.getCustOrderNo().substring(pullingOrderInfo.getCustOrderNo().length() - MesPcnExtConstWords.FOUR):""); pullingOrderInfo.setCarModelName("车型:" + (Objects.isNull(mesCustomerCarModelMap) || StringUtil.isEmpty(pullingOrderInfo.getCarModelCode()) || !mesCustomerCarModelMap.containsKey(pullingOrderInfo.getCarModelCode()) ? "" : mesCustomerCarModelMap.get(pullingOrderInfo.getCarModelCode()).iterator().next().getCarModelName())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderCutService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderCutService.java index 86467bd..4dd1772 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderCutService.java @@ -30,6 +30,9 @@ public class MesWorkOrderCutService implements IMesWorkOrderCutService { private MesWorkOrderCutDetailRepository workOrderCutDetailRepository; @Autowired + private MesWorkOrderCutMaterialRepository workOrderCutMaterialRepository; + + @Autowired private MesCutSchemeRepository cutSchemeRepository; @Autowired @@ -77,6 +80,16 @@ public class MesWorkOrderCutService implements IMesWorkOrderCutService { } @Override + public List queryCutOrderMaterialList(String cutWorkOrder, String organizeCode) { + + if (StringUtils.isEmpty(organizeCode)) return Collections.emptyList(); + + return workOrderCutMaterialRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.CUT_WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cutWorkOrder}); + } + + @Override public MesCutSchemeEquipment getCutSchemeEquipment(String cutCode, String equipmentCode, String organizeCode) { return cutSchemeEquipmentRepository.getByProperty( 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 93081e8..4522235 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 @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdRuleSortCfgDao; import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProductionRecordDao; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderExtModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderSortReportModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; @@ -135,6 +136,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Autowired private IMesProdRuleSortCfgDao mesProdRuleSortCfgDao; + @Autowired + private MesPartProdGroupRepository mesPartProdGroupRao; + @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -220,9 +224,26 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb.getOrganizeCode(), mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getProductVersion()); + String bomVersion = mesProductVersion.getAlternativePartList(); + String partProdGroupCode = mesWorkOrderDb.getPartProdGroupCode(); + // partProdGroupCode 不为空,查询的数据不为空,查询数据中的获取bom方式不为空且枚举是 基于默认BOM ,才bomversion = null 否则都是通过生产版本找bom + if (!StringUtil.isEmpty(partProdGroupCode)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, "partProdGroupCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + + // 没有零件生产组用默认找生产版本、有的话找获取bom方式枚举,枚举是基于默认BOM 则直接找 + if (!mesPartProdGroupList.isEmpty()) { + MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.get(0); + if (mesPartProdGroup.getEnableBomVersion() != null && mesPartProdGroup.getEnableBomVersion() == MesExtEnumUtil.ENABLE_BOM_VERSION.ENABLE_BOM_VERSION_2.getValue()) { + log.info("基于默认BOM获取BOM"); + bomVersion = ""; + } + } + } //物料+生产版本获取bom信息 - List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); + List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, bomVersion); LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo()); //更新工单 @@ -387,8 +408,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) { LOGGER.info("物料{}生产版本{}对应bom信息不存在", partNo, bomVersion ); - return mesBoms; -// MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion); + MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion); } MesBom next = mesBoms.iterator().next(); //如果存在多个bomCode取最新的一个 @@ -535,9 +555,26 @@ public class MesWorkOrderService implements IMesWorkOrderService { return; //throw new ImppBusiException(String.format("未找到匹配的加工单")); } - //获取生产版本 - MesProductVersion mesProductVersion = getProductVersion(organizeCode, productionRecord.getPartNo(), oldMesWorkOrder.getProductVersion()); + //获取生产版本 + MesProductVersion mesProductVersion = getProductVersion(oldMesWorkOrder.getOrganizeCode(), oldMesWorkOrder.getPartNo(), oldMesWorkOrder.getProductVersion()); + String bomVersion = mesProductVersion.getAlternativePartList(); + String partProdGroupCode = oldMesWorkOrder.getPartProdGroupCode(); + // partProdGroupCode 不为空,查询的数据不为空,查询数据中的获取bom方式不为空且枚举是 基于默认BOM ,才bomversion = null 否则都是通过生产版本找bom + if (!StringUtil.isEmpty(partProdGroupCode)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(oldMesWorkOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, "partProdGroupCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + + // 没有零件生产组用默认找生产版本、有的话找获取bom方式枚举,枚举是基于默认BOM 则直接找 + if (!mesPartProdGroupList.isEmpty()) { + MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.get(0); + if (mesPartProdGroup.getEnableBomVersion() != null && mesPartProdGroup.getEnableBomVersion() == MesExtEnumUtil.ENABLE_BOM_VERSION.ENABLE_BOM_VERSION_2.getValue()) { + log.info("基于默认BOM获取BOM"); + bomVersion = ""; + } + } + } //查询物料信息 DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBeanPart); @@ -546,7 +583,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { throw new ImppBusiException(String.format("物料【%s】信息不存在", productionRecord.getPartNo())); } - List mesBoms = findBomList(organizeCode, mesPart, mesProductVersion.getAlternativePartList()); + List mesBoms = findBomList(organizeCode, mesPart, bomVersion); if (CollectionUtils.isEmpty(mesBoms)) { @@ -572,7 +609,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (StringUtil.isEmpty(productionRecord.getWorkOrderNo())) { //更新工单状态 - if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { + if (reportQty >= oldMesWorkOrder.getQty()) { propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { @@ -1007,48 +1044,74 @@ public class MesWorkOrderService implements IMesWorkOrderService { } @Override - public void doProductReport(MesWorkOrder mesWorkOrder, String userName) { + public void doProductReport(MesWorkOrderExtModel mesWorkOrder, String userName) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesWorkOrder.getId(),"id",packBean); MesWorkOrder mesWorkOrderDb = mesWorkOrderRDao.getByProperty(packBean); if (Objects.isNull(mesWorkOrderDb)) { MesPcnException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); } - mesWorkOrderDb.setDescription(mesWorkOrder.getDescription()); + //查询物料信息 MesPart mesPart = iMesPartService.getMesPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode()); //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb); //获取生产版本 MesProductVersion mesProductVersion = getProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); + String bomVersion = mesProductVersion.getAlternativePartList(); + String partProdGroupCode = mesWorkOrderDb.getPartProdGroupCode(); + // partProdGroupCode 不为空,查询的数据不为空,查询数据中的获取bom方式不为空且枚举是 基于默认BOM ,才bomversion = null 否则都是通过生产版本找bom + if (!StringUtil.isEmpty(partProdGroupCode)) { + DdlPackBean partProdBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(partProdGroupCode, "partProdGroupCode", partProdBean); + List mesPartProdGroupList = mesPartProdGroupRao.findByHqlTopWhere(partProdBean, 1); + + // 没有零件生产组用默认找生产版本、有的话找获取bom方式枚举,枚举是基于默认BOM 则直接找 + if (!mesPartProdGroupList.isEmpty()) { + MesPartProdGroup mesPartProdGroup = mesPartProdGroupList.get(0); + if (mesPartProdGroup.getEnableBomVersion() != null && mesPartProdGroup.getEnableBomVersion() == MesExtEnumUtil.ENABLE_BOM_VERSION.ENABLE_BOM_VERSION_2.getValue()) { + log.info("基于默认BOM获取BOM"); + bomVersion = ""; + } + } + } //物料+生产版本获取bom信息 - List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); - mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty())); - //更新工单状态 + List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, bomVersion); + + //汇报数量与未完成数量的修改 先给入参对象赋值, 下面没有报错的情况下再赋给工单DB对象 + mesWorkOrder.setReportedQty(MathOperation.add(mesWorkOrder.getNum(), mesWorkOrderDb.getReportedQty())); double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty()); - mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); - if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) { + mesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + + //更新工单状态 + if (mesWorkOrder.getReportedQty() > mesWorkOrderDb.getQty()) { // 以下则是超工单逻辑 // 如果产线中没有配置超工单,则直接阻断 if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) { - MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); + MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrderDb.getWorkOrderNo(), mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty()); } // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 - double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty()); + double rate = MathOperation.div((mesWorkOrder.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty()); if (rate > MathOperation.div(mesWorkCenter.getOrderRate(), 100)) { - MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), mesWorkCenter.getOrderRate()); + MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrderDb.getWorkOrderNo(), mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty(), mesWorkCenter.getOrderRate()); } - mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - } else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) { + mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else if (Objects.equals(mesWorkOrder.getReportedQty(), mesWorkOrderDb.getQty())) { mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } - mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); + + mesWorkOrderDb.setDescription(mesWorkOrder.getDescription()); + mesWorkOrderDb.setReportedQty(mesWorkOrder.getReportedQty()); + mesWorkOrderDb.setUnCompleteQty(mesWorkOrder.getUnCompleteQty()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); + + mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); + String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName, mesPart); //更新工单 - updateMesWorkOrder(mesWorkOrderDb, userName,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT,mesWorkOrder.getNum()); + updateMesWorkOrder(mesWorkOrderDb, userName, MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT, mesWorkOrder.getNum()); //记录条码表&加工记录表 //insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb); insertMesProduceSn(mesPart, sn, userName, mesWorkOrder); @@ -1056,9 +1119,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())) { //保存数据 List mesProductOffLineList = new ArrayList<>(); - String nowTime = StringUtil.isEmpty(mesWorkOrder.getDescription())?TimeTool.getNowTime(true):mesWorkOrder.getDescription(); + String nowTime = StringUtil.isEmpty(mesWorkOrder.getDescription()) ? TimeTool.getNowTime(true) : mesWorkOrder.getDescription(); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime,mesBoms.size())); + mesProductOffLineList.add(creatMesProductOffLine(userName, mesWorkOrder, mesProductVersion, sn, mesBom, nowTime, mesBoms.size())); } mesProductOffLineRDao.saveAll(mesProductOffLineList); } @@ -1085,7 +1148,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { List mesProductOffLineList = new ArrayList<>(); String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBomList) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime, mesBomList.size())); + mesProductOffLineList.add(creatMesProductOffLine(userName, mesWorkOrder, mesProductVersion, sn, mesBom, nowTime, mesBomList.size())); } mesProductOffLineRDao.saveAll(mesProductOffLineList); } @@ -1241,8 +1304,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); if (Objects.isNull(mesWorkCenter)) { LOGGER.info("产线【%s】不存在:{}", workCenterCode ); - continue; -// MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode); + MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode); } MesWorkOrder item = new MesWorkOrder(); item.setOrganizeCode(organizeCode); @@ -1271,7 +1333,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); if (mesWorkOrderRDao.isExitByHql(orderPackBean)) { LOGGER.info("产线【%s】单号流水码生成重复:{}", workCenterCode ); - continue; + MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode); } item.setWorkOrderNo(orderNo); item.setPartName(mesProductionRecord.getPartName()); @@ -1325,7 +1387,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); if (Objects.isNull(mesProductVersion)) { LOGGER.info("物料{}产线{}生产版本{}信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion() ); -// MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion()); + MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion()); } return mesProductVersion; } @@ -1338,7 +1400,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).partSnParam(part.getPartSnParam()).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString(); } - private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, + private MesProductOffLine creatMesProductOffLine(String userName, MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, String sn, MesBom mesBom, String nowTime,Integer bomTotalSize) { MesProductOffLine newMesProductOffLine; newMesProductOffLine = new MesProductOffLine(); @@ -1365,7 +1427,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { newMesProductOffLine.setDescription(nowTime); newMesProductOffLine.setBomTotalSize(bomTotalSize); newMesProductOffLine.setBomCode(mesBom.getBomCode()); - ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); + ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); return newMesProductOffLine; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java index 156b399..360f404 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogCutOrderPrintService.java @@ -1,28 +1,23 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import com.alibaba.fastjson.JSONObject; 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; import org.springframework.util.StringUtils; -import java.util.ArrayList; import java.util.List; /** @@ -38,9 +33,6 @@ public class MesFunctionDialogCutOrderPrintService extends BaseSwsService implem @Autowired private IShippingDispatchService shippingDispatchService; - @Autowired - private IMesWorkOrderCutService workOrderCutService; - @Override public Boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { @@ -74,29 +66,6 @@ public class MesFunctionDialogCutOrderPrintService extends BaseSwsService implem List mesWorkOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean); - // 如果当前存在成品列表则直接返回 - if (CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList)) { - - //获取上下文生产扫/读信息:加工单 - List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); - - String cutWorkOrderNo = equipVariableCollectContextList.get(0).getEquipVariableValue(); - - // 查成品列表 - List mesCutSchemeFgs = workOrderCutService.queryCutSchemeFgList(cutWorkOrderNo, reqBean.getOrganizeCode()); - - mesWorkOrderCutFgDataContextList = new ArrayList<>(); - - for (MesCutSchemeFg mesCutSchemeFg : mesCutSchemeFgs) { - MesWorkOrderCutDetailModel cutDetailModel = new MesWorkOrderCutDetailModel(); - BeanUtils.copyProperties(mesCutSchemeFg, cutDetailModel); - mesWorkOrderCutFgDataContextList.add(cutDetailModel); - } - - productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, mesWorkOrderCutFgDataContextList); - - } - return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? dialogBean.unDialog() : dialogBean.obj(mesWorkOrderCutFgDataContextList); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java index d3a2b90..59404dc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutCheckStepService.java @@ -19,6 +19,7 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean; 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 com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -253,6 +254,12 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel(); BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel); + if (Objects.equal(cutScheme.getIsFree(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())) { + Map> map = mesWorkOrderCutDetailList.stream().collect(Collectors.groupingBy(MesWorkOrderCutDetail::getPartNo)); + workOrderCutDetailModel.setQty(map.get(mesCutSchemeFg.getPartNo()).get(0).getQty()); + workOrderCutDetailModel.setPackageQty(map.get(mesCutSchemeFg.getPartNo()).get(0).getPackageQty()); + } + workOrderCutDetailModel.setCutWorkOrderNo(cutWorkOrderNo); MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode()); @@ -260,7 +267,7 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService { MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(mesPackingDefine.getPackageTemplate(), reqBean.getOrganizeCode()); if (labelTemplate == null) - return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,零件号[%s]对应模板代码[%s]无效!", mesCutSchemeFg.getPartNo(), cutScheme.getCutCode())); + return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,零件号[%s]对应模板代码[%s]无效!", mesCutSchemeFg.getPartNo(), mesPackingDefine.getPackageTemplate())); MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo()); mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies()); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderExtModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderExtModel.java new file mode 100644 index 0000000..e085211 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesWorkOrderExtModel.java @@ -0,0 +1,16 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import lombok.Data; + +import java.io.Serializable; + +/** + * 继承工单表,工单MODEL + */ +@Data +public class MesWorkOrderExtModel extends MesWorkOrder implements Serializable { + + private static final long serialVersionUID = 610097769881711086L; + +}