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 6ebbc65..6a95442 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 @@ -15,41 +15,37 @@ import java.util.List; * @Modify: **/ public interface IMesWorkOrderService { - - @ApiOperation(value = "查询工单") - public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder); + MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder); @ApiOperation(value = "查询工单") MesWorkOrder findMesWorkOrderList(String organizeCode,String workOrderNo); @ApiOperation(value = "查询工单") - public List queryMesWorkOrderList(MesWorkOrder workOrder); + List queryMesWorkOrderList(MesWorkOrder workOrder); @ApiOperation(value = "查询工单") - public ListPager queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager); - - - void doProductReport(List mesProduceSns, String organizeCode, String userName); + ListPager queryMesWorkOrderListByPager(MesWorkOrder workOrder, Pager pager); /** * 获取未报工 * @param organizeCode * @return */ - public List getUnReportMesProduceSn(String organizeCode); + List getUnReportMesProduceSn(String organizeCode); List getPreDayReportMesProductionRecord(String organizeCode , List mesShiftList, String workCenterCode); - List getPreDayReportMesProduceSn(String organizeCode ,List mesProductionRecordList ); - + @ApiOperation("新增工单") List insertMesWorkOrder(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ); + @ApiOperation(value = "根据前一天待报工记录数插入工单并报工JOB(工单报工)") void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); - + @ApiOperation("非排序报工JOB-处理无工单") void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName); + @ApiOperation("非排序报工JOB-处理有工单") void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName); /** 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 a3d9827..dcaaf69 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 @@ -4,22 +4,20 @@ 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.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; 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.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.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; 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; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.quartz.DisallowConcurrentExecution; @@ -59,72 +57,58 @@ public class MesReportWorkByPreDayJob extends BaseMesScheduleJob { @Override public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { - String jobParam = this.getJobParam(); - JSONObject jsonObject = JSONUtil.parseObj(jobParam); - String organizeCode = jsonObject.getStr("organizeCode") == null ? "CK01" : jsonObject.getStr("organizeCode"); + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); 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(",")); - + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + //遍历系统参数指定的产线获取对应班次,找到早班的开始时间, + String workCenterCodes = configService.getCfgValue(wmsJobParamModel.getOrganizeCode(), "MES_PCN_WORK_CENTER_NO"); + List workCenterCodeList = Arrays.asList(workCenterCodes.split(",")); - for (String workCenterCode : workCenterCodeList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); - List mesShiftList = mesShiftRepository.findByHqlWhere(packBean); - //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; -// } - LOGGER.info("产线:{}报工mesProductionRecordList:{}", workCenterCode, mesProductionRecordList.size()); - //3.插入生产工单表 - List mesWorkOrders = workOrderService.insertMesWorkOrder(mesProductionRecordList, mesShiftList, organizeCode, userName); - if (CollectionUtils.isEmpty(mesWorkOrders)) { - continue; - - } - LOGGER.info("产线:{}报工mesWorkOrders:{}", workCenterCode, mesWorkOrders.size()); - //4.根据产线+物料产生的工单报工 - try { - for (MesWorkOrder mesWorkOrder : mesWorkOrders) { - List mesProductionRecords = mesProductionRecordList.stream().filter( - w -> w.getWorkCenterCode().equalsIgnoreCase(mesWorkOrder.getWorkCenterCode()) - && w.getPartNo().equalsIgnoreCase(mesWorkOrder.getPartNo())).collect(Collectors.toList()); - workOrderService.doPcnJobProductReport(mesProductionRecords, mesShiftList, organizeCode, userName, mesWorkOrder); - } - for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { - 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()); + for (String workCenterCode : workCenterCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(wmsJobParamModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); + List mesShiftList = mesShiftRepository.findByHqlWhere(packBean); + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + List mesProductionRecordList = workOrderService.getPreDayReportMesProductionRecord(wmsJobParamModel.getOrganizeCode(), mesShiftList, workCenterCode); + 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 { + for (MesWorkOrder mesWorkOrder : mesWorkOrders) { + List 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 : mesProductionRecordList) { + 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); + } + productionRecordRao.saveAll(mesProductionRecordList); + } catch (ImppBusiException e) { + LOGGER.error("产线:{}报工失败:{}", workCenterCode, e.getErrorDetail()); } - mesProductionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); - mesProductionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - 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; } - + }else{ + log.info("排序报工job 参数不能为空"); } } } 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 ead7c80..7eab08f 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 @@ -204,117 +204,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { return packBean; } - @Override - public void doProductReport(List mesProduceSnList, String organizeCode, String userName) { - //新增初始化 todo - Map> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo)); - Map mesPartMap = new HashMap<>(); - MesPart mesPart; - //查询工单状态 - Integer[] orderStatus = new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()}; - for (Map.Entry> mesProduceSn : mesWorkOrderMap.entrySet()) { - List mesWorkOrderList = mesProduceSn.getValue(); - //获取物料信息 - if (mesPartMap.containsKey(mesProduceSn.getKey())) { - mesPart = mesPartMap.get(mesProduceSn.getKey()); - } else { - //查询物料信息 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean); - mesPart = mesPartRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesPart)) { - throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey())); - } - mesPartMap.put(mesProduceSn.getKey(), mesPart); - } - //根据物料获取已发布的工单 - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean); - MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean); - if (Objects.isNull(oldMesWorkOrder)) { - throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo())); - } - //查询工作中心 - ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean); - MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesWorkCenter)) { - throw new ImppBusiException(String.format("产线【%s】不存在", oldMesWorkOrder.getWorkCenterCode())); - } - //获取生产版本 - ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", mesPart.getPartNo())); - } - //物料+生产版本获取bom信息 - ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesProductVersion.getAlternativePartList(), "bomVersion", ddlPackBean); - List mesBoms = mesBomRDao.findByHqlWhere(ddlPackBean); - if (CollectionUtils.isEmpty(mesBoms)) { - throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在", - mesPart.getPartNo(), mesProductVersion.getProductVersion())); - } - oldMesWorkOrder.setNum(mesWorkOrderList.size()); - oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); - - //更新工单状态 - double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty()); - oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0); - if (oldMesWorkOrder.getReportedQty() > oldMesWorkOrder.getQty()) { - throw new ImppBusiException(String.format("工单报工数量【%s】大于工单数量【%s】,不允许报工", - oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())); - } else if (Objects.equals(oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())) { - oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - } else { - oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); - } - ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName); - oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); - workOrderExtService.update(oldMesWorkOrder); - //保存数据 - List mesProductOffLineList = new ArrayList<>(); - MesProductOffLine newMesProductOffLine; - for (MesProduceSn produceSn : mesWorkOrderList) { - String nowTime = TimeTool.getNowTime(true); - for (MesBom mesBom : mesBoms) { - newMesProductOffLine = new MesProductOffLine(); - newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); - newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.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(oldMesWorkOrder.getProductVersion()); - newMesProductOffLine.setSerialNumber(produceSn.getSerialNumber()); - newMesProductOffLine.setUnit(mesBom.getUnit()); - newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); - newMesProductOffLine.setWorkOrderNo(oldMesWorkOrder.getWorkOrderNo()); - newMesProductOffLine.setWorkOrderType(oldMesWorkOrder.getWorkOrderType()); - newMesProductOffLine.setWorkCenterCode(oldMesWorkOrder.getWorkCenterCode()); - newMesProductOffLine.setWorkCellCode(oldMesWorkOrder.getWorkCellCode()); - newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType()); - newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter()); - newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); - newMesProductOffLine.setDescription(nowTime); - newMesProductOffLine.setBomTotalSize(mesBoms.size()); - ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); - mesProductOffLineList.add(newMesProductOffLine); - } - } - mesProductOffLineRDao.saveAll(mesProductOffLineList); - } - } - public void doPcnJobProductReport(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName, MesWorkOrder mesWorkOrderDb) { //查询物料信息 @@ -749,6 +639,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(productionRecord.getCompleteDateTime()); + newMesProductOffLine.setProductionRecordId(productionRecord.getId().toString()); ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); return newMesProductOffLine; } @@ -1024,15 +915,6 @@ public class MesWorkOrderService implements IMesWorkOrderService { } @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); - DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean); - return mesProduceSnRao.findByHqlWhere(snPackBean); - } - - @Override public void doProductReport(MesWorkOrder mesWorkOrder, String userName) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(mesWorkOrder.getId(),"id",packBean);