|
|
|
@ -5,26 +5,31 @@ import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.util.StringUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.edi.wuhu.MesCimCheryOrder;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementDetailModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementDetailModelForLiJia;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModel;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModelForLiJia;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.logging.Handler;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
@ -49,6 +54,9 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesConfigRepository mesConfigRao;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCustomerPartRepository mesCustomerPartRepository;
|
|
|
|
|
|
|
|
|
|
public List<MesPartShippingGroup> findAll(DdlPackBean packBean) {
|
|
|
|
|
return shippingGroupRepository.findByHqlWhere(packBean);
|
|
|
|
|
}
|
|
|
|
@ -62,7 +70,7 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<MesShippingOrderManagementModel> doMesMesShippingOrderManagementPrint(MesShippingOrderManagement bean) {
|
|
|
|
|
public ResultBean doMesMesShippingOrderManagementPrint(MesShippingOrderManagement bean) {
|
|
|
|
|
DdlPackBean configPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack("WU_HU_SUPPLIER","cfgKey", configPackBean);
|
|
|
|
|
List<MesConfig> configList = mesConfigRao.findByHqlWhere(configPackBean);
|
|
|
|
@ -70,20 +78,27 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
|
|
|
|
|
if (configList != null && !configList.isEmpty()) {
|
|
|
|
|
supplierNo = configList.get(0).getCfgValue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<MesShippingOrderManagementModel> modelList = new ArrayList<>();
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
|
//多选
|
|
|
|
|
if (!StringUtil.isEmpty(bean.getShippingGroupCode())) {
|
|
|
|
|
DdlPreparedPack.getInPackList(Arrays.asList(bean.getShippingGroupCode().split(",")), "shippingGroupCode", packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getShippingCode(), "shippingCode", packBean);
|
|
|
|
|
DdlPreparedPack.getIsNull("lastPrintTime", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"createDatetime"}, packBean);
|
|
|
|
|
List<MesShippingOrderManagement> pullingOrderInfos = shippingOrderManagementRepository.findByHqlTopWhere(packBean,10);
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-pullingOrderInfos" + pullingOrderInfos.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(pullingOrderInfos)) {
|
|
|
|
|
//把查出来的发运单打印并修改打印状态为已打印
|
|
|
|
|
//45527 礼嘉福特发运单打印(通过系统参数信息判断是否采用新的查询取值逻辑-礼嘉福特)
|
|
|
|
|
DdlPackBean configPackBeanTwo = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getStringEqualPack("SORT_SHIPMENT_PRINTS_FLAG_FOR_LI_JIA","cfgKey", configPackBeanTwo);
|
|
|
|
|
MesConfig liJiaConfig = mesConfigRao.getByProperty(configPackBeanTwo);
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-liJiaConfig" + liJiaConfig);
|
|
|
|
|
if (Objects.isNull(liJiaConfig)) {
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-老逻辑");
|
|
|
|
|
//未维护该参数,则继续执行原有逻辑
|
|
|
|
|
List<MesShippingOrderManagementModel> modelList = new ArrayList<>();
|
|
|
|
|
//把查出来的发运单打印并修改打印状态为已打印-
|
|
|
|
|
for (MesShippingOrderManagement shippingOrder : pullingOrderInfos) {
|
|
|
|
|
MesShippingOrderManagementModel model = new MesShippingOrderManagementModel();
|
|
|
|
|
String shippingCodePrefix = shippingOrder.getShippingCode().substring(0, shippingOrder.getShippingCode().length() - 3);
|
|
|
|
@ -143,9 +158,80 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
|
|
|
|
|
modelList.add(model);
|
|
|
|
|
}
|
|
|
|
|
shippingOrderManagementRepository.saveAll(pullingOrderInfos);
|
|
|
|
|
return ResultBean.success("发运单打印成功")
|
|
|
|
|
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
|
|
|
|
|
.setResultList(modelList);
|
|
|
|
|
}else {
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-新逻辑");
|
|
|
|
|
//维护了该参数,则执行礼嘉的新逻辑
|
|
|
|
|
List<MesShippingOrderManagementModelForLiJia> mainDataList = new ArrayList<>();
|
|
|
|
|
/**
|
|
|
|
|
* 查询发运单明细信息
|
|
|
|
|
*/
|
|
|
|
|
List<Long> pidList = pullingOrderInfos.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList());
|
|
|
|
|
DdlPackBean liJIaPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getInPackList(pidList, "pid", liJIaPackBean);
|
|
|
|
|
List<MesShippingOrderManagementDetail> shippingOrderManagementDetailList =
|
|
|
|
|
shippingOrderManagementDetailRepository.findByHqlWhere(liJIaPackBean);
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-查询发运单明细信息" + shippingOrderManagementDetailList.size());
|
|
|
|
|
Map<Long, List<MesShippingOrderManagementDetail>> detailByPidMap = shippingOrderManagementDetailList
|
|
|
|
|
.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid));
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-查询发运单明细信息-detailByPidMap-" + detailByPidMap.size());
|
|
|
|
|
/**
|
|
|
|
|
* 查询零件发运组明细信息
|
|
|
|
|
*/
|
|
|
|
|
Set<Long> partShippingGroupIdSet = pullingOrderInfos.stream()
|
|
|
|
|
.map(MesShippingOrderManagement::getPartShippingGroupId).collect(Collectors.toSet());
|
|
|
|
|
liJIaPackBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode());
|
|
|
|
|
DdlPreparedPack.getInPackList(new ArrayList<>(partShippingGroupIdSet), "pid", liJIaPackBean);
|
|
|
|
|
List<MesPartShippingGroupDetail> partShippingGroupDetailList =
|
|
|
|
|
mesPartShippingGroupDetailRepository.findByHqlWhere(liJIaPackBean);
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-" + partShippingGroupDetailList.size());
|
|
|
|
|
Map<Long, List<MesPartShippingGroupDetail>> listMap = partShippingGroupDetailList.stream().collect(
|
|
|
|
|
Collectors.groupingBy(MesPartShippingGroupDetail::getPid));
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-listMap-" + listMap.size());
|
|
|
|
|
//遍历处理每个发运单主表
|
|
|
|
|
for (MesShippingOrderManagement pullingOrderInfo : pullingOrderInfos) {
|
|
|
|
|
//一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据)
|
|
|
|
|
//取出当前发运单的明细信息
|
|
|
|
|
List<MesShippingOrderManagementDetail> details = detailByPidMap.get(pullingOrderInfo.getId());
|
|
|
|
|
if (!CollectionUtils.isEmpty(details)) {
|
|
|
|
|
//取出当前发运单主表对应的发运组明细信息
|
|
|
|
|
List<MesPartShippingGroupDetail> shippingGroupDetailList = listMap.get(pullingOrderInfo.getPartShippingGroupId());
|
|
|
|
|
if (!CollectionUtils.isEmpty(shippingGroupDetailList)) {
|
|
|
|
|
//将发运组明细按照 seq_no 分组
|
|
|
|
|
//seq_no 的个数 / 2 代表会生成实体发运单的份数(一个 seq_no 就是一个表格,一份实体表单上可以放两个表格)
|
|
|
|
|
Map<Integer, List<MesPartShippingGroupDetail>> seqNoMap =
|
|
|
|
|
shippingGroupDetailList.stream().collect(Collectors.groupingBy(MesPartShippingGroupDetail::getSeqNo));
|
|
|
|
|
List<Integer> seqNoList = new ArrayList<>(seqNoMap.keySet());
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-查询零件发运组明细信息-seqNoList-" + seqNoList.size());
|
|
|
|
|
//将seq_no两两分组
|
|
|
|
|
List<List<Integer>> physicalOrderList = IntStream.range(0, seqNoList.size())
|
|
|
|
|
.filter(i -> i % 2 == 0)
|
|
|
|
|
.mapToObj(i -> seqNoList.subList(i, Math.min(i + 2, seqNoList.size())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
for (List<Integer> list : physicalOrderList) {
|
|
|
|
|
//生成一张实体发运单
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-生成一张实体发运单-list-" + list);
|
|
|
|
|
mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, seqNoMap, details));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pullingOrderInfo.setPrintCount(StringUtil.isEmpty(pullingOrderInfo.getPrintCount())? 1 : pullingOrderInfo.getPrintCount()+1);
|
|
|
|
|
pullingOrderInfo.setLastPrintTime(TimeTool.getNowTime(true));
|
|
|
|
|
pullingOrderInfo.setLastPrintUser(bean.getUserInfo());
|
|
|
|
|
ConvertBean.serviceModelUpdate(pullingOrderInfo, bean.getUserInfo());
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-pullingOrderInfo更新");
|
|
|
|
|
}
|
|
|
|
|
shippingOrderManagementRepository.saveAll(pullingOrderInfos);
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-结束");
|
|
|
|
|
return ResultBean.success("发运单打印成功")
|
|
|
|
|
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
|
|
|
|
|
.setResultList(mainDataList);
|
|
|
|
|
}
|
|
|
|
|
// return pullingOrderInfos;
|
|
|
|
|
return modelList;
|
|
|
|
|
}
|
|
|
|
|
return ResultBean.success("不存在需要打印的发运单")
|
|
|
|
|
.setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getWorkshopName(String organizeCode, String workshopNo) {
|
|
|
|
@ -179,4 +265,64 @@ public class MesPartShippingGroupService implements IMesPartShippingGroupService
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean);
|
|
|
|
|
return mesPartShippingGroupDetailRepository.getByProperty(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement pullingOrderInfo,
|
|
|
|
|
List<Integer> seqNoList,
|
|
|
|
|
Map<Integer, List<MesPartShippingGroupDetail>> seqNoMap,
|
|
|
|
|
List<MesShippingOrderManagementDetail> details) {
|
|
|
|
|
MesShippingOrderManagementModelForLiJia model = new MesShippingOrderManagementModelForLiJia();
|
|
|
|
|
//顶部的通用数据赋值
|
|
|
|
|
model.setShippingGroupName(pullingOrderInfo.getShippingGroupName());
|
|
|
|
|
model.setPrintDateTime(TimeTool.getNowTime(true));
|
|
|
|
|
model.setShippingCode(pullingOrderInfo.getShippingCode());
|
|
|
|
|
model.setDocumentNumber("YFVCQ-MS06-02-01");
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-顶部的通用数据赋值" + model);
|
|
|
|
|
//中部表结构赋值
|
|
|
|
|
model.setDetailModelsOne(createDetailList(seqNoList.get(0), seqNoMap, details, pullingOrderInfo.getRackNo()));
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-中部表结构赋值" + model);
|
|
|
|
|
//底部表结构赋值
|
|
|
|
|
model.setDetailModelsTwo(createDetailList(seqNoList.get(1), seqNoMap, details, pullingOrderInfo.getRackNo()));
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-底部表结构赋值" + model);
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesShippingOrderManagementDetailModelForLiJia> createDetailList(
|
|
|
|
|
Integer seqNo, Map<Integer, List<MesPartShippingGroupDetail>> seqNoMap,
|
|
|
|
|
List<MesShippingOrderManagementDetail> details, String rackNo) {
|
|
|
|
|
List<MesShippingOrderManagementDetailModelForLiJia> dataList = new ArrayList<>();
|
|
|
|
|
//取出发运组明细数据
|
|
|
|
|
List<MesPartShippingGroupDetail> partShippingGroupDetailList = seqNoMap.get(seqNo);
|
|
|
|
|
Set<String> custPartNoSet = partShippingGroupDetailList.stream()
|
|
|
|
|
.map(MesPartShippingGroupDetail::getCustPartNo).collect(Collectors.toSet());
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-createDetailList-partShippingGroupDetailList" + partShippingGroupDetailList.size());
|
|
|
|
|
//取出符合条件的发运单明细数据
|
|
|
|
|
List<MesShippingOrderManagementDetail> nowDetailList = details.stream().filter(t ->
|
|
|
|
|
custPartNoSet.contains(t.getCustPartNo())).collect(Collectors.toList());
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-createDetailList-nowDetailList" + nowDetailList.size());
|
|
|
|
|
if (!CollectionUtils.isEmpty(nowDetailList)) {
|
|
|
|
|
//并按照 cust_info_seq 升序排列
|
|
|
|
|
List<MesShippingOrderManagementDetail> collect = nowDetailList.stream().sorted(
|
|
|
|
|
Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList());
|
|
|
|
|
Integer number = 1;
|
|
|
|
|
for (MesShippingOrderManagementDetail mesShippingOrderManagementDetail : collect) {
|
|
|
|
|
MesShippingOrderManagementDetailModelForLiJia detailModel = new MesShippingOrderManagementDetailModelForLiJia();
|
|
|
|
|
detailModel.setNumber(number);
|
|
|
|
|
detailModel.setCustInfoSeq(mesShippingOrderManagementDetail.getCustInfoSeq());
|
|
|
|
|
if (!StringUtils.isEmpty(mesShippingOrderManagementDetail.getVin())) {
|
|
|
|
|
detailModel.setVin(mesShippingOrderManagementDetail.getVin().substring(
|
|
|
|
|
mesShippingOrderManagementDetail.getVin().length() - 6));
|
|
|
|
|
}
|
|
|
|
|
detailModel.setCarSerialCode(mesShippingOrderManagementDetail.getCarSerialCode());
|
|
|
|
|
detailModel.setPartNo(mesShippingOrderManagementDetail.getPartNo());
|
|
|
|
|
detailModel.setCustPartNo(mesShippingOrderManagementDetail.getCustPartNo());
|
|
|
|
|
detailModel.setCustPartName(mesShippingOrderManagementDetail.getPartName());
|
|
|
|
|
detailModel.setRackNo(rackNo);
|
|
|
|
|
dataList.add(detailModel);
|
|
|
|
|
number ++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("doMesMesShippingOrderManagementPrint-createDetailList-dataList" + dataList.size());
|
|
|
|
|
return dataList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|