|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|