Merge branch 'refs/heads/test'

This commit is contained in:
seesaw
2024-08-14 11:35:06 +08:00
2 changed files with 88 additions and 69 deletions

View File

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

View File

@ -154,6 +154,7 @@ public class DivideServiceImpl implements DivideService {
.setType(divideCompanyDO.getType())
.setAccount(divideCompanyDO.getAccount())
.setAmount(money)
.setRefundAmount(money)
.setComputeAmount(money)
.setDescription("" + divideCompanyDO.getName() + "分账");
infoDOList.add(divideInfoDO);
@ -674,19 +675,21 @@ public class DivideServiceImpl implements DivideService {
List<DivideCompanyDO> companyList = divideCompanyService.getList();
Map<String, DivideCompanyDO> companyMap = companyList.stream().collect(Collectors.toMap(DivideCompanyDO::getName, vo -> vo));
//更新可分账回退金额
List<DivideInfoDO> updateList = new ArrayList<>();
for (DivideDO divideDO : backList) {
PayClient client = channelService.getPayClient(divideDO.getChannelId());
//查询出分账的具体条数
List<DivideInfoDO> divideListByTi = divideInfoService.getDivideListByTi(divideDO.getChannelOrderNo());
//全部回退
if(divideDO.getRefundPrice().equals(divideDO.getTotalPrice())){
//全部回退
if (divideDO.getBackPrice().equals(divideDO.getTotalPrice())) {
for (DivideInfoDO divideInfoDO : divideListByTi) {
updateList.add(divideInfoDO.setRefundAmount(0));
doReturn(client, divideInfoDO, companyMap.get(divideInfoDO.getName()).getAccount());
}
} else {
Integer refundPrice = divideDO.getRefundPrice();
Integer refundPrice = divideDO.getBackPrice();
//算出每个公司应回退的金额
for (DivideCompanyDO companyDO : companyList) {
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());
int sum = 0;
for (DivideInfoDO infoDO : baList) {
sum = sum+infoDO.getAmount();
if(infoDO.getRefundAmount()==0){
continue;
}
sum = sum + infoDO.getRefundAmount();
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;
} else {
int leftRefundAmount = sum -backmoney;
int left = backmoney + infoDO.getAmount() - sum;
infoDO.setAmount(left);
infoDO.setRefundAmount(left);
doReturn(client, infoDO, companyDO.getAccount());
updateList.add(infoDO.setRefundAmount(leftRefundAmount));
break;
}
}
}
}
}
if (CollectionUtil.isNotEmpty(updateList)) {
divideInfoService.updateList(updateList);
}
}
void doReturn(PayClient client, DivideInfoDO divideInfoDO, String account) {
PayDivideBackUnifiedDto payDivideBackUnifiedDto = new PayDivideBackUnifiedDto();
payDivideBackUnifiedDto.setAmount(divideInfoDO.getAmount().longValue());
payDivideBackUnifiedDto.setAmount(divideInfoDO.getRefundAmount().longValue());
payDivideBackUnifiedDto.setDescription("分账回退");
payDivideBackUnifiedDto.setOrderId(divideInfoDO.getOrderId());
payDivideBackUnifiedDto.setReturnMchid(account);