From ca53d4c6863db82a8b660b6710fe5f1317b0b170 Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Sun, 15 Dec 2024 02:03:59 +0800 Subject: [PATCH 01/14] =?UTF-8?q?feat(all):=20=E6=9B=BC=E5=A5=BD=E5=AE=B6?= =?UTF-8?q?=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 修改曼好家工厂订单号+交割单号唯一 --- .../com/logpm/factorydata/mwh/mq/FactoryOrderListener.java | 3 ++- .../factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/mq/FactoryOrderListener.java b/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/mq/FactoryOrderListener.java index fb4bc181c..e1edf47b1 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/mq/FactoryOrderListener.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/mq/FactoryOrderListener.java @@ -90,9 +90,10 @@ public class FactoryOrderListener { return; } // 1 解析数据保存入库 - // 订单号唯一 + // 交割单 + 订单号唯一 String orderSelfNum = vo.getOrderSelfNum(); List list = deliveryNoteService.list(Wrappers.lambdaQuery() + .eq(DeliveryNoteEntity::getOrderNo, vo.getOrderNo()) .eq(DeliveryNoteEntity::getOrderSelfNum, orderSelfNum)); if (CollUtil.isNotEmpty(list)) { log.error("订单号{} 数据已经处理过了, logId: {}", orderSelfNum, logId); diff --git a/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java b/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java index f92ea6f3c..4e1d07d3d 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java @@ -98,7 +98,7 @@ public class DeliveryNoteServiceImpl extends BaseServiceImpl Date: Tue, 17 Dec 2024 10:05:16 +0800 Subject: [PATCH 02/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../entity/QualityDeliverEntity.java | 5 + .../dto/ReportQualityDeliverDTO.java | 2 + .../DistributionDeliveryListMapper.java | 32 +- .../mapper/QualityDeliverMapper.java | 10 + .../mapper/QualityDeliverMapper.xml | 41 ++ .../report/BillPlanReportListener.java | 45 +- .../report/BillReViewReportListener.java | 16 +- .../report/BillSignforReportListener.java | 8 +- .../report/CarStartReportListener.java | 85 ++-- .../report/ConsigneeArriveReportListener.java | 101 ++--- .../report/DeliverFinishReportListener.java | 33 +- .../report/LoadingReportListener.java | 104 +++-- .../receiver/report/PlanReportListener.java | 166 ++++--- .../report/QualityDeliverListener.java | 133 +++--- .../receiver/report/ReViewReportListener.java | 87 ++-- .../receiver/report/ReportListener.java | 419 ++++++++++++++++++ .../receiver/report/ReportService.java | 11 + .../report/ReservationPlanReportListener.java | 201 ++++++--- .../report/ReturnWarehouseReportListener.java | 24 +- .../report/SignforReportListener.java | 87 ++-- .../receiver/report/StockReportListener.java | 105 +++-- .../service/IQualityDeliverService.java | 8 + .../DistributionReservationServiceImpl.java | 2 + .../impl/QualityDeliverServiceImpl.java | 20 + 24 files changed, 1188 insertions(+), 557 deletions(-) create mode 100644 blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java create mode 100644 blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportService.java diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java index 399f8f970..c57ecb68d 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java @@ -579,6 +579,11 @@ public class QualityDeliverEntity extends TenantEntity { */ @ApiModelProperty(value = "复核人") private String reviewUserName; + /** + * 复核数量 + */ + @ApiModelProperty(value = "复核数量") + private Integer reviewNum; /** * 复核时间 复核时间=回库时间 */ diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/ReportQualityDeliverDTO.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/ReportQualityDeliverDTO.java index 07ac1afe5..0932208a7 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/ReportQualityDeliverDTO.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/ReportQualityDeliverDTO.java @@ -21,4 +21,6 @@ public class ReportQualityDeliverDTO implements Serializable { private BizOperationEnums operation; + private String node; + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionDeliveryListMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionDeliveryListMapper.java index 663aff2ef..2049f710d 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionDeliveryListMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionDeliveryListMapper.java @@ -19,17 +19,36 @@ package com.logpm.distribution.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.distribution.dto.DistributionDeliveryListDTO; import com.logpm.distribution.dto.DistributionLoadingNumDTO; import com.logpm.distribution.dto.app.DistributionAppDeliveryListDTO; -import com.logpm.distribution.entity.*; +import com.logpm.distribution.entity.DisStockListDetailEntity; +import com.logpm.distribution.entity.DistributionDeliveryListEntity; +import com.logpm.distribution.entity.DistributionLoadscanAbnormalEntity; +import com.logpm.distribution.entity.DistributionLoadscanEntity; +import com.logpm.distribution.entity.DistributionLoadscaninvnEntity; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.distribution.entity.DistributionReservationEntity; +import com.logpm.distribution.entity.DistributionReservationStockarticleEntity; +import com.logpm.distribution.entity.DistributionSignforEntity; +import com.logpm.distribution.entity.DistributionStockArticleEntity; import com.logpm.distribution.excel.DistributionDeliveryListExcel; -import com.logpm.distribution.vo.*; -import com.logpm.distribution.vo.app.*; +import com.logpm.distribution.vo.DisStockListDetailVO; +import com.logpm.distribution.vo.DistributionDeliveryListPrintReponseVO; +import com.logpm.distribution.vo.DistributionDeliveryListPrintRequestVO; +import com.logpm.distribution.vo.DistributionDeliveryListVO; +import com.logpm.distribution.vo.DistributionDeliveryWordVO; +import com.logpm.distribution.vo.DistributionParcelNumberVO; +import com.logpm.distribution.vo.DistributionReservationStocklistVO; +import com.logpm.distribution.vo.DistributionRetentionScanVo; +import com.logpm.distribution.vo.DistributionStockArticleVO; +import com.logpm.distribution.vo.app.DistributionAppDeliveryListVO; +import com.logpm.distribution.vo.app.DistributionAppDetailVO; +import com.logpm.distribution.vo.app.DistributionAppNewDeliveryListVO; +import com.logpm.distribution.vo.app.DistributionAppParcelListVO; +import com.logpm.distribution.vo.app.DistributionAppStockArticleVO; import com.logpm.oldproject.dto.SignPushDataDTO; import org.apache.ibatis.annotations.Param; -import org.springblade.common.model.PackageData; import java.util.List; import java.util.Map; @@ -530,11 +549,12 @@ public interface DistributionDeliveryListMapper extends BaseMapper selectDeliveryZeroOrderInfoDetail(Long id, Long id1); + List selectDeliveryZeroOrderInfoDetail(@Param("stockArticleId") Long id, @Param("deliveryId") Long id1); /** * 配送计划内的定制品计划查询 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.java index 3e836dfe6..e92c8f1b9 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.java @@ -18,6 +18,7 @@ package com.logpm.distribution.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.logpm.distribution.entity.QualityDeliverEntity; +import org.apache.ibatis.annotations.Param; /** * 配送明细 Mapper 接口 @@ -27,4 +28,13 @@ import com.logpm.distribution.entity.QualityDeliverEntity; */ public interface QualityDeliverMapper extends BaseMapper { + void deleteByPlanReservationCode(@Param("reservationCode") String reservationCode); + + void deleteEntityById(@Param("id") Long id); + + void delStockingOperation(@Param("id") Long id); + + void delPlanDelivery(@Param("id") Long id); + + void delDistributionCarStart(@Param("id") Long id); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml index c23aaa783..97031ad79 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml @@ -6,5 +6,46 @@ + + delete from logpm_quality_deliver where plan_reservation_code = #{reservationCode} + + + delete from logpm_quality_deliver where id = #{id} + + + + update logpm_quality_deliver + set stockup_code = null, + stockup_user_name = null, + stockup_finish_time = null, + stockup_create_time = null, + stock_num = null, + stock_allocation = null, + stockup_type = null + where id = #{id} + + + update logpm_quality_deliver + set plan_train_number = null, + delivery_time = null, + delivery_type = null, + delivery_kind = null, + vehicle_name = null, + driver_name = null, + delivery_fee = null, + distribution_company = null, + delivery_plan_time = null, + plan_type = null, + delivery_create_user_name = null, + yn_whole_vehicle = null + where id = #{id} + + + + update logpm_quality_deliver + set start_car_user_name = null, + start_car_time = null + where id = #{id} + diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java index 57c334d7c..a9667d752 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java @@ -2,20 +2,14 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; -import com.logpm.distribution.pros.DistributionProperties; -import com.logpm.distribution.service.IQualityDeliverService; import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; @@ -23,11 +17,6 @@ import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.workNode.DeliveryOfPickupPlanVO; import org.springblade.core.tool.utils.BeanUtil; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -43,28 +32,13 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class BillPlanReportListener { +public class BillPlanReportListener implements ReportService { - @Resource - private IQualityDeliverService qualityDeliverService; @Resource private IFactoryDataClient factoryDataClient; - @Resource - private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillPlan.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillPlan.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getBillPlanReport()) { - return; - } - log.info("自提任务生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -72,21 +46,6 @@ public class BillPlanReportListener { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); - if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) { - // 根据预约单号查询出所有这个预约单下的数据 先置空 - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getPlanTrainNumber, null) - .set(QualityDeliverEntity::getDeliveryTime, null) - .set(QualityDeliverEntity::getDeliveryType, null) - .set(QualityDeliverEntity::getVehicleName, null) - .set(QualityDeliverEntity::getBizCode, null) - .set(QualityDeliverEntity::getDriverName, null) - .set(QualityDeliverEntity::getDeliveryPlanTime, null) - .set(QualityDeliverEntity::getDeliveryCreateUserName, null) - .eq(QualityDeliverEntity::getBizCode, vo.getPickupBatch()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); - } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java index 6c7b400ae..b93ff6597 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java @@ -2,7 +2,6 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.logpm.distribution.dto.ReportQualityDeliverDTO; @@ -40,7 +39,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class BillReViewReportListener { +public class BillReViewReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -49,19 +48,8 @@ public class BillReViewReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillSignReview.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillSignReview.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getBillReviewReport()) { - return; - } - log.info("自提复核生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java index 28fc72b64..fbd8c22d6 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java @@ -40,7 +40,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class BillSignforReportListener { +public class BillSignforReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -49,11 +49,7 @@ public class BillSignforReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillSign.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillSign.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { if (!destinationProperties.getReport().getBillSignforReport()) { return; diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/CarStartReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/CarStartReportListener.java index 75723cd5a..6da3207fa 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/CarStartReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/CarStartReportListener.java @@ -1,29 +1,27 @@ package com.logpm.distribution.receiver.report; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; import com.logpm.distribution.service.IQualityDeliverService; import com.logpm.factorydata.feign.IFactoryDataClient; +import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; +import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.model.CarStartVO; import org.springblade.common.model.NodeFanoutMsg; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.List; /** * 发车生成明细报表 @@ -34,7 +32,7 @@ import javax.annotation.Resource; @Slf4j @Component @AllArgsConstructor -public class CarStartReportListener { +public class CarStartReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -43,42 +41,53 @@ public class CarStartReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndCarStart.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndCarStart.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getCarStartReport()) { - return; - } - log.info("发车生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); CarStartVO vo = JSONUtil.toBean(entries, CarStartVO.class); BizOperationEnums bizOperation = bean.getBizOperation(); - if (BizOperationEnums.DELETE.equals(bizOperation)) { - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getStartCarUserName, null) - .set(QualityDeliverEntity::getStartCarTime, null) - .eq(QualityDeliverEntity::getLoadTrainNumber, vo.getTrainNumber()) - .eq(QualityDeliverEntity::getLoadLicensePlate, vo.getVehicleName()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); - } - if (BizOperationEnums.ADD.equals(bizOperation)) { - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getStartCarUserName, vo.getDriverName()) - .set(QualityDeliverEntity::getStartCarTime, bean.getOperatorTime()) - .eq(QualityDeliverEntity::getLoadTrainNumber, vo.getTrainNumber()) - .eq(QualityDeliverEntity::getLoadLicensePlate, vo.getVehicleName()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); + // 装车车次号 + 车牌 + String trainNumber = vo.getTrainNumber(); + String vehicleName = vo.getVehicleName(); + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .select(QualityDeliverEntity::getId) + .eq(QualityDeliverEntity::getLoadTrainNumber, trainNumber) + .eq(QualityDeliverEntity::getLoadLicensePlate, vehicleName) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() + .startCarUserName(bean.getOperator()) + .startCarTime(bean.getOperatorTime()) + .build(); + if (BizOperationEnums.DELETE.equals(bizOperation)) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } + } + if (BizOperationEnums.ADD.equals(bizOperation)) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } } } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.DISTRIBUTION_CAR_START.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); + } + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ConsigneeArriveReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ConsigneeArriveReportListener.java index ffb4e2c9f..914daf99c 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ConsigneeArriveReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ConsigneeArriveReportListener.java @@ -1,29 +1,27 @@ package com.logpm.distribution.receiver.report; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; -import com.logpm.distribution.pros.DistributionProperties; import com.logpm.distribution.service.IQualityDeliverService; import com.logpm.factorydata.feign.IFactoryDataClient; +import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; +import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.model.ConsigneeArriveVO; import org.springblade.common.model.NodeFanoutMsg; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.List; /** * 配送到达生成明细报表 @@ -34,65 +32,58 @@ import javax.annotation.Resource; @Slf4j @Component @AllArgsConstructor -public class ConsigneeArriveReportListener { +public class ConsigneeArriveReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @Resource private IFactoryDataClient factoryDataClient; - @Resource - private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndConsigneeArrive.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndConsigneeArrive.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getConsigneeArriveReport()) { - return; - } - log.info("配送到达生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); ConsigneeArriveVO vo = JSONUtil.toBean(entries, ConsigneeArriveVO.class); BizOperationEnums bizOperation = bean.getBizOperation(); - if (BizOperationEnums.DELETE.equals(bizOperation)) { - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getArriveCarUserName, null) - .set(QualityDeliverEntity::getArriveCarTime, null) - .set(QualityDeliverEntity::getArriveProvince, null) - .set(QualityDeliverEntity::getArriveCity, null) - .set(QualityDeliverEntity::getArriveDistrict, null) - .set(QualityDeliverEntity::getArriveTownship, null) - .set(QualityDeliverEntity::getArriveAddress, null) - .set(QualityDeliverEntity::getArrivePositioning, null) - .eq(QualityDeliverEntity::getLoadLicensePlate, vo.getVehicleName()) - .eq(QualityDeliverEntity::getLoadTrainNumber, vo.getTrainNumber()) - .eq(QualityDeliverEntity::getBizCode, vo.getReservationCode()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); - } - if (BizOperationEnums.ADD.equals(bizOperation)) { - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getArriveCarUserName, vo.getDriverName()) - .set(QualityDeliverEntity::getArriveCarTime, bean.getOperatorTime()) - .set(QualityDeliverEntity::getArriveProvince, vo.getProvince()) - .set(QualityDeliverEntity::getArriveCity, vo.getCity()) - .set(QualityDeliverEntity::getArriveDistrict, vo.getDistrict()) - .set(QualityDeliverEntity::getArriveTownship, vo.getTownship()) - .set(QualityDeliverEntity::getArriveAddress, vo.getAddress()) - .set(QualityDeliverEntity::getArrivePositioning, vo.getPositioning()) - .eq(QualityDeliverEntity::getLoadTrainNumber, vo.getTrainNumber()) - .eq(QualityDeliverEntity::getLoadLicensePlate, vo.getVehicleName()) - .eq(QualityDeliverEntity::getBizCode, vo.getReservationCode()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); + // 装车车次号 + 车牌 + String reservationCode = vo.getReservationCode(); + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .select(QualityDeliverEntity::getId) + .eq(QualityDeliverEntity::getPlanReservationCode, reservationCode) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() + .arriveCarUserName(vo.getDriverName()) + .arriveCarTime(DateUtil.formatDateTime(bean.getOperatorTime())) + .arriveProvince(vo.getProvince()) + .arriveCity(vo.getCity()) + .arriveDistrict(vo.getDistrict()) + .arriveTownship(vo.getTownship()) + .arriveAddress(vo.getAddress()) + .arrivePositioning(vo.getPositioning()) + .build(); + if (BizOperationEnums.ADD.equals(bizOperation)) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } } } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.DISTRIBUTION_CAR_ARRIVED.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); + } + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java index 406513416..e1abd2eec 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java @@ -25,18 +25,12 @@ import com.logpm.statistics.vo.ExpenseDispatchPriceCategoryVO; import com.logpm.statistics.vo.ExpenseDispatchPriceVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.BooleanZeroOneEnums; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.workNode.FinishDistributionTrainVO; import org.springblade.common.utils.GaoDeApiUtil; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -60,7 +54,7 @@ import java.util.stream.Collectors; @Slf4j @Component @AllArgsConstructor -public class DeliverFinishReportListener { +public class DeliverFinishReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -75,29 +69,8 @@ public class DeliverFinishReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillAndFinish.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillAndFinish.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) - public void buildPickUpReport(String msg) { - this.buildReport(msg); - - } - - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndFinish.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndFinish.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getDeliverFinishReport()) { - return; - } - log.info("车次完成生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -106,7 +79,6 @@ public class DeliverFinishReportListener { // 根据车次查询出包件明细,然后计算对应的成本 List entities = qualityDeliverService.list(Wrappers.lambdaQuery() .eq(QualityDeliverEntity::getSignTrainNumber, trainNumber) - .eq(QualityDeliverEntity::getBizStatus, 100) ); if (CollUtil.isNotEmpty(entities)) { // 按签收车分组 @@ -888,7 +860,6 @@ public class DeliverFinishReportListener { } } } - } if (CollUtil.isNotEmpty(valueMap)) { // 修改配送明细信息 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/LoadingReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/LoadingReportListener.java index 4c1cba4e8..d620e9b32 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/LoadingReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/LoadingReportListener.java @@ -1,10 +1,12 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; @@ -13,23 +15,20 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.DistributionLoadVO; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 装车生成明细报表 @@ -40,7 +39,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class LoadingReportListener { +public class LoadingReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -49,19 +48,7 @@ public class LoadingReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndLoading.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndLoading.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getLoadingReport()) { - return; - } - log.info("装车生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -69,6 +56,26 @@ public class LoadingReportListener { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + // 单号 referenceCode + String referenceCode = vo.getTrainNumber(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(referenceCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .eq(QualityDeliverEntity::getPlanTrainNumber, referenceCode)); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() @@ -83,36 +90,49 @@ public class LoadingReportListener { .bizCode(vo.getReservationCode()) .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { - qualityDeliverEntity.setConditions(1); + // qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setLoadNum(1); - sendReport(bizOperation, qualityDeliverEntity); + // 装车包件是计划内的 更新 + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { - qualityDeliverEntity.setOrderCode(detail.getOrderCode()); - qualityDeliverEntity.setCategory(detail.getProductName()); - qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity); + // qualityDeliverEntity.setOrderCode(detail.getOrderCode()); + // qualityDeliverEntity.setCategory(detail.getProductName()); + // qualityDeliverEntity.setConditions(2); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { - qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); - qualityDeliverEntity.setMallName(detail.getMallName()); - qualityDeliverEntity.setMaterielCode(detail.getMaterialCode()); - qualityDeliverEntity.setMaterielName(detail.getMaterialName()); - qualityDeliverEntity.setConditions(3); - sendReport(bizOperation, qualityDeliverEntity); + // qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); + // qualityDeliverEntity.setMallName(detail.getMallName()); + // qualityDeliverEntity.setMaterielCode(detail.getMaterialCode()); + // qualityDeliverEntity.setMaterielName(detail.getMaterialName()); + // qualityDeliverEntity.setConditions(3); + qualityDeliverEntity.setLoadNum(1); + if (invMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(invMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.DISTRIBUTION_LOADING.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/PlanReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/PlanReportListener.java index 3b8961b95..082c22d58 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/PlanReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/PlanReportListener.java @@ -2,11 +2,10 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; @@ -16,7 +15,7 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; @@ -25,11 +24,6 @@ import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.PlanDriverbindCarVO; import org.springblade.common.model.ReservationVO; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -37,6 +31,7 @@ import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -48,7 +43,7 @@ import java.util.stream.Collectors; @Slf4j @Component @AllArgsConstructor -public class PlanReportListener { +public class PlanReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -57,19 +52,8 @@ public class PlanReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndPlan.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndPlan.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getLoadingReport()) { - return; - } - log.info("配送计划生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -86,28 +70,26 @@ public class PlanReportListener { vehicleName = planDriverbindCars.stream().map(PlanDriverbindCarVO::getCarPlate).collect(Collectors.joining(",")); driverName = planDriverbindCars.stream().map(PlanDriverbindCarVO::getDriverName).collect(Collectors.joining(",")); } - Map invMap = new HashMap<>(); - if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) { - // 根据预约单号查询出所有这个预约单下的数据 先置空 - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getDeliveryTime, null) - .set(QualityDeliverEntity::getDeliveryType, null) - .set(QualityDeliverEntity::getDeliveryKind, null) - .set(QualityDeliverEntity::getVehicleName, null) - .set(QualityDeliverEntity::getDriverName, null) - .set(QualityDeliverEntity::getDistributionCompany, null) - .set(QualityDeliverEntity::getDeliveryPlanTime, null) - .set(QualityDeliverEntity::getDeliveryCreateUserName, null) - .set(QualityDeliverEntity::getYnWholeVehicle, null) - .set(QualityDeliverEntity::getDeliveryFee, null) - .eq(QualityDeliverEntity::getPlanTrainNumber, vo.getTrainNumber()) - .ne(QualityDeliverEntity::getBizStatus, 110); - if (BizOperationEnums.DELETE.equals(bizOperation)) { - wrapper.set(QualityDeliverEntity::getPlanTrainNumber, null); + Set reservationCodeSet = reservationVOList.stream().map(ReservationVO::getReservationCode).collect(Collectors.toSet()); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if(CollUtil.isNotEmpty(reservationCodeSet)){ + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery().in(QualityDeliverEntity::getPlanReservationCode, reservationCodeSet)); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getPlanReservationCode() + item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getPlanReservationCode() + item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getPlanReservationCode() + item.getMallName() + item.getMaterielCode())); } - qualityDeliverService.update(wrapper); } for (ReservationVO reservationVO : reservationVOList) { + String reservationCode = reservationVO.getReservationCode(); List details = reservationVO.getPackageDataList(); if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { @@ -130,59 +112,97 @@ public class PlanReportListener { .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); - qualityDeliverEntity.setPlanNum(1); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); + if (cmpMap.containsKey(reservationCode + detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(reservationCode + detail.getPackageCode()).get(0).getId()); + if (BizOperationEnums.DELETE.equals(bizOperation)) { + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); - qualityDeliverEntity.setPlanNum(detail.getNumber()); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); + if (ltlMap.containsKey(reservationCode + detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(reservationCode + detail.getProductName() + detail.getOrderCode()).get(0).getId()); + if (BizOperationEnums.DELETE.equals(bizOperation)) { + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { - invMap.put(detail.getMallName() + detail.getMaterialCode(), qualityDeliverEntity); qualityDeliverEntity.setBizCode(reservationVO.getReservationCode()); qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); qualityDeliverEntity.setMallName(detail.getMallName()); qualityDeliverEntity.setMaterielCode(detail.getMaterialCode()); qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); - qualityDeliverEntity.setPlanNum(1); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - invMap.put(detail.getMallName() + detail.getMaterialCode(), qualityDeliverEntity); + if (invMap.containsKey(reservationCode + detail.getMallName() + detail.getMaterialCode())) { + List qualityDeliverEntities = invMap.get(reservationCode + detail.getMallName() + detail.getMaterialCode()); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + if (BizOperationEnums.DELETE.equals(bizOperation)) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } + } else { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } + } } } } } - } - if (CollUtil.isNotEmpty(invMap)) { - for (Map.Entry entry : invMap.entrySet()) { - QualityDeliverEntity qualityDeliverEntity = entry.getValue(); - qualityDeliverService.update(qualityDeliverEntity, Wrappers.lambdaUpdate() - .eq(QualityDeliverEntity::getPlanTrainNumber, qualityDeliverEntity.getPlanTrainNumber()) - .eq(QualityDeliverEntity::getMallName, qualityDeliverEntity.getMallName()) - .eq(QualityDeliverEntity::getMaterielCode, qualityDeliverEntity.getMaterielCode()) - .eq(QualityDeliverEntity::getConditions, 3) - .lt(QualityDeliverEntity::getBizStatus, 110) - ); + // 系统中有的包件在当前不存在,则删除 + Set cmpSet = details.stream() + .filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)) + .map(i-> reservationCode + i.getPackageCode()).collect(Collectors.toSet()); + for (Map.Entry> entry : cmpMap.entrySet()) { + String key = entry.getKey(); + if (!cmpSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL)) + .map(i -> reservationCode + i.getProductName() + i.getOrderCode()).collect(Collectors.toSet()); + for (Map.Entry> entry : ltlMap.entrySet()) { + String key = entry.getKey(); + if (!ltlSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set invSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.INV)) + .map(i -> reservationCode + i.getMallName() + i.getMaterialCode()).collect(Collectors.toSet()); + for (Map.Entry> entry : invMap.entrySet()) { + String key = entry.getKey(); + if (!invSet.contains(key)) { + List value = entry.getValue(); + for (QualityDeliverEntity entity : value) { + sendReport(entity, BizOperationEnums.DELETE); + } + } } } } } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.PLAN_DELIVERY.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); + } + } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java index 62acef4e6..1f1a1702a 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java @@ -15,10 +15,12 @@ import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.DistributionParcelListEntity; import com.logpm.distribution.entity.DistributionStockArticleEntity; import com.logpm.distribution.entity.DistributionStockListEntity; +import com.logpm.distribution.entity.DistributionStockListInfoEntity; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; import com.logpm.distribution.service.IDistributionParcelListService; import com.logpm.distribution.service.IDistributionStockArticleService; +import com.logpm.distribution.service.IDistributionStockListInfoService; import com.logpm.distribution.service.IDistributionStockListService; import com.logpm.distribution.service.IQualityDeliverService; import com.logpm.trunkline.feign.ITrunklineAdvanceDetailClient; @@ -29,16 +31,12 @@ import com.logpm.warehouse.feign.IWarehouseWaybillDetailClient; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; -import org.springblade.common.constant.report.ReportConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.core.redis.cache.BladeRedis; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Arrays; @@ -53,7 +51,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class QualityDeliverListener { +public class QualityDeliverListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -73,6 +71,9 @@ public class QualityDeliverListener { @Resource private IDistributionStockListService stockListService; + @Resource + private IDistributionStockListInfoService stockListInfoService; + @Resource private IBasicdataFactoryCategoryClient factoryCategoryClient; @@ -87,62 +88,65 @@ public class QualityDeliverListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = ReportConstants.REPORT_QUALITY_DELIVER_QUEUE, durable = "true"), - exchange = @Exchange(name = ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE, type = ExchangeTypes.TOPIC), - key = ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY - )) - public void data(String msg) throws InterruptedException { - if (!destinationProperties.getReport().getQualityDeliver()) { - return; - } - log.info("配送明细基础表处理: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } + @Transactional + public void buildReport(String msg) { ReportQualityDeliverDTO bean = JSONUtil.toBean(msg, ReportQualityDeliverDTO.class); + String node = bean.getNode(); String data = bean.getData(); QualityDeliverEntity qualityDeliverEntity = JSONUtil.toBean(data, QualityDeliverEntity.class); Integer conditions = qualityDeliverEntity.getConditions(); if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.MODIFY)) { - if (ObjectUtil.equals(PackageTypeEnums.CMP.getCode(), conditions)) { - // 定制品 - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) { - wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId()); - } else { - wrapper.eq(QualityDeliverEntity::getOrderPackageCode, qualityDeliverEntity.getOrderPackageCode()); - } - wrapper.lt(QualityDeliverEntity::getBizStatus, 110); - saveOrUpdate(wrapper, qualityDeliverEntity); - } else if (ObjectUtil.equals(PackageTypeEnums.INV.getCode(), conditions)) { - // 库存品 - LambdaQueryWrapper wrapper = buildInvWrapper(qualityDeliverEntity); - if (wrapper == null) { - return; - } - // 查询不存在时更新,存在时修改 - saveOrUpdate(wrapper, qualityDeliverEntity); - } else if (ObjectUtil.equals(PackageTypeEnums.LTL.getCode(), conditions)) { - // 零担 - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) { - wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId()); - } else { - wrapper.eq(QualityDeliverEntity::getOrderCode, qualityDeliverEntity.getOrderCode()) - .eq(QualityDeliverEntity::getCategory, qualityDeliverEntity.getCategory()); - } - wrapper.lt(QualityDeliverEntity::getBizStatus, 110); - if (StrUtil.isNotEmpty(qualityDeliverEntity.getBizCode())) { - wrapper.eq(QualityDeliverEntity::getBizCode, qualityDeliverEntity.getBizCode()); - } - saveOrUpdate(wrapper, qualityDeliverEntity); - } + qualityDeliverService.updateById(qualityDeliverEntity); + // if (ObjectUtil.equals(PackageTypeEnums.CMP.getCode(), conditions)) { + // // 定制品 + // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + // if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) { + // wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId()); + // } else { + // wrapper.eq(QualityDeliverEntity::getOrderPackageCode, qualityDeliverEntity.getOrderPackageCode()); + // } + // wrapper.lt(QualityDeliverEntity::getBizStatus, 110); + // saveOrUpdate(wrapper, qualityDeliverEntity); + // } else if (ObjectUtil.equals(PackageTypeEnums.INV.getCode(), conditions)) { + // // 库存品 + // LambdaQueryWrapper wrapper = buildInvWrapper(qualityDeliverEntity); + // if (wrapper == null) { + // return; + // } + // // 查询不存在时更新,存在时修改 + // saveOrUpdate(wrapper, qualityDeliverEntity); + // } else if (ObjectUtil.equals(PackageTypeEnums.LTL.getCode(), conditions)) { + // // 零担 + // LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + // if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) { + // wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId()); + // } else { + // wrapper.eq(QualityDeliverEntity::getOrderCode, qualityDeliverEntity.getOrderCode()) + // .eq(QualityDeliverEntity::getCategory, qualityDeliverEntity.getCategory()); + // } + // wrapper.lt(QualityDeliverEntity::getBizStatus, 110); + // if (StrUtil.isNotEmpty(qualityDeliverEntity.getBizCode())) { + // wrapper.eq(QualityDeliverEntity::getBizCode, qualityDeliverEntity.getBizCode()); + // } + // saveOrUpdate(wrapper, qualityDeliverEntity); + // } } if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.ADD)) { - if (ObjectUtil.equals(PackageTypeEnums.INV.getCode(), conditions)) { - // 查询不存在时更新,存在时修改 - saveOrUpdate(null, qualityDeliverEntity); + // 查询不存在时更新,存在时修改 + saveOrUpdate(null, qualityDeliverEntity); + } + if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.DELETE)) { + if (StrUtil.equals(node, WorkNodeEnums.PLANNED_RESERVATION.getValue())){ + qualityDeliverService.deleteEntityById(qualityDeliverEntity.getId()); + } + if (StrUtil.equals(node, WorkNodeEnums.STOCKING_OPERATION.getValue())){ + qualityDeliverService.delStockingOperation(qualityDeliverEntity.getId()); + } + if (StrUtil.equals(node, WorkNodeEnums.PLAN_DELIVERY.getValue())){ + qualityDeliverService.delPlanDelivery(qualityDeliverEntity.getId()); + } + if (StrUtil.equals(node, WorkNodeEnums.DISTRIBUTION_CAR_START.getValue())){ + qualityDeliverService.delDistributionCarStart(qualityDeliverEntity.getId()); } } } @@ -265,9 +269,16 @@ public class QualityDeliverListener { String brandName = stockList.getBrandName(); String sourceType = stockList.getSourceType(); if (StrUtil.equals(sourceType, "1")) { - DistributionParcelListEntity parcelListEntity = getDistributionParcelListEntity(qualityDeliverEntity.getOrderPackageCode(), qualityDeliverEntity.getWarehouseId()); - buildCmpBasicInfo(qualityDeliverEntity, parcelListEntity); + // 定制品转的库存品先查出包条码 + List list = stockListInfoService.list(Wrappers.lambdaQuery().eq(DistributionStockListInfoEntity::getStockListId, stockList.getId())); + if (CollUtil.isNotEmpty(list)) { + DistributionStockListInfoEntity distributionStockListInfoEntity = list.get(0); + DistributionParcelListEntity parcelListEntity = getDistributionParcelListEntity(distributionStockListInfoEntity.getPackageCode(), qualityDeliverEntity.getWarehouseId()); + buildCmpBasicInfo(qualityDeliverEntity, parcelListEntity); + } } else { + qualityDeliverEntity.setBeginWarehouseName(stockList.getWarehouseName()); + qualityDeliverEntity.setBeginWarehouseInTime(stockList.getWarehousingTime()); qualityDeliverEntity.setBrandName(brandName); qualityDeliverEntity.setMallCode(stockList.getMarketCode()); qualityDeliverEntity.setMallId(stockList.getMarketId()); @@ -313,6 +324,10 @@ public class QualityDeliverListener { // 物料编码 qualityDeliverEntity.setMaterielCode(parcelListEntity.getMaterialCode()); } + // 包条码 + if (StrUtil.isNotEmpty(parcelListEntity.getOrderPackageCode())) { + qualityDeliverEntity.setOrderPackageCode(parcelListEntity.getOrderPackageCode()); + } // 订单号 qualityDeliverEntity.setOrderCode(parcelListEntity.getOrderCode()); // 工厂车次号 @@ -352,12 +367,14 @@ public class QualityDeliverListener { private void buildOrderInfo(QualityDeliverEntity qualityDeliverEntity, Long warehouseId, String orderCode) { DistributionStockArticleEntity stockArticleEntity = getDistributionStockArticleEntity(warehouseId, orderCode); if (ObjectUtil.isNotEmpty(stockArticleEntity)) { + qualityDeliverEntity.setOrderNumber(stockArticleEntity.getTotalNumber()); // 客户信息 qualityDeliverEntity.setCustomName(stockArticleEntity.getCustomerName()); qualityDeliverEntity.setCustomPhone(stockArticleEntity.getCustomerTelephone()); qualityDeliverEntity.setCustomAddress(stockArticleEntity.getCustomerAddress()); // 商场信息 qualityDeliverEntity.setMallName(stockArticleEntity.getMallName()); + qualityDeliverEntity.setMallId(stockArticleEntity.getMallId()); qualityDeliverEntity.setMallCode(stockArticleEntity.getMallCode()); // 服务号 qualityDeliverEntity.setServiceNumber(stockArticleEntity.getServiceNumber()); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReViewReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReViewReportListener.java index af4683960..b0eb33f8b 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReViewReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReViewReportListener.java @@ -1,10 +1,12 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; @@ -13,23 +15,21 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.DistributionSignforVO; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 文员复核生成明细报表 @@ -40,7 +40,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class ReViewReportListener { +public class ReViewReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -49,25 +49,34 @@ public class ReViewReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndrecheck.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndrecheck.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getReViewReport()) { - return; - } - log.info("文员复核生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); DistributionSignforVO vo = JSONUtil.toBean(entries, DistributionSignforVO.class); Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); + String reservationCode = vo.getReservationCode(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .eq(QualityDeliverEntity::getPlanReservationCode, reservationCode) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + } + } List details = vo.getPackageDataList(); if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { @@ -77,39 +86,53 @@ public class ReViewReportListener { .orderPackageCode(detail.getPackageCode()) .reviewUserName(bean.getOperator()) .reviewTime(bean.getOperatorTime()) + .reviewNum(detail.getNumber()) .bizCode(vo.getReservationCode()) .bizStatus(100) .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); - sendReport(bizOperation, qualityDeliverEntity); + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } else { + // 不在计划内被扫描到了 特殊处理 + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); qualityDeliverEntity.setMallName(detail.getMallName()); qualityDeliverEntity.setMaterielCode(detail.getMaterialCode()); qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); - sendReport(bizOperation, qualityDeliverEntity); + if (invMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(invMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(BizOperationEnums operationEnums, QualityDeliverEntity qualityDeliverEntity) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.CLERK_REVIEW.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java new file mode 100644 index 000000000..a832e55fc --- /dev/null +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java @@ -0,0 +1,419 @@ +package com.logpm.distribution.receiver.report; + +import cn.hutool.core.util.StrUtil; +import com.logpm.distribution.pros.DistributionProperties; +import com.rabbitmq.client.Channel; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.report.ReportConstants; +import org.springframework.amqp.core.ExchangeTypes; +import org.springframework.amqp.rabbit.annotation.Exchange; +import org.springframework.amqp.rabbit.annotation.Queue; +import org.springframework.amqp.rabbit.annotation.QueueBinding; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.support.AmqpHeaders; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.List; + +/** + * 配送明细报表作业节点监听器 + * + * @author zhaoqiaobo + * @create 2024-03-18 0:02 + */ +@Slf4j +@Component +@AllArgsConstructor +public class ReportListener { + + private final DistributionProperties destinationProperties; + private final List reportServices; + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillPlan.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillPlan.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void billPlanReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getBillPlanReport()) { + flag = Boolean.FALSE; + } + log.info("自提任务生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(BillPlanReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("自提任务生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillSignReview.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillSignReview.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void billReViewReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getBillReviewReport()) { + flag = Boolean.FALSE; + } + log.info("自提复核生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(BillReViewReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("自提复核生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillSign.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.DeliveryOfPickup.BillSign.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void billSignforReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getBillSignforReport()) { + flag = Boolean.FALSE; + } + log.info("自提签收扫描生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(BillSignforReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("自提签收扫描生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndCarStart.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndCarStart.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void carStartReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getCarStartReport()) { + flag = Boolean.FALSE; + } + log.info("发车生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(CarStartReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("发车生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndConsigneeArrive.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndConsigneeArrive.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void consigneeArriveReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getConsigneeArriveReport()) { + flag = Boolean.FALSE; + } + log.info("配送到达生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(ConsigneeArriveReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("配送到达生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndFinish.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndFinish.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void deliverFinishReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getDeliverFinishReport()) { + flag = Boolean.FALSE; + } + log.info("车次完成生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(DeliverFinishReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("车次完成生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndLoading.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndLoading.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void loadingReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getLoadingReport()) { + flag = Boolean.FALSE; + } + log.info("装车生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(LoadingReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("装车生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndPlan.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndPlan.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void planReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getPlanReport()) { + flag = Boolean.FALSE; + } + log.info("配送计划生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(PlanReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("配送计划生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.reservation.OwnReservation.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.reservation.OwnReservation.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void reservationPlanReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getReservationPlanReport()) { + flag = Boolean.FALSE; + } + log.info("预约计划生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(ReservationPlanReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("预约计划生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndReturnWarehouse.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndReturnWarehouse.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void returnWarehouseReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getReturnWarehouseReport()) { + flag = Boolean.FALSE; + } + log.info("回库生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(ReturnWarehouseReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("回库生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndrecheck.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndrecheck.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void reViewReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getReViewReport()) { + flag = Boolean.FALSE; + } + log.info("文员复核生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(ReViewReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("文员复核生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndSignfor.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndSignfor.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void signforReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getSignforReport()) { + flag = Boolean.FALSE; + } + log.info("签收扫描生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(SignforReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("签收扫描生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.stock.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.stock.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void stockReportListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getStockReport()) { + flag = Boolean.FALSE; + } + log.info("备货生成明细报表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(StockReportListener.class).buildReport(msg); + } catch (Exception e) { + log.error("备货生成明细报表失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = ReportConstants.REPORT_QUALITY_DELIVER_QUEUE, durable = "true"), + exchange = @Exchange(name = ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE, type = ExchangeTypes.TOPIC), + key = ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY + ), ackMode = "MANUAL") + public void qualityDeliverListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getQualityDeliver()) { + flag = Boolean.FALSE; + } + log.info("配送明细基础表: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(QualityDeliverListener.class).buildReport(msg); + } catch (Exception e) { + log.error("配送明细基础表处理失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + + private ReportService selectReportService(Class clazz) { + // 根据某些条件选择具体的实现类 + for (ReportService reportService : reportServices) { + if (clazz.isInstance(reportService)) { + return reportService; + } + } + // 默认返回第一个实现类 + return reportServices.get(0); + } + +} diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportService.java new file mode 100644 index 000000000..54e257385 --- /dev/null +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportService.java @@ -0,0 +1,11 @@ +package com.logpm.distribution.receiver.report; + +/** + * @Author: zqb + * @Date: 2024/12/10 + */ +public interface ReportService { + + void buildReport(String msg); + +} diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReservationPlanReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReservationPlanReportListener.java index 703ae20ed..2079f89cf 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReservationPlanReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReservationPlanReportListener.java @@ -1,21 +1,20 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; -import com.logpm.distribution.pros.DistributionProperties; -import com.logpm.distribution.service.IQualityDeliverService; +import com.logpm.distribution.mapper.QualityDeliverMapper; import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; @@ -23,16 +22,14 @@ import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.ReservationVO; import org.springblade.core.tool.utils.BeanUtil; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * 预约计划生成明细报表 @@ -43,29 +40,13 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class ReservationPlanReportListener { +public class ReservationPlanReportListener implements ReportService { - @Resource - private IQualityDeliverService qualityDeliverService; - @Resource - private IFactoryDataClient factoryDataClient; - @Resource - private DistributionProperties destinationProperties; + private final IFactoryDataClient factoryDataClient; + private final QualityDeliverMapper qualityDeliverMapper; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.reservation.OwnReservation.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.reservation.OwnReservation.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) - public void buildReport(String msg) throws InterruptedException { - if (!destinationProperties.getReport().getReservationPlanReport()) { - return; - } - - log.info("预约计划生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } + @Transactional(rollbackFor = Exception.class) + public void buildReport(String msg) { NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -73,21 +54,30 @@ public class ReservationPlanReportListener { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); - if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) { - // 根据预约单号查询出所有这个预约单下的数据 先置空 - LambdaUpdateWrapper wrapper = Wrappers.lambdaUpdate() - .set(QualityDeliverEntity::getPlanReservationCreateTime, null) - .set(QualityDeliverEntity::getPlanReservationCode, null) - .set(QualityDeliverEntity::getBizCode, null) - .set(QualityDeliverEntity::getPlanReservationTime, null) - .set(QualityDeliverEntity::getPlanReservationUser, null) - .set(QualityDeliverEntity::getPlanNum, null) - .set(QualityDeliverEntity::getReservationConsignee, null) - .set(QualityDeliverEntity::getReservationConsigneePhone, null) - .set(QualityDeliverEntity::getReservationConsigneeAddr, null) - .eq(QualityDeliverEntity::getPlanReservationCode, vo.getReservationCode()) - .ne(QualityDeliverEntity::getBizStatus, 110); - qualityDeliverService.update(wrapper); + String reservationCode = vo.getReservationCode(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverMapper.selectList(Wrappers.lambdaQuery().eq(QualityDeliverEntity::getPlanReservationCode, reservationCode)); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + // 取消预约 将表中数据全删 + if (BizOperationEnums.DELETE.equals(bizOperation)) { + for (QualityDeliverEntity qualityDeliverEntity : qualityDeliverEntities) { + sendReport(qualityDeliverEntity, bizOperation); + } + return; + } + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getMallName() + item.getMaterielCode() + item.getIncomingBatch())); + } } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { @@ -101,7 +91,6 @@ public class ReservationPlanReportListener { .planReservationTime(vo.getReservationDate()) .planReservationUser(bean.getOperator()) .planNum(detail.getNumber()) - // .serviceType(vo.getDeliveryType()) .reservationConsignee(vo.getConsignee()) .reservationConsigneePhone(vo.getDeliveryPhone()) .reservationConsigneeAddr(vo.getDeliveryAddress()) @@ -109,13 +98,25 @@ public class ReservationPlanReportListener { if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setPlanNum(1); - sendReport(bizOperation, qualityDeliverEntity, BizOperationEnums.MODIFY); + // 存在订制品则修改 不存在则新增 + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.ADD); + } } if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity, BizOperationEnums.MODIFY); + // 存在零担则修改 不存在则新增 + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.ADD); + } } if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); @@ -124,28 +125,98 @@ public class ReservationPlanReportListener { qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); Integer number = detail.getNumber(); - for (int i = 0; i < number; i++) { - QualityDeliverEntity entity = new QualityDeliverEntity(); - BeanUtil.copyProperties(qualityDeliverEntity, entity); - entity.setPlanNum(1); - sendReport(bizOperation, entity, BizOperationEnums.ADD); + // 存在库存品则修改 不存在则新增 + // 当前库存品数据大于已有数量 则新增增量部分,如果当前库存品数量小于已有数量 需要删除数据 1 删除操作只针对未备货的数据 2 全删或者只删除部分 + if (invMap.containsKey(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch())) { + List qualityDeliverEntities = invMap.get(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch()); + int size = qualityDeliverEntities.size(); + if (number > size) { + for (int i = 0; i < number - size; i++) { + QualityDeliverEntity entity = new QualityDeliverEntity(); + BeanUtil.copyProperties(qualityDeliverEntity, entity); + entity.setPlanNum(1); + sendReport(entity, BizOperationEnums.ADD); + } + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + qualityDeliverEntity.setPlanNum(1); + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } + } else if (number == size) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + qualityDeliverEntity.setPlanNum(1); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } else { + List collect = qualityDeliverEntities.stream() + .filter(item -> StrUtil.isEmpty(item.getOrderPackageCode())) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + int i = size - number; + if (i >= collect.size()) { + for (QualityDeliverEntity entity : collect) { + sendReport(entity, BizOperationEnums.DELETE); + } + } else { + for (int j = 0; j < i; j++) { + sendReport(collect.get(j), BizOperationEnums.DELETE); + } + } + } + } + } else { + for (int i = 0; i < number; i++) { + QualityDeliverEntity entity = new QualityDeliverEntity(); + BeanUtil.copyProperties(qualityDeliverEntity, entity); + entity.setPlanNum(1); + sendReport(entity, BizOperationEnums.ADD); + } + } + } + } + // 系统中有的包件在当前不存在,则删除 + Set cmpSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)).map(PackageData::getPackageCode).collect(Collectors.toSet()); + for (Map.Entry> entry : cmpMap.entrySet()) { + String key = entry.getKey(); + if (!cmpSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL)) + .map(i -> i.getProductName() + i.getOrderCode()).collect(Collectors.toSet()); + for (Map.Entry> entry : ltlMap.entrySet()) { + String key = entry.getKey(); + if (!ltlSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set invSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.INV)) + .map(i -> i.getMallName() + i.getMaterialCode() + i.getPickupBatch()).collect(Collectors.toSet()); + for (Map.Entry> entry : invMap.entrySet()) { + String key = entry.getKey(); + if (!invSet.contains(key)) { + List value = entry.getValue(); + for (QualityDeliverEntity entity : value) { + sendReport(entity, BizOperationEnums.DELETE); } } - } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity, BizOperationEnums bizOperationEnums) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(bizOperationEnums).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.PLANNED_RESERVATION.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReturnWarehouseReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReturnWarehouseReportListener.java index 6aec684f1..6b3f1010a 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReturnWarehouseReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReturnWarehouseReportListener.java @@ -2,7 +2,6 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.logpm.distribution.dto.ReportQualityDeliverDTO; @@ -13,18 +12,12 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.DistributionSignforVO; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -40,7 +33,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class ReturnWarehouseReportListener { +public class ReturnWarehouseReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -49,19 +42,8 @@ public class ReturnWarehouseReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndReturnWarehouse.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndReturnWarehouse.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getReturnWarehouseReport()) { - return; - } - log.info("回库生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -78,7 +60,7 @@ public class ReturnWarehouseReportListener { .reviewUserName(bean.getOperator()) .reviewTime(bean.getOperatorTime()) .bizCode(vo.getReservationCode()) - .bizStatus(100) + .bizStatus(-1) .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java index fef058866..47815d7e4 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java @@ -2,10 +2,12 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; @@ -14,23 +16,21 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.DistributionSignforVO; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 签收扫描生成明细报表 @@ -41,7 +41,7 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class SignforReportListener { +public class SignforReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @@ -50,19 +50,8 @@ public class SignforReportListener { @Resource private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.DeliveryAndSignfor.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndSignfor.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getSignforReport()) { - return; - } - log.info("签收扫描生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -70,6 +59,26 @@ public class SignforReportListener { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + String reservationCode = vo.getReservationCode(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .eq(QualityDeliverEntity::getPlanReservationCode, reservationCode) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() @@ -86,17 +95,26 @@ public class SignforReportListener { .signType(vo.getOperatMode()) .bizCode(vo.getReservationCode()) .bizStatus(90) + .signStatus("已签收") .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setSignNum(1); - sendReport(bizOperation, qualityDeliverEntity); + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } else { + // 不在计划内被扫描到了 特殊处理 + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setSignNum(detail.getNumber()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); qualityDeliverEntity.setMallName(detail.getMallName()); @@ -104,22 +122,27 @@ public class SignforReportListener { qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setSignNum(1); qualityDeliverEntity.setConditions(3); - sendReport(bizOperation, qualityDeliverEntity); + if (invMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(invMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(BizOperationEnums operationEnums, QualityDeliverEntity qualityDeliverEntity) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.DISTRIBUTION_SIGN_FOR.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java index 8e65940a9..494774161 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java @@ -1,6 +1,7 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; @@ -8,29 +9,26 @@ import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; -import com.logpm.distribution.pros.DistributionProperties; import com.logpm.distribution.service.IQualityDeliverService; import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.StockUpVO; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 备货生成明细报表 @@ -41,28 +39,15 @@ import java.util.List; @Slf4j @Component @AllArgsConstructor -public class StockReportListener { +public class StockReportListener implements ReportService { @Resource private IQualityDeliverService qualityDeliverService; @Resource private IFactoryDataClient factoryDataClient; - @Resource - private DistributionProperties destinationProperties; - @RabbitListener(bindings = @QueueBinding( - value = @Queue(name = FanoutConstants.distribution.stock.QUEUE.REPORT, durable = "true"), - exchange = @Exchange(name = FanoutConstants.distribution.stock.EXCHANGE, type = ExchangeTypes.FANOUT) - )) -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getStockReport()) { - return; - } - log.info("备货生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -70,6 +55,25 @@ public class StockReportListener { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + // 单号 referenceCode + String referenceCode = vo.getReferenceCode(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(referenceCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery().eq(QualityDeliverEntity::getPlanReservationCode, referenceCode)); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getMallName() + item.getMaterielCode())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() @@ -86,16 +90,26 @@ public class StockReportListener { if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setStockNum(1); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - sendReport(qualityDeliverEntity); + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + if (BizOperationEnums.DELETE.equals(bizOperation)) { + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); qualityDeliverEntity.setStockNum(detail.getNumber()); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - sendReport(qualityDeliverEntity); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + if (BizOperationEnums.DELETE.equals(bizOperation)) { + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setBizCode(vo.getReferenceCode()); @@ -105,19 +119,24 @@ public class StockReportListener { qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); qualityDeliverEntity.setStockNum(1); - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - List list = qualityDeliverService.list(Wrappers.lambdaQuery() - .select(QualityDeliverEntity::getId) - .eq(QualityDeliverEntity::getBizCode, qualityDeliverEntity.getBizCode()) - .eq(QualityDeliverEntity::getMallName, qualityDeliverEntity.getMallName()) - .eq(QualityDeliverEntity::getMaterielCode, qualityDeliverEntity.getMaterielCode()) - .isNull(QualityDeliverEntity::getOrderPackageCode) - .lt(QualityDeliverEntity::getBizStatus, 110) - .last(" limit 1") - ); - if(CollUtil.isNotEmpty(list)){ - qualityDeliverEntity.setId(list.get(0).getId()); - sendReport(qualityDeliverEntity); + if (invMap.containsKey(detail.getMallName() + detail.getMaterialCode())) { + List qualityDeliverEntities = invMap.get(detail.getMallName() + detail.getMaterialCode()); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + if (BizOperationEnums.DELETE.equals(bizOperation)) { + List collect = qualityDeliverEntities.stream() + .filter(i -> StrUtil.equals(i.getOrderPackageCode(), detail.getPackageCode())) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + qualityDeliverEntity.setId(collect.get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } + } else { + List collect = qualityDeliverEntities.stream().filter( i -> StrUtil.isEmpty(i.getStockupCode())).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + qualityDeliverEntity.setId(collect.get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } } } } @@ -125,8 +144,12 @@ public class StockReportListener { } } - private void sendReport(QualityDeliverEntity qualityDeliverEntity) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.STOCKING_OPERATION.getValue()) + .build(); factoryDataClient.sendMessage(SendMsg.builder() .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java index 87ebb1605..b95a5f694 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java @@ -32,4 +32,12 @@ public interface IQualityDeliverService extends BaseService Date: Tue, 17 Dec 2024 13:37:50 +0800 Subject: [PATCH 03/14] =?UTF-8?q?2.=E5=A2=9E=E5=8A=A0=E8=BF=90=E5=8D=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BD=9C=E4=B8=9A=E5=AF=B9=E5=A4=96=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=201.=E4=BF=AE=E6=94=B9=E6=89=93=E6=89=98=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logpm-data-sharing-api/pom.xml | 18 ++ .../datasharing/dto/MerchantOrderDTO.java | 0 .../vo/MerchantOrderPackageVO.java | 0 .../logpm/datasharing/vo/MerchantOrderVO.java | 0 .../datasharing/vo/MerchantOrderZeroVO.java | 0 .../datasharing/vo/MerchantPackageVO.java | 0 .../vo/MerchantZeroDispatchVO.java | 0 .../datasharing/vo/WarehouseNumberVO.java | 26 +++ .../logpm/datasharing/vo/WaybillInfoVO.java | 137 ++++++++++++++ blade-service-api/pom.xml | 5 +- .../controller/BasicdataTrayController.java | 9 +- .../basicdata/mapper/BasicdataTrayMapper.java | 1 + .../basicdata/mapper/BasicdataTrayMapper.xml | 15 ++ .../impl/BasicdataTrayServiceImpl.java | 8 +- blade-service/logpm-data-sharing/pom.xml | 11 ++ .../config/InterceptorAdapterConfig.java | 33 ++++ .../controller/LogpmDataSearchController.java | 13 +- .../controller/MerchantController.java | 3 +- .../LocalServerLoginAccountsInterceptor.java | 100 +++++++++++ .../impl/LogpmDataSearchServiceImpl.java | 167 +++++++++++++++++- .../mapper/DistributionParcelListMapper.xml | 2 +- .../feign/WarehouseWaybillClient.java | 1 - .../mapper/WarehouseWaybillMapper.xml | 1 + 23 files changed, 531 insertions(+), 19 deletions(-) create mode 100644 blade-service-api/logpm-data-sharing-api/pom.xml rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java (100%) rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java (100%) rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java (100%) rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java (100%) rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java (100%) rename {blade-service/logpm-data-sharing => blade-service-api/logpm-data-sharing-api}/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java (100%) create mode 100644 blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WarehouseNumberVO.java create mode 100644 blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WaybillInfoVO.java create mode 100644 blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/config/InterceptorAdapterConfig.java create mode 100644 blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/interceptor/LocalServerLoginAccountsInterceptor.java diff --git a/blade-service-api/logpm-data-sharing-api/pom.xml b/blade-service-api/logpm-data-sharing-api/pom.xml new file mode 100644 index 000000000..943b859db --- /dev/null +++ b/blade-service-api/logpm-data-sharing-api/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + + org.springblade + blade-service-api + 3.2.0.RELEASE + + + org.springblade + logpm-data-sharing-api + 3.2.0.RELEASE + + + diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java similarity index 100% rename from blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java rename to blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java diff --git a/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WarehouseNumberVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WarehouseNumberVO.java new file mode 100644 index 000000000..cb41f3b9b --- /dev/null +++ b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WarehouseNumberVO.java @@ -0,0 +1,26 @@ +package com.logpm.datasharing.vo; + +import lombok.Data; + +/** + * @see com.logpm.datasharing.vo.WarehouseNumberVO + * 仓库数据 + *
  • 始发仓
  • + *
  • 中转仓
  • + *
  • 目的仓
  • + */ +@Data +public class WarehouseNumberVO { + + /** + * 仓库名称 + */ + private String warehouseName; + + /** + * 数量 + */ + private Integer number; + + +} diff --git a/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WaybillInfoVO.java b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WaybillInfoVO.java new file mode 100644 index 000000000..fe661bb55 --- /dev/null +++ b/blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WaybillInfoVO.java @@ -0,0 +1,137 @@ +package com.logpm.datasharing.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 开放模块 + * 运单返回诗句 + */ +@Data +public class WaybillInfoVO implements Serializable { + private static final long serialVersionUID = 1L; + + + /** + * 运单状态 10部分入库 + * + * 20入库 + * + * 30部分中转 + * + * 40 中转 + * + * 50 目的仓部分到达 + * + * 60 目的仓到达 + * + * 70 配送部分装车 + * + * 80 配送装车 + * + * 90 部分签收 + * + * 100 已签收 + */ + @ApiModelProperty(value = "运单状态") + private String statusName; + + + /** + * 运单号 + */ + @ApiModelProperty(value = "运单号") + private String waybillNo; + + /** + * 目的仓 + */ + @ApiModelProperty(value = "目的仓") + private String destinationWarehouseName; + + + + /** + * 发站仓 + */ + @ApiModelProperty(value = "发站仓") + private String departureWarehouseName; + + + /** + * 发货单位 + */ + @ApiModelProperty(value = "发货单位") + private String shipper; + + /** + * 发货人 + */ + @ApiModelProperty(value = "发货人") + private String shipperName; + + /** + * 总数 + */ + @ApiModelProperty(value = "总数") + private Integer totalCount; + + + /** + * 在途数量 + */ + @ApiModelProperty(value = "总数") + private Integer onWayCount; + + + /** + * 收货单位 + */ + @ApiModelProperty(value = "收货单位") + private String consignee; + + /** + * 收货人 + */ + @ApiModelProperty(value = "收货人") + private String consigneeName; + + + /** + * 始发仓数量信息 + */ + @ApiModelProperty(value = "始发仓数量信息") + private WarehouseNumberVO startWarehouseNumber; + + + /** + * 中转仓数量信息 + */ + @ApiModelProperty(value = "中转仓数量信息") + private List middleWarehouseNumber; + + /** + * 目的仓数量信息 + */ + @ApiModelProperty(value = "目的仓数量信息") + private WarehouseNumberVO endWarehouseNumber; + + /** + * 配送数量 + */ + @ApiModelProperty(value = "配送数量") + private Integer deliveryNum ; + + /** + * 签收数量 + */ + @ApiModelProperty(value = "签收数量") + private Integer signNum; + + + + +} diff --git a/blade-service-api/pom.xml b/blade-service-api/pom.xml index 6ff42ac06..7d3b3201e 100644 --- a/blade-service-api/pom.xml +++ b/blade-service-api/pom.xml @@ -45,8 +45,11 @@ logpm-factory-data-zbom-api - + logpm-business-api + + + logpm-data-sharing-api diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataTrayController.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataTrayController.java index 181cc29e4..f84410ba4 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataTrayController.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataTrayController.java @@ -260,10 +260,15 @@ public class BasicdataTrayController extends BladeController { return R.data(trayService.printCode(Func.toLongList(ids))); } - @GetMapping("/getPDF") - public void getPDF(@ApiParam(value = "主键集合", required = true) @RequestParam String ids, + @PostMapping("/downPdf") + public void downPdf(@RequestBody Map map, HttpServletResponse response) throws Exception { + + + String ids = (String) map.get("ids"); +// System.out.println(ids); trayService.downloadCodePDF(Func.toLongList(ids), response); + return ; } /** diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java index 9574f1586..012de62b6 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java @@ -87,4 +87,5 @@ public interface BasicdataTrayMapper extends BaseMapper { * 托盘 零担历史记录 */ WarehouseTrayQRCode getTray(@Param("id") Long id); + List getTrayByIds(@Param("ids") List ids); } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml index ab5139983..ebb6bd105 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml @@ -421,6 +421,21 @@ + diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java index 727cebbb9..f23b33356 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java @@ -280,8 +280,12 @@ public class BasicdataTrayServiceImpl extends BaseServiceImpl trayQRCodes = baseMapper.getTrayByIds(ids); + + for (WarehouseTrayQRCode trayQRCode : trayQRCodes) { +// WarehouseTrayQRCode trayQRCode = baseMapper.getTray(id); String filename = QRCodeUtil.createCodeToFile(trayQRCode.getTrayCode()); String fileTypeName = QRCodeUtil.createCodeToFileType(trayQRCode.getTrayCode()); diff --git a/blade-service/logpm-data-sharing/pom.xml b/blade-service/logpm-data-sharing/pom.xml index 1baf0111b..893a94e33 100644 --- a/blade-service/logpm-data-sharing/pom.xml +++ b/blade-service/logpm-data-sharing/pom.xml @@ -35,6 +35,17 @@ logpm-basicdata-api 3.2.0.RELEASE + + org.springblade + logpm-warehouse-api + 3.2.0.RELEASE + + + org.springblade + logpm-data-sharing-api + 3.2.0.RELEASE + + diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/config/InterceptorAdapterConfig.java b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/config/InterceptorAdapterConfig.java new file mode 100644 index 000000000..1364d45a4 --- /dev/null +++ b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/config/InterceptorAdapterConfig.java @@ -0,0 +1,33 @@ +package com.logpm.datasharing.config; + + +import com.logpm.datasharing.interceptor.LocalServerLoginAccountsInterceptor; +import lombok.AllArgsConstructor; +import org.springblade.common.component.MockLoginService; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.RedisLockClient; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 为所有的的 + */ +@Configuration +@AllArgsConstructor +public class InterceptorAdapterConfig implements WebMvcConfigurer { + + + private final BladeRedis redis; + + private final RedisLockClient redisLockClient; + private final MockLoginService mockLoginService; + + + @Override + public void addInterceptors(InterceptorRegistry interceptorRegistry) { + + interceptorRegistry.addInterceptor(new LocalServerLoginAccountsInterceptor(redis,redisLockClient,mockLoginService)).addPathPatterns("/search/**").order(1); + + } +} diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/LogpmDataSearchController.java b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/LogpmDataSearchController.java index ff0598cb8..b501bbb73 100644 --- a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/LogpmDataSearchController.java +++ b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/LogpmDataSearchController.java @@ -1,5 +1,6 @@ package com.logpm.datasharing.controller; +import com.logpm.datasharing.service.ILogpmDataSearchService; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; @@ -24,22 +25,18 @@ import org.springframework.web.bind.annotation.RestController; @Api(value = "运单/订单查询", tags = "运单/订单查询") public class LogpmDataSearchController extends BladeController { + private final ILogpmDataSearchService logpmDataSearchService; /** * 订单/运单搜索 * @return */ - @GetMapping("/data/${type}/${order}") - public R data(@PathVariable("order") String order){ + @GetMapping("/data/{type}/{order}") + public R data(@PathVariable("type") String type,@PathVariable("order") String order){ - - - - - - return null; + return logpmDataSearchService.data(type, order); } diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/MerchantController.java b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/MerchantController.java index 5b978ea11..86637b35c 100644 --- a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/MerchantController.java +++ b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/MerchantController.java @@ -41,10 +41,11 @@ public class MerchantController extends BladeController { private final MerchantService merchantService; - @GetMapping("goods") + @GetMapping("/goods") public R goods(@RequestParam("contract_number") String contract_number, @RequestParam("auth_key") String auth_key) { return R.data(merchantService.goods(contract_number, auth_key)); } + } diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/interceptor/LocalServerLoginAccountsInterceptor.java b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/interceptor/LocalServerLoginAccountsInterceptor.java new file mode 100644 index 000000000..2fc1a3960 --- /dev/null +++ b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/interceptor/LocalServerLoginAccountsInterceptor.java @@ -0,0 +1,100 @@ +package com.logpm.datasharing.interceptor; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springblade.common.cache.CacheNames; +import org.springblade.common.component.MockLoginService; +import org.springblade.common.exception.CustomerException; +import org.springblade.common.wrapper.CustomHttpServletRequestWrapper; +import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.core.tool.utils.ThreadLocalUtil; +import org.springframework.http.HttpHeaders; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +@Log4j2 +@AllArgsConstructor +public class LocalServerLoginAccountsInterceptor extends HandlerInterceptorAdapter { + + private final BladeRedis bladeRedis; + private final RedisLockClient redisLockClient; + private final MockLoginService mockLoginService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws CustomerException { + + + try { + CustomHttpServletRequestWrapper wrappedRequest = new CustomHttpServletRequestWrapper(request); + String account ="shujutongbu"; + String tenantId = request.getHeader("tenantId"); + tenantId = StringUtil.isBlank(tenantId)?"627683":tenantId; + String key =CacheNames.LOCAL_SERVER_USER+tenantId+":"+account; + String lockKey =key+":lock"; + JSONObject data =bladeRedis.get(key); + if(Objects.isNull(data)){ + boolean flag = redisLockClient.tryLock(lockKey, LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(key); + if(Objects.isNull(data)){ + data = mockLoginService.mockToken(tenantId,account); + bladeRedis.setEx(key,data,2591990L); + redisLockClient.unLock(lockKey, LockType.FAIR); + } + } + } + + // 修改或添加header + + // 发送登录请求 + log.info("##########preHandle: request={}", request); + + wrappedRequest.addHeader("Blade-Auth", "bearer "+data.getString("access_token")); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Blade-Auth","bearer "+data.get("access_token") ); + httpHeaders.add( "Authorization", "Basic bG9jYWw6bG9jYWxfc2VjcmV0"); + ThreadLocalUtil.put("bladeContext", httpHeaders); + + + // 用包装后的request替换原始request + request = wrappedRequest; + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); + return true; + } catch (Exception e) { + returnJson(response, JSONObject.toJSONString(R.fail(500, "服务异常,请联系管理员"))); + return false; + } + } + + private void returnJson(HttpServletResponse response, String json) { + PrintWriter writer = null; + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json"); + try { + writer = response.getWriter(); + writer.print(json); + + } catch (IOException e) { + System.out.println(e.getMessage()); + } finally { + if (writer != null) { + writer.close(); + } + } + } + + +} diff --git a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/service/impl/LogpmDataSearchServiceImpl.java b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/service/impl/LogpmDataSearchServiceImpl.java index b1094c908..53decf3c1 100644 --- a/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/service/impl/LogpmDataSearchServiceImpl.java +++ b/blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/service/impl/LogpmDataSearchServiceImpl.java @@ -1,11 +1,28 @@ package com.logpm.datasharing.service.impl; import com.logpm.datasharing.service.ILogpmDataSearchService; +import com.logpm.datasharing.vo.WarehouseNumberVO; +import com.logpm.datasharing.vo.WaybillInfoVO; +import com.logpm.distribution.entity.DistributionParcelListEntity; +import com.logpm.distribution.feign.IDistributionParcelListClient; +import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import com.logpm.warehouse.feign.IWarehouseWaybillClient; +import lombok.AllArgsConstructor; +import org.springblade.common.exception.CustomerException; import org.springblade.core.tool.api.R; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + @Service +@AllArgsConstructor public class LogpmDataSearchServiceImpl implements ILogpmDataSearchService { + + + private final IWarehouseWaybillClient warehouseWaybillClient; + private final IDistributionParcelListClient distributionParcelListClient; + @Override public R data(String type, String order) { @@ -18,23 +35,167 @@ public class LogpmDataSearchServiceImpl implements ILogpmDataSearchService { case "waybill": // 运单查询 - break; + return R.data(dataWEaybill(order)) ; default: // 需要没有参数的查询全部的情况 return R.fail("参数错误"); } + } + + + /** + * 运单查询 + * @param waybillNo + * @return + */ + private WaybillInfoVO dataWEaybill(String waybillNo) { + + WaybillInfoVO result = new WaybillInfoVO(); + int temp =0; + // todo 查询运单 + WarehouseWaybillEntity byWaybillNo = warehouseWaybillClient.findByWaybillNo(waybillNo); + if(Objects.isNull(byWaybillNo)){ + throw new CustomerException("运单信息不存在~"); + } + result.setWaybillNo(byWaybillNo.getWaybillNo()); + result.setDestinationWarehouseName(byWaybillNo.getDestinationWarehouseName()); + result.setDepartureWarehouseName(byWaybillNo.getDepartureWarehouseName()); + result.setShipper(byWaybillNo.getShipper()); + result.setShipperName(byWaybillNo.getShipperName()); + result.setConsignee(byWaybillNo.getConsignee()); + result.setConsigneeName(byWaybillNo.getConsigneeName()); + result.setTotalCount(byWaybillNo.getTotalCount()); + + List distributionParcelListEntities = distributionParcelListClient.findByWaybillNumber(waybillNo); + // 按照仓库ID进行分组 + Map> groupedByWarehouse= distributionParcelListEntities.stream() + .collect(Collectors.groupingBy(DistributionParcelListEntity::getWarehouse)); + + // 获取始发仓的入库数据 + WarehouseNumberVO startWarehouseNumber =buildWarehouse(groupedByWarehouse,result.getDepartureWarehouseName()); + // 移除当前的仓库 + groupedByWarehouse.remove(result.getDepartureWarehouseName()); + result.setStartWarehouseNumber(startWarehouseNumber); + temp +=startWarehouseNumber!=null?startWarehouseNumber.getNumber():temp; + /*********************************m目的仓 start********************************/ + String destinationWarehouseName = result.getDestinationWarehouseName(); + WarehouseNumberVO endWarehouseNumber=buildWarehouse(groupedByWarehouse,destinationWarehouseName); + temp +=endWarehouseNumber!=null?endWarehouseNumber.getNumber():temp; + // 计算预约数量 + List end = groupedByWarehouse.get(destinationWarehouseName); + + if(end!=null){ + int resNum = end.stream().filter(t->"20".equals(t.getOrderPackageReservationStatus())).mapToInt(DistributionParcelListEntity::getQuantity).sum(); + result.setDeliveryNum(resNum); + } + + groupedByWarehouse.remove(result.getDestinationWarehouseName()); + result.setEndWarehouseNumber(endWarehouseNumber); + /*********************************m目的仓 end********************************/ + // 判断当前map 中的key长度 + Set keys = groupedByWarehouse.keySet(); + List models = null; + for (String key : keys) { + if(models==null){ + models = new ArrayList<>(); + } + WarehouseNumberVO middleWarehouseNumberVO = buildWarehouse(groupedByWarehouse,key); + models.add(middleWarehouseNumberVO); + temp +=middleWarehouseNumberVO!=null?middleWarehouseNumberVO.getNumber():temp; + } + // 加入中转的数据 + result.setMiddleWarehouseNumber(models); + + // 查询运单的签收数量 + result.setSignNum(byWaybillNo.getSignNum()); + + // 运单状态 + + result.setStatusName(changeStatusName(byWaybillNo.getWaybillStatus())); + + // 计算在途数量 + result.setOnWayCount(result.getTotalCount()-temp); + + + + return result; + } + + private String changeStatusName(String waybillStatus) { + + if(waybillStatus==null){ + waybillStatus=""; + } + + switch (waybillStatus){ + case "20": + return "已入库"; + + case "30": + return "部分中转"; + + case "40": + return "中转"; + + case "50": + return "目的仓部分到达"; + + case "60": + return "目的仓到达"; + + case "70": + return "配送部分装车"; + + case "80": + return "配送装车"; + case "90": + return "部分签收"; + + case "100": + return "已签收"; + default: + return "未知"; + } + + + + + + + } + + + private WarehouseNumberVO buildWarehouse(Map> groupedByWarehouse,String warehouseName){ + + List end = groupedByWarehouse.get(warehouseName); + if(end==null){ + return null; + } + // 获取始发仓的在库数量 + int num = end.stream().filter(t->"20".equals(t.getOrderPackageStatus()) && t.getQuantity()!=0).mapToInt(DistributionParcelListEntity::getQuantity).sum(); + if(num != 0) { + WarehouseNumberVO endWarehouseNumber = new WarehouseNumberVO(); + endWarehouseNumber.setNumber(num); + endWarehouseNumber.setWarehouseName(warehouseName); + + + return endWarehouseNumber; + + } return null; } + + + private R dataOrder(String order) { // 通过订单查询站存单导入时间 - // 导入 + //todo - // return null; diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml index 036beca02..aafdbe386 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml @@ -1364,7 +1364,7 @@ diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java index f734dfa95..318567b00 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java @@ -2196,19 +2196,20 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - if (stockupDTO.getOrderCode().contains(",")) { - stockupDTO.setOrderCodeList(stockupDTO.getOrderCode().split(",")); - queryWrapper.in("order_self_numbering", stockupDTO.getOrderCodeList()); - stockupDTO.setOrderCode(null); - } else { - queryWrapper.eq("order_self_numbering", orderCode); - } +// QueryWrapper queryWrapper = new QueryWrapper<>(); +// if (stockupDTO.getOrderCode().contains(",")) { +// stockupDTO.setOrderCodeList(stockupDTO.getOrderCode().split(",")); +// queryWrapper.in("order_self_numbering", stockupDTO.getOrderCodeList()); +// stockupDTO.setOrderCode(null); +// } else { +// queryWrapper.eq("order_self_numbering", orderCode); +// } String packetBarCode = stockupDTO.getPacketBarCode(); Integer integer = baseMapper.selectPackageExist(stockupDTO); //查询包件信息 if (ObjectUtils.isNotNull(integer) && integer > 0) { //存在 + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("coding", packetBarCode); queryWrapper.eq("stockup_id", stockupId); queryWrapper.eq("reservation_id", reservationId); From 06e09e476acc8208b56fe1ee13ba28d18920bba7 Mon Sep 17 00:00:00 2001 From: zhenghaoyu Date: Tue, 17 Dec 2024 15:20:52 +0800 Subject: [PATCH 05/14] =?UTF-8?q?1.bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logpm/report/dto/ReportIncomingDTO.java | 9 +- .../report/mapper/ReportIncomingMapper.xml | 196 ++++++++++++------ ...StatisticsBalanceOrderInfoServiceImpl.java | 5 +- ...icsReconciliationOrderInfoServiceImpl.java | 5 +- .../service/impl/OpenOrderServiceImpl.java | 4 + .../impl/TrunklineCarsLoadServiceImpl.java | 78 ++++--- .../TrunklineWaybillPackageServiceImpl.java | 31 ++- .../warehouse/receiver/ErrorQueueHandler.java | 48 ++--- 8 files changed, 246 insertions(+), 130 deletions(-) diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/dto/ReportIncomingDTO.java b/blade-service/logpm-report/src/main/java/com/logpm/report/dto/ReportIncomingDTO.java index 763fbaaa6..9585cc1d8 100644 --- a/blade-service/logpm-report/src/main/java/com/logpm/report/dto/ReportIncomingDTO.java +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/dto/ReportIncomingDTO.java @@ -4,6 +4,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; @Data public class ReportIncomingDTO implements Serializable { @@ -21,10 +22,10 @@ public class ReportIncomingDTO implements Serializable { private String year; private String month; - private String businessLine; - private String departureWarehouseName; - private String destinationWarehouseName; - private String brand; + private List businessLines; + private List departureWarehouseIds; + private List destinationWarehouseIds; + private List brands; private String consignee; diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/mapper/ReportIncomingMapper.xml b/blade-service/logpm-report/src/main/java/com/logpm/report/mapper/ReportIncomingMapper.xml index efe3279a8..9c58830af 100644 --- a/blade-service/logpm-report/src/main/java/com/logpm/report/mapper/ReportIncomingMapper.xml +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/mapper/ReportIncomingMapper.xml @@ -28,17 +28,29 @@ left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') + + and waw.business_line in + + #{item} + - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') - - - and lww.brand like concat('%',#{param.brand},'%') + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + + + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} @@ -70,17 +82,29 @@ left join logpm_distribution_parcel_number ldpn on ldpn.parcel_list_id = ldpl.id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') - - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') - - - and lww.brand like concat('%',#{param.brand},'%') + + and waw.business_line in + + #{item} + + + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + + + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} @@ -120,17 +144,29 @@ left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') - - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') - - - and lww.brand like concat('%',#{param.brand},'%') + + and waw.business_line in + + #{item} + + + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + + + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} @@ -170,20 +206,32 @@ left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') - - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') + + and waw.business_line in + + #{item} + + + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + and lww.consignee like concat('%',#{param.consignee},'%') - - and lww.brand like concat('%',#{param.brand},'%') + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} @@ -216,20 +264,32 @@ left join logpm_distribution_parcel_number ldpn on ldpn.parcel_list_id = ldpl.id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') - - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') + + and waw.business_line in + + #{item} + + + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + and lww.consignee like concat('%',#{param.consignee},'%') - - and lww.brand like concat('%',#{param.brand},'%') + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} @@ -269,20 +329,32 @@ left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id where lww.document_making_time > '2024-10-22 00:00:00' and lww.departure_warehouse_id != 1847456188105195522 - - and waw.business_line like concat('%',#{param.businessLine},'%') - - - and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%') - - - and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%') + + and waw.business_line in + + #{item} + + + + and lww.departure_warehouse_id in + + #{item} + + + + and lww.destination_warehouse_id in + + #{item} + and lww.consignee like concat('%',#{param.consignee},'%') - - and lww.brand like concat('%',#{param.brand},'%') + + and lww.brand in + + #{item} + and lww.document_making_time >= #{param.startTime} diff --git a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsBalanceOrderInfoServiceImpl.java b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsBalanceOrderInfoServiceImpl.java index 76304414b..ab50870b1 100644 --- a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsBalanceOrderInfoServiceImpl.java +++ b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsBalanceOrderInfoServiceImpl.java @@ -17,7 +17,6 @@ import com.logpm.statistics.vo.StatisticsBalanceOrderInfoVO; import com.logpm.statistics.vo.StatisticsBalanceRecordVO; import com.logpm.warehouse.entity.WarehouseWaybillEntity; import com.logpm.warehouse.feign.IWarehouseWaybillClient; -import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.common.exception.CustomerException; import org.springblade.core.mp.base.BaseServiceImpl; @@ -283,7 +282,9 @@ public R findBalanceDetail(Long balanceOrderId) { @Override public void deleteBanlanceOrderByIds(List balanceOrderIds) { - baseMapper.deleteBanlanceOrderByIds(balanceOrderIds); + if(CollUtil.isNotEmpty(balanceOrderIds)){ + baseMapper.deleteBanlanceOrderByIds(balanceOrderIds); + } } @Override diff --git a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsReconciliationOrderInfoServiceImpl.java b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsReconciliationOrderInfoServiceImpl.java index d9ea1861e..8fe49c783 100644 --- a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsReconciliationOrderInfoServiceImpl.java +++ b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsReconciliationOrderInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.logpm.statistics.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; @@ -61,6 +62,8 @@ public class StatisticsReconciliationOrderInfoServiceImpl extends BaseServiceImp @Override public void deleteRencilitionOrderByIds(List rencilitionOrderIds) { - baseMapper.deleteRencilitionOrderByIds(rencilitionOrderIds); + if(CollUtil.isNotEmpty(rencilitionOrderIds)){ + baseMapper.deleteRencilitionOrderByIds(rencilitionOrderIds); + } } } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java index a575c73b1..77449c766 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java @@ -5457,6 +5457,10 @@ public class OpenOrderServiceImpl implements IOpenOrderService { stringBuilder.append("收货单位:").append(consignee).append("-->").append(newConsignee).append(";"); waybillEntity.setConsignee(newConsignee); waybillEntity.setConsigneeId(newConsigneeId); + BasicdataClientEntity basicdataClient = basicdataClientClient.findEntityById(newConsigneeId); + if(!Objects.isNull(basicdataClient)){ + waybillEntity.setServiceType(basicdataClient.getTypeService()); + } } String newConsigneeName = openOrderDTO.getConsigneeName(); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java index 5234b7a03..c91438939 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java @@ -2575,8 +2575,21 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl distinctList = addList.stream() + .collect(Collectors.toMap( + entity -> entity.getOrderCode() + "-" + entity.getWaybillNo(), // 复合键 + entity -> entity, + (existing, replacement) -> existing // 保留第一个出现的元素 + )) + .values() + .stream() + .collect(Collectors.toList()); + + log.info("##############saveNew: loadId={} 处理后新增的订单集合 {}",loadId,distinctList); - for (TrunklineCarsOrderDTO trunklineCarsOrderDTO : addList) { + for (TrunklineCarsOrderDTO trunklineCarsOrderDTO : distinctList) { TrunklineCarsOrderEntity trunklineCarsOrderEntity = new TrunklineCarsOrderEntity(); BeanUtil.copy(trunklineCarsOrderDTO, trunklineCarsOrderEntity); Integer realNum = trunklineCarsOrderDTO.getRealNum(); @@ -11296,47 +11309,50 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl records = pageList.getRecords(); //把records中所有元素的id放入一个List List idList = records.stream().map(TrunklineCarsLoadVO::getId).collect(Collectors.toList()); - List carsLoadLinePhotoEntities = carsLoadLinePhotoService.findListByLoadIdListAndWarehouseId(idList,warehouseId); - Map> map = new HashMap<>(); - if(CollUtil.isNotEmpty(carsLoadLinePhotoEntities)){ - //把carsLoadLinePhotoEntities中所有元素通过loadId进行分组 - map = carsLoadLinePhotoEntities.stream().collect(Collectors.groupingBy(TrunklineCarsLoadLinePhotoEntity::getLoadId)); - } - - for (TrunklineCarsLoadVO trunklineCarsLoadVO : records) { - Long loadId = trunklineCarsLoadVO.getId(); - TrunklineCarsLoadLineEntity carsLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndNodeId(loadId, warehouseId); - Integer sort = carsLoadLineEntity.getSort(); - String nodeStatus1 = carsLoadLineEntity.getNodeStatus(); - String unloadStatus = carsLoadLineEntity.getUnloadStatus(); - trunklineCarsLoadVO.setUnloadStatus(unloadStatus); - TrunklineCarsLoadLineEntity upCarsLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndSort(loadId, sort - 1); - String nodeStatus = upCarsLoadLineEntity.getNodeStatus(); - trunklineCarsLoadVO.setLastStartCarStatus(0); - if (!"20".equals(nodeStatus)) { + if(CollUtil.isNotEmpty(idList)){ + List carsLoadLinePhotoEntities = carsLoadLinePhotoService.findListByLoadIdListAndWarehouseId(idList,warehouseId); + Map> map = new HashMap<>(); + if(CollUtil.isNotEmpty(carsLoadLinePhotoEntities)){ + //把carsLoadLinePhotoEntities中所有元素通过loadId进行分组 + map = carsLoadLinePhotoEntities.stream().collect(Collectors.groupingBy(TrunklineCarsLoadLinePhotoEntity::getLoadId)); + } + + for (TrunklineCarsLoadVO trunklineCarsLoadVO : records) { + Long loadId = trunklineCarsLoadVO.getId(); + TrunklineCarsLoadLineEntity carsLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndNodeId(loadId, warehouseId); + Integer sort = carsLoadLineEntity.getSort(); + String nodeStatus1 = carsLoadLineEntity.getNodeStatus(); + String unloadStatus = carsLoadLineEntity.getUnloadStatus(); + trunklineCarsLoadVO.setUnloadStatus(unloadStatus); + TrunklineCarsLoadLineEntity upCarsLoadLineEntity = trunklineCarsLoadLineService.findEntityByLoadIdAndSort(loadId, sort - 1); + String nodeStatus = upCarsLoadLineEntity.getNodeStatus(); trunklineCarsLoadVO.setLastStartCarStatus(0); - } else { - if (!"20".equals(nodeStatus1)) { - trunklineCarsLoadVO.setLastStartCarStatus(1); - } else { + if (!"20".equals(nodeStatus)) { trunklineCarsLoadVO.setLastStartCarStatus(0); + } else { + if (!"20".equals(nodeStatus1)) { + trunklineCarsLoadVO.setLastStartCarStatus(1); + } else { + trunklineCarsLoadVO.setLastStartCarStatus(0); + } } - } // if("20".equals(nodeStatus)){ // trunklineCarsLoadVO.setLastStartCarStatus(1); // }else{ // trunklineCarsLoadVO.setLastStartCarStatus(0); // } - Integer realLoadingNumber = trunklineCarsLoadVO.getRealLoadingNumber(); - Integer unloadNumber = trunklineCarsLoadVO.getUnloadNumber(); - Integer stockCarNumber = trunklineCarsLoadVO.getStockNumber(); - trunklineCarsLoadVO.setRealLoadingNumber(stockCarNumber); - trunklineCarsLoadVO.setTotalLoadingNum(realLoadingNumber); + Integer realLoadingNumber = trunklineCarsLoadVO.getRealLoadingNumber(); + Integer unloadNumber = trunklineCarsLoadVO.getUnloadNumber(); + Integer stockCarNumber = trunklineCarsLoadVO.getStockNumber(); + trunklineCarsLoadVO.setRealLoadingNumber(stockCarNumber); + trunklineCarsLoadVO.setTotalLoadingNum(realLoadingNumber); - List trunklineCarsLoadLinePhotoEntities = map.get(loadId); - trunklineCarsLoadVO.setCarsLoadLinePhotoEntities(trunklineCarsLoadLinePhotoEntities); + List trunklineCarsLoadLinePhotoEntities = map.get(loadId); + trunklineCarsLoadVO.setCarsLoadLinePhotoEntities(trunklineCarsLoadLinePhotoEntities); + } } + pageList.setRecords(records); return R.data(pageList); } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineWaybillPackageServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineWaybillPackageServiceImpl.java index 2261f6630..7cb1a3fc0 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineWaybillPackageServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineWaybillPackageServiceImpl.java @@ -1,6 +1,7 @@ package com.logpm.trunkline.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; @@ -355,6 +356,7 @@ public class TrunklineWaybillPackageServiceImpl extends BaseServiceImpl waybillPackageEntities = new ArrayList<>(); - Set waybillIds = new HashSet<>(); + Map waybillMap = new HashMap<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("order_package_code",orderPackageCodes) .eq("is_deleted",0); @@ -376,18 +378,35 @@ public class TrunklineWaybillPackageServiceImpl extends BaseServiceImpl updateList = new ArrayList<>(); for (TrunklineWaybillPackageEntity trunklineWaybillPackageEntity : trunklineWaybillPackageEntities) { TrunklineWaybillPackageEntity updateEntity = new TrunklineWaybillPackageEntity(); + Long waybillId = trunklineWaybillPackageEntity.getWaybillId(); + WarehouseWaybillEntity waybillEntity = waybillMap.get(waybillId); + if(Objects.isNull(waybillEntity)){ + waybillEntity = warehouseWaybillClient.findByWaybillId(waybillId); + waybillMap.put(waybillId,waybillEntity); + if(NumberUtil.equals(30,packageStatus)){ + if(!Objects.isNull(waybillEntity)){ + Long destinationWarehouseId = waybillEntity.getDestinationWarehouseId(); + if(!NumberUtil.equals(destinationWarehouseId,warehouseId)){ + packageStatus = 20; + } + }else{ + packageStatus = 20; + } + } + } updateEntity.setId(trunklineWaybillPackageEntity.getId()); updateEntity.setPackageStatus(packageStatus); updateList.add(updateEntity); - waybillIds.add(trunklineWaybillPackageEntity.getWaybillId()); } updateBatchById(updateList); - for (Long waybillId : waybillIds) { - WarehouseWaybillEntity waybillEntity = warehouseWaybillClient.findByWaybillId(waybillId); - updateWaybillStatus(waybillEntity); - } + waybillMap.keySet().forEach(waybillId -> { + WarehouseWaybillEntity waybillEntity = waybillMap.get(waybillId); + if(!Objects.isNull(waybillEntity)){ + updateWaybillStatus(waybillEntity); + } + }); } } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/receiver/ErrorQueueHandler.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/receiver/ErrorQueueHandler.java index 35d03fc50..c22ce47c3 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/receiver/ErrorQueueHandler.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/receiver/ErrorQueueHandler.java @@ -1,7 +1,5 @@ package com.logpm.warehouse.receiver; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.logpm.warehouse.entity.WarehouseLog; import com.logpm.warehouse.service.IWarehouseLogService; import com.rabbitmq.client.Channel; import lombok.extern.slf4j.Slf4j; @@ -12,7 +10,6 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.io.IOException; import java.util.Map; @@ -32,26 +29,29 @@ public class ErrorQueueHandler { @RabbitHandler public void warehouseErrorHandler(Map map, Message message, Channel channel) { // 如果手动ACK,消息会被监听消费,但是消息在队列中依旧存在,如果 未配置 acknowledge-mode 默认是会在消费完毕后自动ACK掉 - final long deliveryTag = message.getMessageProperties().getDeliveryTag(); - try { - Long logId = (Long) map.get("logId"); - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.set("status",2) - .eq("id",logId); - boolean updateFlag = warehouseLogService.update(updateWrapper); - if(updateFlag){ - channel.basicAck(deliveryTag, false); - }else{ - channel.basicReject(deliveryTag,true); - } - } catch (Exception e) { - try { - // 处理失败,重新压入MQ - channel.basicReject(deliveryTag,true); - } catch (IOException e1) { - e1.printStackTrace(); - } - - } + + log.warn("#################warehouseErrorHandler: message={}",message); + +// final long deliveryTag = message.getMessageProperties().getDeliveryTag(); +// try { +// Long logId = (Long) map.get("logId"); +// UpdateWrapper updateWrapper = new UpdateWrapper<>(); +// updateWrapper.set("status",2) +// .eq("id",logId); +// boolean updateFlag = warehouseLogService.update(updateWrapper); +// if(updateFlag){ +// channel.basicAck(deliveryTag, false); +// }else{ +// channel.basicReject(deliveryTag,true); +// } +// } catch (Exception e) { +// try { +// // 处理失败,重新压入MQ +// channel.basicReject(deliveryTag,true); +// } catch (IOException e1) { +// e1.printStackTrace(); +// } +// +// } } } From 7e1c80ae5a2e84e54ca8e9315b11dfb91e731e79 Mon Sep 17 00:00:00 2001 From: zhenghaoyu Date: Tue, 17 Dec 2024 16:11:02 +0800 Subject: [PATCH 06/14] =?UTF-8?q?1.=E5=B9=B2=E7=BA=BFbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TrunklineCarsLoadServiceImpl.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java index c91438939..d65bd3143 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java @@ -2582,10 +2582,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl entity.getOrderCode() + "-" + entity.getWaybillNo(), // 复合键 entity -> entity, (existing, replacement) -> existing // 保留第一个出现的元素 - )) - .values() - .stream() - .collect(Collectors.toList()); + )).values().stream().collect(Collectors.toList()); log.info("##############saveNew: loadId={} 处理后新增的订单集合 {}",loadId,distinctList); @@ -6511,9 +6508,19 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl Date: Tue, 17 Dec 2024 16:32:47 +0800 Subject: [PATCH 07/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../entity/QualityDeliverEntity.java | 5 + .../logpm/distribution/job/ExpenseJob.java | 25 +++ .../report/BillPlanReportListener.java | 162 ++++++++++++++++-- .../report/BillReViewReportListener.java | 75 +++++--- .../report/BillSignforReportListener.java | 84 ++++++--- .../report/DeliverFinishReportListener.java | 19 +- .../report/QualityDeliverListener.java | 4 + .../receiver/report/ReportListener.java | 26 +++ .../report/SignforReportListener.java | 2 + .../receiver/report/StockReportListener.java | 4 +- .../service/IQualityDeliverService.java | 2 + .../impl/QualityDeliverServiceImpl.java | 14 ++ 12 files changed, 353 insertions(+), 69 deletions(-) diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java index c57ecb68d..9d92c0c22 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java @@ -569,6 +569,11 @@ public class QualityDeliverEntity extends TenantEntity { */ @ApiModelProperty(value = "车辆类型") private String signCarType; + /** + * 车辆类型id + */ + @ApiModelProperty(value = "车辆类型id") + private Long signCarTypeId; /** * 上楼层数 */ diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/job/ExpenseJob.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/job/ExpenseJob.java index 5ab102dca..2569f7ba9 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/job/ExpenseJob.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/job/ExpenseJob.java @@ -1,5 +1,6 @@ package com.logpm.distribution.job; +import com.logpm.distribution.receiver.report.DeliverFinishReportListener; import com.logpm.distribution.service.IQualityDeliverService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; @@ -20,6 +21,8 @@ public class ExpenseJob { @Resource private IQualityDeliverService qualityDeliverService; + @Resource + private DeliverFinishReportListener deliverFinishReportListener; /** * 车辆成本明细表 job @@ -33,6 +36,28 @@ public class ExpenseJob { qualityDeliverService.carExpenseDispatchDetailJob(param); return ReturnT.SUCCESS; } + /** + * 车辆成本明细表 车次号 + * 每天晚上凌晨0点执行 + * @param param 指定时间 yyyy-MM-dd + * @return + * @throws Exception + */ + @XxlJob("carExpenseDispatchDetailTrainJob") + public ReturnT carExpenseDispatchDetailTrainJob(String param) throws Exception { + qualityDeliverService.carExpenseDispatchDetailFinal(param); + return ReturnT.SUCCESS; + } + /** + * 计算车次成本 车次号 + * @return + * @throws Exception + */ + @XxlJob("calculateTripCostJob") + public ReturnT calculateTripCostJob(String param) throws Exception { + deliverFinishReportListener.calculateTripCost(param); + return ReturnT.SUCCESS; + } /** * 每天凌晨00:30:00计算仓储成本 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java index a9667d752..7da811533 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java @@ -1,15 +1,20 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; +import com.logpm.distribution.mapper.QualityDeliverMapper; import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; @@ -21,7 +26,11 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * 自提任务生成明细报表 @@ -36,6 +45,7 @@ public class BillPlanReportListener implements ReportService { @Resource private IFactoryDataClient factoryDataClient; + private final QualityDeliverMapper qualityDeliverMapper; @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { @@ -46,31 +56,75 @@ public class BillPlanReportListener implements ReportService { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + String reservationCode = vo.getPickupBatch(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverMapper.selectList(Wrappers.lambdaQuery().eq(QualityDeliverEntity::getPlanReservationCode, reservationCode)); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + // 取消预约 将表中数据全删 + if (BizOperationEnums.DELETE.equals(bizOperation)) { + for (QualityDeliverEntity qualityDeliverEntity : qualityDeliverEntities) { + sendReport(qualityDeliverEntity, bizOperation); + } + return; + } + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getMallName() + item.getMaterielCode() + item.getIncomingBatch())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() .warehouseName(bean.getWarehouse()) .warehouseId(warehouseId) .orderPackageCode(detail.getPackageCode()) + .planReservationCode(vo.getPickupBatch()) + .reservationConsignee(vo.getConsignee()) + .reservationConsigneePhone(vo.getConsigneePhone()) + .planReservationUser(bean.getOperator()) + .planReservationTime(bean.getOperatorTime()) + .planNum(detail.getNumber()) .planTrainNumber(vo.getPickupBatch()) .deliveryTime(vo.getPickUpTime()) .deliveryType("自提") + .deliveryKind("自主配送") .vehicleName(vo.getPickUpPlate()) - .bizCode(vo.getPickupBatch()) .driverName(vo.getConsignee()) + .bizCode(vo.getPickupBatch()) .deliveryPlanTime(bean.getOperatorTime()) .deliveryCreateUserName(bean.getOperator()) .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setPlanNum(1); - sendReport(bizOperation, qualityDeliverEntity, BizOperationEnums.MODIFY); + // 存在订制品则修改 不存在则新增 + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.ADD); + } } if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity, BizOperationEnums.MODIFY); + // 存在零担则修改 不存在则新增 + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } else { + sendReport(qualityDeliverEntity, BizOperationEnums.ADD); + } } if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); @@ -79,28 +133,98 @@ public class BillPlanReportListener implements ReportService { qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); Integer number = detail.getNumber(); - for (int i = 0; i < number; i++) { - QualityDeliverEntity entity = new QualityDeliverEntity(); - BeanUtil.copyProperties(qualityDeliverEntity, entity); - entity.setPlanNum(1); - sendReport(bizOperation, entity, BizOperationEnums.ADD); + // 存在库存品则修改 不存在则新增 + // 当前库存品数据大于已有数量 则新增增量部分,如果当前库存品数量小于已有数量 需要删除数据 1 删除操作只针对未备货的数据 2 全删或者只删除部分 + if (invMap.containsKey(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch())) { + List qualityDeliverEntities = invMap.get(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch()); + int size = qualityDeliverEntities.size(); + if (number > size) { + for (int i = 0; i < number - size; i++) { + QualityDeliverEntity entity = new QualityDeliverEntity(); + BeanUtil.copyProperties(qualityDeliverEntity, entity); + entity.setPlanNum(1); + sendReport(entity, BizOperationEnums.ADD); + } + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + qualityDeliverEntity.setPlanNum(1); + sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); + } + } else if (number == size) { + for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) { + qualityDeliverEntity.setId(deliverEntity.getId()); + qualityDeliverEntity.setPlanNum(1); + sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); + } + } else { + List collect = qualityDeliverEntities.stream() + .filter(item -> StrUtil.isEmpty(item.getOrderPackageCode())) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + int i = size - number; + if (i >= collect.size()) { + for (QualityDeliverEntity entity : collect) { + sendReport(entity, BizOperationEnums.DELETE); + } + } else { + for (int j = 0; j < i; j++) { + sendReport(collect.get(j), BizOperationEnums.DELETE); + } + } + } + } + } else { + for (int i = 0; i < number; i++) { + QualityDeliverEntity entity = new QualityDeliverEntity(); + BeanUtil.copyProperties(qualityDeliverEntity, entity); + entity.setPlanNum(1); + sendReport(entity, BizOperationEnums.ADD); + } } } - + } + } + // 系统中有的包件在当前不存在,则删除 + Set cmpSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)).map(PackageData::getPackageCode).collect(Collectors.toSet()); + for (Map.Entry> entry : cmpMap.entrySet()) { + String key = entry.getKey(); + if (!cmpSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL)) + .map(i -> i.getProductName() + i.getOrderCode()).collect(Collectors.toSet()); + for (Map.Entry> entry : ltlMap.entrySet()) { + String key = entry.getKey(); + if (!ltlSet.contains(key)) { + sendReport(entry.getValue().get(0), BizOperationEnums.DELETE); + } + } + Set invSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.INV)) + .map(i -> i.getMallName() + i.getMaterialCode() + i.getPickupBatch()).collect(Collectors.toSet()); + for (Map.Entry> entry : invMap.entrySet()) { + String key = entry.getKey(); + if (!invSet.contains(key)) { + List value = entry.getValue(); + for (QualityDeliverEntity entity : value) { + sendReport(entity, BizOperationEnums.DELETE); + } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity, BizOperationEnums bizOperationEnums) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(bizOperationEnums).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(QualityDeliverEntity qualityDeliverEntity, BizOperationEnums operationEnums) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.PLAN_BILLOFLADING.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java index b93ff6597..fa43d913a 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java @@ -1,9 +1,12 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; @@ -12,23 +15,21 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.workNode.PickUpByReCheckVO; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 自提复核生成明细报表 @@ -57,12 +58,33 @@ public class BillReViewReportListener implements ReportService { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + String reservationCode = vo.getPickupBatch(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .eq(QualityDeliverEntity::getPlanReservationCode, reservationCode) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() .warehouseName(bean.getWarehouse()) .warehouseId(warehouseId) .orderPackageCode(detail.getPackageCode()) + .reviewNum(detail.getNumber()) .reviewUserName(bean.getOperator()) .reviewTime(bean.getOperatorTime()) .bizCode(vo.getPickupBatch()) @@ -70,36 +92,49 @@ public class BillReViewReportListener implements ReportService { .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); - qualityDeliverEntity.setLoadNum(1); - sendReport(bizOperation, qualityDeliverEntity); + qualityDeliverEntity.setReviewNum(1); + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } else { + // 不在计划内被扫描到了 特殊处理 + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setBizCode(vo.getPickupBatch()); qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); qualityDeliverEntity.setMallName(detail.getMallName()); qualityDeliverEntity.setMaterielCode(detail.getMaterialCode()); qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setConditions(3); - sendReport(bizOperation, qualityDeliverEntity); + if (invMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(invMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(BizOperationEnums operationEnums, QualityDeliverEntity qualityDeliverEntity) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.SIGN_BILLOFLADING_REVIEW.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java index fbd8c22d6..b72db0bee 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java @@ -1,10 +1,12 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.distribution.dto.ReportQualityDeliverDTO; import com.logpm.distribution.entity.QualityDeliverEntity; import com.logpm.distribution.pros.DistributionProperties; @@ -13,23 +15,21 @@ import com.logpm.factorydata.feign.IFactoryDataClient; import com.logpm.factorydata.vo.SendMsg; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springblade.common.constant.broadcast.FanoutConstants; +import org.springblade.common.constant.WorkNodeEnums; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; import org.springblade.common.model.NodeFanoutMsg; import org.springblade.common.model.PackageData; import org.springblade.common.model.workNode.PickUpByScanVO; -import org.springframework.amqp.core.ExchangeTypes; -import org.springframework.amqp.rabbit.annotation.Exchange; -import org.springframework.amqp.rabbit.annotation.Queue; -import org.springframework.amqp.rabbit.annotation.QueueBinding; -import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 自提签收扫描生成明细报表 @@ -51,13 +51,6 @@ public class BillSignforReportListener implements ReportService { @Transactional(rollbackFor = Exception.class) public void buildReport(String msg) { - if (!destinationProperties.getReport().getBillSignforReport()) { - return; - } - log.info("自提签收扫描生成明细报表: {}", msg); - if (StrUtil.isEmpty(msg)) { - return; - } NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); Object main = bean.getMain(); JSONObject entries = JSONUtil.parseObj(main); @@ -65,29 +58,61 @@ public class BillSignforReportListener implements ReportService { Long warehouseId = bean.getWarehouseId(); BizOperationEnums bizOperation = bean.getBizOperation(); List details = vo.getPackageDataList(); + String reservationCode = vo.getPickupBatch(); + Map> cmpMap = new HashMap<>(); + Map> ltlMap = new HashMap<>(); + Map> invMap = new HashMap<>(); + if (StrUtil.isNotEmpty(reservationCode)) { + List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery() + .eq(QualityDeliverEntity::getPlanReservationCode, reservationCode) + ); + if (CollUtil.isNotEmpty(qualityDeliverEntities)) { + cmpMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.CMP.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + ltlMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.LTL.getCode())) + .collect(Collectors.groupingBy(item -> item.getCategory() + item.getOrderCode())); + invMap = qualityDeliverEntities.stream() + .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) + .collect(Collectors.groupingBy(item -> item.getOrderPackageCode())); + } + } if (CollUtil.isNotEmpty(details)) { for (PackageData detail : details) { QualityDeliverEntity qualityDeliverEntity = QualityDeliverEntity.builder() .warehouseName(bean.getWarehouse()) .warehouseId(warehouseId) .orderPackageCode(detail.getPackageCode()) + .signCarNumber(vo.getCarNumber()) + .signReservationCode(vo.getPickupBatch()) + .signTrainNumber(vo.getPickupBatch()) .signUserName(bean.getOperator()) .signTime(bean.getOperatorTime()) - .signReservationCode(vo.getPickupBatch()) + .signType(vo.getSignType()) .bizCode(vo.getPickupBatch()) .bizStatus(90) + .signStatus("已签收") .build(); if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.CMP)) { qualityDeliverEntity.setConditions(1); qualityDeliverEntity.setSignNum(1); - sendReport(bizOperation, qualityDeliverEntity); + if (cmpMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(cmpMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } else { + // 不在计划内被扫描到了 特殊处理 + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { qualityDeliverEntity.setBizCode(vo.getPickupBatch()); qualityDeliverEntity.setOrderCode(detail.getOrderCode()); qualityDeliverEntity.setCategory(detail.getProductName()); qualityDeliverEntity.setSignNum(detail.getNumber()); qualityDeliverEntity.setConditions(2); - sendReport(bizOperation, qualityDeliverEntity); + if (ltlMap.containsKey(detail.getProductName() + detail.getOrderCode())) { + qualityDeliverEntity.setId(ltlMap.get(detail.getProductName() + detail.getOrderCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } else if (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.INV)) { qualityDeliverEntity.setIncomingBatch(detail.getPickupBatch()); qualityDeliverEntity.setMallName(detail.getMallName()); @@ -95,22 +120,27 @@ public class BillSignforReportListener implements ReportService { qualityDeliverEntity.setMaterielName(detail.getMaterialName()); qualityDeliverEntity.setSignNum(1); qualityDeliverEntity.setConditions(3); - sendReport(bizOperation, qualityDeliverEntity); + if (invMap.containsKey(detail.getPackageCode())) { + qualityDeliverEntity.setId(invMap.get(detail.getPackageCode()).get(0).getId()); + sendReport(BizOperationEnums.MODIFY, qualityDeliverEntity); + } } } } } - private void sendReport(BizOperationEnums bizOperation, QualityDeliverEntity qualityDeliverEntity) { - if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) { - ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder().data(JSONUtil.toJsonStr(qualityDeliverEntity)).operation(BizOperationEnums.MODIFY).build(); - factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) - .message(JSONUtil.toJsonStr(dto)) - .delay(3000) - .build()); - } + private void sendReport(BizOperationEnums operationEnums, QualityDeliverEntity qualityDeliverEntity) { + ReportQualityDeliverDTO dto = ReportQualityDeliverDTO.builder() + .data(JSONUtil.toJsonStr(qualityDeliverEntity)) + .operation(operationEnums) + .node(WorkNodeEnums.SIGN_BILLOFLADING.getValue()) + .build(); + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .message(JSONUtil.toJsonStr(dto)) + .delay(3000) + .build()); } } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java index e1abd2eec..ff914be75 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java @@ -76,6 +76,18 @@ public class DeliverFinishReportListener implements ReportService { JSONObject entries = JSONUtil.parseObj(main); FinishDistributionTrainVO vo = JSONUtil.toBean(entries, FinishDistributionTrainVO.class); String trainNumber = vo.getTrainNumber(); + calculateTripCost(trainNumber); + // 生成车辆车次成本 发送延时消息生成报表 + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(ReportConstants.REPORT_QUALITY_CAR_FINAL_EXCHANGE) + .routingKey(ReportConstants.REPORT_QUALITY_CAR_FINAL_ROUTINGKEY) + .message(JSONUtil.toJsonStr(vo)) + .delay(10000) + .build()); + + } + + public void calculateTripCost(String trainNumber) { // 根据车次查询出包件明细,然后计算对应的成本 List entities = qualityDeliverService.list(Wrappers.lambdaQuery() .eq(QualityDeliverEntity::getSignTrainNumber, trainNumber) @@ -162,11 +174,14 @@ public class DeliverFinishReportListener implements ReportService { if (StrUtil.isNotEmpty(deliveryKind) && StrUtil.equals(deliveryKind, "自主配送")) { if (StrUtil.isNotEmpty(qualityDeliverEntity.getDeliveryType()) && (StrUtil.equals(qualityDeliverEntity.getDeliveryType(), "商配") || StrUtil.equals(qualityDeliverEntity.getDeliveryType(), "市配"))) { + if(StrUtil.isEmpty(qualityDeliverEntity.getSignCarType())){ + continue; + } ExpenseDispatchClientDTO expenseDispatchClientDTO = expenseDispatchClient.findPriceByDriverId(qualityDeliverEntity.getWarehouseId(), driverId, qualityDeliverEntity.getSignCarType(), qualityDeliverEntity.getDeliveryType()); if (ObjectUtil.isNotEmpty(expenseDispatchClientDTO)) { ExpenseDispatchPriceVO priceVO = expenseDispatchClientDTO.getPriceVO(); if (ObjectUtil.isEmpty(priceVO)) { - return; + continue; } // 整车计费,则车内的每个包件分摊整车成本费用 if (ynWholeVehicle) { @@ -190,7 +205,7 @@ public class DeliverFinishReportListener implements ReportService { BigDecimal totalFreight = BigDecimal.ZERO; ExpenseDispatchPriceRuleDTO rule = expenseDispatchClientDTO.getRule(); if (ObjectUtil.isEmpty(rule)) { - return; + continue; } if (CollUtil.isNotEmpty(priceList)) { Map priceMap = priceList.stream().collect(Collectors.toMap(ExpenseDispatchPriceCategoryVO::getCategoryId, v -> v)); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java index 1f1a1702a..1505d4851 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java @@ -148,6 +148,9 @@ public class QualityDeliverListener implements ReportService { if (StrUtil.equals(node, WorkNodeEnums.DISTRIBUTION_CAR_START.getValue())){ qualityDeliverService.delDistributionCarStart(qualityDeliverEntity.getId()); } + if (StrUtil.equals(node, WorkNodeEnums.PLAN_BILLOFLADING.getValue())){ + qualityDeliverService.deleteEntityById(qualityDeliverEntity.getId()); + } } } @@ -407,6 +410,7 @@ public class QualityDeliverListener implements ReportService { if (StrUtil.isNotEmpty(waybillNumber)) { WarehouseWaybillEntity byWaybillNo = getWarehouseWaybillEntity(waybillNumber); if (ObjectUtil.isNotEmpty(byWaybillNo)) { + qualityDeliverEntity.setOpenOrderTime(byWaybillNo.getDocumentMakingTime()); // 运单发货信息 qualityDeliverEntity.setShipperUnitId(byWaybillNo.getShipperId()); qualityDeliverEntity.setShipperUnit(byWaybillNo.getShipper()); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java index a832e55fc..0d2e9331e 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java @@ -1,12 +1,15 @@ package com.logpm.distribution.receiver.report; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.logpm.distribution.pros.DistributionProperties; +import com.logpm.distribution.service.IQualityDeliverService; import com.rabbitmq.client.Channel; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.broadcast.FanoutConstants; import org.springblade.common.constant.report.ReportConstants; +import org.springblade.common.model.workNode.FinishDistributionTrainVO; import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Queue; @@ -32,6 +35,7 @@ public class ReportListener { private final DistributionProperties destinationProperties; private final List reportServices; + private final IQualityDeliverService qualityDeliverService; @RabbitListener(bindings = @QueueBinding( value = @Queue(name = FanoutConstants.DeliveryOfPickup.BillPlan.QUEUE.REPORT, durable = "true"), @@ -404,6 +408,28 @@ public class ReportListener { } } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = ReportConstants.REPORT_QUALITY_CAR_FINAL_QUEUE, durable = "true"), + exchange = @Exchange(name = ReportConstants.REPORT_QUALITY_CAR_FINAL_EXCHANGE, type = ExchangeTypes.TOPIC), + key = ReportConstants.REPORT_QUALITY_CAR_FINAL_ROUTINGKEY + ), ackMode = "MANUAL") + public void carExpenseDispatchDetailFinal(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + log.info("生成车辆车次成本报表: {}", msg); + try { + FinishDistributionTrainVO vo = JSONUtil.toBean(msg, FinishDistributionTrainVO.class); + String trainNumber = vo.getTrainNumber(); + qualityDeliverService.carExpenseDispatchDetailFinal(trainNumber); + } catch (Exception e) { + log.error("生成车辆车次成本报表失败: {}", e.getMessage()); + } + + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + private ReportService selectReportService(Class clazz) { // 根据某些条件选择具体的实现类 diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java index 47815d7e4..a89cca8fb 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java @@ -93,6 +93,8 @@ public class SignforReportListener implements ReportService { .signTrainNumber(vo.getTrainNumber()) .signReservationCode(vo.getReservationCode()) .signType(vo.getOperatMode()) + .signCarTypeId(vo.getCarTypeId()) + .signCarType(vo.getCarType()) .bizCode(vo.getReservationCode()) .bizStatus(90) .signStatus("已签收") diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java index 494774161..b8a37f4df 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java @@ -131,7 +131,9 @@ public class StockReportListener implements ReportService { sendReport(qualityDeliverEntity, BizOperationEnums.DELETE); } } else { - List collect = qualityDeliverEntities.stream().filter( i -> StrUtil.isEmpty(i.getStockupCode())).collect(Collectors.toList()); + List collect = qualityDeliverEntities.stream() + .filter( i -> StrUtil.isEmpty(i.getStockupCode())) + .collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)) { qualityDeliverEntity.setId(collect.get(0).getId()); sendReport(qualityDeliverEntity, BizOperationEnums.MODIFY); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java index b95a5f694..7be05663f 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java @@ -40,4 +40,6 @@ public interface IQualityDeliverService extends BaseService entities = this.list(wrapper); + buildCarExpenseReport(entities); + } + + private void buildCarExpenseReport(List entities) { if (CollUtil.isNotEmpty(entities)) { // 按签收车次+签收车次分组封装为map Map> collect = new HashMap<>(); @@ -425,4 +429,14 @@ public class QualityDeliverServiceImpl extends BaseServiceImpl entities = this.list(Wrappers.lambdaQuery().eq(QualityDeliverEntity::getSignTrainNumber, trainNumber)); + if(CollUtil.isNotEmpty(entities)){ + buildCarExpenseReport(entities); + } + } + } + } From 29d6f6c634337474ef773e597efe6b6cf1a70dcf Mon Sep 17 00:00:00 2001 From: "pref_mail@163.com" Date: Tue, 17 Dec 2024 16:32:57 +0800 Subject: [PATCH 08/14] =?UTF-8?q?1.=E5=A2=9E=E8=82=8C=E8=87=AA=E6=8F=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9A=84=E5=8F=96=E6=B6=88=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/BasicdataVehicleEntity.java | 3 +- .../DistrilbutionBillLadingServiceImpl.java | 147 ++++++++++++------ 2 files changed, 101 insertions(+), 49 deletions(-) diff --git a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataVehicleEntity.java b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataVehicleEntity.java index 1467a7bc3..1b195dcb7 100644 --- a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataVehicleEntity.java +++ b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataVehicleEntity.java @@ -319,5 +319,6 @@ public class BasicdataVehicleEntity extends TenantEntity { @ApiModelProperty(value = "预留5") private String reserve5; - + @ApiModelProperty(value = "车型id") + private Long vehicleModelId; } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistrilbutionBillLadingServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistrilbutionBillLadingServiceImpl.java index 1be7a2dfb..bdfc5fb70 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistrilbutionBillLadingServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistrilbutionBillLadingServiceImpl.java @@ -21,6 +21,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -600,10 +601,36 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DistrilbutionBillPackageEntity::getBillLadingId, distrilbutionBillLading.getId()); + wrapper.ne(DistrilbutionBillPackageEntity::getPacketBarStatus, 2);// 不查询取消的 + List list = distrilbutionBillPackageService.list(wrapper); + packageEntityList.addAll(list); // 将目前修改后的包件加入集合中 + + // 查询自提任务的零担 + LambdaQueryWrapper lambdaQueryWrapper =new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DistributionReservationZeroPackageEntity::getReservationId, distrilbutionBillLading.getId()); + lambdaQueryWrapper.ne(DistributionReservationZeroPackageEntity::getZeroPackageStatus, 2); + List list1 = distributionZeroPackageService.list(lambdaQueryWrapper); + zeroPackageEntityList.addAll(list1); + + // 查询库存 + + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(DistributionDeliveryDetailsEntity::getBillLadingId, distrilbutionBillLading.getId()); + wrapper1.ne(DistributionDeliveryDetailsEntity::getInventoryStatus, 2); + List list2 = distributionDeliveryDetailsService.list(wrapper1); + detailsEntities.addAll(list2); + } else { //设置lockey String lockKey = "lock:" + distrilbutionBillLading.getStockArticleId(); @@ -1047,14 +1074,17 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl deliveryOfPickupPlanFeiVOList = new ArrayList<>(); - listEntity.forEach(t -> { - DeliveryOfPickupPlanFeiVO deliveryOfPickupPlanFeiVO = new DeliveryOfPickupPlanFeiVO(); - deliveryOfPickupPlanFeiVO.setCost(t.getCost()); - String deliveryType = DictBizCache.getValue("deliveryType", deliveryOfPickupPlanFeiVO.getCost()); - deliveryOfPickupPlanFeiVO.setCostName(deliveryType); - deliveryOfPickupPlanFeiVO.setMoney(t.getMoney()); - deliveryOfPickupPlanFeiVOList.add(deliveryOfPickupPlanFeiVO); - }); + if(listEntity!=null){ + listEntity.forEach(t -> { + DeliveryOfPickupPlanFeiVO deliveryOfPickupPlanFeiVO = new DeliveryOfPickupPlanFeiVO(); + deliveryOfPickupPlanFeiVO.setCost(t.getCost()); + String deliveryType = DictBizCache.getValue("deliveryType", deliveryOfPickupPlanFeiVO.getCost()); + deliveryOfPickupPlanFeiVO.setCostName(deliveryType); + deliveryOfPickupPlanFeiVO.setMoney(t.getMoney()); + deliveryOfPickupPlanFeiVOList.add(deliveryOfPickupPlanFeiVO); + }); + + } deliveryOfPickupPlanVO.setDeliveryOfPickupPlanFeiVOList(deliveryOfPickupPlanFeiVOList); @@ -1065,61 +1095,72 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl zeroPackageEntityList, List packageDataList) { - zeroPackageEntityList.forEach(t -> { - PackageData packageData = new PackageData(); - packageData.setPackageType(PackageTypeEnums.LTL); - packageData.setNumber(t.getQuantity()); - DistributionParcelListEntity byId = distributionParcelListService.getById(t.getParcelListId()); - if (Func.isNotEmpty(byId)) { - packageData.setOrderCode(byId.getOrderCode()); - if (Func.isEmpty(byId.getBrandName())) { - DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(byId.getStockArticleId()); - if (ObjectUtils.isNotNull(stockArticleEntity)) { - packageData.setBrand(stockArticleEntity.getBrand()); + if(zeroPackageEntityList!=null){ + zeroPackageEntityList.forEach(t -> { + + PackageData packageData = new PackageData(); + packageData.setPackageType(PackageTypeEnums.LTL); + packageData.setNumber(t.getQuantity()); + DistributionParcelListEntity byId = distributionParcelListService.getById(t.getParcelListId()); + if (Func.isNotEmpty(byId)) { + packageData.setOrderCode(byId.getOrderCode()); + if (Func.isEmpty(byId.getBrandName())) { + DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(byId.getStockArticleId()); + if (ObjectUtils.isNotNull(stockArticleEntity)) { + packageData.setBrand(stockArticleEntity.getBrand()); + } + } else { + packageData.setBrand(byId.getBrandName()); } - } else { - packageData.setBrand(byId.getBrandName()); + packageData.setWaybillNumber(byId.getWaybillNumber()); } - packageData.setWaybillNumber(byId.getWaybillNumber()); - } - packageData.setProductName(t.getCategoryName()); - packageDataList.add(packageData); + packageData.setProductName(t.getCategoryName()); + packageDataList.add(packageData); + + }); + } + - }); } private void buildPackageDataByStockExtracted(List detailsEntities, List packageDataList) { - detailsEntities.forEach(t -> { - PackageData packageData = new PackageData(); - Long stockListId = t.getStockListId(); - DistributionStockListEntity byId = distributionStockListService.getById(stockListId); - if (byId != null) { - packageData.setPickupBatch(byId.getIncomingBatch()); - packageData.setBrand(byId.getBrandName()); - packageData.setMaterialName(byId.getDescriptionGoods()); - packageData.setMallName(byId.getMarketName()); - packageData.setMaterialCode(byId.getCargoNumber()); - packageData.setNumber(t.getQuantity()); - packageData.setPackageType(PackageTypeEnums.INV); + if(detailsEntities!=null){ + detailsEntities.forEach(t -> { + PackageData packageData = new PackageData(); + Long stockListId = t.getStockListId(); + DistributionStockListEntity byId = distributionStockListService.getById(stockListId); + if (byId != null) { + packageData.setPickupBatch(byId.getIncomingBatch()); + packageData.setBrand(byId.getBrandName()); + packageData.setMaterialName(byId.getDescriptionGoods()); + packageData.setMallName(byId.getMarketName()); + packageData.setMaterialCode(byId.getCargoNumber()); + packageData.setNumber(t.getQuantity()); + packageData.setPackageType(PackageTypeEnums.INV); - } - packageDataList.add(packageData); + } + packageDataList.add(packageData); + + }); + } - }); } private void buildPackageByBillPackageExtracted(List packageEntityList, List packageDataList) { - packageEntityList.forEach(t -> { - PackageData packageData = new PackageData(); - packageData.setPackageCode(t.getPacketBarCode()); - packageData.setNumber(1); - packageData.setPackageType(PackageTypeEnums.CMP); - packageDataList.add(packageData); + if(packageEntityList!=null){ + packageEntityList.forEach(t -> { + PackageData packageData = new PackageData(); + packageData.setPackageCode(t.getPacketBarCode()); + packageData.setNumber(1); + packageData.setPackageType(PackageTypeEnums.CMP); + packageDataList.add(packageData); + + }); + } - }); } @@ -1252,12 +1293,22 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl Date: Tue, 17 Dec 2024 16:34:02 +0800 Subject: [PATCH 09/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../common/constant/report/ReportConstants.java | 15 ++++++++++++--- .../common/model/workNode/PickUpByScanVO.java | 5 +++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/report/ReportConstants.java b/blade-biz-common/src/main/java/org/springblade/common/constant/report/ReportConstants.java index 6a1d0f61b..3120432f0 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/report/ReportConstants.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/report/ReportConstants.java @@ -1,5 +1,7 @@ package org.springblade.common.constant.report; +import org.springblade.common.constant.ModuleNameConstant; + /** * excel处理常量类 * @@ -11,8 +13,15 @@ public class ReportConstants { /** * 配送明细报表 */ - public static final String REPORT_QUALITY_DELIVER_EXCHANGE = "report.quality.deliver.exchange"; - public static final String REPORT_QUALITY_DELIVER_QUEUE = "report.quality.deliver.queue"; - public static final String REPORT_QUALITY_DELIVER_ROUTINGKEY = "report.quality.deliver.key"; + public static final String REPORT_QUALITY_DELIVER_EXCHANGE = "report.quality.deliver.exchange" + ModuleNameConstant.DEVAUTH; + public static final String REPORT_QUALITY_DELIVER_QUEUE = "report.quality.deliver.queue" + ModuleNameConstant.DEVAUTH; + public static final String REPORT_QUALITY_DELIVER_ROUTINGKEY = "report.quality.deliver.key" + ModuleNameConstant.DEVAUTH; + + /** + * 车辆车次报表 + */ + public static final String REPORT_QUALITY_CAR_FINAL_EXCHANGE = "report.quality.car.final.exchange" + ModuleNameConstant.DEVAUTH; + public static final String REPORT_QUALITY_CAR_FINAL_QUEUE = "report.quality.car.final.queue" + ModuleNameConstant.DEVAUTH; + public static final String REPORT_QUALITY_CAR_FINAL_ROUTINGKEY = "report.quality.car.final.key" + ModuleNameConstant.DEVAUTH; } diff --git a/blade-biz-common/src/main/java/org/springblade/common/model/workNode/PickUpByScanVO.java b/blade-biz-common/src/main/java/org/springblade/common/model/workNode/PickUpByScanVO.java index 60dcfc791..c04c64737 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/model/workNode/PickUpByScanVO.java +++ b/blade-biz-common/src/main/java/org/springblade/common/model/workNode/PickUpByScanVO.java @@ -29,6 +29,11 @@ public class PickUpByScanVO { */ private String driverName; + /** + * 签收类型 + */ + private String signType; + /** * 配送时间 */ From 4ce66f3e30c4a823d98980f7ad4e39471080075c Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Tue, 17 Dec 2024 17:09:07 +0800 Subject: [PATCH 10/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../service/impl/QualityDeliverServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java index 2c619a5fc..ea4243241 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java @@ -88,10 +88,10 @@ public class QualityDeliverServiceImpl extends BaseServiceImpl> collect = new HashMap<>(); for (QualityDeliverEntity entity : entities) { - if (!collect.containsKey(entity.getSignCarNumber() + entity.getPlanTrainNumber())) { - collect.put(entity.getSignCarNumber() + entity.getPlanTrainNumber(), CollUtil.newArrayList(entity)); + if (!collect.containsKey(entity.getSignCarNumber() + entity.getSignTrainNumber())) { + collect.put(entity.getSignCarNumber() + entity.getSignTrainNumber(), CollUtil.newArrayList(entity)); } else { - collect.get(entity.getSignCarNumber() + entity.getPlanTrainNumber()).add(entity); + collect.get(entity.getSignCarNumber() + entity.getSignTrainNumber()).add(entity); } } From b68aecb9f3a4b86300b016a67177cd2e3ed4d0a3 Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Tue, 17 Dec 2024 17:31:31 +0800 Subject: [PATCH 11/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../statistics/mapper/ExpenseDispatchTrainDetailMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml index f1a55124a..ead0723a1 100644 --- a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml +++ b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml @@ -23,13 +23,13 @@ and settlement_month = #{expenseDispatchTrainDetail.settlementMonth} - and train_number like concat('%',#{expenseDispatchTrainDetail.settlementMonth},'%') + and train_number like concat('%',#{expenseDispatchTrainDetail.trainNumber},'%') and delivery_date >= #{expenseDispatchTrainDetail.deliveryDateStart} - and delivery_date <= #{expenseDispatchTrainDetail.deliveryDateStart} + and delivery_date <= #{expenseDispatchTrainDetail.deliveryDateEnd} and distribution_type = #{expenseDispatchTrainDetail.distributionType} From 4846e57206453b62af805fc0c381a58f759e5ab6 Mon Sep 17 00:00:00 2001 From: "pref_mail@163.com" Date: Tue, 17 Dec 2024 18:24:30 +0800 Subject: [PATCH 12/14] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=A8=8124=E5=B0=8F=E6=97=B6=202.=E4=BF=AE=E5=A4=8D=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=8E=A8=E9=80=81=E7=9A=84=E6=95=B0=E6=8D=AE=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/OperatModeConstant.java | 5 +- .../entity/DistributionLoadscanEntity.java | 2 +- .../DistributionDeliveryListServiceImpl.java | 38 ++++++++-- .../impl/DistributionNodeWorkServiceImpl.java | 2 +- .../impl/DistributionSignforServiceImpl.java | 73 +++++++++++++++---- .../oldproject/feign/OldWaybillClient.java | 2 +- 6 files changed, 98 insertions(+), 24 deletions(-) diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/OperatModeConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/OperatModeConstant.java index f2f4f0248..0b9767015 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/OperatModeConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/OperatModeConstant.java @@ -5,7 +5,8 @@ package org.springblade.common.constant; */ public interface OperatModeConstant { - public static final String SCAN = "扫描"; - public static final String BATCH = "批量"; + public static final String SCAN = "司机扫描签收"; + public static final String BATCH = "司机批量签收"; + public static final String CLERK= "文员批量签收"; } diff --git a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionLoadscanEntity.java b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionLoadscanEntity.java index e3615b542..be74f47ca 100644 --- a/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionLoadscanEntity.java +++ b/blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionLoadscanEntity.java @@ -350,7 +350,7 @@ public class DistributionLoadscanEntity extends TenantEntity { /** - * 是否异常装车 1-否 2-是 + * 是否是零担 1 =零单 */ @ApiModelProperty(value = "是否异常装车 1-否 2-是") private Integer isZero; diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java index 4c99cee01..5f7cf6a04 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java @@ -763,7 +763,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl detailEntities = distributionReservationMapper.selectInventoryListByReservation(distrilbutionloadingscanDTO.getReservationId()); List jsonObjects = new ArrayList<>(); if (Func.isNotEmpty(split)) { + + + List pushList = new ArrayList<>(); + DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId()); for (String s : split) { List inventoryPackage = detailEntities.stream().filter(f -> Func.isNotEmpty(f.getStockPackageCode()) && f.getStockPackageCode().equals(s)).collect(Collectors.toList()); if (Func.isNotEmpty(inventoryPackage) && inventoryPackage.size() == 1) { @@ -938,6 +942,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl().lambda() @@ -1006,6 +1011,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildDistributionSignforVOByStock(deliveryListEntity, pushList, OperatModeConstant.CLERK); + iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser()); + } //维护签收数量 this.maintenanceSignfor(distrilbutionloadingscanDTO.getReservationId()); + return R.status(true); } @@ -1261,6 +1277,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl pushList = new ArrayList<>(); //查询该车次负责司机 for (DistributionReservationZeroPackageEntity reservationZeroPackageEntity : reservationZeroPackageEntities) { //查询订单 @@ -1351,6 +1370,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList,OperatModeConstant.BATCH); + iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser()); + + //查询计划和是否进行装车 return R.success("操作成功"); } @@ -3139,14 +3168,30 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, distributionReservationEntity, pushDatas, OperatModeConstant.BATCH); + NodeFanoutMsg nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, distributionReservationEntity, pushDatas, OperatModeConstant.CLERK); iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser()); @@ -6768,7 +6813,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl orderCodes = new ArrayList<>(); List pushList = new ArrayList<>(); BladeUser user = AuthUtil.getUser(); @@ -6978,7 +7023,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList); + NodeFanoutMsg nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList, OperatModeConstant.SCAN); iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser()); @@ -6986,7 +7031,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl buildDistributionSignforVOByZero(DistributionDeliveryListEntity distributionDeliveryListEntity, List pushList) { + private NodeFanoutMsg buildDistributionSignforVOByZero(DistributionDeliveryListEntity distributionDeliveryListEntity, List pushList,String operatMode) { NodeFanoutMsg nodeFanoutMsg = new NodeFanoutMsg(); nodeFanoutMsg.setBizOperation(BizOperationEnums.ADD); @@ -6996,7 +7041,6 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl>>>>>>> 保存开单推送的已入库包件 {} 保存到新系统", unitNo); - String operationTime = DateUtil.format(new Date(), "yyyy-MM-dd hh:mm:ss"); + String operationTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"); oldSystemWaybillClient.handleDataToPlatform(unitNo, operationTime,warehouseId,1); } } From 58c3945eae6a067f2e81d350a2a57e7b48ee5a50 Mon Sep 17 00:00:00 2001 From: PigBaoBei <2739175034@qq.com> Date: Tue, 17 Dec 2024 18:46:19 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E5=94=AE=E5=90=8E=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E7=A4=BA=E3=80=81=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=AE=8C=E6=AF=95=E5=A2=9E=E5=8A=A0=E6=9C=80=E6=96=B0=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E5=86=85=E5=AE=B9=E5=AD=97=E6=AE=B5=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AftersalesWorkOrderController.java | 11 ++++++++++- .../service/impl/AftersalesWorkOrderServiceImpl.java | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java index 8a0314a18..d21ede5c1 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java @@ -988,6 +988,8 @@ public class AftersalesWorkOrderController extends BladeController { basicTitle.add(head2); List head3 = new ArrayList<>(Arrays.asList("理赔金额")); basicTitle.add(head3); + List head4 = new ArrayList<>(Arrays.asList("最新回复消息")); + basicTitle.add(head4); List exportData = aftersalesWorkOrderService.getBasicExportData(aftersalesWorkOrder); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (!exportData.isEmpty()) { @@ -1026,8 +1028,15 @@ public class AftersalesWorkOrderController extends BladeController { data.add(17, exportDatum.getHeadquartersName()); data.add(18, exportDatum.getResultTypes()); data.add(19, exportDatum.getTotalAmountNum()); + data.add(20, ""); //查询此工单是否存在有责任方如果存在有责任方完善表头 - + AftersalesWorkOrderDTO workOrderDTO = new AftersalesWorkOrderDTO(); + workOrderDTO.setId(exportDatum.getId()); + AftersalesWorkOrderVO trackRecord = aftersalesWorkOrderService.getTrackRecord(workOrderDTO); + if (!Objects.isNull(trackRecord) && !Objects.isNull(trackRecord.getSurveyRecordEntities())){ + String processingResults = trackRecord.getSurveyRecordEntities().get(0).getProcessingResults(); + data.add(20, processingResults); + } if (personResponsibleMap!= null && !Objects.isNull(personResponsibleMap.get(exportDatum.getId()))) { handleResponsibility(basicTitle, personResponsibleMap.get(exportDatum.getId()), data); } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java index 8ac3a5ebb..025899693 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java @@ -2807,10 +2807,10 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl exportData = baseMapper.getBasicExportData(workOrderDTO, ids, warehouseIds); From 59a9cc5016f8b0b13ac9197bd4fa717d39523282 Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Tue, 17 Dec 2024 23:01:43 +0800 Subject: [PATCH 14/14] =?UTF-8?q?feat(all):=20=E9=85=8D=E9=80=81=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 整体优化配送明细报表广播消息 --- .../mapper/BasicdataVehicleMapper.xml | 1 + .../DistributionDeliveryListServiceImpl.java | 45 +++++++++++++++---- .../impl/DistributionSignforServiceImpl.java | 22 ++++----- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataVehicleMapper.xml b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataVehicleMapper.xml index 81d8c2815..57a96e9c9 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataVehicleMapper.xml +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataVehicleMapper.xml @@ -312,6 +312,7 @@ lbv.with_gps withGps, lbv.gps_service_provider gpsServiceProvider, lbv.gps_model gpsModel, + lbv.vehicle_model_id vehicleModelId, ( SELECT group_concat( lbvp.photo_url ) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java index 5f7cf6a04..16b4c55b7 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java @@ -260,7 +260,6 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.time.MonthDay; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; @@ -1369,12 +1368,12 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl buildNodeFanoutMsgByStock(DistributionDeliveryListEntity distributionDeliveryListEntity, DistributionReservationEntity reservationEntity, List ts) { + private NodeFanoutMsg buildNodeFanoutMsgByStock(DistributionDeliveryListEntity distributionDeliveryListEntity, List ts) { NodeFanoutMsg nodeFanoutMsg = new NodeFanoutMsg(); nodeFanoutMsg.setBizOperation(BizOperationEnums.ADD); nodeFanoutMsg.setNode(WorkNodeEnums.DISTRIBUTION_LOADING); @@ -1730,6 +1729,12 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl updatePackageList = new ArrayList<>(); List logList = new ArrayList<>(); List orderCodes = new ArrayList<>(); + + + List kucuns = new ArrayList<>(); + List dingzhis= new ArrayList<>(); + List lingdans = new ArrayList<>(); + for (DistributionReservationStockarticleEntity reservationStockarticleEntity : reservationStockarticleEntityList) { switch (reservationStockarticleEntity.getIsZero()) { case "0": @@ -1792,6 +1797,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildNodeFanoutMsgByPackage(deliveryList, dingzhis); + distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser()); + } + if(Func.isNotEmpty(kucuns)){ + NodeFanoutMsg nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryList, kucuns); + distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser()); + } + if(Func.isNotEmpty(lingdans)){ + NodeFanoutMsg nodeFanoutMsg = buildNodeFanoutMsgByZeroOrder(deliveryList, lingdans); + distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser()); + } + + + + + return Resp.scanSuccess("操作成功", "装车成功"); } @@ -2239,8 +2269,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildNodeFanoutMsgByStock(distributionDeliveryListEntity, reservationEntity, ts); + NodeFanoutMsg nodeFanoutMsg = buildNodeFanoutMsgByStock(distributionDeliveryListEntity, ts); distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser()); String msg = getLoadingMsg(distrilbutionloadingscanDTO); return Resp.scanSuccess("扫描成功", msg); @@ -9394,7 +9423,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryListEntity, reservationEntity2, ts); + NodeFanoutMsg nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryListEntity, ts); distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser()); } break; diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java index 531423d8f..61152e373 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java @@ -16,6 +16,7 @@ */ package com.logpm.distribution.service.impl; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; @@ -3071,11 +3072,12 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, reservationEntity, pushList, OperatModeConstant.BATCH); - iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser()); break; case 2: //零担 @@ -9205,8 +9203,12 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl