提交 334a5724 authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v29.7_pending_freight_20241017' into master_jdk17

# Conflicts: # clx-performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # clx-performance-web/src/main/java/com/clx/performance/dao/OrderGoodsDao.java # clx-performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # clx-performance-web/src/main/java/com/clx/performance/dao/impl/OrderGoodsDaoImpl.java
...@@ -299,6 +299,112 @@ public class RabbitBeanConfig { ...@@ -299,6 +299,112 @@ public class RabbitBeanConfig {
/**
* 监听运单同步履约进度表
*/
@Bean
public Queue syncPendingFreight4OrderInfoQueue() {
return new Queue(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_QUEUE,
true, false, false);
}
/**
* 监听运单同步履约进度表
**/
@Bean
public DirectExchange syncPendingFreight4OrderInfoExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_EXCHANGE);
}
/**
* 监听运单同步履约进度表
*/
@Bean
public Binding syncPendingFreight4OrderInfoBind() {
return BindingBuilder.bind(syncPendingFreight4OrderInfoQueue()).to(syncPendingFreight4OrderInfoExchange())
.with(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_ROUTING_KEY);
}
/**
* 监听运单同步履约进度表
*/
@Bean
public Queue syncPendingFreight4InternalReportQueue() {
return new Queue(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_QUEUE,
true, false, false);
}
/**
* 监听运单同步履约进度表
**/
@Bean
public DirectExchange syncPendingFreight4InternalReportExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_EXCHANGE);
}
/**
* 监听运单同步履约进度表
*/
@Bean
public Binding syncPendingFreight4InternalReportBind() {
return BindingBuilder.bind(syncPendingFreight4InternalReportQueue()).to(syncPendingFreight4InternalReportExchange())
.with(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_ROUTING_KEY);
}
/**
* 监听货单同步到挂单运费表
*/
@Bean
public Queue syncPendingFreight4OrderGoodsQueue() {
return new Queue(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_QUEUE,
true, false, false);
}
/**
* 监听货单同步到挂单运费表
**/
@Bean
public DirectExchange syncPendingFreight4OrderGoodsExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_EXCHANGE);
}
/**
* 监听货单同步到挂单运费表
*/
@Bean
public Binding syncPendingFreight4OrderGoodsBind() {
return BindingBuilder.bind(syncPendingFreight4OrderGoodsQueue()).to(syncPendingFreight4OrderGoodsExchange())
.with(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_ROUTING_KEY);
}
/**
* 监听运单同步到挂单运费表
*/
@Bean
public Queue syncPendingFreight4OrderChildQueue() {
return new Queue(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_QUEUE,
true, false, false);
}
/**
* 监听运单同步到挂单运费表
**/
@Bean
public DirectExchange syncPendingFreight4OrderChildExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_EXCHANGE);
}
/**
* 监听运单同步到挂单运费表
*/
@Bean
public Binding syncPendingFreight4OrderChildBind() {
return BindingBuilder.bind(syncPendingFreight4OrderChildQueue()).to(syncPendingFreight4OrderChildExchange())
.with(RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_ROUTING_KEY);
}
} }
...@@ -150,4 +150,54 @@ public class RabbitKeyConstants { ...@@ -150,4 +150,54 @@ public class RabbitKeyConstants {
//保存货单调价记录routing_key //保存货单调价记录routing_key
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY = "clx_performance.save.order.goods.adjustment.price.routing.key"; public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY = "clx_performance.save.order.goods.adjustment.price.routing.key";
//订单同步挂单运费表queue
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_QUEUE = "clx_performance.sync.pending.freight.for.order.info.queue";
//订单同步挂单运费表exchange
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_EXCHANGE = "clx_performance.sync.pending.freight.for.order.info.exchange";
//订单同步挂单运费表routing_key
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_ROUTING_KEY = "clx_performance.sync.pending.freight.for.order.info.routing.key";
//内部上报同步挂单运费表queue
public static final String SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_QUEUE = "clx_performance.sync.pending.freight.for.internal.report.queue";
//内部上报同步挂单运费表exchange
public static final String SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_EXCHANGE = "clx_performance.sync.pending.freight.for.internal.report.exchange";
//内部上报同步挂单运费表routing_key
public static final String SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_ROUTING_KEY = "clx_performance.sync.pending.freight.for.internal.report.routing.key";
//货单同步挂单运费表queue
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_QUEUE = "clx_performance.sync.pending.freight.for.order.goods.queue";
//货单同步挂单运费表exchange
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_EXCHANGE = "clx_performance.sync.pending.freight.for.order.goods.exchange";
//货单同步挂单运费表routing_key
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_ROUTING_KEY = "clx_performance.sync.pending.freight.for.order.goods.routing.key";
//货单同步挂单运费表queue
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_QUEUE = "clx_performance.sync.pending.freight.for.order.child.queue";
//货单同步挂单运费表exchange
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_EXCHANGE = "clx_performance.sync.pending.freight.for.order.child.exchange";
//货单同步挂单运费表routing_key
public static final String SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_ROUTING_KEY = "clx_performance.sync.pending.freight.for.order.child.routing.key";
} }
package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PagePendingFreightParam;
import com.clx.performance.service.PendingFreightService;
import com.clx.performance.vo.pc.PagePendingFreightVO;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.result.Result;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName PendingFreightController
* @Description
* @Author kavin
* @Date 2024/10/21 9:47
* @Version 1.0
*/
@Slf4j
@RestController
@RequestMapping(value="/pc/pendingFreight")
@Validated
@Tag(name = "挂单运费")
@AllArgsConstructor
public class PendingFreightController {
private final PendingFreightService pendingFreightService;
@Operation(summary = "查看挂单运费分页列表", description = "<br>By:刘海泉")
@PostMapping("/pagePendingFreight")
@UnitCovert(param = false)
public Result<PageData<PagePendingFreightVO>> pagePendingFreight(@RequestBody @Validated PagePendingFreightParam param) {
IPage<PagePendingFreightVO> page = pendingFreightService.pagePendingFreight(param);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
}
@Operation(summary = "导出挂单运费", description = "<br>By:刘海泉")
@PostMapping("/exportPendingFreight")
public void exportPendingFreight(@RequestBody @Validated PagePendingFreightParam param, HttpServletResponse response) throws Exception {
SXSSFWorkbook workbook = pendingFreightService.exportPendingFreight(param);
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
workbook.write(response.getOutputStream());
}
}
...@@ -223,4 +223,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -223,4 +223,6 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
Long queryNoCancelChildByOrderGoodsNo(String orderGoodsNo, Integer code); Long queryNoCancelChildByOrderGoodsNo(String orderGoodsNo, Integer code);
Long queryTruckProcessingOrderChild(String truckNo); Long queryTruckProcessingOrderChild(String truckNo);
List<OrderChild> listNoCancelOrderChild(String orderNo);
} }
...@@ -115,4 +115,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -115,4 +115,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList); void batchCancelOrderGoodsWeight(List<OrderGoodsCancelWeightDTO> cancelOrderGoodsList);
boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight, Integer needTruckNum); boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight, Integer needTruckNum);
OrderGoods queryLineNewestPendingFreight(Integer sendAddressId,Integer receiveAddressId);
List<OrderGoods> queryLineAvgPendingFreight(Integer sendAddressId, Integer receiveAddressId,LocalDateTime begin,LocalDateTime end);
} }
package com.clx.performance.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.PagePendingFreightParam;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.PendingFreightMapper;
import com.clx.performance.model.PendingFreight;
import java.math.BigDecimal;
/**
* @author kavin
* Date 2024-10-17
* Time 19:37
*/
public interface PendingFreightDao extends BaseDao<PendingFreightMapper, PendingFreight, Integer> {
long updateInternalReportData(String orderNo, String name, BigDecimal logisticsFreight);
void updateOrderedAndLoadTruckRate(String orderNo, BigDecimal orderedRate, BigDecimal loadTruckRate);
IPage<PendingFreight> pagePendingFreight(PagePendingFreightParam param);
void updateSameLineHistoryFreight(Integer sendAddressId, Integer receiveAddressId, BigDecimal historyFreight, BigDecimal avgHistoryFreight);
}
...@@ -744,4 +744,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -744,4 +744,13 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
query.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode()); query.le(OrderChild::getStatus,OrderChildEnum.Status.UNLOAD.getCode());
return baseMapper.selectCount(query); return baseMapper.selectCount(query);
} }
@Override
public List<OrderChild> listNoCancelOrderChild(String orderNo) {
return list(lQrWrapper()
.eq(OrderChild :: getOrderNo, orderNo)
.lt(OrderChild :: getStatus,OrderChildEnum.Status.DRIVER_CANCEL.getCode())
);
}
} }
...@@ -313,6 +313,28 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -313,6 +313,28 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
baseMapper.batchCancelOrderGoodsWeight(cancelOrderGoodsList); baseMapper.batchCancelOrderGoodsWeight(cancelOrderGoodsList);
} }
@Override
public OrderGoods queryLineNewestPendingFreight(Integer sendAddressId,Integer receiveAddressId) {
LambdaQueryWrapper<OrderGoods> query = new LambdaQueryWrapper<>();
query.eq(OrderGoods :: getSendAddressId,sendAddressId);
query.eq(OrderGoods :: getReceiveAddressId,receiveAddressId);
query.orderByDesc(OrderGoods :: getId);
query.last("limit 1");
return baseMapper.selectOne(query);
}
@Override
public List<OrderGoods> queryLineAvgPendingFreight(Integer sendAddressId, Integer receiveAddressId,
LocalDateTime begin,LocalDateTime end) {
LambdaQueryWrapper<OrderGoods> query = new LambdaQueryWrapper<>();
query.eq(OrderGoods :: getSendAddressId,sendAddressId);
query.eq(OrderGoods :: getReceiveAddressId,receiveAddressId);
query.ge(OrderGoods :: getCreateTime,begin);
query.le(OrderGoods :: getCreateTime,end);
return baseMapper.selectList(query);
}
@Override @Override
public boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight, public boolean updateExtractWeightAndNeedTruckNum(String orderGoodsNo, BigDecimal extractWeight,
Integer needTruckNum) { Integer needTruckNum) {
......
package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.OrderEnum;
import com.clx.performance.dao.PendingFreightDao;
import com.clx.performance.mapper.PendingFreightMapper;
import com.clx.performance.model.PendingFreight;
import com.clx.performance.param.pc.PagePendingFreightParam;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.Objects;
/**
* @author kavin
* Date 2024-10-17
* Time 19:37
*/
@Repository
public class PendingFreightDaoImpl extends BaseDaoImpl<PendingFreightMapper, PendingFreight, Integer> implements PendingFreightDao {
@Override
public long updateInternalReportData(String orderNo, String name, BigDecimal logisticsFreight) {
LambdaUpdateWrapper<PendingFreight> update = new LambdaUpdateWrapper<>();
update.set(StringUtils.isNotBlank(name),PendingFreight :: getSeniorLogisticsManagerName,name);
update.set(Objects.nonNull(logisticsFreight),PendingFreight :: getLogisticsFreight,logisticsFreight);
update.eq(PendingFreight :: getOrderNo,orderNo);
return baseMapper.update(update);
}
@Override
public void updateOrderedAndLoadTruckRate(String orderNo, BigDecimal orderedRate, BigDecimal loadTruckRate) {
LambdaUpdateWrapper<PendingFreight> update = new LambdaUpdateWrapper<>();
update.set(PendingFreight :: getOrderedRate,orderedRate);
update.set(PendingFreight :: getLoadTruckRate,loadTruckRate);
update.eq(PendingFreight :: getOrderNo,orderNo);
baseMapper.update(update);
}
@Override
public IPage<PendingFreight> pagePendingFreight(PagePendingFreightParam param) {
LambdaQueryWrapper<PendingFreight> query = new LambdaQueryWrapper<>();
query.in(PendingFreight :: getOrderStatus, OrderEnum.PENDING_FREIGHT_STATUS_LIST);
query.orderByDesc(PendingFreight :: getId);
return baseMapper.selectPage(Page.of(param.getPage(),param.getPageSize()),query);
}
@Override
public void updateSameLineHistoryFreight(Integer sendAddressId, Integer receiveAddressId, BigDecimal historyFreight, BigDecimal avgHistoryFreight) {
LambdaUpdateWrapper<PendingFreight> update = new LambdaUpdateWrapper<>();
update.set(PendingFreight :: getHistoryFreight,historyFreight);
update.set(PendingFreight :: getHistoryAvgFreight,avgHistoryFreight);
update.eq(PendingFreight :: getSendAddressId,sendAddressId);
update.eq(PendingFreight :: getReceiveAddressId,receiveAddressId);
update.in(PendingFreight :: getOrderStatus,OrderEnum.PENDING_FREIGHT_STATUS_LIST);
baseMapper.update(update);
}
}
package com.clx.performance.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @ClassName OrderedAndLoadTruckRateDTO
* @Description
* @Author kavin
* @Date 2024/10/18 16:25
* @Version 1.0
*/
@Getter
@Setter
public class OrderedAndLoadTruckRateDTO {
@Schema(description="订单号")
private String orderNo;
@Schema(description="挂单吨数")
private BigDecimal pendingWeight;
@Schema(description="装车吨数")
private BigDecimal loadNet;
@Schema(description="已拉运吨数")
private BigDecimal alreadyTransportWeight;
@Schema(description="接单率")
BigDecimal orderedRate;
@Schema(description="装车率")
BigDecimal loadTruckRate;
}
...@@ -94,6 +94,7 @@ public class OrderChildDtsListener { ...@@ -94,6 +94,7 @@ public class OrderChildDtsListener {
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",after); log.info("修改:{}",after);
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode()); syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
syncPendingFreight(before,after);
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) &&
(!Objects.equals(before.getStatus(),after.getStatus()) || (!Objects.equals(before.getStatus(),after.getStatus()) ||
!Objects.equals(before.getLoadNet(),after.getLoadNet())) || !Objects.equals(before.getLoadNet(),after.getLoadNet())) ||
...@@ -272,6 +273,24 @@ public class OrderChildDtsListener { ...@@ -272,6 +273,24 @@ public class OrderChildDtsListener {
} }
} }
//同步挂单运费表-----运单部分
public void syncPendingFreight(OrderChild before,OrderChild after){
//状态发生变化,并且是取消
if((!Objects.equals(before.getStatus(),after.getStatus())
&& after.getStatus() > OrderChildEnum.Status.COMPLETE.getCode())
// 装车吨数发生变化
|| Objects.equals(after.getLoadNet(),before.getLoadNet())
){
log.info("开始发送同步挂单运费表消息====运单部分,订单号:{},运单号:{}", after.getOrderNo(),after.getChildNo());
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(after)).getBytes()).build();
rabbitTemplate.send(SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_EXCHANGE,
SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_ROUTING_KEY, body);
log.info("结束发送同步挂单运费表消息====运单部分,订单号:{},运单号:{}", after.getOrderNo(),after.getChildNo());
}
}
/** /**
* 后续逻辑处理 * 后续逻辑处理
* @param before * @param before
......
...@@ -50,10 +50,12 @@ public class OrderGoodsDtsListener { ...@@ -50,10 +50,12 @@ public class OrderGoodsDtsListener {
//同步after数据 //同步after数据
log.info("新增:{}",JSON.toJSONString(after)); log.info("新增:{}",JSON.toJSONString(after));
syncPerformanceProgress(before,after,DtsOperationTypeEnum.INSERT.getCode()); syncPerformanceProgress(before,after,DtsOperationTypeEnum.INSERT.getCode());
syncPendingFreight(before,after,DtsOperationTypeEnum.INSERT.getCode());
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after)); log.info("修改:{}",JSON.toJSONString(after));
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode()); syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
syncPendingFreight(before,after,DtsOperationTypeEnum.UPDATE.getCode());
sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode()); sendSaveOrderGoodsAdjustmentPriceMessage(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
//数据删除 //数据删除
...@@ -88,6 +90,31 @@ public class OrderGoodsDtsListener { ...@@ -88,6 +90,31 @@ public class OrderGoodsDtsListener {
} }
} }
//同步挂单运费
public void syncPendingFreight(OrderGoods before,OrderGoods after, Integer updateType) {
boolean isSend = false;
if(Objects.equals(updateType,DtsOperationTypeEnum.INSERT.getCode())){
isSend = true;
}else{
if(!Objects.equals(before.getOrderGoodsStatus(),after.getOrderGoodsStatus())
|| !Objects.equals(before.getAlreadyTransportWeight(),after.getAlreadyTransportWeight())
|| !Objects.equals(before.getExtractWeight(),after.getExtractWeight())
|| !Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight())){
isSend = true;
}
}
if(isSend){
log.info("开始发送同步挂单运费表消息===货单部分,订单号:{},货单号:{}", after.getOrderNo(),after.getOrderGoodsNo());
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(after)).getBytes()).build();
rabbitTemplate.send(SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_EXCHANGE,
SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_ROUTING_KEY, body);
log.info("结束发送同步挂单运费表消息===货单部分,订单号:{},货单号:{}", after.getOrderNo(),after.getOrderGoodsNo());
}
}
//保存货单调价记录 //保存货单调价记录
public void sendSaveOrderGoodsAdjustmentPriceMessage(OrderGoods before,OrderGoods after, Integer updateType){ public void sendSaveOrderGoodsAdjustmentPriceMessage(OrderGoods before,OrderGoods after, Integer updateType){
boolean isSend = false; boolean isSend = false;
......
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.order.param.mq.SyncPendingFreightInternalReportParam;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.service.PendingFreightService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 处理货单取消吨数回填
*/
@Slf4j
@Component
@AllArgsConstructor
public class SyncPendingFreight4InternalReportListener {
private final PendingFreightService pendingFreightService;
@RabbitListener(queues = RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_INTERNAL_REPORT_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到同步挂单运费表---内部上报信息部分,消息内容{}", new String(message.getBody()));
SyncPendingFreightInternalReportParam data = JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<SyncPendingFreightInternalReportParam>>() {
}).getData();
pendingFreightService.dealPendingFreight4InternalReport(data);
}catch (Exception e){
log.info("监听到同步挂单运费表---内部上报信息部分发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.PendingFreightService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 处理货单取消吨数回填
*/
@Slf4j
@Component
@AllArgsConstructor
public class SyncPendingFreight4OrderChildListener {
private final PendingFreightService pendingFreightService;
@RabbitListener(queues = RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_CHILD_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到同步挂单运费表---运单信息部分,消息内容{}", new String(message.getBody()));
OrderChild data = JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<OrderChild>>() {
}).getData();
pendingFreightService.dealPendingFreight4OrderChild(data.getOrderNo());
}catch (Exception e){
log.info("监听到同步挂单运费表---运单信息部分发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.service.PendingFreightService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 处理货单取消吨数回填
*/
@Slf4j
@Component
@AllArgsConstructor
public class SyncPendingFreight4OrderGoodsListener {
private final PendingFreightService pendingFreightService;
@RabbitListener(queues = RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_GOODS_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到同步挂单运费表---货单信息部分,消息内容{}", new String(message.getBody()));
OrderGoods data = JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<OrderGoods>>() {
}).getData();
pendingFreightService.dealPendingFreight4OrderGoods(data);
}catch (Exception e){
log.info("监听到同步挂单运费表---货单信息部分发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.service.PendingFreightService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 同步
*/
@Slf4j
@Component
@AllArgsConstructor
public class SyncPendingFreight4OrderInfoListener {
private final PendingFreightService pendingFreightService;
@RabbitListener(queues = RabbitKeyConstants.SYNC_PENDING_FREIGHT_FOR_ORDER_INFO_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到同步挂单运费表---订单信息部分,消息内容{}", new String(message.getBody()));
OrderInfoMessage data = JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<OrderInfoMessage>>() {
}).getData();
pendingFreightService.dealPendingFreight4OrderInfo(data);
}catch (Exception e){
log.info("监听到同步挂单运费表---订单信息部分发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.PendingFreight;
/**
* @author kavin
* Date 2024-10-17
* Time 19:37
*/
public interface PendingFreightMapper extends BaseMapper<PendingFreight> {
}
package com.clx.performance.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2024-10-17
* Time 19:37
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("pending_freight")
public class PendingFreight implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("order_no")
@Schema(description="订单编号")
private String orderNo;
@TableField("order_status")
@Schema(description="订单状态")
private Integer orderStatus;
@TableField("send_address_id")
@Schema(description="发货-地址id")
private Integer sendAddressId;
@TableField("send_address_shorter")
@Schema(description="货源地简称")
private String sendAddressShorter;
@TableField("send_address")
@Schema(description="煤源位置")
private String sendAddress;
@TableField("receive_address_id")
@Schema(description="收货-地址id")
private Integer receiveAddressId;
@TableField("receive_address_shorter")
@Schema(description="目的地简称")
private String receiveAddressShorter;
@TableField("senior_logistics_manager_name")
@Schema(description="高级物流经理姓名数组")
private String seniorLogisticsManagerName;
@TableField("goods_name_id")
@Schema(description="货物名称id")
private Integer goodsNameId;
@TableField("goods_name")
@Schema(description="货物名称")
private String goodsName;
@TableField("goods_model")
@Schema(description="热值名称")
private String goodsModel;
@TableField("send_over_standard")
@Schema(description="是否C类煤源 0 否 1 是")
private Integer sendOverStandard;
@TableField("task_weight")
@Schema(description="任务吨数")
private BigDecimal taskWeight;
@TableField("ordered_rate")
@Schema(description="接单率")
private BigDecimal orderedRate;
@TableField("load_truck_rate")
@Schema(description="装车率")
private BigDecimal loadTruckRate;
@TableField("order_distance")
@Schema(description="重车运距(公里)")
private BigDecimal orderDistance;
@TableField("send_address_expenses")
@Schema(description="煤源地开支")
private String sendAddressExpenses;
@TableField("history_freight")
@Schema(description="历史运费")
private BigDecimal historyFreight;
@TableField("history_avg_freight")
@Schema(description="历史平均运费")
private BigDecimal historyAvgFreight;
@TableField("prediction_freight_price")
@Schema(description="测算运费")
private BigDecimal predictionFreightPrice;
@TableField("logistics_freight")
@Schema(description="物流运费")
private BigDecimal logisticsFreight;
@TableField("create_time")
@Schema(description="创建时间")
private LocalDateTime createTime;
@TableField("modified_time")
@Schema(description="修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.order.param.mq.SyncPendingFreightInternalReportParam;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.PagePendingFreightParam;
import com.clx.performance.vo.pc.PagePendingFreightVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
/**
* @author kavin
* Date 2024-10-17
* Time 19:37
*/
public interface PendingFreightService {
void dealPendingFreight4OrderInfo(OrderInfoMessage data);
void dealPendingFreight4InternalReport(SyncPendingFreightInternalReportParam param);
void dealPendingFreight4OrderGoods(OrderGoods orderGoods);
void dealPendingFreight4OrderChild(String orderNo);
IPage<PagePendingFreightVO> pagePendingFreight(PagePendingFreightParam param);
SXSSFWorkbook exportPendingFreight(PagePendingFreightParam param);
}
...@@ -510,7 +510,7 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi ...@@ -510,7 +510,7 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
//计算履约进度表货单的挂单吨数 //计算履约进度表货单的挂单吨数
@Override @Override
public BigDecimal calcPendingWeight(OrderGoods item){ public BigDecimal calcPendingWeight(OrderGoods item){
if(Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CANCEL.getCode())){ if(Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CANCEL.getCode())){
return Objects.nonNull(item.getAlreadyTransportWeight())?item.getAlreadyTransportWeight():BigDecimal.ZERO; return Objects.nonNull(item.getAlreadyTransportWeight())?item.getAlreadyTransportWeight():BigDecimal.ZERO;
} }
......
package com.clx.performance.struct;
import com.clx.performance.model.PendingFreight;
import com.clx.performance.vo.pc.PagePendingFreightVO;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
public interface PendingFreightStruct {
List<PagePendingFreightVO> convertList(List<PendingFreight> records);
}
package com.clx.performance.param.pc;
import com.msl.common.base.PageParam;
/**
* @ClassName PagePendingFreightParam
* @Description
* @Author kavin
* @Date 2024/10/21 9:50
* @Version 1.0
*/
public class PagePendingFreightParam extends PageParam {
}
package com.clx.performance.vo.pc;
import com.clx.performance.enums.OrderEnum;
import com.msl.common.convertor.type.MoneyOutConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @ClassName PagePendingFreightVO
* @Description
* @Author kavin
* @Date 2024/10/21 9:51
* @Version 1.0
*/
@Getter
@Setter
public class PagePendingFreightVO {
private Integer id;
@Schema(description="订单编号")
private String orderNo;
@Schema(description="订单状态")
private Integer orderStatus;
@Schema(description="货源地")
private String sendAddressShorter;
@Schema(description="煤源位置")
private String sendAddress;
@Schema(description="物流经理")
private String seniorLogisticsManagerName;
@Schema(description="货物名称id")
private Integer goodsNameId;
@Schema(description="货物名称")
private String goodsName;
@Schema(description="热值名称")
private String goodsModel;
@Schema(description="是否C类煤源 0 否 1 是")
private Integer sendOverStandard;
public String sendOverStandardMsg;
public String getSendOverStandardMsg(){
return OrderEnum.OverWeight.getNameByCode(sendOverStandard);
}
@Schema(description="任务吨数")
private BigDecimal taskWeight;
@Schema(description="接单率")
private BigDecimal orderedRate;
@Schema(description="装车率")
private BigDecimal loadTruckRate;
@Schema(description="重车运距(公里)")
private BigDecimal orderDistance;
@Schema(description="煤源地开支")
private String sendAddressExpenses;
@Schema(description="历史运费")
@MoneyOutConvert
private BigDecimal historyFreight;
@Schema(description="历史平均运费")
@MoneyOutConvert
private BigDecimal historyAvgFreight;
@Schema(description="测算运费")
@MoneyOutConvert
private BigDecimal predictionFreightPrice;
@Schema(description="物流运费")
@MoneyOutConvert
private BigDecimal logisticsFreight;
@Schema(description="创建时间")
private String createTime;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论