diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java index b1e06ce..52a8e63 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java @@ -27,7 +27,6 @@ public class XiaoPengPrintStrategy implements IPrintTemplateStrategyService { public MesProduceSnPrintDataModel execute(StepResult stepResult, StationRequestBean reqBean, MesProductionPsOutContext sn, String organizeCode) { //从条码中截取流水号,流水号 后四位 String productSn = sn.getProductSn(); - Map map = new HashMap<>(); String partNo = sn.getPartNo(); String partName = sn.getPartName(); LocalDateTime now = LocalDateTime.now(); 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 b125985..6263be2 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 @@ -4,21 +4,27 @@ 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.serviceimpl.strategy.numberrule.INumberRulePackAttributeStrategy; +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.model.MesNumberRuleStrategyModel; 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.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; 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.MesCustomerPartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesNumberRuleRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,6 +34,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -59,6 +66,12 @@ public class MesProductSnGenerateStepService extends BaseStepService { @Autowired private MesProduceSnRepository produceSnRepository; + @Autowired + private MesNumberRuleRepository mesNumberRuleRao; + + @Autowired + private MesCustomerPartRepository mesCustomerPartRDao; + @Override public StepResult execute(StationRequestBean reqBean) { @@ -147,9 +160,42 @@ public class MesProductSnGenerateStepService extends BaseStepService { 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)).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString()); + String sn; + if(null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())){ + sn = productionPsInContext.getProductSn(); + }else { + String snRule = part.getProductMatchRule(); + //获取条码规则,根据条码规则中的序列号长度截取序列号 + DdlPackBean mesRulePackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(snRule, "ruleCode", mesRulePackBean); + List ruleList = mesNumberRuleRao.findByHqlWhere(mesRulePackBean); + if (!ruleList.isEmpty()) { + MesNumberRule numberRule = ruleList.get(0); + String methodNameExt = numberRule.getMethodNameExt(); + INumberRulePackAttributeStrategy strategy = (INumberRulePackAttributeStrategy)SpringContextsUtil.getBean(methodNameExt); + if (strategy == null){ + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(),String.format("零件号【%s】的编码规则【%s】生产编码的构造入参方法名未配置!", part.getPartNo(),snRule)); + } + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(part.getPartNo(), "erpPartNo", ddlPackBean); + MesCustomerPart mesCustomerPart = mesCustomerPartRDao.getByProperty(ddlPackBean); + if (Objects.isNull(mesCustomerPart)) { + MesPcnException.throwMesBusiException("物料【%s】客户零件关系未维护", part.getPartNo()); + } + + MesNumberRuleStrategyModel model = new MesNumberRuleStrategyModel(); + model.setCustPartNo(mesCustomerPart.getCustPartNo()); + model.setSnRule(snRule); + model.setPartNo(part.getPartNo()); + model.setPartName(part.getPartName()); + model.setProdLocation(reqBean.getWorkCenterCode()); + GenSerialNoModel genSerialNoModel = strategy.execute(model); + sn = syncFuncService.syncSerialNo(genSerialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString(); + }else { + sn=syncFuncService.syncSerialNo(new GenSerialNoModel(getProduceSnNumberRule(reqBean, resultBean, part)).partNo(part.getPartNo()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString(); + } + } + produceSn.setProductSn(sn); produceSn.setSerialNumber(syncFuncService.syncSerialNo(new GenSerialNoModel(MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE).prodLocation(reqBean.getWorkCenterCode()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/INumberRulePackAttributeStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/INumberRulePackAttributeStrategy.java new file mode 100644 index 0000000..7b6d477 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/INumberRulePackAttributeStrategy.java @@ -0,0 +1,22 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule; + +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNumberRuleStrategyModel; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/26 9:34 + * @Modify: + **/ +public interface INumberRulePackAttributeStrategy { + /** + * 封装封装生成条码模型 + * @return 生成条码模型 + */ + @ApiOperation(value = "封装封装生成条码模型", notes = "封装封装生成条码模型") + GenSerialNoModel execute(MesNumberRuleStrategyModel model); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/strategy/XiaoPengNumberRuleStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/strategy/XiaoPengNumberRuleStrategy.java new file mode 100644 index 0000000..2c72b9c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/strategy/XiaoPengNumberRuleStrategy.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule.INumberRulePackAttributeStrategy; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNumberRuleStrategyModel; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/26 9:38 + * @Modify: + **/ +@Component +public class XiaoPengNumberRuleStrategy implements INumberRulePackAttributeStrategy { + + + @Override + public GenSerialNoModel execute(MesNumberRuleStrategyModel model) { + Date date = new Date(); + // XIAO_PENG 原客户条码.小鹏汽车 NoSortBarCodeGZ-new + //{custPartNo}{SPILTRULE}{year}{month}{day}{hour}{minute}{second}{serialNo} + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(); + genSerialNoModel.setRuleCode(model.getSnRule()); + //客户零件号 + String custPartNo = model.getCustPartNo(); + genSerialNoModel.setCustPartNo(custPartNo); + //日期${dateShort} + genSerialNoModel.setYear(getYearShort(date)); + genSerialNoModel.setMonth(getMonthShort(date)); + genSerialNoModel.setDay(getDayShort(date)); + //中杠 - + //生产日期 + 时间 yyyyMMddHHmmss + //流水号 5位 每天从1开始 + return genSerialNoModel; + } + + private String getYearShort(Date date) { + return MesExtEnumUtil.YEAR_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getYear(date))); + } + + private String getMonthShort(Date date) { + + return MesExtEnumUtil.MONTH_SHORT.valueOfDescription(Integer.parseInt(TimeTool.getMonth(date))); + } + + private String getDayShort(Date date) { + return TimeTool.getDay(date); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNumberRuleStrategyModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNumberRuleStrategyModel.java new file mode 100644 index 0000000..240282d --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesNumberRuleStrategyModel.java @@ -0,0 +1,42 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description : 打印数据 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/20 11:40 + * @Modify: + **/ +@Data +@NoArgsConstructor +public class MesNumberRuleStrategyModel { + + @ApiParam("物料号") + private String partNo; + + @ApiParam("物料名称") + private String partName; + + @ApiParam("生产厂家名称") + private String factoryName; + + @ApiParam("生产日期") + private String productDate; + + @ApiParam("供应商代码") + private String supplierCode; + + @ApiParam("客户物料号") + private String custPartNo; + + @ApiParam("打印规则") + private String snRule; + + @ApiParam("产地") + private String prodLocation; + +} \ No newline at end of file