From a249d6268887d8b7999ad4cae7b028e5aa087cda Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 20 Jun 2024 21:36:40 +0800 Subject: [PATCH] steo --- .../mes/pcn/api/busi/IMesWorkOrderExtService.java | 3 + .../serviceimpl/busi/MesWorkOrderExtService.java | 10 + .../step/MesAssemblyScanStepService.java | 6 +- .../step/MesAssemblyShowNosortStepService.java | 3 + .../step/MesProductSnGenerateStepService.java | 9 +- .../step/MesProductionDataSaveStepService.java | 21 +- .../step/MesWorkOrderCheckStepService.java | 6 +- .../step/MesWorkOrderSaveStepService.java | 217 ++++++++++++++------- .../step/MesWorkOrderSaveStepServiceBak.java | 71 +++++++ .../mes/pcn/pojo/context/MesProdRuleContext.java | 3 - .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 + 11 files changed, 248 insertions(+), 103 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepServiceBak.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java index 83adedf..01202cc 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java @@ -10,4 +10,7 @@ public interface IMesWorkOrderExtService { @ApiOperation(value = "根据生产工单号集合 查询生产工单数据") List getWorkOrderList(String organizeCode, List workOrderNoList); + @ApiOperation(value = "根据生产工单ID查询生产工单信息") + MesWorkOrder getWorkOrder(String organizeCode, Long id); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java index 2a6b8df..51facd6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; 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.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; @@ -38,4 +39,13 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService { } + //根据生产工单ID查询生产工单信息 + @Override + public MesWorkOrder getWorkOrder(String organizeCode, Long id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return null; + return workOrderRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id}); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index 7da8466..013dca5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -103,8 +103,10 @@ public class MesAssemblyScanStepService extends BaseStepService { if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) && cachedEquipVariableCollectContextList.size() > needQty) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("当前上下文中的装配件条码数量[%s]已经超过设备腔数[%s]每腔个数[%s]配置,请重新扫描装配件条码!", cachedEquipVariableCollectContextList.size(), cellEquipContext.getCavity(), cellEquipContext.getBindQty())); - if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList) && cachedEquipVariableCollectContextList.size() == needQty) equipVariableCollectContextList = cachedEquipVariableCollectContextList; - else equipVariableCollectContextList.addAll(cachedEquipVariableCollectContextList); + if (!CollectionUtils.isEmpty(cachedEquipVariableCollectContextList)) { + if (cachedEquipVariableCollectContextList.size() == needQty) equipVariableCollectContextList = cachedEquipVariableCollectContextList; + else equipVariableCollectContextList.addAll(cachedEquipVariableCollectContextList); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index 15ec6e8..5cc332a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -189,6 +189,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format( "请检查非排序产品加工规则信息,根据设备[%s]进料零件条码[%s]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPsInContext.getProductSn(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size())); + //TODO 验证时效性 + //if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !时效性接口(productionPsInContext.produceSn, filterList.get(0).getId)) + //【非排序线】获取产品加工规则对应的装配件信息 prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext( reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index 3a307e1..79d115e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -160,11 +160,10 @@ public class MesProductSnGenerateStepService extends BaseStepService { produceSn.setCustSn(produceSn.getProductSn()); produceSn.setQty(new Double(1)); - if (null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) { - produceSn.setWorkOrderNo(productionPartContext.getWorkOrderNo()); - produceSn.setCustCode(productionPartContext.getCustCode()); - produceSn.setCustPartNo(productionPartContext.getCustPartNo()); - } + //未知状态的需要重置工单相关字段 + produceSn.setWorkOrderNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getWorkOrderNo() : null); + produceSn.setCustCode((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustCode() : null); + produceSn.setCustPartNo((null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) ? productionPartContext.getCustPartNo() : null); produceSn.setAreaCode(reqBean.getAreaCode()); produceSn.setWorkCenterCode(reqBean.getWorkCenterCode()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java index 991bf47..65c0410 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveStepService.java @@ -9,8 +9,6 @@ import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.concurrent.TimeUnit; - /** * @Description : 保存加工结果工步 * @Author : wangjie @@ -32,35 +30,20 @@ public class MesProductionDataSaveStepService extends BaseStepService { //保存零件条码信息工步 ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).execute(reqBean); - try { - TimeUnit.MILLISECONDS.sleep(5000L); - } catch (InterruptedException e) { - } - //加工异常处理工步【此工步未整改】 //((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).execute(reqBean); //生成加工记录工步 ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).execute(reqBean); - try { - TimeUnit.MILLISECONDS.sleep(5000L); - } catch (InterruptedException e) { - } - //保存装配记录工步 ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).execute(reqBean); - try { - TimeUnit.MILLISECONDS.sleep(5000L); - } catch (InterruptedException e) { - } - //生产汇报工步 【此工步未整改】 //((IStepService) SpringContextsUtil.getBean("mesReportGenerateStepService")).execute(reqBean); - //保存工单信息工步 - //((IStepService) SpringContextsUtil.getBean("")).execute(reqBean); +// 保存工单信息工步 +// ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).execute(reqBean); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工结果成功!"); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java index 2264bd3..e16c73e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java @@ -127,16 +127,16 @@ public class MesWorkOrderCheckStepService extends BaseStepService { List workOrderDbList = CollectionUtils.isEmpty(workOrderMap) ? null : workOrderMap.get(workOrderNo); if (CollectionUtils.isEmpty(workOrderDbList)) - return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo)); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单号[%s]无效!", workOrderNo)); if (workOrderDbList.size() != 1) return stepResult.isCompleted(false).msg(String.format("请检查生产工单信息,加工单号[%s]存在重复!", workOrderNo)); if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrderDbList.get(0).getWorkOrderStatus())) - return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDbList.get(0).getWorkOrderStatus()))); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDbList.get(0).getWorkOrderStatus()))); if (!workOrderDbList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode())) - return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDbList.get(0).getWorkCenterCode(), reqBean.getWorkCenterCode())); + return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDbList.get(0).getWorkCenterCode(), reqBean.getWorkCenterCode())); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java index c0ee673..2c46da3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java @@ -1,71 +1,146 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -import cn.estsh.i3plus.pojo.mes.model.StepResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Description : 保存加工单信息工步 - * @Reference : - * @Author : Castle - * @CreateDate : 2024/6/11 18:50 - * @Modify: - **/ -@Slf4j -@Service("mesWorkOrderSaveStepService") -public class MesWorkOrderSaveStepService extends BaseStepService { - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Override - public StepResult execute(StationRequestBean reqBean) { - StationResultBean resultBean = new StationResultBean(); - StepResult stepResult = StepResult.getSuccessComplete(); - //1. 获取上下文中的MesProductionPartContext 产出零件 - List productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean); - if (productionPartContext.isEmpty()){ - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); - } - // 判断为空腔 isFinishedCode = true 就是空腔 - // stream 过滤 isFinishedCode = false 并且 foreignKey != null 并且 加工单code 为不为空; - List filteredPartContext = productionPartContext.stream().filter(item -> item.getIsFinishCode() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() && item.getForeignKey() != null && item.getWorkOrderNo() != null).collect(Collectors.toList()); - if (filteredPartContext.isEmpty()){ - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "过滤后,没有可保存的加工单信息"); - } - // 怎么判断条码生成过了? 看产出零件和入料,in 要判端relateId有值也需要新增, out生成条码 上下文 - // 如果没有in 需要加, - // 如果有out条码,则判断id是否为空,不为空则是新生成的 - - //2. 判断是否为空,id是否为空,如果没有则返回,id为工单id - List collectContext = productionPartContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); - //3. 如果id不为空,查询工单信息 - if (collectContext.isEmpty()){ - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); - } - //4. 判断当前产出的零件MesProductionPsOutContext中是否有id,如果有就是新生成的 - List productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean); - //过滤出新生成的条码,没有条码id就是新生成的 - List produceSnList = productionPsOutContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); - if (produceSnList.isEmpty()){ - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); - } -// productionPsOutContext.stream().collect(Collectors.groupingBy(MesProductionPsOutContext::getId)) - //5. 修改完成数量,完成数量大于计划数量,就需要修改工单的状态为完成 - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工单信息成功"); - } -} +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +//import cn.estsh.i3plus.platform.common.tool.MathOperation; +//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +//import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +//import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +//import cn.estsh.i3plus.pojo.mes.model.StepResult; +//import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Service; +//import org.springframework.util.CollectionUtils; +//import org.springframework.util.StringUtils; +// +//import java.util.List; +//import java.util.Map; +//import java.util.stream.Collectors; +// +///** +// * @Description : 保存加工单信息工步 +// * @Reference : +// * @Author : wangjie +// * @CreateDate : 2024/6/11 18:50 +// * @Modify: +// **/ +//@Slf4j +//@Service("mesWorkOrderSaveStepService") +//public class MesWorkOrderSaveStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// @Autowired +// private IMesWorkOrderExtService workOrderExtService; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// //获取上下文信息 +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); +// +// //配置错误 抛出异常 +// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); +// +// //存储生产过程上下文对象 +// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); +// +// //获取上下文产品加工规则数据信息集合 +// List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); +// +// if (CollectionUtils.isEmpty(prodRuleContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在加工规则信息,请重置工序解决!"); +// +// //获取上下文产出零件数据信息集合 +// List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); +// +// //没有产出零件或者没有工单 +// if (CollectionUtils.isEmpty(productionPartContextList) || StringUtils.isEmpty( +// productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).findFirst().get().getWorkOrderNo())) return stepResult; +// +// //获取上下文产出零件数据信息集合 +// List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); +// +// //从上下文中取出生产线对象 +// MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); +// +// //保存生产工单数据 +// doHandleWorkOrderData(reqBean, resultBean, productionPartContextList, prodRuleContextList, productionPsOutContextList, workCenter); +// +// } +// +// //保存生产工单数据 +// private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean, List productionPartContextList, List prodRuleContextList, List productionPsOutContextList, MesWorkCenter workCenter) { +// +// //根据生产工单分组 +// Map> ppMap = productionPartContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo)); +// +// //根据生产工单分组 +// Map> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); +// +// Map prMap = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); +// +// for(Map.Entry> entry : ppMap.entrySet()) { +// +// if (null == entry) continue; +// +// List produceSnContextList = proMap.get(entry.getKey()); +// +// Integer calcCompleteQty = 0; +// Integer reportQty = 0; +// +// for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) { +// +// if (null == productionPsOutContext) continue; +// +// if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty += 1; +// if (prMap.get(productionPsOutContext.getForeignKey()).getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0) reportQty += 1; +// +// } +// +// if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0 && reportQty.compareTo(MesPcnExtConstWords.ZERO) == 0) continue; +// +// MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), entry.getValue().get(0).getId()); +// if (null == workOrder) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息不存在!", entry.getKey())); +// +// if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus())) +// execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); +// +// if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) +// execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); +// +// if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) > 0 && (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) && workOrder.getCompleteQty().compareTo(workOrder.getQty()) >= 0) +// execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息及生产线信息,生产线[%s]不允许超工单生产,且加工单[%s]信息已完成数量[%s]累加当前完成数量[%s]将超过计划数量[%s]!", entry.getKey(), reqBean.getWorkCenterCode(), workOrder.getCompleteQty(), calcCompleteQty, workOrder.getQty())); +// +// if (reportQty.compareTo(MesPcnExtConstWords.ZERO) > 0 && (!StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) && workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) && +// workOrder.getReportedQty().compareTo(MathOperation.mul(workOrder.getQty(), MathOperation.div(MathOperation.add(workCenter.getOrderRate(), new Double(100)), new Double(100)))) >= 0) +// execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息及生产线信息,生产线[%s]允许超工单生产,且加工单[%s]信息已汇报数量[%s]已满足计划数量[%s]超出比例[%s]!", +// reqBean.getWorkCenterCode(), entry.getKey(), workOrder.getReportedQty(), workOrder.getQty(), workCenter.getOrderRate() + MesPcnExtConstWords.PERCENT)); +// +// workOrder.setCompleteQty(MathOperation.add()); +// +// } +// +// +// +// +// } +// +//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepServiceBak.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepServiceBak.java new file mode 100644 index 0000000..5c19e7a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepServiceBak.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 保存加工单信息工步 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/11 18:50 + * @Modify: + **/ +@Slf4j +@Service("mesWorkOrderSaveStepServiceBak") +public class MesWorkOrderSaveStepServiceBak extends BaseStepService { + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + //1. 获取上下文中的MesProductionPartContext 产出零件 + List productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean); + if (productionPartContext.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } + // 判断为空腔 isFinishedCode = true 就是空腔 + // stream 过滤 isFinishedCode = false 并且 foreignKey != null 并且 加工单code 为不为空; + List filteredPartContext = productionPartContext.stream().filter(item -> item.getIsFinishCode() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() && item.getForeignKey() != null && item.getWorkOrderNo() != null).collect(Collectors.toList()); + if (filteredPartContext.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "过滤后,没有可保存的加工单信息"); + } + // 怎么判断条码生成过了? 看产出零件和入料,in 要判端relateId有值也需要新增, out生成条码 上下文 + // 如果没有in 需要加, + // 如果有out条码,则判断id是否为空,不为空则是新生成的 + + //2. 判断是否为空,id是否为空,如果没有则返回,id为工单id + List collectContext = productionPartContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + //3. 如果id不为空,查询工单信息 + if (collectContext.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } + //4. 判断当前产出的零件MesProductionPsOutContext中是否有id,如果有就是新生成的 + List productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + //过滤出新生成的条码,没有条码id就是新生成的 + List produceSnList = productionPsOutContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + if (produceSnList.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } +// productionPsOutContext.stream().collect(Collectors.groupingBy(MesProductionPsOutContext::getId)) + //5. 修改完成数量,完成数量大于计划数量,就需要修改工单的状态为完成 + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工单信息成功"); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java index 5d7241f..321a8e2 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdRuleContext.java @@ -88,9 +88,6 @@ public class MesProdRuleContext implements Serializable { @ApiParam(name = "汇报方式") private Integer reportType; - @ApiParam(name = "是否验证加工单数量") - private Integer isCheckOrderQty; - @ApiParam(name = "是否包装") private Integer isPackage; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 403470a..b9d80e3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -214,6 +214,8 @@ public class MesPcnExtConstWords { public static final String COMMA = ","; // : public static final String COLON = ":"; + // % + public static final String PERCENT = "%"; //过程条码默认生成规则 public static final String DEFAULT_SERIAL_NUMBER_RULE = "DEFAULT_SERIAL_NUMBER_RULE";