Commit 7116941f by zhangxingmin

Merge remote-tracking branch 'origin/test' into test

parents 975d9d59 40fb0534
......@@ -672,28 +672,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Transactional(rollbackFor = Exception.class)
private List<ExpectedFortune> updatePayableNoBatch(String policyNo) {
// 查询最新一条有 payableNo 记录
ExpectedFortune latest = iExpectedFortuneService.getOne(
new QueryWrapper<ExpectedFortune>()
.isNotNull("payable_no")
.eq("is_part", 0)
.orderByDesc("id")
.last("LIMIT 1"),
true
);
//查询当前保单号的所有预计发佣记录
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.queryList(policyNo);
//查询redis缓存的字典列表信息
List<GetDictItemListByDictTypeResponse> dictTypeResponses = redisUtil.getCacheObject(RedisConstants.DICT_LIST);
//获取当前序号作为起点
int currentSeq = 0;
if (!Objects.isNull(latest)) {
String payableNo = latest.getPayableNo();
currentSeq = Integer.parseInt(payableNo.substring(payableNo.length() - 6));
}
//批量更新应付款编号,每个item递增
ExpectedFortune expectedFortune;
List<ExpectedFortune> updateList = new ArrayList<>();
......@@ -702,7 +686,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
ExpectedFortune updateObj = new ExpectedFortune();
updateObj.setId(expectedFortune.getId());
updateObj.setPayableNo(this.createPayableNo("R",expectedFortune.getPayoutDate(), policyNo, expectedFortune.getFortunePeriod()));
updateObj.setPayableNo(this.createPayableNo("R", expectedFortune.getPayoutDate(), policyNo, expectedFortune.getFortunePeriod()));
updateObj.setFortuneType(GetDictItemListByDictTypeResponse.getItemValue(dictTypeResponses,
"csf_fortune_type", expectedFortune.getFortuneName()));
......@@ -1402,21 +1386,39 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
throw new BusinessException(ResultCode.FAIL.getCode(), "币种错误:" + request.getCurrency());
}
ExpectedFortune updateExpectedFortune = new ExpectedFortune();
BeanUtils.copyProperties(request, updateExpectedFortune);
updateExpectedFortune.setId(expectedFortune.getId());
// 如果金额变更,则需要重新计算港币金额和待出账金额
if (ObjectUtils.notEqual(expectedFortune.getHkdAmount(), request.getHkdAmount())) {
// 计算港币金额
updateExpectedFortune.setHkdAmount(request.getHkdAmount());
// 更新待出账金额
updateExpectedFortune.setUnpaidAmount(request.getHkdAmount());
// 查询关联 fortune 数据,重新计算:已出帐金额、待出帐金额、已出帐比例、待出帐比例
List<Fortune> fortuneList = fortuneService.lambdaQuery().eq(Fortune::getExpectedFortuneBizId, expectedFortune.getExpectedFortuneBizId()).list();
BigDecimal paidAmount = BigDecimal.ZERO;
BigDecimal unpaidAmount = request.getHkdAmount();
BigDecimal paidRatio = BigDecimal.ZERO;
BigDecimal unpaidRatio = BigDecimal.valueOf(100);
if (!CollectionUtils.isEmpty(fortuneList)) {
// 计算已出账金额
for (Fortune fortune : fortuneList) {
paidAmount = paidAmount.add(fortune.getCurrentPaymentHkdAmount());
}
// 计算待出账金额
unpaidAmount = request.getHkdAmount().subtract(paidAmount);
// 计算已出账比例(已出账金额/预计发佣金额)
paidRatio = paidAmount.divide(request.getHkdAmount(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
// 计算待出账比例(待出账金额/预计发佣金额)
unpaidRatio = unpaidAmount.divide(request.getHkdAmount(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}
// 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
ExpectedFortune updateExpectedFortune = new ExpectedFortune();
BeanUtils.copyProperties(request, updateExpectedFortune);
updateExpectedFortune.setId(expectedFortune.getId());
// 已出帐金额、待出帐金额、已出帐比例、待出帐比例
expectedFortune.setPaidAmount(paidAmount);
expectedFortune.setUnpaidAmount(unpaidAmount);
expectedFortune.setPaidRatio(paidRatio);
expectedFortune.setUnpaidRatio(unpaidRatio);
updateExpectedFortune.setUpdaterId(loginUserId);
updateExpectedFortune.setUpdateTime(LocalDateTime.now());
iExpectedFortuneService.updateById(updateExpectedFortune);
......
......@@ -5,99 +5,91 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
@Data
public class ExpectedFortuneUpdateRequest {
/**
* 预计发佣业务id
*/
@Schema(description = "预计发佣业务id")
@Schema(description = "预计发佣业务id", requiredMode = Schema.RequiredMode.REQUIRED)
private String expectedFortuneBizId;
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款")
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款", requiredMode = Schema.RequiredMode.REQUIRED)
private String fortuneBizType;
/**
* 出账日 (估)
*/
@Schema(description = "出账日 (估)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate payoutDate;
@Schema(description = "出账年月 (估)", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private String payoutDate;
/**
* 出账日 (实)
*/
@Schema(description = "出账日 (实)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate actualPayoutDate;
/**
* 港币出账金额
*/
@Schema(description = "港币出账金额")
private BigDecimal hkdAmount;
@Schema(description = "出账年月 (实)", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private String actualPayoutDate;
/**
* 出账状态
*/
@Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status")
private String status;
// @Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status")
// private String status;
/**
* 出账状态-修改理由
*/
@Schema(description = "出账状态-修改理由")
private String statusDesc;
// @Schema(description = "出账状态-修改理由")
// private String statusDesc;
/**
* 出账项目
*/
@Schema(description = "出账项目")
@Schema(description = "出账项目", requiredMode = Schema.RequiredMode.REQUIRED)
private String fortuneName;
/**
* 出账项目类型
*/
@Schema(description = "出账项目类型 字典值:csf_fortune_type")
@Schema(description = "出账项目类型 字典值:csf_fortune_type", requiredMode = Schema.RequiredMode.REQUIRED)
private String fortuneType;
/**
* 出账期数
*/
@Schema(description = "出账期数")
@Schema(description = "出账期数", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer fortunePeriod;
/**
* 出账总期数
*/
@Schema(description = "出账总期数")
@Schema(description = "出账总期数", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer fortuneTotalPeriod;
/**
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 转介人名称
*/
@Schema(description = "转介人名称")
@Schema(description = "转介人名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String broker;
/**
* 转介人业务ID
*/
@Schema(description = "broker biz id")
@Schema(description = "broker biz id", requiredMode = Schema.RequiredMode.REQUIRED)
private String brokerBizId;
/**
* 备注
*/
@Schema(description = "所属团队")
private String team;
@Schema(description = "所属团队业务ID")
private String teamBizId;
@Schema(description = "保单币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal ruleAmount;
@Schema(description = "保单币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String ruleCurrency;
@Schema(description = "保单币种→港币汇率(默认保单币种汇率)", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal defaultExchangeRate;
@Schema(description = "原币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String originalCurrency;
@Schema(description = "原币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalAmount;
@Schema(description = "原币种→港币汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalToHkdRate;
@Schema(description = "发放币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String payoutCurrency;
@Schema(description = "发放币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal payoutAmount;
@Schema(description = "港币→发放币种汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal hkdToPayoutRate;
@Schema(description = "港币金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal hkdAmount;
@Schema(description = "备注")
private String remark;
}
......@@ -143,10 +143,10 @@ public class FortuneAddRequest implements Serializable {
private BigDecimal hkdAmount;
/**
* 出账日期
* 出账年月 yyyy-MM
*/
@Schema(description = "出账日期", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDate payoutDate;
@Schema(description = "出账年月 yyyy-MM", requiredMode = Schema.RequiredMode.REQUIRED)
private String payoutDate;
/**
* 出账备注
......
......@@ -57,12 +57,12 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> {
* 生成应付款编号(序号递增) 格式:发佣类型-CSF+年份+序号
*
* @param fortuneBizType 应付款类型
* @param payoutDate 出账日期
* @param payoutDate 出账年月 yyyy-MM
* @param policyNo 保单号
* @param fortunePeriod 出账期数
* @return 应付款编号
*/
String getPayableNo(String fortuneBizType, LocalDate payoutDate, String policyNo, Integer fortunePeriod);
String getPayableNo(String fortuneBizType, String payoutDate, String policyNo, Integer fortunePeriod);
/**
* 查询预计发佣和实际发佣的分页列表(手动分页)
......
......@@ -286,7 +286,7 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
}
@Override
public String getPayableNo(String fortuneBizType, LocalDate payoutDate, String policyNo, Integer fortunePeriod) {
public String getPayableNo(String fortuneBizType, String payoutDate, String policyNo, Integer fortunePeriod) {
// 1. 安全获取保单号后4位
String last4Chars = "";
if (policyNo != null && !policyNo.isEmpty()) {
......@@ -302,8 +302,8 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
// 3. 组装最终字符串
return String.format("%s%04d%02d%s%03d",
fortuneBizType,
payoutDate.getYear(),
payoutDate.getMonthValue(),
Integer.parseInt(payoutDate.substring(0, 4)),
Integer.parseInt(payoutDate.substring(5, 7)),
formattedPolicySuffix,
fortunePeriod);
}
......
......@@ -2,6 +2,8 @@ package com.yd.csf.service.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -557,7 +559,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setCurrentPaymentAmount(fortuneAddRequest.getPayoutAmount());
fortune.setFortuneName(queryByDict(fortuneAddRequest.getFortuneType()));
fortune.setActualPayoutDate(fortuneAddRequest.getPayoutDate());
fortune.setActualPayoutDate(LocalDate.parse(fortuneAddRequest.getPayoutDate() + "-01"));
fortune.setIsPart(0);
fortune.setStatus(FortuneStatusEnum.CAN_SEND.getItemValue());
......@@ -777,7 +779,11 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
expectedFortune = createExpectedFortune(fortuneAddRequest, policy, fortuneName);
// 保存
expectedFortuneService.save(expectedFortune);
} else {
// 如果有预计出账记录,提示去应付款管理页面修改金额,而不是在出账页面新增
throw new BusinessException(ResultCode.FAIL.getCode(), fortuneAddRequest.getFortuneName() + " 已存在应付记录,请在应付款管理页面修改金额");
}
fortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
fortune.setPolicyCurrency(expectedFortune.getPolicyCurrency());
fortune.setCurrentPaymentRatio(BigDecimal.valueOf(100));
......@@ -799,7 +805,7 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
// 生成发佣业务ID
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setCurrentPaymentAmount(fortuneAddRequest.getPayoutAmount());
fortune.setActualPayoutDate(fortuneAddRequest.getPayoutDate());
fortune.setActualPayoutDate(LocalDate.parse(fortuneAddRequest.getPayoutDate() + "-01"));
fortune.setIsPart(0);
fortuneList.add(fortune);
}
......@@ -833,6 +839,10 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
expectedFortune.setFortuneName(fortuneName);
// 应付款编号
expectedFortune.setPayableNo(payableNo);
// 是否拆分
expectedFortune.setIsPart(0);
// 默认保单币种汇率
expectedFortune.setDefaultExchangeRate(fortuneAddRequest.getExchangeRate());
// 已出帐金额、待出帐金额、已出帐比例、待出帐比例
expectedFortune.setPaidAmount(BigDecimal.ZERO);
......
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