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

订单报价

上级 dd7fb786
......@@ -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);
}
}
......@@ -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.BrokerOrderChildSyncMqParam;
......@@ -69,14 +70,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));
......@@ -198,25 +202,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,30 +1054,49 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Transactional(rollbackFor = Exception.class)
@Override
public void riskProcess(SettlementOrderChildRiskProcessMqParam mq) {
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(mq.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
String childNo = settlementOrderChildRisk.getChildNo();
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())){
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orNull();
if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode())) {
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getByChildNo(childNo).orNull();
// 已进结算单需拆单
if (settlementOwnerDetail !=null && StringUtils.isNotBlank(settlementOwnerDetail.getSettlementNo())) {
// 发送mq 结算统计
settlementMqService.settlementStatistics(childNo, SettlementStatisticsMqParam.Type.SEPARATE.getCode());
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);
}
// 发送mq (车主结算)
settlementMqService.settlementDriverSettle(childNo);
}
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNo);
/**
* 转普通单
*/
private void riskToOrdinary(SettlementOwnerDetail settlementOwnerDetail){
String childNo = settlementOwnerDetail.getChildNo();
if (!Objects.equals(settlementOwnerDetail.getInvoiceType(), SettlementOwnerEnum.InvoiceType.ORDINARY.getCode())){
return;
}
else if (Objects.equals(settlementOrderChildRisk.getProcessMethod(), SettlementOrderChildRiskEnum.ProcessMethod.SYNC_RETRY.getCode())){
// 发送mq (更新无车承运)
orderChildBrokerMqService.orderChildSync(childNo);
// 已进结算单需拆单
if (StringUtils.isNotBlank(settlementOwnerDetail.getSettlementNo())) {
// 发送mq 结算统计
settlementMqService.settlementStatistics(childNo, SettlementStatisticsMqParam.Type.SEPARATE.getCode());
}
// 发送mq (车主结算)
settlementMqService.settlementDriverSettle(childNo);
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNo);
}
@Transactional(rollbackFor = Exception.class)
......@@ -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.YES.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);
}
}
......@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论