提交 9c76e84c authored 作者: aiqingguo's avatar aiqingguo

Merge branch 'v6.4_transportation_20231110' into test

package com.clx.performance.controller.payment; package com.clx.performance.controller.payment;
import com.clx.performance.param.pay.NotifyString; import com.clx.performance.param.pay.NotifyString;
import com.clx.performance.service.breakcontract.BreakContractMqHandlerService;
import com.clx.performance.service.settle.SettlementMqHandlerService; import com.clx.performance.service.settle.SettlementMqHandlerService;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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 java.util.Objects; import java.util.Objects;
...@@ -19,8 +21,11 @@ import java.util.Objects; ...@@ -19,8 +21,11 @@ import java.util.Objects;
@Api(tags = "承运端-支付回调") @Api(tags = "承运端-支付回调")
@AllArgsConstructor @AllArgsConstructor
public class PayNotifyController { public class PayNotifyController {
@Autowired
private SettlementMqHandlerService settlementMqHandlerService;
private final SettlementMqHandlerService settlementMqHandlerService; @Autowired
private BreakContractMqHandlerService breakContractMqHandlerService;
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁") @ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayNotify", method = RequestMethod.POST) @RequestMapping(value = "/userPayNotify", method = RequestMethod.POST)
...@@ -42,4 +47,26 @@ public class PayNotifyController { ...@@ -42,4 +47,26 @@ public class PayNotifyController {
return ret; return ret;
} }
@ApiOperation(value = "用户支付完成回调接口", notes = " <br>By:胡宁宁")
@RequestMapping(value = "/userPayBrokerContractNotify", method = RequestMethod.POST)
public Result<Object> userPayBrokerContractNotify(@RequestBody NotifyString notify) {
log.info("用户支付完成回调接口 传参 {}", notify);
if (Objects.isNull(notify) || Objects.isNull(notify.getCode()) || Objects.isNull(notify.getAction())) {
return new Result<>();
}
if (notify.getCode() != 0) {
breakContractMqHandlerService.paySuccess(notify.getOrderNo());
// 支付失败处理
log.info("支付失败处理 唯一id {}", notify.getOrderNo());
} else {
breakContractMqHandlerService.payFail(notify.getOrderNo());
// 支付支付成功处理
log.info(" 支付支付成功处理 唯一id {}", notify.getOrderNo());
}
Result<Object> ret = new Result<>();
return ret;
}
} }
...@@ -8,6 +8,9 @@ import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContra ...@@ -8,6 +8,9 @@ import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContra
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author liruixin * @author liruixin
* Date 2023-10-24 * Date 2023-10-24
...@@ -15,8 +18,13 @@ import com.msl.common.dao.BaseDao; ...@@ -15,8 +18,13 @@ import com.msl.common.dao.BaseDao;
*/ */
public interface BreakContractSettlementDriverDao extends BaseDao<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> { public interface BreakContractSettlementDriverDao extends BaseDao<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> {
boolean updateSettlementStatus(BreakContractSettlementDriver item);
Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo); Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo);
IPage<BreakContractSettlementDriver> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param); IPage<BreakContractSettlementDriver> pageCarrierBreakContractSettlementDriverList(PageCarrierBreakContractSettlementDriverParam param);
List<BreakContractSettlementDriver> listUnpay(LocalDateTime beginTime);
} }
...@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.breakcontract.BreakContractSettlementDriverDao; import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.mapper.breakcontract.BreakContractSettlementDriverMapper; import com.clx.performance.mapper.breakcontract.BreakContractSettlementDriverMapper;
import com.clx.performance.model.breakcontract.BreakContractDriverRecord;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam; import com.clx.performance.param.pc.breakcontract.carrier.PageCarrierBreakContractSettlementDriverParam;
import com.msl.common.base.Optional; import com.msl.common.base.Optional;
...@@ -13,6 +15,8 @@ import com.msl.common.dao.impl.BaseDaoImpl; ...@@ -13,6 +15,8 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -22,6 +26,14 @@ import java.util.Objects; ...@@ -22,6 +26,14 @@ import java.util.Objects;
*/ */
@Repository @Repository
public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> implements BreakContractSettlementDriverDao { public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContractSettlementDriverMapper, BreakContractSettlementDriver, Integer> implements BreakContractSettlementDriverDao {
@Override
public boolean updateSettlementStatus(BreakContractSettlementDriver item) {
return update(lUdWrapper()
.eq(BreakContractSettlementDriver::getId, item.getId())
.set(BreakContractSettlementDriver::getSettleStatus, item.getSettleStatus())
);
}
@Override @Override
public Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo) { public Optional<BreakContractSettlementDriver> selectBySettlementNo(String settlementNo) {
return Optional.of(settlementNo) return Optional.of(settlementNo)
...@@ -47,4 +59,12 @@ public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContr ...@@ -47,4 +59,12 @@ public class BreakContractSettlementDriverDaoImpl extends BaseDaoImpl<BreakContr
return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query); return baseMapper.selectPage(Page.of(param.getPage(), param.getPageSize()),query);
} }
@Override
public List<BreakContractSettlementDriver> listUnpay(LocalDateTime beginTime) {
return list(lQrWrapper()
.eq(BreakContractSettlementDriver::getSettleStatus, BreakContractSettlementDriverEnum.SettleStatus.NO.getCode())
.gt(BreakContractSettlementDriver::getCreateTime, beginTime)
);
}
} }
package com.clx.performance.job;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.utils.JobHandlerService;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.List;
@Slf4j
@Component
public class BreakContractSettlementJob {
@Autowired
private JobHandlerService jobHandlerService;
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private BreakContractJobHandlerService breakContractJobHandlerService;
/**
* 违约结算单支付 (每10分钟)
* @Scheduled(cron = "0 0/10 * * * ?")
*/
@XxlJob("breakContractSettlementPay")
public void breakContractSettlementPay() {
LocalDateTime beginTime = LocalDateTime.now().minusHours(1);
jobHandlerService.handler("违约结算单-支付", ()->{
List<BreakContractSettlementDriver> list = breakContractSettlementDriverDao.listUnpay(beginTime);
log.info("违约结算单支付,数量:{}", list.size());
for (BreakContractSettlementDriver item : list) {
jobHandlerService.subHandler("违约结算单-支付", item.getId(), breakContractJobHandlerService::pay);
}
});
}
}
...@@ -7,4 +7,6 @@ import com.msl.common.result.Result; ...@@ -7,4 +7,6 @@ import com.msl.common.result.Result;
public interface PaymentService { public interface PaymentService {
Result paymentWallet( PayParam noCheckPwd); Result paymentWallet( PayParam noCheckPwd);
Result paymentBreakContractWallet( PayParam noCheckPwd);
} }
package com.clx.performance.service.breakcontract;
public interface BreakContractJobHandlerService {
void pay(Integer settlementId);
}
...@@ -9,4 +9,7 @@ public interface BreakContractMqHandlerService { ...@@ -9,4 +9,7 @@ public interface BreakContractMqHandlerService {
void driverRecordAdd(BreakContractDriverRecordAddMqParam mq); void driverRecordAdd(BreakContractDriverRecordAddMqParam mq);
void paySuccess(String settlementNo);
void payFail(String settlementNo);
} }
...@@ -46,6 +46,9 @@ public class PaymentServiceImpl implements PaymentService { ...@@ -46,6 +46,9 @@ public class PaymentServiceImpl implements PaymentService {
/** 转账回调地址 **/ /** 转账回调地址 **/
public static final String NOTIFY_URL = "/clx-performance/payment/notify/userPayNotify"; public static final String NOTIFY_URL = "/clx-performance/payment/notify/userPayNotify";
/** 违约回调地址 **/
public static final String NOTIFY_BROKER_URL = "/clx-performance/payment/notify/userPayBrokerContractNotify";
@Autowired @Autowired
private final MslPaymentConfig mslPaymentConfig; private final MslPaymentConfig mslPaymentConfig;
...@@ -95,6 +98,47 @@ public class PaymentServiceImpl implements PaymentService { ...@@ -95,6 +98,47 @@ public class PaymentServiceImpl implements PaymentService {
} }
/**
* 钱包直接划账给钱包(违约)
*
* @param payDTO
* @return
*/
@Override
public Result paymentBreakContractWallet(PayParam payDTO) {
/** 构建支付单元 **/
PayUnitDTO payUnitDTO = PayUnitDTO.builder()
.id(payDTO.getTradeId())
.from(payDTO.getFrom())
.to(payDTO.getTo())
.figure(payDTO.getFigure())
.type(PayUnitTypeEnum.RESIDUE_PAY.getCode())
.timestamp(System.currentTimeMillis() / 1000)
.remark(payDTO.getRemark()).build();
/** 生成签名**/
PayEncryptTools.sign(payUnitDTO, PrivateKeyConfig.privateKeyByte);
/** 构建支付支付 ***/
PayUserDTO payUserDTO = PayUserDTO.builder()
.pwd(payDTO.getPwd())
.system(SystemCodeEnum.PERFORMANCE_SERVICE.getCode())
.userCode(payDTO.getFrom())
.orderNo(payDTO.getTradeNo())
.uuid(UUID.randomUUID().toString().replaceAll("-", ""))
.notifyUrl(mslPaymentConfig.getNotifyhost() + NOTIFY_BROKER_URL)
.payUnitDTO(payUnitDTO).build();
log.info("发起支付请求日志 {}", payUserDTO);
Result<Object> notify = (Result<Object>) postRequest(mslPaymentConfig.getHost()+ PERFORMANCE_PAY_CLX_PAYMENT.getUrl(), JSON.toJSONString(payUserDTO));
log.info("支付返回日志 {}", notify);
if (notify == null || notify.getCode() != 0) {
//FEGIN返回null
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "支付服务返回异常");
}
return notify;
}
/** /**
* post请求 * post请求
*/ */
......
package com.clx.performance.service.impl.breakcontract;
import com.clx.performance.dao.breakcontract.BreakContractSettlementDriverDao;
import com.clx.performance.enums.BreakContractSettlementDriverEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver;
import com.clx.performance.service.breakcontract.BreakContractJobHandlerService;
import com.clx.performance.service.payment.PayService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Slf4j
@Service
public class BreakContractJobHandlerServiceImpl implements BreakContractJobHandlerService {
@Autowired
private BreakContractSettlementDriverDao breakContractSettlementDriverDao;
@Autowired
private PayService payService;
@Override
public void pay(Integer settlementId){
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.getEntityByKey(settlementId).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES)){
return;
}
pay(breakContractSettlementDriver);
}
/**
* 支付
*/
private void pay(BreakContractSettlementDriver settlement){
// 车主
if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.DRIVER.getCode())){
payService.driverPay(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
// 平台
else if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())) {
payService.payDriver(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
}
}
...@@ -113,7 +113,7 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler ...@@ -113,7 +113,7 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
settlement.setChildNo(detail.getChildNo()); settlement.setChildNo(detail.getChildNo());
settlement.setFigure(detail.getFigure()); settlement.setFigure(detail.getFigure());
settlement.setBreakContractRemark(detail.getBreakContractRemark()); settlement.setBreakContractRemark(detail.getBreakContractRemark());
settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode()); settlement.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.NO.getCode());
settlement.setCreateBy(detail.getCreateBy()); settlement.setCreateBy(detail.getCreateBy());
settlement.setCreateName(detail.getCreateName()); settlement.setCreateName(detail.getCreateName());
settlement.setSettlePlatform(BreakContractSettlementDriverEnum.SettlePlatform.MSL.getCode()); settlement.setSettlePlatform(BreakContractSettlementDriverEnum.SettlePlatform.MSL.getCode());
...@@ -124,9 +124,6 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler ...@@ -124,9 +124,6 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
breakContractSettlementDriverDao.saveEntity(settlement); breakContractSettlementDriverDao.saveEntity(settlement);
// 支付
pay(settlement);
//保存结算单日志----创建结算单 //保存结算单日志----创建结算单
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo, breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(), BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getCode(),BreakContractSettlementLogEnum.Type.CREATE_SETTLEMENT.getMsg(),
...@@ -151,7 +148,36 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler ...@@ -151,7 +148,36 @@ public class BreakContractMqHandlerServiceImpl implements BreakContractMqHandler
// 平台 // 平台
else if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())) { else if (Objects.equals(settlement.getBreakContractPartyType(), BreakContractSettlementDriverEnum.BreakContractPartyType.PLATFORM.getCode())) {
payService.payDriver(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue()); payService.payDriver(settlement.getSettlementNo(), settlement.getTruckOwnUserNo(), settlement.getFigure().intValue());
}
}
@Override
public void paySuccess(String settlementNo){
log.info("违约结算单支付回调, settlementNo:{}", settlementNo);
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.selectBySettlementNo(settlementNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())){
log.info("违约结算单支付回调, 结算单已支付, settlementNo:{}", settlementNo);
return;
}
breakContractSettlementDriver.setSettleStatus(BreakContractSettlementDriverEnum.SettleStatus.YES.getCode());
breakContractSettlementDriverDao.updateSettlementStatus(breakContractSettlementDriver);
//保存结算单日志
breakContractSettlementLogService.saveBreakSettlementLog(settlementNo,
BreakContractSettlementLogEnum.Type.COMPLETED.getCode(),BreakContractSettlementLogEnum.Type.COMPLETED.getMsg(),
OrderChildLogEnum.CreateType.PLATFORM.getCode(),0L,"系统");
}
@Override
public void payFail(String settlementNo) {
log.info("违约结算单支付失败回调, settlementNo:{}", settlementNo);
BreakContractSettlementDriver breakContractSettlementDriver = breakContractSettlementDriverDao.selectBySettlementNo(settlementNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(breakContractSettlementDriver.getSettleStatus(), BreakContractSettlementDriverEnum.SettleStatus.YES.getCode())){
log.info("违约结算单支付失败回调, 结算单已支付, settlementNo:{}", settlementNo);
return;
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论