提交 5a9a0ddf authored 作者: 马路路's avatar 马路路

Merge branch 'v30.6_order_quote_20241022' into dev_jdk17

......@@ -227,4 +227,17 @@ public class RabbitSettlementConfig {
.with(RabbitKeySettlementConstants.SETTLEMENT_DRIVER_CONFIRM_ROUTING_KEY);
}
/**
* 网络货运运单同步成功
*/
@Bean
public Queue settlementOrderChildBrokerSyncQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_ORDER_CHILD_BROKER_SYNC_QUEUE);
}
@Bean
public Binding settlementOrderChildBrokerSyncQueueBinding() {
return BindingBuilder.bind(settlementOrderChildBrokerSyncQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_ORDER_CHILD_BROKER_SYNC_ROUTING_KEY);
}
}
......@@ -117,4 +117,10 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_DRIVER_CONFIRM_QUEUE = PREFIX +"settlementDriver.confirm"+QUEUE;
public static final String SETTLEMENT_DRIVER_CONFIRM_ROUTING_KEY = PREFIX +"settlementDriver.confirm"+QUEUE_ROUTING_KEY;
/**
* 网络货运运单同步成功
*/
public static final String SETTLEMENT_ORDER_CHILD_BROKER_SYNC_QUEUE = PREFIX +"settlementOrderChildBroker.sync"+QUEUE;
public static final String SETTLEMENT_ORDER_CHILD_BROKER_SYNC_ROUTING_KEY = PREFIX +"settlementOrderChildBroker.sync"+QUEUE_ROUTING_KEY;
}
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.settle.OrderChildBrokerSyncMqParam;
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 SettlementOrderChildBrokerSyncListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_ORDER_CHILD_BROKER_SYNC_QUEUE)
public void process(Message message) {
try{
log.info("结算-网络货运同步, message:{}", new String(message.getBody()));
process(JSON.parseObject(new String(message.getBody()),
new TypeReference<MqWrapper<OrderChildBrokerSyncMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-网络货运同步 失败",e);
}
}
private void process(OrderChildBrokerSyncMqParam mq){
settlementMqHandlerService.settlementOrderChildBrokerSync(mq);
}
}
......@@ -498,9 +498,9 @@ public class OrderChildServiceImpl implements OrderChildService {
orderChild.setOrderNo(orderGoods.getOrderNo());
orderChild.setOrderGoodsNo(orderGoods.getOrderGoodsNo());
orderChild.setFreightPrice(orderGoods.getPendingOrderFreight());
orderChild.setForecastFreightPrice(orderInfo.getValidFreightPrice());
orderChild.setForecastFreightPrice(orderInfo.getValidForecastFreightQuotation());
orderChild.setLossPrice(orderGoods.getLossPrice());
orderChild.setOrderFreightPrice(orderInfo.getValidForecastFreightQuotation());
orderChild.setOrderFreightPrice(orderInfo.getValidFreightPrice());
orderChild.setGoodsId(orderGoods.getGoodsId());
orderChild.setGoodsName(orderGoods.getGoodsName());
......
......@@ -25,6 +25,7 @@ import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.broker.OrderChildBrokerMqHandlerService;
import com.clx.performance.service.broker.OrderChildBrokerMqService;
import com.clx.performance.service.broker.OrderChildBrokerService;
import com.clx.performance.service.settle.SettlementMqService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildDriverPayMqParam;
import com.clx.performance.service.settle.SettlementPostService;
import com.clx.performance.vo.mq.broker.BrokerOrderChildDriverPayMqParam;
......@@ -71,14 +72,17 @@ public class OrderChildBrokerMqHandlerServiceImpl implements OrderChildBrokerMqH
@Autowired
private InvoicingCompanyFeign invoicingCompanyFeign;
@Autowired
private SettlementMqService settlementMqService;
@Transactional(rollbackFor = Exception.class)
@Override
public void orderChildSync(BrokerOrderChildSyncMqParam mq) {
try{
doOrderChildSync(mq);
// 同步-无车承运成功后,更新开票标识为普通单
updateInvoiceTypeByChildNo(mq.getChildNo());
settlementMqService.orderChildBrokerSync(mq.getChildNo());
}catch (Exception e){
log.info("无车承运-运单同步 失败,msg:{}", ExceptionUtils.getStackTrace(e));
......@@ -200,25 +204,4 @@ public class OrderChildBrokerMqHandlerServiceImpl implements OrderChildBrokerMqH
QuotationEnum.InvoicingConfigType.YES.getCode());
}
/**
* 更新当前运单号,更新开票标识为普通单
*/
public void updateInvoiceTypeByChildNo(String childNo) {
// 获取货主详情
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 获取车主详情
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(childNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 开票配置为否时,更新开票标识为普通单
if (!this.invoiceConfigType(settlementOwnerDetail.getOrderNo())) {
// 货主更新开票标识
settlementOwnerDetail.setInvoiceType(InvoicingCompanyEnum.RiskProcessType.AUTO.getCode());
settlementOwnerDetailDao.updateEntityByKey(settlementOwnerDetail);
// 车主更新开票标识
settlementDriverDetail.setInvoiceType(InvoicingCompanyEnum.RiskProcessType.AUTO.getCode());
settlementDriverDetailDao.updateEntityByKey(settlementDriverDetail);
}
}
}
......@@ -1054,14 +1054,40 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Transactional(rollbackFor = Exception.class)
@Override
public void riskProcess(SettlementOrderChildRiskProcessMqParam mq) {
if (mq.getId() != null) {
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(mq.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
String childNo = settlementOrderChildRisk.getChildNo();
if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode())){
if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode())) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orNull();
riskToOrdinary(settlementOwnerDetail);
} else if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.SYNC_RETRY.getCode())) {
// 发送mq (更新无车承运)
orderChildBrokerMqService.orderChildSync(childNo);
}
}
else {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(mq.getChildNo()).orNull();
// 不开票转普通单
riskToOrdinary(settlementOwnerDetail);
}
}
/**
* 转普通单
*/
private void riskToOrdinary(SettlementOwnerDetail settlementOwnerDetail){
String childNo = settlementOwnerDetail.getChildNo();
if (!Objects.equals(settlementOwnerDetail.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ORDINARY.getCode())){
return;
}
// 已进结算单需拆单
if (settlementOwnerDetail !=null && StringUtils.isNotBlank(settlementOwnerDetail.getSettlementNo())) {
if (StringUtils.isNotBlank(settlementOwnerDetail.getSettlementNo())) {
// 发送mq 结算统计
settlementMqService.settlementStatistics(childNo, SettlementStatisticsMqParam.Type.SEPARATE.getCode());
}
......@@ -1072,13 +1098,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNo);
}
else if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.SYNC_RETRY.getCode())){
// 发送mq (更新无车承运)
orderChildBrokerMqService.orderChildSync(childNo);
}
}
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -1122,7 +1141,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
// 开票金额
settlementOwnerDetail.setInvoiceFreight(
settlementCommonService.invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
settlementOwnerDetail.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementCommonService.settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
......@@ -1341,6 +1360,54 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
@Override
public void settlementOrderChildBrokerSync(OrderChildBrokerSyncMqParam mq) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(mq.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (settlementOwnerDetail.getInvoiceType() != null){
return;
}
if (!Objects.equals(settlementOwnerDetail.getInvoiceConfigType(), QuotationEnum.InvoicingConfigType.NO.getCode())){
return;
}
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriver settlementDriver = settlementDriverDao.findByChildNo(mq.getChildNo()).orNull();
// 转普通单
// 更新子订单详细信息为普通发票类型
settlementOwnerDetail.setInvoiceType(SettlementOwnerEnum.InvoiceType.ORDINARY.getCode());
settlementOwnerDetail.setInvoicingCompanyId(null);
settlementOwnerDetail.setInvoicingCompanyShorterName(null);
settlementOwnerDetail.setInvoicingCompanyGroupCode(null);
settlementOwnerDetail.setInvoiceTypeStatus(SettlementOwnerDetailEnum.InvoiceTypeStatus.SUCCESS.getCode());
settlementOwnerDetail.setInvoiceTypeModifiedTime(LocalDateTime.now());
settlementOwnerDetailDao.updateConvertOrdinary(settlementOwnerDetail);
// 同步更新司机详细信息
settlementDriverDetail.setInvoiceType(settlementOwnerDetail.getInvoiceType());
settlementDriverDetail.setInvoicingCompanyId(settlementOwnerDetail.getInvoicingCompanyId());
settlementDriverDetail.setInvoicingCompanyShorterName(settlementOwnerDetail.getInvoicingCompanyShorterName());
settlementDriverDetail.setInvoicingCompanyGroupCode(settlementOwnerDetail.getInvoicingCompanyGroupCode());
settlementDriverDetailDao.updateConvertOrdinary(settlementDriverDetail);
// 如果司机信息存在,则同步更新司机信息
if (settlementDriver != null) {
settlementDriver.setInvoiceType(settlementDriverDetail.getInvoiceType());
settlementDriver.setInvoicingCompanyId(settlementDriverDetail.getInvoicingCompanyId());
settlementDriver.setInvoicingCompanyShorterName(settlementDriverDetail.getInvoicingCompanyShorterName());
settlementDriver.setInvoicingCompanyGroupCode(settlementDriverDetail.getInvoicingCompanyGroupCode());
settlementDriver.setPrepayFreightFlag(settlementDriverDetail.getPrepayFreightFlag());
settlementDriverDao.updateInvoiceCompany(settlementDriver);
}
// 发送mq (风控处理)
settlementMqService.riskProcess(settlementOwnerDetail.getChildNo());
}
private BigDecimal invoiceFreightCalc(Integer settlementWay, BigDecimal invoiceServiceFeeRate, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,开票金额=实际净重*平台运费报价-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
......
......@@ -161,6 +161,18 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void riskProcess(String childNo) {
SettlementOrderChildRiskProcessMqParam mq = new SettlementOrderChildRiskProcessMqParam();
mq.setChildNo(childNo);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_RISK_PROCESS_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);
}
@Override
public void updateInvoiceCompany(Integer id) {
SettlementOwnerDetialInvoiceCompanyUpdateMqParam mq = new SettlementOwnerDetialInvoiceCompanyUpdateMqParam();
......@@ -209,4 +221,16 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void orderChildBrokerSync(String childNo) {
OrderChildBrokerSyncMqParam mq = new OrderChildBrokerSyncMqParam();
mq.setChildNo(childNo);
MqDelay delay = new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_ORDER_CHILD_BROKER_SYNC_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);
}
}
......@@ -183,7 +183,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
// 开票金额
settlementOwnerDetail.setInvoiceFreight(
settlementCommonService.invoiceFreightCalc(orderChild.getSettlementWay(),
orderGoods.getInvoiceServiceFeeRate(), settlementOwnerDetail));
settlementOwnerDetail.getInvoiceServiceFeeRate(), settlementOwnerDetail));
// 结算金额
settlementOwnerDetail.setSettlementFreight(
......
......@@ -37,4 +37,6 @@ public interface SettlementMqHandlerService {
void settlementDriverConfirm(SettlementDriverConfirmMqParam mq);
void settlementOrderChildBrokerSync(OrderChildBrokerSyncMqParam mq);
}
......@@ -22,6 +22,8 @@ public interface SettlementMqService {
void riskProcess(Integer id);
void riskProcess(String childNo);
void updateInvoiceCompany(Integer id);
void settlementPlatformAutoConfirmUpdate(String settlementNo);
......@@ -30,4 +32,6 @@ public interface SettlementMqService {
void settlementDriverConfirm(String childNo);
void orderChildBrokerSync(String childNo);
}
package com.clx.performance.vo.mq.settle;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class OrderChildBrokerSyncMqParam {
private String childNo;
}
......@@ -12,5 +12,6 @@ import lombok.ToString;
public class SettlementOrderChildRiskProcessMqParam {
private Integer id; //id
private String childNo; //
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论