Commit 7116941f by zhangxingmin

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

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