forked from I3-YF/i3plus-mes-yfai
裁片工单标签打印接口开发
parent
1d29f10f6f
commit
7f17a0edf1
@ -0,0 +1,223 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.strategy;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
|
||||||
|
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.GenSerialNoModel;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 裁片工单标签打印
|
||||||
|
* @Reference :
|
||||||
|
* @Author : Castle
|
||||||
|
* @CreateDate : 2024/6/17 16:43
|
||||||
|
* @Modify:
|
||||||
|
**/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class CutWorkOrderNoPrintStrategy implements IPrintTemplateStrategyService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesCutSchemeFgRepository cutSchemeFgRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesCutSchemeMaterialRepository cutSchemeMaterialRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesCutSchemeEquipmentRepository cutSchemeEquipmentRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesCutSchemeEquipmentDetailRepository cutSchemeEquipmentDetailRepository;
|
||||||
|
|
||||||
|
public static final int EQUIP_PARAM_TITLE_NUM = 4;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel,
|
||||||
|
MesProduceSnPrintModel model,
|
||||||
|
MesNumberRule numberRule) {
|
||||||
|
|
||||||
|
List<MesWorkOrderCut> workOrderCutList = (List<MesWorkOrderCut>)model.getSourceData();
|
||||||
|
List<Map<String, Object>> printDataMapList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 裁片方案代码集合
|
||||||
|
List<String> cutCodeList = workOrderCutList.stream().map(MesWorkOrderCut::getCutCode).distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<MesCutSchemeFg> cutSchemeFgList = getMesCutSchemeFgs(cutCodeList);
|
||||||
|
|
||||||
|
List<MesCutSchemeMaterial> cutSchemeMaterialList = getMesCutSchemeMaterials(cutCodeList);
|
||||||
|
|
||||||
|
//根据裁片方案代码对裁片方案成品明细分组
|
||||||
|
Map<String, List<MesCutSchemeFg>> cutSchemeFgMapByCutCode = cutSchemeFgList.stream().collect(Collectors.groupingBy(MesCutSchemeFg::getCutCode));
|
||||||
|
|
||||||
|
//根据裁片方案代码对裁片方案原材料分组
|
||||||
|
Map<String, List<MesCutSchemeMaterial>> cutSchemeMaterialMapByCutCode = cutSchemeMaterialList.stream().collect(Collectors.groupingBy(MesCutSchemeMaterial::getCutCode));
|
||||||
|
|
||||||
|
List<MesCutSchemeEquipment> cutSchemeEquipmentList = getMesCutSchemeEquipments(model, cutCodeList);
|
||||||
|
|
||||||
|
cutSchemeEquipmentList = cutSchemeEquipmentList.stream().filter(o -> o.getIsPrint() != null && o.getIsPrint() == CommonEnumUtil.VALID).collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 根据裁片方案代码对裁片设备信息分组
|
||||||
|
Map<String, List<MesCutSchemeEquipment>> cutSchemeEquipmentMapByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentList) ? null : cutSchemeEquipmentList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipment::getCutCode));
|
||||||
|
|
||||||
|
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetailList = getMesCutSchemeEquipmentDetails(model, cutSchemeEquipmentList);
|
||||||
|
|
||||||
|
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = cutSchemeEquipmentDetailList.stream().collect(Collectors.groupingBy(MesCutSchemeEquipmentDetail::getPid));
|
||||||
|
|
||||||
|
for (MesWorkOrderCut workOrderCut : workOrderCutList) {
|
||||||
|
|
||||||
|
List<MesCutSchemeFg> mesCutSchemeFgList = cutSchemeFgMapByCutCode.get(workOrderCut.getCutCode());
|
||||||
|
|
||||||
|
List<MesCutSchemeMaterial> mesCutSchemeMaterialList = cutSchemeMaterialMapByCutCode.get(workOrderCut.getCutCode());
|
||||||
|
|
||||||
|
MesCutSchemeMaterial cutSchemeMaterial = mesCutSchemeMaterialList.get(0);
|
||||||
|
|
||||||
|
List<MesCutSchemeEquipment> cutSchemeEquipmentListByCutCode = CollectionUtils.isEmpty(cutSchemeEquipmentMapByCutCode) ? null : cutSchemeEquipmentMapByCutCode.get(workOrderCut.getCutCode());
|
||||||
|
|
||||||
|
if (!CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode)) cutSchemeEquipmentListByCutCode.sort(Comparator.comparing(MesCutSchemeEquipment::getSeq));
|
||||||
|
|
||||||
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
|
|
||||||
|
resultMap.put(MesExtConstWords.CUT_WORK_ORDER_NO, workOrderCut.getCutWorkOrderNo());
|
||||||
|
resultMap.put(MesExtConstWords.CUT_NAME, workOrderCut.getCutName());
|
||||||
|
// 拉料信息 START
|
||||||
|
// 原材料零件号
|
||||||
|
resultMap.put(MesExtConstWords.RAW_PART_NO, cutSchemeMaterial.getPartNo());
|
||||||
|
resultMap.put(MesExtConstWords.PULLING_MATERIAL_LENGTH, cutSchemeMaterial.getPullingMaterialLength());
|
||||||
|
resultMap.put(MesExtConstWords.PULLING_MATERIAL_LAYER_NUMBER, cutSchemeMaterial.getPullingMaterialLayerNumber());
|
||||||
|
resultMap.put(MesExtConstWords.PER_LAYER_NUMBER, cutSchemeMaterial.getPerLayerNumber());
|
||||||
|
resultMap.put(MesExtConstWords.MATERIAL_DOSAGE, cutSchemeMaterial.getMaterialDosage());
|
||||||
|
resultMap.put(MesExtConstWords.USING_LENGTH, cutSchemeMaterial.getUsingLength());
|
||||||
|
resultMap.put(MesExtConstWords.LAYER_NUMBER, cutSchemeMaterial.getLayerNumber());
|
||||||
|
resultMap.put(MesExtConstWords.TENSION_PARAM, cutSchemeMaterial.getTensionParam());
|
||||||
|
// 拉料信息 END
|
||||||
|
|
||||||
|
|
||||||
|
//int index = 1;
|
||||||
|
//for (MesCutSchemeEquipment mesCutSchemeEquipment : cutSchemeEquipmentListByCutCode) {
|
||||||
|
// //设备信息
|
||||||
|
// resultMap.put(MesExtConstWords.TITLE + index, mesCutSchemeEquipment.getValue());
|
||||||
|
//
|
||||||
|
// index++;
|
||||||
|
//}
|
||||||
|
|
||||||
|
MesCutSchemeEquipment mesCutSchemeEquipment = CollectionUtils.isEmpty(cutSchemeEquipmentListByCutCode) ? null : cutSchemeEquipmentListByCutCode.get(0);
|
||||||
|
|
||||||
|
List<String> equipParamNameList = new ArrayList<>();
|
||||||
|
List<String> equipParamValueList = new ArrayList<>();
|
||||||
|
List<MesCutSchemeEquipmentDetail> cutSchemeEquipmentDetails = mesCutSchemeEquipment == null ? new ArrayList<>() : cutSchemeEquipmentDetailMapByPid.get(mesCutSchemeEquipment.getId());
|
||||||
|
|
||||||
|
for (int i = 0; i < EQUIP_PARAM_TITLE_NUM; i++) {
|
||||||
|
if (cutSchemeEquipmentDetails.size() > i) {
|
||||||
|
equipParamNameList.add(cutSchemeEquipmentDetails.get(i).getValue());
|
||||||
|
equipParamValueList.add(cutSchemeEquipmentDetails.get(i).getName());
|
||||||
|
} else {
|
||||||
|
equipParamNameList.add("");
|
||||||
|
equipParamValueList.add("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (MesCutSchemeEquipmentDetail cutSchemeEquipmentDetail : cutSchemeEquipmentDetails) {
|
||||||
|
equipParamNameList.add(cutSchemeEquipmentDetail.getValue());
|
||||||
|
equipParamValueList.add(cutSchemeEquipmentDetail.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
//设备参数值标题
|
||||||
|
resultMap.put(MesExtConstWords.EQUIPMENT_NAME+1, mesCutSchemeEquipment == null ? "" : mesCutSchemeEquipment.getEquipmentName());
|
||||||
|
//设备参数值标题1
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+1, equipParamNameList.get(0));
|
||||||
|
//设备参数值标题2
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+2, equipParamNameList.get(1));
|
||||||
|
//设备参数值标题3
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+3, equipParamNameList.get(2));
|
||||||
|
//设备参数值标题4
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_NAME+4, equipParamNameList.get(3));
|
||||||
|
//设备参数值1
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+1, equipParamValueList.get(0));
|
||||||
|
//设备参数值2
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+2, equipParamValueList.get(1));
|
||||||
|
//设备参数值3
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+3, equipParamValueList.get(2));
|
||||||
|
//设备参数值4
|
||||||
|
resultMap.put(MesExtConstWords.EQUIP_PARAM_VALUE+4, equipParamValueList.get(3));
|
||||||
|
|
||||||
|
String partValue = "";
|
||||||
|
if (!CollectionUtils.isEmpty(mesCutSchemeFgList)) {
|
||||||
|
BigDecimal[] bigDecimals = divideAndRemainder(mesCutSchemeFgList.get(0).getQty(), mesCutSchemeFgList.get(0).getPackageQty());
|
||||||
|
BigDecimal remainder = bigDecimals[1];
|
||||||
|
Double boxQty = remainder.doubleValue() > 0 ? bigDecimals[0].add(new BigDecimal("1")).doubleValue() : bigDecimals[0].doubleValue();
|
||||||
|
partValue = mesCutSchemeFgList.get(0).getPartNo() + " " + boxQty.intValue() +"箱";
|
||||||
|
}
|
||||||
|
|
||||||
|
//产品信息
|
||||||
|
resultMap.put(MesExtConstWords.FG_PART_NO, partValue);
|
||||||
|
|
||||||
|
printDataMapList.add(resultMap);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
model.setPrintContextList(packResultMapList(model, printDataMapList));
|
||||||
|
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal[] divideAndRemainder(Double qty, Double packageQty) {
|
||||||
|
BigDecimal dividend = new BigDecimal(qty.toString());
|
||||||
|
BigDecimal divisor = new BigDecimal(packageQty.toString());
|
||||||
|
return dividend.divideAndRemainder(divisor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MesCutSchemeEquipmentDetail> getMesCutSchemeEquipmentDetails(MesProduceSnPrintModel model, List<MesCutSchemeEquipment> cutSchemeEquipmentList) {
|
||||||
|
if (!CollectionUtils.isEmpty(cutSchemeEquipmentList)) {
|
||||||
|
List<Long> idList = cutSchemeEquipmentList.stream().map(MesCutSchemeEquipment::getId).collect(Collectors.toList());
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
||||||
|
DdlPreparedPack.getInPackList(idList, MesExtConstWords.ID, packBean);
|
||||||
|
return cutSchemeEquipmentDetailRepository.findByHqlWhere(packBean);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(MesProduceSnPrintModel model, List<String> cutCodeList) {
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode());
|
||||||
|
DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean);
|
||||||
|
List<MesCutSchemeEquipment> cutSchemeEquipmentList = cutSchemeEquipmentRepository.findByHqlWhere(packBean);
|
||||||
|
return cutSchemeEquipmentList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MesCutSchemeMaterial> getMesCutSchemeMaterials(List<String> cutCodeList) {
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean);
|
||||||
|
List<MesCutSchemeMaterial> cutSchemeMaterialList = cutSchemeMaterialRepository.findByHqlWhere(packBean);
|
||||||
|
return cutSchemeMaterialList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MesCutSchemeFg> getMesCutSchemeFgs(List<String> cutCodeList) {
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
|
||||||
|
DdlPreparedPack.getInPackList(cutCodeList, MesExtConstWords.CUT_CODE, packBean);
|
||||||
|
List<MesCutSchemeFg> cutSchemeFgList = cutSchemeFgRepository.findByHqlWhere(packBean);
|
||||||
|
return cutSchemeFgList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> packResultMapList(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
|
||||||
|
List<Map<String, Object>> resultMapList = new ArrayList<>();
|
||||||
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
|
resultMap.put(MesExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate());
|
||||||
|
resultMap.put(MesExtConstWords.TEMPLATE_DATA, printTemplateDateList);
|
||||||
|
resultMap.put(MesExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode());
|
||||||
|
resultMap.put(MesExtConstWords.PRINTER, printModel.getPrinter());
|
||||||
|
resultMapList.add(resultMap);
|
||||||
|
return resultMapList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pojo.model;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description : 工单标签补打Model
|
||||||
|
* @Reference :
|
||||||
|
* @Author : xinwang.yi
|
||||||
|
* @CreateDate 2024/6/13 15:48
|
||||||
|
* @Modify:
|
||||||
|
**/
|
||||||
|
@Data
|
||||||
|
public class MesWorkOrderCutPrintModel {
|
||||||
|
|
||||||
|
@ApiParam("工厂代码")
|
||||||
|
private String organizeCode;
|
||||||
|
|
||||||
|
@ApiParam("裁片方案代码")
|
||||||
|
private String cutCode;
|
||||||
|
|
||||||
|
@ApiParam("裁片方案名称")
|
||||||
|
private String cutName;
|
||||||
|
|
||||||
|
@ApiParam("裁片工单号")
|
||||||
|
private String cutWorkOrderNo;
|
||||||
|
}
|
Loading…
Reference in New Issue