|
|
|
@ -9,15 +9,23 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
|
|
|
|
|
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.*;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.edi.wuhu.MesCimCheryOrder;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList;
|
|
|
|
|
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.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
|
|
|
|
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ResultBean;
|
|
|
|
|
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
@ -28,6 +36,7 @@ import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
@ -50,6 +59,7 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesProduceSnRepository produceSnRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesConfigService configService;
|
|
|
|
|
|
|
|
|
@ -65,6 +75,18 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
|
|
|
|
|
@Autowired
|
|
|
|
|
private IMesLoadingListService mesLoadingListService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesConfigRepository mesConfigRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShippingOrderManagementDetailRepository mesShippingOrderManagementDetailRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesCimCheryOrderRepository mesCimCheryOrderRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesShippingOrderManagementRepository mesShippingOrderManagementRepository;
|
|
|
|
|
|
|
|
|
|
protected void setPackQueryBean(MesShippingOrderManagement bean, DdlPackBean packBean) {
|
|
|
|
|
DdlPreparedPack.getStringLikerPack(bean.getShippingCode(), "shippingCode", packBean);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(bean.getOrderCode(), "orderCode", packBean);
|
|
|
|
@ -403,6 +425,144 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public ResultBean doShippingReprint(List<MesShippingOrderManagement> shippingOrderManagementList,
|
|
|
|
|
String organizeCode, String userName) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack("WU_HU_SUPPLIER","cfgKey", packBean);
|
|
|
|
|
List<MesConfig> configList = mesConfigRepository.findByHqlWhere(packBean);
|
|
|
|
|
String supplierNo = "";
|
|
|
|
|
if (configList != null && !configList.isEmpty()) {
|
|
|
|
|
supplierNo = configList.get(0).getCfgValue();
|
|
|
|
|
}
|
|
|
|
|
//查询发运单明细
|
|
|
|
|
Map<Long, MesShippingOrderManagement> shippingOrderManagementMap = shippingOrderManagementList.stream().collect(
|
|
|
|
|
Collectors.toMap(MesShippingOrderManagement::getId, shippingOrderManagement -> shippingOrderManagement));
|
|
|
|
|
packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(new ArrayList<>(shippingOrderManagementMap.keySet()), "pid", packBean);
|
|
|
|
|
DdlPreparedPack.getOrderBy("boxNum",CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean);
|
|
|
|
|
List<MesShippingOrderManagementDetail> shippingOrderManagementDetailList =
|
|
|
|
|
mesShippingOrderManagementDetailRepository.findByHqlWhere(packBean);
|
|
|
|
|
Map<Long, List<MesShippingOrderManagementDetail>> shippingOrderManagementDetaiMap =
|
|
|
|
|
shippingOrderManagementDetailList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid));
|
|
|
|
|
//查询原始报文
|
|
|
|
|
List<String> shippingCodeList = shippingOrderManagementList.stream()
|
|
|
|
|
.map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList());
|
|
|
|
|
packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(shippingCodeList, "sheetNo", packBean);
|
|
|
|
|
List<MesCimCheryOrder> cheryOrderList = mesCimCheryOrderRepository.findByHqlWhere(packBean);
|
|
|
|
|
Map<String, MesCimCheryOrder> cimCheryOrderMap = cheryOrderList.stream()
|
|
|
|
|
.collect(Collectors.toMap(MesCimCheryOrder::getSheetNo, cimCheryOrder -> cimCheryOrder));
|
|
|
|
|
//45527 礼嘉福特发运单打印(通过系统参数信息判断是否采用新的查询取值逻辑-礼嘉福特)
|
|
|
|
|
DdlPackBean configPackBeanTwo = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack("SORT_SHIPMENT_PRINTS_FLAG_FOR_LI_JIA","cfgKey", configPackBeanTwo);
|
|
|
|
|
MesConfig liJiaConfig = mesConfigRepository.getByProperty(configPackBeanTwo);
|
|
|
|
|
if (Objects.isNull(liJiaConfig)) {
|
|
|
|
|
//未维护该参数,则继续执行原有逻辑
|
|
|
|
|
List<MesShippingOrderManagementModel> modelList = new ArrayList<>();
|
|
|
|
|
for (MesShippingOrderManagement shippingOrder : shippingOrderManagementList) {
|
|
|
|
|
MesShippingOrderManagementModel model = new MesShippingOrderManagementModel();
|
|
|
|
|
String shippingCodePrefix = shippingOrder.getShippingCode().substring(0, shippingOrder.getShippingCode().length() - 3);
|
|
|
|
|
String shippingCodeSuffix = shippingOrder.getShippingCode().substring(shippingOrder.getShippingCode().length() - 3);
|
|
|
|
|
model.setShippingCode(shippingCodePrefix);
|
|
|
|
|
model.setShippingCodeAfter3(shippingCodeSuffix);
|
|
|
|
|
model.setShippingCodeWhole(shippingOrder.getShippingCode());
|
|
|
|
|
Map<String, List<MesCimCheryOrder>> cheryOrderMap = new HashMap<>();
|
|
|
|
|
//填充原始报文信息
|
|
|
|
|
if (!CollectionUtils.isEmpty(cimCheryOrderMap) &&
|
|
|
|
|
cimCheryOrderMap.containsKey(shippingOrder.getShippingCode())) {
|
|
|
|
|
MesCimCheryOrder cheryOrder = cimCheryOrderMap.get(shippingOrder.getShippingCode());
|
|
|
|
|
model.setPlantName(cheryOrder.getPlantName());
|
|
|
|
|
model.setPartkitName(cheryOrder.getPartkitName());
|
|
|
|
|
model.setDeliverySendSequence(cheryOrder.getDeliverySendSequence());
|
|
|
|
|
model.setReceiveDockName(cheryOrder.getReceiveDockNo()+"--"+cheryOrder.getReceiveDockName());
|
|
|
|
|
model.setLastRecRequireTime(cheryOrder.getLastRecRequireTime());
|
|
|
|
|
//根据cheryOrder的workshopNo获取对应的车间名称
|
|
|
|
|
String workshopName = getWorkshopName(cheryOrder.getOrganizeCode(), cheryOrder.getWorkshopNo());
|
|
|
|
|
model.setWorkShop(workshopName);
|
|
|
|
|
model.setCreateDateTime(cheryOrder.getCreateDatetime());
|
|
|
|
|
model.setPrintDateTime(TimeTool.getNowTime(true));
|
|
|
|
|
cheryOrderMap = cheryOrderList.stream().collect(Collectors.groupingBy(MesCimCheryOrder::getVin));
|
|
|
|
|
}
|
|
|
|
|
//填充发运明细信息
|
|
|
|
|
if (!CollectionUtils.isEmpty(shippingOrderManagementDetaiMap) &&
|
|
|
|
|
shippingOrderManagementDetaiMap.containsKey(shippingOrder.getId())) {
|
|
|
|
|
List<MesShippingOrderManagementDetailModel> detailModelList = new ArrayList<>();
|
|
|
|
|
List<MesShippingOrderManagementDetail> detailList = shippingOrderManagementDetaiMap.get(shippingOrder.getId());
|
|
|
|
|
detailList = detailList.stream().sorted(Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList());
|
|
|
|
|
for (MesShippingOrderManagementDetail shipOrderPartInfo : detailList) {
|
|
|
|
|
MesShippingOrderManagementDetailModel detailModel = new MesShippingOrderManagementDetailModel();
|
|
|
|
|
detailModel.setPartNo(shipOrderPartInfo.getPartNo());
|
|
|
|
|
detailModel.setPartName(shipOrderPartInfo.getPartName());
|
|
|
|
|
detailModel.setQty(shipOrderPartInfo.getPlanQty());
|
|
|
|
|
detailModel.setBoxNo(shipOrderPartInfo.getCustInfoSeq());
|
|
|
|
|
detailModel.setSupplierNo(supplierNo);
|
|
|
|
|
detailModel.setVin(shipOrderPartInfo.getVin().substring(shipOrderPartInfo.getVin().length()-8));
|
|
|
|
|
MesCimCheryOrder order = cheryOrderMap.get(shipOrderPartInfo.getVin()).get(0);
|
|
|
|
|
if (order != null) {
|
|
|
|
|
detailModel.setWholePartNo(order.getMaterialNo());
|
|
|
|
|
}
|
|
|
|
|
detailModelList.add(detailModel);
|
|
|
|
|
}
|
|
|
|
|
model.setShipOrderPartInfos(detailModelList);
|
|
|
|
|
}
|
|
|
|
|
shippingOrder.setPrintCount(StringUtil.isEmpty(shippingOrder.getPrintCount()) ? 1 : shippingOrder.getPrintCount() + 1);
|
|
|
|
|
shippingOrder.setLastPrintTime(TimeTool.getNowTime(true));
|
|
|
|
|
shippingOrder.setLastPrintUser(userName);
|
|
|
|
|
ConvertBean.serviceModelUpdate(shippingOrder, userName);
|
|
|
|
|
modelList.add(model);
|
|
|
|
|
}
|
|
|
|
|
mesShippingOrderManagementRepository.saveAll(shippingOrderManagementList);
|
|
|
|
|
return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList);
|
|
|
|
|
}else {
|
|
|
|
|
//维护了该参数,则执行礼嘉的新逻辑
|
|
|
|
|
List<MesShippingOrderManagementModelForLiJia> mainDataList = new ArrayList<>();
|
|
|
|
|
//遍历处理每个发运单主表
|
|
|
|
|
for (MesShippingOrderManagement pullingOrderInfo : shippingOrderManagementList) {
|
|
|
|
|
//一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据)
|
|
|
|
|
//取出当前发运单的明细信息
|
|
|
|
|
if (!CollectionUtils.isEmpty(shippingOrderManagementDetaiMap) &&
|
|
|
|
|
shippingOrderManagementDetaiMap.containsKey(pullingOrderInfo.getId()) &&
|
|
|
|
|
!CollectionUtils.isEmpty(shippingOrderManagementDetaiMap.get(pullingOrderInfo.getId()))) {
|
|
|
|
|
List<MesShippingOrderManagementDetail> details = shippingOrderManagementDetaiMap.get(pullingOrderInfo.getId());
|
|
|
|
|
//将发运单明细按照 assyCode 分组
|
|
|
|
|
//assyCode 的个数 / 2 代表会生成实体发运单的份数(一个 assyCode 就是一个表格,一份实体表单上可以放两个表格)
|
|
|
|
|
Map<String, List<MesShippingOrderManagementDetail>> detailByAssyCodeMap =
|
|
|
|
|
details.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getAssyCode));
|
|
|
|
|
//将assyCode按照logic_Seq进行排序(选取每个assyCode对应的那组数据中的logic_seq最小值,根据该值对assyCode进行排序)
|
|
|
|
|
List<String> assyCodeList = new ArrayList<>(detailByAssyCodeMap.keySet());
|
|
|
|
|
Map<Long, String> logicSeqAndAssyCodeMap = new HashMap<>();
|
|
|
|
|
for (String assyCode : assyCodeList) {
|
|
|
|
|
List<MesShippingOrderManagementDetail> detailList = detailByAssyCodeMap.get(assyCode);
|
|
|
|
|
Optional<MesShippingOrderManagementDetail> min =
|
|
|
|
|
detailList.stream().min(Comparator.comparing(MesShippingOrderManagementDetail::getLogicSeq));
|
|
|
|
|
min.ifPresent(mesShippingOrderManagementDetail -> logicSeqAndAssyCodeMap.put(mesShippingOrderManagementDetail.getLogicSeq(), assyCode));
|
|
|
|
|
}
|
|
|
|
|
List<Long> collect = logicSeqAndAssyCodeMap.keySet().stream().sorted().collect(Collectors.toList());
|
|
|
|
|
List<String> newAssyCodeList = new ArrayList<>();
|
|
|
|
|
for (Long logicSeq : collect) {
|
|
|
|
|
newAssyCodeList.add(logicSeqAndAssyCodeMap.get(logicSeq));
|
|
|
|
|
}
|
|
|
|
|
//将 assyCode 两两分组
|
|
|
|
|
List<List<String>> physicalOrderList = IntStream.range(0, newAssyCodeList.size())
|
|
|
|
|
.filter(i -> i % 2 == 0)
|
|
|
|
|
.mapToObj(i -> newAssyCodeList.subList(i, Math.min(i + 2, newAssyCodeList.size())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
for (List<String> list : physicalOrderList) {
|
|
|
|
|
//生成一张实体发运单
|
|
|
|
|
mainDataList.add(createPhysicalOrder(pullingOrderInfo, list, detailByAssyCodeMap, details));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pullingOrderInfo.setPrintCount(StringUtil.isEmpty(pullingOrderInfo.getPrintCount()) ? 1 : pullingOrderInfo.getPrintCount() + 1);
|
|
|
|
|
pullingOrderInfo.setLastPrintTime(TimeTool.getNowTime(true));
|
|
|
|
|
pullingOrderInfo.setLastPrintUser(userName);
|
|
|
|
|
ConvertBean.serviceModelUpdate(pullingOrderInfo, userName);
|
|
|
|
|
}
|
|
|
|
|
mesShippingOrderManagementRepository.saveAll(shippingOrderManagementList);
|
|
|
|
|
return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mainDataList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagement getMesShippingOrderManagement(String organizeCode,long id) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(id,"id",packBean);
|
|
|
|
@ -412,4 +572,60 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
|
|
|
|
|
}
|
|
|
|
|
return mesShippingOrderManagement;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getWorkshopName(String organizeCode, String workshopNo) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workshopNo, "cfgKey", ddlPackBean);
|
|
|
|
|
List<MesConfig> configList = mesConfigRepository.findByHqlWhere(ddlPackBean);
|
|
|
|
|
return configList.isEmpty() ? "" : configList.get(0).getCfgValue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement pullingOrderInfo,
|
|
|
|
|
List<String> assyCodeList,
|
|
|
|
|
Map<String, List<MesShippingOrderManagementDetail>> detailByAssyCodeMap,
|
|
|
|
|
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");
|
|
|
|
|
//中部表结构赋值
|
|
|
|
|
model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo()));
|
|
|
|
|
//底部表结构赋值
|
|
|
|
|
model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, pullingOrderInfo.getRackNo()));
|
|
|
|
|
return model;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesShippingOrderManagementDetailModelForLiJia> createDetailList(
|
|
|
|
|
String assyCode, Map<String, List<MesShippingOrderManagementDetail>> detailByAssyCodeMap,
|
|
|
|
|
List<MesShippingOrderManagementDetail> details, String rackNo) {
|
|
|
|
|
List<MesShippingOrderManagementDetailModelForLiJia> dataList = new ArrayList<>();
|
|
|
|
|
//取出符合条件的发运单明细数据
|
|
|
|
|
List<MesShippingOrderManagementDetail> nowDetailList = detailByAssyCodeMap.get(assyCode);
|
|
|
|
|
if (!CollectionUtils.isEmpty(nowDetailList)) {
|
|
|
|
|
//并按照 logic_seq 升序排列
|
|
|
|
|
List<MesShippingOrderManagementDetail> collect = nowDetailList.stream().sorted(
|
|
|
|
|
Comparator.comparing(MesShippingOrderManagementDetail::getLogicSeq)).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 ++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return dataList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|