打印主条码主工步完成,缺少封装数据的策略,待标签文档确认后添加

tags/yfai-pcn-ext-v1.0
administrator 11 months ago
parent 202ea3a057
commit c359d385ab

@ -0,0 +1,22 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import java.util.List;
/**
* @Description : , content dataList
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/6 16:39
* @Modify:
**/
public interface IPrintTemplateStrategyService {
/**
* dataList
*
* @param sn
* @return
*/
List<Object> execute(MesProductionPsOutContext sn , String organizeCode);
}

@ -0,0 +1,29 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.pojo.mes.repository.MesLabelTemplateRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description : 广使
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/6 17:03
* @Modify:
**/
@Service
@Slf4j
public class GzPrintSnStrategy implements IPrintTemplateStrategyService {
@Autowired
private MesLabelTemplateRepository labelTemplateRao;
@Override
public List<Object> execute(MesProductionPsOutContext sn, String organizeCode) {
//1.根据 templateCode
return null;
}
}

@ -0,0 +1,108 @@
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.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
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.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.MesLabelTemplateRepository;
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Reference :
* @Author : Castle
* @CreateDate : 2024/6/6 13:39
* @Modify:
**/
@Service
public class MesProductSnPrintStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
@Autowired
private MesLabelTemplateRepository labelTemplateRao;
@Override
public StepResult execute(StationRequestBean reqBean) {
String organizeCode = reqBean.getOrganizeCode();
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//需要打印的数据
Map<String,List<Object>> resultData = new HashMap<>();
//用于保存客户模板代码 和 模板信息关系
Map<String,MesLabelTemplate> labelTemplateMap = new HashMap<>();
//返回打印标识 给前端
//1. 获取上下文中生成的主条码
List<MesProductionPsOutContext> productionPsOutContextList = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean);
//2. 获取条码需要模板、模板代码、打印机 --- 循环遍历条码 封装数据
for (MesProductionPsOutContext sn : productionPsOutContextList) {
String custLabelTemplate = sn.getCustLabelTemplate();
MesLabelTemplate labelTemplate;
// 查模板代码
if (!labelTemplateMap.containsKey(custLabelTemplate)) {
labelTemplate = getLabelTemplate(custLabelTemplate, organizeCode);
//模板信息丢失抛出异常
if (labelTemplate == null) {
execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的模板信息丢失,请配置!", sn.getPartNo(),custLabelTemplate));
}
labelTemplateMap.put(custLabelTemplate, labelTemplate);
}else {
labelTemplate = labelTemplateMap.get(custLabelTemplate);
}
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (methodCode == null) {
execExpSendMsgAndThrowEx(reqBean, resultBean, String.format("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getPartNo(),custLabelTemplate));
}
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
List<Object> snData = strategyService.execute(sn, organizeCode);
if (resultData.containsKey(labelTemplate.getTemplateCode())){
List<Object> printData = resultData.get(labelTemplate.getTemplateCode());
printData.addAll(snData);
}else {
resultData.put(labelTemplate.getTemplateCode(),snData);
}
}
//前端接收到busiTyep是customComponent并且 dataType是file类型的消息就需要打印后续消息里的数据一个模板对应多个打印数据
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue());
resultBean.setResultObj(resultData);
//3. 发送数据给到前端
this.sendMessage(reqBean,resultBean);
return stepResult;
}
/**
* templateCode
* @param templateCode
* @param organizeCode
* @return
*/
private MesLabelTemplate getLabelTemplate(String templateCode,String organizeCode) {
DdlPackBean templatePackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(templateCode,"templateCode",templatePackBean);
List<MesLabelTemplate> mesLabelTemplateList = labelTemplateRao.findByHqlWhere(templatePackBean);
return mesLabelTemplateList.isEmpty() ? null : mesLabelTemplateList.get(0);
}
}
Loading…
Cancel
Save