Browse Source

Merge remote-tracking branch 'origin/master'

master
pref_mail@163.com 4 months ago
parent
commit
cca5701299
  1. 5
      blade-biz-common/src/main/java/org/springblade/common/constant/OperatModeConstant.java
  2. 15
      blade-biz-common/src/main/java/org/springblade/common/constant/report/ReportConstants.java
  3. 5
      blade-biz-common/src/main/java/org/springblade/common/model/workNode/PickUpByScanVO.java
  4. 3
      blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataVehicleEntity.java
  5. 18
      blade-service-api/logpm-data-sharing-api/pom.xml
  6. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java
  7. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java
  8. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java
  9. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java
  10. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java
  11. 0
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java
  12. 26
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WarehouseNumberVO.java
  13. 137
      blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/WaybillInfoVO.java
  14. 2
      blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/DistributionLoadscanEntity.java
  15. 10
      blade-service-api/logpm-distribution-api/src/main/java/com/logpm/distribution/entity/QualityDeliverEntity.java
  16. 3
      blade-service-api/pom.xml
  17. 11
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java
  18. 4
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java
  19. 9
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/controller/BasicdataTrayController.java
  20. 1
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java
  21. 15
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml
  22. 1
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataVehicleMapper.xml
  23. 8
      blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java
  24. 11
      blade-service/logpm-data-sharing/pom.xml
  25. 33
      blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/config/InterceptorAdapterConfig.java
  26. 13
      blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/LogpmDataSearchController.java
  27. 3
      blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/controller/MerchantController.java
  28. 100
      blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/interceptor/LocalServerLoginAccountsInterceptor.java
  29. 167
      blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/service/impl/LogpmDataSearchServiceImpl.java
  30. 10
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/api/DistributionStockupAppController.java
  31. 2
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/dto/ReportQualityDeliverDTO.java
  32. 25
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/job/ExpenseJob.java
  33. 32
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionDeliveryListMapper.java
  34. 2
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml
  35. 6
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml
  36. 10
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.java
  37. 41
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml
  38. 181
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.java
  39. 77
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.java
  40. 80
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillSignforReportListener.java
  41. 79
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/CarStartReportListener.java
  42. 99
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ConsigneeArriveReportListener.java
  43. 52
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/DeliverFinishReportListener.java
  44. 92
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/LoadingReportListener.java
  45. 164
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/PlanReportListener.java
  46. 127
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/QualityDeliverListener.java
  47. 75
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReViewReportListener.java
  48. 445
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java
  49. 11
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportService.java
  50. 181
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReservationPlanReportListener.java
  51. 24
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReturnWarehouseReportListener.java
  52. 77
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/SignforReportListener.java
  53. 107
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/StockReportListener.java
  54. 10
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java
  55. 71
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionDeliveryListServiceImpl.java
  56. 2
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionNodeWorkServiceImpl.java
  57. 2
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java
  58. 83
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionSignforServiceImpl.java
  59. 17
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java
  60. 55
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistrilbutionBillLadingServiceImpl.java
  61. 40
      blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java
  62. 3
      blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/mq/FactoryOrderListener.java
  63. 4
      blade-service/logpm-factory-data/logpm-factory-data-mwh/src/main/java/com/logpm/factorydata/mwh/service/impl/DeliveryNoteServiceImpl.java
  64. 2
      blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/feign/OldWaybillClient.java
  65. 9
      blade-service/logpm-report/src/main/java/com/logpm/report/dto/ReportIncomingDTO.java
  66. 198
      blade-service/logpm-report/src/main/java/com/logpm/report/mapper/ReportIncomingMapper.xml
  67. 4
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml
  68. 3
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsBalanceOrderInfoServiceImpl.java
  69. 3
      blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/service/impl/StatisticsReconciliationOrderInfoServiceImpl.java
  70. 4
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/OpenOrderServiceImpl.java
  71. 27
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java
  72. 27
      blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineWaybillPackageServiceImpl.java
  73. 1
      blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/feign/WarehouseWaybillClient.java
  74. 1
      blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/mapper/WarehouseWaybillMapper.xml
  75. 46
      blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/receiver/ErrorQueueHandler.java

5
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= "文员批量签收";
}

15
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;
}

5
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;
/**
* 配送时间
*/

3
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;
}

18
blade-service-api/logpm-data-sharing-api/pom.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springblade</groupId>
<artifactId>blade-service-api</artifactId>
<version>3.2.0.RELEASE</version>
</parent>
<groupId>org.springblade</groupId>
<artifactId>logpm-data-sharing-api</artifactId>
<version>3.2.0.RELEASE</version>
</project>

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/dto/MerchantOrderDTO.java

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderPackageVO.java

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderVO.java

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantOrderZeroVO.java

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantPackageVO.java

0
blade-service/logpm-data-sharing/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java → blade-service-api/logpm-data-sharing-api/src/main/java/com/logpm/datasharing/vo/MerchantZeroDispatchVO.java

26
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
* 仓库数据
* <li>始发仓</li>
* <li>中转仓</li>
* <li>目的仓</li>
*/
@Data
public class WarehouseNumberVO {
/**
* 仓库名称
*/
private String warehouseName;
/**
* 数量
*/
private Integer number;
}

137
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<WarehouseNumberVO> middleWarehouseNumber;
/**
* 目的仓数量信息
*/
@ApiModelProperty(value = "目的仓数量信息")
private WarehouseNumberVO endWarehouseNumber;
/**
* 配送数量
*/
@ApiModelProperty(value = "配送数量")
private Integer deliveryNum ;
/**
* 签收数量
*/
@ApiModelProperty(value = "签收数量")
private Integer signNum;
}

2
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;

10
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;
/**
* 上楼层数
*/
@ -579,6 +584,11 @@ public class QualityDeliverEntity extends TenantEntity {
*/
@ApiModelProperty(value = "复核人")
private String reviewUserName;
/**
* 复核数量
*/
@ApiModelProperty(value = "复核数量")
private Integer reviewNum;
/**
* 复核时间 复核时间=回库时间
*/

3
blade-service-api/pom.xml

@ -47,6 +47,9 @@
<!--商家端 -->
<module>logpm-business-api</module>
<!--数据开放模块 -->
<module>logpm-data-sharing-api</module>
</modules>
<dependencies>

11
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<String> head3 = new ArrayList<>(Arrays.asList("理赔金额"));
basicTitle.add(head3);
List<String> head4 = new ArrayList<>(Arrays.asList("最新回复消息"));
basicTitle.add(head4);
List<AftersalesWorkOrderVO> 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);
}

4
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java

@ -2807,10 +2807,10 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl<AftersalesWo
if (ObjectUtil.isNotEmpty(workOrderDTO.getStartCreateTime()) || ObjectUtil.isNotEmpty(workOrderDTO.getEndCreateTime())) {
boolean withinOneMonth = DateUtil.between(workOrderDTO.getStartCreateTime(), workOrderDTO.getEndCreateTime(), DateUnit.DAY) <= 60;
if (!withinOneMonth) {
throw new ServiceException("创建日期不能超过两个月");
throw new ServiceException("日期范伟不能超过两个月");
}
} else {
throw new ServiceException("导出时配送日期必填");
throw new ServiceException("导出时日期必填");
}
List<AftersalesWorkOrderVO> exportData = baseMapper.getBasicExportData(workOrderDTO, ids, warehouseIds);

9
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 ;
}
/**

1
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.java

@ -87,4 +87,5 @@ public interface BasicdataTrayMapper extends BaseMapper<BasicdataTrayEntity> {
* 托盘 零担历史记录
*/
WarehouseTrayQRCode getTray(@Param("id") Long id);
List<WarehouseTrayQRCode> getTrayByIds(@Param("ids") List<Long> ids);
}

15
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/mapper/BasicdataTrayMapper.xml

@ -421,6 +421,21 @@
<select id="getTray" resultType="com.logpm.warehouse.vo.WarehouseTrayQRCode">
SELECT lwt.pallet_code trayCode ,lww.name warehouseName,lwt.pallet_name from logpm_warehouse_tray lwt LEFT JOIN logpm_warehouse_warehouse lww on lww.id =lwt.warehouse_id where lwt.id = #{id}
</select>
<select id="getTrayByIds" resultType="com.logpm.warehouse.vo.WarehouseTrayQRCode">
SELECT lwt.pallet_code trayCode ,lww.name warehouseName,lwt.pallet_name from logpm_warehouse_tray lwt LEFT JOIN logpm_warehouse_warehouse lww on lww.id =lwt.warehouse_id
<where>
1=1
<if test="ids!= null ">
and lwt.id in
<foreach collection="ids" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
</mapper>

1
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 )

8
blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataTrayServiceImpl.java

@ -280,8 +280,12 @@ public class BasicdataTrayServiceImpl extends BaseServiceImpl<BasicdataTrayMappe
StringBuilder PDFHtml = new StringBuilder();
String htmlTemplate = getTrayCodePdfTemplate();
for (Long id : ids) {
WarehouseTrayQRCode trayQRCode = baseMapper.getTray(id);
List<WarehouseTrayQRCode> 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());

