生产条码时增加小鹏一维码规则

tags/yfai-pcn-ext-v1.0
administrator 11 months ago
parent 2a2f606ed7
commit 6400ab2846

@ -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<String,Object> map = new HashMap<>();
String partNo = sn.getPartNo();
String partName = sn.getPartName();
LocalDateTime now = LocalDateTime.now();

@ -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 {
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<MesNumberRule> 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());
}
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());
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());

@ -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);
}

@ -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);
}
}

@ -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;
}
Loading…
Cancel
Save