提交 03128753 authored 作者: liuhaiquan's avatar liuhaiquan

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118'…

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118' into v10.7_borrowing_and_repayment_20240118 # Conflicts: # performance-web/src/main/java/com/clx/performance/controller/pc/loan/carrier/CarrierOwnerLoanRecordController.java
...@@ -128,6 +128,7 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -128,6 +128,7 @@ public enum PerformanceResultEnum implements ResultEnum {
OWNER_LOAN_RECORD_PAY_STATUS_ERROR(1850, "状态已变更无法支付"), OWNER_LOAN_RECORD_PAY_STATUS_ERROR(1850, "状态已变更无法支付"),
OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR(1851, "状态已变更无法取消"),
; ;
private final int code; private final int code;
......
...@@ -13,7 +13,7 @@ public enum BankTradeEnum { ...@@ -13,7 +13,7 @@ public enum BankTradeEnum {
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum TradeType { public enum TradeType {
ORDER_DIRECT_PAY(1, "订单支付"), ORDER_DIRECT_PAY(3, "订单支付"),
ORDER_TRANSFER_PAY(2, "转账支付"), ORDER_TRANSFER_PAY(2, "转账支付"),
; ;
......
...@@ -54,6 +54,25 @@ public enum OwnerLoanRecordEnum { ...@@ -54,6 +54,25 @@ public enum OwnerLoanRecordEnum {
} }
} }
@Getter
@AllArgsConstructor
public enum LoanFlag {
NO_LOAN(0, "未借款"),
LOAN(2, "已借款"),
RE_PAY(3, "已还款"),
;
private final Integer code;
private final String msg;
public static Optional<LoanFlag> getByCode(Integer code) {
return Arrays.stream(values()).filter(e ->Objects.equals(e.code, code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(LoanFlag::getMsg).orElse(null);
}
}
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
......
package com.clx.performance.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class OwnerLoanPayNotifyMqParam {
@NotNull(message = "流水号不能为空")
@ApiModelProperty("流水号")
private String merSeqNo;
@ApiModelProperty("支付状态")
private Integer payStatus;
}
...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.List;
/** /**
* @ClassName PageCarrierOwnerRepaymentParam * @ClassName PageCarrierOwnerRepaymentParam
* @Description * @Description
...@@ -38,4 +40,7 @@ public class PageCarrierOwnerRepaymentParam extends PageParam { ...@@ -38,4 +40,7 @@ public class PageCarrierOwnerRepaymentParam extends PageParam {
@ApiModelProperty("10 未逾期 20 已逾期") @ApiModelProperty("10 未逾期 20 已逾期")
private Integer beOverdue; private Integer beOverdue;
@ApiModelProperty("10 待付款 40 付款中 50 付款成功 60 付款失败")
private List<Integer> inStatusList;
} }
...@@ -20,6 +20,7 @@ import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum; ...@@ -20,6 +20,7 @@ import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum; import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum; import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum; import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
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.OwnerRunningWaterRecord; import com.clx.performance.model.OwnerRunningWaterRecord;
...@@ -43,6 +44,7 @@ import java.math.BigDecimal; ...@@ -43,6 +44,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Component @Component
...@@ -170,8 +172,16 @@ public class OrderChildLoanComponent { ...@@ -170,8 +172,16 @@ public class OrderChildLoanComponent {
* @param settlementOwnerDetail * @param settlementOwnerDetail
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void childLoanConfirmAfterProcess(SettlementDriverDetail settlementDriverDetail, SettlementOwnerDetail settlementOwnerDetail) { public void childLoanConfirmAfterProcess(SettlementDriverDetail settlementDriverDetail, SettlementOwnerDetail settlementOwnerDetail, OrderChild orderChild) {
log.info("1.运单确认收货后借款相关处理执行"); log.info("1.运单确认收货后借款相关处理执行");
OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(settlementDriverDetail.getOrderNo()).getData();
BigDecimal freightFreezeRate = quotationDetailVO.getFreightFreezeRate();
if (freightFreezeRate.compareTo(BigDecimal.ONE) == 0) {
//百分百预付不需要考虑借款账户
log.info("1.1百分百预付不需要考虑借款账户");
return;
}
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) { if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(settlementDriverDetail.getInvoiceType())) {
log.info("2.当前不是网运单,不需要处理借款标识"); log.info("2.当前不是网运单,不需要处理借款标识");
return; return;
...@@ -182,10 +192,15 @@ public class OrderChildLoanComponent { ...@@ -182,10 +192,15 @@ public class OrderChildLoanComponent {
return; return;
} }
String childNo = settlementDriverDetail.getChildNo(); String childNo = settlementDriverDetail.getChildNo();
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()); (childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
settlementDriverDetail.setLoanFlag(1); //已借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.LOAN.getCode());
// 抵扣金额
settlementOwnerDetail.setLoanFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight()); settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight());
log.info("4.查询当前运单号:{}, 当前货主,{}, 此运单借款冻结记录:{}", childNo, settlementOwnerDetail.getOwnerUserNo(), JSONUtil.parse(runningWaterRecordList)); log.info("4.查询当前运单号:{}, 当前货主,{}, 此运单借款冻结记录:{}", childNo, settlementOwnerDetail.getOwnerUserNo(), JSONUtil.parse(runningWaterRecordList));
...@@ -198,7 +213,7 @@ public class OrderChildLoanComponent { ...@@ -198,7 +213,7 @@ public class OrderChildLoanComponent {
param.setChildNo(childNo); param.setChildNo(childNo);
param.setSettlementDriverDetail(settlementDriverDetail); param.setSettlementDriverDetail(settlementDriverDetail);
param.setSettlementOwnerDetail(settlementOwnerDetail); param.setSettlementOwnerDetail(settlementOwnerDetail);
//扣钱,获取锁,此处有可能钱不够,抛异常,走网络货运重试 //扣钱,获取锁,此处有可能钱不够,抛异常,
getLoanBalanceLock(param); getLoanBalanceLock(param);
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType
...@@ -237,7 +252,7 @@ public class OrderChildLoanComponent { ...@@ -237,7 +252,7 @@ public class OrderChildLoanComponent {
param.setChildNo(childNo); param.setChildNo(childNo);
param.setSettlementDriverDetail(settlementDriverDetail); param.setSettlementDriverDetail(settlementDriverDetail);
param.setSettlementOwnerDetail(settlementOwnerDetail); param.setSettlementOwnerDetail(settlementOwnerDetail);
//扣钱,获取锁,此处有可能钱不够,抛异常,走网络货运重试 //扣钱,获取锁,此处有可能钱不够,抛异常,
getLoanBalanceLock(param); getLoanBalanceLock(param);
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByOrderNoAndRunningWaterType
...@@ -386,4 +401,17 @@ public class OrderChildLoanComponent { ...@@ -386,4 +401,17 @@ public class OrderChildLoanComponent {
} }
} }
} }
/**
* 结算金额
*/
private BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
} }
...@@ -67,7 +67,6 @@ public class RabbitBeanConfig { ...@@ -67,7 +67,6 @@ public class RabbitBeanConfig {
/** /**
* 处理延迟消息货单挂单 * 处理延迟消息货单挂单
* @return
*/ */
@Bean @Bean
public Queue orderGoodsOnDeadQueue() { public Queue orderGoodsOnDeadQueue() {
...@@ -93,7 +92,6 @@ public class RabbitBeanConfig { ...@@ -93,7 +92,6 @@ public class RabbitBeanConfig {
/** /**
* 订单取消队列 * 订单取消队列
* @return
*/ */
@Bean @Bean
public Queue orderCancelQueue() { public Queue orderCancelQueue() {
...@@ -118,7 +116,6 @@ public class RabbitBeanConfig { ...@@ -118,7 +116,6 @@ public class RabbitBeanConfig {
/** /**
* 运单同步网络货运队列 * 运单同步网络货运队列
* @return
*/ */
@Bean @Bean
public Queue orderChildSyncTransportQueue() { public Queue orderChildSyncTransportQueue() {
...@@ -143,7 +140,6 @@ public class RabbitBeanConfig { ...@@ -143,7 +140,6 @@ public class RabbitBeanConfig {
/** /**
* 处理延迟消息orderGoodsTruckBind * 处理延迟消息orderGoodsTruckBind
* @return
*/ */
@Bean @Bean
public Queue orderGoodsTruckBindQueue() { public Queue orderGoodsTruckBindQueue() {
...@@ -166,4 +162,42 @@ public class RabbitBeanConfig { ...@@ -166,4 +162,42 @@ public class RabbitBeanConfig {
public Binding orderGoodsTruckBindBindingDelayedExchange(@Qualifier("orderGoodsTruckBindQueue")Queue queue,@Qualifier("orderGoodsTruckBindExchange")CustomExchange customExchange) { public Binding orderGoodsTruckBindBindingDelayedExchange(@Qualifier("orderGoodsTruckBindQueue")Queue queue,@Qualifier("orderGoodsTruckBindExchange")CustomExchange customExchange) {
return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY).noargs(); return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY).noargs();
} }
/**
* 货主借款支付处理
*/
@Bean
public Queue ownerLoanPayQueue() {
return new Queue(RabbitKeyConstants.OWNER_LOAN_PAY_QUEUE, true, false, false);
}
/**
* 货主借款支付处理
**/
@Bean
public DirectExchange ownerLoanExchange() {
return new DirectExchange(RabbitKeyConstants.OWNER_LOAN_EXCHANGE);
}
/**
* 货主借款支付处理
*/
@Bean
public Binding ownerLoanPayBind() {
return BindingBuilder.bind(ownerLoanPayQueue()).to(ownerLoanExchange()).with(RabbitKeyConstants.OWNER_LOAN_PAY_ROUTE_KEY);
}
/**
* 货主借款队列
* @return
*/
@Bean
public Queue ownerLoanQueue() {
return new Queue(RabbitKeyConstants.OWNER_LOAN_QUEUE, true, false, false);
}
@Bean
public Binding ownerLoanBind() {
return BindingBuilder.bind(ownerLoanQueue()).to(ownerLoanExchange()).with(RabbitKeyConstants.OWNER_LOAN_ROUTE_KEY);
}
} }
...@@ -83,4 +83,14 @@ public class RabbitKeyConstants { ...@@ -83,4 +83,14 @@ public class RabbitKeyConstants {
public static final String ORDER_TRUCK_BIND_LAZY_QUEUE ="clx-order.truck.bind.lazy.queue"; public static final String ORDER_TRUCK_BIND_LAZY_QUEUE ="clx-order.truck.bind.lazy.queue";
public static final String ORDER_TRUCK_BIND_LAZY_ROUTE_KEY ="clx-order.truck.bind.lazy.route.key"; public static final String ORDER_TRUCK_BIND_LAZY_ROUTE_KEY ="clx-order.truck.bind.lazy.route.key";
public static final String OWNER_LOAN_EXCHANGE ="clx-performance.loan.exchange";
public static final String OWNER_LOAN_PAY_ROUTE_KEY ="clx-performance.loan.pay.route.key";
public static final String OWNER_LOAN_PAY_QUEUE ="clx-performance.loan.pay.queue";
public static final String OWNER_LOAN_ROUTE_KEY ="clx-performance.loan.route.key";
public static final String OWNER_LOAN_QUEUE ="clx-performance.loan.queue";
} }
...@@ -19,6 +19,7 @@ import org.apache.ibatis.annotations.Param; ...@@ -19,6 +19,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@Slf4j @Slf4j
...@@ -47,6 +48,20 @@ public class CarrierOwnerLoanRecordController { ...@@ -47,6 +48,20 @@ public class CarrierOwnerLoanRecordController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "重新支付(只更改借款状态)",notes = "<br>By:胡宇帆")
@GetMapping("/ownerLoanRecordRetryPay")
public Result<Object> ownerLoanRecordRetryPay(@RequestParam(value = "loanNo") @NotBlank String loanNo) {
ownerLoanRecordService.ownerLoanRecordRetryPay(loanNo);
return Result.ok();
}
@ApiOperation(value = "取消支付",notes = "<br>By:胡宇帆")
@GetMapping("/ownerLoanRecordCancelPay")
public Result<Object> ownerLoanRecordCancelPay(@RequestParam(value = "loanNo") @NotBlank String loanNo) {
ownerLoanRecordService.ownerLoanRecordCancelPay(loanNo);
return Result.ok();
}
@ApiOperation(value = "分页搜索货主借款列表",notes = "<br>By:艾庆国") @ApiOperation(value = "分页搜索货主借款列表",notes = "<br>By:艾庆国")
@PostMapping("/pageOwnerLoanRecordOfOwner") @PostMapping("/pageOwnerLoanRecordOfOwner")
@UnitCovert(param = false) @UnitCovert(param = false)
...@@ -58,7 +73,7 @@ public class CarrierOwnerLoanRecordController { ...@@ -58,7 +73,7 @@ public class CarrierOwnerLoanRecordController {
@ApiOperation(value = "收银台信息",notes = "<br>By:刘海泉") @ApiOperation(value = "收银台信息",notes = "<br>By:刘海泉")
@GetMapping("/getCashierInfo") @GetMapping("/getCashierInfo")
@UnitCovert(param = false) @UnitCovert(param = false)
public Result<CarrierCashierInfoVO> getCashierInfo(@Param("id") @NotNull(message = "id不能为空") Integer id) { public Result<CarrierCashierInfoVO> getCashierInfo(@RequestParam("id") @NotNull(message = "id不能为空") Integer id) {
CarrierCashierInfoVO vo = ownerLoanRecordService.getCashierInfo(id); CarrierCashierInfoVO vo = ownerLoanRecordService.getCashierInfo(id);
return Result.ok(vo); return Result.ok(vo);
} }
...@@ -75,7 +90,7 @@ public class CarrierOwnerLoanRecordController { ...@@ -75,7 +90,7 @@ public class CarrierOwnerLoanRecordController {
@ApiOperation(value = "转账支付详情",notes = "<br>By:刘海泉") @ApiOperation(value = "转账支付详情",notes = "<br>By:刘海泉")
@GetMapping("/getTransferPaymentDetail") @GetMapping("/getTransferPaymentDetail")
@UnitCovert(param = false) @UnitCovert(param = false)
public Result<CarrierTransferPaymentDetailVO> getTransferPaymentDetail(@Param("id") @NotNull(message = "id不能为空") Integer id) { public Result<CarrierTransferPaymentDetailVO> getTransferPaymentDetail(@RequestParam("id") @NotNull(message = "id不能为空") Integer id) {
CarrierTransferPaymentDetailVO vo = ownerLoanRecordService.getTransferPaymentDetail(id); CarrierTransferPaymentDetailVO vo = ownerLoanRecordService.getTransferPaymentDetail(id);
return Result.ok(vo); return Result.ok(vo);
} }
...@@ -88,19 +103,19 @@ public class CarrierOwnerLoanRecordController { ...@@ -88,19 +103,19 @@ public class CarrierOwnerLoanRecordController {
return Result.ok(url); return Result.ok(url);
} }
@ApiOperation(value = "借款支付",notes = "<br>By:艾庆国") // @ApiOperation(value = "借款支付",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordPay") // @PostMapping("/updateOwnerLoanRecordPay")
public Result<Object> updateOwnerLoanRecordPay(@RequestBody @Validated CarrierOwnerLoanRecordPayParam param) { // public Result<Object> updateOwnerLoanRecordPay(@RequestBody @Validated CarrierOwnerLoanRecordPayParam param) {
ownerLoanRecordService.updateOwnerLoanRecordPay(param); // ownerLoanRecordService.updateOwnerLoanRecordPay(param);
return Result.ok(); // return Result.ok();
} // }
@ApiOperation(value = "借款重新支付",notes = "<br>By:艾庆国") // @ApiOperation(value = "借款重新支付",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordRepay") // @PostMapping("/updateOwnerLoanRecordRepay")
public Result<Object> updateOwnerLoanRecordRepay(@RequestBody @Validated CarrierOwnerLoanRecordRepayParam param) { // public Result<Object> updateOwnerLoanRecordRepay(@RequestBody @Validated CarrierOwnerLoanRecordRepayParam param) {
ownerLoanRecordService.updateOwnerLoanRecordRepay(param); // ownerLoanRecordService.updateOwnerLoanRecordRepay(param);
return Result.ok(); // return Result.ok();
} // }
@ApiOperation(value = "借款支付取消",notes = "<br>By:艾庆国") @ApiOperation(value = "借款支付取消",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordPayCancel") @PostMapping("/updateOwnerLoanRecordPayCancel")
......
...@@ -13,10 +13,7 @@ import io.swagger.annotations.ApiOperation; ...@@ -13,10 +13,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
...@@ -46,4 +43,12 @@ public class CarrierOwnerRepaymentController { ...@@ -46,4 +43,12 @@ public class CarrierOwnerRepaymentController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages()); return Result.page(page.getRecords(), page.getTotal(), page.getPages());
} }
@ApiOperation(value = "逾期且未还款的记录",notes = "<br>By:jiwngwenye")
@GetMapping("/ownerRepaymentOverdueList")
@UnitCovert(param = false)
public Result<PageData<OwnerRepaymentVO>> ownerRepaymentOverdueList() {
IPage<OwnerRepaymentVO> page = ownerRepaymentService.ownerRepaymentOverdueList();
return Result.page(page.getRecords(),page.getTotal(),page.getPages());
}
} }
...@@ -30,8 +30,19 @@ public class BankTradeDaoImpl extends BaseDaoImpl<BankTradeMapper, BankTrade, In ...@@ -30,8 +30,19 @@ public class BankTradeDaoImpl extends BaseDaoImpl<BankTradeMapper, BankTrade, In
return Optional.of(merchantRunningWaterNo) return Optional.of(merchantRunningWaterNo)
.map(item -> lQrWrapper() .map(item -> lQrWrapper()
.eq(BankTrade::getMerchantRunningWaterNo, item) .eq(BankTrade::getMerchantRunningWaterNo, item)
.orderByDesc(BankTrade::getId)
.last("limit 1") .last("limit 1")
) )
.map(super::getOne); .map(super::getOne);
} }
@Override
public Optional<BankTrade> selectByRelationNo(String relationNo) {
return Optional.of(relationNo)
.map(item -> lQrWrapper()
.eq(BankTrade::getRelationNo, item)
.orderByDesc(BankTrade::getId)
.last("limit 1")
)
.map(super::getOne); }
} }
package com.clx.performance.dao.impl.loan;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.mapper.loan.OrderChildLoanRetryRecordMapper;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author kavin
* Date 2024-02-21
* Time 19:58
*/
@Repository
public class OrderChildLoanRetryRecordDaoImpl extends BaseDaoImpl<OrderChildLoanRetryRecordMapper, OrderChildLoanRetryRecord, Integer> implements OrderChildLoanRetryRecordDao {
@Override
public List<OrderChildLoanRetryRecord> selectListByIdAsc() {
return baseMapper.selectList(lQrWrapper().orderByAsc(OrderChildLoanRetryRecord::getId));
}
}
...@@ -96,14 +96,13 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O ...@@ -96,14 +96,13 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O
); );
} }
@Override
public boolean updatePaySuccess(OwnerLoanRecord item) {
return false;
}
@Override @Override
public boolean updatePayFail(OwnerLoanRecord item) { public boolean updateStatusById(OwnerLoanRecord item) {
return false; return update(lUdWrapper()
.eq(OwnerLoanRecord::getId, item.getId())
.set(OwnerLoanRecord::getStatus, item.getStatus())
);
} }
......
...@@ -46,6 +46,9 @@ public class OwnerRepaymentDaoImpl extends BaseDaoImpl<OwnerRepaymentMapper, Own ...@@ -46,6 +46,9 @@ public class OwnerRepaymentDaoImpl extends BaseDaoImpl<OwnerRepaymentMapper, Own
if(Objects.nonNull(param.getBeOverdue())){ if(Objects.nonNull(param.getBeOverdue())){
query.like(OwnerRepayment :: getBeOverdue,param.getBeOverdue()); query.like(OwnerRepayment :: getBeOverdue,param.getBeOverdue());
} }
if(Objects.nonNull(param.getInStatusList())){
query.in(OwnerRepayment :: getStatus,param.getInStatusList());
}
query.orderByDesc(OwnerRepayment :: getCreateTime); query.orderByDesc(OwnerRepayment :: getCreateTime);
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
......
...@@ -80,4 +80,5 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD ...@@ -80,4 +80,5 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
public List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids) { public List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids) {
return baseMapper.findByDriverSettlementIds(ids); return baseMapper.findByDriverSettlementIds(ids);
} }
} }
...@@ -154,4 +154,5 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet ...@@ -154,4 +154,5 @@ public class SettlementOwnerDetailDaoImpl extends BaseDaoImpl<SettlementOwnerDet
.set(SettlementOwnerDetail :: getSettlementNo,settlementNo) .set(SettlementOwnerDetail :: getSettlementNo,settlementNo)
); );
} }
} }
...@@ -18,4 +18,7 @@ public interface BankTradeDao extends BaseDao<BankTradeMapper, BankTrade, Intege ...@@ -18,4 +18,7 @@ public interface BankTradeDao extends BaseDao<BankTradeMapper, BankTrade, Intege
Optional<BankTrade> selectByMerchantRunningWaterNo(String merchantRunningWaterNo); Optional<BankTrade> selectByMerchantRunningWaterNo(String merchantRunningWaterNo);
Optional<BankTrade> selectByRelationNo(String relationNo);
} }
package com.clx.performance.dao.loan;
import com.clx.performance.mapper.loan.OrderChildLoanRetryRecordMapper;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @author kavin
* Date 2024-02-21
* Time 19:58
*/
public interface OrderChildLoanRetryRecordDao extends BaseDao<OrderChildLoanRetryRecordMapper, OrderChildLoanRetryRecord, Integer> {
List<OrderChildLoanRetryRecord> selectListByIdAsc();
}
...@@ -27,7 +27,7 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner ...@@ -27,7 +27,7 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner
Optional<OwnerLoanRecord> selectByMerchantRunningWaterNo(String merchantRunningWaterNo); Optional<OwnerLoanRecord> selectByMerchantRunningWaterNo(String merchantRunningWaterNo);
boolean updatePay(OwnerLoanRecord item); boolean updatePay(OwnerLoanRecord item);
boolean updatePaySuccess(OwnerLoanRecord item);
boolean updatePayFail(OwnerLoanRecord item); boolean updateStatusById(OwnerLoanRecord item);
} }
...@@ -30,4 +30,5 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai ...@@ -30,4 +30,5 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime); List<SettlementDriverDetail> listUnPay(LocalDateTime beginTime);
List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids); List<SettlementDriverDetail> findByDriverSettlementIds(List<Integer> ids);
} }
...@@ -46,4 +46,5 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM ...@@ -46,4 +46,5 @@ public interface SettlementOwnerDetailDao extends BaseDao<SettlementOwnerDetailM
List<SettlementOwnerDetail> selectListByOrderNo(String orderNo); List<SettlementOwnerDetail> selectListByOrderNo(String orderNo);
void updateSettlementMerge(String settlementNo, List<String> settlementNos); void updateSettlementMerge(String settlementNo, List<String> settlementNos);
} }
package com.clx.performance.dto;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import lombok.Data;
@Data
public class OwnerLoanMqDTO {
private SettlementOwnerDetail settlementOwnerDetail;
private SettlementDriverDetail settlementDriverDetail;
private OrderChild orderChild;
}
package com.clx.performance.event;
import cn.hutool.json.JSONUtil;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@AllArgsConstructor
public class SettlementListener {
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final OrderChildLoanRetryRecordDao orderChildLoanRetryRecordDao;
@EventListener(classes = {SettlementUpdateEvent.class})
public void listen(SettlementUpdateEvent event) {
SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail();
SettlementDriverDetail settlementDriverDetail = event.getSettlementDriverDetail();
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
OrderChildLoanRetryRecord entity = new OrderChildLoanRetryRecord();
entity.setSettlementOwnerId(settlementOwnerDetail.getId());
entity.setSettlementDriverId(settlementDriverDetail.getId());
// 保存重试记录
orderChildLoanRetryRecordDao.saveEntity(entity);
}
}
package com.clx.performance.event;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import org.springframework.context.ApplicationEvent;
public class SettlementUpdateEvent extends ApplicationEvent {
private SettlementDriverDetail settlementDriverDetail;
private SettlementOwnerDetail settlementOwnerDetail;
/**
* Create a new {@code ApplicationEvent}.
*
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public SettlementUpdateEvent(Object source) {
super(source);
}
public SettlementUpdateEvent(Object source, SettlementDriverDetail settlementDriverDetail, SettlementOwnerDetail settlementOwnerDetail) {
super(source);
this.settlementDriverDetail = settlementDriverDetail;
this.settlementOwnerDetail = settlementOwnerDetail;
}
public SettlementDriverDetail getSettlementDriverDetail() {
return settlementDriverDetail;
}
public void setSettlementDriverDetail(SettlementDriverDetail settlementDriverDetail) {
this.settlementDriverDetail = settlementDriverDetail;
}
public SettlementOwnerDetail getSettlementOwnerDetail() {
return settlementOwnerDetail;
}
public void setSettlementOwnerDetail(SettlementOwnerDetail settlementOwnerDetail) {
this.settlementOwnerDetail = settlementOwnerDetail;
}
}
...@@ -12,6 +12,7 @@ import com.clx.performance.dao.OwnerRunningWaterRecordDao; ...@@ -12,6 +12,7 @@ import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildSyncDTO; import com.clx.performance.dto.OrderChildSyncDTO;
import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.*; import com.clx.performance.enums.*;
import com.clx.performance.enums.settle.SettlementDriverEnum; import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum; import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
...@@ -29,7 +30,10 @@ import com.msl.common.dto.HttpDTO; ...@@ -29,7 +30,10 @@ import com.msl.common.dto.HttpDTO;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -64,9 +68,7 @@ public class OrderChildSyncTransportListener { ...@@ -64,9 +68,7 @@ public class OrderChildSyncTransportListener {
private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao; private final OrderChildSyncTransportInvoiceRecordDao orderChildSyncTransportInvoiceRecordDao;
private final SettlementMqService settlementMqService; private final RabbitTemplate rabbitTemplate;
private final OrderChildLoanComponent orderChildLoanComponent;
@RabbitListener(queues = RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_QUEUE) @RabbitListener(queues = RabbitKeyConstants.ORDER_CHILD_SYNC_TRANSPORT_QUEUE)
public void onMessage(String message) { public void onMessage(String message) {
...@@ -164,8 +166,6 @@ public class OrderChildSyncTransportListener { ...@@ -164,8 +166,6 @@ public class OrderChildSyncTransportListener {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO); settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode()); settlementOwnerDetail.setFinalPaymentStatus(SettlementOwnerDetailEnum.FinalPaymentStatus.NO.getCode());
} }
// 结算金额
settlementOwnerDetail.setSettlementFreight(settlementFreightCalc(orderChild.getSettlementWay(), settlementOwnerDetail));
if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(invoiceType)) { if (SettlementOwnerEnum.InvoiceType.ORDINARY.getCode().equals(invoiceType)) {
if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) { if (settlementOwnerDetail.getSettlementFreight().compareTo(BigDecimal.ZERO) == 0) {
...@@ -179,16 +179,15 @@ public class OrderChildSyncTransportListener { ...@@ -179,16 +179,15 @@ public class OrderChildSyncTransportListener {
settlementOwnerDetail.setInvoiceType(invoiceType); settlementOwnerDetail.setInvoiceType(invoiceType);
settlementDriverDetail.setInvoiceType(invoiceType); settlementDriverDetail.setInvoiceType(invoiceType);
//生成借款标识 //货主借款监听器处理
orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail); OwnerLoanMqDTO dto = new OwnerLoanMqDTO();
dto.setSettlementOwnerDetail(settlementOwnerDetail);
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail)); dto.setSettlementDriverDetail(settlementDriverDetail);
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail); dto.setOrderChild(orderChild);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail); Message message = MessageBuilder.withBody(JSONUtil.parse(dto).toString().getBytes()).build();
rabbitTemplate.send(
// 发送mq 通过开票标识 RabbitKeyConstants.OWNER_LOAN_EXCHANGE, RabbitKeyConstants.OWNER_LOAN_ROUTE_KEY, message
settlementMqService.invoiceTypeSync(orderChild.getChildNo(), invoiceType); ); }
}
private void generateTakeOutRunningWatter(OrderChild orderChild, BigDecimal ans, SettlementOwnerDetail settlementOwnerDetail, SettlementDriverDetail settlementDriverDetail) { private void generateTakeOutRunningWatter(OrderChild orderChild, BigDecimal ans, SettlementOwnerDetail settlementOwnerDetail, SettlementDriverDetail settlementDriverDetail) {
OwnerAccount account = null; OwnerAccount account = null;
...@@ -252,17 +251,7 @@ public class OrderChildSyncTransportListener { ...@@ -252,17 +251,7 @@ public class OrderChildSyncTransportListener {
} }
} }
/**
* 结算金额
*/
private BigDecimal settlementFreightCalc(Integer settlementWay, SettlementOwnerDetail settlementOwnerDetail) {
if (Objects.equals(settlementWay, SettlementWayEnum.WayType.LOAD.getCode())) { //订单结算方式为“装车净重”时,结算金额=实际净重*平台运费报价-预付运费-货损金额。
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice())
.subtract(settlementOwnerDetail.getPrepayFreight()).subtract(settlementOwnerDetail.getLossFreight());
} else { //订单结算方式为“卸车净重”时,结算金额=实际净重*平台运费报价-预付运费
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
}
}
/** /**
* 开票金额 * 开票金额
......
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.event.SettlementUpdateEvent;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
/**
* 处理货主借款监听器
*/
@Slf4j
@Component
@AllArgsConstructor
public class OwnerLoanListener {
private final OrderChildLoanComponent orderChildLoanComponent;
private final SettlementMqService settlementMqService;
private final ApplicationEventPublisher applicationEventPublisher;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
@RabbitListener(queues = RabbitKeyConstants.OWNER_LOAN_QUEUE)
public void onMessage(String message) {
log.info("处理货主借款监听器执行,数据为{}", message);
OwnerLoanMqDTO param = JSONUtil.toBean(message, OwnerLoanMqDTO.class);
SettlementOwnerDetail settlementOwnerDetail = param.getSettlementOwnerDetail();
SettlementDriverDetail settlementDriverDetail = param.getSettlementDriverDetail();
OrderChild orderChild = param.getOrderChild();
try {
//生成借款标识
orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail, orderChild);
} catch (Exception e) {
log.error("处理货主借款监听器执行异常,数据为{}", message, e);
//未借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode());
applicationEventPublisher.publishEvent(new SettlementUpdateEvent(this, settlementDriverDetail, settlementOwnerDetail));
throw e;
}
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
// 发送mq 通过开票标识
settlementMqService.invoiceTypeSync(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType());
}
}
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.performance.param.OwnerLoanPayNotifyMqParam;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.service.loan.OwnerLoanRecordService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Objects;
/**
* 处理货主借款支付监听器
*/
@Slf4j
@Component
@AllArgsConstructor
public class OwnerLoanPayNotifyListener {
private final OwnerLoanRecordService ownerLoanRecordService;
@RabbitListener(queues = RabbitKeyConstants.OWNER_LOAN_PAY_QUEUE)
public void onMessage(String message) {
log.info("处理货主借款支付监听器执行,数据为{}", message);
OwnerLoanPayNotifyMqParam param = JSONUtil.toBean(message, OwnerLoanPayNotifyMqParam.class);
if (Objects.equals(param.getPayStatus(), NbBankStatusEnum.Status.SUCCESS.getCode())) {
// 支付成功
ownerLoanRecordService.paySuccess(param.getMerSeqNo());
}
else if (Objects.equals(param.getPayStatus(), NbBankStatusEnum.Status.FAIL.getCode())) {
// 支付失败
ownerLoanRecordService.payFail(param.getMerSeqNo());
}
}
}
package com.clx.performance.mapper.loan;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
/**
* @author kavin
* Date 2024-02-21
* Time 19:58
*/
public interface OrderChildLoanRetryRecordMapper extends BaseMapper<OrderChildLoanRetryRecord> {
}
...@@ -36,6 +36,7 @@ public class BankTrade implements HasKey<Integer> { ...@@ -36,6 +36,7 @@ public class BankTrade implements HasKey<Integer> {
private String remark; //备注 private String remark; //备注
private LocalDateTime createTime; //创建时间 private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间 private LocalDateTime modifiedTime; //修改时间
private String relationNo;
@KeyColumn("id") @KeyColumn("id")
@Override @Override
......
package com.clx.performance.model.loan;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* @author kavin
* Date 2024-02-21
* Time 19:58
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("order_child_loan_retry_record")
public class OrderChildLoanRetryRecord implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("settlement_driver_id")
@ApiModelProperty("车主计费主键")
private Integer settlementDriverId;
@TableField("settlement_owner_id")
@ApiModelProperty("货主计费主键")
private Integer settlementOwnerId;
@TableField("create_time")
@ApiModelProperty("创建时间")
private LocalDateTime createTime;
@TableField("modified_time")
@ApiModelProperty("修改时间")
private LocalDateTime modifiedTime;
@Override
@KeyColumn("id")
public Integer gainKey() {
return this.id;
}
}
package com.clx.performance.service.impl.loan; package com.clx.performance.service.impl.loan;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountDao; import com.clx.performance.dao.loan.OwnerLoanAccountDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccount; import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam; import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam;
import com.clx.performance.service.loan.OwnerLoanAccountService; import com.clx.performance.service.loan.OwnerLoanAccountService;
import com.clx.performance.struct.loan.OwnerLoanAccountStruct; import com.clx.performance.struct.loan.OwnerLoanAccountStruct;
...@@ -14,10 +27,14 @@ import com.msl.user.data.UserSessionData; ...@@ -14,10 +27,14 @@ import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
/** /**
* @author kavin * @author kavin
...@@ -27,12 +44,22 @@ import java.math.BigDecimal; ...@@ -27,12 +44,22 @@ import java.math.BigDecimal;
@Service @Service
@Slf4j @Slf4j
@AllArgsConstructor @AllArgsConstructor
public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService { public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService {
private final OwnerLoanAccountDao ownerLoanAccountDao; private final OwnerLoanAccountDao ownerLoanAccountDao;
private final OwnerLoanAccountStruct ownerLoanAccountStruct; private final OwnerLoanAccountStruct ownerLoanAccountStruct;
private final OrderChildDao orderChildDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final OrderChildLoanRetryRecordDao orderChildLoanRetryRecordDao;
private final RabbitTemplate rabbitTemplate;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void openOwnerLoanAccount(Long ownerUserNo, String ownerUserName, String mobile) { public void openOwnerLoanAccount(Long ownerUserNo, String ownerUserName, String mobile) {
...@@ -63,12 +90,40 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService { ...@@ -63,12 +90,40 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo(); UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Optional<OwnerLoanAccount> optional = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, Optional<OwnerLoanAccount> optional = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
loginUserInfo.getUserNo()); loginUserInfo.getUserNo());
if(!optional.isPresent()){ if (!optional.isPresent()) {
return OwnerAccountVO.builder().openAccount(0).build(); return OwnerAccountVO.builder().openAccount(0).build();
} }
OwnerLoanAccount ownerLoanAccount = optional.get(); OwnerLoanAccount ownerLoanAccount = optional.get();
OwnerAccountVO ownerAccountVO = ownerLoanAccountStruct.convertVO(ownerLoanAccount); OwnerAccountVO ownerAccountVO = ownerLoanAccountStruct.convertVO(ownerLoanAccount);
ownerAccountVO.setOpenAccount(1); ownerAccountVO.setOpenAccount(1);
return ownerAccountVO; return ownerAccountVO;
} }
/**
* 货主借款后执行阻塞流程的相关运单
*
* @param ownerUserNo
*/
@Override
public void orderChildLoanProcess(Long ownerUserNo) {
List<OrderChildLoanRetryRecord> orderChildLoanRetryRecordList = orderChildLoanRetryRecordDao.selectListByIdAsc();
for (OrderChildLoanRetryRecord retryRecord : orderChildLoanRetryRecordList) {
//生成借款标识
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.getEntityByKey(retryRecord.getSettlementDriverId()).get();
SettlementOwnerDetail settlementOwnerDetail = settlementOwnerDetailDao.getEntityByKey(retryRecord.getSettlementOwnerId()).get();
OrderChild orderChild = orderChildDao.getByChildNo(settlementDriverDetail.getChildNo()).get();
OwnerLoanMqDTO dto = new OwnerLoanMqDTO();
dto.setSettlementOwnerDetail(settlementOwnerDetail);
dto.setSettlementDriverDetail(settlementDriverDetail);
dto.setOrderChild(orderChild);
//货主借款监听器处理
Message message = MessageBuilder.withBody(JSONUtil.parse(dto).toString().getBytes()).build();
rabbitTemplate.send(
RabbitKeyConstants.OWNER_LOAN_EXCHANGE, RabbitKeyConstants.OWNER_LOAN_ROUTE_KEY, message
);
orderChildLoanRetryRecordDao.deleteByKey(retryRecord.getId());
}
}
} }
...@@ -24,6 +24,7 @@ import com.clx.performance.enums.loan.BankTradeEnum; ...@@ -24,6 +24,7 @@ import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum; import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum; import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum; import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.model.OwnerBindCardRecord; import com.clx.performance.model.OwnerBindCardRecord;
import com.clx.performance.model.loan.*; import com.clx.performance.model.loan.*;
import com.clx.performance.param.pc.loan.carrier.*; import com.clx.performance.param.pc.loan.carrier.*;
...@@ -37,6 +38,7 @@ import com.clx.performance.vo.pc.loan.owner.BorrowerSelectVO; ...@@ -37,6 +38,7 @@ import com.clx.performance.vo.pc.loan.owner.BorrowerSelectVO;
import com.clx.performance.vo.pc.loan.owner.OwnerLoanRecordDetail; import com.clx.performance.vo.pc.loan.owner.OwnerLoanRecordDetail;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO; import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.clx.user.feign.OwnerFeign; import com.clx.user.feign.OwnerFeign;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
...@@ -165,8 +167,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -165,8 +167,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo()); ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode()); bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
} } else {
else {
// 转账支付 // 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue()); NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo()); ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
...@@ -180,6 +181,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -180,6 +181,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
// 更新借款支付信息 // 更新借款支付信息
ownerLoanRecordDao.updatePay(ownerLoanRecord); ownerLoanRecordDao.updatePay(ownerLoanRecord);
bankTrade.setRelationNo(ownerLoanRecord.getLoanNo().toString());
bankTrade.setOrderType(BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode()); bankTrade.setOrderType(BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode());
bankTrade.setAmount(ownerLoanRecord.getLoanBalance()); bankTrade.setAmount(ownerLoanRecord.getLoanBalance());
bankTrade.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo()); bankTrade.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo());
...@@ -206,8 +208,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -206,8 +208,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
if (flag == 1) { if (flag == 1) {
//生成借款流水 //生成借款流水
initOwnerLoanRunningWaterRecord(ownerLoanRecord); initOwnerLoanRunningWaterRecord(ownerLoanRecord);
//生成还款记录 /* //生成还款记录
initOwnerRepayment(ownerLoanRecord); initOwnerRepayment(ownerLoanRecord);*/
break; break;
} }
} }
...@@ -266,13 +268,15 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -266,13 +268,15 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerRepayment.setCreateBy(ownerLoanRecord.getOwnerUserName()); ownerRepayment.setCreateBy(ownerLoanRecord.getOwnerUserName());
ownerRepayment.setRepaymentBalance(ownerLoanRecord.getLoanBalance()); ownerRepayment.setRepaymentBalance(ownerLoanRecord.getLoanBalance());
ownerRepayment.setRepaymentNo(idGenerateSnowFlake.nextId(2L)); ownerRepayment.setRepaymentNo(idGenerateSnowFlake.nextId(2L));
ownerRepayment.setPayment(ownerLoanRecord.getBorrower());
ownerRepayment.setPaymentAccount(ownerLoanRecord.getBorrowerAccount()); OwnerInfoFeignVO ownerInfoFeignVO = ownerFeign.getOwnerInfo(ownerLoanRecord.getOwnerUserNo()).getData();
log.info("生成还款记录,查询到用户信息:{}", JSONUtil.parse(ownerInfoFeignVO));
ownerRepayment.setPayment(ownerInfoFeignVO.getCompanyName());
ownerRepayment.setPaymentAccount(ownerInfoFeignVO.getOwnerBankAccount());
ownerRepayment.setPayee(ownerRepayment.getPayee()); ownerRepayment.setPayee(ownerRepayment.getPayee());
ownerRepayment.setPayeeAccount(ownerLoanRecord.getPayeeAccount()); ownerRepayment.setPayeeAccount(ownerLoanRecord.getPayeeAccount());
ownerRepayment.setPayChannel(OwnerRePaymentEnum.Channel.ORDER.getCode()); ownerRepayment.setPayChannel(ownerLoanRecord.getPayChannel());
ownerRepayment.setRunningWaterOpenNo(ownerLoanRecord.getRunningWaterOpenNo());
ownerRepayment.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo());
ownerRepayment.setBeOverdue(OwnerRePaymentEnum.BeOverdue.NO.getCode()); ownerRepayment.setBeOverdue(OwnerRePaymentEnum.BeOverdue.NO.getCode());
ownerRepayment.setCreateBy("系统"); ownerRepayment.setCreateBy("系统");
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_WAIT.getCode()); ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_WAIT.getCode());
...@@ -318,12 +322,12 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -318,12 +322,12 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
PerformanceResultEnum.DATA_NOT_FIND); PerformanceResultEnum.DATA_NOT_FIND);
CarrierCashierInfoVO vo = ownerLoanRecordStruct.convertCashierInfo(ownerLoanRecord); CarrierCashierInfoVO vo = ownerLoanRecordStruct.convertCashierInfo(ownerLoanRecord);
Borrower borrower = borrowerDao.getEntityByKey(ownerLoanRecord.getBorrowerId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); Borrower borrower = borrowerDao.getEntityByKey(ownerLoanRecord.getBorrowerId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(borrower.getDeleteStatus(), DeleteStatusEnum.NO.getCode())){ if (Objects.equals(borrower.getDeleteStatus(), DeleteStatusEnum.NO.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND); throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
} }
vo.setOrderPayWay(false); vo.setOrderPayWay(false);
String bankName = borrower.getBankName(); String bankName = borrower.getBankName();
if(nbBankConfig.getOrderSupportBank().contains(bankName)){ if (nbBankConfig.getOrderSupportBank().contains(bankName)) {
vo.setOrderPayWay(true); vo.setOrderPayWay(true);
} }
vo.setBankName(bankName); vo.setBankName(bankName);
...@@ -345,6 +349,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -345,6 +349,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
//计算倒计时时间,下单时间 + 30天 为截止时间 //计算倒计时时间,下单时间 + 30天 为截止时间
LocalDateTime endTime = ownerLoanRecord.getCreateTime().plusDays(30); LocalDateTime endTime = ownerLoanRecord.getCreateTime().plusDays(30);
vo.setFinalPaymentTime(DateUtils.formatDateTime(endTime).get()); vo.setFinalPaymentTime(DateUtils.formatDateTime(endTime).get());
vo.setLoanNo(ownerLoanRecord.getLoanNo());
return vo; return vo;
} }
...@@ -436,7 +441,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -436,7 +441,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo()) OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); .orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAY_FAIL.getCode())){ if (!Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAY_FAIL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_PAY_STATUS_ERROR); throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_PAY_STATUS_ERROR);
} }
...@@ -461,8 +466,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -461,8 +466,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo()); ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode()); bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
} } else {
else {
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账 //资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
// 转账支付 // 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue()); NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
...@@ -499,36 +503,105 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -499,36 +503,105 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
@Override @Override
public void payFail(String loanNo){ @Transactional(rollbackFor = Exception.class)
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo) public void payFail(String merSeqNo) {
BankTrade bankTrade = bankTradeDao.selectByMerchantRunningWaterNo(merSeqNo).get();
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, bankTrade.getRelationNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); .orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())){ if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())) {
log.info("借款单非支付中状态, loanNo:{}", loanNo); log.info("借款单非支付中状态, loanNo:{}", bankTrade.getRelationNo());
return; return;
} }
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_FAIL.getCode()); ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_FAIL.getCode());
ownerLoanRecordDao.updatePaySuccess(ownerLoanRecord); ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
} }
@Override @Override
public void paySuccess(String loanNo){ @Transactional(rollbackFor = Exception.class)
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo) public void paySuccess(String merSeqNo) {
BankTrade bankTrade = bankTradeDao.selectByMerchantRunningWaterNo(merSeqNo).get();
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, bankTrade.getRelationNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); .orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())){ if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())) {
log.info("借款单非支付中状态, loanNo:{}", loanNo); log.info("借款单非支付中状态, loanNo:{}", bankTrade.getRelationNo());
return; return;
} }
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_SUCCESS.getCode()); ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_SUCCESS.getCode());
while (true) {
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get();
OwnerLoanAccount entity = new OwnerLoanAccount();
entity.setId(ownerLoanAccount.getId());
entity.setFundingAccountBalance(BigDecimal.ZERO);
entity.setFundingFrozenBalance(BigDecimal.ZERO);
entity.setFundingUsableBalance(BigDecimal.ZERO);
entity.setVirtuallyAccountBalance(ownerLoanRecord.getLoanBalance());
entity.setVirtuallyFrozenBalance(BigDecimal.ZERO);
entity.setVirtuallyUsableBalance(ownerLoanRecord.getLoanBalance());
entity.setModifiedTime(ownerLoanAccount.getModifiedTime());
Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), true);
if (flag == 1) {
//生成借款流水
initOwnerLoanRunningWaterRecord(ownerLoanRecord);
//生成还款记录
initOwnerRepayment(ownerLoanRecord);
ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
break;
}
}
}
@Override
public void ownerLoanRecordRetryPay(String loanNo) {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode());
// 更新借款信息
ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void ownerLoanRecordCancelPay(String loanNo) {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode())
&& !ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.PAYING.getCode())
) {
log.info("借款记录状态异常,不能取消");
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR);
}
NbBankOrderResultVO result = bankService.getResult(loanNo);
Integer status = result.getStatus();
if (!NbBankStatusEnum.Status.INIT.getCode().equals(status)
&& !NbBankStatusEnum.Status.FAIL.getCode().equals(status)
&& !NbBankStatusEnum.Status.NOT_FOUND.getCode().equals(status)
) {
log.info("宁波银行响应当前业务,不能取消{}", JSONUtil.parse(result));
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR);
}
log.info("借款记录取消,更新状态为待审批");
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode());
ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
BankTrade bankTrade = bankTradeDao.selectByRelationNo(loanNo).get();
Integer tradeType = bankTrade.getTradeType();
// 调用宁波退款
bankService.refund(tradeType, bankTrade.getMerchantRunningWaterNo(), Integer.valueOf(ownerLoanRecord.getLoanBalance().movePointRight(2).toString()), bankTrade.getRunningWaterOpenNo());
ownerLoanRecordDao.updatePaySuccess(ownerLoanRecord);
} }
public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) { public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) {
log.info("13.生成借款冻结流水"); log.info("13.生成借款冻结流水");
OwnerLoanAccount update = new OwnerLoanAccount(); OwnerLoanAccount update = new OwnerLoanAccount();
......
...@@ -32,11 +32,14 @@ import com.msl.document.api.feign.ContractEvidenceFeign; ...@@ -32,11 +32,14 @@ import com.msl.document.api.feign.ContractEvidenceFeign;
import com.msl.document.api.feign.ContractTemplateFeign; import com.msl.document.api.feign.ContractTemplateFeign;
import com.msl.document.api.param.GenerateContractParam; import com.msl.document.api.param.GenerateContractParam;
import com.msl.document.api.vo.ContractEvidenceRecordVo; import com.msl.document.api.vo.ContractEvidenceRecordVo;
import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
...@@ -70,6 +73,28 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService { ...@@ -70,6 +73,28 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
return returnPage; return returnPage;
} }
@Override
public IPage<OwnerRepaymentVO> ownerRepaymentOverdueList() {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
PageCarrierOwnerRepaymentParam param = new PageCarrierOwnerRepaymentParam();
param.setOwnerUserNo(String.valueOf(loginUserInfo.getUserNo()));
List<Integer> inStatusList = new ArrayList<>();
inStatusList.add(OwnerRePaymentEnum.Status.PAYING.getCode());
inStatusList.add(OwnerRePaymentEnum.Status.PAY_WAIT.getCode());
inStatusList.add(OwnerRePaymentEnum.Status.PAY_FAIL.getCode());
param.setInStatusList(inStatusList);
param.setBeOverdue(OwnerRePaymentEnum.BeOverdue.YES.getCode());
IPage<OwnerRepayment> page = ownerRepaymentDao.pageOwnerRepayment(param);
List<OwnerRepaymentVO> records = ownerRepaymentStruct.convertList(page.getRecords());
IPage<OwnerRepaymentVO> returnPage = new Page<>();
returnPage.setPages(page.getPages());
returnPage.setTotal(page.getTotal());
returnPage.setRecords(records);
return returnPage;
}
@Override @Override
public IPage<OwnerRepaymentVO> pageOwnerRepaymentOfOwner(PageOwnerRepaymentOfOwner param) { public IPage<OwnerRepaymentVO> pageOwnerRepaymentOfOwner(PageOwnerRepaymentOfOwner param) {
return ownerRepaymentDao.pageByParam(param); return ownerRepaymentDao.pageByParam(param);
......
...@@ -3,6 +3,7 @@ package com.clx.performance.service.impl.settle; ...@@ -3,6 +3,7 @@ package com.clx.performance.service.impl.settle;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam;
...@@ -58,7 +59,6 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai ...@@ -58,7 +59,6 @@ public class SettlementDriverDetailServiceImpl implements SettlementDriverDetai
// 预付运费 // 预付运费
settlementDriverDetail.setPrepayFreight(BigDecimal.ZERO); settlementDriverDetail.setPrepayFreight(BigDecimal.ZERO);
// 结算金额 // 结算金额
settlementDriverDetail.setSettlementFreight(settlementFreightCalc(settlementDriverDetail.getFreight(), settlementDriverDetail.getLossFreight())); settlementDriverDetail.setSettlementFreight(settlementFreightCalc(settlementDriverDetail.getFreight(), settlementDriverDetail.getLossFreight()));
......
package com.clx.performance.service.impl.thirdparty.nbbank; package com.clx.performance.service.impl.thirdparty.nbbank;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.clx.performance.param.OwnerLoanPayNotifyMqParam;
import com.clx.performance.component.IdGenerateSnowFlake; import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.loan.BankTradeDao; import com.clx.performance.dao.loan.BankTradeDao;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.BankTradeEnum; import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.nbbank.NbBankStatusEnum; import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.model.loan.BankTrade; import com.clx.performance.model.loan.BankTrade;
import com.clx.performance.service.loan.OwnerLoanRecordService;
import com.clx.performance.service.thirdparty.nbbank.NbBankService; import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService; import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.utils.SpringContextUtils;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -39,6 +43,9 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -39,6 +43,9 @@ public class NbBankServiceImpl implements NbBankService {
@Autowired @Autowired
private IdGenerateSnowFlake idGenerateSnowFlake; private IdGenerateSnowFlake idGenerateSnowFlake;
@Autowired
private RabbitTemplate rabbitTemplate;
/** /**
* 转账支付 * 转账支付
...@@ -78,7 +85,7 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -78,7 +85,7 @@ public class NbBankServiceImpl implements NbBankService {
@Override @Override
public NbBankOrderPayResultVO orderDirectPay(Long loanNo, Integer amount, public NbBankOrderPayResultVO orderDirectPay(Long loanNo, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm) { String payAcctOpenBankId, String payAcctNo, String payAcctNm) {
String merSeqNo = String.valueOf(loanNo); String merSeqNo = idGenerateSnowFlake.nextIdToString(1L);
String merDtTm = LocalDateTimeUtils.formatTime(); String merDtTm = LocalDateTimeUtils.formatTime();
String closeDtTm = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.parseTime(merDtTm).plusDays(30)); String closeDtTm = LocalDateTimeUtils.formatTime(LocalDateTimeUtils.parseTime(merDtTm).plusDays(30));
...@@ -228,22 +235,17 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -228,22 +235,17 @@ public class NbBankServiceImpl implements NbBankService {
// 更新状态 // 更新状态
bankTradeDao.updateStatus(bankTrade); bankTradeDao.updateStatus(bankTrade);
// 货主借款支付回调 // 货主借款支付回调
if (Objects.equals(bankTrade.getOrderType(), BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode())){ if (Objects.equals(bankTrade.getOrderType(), BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode())){
OwnerLoanPayNotifyMqParam param = new OwnerLoanPayNotifyMqParam();
if (Objects.equals(transStatus, NbBankStatusEnum.Status.SUCCESS.getCode())) { param.setMerSeqNo(merSeqNo);
param.setPayStatus(transStatus);
SpringContextUtils.getBeanByClass(OwnerLoanRecordService.class).paySuccess(merSeqNo); Message message = MessageBuilder.withBody(JSONUtil.parse(param).toString().getBytes()).build();
}
else if (Objects.equals(transStatus, NbBankStatusEnum.Status.FAIL.getCode())) { //执行解绑自有车辆处理逻辑,将绑定记录正常改为取消
SpringContextUtils.getBeanByClass(OwnerLoanRecordService.class).payFail(merSeqNo); rabbitTemplate.send(
} RabbitKeyConstants.OWNER_LOAN_EXCHANGE, RabbitKeyConstants.OWNER_LOAN_PAY_ROUTE_KEY, message
else { );
// TODO 其它情况
}
}
else {
} }
......
...@@ -17,4 +17,6 @@ public interface OwnerLoanAccountService { ...@@ -17,4 +17,6 @@ public interface OwnerLoanAccountService {
IPage<CarrierOwnerLoanAccountVO> pageOwnerLoanAccount(PageOwnerLoanAccountParam param); IPage<CarrierOwnerLoanAccountVO> pageOwnerLoanAccount(PageOwnerLoanAccountParam param);
OwnerAccountVO getOwnerLoanAccount(); OwnerAccountVO getOwnerLoanAccount();
void orderChildLoanProcess(Long ownerUserNo);
} }
...@@ -42,7 +42,11 @@ public interface OwnerLoanRecordService { ...@@ -42,7 +42,11 @@ public interface OwnerLoanRecordService {
void updateOwnerLoanRecordRepay(CarrierOwnerLoanRecordRepayParam param); void updateOwnerLoanRecordRepay(CarrierOwnerLoanRecordRepayParam param);
void updateOwnerLoanRecordPayCancel(CarrierOwnerLoanRecordPayCancelParam param); void updateOwnerLoanRecordPayCancel(CarrierOwnerLoanRecordPayCancelParam param);
void payFail(String loanNo); void payFail(String merSeqNo);
void paySuccess(String loanNo); void paySuccess(String merSeqNo);
void ownerLoanRecordRetryPay(String loanNo);
void ownerLoanRecordCancelPay(String loanNo);
} }
...@@ -18,6 +18,8 @@ public interface OwnerRepaymentService { ...@@ -18,6 +18,8 @@ public interface OwnerRepaymentService {
IPage<OwnerRepaymentVO> pageOwnerRepayment(PageCarrierOwnerRepaymentParam param); IPage<OwnerRepaymentVO> pageOwnerRepayment(PageCarrierOwnerRepaymentParam param);
IPage<OwnerRepaymentVO> ownerRepaymentOverdueList();
IPage<OwnerRepaymentVO> pageOwnerRepaymentOfOwner(PageOwnerRepaymentOfOwner param); IPage<OwnerRepaymentVO> pageOwnerRepaymentOfOwner(PageOwnerRepaymentOfOwner param);
OwnerCashierInfoVO getCashierInfo(Integer id); OwnerCashierInfoVO getCashierInfo(Integer id);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论