Merge branch 'uat-temp-wj-chongqingdaqu-dev' into uat-temp-nht-chengdu-loading

# Conflicts:
#	modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/IPrintTemplateStrategyService.java
#	modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java
uat-temp-nht-chengdu-loading
jason 2 months ago
commit a91b404721

@ -4,6 +4,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
@ -43,4 +44,16 @@ public interface IMesConfigService {
@ApiOperation(value = "数据校验")
Boolean checkCfgValue(String organizeCode, String configCode, String value);
@ApiOperation(value = "获取系统参数")
MesConfig getMesConfigNoError(String organizeCode, String cfgKey);
@ApiOperation(value = "根据cfgCode查询")
MesConfig getMesConfigByCfgCode(String cfgCode, String organizeCode);
@ApiOperation(value = "根据cfgCode获取配置MAP")
Map<String, String> getConfigMapByCfgCode(String cfgCode, String organizeCode);
@ApiOperation(value = "根据cfgCode查询")
List<MesConfig> findMesConfigByCfgCode(String cfgCode, String organizeCode);
}

@ -0,0 +1,57 @@
package cn.estsh.i3plus.ext.mes.apiservice.controller.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.api.base.IMesLabelTemplateService;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Api("获取系统配置的模版信息")
@RestController
@RequestMapping(MesCommonConstant.MES_YANFEN)
public class MesLabelTemplateExtController {
@Autowired
private IMesConfigService configService;
@Autowired
private IMesLabelTemplateService labelTemplateService;
@GetMapping("/label-template/by-module-or-template/get")
@ApiOperation(value = "获取系统配置的模版信息")
public ResultBean queryMesLabelTemplate(String organizeCode, String moduleCode, String templateCode) {
try {
ValidatorBean.checkNotNull(organizeCode, "工厂代码不能为空");
if (StringUtils.isEmpty(moduleCode) && StringUtils.isEmpty(templateCode)) {
ValidatorBean.checkNotNull(moduleCode, "模版配置代码不能为空");
}
if (!StringUtils.isEmpty(moduleCode)) {
Map<String, String> configMap = configService.getConfigMapByCfgCode(moduleCode, organizeCode);
String templateCustomHtml = configMap.get(MesExtConstWords.TEMPLATE_CUSTOM_HTML);
if (!StringUtils.isEmpty(templateCustomHtml)) return ResultBean.success("查询成功").setResultObject(templateCustomHtml);
String templateCfg = configMap.get(moduleCode);
if (!StringUtils.isEmpty(templateCfg)) templateCode = templateCfg;
}
ValidatorBean.checkNotNull(templateCode, "模版代码不能为空");
return ResultBean.success("查询成功").setResultObject(labelTemplateService.getLabelTemplate(templateCode, organizeCode));
} catch (ImppBusiException imppException) {
return ResultBean.fail(imppException);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
@ -16,9 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -114,4 +113,43 @@ public class MesConfigService implements IMesConfigService {
return !Objects.isNull(config) && !StringUtil.isEmpty(config.getCfgValue()) && !StringUtil.isEmpty(value) && config.getCfgValue().equals(value);
}
@Override
public MesConfig getMesConfigNoError(String organizeCode, String cfgKey) {
return configRepository.getByProperty(
new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"},
new Object[]{cfgKey, organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()});
}
@Override
public MesConfig getMesConfigByCfgCode(String cfgCode, String organizeCode) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(cfgCode, "cfgCode", packBean);
return configRepository.getByProperty(packBean);
}
@Override
public Map<String, String> getConfigMapByCfgCode(String cfgCode, String organizeCode) {
Map<String, String> configMap = null;
List<MesConfig> configList = findMesConfigByCfgCode(cfgCode, organizeCode);
if (!CollectionUtils.isEmpty(configList)) {
for (MesConfig config : configList) {
if (null == cfgCode || StringUtils.isEmpty(config.getCfgValue())) {
continue;
}
if (CollectionUtils.isEmpty(configMap)) {
configMap = new HashMap<>();
}
configMap.put(config.getCfgKey(), config.getCfgValue());
}
}
return configMap;
}
@Override
public List<MesConfig> findMesConfigByCfgCode(String cfgCode, String organizeCode) {
return configRepository.findByProperty(
new String[]{MesPcnConstWords.ORGANIZE_CODE, MesPcnConstWords.IS_DELETED, MesPcnConstWords.IS_VALID, "cfgCode"},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode});
}
}

