裁片打印工步

tags/yfai-pcn-ext-v2.3
yxw 8 months ago
parent d83d750632
commit 5ea796fb79

@ -105,9 +105,9 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, mesWorkOrderCutFgDataContextList);
return mesWorkOrderCutFgDataContextList;
}
return mesWorkOrderCutFgDataContextList;
// 成品列表为空则表示不需要弹框
return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? null :mesWorkOrderCutFgDataContextList;
}
}

@ -9,12 +9,16 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
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.*;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
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.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
@ -61,6 +65,12 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
@Autowired
private IMesCustomerPartService customerPartService;
@Autowired
private MesLabelTemplateRepository labelTemplateRao;
@Autowired
private MesLabelTemplateParamRepository labelTemplateParamRao;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -270,23 +280,32 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
if (mesPackingDefine == null)
return stepResult.isCompleted(false).msg(String.format("裁片方案代码[%s]关联产成零件[%s]箱类别代号[%s]无效!", mesCutSchemeFg.getCutCode(), mesCutSchemeFg.getPartNo(), mesCutSchemeFg.getPackageSnRuleCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrinter()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印机!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPrintTemplate()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护打印模板!", mesPackingDefine.getPackCode()));
if (StringUtils.isEmpty(mesPackingDefine.getPackageBarcodeRule()))
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,包装定义代码[%s]未维护条码规则!", mesPackingDefine.getPackCode()));
MesWorkOrderCutDetailModel workOrderCutDetailModel = new MesWorkOrderCutDetailModel();
BeanUtils.copyProperties(mesCutSchemeFg, workOrderCutDetailModel);
MesCustomerPart customerPart = customerPartService.getMesCustomerPartByPartNo(mesCutSchemeFg.getPartNo(), mesPackingDefine.getCustCode(), reqBean.getOrganizeCode());
MesLabelTemplate labelTemplate = getLabelTemplate(mesPackingDefine.getPakcageTemplate(), reqBean.getOrganizeCode());
if (labelTemplate == null)
return stepResult.isCompleted(false).msg(String.format("请检查包装定义信息,零件号[%s]对应模板代码[%s]无效!", mesCutSchemeFg.getPartNo(), cutScheme.getCutCode()));
MesPartContext mesPartContext = partDataExtContext.get(mesCutSchemeFg.getPartNo());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies());
mesPartContext.setCopies(mesPackingDefine.getPrintCopies() == null ? 1 : mesPackingDefine.getPrintCopies());
mesPartContext.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
mesPartContext.setPrinter(mesPackingDefine.getPrinter());
mesPartContext.setLabelTemplate(mesPackingDefine.getPakcageTemplate());
mesPartContext.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
workOrderCutDetailModel.setCopies(mesPackingDefine.getPrintCopies());
workOrderCutDetailModel.setPackageSnRule(mesPackingDefine.getPackageBarcodeRule());
workOrderCutDetailModel.setPrinter(mesPackingDefine.getPrinter());
workOrderCutDetailModel.setCustPartNo(customerPart == null ? "" : customerPart.getCustPartNo());
partDataExtContext.put(mesCutSchemeFg.getPartNo(), mesPartContext);
workOrderCutDetailModelList.add(workOrderCutDetailModel);
@ -395,4 +414,18 @@ public class MesWorkOrderCutCheckStepService extends BaseStepService {
return true;
}
private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean);
MesLabelTemplate mesLabelTemplate = labelTemplateRao.getByProperty(templatePackBean);
if (mesLabelTemplate != null) {
//级联获取labelTemplateParam
DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean);
List<MesLabelTemplateParam> params = labelTemplateParamRao.findByHqlWhere(templateParamPackBean);
mesLabelTemplate.setLabelTemplateParamList(params);
}
return mesLabelTemplate;
}
}

