提交 f5f2adbc 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
......@@ -16,8 +16,9 @@ public enum OwnerRePaymentEnum {
public enum Status {
PAY_WAIT(10, "待付款"),
PAYING(40, "付款中"),
PAY_SUCCESS(50, "付款成功"),
PAY_FAIL(60, "付款失败"),
PAY_FAIL(50, "付款失败"),
PAY_SUCCESS(60, "付款成功"),
;
private final Integer code;
......
......@@ -21,6 +21,8 @@ import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.event.OwnerRepaymentUpdateEvent;
import com.clx.performance.event.SettlementUpdateEvent;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerRunningWaterRecord;
......@@ -37,6 +39,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
......@@ -70,6 +73,8 @@ public class OrderChildLoanComponent {
private final RedissonClient redissonClient;
private final ApplicationEventPublisher applicationEventPublisher;
/**
* 接单校验判断
*
......@@ -150,8 +155,8 @@ public class OrderChildLoanComponent {
}
//借款账户钱够,判断是否逾期
log.info("10.借款账户钱够,判断是否逾期");
Optional<OwnerRepayment> optional = ownerRepaymentDao.getLimitOneByField(OwnerRepayment::getBeOverdue, OwnerRePaymentEnum.BeOverdue.YES.getCode());
if (optional.isPresent()) {
boolean beOverdue = this.beOverdue(ownerInfoFeignVO.getUserNo());
if (beOverdue) {
//逾期:不允许
log.info("11.当前货主存在逾期借款");
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主已欠款");
......@@ -406,6 +411,21 @@ public class OrderChildLoanComponent {
}
}
private boolean beOverdue(Long ownerUserNo) {
//查询未付款成功还款单
List<OwnerRepayment> ownerRepaymentList = ownerRepaymentDao.selectListByStatusAndOwnerUserNo(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode(), ownerUserNo);
for (OwnerRepayment ownerRepayment : ownerRepaymentList) {
if (OwnerRePaymentEnum.BeOverdue.YES.getCode().equals(ownerRepayment.getBeOverdue())) {
return true;
} else {
if (ownerRepayment.getLoanRepaymentTime().equals(LocalDateTime.now()) || ownerRepayment.getLoanRepaymentTime().isBefore(LocalDateTime.now())) {
applicationEventPublisher.publishEvent(new OwnerRepaymentUpdateEvent(this, ownerRepayment.getId()));
}
}
}
return false;
}
/**
* 抵扣金额
......
......@@ -20,4 +20,13 @@ public class ClxMessageConfig {
//短信验证码模板
private String captchaTemplateCode;
//订单支付短信模板
private String orderPayTemplateCode;
//转账支付-借款单短信模板
private String borrowTemplateCode;
//转账支付-还款单短信模板
private String repaymentTemplateCode;
}
......@@ -124,4 +124,13 @@ public class CarrierOwnerLoanRecordController {
return Result.ok();
}
@ApiOperation(value = "转账支付-借款短信", notes = "<br>By:姜文业")
@GetMapping("/sendLoanSms")
public Result<String> sendLoanSms(@RequestParam("mobile") @NotBlank(message = "通知的手机号码不能为空") String mobile,
@Param("loanNo") @NotNull(message = "借款单号不能为空") Long loanNo) {
String token = ownerLoanRecordService.sendLoanSms(mobile,loanNo);
return Result.ok(token);
}
}
......@@ -21,6 +21,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Slf4j
......@@ -78,7 +79,13 @@ public class OwnerRepaymentController {
return Result.ok(url);
}
@ApiOperation(value = "转账支付-还款短信", notes = "<br>By:姜文业")
@GetMapping("/sendPaymentSms")
public Result<String> sendPaymentSms(@RequestParam("mobile") @NotBlank(message = "通知的手机号码不能为空") String mobile,
@Param("repaymentNo") @NotNull(message = "还款单号不能为空") Long repaymentNo) {
String token = ownerRepaymentService.sendPaymentSms(mobile,repaymentNo);
return Result.ok(token);
}
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.mapper.loan.OwnerRepaymentMapper;
import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerRepaymentParam;
......@@ -13,6 +14,7 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Objects;
/**
......@@ -59,4 +61,11 @@ public class OwnerRepaymentDaoImpl extends BaseDaoImpl<OwnerRepaymentMapper, Own
return baseMapper.pageByParam(page,param);
}
@Override
public List<OwnerRepayment> selectListByStatusAndOwnerUserNo(Integer status, Long ownerUserNo) {
return baseMapper.selectList(lQrWrapper().eq(OwnerRepayment::getOwnerUserNo, ownerUserNo)
.lt(OwnerRepayment::getStatus, status)
);
}
}
......@@ -8,6 +8,8 @@ import com.clx.performance.param.pc.loan.carrier.PageOwnerRepaymentOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerRepaymentVO;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @author kavin
* Date 2024-01-20
......@@ -18,4 +20,11 @@ public interface OwnerRepaymentDao extends BaseDao<OwnerRepaymentMapper, OwnerRe
IPage<OwnerRepaymentVO> pageByParam(PageOwnerRepaymentOfOwner param);
/**
* 查询未付款成功还款单
* @param status
* @param ownerUserNo
* @return
*/
List<OwnerRepayment> selectListByStatusAndOwnerUserNo(Integer status, Long ownerUserNo);
}
......@@ -2,9 +2,12 @@ package com.clx.performance.event;
import cn.hutool.json.JSONUtil;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import lombok.AllArgsConstructor;
......@@ -15,7 +18,7 @@ import org.springframework.stereotype.Component;
@Component
@Slf4j
@AllArgsConstructor
public class SettlementListener {
public class EventListenerComponent {
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
......@@ -23,6 +26,8 @@ public class SettlementListener {
private final OrderChildLoanRetryRecordDao orderChildLoanRetryRecordDao;
private final OwnerRepaymentDao ownerRepaymentDao;
@EventListener(classes = {SettlementUpdateEvent.class})
public void listen(SettlementUpdateEvent event) {
......@@ -38,4 +43,12 @@ public class SettlementListener {
// 保存重试记录
orderChildLoanRetryRecordDao.saveEntity(entity);
}
@EventListener(classes = {OwnerRepaymentUpdateEvent.class})
public void listen(OwnerRepaymentUpdateEvent event) {
OwnerRepayment update = new OwnerRepayment();
update.setId(event.getId());
update.setBeOverdue(OwnerRePaymentEnum.BeOverdue.YES.getCode());
ownerRepaymentDao.updateEntityByKey(update);
}
}
package com.clx.performance.event;
import org.springframework.context.ApplicationEvent;
public class OwnerRepaymentUpdateEvent extends ApplicationEvent {
private Integer id;
/**
* 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 OwnerRepaymentUpdateEvent(Object source) {
super(source);
}
public OwnerRepaymentUpdateEvent(Object source, Integer id) {
super(source);
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
......@@ -302,7 +302,7 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
//接单判断
//接单借款判断
orderChildLoanComponent.getChildDetermine(orderInfo, ownerInfo, orderGoods, childNo);
OrderChild orderChild = new OrderChild();
......
package com.clx.performance.service.impl.loan;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.message.AliSmsMessageReq;
import com.clx.order.enums.DeleteStatusEnum;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.config.loan.ClxPayeeConfig;
import com.clx.performance.config.loan.PaymentFromConfig;
import com.clx.performance.config.nbbank.NbBankConfig;
......@@ -100,6 +104,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
private final PaymentFromConfig paymentFromConfig;
private final NbBankConfig nbBankConfig;
private final ClxPayeeConfig clxPayeeConfig;
private final ClxMessageOpenapiFeign clxMessageOpenapiFeign;
private final ClxMessageConfig messageConfig;
@Override
public IPage<OwnerLoanRecordVO> pageOwnerLoanRecord(PageCarrierOwnerLoanRecordParam param) {
......@@ -675,4 +681,21 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
}
}
@Override
public String sendLoanSms(String mobile,Long loanNo) {
AliSmsMessageReq req = new AliSmsMessageReq();
req.setTemplateCode(messageConfig.getRepaymentTemplateCode());
JSONObject jsonObject = new JSONObject();
//随机生成4位数字
jsonObject.set("borrowNo", loanNo);
req.setChannelId(messageConfig.getChannelId());
req.setAppId(messageConfig.getAppId().toString());
req.setMobile(mobile);
req.setContent(jsonObject.toString());
req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req);
return UUID.randomUUID().toString();
}
}
package com.clx.performance.service.impl.loan;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.message.feign.ClxMessageOpenapiFeign;
import com.clx.message.req.message.AliSmsMessageReq;
import com.clx.performance.config.ClxMessageConfig;
import com.clx.performance.config.loan.ClxPayeeConfig;
import com.clx.performance.config.loan.PaymentFromConfig;
import com.clx.performance.config.nbbank.NbBankConfig;
......@@ -36,10 +40,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* @author kavin
......@@ -58,6 +59,8 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
private final PaymentFromConfig paymentFromConfig;
private final OwnerInfoServiceImpl ownerInfoService;
private final NbBankConfig nbBankConfig;
private final ClxMessageOpenapiFeign clxMessageOpenapiFeign;
private final ClxMessageConfig messageConfig;
@Override
public IPage<OwnerRepaymentVO> pageOwnerRepayment(PageCarrierOwnerRepaymentParam param) {
......@@ -160,4 +163,21 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
Result<ContractEvidenceRecordVo> contractEvidenceDetail = contractEvidenceFeign.getContractEvidenceDetail(longResult.getData());
return contractEvidenceDetail.getData().getFileUrl();
}
@Override
public String sendPaymentSms(String mobile,Long repaymentNo) {
AliSmsMessageReq req = new AliSmsMessageReq();
req.setTemplateCode(messageConfig.getRepaymentTemplateCode());
JSONObject jsonObject = new JSONObject();
//随机生成4位数字
jsonObject.set("repaymentNo", repaymentNo);
req.setChannelId(messageConfig.getChannelId());
req.setAppId(messageConfig.getAppId().toString());
req.setMobile(mobile);
req.setContent(jsonObject.toString());
req.setExpire(300L);
clxMessageOpenapiFeign.sendAliSms(req);
return UUID.randomUUID().toString();
}
}
......@@ -49,4 +49,6 @@ public interface OwnerLoanRecordService {
void ownerLoanRecordRetryPay(String loanNo);
void ownerLoanRecordCancelPay(String loanNo);
String sendLoanSms(String mobile,Long loanNo);
}
......@@ -29,4 +29,6 @@ public interface OwnerRepaymentService {
OwnerTransferPaymentDetailVO getTransferPaymentDetail(Integer id);
String savePaymentApplicationForm(ExportPaymentApplicationFormParam param);
String sendPaymentSms(String mobile,Long repaymentNo);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论