提交 5a40a9ab authored 作者: 艾庆国's avatar 艾庆国

承运与无车承运对接

上级 90534f28
package com.clx.performance.feign; package com.clx.performance.feign;
import com.clx.performance.vo.pc.broker.TransportParam; import com.clx.performance.vo.pc.broker.TransportParam;
import com.clx.performance.vo.pc.broker.TransportVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import feign.Param;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@FeignClient(name = "broker-service",configuration = PerformanceClientConfiguration.class,url = "${settlement.brokerHost}") @FeignClient(name = "broker-service",configuration = PerformanceClientConfiguration.class,url = "${settlement.brokerHost}")
public interface BrokerFeign { public interface BrokerFeign {
...@@ -15,4 +21,9 @@ public interface BrokerFeign { ...@@ -15,4 +21,9 @@ public interface BrokerFeign {
*/ */
@RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/saveTransport") @RequestMapping(method = RequestMethod.POST, value = "/broker-service/open/transport/saveTransport")
Result<String> saveTransport(@RequestBody TransportParam param); Result<String> saveTransport(@RequestBody TransportParam param);
@RequestMapping(value = "/broker-service/open/transport/getTransportByChildNo", method = RequestMethod.GET)
Result<TransportVO> getTransportByChildNo(@RequestParam @NotBlank(message = "运单编号不能为空") String childNo,
@RequestParam @NotNull(message = "userCode不能为空") String userCode);
} }
package com.clx.performance.vo.mq;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @Author: aiqingguo
* @Description: 结算
* @Date: 2023-10-19 15:45:25
* @Version: 1.0
*/
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementSettleMqParam {
private String childNo; //运单编号
private Integer InvoiceType; //开票类型
}
...@@ -72,6 +72,18 @@ public class RabbitSettlementConfig { ...@@ -72,6 +72,18 @@ public class RabbitSettlementConfig {
public Binding settlementDetailInvoiceTypeSyncQueueBinding() { public Binding settlementDetailInvoiceTypeSyncQueueBinding() {
return BindingBuilder.bind(settlementDetailInvoiceTypeSyncQueue()).to(settlementDefaultExchange()).with(RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY); return BindingBuilder.bind(settlementDetailInvoiceTypeSyncQueue()).to(settlementDefaultExchange()).with(RabbitKeySettlementConstants.SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY);
} }
/**
* 结算
*/
@Bean
public Queue settlementSettleQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_QUEUE);
}
@Bean
public Binding settlementSettleQueueQueueBinding() {
return BindingBuilder.bind(settlementSettleQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY);
}
} }
...@@ -45,4 +45,10 @@ public class RabbitKeySettlementConstants { ...@@ -45,4 +45,10 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE; public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_QUEUE = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE;
public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE_ROUTING_KEY; public static final String SETTLEMENT_DETAIL_INVOICE_TYPE_SYC_ROUTING_KEY = PREFIX +"settlementDetailInvoiceType.sync"+QUEUE_ROUTING_KEY;
/**
* 结算
*/
public static final String SETTLEMENT_SETTLE_QUEUE = PREFIX +"settlement.settle"+QUEUE;
public static final String SETTLEMENT_SETTLE_ROUTING_KEY = PREFIX +"settlement.settle"+QUEUE_ROUTING_KEY;
} }
package com.clx.performance.dao.impl; package com.clx.performance.dao.impl;
import com.clx.performance.enums.TransportSyncTypeEnum;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao; import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.mapper.OrderChildSyncTransportInvoiceRecordMapper; import com.clx.performance.mapper.OrderChildSyncTransportInvoiceRecordMapper;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord; import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
...@@ -19,6 +19,8 @@ public class OrderChildSyncTransportInvoiceRecordDaoImpl extends BaseDaoImpl<Ord ...@@ -19,6 +19,8 @@ public class OrderChildSyncTransportInvoiceRecordDaoImpl extends BaseDaoImpl<Ord
@Override @Override
public List<OrderChildSyncTransportInvoiceRecord> selectListForJob() { public List<OrderChildSyncTransportInvoiceRecord> selectListForJob() {
return baseMapper.selectList(null); return list(lUdWrapper()
.le(OrderChildSyncTransportInvoiceRecord::getCreateTime, LocalDateTime.now().minusMinutes(10))
);
} }
} }
package com.clx.performance.extranal.broker; package com.clx.performance.extranal.broker;
import com.clx.performance.vo.pc.broker.TransportParam; import com.clx.performance.vo.pc.broker.TransportParam;
import com.clx.performance.vo.pc.broker.TransportVO;
public interface BrokerService { public interface BrokerService {
void orderChildSync(TransportParam param); void orderChildSync(TransportParam param);
TransportVO getTransportByChildNo(String childNo);
} }
package com.clx.performance.extranal.broker.impl; package com.clx.performance.extranal.broker.impl;
import com.clx.performance.config.SettlementConfig;
import com.clx.performance.extranal.broker.BrokerService; import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.feign.BrokerFeign; import com.clx.performance.feign.BrokerFeign;
import com.clx.performance.vo.pc.broker.TransportParam; import com.clx.performance.vo.pc.broker.TransportParam;
import com.clx.performance.vo.pc.broker.TransportVO;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -13,13 +15,27 @@ import org.springframework.stereotype.Service; ...@@ -13,13 +15,27 @@ import org.springframework.stereotype.Service;
public class BrokerServiceImpl implements BrokerService { public class BrokerServiceImpl implements BrokerService {
@Autowired @Autowired
public BrokerFeign brokerFeign; public BrokerFeign brokerFeign;
@Autowired
private SettlementConfig settlementConfig;
@Override @Override
public void orderChildSync(TransportParam param) { public void orderChildSync(TransportParam param) {
param.setUserCode(settlementConfig.getBrokerUserCode());
Result<String> result = brokerFeign.saveTransport(param); Result<String> result = brokerFeign.saveTransport(param);
if (result.getCode() != 0) { if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg()); log.info("运单同步网络货运失败, msg:{}", result.getMsg());
} }
} }
@Override
public TransportVO getTransportByChildNo(String childNo) {
Result<TransportVO> result = brokerFeign.getTransportByChildNo(childNo, settlementConfig.getBrokerUserCode());
if (result.getCode() != 0) {
log.info("运单同步网络货运失败, msg:{}", result.getMsg());
}
return result.getData();
}
} }
...@@ -49,9 +49,9 @@ public class OrderChildSyncTransportInvoiceExceptionJob { ...@@ -49,9 +49,9 @@ public class OrderChildSyncTransportInvoiceExceptionJob {
private final SettlementDriverDetailDao settlementDriverDetailDao; private final SettlementDriverDetailDao settlementDriverDetailDao;
/** /**
* 同步网络货运 * 同步网络货运(禁用)
*/ */
@XxlJob("orderChildSyncTransportInvoiceExceptionJob") // @XxlJob("orderChildSyncTransportInvoiceExceptionJob")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void orderChildSyncTransportInvoiceExceptionJob() { public void orderChildSyncTransportInvoiceExceptionJob() {
//只查询同步异常的网络货运任务 //只查询同步异常的网络货运任务
......
package com.clx.performance.job; package com.clx.performance.job.settlement;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
......
package com.clx.performance.job.settlement;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.dao.OrderChildSyncTransportInvoiceRecordDao;
import com.clx.performance.enums.TransportSyncTypeEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.extranal.broker.BrokerService;
import com.clx.performance.model.OrderChildSyncTransportInvoiceRecord;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.pc.broker.TransportVO;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
@AllArgsConstructor
public class SettlementJob {
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final BrokerService brokerService;
private final SettlementMqService settlementMqService;
/**
* 同步无车承运运单状态
*/
@XxlJob("settlementInvoiceTypeSync")
public void settlementInvoiceTypeSync() {
List<OrderChildSyncTransportInvoiceRecord> recordList = orderChildSyncTransportInvoiceRecordDao
.selectListForJob();
log.info("待同步无车承运运单状态,size:{}", recordList.size());
if (recordList.isEmpty()) {return;}
List<Integer> ids = new LinkedList<>();
for (OrderChildSyncTransportInvoiceRecord item : recordList) {
log.info("同步无车承运运单状态:{}", JSONUtil.parse(item));
try {
// 获取状态
TransportVO result = brokerService.getTransportByChildNo(item.getChildNo());
Integer invoiceType;
if (Objects.equals(result.getRiskStatus(), 1) || Objects.equals(result.getRiskStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
} else if (Objects.equals(result.getSyncStatus(), 2)) {
invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
} else if (Objects.equals(result.getSyncStatus(), 0)) {
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(item.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("处理中");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
continue;
} else {
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
}
// 发送mq (结算)
settlementMqService.settle(item.getChildNo(), invoiceType);
}catch (Exception e){
OrderChildSyncTransportInvoiceRecord entity = new OrderChildSyncTransportInvoiceRecord();
entity.setChildNo(item.getChildNo());
entity.setType(TransportSyncTypeEnum.Type.EXCEPTION.getCode());
entity.setRemark("接口调用失败");
orderChildSyncTransportInvoiceRecordDao.saveEntity(entity);
}
}
orderChildSyncTransportInvoiceRecordDao.deleteByKeys(ids);
}
}
package com.clx.performance.job; package com.clx.performance.job.settlement;
import com.clx.performance.dao.settle.SettlementOwnerDao; import com.clx.performance.dao.settle.SettlementOwnerDao;
import com.clx.performance.enums.settle.SettlementOwnerEnum; import com.clx.performance.enums.settle.SettlementOwnerEnum;
......
...@@ -98,7 +98,7 @@ public class OrderChildSyncTransportListener { ...@@ -98,7 +98,7 @@ public class OrderChildSyncTransportListener {
} }
public void transportOrderChildProcess(OrderChild orderChild) { public void transportOrderChildProcess(OrderChild orderChild) {
// Integer invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode(); Integer invoiceType = SettlementOwnerEnum.InvoiceType.ORDINARY.getCode();
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get(); OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
...@@ -115,77 +115,76 @@ public class OrderChildSyncTransportListener { ...@@ -115,77 +115,76 @@ public class OrderChildSyncTransportListener {
// 同步broker // 同步broker
orderChildSyncBrokerService.orderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail); orderChildSyncBrokerService.orderChildSync(orderChild, orderGoods, settlementOwnerDetail, settlementDriverDetail);
// extracted(orderChild, bean, JSONUtil.parse(bean).toString(), settlementOwnerDetail, invoiceType, settlementDriverDetail);
} }
public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark, public void extracted(OrderChild orderChild, OrderChildSyncDTO bean, String remark,
SettlementOwnerDetail settlementOwnerDetail, SettlementOwnerDetail settlementOwnerDetail,
Integer invoiceType, SettlementDriverDetail settlementDriverDetail) { Integer invoiceType, SettlementDriverDetail settlementDriverDetail) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
if (null != bean && bean.getCode() == 0) { if (null != bean && bean.getCode() == 0 && null != bean.getData() && bean.getData().getStatus() == 1){
log.info("当前OrderChildSyncTransportListener监听同步网络货运成功,运单号为{}", orderChild.getChildNo()); invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode();
if (null != bean.getData() && bean.getData().getStatus() == 1) { }
//通过风控 extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, invoiceType);
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo()); }
BigDecimal frozen = runningWaterRecordList.stream().filter(item -> { public void extracted(OrderChild orderChild,
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode()) SettlementOwnerDetail settlementOwnerDetail,
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode()) SettlementDriverDetail settlementDriverDetail,
; Integer invoiceType) {
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
if (Objects.equals(invoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> { //通过风控
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode()) List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderChild.getOrderNo());
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode()) BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
; return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add); && item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
//设置预付运费金额 ;
BigDecimal ans = getPrepayFreightPay(orderChild.getSettlementWay(), settlementOwnerDetail, frozen); }).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal subtract = frozen.subtract(takeOut);
log.info("冻结预付运费:{}, 扣除的流水总和:{}", frozen, takeOut); BigDecimal takeOut = runningWaterRecordList.stream().filter(item -> {
invoiceType = SettlementOwnerEnum.InvoiceType.ONLINE.getCode(); return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.TAKE_OUT.getCode())
settlementDriverDetail.setPrepayFreight(ans); && item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
//冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑 ;
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) { }).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO); //设置预付运费金额
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode()); BigDecimal ans = getPrepayFreightPay(orderChild.getSettlementWay(), settlementOwnerDetail, frozen);
BigDecimal subtract = frozen.subtract(takeOut);
log.info("冻结预付运费:{}, 扣除的流水总和:{}", frozen, takeOut);
settlementDriverDetail.setPrepayFreight(ans);
//冻结的预付运费为0 或者 此刻预付运费也可能为0,那么就不用生成扣除相关流水逻辑
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} else { } else {
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) { if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
//账户扣钱并生成扣除流水 //账户扣钱并生成扣除流水
generateTakeOutRunningWatter(orderChild, ans, settlementOwnerDetail, settlementDriverDetail); generateTakeOutRunningWatter(orderChild, ans, settlementOwnerDetail, settlementDriverDetail);
try { try {
//网络货运钱包账户 //网络货运钱包账户
networkDriverRunningWaterRecordService.generateNetworkDriverRunningWaterRecord( networkDriverRunningWaterRecordService.generateNetworkDriverRunningWaterRecord(
settlementDriverDetail, settlementDriverDetail,
NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode() NetworkDriverAccountEnum.RunningWaterStatus.SETTLEMENT.getCode()
); );
//生成提现记录 //生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail); networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
} catch (Exception e) { } catch (Exception e) {
log.info("运单同步网络货运生成司机运单结算流水失败:{}", e.getMessage()); log.info("运单同步网络货运生成司机运单结算流水失败:{}", e.getMessage());
}
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} }
} else {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
} }
} }
else {
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
}
} }
else { else {
log.info("当前OrderChildSyncTransportListener监听同步网络货运失败,变为普通单,运单号{}, 错误信息{}", orderChild.getChildNo(), remark);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode()); settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO); settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode()); settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
} }
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(orderChild.getOrderGoodsNo()).get();
// 结算金额 // 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail)); settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
......
package com.clx.performance.listener.settle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 结算 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
@Slf4j
@Component
public class SettlementSettleListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_SETTLE_QUEUE)
public void process(Message message) {
try{
log.info("结算-结算, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()), new TypeReference<MqWrapper<SettlementSettleMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-结算 失败",e);
}
}
private void process(SettlementSettleMqParam mq){
settlementMqHandlerService.settle(mq);
}
}
...@@ -4,7 +4,6 @@ import com.clx.order.feign.AddressFeign; ...@@ -4,7 +4,6 @@ import com.clx.order.feign.AddressFeign;
import com.clx.order.feign.OrderFeign; import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO; import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.pc.carrier.InvoicingCompanyVO; import com.clx.order.vo.pc.carrier.InvoicingCompanyVO;
import com.clx.performance.config.SettlementConfig;
import com.clx.performance.dao.OrderChildImageDao; import com.clx.performance.dao.OrderChildImageDao;
import com.clx.performance.enums.PowerTypeEnum; import com.clx.performance.enums.PowerTypeEnum;
import com.clx.performance.extranal.broker.BrokerService; import com.clx.performance.extranal.broker.BrokerService;
...@@ -52,8 +51,7 @@ public class OrderChildSyncBroker implements OrderChildSyncBrokerService { ...@@ -52,8 +51,7 @@ public class OrderChildSyncBroker implements OrderChildSyncBrokerService {
private OrderChildImageDao orderChildImageDao; private OrderChildImageDao orderChildImageDao;
@Autowired @Autowired
private InvoicingCompanyService invoicingCompanyService; private InvoicingCompanyService invoicingCompanyService;
@Autowired
private SettlementConfig settlementConfig;
@Override @Override
public void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail, public void orderChildSync(OrderChild orderChild, OrderGoods orderGoods, SettlementOwnerDetail settlementOwnerDetail,
...@@ -80,7 +78,6 @@ public class OrderChildSyncBroker implements OrderChildSyncBrokerService { ...@@ -80,7 +78,6 @@ public class OrderChildSyncBroker implements OrderChildSyncBrokerService {
// 参数组装 // 参数组装
TransportParam transportParam = new TransportParam(); TransportParam transportParam = new TransportParam();
transportParam.setUserCode(settlementConfig.getBrokerUserCode());
transportParam.setTransportPlatformCode(invoicingCompanyByGroupCode.getNetworkCargoCompanyCode()); transportParam.setTransportPlatformCode(invoicingCompanyByGroupCode.getNetworkCargoCompanyCode());
transportParam.setOrderCode(orderChild.getChildNo()); transportParam.setOrderCode(orderChild.getChildNo());
transportParam.setOwnerMobile(truckOwnerInfo.getMobile()); transportParam.setOwnerMobile(truckOwnerInfo.getMobile());
......
...@@ -15,6 +15,7 @@ import com.clx.performance.enums.settle.*; ...@@ -15,6 +15,7 @@ import com.clx.performance.enums.settle.*;
import com.clx.performance.extranal.user.DriverService; import com.clx.performance.extranal.user.DriverService;
import com.clx.performance.extranal.user.OrderService; import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.extranal.user.OwnerInfoService; import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.listener.OrderChildSyncTransportListener;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.*; import com.clx.performance.model.settle.*;
...@@ -31,6 +32,7 @@ import com.clx.performance.utils.LocalDateTimeUtils; ...@@ -31,6 +32,7 @@ import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.RedisUtil; import com.clx.performance.utils.RedisUtil;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
import com.clx.user.vo.feign.DriverInfoFeignVo; import com.clx.user.vo.feign.DriverInfoFeignVo;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.enums.ResultCodeEnum; import com.msl.common.enums.ResultCodeEnum;
...@@ -104,6 +106,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -104,6 +106,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@Autowired
private OrderChildSyncTransportListener orderChildSyncTransportListener;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
...@@ -195,6 +200,16 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic ...@@ -195,6 +200,16 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverDetailDao.updateSettlementNo(settlementDriverDetail); settlementDriverDetailDao.updateSettlementNo(settlementDriverDetail);
} }
@Override
public void settle(SettlementSettleMqParam mq) {
OrderChild orderChild = orderChildDao.getByChildNo(mq.getChildNo()).get();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getByChildNo(orderChild.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
orderChildSyncTransportListener.extracted(orderChild, settlementOwnerDetail, settlementDriverDetail, mq.getInvoiceType());
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void settlementDetailAdd(SettlementDetailAddMqParam mq) { public void settlementDetailAdd(SettlementDetailAddMqParam mq) {
......
...@@ -7,6 +7,7 @@ import com.clx.performance.constant.RabbitKeySettlementConstants; ...@@ -7,6 +7,7 @@ import com.clx.performance.constant.RabbitKeySettlementConstants;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder; import org.springframework.amqp.core.MessageBuilder;
...@@ -47,4 +48,18 @@ public class SettlementMqServiceImpl implements SettlementMqService { ...@@ -47,4 +48,18 @@ public class SettlementMqServiceImpl implements SettlementMqService {
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message); rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
} }
@Override
public void settle(String childNo, Integer invoiceType) {
SettlementSettleMqParam mq = new SettlementSettleMqParam();
mq.setChildNo(childNo);
mq.setInvoiceType(invoiceType);
log.info("运单号 {} 开票标识 {} ",childNo,invoiceType);
MqDelay<MqWrapper<SettlementSettleMqParam>> delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY, new MqWrapper<>(mq));
Message message = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(delay)).getBytes()).build();
message.getMessageProperties().setExpiration("5000");
rabbitTemplate.send(RabbitKeySettlementConstants.DEFAULT_EXCHANGE, RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
} }
...@@ -3,6 +3,7 @@ package com.clx.performance.service.settle; ...@@ -3,6 +3,7 @@ package com.clx.performance.service.settle;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.vo.mq.SettlementDetailAddMqParam; import com.clx.performance.vo.mq.SettlementDetailAddMqParam;
import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam; import com.clx.performance.vo.mq.SettlementDetailInvoiceTypeSyncMqParam;
import com.clx.performance.vo.mq.SettlementSettleMqParam;
public interface SettlementMqHandlerService { public interface SettlementMqHandlerService {
...@@ -10,6 +11,8 @@ public interface SettlementMqHandlerService { ...@@ -10,6 +11,8 @@ public interface SettlementMqHandlerService {
void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq); void settlementDetailInvoiceTypeSync(SettlementDetailInvoiceTypeSyncMqParam mq);
void settle(SettlementSettleMqParam mq);
void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg); void settlementDriverNotify(String childNo,Integer payType,String payErrorMsg);
String paySettlementDriver(SettlementDriverDetail detail); String paySettlementDriver(SettlementDriverDetail detail);
......
...@@ -6,4 +6,5 @@ public interface SettlementMqService { ...@@ -6,4 +6,5 @@ public interface SettlementMqService {
void invoiceTypeSync(String childNo, Integer invoiceType); void invoiceTypeSync(String childNo, Integer invoiceType);
void settle(String childNo, Integer invoiceType);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论