@ -2,30 +2,28 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base;
import cn.estsh.i3plus.ext.mes.api.base.*;
import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException;
import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
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.SpringContextsUtil;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -36,7 +34,6 @@ import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Service
@Slf4j
@ -87,6 +84,9 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
@Autowired
private MesShippingOrderManagementRepository mesShippingOrderManagementRepository;
@Autowired
private IMesLabelTemplateService labelTemplateService;
protected void setPackQueryBean(MesShippingOrderManagement bean, DdlPackBean packBean) {
DdlPreparedPack.getStringLikerPack(bean.getShippingCode(), "shippingCode", packBean);
DdlPreparedPack.getStringEqualPack(bean.getOrderCode(), "orderCode", packBean);
@ -428,139 +428,29 @@ public class MesShippingOrderManagementService extends BaseMesService<MesShippin
@Override
public ResultBean doShippingReprint(List<MesShippingOrderManagement> shippingOrderManagementList,
String organizeCode, String userName) {
MesConfig config = configService.getMesConfigByCfgCode(MesExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE, organizeCode);
if (null == config || StringUtils.isEmpty(config.getCfgValue())) MesException.throwBusiException("未配置排序发运全局打印配置[%s]", MesExtConstWords.SORT_SHIPPING_PRINT_TEMPLATE);
MesLabelTemplate labelTemplate = labelTemplateService.getLabelTemplate(config.getCfgValue(), organizeCode);
if (StringUtils.isEmpty(labelTemplate.getMethodCode())) MesException.throwBusiException("排序发运打印模版[%s]未配置策略方法", config.getCfgValue());
List<Long> idList = shippingOrderManagementList.stream().filter(o -> null != o).map(MesShippingOrderManagement::getId).collect(Collectors.toList());
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);
}
if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesExtConstWords.ID, packBean);
else DdlPreparedPack.getInPackList(idList, MesExtConstWords.ID, packBean);
List<MesShippingOrderManagement> baseBeanList = mesShippingOrderManagementRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(baseBeanList)) MesException.throwBusiException("选择的打印数据ID:%s对应的发运单信息不存在!", idList.toString());
log.info("工厂{}排序发运补打印 --- 获取到打印数据:{}条 --- idList:{} --- {}", organizeCode, baseBeanList.size(), idList.toString(), Thread.currentThread().getName());
IPrintTemplateStrategyService printStrategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode());
ResultBean resultBean = printStrategyService.execute(organizeCode, userName, baseBeanList);
log.info("工厂{}排序发运打印 --- 封装打印数据完成 --- {}", organizeCode, Thread.currentThread().getName());
return resultBean;
}
private MesShippingOrderManagement getMesShippingOrderManagement(String organizeCode,long id) {

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule;
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.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;
@ -26,7 +27,12 @@ public interface IPrintTemplateStrategyService {
* @param mesProduceSnPrintModel
* @return
*/
MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule);
default MesProduceSnPrintModel execute(GenSerialNoModel model, MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule) {return mesProduceSnPrintModel; }
@ApiOperation(value = "发运单")
default ResultBean execute(String organizeCode, String userName, List<MesShippingOrderManagement> shippingOrderManagementList) {
return null;
}
@ApiOperation(value = "装车单")
default ResultBean execute(List<MesLoadingList> loadingLists, boolean reprint) {

@ -0,0 +1,19 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import java.util.List;
/**
* @Description :
**/
public interface ISortShippingDispatchStrategyService {
default List<MesShippingOrderManagementDetail> getShippingOrderManagementDetailList(String organizeCode, List<Long> idList, Object[] obj, String[] str) {
return null;
}
default void saveShippingOrderManagementList(List<MesShippingOrderManagement> pullingOrderInfos) {}
}

@ -0,0 +1,160 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
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.MesShippingOrderManagementDetailModelForLiJia;
import cn.estsh.i3plus.pojo.mes.model.MesShippingOrderManagementModelForLiJia;
import cn.estsh.i3plus.pojo.mes.repository.MesCimCheryOrderRepository;
import cn.estsh.impp.framework.boot.util.ResultBean;
import com.alibaba.fastjson.JSONObject;
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.stream.Collectors;
import java.util.stream.IntStream;
/**
* @Description :
**/
@Service
@Slf4j
public class CqLjSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService {
@Autowired
private IMesConfigService configService;
@Autowired
private MesCimCheryOrderRepository cimCheryOrderRepository;
@Override
public List<MesShippingOrderManagementDetail> getShippingOrderManagementDetailList(String organizeCode, List<Long> idList, Object[] obj, String[] str) {
return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str);
}
@Override
public void saveShippingOrderManagementList(List<MesShippingOrderManagement> shippingOrderManagementList) {
super.saveShippingOrderManagementList(shippingOrderManagementList);
}
@Override
public ResultBean execute(String organizeCode, String userName, List<MesShippingOrderManagement> shippingOrderManagementList) {
//维护了该参数,则执行礼嘉的新逻辑
List<MesShippingOrderManagementModelForLiJia> mainDataList = new ArrayList<>();
List<Long> pidList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getId).collect(Collectors.toList());
List<MesShippingOrderManagementDetail> shippingOrderManagementDetailList = getShippingOrderManagementDetailList(organizeCode, pidList, null, null);
log.info("工厂{}排序发运打印 --- 查询发运单明细信息:{}条 --- {}", organizeCode,
CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? MesExtConstWords.ZERO : shippingOrderManagementDetailList.size(), Thread.currentThread().getName());
Map<Long, List<MesShippingOrderManagementDetail>> detailByPidMap = CollectionUtils.isEmpty(shippingOrderManagementDetailList) ? null :
shippingOrderManagementDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPid));
//遍历处理每个发运单主表
for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) {
//一张实体发运单包含三部分信息(顶部的通用数据、中部的第一份表格数据,底部的第二份表格数据)
//取出当前发运单的明细信息
List<MesShippingOrderManagementDetail> details = null == detailByPidMap ? null : detailByPidMap.get(shippingOrderManagement.getId());
if (!CollectionUtils.isEmpty(details)) {
//将发运单明细按照 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) {
//生成一张实体发运单
log.info("工厂{}排序发运打印 --- 生成一张实体发运单:{} --- {}", organizeCode, list.toString(), Thread.currentThread().getName());
mainDataList.add(createPhysicalOrder(shippingOrderManagement, list, detailByAssyCodeMap, details));
}
}
shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount())? 1 : shippingOrderManagement.getPrintCount()+1);
shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true));
shippingOrderManagement.setLastPrintUser(userName);
ConvertBean.serviceModelUpdate(shippingOrderManagement, userName);
}
saveShippingOrderManagementList(shippingOrderManagementList);
return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(mainDataList);
}
private MesShippingOrderManagementModelForLiJia createPhysicalOrder(MesShippingOrderManagement shippingOrderManagement,
List<String> assyCodeList,
Map<String, List<MesShippingOrderManagementDetail>> detailByAssyCodeMap,
List<MesShippingOrderManagementDetail> details) {
MesShippingOrderManagementModelForLiJia model = new MesShippingOrderManagementModelForLiJia();
//顶部的通用数据赋值
model.setShippingGroupName(shippingOrderManagement.getShippingGroupName());
model.setPrintDateTime(TimeTool.getNowTime(true));
model.setShippingCode(shippingOrderManagement.getShippingCode());
model.setDocumentNumber("YFVCQ-MS06-02-01");
//中部表结构赋值
model.setDetailModelsOne(createDetailList(assyCodeList.get(0), detailByAssyCodeMap, details, shippingOrderManagement.getRackNo()));
//底部表结构赋值
model.setDetailModelsTwo(createDetailList(assyCodeList.get(1), detailByAssyCodeMap, details, shippingOrderManagement.getRackNo()));
log.info("工厂{}排序发运打印 --- MesShippingOrderManagementModelForLiJia:{} --- {}", shippingOrderManagement.getOrganizeCode(), JSONObject.toJSONString(model), Thread.currentThread().getName());
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;
}
}

