From 794662d0019b9da61c4d9ba3422b8ea454dfe03c Mon Sep 17 00:00:00 2001 From: zhaoqiaobo <583671871@qq.com> Date: Wed, 18 Dec 2024 01:17:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(all):=20=E4=B8=AD=E8=BD=AC=E6=88=90?= =?UTF-8?q?=E6=9C=AC=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 干线车次成本分摊时生成中转成本报表 --- .../constant/broadcast/FanoutConstants.java | 4 +- .../listener/mq/ExpenseFanoutListener.java | 116 ++++++++++++++++++ .../listener/mq/expenseFanoutListener.java | 107 ---------------- 3 files changed, 119 insertions(+), 108 deletions(-) create mode 100644 blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/ExpenseFanoutListener.java delete mode 100644 blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/expenseFanoutListener.java diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/broadcast/FanoutConstants.java b/blade-biz-common/src/main/java/org/springblade/common/constant/broadcast/FanoutConstants.java index 808b1b2e9..7c75fd786 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/broadcast/FanoutConstants.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/broadcast/FanoutConstants.java @@ -39,14 +39,16 @@ public abstract class FanoutConstants { } } + /** 干线成本分摊 */ interface COSTSHARE { // 交换机 String EXCHANGE = "fanout.trunkline.costshare" + ModuleNameConstant.DEVAUTH; interface QUEUE { - // 保存基础数据 String REPORT_COSTSHARE = "fanout.trunkline.reportdata.report.costshare" + ModuleNameConstant.DEVAUTH; + // 中转成本入库数据 + String TRANSIT_COST_DETAILS = "fanout.trunkline.reportdata.report.costshare" + ModuleNameConstant.DEVAUTH; } } diff --git a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/ExpenseFanoutListener.java b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/ExpenseFanoutListener.java new file mode 100644 index 000000000..772619256 --- /dev/null +++ b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/ExpenseFanoutListener.java @@ -0,0 +1,116 @@ +package com.logpm.statistics.listener.mq; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.logpm.statistics.entity.ExpenseWarehouseTransitEntity; +import com.logpm.statistics.service.IExpenseWarehouseTransitService; +import com.logpm.trunkline.entity.TrunklineCarsLoadEntity; +import com.logpm.trunkline.entity.TrunklineCostShareRecordEntity; +import com.rabbitmq.client.Channel; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springblade.common.constant.broadcast.FanoutConstants; +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.amqp.support.AmqpHeaders; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 自提任务生成明细报表 + * + * @author zhaoqiaobo + * @create 2024-03-18 0:02 + */ +@Slf4j +@Component +@AllArgsConstructor +public class ExpenseFanoutListener { + + private final IExpenseWarehouseTransitService transitService; + + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.trunkline.COSTSHARE.QUEUE.TRANSIT_COST_DETAILS, durable = "true"), + exchange = @Exchange(name = FanoutConstants.trunkline.COSTSHARE.EXCHANGE, type = ExchangeTypes.FANOUT) + ), ackMode = "MANUAL") + public void transitCostDetails(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + log.info("中转成本出入库报表: {}", msg); + try { + NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); + Object main = bean.getMain(); + JSONObject entries = JSONUtil.parseObj(main); + TrunklineCarsLoadEntity vo = JSONUtil.toBean(entries, TrunklineCarsLoadEntity.class); + JSONArray details = entries.getJSONArray("details"); + List list = JSONUtil.toList(details, TrunklineCostShareRecordEntity.class); + List entities = new ArrayList<>(); + for (TrunklineCostShareRecordEntity trunklineCostShareRecordEntity : list) { + if (StrUtil.isEmpty(trunklineCostShareRecordEntity.getWaybillStartWarehouseName()) + || StrUtil.isEmpty(trunklineCostShareRecordEntity.getWaybillEndWarehouseName())) { + continue; + } + String packageType = trunklineCostShareRecordEntity.getProductType() == 1 ? "订制品" : "零担"; + // 卸车仓库 != 运单始发仓 && 卸车仓库 != 运单目的仓 + if (StrUtil.isNotEmpty(trunklineCostShareRecordEntity.getRealUnloadWarehouseName())) { + if (!trunklineCostShareRecordEntity.getRealUnloadWarehouseName().equals(trunklineCostShareRecordEntity.getWaybillStartWarehouseName()) + && !trunklineCostShareRecordEntity.getRealUnloadWarehouseName().equals(trunklineCostShareRecordEntity.getWaybillEndWarehouseName())) { + String workType = "入库"; + ExpenseWarehouseTransitEntity entity = buildEntiry(trunklineCostShareRecordEntity, bean, workType, packageType); + entities.add(entity); + } + } + // 卸车仓库 != 运单始发仓 && 卸车仓库 != 运单目的仓 + if (StrUtil.isNotEmpty(trunklineCostShareRecordEntity.getLoadingWarehouseName())) { + if (!trunklineCostShareRecordEntity.getLoadingWarehouseName().equals(trunklineCostShareRecordEntity.getWaybillStartWarehouseName()) + && !trunklineCostShareRecordEntity.getLoadingWarehouseName().equals(trunklineCostShareRecordEntity.getWaybillEndWarehouseName())) { + String workType = "出库"; + ExpenseWarehouseTransitEntity entity = buildEntiry(trunklineCostShareRecordEntity, bean, workType, packageType); + entities.add(entity); + } + } + } + if (CollUtil.isNotEmpty(entities)) { + transitService.saveBatch(entities); + } + } catch (Exception e) { + log.error("中转成本出入库报表失败: {}", e.getMessage()); + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static @NotNull ExpenseWarehouseTransitEntity buildEntiry(TrunklineCostShareRecordEntity trunklineCostShareRecordEntity, NodeFanoutMsg bean, String workType, String packageType) { + ExpenseWarehouseTransitEntity entity = new ExpenseWarehouseTransitEntity(); + // entity.setTaskTime(new Date()); + entity.setConfirmAllocationYear(DateUtil.year(bean.getOperatorTime())); + entity.setConfirmAllocationMonth(DateUtil.month(bean.getOperatorTime())); + entity.setConfirmAllocationDay(DateUtil.dayOfMonth(bean.getOperatorTime())); + entity.setConfirmAllocationTime(bean.getOperatorTime()); + entity.setTransitWarehouseName(trunklineCostShareRecordEntity.getRealUnloadWarehouseName()); + entity.setDestinationWarehouseName(trunklineCostShareRecordEntity.getWaybillEndWarehouseName()); + entity.setWorkType(workType); + entity.setPackageType(packageType); + entity.setPackageCode(trunklineCostShareRecordEntity.getProductCode()); + entity.setOrderCode(trunklineCostShareRecordEntity.getOrderCode()); + entity.setWaybillNumber(trunklineCostShareRecordEntity.getWaybillNo()); + entity.setTrainNumber(trunklineCostShareRecordEntity.getCarsNo()); + entity.setNum(trunklineCostShareRecordEntity.getNum()); + return entity; + } + +} diff --git a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/expenseFanoutListener.java b/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/expenseFanoutListener.java deleted file mode 100644 index 601d8c096..000000000 --- a/blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/listener/mq/expenseFanoutListener.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.logpm.statistics.listener.mq; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * 自提任务生成明细报表 - * - * @author zhaoqiaobo - * @create 2024-03-18 0:02 - */ -@Slf4j -@Component -@AllArgsConstructor -public class expenseFanoutListener { - - // @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) - // public void buildReport(String msg) { - // log.info("自提任务生成明细报表: {}", msg); - // if (StrUtil.isEmpty(msg)) { - // return; - // } - // NodeFanoutMsg bean = JSONUtil.toBean(msg, NodeFanoutMsg.class); - // Object main = bean.getMain(); - // JSONObject entries = JSONUtil.parseObj(main); - // DeliveryOfPickupPlanVO vo = JSONUtil.toBean(entries, DeliveryOfPickupPlanVO.class); - // 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() - // .warehouseName(bean.getWarehouse()) - // .warehouseId(warehouseId) - // .orderPackageCode(detail.getPackageCode()) - // .planTrainNumber(vo.getPickupBatch()) - // .deliveryTime(vo.getPickUpTime()) - // .deliveryType("自提") - // .vehicleName(vo.getPickUpPlate()) - // .bizCode(vo.getPickupBatch()) - // .driverName(vo.getConsignee()) - // .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 (ObjectUtil.equals(detail.getPackageType(), PackageTypeEnums.LTL)) { - // qualityDeliverEntity.setOrderCode(detail.getOrderCode()); - // qualityDeliverEntity.setCategory(detail.getProductName()); - // qualityDeliverEntity.setConditions(2); - // sendReport(bizOperation, qualityDeliverEntity,BizOperationEnums.MODIFY); - // } - // 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); - // 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); - // } - // } - // - // } - // } - // } - - // 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()); - // } - // } - -}