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