@ -0,0 +1,153 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pojo.model.MesSortShippingPrintForCqLxModel;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.util.StringUtil;
import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresSrmRunSheetJis;
import cn.estsh.i3plus.pojo.mes.bean.seres.MesCimSeresSrmRunSheetJisDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.seres.IMesCimSeresSrmRunSheetJisRepository;
import cn.estsh.impp.framework.boot.util.ResultBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
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.stream.Collectors;
/**
* @Description :
**/
@Service
@Slf4j
public class CqLxSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService {
@Autowired
private IMesCimSeresSrmRunSheetJisRepository cimSeresSrmRunSheetJisRepository;
@Autowired
private IMesCimSeresSrmRunSheetJisDetailRepository cimSeresSrmRunSheetJisDetailRepository;
@Override
public List<MesShippingOrderManagementDetail> getShippingOrderManagementDetailList(String organizeCode, List<Long> idList, Object[] obj, String[] str) {
return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str);
}
@Override
public void saveShippingOrderManagementList(List<MesShippingOrderManagement> shippingOrderManagementList) {
super.saveShippingOrderManagementList(shippingOrderManagementList);
}
@Override
public ResultBean execute(String organizeCode, String userName, List<MesShippingOrderManagement> shippingOrderManagementList) {
List<MesSortShippingPrintForCqLxModel> resultList = new ArrayList<>();
List<String> shippingCodeList = shippingOrderManagementList.stream().map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList());
List<MesCimSeresSrmRunSheetJis> cimSeresSrmRunSheetJisList = getCimSeresSrmRunSheetJisList(organizeCode, shippingCodeList);
Map<String, List<MesCimSeresSrmRunSheetJis>> jisByScMap = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? null :
cimSeresSrmRunSheetJisList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDocNo()))).collect(Collectors.groupingBy(MesCimSeresSrmRunSheetJis::getDocNo));
log.info("工厂{}排序发运打印 --- 查询JIS单信息:{}条 --- {}", organizeCode,
CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? MesExtConstWords.ZERO : cimSeresSrmRunSheetJisList.size(), Thread.currentThread().getName());
List<Long> jisIdList = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisList) ? null :
cimSeresSrmRunSheetJisList.stream().map(MesCimSeresSrmRunSheetJis::getId).collect(Collectors.toList());
List<MesCimSeresSrmRunSheetJisDetail> cimSeresSrmRunSheetJisDetailList = getCimSeresSrmRunSheetJisDetailList(organizeCode, jisIdList);
Map<Long, List<MesCimSeresSrmRunSheetJisDetail>> jisDetailByPidMap = CollectionUtils.isEmpty(cimSeresSrmRunSheetJisDetailList) ? null :
cimSeresSrmRunSheetJisDetailList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPid()))).collect(Collectors.groupingBy(MesCimSeresSrmRunSheetJisDetail::getPid));
log.info("工厂{}排序发运打印 --- 查询JIS单详情信息:{}条 --- {}", organizeCode,
CollectionUtils.isEmpty(cimSeresSrmRunSheetJisDetailList) ? MesExtConstWords.ZERO : cimSeresSrmRunSheetJisDetailList.size(), Thread.currentThread().getName());
//遍历处理每个发运单主表
for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) {
if (null == shippingOrderManagement) continue;
List<MesCimSeresSrmRunSheetJis> sheetJis = CollectionUtils.isEmpty(jisByScMap) ? null : jisByScMap.get(shippingOrderManagement.getShippingCode());
if (CollectionUtils.isEmpty(sheetJis)) continue;
MesSortShippingPrintForCqLxModel result = new MesSortShippingPrintForCqLxModel();
BeanUtils.copyProperties(sheetJis.get(0), result);
result.setRePrintDatetime(TimeTool.getNowTime(MesExtConstWords.DATETIME_FORMAT_SINGLE_SLASH));
result.setRePrintUser(userName);
result.setIsRePrint("重打印");
result.setShippingCode(shippingOrderManagement.getShippingCode());
if (shippingOrderManagement.getShippingCode().length() >= 4) {
result.setCarsNo(shippingOrderManagement.getShippingCode().substring(shippingOrderManagement.getShippingCode().length() - 4));
result.setDocNoOther(shippingOrderManagement.getShippingCode().substring(0, shippingOrderManagement.getShippingCode().length() - 4));
}
List<MesCimSeresSrmRunSheetJisDetail> sheetJisDetailList = CollectionUtils.isEmpty(jisDetailByPidMap) ? new ArrayList<>() : jisDetailByPidMap.get(sheetJis.get(0).getId());
if (!CollectionUtils.isEmpty(sheetJisDetailList)) sheetJisDetailList = sheetJisDetailList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCimSeresSrmRunSheetJisDetail::getMaterielCode)).collect(Collectors.toList());
Integer index = MesExtConstWords.ONE;
for (MesCimSeresSrmRunSheetJisDetail cimSeresSrmRunSheetJisDetail : sheetJisDetailList) {
if (null == cimSeresSrmRunSheetJisDetail) continue;
MesSortShippingPrintForCqLxModel jisDetail = new MesSortShippingPrintForCqLxModel();
BeanUtils.copyProperties(cimSeresSrmRunSheetJisDetail, jisDetail);
//跟cc确认过可以直接写死
jisDetail.setFactoryCode("000003263");
jisDetail.setXh(index);
index ++;
result.addJisDetail(jisDetail);
}
Map<String, List<MesSortShippingPrintForCqLxModel>> sheetJisDetailMap = CollectionUtils.isEmpty(result.getJisDetailList()) ? new HashMap<>() :
result.getJisDetailList().stream().filter(o -> null != o).collect(Collectors.groupingBy(MesSortShippingPrintForCqLxModel::getMaterielCode));
for (Map.Entry<String, List<MesSortShippingPrintForCqLxModel>> entry : sheetJisDetailMap.entrySet()) {
if (null == entry) continue;
List<MesSortShippingPrintForCqLxModel> amountList = entry.getValue();
if (CollectionUtils.isEmpty(amountList)) continue;
MesSortShippingPrintForCqLxModel amount = new MesSortShippingPrintForCqLxModel();
amount.setPartNo(amountList.get(0).getMaterielCode());
amount.setAmountQty(amountList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getUseQty()))).mapToDouble(MesSortShippingPrintForCqLxModel::getUseQty).sum());
StringJoiner appendRows = new StringJoiner(MesExtConstWords.COMMA);
amountList.forEach(o -> appendRows.add(o.getXh().toString()));
amount.setAppendRows(appendRows.toString());
amount.setMaterielNames(amountList.get(0).getMaterielNames());
result.addAmount(amount);
}
resultList.add(result);
shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount()) ? MesExtConstWords.ONE : shippingOrderManagement.getPrintCount() + MesExtConstWords.ONE);
shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true));
shippingOrderManagement.setLastPrintUser(userName);
ConvertBean.serviceModelUpdate(shippingOrderManagement, userName);
}
saveShippingOrderManagementList(shippingOrderManagementList);
return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(resultList);
}
private List<MesCimSeresSrmRunSheetJis> getCimSeresSrmRunSheetJisList(String organizeCode, List<String> shippingCodeList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(shippingCodeList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (shippingCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(shippingCodeList.get(0), "docNo", packBean);
else DdlPreparedPack.getInPackList(shippingCodeList, "docNo", packBean);
return cimSeresSrmRunSheetJisRepository.findByHqlWhere(packBean);
}
private List<MesCimSeresSrmRunSheetJisDetail> getCimSeresSrmRunSheetJisDetailList(String organizeCode, List<Long> jisIdList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(jisIdList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (jisIdList.size() == 1) DdlPreparedPack.getNumEqualPack(jisIdList.get(0), MesExtConstWords.PID, packBean);
else DdlPreparedPack.getInPackList(jisIdList, MesExtConstWords.PID, packBean);
return cimSeresSrmRunSheetJisDetailRepository.findByHqlWhere(packBean);
}
}

@ -0,0 +1,48 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.ISortShippingDispatchStrategyService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository;
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.List;
/**
* @Description :
**/
@Service
@Slf4j
public abstract class SortShippingDispatchStrategyService implements ISortShippingDispatchStrategyService {
@Autowired
public MesShippingOrderManagementRepository shippingOrderManagementRepository;
@Autowired
public MesShippingOrderManagementDetailRepository shippingOrderManagementDetailRepository;
@Override
public List<MesShippingOrderManagementDetail> getShippingOrderManagementDetailList(String organizeCode, List<Long> idList, Object[] obj, String[] str) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(idList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesExtConstWords.PID, packBean);
else DdlPreparedPack.getInPackList(idList, MesExtConstWords.PID, packBean);
if (null != obj && null != str) DdlPreparedPack.getOrderByPack(obj, str, packBean);
return shippingOrderManagementDetailRepository.findByHqlWhere(packBean);
}
@Override
public void saveShippingOrderManagementList(List<MesShippingOrderManagement> shippingOrderManagementList) {
if (CollectionUtils.isEmpty(shippingOrderManagementList)) return;
shippingOrderManagementRepository.saveAll(shippingOrderManagementList);
}
}

@ -0,0 +1,137 @@
package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.sortshipping.strategy;
import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService;
import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
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.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.MesShippingOrderManagementModel;
import cn.estsh.i3plus.pojo.mes.repository.MesCimCheryOrderRepository;
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.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description :
**/
@Service
@Slf4j
public class WuhuSortShippingPrintStrategyService extends SortShippingDispatchStrategyService implements IPrintTemplateStrategyService {
@Autowired
private IMesConfigService configService;
@Autowired
private MesCimCheryOrderRepository cimCheryOrderRepository;
@Override
public List<MesShippingOrderManagementDetail> getShippingOrderManagementDetailList(String organizeCode, List<Long> idList, Object[] obj, String[] str) {
return super.getShippingOrderManagementDetailList(organizeCode, idList, obj, str);
}
@Override
public void saveShippingOrderManagementList(List<MesShippingOrderManagement> shippingOrderManagementList) {
super.saveShippingOrderManagementList(shippingOrderManagementList);
}
@Override
public ResultBean execute(String organizeCode, String userName, List<MesShippingOrderManagement> shippingOrderManagementList) {
MesConfig config = configService.getMesConfigNoError(organizeCode, "WU_HU_SUPPLIER");
String supplierNo = (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesExtConstWords.EMPTY : config.getCfgValue();
List<MesShippingOrderManagementModel> modelList = new ArrayList<>();
//把查出来的发运单打印并修改打印状态为已打印-
for (MesShippingOrderManagement shippingOrderManagement : shippingOrderManagementList) {
MesShippingOrderManagementModel model = new MesShippingOrderManagementModel();
String shippingCodePrefix = shippingOrderManagement.getShippingCode().substring(0, shippingOrderManagement.getShippingCode().length() - 3);
String shippingCodeSuffix = shippingOrderManagement.getShippingCode().substring(shippingOrderManagement.getShippingCode().length() - 3);
model.setShippingCode(shippingCodePrefix);
model.setShippingCodeAfter3(shippingCodeSuffix);
model.setShippingCodeWhole(shippingOrderManagement.getShippingCode());
//查询原始报文
List<MesCimCheryOrder> cheryOrderList = getCheryOrder(shippingOrderManagement.getOrganizeCode(), shippingOrderManagement.getShippingCode());
Map<String, List<MesCimCheryOrder>> cheryOrderMap = new HashMap<>();
if (cheryOrderList != null && !cheryOrderList.isEmpty()) {
MesCimCheryOrder cheryOrder = cheryOrderList.get(0);
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));
}
//查询发运单明细
List<MesShippingOrderManagementDetail> shipOrderPartInfos = getShippingOrderManagementDetailList(
organizeCode, Stream.of(shippingOrderManagement.getId()).collect(Collectors.toList()),
new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"boxNum"});
if (!CollectionUtils.isEmpty(shipOrderPartInfos)) {
List<MesShippingOrderManagementDetailModel> detailList = new ArrayList<>();
shipOrderPartInfos = shipOrderPartInfos.stream().sorted(Comparator.comparing(MesShippingOrderManagementDetail::getCustInfoSeq)).collect(Collectors.toList());
for (MesShippingOrderManagementDetail shipOrderPartInfo : shipOrderPartInfos) {
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());
}
detailList.add(detailModel);
}
model.setShipOrderPartInfos(detailList);
}
//查询原有报文 根据shippingCode;
shippingOrderManagement.setPrintCount(StringUtil.isEmpty(shippingOrderManagement.getPrintCount())?1:shippingOrderManagement.getPrintCount()+1);
shippingOrderManagement.setLastPrintTime(TimeTool.getNowTime(true));
shippingOrderManagement.setLastPrintUser(userName);
ConvertBean.serviceModelUpdate(shippingOrderManagement, userName);
modelList.add(model);
}
saveShippingOrderManagementList(shippingOrderManagementList);
return ResultBean.success("发运单打印成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(modelList);
}
private List<MesCimCheryOrder> getCheryOrder(String organizeCode, String sheetNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(sheetNo)) return null;
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(sheetNo, "sheetNo", ddlPackBean);
return cimCheryOrderRepository.findByHqlWhere(ddlPackBean);
}
private String getWorkshopName(String organizeCode, String workshopNo) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workshopNo)) return null;
MesConfig config = configService.getMesConfigNoError(organizeCode, workshopNo);
return (null == config || StringUtils.isEmpty(config.getCfgValue())) ? MesExtConstWords.EMPTY : config.getCfgValue();
}
}

