Merge branch 'refs/heads/test'
This commit is contained in:
@ -56,10 +56,15 @@ public class DivideInfoDO extends BaseDO {
|
|||||||
* 分账接收方账号
|
* 分账接收方账号
|
||||||
*/
|
*/
|
||||||
private String account;
|
private String account;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分账金额
|
* 分账金额
|
||||||
*/
|
*/
|
||||||
private Integer amount;
|
private Integer amount;
|
||||||
|
/**
|
||||||
|
* 可用于分账回退的金额
|
||||||
|
*/
|
||||||
|
private Integer refundAmount;
|
||||||
/**
|
/**
|
||||||
* 估算金额
|
* 估算金额
|
||||||
*/
|
*/
|
||||||
|
@ -154,6 +154,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
.setType(divideCompanyDO.getType())
|
.setType(divideCompanyDO.getType())
|
||||||
.setAccount(divideCompanyDO.getAccount())
|
.setAccount(divideCompanyDO.getAccount())
|
||||||
.setAmount(money)
|
.setAmount(money)
|
||||||
|
.setRefundAmount(money)
|
||||||
.setComputeAmount(money)
|
.setComputeAmount(money)
|
||||||
.setDescription("给" + divideCompanyDO.getName() + "分账");
|
.setDescription("给" + divideCompanyDO.getName() + "分账");
|
||||||
infoDOList.add(divideInfoDO);
|
infoDOList.add(divideInfoDO);
|
||||||
@ -185,14 +186,14 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
refundToday = BigDecimal.ZERO;
|
refundToday = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
int refund = refundToday.multiply(new BigDecimal("100")).intValue();
|
int refund = refundToday.multiply(new BigDecimal("100")).intValue();
|
||||||
money = money-refund;
|
money = money - refund;
|
||||||
|
|
||||||
//查询29天内的充值订单,原因:微信30天自动解冻,订单将不能分账
|
//查询29天内的充值订单,原因:微信30天自动解冻,订单将不能分账
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
LocalDateTime thirtyDaysAgo = now.minusDays(29);
|
LocalDateTime thirtyDaysAgo = now.minusDays(29);
|
||||||
List<DivideDO> divideDOS = divideMapper.selectList(Wrappers.<DivideDO>lambdaQuery()
|
List<DivideDO> divideDOS = divideMapper.selectList(Wrappers.<DivideDO>lambdaQuery()
|
||||||
.eq(DivideDO::getStatus, PayDivideStatusRespEnum.WAITING.getStatus())
|
.eq(DivideDO::getStatus, PayDivideStatusRespEnum.WAITING.getStatus())
|
||||||
.eq(DivideDO::getUnfreezeStatus,"0")
|
.eq(DivideDO::getUnfreezeStatus, "0")
|
||||||
.ge(DivideDO::getCreateTime, thirtyDaysAgo)
|
.ge(DivideDO::getCreateTime, thirtyDaysAgo)
|
||||||
.orderByAsc(DivideDO::getCreateTime));
|
.orderByAsc(DivideDO::getCreateTime));
|
||||||
if (CollectionUtil.isEmpty(divideDOS)) {
|
if (CollectionUtil.isEmpty(divideDOS)) {
|
||||||
@ -205,7 +206,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
for (DivideDO divideDO : divideDOS) {
|
for (DivideDO divideDO : divideDOS) {
|
||||||
Integer totalPrice = divideDO.getTotalPrice() - divideDO.getCpPrice();
|
Integer totalPrice = divideDO.getTotalPrice() - divideDO.getCpPrice();
|
||||||
|
|
||||||
if(totalPrice == 0){
|
if (totalPrice == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,19 +215,19 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
if (sum < money) {
|
if (sum < money) {
|
||||||
divideDO.setUnPrice(totalPrice);
|
divideDO.setUnPrice(totalPrice);
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
||||||
divideDO.setPsPrice(divideDO.getPsPrice()+totalPrice);
|
divideDO.setPsPrice(divideDO.getPsPrice() + totalPrice);
|
||||||
divideList.add(divideDO);
|
divideList.add(divideDO);
|
||||||
} else if (sum == money) {
|
} else if (sum == money) {
|
||||||
divideDO.setUnPrice(totalPrice);
|
divideDO.setUnPrice(totalPrice);
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
||||||
divideDO.setPsPrice(divideDO.getPsPrice()+totalPrice);
|
divideDO.setPsPrice(divideDO.getPsPrice() + totalPrice);
|
||||||
divideList.add(divideDO);
|
divideList.add(divideDO);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
int leftMoney = money + totalPrice - sum;
|
int leftMoney = money + totalPrice - sum;
|
||||||
divideDO.setUnPrice(leftMoney);
|
divideDO.setUnPrice(leftMoney);
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + leftMoney);
|
divideDO.setCpPrice(divideDO.getCpPrice() + leftMoney);
|
||||||
divideDO.setPsPrice(divideDO.getPsPrice()+leftMoney);
|
divideDO.setPsPrice(divideDO.getPsPrice() + leftMoney);
|
||||||
divideList.add(divideDO);
|
divideList.add(divideDO);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -266,7 +267,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(CollectionUtil.isNotEmpty(divideRecordDOList)){
|
if (CollectionUtil.isNotEmpty(divideRecordDOList)) {
|
||||||
divideMapper.updateBatch(divideDOS);
|
divideMapper.updateBatch(divideDOS);
|
||||||
divideRecordMapper.insertBatch(divideRecordDOList);
|
divideRecordMapper.insertBatch(divideRecordDOList);
|
||||||
}
|
}
|
||||||
@ -300,7 +301,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
payDivideUnifiedDto.setTransactionId(divideDO.getChannelOrderNo())
|
payDivideUnifiedDto.setTransactionId(divideDO.getChannelOrderNo())
|
||||||
.setOutOrderNo(divideDO.getNo());
|
.setOutOrderNo(divideDO.getNo());
|
||||||
PayDivideRespDto payDivideRespDto = client.unifiedDivideResult(payDivideUnifiedDto);
|
PayDivideRespDto payDivideRespDto = client.unifiedDivideResult(payDivideUnifiedDto);
|
||||||
updateDivideInfo(payDivideRespDto.getReceivers(), divideDO.getNo(),payDivideRespDto.getOrderId());
|
updateDivideInfo(payDivideRespDto.getReceivers(), divideDO.getNo(), payDivideRespDto.getOrderId());
|
||||||
|
|
||||||
if (divideDO.getTotalPrice().equals(divideDO.getCpPrice())) {
|
if (divideDO.getTotalPrice().equals(divideDO.getCpPrice())) {
|
||||||
divideDO.setStatus(PayDivideStatusRespEnum.COMPLETE.getStatus());
|
divideDO.setStatus(PayDivideStatusRespEnum.COMPLETE.getStatus());
|
||||||
@ -312,13 +313,13 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
return divideDOS.size();
|
return divideDOS.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateDivideInfo(List<ProfitSharingV3Result.Receiver> receivers, String outOrderNo,String orderId) {
|
void updateDivideInfo(List<ProfitSharingV3Result.Receiver> receivers, String outOrderNo, String orderId) {
|
||||||
List<DivideCompanyDO> list1 = divideCompanyService.getList();
|
List<DivideCompanyDO> list1 = divideCompanyService.getList();
|
||||||
List<String> accountList = list1.stream().map(DivideCompanyDO::getAccount).collect(Collectors.toList());
|
List<String> accountList = list1.stream().map(DivideCompanyDO::getAccount).collect(Collectors.toList());
|
||||||
|
|
||||||
List<DivideInfoDO> list = new ArrayList<>();
|
List<DivideInfoDO> list = new ArrayList<>();
|
||||||
for (ProfitSharingV3Result.Receiver receiver : receivers) {
|
for (ProfitSharingV3Result.Receiver receiver : receivers) {
|
||||||
if(!accountList.contains(receiver.getAccount())){
|
if (!accountList.contains(receiver.getAccount())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,19 +379,19 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
|
|
||||||
//判断是否有金额可退款
|
//判断是否有金额可退款
|
||||||
BigDecimal wxAmount = divideMapper.getWxAmount(drawMoneyVO.getUserId());
|
BigDecimal wxAmount = divideMapper.getWxAmount(drawMoneyVO.getUserId());
|
||||||
if(wxAmount == null){
|
if (wxAmount == null) {
|
||||||
throw new ServiceException(WX_ACCOUNT_NO);
|
throw new ServiceException(WX_ACCOUNT_NO);
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断是否有金额可退款
|
//判断是否有金额可退款
|
||||||
|
|
||||||
int money = wxAmount.multiply(new BigDecimal("100")).intValue();
|
int money = wxAmount.multiply(new BigDecimal("100")).intValue();
|
||||||
if (money <= 0 ) {
|
if (money <= 0) {
|
||||||
throw new ServiceException(WX_ACCOUNT_NO);
|
throw new ServiceException(WX_ACCOUNT_NO);
|
||||||
}
|
}
|
||||||
//指定金额
|
//指定金额
|
||||||
if(drawMoneyVO.getTotalPrice()!=null){
|
if (drawMoneyVO.getTotalPrice() != null) {
|
||||||
if (money < drawMoneyVO.getTotalPrice() ) {
|
if (money < drawMoneyVO.getTotalPrice()) {
|
||||||
throw new ServiceException(WX_ACCOUNT_NO);
|
throw new ServiceException(WX_ACCOUNT_NO);
|
||||||
}
|
}
|
||||||
money = drawMoneyVO.getTotalPrice();
|
money = drawMoneyVO.getTotalPrice();
|
||||||
@ -402,7 +403,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
List<DivideDO> divideDOS = divideMapper.selectList(Wrappers.<DivideDO>lambdaQuery()
|
List<DivideDO> divideDOS = divideMapper.selectList(Wrappers.<DivideDO>lambdaQuery()
|
||||||
.eq(DivideDO::getChannelUserId, drawMoneyVO.getChannelUserId())
|
.eq(DivideDO::getChannelUserId, drawMoneyVO.getChannelUserId())
|
||||||
.eq(DivideDO::getRefundStatus, "0")
|
.eq(DivideDO::getRefundStatus, "0")
|
||||||
.ge(DivideDO::getCreateTime,threeYearsAgo)
|
.ge(DivideDO::getCreateTime, threeYearsAgo)
|
||||||
.orderByDesc(DivideDO::getCreateTime));
|
.orderByDesc(DivideDO::getCreateTime));
|
||||||
|
|
||||||
//筛选出未分账的订单
|
//筛选出未分账的订单
|
||||||
@ -432,12 +433,12 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
|
|
||||||
if (sum < money) {
|
if (sum < money) {
|
||||||
divideDO.setUnRePrice(totalPrice);
|
divideDO.setUnRePrice(totalPrice);
|
||||||
divideDO.setRefundPrice(totalPrice+divideDO.getCpPrice());
|
divideDO.setRefundPrice(totalPrice + divideDO.getCpPrice());
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
||||||
noBackList.add(divideDO);
|
noBackList.add(divideDO);
|
||||||
} else if (sum == money) {
|
} else if (sum == money) {
|
||||||
divideDO.setUnRePrice(totalPrice);
|
divideDO.setUnRePrice(totalPrice);
|
||||||
divideDO.setRefundPrice(totalPrice+divideDO.getCpPrice());
|
divideDO.setRefundPrice(totalPrice + divideDO.getCpPrice());
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
divideDO.setCpPrice(divideDO.getCpPrice() + totalPrice);
|
||||||
noBackList.add(divideDO);
|
noBackList.add(divideDO);
|
||||||
break;
|
break;
|
||||||
@ -453,7 +454,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
//从分账完的订单进行退款
|
//从分账完的订单进行退款
|
||||||
if (sum < money) {
|
if (sum < money) {
|
||||||
for (DivideDO divideDO : divideList) {
|
for (DivideDO divideDO : divideList) {
|
||||||
Integer totalPrice = divideDO.getTotalPrice()-divideDO.getRefundPrice();
|
Integer totalPrice = divideDO.getTotalPrice() - divideDO.getRefundPrice();
|
||||||
|
|
||||||
sum = sum + totalPrice;
|
sum = sum + totalPrice;
|
||||||
|
|
||||||
@ -473,9 +474,9 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
} else {
|
} else {
|
||||||
int leftMoney = money + totalPrice - sum;
|
int leftMoney = money + totalPrice - sum;
|
||||||
divideDO.setUnRePrice(leftMoney);
|
divideDO.setUnRePrice(leftMoney);
|
||||||
divideDO.setRefundPrice(leftMoney+divideDO.getRefundPrice());
|
divideDO.setRefundPrice(leftMoney + divideDO.getRefundPrice());
|
||||||
divideDO.setBackPrice(leftMoney);
|
divideDO.setBackPrice(leftMoney);
|
||||||
divideDO.setPsPrice(divideDO.getPsPrice()-leftMoney);
|
divideDO.setPsPrice(divideDO.getPsPrice() - leftMoney);
|
||||||
backList.add(divideDO);
|
backList.add(divideDO);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -489,7 +490,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
Integer totalPrice = divideDO.getTotalPrice() - divideDO.getCpPrice();
|
Integer totalPrice = divideDO.getTotalPrice() - divideDO.getCpPrice();
|
||||||
sum = sum + totalPrice;
|
sum = sum + totalPrice;
|
||||||
if (sum < money) {
|
if (sum < money) {
|
||||||
if("0".equals(divideDO.getUnfreezeStatus())){
|
if ("0".equals(divideDO.getUnfreezeStatus())) {
|
||||||
//先解冻剩余资金
|
//先解冻剩余资金
|
||||||
String unFreeNo = noRedisDAO.generate(payProperties.getOrderNoPrefix());
|
String unFreeNo = noRedisDAO.generate(payProperties.getOrderNoPrefix());
|
||||||
PayClient client = channelService.getPayClient(divideDO.getChannelId());
|
PayClient client = channelService.getPayClient(divideDO.getChannelId());
|
||||||
@ -515,27 +516,27 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
PayDivideRespDto payDivideRespDto = client.unifiedDivideResult(resultDto);
|
PayDivideRespDto payDivideRespDto = client.unifiedDivideResult(resultDto);
|
||||||
|
|
||||||
state = payDivideRespDto.getState();
|
state = payDivideRespDto.getState();
|
||||||
}while ("PROCESSING".equals(state));
|
} while ("PROCESSING".equals(state));
|
||||||
|
|
||||||
}
|
}
|
||||||
//计算退款资金
|
//计算退款资金
|
||||||
//可用于退款的资金
|
//可用于退款的资金
|
||||||
Integer psPrice = divideDO.getTotalPrice()- divideDO.getRefundPrice();
|
Integer psPrice = divideDO.getTotalPrice() - divideDO.getRefundPrice();
|
||||||
|
|
||||||
sum = sum - totalPrice+psPrice;
|
sum = sum - totalPrice + psPrice;
|
||||||
if (sum <= money){
|
if (sum <= money) {
|
||||||
divideDO.setUnRePrice(psPrice);
|
divideDO.setUnRePrice(psPrice);
|
||||||
divideDO.setRefundPrice(divideDO.getTotalPrice());
|
divideDO.setRefundPrice(divideDO.getTotalPrice());
|
||||||
divideDO.setBackPrice(divideDO.getPsPrice());
|
divideDO.setBackPrice(divideDO.getPsPrice());
|
||||||
divideDO.setPsPrice(0);
|
divideDO.setPsPrice(0);
|
||||||
}else{
|
} else {
|
||||||
int left = money-sum+psPrice;
|
int left = money - sum + psPrice;
|
||||||
divideDO.setUnRePrice(left);
|
divideDO.setUnRePrice(left);
|
||||||
divideDO.setRefundPrice(divideDO.getRefundPrice()+left);
|
divideDO.setRefundPrice(divideDO.getRefundPrice() + left);
|
||||||
//分账回退金额
|
//分账回退金额
|
||||||
int back = left-totalPrice;
|
int back = left - totalPrice;
|
||||||
divideDO.setBackPrice(back);
|
divideDO.setBackPrice(back);
|
||||||
divideDO.setPsPrice(divideDO.getPsPrice()-back);
|
divideDO.setPsPrice(divideDO.getPsPrice() - back);
|
||||||
}
|
}
|
||||||
backList.add(divideDO);
|
backList.add(divideDO);
|
||||||
divideDO.setCpPrice(divideDO.getTotalPrice());
|
divideDO.setCpPrice(divideDO.getTotalPrice());
|
||||||
@ -543,7 +544,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
//计算使用资金
|
//计算使用资金
|
||||||
Integer useMoney = sum - money;
|
Integer useMoney = sum - money;
|
||||||
divideDO.setUnRePrice(useMoney);
|
divideDO.setUnRePrice(useMoney);
|
||||||
divideDO.setRefundPrice(useMoney+divideDO.getRefundPrice());
|
divideDO.setRefundPrice(useMoney + divideDO.getRefundPrice());
|
||||||
divideDO.setCpPrice(divideDO.getCpPrice() + useMoney);
|
divideDO.setCpPrice(divideDO.getCpPrice() + useMoney);
|
||||||
noBackList.add(divideDO);
|
noBackList.add(divideDO);
|
||||||
}
|
}
|
||||||
@ -556,7 +557,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
|
|
||||||
int failNum = 0;
|
int failNum = 0;
|
||||||
//调用退款接口
|
//调用退款接口
|
||||||
if(CollectionUtil.isNotEmpty(noBackList)){
|
if (CollectionUtil.isNotEmpty(noBackList)) {
|
||||||
for (DivideDO divideDO : noBackList) {
|
for (DivideDO divideDO : noBackList) {
|
||||||
String outRefundNo = noRedisDAO.generate(payProperties.getRefundNoPrefix());
|
String outRefundNo = noRedisDAO.generate(payProperties.getRefundNoPrefix());
|
||||||
RefundRecordDO refundRecordDO = new RefundRecordDO();
|
RefundRecordDO refundRecordDO = new RefundRecordDO();
|
||||||
@ -581,24 +582,24 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
|
|
||||||
String channelRefundNo = payRefundRespDTO.getChannelRefundNo();
|
String channelRefundNo = payRefundRespDTO.getChannelRefundNo();
|
||||||
refundRecordDO.setRefundId(channelRefundNo);
|
refundRecordDO.setRefundId(channelRefundNo);
|
||||||
if(cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.WAITING.getStatus().equals(payRefundRespDTO.getStatus())){
|
if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.WAITING.getStatus().equals(payRefundRespDTO.getStatus())) {
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.PROCESSING.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.PROCESSING.getStatus());
|
||||||
} else if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.SUCCESS.getStatus().equals(payRefundRespDTO.getStatus())) {
|
} else if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.SUCCESS.getStatus().equals(payRefundRespDTO.getStatus())) {
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.SUCCESS.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.SUCCESS.getStatus());
|
||||||
}else {
|
} else {
|
||||||
failNum++;
|
failNum++;
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.ABNORMAL.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.ABNORMAL.getStatus());
|
||||||
}
|
}
|
||||||
refundRecordMapper.insert(refundRecordDO);
|
refundRecordMapper.insert(refundRecordDO);
|
||||||
if(divideDO.getRefundPrice().equals(divideDO.getTotalPrice())){
|
if (divideDO.getRefundPrice().equals(divideDO.getTotalPrice())) {
|
||||||
divideDO.setRefundStatus("1");
|
divideDO.setRefundStatus("1");
|
||||||
}
|
}
|
||||||
if(divideDO.getTotalPrice().equals(divideDO.getCpPrice())){
|
if (divideDO.getTotalPrice().equals(divideDO.getCpPrice())) {
|
||||||
divideDO.setStatus(PayDivideStatusRespEnum.CASH.getStatus());
|
divideDO.setStatus(PayDivideStatusRespEnum.CASH.getStatus());
|
||||||
}
|
}
|
||||||
String jsonString = JsonUtils.toJsonString(divideDO);
|
String jsonString = JsonUtils.toJsonString(divideDO);
|
||||||
//DivideDO divideDO1 = JsonUtils.parseObject(jsonString, DivideDO.class);
|
//DivideDO divideDO1 = JsonUtils.parseObject(jsonString, DivideDO.class);
|
||||||
divideRedisTemplate.opsForValue().set("R"+outRefundNo,jsonString);
|
divideRedisTemplate.opsForValue().set("R" + outRefundNo, jsonString);
|
||||||
//divideMapper.updateById(divideDO);
|
//divideMapper.updateById(divideDO);
|
||||||
|
|
||||||
//list.add(refundRecordDO);
|
//list.add(refundRecordDO);
|
||||||
@ -606,7 +607,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//调用退款接口
|
//调用退款接口
|
||||||
if(CollectionUtil.isNotEmpty(backList)){
|
if (CollectionUtil.isNotEmpty(backList)) {
|
||||||
for (DivideDO divideDO : backList) {
|
for (DivideDO divideDO : backList) {
|
||||||
String outRefundNo = noRedisDAO.generate(payProperties.getRefundNoPrefix());
|
String outRefundNo = noRedisDAO.generate(payProperties.getRefundNoPrefix());
|
||||||
RefundRecordDO refundRecordDO = new RefundRecordDO();
|
RefundRecordDO refundRecordDO = new RefundRecordDO();
|
||||||
@ -631,25 +632,25 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
|
|
||||||
String channelRefundNo = payRefundRespDTO.getChannelRefundNo();
|
String channelRefundNo = payRefundRespDTO.getChannelRefundNo();
|
||||||
refundRecordDO.setRefundId(channelRefundNo);
|
refundRecordDO.setRefundId(channelRefundNo);
|
||||||
if(cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.WAITING.getStatus().equals(payRefundRespDTO.getStatus())){
|
if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.WAITING.getStatus().equals(payRefundRespDTO.getStatus())) {
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.PROCESSING.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.PROCESSING.getStatus());
|
||||||
} else if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.SUCCESS.getStatus().equals(payRefundRespDTO.getStatus())) {
|
} else if (cn.iocoder.yudao.framework.pay.core.enums.refund.PayRefundStatusRespEnum.SUCCESS.getStatus().equals(payRefundRespDTO.getStatus())) {
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.SUCCESS.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.SUCCESS.getStatus());
|
||||||
}else {
|
} else {
|
||||||
failNum++;
|
failNum++;
|
||||||
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.ABNORMAL.getStatus());
|
refundRecordDO.setStatus(PayDivideRefundStatusRespEnum.ABNORMAL.getStatus());
|
||||||
}
|
}
|
||||||
//list.add(refundRecordDO);
|
//list.add(refundRecordDO);
|
||||||
refundRecordMapper.insert(refundRecordDO);
|
refundRecordMapper.insert(refundRecordDO);
|
||||||
if(divideDO.getRefundPrice().equals(divideDO.getTotalPrice())){
|
if (divideDO.getRefundPrice().equals(divideDO.getTotalPrice())) {
|
||||||
divideDO.setRefundStatus("1");
|
divideDO.setRefundStatus("1");
|
||||||
}
|
}
|
||||||
if(divideDO.getTotalPrice().equals(divideDO.getCpPrice())){
|
if (divideDO.getTotalPrice().equals(divideDO.getCpPrice())) {
|
||||||
divideDO.setStatus(PayDivideStatusRespEnum.CASH.getStatus());
|
divideDO.setStatus(PayDivideStatusRespEnum.CASH.getStatus());
|
||||||
}
|
}
|
||||||
String jsonString = JsonUtils.toJsonString(divideDO);
|
String jsonString = JsonUtils.toJsonString(divideDO);
|
||||||
//DivideDO divideDO1 = JsonUtils.parseObject(jsonString, DivideDO.class);
|
//DivideDO divideDO1 = JsonUtils.parseObject(jsonString, DivideDO.class);
|
||||||
divideRedisTemplate.opsForValue().set("R"+outRefundNo,jsonString);
|
divideRedisTemplate.opsForValue().set("R" + outRefundNo, jsonString);
|
||||||
|
|
||||||
//divideMapper.updateById(divideDO);
|
//divideMapper.updateById(divideDO);
|
||||||
}
|
}
|
||||||
@ -662,7 +663,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
//refundRecordMapper.insertBatch(list);
|
//refundRecordMapper.insertBatch(list);
|
||||||
|
|
||||||
// todo:清空
|
// todo:清空
|
||||||
return failNum>0?false:true;
|
return failNum > 0 ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String genChannelRefundNotifyUrl(PayChannelDO channel) {
|
private String genChannelRefundNotifyUrl(PayChannelDO channel) {
|
||||||
@ -670,58 +671,71 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void returnMoney(List<DivideDO> backList){
|
public void returnMoney(List<DivideDO> backList) {
|
||||||
List<DivideCompanyDO> companyList = divideCompanyService.getList();
|
List<DivideCompanyDO> companyList = divideCompanyService.getList();
|
||||||
Map<String, DivideCompanyDO> companyMap = companyList.stream().collect(Collectors.toMap(DivideCompanyDO::getName, vo -> vo));
|
Map<String, DivideCompanyDO> companyMap = companyList.stream().collect(Collectors.toMap(DivideCompanyDO::getName, vo -> vo));
|
||||||
|
|
||||||
|
//更新可分账回退金额
|
||||||
for(DivideDO divideDO:backList){
|
List<DivideInfoDO> updateList = new ArrayList<>();
|
||||||
|
for (DivideDO divideDO : backList) {
|
||||||
PayClient client = channelService.getPayClient(divideDO.getChannelId());
|
PayClient client = channelService.getPayClient(divideDO.getChannelId());
|
||||||
//查询出分账的具体条数
|
//查询出分账的具体条数
|
||||||
List<DivideInfoDO> divideListByTi = divideInfoService.getDivideListByTi(divideDO.getChannelOrderNo());
|
List<DivideInfoDO> divideListByTi = divideInfoService.getDivideListByTi(divideDO.getChannelOrderNo());
|
||||||
//全部回退
|
|
||||||
if(divideDO.getRefundPrice().equals(divideDO.getTotalPrice())){
|
|
||||||
|
|
||||||
for(DivideInfoDO divideInfoDO : divideListByTi){
|
//全部回退
|
||||||
doReturn(client,divideInfoDO,companyMap.get(divideInfoDO.getName()).getAccount());
|
if (divideDO.getBackPrice().equals(divideDO.getTotalPrice())) {
|
||||||
|
for (DivideInfoDO divideInfoDO : divideListByTi) {
|
||||||
|
updateList.add(divideInfoDO.setRefundAmount(0));
|
||||||
|
doReturn(client, divideInfoDO, companyMap.get(divideInfoDO.getName()).getAccount());
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
Integer refundPrice = divideDO.getRefundPrice();
|
Integer refundPrice = divideDO.getBackPrice();
|
||||||
//算出每个公司应回退的金额
|
//算出每个公司应回退的金额
|
||||||
for(DivideCompanyDO companyDO:companyList){
|
for (DivideCompanyDO companyDO : companyList) {
|
||||||
int backmoney = (int) Math.ceil(refundPrice* Double.valueOf(companyDO.getProportion()));
|
int backmoney = (int) Math.ceil(refundPrice * Double.valueOf(companyDO.getProportion()));
|
||||||
|
|
||||||
List<DivideInfoDO> baList = divideListByTi.stream().filter(vo -> vo.getName().equals(companyDO.getName())).collect(Collectors.toList());
|
List<DivideInfoDO> baList = divideListByTi.stream().filter(vo -> vo.getName().equals(companyDO.getName())).collect(Collectors.toList());
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (DivideInfoDO infoDO : baList){
|
for (DivideInfoDO infoDO : baList) {
|
||||||
sum = sum+infoDO.getAmount();
|
if(infoDO.getRefundAmount()==0){
|
||||||
if(sum<backmoney){
|
continue;
|
||||||
doReturn(client,infoDO,companyDO.getAccount());
|
}
|
||||||
}else if (sum==backmoney){
|
sum = sum + infoDO.getRefundAmount();
|
||||||
doReturn(client,infoDO,companyDO.getAccount());
|
if (sum < backmoney) {
|
||||||
|
doReturn(client, infoDO, companyDO.getAccount());
|
||||||
|
updateList.add(infoDO.setRefundAmount(0));
|
||||||
|
} else if (sum == backmoney) {
|
||||||
|
doReturn(client, infoDO, companyDO.getAccount());
|
||||||
|
updateList.add(infoDO.setRefundAmount(0));
|
||||||
break;
|
break;
|
||||||
}else{
|
} else {
|
||||||
int left = backmoney+infoDO.getAmount()-sum;
|
int leftRefundAmount = sum -backmoney;
|
||||||
infoDO.setAmount(left);
|
int left = backmoney + infoDO.getAmount() - sum;
|
||||||
doReturn(client,infoDO,companyDO.getAccount());
|
infoDO.setRefundAmount(left);
|
||||||
|
doReturn(client, infoDO, companyDO.getAccount());
|
||||||
|
updateList.add(infoDO.setRefundAmount(leftRefundAmount));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (CollectionUtil.isNotEmpty(updateList)) {
|
||||||
|
divideInfoService.updateList(updateList);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doReturn(PayClient client ,DivideInfoDO divideInfoDO ,String account){
|
}
|
||||||
|
|
||||||
|
void doReturn(PayClient client, DivideInfoDO divideInfoDO, String account) {
|
||||||
PayDivideBackUnifiedDto payDivideBackUnifiedDto = new PayDivideBackUnifiedDto();
|
PayDivideBackUnifiedDto payDivideBackUnifiedDto = new PayDivideBackUnifiedDto();
|
||||||
payDivideBackUnifiedDto.setAmount(divideInfoDO.getAmount().longValue());
|
payDivideBackUnifiedDto.setAmount(divideInfoDO.getRefundAmount().longValue());
|
||||||
payDivideBackUnifiedDto.setDescription("分账回退");
|
payDivideBackUnifiedDto.setDescription("分账回退");
|
||||||
payDivideBackUnifiedDto.setOrderId(divideInfoDO.getOrderId());
|
payDivideBackUnifiedDto.setOrderId(divideInfoDO.getOrderId());
|
||||||
payDivideBackUnifiedDto.setReturnMchid(account);
|
payDivideBackUnifiedDto.setReturnMchid(account);
|
||||||
payDivideBackUnifiedDto.setOutOrderNo(divideInfoDO.getOutOrderNo());
|
payDivideBackUnifiedDto.setOutOrderNo(divideInfoDO.getOutOrderNo());
|
||||||
payDivideBackUnifiedDto.setOutReturnNo(noRedisDAO.generate(payProperties.getOrderNoPrefix()));
|
payDivideBackUnifiedDto.setOutReturnNo(noRedisDAO.generate(payProperties.getOrderNoPrefix()));
|
||||||
PayDivideBackRespDto payDivideBackRespDto = client.unifiedDivideback(payDivideBackUnifiedDto);
|
PayDivideBackRespDto payDivideBackRespDto = client.unifiedDivideback(payDivideBackUnifiedDto);
|
||||||
log.info("订单:"+payDivideBackRespDto.getOrderId()+"回退结果:"+payDivideBackRespDto.getResult());
|
log.info("订单:" + payDivideBackRespDto.getOrderId() + "回退结果:" + payDivideBackRespDto.getResult());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -740,7 +754,7 @@ public class DivideServiceImpl implements DivideService {
|
|||||||
cardDO.setChangeMoney(changeMoney);
|
cardDO.setChangeMoney(changeMoney);
|
||||||
cardDO.setType("7");
|
cardDO.setType("7");
|
||||||
BigDecimal oldMoney = lastCardDO.getMoney();
|
BigDecimal oldMoney = lastCardDO.getMoney();
|
||||||
BigDecimal wxOldMoney= lastCardDO.getWxAmount();
|
BigDecimal wxOldMoney = lastCardDO.getWxAmount();
|
||||||
|
|
||||||
cardDO.setMoney(oldMoney.subtract(changeMoney).setScale(2, BigDecimal.ROUND_HALF_UP));
|
cardDO.setMoney(oldMoney.subtract(changeMoney).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
cardDO.setWxAmount(wxOldMoney.subtract(changeMoney).setScale(2, BigDecimal.ROUND_HALF_UP));
|
cardDO.setWxAmount(wxOldMoney.subtract(changeMoney).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
|
Reference in New Issue
Block a user