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 082c22d58..2f205cd87 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 @@ -16,6 +16,7 @@ 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.broadcast.FanoutConstants; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.enums.BizOperationEnums; import org.springblade.common.enums.PackageTypeEnums; @@ -74,7 +75,7 @@ public class PlanReportListener implements ReportService { Map> cmpMap = new HashMap<>(); Map> ltlMap = new HashMap<>(); Map> invMap = new HashMap<>(); - if(CollUtil.isNotEmpty(reservationCodeSet)){ + if (CollUtil.isNotEmpty(reservationCodeSet)) { List qualityDeliverEntities = qualityDeliverService.list(Wrappers.lambdaQuery().in(QualityDeliverEntity::getPlanReservationCode, reservationCodeSet)); if (CollUtil.isNotEmpty(qualityDeliverEntities)) { cmpMap = qualityDeliverEntities.stream() @@ -86,6 +87,15 @@ public class PlanReportListener implements ReportService { invMap = qualityDeliverEntities.stream() .filter(item -> NumberUtil.equals(item.getConditions(), PackageTypeEnums.INV.getCode())) .collect(Collectors.groupingBy(item -> item.getPlanReservationCode() + item.getMallName() + item.getMaterielCode())); + } else { + // 没有查询到,延迟30秒重新推送 + factoryDataClient.sendMessage(SendMsg.builder() + .exchange(FanoutConstants.distribution.DeliveryAndPlan.EXCHANGE) + .routingKey(null) + .message(msg) + .delay(30000) + .build()); + return; } } for (ReservationVO reservationVO : reservationVOList) { @@ -161,7 +171,7 @@ public class PlanReportListener implements ReportService { // 系统中有的包件在当前不存在,则删除 Set cmpSet = details.stream() .filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)) - .map(i-> reservationCode + i.getPackageCode()).collect(Collectors.toSet()); + .map(i -> reservationCode + i.getPackageCode()).collect(Collectors.toSet()); for (Map.Entry> entry : cmpMap.entrySet()) { String key = entry.getKey(); if (!cmpSet.contains(key)) { @@ -197,11 +207,16 @@ public class PlanReportListener implements ReportService { .operation(operationEnums) .node(WorkNodeEnums.PLAN_DELIVERY.getValue()) .build(); + String exchange = ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE; + String routKey = ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY; + if (operationEnums.equals(BizOperationEnums.ADD)) { + exchange = ReportConstants.REPORT_QUALITY_DELIVER_ADD_EXCHANGE; + routKey = ReportConstants.REPORT_QUALITY_DELIVER_ADD_ROUTINGKEY; + } factoryDataClient.sendMessage(SendMsg.builder() - .exchange(ReportConstants.REPORT_QUALITY_DELIVER_EXCHANGE) - .routingKey(ReportConstants.REPORT_QUALITY_DELIVER_ROUTINGKEY) + .exchange(exchange) + .routingKey(routKey) .message(JSONUtil.toJsonStr(dto)) - .delay(3000) .build()); } diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverAddListener.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverAddListener.java new file mode 100644 index 000000000..febe14ba9 --- /dev/null +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverAddListener.java @@ -0,0 +1,417 @@ +package com.logpm.distribution.receiver.report; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; +import com.logpm.basicdata.feign.IBasicdataFactoryCategoryClient; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; +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; +import com.logpm.warehouse.entity.WarehouseWayBillDetail; +import com.logpm.warehouse.entity.WarehouseWaybillEntity; +import com.logpm.warehouse.feign.IWarehouseWaybillClient; +import com.logpm.warehouse.feign.IWarehouseWaybillDetailClient; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.Nullable; +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.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +/** + * 配送明细基础表处理类 + * + * @author zhaoqiaobo + * @create 2024-03-18 0:02 + */ +@Slf4j +@Component +@AllArgsConstructor +public class QualityDeliverAddListener implements ReportService { + + @Resource + private IQualityDeliverService qualityDeliverService; + + @Resource + private IBasicdataWarehouseClient warehouseClient; + + @Resource + private IDistributionParcelListService parcelListService; + + @Resource + private IDistributionStockArticleService stockArticleService; + + @Resource + private IWarehouseWaybillClient warehouseWaybillClient; + + @Resource + private IDistributionStockListService stockListService; + + @Resource + private IDistributionStockListInfoService stockListInfoService; + + @Resource + private IBasicdataFactoryCategoryClient factoryCategoryClient; + + @Resource + private ITrunklineAdvanceDetailClient advanceDetailClient; + + @Resource + private IWarehouseWaybillDetailClient waybillDetailClient; + + @Resource + private BladeRedis redisCache; + @Resource + private DistributionProperties destinationProperties; + + @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); + if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.ADD)) { + // 查询不存在时更新,存在时修改 + saveOrUpdate(null, qualityDeliverEntity); + } + } + + /** + * 构建库存品查询Wrapper + * + * @param qualityDeliverEntity + * @Return com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper + * @Author zqb 2024/9/10 + **/ + private static @Nullable LambdaQueryWrapper buildInvWrapper(QualityDeliverEntity qualityDeliverEntity) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .lt(QualityDeliverEntity::getBizStatus, 110); + if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) { + // 库存品更新优先按id更新 + wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId()); + } else { + if (StrUtil.isNotEmpty(qualityDeliverEntity.getOrderPackageCode())) { + // 没有id,按包条码更新 + wrapper.eq(QualityDeliverEntity::getOrderPackageCode, qualityDeliverEntity.getOrderPackageCode()); + } else { + if (StrUtil.isEmpty(qualityDeliverEntity.getMallName())) { + // 没有id,没有包条码。没有商场,不处理。 + return null; + } else { + // 否则加上商场过滤 + wrapper.eq(QualityDeliverEntity::getMallName, qualityDeliverEntity.getMallName()); + } + if (StrUtil.isEmpty(qualityDeliverEntity.getMaterielCode()) && StrUtil.isEmpty(qualityDeliverEntity.getMaterielName())) { + // 没有id,没有包条码,没有商场,没有物料,不处理。 + return null; + } + if (StrUtil.isNotEmpty(qualityDeliverEntity.getMaterielCode())) { + // 优先按物料编码更新 + wrapper.eq(QualityDeliverEntity::getMaterielCode, qualityDeliverEntity.getMaterielCode()); + } else { + // 按物料名称更新 + wrapper.eq(QualityDeliverEntity::getMaterielName, qualityDeliverEntity.getMaterielName()); + } + } + if (StrUtil.isNotEmpty(qualityDeliverEntity.getBizCode())) { + // 有预约单号时加上预约单号过滤:存在同一个库存品在多个预约单中,只根据库存品本身的信息无法查询出对应的数据的情况。 + wrapper.eq(QualityDeliverEntity::getBizCode, qualityDeliverEntity.getBizCode()); + } + } + return wrapper; + } + + /** + * 修改或者新增 + * + * @param wrapper + * @param qualityDeliverEntity + * @Return void + * @Author zqb 2024/9/10 + **/ + private void saveOrUpdate(LambdaQueryWrapper wrapper, QualityDeliverEntity qualityDeliverEntity) { + QualityDeliverEntity entity = null; + if (ObjectUtil.isNotEmpty(wrapper)) { + wrapper.select(QualityDeliverEntity::getId); + entity = qualityDeliverService.getOne(wrapper); + } + if (ObjectUtil.isNotEmpty(entity)) { + // 修改 + qualityDeliverEntity.setId(entity.getId()); + qualityDeliverService.updateById(qualityDeliverEntity); + } else { + // 新增 + // 初始化基础数据 + initBasicData(qualityDeliverEntity); + qualityDeliverService.save(qualityDeliverEntity); + } + } + + private void initBasicData(QualityDeliverEntity qualityDeliverEntity) { + // 仓库信息 + warehouseInfo(qualityDeliverEntity); + Integer conditions = qualityDeliverEntity.getConditions(); + if (ObjectUtil.equals(PackageTypeEnums.CMP.getCode(), conditions)) { + // 订制品 + // 构建订制品基础信息 + DistributionParcelListEntity parcelListEntity = getDistributionParcelListEntity(qualityDeliverEntity.getOrderPackageCode(), qualityDeliverEntity.getWarehouseId()); + buildCmpBasicInfo(qualityDeliverEntity, parcelListEntity); + } + if (ObjectUtil.equals(PackageTypeEnums.INV.getCode(), conditions)) { + // 库存品 + buildInvBasicInfo(qualityDeliverEntity); + } + if (ObjectUtil.equals(PackageTypeEnums.LTL.getCode(), conditions)) { + // 零担 + WarehouseWayBillDetail wayBillDetail = waybillDetailClient.findENtityByCodeAndName(qualityDeliverEntity.getOrderCode(), qualityDeliverEntity.getCategory()); + if (ObjectUtil.isNotEmpty(wayBillDetail)) { + qualityDeliverEntity.setCostCategoryId(wayBillDetail.getProductId()); + qualityDeliverEntity.setRevenueCategoryId(wayBillDetail.getProductId()); + qualityDeliverEntity.setCostCategory(wayBillDetail.getProductName()); + qualityDeliverEntity.setRevenueCategory(wayBillDetail.getProductName()); + } + DistributionParcelListEntity parcelListEntity = parcelListService.findByOrderCodeAndCategory(qualityDeliverEntity.getOrderCode(), qualityDeliverEntity.getCategory(), qualityDeliverEntity.getWarehouseId()); + buildCmpBasicInfo(qualityDeliverEntity, parcelListEntity); + // buildOrderInfo(qualityDeliverEntity, qualityDeliverEntity.getWarehouseId(), qualityDeliverEntity.getOrderCode()); + } + } + + private DistributionParcelListEntity getDistributionParcelListEntity(String orderPackageCode, Long warehouseId) { + DistributionParcelListEntity parcelListEntity = parcelListService.selectByOrderPackageCode(orderPackageCode, warehouseId); + return parcelListEntity; + } + + private void buildInvBasicInfo(QualityDeliverEntity qualityDeliverEntity) { + String materielName = qualityDeliverEntity.getMaterielName(); + DistributionStockListEntity stockListEntity = new DistributionStockListEntity(); + stockListEntity.setIncomingBatch(qualityDeliverEntity.getIncomingBatch()); + stockListEntity.setMallName(qualityDeliverEntity.getMallName()); + stockListEntity.setCargoNumber((qualityDeliverEntity.getMaterielCode())); + stockListEntity.setDescriptionGoods(materielName); + stockListEntity.setWarehouseId(qualityDeliverEntity.getWarehouseId()); + DistributionStockListEntity stockList = stockListService.findStockListByAttrAndWarehouseId(stockListEntity); + if (ObjectUtil.isNotEmpty(stockList)) { + String brandName = stockList.getBrandName(); + String sourceType = stockList.getSourceType(); + if (StrUtil.equals(sourceType, "1")) { + // 定制品转的库存品先查出包条码 + 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()); + qualityDeliverEntity.setAssignedCustomerId(Convert.toStr(stockList.getMarketId())); + qualityDeliverEntity.setAssignedCustomer(stockList.getMarketName()); + qualityDeliverEntity.setStoreCode(stockList.getStoreCode()); + qualityDeliverEntity.setStoreName(stockList.getStoreName()); + qualityDeliverEntity.setEndWarehouseInTime(stockList.getWarehousingTime()); + } + // 品类 + // if (StrUtil.isNotEmpty(materielName) && StrUtil.isNotEmpty(brandName)) { + // BasicdataFactoryCategoryEntity factoryCategoryEntity = new BasicdataFactoryCategoryEntity(); + // factoryCategoryEntity.setMaterielName(materielName); + // factoryCategoryEntity.setBrand(brandName); + // factoryCategoryEntity.setType(2); + // BasicdataFactoryCategoryEntity categoryEntity = factoryCategoryClient.findEntityByBrandAndMaterielName(factoryCategoryEntity); + // factoryCategoryEntity.setType(1); + // BasicdataFactoryCategoryEntity categoryEntity1 = factoryCategoryClient.findEntityByBrandAndMaterielName(factoryCategoryEntity); + // if (ObjectUtil.isNotEmpty(categoryEntity)) { + // qualityDeliverEntity.setCostCategoryId(categoryEntity.getCategoryId()); + // qualityDeliverEntity.setCostCategory(categoryEntity.getCategory()); + // } + // if (ObjectUtil.isNotEmpty(categoryEntity1)) { + // qualityDeliverEntity.setRevenueCategory(categoryEntity.getCategory()); + // qualityDeliverEntity.setRevenueCategoryId(categoryEntity1.getCategoryId()); + // } + // TODO 从入库单上查询入库时间 + // } + } + + } + + private void buildCmpBasicInfo(QualityDeliverEntity qualityDeliverEntity, DistributionParcelListEntity parcelListEntity) { + if (ObjectUtil.isNotEmpty(parcelListEntity)) { + // 品牌 + qualityDeliverEntity.setBrandName(parcelListEntity.getBrandName()); + // 商场id + // qualityDeliverEntity.setMallId(parcelListEntity.getMallId()); + // 订制品的物料从包件上取 + if (ObjectUtil.equals(PackageTypeEnums.CMP.getCode(), qualityDeliverEntity.getConditions())) { + // 物料名称 + qualityDeliverEntity.setMaterielName(parcelListEntity.getMaterialName()); + // 物料编码 + qualityDeliverEntity.setMaterielCode(parcelListEntity.getMaterialCode()); + } + // 包条码 + if (StrUtil.isNotEmpty(parcelListEntity.getOrderPackageCode())) { + qualityDeliverEntity.setOrderPackageCode(parcelListEntity.getOrderPackageCode()); + } + // 订单号 + qualityDeliverEntity.setOrderCode(parcelListEntity.getOrderCode()); + // 工厂车次号 + qualityDeliverEntity.setTrainNumber(parcelListEntity.getTrainNumber()); + // 一级品 + qualityDeliverEntity.setFirstsProduct(parcelListEntity.getFirsts()); + // 二级品 + qualityDeliverEntity.setSecondProduct(parcelListEntity.getSecond()); + // 三级品 + qualityDeliverEntity.setThirdProduct(parcelListEntity.getThirdProduct()); + // 体积 + qualityDeliverEntity.setVolume(parcelListEntity.getVolume()); + // 重量 + qualityDeliverEntity.setWeight(parcelListEntity.getWeight()); + // 运单号 + String waybillNumber = parcelListEntity.getWaybillNumber(); + qualityDeliverEntity.setWaybillNumber(parcelListEntity.getWaybillNumber()); + // 始发仓 + qualityDeliverEntity.setBeginWarehouseName(parcelListEntity.getSendWarehouseName()); + // 当前仓入库时间 + qualityDeliverEntity.setEndWarehouseInTime(parcelListEntity.getWarehouseEntryTimeEnd()); + // 构建运单相关信息 + buildWaybillInfo(qualityDeliverEntity, waybillNumber); + } + // 暂存单查询结算品类 + // TrunklineAdvanceDetailEntity advanceDetailEntity = advanceDetailClient.findEntityByOrderPackageCode(qualityDeliverEntity.getOrderPackageCode()); + // if (ObjectUtil.isNotEmpty(advanceDetailEntity)) { + // qualityDeliverEntity.setCostCategoryId(advanceDetailEntity.getCostCategoryId()); + // qualityDeliverEntity.setCostCategory(advanceDetailEntity.getCostCategoryName()); + // qualityDeliverEntity.setRevenueCategoryId(advanceDetailEntity.getIncomeCategoryId()); + // qualityDeliverEntity.setRevenueCategory(advanceDetailEntity.getIncomeCategoryName()); + // } + // 构建订单相关信息 + buildOrderInfo(qualityDeliverEntity, qualityDeliverEntity.getWarehouseId(), qualityDeliverEntity.getOrderCode()); + } + + 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()); + // 经销商信息 + qualityDeliverEntity.setDealerName(stockArticleEntity.getDealerName()); + qualityDeliverEntity.setDealerCode(stockArticleEntity.getDealerCode()); + // 门店信息 + qualityDeliverEntity.setStoreCode(stockArticleEntity.getStoreCode()); + qualityDeliverEntity.setStoreName(stockArticleEntity.getStoreName()); + // 品牌 + qualityDeliverEntity.setBrandName(stockArticleEntity.getBrand()); + } + } + + private DistributionStockArticleEntity getDistributionStockArticleEntity(Long warehouseId, String orderCode) { + String key = "report:qualityDeliver:stockArticle:" + warehouseId + "_" + orderCode; + String obj = redisCache.get(key); + if (StrUtil.isNotEmpty(obj)) { + return JSONUtil.toBean(obj, DistributionStockArticleEntity.class); + } + DistributionStockArticleEntity stockArticleEntity = stockArticleService.findStockArticleByOrderCodeAndWarehouseId(orderCode, warehouseId); + if (ObjectUtil.isNotEmpty(stockArticleEntity)) { + redisCache.setEx(key, JSONUtil.toJsonStr(stockArticleEntity), 60 * 60L + RandomUtil.randomInt(600)); + return stockArticleEntity; + } + return null; + } + + private void buildWaybillInfo(QualityDeliverEntity qualityDeliverEntity, String waybillNumber) { + if (StrUtil.isNotEmpty(waybillNumber)) { + WarehouseWaybillEntity byWaybillNo = getWarehouseWaybillEntity(waybillNumber); + if (ObjectUtil.isNotEmpty(byWaybillNo)) { + qualityDeliverEntity.setOpenOrderTime(byWaybillNo.getDocumentMakingTime()); + // 运单发货信息 + qualityDeliverEntity.setShipperUnitId(byWaybillNo.getShipperId()); + qualityDeliverEntity.setShipperUnit(byWaybillNo.getShipper()); + qualityDeliverEntity.setShipperPerson(byWaybillNo.getShipperName()); + qualityDeliverEntity.setShipperMobile(byWaybillNo.getShipperMobile()); + qualityDeliverEntity.setShipperAddress(byWaybillNo.getShipperAddress()); + // 运单收货信息 + qualityDeliverEntity.setConsigneeUnitId(byWaybillNo.getConsigneeId()); + qualityDeliverEntity.setConsigneeUnit(byWaybillNo.getConsignee()); + qualityDeliverEntity.setConsigneePerson(byWaybillNo.getConsigneeName()); + qualityDeliverEntity.setConsigneeMobile(byWaybillNo.getConsigneeMobile()); + qualityDeliverEntity.setConsigneeAddress(byWaybillNo.getConsigneeAddress()); + + qualityDeliverEntity.setAssignedCustomerId(Convert.toStr(byWaybillNo.getConsigneeId())); + qualityDeliverEntity.setAssignedCustomer(byWaybillNo.getConsignee()); + + } + } + } + + private WarehouseWaybillEntity getWarehouseWaybillEntity(String waybillNumber) { + String key = "report:qualityDeliver:waybill:" + waybillNumber; + String obj = redisCache.get(key); + if (StrUtil.isNotEmpty(obj)) { + return JSONUtil.toBean(obj, WarehouseWaybillEntity.class); + } + WarehouseWaybillEntity byWaybillNo = warehouseWaybillClient.findByWaybillNo(waybillNumber); + if (ObjectUtil.isNotEmpty(byWaybillNo)) { + redisCache.setEx(key, JSONUtil.toJsonStr(byWaybillNo), 60 * 60L + RandomUtil.randomInt(600)); + return byWaybillNo; + } + return null; + } + + private void warehouseInfo(QualityDeliverEntity qualityDeliverEntity) { + BasicdataWarehouseEntity warehouseEntity = getBasicdataWarehouseEntities(qualityDeliverEntity.getWarehouseId()); + if (ObjectUtil.isNotEmpty(warehouseEntity)) { + // 事业线 + qualityDeliverEntity.setBusinessUnit(warehouseEntity.getBusinessLine()); + qualityDeliverEntity.setWarehousePosition(StrUtil.concat(true, Convert.toStr(warehouseEntity.getLongitude()), ",", Convert.toStr(warehouseEntity.getLatitude()))); + } + } + + public BasicdataWarehouseEntity getBasicdataWarehouseEntities(Long warehouseId) { + String key = "report:qualityDeliver:warehouse:" + warehouseId; + String obj = redisCache.get(key); + if (StrUtil.isNotEmpty(obj)) { + return JSONUtil.toBean(obj, BasicdataWarehouseEntity.class); + } + List warehouseEntities = warehouseClient.findWarehousesByIds(Arrays.asList(warehouseId)); + if (CollUtil.isNotEmpty(warehouseEntities)) { + redisCache.setEx(key, JSONUtil.toJsonStr(warehouseEntities.get(0)), 60 * 60L + RandomUtil.randomInt(600)); + return warehouseEntities.get(0); + } + return null; + } + +} 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 1505d4851..bb14b53b0 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 @@ -97,39 +97,6 @@ public class QualityDeliverListener implements ReportService { Integer conditions = qualityDeliverEntity.getConditions(); if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.MODIFY)) { 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)) { // 查询不存在时更新,存在时修改 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 9be8a0fbd..74806f7d4 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 @@ -8,6 +8,7 @@ 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.factorydata.FactoryDataConstants; import org.springblade.common.constant.report.ReportConstants; import org.springblade.common.model.workNode.FinishDistributionTrainVO; import org.springframework.amqp.core.ExchangeTypes; @@ -63,6 +64,7 @@ public class ReportListener { 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) @@ -89,6 +91,7 @@ public class ReportListener { 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) @@ -115,6 +118,7 @@ public class ReportListener { 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) @@ -141,6 +145,7 @@ public class ReportListener { 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) @@ -167,6 +172,7 @@ public class ReportListener { 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) @@ -194,6 +200,7 @@ public class ReportListener { 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) @@ -220,6 +227,7 @@ public class ReportListener { 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) @@ -247,6 +255,35 @@ public class ReportListener { } } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = FanoutConstants.distribution.DeliveryAndPlan.QUEUE.REPORT, durable = "true"), + exchange = @Exchange(name = FanoutConstants.distribution.DeliveryAndPlan.EXCHANGE_DELAY, + type = ExchangeTypes.FANOUT, + delayed = FactoryDataConstants.Mq.DELAYED) + ), ackMode = "MANUAL") + public void planReportDelayListener(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) @@ -381,6 +418,7 @@ public class ReportListener { 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), @@ -409,6 +447,34 @@ public class ReportListener { } } + @RabbitListener(bindings = @QueueBinding( + value = @Queue(name = ReportConstants.REPORT_QUALITY_DELIVER_ADD_QUEUE, durable = "true"), + exchange = @Exchange(name = ReportConstants.REPORT_QUALITY_DELIVER_ADD_EXCHANGE, type = ExchangeTypes.TOPIC), + key = ReportConstants.REPORT_QUALITY_DELIVER_ADD_ROUTINGKEY + ), ackMode = "MANUAL") + public void qualityDeliverAddListener(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) { + Boolean flag = Boolean.TRUE; + if (!destinationProperties.getReport().getQualityDeliver()) { + flag = Boolean.FALSE; + } + log.info("配送明细基础表Add: {}", msg); + if (StrUtil.isEmpty(msg)) { + flag = Boolean.FALSE; + } + if (flag) { + try { + selectReportService(QualityDeliverAddListener.class).buildReport(msg); + } catch (Exception e) { + log.error("配送明细基础表Add失败: {}", e.getMessage()); + } + } + try { + channel.basicAck(tag, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + @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), 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 2079f89cf..aa8eb906d 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 @@ -25,6 +25,7 @@ import org.springblade.core.tool.utils.BeanUtil; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;