@ -0,0 +1,125 @@
package cn.estsh.i3plus.ext.mes.pojo.model;
import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @Description : MODEL
**/
@Data
public class MesSortShippingPrintForCqLxModel implements Serializable {
private static final long serialVersionUID = 8268700875815941870L;
@ApiParam("是否重打印")
private String isRePrint = MesExtConstWords.EMPTY;
@ApiParam("重打印操作人")
private String rePrintUser = MesExtConstWords.EMPTY;
@ApiParam("重打印时间")
private String rePrintDatetime = MesExtConstWords.EMPTY;
@ApiParam("发运单号")
private String shippingCode;
@ApiParam("流水线")
private String flowLine;
@ApiParam("二维码")
private String docNo;
@ApiParam("拉动单号后四位")
private String carsNo;
@ApiParam("拉动单号除后四位")
private String docNoOther;
@ApiParam("零件类")
private String partClassCode;
@ApiParam("零件类名称")
private String partClassName;
@ApiParam("供应商代码")
private String jisProviderCode;
@ApiParam("线边库位")
private String lineLocation;
@ApiParam("DOCK")
private String dock;
@ApiParam("开始车号")
private String beginNumber;
@ApiParam("结束车号")
private String endNumber;
@ApiParam("单据生成时间")
private String jisCreationtime;
@ApiParam("挑选完成时间")
private String pickingOverTime;
@ApiParam("预计出发时间")
private String goOutTime;
@ApiParam("预计到达时间")
private String goToTime;
@ApiParam("第一个表格")
private List<MesSortShippingPrintForCqLxModel> jisDetailList;
@ApiParam("序号")
private Integer xh;
@ApiParam("物料编码")
private String materielCode;
@ApiParam("车型颜色")
private String modelColor;
@ApiParam("用量")
private Double useQty;
@ApiParam("流水号")
private String serialNumber;
@ApiParam("VIN码")
private String vin;
@ApiParam("厂家代码")
private String factoryCode;
@ApiParam("第二个表格")
private List<MesSortShippingPrintForCqLxModel> amountList;
@ApiParam("零件号")
private String partNo;
@ApiParam("数量")
private Double amountQty;
@ApiParam("单元格")
private String appendRows;
@ApiParam("物料名称")
private String materielNames;
public void addJisDetail(MesSortShippingPrintForCqLxModel jisDetail) {
if (CollectionUtils.isEmpty(jisDetailList)) jisDetailList = new ArrayList<>();
jisDetailList.add(jisDetail);
}
public void addAmount(MesSortShippingPrintForCqLxModel amount) {
if (CollectionUtils.isEmpty(amountList)) amountList = new ArrayList<>();
amountList.add(amount);
}
}

