From 413f68de13e5b6c26010f0ec77808134461f7d12 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 25 Sep 2024 19:42:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8A=A0=E5=B7=A5=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=20=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesProdOrgExtService.java | 3 + .../serviceimpl/base/MesProdOrgExtService.java | 15 +- .../step/MesAssemblySaveSortStepService.java | 171 +++++++++++++++++++++ .../step/MesAssemblyShowSortStepService.java | 13 +- .../step/MesCustomDialogStepService.java | 2 +- .../step/MesProductSnGenerateStepService.java | 2 +- .../step/MesProductSnSaveStepService.java | 25 ++- .../MesProductionDataSaveNosortStepService.java | 46 ------ .../step/MesProductionDataSaveSortStepService.java | 46 ------ .../step/MesProductionDataSaveStepService.java | 30 +++- .../MesProductionRecordGenerateStepService.java | 28 ++-- .../step/MesWorkOrderCheckSortStepService.java | 16 +- .../step/MesWorkOrderQueueSaveStepService.java | 76 +++++++++ .../MesProductionProcessContextStepService.java | 2 +- .../pojo/context/MesProductionPsOutContext.java | 7 +- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 + 16 files changed, 356 insertions(+), 128 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java index 2bd6ea7..e5b08f3 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdOrgExtService.java @@ -18,6 +18,9 @@ public interface IMesProdOrgExtService { @ApiOperation(value = "根据生产线代码,工位代码查询工位信息") MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode); + @ApiOperation(value = "根据生产线代码,工位代码查询工位信息") + MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode, Boolean isCheckEndWorkCell); + @ApiOperation(value = "根据生产线代码查询工位信息") List getWorkCellList(String organizeCode, String workCenterCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java index ab9605d..77b33e0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdOrgExtService.java @@ -17,10 +17,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.TreeSet; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -59,6 +56,16 @@ public class MesProdOrgExtService implements IMesProdOrgExtService { } @Override + public MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode, Boolean isCheckEndWorkCell) { + if (!isCheckEndWorkCell) return getWorkCellDb(organizeCode, workCenterCode, workCellCode); + List workCellList = getWorkCellList(organizeCode, workCenterCode); + Optional optional = CollectionUtils.isEmpty(workCellList) ? null : workCellList.stream().filter(o -> (null != o && o.getWorkCellCode().equals(workCellCode))).findFirst(); + if (null == optional || !optional.isPresent()) return null; + if (workCellList.size() == 1) optional.get().setIsEndWorkCell(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + return optional.get(); + } + + @Override public List getWorkCellList(String organizeCode, String workCenterCode) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null; List workCellList = workCellRepository.findByProperty( diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java new file mode 100644 index 0000000..67c3596 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveSortStepService.java @@ -0,0 +1,171 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; +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.*; +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.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique; +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.repository.MesProductionAssemblyRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +/** + * @Description : 保存装配记录工步 【排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesAssemblySaveSortStepService") +public class MesAssemblySaveSortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesProductionAssemblyRepository productionAssemblyRepository; + + @Autowired + private MesProductionAssemblyUniqueRepository productionAssemblyUniqueRepository; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!"); + + //获取上下文产出条码数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + + //从上下文中取出工位当前要使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + Map ppMap = CollectionUtils.isEmpty(productionPsOutContextList) ? null : productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsOutContext::getForeignKey, o -> o)); + + List productSnId = new ArrayList<>(); + + //保存装配记录 + prodRuleContextList.stream().filter(o -> null != o).forEach(o -> saveProductionAssemblyData(reqBean, resultBean, stepResult, productSnId, productionProcessContext, o, ppMap, cellEquipContext)); + + if (!CollectionUtils.isEmpty(productSnId)) produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY.getValue(), productSnId); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存装配记录成功!"); + + } + + private void saveProductionAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List productSnId, + MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, Map ppMap, MesCellEquipContext cellEquipContext) { + + if (StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) return; + + List productionAssemblyNosortContextList = prodRuleContext.getNosortAssemblyDataContext(); + + MesProductionPsOutContext productionPsOutContext = CollectionUtils.isEmpty(ppMap) ? null : ppMap.get(prodRuleContext.getForeignKey()); + + for (MesProductionAssemblyNosortContext productionAssemblyNosortContext : productionAssemblyNosortContextList) { + + if (null == productionAssemblyNosortContext) continue; + + MesProductionAssembly productionAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(productionAssemblyNosortContext, productionAssembly); + + productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); + productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + productionAssembly.setAreaCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); + productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); + productionAssembly.setProcessCode(reqBean.getProcessCode()); + + productionAssembly.setProcessName(productionProcessContext.getProcessName()); + productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); + productionAssembly.setCraftName(productionProcessContext.getCraftName()); + + productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); + + productionAssembly.setProductionRecordId(prodRuleContext.getProductionRecordId()); + productionAssembly.setMouldNo(prodRuleContext.getMouldNo()); + + if (null != productionPsOutContext) { + productionAssembly.setPartNo(productionPsOutContext.getPartNo()); + productionAssembly.setPartName(productionPsOutContext.getPartName()); + productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); + productionAssembly.setProductSn(productionPsOutContext.getProductSn()); + productionAssembly.setCustSn(productionPsOutContext.getCustSn()); + } + + MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); + if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); + + productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); + + productionAssembly.setFid(UUID.randomUUID().toString()); + + productionAssembly = productionAssemblyRepository.insert(productionAssembly); + + if (productionAssemblyNosortContext.getMatchType().compareTo(MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_30.getValue()) == 0) saveProductionAssemblyUnique(productionAssembly); + + if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); + + if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) + productionCustomContextStepService.dispatchRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); + + } + + } + + private void saveProductionAssemblyUnique(MesProductionAssembly productionAssembly) { + MesProductionAssemblyUnique productionAssemblyUnique = new MesProductionAssemblyUnique(); + BeanUtils.copyProperties(productionAssembly, productionAssemblyUnique, MesPcnExtConstWords.ID); + productionAssemblyUnique.setPid(productionAssembly.getId()); + productionAssemblyUniqueRepository.insert(productionAssemblyUnique); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index c394c54..4c32135 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -77,12 +77,15 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //获取上下文进料零件条码信息集合 List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + //获取上下文产出零件条码信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + //根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询 if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>(); Integer initSize = prodRuleContextList.size(); //封装排序加工规则 - doHandleProdRuleData(reqBean, resultBean, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); + doHandleProdRuleData(reqBean, resultBean, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, productionPsOutContextList); if (prodRuleContextList.size() != initSize) { //保存上下文产品加工规则信息集合 @@ -91,6 +94,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); //保存进料主条码数据 if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + //保存进料主条码数据 + if (!CollectionUtils.isEmpty(productionPsOutContextList)) productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); } //显示装配件信息 @@ -129,7 +134,8 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //查询排序线加工规则装配件数据信息 private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, - List prodRuleContextList, List productionPartContextList, List productionPsInContextList) { + List prodRuleContextList, List productionPartContextList, + List productionPsInContextList, List productionPsOutContextList) { //上下文中不存在进料主条码数据信息 if (CollectionUtils.isEmpty(productionPsInContextList) || CollectionUtils.isEmpty(productionPartContextList)) @@ -146,6 +152,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) productionPartContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey()); + productionPsOutContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.getForeignKey()); prodRuleContextList.add(getProdRuleSortContext(reqBean, productionProcessContext, cellEquipContext, productionPsInContext)); @@ -200,8 +207,6 @@ public class MesAssemblyShowSortStepService extends BaseStepService { return assemblyShowContextList; } - - //封装装配件信息 private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) { MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java index 3598424..72ca786 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java @@ -80,7 +80,7 @@ public class MesCustomDialogStepService extends BaseStepService { if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); //弹框业务异步处理 - return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话开启!"); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话异步开启!"); } 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 e76546c..4577e26 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 @@ -147,7 +147,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { //产出零件数据信息 MesProductionPartContext productionPartContext = !CollectionUtils.isEmpty(ppMap) ? ppMap.get(prodRuleContext.getForeignKey()) : null; - //料零件条码 + //进料零件条码 MesProductionPsInContext productionPsInContext = !CollectionUtils.isEmpty(psMap) ? psMap.get(prodRuleContext.getForeignKey()) : null; //零件信息 MesPart part = partMap.get(prodRuleContext.getOutPartNo()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java index 3f3da92..c80c4b0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java @@ -10,9 +10,12 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -89,7 +92,10 @@ public class MesProductSnSaveStepService extends BaseStepService { String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); Map partMap = (Map) stepResult.getObj(); - productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult))); + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + MesWorkCell workCell = productionProcessContext.getWorkCell(); + + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> o.copy(saveProduceSnData(reqBean, resultBean, productionProcessContext, o, partMap, prodShiftContext, productResult, workCenter, workCell))); //保存上下文产出条码数据信息集合 productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); @@ -98,7 +104,8 @@ public class MesProductSnSaveStepService extends BaseStepService { } - private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map partMap, MesProdShiftContext prodShiftContext, String productResult) { + private MesProduceSn saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, + Map partMap, MesProdShiftContext prodShiftContext, String productResult, MesWorkCenter workCenter, MesWorkCell workCell) { //根据零件条码ID查询零件条码信息 MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId()); @@ -115,10 +122,7 @@ public class MesProductSnSaveStepService extends BaseStepService { produceSn.setRouteCode(reqBean.getRouteCode()); produceSn.setProcessCode(reqBean.getProcessCode()); produceSn.setCraftCode(productionProcessContext.getCraftCode()); - //TODO 获取下个工艺代码 - //produceSn.setNextCraftCode(); - produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); produceSn.setShiftCode(prodShiftContext.getShiftCode()); @@ -129,8 +133,17 @@ public class MesProductSnSaveStepService extends BaseStepService { produceSn.setCustLabelTemplate(part.getCustLabelTemplate()); ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo()); - produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime()); produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10)); + if (StringUtils.isEmpty(produceSn.getInWorkCenterTime())) produceSn.setInWorkCenterTime(produceSn.getModifyDatetime()); + + //非排序 或者 排序的末道工位 + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0 || + (!StringUtils.isEmpty(workCell.getIsEndWorkCell()) && workCell.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)) { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime()); + } else { + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()); + } produceSnExtService.update(produceSn); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java deleted file mode 100644 index ad8c4b4..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveNosortStepService.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -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.impp.framework.boot.util.SpringContextsUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @Description : 保存加工结果工步 【非排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductionDataSaveNosortStepService") -public class MesProductionDataSaveNosortStepService extends BaseStepService { - - @Override - public StepResult execute(StationRequestBean reqBean) { - - //保存开模记录工步 - ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); - - //保存零件条码信息工步 - ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); - - //加工异常处理工步 - ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); - - //生成加工记录工步 - ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); - - //保存装配记录工步 - ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); - - //保存工单信息工步 - ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); - - } - -} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java deleted file mode 100644 index 5f3c27e..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveSortStepService.java +++ /dev/null @@ -1,46 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -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.impp.framework.boot.util.SpringContextsUtil; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -/** - * @Description : 保存加工结果工步 【排序】 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductionDataSaveSortStepService") -public class MesProductionDataSaveSortStepService extends BaseStepService { - - @Override - public StepResult execute(StationRequestBean reqBean) { - - //保存开模记录工步 - ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); - - //保存零件条码信息工步 - ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); - - //加工异常处理工步 - ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); - - //生成加工记录工步 - ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); - - //保存装配记录工步 - ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); - - //保存工单信息工步 - ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); - - return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); - - } - -} 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 da1df1f..e3ef36c 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 @@ -3,7 +3,9 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; 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 cn.estsh.impp.framework.boot.util.SpringContextsUtil; @@ -25,11 +27,31 @@ public class MesProductionDataSaveStepService extends BaseStepService { @Override public StepResult execute(StationRequestBean reqBean) { - //排序线 保存加工结果工步 - if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean)) return ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveSortStepService")).executeInState(reqBean); + //是否排序线 + Boolean isSort = MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == productionProcessContextStepService.getCenterType(reqBean) ? true : false; - //非排序线 保存加工结果工步 - return ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveNosortStepService")).executeInState(reqBean); + //保存开模记录工步 + ((IStepService) SpringContextsUtil.getBean("mesMouldRecordGenerateStepService")).executeInState(reqBean); + + //保存零件条码信息工步 + ((IStepService) SpringContextsUtil.getBean("mesProductSnSaveStepService")).executeInState(reqBean); + + //保存工位队列信息工步 + if (isSort) ((IStepService) SpringContextsUtil.getBean("mesWorkOrderQueueSaveStepService")).executeInState(reqBean); + + //加工异常处理工步 + ((IStepService) SpringContextsUtil.getBean("mesProductResultErrorHandleStepService")).executeInState(reqBean); + + //生成加工记录工步 + ((IStepService) SpringContextsUtil.getBean("mesProductionRecordGenerateStepService")).executeInState(reqBean); + + //保存装配记录工步 + ((IStepService) SpringContextsUtil.getBean("mesAssemblySaveStepService")).executeInState(reqBean); + + //保存工单信息工步 + ((IStepService) SpringContextsUtil.getBean("mesWorkOrderSaveStepService")).executeInState(reqBean); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java index 3fb0141..9696c16 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -67,8 +68,6 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); - MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); - //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); @@ -98,14 +97,17 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { Map prMap = CollectionUtils.isEmpty(prodRuleContextList) ? null : prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o)); + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + MesWorkCell workCell = productionProcessContext.getWorkCell(); + //生成加工记录 String mouldNo = null != equipVariableCollectContext ? equipVariableCollectContext.getEquipVariableValue() : null; - productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProductionRecordData(reqBean, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey()))); + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProductionRecordData(reqBean, workCenter, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey()))); //保存上下文产品加工规则信息集合 productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); - if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCell.getIsCountFinish())) { + if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCell.getIsCountFinish())) { // 保存班次加工数量上下文 Integer amount = productionCustomContextStepService.dispatchProductionStatisticsContext(reqBean, productionPsOutContextList.size()); this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), String.format("生产线[%s]工位[%s]当前累加数[%s]已累计加工数[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionPsOutContextList.size(), amount), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -115,7 +117,7 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { } - private void saveProductionRecordData(StationRequestBean reqBean, String mouldNo, List prodRuleContextList, MesProductionProcessContext productionProcessContext, + private void saveProductionRecordData(StationRequestBean reqBean, MesWorkCenter workCenter, String mouldNo, List prodRuleContextList, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map prMap, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { MesProdRuleContext prodRuleContext = CollectionUtils.isEmpty(prMap) ? null : prMap.get(productionPsOutContext.getForeignKey()); @@ -127,11 +129,17 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { productionRecord.setEquipmentCode(cellEquipContext.getEquipmentCode()); productionRecord.setEquipmentName(cellEquipContext.getEquipmentName()); - productionRecord.setReportType((null != prodRuleContext && !StringUtils.isEmpty(prodRuleContext.getReportType())) ? prodRuleContext.getReportType() : MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); - if (productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0) productionRecord.setReportPartNo(productionPsOutContext.getPartNo()); - productionRecord.setReportStatus(productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0 ? MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() : MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); - if (productionRecord.getReportStatus().compareTo(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()) == 0 && isSamePart(productionPsInContext, productionPsOutContext) && - checkPsIsReported(reqBean.getOrganizeCode(), productionPsOutContext.getProductSn(), productionPsOutContext.getPartNo())) productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) { + productionRecord.setReportType((null != prodRuleContext && !StringUtils.isEmpty(prodRuleContext.getReportType())) ? prodRuleContext.getReportType() : MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); + if (productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0) productionRecord.setReportPartNo(productionPsOutContext.getPartNo()); + productionRecord.setReportStatus(productionRecord.getReportType().compareTo(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()) != 0 ? MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() : MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + if (productionRecord.getReportStatus().compareTo(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()) == 0 && isSamePart(productionPsInContext, productionPsOutContext) && + checkPsIsReported(reqBean.getOrganizeCode(), productionPsOutContext.getProductSn(), productionPsOutContext.getPartNo())) productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } else { + //排序的汇报基于工单装配件,加工记录默认不汇报 + productionRecord.setReportType(MesExtEnumUtil.NOSORT_REPORT_TYPE.NO_REPORT.getValue()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + } productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index e9f039b..b37d63c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -108,8 +108,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi //验证工单的有效性 List productionPartContextList = new ArrayList<>(); List productionPsInContextList = new ArrayList<>(); + List productionPsOutContextList = new ArrayList<>(); if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, workCenter, - equipVariableCollectContextList, productionPartContextList, productionPsInContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + equipVariableCollectContextList, productionPartContextList, productionPsInContextList, productionPsOutContextList).isCompleted()) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); //扫描场景下合并历史产出零件信息/产品条码信息 if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && @@ -131,6 +132,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); //保存上下文产品条码信息 productionDispatchContextStepService.dispatchProductionPsInContext(reqBean, productionPsInContextList); + //保存上下文产出条码信息 + productionDispatchContextStepService.dispatchProductionPsOutContext(reqBean, productionPsOutContextList); //存储展示组件MODULE_CONTENT内容 productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); @@ -171,8 +174,10 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi } //验证工单的有效性 - private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, - List equipVariableCollectContextList, List productionPartContextList, List productionPsInContextList) { + private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, + List equipVariableCollectContextList, List productionPartContextList, + List productionPsInContextList, List productionPsOutContextList) { //搜集生产工单号 List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); @@ -215,6 +220,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi //封装产品条码 productionPsInContextList.add(new MesProductionPsInContext(productionProcessContext.getWorkCell(), produceSn).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); + //封装产出条码 + productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn)); + } //封装空腔 @@ -257,6 +265,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi productionDispatchContextStepService.removeProductionPartContext(reqBean); //删除上下文产品条码信息 productionDispatchContextStepService.removeProductionPsInContext(reqBean); + //删除上下文产出条码信息 + productionDispatchContextStepService.removeProductionPsOutContext(reqBean); return true; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java new file mode 100644 index 0000000..741da0a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderQueueSaveStepService.java @@ -0,0 +1,76 @@ +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.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; +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.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +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.repository.MesQueueOrderRepository; +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 java.util.List; + +/** + * @Description : 保存工位队列信息工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderQueueSaveStepService") +public class MesWorkOrderQueueSaveStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private MesQueueOrderRepository queueOrderRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文条码数据信息集合 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsInContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在零件条码信息,请重置工序解决!"); + + productionPsInContextList.stream().filter(o -> null != o).forEach(o -> saveWorkOrderQueue(reqBean, o)); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存工位队列成功!"); + + } + + private void saveWorkOrderQueue(StationRequestBean reqBean, MesProductionPsInContext productionPsInContext) { + queueOrderRepository.updateByProperties( + new String[]{MesPcnExtConstWords.ID}, + new Object[]{productionPsInContext.getRelateId()}, + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.STATUS}, + new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.QUEUE_ORDER_STATUS.FINISH.getValue()}); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index d3d0b83..efd5334 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -111,7 +111,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) productionProcessContext.workCenterJson(prodOrgExtService.getWorkCenterDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode())); //生产过程上下文对象赋值工位信息 - if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) productionProcessContext.workCellJson(prodOrgExtService.getWorkCellDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) productionProcessContext.workCellJson(prodOrgExtService.getWorkCellDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), true)); //生产过程上下文对象赋值工序工艺信息 if (isCheckProcess && (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode()))) processContext(reqBean, productionProcessContext); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index 5d2ba15..3abbfe3 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -2,11 +2,9 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import io.swagger.annotations.ApiParam; import lombok.Data; import org.springframework.beans.BeanUtils; -import org.springframework.util.StringUtils; import java.io.Serializable; @@ -33,6 +31,11 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa return this; } + public MesProductionPsOutContext foreignKey(Integer foreignKey) { + this.foreignKey = foreignKey; + return this; + } + public MesProductionPsOutContext copy(MesProduceSn produceSn) { BeanUtils.copyProperties(produceSn, this); return this; 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 a33cda8..5ea08e4 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 @@ -197,6 +197,8 @@ public class MesPcnExtConstWords { public static final String DESCRIPTION = "description"; //描述 public static final String REMARK = "remark"; + //状态 + public static final String STATUS = "status"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) public static final String[] BASE_BEAN_FIELDS = {ID, IS_DELETED, IS_VALID, CREATE_DATE_TIME, CREATE_USER, MODIFY_DATE_TIME, MODIFY_USER, DESCRIPTION, REMARK, SYSTEM_SYNC_DATE_TIME, SYSTEM_SYNC_STATUS};