提交 c36ea033 authored 作者: 刘海泉's avatar 刘海泉

增加司机运费柱形图接口

上级 63b7da8b
......@@ -96,6 +96,14 @@ public enum OrderEnum {
}
return null;
}
public static String getNameByCode(Integer code) {
for(OverWeight type: OverWeight.values()){
if(Objects.equals(type.code,code)){
return type.getName();
}
}
return null;
}
}
......
package com.clx.performance.vo.pc;
import com.clx.performance.enums.OrderEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @author kavin
......@@ -73,7 +73,13 @@ public class PerformanceProgressVO{
@ApiModelProperty("是否C类煤源 0 否 1 是")
private Integer sendOverStandard;
@ApiModelProperty("是否C类煤源 0 否 1 是")
private String sendOverStandardMsg;
public String getSendOverStandardMsg(){
return OrderEnum.OverWeight.getNameByCode(sendOverStandard);
}
@ApiModelProperty("司机运费")
private BigDecimal driverFreightPrice;
......@@ -81,9 +87,7 @@ public class PerformanceProgressVO{
@ApiModelProperty("任务吨数")
private BigDecimal taskWeight;
@ApiModelProperty("任务吨数")
private BigDecimal transportWeight;
@ApiModelProperty("挂单吨数")
......@@ -155,14 +159,14 @@ public class PerformanceProgressVO{
@ApiModelProperty("挂单时间")
private LocalDateTime pendingTime;
private String pendingTime;
@ApiModelProperty("交易要求到站时间")
private String tradeRequireArriveStationTime;
@ApiModelProperty("交易要求到站时间")
@ApiModelProperty("物流要求到站时间")
private String transportExpectArriveStationTime;
......
......@@ -222,4 +222,83 @@ public class RabbitBeanConfig {
return BindingBuilder.bind(ownerLoanThawQueue()).to(ownerLoanExchange()).with(RabbitKeyConstants.OWNER_LOAN_THAW_ROUTE_KEY);
}
/**
* 监听货单同步履约进度表
*/
@Bean
public Queue syncPerformanceProgress4OrderGoodsQueue() {
return new Queue(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_INFO_QUEUE,
true, false, false);
}
/**
* 监听货单同步履约进度表
**/
@Bean
public DirectExchange syncPerformanceProgress4OrderGoodsExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_EXCHANGE);
}
/**
* 监听货单同步履约进度表
*/
@Bean
public Binding syncPerformanceProgress4OrderGoodsBind() {
return BindingBuilder.bind(syncPerformanceProgress4OrderGoodsQueue()).to(syncPerformanceProgress4OrderGoodsExchange())
.with(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_ROUTING_KEY);
}
/**
* 监听运单同步履约进度表
*/
@Bean
public Queue syncPerformanceProgress4OrderChildQueue() {
return new Queue(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_QUEUE,
true, false, false);
}
/**
* 监听运单同步履约进度表
**/
@Bean
public DirectExchange syncPerformanceProgress4OrderChildExchange() {
return new DirectExchange(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_EXCHANGE);
}
/**
* 监听运单同步履约进度表
*/
@Bean
public Binding syncPerformanceProgress4OrderChildBind() {
return BindingBuilder.bind(syncPerformanceProgress4OrderChildQueue()).to(syncPerformanceProgress4OrderChildExchange())
.with(RabbitKeyConstants.SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_ROUTING_KEY);
}
/**
* 保存货单调价表
*/
@Bean
public Queue saveOrderGoodsAdjustmentPriceQueue() {
return new Queue(RabbitKeyConstants.SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_QUEUE,
true, false, false);
}
/**
* 保存货单调价表
**/
@Bean
public DirectExchange saveOrderGoodsAdjustmentPriceExchange() {
return new DirectExchange(RabbitKeyConstants.SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_EXCHANGE);
}
/**
*保存货单调价表
*/
@Bean
public Binding saveOrderGoodsAdjustmentPriceBind() {
return BindingBuilder.bind(saveOrderGoodsAdjustmentPriceQueue()).to(saveOrderGoodsAdjustmentPriceExchange())
.with(RabbitKeyConstants.SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY);
}
}
......@@ -113,7 +113,40 @@ public class RabbitKeyConstants {
//同步履约进度表消息----订单部分
public static final String SYNC_PERFORMANCE_PROGRESS_QUEUE = "clx_order.sync.performance.progress.queue";
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_INFO_QUEUE = "clx_order.sync.performance.progress.for.order.info.queue";
//货单同步履约进度表queue
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_QUEUE = "clx_order.sync.performance.progress.for.order.goods.queue";
//货单同步履约进度表exchange
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_EXCHANGE = "clx_order.sync.performance.progress.for.order.goods.exchange";
//货单同步履约进度表routing_key
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_ROUTING_KEY = "clx_order.sync.performance.progress.for.order.goods.routing.key";
//运单同步履约进度表queue
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_QUEUE = "clx_order.sync.performance.progress.for.order.child.queue";
//运单同步履约进度表exchange
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_EXCHANGE = "clx_order.sync.performance.progress.for.order.child.exchange";
//运单同步履约进度表routing_key
public static final String SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_ROUTING_KEY = "clx_order.sync.performance.progress.for.order.child.routing.key";
//保存货单调价记录queue
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_QUEUE = "clx_order.sync.performance.progress.for.order.child.queue";
//保存货单调价记录exchange
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_EXCHANGE = "clx_order.sync.performance.progress.for.order.child.exchange";
//保存货单调价记录routing_key
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY = "clx_order.sync.performance.progress.for.order.child.routing.key";
}
......@@ -2,10 +2,9 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.param.pc.OrderChildCarrierCancelParam;
import com.clx.performance.param.pc.PageCarrierOrderChildParam;
import com.clx.performance.service.OrderChildPoundAuditService;
import com.clx.performance.param.pc.PageMonitorOrderChildQCParam;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.vo.pc.*;
import com.msl.common.base.PageData;
......@@ -104,4 +103,12 @@ public class CarrierOrderChildController {
}
@ApiOperation(value = "履约进度表-历史线路拉运量", notes = "<br>By:l刘海泉")
@GetMapping("/getHistoryLineTransportVolume")
public Result<List<HistoryLineTranVolumeChartVO>> getHistoryLineTransportVolume(@NotBlank(message = "订单编号不能为空") String orderNo) {
return Result.ok(orderChildService.getHistoryLineTransportVolume(orderNo));
}
}
......@@ -2,31 +2,23 @@ package com.clx.performance.controller.pc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.order.feign.OrderFeign;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.param.pc.OrderGoodsCancelParam;
import com.clx.performance.param.pc.UpdateEditOrderGoodsParam;
import com.clx.performance.param.pc.OrderGoodsParams;
import com.clx.performance.param.pc.PageOrderGoodsListParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderStrategyContext;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.UpdateOrderGoodsPriceParam;
import com.clx.performance.param.pc.*;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderGoodsAdjustmentPriceService;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.service.OrderGoodsTruckBindService;
import com.clx.performance.vo.pc.OrderChildPCVO;
import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.*;
import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
......@@ -34,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
......@@ -75,6 +68,9 @@ public class GoodsOrderController {
@Autowired
private OrderGoodsTruckBindService orderGoodsTruckBindService;
@Autowired
private OrderGoodsAdjustmentPriceService orderGoodsAdjustmentPriceService;
@ApiOperation(value = "提交货单", notes = "<br>By:胡宇帆")
@PostMapping("/saveGoodsOrder")
@UnitCovert(result = false)
......@@ -197,4 +193,35 @@ public class GoodsOrderController {
}
@ApiOperation(value = "司机运费列表", notes = "<br>By:刘海泉")
@GetMapping("/getDriverFreightPriceList")
@UnitCovert(param = false)
public Result<List<DriverFreightPriceVO>> getDriverFreightPriceList(@RequestParam(value = "orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
List<DriverFreightPriceVO> list = orderGoodsService.getDriverFreightPriceList(orderNo);
return Result.ok(list);
}
@ApiOperation(value = "订单下挂单时间列表", notes = "<br>By:刘海泉")
@GetMapping("/getOrderGoodsPendingList")
public Result<List<OrderGoodsPendingVO>> getOrderGoodsPendingList(@RequestParam(value = "orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
List<OrderGoodsPendingVO> list = orderGoodsService.getOrderGoodsPendingList(orderNo);
return Result.ok(list);
}
@ApiOperation(value = "司机运费记录柱形图", notes = "<br>By:刘海泉")
@GetMapping("/getDriverFreightPriceChart")
@UnitCovert(param = false)
public Result<List<DriverFreightPriceChartVO>> getDriverFreightPriceChart(@RequestParam(value = "orderNo")
@NotBlank(message = "订单编号不能为空") String orderNo) {
List<DriverFreightPriceChartVO> list = orderGoodsAdjustmentPriceService.getDriverFreightPriceChart(orderNo);
return Result.ok(list);
}
}
......@@ -198,4 +198,8 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
void updateBatchOwnerCancel(List<String> childNos);
List<CancelOrderGoodsWeightDTO> statisticsCancelOrderGoodsWeight(List<String> childNos);
List<OrderChild> listBeforeCompleteByOrderNo(String orderNo);
List<OrderChild> listCompleteByOrderNos(List<String> strings);
}
......@@ -108,4 +108,6 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void batchCancel(List<Integer> idList);
void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight);
List<OrderGoods> listAfterCreatedByOrderNo(String orderNo);
}
......@@ -655,4 +655,20 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
public List<CancelOrderGoodsWeightDTO> statisticsCancelOrderGoodsWeight(List<String> childNos) {
return baseMapper.statisticsCancelOrderGoodsWeight(childNos);
}
@Override
public List<OrderChild> listBeforeCompleteByOrderNo(String orderNo) {
return list(lQrWrapper()
.eq(OrderChild :: getOrderNo,orderNo)
.le(OrderChild :: getStatus,OrderChildEnum.Status.COMPLETE.getCode())
);
}
@Override
public List<OrderChild> listCompleteByOrderNos(List<String> orderNoList) {
return list(lQrWrapper()
.in(OrderChild :: getOrderNo,orderNoList)
.le(OrderChild :: getStatus,OrderChildEnum.Status.COMPLETE.getCode())
);
}
}
......@@ -305,4 +305,13 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
public void batchCancelOrderGoods(List<CancelOrderGoodsWeightDTO> cancelOrderGoodsWeight) {
baseMapper.batchCancelOrderGoods(cancelOrderGoodsWeight);
}
@Override
public List<OrderGoods> listAfterCreatedByOrderNo(String orderNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderGoods::getOrderNo, orderNo)
.ne(OrderGoods::getOrderGoodsStatus,OrderGoodsStatusEnum.Status.CREATED.getCode())
.orderByDesc(OrderGoods :: getPendingOrderTime)
);
}
}
......@@ -4,8 +4,14 @@ import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.msl.common.base.Optional;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
public interface OrderService {
Optional<FeignOrderInfoVO> getOrderInfo(@RequestParam String orderNo);
Optional<List<String>> getMonthSameLineOrderList(String orderNo);
}
......@@ -9,6 +9,8 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
@AllArgsConstructor
......@@ -22,4 +24,11 @@ public class OrderServiceImpl implements OrderService {
.filter(Result::succeed)
.map(Result::getData);
}
@Override
public Optional<List<String>> getMonthSameLineOrderList(String orderNo) {
return Optional.ofNullable(orderFeign.getMonthSameLineOrderList(orderNo))
.filter(Result::succeed)
.map(Result::getData);
}
}
......@@ -11,6 +11,7 @@ import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.SyncPlatformEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ThirdAppConfig;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dto.dts.DataTransportDTO;
......@@ -20,6 +21,7 @@ import com.clx.performance.event.OrderChildCancelEvent;
import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.clx.user.vo.feign.FeignDriverTruckModelVo;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.result.Result;
......@@ -28,13 +30,17 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.Optional;
import static com.clx.performance.constant.RabbitKeyConstants.*;
@Slf4j
@Component
@AllArgsConstructor
......@@ -44,7 +50,8 @@ public class OrderChildDtsListener {
private final DriverService driverService;
private final ApplicationEventPublisher applicationEventPublisher;
private final ThirdAppConfig thirdAppConfig;
private final OrderChildStruct orderChildStruct;
private final RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE)
......@@ -55,8 +62,8 @@ public class OrderChildDtsListener {
DataTransportDTO dataTransportDTO = JSON.parseObject(msg, DataTransportDTO.class);
log.info("DTS消息同步开始, database:clx_performance.order_child, 实体:{}", dataTransportDTO);
log.info("操作类型:{}",dataTransportDTO.getOperationType().getCode());
OrderChildMessage before = DtsMapConvertUtil.convert(dataTransportDTO.getBeforeMap(), new OrderChildMessage());
OrderChildMessage after = DtsMapConvertUtil.convert(dataTransportDTO.getAfterMap(), new OrderChildMessage());
OrderChild before = DtsMapConvertUtil.convert(dataTransportDTO.getBeforeMap(), new OrderChild());
OrderChild after = DtsMapConvertUtil.convert(dataTransportDTO.getAfterMap(), new OrderChild());
thirdpartySync(DtsMapConvertUtil.convert(dataTransportDTO.getAfterMap(), new OrderChildSyncMessage()));
......@@ -66,6 +73,7 @@ public class OrderChildDtsListener {
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){
orderChildChangeAfter(after);
}
syncPerformanceProgress(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",after);
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) &&
......@@ -80,6 +88,7 @@ public class OrderChildDtsListener {
log.info("DTS运单取消释放借款冻结金额");
applicationEventPublisher.publishEvent(new OrderChildCancelEvent(this, after.getChildNo()));
}
syncPerformanceProgress(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
//数据删除
......@@ -91,11 +100,15 @@ public class OrderChildDtsListener {
}
}
public void orderChildChangeAfter(OrderChildMessage after){
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(after.getOrderNo());
public void orderChildChangeAfter(OrderChild orderChild){
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderChild.getOrderNo());
if (orderInfoFeign == null) {
return;
}
OrderChildMessage after = orderChildStruct.convertMessage(orderChild);
//同步交易平台的运单
if(Objects.equals(orderInfoFeign.getOrderSource(), SyncPlatformEnum.Source.TRADE_PLATFORM.getCode())){
......@@ -199,4 +212,26 @@ public class OrderChildDtsListener {
}
//同步履约进度表-----运单部分
public void syncPerformanceProgress(OrderChild before,OrderChild after, Integer updateType){
boolean isSend = false;
if(Objects.equals(updateType,DtsOperationTypeEnum.INSERT.getCode())){
isSend = true;
}
if(Objects.equals(updateType,DtsOperationTypeEnum.UPDATE.getCode()) &&
(!Objects.equals(before.getStatus(),after.getStatus()) ||
!Objects.equals(before.getLoadNet(),after.getLoadNet())) ||
!Objects.equals(before.getUnloadNet(),after.getUnloadNet())
){
isSend = true;
}
if(isSend){
log.info("开始发送同步履约进度表消息,订单号:{},运单号:{}", after.getOrderNo(),after.getChildNo());
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(after)).getBytes()).build();
rabbitTemplate.send(SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_EXCHANGE,
SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_CHILD_ROUTING_KEY, body);
log.info("结束发送同步履约进度表消息,订单号:{},运单号:{}", after.getOrderNo(),after.getChildNo());
}
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.listener;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.UpdateEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderCancelComponent;
import com.clx.performance.constant.RabbitKeyConstants;
......@@ -13,17 +14,22 @@ import com.clx.performance.enums.OrderGoodsLogsEnum;
import com.clx.performance.enums.OrderGoodsPendingOrderWayStatusEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OrderGoodsAdjustmentPrice;
import com.clx.performance.service.OrderGoodsLogService;
import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Objects;
import static com.clx.performance.constant.RabbitKeyConstants.*;
@Slf4j
@Component
@AllArgsConstructor
......@@ -33,7 +39,7 @@ public class OrderGoodsDtsListener {
private final GoodsOrderTruckRecordComponent goodsOrderTruckRecordComponent;
private final OrderGoodsDao orderGoodsDao;
private final OrderGoodsLogService orderGoodsLogService;
private final RabbitTemplate rabbitTemplate;
@RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_GOODS_QUEUE)
......@@ -47,11 +53,11 @@ public class OrderGoodsDtsListener {
if(Objects.equals(DtsOperationTypeEnum.INSERT.getCode(),dataTransportDTO.getOperationType().getCode())){
//同步after数据
log.info("新增:{}",JSON.toJSONString(after));
orderGoodsChangeAfter(before,after,DtsOperationTypeEnum.INSERT.getCode());
syncPerformanceProgress(before,after,DtsOperationTypeEnum.INSERT.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after));
backFillOrderWeight(after);
orderGoodsChangeAfter(before,after,DtsOperationTypeEnum.UPDATE.getCode());
syncPerformanceProgress(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
//数据删除
log.info("删除:{}",JSON.toJSONString(before));
......@@ -87,21 +93,63 @@ public class OrderGoodsDtsListener {
}
public void orderGoodsChangeAfter(OrderGoods before,OrderGoods after, Integer updateType) {
public void syncPerformanceProgress(OrderGoods before,OrderGoods after, Integer updateType) {
boolean isSend = false;
if(after.getOrderGoodsStatus() > OrderGoodsStatusEnum.Status.PAYING.getCode()){
if( Objects.equals(updateType,DtsOperationTypeEnum.INSERT.getCode()) ||
(
Objects.equals(updateType,DtsOperationTypeEnum.UPDATE.getCode())
||!Objects.equals(before.getSeniorLogisticsManagerId(),after.getSeniorLogisticsManagerId())
||!Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight())
if(Objects.equals(updateType,DtsOperationTypeEnum.INSERT.getCode())){
isSend = true;
}
if(Objects.equals(updateType,DtsOperationTypeEnum.UPDATE.getCode())
&& (!Objects.equals(before.getSeniorLogisticsManagerId(),after.getSeniorLogisticsManagerId())
|| !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_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_EXCHANGE,
SYNC_PERFORMANCE_PROGRESS_FOR_ORDER_GOODS_ROUTING_KEY, body);
log.info("结束发送同步履约进度表消息,订单号:{},货单号:{}", after.getOrderNo(),after.getOrderGoodsNo());
}
}
}
//保存货单调价记录
public void sendSaveOrderGoodsAdjustmentPriceMessage(OrderGoods before,OrderGoods after, Integer updateType){
boolean isSend = false;
//插入的货单是挂单中状态的
if(Objects.equals(updateType,DtsOperationTypeEnum.INSERT.getCode()) &&
Objects.equals(after.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.PAYING.getCode())){
isSend = true;
}
//货单状态发生变化(从已挂单变成挂单中) || 挂单中状态的挂单运费发生变化
if(Objects.equals(updateType,DtsOperationTypeEnum.UPDATE.getCode()) &&
//货单状态发生变化(从已挂单变成挂单中)
(
(Objects.equals(before.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.CREATED.getCode()) &&
Objects.equals(before.getOrderGoodsStatus(),OrderGoodsStatusEnum.Status.PAYING.getCode()))
|| //挂单中之后的状态的挂单运费发生变化
(after.getOrderGoodsStatus() >= OrderGoodsStatusEnum.Status.PAYING.getCode() &&
!Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight()))
)
){
}
){
isSend = true;
}
if(isSend){
log.info("开始发送货单调整挂单运费消息,订单号:{},货单号:{}", after.getOrderNo(),after.getOrderGoodsNo());
OrderGoodsAdjustmentPrice message = new OrderGoodsAdjustmentPrice();
message.setOrderNo(after.getOrderNo());
message.setOrderGoodsNo(after.getOrderGoodsNo());
message.setAmount(after.getPendingOrderFreight());
message.setPreAmount(Objects.nonNull(before) ? before.getPendingOrderFreight() : BigDecimal.ZERO);
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(message)).getBytes()).build();
rabbitTemplate.send(SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_EXCHANGE,
SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY, body);
log.info("结束发送货单调整挂单运费消息,订单号:{},货单号:{}", after.getOrderNo(),after.getOrderGoodsNo());
}
}
}
......@@ -99,4 +99,6 @@ public interface OrderChildService {
Integer getOrderChildCheck(OrderChildCheckParam param);
void cancelOrderChilds(CancelOrderGoodsParam param);
List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo);
}
......@@ -11,7 +11,9 @@ import com.clx.performance.param.pc.*;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.DriverFreightPriceVO;
import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsPendingVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import java.math.BigDecimal;
......@@ -107,4 +109,8 @@ public interface OrderGoodsService {
void updateFrightPrice(String orderGoodsNo,BigDecimal pendingOrderFreight);
BigDecimal cancelOrderGoods(CancelOrderGoodsParam param);
List<DriverFreightPriceVO> getDriverFreightPriceList(String orderNo);
List<OrderGoodsPendingVO> getOrderGoodsPendingList(String orderNo);
}
......@@ -2,6 +2,8 @@ package com.clx.performance.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.PerformanceProgress;
import com.clx.performance.param.pc.carrier.PagePerformanceProgress;
import com.clx.performance.param.pc.carrier.UpdatePerformanceProgressParam;
......@@ -31,4 +33,10 @@ public interface PerformanceProgressService {
List<PerformanceProgressOperationLogVO> getOperationLog(String orderNo);
void dealPerformanceProgress4OrderInfo(OrderInfoMessage data);
void dealPerformanceProgress4OrderGoods(OrderGoods data);
void dealPerformanceProgress4OrderChild(OrderChild data);
}
......@@ -3,10 +3,9 @@ package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.InvoicingCompanyEnum;
import com.clx.order.enums.OrderEnum;
import com.clx.order.enums.QuotationEnum;
import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.enums.ResultEnum;
import com.clx.order.enums.*;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
......@@ -58,7 +57,6 @@ import com.clx.performance.utils.zjxl.ZjxlGpsService;
import com.clx.performance.vo.app.*;
import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePlatformServiceFeeConfigVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.vo.feign.DriverTruckInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
......@@ -207,6 +205,9 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired
private QuotationService quotationService;
@Autowired
OrderGoodsAdjustmentPriceService orderGoodsAdjustmentPriceService;
@Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
......@@ -2768,4 +2769,45 @@ public class OrderChildServiceImpl implements OrderChildService {
});
}
}
@Override
public List<HistoryLineTranVolumeChartVO> getHistoryLineTransportVolume(String orderNo) {
//查询近一个月与该订单收发货地线路一致的订单
Optional<List<String>> result = orderService.getMonthSameLineOrderList(orderNo);
if(!result.isPresent()){
log.warn("通过订单号:{} 查找相同线路的订单列列表,返回结果:{}",orderNo,result);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"获取相同线路的订单列表失败");
}
List<BigDecimal> priceList = orderGoodsAdjustmentPriceService.getNoRepeatAdjustmentPriceRecord(result.get());
List<HistoryLineTranVolumeChartVO> charts = new ArrayList<>();
if(CollectionUtils.isEmpty(priceList)){
return charts;
}
//查询相同路线的订单下的所有运单
List<OrderChild> childs = orderChildDao.listCompleteByOrderNos(result.get());
if(CollectionUtils.isEmpty(childs)){
priceList.forEach(item-> charts.add(HistoryLineTranVolumeChartVO.builder()
.pendingOrderFreight(item).number(0).build()));
return charts;
}
LinkedHashMap<BigDecimal,Integer> priceMap =
priceList.stream().collect(Collectors.toMap(item->item,item->0,
(existing, replacement) -> existing, // 如果有冲突的键,则保留现有的键
LinkedHashMap::new));
//进行相同路线运费拉运单数统计
childs.forEach(item->{
if(priceMap.containsKey(item.getFreightPrice())){
priceMap.put(item.getFreightPrice(),priceMap.get(item.getFreightPrice()) + 1);
}
});
for (Map.Entry<BigDecimal, Integer> entry : priceMap.entrySet()) {
charts.add(HistoryLineTranVolumeChartVO.builder().pendingOrderFreight(entry.getKey()).number(
entry.getValue()).build());
}
return charts;
}
}
......@@ -40,11 +40,12 @@ import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.mq.OrderTruckBindCancelParam;
import com.clx.performance.vo.pc.DriverFreightPriceVO;
import com.clx.performance.vo.pc.OrderGoodsEditVO;
import com.clx.performance.vo.pc.OrderGoodsPendingVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.user.enums.driver.DriverInfoEnum;
import com.clx.user.feign.UserClxFeign;
import com.github.mustachejava.ObjectHandler;
import com.msl.common.base.Optional;
import com.msl.common.enums.ResultCodeEnum;
import com.msl.common.exception.ServiceSystemException;
......@@ -1066,4 +1067,19 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
return totalCancelWeight;
}
@Override
public List<DriverFreightPriceVO> getDriverFreightPriceList(String orderNo) {
List<OrderGoods> orderGoods = orderGoodsDao.listAfterCreatedByOrderNo(orderNo);
return orderGoodsStruct.convertDriverFreightList(orderGoods);
}
@Override
public List<OrderGoodsPendingVO> getOrderGoodsPendingList(String orderNo) {
List<OrderGoods> orderGoods = orderGoodsDao.listAfterCreatedByOrderNo(orderNo);
//升序排序
List<OrderGoods> sort = orderGoods.stream().sorted(Comparator.comparing(OrderGoods::getPendingOrderTime))
.collect(Collectors.toList());
return orderGoodsStruct.convertOrderGoodsPendingList(sort);
}
}
package com.clx.performance.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.SystemAddressVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.PerformanceProgressDao;
import com.clx.performance.dao.PerformanceProgressLogDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderEnum;
import com.clx.performance.enums.PerformanceProgressEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.PerformanceProgress;
import com.clx.performance.model.PerformanceProgressLog;
import com.clx.performance.param.pc.carrier.PagePerformanceProgress;
......@@ -35,10 +43,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
/**
* @author kavin
......@@ -57,6 +64,9 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
private final PerformanceProgressLogService performanceProgressLogService;
private final AddressService addressService;
private final GdService gdService;
private final OrderGoodsDao orderGoodsDao;
private final OrderChildDao orderChildDao;
private final OrderService orderService;
public static List<Integer> inProcessStatusList;
......@@ -260,6 +270,10 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
@Transactional(rollbackFor = Exception.class)
@Override
public void dealPerformanceProgress4OrderInfo(OrderInfoMessage data) {
//如果取消,删除履约进度表这条记录
if(Objects.equals(data.getOrderStatus(),OrderEnum.Status.CANCELED.getCode())){
performanceProgressDao.deleteByField(PerformanceProgress::getOrderNo,data.getOrderNo());
}
Optional<PerformanceProgress> optional = performanceProgressDao.getOneByField(PerformanceProgress::getOrderNo,
data.getOrderNo());
......@@ -272,11 +286,17 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
item.setGoodsName(data.getGoodsName());
item.setSendOverStandard(data.getOverWeight());
item.setTaskWeight(data.getTransportWeight().subtract(new BigDecimal(35)));
item.setPendingWeight(data.getTransportWeight().subtract(data.getResidueWeight()));
item.setTransportTimeSlot(DateUtils.formatDateTime(data.getTransportBeginTime()).get() + "至" +
DateUtils.formatDateTime(data.getTransportEndTime()).get());
if(Objects.equals(data.getOrderStatus(),OrderEnum.Status.COMPLETED.getCode()) ||
Objects.equals(data.getOrderStatus(),OrderEnum.Status.SUCCESS.getCode())
){
//TODO 计算测算运费
}
if(optional.isPresent()){
item.setId(optional.get().getId());
if(Objects.nonNull(data.getSendSystemAddressId()) &&
......@@ -338,4 +358,109 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
}
return systemAddress.get().getAddressShorter();
}
//履约进度表----货单部分
@Override
public void dealPerformanceProgress4OrderGoods(OrderGoods data) {
Optional<PerformanceProgress> optional = performanceProgressDao.getOneByField(PerformanceProgress::getOrderNo,
data.getOrderNo());
if(!optional.isPresent()){
log.error("货单对应的订单信息不存在,订单号:{},货单号:{}",data.getOrderNo(),data.getOrderGoodsNo());
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND);
}
//根据挂单时间倒序排序
List<OrderGoods> orderGoods = orderGoodsDao.listAfterCreatedByOrderNo(data.getOrderNo());
if(CollectionUtils.isEmpty(orderGoods)){
return;
}
Set<String> seniorLogisticsManagerNameSet = new HashSet<>();
BigDecimal pendingOrderFreight = null; //最新的货单的司机运费,取消的也算
LocalDateTime firstPendingTime = null; //挂单时间,取消的也算
for(OrderGoods item : orderGoods){
seniorLogisticsManagerNameSet.add(item.getSeniorLogisticsManagerName());
if(Objects.isNull(pendingOrderFreight)){
pendingOrderFreight = item.getPendingOrderFreight();
}
//最后一个挂单中的货单的挂单时间为最早的挂单时间
firstPendingTime = item.getPendingOrderTime();
}
PerformanceProgress update = new PerformanceProgress();
update.setId(optional.get().getId());
update.setSeniorLogisticsManagerName(JSON.toJSONString(new ArrayList<>(seniorLogisticsManagerNameSet)));
update.setDriverFreightPrice(pendingOrderFreight);
update.setPendingTime(firstPendingTime);
performanceProgressDao.updateEntityByKey(update);
}
//履约进度表----运单部分
@Override
public void dealPerformanceProgress4OrderChild(OrderChild data) {
Optional<PerformanceProgress> optional = performanceProgressDao.getOneByField(PerformanceProgress::getOrderNo,
data.getOrderNo());
if(!optional.isPresent()){
log.error("运单对应的订单信息不存在,订单号:{},运单号:{}",data.getOrderNo(),data.getChildNo());
throw new ServiceSystemException(ResultEnum.DATA_NOT_FIND);
}
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(data.getOrderNo()).get();
//取完成之前的运单数据
List<OrderChild> childs = orderChildDao.listBeforeCompleteByOrderNo(data.getOrderNo());
int orderedTruckNum = childs.size(); //接单车数
int arriveSendTruckNum = 0; //到达货源地车数
int loadTruckNum = 0; //装车车数
int unloadTruckNum = 0; //卸车车数
int onTheWayTruckNum ; // 在途车数
BigDecimal orderedRate; //接单率
BigDecimal taskCompleteRatio ; //任务完成率
BigDecimal sumLoadWeight = BigDecimal.ZERO; //矿发吨数
BigDecimal sumUnloadWeight = BigDecimal.ZERO; //到站吨数
BigDecimal sumOnTheWayWeight ; //在途吨数
BigDecimal orderedWeight = BigDecimal.ZERO; //接单吨数
for (OrderChild child : childs) {
if(child.getStatus() >= OrderChildEnum.Status.ARRIVE_SEND.getCode()){
arriveSendTruckNum = arriveSendTruckNum + 1;
}
if(child.getStatus() >= OrderChildEnum.Status.LOAD.getCode()){
loadTruckNum = loadTruckNum + 1;
sumLoadWeight = sumLoadWeight.add(child.getLoadNet());
orderedWeight = orderedWeight.add(child.getLoadNet());
}else{
orderedWeight = orderedWeight.add(child.getWeight());
}
if(child.getStatus() >= OrderChildEnum.Status.UNLOAD.getCode()){
unloadTruckNum = unloadTruckNum + 1;
sumUnloadWeight = sumUnloadWeight.add(child.getWeight());
}
}
//在途吨数 = 矿发量 - 到站量
sumOnTheWayWeight = sumLoadWeight.subtract(sumUnloadWeight);
//在途车辆数 = 装车车数 - 卸车车数
onTheWayTruckNum = loadTruckNum - unloadTruckNum;
//接单率 = 接单吨数 / 挂单吨数
orderedRate = orderedWeight .divide(optional.get().getPendingWeight(),3, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
//任务完成率 = 到站量 / 任务量
taskCompleteRatio = sumUnloadWeight.divide(orderInfo.getTransportWeight(),3, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
PerformanceProgress update = new PerformanceProgress();
update.setId(optional.get().getId());
update.setOrderedTruckNum(orderedTruckNum);
update.setArriveSendTruckNum(arriveSendTruckNum);
update.setLoadTruckNum(loadTruckNum);
update.setUnloadTruckNum(unloadTruckNum);
update.setOnTheWayTruckNum(onTheWayTruckNum);
update.setOrderedRate(orderedRate);
update.setTaskCompleteRatio(taskCompleteRatio);
update.setSumLoadWeight(sumLoadWeight);
update.setSumUnloadWeight(sumUnloadWeight);
update.setSumOnTheWayWeight(sumOnTheWayWeight);
performanceProgressDao.updateEntityByKey(update);
}
}
......@@ -2,6 +2,8 @@ package com.clx.performance.struct;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.DriverFreightPriceVO;
import com.clx.performance.vo.pc.OrderGoodsPendingVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.clx.performance.vo.pc.linewarn.LineWarnTraceVO;
import com.msl.common.utils.DateStructUtil;
......@@ -23,4 +25,9 @@ public interface OrderGoodsStruct {
@Mapping(target = "receiveAddress", source = "receiveAddressShorter")
LineWarnTraceVO convertLineWarnTraceVO(OrderGoods item);
List<DriverFreightPriceVO> convertDriverFreightList(List<OrderGoods> orderGoods);
List<OrderGoodsPendingVO> convertOrderGoodsPendingList(List<OrderGoods> orderGoods);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论