@ -0,0 +1,144 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplateParam;
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.MesLabelTemplateParamRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collectors;
/**
* @Description :
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/6 13:39
* @Modify:
**/
@Service("mesWorkOrderCutPackagePrintStepService")
public class MesWorkOrderCutPackagePrintStepService extends BaseStepService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private MesLabelTemplateRepository labelTemplateRao;
@Autowired
private MesLabelTemplateParamRepository labelTemplateParamRao;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
List<MesWorkOrderCutDetailModel> workOrderCutFgDataContext = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
/**
*
*/
//Map.Entry<String, MesPartContext> entry = partDataExtContext.entrySet().stream().findFirst().get();
//
//String labelTemplateCode = entry.getValue().getLabelTemplate();
List<Map<String, Object>> resultMap = null;
Map<String, List<MesWorkOrderCutDetailModel>> workOrderCutDetailModelMapByPartNo = workOrderCutFgDataContext.stream().collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getPrinter()).add(o.getLabelTemplate()).toString()));
if (CollectionUtils.isEmpty(workOrderCutDetailModelMapByPartNo)) return stepResult;
// 根据不同的打印机和打印模板分组
for (Map.Entry<String, List<MesWorkOrderCutDetailModel>> entry : workOrderCutDetailModelMapByPartNo.entrySet()) {
List<MesWorkOrderCutDetailModel> workOrderCutDetailModelList = entry.getValue();
MesWorkOrderCutDetailModel model = workOrderCutDetailModelList.stream().findFirst().get();
MesLabelTemplate labelTemplate = getLabelTemplate(model.getLabelTemplate(), reqBean.getOrganizeCode());
List<String> partNoList = workOrderCutDetailModelList.stream().map(MesWorkOrderCutDetailModel::getPartNo).distinct().collect(Collectors.toList());
//模板信息丢失抛出异常
if (labelTemplate == null) {
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("请检查包装定义信息,零件号%s对应模板代码[%s]无效!", partNoList, model.getLabelTemplate()));
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (methodCode == null) {
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", partNoList, labelTemplate.getTemplateCode()));
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setSourceData(workOrderCutDetailModelList);
mesProduceSnPrintModel.setPrinter(model.getPrinter());
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
// GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep
MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true);
resultMap = printModel.getPrintContextList();
}
// 裁片方案代码
// 根据裁片方案代码查询裁片方案成品配置
//返回打印标识 给前端
//前端接收到busiType是customComponent并且 dataType是file类型的消息就需要打印后续消息里的数据一个模板对应多个打印数据
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue());
resultBean.setCustomPageName("CUT_PACKAGE_SN_PRINT");
resultBean.setResultObj(resultMap);
//3. 发送数据给到前端
this.sendMessage(reqBean, resultBean);
return stepSuccessCompleteAndSendMsgReturn(reqBean,
resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()),
stepResult, "执行打印成功!");
}
/**
* templateCode
*
* @param templateCode
* @param organizeCode
* @return
*/
private MesLabelTemplate getLabelTemplate(String templateCode, String organizeCode) {
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode, MesPcnExtConstWords.TEMPLATE_CODE, templatePackBean);
MesLabelTemplate mesLabelTemplate = labelTemplateRao.getByProperty(templatePackBean);
if (mesLabelTemplate != null) {
//级联获取labelTemplateParam
DdlPackBean templateParamPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(mesLabelTemplate.getId(), "templateId", templateParamPackBean);
List<MesLabelTemplateParam> params = labelTemplateParamRao.findByHqlWhere(templateParamPackBean);
mesLabelTemplate.setLabelTemplateParamList(params);
}
return mesLabelTemplate;
}
}

@ -17,6 +17,7 @@ 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.MesWorkOrderCutPackageRepository;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -49,6 +50,9 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
@Autowired
private IFsmRouteDataService fsmRouteDataService;
@Autowired
private MesWorkOrderCutPackageRepository workOrderCutPackageRepository;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -108,6 +112,9 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
remainder, workOrderCutPackages, newWorkOrderCutFgDataContextList);
}
// 保存条码数据
workOrderCutPackageRepository.saveAll(workOrderCutPackages);
}
productionDispatchContextStepService.dispatchMesWorkOrderCutFgDataContext(reqBean, newWorkOrderCutFgDataContextList);
@ -138,8 +145,12 @@ public class MesWorkOrderCutPackageSnSaveStepService extends BaseStepService {
BeanUtils.copyProperties(workOrderCutDetailModel, newWorkOrderCutDetailModel);
newWorkOrderCutDetailModel.setQty(qty);
newWorkOrderCutDetailModel.setCreateDatetime(cutPackage.getCreateDatetime());
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setLotNo(cutPackage.getLotNo());
newWorkOrderCutDetailModel.setCopies(mesPartContext.getCopies());
newWorkOrderCutDetailModel.setPackageSnRule(mesPartContext.getPackageSnRule());
newWorkOrderCutDetailModel.setPrinter(mesPartContext.getPrinter());
newWorkOrderCutDetailModel.setCustPartNo(mesPartContext == null ? "" : mesPartContext.getCustPartNo());
newWorkOrderCutDetailModel.setLabelTemplate(mesPartContext.getLabelTemplate());
workOrderCutPackages.add(cutPackage);
newWorkOrderCutFgDataContextList.add(newWorkOrderCutDetailModel);

@ -73,8 +73,8 @@ public class MesProduceSnPrintModel {
@ApiParam(name = "源数据 使用功能1-裁片")
private Object sourceData;
@ApiParam(name = "打印参数值 使用功能1-裁片")
List<Map<String, Object>> printParamValueList = new ArrayList<>();
@ApiParam(name = "打印内容 使用功能1-裁片")
List<Map<String, Object>> printContextList = new ArrayList<>();
public Double getQty() {
return qty == null || qty <= 0d ? 1d : qty;

@ -466,4 +466,18 @@ public class MesPcnExtConstWords {
// 模板代码
public static final String TEMPLATE_CODE = "templateCode";
//打印模板
public static final String LABEL_TEMPLATE = "labelTemplate";
//打印模板数据
public static final String TEMPLATE_DATA = "templateData";
//打印机
public static final String PRINTERE = "printer";
//客户零件号
public static final String CUST_PART_NO = "custPartNo";
//生产日期
public static final String LOT_NO = "lotNo";
//包装数量
public static final String PACKAGE_QTY = "packageQty";
}

Loading…
Cancel
Save