diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java index 3cd742a..0de3b24 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesRawSnWeightRecordService.java @@ -7,6 +7,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import java.util.List; public interface IMesRawSnWeightRecordService { - void insertRawRemainWeightRecord(MesProductionAssemblyContext context, String organizeCode, String username); + void insertRawRemainWeightRecord(String productSn, MesProductionAssemblyContext context, String organizeCode, String username); void insertOutPartNoWeightRecord(MesProductionPsOutContext productionPsOutContext, List productionAssemblyNosortContextList, String organizeCode, String username); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java index 5a388cc..8752bc1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesContainerSnBindServiceImpl.java @@ -58,6 +58,8 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService private SnowflakeIdMaker snowflakeIdMaker; @Autowired protected MesContainerPackageDetailFeedingRepository packageDetailFeedingRDao; + @Autowired + private MesRawSnWeightRecordRepository rawSnWeightRecordRDao; private MesContainerPackage getContainerPackage(MesContainerSnBindModel model, String containerSn) { MesContainerPackage containerPackage = containerPackageRDao.getByProperty( @@ -467,7 +469,7 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService containerPart.setContainerType(containerType.getContainerType()); containerPart.setContainerPackage(containerPackage); - MesContainerPackageDetail packageDetail = createContainerPackageDetail(model, containerPackage, containerPart, matchResult); + MesContainerPackageDetail packageDetail = createContainerPackageDetail(containerType, model, containerPackage, containerPart, matchResult); List combPackageDetails = new ArrayList<>(oldPackageDetails); if (CollectionUtils.isEmpty(bottomPackageDetails)) { combPackageDetails.add(packageDetail); @@ -692,7 +694,7 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService return containerPackage; } - private MesContainerPackageDetail createContainerPackageDetail(MesContainerSnBindModel model, MesContainerPackage containerPackage, MesContainerPartsModel containerPart, Map matchResult) { + private MesContainerPackageDetail createContainerPackageDetail(MesContainerType containerType, MesContainerSnBindModel model, MesContainerPackage containerPackage, MesContainerPartsModel containerPart, Map matchResult) { Object qty = matchResult.get(MesPcnExtConstWords.QTY); Object dataType = matchResult.get(MesPcnExtConstWords.DATA_TYPE); MesContainerPackageDetail detail = new MesContainerPackageDetail(); @@ -710,6 +712,14 @@ public class MesContainerSnBindServiceImpl implements IMesContainerSnBindService detail.setSnStatus(MesExtEnumUtil.CONTAINER_BARCODE_STATUS.STATUS_10.getValue()); ConvertBean.serviceModelInitialize(detail, model.getUserName()); + + if (Objects.equals(containerType.getContainerType(), MesExtEnumUtil.CONTAINER_TYPE.CONTAINER_TYPE_50.getValue())) { + MesRawSnWeightRecord rawSnWeightRecord = rawSnWeightRecordRDao.getByProperty(new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, "barCode"}, + new Object[]{containerPackage.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), model.getBarCode()}); + if (rawSnWeightRecord != null) { + detail.setCreateDatetime(rawSnWeightRecord.getCreateDatetime()); + } + } return detail; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java index 0e4ec52..662b2bb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesRawSnWeightRecordServiceImpl.java @@ -10,11 +10,9 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesRawMixCfgDetail; -import cn.estsh.i3plus.pojo.mes.bean.MesRawSnWeightRecord; -import cn.estsh.i3plus.pojo.mes.bean.MesRawWeightCfg; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.repository.MesRawMixCfgDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawSnWeightRecordLogRepository; import cn.estsh.i3plus.pojo.mes.repository.MesRawSnWeightRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesRawWeightCfgRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -34,9 +32,11 @@ public class MesRawSnWeightRecordServiceImpl implements IMesRawSnWeightRecordSer private MesRawMixCfgDetailRepository rawMixCfgDetailRDao; @Autowired private IMesPartService partService; + @Autowired + private MesRawSnWeightRecordLogRepository rawSnWeightRecordLogRDao; @Override - public void insertRawRemainWeightRecord(MesProductionAssemblyContext context, String organizeCode, String username) { + public void insertRawRemainWeightRecord(String productSn, MesProductionAssemblyContext context, String organizeCode, String username) { MesRawMixCfgDetail detail = rawMixCfgDetailRDao.getByProperty( new String[]{"organizeCode", "isValid", "isDeleted", "outPartNo", "partNo"}, new Object[]{organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue(), context.getPartNo(), context.getAssemblyPartNo()}); @@ -61,6 +61,16 @@ public class MesRawSnWeightRecordServiceImpl implements IMesRawSnWeightRecordSer record.setRawType(detail.getRawType()); ConvertBean.serviceModelInitialize(record, username); rawSnWeightRecordRDao.insert(record); + + MesRawSnWeightRecordLog recordLog = new MesRawSnWeightRecordLog(); + recordLog.setOrganizeCode(organizeCode); + recordLog.setProductSn(productSn); + recordLog.setAssemblySn(context.getAssemblySn()); + recordLog.setOriginWeight(remainQty); + recordLog.setDeductionWeight(context.getQty()); + recordLog.setRemainWeight(record.getNetWeight()); + ConvertBean.serviceModelInitialize(recordLog, username); + rawSnWeightRecordLogRDao.insert(recordLog); } @Override diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java index 08708e6..d4f0763 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyMatchRawMixStepService.java @@ -3,18 +3,25 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesNumberRuleMatchDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesTimeEfficientCfgMatchService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; 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.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesRawSnWeightRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesShift; 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; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawSnWeightRecordRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,7 +32,7 @@ import org.springframework.util.StringUtils; import java.util.*; /** - * @Description : 匹配调配原料条码工步 + * @Description : 原料调配原料条码工步 * @Author : jason.niu **/ @Slf4j @@ -41,6 +48,10 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { private MesAssemblyShowNosortStepService assemblyShowNosortStepService; @Autowired private MesProduceSnRepository produceSnRDao; + @Autowired + private IMesTimeEfficientCfgMatchService timeEfficientCfgMatchService; + @Autowired + private MesRawSnWeightRecordRepository rawSnWeightRecordRDao; @Override public StepResult execute(StationRequestBean reqBean) { @@ -72,6 +83,7 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { } MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + // 是否所有装配件均已扫描过 if (isAllAssemblyMatchRawMix(workCenter, prodRuleContextList)) { return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "调配原料装配成功!"); } @@ -148,6 +160,20 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { continue; } + MesContainerPackageDetailContext containerPackageDetailContext = new MesContainerPackageDetailContext(); + containerPackageDetailContext.setPartNo(productionAssemblyNosortContext.getAssemblyPartNo()); + containerPackageDetailContext.setBarCode(barcode); + String firstOpenTime = getRawSnWeightRecordFirstOpenTime(reqBean.getOrganizeCode(), barcode); + containerPackageDetailContext.setCreateDatetime(firstOpenTime); + + //验证时效性 + Map timeEfficientResult = timeEfficientCfgMatchService.checkSnTimelinessContainerMatch(reqBean.getOrganizeCode(), containerPackageDetailContext, productionAssemblyNosortContext.getSourceId()); + if (!(Boolean)timeEfficientResult.get(MesPcnExtConstWords.RESULT)) { + String msg = (String) timeEfficientResult.get(MesPcnExtConstWords.MESSAGE); + stepResult.setMsg(msg); + return false; + } + //验证返回result里面是否存在assemblySn,存在特殊的规则会转换成新的条码 String assemblySn = !result.containsKey(MesPcnExtConstWords.ASSEMBLY_SN) ? barcode : (String) result.get(MesPcnExtConstWords.ASSEMBLY_SN); MesProductionAssemblyNosortContext filter = (MesProductionAssemblyNosortContext) result.get(MesPcnExtConstWords.DATA); @@ -170,6 +196,20 @@ public class MesAssemblyMatchRawMixStepService extends BaseStepService { return false; } + /** + * 获取调配原料首次开罐时间,即首次被装配的时间。 + * @param organizeCode + * @param barCode + * @return + */ + private String getRawSnWeightRecordFirstOpenTime(String organizeCode, String barCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(barCode, "barCode", packBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + MesRawSnWeightRecord record = rawSnWeightRecordRDao.getByProperty(packBean); + return record != null ? record.getCreateDatetime() : TimeTool.getNowTime(true); + } + private Map checkProductSnRule(String organizeCode, String barcode) { Map result = new HashMap<>(); result.put(MesPcnExtConstWords.RESULT, false); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java index 853e318..b33ce01 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java @@ -229,6 +229,6 @@ public class MesAssemblySaveStepService extends BaseStepService { //保存装配件绑定记录 insertProductionAssembly(reqBean, productionProcessContext, cellEquipContext, prodRuleContext, productionPsOutContext, productionAssemblyNosortContext, scanMonitorContext, productSnIdList); //写入调配原料剩余数量 - rawSnWeightRecordService.insertRawRemainWeightRecord(productionAssemblyNosortContext, reqBean.getOrganizeCode(), reqBean.getUserInfo()); + rawSnWeightRecordService.insertRawRemainWeightRecord(productionPsOutContext.getProductSn(), productionAssemblyNosortContext, reqBean.getOrganizeCode(), reqBean.getUserInfo()); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesGlueSprayedAmountStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesGlueSprayedAmountStepService.java index 23d95d0..661af8d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesGlueSprayedAmountStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesGlueSprayedAmountStepService.java @@ -21,6 +21,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableParamRepository; import cn.estsh.i3plus.pojo.mes.repository.MesPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesRawMixCfgDetailRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -74,11 +75,14 @@ public class MesGlueSprayedAmountStepService extends BaseStepService { //当前工位使用的设备 MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); - List equipVariableIds = getEquipmentVariable(organizeCode, cellEquipContext.getEquipId()); - List variableContexts = equipmentLogExtService.getEquipmentLogCollectList(organizeCode, cellEquipContext.getEquipId(), MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), equipVariableIds); + Map equipVariableIds = getEquipmentVariable(organizeCode, cellEquipContext.getEquipId()); + List variableContexts = equipmentLogExtService.getEquipmentLogCollectList(organizeCode, cellEquipContext.getEquipId(), MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), new ArrayList<>(equipVariableIds.keySet())); Map variableMap = new HashMap<>(); for (MesEquipVariableCollectContext context : variableContexts) { - variableMap.put(context.(), context.getEquipVariableValue()); + String variableParamType = equipVariableIds.get(context.getEquipVariableId()); + if (!StringUtils.isEmpty(variableParamType)) { + variableMap.put(variableParamType, context.getEquipVariableValue()); + } } //遍历产品加工规则 @@ -127,25 +131,24 @@ public class MesGlueSprayedAmountStepService extends BaseStepService { paramLog.setDiluentPartNo(assemblyPartNo); } } - + paramLog.setParamValue(JSONUtil.toJsonStr(variableMap)); equipVarParamLogRDao.insert(paramLog); } return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "统计每摸模自动喷胶量!"); } - private List getEquipmentVariable(String organizeCode, Integer equipId) { - List result = new ArrayList<>(); - if (equipId == null) { - return result; - } - - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getNumEqualPack(equipId, "equipId", packBean); - List variableParams = equipVarParamRDao.findByHqlWhere(packBean); - for (MesEquipmentVariableParam param : variableParams) { - result.add(param.getEquipVariableId().longValue()); + // 获取设备变量ID对应的变量参数类型 + private Map getEquipmentVariable(String organizeCode, Integer equipId) { + Map result = new HashMap<>(); + if (equipId != null) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(equipId, "equipId", packBean); + List variableParams = equipVarParamRDao.findByHqlWhere(packBean); + for (MesEquipmentVariableParam param : variableParams) { + result.put(param.getEquipVariableId().longValue(), param.getParamType()); + } } - return null; + return result; } }