From 5e715f331a27e0865446ec74fc16011918acfbe5 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 26 Jun 2024 15:33:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=89=8D=E4=B8=80?= =?UTF-8?q?=E5=A4=A9=E5=BE=85=E6=8A=A5=E5=B7=A5=E8=AE=B0=E5=BD=95=E6=95=B0?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E5=B7=A5=E5=8D=95=E5=B9=B6=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/busi/IMesWorkOrderService.java | 10 + .../apiservice/controller/busi/TestController.java | 64 +++- .../schedulejob/MesReportWorkByPreDayJob.java | 96 ++++++ .../serviceimpl/busi/MesWorkOrderService.java | 358 +++++++++++++++++++++ 4 files changed, 527 insertions(+), 1 deletion(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java 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 ffea1b4..6ba259c 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 @@ -3,6 +3,8 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import io.swagger.annotations.ApiOperation; @@ -36,4 +38,12 @@ public interface IMesWorkOrderService { * @return */ List getUnReportMesProduceSn(String organizeCode); + + List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); + + List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); + + public List insertMesWorkOrder(List mesProduceSns,List mesShiftList,String organizeCode, String userName ); + + void doPcnJobProductReport(List mesProduceSns,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/controller/busi/TestController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java index da061cc..908277a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/TestController.java @@ -1,22 +1,31 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShiftRepository; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping(MesCommonConstant.MES_YANFEN + "/test") @@ -25,6 +34,15 @@ public class TestController { private IMesEquipmentLogExtService mesEquipmentLogExtService; + @Autowired + private IMesWorkOrderService workOrderService; + + @Autowired + private MesProductionRecordRepository productionRecordRao; + @Autowired + private MesShiftRepository mesShiftRepository; + @Autowired + private IMesConfigService configService; @GetMapping("/equipment/log/query") @ApiOperation(value = "查询设备交互") public ResultBean queryReworkTaskByPager(String organizeCode, Integer equipId) { @@ -37,4 +55,48 @@ public class TestController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + @GetMapping("/reportWorkByPreDayJob") + @ApiOperation(value = "查询设备交互") + public ResultBean queryReworkTaskByPager(String organizeCode) { + try { + //遍历系统参数指定的产线获取对应班次,找到早班的开始时间, + String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_WORK_CENTER_NO"); + List workCenterCodeList = Arrays.asList(workCenterCodes.split(",")); + String userName = "REPORT_PRE_DAY_JOB"; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + List mesShiftListAll = mesShiftRepository.findByHqlWhere(packBean); + for (String workCenterCode : workCenterCodeList) { + List mesShiftList = mesShiftListAll.stream().filter(s -> s.getWorkCenterCode().equalsIgnoreCase(workCenterCode)).collect(Collectors.toList()); + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + List mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(organizeCode,mesShiftList,workCenterCode); + if(CollectionUtils.isEmpty(mesProductionRecordList)){ + continue; + } + //2. 查询 mesProduceSn + List unReportMesProduceSn = workOrderService.getPreDayReportMesProduceSn(organizeCode,mesProductionRecordList); + if(CollectionUtils.isEmpty(unReportMesProduceSn)){ + continue; + } + List mesWorkOrders = workOrderService.insertMesWorkOrder(unReportMesProduceSn, mesShiftList,organizeCode, userName); + if(CollectionUtils.isEmpty(mesWorkOrders)){ + continue; + } + //根据产线+物料产生的工单报工 + for (MesWorkOrder mesWorkOrder : mesWorkOrders) { + List mesProduceSnList = unReportMesProduceSn.stream().filter(w -> w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); + workOrderService.doPcnJobProductReport(mesProduceSnList,mesShiftList,organizeCode,userName, mesWorkOrder); + } + for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { + mesProductionRecord.setReportStatus(20); + ConvertBean.serviceModelUpdate(mesProductionRecord, userName); + } + productionRecordRao.saveAll(mesProductionRecordList); + } + return ResultBean.success("查询成功").setResultList(null); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(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 new file mode 100644 index 0000000..023c3e3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesReportWorkByPreDayJob.java @@ -0,0 +1,96 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesShiftRepository; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author 根据前一天待报工记录数插入工单并报工 + * @version 1.0 + * @date 2024/6/26 10:26 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("根据前一天待报工记录数插入工单并报工job") +public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { + + @Autowired + private IMesWorkOrderService workOrderService; + + @Autowired + private MesProductionRecordRepository productionRecordRao; + @Autowired + private MesShiftRepository mesShiftRepository; + @Autowired + private IMesConfigService configService; + public MesReportWorkByPreDayJob() { + super(MesReportWorkByPreDayJob.class, "根据前一天待报工记录数插入工单并报工JOB"); + } + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + String jobParam = this.getJobParam(); + JSONObject jsonObject= JSONUtil.parseObj(jobParam); + String organizeCode = jsonObject.getStr("organizeCode"); + String userName = "REPORT_PRE_DAY_JOB"; + if (null == organizeCode){ + log.error("请添加需要报工的工厂代码!"); + return; + } + //遍历系统参数指定的产线获取对应班次,找到早班的开始时间, + String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_WORK_CENTER_NO"); + List workCenterCodeList = Arrays.asList(workCenterCodes.split(",")); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + List mesShiftListAll = mesShiftRepository.findByHqlWhere(packBean); + for (String workCenterCode : workCenterCodeList) { + List mesShiftList = mesShiftListAll.stream().filter(s -> s.getWorkCenterCode().equalsIgnoreCase(workCenterCode)).collect(Collectors.toList()); + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + List mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(organizeCode,mesShiftList,workCenterCode); + if(CollectionUtils.isEmpty(mesProductionRecordList)){ + continue; + } + //2. 查询 mesProduceSn + List unReportMesProduceSn = workOrderService.getPreDayReportMesProduceSn(organizeCode,mesProductionRecordList); + if(CollectionUtils.isEmpty(unReportMesProduceSn)){ + continue; + } + List mesWorkOrders = workOrderService.insertMesWorkOrder(unReportMesProduceSn, mesShiftList,organizeCode, userName); + if(CollectionUtils.isEmpty(mesWorkOrders)){ + continue; + } + //根据产线+物料产生的工单报工 + for (MesWorkOrder mesWorkOrder : mesWorkOrders) { + List mesProduceSnList = unReportMesProduceSn.stream().filter(w -> w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); + workOrderService.doPcnJobProductReport(mesProduceSnList,mesShiftList,organizeCode,userName, mesWorkOrder); + } + for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { + mesProductionRecord.setReportStatus(20); + ConvertBean.serviceModelUpdate(mesProductionRecord, userName); + } + productionRecordRao.saveAll(mesProductionRecordList); + } + } +} 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 3b00a21..bbdc9ec 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 @@ -1,25 +1,37 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -56,7 +68,17 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Autowired private MesProduceSnRepository mesProduceSnRao; + @Autowired + private ISyncFuncService syncFuncService; + @Autowired + private MesWorkOrderLogRepository mesWorkOrderLogRepository; + @Autowired + private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao; + @Autowired + private MesShiftRepository mesShiftRepository; + @Autowired + private IMesConfigService configService; @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -217,7 +239,196 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesProductOffLineRDao.saveAll(mesProductOffLineList); } } + public void doPcnJobProductReport(List mesProduceSns,List mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { + + //查询物料信息 + DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getPartNo(), "partNo", ddlPackBeanPart); + MesPart mesPart = mesPartRDao.getByProperty(ddlPackBeanPart); + if (null == mesPart) { + MesPcnException.throwMesBusiException("物料【%s】信息不存在", mesWorkOrderDb.getPartNo()); + } + + //查询产线信息 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesWorkOrderDb.getWorkCenterCode(), "workCenterCode", ddlPackBean); + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesWorkCenter)) { + MesPcnException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); + } + //获取生产版本 + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); + //物料+生产版本获取bom信息 + List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); + //报工类型 + if (MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrderDb.getReportType()) { + mesWorkOrderDb.setReportedQty(MathOperation.add(mesWorkOrderDb.getNum(), mesWorkOrderDb.getReportedQty())); + //更新工单状态 + double unCompleteQty = MathOperation.sub(mesWorkOrderDb.getQty(), mesWorkOrderDb.getReportedQty()); + mesWorkOrderDb.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); + if (mesWorkOrderDb.getReportedQty() > mesWorkOrderDb.getQty()) { + MesPcnException.throwMesBusiException("工单报工数量【%s】大于工单数量【%s】,不允许报工", + mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty()); + } else if (Objects.equals(mesWorkOrderDb.getReportedQty(), mesWorkOrderDb.getQty())) { + mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else { + mesWorkOrderDb.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + } else { + //报工调整数量加- + mesWorkOrderDb.setAdjustQty((MathOperation.add(mesWorkOrderDb.getNum(), mesWorkOrderDb.getAdjustQty()))); + //冲销数量大于工单完成数量报错 + if (mesWorkOrderDb.getAdjustQty() > mesWorkOrderDb.getReportedQty()) { + MesPcnException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", + mesWorkOrderDb.getAdjustQty(), mesWorkOrderDb.getReportedQty()); + } + } + //更新工单 + updateMesWorkOrder(mesWorkOrderDb, userName ); + + //生成条码 todo 有条码 不生成 + + //保存数据 +// List mesProductOffLineList = new ArrayList<>(); +// for (MesBom mesBom : mesBoms) { +// mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false)); +// } +// mesProductOffLineService.insertBatch(mesProductOffLineList); + + //保存数据 + List mesProductOffLineList = new ArrayList<>(); + MesProductOffLine newMesProductOffLine; + for (MesProduceSn produceSn : mesProduceSns) { + for (MesBom mesBom : mesBoms) { + newMesProductOffLine = new MesProductOffLine(); + newMesProductOffLine.setReportPartNo(mesWorkOrderDb.getPartNo()); + newMesProductOffLine.setReportPartNameRdd(mesWorkOrderDb.getPartName()); + newMesProductOffLine.setItemPartNo(mesBom.getItemPartNo()); + newMesProductOffLine.setItemPartName(mesBom.getItemPartName()); + newMesProductOffLine.setItemQty(mesBom.getItemQty()); + newMesProductOffLine.setAlort(mesProductVersion.getReceiveInventoryPoint()); + newMesProductOffLine.setStgeLoc(mesProductVersion.getShipInventoryPoint()); + newMesProductOffLine.setQty(1d); + newMesProductOffLine.setReportSn(produceSn.getProductSn()); + newMesProductOffLine.setBomVersion(mesWorkOrderDb.getProductVersion()); + newMesProductOffLine.setSerialNumber(produceSn.getProductSn()); + newMesProductOffLine.setUnit(mesBom.getUnit()); + newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); + newMesProductOffLine.setWorkOrderNo(mesWorkOrderDb.getWorkOrderNo()); + newMesProductOffLine.setWorkCenterCode(mesWorkOrderDb.getWorkCenterCode()); + newMesProductOffLine.setWorkCellCode(mesWorkOrderDb.getWorkCellCode()); + newMesProductOffLine.setReportType(mesWorkOrderDb.getReportType()); + newMesProductOffLine.setSapWorkCenter(mesWorkOrderDb.getErpWorkCenter()); + newMesProductOffLine.setOrganizeCode(organizeCode); + + ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); + mesProductOffLineList.add(newMesProductOffLine); + } + } + mesProductOffLineRDao.saveAll(mesProductOffLineList); + } + private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) { + //修改工单,需要重新同步 + mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesWorkOrder, userName); + workOrderRepository.update(mesWorkOrder); + //保存记录 + saveMesWorkOrderLog(mesWorkOrder); + } + public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { + MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); + BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); + mesWorkOrderLogRepository.insert(workOrderLog); + } + public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { + List bomData = new ArrayList<>(); + // 递归展开 BOM + expendBomChild(organizeCode, mesPart.getPartNo(), bomVersion, bomData); + + if (bomData.size() == 0) { + MesPcnException.throwMesBusiException("零件号 %s 没找找到 ERP 同步的原始 BOM 数据,请检查接口是否正常!", mesPart.getPartNo()); + } + Iterator iterator = bomData.iterator(); + while (iterator.hasNext()) { + MesBom item = iterator.next(); + // 删除虚零件 + if (Objects.equals("X", item.getPartType())) { + iterator.remove(); + } else { + item.setPartNo(mesPart.getPartNo()); + item.setPartName(mesPart.getPartName()); + } + } + + Map summaryBomMap = new HashMap<>(); + + for (MesBom item : bomData) { + String key = String.format("%s:%s", item.getPartNo().toUpperCase().trim(), + item.getItemPartNo().toUpperCase().trim()); + if (!summaryBomMap.containsKey(key)) { + summaryBomMap.put(key, item); + } else { + MesBom tempItem = summaryBomMap.get(key); + // 子零件重复的累加数量 + tempItem.setItemQty(MathOperation.add(tempItem.getItemQty(), item.getItemQty())); + } + } + // 返回汇总数据 + return new ArrayList<>(summaryBomMap.values()); + } + /** + * 递归展开 BOM + * + * @param organizeCode 工厂代码 + * @param partNo 父零件号 + * @param bomData 存放 BOM 数据的集合 + */ + private void expendBomChild(String organizeCode, String partNo, String bomVersion, List bomData) { + List bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion); + + for (MesBom item : bomDetails) { + MesBom newItem = new MesBom(); + BeanUtils.copyProperties(item, newItem); + // 处理父零件用量不为 1 的情况 + if (newItem.getQty() != 1.0 && newItem.getQty() > 0.0) { + Double rateQty = MathOperation.div(newItem.getItemQty(), newItem.getQty(), 8); + newItem.setQty(1.0); + newItem.setItemQty(rateQty); + } + // 加入到 BOM 清单中 + bomData.add(newItem); + // 如果有子阶,继续递归 + if (Objects.equals("X", item.getPartType())) { + expendBomChild(organizeCode, newItem.getItemPartNo(), null, bomData); + } + } + } + public List findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(bomVersion, "bomVersion", ddlPackBean); + DdlPreparedPack.getStringSmallerPack(TimeTool.getNowTime(true), "effStartTime", ddlPackBean); + DdlPreparedPack.getOrderBy("effStartTime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), ddlPackBean); + List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); + if (org.springframework.util.CollectionUtils.isEmpty(mesBoms)) { + MesPcnException.throwMesBusiException("物料【%s】生产版本【%s】对应bom信息不存在", partNo, bomVersion); + } + MesBom next = mesBoms.iterator().next(); + //如果存在多个bomCode取最新的一个 + return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); + } + private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getErpWorkCenter(), "workCenterCode", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); + MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); + if (null == mesProductVersion) { + MesPcnException.throwMesBusiException("物料【%s】生产版本信息不存在", mesWorkOrder.getPartNo()); + } + return mesProductVersion; + } @Override public List getUnReportMesProduceSn(String organizeCode) { List mesProduceSnList = new ArrayList<>(); @@ -237,6 +448,27 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringEqualPack(workOrderNo,"workOrderNo",snPackBean); return mesProduceSnRao.findByHqlWhere(snPackBean); } + @Override + public List getPreDayReportMesProductionRecord(String organizeCode,List mesShiftList, String workCenterCode ) { + + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); + DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); + //获取前一天的早班到当天早班的区间的所有加工记录,统计个数 + DdlPreparedPack.timeBuilder(TimeTool.getToday()+" 08:00:00", + new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1))+" 08:00:00", + "completeDateTime", ddlPackBean, false); + + return productionRecordRao.findByHqlWhere(ddlPackBean); + } + @Override + public List getPreDayReportMesProduceSn(String organizeCode,List mesProductionRecordList ) { + DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()), + "productSn",snPackBean); + return mesProduceSnRao.findByHqlWhere(snPackBean); + } private void saveMesProductPlan(MesWorkOrder bean, boolean isInsert, boolean isReport) { if (StringUtil.isEmpty(bean.getPlanOrderNo())) { @@ -302,4 +534,130 @@ public class MesWorkOrderService implements IMesWorkOrderService { } } + @Override + public List insertMesWorkOrder(List mesProduceSns,List mesShiftList, String organizeCode, String userName) { + List mesWorkOrderList=new ArrayList<>(); + Map> snListMap = mesProduceSns.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() +"="+ sn.getPartNo())); + for (Map.Entry> stringListEntry : snListMap.entrySet()) { + List value = stringListEntry.getValue(); + MesProduceSn mesProduceSn = value.get(0); + String[] split = stringListEntry.getKey().split("="); + String workCenterCode = split[0]; + String partNo = split[1]; + + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesWorkCenter)) { + MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode); + } + MesWorkOrder item=new MesWorkOrder(); + item.setOrganizeCode(organizeCode); + item.setWorkCenterCode(workCenterCode); + item.setPartNo(partNo); + item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()); + item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); + List collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("1")).collect(Collectors.toList()); + MesShift mesShift= collect.get(0); + item.setShiftCode(mesShift.getShiftCode()); + item.setShiftCode(mesShift.getShiftName()); + String today = TimeTool.getToday(); + item.setPlanStartTime(today+" "+mesShift.getStartTime()+":00"); + item.setPlanEndTime(today+" "+mesShift.getEndTime()+":00"); + + //生成工单号 + List orderList=new ArrayList<>(); + GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_CENTER_ORDER_NO"); + genSerialNoModel.setPartNo(workCenterCode); + orderList = syncFuncService.syncSerialNo(genSerialNoModel,userName, organizeCode, 1).getResultList(); + + String orderNo = orderList.get(0); + DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); + if (mesWorkCenterRDao.isExitByHql(orderPackBean)) { + MesPcnException.throwMesBusiException("单号流水码生成重复"); + } + item.setWorkOrderNo(orderNo); + //校验标识 + //若工单类型为排序 + List saveMesWorkOrderToWms = new ArrayList<>(); + if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { + //校验产线类型和工单类型是否匹配 + if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { + MesPcnException.throwMesBusiException("产线【%s】类型为【%s】,请选择非排序产线", mesWorkCenter.getWorkCenterCode(), + MesExtEnumUtil.WORK_CENTER_TYPE.valueOfDescription(mesWorkCenter.getCenterType())); + } + + //校验物料生产版本是否存在 + MesProductVersion mesProductVersion = checkMesProductVersion(item); + item.setProductVersion(mesProductVersion.getProductVersion()); + //获取bom信息 + List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); + //发送工单信息给WMS + saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); + } + //物料名称不存在,从物料信息中获取 + + item.setPartName(mesProduceSn.getPartName()); + //生产时间新增取当天 + item.setProduceTime(TimeTool.getToday()); + item.setUnCompleteQty(0d); + +// if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()){ +// //生产工单-非排序手工插单,关闭该零件当天之前日期非排序工单 +// List partNoList = Collections.singletonList(item.getPartNo()); +// deleteUnSortOrder(orderNo,partNoList); +// } + item.setQty(value.stream().mapToDouble(MesProduceSn::getQty).sum()); + item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelInitialize(item, userName); + MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); + //保存发送WMS数据 + if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { + mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms); + } + saveMesWorkOrderLog(mesWorkOrder); + mesWorkOrderList.add(mesWorkOrder); + } + + return mesWorkOrderList; + } + + public void deleteUnSortOrder(String organizeCode, List partNoList) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(partNoList, "partNo", ddlPackBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(), "workOrderType", ddlPackBean); + DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "planStartTime", ddlPackBean); + DdlPreparedPack.getNumberSmallerPack(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue(), "workOrderStatus", ddlPackBean); + workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"}, + new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean); + } + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { + List mesWorkOrderToWmsList = new ArrayList<>(); + MesWorkOrderToWms mesWorkOrderToWms = null; + for (MesBom mesBom : mesBomList) { + mesWorkOrderToWms = new MesWorkOrderToWms(); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + mesWorkOrderToWms.setUnit(mesBom.getUnit()); + mesWorkOrderToWms.setItemPartNo(mesBom.getItemPartNo()); + mesWorkOrderToWms.setItemPartName(mesBom.getItemPartName()); + mesWorkOrderToWms.setItemUnit(mesBom.getItemUnit()); + mesWorkOrderToWms.setItemQty(MathOperation.mul(mesWorkOrder.getQty(), mesBom.getItemQty())); + ConvertBean.serviceModelInitialize(mesWorkOrderToWms, mesWorkOrderToWms.getCreateUser()); + mesWorkOrderToWmsList.add(mesWorkOrderToWms); + } + return mesWorkOrderToWmsList; + } + private MesProductVersion checkMesProductVersion(MesWorkOrder item) { + DdlPackBean 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)) { + MesPcnException.throwMesBusiException("物料【%s】产线【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getWorkCenterCode(), item.getProductVersion()); + } + return mesProductVersion; + } } From 948a70f491b337e288d848f39fa695ce86152c07 Mon Sep 17 00:00:00 2001 From: gsz Date: Wed, 26 Jun 2024 17:04:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=89=8D=E4=B8=80?= =?UTF-8?q?=E5=A4=A9=E5=BE=85=E6=8A=A5=E5=B7=A5=E8=AE=B0=E5=BD=95=E6=95=B0?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E5=B7=A5=E5=8D=95=E5=B9=B6=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedulejob/MesReportWorkByPreDayJob.java | 53 ++++++++++++++-------- .../serviceimpl/busi/MesWorkOrderService.java | 11 +++-- 2 files changed, 41 insertions(+), 23 deletions(-) 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 023c3e3..c11e30b 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 @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesShift; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesShiftRepository; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -46,16 +47,18 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { private MesShiftRepository mesShiftRepository; @Autowired private IMesConfigService configService; + public MesReportWorkByPreDayJob() { super(MesReportWorkByPreDayJob.class, "根据前一天待报工记录数插入工单并报工JOB"); } + @Override public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { String jobParam = this.getJobParam(); - JSONObject jsonObject= JSONUtil.parseObj(jobParam); + JSONObject jsonObject = JSONUtil.parseObj(jobParam); String organizeCode = jsonObject.getStr("organizeCode"); String userName = "REPORT_PRE_DAY_JOB"; - if (null == organizeCode){ + if (null == organizeCode) { log.error("请添加需要报工的工厂代码!"); return; } @@ -68,29 +71,43 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { for (String workCenterCode : workCenterCodeList) { List mesShiftList = mesShiftListAll.stream().filter(s -> s.getWorkCenterCode().equalsIgnoreCase(workCenterCode)).collect(Collectors.toList()); //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 - List mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(organizeCode,mesShiftList,workCenterCode); - if(CollectionUtils.isEmpty(mesProductionRecordList)){ + List mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(organizeCode, mesShiftList, workCenterCode); + if (CollectionUtils.isEmpty(mesProductionRecordList)) { continue; } //2. 查询 mesProduceSn - List unReportMesProduceSn = workOrderService.getPreDayReportMesProduceSn(organizeCode,mesProductionRecordList); - if(CollectionUtils.isEmpty(unReportMesProduceSn)){ - continue; - } - List mesWorkOrders = workOrderService.insertMesWorkOrder(unReportMesProduceSn, mesShiftList,organizeCode, userName); - if(CollectionUtils.isEmpty(mesWorkOrders)){ + List unReportMesProduceSn = workOrderService.getPreDayReportMesProduceSn(organizeCode, mesProductionRecordList); + if (CollectionUtils.isEmpty(unReportMesProduceSn)) { continue; } - //根据产线+物料产生的工单报工 - for (MesWorkOrder mesWorkOrder : mesWorkOrders) { - List mesProduceSnList = unReportMesProduceSn.stream().filter(w -> w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); - workOrderService.doPcnJobProductReport(mesProduceSnList,mesShiftList,organizeCode,userName, mesWorkOrder); + LOGGER.info("产线:{}报工mesWorkOrders:{}", workCenterCode, unReportMesProduceSn); + //3.插入生产工单表 + List mesWorkOrders = workOrderService.insertMesWorkOrder(unReportMesProduceSn, mesShiftList, organizeCode, userName); + if (CollectionUtils.isEmpty(mesWorkOrders)) { + continue; } - for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { - mesProductionRecord.setReportStatus(20); - ConvertBean.serviceModelUpdate(mesProductionRecord, userName); + LOGGER.info("产线:{}报工mesWorkOrders:{}", workCenterCode, mesWorkOrders); + //4.根据产线+物料产生的工单报工 + try { + for (MesWorkOrder mesWorkOrder : mesWorkOrders) { + List mesProduceSnList = unReportMesProduceSn.stream().filter(w -> w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); + workOrderService.doPcnJobProductReport(mesProduceSnList, mesShiftList, organizeCode, userName, mesWorkOrder); + for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { + mesProductionRecord.setReportStatus(20); + ConvertBean.serviceModelUpdate(mesProductionRecord, userName); + } + productionRecordRao.saveAll(mesProductionRecordList); + } + } catch (ImppBusiException e) { + LOGGER.error("产线:{}报工失败:{}", workCenterCode, e.getErrorDetail()); +// for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { +// mesProductionRecord.setReportStatus(40); +// ConvertBean.serviceModelUpdate(mesProductionRecord, userName); +// } +// productionRecordRao.saveAll(mesProductionRecordList); + continue; } - productionRecordRao.saveAll(mesProductionRecordList); + } } } 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 7a8aba5..429ddcd 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 @@ -1,10 +1,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; @@ -21,11 +19,11 @@ import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.repository.shipping.MesWorkOrderToWmsRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -48,6 +46,7 @@ import java.util.stream.Stream; @Slf4j public class MesWorkOrderService implements IMesWorkOrderService { + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderService.class); @Autowired private MesWorkOrderRepository workOrderRepository; @Autowired @@ -283,6 +282,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesWorkOrderDb.getAdjustQty(), mesWorkOrderDb.getReportedQty()); } } + LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo()); //更新工单 updateMesWorkOrder(mesWorkOrderDb, userName ); @@ -295,6 +295,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { // } // mesProductOffLineService.insertBatch(mesProductOffLineList); + LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(),mesProduceSns.size()); //保存数据 List mesProductOffLineList = new ArrayList<>(); MesProductOffLine newMesProductOffLine; @@ -456,7 +457,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); - DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); + DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_50.getValue(),"reportStatus",ddlPackBean); //获取前一天的早班到当天早班的区间的所有加工记录,统计个数 DdlPreparedPack.timeBuilder(TimeTool.getToday()+" 08:00:00", new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1))+" 08:00:00",