diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/AdvanceOrderListener.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/AdvanceOrderListener.java index 69ee9bd74..a7887e028 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/AdvanceOrderListener.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/mq/AdvanceOrderListener.java @@ -16,6 +16,7 @@ import com.logpm.distribution.feign.IDistributionStockArticleClient; import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; import com.logpm.trunkline.entity.TrunklineAdvanceEntity; import com.logpm.trunkline.entity.TrunklineDetailProductEntity; +import com.logpm.trunkline.service.IAdvanceOrderMqService; import com.logpm.trunkline.service.ITrunklineAdvanceDetailService; import com.logpm.trunkline.service.ITrunklineAdvanceService; import com.logpm.trunkline.service.ITrunklineCarsLoadService; @@ -54,6 +55,7 @@ import java.util.Set; @AllArgsConstructor public class AdvanceOrderListener { + private final IAdvanceOrderMqService advanceOrderMqService; private final ITrunklineAdvanceService advanceService; private final ITrunklineAdvanceDetailService advanceDetailService; private final ITrunklineDetailProductService detailProductService; @@ -70,7 +72,7 @@ public class AdvanceOrderListener { // 新增暂存单 log.info("收到工厂数据暂存单消息:{}", msg); try { - advanceService.advanceOrder(msg); + advanceOrderMqService.advanceOrder(msg); } catch (Exception e) { e.printStackTrace(); log.error("收到工厂数据暂存单消息失败: {}", e.getMessage()); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAdvanceOrderMqService.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAdvanceOrderMqService.java new file mode 100644 index 000000000..3b08c19a9 --- /dev/null +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/IAdvanceOrderMqService.java @@ -0,0 +1,6 @@ +package com.logpm.trunkline.service; + +public interface IAdvanceOrderMqService { + + void advanceOrder(String msg); +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineAdvanceService.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineAdvanceService.java index 5075071d3..fd53be90a 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineAdvanceService.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineAdvanceService.java @@ -54,5 +54,4 @@ public interface ITrunklineAdvanceService extends BaseService eq = Wrappers.lambdaQuery() + .eq(TrunklineAdvanceEntity::getOrderCode, advanceEntity.getOrderCode()); + if (StrUtil.isNotEmpty(advanceEntity.getTrainNumber())) { + eq.eq(TrunklineAdvanceEntity::getTrainNumber, advanceEntity.getTrainNumber()); + } + // 暂存单 订单自编号 + 车次号 唯一 + List advanceEntities = advanceService.list(eq); + + // 暂存单存在 并且未开单 则将新数据添加到原来的暂存单上 + // 如果已开单则新增暂存单 + if (CollUtil.isNotEmpty(advanceEntities) && ObjectUtil.equal(advanceEntity.getWaybillStatus(), "0")) { + TrunklineAdvanceEntity entity = advanceEntities.get(0); + if (ObjectUtil.isNotEmpty(entity)) { + advanceEntity.setId(entity.getId()); +// advanceEntity.setTotalNum(entity.getTotalNum() + advanceEntity.getTotalNum()); + } + } + Set packageCodeSet = new HashSet<>(); + if (CollUtil.isNotEmpty(details)) { + // 使用HashSet代替ArrayList以优化内存使用和检查重复值 + Set orderPackageCodes = new HashSet<>(); + details.forEach(detail -> { + try { + // 更具描述性的变量命名 + JSONObject jsonObject = JSONUtil.parseObj(detail); + TrunklineAdvanceDetailEntity entity = JSONUtil.toBean(jsonObject, TrunklineAdvanceDetailEntity.class); + // 检查转换后的实体不为null,且其orderPackageCode非null + if (!ObjectUtil.isAllEmpty(entity, entity.getOrderPackageCode())) { + orderPackageCodes.add(entity.getOrderPackageCode()); + } + } catch (Exception e) { + // 异常处理,可根据实际情况记录日志或进行其他处理 + log.error("暂存单转换时发生异常: " + detail + ",异常:" + e.getMessage()); + } + }); + // 查询数据库,校验订单包件编码是否重复 + if (CollUtil.isNotEmpty(orderPackageCodes)) { + Map packageCodeByCodes = advanceDetailService.findPackageCodeByCodes(orderPackageCodes); + if (CollUtil.isNotEmpty(packageCodeByCodes)) { + packageCodeSet.addAll(packageCodeByCodes.keySet()); + } + } + } + if (ObjectUtil.isNotNull(advanceEntity)) { + String orderCode = advanceEntity.getOrderCode(); + if (StrUtil.isNotEmpty(orderCode) && orderCode.contains("遗")) { + advanceEntity.setLegacyStatus("1"); + } + // 暂存单不存在则新增,暂存单存在则将暂存单明细往原暂存单中添加 + if (ObjectUtil.isEmpty(advanceEntity.getId())) { + advanceEntity.setCreateUserName(AuthUtil.getNickName()); + advanceService.save(advanceEntity); + } else { + advanceService.updateById(advanceEntity); + } + } + if (ObjectUtil.isNotEmpty(advanceEntity) && CollUtil.isNotEmpty(details)) { + List advanceDetailEntityList = new ArrayList<>(); + List detailProductEntityList = new ArrayList<>(); + for (Object detailObj : details) { + JSONObject detail = JSONUtil.parseObj(detailObj); + TrunklineAdvanceDetailEntity advanceDetailEntity = JSONUtil.toBean(detail, TrunklineAdvanceDetailEntity.class); + if (ObjectUtil.isNotNull(advanceDetailEntity)) { + if (CollUtil.isNotEmpty(packageCodeSet) && packageCodeSet.contains(advanceDetailEntity.getOrderPackageCode())) { + // 金牌如果是重复包条,则单独处理 + if (ObjectUtil.equal(advanceEntity.getBrand(), BrandEnums.JP.getValue())) { + // 金牌按DD单号+包条确定唯一值 + List list = advanceDetailService.list(Wrappers.lambdaQuery() + .eq(TrunklineAdvanceDetailEntity::getOrderPackageCode, advanceDetailEntity.getOrderPackageCode()) + .eq(TrunklineAdvanceDetailEntity::getOrderCode, advanceEntity.getOrderCode()) + ); + if (CollUtil.isNotEmpty(list)) { + // 订单+包件重复则不处理这条数据 + log.error("金牌,订单+包条码重复,订单:{},包条码:{}", advanceEntity.getOrderCode(), advanceDetailEntity.getOrderPackageCode()); + continue; + } else { + // 包件码重复,订单+包件不重复,设置预留字段1 为 1 + advanceDetailEntity.setReserve1("1"); + } + } else { + log.error("非金牌,包条码重复,包条码:{}", advanceDetailEntity.getOrderPackageCode()); + continue; + } + } + advanceDetailEntity.setAdvanceId(advanceEntity.getId()); + // 设置发货时间为当前时间 + if (StrUtil.isEmpty(advanceDetailEntity.getSendDateStr())) { + advanceDetailEntity.setSendDateStr(DateUtil.today()); + } + advanceDetailEntityList.add(advanceDetailEntity); + JSONArray items = detail.getJSONArray("items"); + if (CollUtil.isNotEmpty(items)) { + for (Object itemObj : items) { + JSONObject item = JSONUtil.parseObj(itemObj); + TrunklineDetailProductEntity detailProductEntity = JSONUtil.toBean(item, TrunklineDetailProductEntity.class); + if (ObjectUtil.isNotNull(detailProductEntity)) { + detailProductEntityList.add(detailProductEntity); + } + } + } + } + + } + advanceDetailService.saveBatch(advanceDetailEntityList); + //发送入库包件处理无数据装车数据 + trunklineCarsLoadService.sendRabbitMessageLoadScanData(JSONUtil.toJsonStr(advanceEntity)); + detailProductService.saveBatch(detailProductEntityList); + + //发送报表数据广播 + Long warehouseId = advanceEntity.getWarehouseId(); + String warehouseName = advanceEntity.getWarehouseName(); + String dealerCode = advanceEntity.getDealerCode(); + String dealerName = advanceEntity.getDealerName(); + advanceDetailService.sendReportBasicdataFanout(AuthUtil.getNickName(),AuthUtil.getUserId(),warehouseId,warehouseName,new Date(),advanceDetailEntityList,dealerCode,dealerName); + + } + } + } + +} diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java index 15a48aae0..bc94ee765 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineAdvanceServiceImpl.java @@ -2,12 +2,8 @@ package com.logpm.trunkline.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -17,19 +13,21 @@ import com.logpm.basicdata.entity.BasicdataBrandEntity; import com.logpm.basicdata.entity.BasicdataClientEntity; import com.logpm.basicdata.entity.BasicdataStoreBusinessEntity; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; -import com.logpm.basicdata.feign.*; +import com.logpm.basicdata.feign.IBasicdataBrandClient; +import com.logpm.basicdata.feign.IBasicdataClientClient; +import com.logpm.basicdata.feign.IBasicdataStoreBusinessClient; +import com.logpm.basicdata.feign.IBasicdataTripartiteMallClient; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; import com.logpm.distribution.dto.FindParamterDTO; import com.logpm.distribution.entity.DistributionParcelListEntity; import com.logpm.distribution.entity.DistributionStockArticleEntity; import com.logpm.distribution.feign.IDistributionParcelListClient; import com.logpm.distribution.feign.IDistributionStockArticleClient; -import com.logpm.factorydata.enums.BrandEnums; import com.logpm.trunkline.dto.AdvanceDTO; import com.logpm.trunkline.dto.InComingDTO; import com.logpm.trunkline.dto.OrderStatusDTO; import com.logpm.trunkline.entity.TrunklineAdvanceDetailEntity; import com.logpm.trunkline.entity.TrunklineAdvanceEntity; -import com.logpm.trunkline.entity.TrunklineDetailProductEntity; import com.logpm.trunkline.mapper.TrunklineAdvanceMapper; import com.logpm.trunkline.service.ITrunklineAdvanceDetailService; import com.logpm.trunkline.service.ITrunklineAdvanceService; @@ -53,7 +51,14 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -73,9 +78,6 @@ public class TrunklineAdvanceServiceImpl extends BaseServiceImpl eq = Wrappers.lambdaQuery() - .eq(TrunklineAdvanceEntity::getOrderCode, advanceEntity.getOrderCode()); - if (StrUtil.isNotEmpty(advanceEntity.getTrainNumber())) { - eq.eq(TrunklineAdvanceEntity::getTrainNumber, advanceEntity.getTrainNumber()); - } - // 暂存单 订单自编号 + 车次号 唯一 - List advanceEntities = this.list(eq); - - // 暂存单存在 并且未开单 则将新数据添加到原来的暂存单上 - // 如果已开单则新增暂存单 - if (CollUtil.isNotEmpty(advanceEntities) && ObjectUtil.equal(advanceEntity.getWaybillStatus(), "0")) { - TrunklineAdvanceEntity entity = advanceEntities.get(0); - if (ObjectUtil.isNotEmpty(entity)) { - advanceEntity.setId(entity.getId()); -// advanceEntity.setTotalNum(entity.getTotalNum() + advanceEntity.getTotalNum()); - } - } - Set packageCodeSet = new HashSet<>(); - if (CollUtil.isNotEmpty(details)) { - // 使用HashSet代替ArrayList以优化内存使用和检查重复值 - Set orderPackageCodes = new HashSet<>(); - details.forEach(detail -> { - try { - // 更具描述性的变量命名 - JSONObject jsonObject = JSONUtil.parseObj(detail); - TrunklineAdvanceDetailEntity entity = JSONUtil.toBean(jsonObject, TrunklineAdvanceDetailEntity.class); - // 检查转换后的实体不为null,且其orderPackageCode非null - if (!ObjectUtil.isAllEmpty(entity, entity.getOrderPackageCode())) { - orderPackageCodes.add(entity.getOrderPackageCode()); - } - } catch (Exception e) { - // 异常处理,可根据实际情况记录日志或进行其他处理 - log.error("暂存单转换时发生异常: " + detail + ",异常:" + e.getMessage()); - } - }); - // 查询数据库,校验订单包件编码是否重复 - if (CollUtil.isNotEmpty(orderPackageCodes)) { - Map packageCodeByCodes = advanceDetailService.findPackageCodeByCodes(orderPackageCodes); - if (CollUtil.isNotEmpty(packageCodeByCodes)) { - packageCodeSet.addAll(packageCodeByCodes.keySet()); - } - } - } - if (ObjectUtil.isNotNull(advanceEntity)) { - String orderCode = advanceEntity.getOrderCode(); - if (StrUtil.isNotEmpty(orderCode) && orderCode.contains("遗")) { - advanceEntity.setLegacyStatus("1"); - } - // 暂存单不存在则新增,暂存单存在则将暂存单明细往原暂存单中添加 - if (ObjectUtil.isEmpty(advanceEntity.getId())) { - advanceEntity.setCreateUserName(AuthUtil.getNickName()); - this.save(advanceEntity); - } else { - this.updateById(advanceEntity); - } - } - if (ObjectUtil.isNotEmpty(advanceEntity) && CollUtil.isNotEmpty(details)) { - List advanceDetailEntityList = new ArrayList<>(); - List detailProductEntityList = new ArrayList<>(); - for (Object detailObj : details) { - JSONObject detail = JSONUtil.parseObj(detailObj); - TrunklineAdvanceDetailEntity advanceDetailEntity = JSONUtil.toBean(detail, TrunklineAdvanceDetailEntity.class); - if (ObjectUtil.isNotNull(advanceDetailEntity)) { - if (CollUtil.isNotEmpty(packageCodeSet) && packageCodeSet.contains(advanceDetailEntity.getOrderPackageCode())) { - // 金牌如果是重复包条,则单独处理 - if (ObjectUtil.equal(advanceEntity.getBrand(), BrandEnums.JP.getValue())) { - // 金牌按DD单号+包条确定唯一值 - List list = advanceDetailService.list(Wrappers.lambdaQuery() - .eq(TrunklineAdvanceDetailEntity::getOrderPackageCode, advanceDetailEntity.getOrderPackageCode()) - .eq(TrunklineAdvanceDetailEntity::getOrderCode, advanceEntity.getOrderCode()) - ); - if (CollUtil.isNotEmpty(list)) { - // 订单+包件重复则不处理这条数据 - log.error("金牌,订单+包条码重复,订单:{},包条码:{}", advanceEntity.getOrderCode(), advanceDetailEntity.getOrderPackageCode()); - continue; - } else { - // 包件码重复,订单+包件不重复,设置预留字段1 为 1 - advanceDetailEntity.setReserve1("1"); - } - } else { - log.error("非金牌,包条码重复,包条码:{}", advanceDetailEntity.getOrderPackageCode()); - continue; - } - } - advanceDetailEntity.setAdvanceId(advanceEntity.getId()); - // 设置发货时间为当前时间 - if (StrUtil.isEmpty(advanceDetailEntity.getSendDateStr())) { - advanceDetailEntity.setSendDateStr(DateUtil.today()); - } - advanceDetailEntityList.add(advanceDetailEntity); - JSONArray items = detail.getJSONArray("items"); - if (CollUtil.isNotEmpty(items)) { - for (Object itemObj : items) { - JSONObject item = JSONUtil.parseObj(itemObj); - TrunklineDetailProductEntity detailProductEntity = JSONUtil.toBean(item, TrunklineDetailProductEntity.class); - if (ObjectUtil.isNotNull(detailProductEntity)) { - detailProductEntityList.add(detailProductEntity); - } - } - } - } - - } - advanceDetailService.saveBatch(advanceDetailEntityList); - //发送入库包件处理无数据装车数据 - trunklineCarsLoadService.sendRabbitMessageLoadScanData(JSONUtil.toJsonStr(advanceEntity)); - detailProductService.saveBatch(detailProductEntityList); - - //发送报表数据广播 - Long warehouseId = advanceEntity.getWarehouseId(); - String warehouseName = advanceEntity.getWarehouseName(); - String dealerCode = advanceEntity.getDealerCode(); - String dealerName = advanceEntity.getDealerName(); - advanceDetailService.sendReportBasicdataFanout(AuthUtil.getNickName(),AuthUtil.getUserId(),warehouseId,warehouseName,new Date(),advanceDetailEntityList,dealerCode,dealerName); - - } - } - } }