Commit 8e7e2381 by zhangxingmin

Merge remote-tracking branch 'origin/dev' into prod

parents d77df53c 0b7a2a19
...@@ -241,7 +241,7 @@ public class ApiCommissionExpectedController { ...@@ -241,7 +241,7 @@ public class ApiCommissionExpectedController {
.map(CommissionExpected::getId) .map(CommissionExpected::getId)
.collect(Collectors.toList()); .collect(Collectors.toList());
CommissionExpectedStatisticsVO statisticsNewVO = commissionExpectedService CommissionExpectedStatisticsVO statisticsNewVO = commissionExpectedService
.getExpectedStatisticsNew(expectedIds); .getExpectedStatisticsNew(allExpectedList);
// 获取混合分页结果 // 获取混合分页结果
Page<CommissionExpectedNewVO> mixedPage = commissionExpectedService Page<CommissionExpectedNewVO> mixedPage = commissionExpectedService
...@@ -380,7 +380,7 @@ public class ApiCommissionExpectedController { ...@@ -380,7 +380,7 @@ public class ApiCommissionExpectedController {
List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList()); List<Long> allExpectedIdList = allCommissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
// 查询统计数据(基于所有符合条件的记录) // 查询统计数据(基于所有符合条件的记录)
CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allExpectedIdList); CommissionExpectedStatisticsVO statisticsVO = commissionExpectedService.getExpectedStatisticsNew(allCommissionExpectedList);
// 应收款报表分页查询 - 按保单号和期数维度统计 // 应收款报表分页查询 - 按保单号和期数维度统计
Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize()); Page<ReceivableReportVO> reportPage = new Page<>(commissionExpectedQueryRequest.getPageNo(), commissionExpectedQueryRequest.getPageSize());
......
...@@ -1136,7 +1136,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -1136,7 +1136,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// 校验是否存在 // 校验是否存在
for (ExpectedFortuneAddRequest request : fortuneAddRequestList) { for (ExpectedFortuneAddRequest request : fortuneAddRequestList) {
String key = String.format("%s_%s_%s", request.getPolicyNo(), request.getFortunePeriod(), request.getFortuneBizType()); String key = String.format("%s_%s_%s", request.getPolicyNo(), request.getFortunePeriod(), request.getFortuneType());
if (existingRecordsMap.containsKey(key)) { if (existingRecordsMap.containsKey(key)) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "当前期数已存在: " + request.getFortuneName()); throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "当前期数已存在: " + request.getFortuneName());
} }
......
...@@ -90,9 +90,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ ...@@ -90,9 +90,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ
PremiumRemittance premiumRemittance = result.getData(); PremiumRemittance premiumRemittance = result.getData();
BeanUtils.copyProperties(request,premiumRemittance); BeanUtils.copyProperties(request,premiumRemittance);
//支付凭证 //支付凭证
premiumRemittance.setPaymentVoucher(!CollectionUtils.isEmpty(request.getPaymentVoucherList()) ? String.join(";",request.getPaymentVoucherList()) : ""); List<String> paymentVoucherList = new ArrayList<>();
if (!CollectionUtils.isEmpty(request.getPaymentVoucherDtoList())) {
paymentVoucherList = request.getPaymentVoucherDtoList().stream()
.filter(dto -> StringUtils.isNotBlank(dto.getFileUrl()))
.map(ApiPremiumRemittanceFileDto::getFileUrl)
.collect(Collectors.toList());
}
premiumRemittance.setPaymentVoucher(!CollectionUtils.isEmpty(paymentVoucherList) ? String.join(";",paymentVoucherList) : "");
//账户证明 //账户证明
premiumRemittance.setAccountVerification(!CollectionUtils.isEmpty(request.getAccountVerificationList()) ? String.join(";",request.getAccountVerificationList()) : ""); List<String> accountVerificationList = new ArrayList<>();
if (!CollectionUtils.isEmpty(request.getAccountVerificationDtoList())) {
accountVerificationList = request.getAccountVerificationDtoList().stream()
.filter(dto -> StringUtils.isNotBlank(dto.getFileUrl()))
.map(ApiPremiumRemittanceFileDto::getFileUrl)
.collect(Collectors.toList());
}
premiumRemittance.setAccountVerification(!CollectionUtils.isEmpty(accountVerificationList) ? String.join(";",accountVerificationList) : "");
iPremiumRemittanceService.saveOrUpdate(premiumRemittance); iPremiumRemittanceService.saveOrUpdate(premiumRemittance);
//保存-保费对账汇款记录附件列表 //保存-保费对账汇款记录附件列表
apiPremiumRemittanceFileService.savePremiumRemittanceFileList(request.getApiPremiumRemittanceFileDtoList(),request.getPremiumRemittanceBizId()); apiPremiumRemittanceFileService.savePremiumRemittanceFileList(request.getApiPremiumRemittanceFileDtoList(),request.getPremiumRemittanceBizId());
...@@ -154,9 +168,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ ...@@ -154,9 +168,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ
//保费对账-汇款记录表唯一业务ID //保费对账-汇款记录表唯一业务ID
premiumRemittance.setPremiumRemittanceBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_PREMIUM_REMITTANCE.getCode())); premiumRemittance.setPremiumRemittanceBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_PREMIUM_REMITTANCE.getCode()));
//支付凭证 //支付凭证
premiumRemittance.setPaymentVoucher(!CollectionUtils.isEmpty(dto.getPaymentVoucherList()) ? String.join(";",dto.getPaymentVoucherList()) : ""); List<String> paymentVoucherList = new ArrayList<>();
if (!CollectionUtils.isEmpty(dto.getPaymentVoucherDtoList())) {
paymentVoucherList = dto.getPaymentVoucherDtoList().stream()
.filter(dto1 -> StringUtils.isNotBlank(dto1.getFileUrl()))
.map(ApiPremiumRemittanceFileDto::getFileUrl)
.collect(Collectors.toList());
}
premiumRemittance.setPaymentVoucher(!CollectionUtils.isEmpty(paymentVoucherList) ? String.join(";",paymentVoucherList) : "");
//账户证明 //账户证明
premiumRemittance.setAccountVerification(!CollectionUtils.isEmpty(dto.getAccountVerificationList()) ? String.join(";",dto.getAccountVerificationList()) : ""); List<String> accountVerificationList = new ArrayList<>();
if (!CollectionUtils.isEmpty(dto.getAccountVerificationDtoList())) {
accountVerificationList = dto.getAccountVerificationDtoList().stream()
.filter(dto1 -> StringUtils.isNotBlank(dto1.getFileUrl()))
.map(ApiPremiumRemittanceFileDto::getFileUrl)
.collect(Collectors.toList());
}
premiumRemittance.setAccountVerification(!CollectionUtils.isEmpty(accountVerificationList) ? String.join(";",accountVerificationList) : "");
iPremiumRemittanceService.saveOrUpdate(premiumRemittance); iPremiumRemittanceService.saveOrUpdate(premiumRemittance);
//添加-保费对账汇款记录附件列表 //添加-保费对账汇款记录附件列表
......
...@@ -73,17 +73,17 @@ public class ApiPremiumRemittanceDto { ...@@ -73,17 +73,17 @@ public class ApiPremiumRemittanceDto {
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class) @JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime paymentDate; private LocalDateTime paymentDate;
/** // /**
* 支付凭证列表 // * 支付凭证列表
*/ // */
@NotEmpty(message = "支付凭证列表不能为空") // @NotEmpty(message = "支付凭证列表不能为空")
private List<String> paymentVoucherList; // private List<String> paymentVoucherList;
//
/** // /**
* 账户证明列表 // * 账户证明列表
*/ // */
@NotEmpty(message = "账户证明列表不能为空") // @NotEmpty(message = "账户证明列表不能为空")
private List<String> accountVerificationList; // private List<String> accountVerificationList;
/** /**
* 支付凭证列表 * 支付凭证列表
......
package com.yd.csf.service.dao; package com.yd.csf.service.dao;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
......
...@@ -40,4 +40,6 @@ public class FortuneAccountQueryRequest extends PageDto { ...@@ -40,4 +40,6 @@ public class FortuneAccountQueryRequest extends PageDto {
@Schema(description = "出账日期结束") @Schema(description = "出账日期结束")
private String accountDateEnd; private String accountDateEnd;
private String businessNo;
} }
...@@ -60,7 +60,7 @@ public interface CommissionExpectedService extends IService<CommissionExpected> ...@@ -60,7 +60,7 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
CommissionExpectedStatisticsVO getExpectedStatistics(List<Long> expectedIds); CommissionExpectedStatisticsVO getExpectedStatistics(List<Long> expectedIds);
CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<Long> expectedIds); CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<CommissionExpected> allExpectedList);
CommissionExpected getByBizId(String commissionExpectedBizId); CommissionExpected getByBizId(String commissionExpectedBizId);
......
...@@ -970,17 +970,17 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -970,17 +970,17 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
} }
@Override @Override
public CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<Long> expectedIds) { public CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<CommissionExpected> allExpectedList) {
// 空集合直接返回空统计 // 空集合直接返回空统计
if (CollectionUtils.isEmpty(expectedIds)) { if (CollectionUtils.isEmpty(allExpectedList)) {
return emptyStatistics(); return emptyStatistics();
} }
// 查询所有记录(包含失效状态) // 查询所有记录(包含失效状态)
List<CommissionExpected> allExpectedList = this.listByIds(expectedIds); // List<CommissionExpected> allExpectedList = this.listByIds(expectedIds);
if (CollectionUtils.isEmpty(allExpectedList)) { // if (CollectionUtils.isEmpty(allExpectedList)) {
return emptyStatistics(); // return emptyStatistics();
} // }
// 过滤掉已失效的记录(status = "3") // 过滤掉已失效的记录(status = "3")
List<CommissionExpected> validList = allExpectedList.stream() List<CommissionExpected> validList = allExpectedList.stream()
......
...@@ -652,7 +652,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -652,7 +652,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 2. 根据本次发佣期数,删除未出账的记录 // 2. 根据本次发佣期数,删除未出账的记录
List<Fortune> fortuneList = fortuneService.lambdaQuery() List<Fortune> fortuneList = fortuneService.lambdaQuery()
.eq(Fortune::getStatus, FortuneStatusEnum.CAN_SEND.getItemValue()) .in(Fortune::getStatus, FortuneStatusEnum.CAN_SEND.getItemValue(), FortuneStatusEnum.WAIT.getItemValue())
.in(Fortune::getExpectedFortuneBizId, filteredExpectedFortuneList1.stream().map(ExpectedFortune::getExpectedFortuneBizId).collect(Collectors.toList())) .in(Fortune::getExpectedFortuneBizId, filteredExpectedFortuneList1.stream().map(ExpectedFortune::getExpectedFortuneBizId).collect(Collectors.toList()))
.list(); .list();
...@@ -783,19 +783,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -783,19 +783,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
String key = buildPolicyPeriodKey(expectedFortune.getPolicyNo(), expectedFortune.getFortunePeriod()); String key = buildPolicyPeriodKey(expectedFortune.getPolicyNo(), expectedFortune.getFortunePeriod());
BigDecimal exchangeRate = exchangeRateMap.get(key); BigDecimal exchangeRate = exchangeRateMap.get(key);
if (exchangeRate != null) { if (exchangeRate != null) {
// 入账检核汇率 — 仅审计追溯,始终写入
fortune.setExchangeRate(exchangeRate); fortune.setExchangeRate(exchangeRate);
// 判断 expectedFortune.originalCurrency 、入账币种-fortune.currency 是否都等于 HKD
Commission matchedCommission = commissionByPolicyPeriod.get(key);
boolean isAllHkd = matchedCommission != null
&& "HKD".equalsIgnoreCase(expectedFortune.getOriginalCurrency())
&& "HKD".equalsIgnoreCase(matchedCommission.getCurrency());
if (isAllHkd) {
// 原币种 = HKD 时,exchangeRate = 保单币种 → 港币,可安全使用
fortune.setOriginalToHkdRate(exchangeRate); fortune.setOriginalToHkdRate(exchangeRate);
// 重新计算港币金额
BigDecimal hkdAmount = fortune.getRuleAmount().multiply(exchangeRate); BigDecimal hkdAmount = fortune.getRuleAmount().multiply(exchangeRate);
fortune.setHkdAmount(hkdAmount); fortune.setHkdAmount(hkdAmount);
fortune.setCurrentPaymentAmount(fortune.getRuleAmount()); fortune.setCurrentPaymentAmount(fortune.getRuleAmount());
fortune.setCurrentPaymentHkdAmount(hkdAmount); fortune.setCurrentPaymentHkdAmount(hkdAmount);
// 重新计算发放币种金额
BigDecimal payoutAmount = hkdAmount.multiply(expectedFortune.getHkdToPayoutRate()); BigDecimal payoutAmount = hkdAmount.multiply(expectedFortune.getHkdToPayoutRate());
fortune.setPayoutAmount(payoutAmount); fortune.setPayoutAmount(payoutAmount);
// 更新预计发佣记录的港币金额
ExpectedFortune update = new ExpectedFortune(); ExpectedFortune update = new ExpectedFortune();
update.setId(expectedFortune.getId()); update.setId(expectedFortune.getId());
update.setDefaultExchangeRate(exchangeRate); update.setDefaultExchangeRate(exchangeRate);
...@@ -806,6 +812,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -806,6 +812,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
update.setPayoutAmount(payoutAmount); update.setPayoutAmount(payoutAmount);
updatedExpectedFortuneList.add(update); updatedExpectedFortuneList.add(update);
} else { } else {
// 入账币种 ≠ HKD,无法推导保单币种 → 港币,用 ExpectedFortune 已有默认值
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setCurrentPaymentAmount(expectedFortune.getOriginalAmount());
fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount());
}
} else {
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate()); fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setCurrentPaymentAmount(expectedFortune.getOriginalAmount()); fortune.setCurrentPaymentAmount(expectedFortune.getOriginalAmount());
fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount()); fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount());
......
...@@ -86,6 +86,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -86,6 +86,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
Date end = parseEndDate(fortuneAccountQueryRequest.getAccountDateEnd()); Date end = parseEndDate(fortuneAccountQueryRequest.getAccountDateEnd());
queryWrapper.ge(start != null, "fortune_account_date", start); queryWrapper.ge(start != null, "fortune_account_date", start);
queryWrapper.le(end != null, "fortune_account_date", end); queryWrapper.le(end != null, "fortune_account_date", end);
queryWrapper.like(StringUtils.isNotBlank(fortuneAccountQueryRequest.getBusinessNo()),"business_no",fortuneAccountQueryRequest.getBusinessNo());
// 默认排序 // 默认排序
queryWrapper.orderByDesc("fortune_account_date"); queryWrapper.orderByDesc("fortune_account_date");
return queryWrapper; return queryWrapper;
...@@ -504,6 +505,8 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -504,6 +505,8 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
// 应发港币金额(估) // 应发港币金额(估)
BigDecimal hkdAmount = hkdAmountMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO); BigDecimal hkdAmount = hkdAmountMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO);
BigDecimal expectedHKD = hkdAmount.add(unpaidRuleAmountHkd); BigDecimal expectedHKD = hkdAmount.add(unpaidRuleAmountHkd);
// 发放币种金额 = 港币 × 港币兑发放币种汇率
BigDecimal expectedPayout = expectedHKD.multiply(ef.getHkdToPayoutRate());
// 累计出账港币金额 // 累计出账港币金额
BigDecimal paid = paidMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO); BigDecimal paid = paidMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO);
...@@ -526,7 +529,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -526,7 +529,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
.set(ExpectedFortune::getUnpaidRuleAmount, unpaidRule) .set(ExpectedFortune::getUnpaidRuleAmount, unpaidRule)
.set(ExpectedFortune::getUnpaidRuleAmountHkd, unpaidRuleAmountHkd) .set(ExpectedFortune::getUnpaidRuleAmountHkd, unpaidRuleAmountHkd)
.set(ExpectedFortune::getHkdAmount, expectedHKD) .set(ExpectedFortune::getHkdAmount, expectedHKD)
.set(ExpectedFortune::getPayoutAmount, expectedHKD) .set(ExpectedFortune::getPayoutAmount, expectedPayout)
.set(ExpectedFortune::getPaidAmount, paid) .set(ExpectedFortune::getPaidAmount, paid)
.set(ExpectedFortune::getUnpaidAmount, unpaidRuleAmountHkd) .set(ExpectedFortune::getUnpaidAmount, unpaidRuleAmountHkd)
.set(ExpectedFortune::getPaidRatio, totalPaidRatio) .set(ExpectedFortune::getPaidRatio, totalPaidRatio)
......
...@@ -162,4 +162,5 @@ ...@@ -162,4 +162,5 @@
and ce.is_deleted = 0 and ce.is_deleted = 0
</where> </where>
</select> </select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment