diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java index a66bab0..94143f8 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java @@ -13,6 +13,9 @@ public interface IMesProduceSnExtService { @ApiOperation(value = "根据零件条码查询零件条码信息") List getProduceSnList(String organizeCode, List productSnList); + @ApiOperation(value = "根据零件条码ID查询零件条码信息") + MesProduceSn getProduceSn(String organizeCode, Long id); + @ApiOperation(value = "根据零件条码查询零件条码信息") Map> getProduceSnMap(String organizeCode, List productSnList); @@ -25,5 +28,4 @@ public interface IMesProduceSnExtService { @ApiOperation(value = "根据零件条码ID修改条码状态,工位") void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List idList); - } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index 2a8675b..cac4e4d 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -27,7 +27,7 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "获取上下文加工结果") String getProductResultContext(StationRequestBean reqBean); - @ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】") + @ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】") Boolean saveProductResultContext(StationRequestBean reqBean, String productResult); @ApiOperation(value = "删除上下文加工结果") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java index 8b9604c..97c5732 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java @@ -45,6 +45,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { return produceSnRepository.findByHqlWhere(packBean); } + //根据零件条码ID查询零件条码信息 + @Override + public MesProduceSn getProduceSn(String organizeCode, Long id) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return null; + return produceSnRepository.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}); + } + //根据零件条码查询零件条码信息 @Override public Map> getProduceSnMap(String organizeCode, List productSnList) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java index cc14197..122db4e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchNosortStepService.java @@ -158,6 +158,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService { } + prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList); + //TODO 发送设备加工参数 if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList); 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 b025ee5..481b1a6 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 @@ -293,7 +293,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //显示装配件信息 - private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList) { + public Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List prodRuleContextList, List productionPartContextList) { Map productionPartMap = productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 0d4335e..a4ac701 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -189,16 +189,22 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List productionPartContextList, Boolean isBackError) { - //从上下文中取出零件信息集合 - Map partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean); - //从一模多腔信息中搜集零件编码并去重 List partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError); + + } + + public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List partNoList, Boolean isBackError) { + if (CollectionUtils.isEmpty(partNoList)) return stepResult; + //从上下文中取出零件信息集合 + Map partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean); + //验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码 - if (!CollectionUtils.isEmpty(partDataMap) && !CollectionUtils.isEmpty(partNoList) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return stepResult; + if (!CollectionUtils.isEmpty(partDataMap) && !CollectionUtils.isEmpty(partNoList) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return stepResult.obj(partDataMap); //根据物料编码集合查询物料信息 Map finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList); @@ -208,7 +214,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { //保存上下文零件数据信息 if (!CollectionUtils.isEmpty(finalPartDataMap) && CollectionUtils.isEmpty(filterList)) - return stepResult.isCompleted(productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap)).msg(!stepResult.isCompleted() ? "零件数据信息保存上下文操作执行失败,请重试!" : null); + return stepResult.isCompleted(productionDispatchContextStepService.savePartDataContext(reqBean, finalPartDataMap)).obj(finalPartDataMap).msg(!stepResult.isCompleted() ? "零件数据信息保存上下文操作执行失败,请重试!" : null); //验证错误 根据isBackError判断是否抛出异常 stepResult.isCompleted(false).msg(String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index feaad16..bbac40a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -137,7 +137,7 @@ public class MesProductResultReadStepService extends BaseStepService { matchVariableCategoryMap(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); //保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果 - if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, (String) stepResult.getObj()); + if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfCodeStr((String) stepResult.getObj())); return stepResult; 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 6e3d019..425e921 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 @@ -1,41 +1,33 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPojoVersionService; +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.apiservice.util.MesPcnException; -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.context.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; -import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; -import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesPojoVersion; 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.GenSerialNoModel; 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.MesPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.hutool.core.date.DateUtil; -import com.google.common.base.Objects; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; 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.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -43,158 +35,180 @@ import java.util.stream.Collectors; * @Author : wangjie **/ @Slf4j -@Service +@Service("mesProductSnGenerateStepService") public class MesProductSnGenerateStepService extends BaseStepService { - @Autowired - private SnowflakeIdMaker snowflakeIdMaker; @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired - private MesPartRepository mesPartRepository; + private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private MesProduceSnRepository mesProduceSnRepository; + private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired - private ISyncFuncService syncFuncService; + private MesFirstMouldNoReadStepService firstMouldNoReadStepService; - public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + @Autowired + private ISyncFuncService syncFuncService; @Autowired - private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + private IMesProduceSnExtService produceSnExtService; @Autowired - private IMesPojoVersionService mesPojoVersionService; + private MesProduceSnRepository produceSnRepository; - /**todo 有产成无进料场景 - * todo 根据装配件条码没有找到加工规则,如果需要跳过装配件绑定,直接生成条码,就需要不看加工规则,直接根据产成零件生成条码,当前设计方式就需要变更。 - * @param reqBean - * @return - */ @Override public StepResult execute(StationRequestBean reqBean) { StationResultBean resultBean = new StationResultBean(); StepResult stepResult = StepResult.getSuccessComplete(); - String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); - // 获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); - MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); - // 获取产出零件信息 - List productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean); - if (CollectionUtils.isEmpty(productionPartContextList)) { - foundExThrow(reqBean, "必过工步不允许跳过"); - } - // 获取零件号,可能存在多个 - List partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList()); - // 根据零件号组装产品条码信息 - List mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList, result); - // 保存条码信息 - mesProduceSnRepository.saveAll(mesProduceSns); - - savePojoVersion(mesProduceSns); - - List mesProductionPsOutContexts = new ArrayList<>(); - for (MesProduceSn mesProduceSn : mesProduceSns) { - MesProductionPsOutContext mesProductionPsOutContext = new MesProductionPsOutContext(); - BeanUtils.copyProperties(mesProduceSn, mesProductionPsOutContext); - mesProductionPsOutContexts.add(mesProductionPsOutContext); - } - // 放到上下文 - mesProductionDispatchContextStepService.saveProductionPsOutContext(reqBean, mesProductionPsOutContexts); - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成零件条码成功"); - } + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + //排序线 直接跳过 + if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return stepResult; + + //已经生成过零件条码 + if (productionDispatchContextStepService.checkProductionPsOutIsExistContext(reqBean)) return stepResult; - private void savePojoVersion(List mesProduceSns) { - mesProduceSns.forEach(mesProduceSn -> { - MesPojoVersion version = new MesPojoVersion(); - version.setRefId(mesProduceSn.getId()); - version.setRefClass(mesProduceSn.getClass().getName()); - version.setBean(JsonUtilTool.encode(mesProduceSn)); - version.setCreateUser(version.getCreateUser()); - version.setModifyUser(version.getModifyUser()); - version.setVersionMethodName("insert"); - version.setOrganizeCode(mesProduceSn.getOrganizeCode()); - mesPojoVersionService.recordPojoVersion(version); + //获取上下文产品加工规则数据信息集合 + List prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + if (CollectionUtils.isEmpty(prodRuleContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在加工规则信息,请重置工序解决!"); + + //获取生产线的当前班组班次信息 + MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + if (null == prodShiftContext) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在生产开班记录,请重新开班!"); + + //获取上下文产出零件数据信息集合 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //获取上下文进料零件条码信息集合 + List productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean); + + //获取上下文零件数据信息 + List partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false); + + //获取上下文加工结果 + String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); + + Map ppMap = CollectionUtils.isEmpty(productionPartContextList) ? null : productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); + Map psMap = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsInContext::getForeignKey, o -> o)); + Map partMap = (Map) stepResult.getObj(); + + //循环生成零件条码,并写入产出零件 + List productionPsOutContextList = new ArrayList<>(); + prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getOutPartNo()))).forEach(o -> { + MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, ppMap, psMap, partMap, prodShiftContext, productResult); + if (null != productionPsOutContext) productionPsOutContextList.add(productionPsOutContext); }); + + //保存上下文产出条码数据信息集合 + productionDispatchContextStepService.saveProductionPsOutContext(reqBean, productionPsOutContextList); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成零件条码成功!"); + } - /** - * 根据零件号组装产品条码信息 - * @param reqBean - * @param productionProcessContext - * @param mesWorkCell - * @param partNoList - * @return - */ - private List generateSn(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesWorkCell mesWorkCell, List partNoList, String result) { - List mesProduceSns = new ArrayList<>(); - for (String partNo : partNoList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean); - MesPart mesPart = mesPartRepository.getByProperty(packBean); - if (mesPart == null) { - MesPcnException.throwFlowException("零件号不存在"); - } - // 根据条码规则生成条码 - String sn = generateByRule(mesPart); - // 组装条码信息 - MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn, mesWorkCell, productionProcessContext, reqBean, result); - ConvertBean.serviceModelInitialize(mesProduceSn, reqBean.getUserInfo()); - mesProduceSns.add(mesProduceSn); + //生成零件条码 + private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext, + Map ppMap, Map psMap, Map partMap, MesProdShiftContext prodShiftContext, String productResult) { + + //产出零件数据信息 + 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()); + + //加工规则中进料零件与产出零件是否一致 + Boolean isSamePart = isSamePart(prodRuleContext.getInPartNo(), prodRuleContext.getOutPartNo()); + + //进出一致, 无需生成 + if (isSamePart) return new MesProductionPsOutContext().copy(produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), null != productionPsInContext ? productionPsInContext.getId() : null), prodRuleContext.getForeignKey()); + + //判断存在主条码的时候是否此前已生成当前工位的未知条码 + MesProduceSn produceSn = (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getRelateId())) ? null : produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getRelateId()); + if (null == produceSn) produceSn = new MesProduceSn(); + + try { + + produceSn.setProductSn((null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) ? productionPsInContext.getProductSn() : + syncFuncService.syncSerialNo(new GenSerialNoModel(getProduceSnNumberRule(reqBean, resultBean, part)).partNo(part.getPartNo()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString()); + + produceSn.setSerialNumber(syncFuncService.syncSerialNo(new GenSerialNoModel(MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE).prodLocation(reqBean.getWorkCenterCode()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString()); + + } catch (ImppBusiException e) { + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail()); + } + + 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()); } - return mesProduceSns; + + produceSn.setAreaCode(reqBean.getAreaCode()); + produceSn.setWorkCenterCode(reqBean.getWorkCenterCode()); + produceSn.setWorkCellCode(reqBean.getWorkCellCode()); + + produceSn.setPartNo(part.getPartNo()); + produceSn.setPartName(part.getPartName()); + produceSn.setProcessLabelTemplate(part.getProcessLabelTemplate()); + produceSn.setProdLabelTemplate(part.getProductLabelTemplate()); + produceSn.setCustLabelTemplate(part.getCustLabelTemplate()); + + produceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()); + produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + + produceSn.setShiftCode(prodShiftContext.getShiftCode()); + produceSn.setShiftGroup(prodShiftContext.getShiftGroup()); + + produceSn.setPrintCount(MesPcnExtConstWords.ZERO); + produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + + produceSn.setOrganizeCode(reqBean.getOrganizeCode()); + + if (StringUtils.isEmpty(produceSn.getId())) ConvertBean.serviceModelInitialize(produceSn, reqBean.getUserInfo()); + else ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo()); + + produceSn.setInWorkCenterTime(produceSn.getModifyDatetime()); + produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10)); + + if (StringUtils.isEmpty(produceSn.getId())) produceSn = produceSnRepository.insert(produceSn); + else produceSnRepository.save(produceSn); + + return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(produceSn.getWorkOrderNo()); + } - /** - * 生成条码 - * @param mesPart - * @return - */ - private String generateByRule(MesPart mesPart) { - //生成工单号 - GenSerialNoModel genSerialNoModel = new GenSerialNoModel(ORDER_NO_JIS_SORT); - genSerialNoModel.setPartNo(mesPart.getPartNo()); - List resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesPart.getCreateUser(), mesPart.getOrganizeCode(), 1).getResultList(); - return resultList.get(0); + private String getProduceSnNumberRule(StationRequestBean reqBean, StationResultBean resultBean, MesPart part) { + if (StringUtils.isEmpty(part.getProductMatchRule())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo())); + return part.getProductMatchRule(); } - private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, MesWorkCell mesWorkCell,MesProductionProcessContext productionProcessContext, StationRequestBean reqBean, String result) { - long serialNum = snowflakeIdMaker.nextId(); - - MesProduceSn mesProduceSn = new MesProduceSn(); - mesProduceSn.setSerialNumber(serialNum + ""); - mesProduceSn.setProductSn(sn); - mesProduceSn.setCustSn(sn); - mesProduceSn.setPartNo(mesPart.getPartNo()); - mesProduceSn.setPartName(mesPart.getPartName()); - mesProduceSn.setAreaCode(mesWorkCell.getAreaCode()); - mesProduceSn.setWorkCenterCode(mesWorkCell.getWorkCenterCode()); - mesProduceSn.setWorkCellCode(mesWorkCell.getWorkCellCode()); - mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); - mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate()); - mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); - mesProduceSn.setQty(1d); - mesProduceSn.setSnStatus(10); - Integer qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(); - if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { - qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue(); - } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) { - qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue(); - } - mesProduceSn.setQcStatus(qcStatus); - mesProduceSn.setLotNo(DateUtil.format(new Date(), "YYYYMMDD")); - mesProduceSn.setRouteCode(reqBean.getRouteCode()); - mesProduceSn.setProcessCode(productionProcessContext.getProcessCode()); - mesProduceSn.setCraftCode(productionProcessContext.getCraftCode()); - mesProduceSn.setPrintCount(0); - mesProduceSn.setPrintStatus(10); - mesProduceSn.setOrganizeCode(reqBean.getOrganizeCode()); - - return mesProduceSn; + private Boolean isSamePart(String inPartNo, String outPartNo) { + if (!StringUtils.isEmpty(inPartNo) && inPartNo.equals(outPartNo)) return true; + else return false; } + } 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 f7cd9f0..9b03a54 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 @@ -1,44 +1,56 @@ 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.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; 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.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import com.google.common.base.Objects; 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.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 保存零件条码信息工步 - * @Author : zxw + * @Author : wangjie **/ @Slf4j -@Service +@Service("mesProductSnSaveStepService") public class MesProductSnSaveStepService extends BaseStepService { @Autowired private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired - private MesProduceSnRepository mesProduceSnRepository; + private IMesProductionDispatchContextStepService productionDispatchContextStepService; - public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesFirstMouldNoReadStepService firstMouldNoReadStepService; + + @Autowired + private IMesProduceSnExtService produceSnExtService; @Autowired - private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + private MesProduceSnRepository produceSnRepository; @Override public StepResult execute(StationRequestBean reqBean) { @@ -47,32 +59,75 @@ public class MesProductSnSaveStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); - // 获取加工结果 - String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); - - List mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); - List mesProduceSns = new ArrayList<>(); - if (CollectionUtils.isEmpty(mesProduceSnContexts)) { - foundExThrow(reqBean, "条码信息不能为空"); - } - mesProduceSnContexts.forEach(mesProduceSnContext -> { - MesProduceSn mesProduceSn = new MesProduceSn(); - //todo 要根据不同的加工结果,返回不同的结果 要分排序和非排序, 排序只保存工单对应的装配件、非排序要保存主条码和装配件记录。 - - // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 - if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), result)) { - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()); - } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) { - mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); - } - mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); - - mesProduceSns.add(mesProduceSn); - }); - mesProduceSnRepository.saveAll(mesProduceSns); - - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码信息工步"); + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产出条码数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsOutContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在产出零件条码信息,请重置工序解决!"); + + //获取生产线的当前班组班次信息 + MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + if (null == prodShiftContext) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在生产开班记录,请重新开班!"); + + //获取上下文零件数据信息 + List partNoList = (productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false); + + //获取上下文加工结果 + String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); + Map partMap = (Map) stepResult.getObj(); + + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult)); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码成功!"); + } + + private void saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map partMap, MesProdShiftContext prodShiftContext, String productResult) { + + //根据零件条码ID查询零件条码信息 + MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId()); + + if (null == produceSn) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件条码信息,产出零件条码[%s]ID[%s]信息不存在!", productionPsOutContext.getProductSn(), productionPsOutContext.getId())); + + //零件信息 + MesPart part = partMap.get(produceSn.getPartNo()); + + produceSn.setAreaCode(reqBean.getAreaCode()); + produceSn.setWorkCenterCode(reqBean.getWorkCenterCode()); + produceSn.setWorkCellCode(reqBean.getWorkCellCode()); + + 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()); + produceSn.setShiftGroup(prodShiftContext.getShiftGroup()); + + produceSn.setProcessLabelTemplate(part.getProcessLabelTemplate()); + produceSn.setProdLabelTemplate(part.getProductLabelTemplate()); + produceSn.setCustLabelTemplate(part.getCustLabelTemplate()); + + ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo()); + produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime()); + produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10)); + + produceSnRepository.save(produceSn); + + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepServiceBak.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepServiceBak.java new file mode 100644 index 0000000..7ee036b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepServiceBak.java @@ -0,0 +1,77 @@ +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.MesProductionPsOutContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +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.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.google.common.base.Objects; +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.ArrayList; +import java.util.List; + +/** + * @Description : 保存零件条码信息工步 + * @Author : zxw + **/ +@Slf4j +@Service +public class MesProductSnSaveStepServiceBak extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private MesProduceSnRepository mesProduceSnRepository; + + public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; + + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + // 获取加工结果 + String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); + + List mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); + List mesProduceSns = new ArrayList<>(); + if (CollectionUtils.isEmpty(mesProduceSnContexts)) { + foundExThrow(reqBean, "条码信息不能为空"); + } + mesProduceSnContexts.forEach(mesProduceSnContext -> { + MesProduceSn mesProduceSn = new MesProduceSn(); + //todo 要根据不同的加工结果,返回不同的结果 要分排序和非排序, 排序只保存工单对应的装配件、非排序要保存主条码和装配件记录。 + + // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 + if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), result)) { + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()); + } else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) { + mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); + } + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + + mesProduceSns.add(mesProduceSn); + }); + mesProduceSnRepository.saveAll(mesProduceSns); + + 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/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 6516696..8c83e13 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -60,7 +60,7 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT); } - //保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】 + //保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】 @Override public Boolean saveProductResultContext(StationRequestBean reqBean, String productResult) { if (StringUtils.isEmpty(productResult)) return false; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java index 1a05d89..2c3953d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -31,6 +31,12 @@ public class MesProductionPartContext implements Serializable { @ApiParam("生产工单号") private String workOrderNo; + @ApiParam("客户代码") + private String custCode; + + @ApiParam("客户零件号") + private String custPartNo; + @ApiParam("工单数量") private Double qty; @@ -56,6 +62,7 @@ public class MesProductionPartContext implements Serializable { @ApiParam("信息来源") private Integer messageSource; + //根据一模多腔赋值 public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID); 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 73fa749..63b3f77 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 @@ -1,8 +1,11 @@ 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 io.swagger.annotations.ApiParam; import lombok.Data; +import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; import java.io.Serializable; @@ -14,7 +17,24 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa private static final long serialVersionUID = 5562937531822977296L; - @ApiParam(name = "数据关联键 非排序:snowflakeId") - private String foreignKey; + @ApiParam(name = "数据关联键") + private Integer foreignKey; + + @ApiParam(name = "是否计算工单完成数量") + private Integer isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + + public MesProductionPsOutContext() {} + + public MesProductionPsOutContext copy(MesProduceSn produceSn, Integer foreignKey) { + if (null == produceSn) return null; + BeanUtils.copyProperties(produceSn, this); + this.foreignKey = foreignKey; + return this; + } + + public MesProductionPsOutContext isCalcCompleteQty(String workOrderNo) { + if (!StringUtils.isEmpty(workOrderNo)) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + 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 b40032d..2c038d2 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 @@ -215,6 +215,9 @@ public class MesPcnExtConstWords { // : public static final String COLON = ":"; + //过程条码默认生成规则 + public static final String DEFAULT_SERIAL_NUMBER_RULE = "DEFAULT_SERIAL_NUMBER_RULE"; + // 定制页面名称(默认) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT";