零件打包

test-temp-wj-250117-pack
王杰 4 months ago
parent 7ea9817b27
commit 1f6fe5e4a0

@ -5,6 +5,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.List;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -15,10 +17,10 @@ import io.swagger.annotations.ApiOperation;
public interface IMesPackingRuleService { public interface IMesPackingRuleService {
@ApiOperation(value = "根据物料代码,零件类型查询成品包装明细规则") @ApiOperation(value = "根据物料代码,零件类型查询成品包装明细规则")
MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType); List<MesPackingRuleDetail> getPackingRuleDetailList(String organizeCode, String partNo, String partType);
@ApiOperation(value = "根据包装代码查询成品包装规则") @ApiOperation(value = "根据包装代码查询成品包装规则")
MesPackingRule getPackingRule(String organizeCode, String packageCode); List<MesPackingRule> getPackingRuleList(String organizeCode, List<String> packageCodeList);
@ApiOperation(value = "根据箱类别代号查询包装定义") @ApiOperation(value = "根据箱类别代号查询包装定义")
MesPackingDefine getPackingDefine(String organizeCode, String packCode); MesPackingDefine getPackingDefine(String organizeCode, String packCode);

@ -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.api.base.IMesPackingRuleService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; 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.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.MesPackingDefine;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule; import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule;
import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; 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 cn.estsh.i3plus.pojo.mes.repository.MesPackingRuleRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
* @Reference : * @Reference :
@ -33,19 +39,21 @@ public class MesPackingRuleService implements IMesPackingRuleService {
private MesPackingDefineRepository packingDefineRepository; private MesPackingDefineRepository packingDefineRepository;
@Override @Override
public MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType) { public List<MesPackingRuleDetail> getPackingRuleDetailList(String organizeCode, String partNo, String partType) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(partType)) return null; 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 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}); new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), partNo, partType});
} }
@Override @Override
public MesPackingRule getPackingRule(String organizeCode, String packageCode) { public List<MesPackingRule> getPackingRuleList(String organizeCode, List<String> packageCodeList) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(packageCode)) return null; if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(packageCodeList)) return null;
return packingRuleRepository.getByProperty( packageCodeList = packageCodeList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_CODE}, DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageCode}); 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 @Override

@ -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<String, Object> 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<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//验证是否存在加工单
Boolean isExistOrder = checkIsExistOrder(productionPartContextList);
//列名称
List<AttrBean> attrBeanList = dataAttrList(isExistOrder);
resultMap.put(MesPcnExtConstWords.ATTR_BEAN_LIST, attrBeanList);
//获取上下文产品加工规则数据信息
List<MesProdRuleContext> 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<String, MesPackageRuleContext> packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean);
if (CollectionUtils.isEmpty(packageRuleContextMap)) packageRuleContextMap = new HashMap<>();
Integer initQty = packageRuleContextMap.size();
//列表数据
List<MesPackageDataContext> 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<MesPackage>) stepResult.getDataCollection()).stream().filter(o -> null != o).map(MesPackage::getPackageNo).collect(Collectors.toList()).toString()));
}
//返回提示信息
private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map<String, Object> 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<MesProductionPartContext> productionPartContextList) {
Optional<MesProductionPartContext> 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<AttrBean> dataAttrList(Boolean isExistOrder) {
List<AttrBean> 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<MesProductionPartContext> productionPartContextList, Boolean isExistOrder,
Map<String, MesPackageRuleContext> packageRuleContextMap, List<MesPackageDataContext> resultList) {
List<MesProductionPartContext> 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<MesProdRuleContext> prodRuleContextList,
Map<String, MesPackageRuleContext> packageRuleContextMap, List<MesPackageDataContext> resultList) {
List<MesProdRuleContext> 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<String, MesPackageRuleContext> packageRuleContextMap, List<MesPackageDataContext> 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);
}
}

