diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java index 72a837c..ee6e410 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductVersionService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -13,4 +14,7 @@ public interface IMesProductVersionService extends IBaseMesService queryMesProductVersionByPagerExt(MesProductVersion mesProductVersion, Pager pager); + @ApiOperation("根据物料生产版本查询生产版本") + MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 378465e..b374e04 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -64,4 +64,7 @@ public interface IMesWorkOrderService extends IBaseMesService { void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName, MesWorkOrder mesWorkOrder); + @ApiOperation("MES工单推送给WMS") + void doSendMesWorkOrderToWms(String organizeCode,Integer pageSize,String userName); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java index 37634ef..21387f3 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToWmsService.java @@ -17,7 +17,7 @@ import java.util.List; public interface IMesWorkOrderToWmsService extends IBaseMesService { @ApiOperation(value = "发送工单给Wms") - List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList); + List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList, String userName, boolean flag); @ApiOperation("根据工单号查询工单发送给WMS数据") List findMesWorkOrderToWms(String workOrderNo, String organizeCode); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java index 4ae6482..fcffabd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/aspect/MesRepositoryAspect.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.apiservice.aspect; -import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import org.aspectj.lang.JoinPoint; @@ -80,24 +79,22 @@ public class MesRepositoryAspect { @After("controllerPointcut()") public void after(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); - if (methodName.startsWith("updateByProperties")) { + if (methodName.equals("updateByProperties")) { try { Object[] args = joinPoint.getArgs(); Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args.length == 4) { if (args[2].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], args[1], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), args[0], args[1], "modifyDatetime", TimeTool.getNowTime(true)); method.invoke(joinPoint.getTarget(), args[0], args[1], "systemSyncStatus", CommonEnumUtil.FALSE); } } else if (args.length == 3) { if (args[0].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}, args[2]); + method.invoke(joinPoint.getTarget(), new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}, args[2]); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } @@ -110,10 +107,9 @@ public class MesRepositoryAspect { if (args.length == 3) { Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); if (args[1].getClass().isArray()) { - method.invoke(joinPoint.getTarget(), args[0], new String[]{"modifyDatetime", "systemSyncStatus"}, - new Object[]{TimeTool.getNowTime(true), CommonEnumUtil.FALSE}); + method.invoke(joinPoint.getTarget(), args[0], new String[]{"systemSyncStatus"}, + new Object[]{CommonEnumUtil.FALSE}); } else { - method.invoke(joinPoint.getTarget(), "modifyDatetime", TimeTool.getNowTime(true), args[2]); method.invoke(joinPoint.getTarget(), "systemSyncStatus", CommonEnumUtil.FALSE, args[2]); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 750cd27..75c7d15 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEquipment; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; @@ -292,4 +293,17 @@ public class MesWhiteListController extends MesBaseController { } return ResultBean.success("执行成功"); } + + @GetMapping(value = "/mesWorkOrderSendToWmsJob") + @ApiOperation(value = "MES工单推送给WMS JOB") + public ResultBean doSendMesWorkOrderToWms(String organizeCode, Integer pageSize) { + try { + mesWorkOrderService.doSendMesWorkOrderToWms(organizeCode, pageSize, MesExtConstWords.JOB); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException e) { + return ResultBean.fail(e).build(); + } catch (Exception e) { + return ResultBean.fail(e); + } + } } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java new file mode 100644 index 0000000..09565bf --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderSendToWmsJob.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.pojo.model.wms.WmsJobParamModel; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : MES工单推送给WMS + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/11/13 16:40 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("MES工单推送给WMS JOB") +public class MesWorkOrderSendToWmsJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderSendToWmsJob.class); + + private static final long serialVersionUID = -321526601595924818L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + public MesWorkOrderSendToWmsJob() { + super(MesWorkOrderSendToWmsJob.class, "MES工单推送给WMS JOB"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + + List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); + if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { + for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { + try { + long startTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- start", wmsJobParamModel.getOrganizeCode()); + mesWorkOrderService.doSendMesWorkOrderToWms(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), MesExtConstWords.JOB); + long endTime = System.currentTimeMillis(); + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB --- end --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + LOGGER.info("工厂{}根据拉动组和生产工单产生拉动单JOB 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } + } + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java index 6a96e42..a6d5f45 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java @@ -174,8 +174,7 @@ public class MesEquipmentVariableService extends BaseMesService getClientHandleId(int size, String organizeCode, String userName) { GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.CLIENT_HANDLE_ID); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); - return resultList; + return syncFuncService.syncSerialNo(genSerialNoModel.organizeCode(organizeCode), userName, organizeCode, size).getResultList(); } private MesEquipment getMesEquipment(String organizeCode,String equipmentCode) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java index d72dc67..8f98f96 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductVersionService.java @@ -5,7 +5,9 @@ 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.MesProductVersion; import cn.estsh.i3plus.pojo.mes.repository.MesProductVersionRepository; import lombok.extern.slf4j.Slf4j; @@ -44,4 +46,14 @@ public class MesProductVersionService extends BaseMesService List mesProductVersions = mesProductVersionRepository.findByHqlWherePage(productVersionQueryPackBean, pager); return new ListPager<>(mesProductVersions, pager); } + + @Override + public MesProductVersion getMesProductVersionByPartNoAndProductVersion(String organizeCode, String partNo, String productVersion) { + if (StringUtil.isEmpty(organizeCode) || StringUtil.isEmpty(partNo)) return null; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, ddlPackBean); + return baseRDao.getByProperty(ddlPackBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 15b531e..866445d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -271,6 +271,7 @@ public class MesPullingOrderInfoService extends BaseMesService implements @Autowired private MesCustomerPartRepository mesCustomerPartRDao; @Autowired - private IMesPartSapService iMesPartSapService; - @Autowired private IMesMoveRuleService mesMoveRuleService; @Autowired private MesProdRuleSortCfgRepository mesProdRuleSortCfgRDao; @@ -106,8 +102,6 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private MesWorkOrderLogRepository mesWorkOrderLogRepository; @Autowired - private MesWorkOrderToWmsRepository mesWorkOrderToWmsRDao; - @Autowired private MesBomRepository mesBomRDao; @Autowired private MesPartRepository mesPartRDao; @@ -172,6 +166,9 @@ public class MesWorkOrderService extends BaseMesService implements @Autowired private IMesConfigService mesConfigService; + @Autowired + private IMesProductVersionService mesProductVersionService; + @Override public MesWorkOrder insert(MesWorkOrder bean) { // 数据校验 @@ -208,7 +205,7 @@ public class MesWorkOrderService extends BaseMesService implements insertUnSortWorkOrder(bean, mesWorkCenter); //bto } else { - insertBtoWorkOrder(bean, mesWorkCenter); + insertBtoWorkOrder(bean); } return bean; } @@ -253,15 +250,6 @@ public class MesWorkOrderService extends BaseMesService implements closeMesQueueOrder(bean.getWorkOrderNo(), bean.getOrganizeCode(), AuthUtilExt.getUserName()); } result.setWorkOrderStatus(bean.getWorkOrderStatus()); - if (result.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.CREATE.getValue() - && bean.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(result); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(result.getPartNo(), result.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsService.saveMesWorkOrderToWms(result, bomList)); - } } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); @@ -479,23 +467,19 @@ public class MesWorkOrderService extends BaseMesService implements mesProduceSnRao.insert(mesProduceSn); } - private List sendToWms(MesWorkOrder item, MesWorkCenter mesWorkCenter, List saveMesWorkOrderToWms) { + private List autoPublish(MesWorkOrder item) { //非试制单 - List bomList = null; MesProductVersion mesProductVersion = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())) { //获取生产版本 - mesProductVersion = getMesProductVersion(item, mesWorkCenter); + mesProductVersion = getMesProductVersion(item.getOrganizeCode(),item.getPartNo()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - bomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - item.setBomCode(bomList.iterator().next().getBomCode()); } //是否自动发布 - return isAuto(item, saveMesWorkOrderToWms, bomList, mesProductVersion); + return isAuto(item, mesProductVersion); } - private List isAuto(MesWorkOrder item, List saveMesWorkOrderToWms, List bomList,MesProductVersion mesProductVersion) { + private List isAuto(MesWorkOrder item,MesProductVersion mesProductVersion) { MesPartProdGroup mesPartProdGroup = null; if(StringUtil.isEmpty(item.getPartProdGroupCode())){ mesPartProdGroup = getMesPartProdGroup(item); @@ -514,14 +498,8 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(bomList)){ - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, bomList)); - } - // 创建工单打印队列 insertPrintQueue(item); - } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -569,32 +547,6 @@ public class MesWorkOrderService extends BaseMesService implements } } - private MesProductVersion checkMesProductVersion(MesWorkOrder item) { - DdlPackBean ddlPackBean; - ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(item.getErpWorkCenter(), "workCenterCode", ddlPackBean); - DdlPreparedPack.getStringEqualPack(item.getProductVersion(), "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", item.getPartNo(), item.getProductVersion()); - } - return mesProductVersion; - } - - private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPartNo(), "partNo", ddlPackBean); - //DdlPreparedPack.getStringEqualPack(mesWorkCenter.getErpWorkCenter(), "workCenterCode", ddlPackBean); - ddlPackBean.setOrderByStr(" order by createDatetime desc "); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (Objects.isNull(mesProductVersion)) { - MesException.throwMesBusiException("物料【%s】工作中心【%s】对应的生产版本信息不存在", item.getPartNo(), - mesWorkCenter.getErpWorkCenter()); - } - return mesProductVersion; - } - private void packPlanTime(MesWorkOrder item, Map> mesShiftMap) { ValidatorBean.checkNotNull(item.getPlanDate(), "计划日期不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); @@ -644,7 +596,7 @@ public class MesWorkOrderService extends BaseMesService implements public void saveMesWorkOrderExcel(List mesWorkOrderList) { MesWorkOrder next = mesWorkOrderList.iterator().next(); //属性校验&字段填充 - List mesWorkOrderToWmsList = checkData(mesWorkOrderList, next.getOrganizeCode()); + checkData(mesWorkOrderList, next.getOrganizeCode()); //BTO序号 List seqList = new ArrayList<>(); if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == next.getWorkOrderType()) { @@ -701,17 +653,13 @@ public class MesWorkOrderService extends BaseMesService implements BeanUtils.copyProperties(item, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogList.add(workOrderLog); } - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(mesWorkOrderToWmsList)) { - mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); - } //保存工单记录 if (CollectionUtils.isNotEmpty(mesWorkOrderLogList)) { workOrderLogService.insertBatch(mesWorkOrderLogList); } } - private List checkData(List mesWorkOrderList, String organizeCode) { + private void checkData(List mesWorkOrderList, String organizeCode) { MesWorkOrder next = mesWorkOrderList.iterator().next(); String nowDate = TimeTool.getNowTime(true); //获取产线信息 @@ -733,7 +681,6 @@ public class MesWorkOrderService extends BaseMesService implements try { mesCustomerPartMap = BeanMapUtilsExt.getBeanMap(mesCustomerPartRDao, "erpPartNo", organizeCode, partNoList, "客户物料信息"); } catch (Exception e) { - mesCustomerPartMap = null; } //获取物料信息 Map mesPartSapMap = BeanMapUtilsExt.getBeanMap(mesPartSapRDao, "partNo", organizeCode, partNoList, "物料信息"); @@ -769,15 +716,10 @@ public class MesWorkOrderService extends BaseMesService implements if (baseRDao.isExitByHql(orderPackBean)) { MesException.throwMesBusiException("单号已存在"); } - - //BOM信息 - Map> mesBomMap = new HashMap<>(); //vin号 Map vinCodeMap = new HashMap<>(); //零件生产组 Map mesPartProdGroupMap = new HashMap<>(); - //发送wms数据 - List mesWorkOrderToWmsList = new ArrayList<>(); int index = 0; for (MesWorkOrder item : mesWorkOrderList) { item.setWorkOrderNo(orderList.get(index)); @@ -847,8 +789,8 @@ public class MesWorkOrderService extends BaseMesService implements } //排序工单数量为1 item.setQty(1d); - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { ValidatorBean.checkNotNull(item.getShiftCode(), "班次不能为空"); ValidatorBean.checkNotNull(item.getOrderFlag(), "标识不能为空"); @@ -884,7 +826,6 @@ public class MesWorkOrderService extends BaseMesService implements packPlanTime(item, mesShiftMap); //状态已发布 item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ ValidatorBean.checkNotNull(item.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 @@ -898,16 +839,6 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = versionList.iterator().next(); item.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } - //发送工单信息给WMS - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); } } else { ValidatorBean.checkNotNull(item.getPlanStartTime(), "计划开始时间不能为空"); @@ -915,19 +846,17 @@ public class MesWorkOrderService extends BaseMesService implements if (Objects.isNull(item.getQty()) || item.getQty() <= 0d) { MesException.throwMesBusiException("生产数量不能小于等于0"); } - //发送wms数据 - sendToWms(mesProductVersionMap, mesBomMap, mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesWorkCenter); + //自动发布 + autoPublish(mesProductVersionMap, mesPartProdGroupMap, item, mesWorkCenter); } item.setUnCompleteQty(item.getQty()); item.setFid(UUID.randomUUID().toString()); index++; } - return mesWorkOrderToWmsList; } - private void sendToWms(Map> mesProductVersionMap, Map> mesBomMap, Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, MesWorkCenter mesWorkCenter) { + private void autoPublish(Map> mesProductVersionMap, Map mesPartProdGroupMap, MesWorkOrder item, MesWorkCenter mesWorkCenter) { //发送工单信息给WMS - List mesBomList = null; if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(item.getOrderFlag())){ //获取生产版本 List mesProductVersions = mesProductVersionMap.get(item.getPartNo()); @@ -937,19 +866,12 @@ public class MesWorkOrderService extends BaseMesService implements } MesProductVersion mesProductVersion = mesProductVersions.iterator().next(); item.setProductVersion(mesProductVersion.getProductVersion()); - if (mesBomMap.containsKey(item.getPartNo() + mesProductVersion.getAlternativePartList())) { - mesBomList = mesBomMap.get(item.getPartNo() + mesProductVersion.getAlternativePartList()); - } else { - //获取bom信息 - mesBomList = mesBomService.findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - mesBomMap.put(item.getPartNo() + mesProductVersion.getAlternativePartList(), mesBomList); - } } //是否自动发布 - isAuto(mesPartProdGroupMap, mesWorkOrderToWmsList, item, mesBomList); + isAuto(mesPartProdGroupMap, item); } - private void isAuto(Map mesPartProdGroupMap, List mesWorkOrderToWmsList, MesWorkOrder item, List mesBomList) { + private void isAuto(Map mesPartProdGroupMap, MesWorkOrder item) { //校验零件生产组信息 MesPartProdGroup mesPartProdGroup; if (mesPartProdGroupMap.containsKey(item.getWorkCenterCode() + item.getPartNo())) { @@ -963,10 +885,6 @@ public class MesWorkOrderService extends BaseMesService implements //自动发布 if (CommonEnumUtil.VALID == mesPartProdGroup.getIsAutoRelease()) { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - //发送工单信息给WMS - if(!Objects.isNull(mesBomList)){ - mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(item, mesBomList)); - } } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } @@ -993,7 +911,7 @@ public class MesWorkOrderService extends BaseMesService implements //查询产线信息 MesWorkCenter mesWorkCenter = getMesWorkCenter(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getWorkCenterCode()); //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //报工类型 @@ -1093,7 +1011,7 @@ public class MesWorkOrderService extends BaseMesService implements } } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getPartNo(),mesWorkOrder.getOrganizeCode(),mesWorkOrder.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成条码 @@ -1161,7 +1079,11 @@ public class MesWorkOrderService extends BaseMesService implements //保存报工记录 试制单不报工 if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) { - mesProductOffLineList.forEach(t->t.setBomTotalSize(mesProductOffLineList.size())); + mesProductOffLineList.forEach(t->{ + if(Objects.isNull(t.getBomTotalSize())){ + t.setBomTotalSize(mesProductOffLineList.size()); + } + }); mesProductOffLineService.insertBatch(mesProductOffLineList); } //保存移库记录 @@ -1215,7 +1137,7 @@ public class MesWorkOrderService extends BaseMesService implements String nowTime = TimeTool.getNowTime(true); if (StringUtil.isEmpty(model.getSn())) { //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(model); + MesProductVersion mesProductVersion = getMesProductVersion(model.getOrganizeCode(),model.getPartNo()); //获取bom List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //生成流水码 @@ -1502,17 +1424,6 @@ public class MesWorkOrderService extends BaseMesService implements return newMesProductOffLine; } - private MesProductVersion getMesProductVersion(WmsProductModel model) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(model.getPartNo(), "partNo", ddlPackBean); - DdlPreparedPack.getOrderBy(null, null, ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本信息不存在", model.getPartNo()); - } - return mesProductVersion; - } - private void customerSupplyMove(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, List mesBoms, String sn, List mesProductOffLineList, List mesMoveList,String nowTime,boolean isSort) { boolean isItemMove; boolean isItemReport; @@ -1550,7 +1461,7 @@ public class MesWorkOrderService extends BaseMesService implements mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true, nowTime, mesBoms.size())); } else if (isItemReport) { String reportSn = String.valueOf(snowflakeIdMaker.nextId()); - MesProductVersion itemVersion = getMesProductVersion(mesBom.getItemPartNo(), mesWorkOrder.getOrganizeCode(), mesProductVersion.getProductVersion()); + MesProductVersion itemVersion = getMesProductVersion(mesWorkOrder.getOrganizeCode(), mesBom.getItemPartNo(), mesProductVersion.getProductVersion()); List bomList = null; try { bomList = findBomList(mesWorkOrder.getOrganizeCode(), itemPart, itemVersion.getAlternativePartList()); @@ -1559,10 +1470,10 @@ public class MesWorkOrderService extends BaseMesService implements //bom下的子节汇报 if (!CollectionUtils.isEmpty(bomList)) { for (MesBom bom : bomList) { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, bom, mesBom.getItemQty(), true,bomList.size(), nowTime)); } } else { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, itemVersion, reportSn, mesBom, mesBom.getQty(), true,MesExtConstWords.ONE, nowTime)); } } //移库 @@ -1580,7 +1491,7 @@ public class MesWorkOrderService extends BaseMesService implements //bom下的子节汇报,总成也需要汇报 if (!isSort && !CollectionUtils.isEmpty(mesProductOffLineList)) { for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false, nowTime)); + mesProductOffLineList.add(getMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, mesBom.getQty(), false,mesBoms.size(), nowTime)); } } } @@ -1611,20 +1522,8 @@ public class MesWorkOrderService extends BaseMesService implements return resultList.iterator().next(); } - - private MesProductVersion getMesProductVersion(String partNo,String organizeCode,String productVersion) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); - DdlPreparedPack.getStringEqualPack(productVersion, "productVersion", ddlPackBean); - MesProductVersion mesProductVersion = mesProductVersionRDao.getByProperty(ddlPackBean); - if (null == mesProductVersion) { - MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo,productVersion); - } - return mesProductVersion; - } - private MesProductOffLine getMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, - String sn, MesBom mesBom,Double itemQty, boolean isItemReport,String nowTime) { + String sn, MesBom mesBom,Double itemQty, boolean isItemReport,Integer bomSize,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); BeanUtils.copyProperties(mesBom, newMesProductOffLine,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); newMesProductOffLine.setReportPartNo(mesBom.getPartNo()); @@ -1654,6 +1553,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setSapWorkCenter(mesProductVersion.getWorkCenterCode()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setBomTotalSize(bomSize); newMesProductOffLine.setProductionRecordId(mesWorkOrder.getId().toString()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getModifyUser()); return newMesProductOffLine; @@ -1817,7 +1717,6 @@ public class MesWorkOrderService extends BaseMesService implements //校验标识 //若工单类型为排序 - List saveMesWorkOrderToWms = new ArrayList<>(); if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()) { //校验产线类型和工单类型是否匹配 if (!Objects.equals(mesWorkCenter.getCenterType(), MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue())) { @@ -1826,23 +1725,15 @@ public class MesWorkOrderService extends BaseMesService implements } //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(item); + MesProductVersion mesProductVersion = getMesProductVersion(item.getOrganizeCode(), item.getPartNo(), item.getProductVersion()); item.setProductVersion(mesProductVersion.getProductVersion()); - //获取bom信息 - List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); } item.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); item.setFid(UUID.randomUUID().toString()); ConvertBean.serviceModelInitialize(item, userName); MesWorkOrder mesWorkOrder = workOrderRepository.insert(item); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - mesWorkOrderToWmsRDao.saveAll(saveMesWorkOrderToWms); - } + saveMesWorkOrderLog(mesWorkOrder); mesWorkOrderList.add(mesWorkOrder); } @@ -1880,13 +1771,12 @@ public class MesWorkOrderService extends BaseMesService implements } } - List saveMesWorkOrderToWms = new ArrayList<>(); //排序工单数量为1 bean.setQty(1d); //生成工单号 bean.setWorkOrderNo(getOrderNo(bean)); - //发送工单给WMS - List orderPartList = sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //自动发布 + List orderPartList = autoPublish(bean); //顺序号 bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); //生成客户条码 @@ -1895,7 +1785,7 @@ public class MesWorkOrderService extends BaseMesService implements insertMesWorkOrder(bean, orderPartList); //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -1906,11 +1796,6 @@ public class MesWorkOrderService extends BaseMesService implements bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } baseRDao.insert(bean); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); @@ -1941,20 +1826,15 @@ public class MesWorkOrderService extends BaseMesService implements bean.setPartProdGroupName(mesPartProdGroup.getPartProdGroupName()); } bean.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()); - List saveMesWorkOrderToWms = new ArrayList<>(); //非试制单 if (!MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(bean.getOrderFlag())) { ValidatorBean.checkNotNull(bean.getProductVersion(), "生产版本不能为空"); //校验物料生产版本是否存在 - MesProductVersion mesProductVersion = checkMesProductVersion(bean); + MesProductVersion mesProductVersion = getMesProductVersion(bean.getOrganizeCode(), bean.getPartNo(), bean.getProductVersion()); bean.setErpWorkCenter(mesProductVersion.getWorkCenterCode()); - //获取bom信息 - List bomList = mesBomService.findMesBomByPartNoAndBomVersion(bean.getPartNo(), bean.getOrganizeCode(), mesProductVersion.getAlternativePartList()); - //发送工单信息给WMS - saveMesWorkOrderToWms.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(bean, bomList)); } //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -1966,31 +1846,25 @@ public class MesWorkOrderService extends BaseMesService implements bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); bean.setWorkOrderNo(getOrderNo(bean)); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } baseRDao.insert(bean); workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } - private void insertBtoWorkOrder(MesWorkOrder bean, MesWorkCenter mesWorkCenter) { + private void insertBtoWorkOrder(MesWorkOrder bean) { ValidatorBean.checkNotNull(bean.getPlanStartTime(), "计划开始时间不能为空"); ValidatorBean.checkNotNull(bean.getPlanEndTime(), "计划结束时间不能为空"); if (Objects.isNull(bean.getQty()) || bean.getQty() <= 0d) { MesException.throwMesBusiException("生产数量不能小于等于0"); } - List saveMesWorkOrderToWms = new ArrayList<>(); //顺序号 bean.setProductSeq(getMaxMesWorkOrderProductSeq(bean)); //生成工单号 bean.setWorkOrderNo(getOrderNo(bean)); - //发送工单给WMS - sendToWms(bean, mesWorkCenter, saveMesWorkOrderToWms); + //自动发布 + autoPublish(bean); //物料名称不存在,从物料信息中获取 - MesPartSap mesPart = iMesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); + MesPartSap mesPart = mesPartSapService.getMesPartSapByPartNo(bean.getPartNo(), bean.getOrganizeCode()); bean.setPartName(mesPart.getPartName()); bean.setUnit(mesPart.getUnit()); //生产时间新增取当天 @@ -2001,11 +1875,6 @@ public class MesWorkOrderService extends BaseMesService implements bean.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); bean.setUnCompleteQty(bean.getQty()); bean.setFid(UUID.randomUUID().toString()); - //保存发送WMS数据 - if (CollectionUtils.isNotEmpty(saveMesWorkOrderToWms)) { - saveMesWorkOrderToWms.forEach(t->t.setWorkOrderNo(bean.getWorkOrderNo())); - mesWorkOrderToWmsService.insertBatch(saveMesWorkOrderToWms); - } //生成WorkOrderSeq GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel(MesCommonConstant.ORDER_NO_BTO_SEQ); List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(bean.getOrganizeCode()), bean.getCreateUser(), bean.getOrganizeCode(), 1).getResultList(); @@ -2014,24 +1883,6 @@ public class MesWorkOrderService extends BaseMesService implements workOrderLogService.saveMesWorkOrderLog(bean,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.INSERT,bean.getQty()); } - - 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,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); - 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; - } - public void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { //查询物料信息 @@ -2050,7 +1901,7 @@ public class MesWorkOrderService extends BaseMesService implements MesException.throwMesBusiException("产线【%s】不存在", mesWorkOrderDb.getWorkCenterCode()); } //获取生产版本 - MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getProductVersion()); + MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb.getOrganizeCode(),mesWorkOrderDb.getPartNo(),mesWorkOrderDb.getProductVersion()); //物料+生产版本获取bom信息 List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); @@ -2095,19 +1946,79 @@ public class MesWorkOrderService extends BaseMesService implements } 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); + + @Override + public void doSendMesWorkOrderToWms(String organizeCode, Integer pageSize, String userName) { + List mesWorkOrderListToWms = getMesWorkOrderListToWms(organizeCode, pageSize); + if (CollectionUtils.isEmpty(mesWorkOrderListToWms)) { + log.info("工厂:{}不存在未推送的工单", organizeCode); + } + //获取物料信息 + Map partMap = BeanMapUtilsExt.getBeanMap(mesPartRDao, "partNo", organizeCode, mesWorkOrderListToWms.stream().map(MesWorkOrder::getPartNo).distinct().collect(Collectors.toList()), "物料信息"); + // 根据零件加生产版本分组 + Map> mesWorkOrderListToWmsMap = mesWorkOrderListToWms.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getPartNo()).add(t.getProductVersion()).toString())); + + List mesWorkOrderToWmsList = new ArrayList<>(); + List workOrderNoList = new ArrayList<>(); + for (Map.Entry> workOrderMap : mesWorkOrderListToWmsMap.entrySet()) { + List bomExpendList = null; + List bomList = null; + MesProductVersion productVersion = null; + try { + productVersion = getMesProductVersion(organizeCode, workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], workOrderMap.getKey().split(MesExtConstWords.COMMA)[1]); + bomList = findMesBomByPartNoAndBomVersion(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0], organizeCode, productVersion.getAlternativePartList()); + } catch (ImppBusiException e) { + log.info("工厂:{} 信息{}",organizeCode,e.getErrorDetail()); + continue; + } + //数据处理 + for (MesWorkOrder workOrder : workOrderMap.getValue()) { + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomList, userName, false)); + workOrderNoList.add(workOrder.getWorkOrderNo()); + //BOT工单只拆一层 + try { + if (MesExtEnumUtil.ORDER_TYPE.BTO.getValue() == workOrder.getWorkOrderType() && partMap.containsKey(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0])) { + bomExpendList = Objects.isNull(bomExpendList) ? findBomList(organizeCode, partMap.get(workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]), productVersion.getAlternativePartList()) : bomExpendList; + mesWorkOrderToWmsList.addAll(mesWorkOrderToWmsService.saveMesWorkOrderToWms(workOrder, bomExpendList, userName, true)); + }else { + log.info("工厂:{}BTO工单:{}物料:{}信息不存在", organizeCode, workOrder.getWorkOrderNo(), workOrderMap.getKey().split(MesExtConstWords.COMMA)[0]); + } + } catch (ImppBusiException e) { + log.info("工单:{} BOT工单只拆一层异常:{}",workOrder.getWorkOrderNo(),e.getErrorDetail()); + } + } + } + //数据持久化 + mesWorkOrderToWmsService.insertBatch(mesWorkOrderToWmsList); + //更新工单状态为已同步 + updateMesWorkOrder(organizeCode, userName, workOrderNoList); } + + private void updateMesWorkOrder(String organizeCode, String userName, List workOrderNoList) { + if (StringUtil.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == MesExtConstWords.ONE) { + DdlPreparedPack.getStringEqualPack(workOrderNoList.get(MesExtConstWords.ZERO), MesExtConstWords.WORK_ORDER_NO, packBean); + } else { + DdlPreparedPack.getInPackList(workOrderNoList, MesExtConstWords.WORK_ORDER_NO, packBean); + } + baseRDao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime", "syncToWms"}, new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.VALID}, packBean); + } + public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); BeanUtils.copyProperties(mesWorkOrder, workOrderLog,MesExtConstWords.ID,MesExtConstWords.SYSTEM_SYNC_STATUS); mesWorkOrderLogRepository.insert(workOrderLog); } + + private List getMesWorkOrderListToWms(String organizeCode, Integer pageSize) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(Arrays.asList(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()), "workOrderStatus", packBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "syncToWms", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean); + return baseRDao.findByHqlTopWhere(packBean, StringUtil.isEmpty(pageSize) ? MesExtConstWords.TEN : pageSize); + } + public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { List bomData = new ArrayList<>(); // 递归展开 BOM @@ -2445,7 +2356,6 @@ public class MesWorkOrderService extends BaseMesService implements //查询数据 List orderAssemblyList = mesWorkOrderAssemblyService.findMesWorkOrderAssembly(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List orderPartList = mesWorkOrderPartService.findMesWorkOrderPart(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); - List toWmsList = mesWorkOrderToWmsService.findMesWorkOrderToWms(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List orderLogList = workOrderLogService.findMesWorkOrderLog(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); List queueOrderList = findMesQueueOrder(workOrder.getWorkOrderNo(), workOrder.getOrganizeCode()); MesProduceSn mesProduceSn = mesProduceSnService.getMesProduceSnByCustSn(workOrder.getOrganizeCode(), workOrder.getCustSn()); @@ -2454,14 +2364,12 @@ public class MesWorkOrderService extends BaseMesService implements List newWrkOrderList = new ArrayList<>(); List newOrderAssemblyList = new ArrayList<>(); List newOrderPartList = new ArrayList<>(); - List newToWmsList = new ArrayList<>(); List newOrderLogList = new ArrayList<>(); List newProduceSnList = new ArrayList<>(); List newQueueOrderList = new ArrayList<>(); List newPrintQueueList = new ArrayList<>(); MesWorkOrderAssembly newOrderAssembly = null; MesWorkOrderPart newOrderPart = null; - MesWorkOrderToWms newOrderPartToWms = null; MesWorkOrderLog orderLog = null; MesProduceSn newProduceSn = null; MesQueueOrder newQueueOrder = null; @@ -2495,15 +2403,6 @@ public class MesWorkOrderService extends BaseMesService implements newOrderPartList.add(newOrderPart); } } - //工单发送给WMS数据 - if (!CollectionUtils.isEmpty(toWmsList)) { - for (MesWorkOrderToWms toWms : toWmsList) { - newOrderPartToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(toWms, newOrderPartToWms, MesExtConstWords.ID, MesExtConstWords.SYSTEM_SYNC_STATUS); - newOrderPartToWms.setWorkOrderNo(newWorkOrder.getWorkOrderNo()); - newToWmsList.add(newOrderPartToWms); - } - } //生产工单日志 if (!CollectionUtils.isEmpty(orderLogList)) { for (MesWorkOrderLog mesWorkOrderLog : orderLogList) { @@ -2557,9 +2456,6 @@ public class MesWorkOrderService extends BaseMesService implements if (!CollectionUtils.isEmpty(newOrderLogList)) { workOrderLogService.insertBatch(newOrderLogList); } - if (!CollectionUtils.isEmpty(newToWmsList)) { - mesWorkOrderToWmsService.insertBatch(newToWmsList); - } if (!CollectionUtils.isEmpty(newQueueOrderList)) { queueOrderRao.saveAll(newQueueOrderList); } @@ -2600,4 +2496,20 @@ public class MesWorkOrderService extends BaseMesService implements return (long) (Objects.isNull(workOrder) || StringUtils.isEmpty(workOrder.getProductSeq()) ? 0d : Math.toIntExact(workOrder.getProductSeq().toString().endsWith("9") ? workOrder.getProductSeq() + 2 : workOrder.getProductSeq()+1)); } + private MesProductVersion getMesProductVersion(String organizeCode, String partNo, String productVersion) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, productVersion); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本【%s】信息不存在", partNo, productVersion); + } + return mesProductVersion; + } + + private MesProductVersion getMesProductVersion(String organizeCode, String partNo) { + MesProductVersion mesProductVersion = mesProductVersionService.getMesProductVersionByPartNoAndProductVersion(organizeCode, partNo, null); + if (Objects.isNull(mesProductVersion)) { + MesException.throwMesBusiException("物料【%s】生产版本信息不存在", partNo); + } + return mesProductVersion; + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java index 95229fc..681538f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToWmsServiceImpl.java @@ -1,9 +1,11 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToWmsService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; 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.MesBom; @@ -28,18 +30,19 @@ import java.util.List; public class MesWorkOrderToWmsServiceImpl extends BaseMesService implements IMesWorkOrderToWmsService { @Override - public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList,String userName,boolean flag) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; for (MesBom mesBom : mesBomList) { mesWorkOrderToWms = new MesWorkOrderToWms(); - BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, "id"); + BeanUtils.copyProperties(mesWorkOrder, mesWorkOrderToWms, MesExtConstWords.ID); mesWorkOrderToWms.setUnit(mesBom.getUnit()); + mesWorkOrderToWms.setFlag(flag ? CommonEnumUtil.VALID : CommonEnumUtil.FALSE); 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()); + ConvertBean.serviceModelInitialize(mesWorkOrderToWms, userName); mesWorkOrderToWmsList.add(mesWorkOrderToWms); } return mesWorkOrderToWmsList;