Commit 8e7e2381 by zhangxingmin

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

parents d77df53c 0b7a2a19
......@@ -241,7 +241,7 @@ public class ApiCommissionExpectedController {
.map(CommissionExpected::getId)
.collect(Collectors.toList());
CommissionExpectedStatisticsVO statisticsNewVO = commissionExpectedService
.getExpectedStatisticsNew(expectedIds);
.getExpectedStatisticsNew(allExpectedList);
// 获取混合分页结果
Page<CommissionExpectedNewVO> mixedPage = commissionExpectedService
......@@ -380,7 +380,7 @@ public class ApiCommissionExpectedController {
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());
......
......@@ -1136,7 +1136,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// 校验是否存在
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)) {
throw new BusinessException(ResultCode.PARAM_CHECK_ERROR.getCode(), "当前期数已存在: " + request.getFortuneName());
}
......
......@@ -90,9 +90,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ
PremiumRemittance premiumRemittance = result.getData();
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);
//保存-保费对账汇款记录附件列表
apiPremiumRemittanceFileService.savePremiumRemittanceFileList(request.getApiPremiumRemittanceFileDtoList(),request.getPremiumRemittanceBizId());
......@@ -154,9 +168,23 @@ public class ApiPremiumRemittanceServiceImpl implements ApiPremiumRemittanceServ
//保费对账-汇款记录表唯一业务ID
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);
//添加-保费对账汇款记录附件列表
......
......@@ -73,17 +73,17 @@ public class ApiPremiumRemittanceDto {
@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime paymentDate;
/**
* 支付凭证列表
*/
@NotEmpty(message = "支付凭证列表不能为空")
private List<String> paymentVoucherList;
/**
* 账户证明列表
*/
@NotEmpty(message = "账户证明列表不能为空")
private List<String> accountVerificationList;
// /**
// * 支付凭证列表
// */
// @NotEmpty(message = "支付凭证列表不能为空")
// private List<String> paymentVoucherList;
//
// /**
// * 账户证明列表
// */
// @NotEmpty(message = "账户证明列表不能为空")
// private List<String> accountVerificationList;
/**
* 支付凭证列表
......
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.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
......
......@@ -40,4 +40,6 @@ public class FortuneAccountQueryRequest extends PageDto {
@Schema(description = "出账日期结束")
private String accountDateEnd;
private String businessNo;
}
......@@ -60,7 +60,7 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
CommissionExpectedStatisticsVO getExpectedStatistics(List<Long> expectedIds);
CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<Long> expectedIds);
CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<CommissionExpected> allExpectedList);
CommissionExpected getByBizId(String commissionExpectedBizId);
......
......@@ -970,17 +970,17 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
}
@Override
public CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<Long> expectedIds) {
public CommissionExpectedStatisticsVO getExpectedStatisticsNew(List<CommissionExpected> allExpectedList) {
// 空集合直接返回空统计
if (CollectionUtils.isEmpty(expectedIds)) {
if (CollectionUtils.isEmpty(allExpectedList)) {
return emptyStatistics();
}
// 查询所有记录(包含失效状态)
List<CommissionExpected> allExpectedList = this.listByIds(expectedIds);
if (CollectionUtils.isEmpty(allExpectedList)) {
return emptyStatistics();
}
// List<CommissionExpected> allExpectedList = this.listByIds(expectedIds);
// if (CollectionUtils.isEmpty(allExpectedList)) {
// return emptyStatistics();
// }
// 过滤掉已失效的记录(status = "3")
List<CommissionExpected> validList = allExpectedList.stream()
......
......@@ -652,7 +652,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 2. 根据本次发佣期数,删除未出账的记录
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()))
.list();
......@@ -783,19 +783,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
String key = buildPolicyPeriodKey(expectedFortune.getPolicyNo(), expectedFortune.getFortunePeriod());
BigDecimal exchangeRate = exchangeRateMap.get(key);
if (exchangeRate != null) {
// 入账检核汇率 — 仅审计追溯,始终写入
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);
// 重新计算港币金额
BigDecimal hkdAmount = fortune.getRuleAmount().multiply(exchangeRate);
fortune.setHkdAmount(hkdAmount);
fortune.setCurrentPaymentAmount(fortune.getRuleAmount());
fortune.setCurrentPaymentHkdAmount(hkdAmount);
// 重新计算发放币种金额
BigDecimal payoutAmount = hkdAmount.multiply(expectedFortune.getHkdToPayoutRate());
fortune.setPayoutAmount(payoutAmount);
// 更新预计发佣记录的港币金额
ExpectedFortune update = new ExpectedFortune();
update.setId(expectedFortune.getId());
update.setDefaultExchangeRate(exchangeRate);
......@@ -806,6 +812,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
update.setPayoutAmount(payoutAmount);
updatedExpectedFortuneList.add(update);
} else {
// 入账币种 ≠ HKD,无法推导保单币种 → 港币,用 ExpectedFortune 已有默认值
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setCurrentPaymentAmount(expectedFortune.getOriginalAmount());
fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount());
}
} else {
fortune.setExchangeRate(expectedFortune.getDefaultExchangeRate());
fortune.setCurrentPaymentAmount(expectedFortune.getOriginalAmount());
fortune.setCurrentPaymentHkdAmount(expectedFortune.getHkdAmount());
......
......@@ -86,6 +86,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
Date end = parseEndDate(fortuneAccountQueryRequest.getAccountDateEnd());
queryWrapper.ge(start != null, "fortune_account_date", start);
queryWrapper.le(end != null, "fortune_account_date", end);
queryWrapper.like(StringUtils.isNotBlank(fortuneAccountQueryRequest.getBusinessNo()),"business_no",fortuneAccountQueryRequest.getBusinessNo());
// 默认排序
queryWrapper.orderByDesc("fortune_account_date");
return queryWrapper;
......@@ -504,6 +505,8 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
// 应发港币金额(估)
BigDecimal hkdAmount = hkdAmountMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO);
BigDecimal expectedHKD = hkdAmount.add(unpaidRuleAmountHkd);
// 发放币种金额 = 港币 × 港币兑发放币种汇率
BigDecimal expectedPayout = expectedHKD.multiply(ef.getHkdToPayoutRate());
// 累计出账港币金额
BigDecimal paid = paidMap.getOrDefault(ef.getExpectedFortuneBizId(), BigDecimal.ZERO);
......@@ -526,7 +529,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
.set(ExpectedFortune::getUnpaidRuleAmount, unpaidRule)
.set(ExpectedFortune::getUnpaidRuleAmountHkd, unpaidRuleAmountHkd)
.set(ExpectedFortune::getHkdAmount, expectedHKD)
.set(ExpectedFortune::getPayoutAmount, expectedHKD)
.set(ExpectedFortune::getPayoutAmount, expectedPayout)
.set(ExpectedFortune::getPaidAmount, paid)
.set(ExpectedFortune::getUnpaidAmount, unpaidRuleAmountHkd)
.set(ExpectedFortune::getPaidRatio, totalPaidRatio)
......
......@@ -162,4 +162,5 @@
and ce.is_deleted = 0
</where>
</select>
</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