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

增加履约进度表订单相关保存和更新接口

上级 b99f753c
......@@ -110,4 +110,10 @@ public class RabbitKeyConstants {
//货主结算单数据同步货主客户端 需要手动创建对列交换机
public static final String CLX_PERFORMANCE_SETTLEMENT_OWNER_QUEUE = "clx_performance.settlement_owner_queue";
//同步履约进度表消息----订单部分
public static final String SYNC_PERFORMANCE_PROGRESS_QUEUE = "clx_order.sync.performance.progress.queue";
}
......@@ -16,5 +16,7 @@ import java.util.List;
public interface PerformanceProgressDao extends BaseDao<PerformanceProgressMapper, PerformanceProgress, Integer> {
IPage<PerformanceProgress> pagePerformanceProgress(List<Integer> statusList, PagePerformanceProgress param);
void updateRecordOrder(Integer seq,boolean isUp);
void updateRecordOrder(Long seq,boolean isUp);
long getMaxSeq();
}
......@@ -31,7 +31,7 @@ public class PerformanceProgressDaoImpl extends BaseDaoImpl<PerformanceProgressM
}
@Override
public void updateRecordOrder(Integer seq,boolean isUp) {
public void updateRecordOrder(Long seq,boolean isUp) {
LambdaUpdateWrapper<PerformanceProgress> update = new LambdaUpdateWrapper<>();
if(isUp){
update.gt(PerformanceProgress :: getSeq,seq);
......@@ -41,4 +41,10 @@ public class PerformanceProgressDaoImpl extends BaseDaoImpl<PerformanceProgressM
update.setSql("seq = seq + 1");
baseMapper.update(null,update);
}
@Override
public long getMaxSeq() {
LambdaQueryWrapper<PerformanceProgress> query = new LambdaQueryWrapper<>();
return baseMapper.selectCount(query);
}
}
package com.clx.performance.extranal.user;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.SystemAddressVO;
import com.msl.common.base.Optional;
public interface AddressService {
Optional<FeignAddressVO> getSendAndReceiveAddress(Integer sendAddressId, Integer receiveAddressId);
Optional<SystemAddressVO> getSystemAddress(Integer addressId);
}
......@@ -2,6 +2,7 @@ package com.clx.performance.extranal.user.impl;
import com.clx.order.feign.AddressFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.SystemAddressVO;
import com.clx.performance.extranal.user.AddressService;
import com.msl.common.base.Optional;
import com.msl.common.result.Result;
......@@ -22,4 +23,10 @@ public class AddressServiceImpl implements AddressService {
.map(Result::getData);
}
@Override
public Optional<SystemAddressVO> getSystemAddress(Integer addressId) {
return Optional.ofNullable(addressFeign.getSystemAddress(addressId))
.filter(Result::succeed)
.map(Result::getData);
}
}
......@@ -11,6 +11,7 @@ import com.clx.performance.dto.dts.DataTransportDTO;
import com.clx.performance.enums.DtsOperationTypeEnum;
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.service.OrderGoodsLogService;
import com.msl.common.utils.DtsMapConvertUtil;
......@@ -46,9 +47,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());
}else if(Objects.equals(DtsOperationTypeEnum.UPDATE.getCode(),dataTransportDTO.getOperationType().getCode())){
log.info("修改:{}",JSON.toJSONString(after));
backFillOrderWeight(after);
orderGoodsChangeAfter(before,after,DtsOperationTypeEnum.UPDATE.getCode());
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
//数据删除
log.info("删除:{}",JSON.toJSONString(before));
......@@ -82,4 +85,23 @@ public class OrderGoodsDtsListener {
after.getOrderNo(),after.getOrderGoodsNo(),after.getResidueTransportWeight());
}
}
public void orderGoodsChangeAfter(OrderGoods before,OrderGoods after, Integer updateType) {
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())
)
){
}
}
}
}
......@@ -30,7 +30,7 @@ public class PerformanceProgress implements HasKey<Integer> {
@TableField("seq")
@ApiModelProperty("排序")
private Integer seq;
private Long seq;
@TableField("order_no")
@ApiModelProperty("订单编号")
......@@ -92,9 +92,6 @@ public class PerformanceProgress implements HasKey<Integer> {
@ApiModelProperty("任务吨数")
private BigDecimal taskWeight;
@TableField("transport_weight")
@ApiModelProperty("任务吨数")
private BigDecimal transportWeight;
@TableField("pending_weight")
@ApiModelProperty("挂单吨数")
......
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.PerformanceProgress;
import com.clx.performance.param.pc.carrier.PagePerformanceProgress;
import com.clx.performance.param.pc.carrier.UpdatePerformanceProgressParam;
......@@ -28,4 +29,6 @@ public interface PerformanceProgressService {
PerformanceProgressDetailVO getPerformanceProgressDetail(Integer id);
List<PerformanceProgressOperationLogVO> getOperationLog(String orderNo);
void dealPerformanceProgress4OrderInfo(OrderInfoMessage data);
}
......@@ -2,11 +2,16 @@ package com.clx.performance.service.impl;
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.SystemAddressVO;
import com.clx.performance.dao.PerformanceProgressDao;
import com.clx.performance.dao.PerformanceProgressLogDao;
import com.clx.performance.dto.gd.GdRouteDTO;
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.model.PerformanceProgress;
import com.clx.performance.model.PerformanceProgressLog;
import com.clx.performance.param.pc.carrier.PagePerformanceProgress;
......@@ -15,17 +20,21 @@ import com.clx.performance.service.PerformanceProgressLogService;
import com.clx.performance.service.PerformanceProgressService;
import com.clx.performance.struct.PerformanceProgressLogStruct;
import com.clx.performance.struct.PerformanceProgressStruct;
import com.clx.performance.utils.gd.GdService;
import com.clx.performance.vo.pc.PerformanceProgressDetailVO;
import com.clx.performance.vo.pc.PerformanceProgressOperationLogVO;
import com.clx.performance.vo.pc.PerformanceProgressVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.utils.DateUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
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;
......@@ -46,6 +55,8 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
private final PerformanceProgressLogDao performanceProgressLogDao;
private final PerformanceProgressLogStruct performanceProgressLogStruct;
private final PerformanceProgressLogService performanceProgressLogService;
private final AddressService addressService;
private final GdService gdService;
public static List<Integer> inProcessStatusList;
......@@ -245,4 +256,86 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
List<PerformanceProgressLog> list = performanceProgressLogDao.getOperationLog(orderNo);
return performanceProgressLogStruct.convertList(list);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void dealPerformanceProgress4OrderInfo(OrderInfoMessage data) {
Optional<PerformanceProgress> optional = performanceProgressDao.getOneByField(PerformanceProgress::getOrderNo,
data.getOrderNo());
PerformanceProgress item = new PerformanceProgress();
item.setOrderStatus(data.getOrderStatus());
item.setGoodsTypeCode(data.getGoodsTypeCode());
item.setGoodsTypeName(data.getGoodsTypeName());
item.setGoodsNameId(data.getGoodsNameId());
item.setGoodsName(data.getGoodsName());
item.setSendOverStandard(data.getOverWeight());
item.setTaskWeight(data.getTransportWeight().subtract(new BigDecimal(35)));
item.setTransportTimeSlot(DateUtils.formatDateTime(data.getTransportBeginTime()).get() + "至" +
DateUtils.formatDateTime(data.getTransportEndTime()).get());
if(optional.isPresent()){
item.setId(optional.get().getId());
if(Objects.nonNull(data.getSendSystemAddressId()) &&
!Objects.equals(optional.get().getSendSystemAddressId(),data.getSendSystemAddressId())){
item.setSendSystemAddressId(data.getSendSystemAddressId());
item.setSendSystemAddressShorter(getSystemAddressShorter(data.getSendSystemAddressId()));
}
performanceProgressDao.updateEntityByKey(item);
}else{
//查询最大的seq
long seq = performanceProgressDao.getMaxSeq();
item.setSeq(seq + 1);
Optional<FeignAddressVO> sendAndReceiveAddress = addressService.getSendAndReceiveAddress(
data.getSendAddressId(), data.getReveiveAddressId());
if (!sendAndReceiveAddress.isPresent()) {
log.warn("通过发货地址Id:{},收货地址Id:{} 查询对应的地址信息结果:{}",
data.getSendAddressId(),data.getReveiveAddressId(),sendAndReceiveAddress);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"履约进度表订单对应的收发货地址信息为空");
}
FeignAddressVO.Address sendAddress = sendAndReceiveAddress.get().getSendAddress();
FeignAddressVO.Address receiveAddress = sendAndReceiveAddress.get().getReceiveAddress();
BigDecimal distance = null;
//重车运距(收发货地址距离)
try{
List<GdRouteDTO> route = gdService.getRoute(sendAddress.getLongitude(), sendAddress.getLatitude(),
receiveAddress.getLongitude(), receiveAddress.getLongitude());
if (!route.isEmpty()){
distance = new BigDecimal(route.get(0).getDistance() /1000);
}
}catch (Exception e){
log.warn("订单计算重车运距失败,订单号:{},失败原因:{}",data.getOrderNo(), ExceptionUtils.getStackTrace(e));
}
item.setOrderDistance(distance);
if(Objects.nonNull(data.getSendSystemAddressId())){
item.setSendSystemAddressId(data.getSendSystemAddressId());
item.setSendSystemAddressShorter(getSystemAddressShorter(data.getSendSystemAddressId()));
}
item.setSendAddressId(data.getSendAddressId());
item.setSendAddressShorter(data.getSendAddressShorter());
item.setSendAddress(sendAddress.getProvince()+sendAddress.getCity()+sendAddress.getCounty()
+ sendAddress.getAddress());
item.setSeq(seq);
performanceProgressDao.saveEntity(item);
}
}
private String getSystemAddressShorter(Integer addressId){
Optional<SystemAddressVO> systemAddress = addressService.getSystemAddress(addressId);
if (!systemAddress.isPresent()) {
log.warn("通过发货系统地址Id:{},查询对应的地址信息结果:{}",
addressId,systemAddress);
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"履约进度表订单对应的系统发货地址信息为空");
}
return systemAddress.get().getAddressShorter();
}
}
......@@ -14,4 +14,5 @@ public interface PerformanceProgressStruct {
List<PerformanceProgressVO> convertList(List<PerformanceProgress> records);
PerformanceProgressDetailVO convert(PerformanceProgress item);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论