提交 d4776ebe authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v6.2_sync_trade_20231102' into v6.4_transportation_20231110

# Conflicts: # performance-web/src/main/java/com/clx/performance/dao/OrderChildDao.java # performance-web/src/main/java/com/clx/performance/dao/OrderGoodsDao.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderChildDaoImpl.java # performance-web/src/main/java/com/clx/performance/dao/impl/OrderGoodsDaoImpl.java # performance-web/src/main/java/com/clx/performance/mapper/OrderChildMapper.java # performance-web/src/main/java/com/clx/performance/mapper/OrderGoodsMapper.java # performance-web/src/main/java/com/clx/performance/sqlProvider/OrderChildSqlProvider.java
...@@ -128,6 +128,16 @@ public enum OrderChildEnum { ...@@ -128,6 +128,16 @@ public enum OrderChildEnum {
); );
//dts 监听的取消运单
public static final List<Integer> DTS_LISTEN_CANCEL_lIST = Arrays.asList(
Status.DRIVER_CANCEL.getCode(),
Status.PLATFORM_CANCEL.getCode(),
Status.OWNER_CANCEL.getCode(),
Status.ARTIFICIAL_CANCEL.getCode()
);
// 取消 // 取消
public static final List<Integer> CANCEL_lIST = Arrays.asList( public static final List<Integer> CANCEL_lIST = Arrays.asList(
Status.DRIVER_CANCEL.getCode(), Status.DRIVER_CANCEL.getCode(),
...@@ -157,7 +167,11 @@ public enum OrderChildEnum { ...@@ -157,7 +167,11 @@ public enum OrderChildEnum {
Status.LOAD.getCode(), Status.LOAD.getCode(),
Status.GO_TO_RECEIVE.getCode(), Status.GO_TO_RECEIVE.getCode(),
Status.ARRIVE_RECEIVE.getCode(), Status.ARRIVE_RECEIVE.getCode(),
Status.UNLOAD.getCode() Status.UNLOAD.getCode(),
Status.DRIVER_CANCEL.getCode(),
Status.PLATFORM_CANCEL.getCode(),
Status.OWNER_CANCEL.getCode(),
Status.ARTIFICIAL_CANCEL.getCode()
); );
......
...@@ -128,6 +128,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int ...@@ -128,6 +128,11 @@ public interface OrderChildDao extends BaseDao<OrderChildMapper, OrderChild, Int
*/ */
List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo); List<OrderChild> selectInTransitOrderChildByOrderGoodsNo(String orderGoodsNo);
OrderChild findLastTruckChild(String orderNo);
BigDecimal listAfterArrayReceiveChild(String orderNo);
OrderChild getLastTruckChild(String orderNo);
BigDecimal getLinePoundDifferenceRatioAvg(@Param("sendSystemAddressId") Integer sendSystemAddressId, BigDecimal getLinePoundDifferenceRatioAvg(@Param("sendSystemAddressId") Integer sendSystemAddressId,
@Param("receiveSystemAddressId") Integer receiveSystemAddressId, @Param("receiveSystemAddressId") Integer receiveSystemAddressId,
@Param("beginTime") String beginTime); @Param("beginTime") String beginTime);
......
...@@ -87,6 +87,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int ...@@ -87,6 +87,8 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo); List<OrderGoods> getOrderGoodsListByOrderNoAndStatus(String orderNo);
BigDecimal getAlreadyTransportWeight(String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> list); List<OrderGoodsAPPVO> getCancelOrderGoods(List<String> list);
BigDecimal sumAlreadyTransportWeightByOrderNo(String orderNo); BigDecimal sumAlreadyTransportWeightByOrderNo(String orderNo);
......
...@@ -386,6 +386,28 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild, ...@@ -386,6 +386,28 @@ public class OrderChildDaoImpl extends BaseDaoImpl<OrderChildMapper, OrderChild,
.lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode()) .lt(OrderChild::getStatus, OrderChildEnum.Status.UNLOAD.getCode())
); } ); }
@Override
public OrderChild findLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.notIn(OrderChild::getStatus,OrderChildEnum.DTS_LISTEN_CANCEL_lIST)
.orderByDesc(OrderChild::getCreateTime)
.last("limit 1"));
}
@Override
public BigDecimal listAfterArrayReceiveChild(String orderNo) {
return baseMapper.listAfterArrayReceiveChild(orderNo);
}
@Override
public OrderChild getLastTruckChild(String orderNo) {
return getOne(lQrWrapper().eq(OrderChild::getOrderNo,orderNo)
.ge(OrderChild::getStatus,OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())
.le(OrderChild::getStatus,OrderChildEnum.Status.COMPLETE.getCode())
.orderByDesc(OrderChild::getArriveReceiveTime)
.last("limit 1"));
}
@Override @Override
public OrderChildVO findArtificialCancelOrder(String orderChildNo) { public OrderChildVO findArtificialCancelOrder(String orderChildNo) {
return baseMapper.findArtificialCancelOrder(orderChildNo); return baseMapper.findArtificialCancelOrder(orderChildNo);
......
...@@ -250,4 +250,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods, ...@@ -250,4 +250,8 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
} }
@Override
public BigDecimal getAlreadyTransportWeight(String orderNo) {
return baseMapper.getAlreadyTransportWeight(orderNo);
}
} }
...@@ -4,17 +4,17 @@ import com.alibaba.fastjson.JSON; ...@@ -4,17 +4,17 @@ import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.OpenCallBackClient; import com.clx.open.sdk.callback.OpenCallBackClient;
import com.clx.open.sdk.callback.message.OrderChildMessage; import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.open.sdk.enums.ResultStatusEnum; import com.clx.open.sdk.enums.ResultStatusEnum;
import com.clx.order.enums.SyncPlatformEnum;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO; import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.config.MslAppConfig; import com.clx.performance.config.MslAppConfig;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dto.dts.DataTransportDTO; import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum; import com.clx.performance.enums.DtsOperationTypeEnum;
import com.clx.performance.enums.OrderChildEnum; import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.service.LastTruckService;
import com.clx.performance.struct.OrderChildStruct;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.DtsMapConvertUtil; import com.msl.common.utils.DtsMapConvertUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -24,13 +24,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener; ...@@ -24,13 +24,8 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
@Slf4j @Slf4j
@Component @Component
...@@ -42,34 +37,33 @@ public class OrderChildDtsListener { ...@@ -42,34 +37,33 @@ public class OrderChildDtsListener {
@Autowired @Autowired
private OrderFeign orderFeign; private OrderFeign orderFeign;
@Autowired @Autowired
private OrderGoodsDao orderGoodsDao; LastTruckService lastTruckService;
@Autowired @Autowired
private OrderChildDao orderChildDao; OrderChildStruct orderChildStruct;
@RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE) @RabbitListener(queues = RabbitKeyConstants.CLX_PERFORMANCE_ORDER_CHILD_QUEUE)
public void onMessage(Message message) { public void onMessage(Message message) {
try { try {
String msg = new String(message.getBody()); String msg = new String(message.getBody());
log.info("DTS消息同步开始, database:clx_performance.order_child, msg:{}", msg); log.info("DTS消息同步开始, database:clx_performance.order_child, msg:{}", msg);
DataTransportDTO dataTransportDTO = JSON.parseObject(msg, DataTransportDTO.class); 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 before = DtsMapConvertUtil.convert(dataTransportDTO.getBeforeMap(), new OrderChildMessage());
OrderChildMessage after = DtsMapConvertUtil.convert(dataTransportDTO.getAfterMap(), new OrderChildMessage()); OrderChildMessage after = DtsMapConvertUtil.convert(dataTransportDTO.getAfterMap(), new OrderChildMessage());
if(Objects.equals(DtsOperationTypeEnum.INSERT.getCode(),dataTransportDTO.getOperationType().getCode())){ if(Objects.equals(DtsOperationTypeEnum.INSERT.getCode(),dataTransportDTO.getOperationType().getCode())){
//同步after数据 //同步after数据
log.info("新增:{}"+after); log.info("新增:{}"+after);
// OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret()); if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){
// Result result = client.encryptPost(JSON.toJSONString(after),after.topic()); orderChildChangeAfter(after);
// log.info("响应结果:{}",JSON.toJSONString(result)); }
}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);
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){ if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){
//同步after数据
orderChildChangeAfter(after); orderChildChangeAfter(after);
} }
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
...@@ -77,8 +71,6 @@ public class OrderChildDtsListener { ...@@ -77,8 +71,6 @@ public class OrderChildDtsListener {
log.info("删除:{}"+before); log.info("删除:{}"+before);
} }
} catch (Exception e) { } catch (Exception e) {
log.info("DTS消息同步失败, database:clx_performance.order_child, error:{}", e.getMessage()); log.info("DTS消息同步失败, database:clx_performance.order_child, error:{}", e.getMessage());
} }
...@@ -89,24 +81,34 @@ public class OrderChildDtsListener { ...@@ -89,24 +81,34 @@ public class OrderChildDtsListener {
if (orderInfoFeign == null) { if (orderInfoFeign == null) {
return; return;
} }
after.setLastFlag(ResultStatusEnum.NO.getCode()); //同步交易平台的运单
long nowTimeMillis = System.currentTimeMillis(); if(Objects.equals(orderInfoFeign.getOrderSource(), SyncPlatformEnum.TRADE_PLATFORM.getCode())){
LocalDateTime nowDateTime = new Date(nowTimeMillis).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime(); //同步after数据
//如果当前货单已完成,则判断之前所有货单是否等于订单总吨数,等于则更新订单为已完成 Optional<OrderChildEnum.Status> option = OrderChildEnum.Status.getByCode(after.getStatus());
List<OrderGoods> list = orderGoodsDao.getOrderGoodsListByOrderNoAndLastArriveSendTime(after.getOrderNo(), nowDateTime); String statusName = option.isPresent()?option.get().getName():"未知状态";
BigDecimal childSum = list.stream().map(OrderGoods::getExtractWeight).reduce(BigDecimal.ZERO, BigDecimal::add); log.info("同步运单数据,运单号:{},运单状态:{}",after.getChildNo(),statusName);
log.info("算出所有货单总量:{}, 订单总吨数:{}", childSum, orderInfoFeign.getTransportWeight()); //如果订单是取消操作,同步给交易平台统一 10000 的code
if (childSum.compareTo(orderInfoFeign.getTransportWeight()) == 0) { if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){
// 按照时间 倒序查出最后一条进行中的运单 after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode());
OrderChild orderChild = orderChildDao.getGoingLatestOrderChildByOrderNo(after.getOrderNo());
if(Objects.nonNull(orderChild) && orderChild.getChildNo().equals(after.getChildNo())){
after.setLastFlag(ResultStatusEnum.YES.getCode());
} }
} after.setLastFlag(ResultStatusEnum.NO.getCode());
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret()); OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result result = client.encryptPost(JSON.toJSONString(after),after.topic()); Result<?> result = client.encryptPost(JSON.toJSONString(after),after.topic());
log.info("订单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result)); log.info("运单信息同步,运单编号:{},响应结果:{}",after.getChildNo(),JSON.toJSONString(result));
//当运单状态为到达目的地时候,需要判断最后一车的逻辑
if(Objects.equals(after.getStatus(),OrderChildEnum.Status.ARRIVE_RECEIVE.getCode())){
OrderChild child = lastTruckService.getLastTruckChild(after.getOrderNo());
if(Objects.nonNull(child)){
log.info("开始同步最后一车的运单,运单编号:{}",child.getChildNo());
OrderChildMessage message = orderChildStruct.convertMessage(child);
message.setLastFlag(ResultStatusEnum.YES.getCode());
OpenCallBackClient client2 = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
Result<?> result2 = client2.encryptPost(JSON.toJSONString(after),after.topic());
log.info("结束同步最后一车的运单,运单编号:{},响应结果:{}",child.getChildNo(),JSON.toJSONString(result2));
}
}
}
} }
} }
...@@ -49,6 +49,10 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> { ...@@ -49,6 +49,10 @@ public interface OrderChildMapper extends BaseMapper<OrderChild> {
int countValidByOrderGoodsNo(String orderGoodsNo); int countValidByOrderGoodsNo(String orderGoodsNo);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus") @UpdateProvider(type = OrderChildSqlProvider.class, method = "batchUpdateOrderChildStatus")
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "remark") String remark, @Param(value = "ids") List<Integer> ids);
@UpdateProvider(type = OrderChildSqlProvider.class, method = "listAfterArrayReceiveChild")
BigDecimal listAfterArrayReceiveChild(@Param(value = "orderNo")String orderNo);
Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "ids") List<Integer> ids); Integer updateOrderGoodsSetResidueWeight(@Param(value = "status") Integer status, @Param(value = "ids") List<Integer> ids);
@Select("select AVG((load_net-unload_net)/load_net) from order_child " + @Select("select AVG((load_net-unload_net)/load_net) from order_child " +
......
...@@ -77,6 +77,9 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> { ...@@ -77,6 +77,9 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id); Integer updateOrderGoodsSetResidueWeightAndAlreadyWeightAndStatus(@Param(value = "residueWeight") BigDecimal residueWeight,@Param(value = "alreadyWeight") BigDecimal alreadyWeight,@Param(value = "status") Integer status,@Param(value = "id") Integer id);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getCancelOrderGoods") @SelectProvider(type = OrderGoodsSqlProvider.class, method = "getCancelOrderGoods")
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<OrderGoodsTruckBind> param);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "getAlreadyTransportWeight")
BigDecimal getAlreadyTransportWeight(@Param("orderNo") String orderNo);
List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param); List<OrderGoodsAPPVO> getCancelOrderGoods(@Param(value = "param") List<String> param);
@Select("select sum(already_transport_weight) from order_goods where order_no=#{orderNo}") @Select("select sum(already_transport_weight) from order_goods where order_no=#{orderNo}")
......
package com.clx.performance.service;
import com.clx.performance.model.OrderChild;
public interface LastTruckService {
OrderChild getLastTruckChild(String orderNo);
}
package com.clx.performance.service.impl;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.model.OrderChild;
import com.clx.performance.service.LastTruckService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Objects;
/**
* @ClassName LastTruckServiceImpl
* @Description
* @Author kavin
* @Date 2023/11/9 13:13
* @Version 1.0
*/
@Service
@Slf4j
@AllArgsConstructor
public class LastTruckServiceImpl implements LastTruckService {
private final OrderFeign orderFeign;
private final OrderChildDao orderChildDao;
/**
* @Author kavin
* @Description 判断最后一车的逻辑
* @Param [orderNo]
* @return
**/
@Override
public OrderChild getLastTruckChild(String orderNo) {
FeignOrderVO orderInfo = orderFeign.getOrderInfoFeign(orderNo);
if(Objects.isNull(orderInfo)){
log.error("计算最后一车,通过订单号:{},未查询到对应的订单",orderNo);
return null;
}
BigDecimal weight = orderChildDao.listAfterArrayReceiveChild(orderNo);
//判断当前订单下所有到达目的地之后的运单的装车吨数 + 向下浮动量 >= 订单拉运吨数
log.info("订单号:{} ,计算是否到达可计算最后一车标准,运单累计拉运吨数:{}, 向下浮动量:{},订单拉运吨数:{}",
orderNo,weight,orderInfo.getDownFloatWeight(),orderInfo.getTransportWeight());
if(Objects.nonNull(weight) && weight.add(new BigDecimal(orderInfo.getDownFloatWeight())).compareTo(orderInfo.getTransportWeight()) >= 0){
//查询最后一车的运单
OrderChild child = orderChildDao.getLastTruckChild(orderNo);
log.info("当前订单计算出最后一车,运单编号:{} ", child.getChildNo());
return child;
}
return null;
}
}
...@@ -148,6 +148,18 @@ public class OrderChildSqlProvider { ...@@ -148,6 +148,18 @@ public class OrderChildSqlProvider {
return sqlList.toString(); return sqlList.toString();
} }
public String listAfterArrayReceiveChild(String orderNo){
String sql = new SQL() {{
SELECT("sum(load_net)");
FROM("order_child ");
WHERE("order_no = #{orderNo}");
WHERE("status >=" + OrderChildEnum.Status.ARRIVE_RECEIVE.getCode());
WHERE("status <=" + OrderChildEnum.Status.COMPLETE.getCode());
}}.toString();
return sql;
}
public String findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo) { public String findArtificialCancelOrder(@Param("orderChildNo") String orderChildNo) {
String sql = "select child_no,goods_name,freight_price,order_no," + String sql = "select child_no,goods_name,freight_price,order_no," +
"send_address,receive_address," + "send_address,receive_address," +
......
...@@ -286,4 +286,13 @@ public class OrderGoodsSqlProvider { ...@@ -286,4 +286,13 @@ public class OrderGoodsSqlProvider {
} }
public String getAlreadyTransportWeight(String orderNo){
String sql = new SQL() {{
SELECT("sum(already_transport_weight)");
FROM("order_goods ");
WHERE("order_no = #{orderNo}");
}}.toString();
return sql;
}
} }
package com.clx.performance.struct; package com.clx.performance.struct;
import com.clx.open.sdk.callback.message.OrderChildMessage;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.vo.app.GoingOrderChildVO; import com.clx.performance.vo.app.GoingOrderChildVO;
import com.clx.performance.vo.app.OrderChildVO; import com.clx.performance.vo.app.OrderChildVO;
...@@ -23,5 +24,8 @@ public interface OrderChildStruct { ...@@ -23,5 +24,8 @@ public interface OrderChildStruct {
GoingOrderChildVO convertGoingOrder(OrderChild item); GoingOrderChildVO convertGoingOrder(OrderChild item);
OrderChildMessage convertMessage(OrderChild item);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论