分账回退更改

This commit is contained in:
seesaw
2024-08-14 11:34:39 +08:00
parent b7e004dd50
commit 201da3b318
2 changed files with 88 additions and 69 deletions

View File

@ -56,10 +56,15 @@ public class DivideInfoDO extends BaseDO {
* 分账接收方账号 * 分账接收方账号
*/ */
private String account; private String account;
/** /**
* 分账金额 * 分账金额
*/ */
private Integer amount; private Integer amount;
/**
* 可用于分账回退的金额
*/
private Integer refundAmount;
/** /**
* 估算金额 * 估算金额
*/ */

View File

@ -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);
@ -674,19 +675,21 @@ public class DivideServiceImpl implements DivideService {
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));
//更新可分账回退金额
List<DivideInfoDO> updateList = new ArrayList<>();
for (DivideDO divideDO : backList) { 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())){
//全部回退
if (divideDO.getBackPrice().equals(divideDO.getTotalPrice())) {
for (DivideInfoDO divideInfoDO : divideListByTi) { for (DivideInfoDO divideInfoDO : divideListByTi) {
updateList.add(divideInfoDO.setRefundAmount(0));
doReturn(client, divideInfoDO, companyMap.get(divideInfoDO.getName()).getAccount()); 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()));
@ -694,27 +697,38 @@ public class DivideServiceImpl implements DivideService {
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){
continue;
}
sum = sum + infoDO.getRefundAmount();
if (sum < backmoney) { if (sum < backmoney) {
doReturn(client, infoDO, companyDO.getAccount()); doReturn(client, infoDO, companyDO.getAccount());
updateList.add(infoDO.setRefundAmount(0));
} else if (sum == backmoney) { } else if (sum == backmoney) {
doReturn(client, infoDO, companyDO.getAccount()); doReturn(client, infoDO, companyDO.getAccount());
updateList.add(infoDO.setRefundAmount(0));
break; break;
} else { } else {
int leftRefundAmount = sum -backmoney;
int left = backmoney + infoDO.getAmount() - sum; int left = backmoney + infoDO.getAmount() - sum;
infoDO.setAmount(left); infoDO.setRefundAmount(left);
doReturn(client, infoDO, companyDO.getAccount()); 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);