@ -156,7 +156,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements
if (BUSI_TYPE.ONE.getValue().equals(packageDataContext.getBusiType())) { if (BUSI_TYPE.ONE.getValue().equals(packageDataContext.getBusiType())) {
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
try { try {
//强制打包 //强制打包业务处理
packageNoGenerateStepService.doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); packageNoGenerateStepService.doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb);
} catch (ImppBusiException e) { } catch (ImppBusiException e) {
stepResult.msg(e.getErrorDetail()); stepResult.msg(e.getErrorDetail());
@ -194,6 +194,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements
} }
//返回提示信息
private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map<String, Object> resultMap, String message) { private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map<String, Object> resultMap, String message) {
this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
resultMap.put(MesPcnExtConstWords.MESSAGE, message); resultMap.put(MesPcnExtConstWords.MESSAGE, message);

@ -147,7 +147,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
packageRuleContext = !CollectionUtils.isEmpty(packageDataContextList) ? packageDataContextList.get(0) : packageRuleContextMap.get(entry.getKey()); packageRuleContext = !CollectionUtils.isEmpty(packageDataContextList) ? packageDataContextList.get(0) : packageRuleContextMap.get(entry.getKey());
} else { } 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()); 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<>(); 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()); List<MesPackingRuleDetail> packingRuleDetailList = packingRuleService.getPackingRuleDetailList(reqBean.getOrganizeCode(), partNo, MesExtEnumUtil.PACKING_RULE_DETAIL_PART_TYPE.P.getValue());
if (null == packingRuleDetail) { if (CollectionUtils.isEmpty(packingRuleDetailList)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]未配置包装物类型的成品包装明细规则信息!", message = String.format("零件编码[%s]未配置包装物类型的成品包装明细规则信息!", partNo);
partNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); 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; return null;
} }
if (StringUtils.isEmpty(packingRuleDetail.getPackageCode()) || //根据包装代码查询成品包装规则
StringUtils.isEmpty(packingRuleDetail.getPackSpecQty()) || MathOperation.compareTo(packingRuleDetail.getPackSpecQty(), new Double(0)) == 0) { List<MesPackingRule> packingRuleList = packingRuleService.getPackingRuleList(reqBean.getOrganizeCode(),
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]配置包装物类型的成品包装明细规则信息中必要信息无效:包装代码[%s]包装规格数量[%s]!", packingRuleDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPackageCode()))).map(MesPackingRuleDetail::getPackageCode).collect(Collectors.toList()));
partNo, packingRuleDetail.getPackageCode(), packingRuleDetail.getPackSpecQty()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
//过滤成品包装规则, 取默认包装对应的数据
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; return null;
} }
//根据包装代码查询成品包装规则 //根据默认包装获取成品包装明细规则
MesPackingRule packingRule = packingRuleService.getPackingRule(reqBean.getOrganizeCode(), packingRuleDetail.getPackageCode()); MesPackingRuleDetail packingRuleDetail = filterPackingRuleDetail(packingRuleDetailList, packingRule);
if (null == packingRule) { if (StringUtils.isEmpty(packingRuleDetail.getPackageCode()) ||
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]未配置成品包装规则信息!", StringUtils.isEmpty(packingRuleDetail.getPackSpecQty()) || MathOperation.compareTo(packingRuleDetail.getPackSpecQty(), new Double(0)) == 0) {
partNo, packingRuleDetail.getPackageCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); 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; return null;
} }
@ -229,9 +241,10 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
//如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义, 但是 printer 不进行强验证,可能是否的是默认打印机 //如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义, 但是 printer 不进行强验证,可能是否的是默认打印机
if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)))) { 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]!", message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:统计方式[%s]箱类别代号[%s]!",
partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode()), partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode());
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); 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; return null;
} }
@ -241,8 +254,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
MesPackingDefine packingDefine = StringUtils.isEmpty(packingRule.getPackCode()) ? null : MesPackingDefine packingDefine = StringUtils.isEmpty(packingRule.getPackCode()) ? null :
packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode()); packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode());
if (null == packingDefine && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate))) { if (null == packingDefine && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate))) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!", message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!", partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode());
partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); 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; return null;
} }
@ -253,9 +267,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
//此时 packageBarcodeRule || packageTemplate 仍有一个为空则 记录日志 忽略当前零件的打包 //此时 packageBarcodeRule || packageTemplate 仍有一个为空则 记录日志 忽略当前零件的打包
if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)) { if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)) {
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!", message = String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!", partNo, packingRuleDetail.getPackageCode(), packageBarcodeRule, packageTemplate, printer);
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);
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); else stepResult.msg(message);
return null; return null;
} }
} }
@ -271,8 +285,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
} }
//生成包装及明细, 根据标包数量判断是否执行打印 [递归] //生成包装及明细, 根据标包数量判断是否执行打印 [递归]
private List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, private List<MesPackageDataContext> doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesPackageRuleContext packageRuleContext, List<MesPackageDataContext> packageDataContextList, List<String> productSnList) { List<MesPackageDataContext> packageDataContextList, List<String> productSnList, Boolean isAsyn) {
//缓存的包装条码明细数量 //缓存的包装条码明细数量
Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size(); 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()); if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId());
//缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息 //缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息
if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext); if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext, isAsyn);
//如果包装条码未空, 说明上面生成包装条码的时候 根据编码规则生成出现问题, 则直接退出, 记录日志, 忽略当前零件的打包 //如果包装条码未空, 说明上面生成包装条码的时候 根据编码规则生成出现问题, 则直接退出, 记录日志, 忽略当前零件的打包
if (null == packageDb) return null; if (null == packageDb) return null;
//当前的实际打包数量 = 缓存的包装条码明细数量 + 当前满足标包的差额条码的个数 //当前的实际打包数量 = 缓存的包装条码明细数量 + 当前满足标包的差额条码的个数
Integer curQty = cachedQty + productSnList2Cur.size(); Integer curQty = cachedQty + productSnList2Cur.size();
//判断当前是否满包 //判断当前是否满包, isAsyn=false代表是工位按钮零件打包触发,零头也直接封箱
Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue(); Boolean isSealed = !isAsyn ? curQty >= packageRuleContext.getPackSpecQty().intValue() : true;
//判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态
packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed, true); packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed, true);
@ -321,7 +335,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
if (CollectionUtils.isEmpty(productSnList2Remain)) return resultList; if (CollectionUtils.isEmpty(productSnList2Remain)) return resultList;
//传递剩余条码进行递归处理: 此时packageDataContextList直接为null //传递剩余条码进行递归处理: 此时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); } 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; if (StringUtils.isEmpty(packageNo)) return null;
MesPackage packageDb = new MesPackage(); MesPackage packageDb = new MesPackage();
packageDb.setPackageNo(packageNo); 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()) GenSerialNoModel serialNoModel = new GenSerialNoModel(packageRuleContext.getPackageBarcodeRule())
.putDataMap(MesPackageRuleContext.class.getSimpleName(), packageRuleContext) .putDataMap(MesPackageRuleContext.class.getSimpleName(), packageRuleContext)
.partNo(packageRuleContext.getPartNo()).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); .partNo(packageRuleContext.getPartNo()).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
try { try {
return syncFuncService.syncSerialNo(serialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString(); return syncFuncService.syncSerialNo(serialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString();
} catch (ImppBusiException e) { } 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) { } catch (Exception e) {
String webMsg = String.format("零件编码[%s]编码规则代码[%s]生成包装条码%s", serialNoModel.getPartNo(), serialNoModel.getRuleCode(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); 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); if (!isAsyn) {
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true); 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; return null;
} }
@ -503,7 +523,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements
printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList()); printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList());
} }
//打包进度-强制打包 //强制打包业务处理
@Override @Override
public void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesPackageDataContext> packageDataContextList, MesPackage packageDb) { public void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesPackageDataContext> 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}); new Object[]{qty, reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY});
} }
//过滤成品包装规则, 取默认包装对应的数据
private MesPackingRule filterPackingRule(List<MesPackingRule> packingRuleList) {
if (CollectionUtils.isEmpty(packingRuleList)) return null;
if (packingRuleList.size() == 1) return packingRuleList.get(0);
Optional<MesPackingRule> 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<MesPackingRuleDetail> packingRuleDetailList, MesPackingRule packingRule) {
if (CollectionUtils.isEmpty(packingRuleDetailList)) return null;
if (packingRuleDetailList.size() == 1) return packingRuleDetailList.get(0);
Optional<MesPackingRuleDetail> 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<MesPackage>) stepResult.getDataCollection(), true);
}
//生成虚拟条码,零件打包不写包装明细数据, 只是为了适配工步中的方法去递归生成包装条码
private List<String> generateVirtualPs(Double qty) {
List<String> virtualPsList = new ArrayList<>();
for (int i = 0; i < qty.intValue(); i ++) {
virtualPsList.add(String.valueOf(i));
}
return virtualPsList;
}
} }

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method; 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.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.bean.MesPackage;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -17,7 +18,7 @@ public interface IMesPackageNoGenerateStepService {
@ApiOperation(value = "根据包装ID查询包装信息") @ApiOperation(value = "根据包装ID查询包装信息")
MesPackage getMesPackage(String organizeCode, Long packageId); MesPackage getMesPackage(String organizeCode, Long packageId);
@ApiOperation(value = "强制打包") @ApiOperation(value = "强制打包业务处理")
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class})
void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesPackageDataContext> packageDataContextList, MesPackage packageDb); void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesPackageDataContext> packageDataContextList, MesPackage packageDb);
@ -29,4 +30,11 @@ public interface IMesPackageNoGenerateStepService {
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class})
void savePackageData(StationRequestBean reqBean, MesPackage packageDb, Double qty); 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);
} }

@ -37,6 +37,9 @@ public class MesPackageDataContext extends MesPackageRuleContext implements Seri
@ApiParam("业务操作类型") @ApiParam("业务操作类型")
private String busiType; private String busiType;
@ApiParam("加工单号")
private String workOrderNo;
public MesPackageDataContext() {} public MesPackageDataContext() {}
public MesPackageDataContext(String partNo, String partName, String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime, Integer generateType) { public MesPackageDataContext(String partNo, String partName, String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime, Integer generateType) {

@ -58,4 +58,6 @@ public class MesPackageRuleContext implements Serializable {
@ApiParam(name = "打印机") @ApiParam(name = "打印机")
public String printer; public String printer;
} }

@ -323,6 +323,10 @@ public class MesPcnExtConstWords {
public static final String UNIT = "unit"; public static final String UNIT = "unit";
//包装规格数量 //包装规格数量
public static final String PACK_SPEC_QTY = "packSpecQty"; 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) //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)

Loading…
Cancel
Save