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

承运优化需求9.25-车主结算

上级 ea68f379
package com.clx.performance.vo.mq;
import lombok.*;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class SettlementDriverSettleMqParam {
private String childNo; //运单编号
}
......@@ -87,7 +87,7 @@ public class RabbitSettlementConfig {
}
/**
* 结算
* 货主结算
*/
@Bean
public Queue settlementSettleQueue() {
......@@ -98,6 +98,20 @@ public class RabbitSettlementConfig {
return BindingBuilder.bind(settlementSettleQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_SETTLE_ROUTING_KEY);
}
/**
* 车主结算
*/
@Bean
public Queue settlementDriverSettlementQueue() {
return new Queue(RabbitKeySettlementConstants.SETTLEMENT_DRIVER_SETTLE_QUEUE);
}
@Bean
public Binding settlementDriverSettlementQueueBinding() {
return BindingBuilder.bind(settlementDriverSettlementQueue()).to(settlementDefaultExchange())
.with(RabbitKeySettlementConstants.SETTLEMENT_DRIVER_SETTLE_ROUTING_KEY);
}
/**
* 支付状态
*/
......
......@@ -52,10 +52,17 @@ public class RabbitKeySettlementConstants {
public static final String SETTLEMENT_INVOICE_TYPE_SYNC_ROUTING_KEY = PREFIX +"settlementInvoiceType.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;
/**
* 车主结算
*/
public static final String SETTLEMENT_DRIVER_SETTLE_QUEUE = PREFIX +"settlementDriver.settle"+QUEUE;
public static final String SETTLEMENT_DRIVER_SETTLE_ROUTING_KEY = PREFIX +"settlementDriver.settle"+QUEUE_ROUTING_KEY;
/**
* 开票状态同步
*/
......
......@@ -147,6 +147,10 @@ public class EventListenerComponent {
// 发送mq 结算统计
settlementMqService.settlementStatistics(settlementDriverDetail.getChildNo());
// 发送mq 司机结算
settlementMqService.settlementDriverSettle(settlementDriverDetail.getChildNo());
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD, e.getMessage());
} finally {
......
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.SettlementDriverSettleMqParam;
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 SettlementDriverSettlementListener {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_DRIVER_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<SettlementDriverSettleMqParam>>(){}).getData());
}catch (Exception e){
log.info("结算-车主结算 失败",e);
}
}
private void process(SettlementDriverSettleMqParam mq){
settlementMqHandlerService.settlementDriverSettlement(mq);
}
}
......@@ -14,7 +14,7 @@ import org.springframework.stereotype.Component;
/**
* @Author: 艾庆国
* @Description: 结算 mq
* @Description: 货主结算 mq
* @Date: 2023-10-20 11:45:08
* @Version: 1.0
*/
......@@ -28,10 +28,10 @@ public class SettlementSettleListener {
@RabbitListener(queues = RabbitKeySettlementConstants.SETTLEMENT_SETTLE_QUEUE)
public void process(Message message) {
try{
log.info("结算-结算, message:{}", new String(message.getBody()));
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);
log.info("结算-货主结算 失败",e);
}
}
......
......@@ -176,6 +176,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
if (Objects.equals(mq.getType(), SettlementStatisticsMqParam.Type.SEPARATE.getCode())){
settlementStatisticsSeparate(settlementOwnerDetail, settlementDriverDetail);
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(settlementDriverDetail.getChildNo());
return;
}
......@@ -240,8 +243,6 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
}
}
//生成车主结算单
settlementDriverSave(settlementDriverDetail,settlementNo);
//车主结算单自动支付
log.info(" 运单号 {}, 是否是普通单 {} ",settlementDriverDetail.getChildNo(),settlementDriverDetail.getInvoiceType());
if (!settlementDriverDetail.getInvoiceType().equals(SettlementOwnerEnum.InvoiceType.ONLINE.getCode())) {
......@@ -268,6 +269,56 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementDriverDetail.setSettlementNo(settlementNo);
settlementOwnerDetailDao.updateSettlementNo(settlementOwnerDetail);
settlementDriverDetailDao.updateSettlementNo(settlementDriverDetail);
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(settlementDriverDetail.getChildNo());
}
@Override
public void settlementDriverSettlement(SettlementDriverSettleMqParam mq) {
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(mq.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriver settlementDriver = settlementDriverDao.findByChildNo(settlementDriverDetail.getChildNo()).orNull();
if (settlementDriver != null) {return;}
String settlementNo = settlementNoGenerate();
settlementDriver = new SettlementDriver();
settlementDriver.setDriverUserNo(settlementDriverDetail.getDriverUserNo());
settlementDriver.setDriverName(settlementDriverDetail.getDriverName());
settlementDriver.setSettlementNo(settlementNo);
settlementDriver.setChildNo(settlementDriverDetail.getChildNo());
settlementDriver.setOrderGoodsNo(settlementDriverDetail.getOrderGoodsNo());
settlementDriver.setOrderNo(settlementDriverDetail.getOrderNo());
settlementDriver.setGoodsId(settlementDriverDetail.getGoodsId());
settlementDriver.setGoodsName(settlementDriverDetail.getGoodsName());
settlementDriver.setTruckNo(settlementDriverDetail.getTruckNo());
settlementDriver.setFreightPrice(settlementDriverDetail.getFreightPrice());
settlementDriver.setWeight(settlementDriverDetail.getWeight());
settlementDriver.setFreight(settlementDriverDetail.getFreight());
settlementDriver.setLossPrice(settlementDriverDetail.getLossPrice());
settlementDriver.setLossWeight(settlementDriverDetail.getLossWeight());
settlementDriver.setLoanFlag(settlementDriverDetail.getLoanFlag());
settlementDriver.setLossFreight(settlementDriverDetail.getLossFreight());
settlementDriver.setPrepayFreightFlag(settlementDriverDetail.getPrepayFreightFlag());
settlementDriver.setSettlementFreight(settlementDriverDetail.getSettlementFreight());
settlementDriver.setInvoiceType(settlementDriverDetail.getInvoiceType());
settlementDriver.setSettlementPlatform(settlementDriverDetail.getInvoiceType() == 1 ?
String.valueOf(SettlementPlatformEnum.Platform.WY.getCode()):
String.valueOf(SettlementPlatformEnum.Platform.MSL.getCode()));
settlementDriver.setStatus(SettlementDriverEnum.Status.WAIT_SETTLEMENT.getCode());
settlementDriver.setInvoicingCompanyId(settlementDriverDetail.getInvoicingCompanyId());
settlementDriver.setInvoicingCompanyShorterName(settlementDriverDetail.getInvoicingCompanyShorterName());
settlementDriver.setInvoicingCompanyGroupCode(settlementDriverDetail.getInvoicingCompanyGroupCode());
settlementDriver.setPlatformServiceFeeRate(settlementDriverDetail.getPlatformServiceFeeRate());
settlementDriver.setPlatformServiceFee(settlementDriverDetail.getPlatformServiceFee());
settlementDriverDao.saveEntity(settlementDriver);
}
@Transactional(rollbackFor = Exception.class)
......@@ -921,56 +972,7 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
@Override
public void riskAdd(SettlementOrderChildRiskAddMqParam mq) {
SettlementOrderChildRisk settlementOrderChildRisk = settlementOrderChildRiskDao.getById(mq.getId()).orElseThrow(ResultEnum.DATA_NOT_FIND);
if (Objects.equals(settlementOrderChildRisk.getStatus(), SettlementOrderChildRiskEnum.Status.PROCESSED.getCode())) {
return;
}
OrderChild orderChild = orderChildDao.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
InvoicingCompanyVO invoicingCompanyByGroupCode = invoicingCompanyService.getInvoicingCompanyByGroupCode(orderChild.getInvoicingCompanyGroupCode());
if (!Objects.equals(invoicingCompanyByGroupCode.getRiskProcessType(), InvoicingCompanyEnum.RiskProcessType.AUTO.getCode())) {
return;
}
// 转普通单
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao
.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(ResultEnum.DATA_NOT_FIND);
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao
.getByChildNo(settlementOrderChildRisk.getChildNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
SettlementDriver settlementDriver = settlementDriverDao.findByChildNo(settlementOrderChildRisk.getChildNo()).orNull();
settlementOrderChildRisk.setStatus(SettlementOrderChildRiskEnum.Status.PROCESSED.getCode());
settlementOrderChildRisk.setProcessMethod(SettlementOrderChildRiskEnum.ProcessMethod.CONVERT_ORDINARY.getCode());
settlementOrderChildRisk.setProcessBy("系统");
settlementOrderChildRisk.setProcessTime(LocalDateTime.now());
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);
settlementOrderChildRisk.setInvoiceType(settlementOwnerDetail.getInvoiceType());
if (settlementDriver != null) {
// 删除结算单
settlementDriverDao.deleteByKey(settlementDriver.getId());
}
settlementOrderChildRiskDao.updateProcess(settlementOrderChildRisk);
// 发送mq (风控处理)
settlementMqService.riskProcess(settlementOrderChildRisk.getId());
}
@Transactional(rollbackFor = Exception.class)
......@@ -988,6 +990,9 @@ public class SettlementMqHandlerServiceImpl implements SettlementMqHandlerServic
settlementMqService.settlementStatistics(childNo, SettlementStatisticsMqParam.Type.SEPARATE.getCode());
}
// 发送mq (车主结算)
settlementMqService.settlementDriverSettle(childNo);
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNo);
}
......
......@@ -57,6 +57,19 @@ public class SettlementMqServiceImpl implements SettlementMqService {
RabbitKeySettlementConstants.DEFAULT_DELAY_ROUTING_KEY, message);
}
@Override
public void settlementDriverSettle(String childNo) {
SettlementDriverSettleMqParam mq = new SettlementDriverSettleMqParam();
mq.setChildNo(childNo);
MqDelay delay =
new MqDelay<>(RabbitKeySettlementConstants.DEFAULT_EXCHANGE,
RabbitKeySettlementConstants.SETTLEMENT_DRIVER_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);
}
@Override
public void invoiceTypeSync(String childNo) {
......
......@@ -97,11 +97,6 @@ public class SettlementOrderChildRiskServiceImpl implements SettlementOrderChild
settlementDriverDetailDao.updateConvertOrdinary(settlementDriverDetail);
settlementOrderChildRisk.setInvoiceType(settlementOwnerDetail.getInvoiceType());
if (settlementDriver != null) {
// 删除结算单
settlementDriverDao.deleteByKey(settlementDriver.getId());
}
}
else {
......
......@@ -9,6 +9,7 @@ public interface SettlementMqHandlerService {
void settlementDetailAdd(SettlementDetailAddMqParam mq);
void settlementStatistics(SettlementStatisticsMqParam mq);
void settlementDriverSettlement(SettlementDriverSettleMqParam mq);
void settle(SettlementSettleMqParam mq);
......
......@@ -6,6 +6,7 @@ public interface SettlementMqService {
void settlementStatistics(String childNo);
void settlementStatistics(String childNo, Integer type);
void settlementDriverSettle(String childNo);
void invoiceTypeSync(String childNo);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论