diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java index 5cb6d17..0528cb4 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java @@ -5,6 +5,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule; import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description : 成品包装规则 * @Reference : @@ -15,10 +17,10 @@ import io.swagger.annotations.ApiOperation; public interface IMesPackingRuleService { @ApiOperation(value = "根据物料代码,零件类型查询成品包装明细规则") - MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType); + List getPackingRuleDetailList(String organizeCode, String partNo, String partType); @ApiOperation(value = "根据包装代码查询成品包装规则") - MesPackingRule getPackingRule(String organizeCode, String packageCode); + List getPackingRuleList(String organizeCode, List packageCodeList); @ApiOperation(value = "根据箱类别代号查询包装定义") MesPackingDefine getPackingDefine(String organizeCode, String packCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java index 81ec448..7b94cbe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java @@ -2,7 +2,9 @@ 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.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.MesPackingDefine; import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule; import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; @@ -11,8 +13,12 @@ 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.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.List; +import java.util.stream.Collectors; + /** * @Description : 成品包装规则 * @Reference : @@ -33,19 +39,21 @@ public class MesPackingRuleService implements IMesPackingRuleService { private MesPackingDefineRepository packingDefineRepository; @Override - public MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType) { + public List getPackingRuleDetailList(String organizeCode, String partNo, String partType) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(partType)) return null; - return packingRuleDetailRepository.getByProperty( + return packingRuleDetailRepository.findByProperty( 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}); + public List getPackingRuleList(String organizeCode, List packageCodeList) { + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(packageCodeList)) return null; + packageCodeList = packageCodeList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (packageCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(packageCodeList.get(0), MesPcnExtConstWords.PACKAGE_CODE, packBean); + else DdlPreparedPack.getInPackList(packageCodeList, MesPcnExtConstWords.PACKAGE_CODE, packBean); + return packingRuleRepository.findByHqlWhere(packBean); } @Override diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackagePartService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackagePartService.java new file mode 100644 index 0000000..5727485 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackagePartService.java @@ -0,0 +1,247 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +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.step.method.IMesPackageNoGenerateStepService; +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.MesProdRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +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.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import cn.estsh.i3plus.pojo.mes.model.*; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +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.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 工位参数按钮事件接口实现【零件打包】 + **/ +@Slf4j +@Service +public class MesFunctionPackagePartService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesPackageNoGenerateStepService packageNoGenerateStepService; + + @Autowired + private IFsmRouteDataService fsmRouteDataService; + + @Override + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + //页面渲染数据集 + Map resultMap = new HashMap<>(); + + //工步结果,用于信息传递的对象 + StepResult stepResult; + + //前端传递的参数 + MesPackageDataContext packageDataContext = StringUtils.isEmpty(buttonDynamicModel.getFunctionValue()) ? null : JSONObject.parseObject(buttonDynamicModel.getFunctionValue(), MesPackageDataContext.class); + + //初始化界面 + if (null == packageDataContext || StringUtils.isEmpty(packageDataContext.getBusiType())) { + + //前端拿到接口返回数据的时候如果存在 IS_COVER_DATA=1 则覆盖之前渲染的数据 + resultMap.put(MesPcnExtConstWords.IS_COVER_DATA, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + //获取上下文产出零件信息 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //验证是否存在加工单 + Boolean isExistOrder = checkIsExistOrder(productionPartContextList); + + //列名称 + List attrBeanList = dataAttrList(isExistOrder); + + resultMap.put(MesPcnExtConstWords.ATTR_BEAN_LIST, attrBeanList); + + //获取上下文产品加工规则数据信息 + List prodRuleContextList = null; + if (CollectionUtils.isEmpty(productionPartContextList)) prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean); + + if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(prodRuleContextList) && (null == packageDataContext || StringUtils.isEmpty(packageDataContext.getPartNo()))) { + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); + return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]零件打包:请选择打包零件编码!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + } + + //获取包装规则信息 + Map packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean); + if (CollectionUtils.isEmpty(packageRuleContextMap)) packageRuleContextMap = new HashMap<>(); + Integer initQty = packageRuleContextMap.size(); + + //列表数据 + List resultList = new ArrayList<>(); + + stepResult = StepResult.getSuccessComplete(); + + //根据上下文产出零件信息封装列表数据 + if (!CollectionUtils.isEmpty(productionPartContextList)) packResultList2Ppc(reqBean, stepResult, productionPartContextList, isExistOrder, packageRuleContextMap, resultList); + //根据上下文产品加工规则数据信息封装列表数据 + else if (!CollectionUtils.isEmpty(prodRuleContextList)) packResultList2Prc(reqBean, stepResult, prodRuleContextList, packageRuleContextMap, resultList); + //根据用户选择的零件信息封装列表数据 + else packResultList2PartNo(reqBean, stepResult, packageDataContext.getPartNo(), packageRuleContextMap, resultList); + + //保存包装规则信息 + if (initQty != packageRuleContextMap.size()) productionProcessContextStepService.dispatchPackageRuleContext(reqBean, packageRuleContextMap); + + if (!StringUtils.isEmpty(stepResult.getMsg())) { + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue()); + packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]零件打包:%s!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); + } + + resultMap.put(MesPcnExtConstWords.DATA, resultList); + return resultMap; + } + + resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(String.format("零件号[%s]数量[%s]包装规格数量[%s]", packageDataContext.getPartNo(), packageDataContext.getQty(), packageDataContext.getPackSpecQty())); + + //业务操作: 零件打包 ----- 当前端调用传了 busiType 时, 前端拿到接口返回数据的时候如果存在 IS_COVER_DATA=2 则不覆盖之前渲染的数据, 只判断是否提示信息 ----- + resultMap.put(MesPcnExtConstWords.IS_COVER_DATA, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue()); + if (StringUtils.isEmpty(packageDataContext.getPartNo()) || StringUtils.isEmpty(packageDataContext.getQty()) || StringUtils.isEmpty(packageDataContext.getPackageCode())) { + return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]零件打包:零件编码[%s]缺少必要主数据!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo())); + } + + stepResult = StepResult.getSuccessComplete(); + //零件打包不写包装明细数据, 默认赋值[仅统计包装], 生成虚拟条码 + packageDataContext.setGenerateType(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE.getValue()); + try { + //零件打包业务处理 + packageNoGenerateStepService.doHandlePackagePart(reqBean, resultBean, stepResult, packageDataContext); + } catch (ImppBusiException e) { + stepResult.msg(e.getErrorDetail()); + } catch (Exception e) { + String error = String.format("生产线[%s]工位[%s]零件打包%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); + this.cacheException(reqBean, reqBean.getStepName(), error, e, false); + stepResult.msg(error); + } + //判断强制打包的执行结果 + if (!StringUtils.isEmpty(stepResult.getMsg())) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]零件打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); + } + + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); + return packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]零件打包成功!包装条码%s打印成功!", + packageDataContext.getPartNo(), ((List) stepResult.getDataCollection()).stream().filter(o -> null != o).map(MesPackage::getPackageNo).collect(Collectors.toList()).toString())); + + } + + //返回提示信息 + private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { + this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + resultMap.put(MesPcnExtConstWords.MESSAGE, message); + return resultMap; + } + + //验证是否存在加工单 + private Boolean checkIsExistOrder(List productionPartContextList) { + Optional optional = CollectionUtils.isEmpty(productionPartContextList) ? null : + productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst(); + return (null != optional && optional.isPresent()) ? true : false; + } + + //列名称 + public List dataAttrList(Boolean isExistOrder) { + List attrBeanList = new ArrayList<>(); + if (isExistOrder) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "加工单号"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NAME, "零件名称"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.QTY, "装箱个数"); + PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PACK_SPEC_QTY, "包装规格数量"); + return attrBeanList; + } + + //根据上下文产出零件信息封装列表数据 + private void packResultList2Ppc(StationRequestBean reqBean, StepResult stepResult, List productionPartContextList, Boolean isExistOrder, + Map packageRuleContextMap, List resultList) { + List filterList; + if (isExistOrder) { + filterList = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) + .distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProductionPartContext::getWorkOrderNo))), ArrayList::new)); + } else { + filterList = productionPartContextList.stream().filter(o -> (null != o && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) + .distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProductionPartContext::getPartNo))), ArrayList::new)); + } + + for (MesProductionPartContext productionPartContext : filterList) { + if (null == productionPartContext) continue; + MesPackageDataContext packageDataContext = new MesPackageDataContext(); + + MesPackageRuleContext packageRuleContext = packageRuleContextMap.get(productionPartContext.getPartNo()); + if (null == packageRuleContext) { + packageRuleContext = packageNoGenerateStepService.getPackageRuleContext(reqBean, stepResult, productionPartContext.getPartNo(), false); + if (null != packageRuleContext) packageRuleContextMap.put(productionPartContext.getPartNo(), packageRuleContext); + } + if (null != packageRuleContext) BeanUtils.copyProperties(packageRuleContext, packageDataContext); + + packageDataContext.setWorkOrderNo(productionPartContext.getWorkOrderNo()); + packageDataContext.setQty(isExistOrder ? productionPartContext.getQty() : packageDataContext.getPackSpecQty()); + resultList.add(packageDataContext); + } + } + + //根据上下文产品加工规则数据信息封装列表数据 + private void packResultList2Prc(StationRequestBean reqBean, StepResult stepResult, List prodRuleContextList, + Map packageRuleContextMap, List resultList) { + List filterList = prodRuleContextList.stream().filter(o -> null != o) + .distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProdRuleContext::getOutPartNo))), ArrayList::new)); + + for (MesProdRuleContext prodRuleContext : filterList) { + if (null == prodRuleContext) continue; + MesPackageDataContext packageDataContext = new MesPackageDataContext(); + + MesPackageRuleContext packageRuleContext = packageRuleContextMap.get(prodRuleContext.getOutPartNo()); + if (null == packageRuleContext) { + packageRuleContext = packageNoGenerateStepService.getPackageRuleContext(reqBean, stepResult, prodRuleContext.getOutPartNo(), false); + if (null != packageRuleContext) packageRuleContextMap.put(prodRuleContext.getOutPartNo(), packageRuleContext); + } + if (null != packageRuleContext) BeanUtils.copyProperties(packageRuleContext, packageDataContext); + + packageDataContext.setQty(packageDataContext.getPackSpecQty()); + resultList.add(packageDataContext); + } + } + + //根据用户选择的零件信息封装列表数据 + private void packResultList2PartNo(StationRequestBean reqBean, StepResult stepResult, String partNo, + Map packageRuleContextMap, List resultList) { + MesPackageDataContext packageDataContext = new MesPackageDataContext(); + + MesPackageRuleContext packageRuleContext = packageRuleContextMap.get(partNo); + if (null == packageRuleContext) { + packageRuleContext = packageNoGenerateStepService.getPackageRuleContext(reqBean, stepResult, partNo, false); + if (null != packageRuleContext) packageRuleContextMap.put(partNo, packageRuleContext); + } + if (null != packageRuleContext) BeanUtils.copyProperties(packageRuleContext, packageDataContext); + + packageDataContext.setQty(packageDataContext.getPackSpecQty()); + resultList.add(packageDataContext); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 50adaa0..60ed4c9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -156,7 +156,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements if (BUSI_TYPE.ONE.getValue().equals(packageDataContext.getBusiType())) { StepResult stepResult = StepResult.getSuccessComplete(); try { - //强制打包 + //强制打包业务处理 packageNoGenerateStepService.doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); } catch (ImppBusiException e) { stepResult.msg(e.getErrorDetail()); @@ -194,6 +194,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements } + //返回提示信息 private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); resultMap.put(MesPcnExtConstWords.MESSAGE, message); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index fb84fb8..4116d3a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -147,7 +147,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements packageRuleContext = !CollectionUtils.isEmpty(packageDataContextList) ? packageDataContextList.get(0) : packageRuleContextMap.get(entry.getKey()); } else { //获取包装规则信息 - packageRuleContext = getPackageRuleContext(reqBean, entry.getKey()); + packageRuleContext = getPackageRuleContext(reqBean, stepResult, entry.getKey(), false); } //无生产过程打包规则时, 忽略当前零件 @@ -173,7 +173,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //生成包装及明细, 根据标包数量判断是否执行打印 [递归] stepResult.setDataCollection(new ArrayList()); - packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue()); + packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue(), false); //更新实时的打包数据 if (CollectionUtils.isEmpty(packageDataContextMap)) packageDataContextMap = new HashMap<>(); @@ -197,28 +197,40 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } //获取包装规则信息 - private MesPackageRuleContext getPackageRuleContext(StationRequestBean reqBean, String partNo) { + @Override + public MesPackageRuleContext getPackageRuleContext(StationRequestBean reqBean, StepResult stepResult, String partNo, Boolean isAsyn) { + + String message; //根据 物料代码,零件类型=包装物 查询成品包装明细规则 - 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); + List packingRuleDetailList = packingRuleService.getPackingRuleDetailList(reqBean.getOrganizeCode(), partNo, MesExtEnumUtil.PACKING_RULE_DETAIL_PART_TYPE.P.getValue()); + if (CollectionUtils.isEmpty(packingRuleDetailList)) { + message = String.format("零件编码[%s]未配置包装物类型的成品包装明细规则信息!", partNo); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); 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); + //根据包装代码查询成品包装规则 + List packingRuleList = packingRuleService.getPackingRuleList(reqBean.getOrganizeCode(), + packingRuleDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPackageCode()))).map(MesPackingRuleDetail::getPackageCode).collect(Collectors.toList())); + + //过滤成品包装规则, 取默认包装对应的数据 + MesPackingRule packingRule = filterPackingRule(packingRuleList); + if (null == packingRule) { + message = String.format("零件编码[%s]未配置成品包装规则信息!", partNo); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); 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); + //根据默认包装获取成品包装明细规则 + MesPackingRuleDetail packingRuleDetail = filterPackingRuleDetail(packingRuleDetailList, packingRule); + if (StringUtils.isEmpty(packingRuleDetail.getPackageCode()) || + StringUtils.isEmpty(packingRuleDetail.getPackSpecQty()) || MathOperation.compareTo(packingRuleDetail.getPackSpecQty(), new Double(0)) == 0) { + message = String.format("零件编码[%s]配置包装物类型的成品包装明细规则信息中必要信息无效:包装代码[%s]包装规格数量[%s]!", partNo, packingRuleDetail.getPackageCode(), packingRuleDetail.getPackSpecQty()); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); return null; } @@ -229,9 +241,10 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义, 但是 printer 不进行强验证,可能是否的是默认打印机 if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)))) { - 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); + message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:统计方式[%s]箱类别代号[%s]!", + partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode()); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); return null; } @@ -241,8 +254,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements MesPackingDefine packingDefine = StringUtils.isEmpty(packingRule.getPackCode()) ? null : packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode()); if (null == packingDefine && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate))) { - 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); + message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!", partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode()); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); return null; } @@ -253,9 +267,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //此时 packageBarcodeRule || packageTemplate 仍有一个为空则 记录日志 忽略当前零件的打包 if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)) { - 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); + message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!", partNo, packingRuleDetail.getPackageCode(), packageBarcodeRule, packageTemplate, printer); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), message, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else stepResult.msg(message); return null; } } @@ -271,8 +285,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } //生成包装及明细, 根据标包数量判断是否执行打印 [递归] - private List doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, - MesPackageRuleContext packageRuleContext, List packageDataContextList, List productSnList) { + private List doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, + List packageDataContextList, List productSnList, Boolean isAsyn) { //缓存的包装条码明细数量 Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size(); @@ -296,15 +310,15 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //判断是否存在缓存的包装条码明细信息,如果进行递归则已无包装条码, 则重新生成信息的包装条码 if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); //缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息 - if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext); + if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext, isAsyn); //如果包装条码未空, 说明上面生成包装条码的时候 根据编码规则生成出现问题, 则直接退出, 记录日志, 忽略当前零件的打包 if (null == packageDb) return null; //当前的实际打包数量 = 缓存的包装条码明细数量 + 当前满足标包的差额条码的个数 Integer curQty = cachedQty + productSnList2Cur.size(); - //判断当前是否满包 - Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue(); + //判断当前是否满包, isAsyn=false代表是工位按钮零件打包触发,零头也直接封箱 + Boolean isSealed = !isAsyn ? curQty >= packageRuleContext.getPackSpecQty().intValue() : true; //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed, true); @@ -321,7 +335,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements if (CollectionUtils.isEmpty(productSnList2Remain)) return resultList; //传递剩余条码进行递归处理: 此时packageDataContextList直接为null - return doHandlePackagePrint(reqBean, stepResult, packageRuleContext, null, productSnList2Remain); + return doHandlePackagePrint(reqBean, stepResult, packageRuleContext, null, productSnList2Remain, isAsyn); } @@ -330,9 +344,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements public MesPackage getMesPackage(String organizeCode, Long packageId) { return packageExtService.getMesPackage(organizeCode, packageId); } //生成包装条码信息 - private MesPackage insertMesPackage(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) { + private MesPackage insertMesPackage(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext, Boolean isAsyn) { //根据编码规则生成包装条码 - String packageNo = doGereratePackageNo(reqBean, packageRuleContext); + String packageNo = doGereratePackageNo(reqBean, packageRuleContext, isAsyn); if (StringUtils.isEmpty(packageNo)) return null; MesPackage packageDb = new MesPackage(); packageDb.setPackageNo(packageNo); @@ -432,18 +446,24 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } //根据编码规则生成包装条码 - private String doGereratePackageNo(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) { + private String doGereratePackageNo(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext, Boolean isAsyn) { 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); + if (!isAsyn) this.sendMessage(reqBean, new StationResultBean().writeDbLog(), e.getErrorDetail(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + else MesPcnException.throwBusiException(e.getErrorDetail()); } 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); + if (!isAsyn) { + 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); + } else { + this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false); + MesPcnException.throwBusiException(webMsg); + } } return null; } @@ -503,7 +523,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList()); } - //打包进度-强制打包 + //强制打包业务处理 @Override public void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb) { //标记满包状态跟打印状态 @@ -553,4 +573,38 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements new Object[]{qty, reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}); } + //过滤成品包装规则, 取默认包装对应的数据 + private MesPackingRule filterPackingRule(List packingRuleList) { + if (CollectionUtils.isEmpty(packingRuleList)) return null; + if (packingRuleList.size() == 1) return packingRuleList.get(0); + Optional optional = packingRuleList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDefaultFlag()) && o.getDefaultFlag().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst(); + return (null != optional && optional.isPresent()) ? optional.get() : null; + } + + //根据默认包装获取成品包装明细规则 + private MesPackingRuleDetail filterPackingRuleDetail(List packingRuleDetailList, MesPackingRule packingRule) { + if (CollectionUtils.isEmpty(packingRuleDetailList)) return null; + if (packingRuleDetailList.size() == 1) return packingRuleDetailList.get(0); + Optional optional = packingRuleDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPackageCode()) && o.getPackageCode().equals(packingRule.getPackageCode()))).findFirst(); + return (null != optional && optional.isPresent()) ? optional.get() : null; + } + + //零件打包业务处理 + @Override + public void doHandlePackagePart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageDataContext packageDataContext) { + //生成包装及明细, 根据标包数量判断是否执行打印 [递归] + doHandlePackagePrint(reqBean, stepResult, packageDataContext, null, generateVirtualPs(packageDataContext.getQty()), true); + //进行打印 + doPrintPackageNo(reqBean, resultBean, stepResult, packageDataContext, null, null, (List) stepResult.getDataCollection(), true); + } + + //生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码 + private List generateVirtualPs(Double qty) { + List virtualPsList = new ArrayList<>(); + for (int i = 0; i < qty.intValue(); i ++) { + virtualPsList.add(String.valueOf(i)); + } + return virtualPsList; + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java index de15d52..ced96d8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext; import cn.estsh.i3plus.pojo.mes.bean.MesPackage; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -17,7 +18,7 @@ public interface IMesPackageNoGenerateStepService { @ApiOperation(value = "根据包装ID查询包装信息") MesPackage getMesPackage(String organizeCode, Long packageId); - @ApiOperation(value = "强制打包") + @ApiOperation(value = "强制打包业务处理") @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb); @@ -29,4 +30,11 @@ public interface IMesPackageNoGenerateStepService { @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) void savePackageData(StationRequestBean reqBean, MesPackage packageDb, Double qty); + @ApiOperation(value = "获取包装规则信息") + MesPackageRuleContext getPackageRuleContext(StationRequestBean reqBean, StepResult stepResult, String partNo, Boolean isAsyn); + + @ApiOperation(value = "零件打包业务处理") + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) + void doHandlePackagePart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageDataContext packageDataContext); + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java index 2c08440..71c6088 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java @@ -37,6 +37,9 @@ public class MesPackageDataContext extends MesPackageRuleContext implements Seri @ApiParam("业务操作类型") private String busiType; + @ApiParam("加工单号") + private String workOrderNo; + public MesPackageDataContext() {} public MesPackageDataContext(String partNo, String partName, String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime, Integer generateType) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java index fd0f933..487862c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java @@ -58,4 +58,6 @@ public class MesPackageRuleContext implements Serializable { @ApiParam(name = "打印机") public String printer; + + } 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 e9d756c..bbacdbb 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 @@ -323,6 +323,10 @@ public class MesPcnExtConstWords { public static final String UNIT = "unit"; //包装规格数量 public static final String PACK_SPEC_QTY = "packSpecQty"; + //动态列名 + public static final String ATTR_BEAN_LIST = "ATTR_BEAN_LIST"; + //是否覆盖数据 + public static final String IS_COVER_DATA = "IS_COVER_DATA"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)