forked from I3-YF/i3plus-mes-pcn-yfai
44517 装箱防错后吐条码需求(芜湖)
parent
1edc7329f6
commit
47e87b8fe1
@ -0,0 +1,26 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @Description : 成品包装规则
|
||||
* @Reference :
|
||||
* @Author : wangjie
|
||||
* @CreateDate 2024/6/13 15:18
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesPackingRuleService {
|
||||
|
||||
@ApiOperation(value = "根据物料代码,零件类型查询成品包装明细规则")
|
||||
MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType);
|
||||
|
||||
@ApiOperation(value = "根据包装代码查询成品包装规则")
|
||||
MesPackingRule getPackingRule(String organizeCode, String packageCode);
|
||||
|
||||
@ApiOperation(value = "根据箱类别代号查询包装定义")
|
||||
MesPackingDefine getPackingDefine(String organizeCode, String packCode);
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @Description : 包装信息
|
||||
* @Reference :
|
||||
* @Author : wangjie
|
||||
* @CreateDate 2024/6/13 15:18
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesPackageExtService {
|
||||
|
||||
@ApiOperation(value = "根据ID查询包装信息")
|
||||
MesPackage getMesPackage(String organizeCode, Long id);
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingRuleService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackingDefineRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackingRuleDetailRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackingRuleRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* @Description : 成品包装规则
|
||||
* @Reference :
|
||||
* @Author : wangjie
|
||||
* @CreateDate 2024/6/13 15:18
|
||||
* @Modify:
|
||||
**/
|
||||
@Service
|
||||
public class MesPackingRuleService implements IMesPackingRuleService {
|
||||
|
||||
@Autowired
|
||||
private MesPackingRuleDetailRepository packingRuleDetailRepository;
|
||||
|
||||
@Autowired
|
||||
private MesPackingRuleRepository packingRuleRepository;
|
||||
|
||||
@Autowired
|
||||
private MesPackingDefineRepository packingDefineRepository;
|
||||
|
||||
@Override
|
||||
public MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(partType)) return null;
|
||||
return packingRuleDetailRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PART_TYPE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), partNo, partType});
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesPackingRule getPackingRule(String organizeCode, String packageCode) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(packageCode)) return null;
|
||||
return packingRuleRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageCode});
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesPackingDefine getPackingDefine(String organizeCode, String packCode) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(packCode)) return null;
|
||||
return packingDefineRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACK_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packCode});
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackageRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 包装信息
|
||||
* @Reference :
|
||||
* @Author : wangjie
|
||||
* @CreateDate 2024/6/13 15:18
|
||||
* @Modify:
|
||||
**/
|
||||
@Service
|
||||
public class MesPackageExtService implements IMesPackageExtService {
|
||||
|
||||
@Autowired
|
||||
private MesPackageRepository packageRepository;
|
||||
|
||||
@Override
|
||||
public MesPackage getMesPackage(String organizeCode, Long id) {
|
||||
return packageRepository.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});
|
||||
}
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog;
|
||||
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Description : 芜湖包装条码打印
|
||||
* @Reference :
|
||||
* @Author : wangjie
|
||||
* @CreateDate : 2024/9/29 16:43
|
||||
* @Modify:
|
||||
**/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class WuhuPackageNoPrintStrategy implements IPrintTemplateStrategyService {
|
||||
|
||||
@Autowired
|
||||
private IMesCustomerPartService mesCustomerPartService;
|
||||
|
||||
@Override
|
||||
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model,
|
||||
MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean,
|
||||
Boolean isStep) {
|
||||
|
||||
MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) &&
|
||||
!CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName()))
|
||||
? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName())
|
||||
: mesCustomerPartService.getMesCustomerPart(model.getOrganizeCode(), model.getPartNo());
|
||||
if (null == customerPart) MesPcnException.throwBusiException("零件号[%s]未维护客户物料信息", model.getPartNo());
|
||||
|
||||
// 返回的结果集合
|
||||
List<Map<String, Object>> printDataMapList = new ArrayList<>();
|
||||
if (!isStep) {
|
||||
//TODO 包装条码补打
|
||||
} else {
|
||||
model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart)));
|
||||
List<Map<String, Object>> resultMapList = new ArrayList<>();
|
||||
resultMapList.add(packResultMap(model, printDataMapList));
|
||||
model.setPrintContextList(resultMapList);
|
||||
}
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
private Map<String, Object> packResultMap(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
|
||||
resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList);
|
||||
resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
|
||||
resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter());
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
private MesPrintedSnLog getMesPrintedSnLog(MesPackage packageDb, String userName, String printData) {
|
||||
MesPrintedSnLog snLog = new MesPrintedSnLog();
|
||||
snLog.setBarcode(packageDb.getPackageNo());
|
||||
snLog.setPartNo(packageDb.getPartNo());
|
||||
snLog.setPartName(packageDb.getPartName());
|
||||
snLog.setPrintData(printData);
|
||||
snLog.setOrganizeCode(packageDb.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(snLog, userName);
|
||||
return snLog;
|
||||
}
|
||||
|
||||
private Map<String, Object> getPrintMap(MesProduceSnPrintModel model, MesPackage packageDb, MesCustomerPart customerPart) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
resultMap.put(MesPcnExtConstWords.PART_NO, packageDb.getPartNo());
|
||||
resultMap.put(MesPcnExtConstWords.PART_NAME, packageDb.getPartNo());
|
||||
resultMap.put(MesPcnExtConstWords.CUST_PART_NO, customerPart.getCustPartNo());
|
||||
resultMap.put(MesPcnExtConstWords.QR_CODE, packageDb.getPackageNo());
|
||||
resultMap.put(MesPcnExtConstWords.QTY, packageDb.getQty().intValue());
|
||||
resultMap.put(MesPcnExtConstWords.UNIT, packageDb.getUnit());
|
||||
resultMap.put(MesPcnExtConstWords.PACK_SPEC_QTY, packageDb.getPackSpecQty().intValue());
|
||||
resultMap.put(MesPcnExtConstWords.LOT_NO, packageDb.getLotNo().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R));
|
||||
// YFWHU|YFNSC901C241223042722|C901|401007574AAABN|9.0|EA|C901|20241223|
|
||||
// YFNSC901C241223042722 截取原始条码的 第7位到27位
|
||||
resultMap.put(MesPcnExtConstWords.BAR_CODE, packageDb.getPackageNo().length() >= 27 ? packageDb.getPackageNo().substring(6, 27) : packageDb.getPackageNo());
|
||||
resultMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, packageDb.getModifyDatetime().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R));
|
||||
model.getMesPrintedSnLogList().add(getMesPrintedSnLog(packageDb, model.getUserName(), JSONObject.toJSONString(resultMap)));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,485 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingRuleService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageExtService;
|
||||
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.print.IPrintTemplateStrategyService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
|
||||
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.model.MesProduceSnPrintModel;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
|
||||
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.MathOperation;
|
||||
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.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.IMesPrintedSnLogRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackageDetailRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesPackageRepository;
|
||||
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 com.alibaba.fastjson.JSONObject;
|
||||
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 javax.persistence.EntityManager;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 打包工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesPackageNoGenerateStepService")
|
||||
public class MesPackageNoGenerateStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionCustomContextStepService productionCustomContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesPackingRuleService packingRuleService;
|
||||
|
||||
@Autowired
|
||||
private IMesPackageExtService packageExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesTemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private ISyncFuncService syncFuncService;
|
||||
|
||||
@Autowired
|
||||
private IFsmRouteDataService fsmRouteDataService;
|
||||
|
||||
@Autowired
|
||||
private MesPackageRepository packageRepository;
|
||||
|
||||
@Autowired
|
||||
private IMesPrintedSnLogRepository printedSnLogRepository;
|
||||
|
||||
@Autowired
|
||||
private MesPackageDetailRepository packageDetailRepository;
|
||||
|
||||
@Autowired
|
||||
private EntityManager entityManager;
|
||||
|
||||
@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);
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||
|
||||
//排序线 直接跳过
|
||||
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return stepResult;
|
||||
|
||||
//获取上下文产出条码数据信息集合
|
||||
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
|
||||
|
||||
if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!");
|
||||
|
||||
//产出条码根据零件号分组
|
||||
Map<String, List<String>> productSnMap2Part = productionPsOutContextList.stream().filter(o -> null != o)
|
||||
.collect(Collectors.groupingBy(MesProductionPsOutContext::getPartNo, Collectors.mapping(MesProductionPsOutContext::getProductSn, Collectors.toList())));
|
||||
|
||||
//获取包装规则信息
|
||||
Map<String, MesPackageRuleContext> packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean);
|
||||
Integer initQty = CollectionUtils.isEmpty(packageRuleContextMap) ? MesPcnExtConstWords.ZERO : packageRuleContextMap.size();
|
||||
|
||||
//获取打包数据
|
||||
Map<String, String> packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean);
|
||||
|
||||
//不同的零件号分别打包处理
|
||||
for (Map.Entry<String, List<String>> entry : productSnMap2Part.entrySet()) {
|
||||
|
||||
if (null == entry) continue;
|
||||
|
||||
//解析当前零件已经存在的包装明细
|
||||
List<MesPackageDataContext> packageDataContextList = (CollectionUtils.isEmpty(packageDataContextMap) ||
|
||||
!packageDataContextMap.containsKey(entry.getKey())) ? null : JSONObject.parseArray(packageDataContextMap.get(entry.getKey()), MesPackageDataContext.class);
|
||||
|
||||
//获取生产过程打包规则
|
||||
MesPackageRuleContext packageRuleContext;
|
||||
if (!CollectionUtils.isEmpty(packageDataContextList) || (!CollectionUtils.isEmpty(packageRuleContextMap) && packageRuleContextMap.containsKey(entry.getKey()))) {
|
||||
//从缓存中获取, 如果存在包装信息, 则使用上次获取的包装信息
|
||||
packageRuleContext = !CollectionUtils.isEmpty(packageDataContextList) ? packageDataContextList.get(0) : packageRuleContextMap.get(entry.getKey());
|
||||
} else {
|
||||
//获取包装规则信息
|
||||
packageRuleContext = getPackageRuleContext(reqBean, entry.getKey());
|
||||
}
|
||||
|
||||
//无生产过程打包规则时, 忽略当前零件
|
||||
if (null == packageRuleContext) continue;
|
||||
|
||||
//更新包装规则信息
|
||||
if (null == packageRuleContextMap) packageRuleContextMap = new HashMap<>();
|
||||
if (!packageRuleContextMap.containsKey(entry.getKey())) packageRuleContextMap.put(entry.getKey(), packageRuleContext);
|
||||
|
||||
MesLabelTemplate labelTemplate = null;
|
||||
IPrintTemplateStrategyService strategyService = null;
|
||||
|
||||
if (CollectionUtils.isEmpty(packageDataContextList)) {
|
||||
//查询模版信息
|
||||
labelTemplate = templateService.getLabelTemplate(packageRuleContext.getPackageTemplate(), reqBean.getOrganizeCode());
|
||||
strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null;
|
||||
if (null == strategyService) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!",
|
||||
packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
//生成包装及明细, 根据标包数量判断是否执行打印 [递归]
|
||||
stepResult.setDataCollection(new ArrayList());
|
||||
packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue());
|
||||
|
||||
//更新实时的打包数据
|
||||
if (CollectionUtils.isEmpty(packageDataContextList)) packageDataContextMap.remove(entry.getKey());
|
||||
else packageDataContextMap.put(entry.getKey(), JSONObject.toJSONString(packageDataContextList));
|
||||
|
||||
//判断存在包装信息则进行打印
|
||||
if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) {
|
||||
execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List<MesPackage>) stepResult.getDataCollection());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//保存包装规则信息
|
||||
if (initQty != packageRuleContextMap.size()) productionProcessContextStepService.dispatchPackageRuleContext(reqBean, packageRuleContextMap);
|
||||
// 保存打包数据
|
||||
productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap);
|
||||
|
||||
return stepResult;
|
||||
|
||||
}
|
||||
|
||||
//获取包装规则信息
|
||||
private MesPackageRuleContext getPackageRuleContext(StationRequestBean reqBean, String partNo) {
|
||||
|
||||
//根据 物料代码,零件类型=包装物 查询成品包装明细规则
|
||||
MesPackingRuleDetail packingRuleDetail = packingRuleService.getPackingRuleDetail(reqBean.getOrganizeCode(), partNo, MesExtEnumUtil.PACKING_RULE_DETAIL_PART_TYPE.P.getValue());
|
||||
if (null == packingRuleDetail) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]未配置包装物类型的成品包装明细规则信息!",
|
||||
partNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(packingRuleDetail.getPackageCode()) ||
|
||||
StringUtils.isEmpty(packingRuleDetail.getPackSpecQty()) || MathOperation.compareTo(packingRuleDetail.getPackSpecQty(), new Double(0)) == 0) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]配置包装物类型的成品包装明细规则信息中必要信息无效:包装代码[%s]包装规格数量[%s]!",
|
||||
partNo, packingRuleDetail.getPackageCode(), packingRuleDetail.getPackSpecQty()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
|
||||
//根据包装代码查询成品包装规则
|
||||
MesPackingRule packingRule = packingRuleService.getPackingRule(reqBean.getOrganizeCode(), packingRuleDetail.getPackageCode());
|
||||
if (null == packingRule) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]未配置成品包装规则信息!",
|
||||
partNo, packingRuleDetail.getPackageCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
|
||||
String generateTypeName = MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.valueOfDescription(packingRule.getGenerateType());
|
||||
String packageBarcodeRule = packingRule.getPackageBarcodeRule();
|
||||
String packageTemplate = packingRule.getPackageTemplate();
|
||||
String printer = packingRule.getPrinter();
|
||||
|
||||
//如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义
|
||||
if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) &&
|
||||
(StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)))) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:统计方式[%s]箱类别代号[%s]!",
|
||||
partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode()),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
|
||||
//判断是否需要查询包装定义
|
||||
if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) {
|
||||
//根据箱类别代号查询包装定义
|
||||
MesPackingDefine packingDefine = packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode());
|
||||
if (null == packingDefine) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!",
|
||||
partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
|
||||
//如果为空, 则取包装定义中维护的信息
|
||||
if (StringUtils.isEmpty(packageBarcodeRule)) packageBarcodeRule = packingDefine.getPackageBarcodeRule();
|
||||
if (StringUtils.isEmpty(packageTemplate)) packageTemplate = packingDefine.getPackageTemplate();
|
||||
if (StringUtils.isEmpty(printer)) printer = packingDefine.getPrinter();
|
||||
|
||||
//此时 packageBarcodeRule || packageTemplate || printer 仍有一个为空则 记录日志 忽略当前零件的打包
|
||||
if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!",
|
||||
partNo, packingRuleDetail.getPackageCode(), packageBarcodeRule, packageTemplate, printer),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
//封装包装规则信息
|
||||
MesPackageRuleContext packageRuleContext = new MesPackageDataContext();
|
||||
BeanUtils.copyProperties(packingRuleDetail, packageRuleContext);
|
||||
BeanUtils.copyProperties(packingRule, packageRuleContext);
|
||||
packageRuleContext.setPackageBarcodeRule(packageBarcodeRule);
|
||||
packageRuleContext.setPackageTemplate(packageTemplate);
|
||||
packageRuleContext.setPrinter(printer);
|
||||
return packageRuleContext;
|
||||
}
|
||||
|
||||
//生成包装及明细, 根据标包数量判断是否执行打印 [递归]
|
||||
private List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult,
|
||||
MesPackageRuleContext packageRuleContext, List<MesPackageDataContext> packageDataContextList, List<String> productSnList) {
|
||||
|
||||
//缓存的包装条码明细数量
|
||||
Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size();
|
||||
//当前满足标包的差额数量
|
||||
Integer needQty = packageRuleContext.getPackSpecQty().intValue() - cachedQty;
|
||||
|
||||
//当前满足标包的差额条码
|
||||
List<String> productSnList2Cur;
|
||||
//除去当前满足标包的差额条码后的剩余条码
|
||||
List<String> productSnList2Remain = null;
|
||||
|
||||
//当前零件剩余未打包条码 如果小于等于 当前满足标包的差额数量, 则直接将 未打包条码赋给当前满足标包的差额条码, 否则 截取条码
|
||||
if (productSnList.size() <= needQty) {
|
||||
productSnList2Cur = productSnList;
|
||||
} else {
|
||||
productSnList2Cur = productSnList.subList(0, needQty);
|
||||
productSnList2Remain = productSnList.subList(needQty, productSnList.size());
|
||||
}
|
||||
|
||||
MesPackage packageDb = null;
|
||||
//判断是否存在缓存的包装条码明细信息,如果进行递归则已无包装条码, 则重新生成信息的包装条码
|
||||
if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = packageExtService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId());
|
||||
//缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息
|
||||
if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext);
|
||||
|
||||
//如果包装条码未空, 说明上面生成包装条码的时候 根据编码规则生成出现问题, 则直接退出, 记录日志, 忽略当前零件的打包
|
||||
if (null == packageDb) return null;
|
||||
|
||||
//当前的实际打包数量 = 缓存的包装条码明细数量 + 当前满足标包的差额条码的个数
|
||||
Integer curQty = cachedQty + productSnList2Cur.size();
|
||||
//判断当前是否满包
|
||||
Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue();
|
||||
//判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态
|
||||
packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed);
|
||||
|
||||
//判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据
|
||||
List<MesPackageDataContext> resultList = insertPackageDetailAndBackUnSealedResultList(reqBean, packageRuleContext, packageDb, productSnList2Cur, isSealed);
|
||||
|
||||
//如果当前的实际打包数量不满足标包, 则将此前已经缓存的条码合并到 当前未满包的包装条码明细数据resultList中
|
||||
if (!CollectionUtils.isEmpty(resultList) && !CollectionUtils.isEmpty(packageDataContextList)) resultList.addAll(packageDataContextList);
|
||||
|
||||
//判断满包 存储打包信息
|
||||
if (isSealed) stepResult.getDataCollection().add(packageDb);
|
||||
|
||||
//如果已无剩余条码, 则返回当前未满包的包装条码明细数据resultList
|
||||
if (CollectionUtils.isEmpty(productSnList2Remain)) return resultList;
|
||||
|
||||
//传递剩余条码进行递归处理: 此时packageDataContextList直接为null
|
||||
return doHandlePackagePrint(reqBean, stepResult, packageRuleContext, null, productSnList2Remain);
|
||||
|
||||
}
|
||||
|
||||
//生成包装条码信息
|
||||
private MesPackage insertMesPackage(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) {
|
||||
//根据编码规则生成包装条码
|
||||
String packageNo = doGereratePackageNo(reqBean, packageRuleContext);
|
||||
if (StringUtils.isEmpty(packageNo)) return null;
|
||||
MesPackage packageDb = new MesPackage();
|
||||
packageDb.setPackageNo(packageNo);
|
||||
packageDb.setPartNo(packageRuleContext.getPartNo());
|
||||
packageDb.setPartName(packageRuleContext.getPartName());
|
||||
packageDb.setQty(new Double(1));
|
||||
packageDb.setPackSpecQty(packageRuleContext.getPackSpecQty());
|
||||
packageDb.setUnit(packageDb.getUnit());
|
||||
packageDb.setLotNo(TimeTool.getToday());
|
||||
packageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
|
||||
packageDb.setWorkCenterCode(reqBean.getWorkCenterCode());
|
||||
packageDb.setWorkCellCode(reqBean.getWorkCellCode());
|
||||
packageDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
||||
packageDb.setPackageSn(packageRuleContext.getPackCode());
|
||||
packageDb.setPackageLabelTemplate(packageRuleContext.getPackageTemplate());
|
||||
packageDb.setFid(UUID.randomUUID().toString());
|
||||
packageDb.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(packageDb, reqBean.getUserInfo());
|
||||
return packageDb;
|
||||
}
|
||||
|
||||
//判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态
|
||||
private MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) {
|
||||
|
||||
if (!StringUtils.isEmpty(packageDb.getId())) {
|
||||
//下面直接根据ID进行修改, 所以此处置为游离态
|
||||
entityManager.detach(packageDb);
|
||||
ConvertBean.serviceModelUpdate(packageDb, reqBean.getUserInfo());
|
||||
}
|
||||
|
||||
packageDb.setQty(new Double(curQty));
|
||||
if (isSealed) {
|
||||
packageDb.setLotNo(TimeTool.getToday());
|
||||
packageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
||||
packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
|
||||
}
|
||||
|
||||
if (StringUtils.isEmpty(packageDb.getId())) return packageRepository.insert(packageDb);
|
||||
|
||||
packageRepository.updateByPropertiesNoSync(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID},
|
||||
new Object[]{reqBean.getOrganizeCode(), packageDb.getId()},
|
||||
new String[]{MesPcnExtConstWords.QTY, MesPcnExtConstWords.IS_SEALED, MesPcnExtConstWords.PRINT_STATUS, MesPcnExtConstWords.LOT_NO,
|
||||
MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME},
|
||||
new Object[]{packageDb.getQty(), packageDb.getIsSealed(), packageDb.getPrintStatus(), packageDb.getLotNo(),
|
||||
packageDb.getModifyUser(), packageDb.getModifyDatetime(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY});
|
||||
|
||||
return packageDb;
|
||||
}
|
||||
|
||||
//判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据
|
||||
private List<MesPackageDataContext> insertPackageDetailAndBackUnSealedResultList(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext,
|
||||
MesPackage packageDb, List<String> productSnList2Cur, Boolean isSealed) {
|
||||
//当前未满包的包装条码明细数据
|
||||
List<MesPackageDataContext> resultList = null;
|
||||
//包装条码明细ID
|
||||
Long detailId = null;
|
||||
//遍历当前满足标包的差额条码
|
||||
for (String productSn : productSnList2Cur) {
|
||||
if (StringUtils.isEmpty(productSn)) continue;
|
||||
//判断统计方式,是否生成包装明细信息
|
||||
if (packageRuleContext.getGenerateType().compareTo(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE_DETAIL.getValue()) == 0) {
|
||||
detailId = insertMesPackageDetail(reqBean, packageDb, productSn);
|
||||
}
|
||||
//判断不满包则 赋值给 当前未满包的包装条码明细数据resultList
|
||||
if (!isSealed) {
|
||||
if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>();
|
||||
MesPackageDataContext packageDataContext = new MesPackageDataContext();
|
||||
BeanUtils.copyProperties(packageRuleContext, packageDataContext);
|
||||
packageDataContext.setPackageId(packageDb.getId());
|
||||
packageDataContext.setDetailId(detailId);
|
||||
packageDataContext.setPackageNo(packageDb.getPackageNo());
|
||||
packageDataContext.setQty(new Double(1));
|
||||
packageDataContext.setSerialNumber(productSn);
|
||||
packageDataContext.setCreateDatetime(packageDb.getCreateDatetime());
|
||||
packageDataContext.setModifyDatetime(TimeTool.getNowTime(true));
|
||||
resultList.add(packageDataContext);
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
}
|
||||
|
||||
//生成包装明细信息
|
||||
private Long insertMesPackageDetail(StationRequestBean reqBean, MesPackage packageDb, String productSn) {
|
||||
MesPackageDetail packageDetailDb = new MesPackageDetail();
|
||||
packageDetailDb.setPackageNo(packageDb.getPackageNo());
|
||||
packageDetailDb.setPartNo(packageDb.getPartNo());
|
||||
packageDetailDb.setPartName(packageDb.getPartName());
|
||||
packageDetailDb.setSerialNumber(productSn);
|
||||
packageDetailDb.setProductSn(productSn);
|
||||
packageDetailDb.setQty(new Double(1));
|
||||
packageDetailDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
||||
packageDetailDb.setFid(UUID.randomUUID().toString());
|
||||
packageDetailDb.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(packageDetailDb, reqBean.getUserInfo());
|
||||
return packageDetailRepository.insert(packageDetailDb).getId();
|
||||
}
|
||||
|
||||
//根据编码规则生成包装条码
|
||||
private String doGereratePackageNo(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) {
|
||||
GenSerialNoModel serialNoModel = new GenSerialNoModel(packageRuleContext.getPackageBarcodeRule())
|
||||
.putDataMap(MesPackageRuleContext.class.getSimpleName(), packageRuleContext)
|
||||
.partNo(packageRuleContext.getPartNo()).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
|
||||
try {
|
||||
return syncFuncService.syncSerialNo(serialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString();
|
||||
} catch (ImppBusiException e) {
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), e.getErrorDetail(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
} catch (Exception e) {
|
||||
String webMsg = String.format("零件编码[%s]编码规则代码[%s]生成包装条码%s", serialNoModel.getPartNo(), serialNoModel.getRuleCode(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode()));
|
||||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
|
||||
MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList) {
|
||||
if (null == strategyService) {
|
||||
//查询模版信息
|
||||
labelTemplate = templateService.getLabelTemplate(packageRuleContext.getPackageTemplate(), reqBean.getOrganizeCode());
|
||||
strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null;
|
||||
}
|
||||
if (null == strategyService) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()));
|
||||
|
||||
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
|
||||
mesProduceSnPrintModel.setOrganizeCode(reqBean.getOrganizeCode());
|
||||
mesProduceSnPrintModel.setUserName(reqBean.getUserInfo());
|
||||
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
|
||||
mesProduceSnPrintModel.setPrinter(packageRuleContext.getPrinter());
|
||||
mesProduceSnPrintModel.setPartNo(packageRuleContext.getPartNo());
|
||||
mesProduceSnPrintModel.setPartName(packageRuleContext.getPartName());
|
||||
mesProduceSnPrintModel.getPackageList().addAll(packageList);
|
||||
|
||||
MesProduceSnPrintModel printModel = null;
|
||||
try {
|
||||
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true);
|
||||
} catch (ImppBusiException e) {
|
||||
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());
|
||||
} catch (Exception e) {
|
||||
String webMsg = String.format("零件编码[%s]包装条码模版[%s]打印包装条码%s", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode()));
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
|
||||
foundExThrowNoShowMsg();
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return;
|
||||
|
||||
//发送打印信息
|
||||
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue());
|
||||
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue());
|
||||
resultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT);
|
||||
resultBean.setResultObj(printModel.getPrintContextList());
|
||||
this.sendMessage(reqBean, resultBean);
|
||||
|
||||
//保存打印记录日志
|
||||
printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程打包数据
|
||||
*/
|
||||
@Data
|
||||
public class MesPackageDataContext extends MesPackageRuleContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8644214903859925217L;
|
||||
|
||||
@ApiParam("包装信息ID")
|
||||
private Long packageId;
|
||||
|
||||
@ApiParam("明细ID")
|
||||
private Long detailId;
|
||||
|
||||
@ApiParam("包装编号")
|
||||
private String packageNo;
|
||||
|
||||
@ApiParam("数量")
|
||||
private Double qty;
|
||||
|
||||
@ApiParam("产品条码")
|
||||
private String serialNumber;
|
||||
|
||||
@ApiParam("打包开始时间")
|
||||
private String createDatetime;
|
||||
|
||||
@ApiParam("打包结束时间")
|
||||
private String modifyDatetime;
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程打包规则上下文
|
||||
*/
|
||||
@Data
|
||||
public class MesPackageRuleContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1369218116212836881L;
|
||||
|
||||
@ApiParam(name = "包装代码")
|
||||
private String packageCode;
|
||||
|
||||
@ApiParam(name = "行号")
|
||||
private String lineNo;
|
||||
|
||||
@ApiParam(name = "零件号")
|
||||
private String partNo;
|
||||
|
||||
@ApiParam(name = "零件名称")
|
||||
private String partName;
|
||||
|
||||
@ApiParam(name = "零件类型")
|
||||
private String partType;
|
||||
|
||||
@ApiParam("包装规格数量")
|
||||
private Double packSpecQty;
|
||||
|
||||
@ApiParam("最小数量")
|
||||
private Double minQty;
|
||||
|
||||
@ApiParam("取整数量")
|
||||
private Double roundnessQty;
|
||||
|
||||
@ApiParam(name = "计量单位")
|
||||
private String unit;
|
||||
|
||||
@ApiParam(name = "是否默认包装")
|
||||
private Integer defaultFlag;
|
||||
|
||||
@ApiParam(name = "统计方式")
|
||||
private Integer generateType;
|
||||
|
||||
@ApiParam(name = "箱类别代号")
|
||||
private String packCode;
|
||||
|
||||
@ApiParam(name = "包装条码编码规则")
|
||||
private String packageBarcodeRule;
|
||||
|
||||
@ApiParam(name = "包装条码模板")
|
||||
private String packageTemplate;
|
||||
|
||||
@ApiParam(name = "打印机")
|
||||
private String printer;
|
||||
|
||||
}
|
Loading…
Reference in New Issue