11
blade-service/logpm-data-sharing/pom.xml

@ -35,6 +35,17 @@
<artifactId>logpm-basicdata-api</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>logpm-warehouse-api</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>logpm-data-sharing-api</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
</dependencies>
<build>

33
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);
}
}

13
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);
}

3
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<MerchantOrderPackageVO> goods(@RequestParam("contract_number") String contract_number, @RequestParam("auth_key") String auth_key) {
return R.data(merchantService.goods(contract_number, auth_key));
}
}

100
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();
}
}
}
}

167
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<DistributionParcelListEntity> distributionParcelListEntities = distributionParcelListClient.findByWaybillNumber(waybillNo);
// 按照仓库ID进行分组
Map<String, List<DistributionParcelListEntity>> 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<DistributionParcelListEntity> 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<String> keys = groupedByWarehouse.keySet();
List<WarehouseNumberVO> 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<String, List<DistributionParcelListEntity>> groupedByWarehouse,String warehouseName){
List<DistributionParcelListEntity> 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;

10
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/api/DistributionStockupAppController.java

@ -103,25 +103,15 @@ public class DistributionStockupAppController extends BladeController {
private final IDistributionReservationStocklistService distributionReservationStocklistService;
private final IWarehouseUpdownGoodsClient warehouseUpdownGoodsClient;
private final IWarehouseUpdownTypeClient warehouseUpdownTypeClient;
private final IDistributionAsyncService distributionAsyncService;
private final DistributionReservationMapper distributionReservationMapper;
private final IDisStockListDetailService disStockListDetailService;
private final IBasicdataWarehouseClient basicdataWarehouseClient;
private final RabbitTemplate rabbitTemplate;
private final IDistributionStockListService distributionStockListService;
private final IDisStockOrdercodeRecoService disStockOrdercodeRecoService;
private final IDistributionReservationStockarticleService distributionReservationStockarticleService;
private final IWarehouseUpdownStockUpAreaClient warehouseUpdownStockUpAreaClient;
private final BladeRedis redis;
private final ITrunklinePackageTrackLogClient trunklinePackageTrackLogClient;
private final IDistributionNodeWorkService distributionNodeWorkService;
private final IDistributionDeliveryDetailsService distributionDeliveryDetailsService;

2
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;
}

25
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<String> carExpenseDispatchDetailTrainJob(String param) throws Exception {
qualityDeliverService.carExpenseDispatchDetailFinal(param);
return ReturnT.SUCCESS;
}
/**
* 计算车次成本 车次号
* @return
* @throws Exception
*/
@XxlJob("calculateTripCostJob")
public ReturnT<String> calculateTripCostJob(String param) throws Exception {
deliverFinishReportListener.calculateTripCost(param);
return ReturnT.SUCCESS;
}
/**
* 每天凌晨00:30:00计算仓储成本

32
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<DistributionD
/**
* 查询配送PDA零担列表
*
* @param id
* @param id1
* @return
*/
List<DistributionParcelNumberVO> selectDeliveryZeroOrderInfoDetail(Long id, Long id1);
List<DistributionParcelNumberVO> selectDeliveryZeroOrderInfoDetail(@Param("stockArticleId") Long id, @Param("deliveryId") Long id1);
/**
* 配送计划内的定制品计划查询

2
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionParcelListMapper.xml

@ -1364,7 +1364,7 @@
<select id="findByWaybillNumber" resultType="com.logpm.distribution.entity.DistributionParcelListEntity">
SELECT ldpl.* FROM logpm_distribution_parcel_list ldpl
WHERE ldpl.waybill_number = #{waybillNumber}
WHERE ldpl.waybill_number = #{waybillNumber} and is_deleted=0
</select>
<select id="selectPackageAllocationAndTray"
resultType="com.logpm.distribution.vo.DistributionParcelListNodeVO">

6
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/DistributionStockupMapper.xml

@ -61,9 +61,9 @@
<where>
ldsi.reservation_id = #{param.reservationId} and ldsi.stockup_id = #{param.stockupId}
and ldpl.order_package_code = #{param.packetBarCode}
<if test="param.orderCode != '' and param.orderCode != null">
and ldpl.order_code = #{param.orderCode}
</if>
<!-- <if test="param.orderCode != '' and param.orderCode != null">-->
<!-- and ldpl.order_code = #{param.orderCode}-->
<!-- </if>-->
</where>
</select>

10
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<QualityDeliverEntity> {
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);
}

41
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/mapper/QualityDeliverMapper.xml

@ -6,5 +6,46 @@
<resultMap id="qualityDeliverResultMap" type="com.logpm.distribution.entity.QualityDeliverEntity">
</resultMap>
<delete id="deleteByPlanReservationCode">
delete from logpm_quality_deliver where plan_reservation_code = #{reservationCode}
</delete>
<delete id="deleteEntityById">
delete from logpm_quality_deliver where id = #{id}
</delete>
<delete id="delStockingOperation">
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}
</delete>
<delete id="delPlanDelivery">
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}
</delete>
<delete id="delDistributionCarStart">
update logpm_quality_deliver
set start_car_user_name = null,
start_car_time = null
where id = #{id}
</delete>
</mapper>

181
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillPlanReportListener.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,15 @@ 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;
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,28 +41,14 @@ 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;
private final QualityDeliverMapper qualityDeliverMapper;
@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,20 +56,30 @@ public class BillPlanReportListener {
Long warehouseId = bean.getWarehouseId();
BizOperationEnums bizOperation = bean.getBizOperation();
List<PackageData> details = vo.getPackageDataList();
if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) {
// 根据预约单号查询出所有这个预约单下的数据 先置空
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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);
String reservationCode = vo.getPickupBatch();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverMapper.selectList(Wrappers.<QualityDeliverEntity>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) {
@ -93,25 +87,44 @@ public class BillPlanReportListener {
.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());
@ -120,21 +133,92 @@ public class BillPlanReportListener {
qualityDeliverEntity.setMaterielName(detail.getMaterialName());
qualityDeliverEntity.setConditions(3);
Integer number = detail.getNumber();
// 存在库存品则修改 不存在则新增
// 当前库存品数据大于已有数量 则新增增量部分,如果当前库存品数量小于已有数量 需要删除数据 1 删除操作只针对未备货的数据 2 全删或者只删除部分
if (invMap.containsKey(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch())) {
List<QualityDeliverEntity> 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<QualityDeliverEntity> 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(bizOperation, entity, BizOperationEnums.ADD);
sendReport(entity, BizOperationEnums.ADD);
}
}
}
}
}
// 系统中有的包件在当前不存在,则删除
Set<String> cmpSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)).map(PackageData::getPackageCode).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : cmpMap.entrySet()) {
String key = entry.getKey();
if (!cmpSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL))
.map(i -> i.getProductName() + i.getOrderCode()).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : ltlMap.entrySet()) {
String key = entry.getKey();
if (!ltlSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> 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<String, List<QualityDeliverEntity>> entry : invMap.entrySet()) {
String key = entry.getKey();
if (!invSet.contains(key)) {
List<QualityDeliverEntity> 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();
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)
@ -142,6 +226,5 @@ public class BillPlanReportListener {
.delay(3000)
.build());
}
}
}

77
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/BillReViewReportListener.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.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;
/**
* 自提复核生成明细报表
@ -40,7 +40,7 @@ import java.util.List;
@Slf4j
@Component
@AllArgsConstructor
public class BillReViewReportListener {
public class BillReViewReportListener implements ReportService {
@Resource
private IQualityDeliverService qualityDeliverService;
@ -49,19 +49,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);
@ -69,12 +58,33 @@ public class BillReViewReportListener {
Long warehouseId = bean.getWarehouseId();
BizOperationEnums bizOperation = bean.getBizOperation();
List<PackageData> details = vo.getPackageDataList();
String reservationCode = vo.getPickupBatch();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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())
@ -82,29 +92,43 @@ public class BillReViewReportListener {
.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();
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)
@ -112,6 +136,5 @@ public class BillReViewReportListener {
.delay(3000)
.build());
}
}
}

80
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;
/**
* 自提签收扫描生成明细报表
@ -40,7 +40,7 @@ import java.util.List;
@Slf4j
@Component
@AllArgsConstructor
public class BillSignforReportListener {
public class BillSignforReportListener implements ReportService {
@Resource
private IQualityDeliverService qualityDeliverService;
@ -49,19 +49,8 @@ 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;
}
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,29 +58,61 @@ public class BillSignforReportListener {
Long warehouseId = bean.getWarehouseId();
BizOperationEnums bizOperation = bean.getBizOperation();
List<PackageData> details = vo.getPackageDataList();
String reservationCode = vo.getPickupBatch();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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());
@ -99,15 +120,21 @@ public class BillSignforReportListener {
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();
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)
@ -115,6 +142,5 @@ public class BillSignforReportListener {
.delay(3000)
.build());
}
}
}

79
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();
// 装车车次号 + 车牌
String trainNumber = vo.getTrainNumber();
String vehicleName = vo.getVehicleName();
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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)) {
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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);
for (QualityDeliverEntity deliverEntity : qualityDeliverEntities) {
qualityDeliverEntity.setId(deliverEntity.getId());
sendReport(qualityDeliverEntity, BizOperationEnums.DELETE);
}
}
if (BizOperationEnums.ADD.equals(bizOperation)) {
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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);
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());
}
}

99
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<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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);
}
// 装车车次号 + 车牌
String reservationCode = vo.getReservationCode();
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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)) {
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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);
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());
}
}

52
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,38 +69,28 @@ 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);
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<QualityDeliverEntity> entities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>lambdaQuery()
.eq(QualityDeliverEntity::getSignTrainNumber, trainNumber)
.eq(QualityDeliverEntity::getBizStatus, 100)
);
if (CollUtil.isNotEmpty(entities)) {
// 按签收车分组
@ -190,11 +174,14 @@ public class DeliverFinishReportListener {
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) {
@ -218,7 +205,7 @@ public class DeliverFinishReportListener {
BigDecimal totalFreight = BigDecimal.ZERO;
ExpenseDispatchPriceRuleDTO rule = expenseDispatchClientDTO.getRule();
if (ObjectUtil.isEmpty(rule)) {
return;
continue;
}
if (CollUtil.isNotEmpty(priceList)) {
Map<Long, ExpenseDispatchPriceCategoryVO> priceMap = priceList.stream().collect(Collectors.toMap(ExpenseDispatchPriceCategoryVO::getCategoryId, v -> v));
@ -888,7 +875,6 @@ public class DeliverFinishReportListener {
}
}
}
}
if (CollUtil.isNotEmpty(valueMap)) {
// 修改配送明细信息

92
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<PackageData> details = vo.getPackageDataList();
// 单号 referenceCode
String referenceCode = vo.getTrainNumber();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(referenceCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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,29 +90,43 @@ 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();
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)
@ -113,6 +134,5 @@ public class LoadingReportListener {
.delay(3000)
.build());
}
}
}

164
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<String, QualityDeliverEntity> invMap = new HashMap<>();
if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) {
// 根据预约单号查询出所有这个预约单下的数据 先置空
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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<String> reservationCodeSet = reservationVOList.stream().map(ReservationVO::getReservationCode).collect(Collectors.toSet());
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if(CollUtil.isNotEmpty(reservationCodeSet)){
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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<PackageData> 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<QualityDeliverEntity> 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);
}
}
}
}
}
}
}
// 系统中有的包件在当前不存在,则删除
Set<String> cmpSet = details.stream()
.filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP))
.map(i-> reservationCode + i.getPackageCode()).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : cmpMap.entrySet()) {
String key = entry.getKey();
if (!cmpSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL))
.map(i -> reservationCode + i.getProductName() + i.getOrderCode()).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : ltlMap.entrySet()) {
String key = entry.getKey();
if (!ltlSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> invSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.INV))
.map(i -> reservationCode + i.getMallName() + i.getMaterialCode()).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : invMap.entrySet()) {
String key = entry.getKey();
if (!invSet.contains(key)) {
List<QualityDeliverEntity> value = entry.getValue();
for (QualityDeliverEntity entity : value) {
sendReport(entity, BizOperationEnums.DELETE);
}
}
if (CollUtil.isNotEmpty(invMap)) {
for (Map.Entry<String, QualityDeliverEntity> entry : invMap.entrySet()) {
QualityDeliverEntity qualityDeliverEntity = entry.getValue();
qualityDeliverService.update(qualityDeliverEntity, Wrappers.<QualityDeliverEntity>lambdaUpdate()
.eq(QualityDeliverEntity::getPlanTrainNumber, qualityDeliverEntity.getPlanTrainNumber())
.eq(QualityDeliverEntity::getMallName, qualityDeliverEntity.getMallName())
.eq(QualityDeliverEntity::getMaterielCode, qualityDeliverEntity.getMaterielCode())
.eq(QualityDeliverEntity::getConditions, 3)
.lt(QualityDeliverEntity::getBizStatus, 110)
);
}
}
}
}
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());
}
}

127
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,68 @@ 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<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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<QualityDeliverEntity> wrapper = buildInvWrapper(qualityDeliverEntity);
if (wrapper == null) {
return;
qualityDeliverService.updateById(qualityDeliverEntity);
// if (ObjectUtil.equals(PackageTypeEnums.CMP.getCode(), conditions)) {
// // 定制品
// LambdaQueryWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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<QualityDeliverEntity> wrapper = buildInvWrapper(qualityDeliverEntity);
// if (wrapper == null) {
// return;
// }
// // 查询不存在时更新,存在时修改
// saveOrUpdate(wrapper, qualityDeliverEntity);
// } else if (ObjectUtil.equals(PackageTypeEnums.LTL.getCode(), conditions)) {
// // 零担
// LambdaQueryWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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)) {
// 查询不存在时更新,存在时修改
saveOrUpdate(wrapper, qualityDeliverEntity);
} else if (ObjectUtil.equals(PackageTypeEnums.LTL.getCode(), conditions)) {
// 零担
LambdaQueryWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>lambdaQuery();
if (ObjectUtil.isNotEmpty(qualityDeliverEntity.getId())) {
wrapper.eq(QualityDeliverEntity::getId, qualityDeliverEntity.getId());
} else {
wrapper.eq(QualityDeliverEntity::getOrderCode, qualityDeliverEntity.getOrderCode())
.eq(QualityDeliverEntity::getCategory, qualityDeliverEntity.getCategory());
saveOrUpdate(null, qualityDeliverEntity);
}
wrapper.lt(QualityDeliverEntity::getBizStatus, 110);
if (StrUtil.isNotEmpty(qualityDeliverEntity.getBizCode())) {
wrapper.eq(QualityDeliverEntity::getBizCode, qualityDeliverEntity.getBizCode());
if (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.DELETE)) {
if (StrUtil.equals(node, WorkNodeEnums.PLANNED_RESERVATION.getValue())){
qualityDeliverService.deleteEntityById(qualityDeliverEntity.getId());
}
saveOrUpdate(wrapper, qualityDeliverEntity);
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 (ObjectUtil.equals(bean.getOperation(), BizOperationEnums.ADD)) {
if (ObjectUtil.equals(PackageTypeEnums.INV.getCode(), conditions)) {
// 查询不存在时更新,存在时修改
saveOrUpdate(null, qualityDeliverEntity);
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());
}
}
}
@ -265,9 +272,16 @@ public class QualityDeliverListener {
String brandName = stockList.getBrandName();
String sourceType = stockList.getSourceType();
if (StrUtil.equals(sourceType, "1")) {
DistributionParcelListEntity parcelListEntity = getDistributionParcelListEntity(qualityDeliverEntity.getOrderPackageCode(), qualityDeliverEntity.getWarehouseId());
// 定制品转的库存品先查出包条码
List<DistributionStockListInfoEntity> list = stockListInfoService.list(Wrappers.<DistributionStockListInfoEntity>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 +327,10 @@ public class QualityDeliverListener {
// 物料编码
qualityDeliverEntity.setMaterielCode(parcelListEntity.getMaterialCode());
}
// 包条码
if (StrUtil.isNotEmpty(parcelListEntity.getOrderPackageCode())) {
qualityDeliverEntity.setOrderPackageCode(parcelListEntity.getOrderPackageCode());
}
// 订单号
qualityDeliverEntity.setOrderCode(parcelListEntity.getOrderCode());
// 工厂车次号
@ -352,12 +370,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());
@ -390,6 +410,7 @@ public class QualityDeliverListener {
if (StrUtil.isNotEmpty(waybillNumber)) {
WarehouseWaybillEntity byWaybillNo = getWarehouseWaybillEntity(waybillNumber);
if (ObjectUtil.isNotEmpty(byWaybillNo)) {
qualityDeliverEntity.setOpenOrderTime(byWaybillNo.getDocumentMakingTime());
// 运单发货信息
qualityDeliverEntity.setShipperUnitId(byWaybillNo.getShipperId());
qualityDeliverEntity.setShipperUnit(byWaybillNo.getShipper());

75
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<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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<PackageData> details = vo.getPackageDataList();
if (CollUtil.isNotEmpty(details)) {
for (PackageData detail : details) {
@ -77,32 +86,47 @@ 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();
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)
@ -110,6 +134,5 @@ public class ReViewReportListener {
.delay(3000)
.build());
}
}
}

445
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/receiver/report/ReportListener.java

@ -0,0 +1,445 @@
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;
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<ReportService> reportServices;
private final IQualityDeliverService qualityDeliverService;
@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);
}
}
@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<? extends ReportService> clazz) {
// 根据某些条件选择具体的实现类
for (ReportService reportService : reportServices) {
if (clazz.isInstance(reportService)) {
return reportService;
}
}
// 默认返回第一个实现类
return reportServices.get(0);
}
}

11
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);
}

181
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<PackageData> details = vo.getPackageDataList();
if (BizOperationEnums.MODIFY.equals(bizOperation) || BizOperationEnums.DELETE.equals(bizOperation)) {
// 根据预约单号查询出所有这个预约单下的数据 先置空
LambdaUpdateWrapper<QualityDeliverEntity> wrapper = Wrappers.<QualityDeliverEntity>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<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverMapper.selectList(Wrappers.<QualityDeliverEntity>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,21 +125,92 @@ public class ReservationPlanReportListener {
qualityDeliverEntity.setMaterielName(detail.getMaterialName());
qualityDeliverEntity.setConditions(3);
Integer number = detail.getNumber();
// 存在库存品则修改 不存在则新增
// 当前库存品数据大于已有数量 则新增增量部分,如果当前库存品数量小于已有数量 需要删除数据 1 删除操作只针对未备货的数据 2 全删或者只删除部分
if (invMap.containsKey(detail.getMallName() + detail.getMaterialCode() + detail.getPickupBatch())) {
List<QualityDeliverEntity> 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<QualityDeliverEntity> 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(bizOperation, entity, BizOperationEnums.ADD);
sendReport(entity, BizOperationEnums.ADD);
}
}
}
}
// 系统中有的包件在当前不存在,则删除
Set<String> cmpSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.CMP)).map(PackageData::getPackageCode).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : cmpMap.entrySet()) {
String key = entry.getKey();
if (!cmpSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> ltlSet = details.stream().filter(item -> ObjectUtil.equals(item.getPackageType(), PackageTypeEnums.LTL))
.map(i -> i.getProductName() + i.getOrderCode()).collect(Collectors.toSet());
for (Map.Entry<String, List<QualityDeliverEntity>> entry : ltlMap.entrySet()) {
String key = entry.getKey();
if (!ltlSet.contains(key)) {
sendReport(entry.getValue().get(0), BizOperationEnums.DELETE);
}
}
Set<String> 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<String, List<QualityDeliverEntity>> entry : invMap.entrySet()) {
String key = entry.getKey();
if (!invSet.contains(key)) {
List<QualityDeliverEntity> 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();
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)
@ -146,6 +218,5 @@ public class ReservationPlanReportListener {
.delay(3000)
.build());
}
}
}

24
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);

77
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<PackageData> details = vo.getPackageDataList();
String reservationCode = vo.getReservationCode();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(reservationCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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()
@ -84,19 +93,30 @@ public class SignforReportListener {
.signTrainNumber(vo.getTrainNumber())
.signReservationCode(vo.getReservationCode())
.signType(vo.getOperatMode())
.signCarTypeId(vo.getCarTypeId())
.signCarType(vo.getCarType())
.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,15 +124,21 @@ 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();
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)
@ -120,6 +146,5 @@ public class SignforReportListener {
.delay(3000)
.build());
}
}
}

107
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<PackageData> details = vo.getPackageDataList();
// 单号 referenceCode
String referenceCode = vo.getReferenceCode();
Map<String, List<QualityDeliverEntity>> cmpMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> ltlMap = new HashMap<>();
Map<String, List<QualityDeliverEntity>> invMap = new HashMap<>();
if (StrUtil.isNotEmpty(referenceCode)) {
List<QualityDeliverEntity> qualityDeliverEntities = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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,26 @@ public class StockReportListener {
qualityDeliverEntity.setMaterielName(detail.getMaterialName());
qualityDeliverEntity.setConditions(3);
qualityDeliverEntity.setStockNum(1);
if (BizOperationEnums.ADD.equals(bizOperation) || BizOperationEnums.MODIFY.equals(bizOperation)) {
List<QualityDeliverEntity> list = qualityDeliverService.list(Wrappers.<QualityDeliverEntity>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<QualityDeliverEntity> qualityDeliverEntities = invMap.get(detail.getMallName() + detail.getMaterialCode());
if (CollUtil.isNotEmpty(qualityDeliverEntities)) {
if (BizOperationEnums.DELETE.equals(bizOperation)) {
List<QualityDeliverEntity> 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<QualityDeliverEntity> 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 +146,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)

10
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/IQualityDeliverService.java

@ -32,4 +32,14 @@ public interface IQualityDeliverService extends BaseService<QualityDeliverEntity
void calculateStorageCost(String param);
void calculateTransshipmentCost(String param);
void deleteEntityById(Long id);
void delStockingOperation(Long id);
void delPlanDelivery(Long id);
void delDistributionCarStart(Long id);
void carExpenseDispatchDetailFinal(String trainNumber);
}

71
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;
@ -763,7 +762,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
distributionSignforEntity.setDeliveryDriverName(distributionDeliveryList.getDriverName());
distributionSignforEntity.setDeliveryDriverId(distributionDeliveryList.getDriverId());
//配送时间
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(new Date());
distributionSignforEntity.setDeliveryTime(format);
//通过客户查询已经上车的订单(待定)
@ -1369,9 +1368,37 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
for (DistributionLoadscanEntity distributionParcelListEntity : pushNodeList) {
PackageData packageData = new PackageData();
DistributionParcelListEntity byId = distributionParcelListService.getById(distributionParcelListEntity.getPackageId());
if(byId.getConditions().equals(3)){
//标识零担
packageData.setNumber(distributionParcelListEntity.getPackageNub());
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());
}
packageData.setWaybillNumber(byId.getWaybillNumber());
// 获取品类
packageData.setProductName(byId.getFirsts());
}
packageData.setPackageCode(distributionParcelListEntity.getOrderPackageCode());
packageData.setPackageType(PackageTypeEnums.LTL);
packageData.setNumber(1);
}else if(byId.getConditions().equals(1)){
// 包件
packageData.setPackageCode(distributionParcelListEntity.getOrderPackageCode());
packageData.setPackageType(PackageTypeEnums.CMP);
packageData.setNumber(1);
}
data.add(packageData);
}
@ -1417,7 +1444,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
return jsonArray;
}
private NodeFanoutMsg<DistributionLoadVO> buildNodeFanoutMsgByStock(DistributionDeliveryListEntity distributionDeliveryListEntity, DistributionReservationEntity reservationEntity, List<DistributionLoadscaninvnEntity> ts) {
private NodeFanoutMsg<DistributionLoadVO> buildNodeFanoutMsgByStock(DistributionDeliveryListEntity distributionDeliveryListEntity, List<DistributionLoadscaninvnEntity> ts) {
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = new NodeFanoutMsg();
nodeFanoutMsg.setBizOperation(BizOperationEnums.ADD);
nodeFanoutMsg.setNode(WorkNodeEnums.DISTRIBUTION_LOADING);
@ -1702,6 +1729,12 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
List<DistributionParcelListEntity> updatePackageList = new ArrayList<>();
List<JSONObject> logList = new ArrayList<>();
List<String> orderCodes = new ArrayList<>();
List<DistributionLoadscaninvnEntity> kucuns = new ArrayList<>();
List<DistributionLoadscanEntity> dingzhis= new ArrayList<>();
List<DistributionLoadscanEntity> lingdans = new ArrayList<>();
for (DistributionReservationStockarticleEntity reservationStockarticleEntity : reservationStockarticleEntityList) {
switch (reservationStockarticleEntity.getIsZero()) {
case "0":
@ -1764,6 +1797,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
if (Func.isNotEmpty(distrilbutionloadingscanDTO.getDeliveryId())) {
loadscanEntity.setDeliveryId(distrilbutionloadingscanDTO.getDeliveryId());
}
dingzhis.add(loadscanEntity);
distributionLoadscanService.save(loadscanEntity);
//更新装车时间
Integer i = distributionDeliveryListMapper.updateloadingTimeById(distrilbutionloadingscanDTO.getDeliveryId());
@ -1845,6 +1879,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
}
loadscanEntity.setTrainNumber(distributionDeliveryListEntity.getTrainNumber());
distributionLoadscanService.save(loadscanEntity);
//更新装车数量
Integer j = distributionSignforMapper.updateloadByReservationId(loadscanEntity.getDeliveryId(), loadscanEntity.getReservationId(), loadscanEntity.getPackageNub());
BigDecimal handQuantity = new BigDecimal(parcelNumberVO.getHandQuantity());
@ -1861,6 +1896,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(parcelNumberVO.getStockArticleId());
stockArticleEntity.setHandQuantity(stockArticleEntity.getHandQuantity() + loadscanEntity.getPackageNub() - parcelNumberVO.getReservationNum());
distributionStockArticleService.updateById(stockArticleEntity);
lingdans.add(loadscanEntity);
} else {
//装车数量比计划数量少,这里才会进行一键装车数据修改
if (loadscanServiceOne.getPackageNub() <= parcelNumberVO.getReservationNum()) {
@ -1884,6 +1920,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
loadscanServiceOne.setLoadedNub(parcelNumberVO.getReservationNum());
}
distributionLoadscanService.updateById(loadscanServiceOne);
lingdans.add(loadscanServiceOne);
distributionParcelNumberService.updateById(parcelNumberEntity);
//维护零担订单在库 以及维护状态
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService.getById(parcelNumberVO.getStockArticleId());
@ -1899,6 +1936,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
BigDecimal loadedNumber = new BigDecimal(signforEntity.getLoadedNumber());
signforEntity.setLoadedNumber(loadedNumber.subtract(packageLoadingNub).add(reservationNum).intValue());
distributionSignforService.updateById(signforEntity);
lingdans.add(loadscanServiceOne);
}
}
}
@ -1959,6 +1997,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
loadscaninvnEntity.setLoadedNub(disStockListDetailEntity.getNum());
}
distributionLoadscaninvnService.save(loadscaninvnEntity);
kucuns.add(loadscaninvnEntity);
//更新装车时间
Integer i = distributionDeliveryListMapper.updateloadingTimeById(distrilbutionloadingscanDTO.getDeliveryId());
//更新库存品装车数量
@ -1994,6 +2033,25 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
if (!logList.isEmpty()) {
trunklinePackageTrackLogClient.addPackageTrackLog(logList);
}
DistributionDeliveryListVO deliveryList = distributionDeliveryListService.getDeliveryList(distrilbutionloadingscanDTO.getDeliveryId());
// 发送 订制品
if(Func.isNotEmpty(dingzhis)){
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByPackage(deliveryList, dingzhis);
distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser());
}
if(Func.isNotEmpty(kucuns)){
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryList, kucuns);
distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser());
}
if(Func.isNotEmpty(lingdans)){
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByZeroOrder(deliveryList, lingdans);
distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser());
}
return Resp.scanSuccess("操作成功", "装车成功");
}
@ -2211,8 +2269,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
}
// DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListService.getById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionReservationEntity reservationEntity = distributionReservationService.getById(distrilbutionloadingscanDTO.getReservationId());
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByStock(distributionDeliveryListEntity, reservationEntity, ts);
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByStock(distributionDeliveryListEntity, ts);
distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser());
String msg = getLoadingMsg(distrilbutionloadingscanDTO);
return Resp.scanSuccess("扫描成功", msg);
@ -4957,7 +5014,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
if (abnormalPackageLoadingNum != 0) {
return Resp.scanFail("存在异常请处理", "存在异常请处理");
}
String format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String loadingId = distrilbutionloadingscanDTO.getLoadingId();
Boolean b = false;
Boolean isEnd = false;
@ -9366,7 +9423,7 @@ public class DistributionDeliveryListServiceImpl extends BaseServiceImpl<Distrib
inventoryJsonObject.put("remark", "装车下架");
jsonObjects.add(inventoryJsonObject);
if (CollUtil.isNotEmpty(ts)) {
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryListEntity, reservationEntity2, ts);
NodeFanoutMsg<DistributionLoadVO> nodeFanoutMsg = buildNodeFanoutMsgByStock(deliveryListEntity, ts);
distributionNodeWorkService.nodeLoading(nodeFanoutMsg, AuthUtil.getUser());
}
break;

2
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionNodeWorkServiceImpl.java

@ -188,7 +188,7 @@ public class DistributionNodeWorkServiceImpl implements IDistributionNodeWorkSer
.build();
factoryDataMessageSender.sendNodeDataByBrand(nodePushMsg);
} catch (Exception e) {
log.error("推送工厂失败:{}", e);
log.error("推送工厂失败:", e);
}
}

2
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionReservationServiceImpl.java

@ -1913,6 +1913,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
.eq(DistributionParcelNumberEntity::getParcelListId, distributionReservationZeroPackageEntity.getParcelListId()));
parcelNumberEntity.setDeliveryQuantity(parcelNumberEntity.getDeliveryQuantity() - quantity + p.getReservationNum());
distributionParcelNumberService.updateById(parcelNumberEntity);
}else{
allZeroPackageEntityList.add(distributionReservationZeroPackageEntity);
}
zeroPrderNum.getAndAdd(distributionReservationZeroPackageEntity.getQuantity());
} else {

83
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;
@ -775,7 +776,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
for (DistributionLoadscanEntity distributionLoadscanEntity : list) {
PackageData packageData = new PackageData();
packageData.setSignTime(org.springblade.core.tool.utils.DateUtil.parse(distributionLoadscanEntity.getSigningTime(),"yyyy-MM-dd hh:mm:ss"));
packageData.setSignTime(org.springblade.core.tool.utils.DateUtil.parse(distributionLoadscanEntity.getSigningTime(),"yyyy-MM-dd HH:mm:ss"));
packageData.setSignUser(distributionLoadscanEntity.getSigningUser());
// 增加装车扫描人
packageData.setLoadingUserName(distributionLoadscanEntity.getScanUser());
@ -915,6 +916,10 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
List<DisStockListDetailEntity> detailEntities = distributionReservationMapper.selectInventoryListByReservation(distrilbutionloadingscanDTO.getReservationId());
List<JSONObject> jsonObjects = new ArrayList<>();
if (Func.isNotEmpty(split)) {
List<DistributionLoadscaninvnEntity> pushList = new ArrayList<>();
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
for (String s : split) {
List<DisStockListDetailEntity> 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 +943,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscaninvnEntity.setSignforType(LoadScanSigningTypeStatusConstant.wenyuanpiliangqianshou.getValue());
loadscaninvnEntity.setSigningTime(simpleDateFormat.format(new Date()));
loadscaninvnEntity.setOneQclick(1);
pushList.add(loadscaninvnEntity);
distributionLoadscaninvnService.updateById(loadscaninvnEntity);
// //维护签收数量
// Integer j = distributionSignforMapper.updatesignforByinvn(loadscaninvnEntity.getDeliveryId(), loadscaninvnEntity.getReservationId(), loadscaninvnEntity.getPackageNub());
@ -950,7 +956,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
//不存在装车数据,需要进行装车数据的补录
//库存品未进行装车
//这里装车的数据需要进行补录
DistributionDeliveryListEntity deliveryListEntity = distributionDeliveryListMapper.selectById(distrilbutionloadingscanDTO.getDeliveryId());
DistributionDeliverySelfEntity distributionDeliverySelfEntity = new DistributionDeliverySelfDTO();
if (deliveryListEntity.getKind().equals(ServiceConstant.DELIVERLIST_KIND_SELF)) {
distributionDeliverySelfEntity = distributionDeliverySelfMapper.selectOne(new QueryWrapper<DistributionDeliverySelfEntity>().lambda()
@ -1006,6 +1012,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscaninvnEntity.setSigningUserId(user.getUserId());
distributionLoadscaninvnEntity.setSigningTime(simpleDateFormat.format(new Date(System.currentTimeMillis() + (6 * 1000))));
distributionLoadscaninvnService.save(distributionLoadscaninvnEntity);
pushList.add(distributionLoadscaninvnEntity);
// //更新装车数量
// Integer j = distributionSignforMapper.updateLoadAndsignforByinvn(distributionLoadscaninvnEntity.getDeliveryId(), distributionLoadscaninvnEntity.getReservationId(), distributionLoadscaninvnEntity.getPackageNub());
//更新签收人
@ -1020,6 +1027,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
jsonObject.put("num", 1);
jsonObject.put("remark", "文员签收");
jsonObjects.add(jsonObject);
}
//修改对应库存品包件的签收数量
DisStockListDetailEntity disStockListDetailEntity = inventoryPackage.get(0);
@ -1033,10 +1043,17 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
}
}
warehouseUpdownStockUpAreaClient.downStockUpShelf(jsonObjects);
// 增加PC库存品签收
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVOByStock(deliveryListEntity, pushList, OperatModeConstant.CLERK);
iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser());
}
//维护签收数量
this.maintenanceSignfor(distrilbutionloadingscanDTO.getReservationId());
return R.status(true);
}
@ -1261,6 +1278,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
// DistributionDeliveryTripartiteVO deliveryTripartiteInfo = distributionDeliveryTripartiteMapper.getDeliveryTripartiteInfo(deliveryListEntity.getId());
// BeanUtils.copyProperties(deliveryTripartiteInfo, deliverySelfInfo);
// }
List<DistributionLoadscanEntity> pushList = new ArrayList<>();
//查询该车次负责司机
for (DistributionReservationZeroPackageEntity reservationZeroPackageEntity : reservationZeroPackageEntities) {
//查询订单
@ -1351,6 +1371,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
unLoadscanEntity.setOneQclick(1);
unLoadscanEntity.setMsg("文员进行零担订单装车和签收补录");
distributionLoadscanService.save(unLoadscanEntity);
pushList.add(unLoadscanEntity);
//更新装车和签收数量
Integer i = distributionSignforMapper.updateSignforByReservationId(unLoadscanEntity.getDeliveryId(), unLoadscanEntity.getReservationId(), unLoadscanEntity.getReceivedQuantity());
//更新装车时间
@ -1380,6 +1401,8 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
loadscanEntity.setPackageNub(reservationZeroPackageEntity.getQuantity());
loadscanEntity.setMsg("文员进行签收补录");
distributionLoadscanService.updateById(loadscanEntity);
pushList.add(loadscanEntity);
distributionParcelNumberEntity.setHandQuantity(a);
distributionParcelNumberEntity.setSigninQuantity(b);
distributionParcelNumberEntity.setOutboundQuantity(c);
@ -1400,6 +1423,13 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionDeliveryListService.updateById(deliveryListEntity);
//维护客户状态
distributionReservationService.maintenanceReservationInfo(reservationId);
// 发送作业节点
// 作业节点推送
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList,OperatModeConstant.BATCH);
iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser());
//查询计划和是否进行装车
return R.success("操作成功");
}
@ -3042,11 +3072,12 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
DistributionLoadscaninvnEntity distributionLoadscanEntity = pushList.get(0);
distributionLoadVO.setDriverName(distributionLoadscanEntity.getDriverName());
distributionLoadVO.setDriverId(distributionLoadscanEntity.getDriverId());
distributionLoadVO.setVehicleName(distributionLoadscanEntity.getVehicleName());
distributionLoadVO.setVehicleId(distributionLoadscanEntity.getVehicleId());
distributionLoadVO.setTrainNumber(distributionDeliveryListEntity.getTrainNumber());
distributionLoadVO.setDriverId(Convert.toStr(distributionLoadscanEntity.getSigningUserId()));
if (StringUtil.isNotBlank(distributionLoadscanEntity.getVehicleName())) {
// 获取车辆类型
BasicCarModelEntity nc = iBasicCarModelClient.getCarModelByCarNumber(distributionLoadscanEntity.getVehicleName());
@ -3115,11 +3146,9 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadVO.setDriverName(distributionLoadscanEntity.getDriverName());
distributionLoadVO.setDriverId(distributionLoadscanEntity.getDriverId());
distributionLoadVO.setDriverId(Convert.toStr(distributionLoadscanEntity.getSigningUserId()));
distributionLoadVO.setVehicleName(distributionLoadscanEntity.getVehicleName());
distributionLoadVO.setVehicleId(distributionLoadscanEntity.getVehicleId());
if (StringUtil.isNotBlank(distributionLoadscanEntity.getVehicleName())) {
// 获取车辆类型
BasicCarModelEntity nc = iBasicCarModelClient.getCarModelByCarNumber(distributionLoadscanEntity.getVehicleName());
@ -3139,14 +3168,30 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
for (DistributionLoadscanEntity distributionParcelListEntity : pushList) {
PackageData packageData = new PackageData();
packageData.setPackageCode(distributionParcelListEntity.getOrderPackageCode());
DistributionParcelListEntity distributionParcelListEntity1 = distributionParcelListService.getById(distributionParcelListEntity.getPackageId());
if(distributionParcelListEntity1.getConditions().equals(1)){
// 包件
packageData.setPackageType(PackageTypeEnums.CMP);
packageData.setNumber(1);
DistributionParcelListEntity distributionParcelListEntity1 = distributionParcelListService.selectByOrderPackageCode(distributionParcelListEntity.getOrderPackageCode(), distributionParcelListEntity.getWarehouseId());
if (Func.isNotEmpty(distributionParcelListEntity1)) {
packageData.setBrand(distributionParcelListEntity1.getBrandName());
}
packageData.setPackageCode(distributionParcelListEntity1.getOrderPackageCode());
packageData.setOrderCode(distributionParcelListEntity1.getOrderCode());
data.add(packageData);
}
}else if(distributionParcelListEntity1.getConditions().equals(3)){
// 零担
packageData.setPackageType(PackageTypeEnums.LTL);
packageData.setNumber(distributionLoadscanEntity.getReceivedQuantity());
if (Func.isNotEmpty(distributionParcelListEntity1)) {
packageData.setOrderCode(distributionParcelListEntity1.getOrderCode());
packageData.setBrand(distributionParcelListEntity1.getBrandName());
packageData.setWaybillNumber(distributionParcelListEntity1.getWaybillNumber());
packageData.setProductName(distributionParcelListEntity1.getFirsts());
}
}
}
@ -3471,7 +3516,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
// 推送作业节点
// 作业节点数据推送
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, distributionReservationEntity, pushDatas, OperatModeConstant.BATCH);
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, distributionReservationEntity, pushDatas, OperatModeConstant.CLERK);
iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser());
@ -6768,7 +6813,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return Resp.scanFail("服务器正忙...", "服务器正忙");
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<String> orderCodes = new ArrayList<>();
List<DistributionLoadscanEntity> pushList = new ArrayList<>();
BladeUser user = AuthUtil.getUser();
@ -6978,7 +7023,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
// 作业节点推送
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList);
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVOByZero(deliveryListEntity, pushList, OperatModeConstant.SCAN);
iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser());
@ -6986,7 +7031,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
return Resp.scanSuccess("签收成功", str);
}
private NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> buildDistributionSignforVOByZero(DistributionDeliveryListEntity distributionDeliveryListEntity, List<DistributionLoadscanEntity> pushList) {
private NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> buildDistributionSignforVOByZero(DistributionDeliveryListEntity distributionDeliveryListEntity, List<DistributionLoadscanEntity> pushList,String operatMode) {
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = new NodeFanoutMsg();
nodeFanoutMsg.setBizOperation(BizOperationEnums.ADD);
@ -6996,15 +7041,15 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
nodeFanoutMsg.setOperator(AuthUtil.getNickName());
nodeFanoutMsg.setOperatorTime(distributionDeliveryListEntity.getUpdateTime());
// DistributionTaskVO taskVO = buildDistributionTaskVO(distributionDeliveryListEntity, AuthUtil.getUserId());
org.springblade.common.model.DistributionSignforVO distributionLoadVO = new org.springblade.common.model.DistributionSignforVO();
DistributionLoadscanEntity distributionLoadscanEntity = pushList.get(0);
distributionLoadVO.setTrainNumber(distributionDeliveryListEntity.getTrainNumber());
distributionLoadVO.setDriverName(distributionLoadscanEntity.getDriverName());
distributionLoadVO.setDriverId(distributionLoadscanEntity.getDriverId());
distributionLoadVO.setVehicleName(distributionLoadscanEntity.getVehicleName());
distributionLoadVO.setVehicleId(distributionLoadscanEntity.getVehicleId());
distributionLoadVO.setDriverId(Convert.toStr(distributionLoadscanEntity.getSigningUserId()));
distributionLoadVO.setOperatMode(operatMode);
DistributionReservationEntity byId = distributionReservationService.getById(distributionLoadscanEntity.getReservationId());
if (!Func.isEmpty(byId)) {
distributionLoadVO.setReservationCode(byId.getReservationCode());
@ -7927,6 +7972,7 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
}
}
distributionLoadscanEntity = updateSignDistributionLoadscanEntity(loadscanEntity, user, parcelListEntity);
distributionLoadscanService.updateById(distributionLoadscanEntity);
//缺少一个异步维护包件签收的方法
distributionSignforMapper.updateSignforNum(distributionLoadscanEntity.getDeliveryId(), distributionLoadscanEntity.getReservationId(), distributionLoadscanEntity.getPackageNub());
@ -8006,9 +8052,6 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
String singleTime = simpleDateFormat.format(new Date());
// 节点作业推送
sendNodeWorkDataBroadcast(parcelListEntity, reservationEntity, singleTime, myCurrentWarehouse);
// 构建新作业节点回传
NodeFanoutMsg<org.springblade.common.model.DistributionSignforVO> nodeFanoutMsg = buildDistributionSignforVO(deliveryListEntity, reservationEntity, pushList, OperatModeConstant.BATCH);
iDistributionNodeWorkService.signFor(nodeFanoutMsg, AuthUtil.getUser());
break;
case 2:
//零担
@ -9160,8 +9203,12 @@ public class DistributionSignforServiceImpl extends BaseServiceImpl<Distribution
distributionLoadscanEntity.setOneClick(1);
distributionLoadscanEntity.setOneQclick(1);
distributionLoadscanEntity.setIsInsert(2);
distributionLoadscanEntity.setPackageId(loadscanEntity.getPackageId());
distributionLoadscanEntity.setVehicleId(loadscanEntity.getVehicleId());
distributionLoadscanEntity.setSigningUserId(loadscanEntity.getSigningUserId());
distributionLoadscanEntity.setReceivedQuantity(parcelListEntity.getQuantity());
distributionLoadscanEntity.setSigningUser(user.getNickName());
distributionLoadscanEntity.setVehicleName(loadscanEntity.getVehicleName());
distributionLoadscanEntity.setSigningUserId(user.getUserId());
distributionLoadscanEntity.setSignforType(LoadScanSigningTypeStatusConstant.sijiqianshou.getValue());
distributionLoadscanEntity.setSignforState(LoadScanSigningStatusConstant.weiqianshou.getValue());

17
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java

@ -2196,19 +2196,20 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl<Distribution
case 1:
//订单
String orderCode = stockupDTO.getOrderCode();
QueryWrapper<DistributionStockEntity> 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<DistributionStockEntity> 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<DistributionStockEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("coding", packetBarCode);
queryWrapper.eq("stockup_id", stockupId);
queryWrapper.eq("reservation_id", reservationId);

55
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<Distrilb
} else {
updateStockBill(distrilbutionBillLading);
}
//修改自提单信息
//进行自提单的修改日志记录
Integer integer = baseMapper.selectBillLadingPlanNum(distrilbutionBillLading.getId());
handleUpdateDistributionPlanLog(billLadingEntity, distrilbutionBillLading, AuthUtil.getUser(), myCurrentWarehouse, integer);
// 查询当前自提任务的 包件 信息
LambdaQueryWrapper<DistrilbutionBillPackageEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DistrilbutionBillPackageEntity::getBillLadingId, distrilbutionBillLading.getId());
wrapper.ne(DistrilbutionBillPackageEntity::getPacketBarStatus, 2);// 不查询取消的
List<DistrilbutionBillPackageEntity> list = distrilbutionBillPackageService.list(wrapper);
packageEntityList.addAll(list); // 将目前修改后的包件加入集合中
// 查询自提任务的零担
LambdaQueryWrapper<DistributionReservationZeroPackageEntity> lambdaQueryWrapper =new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DistributionReservationZeroPackageEntity::getReservationId, distrilbutionBillLading.getId());
lambdaQueryWrapper.ne(DistributionReservationZeroPackageEntity::getZeroPackageStatus, 2);
List<DistributionReservationZeroPackageEntity> list1 = distributionZeroPackageService.list(lambdaQueryWrapper);
zeroPackageEntityList.addAll(list1);
// 查询库存
LambdaQueryWrapper<DistributionDeliveryDetailsEntity> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(DistributionDeliveryDetailsEntity::getBillLadingId, distrilbutionBillLading.getId());
wrapper1.ne(DistributionDeliveryDetailsEntity::getInventoryStatus, 2);
List<DistributionDeliveryDetailsEntity> list2 = distributionDeliveryDetailsService.list(wrapper1);
detailsEntities.addAll(list2);
} else {
//设置lockey
String lockKey = "lock:" + distrilbutionBillLading.getStockArticleId();
@ -1047,6 +1074,7 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
List<DeliveryOfPickupPlanFeiVO> deliveryOfPickupPlanFeiVOList = new ArrayList<>();
if(listEntity!=null){
listEntity.forEach(t -> {
DeliveryOfPickupPlanFeiVO deliveryOfPickupPlanFeiVO = new DeliveryOfPickupPlanFeiVO();
deliveryOfPickupPlanFeiVO.setCost(t.getCost());
@ -1056,6 +1084,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
deliveryOfPickupPlanFeiVOList.add(deliveryOfPickupPlanFeiVO);
});
}
deliveryOfPickupPlanVO.setDeliveryOfPickupPlanFeiVOList(deliveryOfPickupPlanFeiVOList);
nodeFanoutMsg.setMain(deliveryOfPickupPlanVO);
@ -1065,6 +1095,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
}
private void builkPackageDataByZero(List<DistributionReservationZeroPackageEntity> zeroPackageEntityList, List<PackageData> packageDataList) {
if(zeroPackageEntityList!=null){
zeroPackageEntityList.forEach(t -> {
PackageData packageData = new PackageData();
@ -1089,9 +1121,13 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
});
}
}
private void buildPackageDataByStockExtracted(List<DistributionDeliveryDetailsEntity> detailsEntities, List<PackageData> packageDataList) {
detailsEntities.forEach(t -> {
if(detailsEntities!=null){
detailsEntities.forEach(t -> {
PackageData packageData = new PackageData();
Long stockListId = t.getStockListId();
DistributionStockListEntity byId = distributionStockListService.getById(stockListId);
@ -1107,11 +1143,14 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
}
packageDataList.add(packageData);
});
}
}
private void buildPackageByBillPackageExtracted(List<DistrilbutionBillPackageEntity> packageEntityList, List<PackageData> packageDataList) {
if(packageEntityList!=null){
packageEntityList.forEach(t -> {
PackageData packageData = new PackageData();
packageData.setPackageCode(t.getPacketBarCode());
@ -1122,6 +1161,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
});
}
}
private void sendFactoryPlan(List<DistributionParcelListEntity> parcelListEntities, BasicdataWarehouseEntity myCurrentWarehouse, DistrilbutionBillLadingDTO distrilbutionBillLading) {
// 包件按品牌分组
@ -1252,12 +1293,22 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
if (!cancelLogList.isEmpty()) {
distributionPlanLogService.saveBatch(cancelLogList);
}
for (DistrilbutionBillLadingEntity distrilbutionBillLadingEntity : distrilbutionBillLadingEntities) {
DistrilbutionBillLadingDTO dto = new DistrilbutionBillLadingDTO();
dto.setPickupBatch(distrilbutionBillLadingEntity.getPickupBatch());
dto.setWarehouse(myCurrentWarehouse.getName());
buildNodeFanoutMsgForBillByOption(dto, null, null, null, null, BizOperationEnums.DELETE);
}
return R.status(true);
case 1:
return R.fail("未授权!!!");
case 2:
return R.fail("存在签收包件");
}
return R.status(false);
}

40
blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/QualityDeliverServiceImpl.java

@ -80,14 +80,18 @@ public class QualityDeliverServiceImpl extends BaseServiceImpl<QualityDeliverMap
wrapper.ge(QualityDeliverEntity::getCarComplateTime, dayStart);
wrapper.le(QualityDeliverEntity::getCarComplateTime, dayEnd);
List<QualityDeliverEntity> entities = this.list(wrapper);
buildCarExpenseReport(entities);
}
private void buildCarExpenseReport(List<QualityDeliverEntity> entities) {
if (CollUtil.isNotEmpty(entities)) {
// 按签收车次+签收车次分组封装为map
Map<String, List<QualityDeliverEntity>> 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);
}
}
@ -405,4 +409,34 @@ public class QualityDeliverServiceImpl extends BaseServiceImpl<QualityDeliverMap
}
@Override
public void deleteEntityById(Long id) {
baseMapper.deleteEntityById(id);
}
@Override
public void delStockingOperation(Long id) {
baseMapper.delStockingOperation(id);
}
@Override
public void delPlanDelivery(Long id) {
baseMapper.delPlanDelivery(id);
}
@Override
public void delDistributionCarStart(Long id) {
baseMapper.delDistributionCarStart(id);
}
@Override
public void carExpenseDispatchDetailFinal(String trainNumber) {
if(StrUtil.isNotEmpty(trainNumber)){
List<QualityDeliverEntity> entities = this.list(Wrappers.<QualityDeliverEntity>lambdaQuery().eq(QualityDeliverEntity::getSignTrainNumber, trainNumber));
if(CollUtil.isNotEmpty(entities)){
buildCarExpenseReport(entities);
}
}
}
}

3
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<DeliveryNoteEntity> list = deliveryNoteService.list(Wrappers.<DeliveryNoteEntity>lambdaQuery()
.eq(DeliveryNoteEntity::getOrderNo, vo.getOrderNo())
.eq(DeliveryNoteEntity::getOrderSelfNum, orderSelfNum));
if (CollUtil.isNotEmpty(list)) {
log.error("订单号{} 数据已经处理过了, logId: {}", orderSelfNum, logId);

4
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<DeliveryNoteMapper,
advanceEntity.setSenderPhone(vo.getSender().getSenderMobile());
advanceEntity.setSenderAddress(vo.getSender().getSenderAddress());
}
advanceEntity.setTrainNumber("");
advanceEntity.setTrainNumber(vo.getOrderNo());
advanceEntity.setSenderFactory(BrandEnums.MHJ.getValue());
advanceEntity.setOrderCode(vo.getOrderSelfNum());
advanceEntity.setDealerCode(vo.getStoreCode());
@ -137,7 +137,7 @@ public class DeliveryNoteServiceImpl extends BaseServiceImpl<DeliveryNoteMapper,
advanceDetailEntity.setSiteCode("");
advanceDetailEntity.setQuantity(1);
advanceDetailEntity.setOrderPackageCode(code);
advanceDetailEntity.setTrainNumber("");
advanceDetailEntity.setTrainNumber(vo.getOrderNo());
advanceDetailEntity.setServiceNum(vo.getOrderNo());
advanceDetailEntity.setWaybillNo("");
advanceDetailEntity.setPackageStatus("0");

2
blade-service/logpm-old-project/src/main/java/com/logpm/oldproject/feign/OldWaybillClient.java

@ -85,7 +85,7 @@ public class OldWaybillClient implements IOldWaybillClient {
for (int i1 = 0; i1 < unitNos.size(); i1++) {
String unitNo = unitNos.getString(i1);
log.info(">>>>>>>> 保存开单推送的已入库包件 {} 保存到新系统", 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);
}
}

9
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<String> businessLines;
private List<Long> departureWarehouseIds;
private List<Long> destinationWarehouseIds;
private List<String> brands;
private String consignee;

198
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 &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{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 &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{param.startTime}
@ -120,17 +144,29 @@
left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id
where lww.document_making_time &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{param.startTime}
@ -170,20 +206,32 @@
left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id
where lww.document_making_time &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.consignee != null and param.consignee != '' ">
and lww.consignee like concat('%',#{param.consignee},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{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 &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.consignee != null and param.consignee != '' ">
and lww.consignee like concat('%',#{param.consignee},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{param.startTime}
@ -269,20 +329,32 @@
left join logpm_warehouse_warehouse waw on waw.id = lww.destination_warehouse_id
where lww.document_making_time &gt; '2024-10-22 00:00:00'
and lww.departure_warehouse_id != 1847456188105195522
<if test="param.businessLine != null and param.businessLine != '' ">
and waw.business_line like concat('%',#{param.businessLine},'%')
</if>
<if test="param.departureWarehouseName != null and param.departureWarehouseName != '' ">
and lww.departure_warehouse_name like concat('%',#{param.departureWarehouseName},'%')
</if>
<if test="param.destinationWarehouseName != null and param.destinationWarehouseName != '' ">
and lww.destination_warehouse_name like concat('%',#{param.destinationWarehouseName},'%')
<if test="param.businessLines != null and param.businessLines.size() > 0 ">
and waw.business_line in
<foreach collection="param.businessLines" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.departureWarehouseIds != null and param.departureWarehouseIds.size() > 0 ">
and lww.departure_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.destinationWarehouseIds != null and param.destinationWarehouseIds.size() > 0 ">
and lww.destination_warehouse_id in
<foreach collection="param.destinationWarehouseIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.consignee != null and param.consignee != '' ">
and lww.consignee like concat('%',#{param.consignee},'%')
</if>
<if test="param.brand != null and param.brand != '' ">
and lww.brand like concat('%',#{param.brand},'%')
<if test="param.brands != null and param.brands.size() > 0 ">
and lww.brand in
<foreach collection="param.brands" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
<if test="param.startTime != null ">
and lww.document_making_time &gt;= #{param.startTime}

4
blade-service/logpm-statisticsdata/src/main/java/com/logpm/statistics/mapper/ExpenseDispatchTrainDetailMapper.xml

@ -23,13 +23,13 @@
and settlement_month = #{expenseDispatchTrainDetail.settlementMonth}
</if>
<if test="expenseDispatchTrainDetail.trainNumber != null and expenseDispatchTrainDetail.trainNumber != ''">
and train_number like concat('%',#{expenseDispatchTrainDetail.settlementMonth},'%')
and train_number like concat('%',#{expenseDispatchTrainDetail.trainNumber},'%')
</if>
<if test="expenseDispatchTrainDetail.deliveryDateStart != null and expenseDispatchTrainDetail.deliveryDateStart != ''">
and delivery_date >= #{expenseDispatchTrainDetail.deliveryDateStart}
</if>
<if test="expenseDispatchTrainDetail.deliveryDateEnd != null and expenseDispatchTrainDetail.deliveryDateEnd != ''">
and delivery_date &lt;= #{expenseDispatchTrainDetail.deliveryDateStart}
and delivery_date &lt;= #{expenseDispatchTrainDetail.deliveryDateEnd}
</if>
<if test="expenseDispatchTrainDetail.distributionType != null and expenseDispatchTrainDetail.distributionType != ''">
and distribution_type = #{expenseDispatchTrainDetail.distributionType}

3
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,8 +282,10 @@ public R findBalanceDetail(Long balanceOrderId) {
@Override
public void deleteBanlanceOrderByIds(List<Long> balanceOrderIds) {
if(CollUtil.isNotEmpty(balanceOrderIds)){
baseMapper.deleteBanlanceOrderByIds(balanceOrderIds);
}
}
@Override
public R enterBalance(StatisticsBalanceRecordDTO balanceRecordDTO) {

3
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<Long> rencilitionOrderIds) {
if(CollUtil.isNotEmpty(rencilitionOrderIds)){
baseMapper.deleteRencilitionOrderByIds(rencilitionOrderIds);
}
}
}

4
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();

27
blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineCarsLoadServiceImpl.java

@ -2575,8 +2575,18 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
}
log.info("##############saveNew: loadId={} 当前新增的订单集合 {}",loadId,addList);
//把addList中所有元素按照orderCode和waybillNo进行去重,保留一条在集合中
List<TrunklineCarsOrderDTO> distinctList = addList.stream()
.collect(Collectors.toMap(
entity -> entity.getOrderCode() + "-" + entity.getWaybillNo(), // 复合键
entity -> entity,
(existing, replacement) -> existing // 保留第一个出现的元素
)).values().stream().collect(Collectors.toList());
for (TrunklineCarsOrderDTO trunklineCarsOrderDTO : addList) {
log.info("##############saveNew: loadId={} 处理后新增的订单集合 {}",loadId,distinctList);
for (TrunklineCarsOrderDTO trunklineCarsOrderDTO : distinctList) {
TrunklineCarsOrderEntity trunklineCarsOrderEntity = new TrunklineCarsOrderEntity();
BeanUtil.copy(trunklineCarsOrderDTO, trunklineCarsOrderEntity);
Integer realNum = trunklineCarsOrderDTO.getRealNum();
@ -6498,9 +6508,19 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
map.put("trayName", basicdataTrayEntity.getPalletName());
map.put("warehouseId", warehouseId);
map.put("orderPackageCode", orderPackageCode);
String key = "unloadTrayAllOne:"+orderPackageCode;
Boolean exists = bladeRedis.exists(key);
if(exists){
log.warn("##########unloadTrayAllOne: 包件正在打托,请勿重复操作 trayCode={} orderPackageCode={} ", trayCode, orderPackageCode);
return R.fail(405, "包件正在打托,请勿重复操作");
}
bladeRedis.setEx(key,1,2L);
R r = trayTypeClient.orderScanOrderPackageCodeSyncJd(map);
int code = r.getCode();
if (code != 200) {
bladeRedis.del(key);
log.warn("##########unloadTrayAllOne: 打托失败 trayCode={} orderPackageCode={} msg={}", trayCode, orderPackageCode, r.getMsg());
return R.fail(code, r.getMsg());
}else{
@ -6512,7 +6532,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
}
DistributionParcelListEntity parcelListEntity = distributionParcelListClient.findByPacketBarCodeAndWarehouseId(orderPackageCode, warehouseId);
orders = parcelListEntity.getOrderCode();
bladeRedis.del(key);
} else {
if(CollUtil.isEmpty(zeroPackageList)){
@ -11296,6 +11316,7 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
List<TrunklineCarsLoadVO> records = pageList.getRecords();
//把records中所有元素的id放入一个List
List<Long> idList = records.stream().map(TrunklineCarsLoadVO::getId).collect(Collectors.toList());
if(CollUtil.isNotEmpty(idList)){
List<TrunklineCarsLoadLinePhotoEntity> carsLoadLinePhotoEntities = carsLoadLinePhotoService.findListByLoadIdListAndWarehouseId(idList,warehouseId);
Map<Long, List<TrunklineCarsLoadLinePhotoEntity>> map = new HashMap<>();
if(CollUtil.isNotEmpty(carsLoadLinePhotoEntities)){
@ -11337,6 +11358,8 @@ public class TrunklineCarsLoadServiceImpl extends BaseServiceImpl<TrunklineCarsL
List<TrunklineCarsLoadLinePhotoEntity> trunklineCarsLoadLinePhotoEntities = map.get(loadId);
trunklineCarsLoadVO.setCarsLoadLinePhotoEntities(trunklineCarsLoadLinePhotoEntities);
}
}
pageList.setRecords(records);
return R.data(pageList);
}

27
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<Trunklin
}else if (WorkNodeEnums.CANCEL_INITIAL_WAREHOUSE_LOADING.getCode().equals(workNode)){
packageStatus = 10;
}else if (WorkNodeEnums.UNLOAD_INCOMING_WAREHOUSE.getCode().equals(workNode)){
packageStatus = 30;
} else if (WorkNodeEnums.DISTRIBUTION_LOADING.getCode().equals(workNode)) {
packageStatus = 40;
@ -367,7 +369,7 @@ public class TrunklineWaybillPackageServiceImpl extends BaseServiceImpl<Trunklin
if(CollUtil.isNotEmpty(orderPackageCodes)){
if(!Objects.isNull(packageStatus)){
List<TrunklineWaybillPackageEntity> waybillPackageEntities = new ArrayList<>();
Set<Long> waybillIds = new HashSet<>();
Map<Long,WarehouseWaybillEntity> waybillMap = new HashMap<>();
QueryWrapper<TrunklineWaybillPackageEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.in("order_package_code",orderPackageCodes)
.eq("is_deleted",0);
@ -376,18 +378,35 @@ public class TrunklineWaybillPackageServiceImpl extends BaseServiceImpl<Trunklin
List<TrunklineWaybillPackageEntity> 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);
waybillMap.keySet().forEach(waybillId -> {
WarehouseWaybillEntity waybillEntity = waybillMap.get(waybillId);
if(!Objects.isNull(waybillEntity)){
updateWaybillStatus(waybillEntity);
}
});
}
}

1
blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/feign/WarehouseWaybillClient.java

@ -41,7 +41,6 @@ public class WarehouseWaybillClient implements IWarehouseWaybillClient {
@Override
@GetMapping(API_PREFIX + "/findByWaybillNo")
public WarehouseWaybillEntity findByWaybillNo(String waybillNo) {
String tenantId = AuthUtil.getTenantId();
return warehouseWaybillService.findByWaybillNo(waybillNo);
}

1
blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/mapper/WarehouseWaybillMapper.xml

@ -47,6 +47,7 @@
<result column="update_user" property="updateUser"/>
<result column="update_time" property="updateTime"/>
<result column="status" property="status"/>
<result column="waybill_status" property="waybillStatus"/>
<result column="is_deleted" property="isDeleted"/>
<result column="create_dept" property="createDept"/>
<result column="reserve1" property="reserve1"/>

46
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<WarehouseLog> 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<WarehouseLog> 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();
// }
//
// }
}
}

Loading…
Cancel
Save