@ -250,6 +250,12 @@ public class MesExtConstWords {
public static final String PUSH_TYPE = "pushType";
//零件类型名称
public static final String PART_TYPE_NAME = "partTypeName";
//发运组代码
public static final String SHIPPING_GROUP_CODE = "shippingGroupCode";
//发运单代码
public static final String SHIPPING_CODE = "shippingCode";
//最后打印时间
public static final String LAST_PRINT_TIME = "lastPrintTime";
//时间[开始/结束]条件
public static final String START_TIME_START = "startTimeStart";
@ -468,6 +474,13 @@ public class MesExtConstWords {
// 默认客户条码编码规则配置代码
public static final String DEFAULT_CUST_MATCH_RULE = "DEFAULT_CUST_MATCH_RULE";
//SPS拉动单打印模版全局配置
public static final String PART_PULL_PRINT_TEMPLATE = "PART_PULL_PRINT_TEMPLATE";
//排序发运全局打印配置
public static final String SORT_SHIPPING_PRINT_TEMPLATE = "SORT_SHIPPING_PRINT_TEMPLATE";
//由前端直接渲染模版的标志
public static final String TEMPLATE_CUSTOM_HTML = "TEMPLATE_CUSTOM_HTML";
//装车单全局打印配置
public static final String LOADING_LIST_PRINT_TEMPLATE = "LOADING_LIST_PRINT_TEMPLATE";

@ -34,7 +34,7 @@
<i3plus.pojo.version>1.0.0-yfai</i3plus.pojo.version>
<i3plus.platform.version>1.0.0.1-patch</i3plus.platform.version>
<i3plus.icloud.version>1.0.0.1-patch</i3plus.icloud.version>
<i3plus.mes.version>1.0.2-yfai</i3plus.mes.version>
<i3plus.mes.version>1.0.3-yfai</i3plus.mes.version>
<log4j2.version>2.17.1</log4j2.version>
</properties>

Loading…
Cancel
Save