Commit b8053594 by zhangxingmin

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

parents bee5253a e0b2fb70
......@@ -6,6 +6,7 @@ import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
......@@ -79,6 +80,10 @@ public class CommissionExcelDTO {
public static Commission convertToEntityNew(CommissionExcelDTO data, String loginUserId) {
Commission entity = new Commission();
// 字段映射
String commissionBizType = data.getCommissionBizType();
if (StringUtils.isNotBlank(commissionBizType)) {
entity.setCommissionBizType("R".equals(commissionBizType) || "关联保单应收单".equalsIgnoreCase(commissionBizType) ? "R" : "U");
}
entity.setPolicyNo(data.getPolicyNo2());
entity.setCommissionPeriod(data.getCommissionPeriod2());
entity.setCommissionName(data.getCommissionName2());
......
......@@ -96,29 +96,32 @@ public class CommissionAsyncService {
BigDecimal expectedAmount = commissionExpected.getAmount();
BigDecimal actualAmount = commission.getAmount();
if (expectedAmount.equals(actualAmount) && commissionExpected.getCurrency().equals(commission.getCurrency())) {
// 等于预计比例时,所有来佣设置为比对成功
commission.setStatus(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue());
// 创建比对记录
compareRecords.add(commissionService.getNewCompareRecord(commission, commissionExpected, currentLoginUser));
// 对应预计来佣设置为已来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
// 待入账金额设置为 0
commissionExpected.setPaidAmount(BigDecimal.ZERO);
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
// 更新已比对来佣记录
commissionService.updateById(commission);
// 对应预计来佣设置为已来佣、待入账金额设置为 0
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.COMPARED.getItemValue())
.set(CommissionExpected::getPaidAmount, BigDecimal.ZERO)
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 来佣设置为比对成功
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())
.eq(Commission::getId, commission.getId())
.update();
} else {
// 对应预计来佣设置为部分来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
// 预计来佣设置为部分来佣
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.PARTIAL.getItemValue())
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 来佣比对失败
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_FAIL.getItemValue())
.eq(Commission::getId, commission.getId())
.update();
// 创建比对记录
compareRecords.add(commissionService.getNewCompareRecord(commission, commissionExpected, currentLoginUser));
// 更新已比对来佣记录
commissionService.updateById(commission);
}
}
// 保存比对记录
......@@ -170,14 +173,16 @@ public class CommissionAsyncService {
// 校验参数
boolean validFlag = false;
for (Commission existingCommission : existingCommissions) {
if (existingCommission.getTotalPeriod().compareTo(commissionExpected.getTotalPeriod()) != 0) {
Integer commissionTotalPeriod = existingCommission.getTotalPeriod();
Integer expectedTotalPeriod = commissionExpected.getTotalPeriod();
if (commissionTotalPeriod.compareTo(expectedTotalPeriod) != 0) {
existingCommission.setRemark("来佣总期数与预计来佣总期数不一致");
existingCommission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
validFlag = true;
}
}
// 参数校验未通过,更新后,不执行后续计算
if (!validFlag) {
if (validFlag) {
commissionService.updateBatchById(existingCommissions);
return;
}
......@@ -188,7 +193,12 @@ public class CommissionAsyncService {
BigDecimal paidRatio = BigDecimal.ZERO;
BigDecimal paidAmount = BigDecimal.ZERO;
for (Commission item : existingCommissions) {
if (item.getCurrentCommissionRatio() == null) {
log.warn("当前来佣比例为空,临时计算当前来佣比例: {}", item);
paidRatio = paidRatio.add(item.calculateCurrentPaidRatio());
} else {
paidRatio = paidRatio.add(item.getCurrentCommissionRatio());
}
paidAmount = paidAmount.add(item.getAmount());
}
......@@ -214,16 +224,16 @@ public class CommissionAsyncService {
// 创建比对记录
compareRecords.add(commissionService.getNewCompareRecord(existingCommission, commissionExpected, currentLoginUser));
}
// 对应预计来佣设置为已来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
// 待入账金额设置为 0
commissionExpected.setPaidAmount(paidAmount.setScale(2, RoundingMode.HALF_UP));
commissionExpected.setPaidRatio(paidRatio);
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
// 更新预计来佣状态为已来佣、已入账金额、已入账比例
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.COMPARED.getItemValue())
.set(CommissionExpected::getPaidAmount, paidAmount.setScale(2, RoundingMode.HALF_UP))
.set(CommissionExpected::getPaidRatio, paidRatio)
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 更新已比对来佣记录
if (CollectionUtils.isNotEmpty(existingCommissions)) {
commissionService.updateBatchById(existingCommissions);
commissionService.updateStatusBatchById(existingCommissions);
}
// 保存比对记录
commissionCompareRecordService.saveBatch(compareRecords);
......@@ -235,12 +245,13 @@ public class CommissionAsyncService {
compareRecords.add(commissionService.getNewCompareRecord(existingCommission, commissionExpected, currentLoginUser));
}
// 对应预计来佣设置为部分来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.PARTIAL.getItemValue())
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 更新已比对来佣记录
if (CollectionUtils.isNotEmpty(existingCommissions)) {
commissionService.updateBatchById(existingCommissions);
commissionService.updateStatusBatchById(existingCommissions);
}
// 保存比对记录
commissionCompareRecordService.saveBatch(compareRecords);
......@@ -285,27 +296,30 @@ public class CommissionAsyncService {
// 计算比对状态
if (commission.getAmount().compareTo(commissionExpected.getAmount()) == 0) {
// 等于预计金额时,所有来佣设置为比对成功
commission.setStatus(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue());
// 更新来佣
commissionService.updateById(commission);
// 对应预计来佣设置为已来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
// 待入账金额设置为 0
commissionExpected.setPaidAmount(BigDecimal.ZERO);
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
// 等于预计金额时,来佣设置为比对成功
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())
.eq(Commission::getId, commission.getId())
.update();
// 预计来佣设置为已来佣、待入账金额设置为 0
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.COMPARED.getItemValue())
.set(CommissionExpected::getPaidAmount, BigDecimal.ZERO)
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 保存比对记录
commissionService.saveCompareRecord(commission, commissionExpected, currentLoginUser);
} else {
// 不等于预计比例时,设置为比对失败
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
// 更新来佣
commissionService.updateById(commission);
// 对应预计来佣设置为部分来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_FAIL.getItemValue())
.eq(Commission::getId, commission.getId())
.update();
// 预计来佣设置为部分来佣
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.PARTIAL.getItemValue())
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 保存比对记录
commissionService.saveCompareRecord(commission, commissionExpected, currentLoginUser);
}
......@@ -375,28 +389,30 @@ public class CommissionAsyncService {
existingCommission.setStatus(CommissionStatusEnum.COMPARE_SUCCESS.getItemValue());
existingCommission.setTotalPeriod(commissionExpected.getTotalPeriod());
}
// 对应预计来佣设置为已来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
// 待入账金额设置为 0
commissionExpected.setPaidAmount(paidAmount.setScale(4, RoundingMode.HALF_UP));
commissionExpected.setPaidRatio(paidRatio);
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
// 对应预计来佣设置为已来佣、待入账金额设置为 0
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.COMPARED.getItemValue())
.set(CommissionExpected::getPaidAmount, paidAmount.setScale(4, RoundingMode.HALF_UP))
.set(CommissionExpected::getPaidRatio, paidRatio)
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 更新已比对来佣记录
if (CollectionUtils.isNotEmpty(existingCommissions)) {
commissionService.updateBatchById(existingCommissions);
commissionService.updateStatusBatchById(existingCommissions);
}
// 保存比对记录
commissionService.saveCompareRecord(commission, commissionExpected, currentLoginUser);
} else {
// 不等于预计比例时,设置为比对失败
commission.setStatus(CommissionStatusEnum.COMPARE_FAIL.getItemValue());
// 更新来佣
commissionService.updateById(commission);
// 对应预计来佣设置为部分来佣
commissionExpected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
// 更新预计来佣
commissionExpectedService.updateById(commissionExpected);
commissionService.lambdaUpdate()
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_FAIL.getItemValue())
.eq(Commission::getId, commission.getId())
.update();
// 预计来佣设置为部分来佣
commissionExpectedService.lambdaUpdate()
.set(CommissionExpected::getStatus, CommissionExpectedStatusEnum.PARTIAL.getItemValue())
.eq(CommissionExpected::getId, commissionExpected.getId())
.update();
// 保存比对记录
commissionService.saveCompareRecord(commission, commissionExpected, currentLoginUser);
}
......
package com.yd.csf.service.dao;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yd.csf.service.dto.CommissionBindPolicyBrokerDto;
import com.yd.csf.service.dto.CommissionDto;
import com.yd.csf.service.model.Commission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -22,6 +20,8 @@ public interface CommissionMapper extends BaseMapper<Commission> {
List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(@Param("dto") CommissionDto dto);
CommissionStatisticsVO getCommissionStatistics(@Param("commissionIdList") List<Long> commissionIdList);
int updateStatusBatchById(@Param("list") List<Commission> list);
}
......
......@@ -11,9 +11,9 @@ import java.util.Date;
@Data
public class CommissionUpdateRequest implements Serializable {
/**
* 保单来佣业务id
* 保单入账业务id
*/
@Schema(description = "保单来佣业务id", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "保单入账业务id", requiredMode = Schema.RequiredMode.REQUIRED)
private String commissionBizId;
/**
......@@ -29,12 +29,6 @@ public class CommissionUpdateRequest implements Serializable {
private String policyNo;
/**
* 保费
*/
@Schema(description = "保费")
private String premium;
/**
* 对账公司
*/
@Schema(description = "对账公司")
......@@ -47,9 +41,9 @@ public class CommissionUpdateRequest implements Serializable {
private String reconciliationCompanyBizId;
/**
* 来佣比对状态
* 入账比对状态
*/
// @Schema(description = "来佣比对状态 1=比对成功 2=比对失败")
// @Schema(description = "入账比对状态 1=比对成功 2=比对失败")
// private String status;
/**
......@@ -59,33 +53,33 @@ public class CommissionUpdateRequest implements Serializable {
private Integer commissionPeriod;
/**
* 总来佣期数
* 总入账期数
*/
@Schema(description = "总来佣期数")
@Schema(description = "总入账期数")
private Integer totalPeriod;
/**
* 来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
* 入账项目名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
@Schema(description = "来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)")
@Schema(description = "入账项目名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)")
private String commissionName;
/**
* 来佣类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
* 入账项目类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
@Schema(description = "来佣类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)")
@Schema(description = "入账项目类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)")
private String commissionType;
/**
* 来佣金额
* 入账金额
*/
@Schema(description = "来佣金额")
@Schema(description = "入账金额")
private BigDecimal amount;
/**
* 来佣币种
* 入账币种
*/
@Schema(description = "来佣币种")
@Schema(description = "入账币种")
private String currency;
/**
......@@ -95,9 +89,9 @@ public class CommissionUpdateRequest implements Serializable {
private String exchangeRate;
/**
* 来佣日期
* 入账日期
*/
@Schema(description = "来佣日期")
@Schema(description = "入账日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date commissionDate;
......
......@@ -9,6 +9,7 @@ public enum CommissionStatusEnum {
WAIT("未比对","0"),
COMPARE_SUCCESS("比对成功","1"),
COMPARE_FAIL("比对失败","2"),
MATCH_FAILED("未查询到预计来佣记录","3");
;
//字典项标签(名称)
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import lombok.Data;
......@@ -195,4 +196,11 @@ public class Commission implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public BigDecimal calculateCurrentPaidRatio() {
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(new BigDecimal(exchangeRate), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
}
}
\ No newline at end of file
......@@ -51,4 +51,6 @@ public interface CommissionService extends IService<Commission> {
List<Commission> addCommissionBatch(List<CommissionAddRequest> customerAddRequestList);
Boolean addToExpected(AddToExpectedCommissionRequest addToExpectedCommissionRequest);
int updateStatusBatchById(List<Commission> existingCommissions);
}
......@@ -15,6 +15,7 @@ import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.component.CommissionAsyncService;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*;
......@@ -210,11 +211,11 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
BigDecimal amount = commission.getAmount();
BigDecimal requestAmount = commissionUpdateRequest.getAmount();
// 1. 执行主更新事务(这个方法将在当前事务中执行)
// 计算当前来佣比例
BigDecimal currentCommissionRatio = this.calculateCurrentCommissionRatio(
commissionUpdateRequest.getAmount(),
commissionUpdateRequest.getPremium(),
commission.getPremium(),
requestAmount,
commissionUpdateRequest.getCurrency(),
commissionUpdateRequest.getExchangeRate());
// 获取当前登录用户
......@@ -261,18 +262,14 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
log.error("来佣业务id不能为空:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "来佣业务id不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getPremium())) {
log.error("保费不能为空:{}", commissionUpdateRequest.getPremium());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保费不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getAmount())) {
log.error("当前入账金额不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前入账金额不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getExchangeRate())) {
log.error("当前结算汇率不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空");
}
// if (ObjectUtils.isEmpty(commissionUpdateRequest.getAmount())) {
// log.error("当前入账金额不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
// throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前入账金额不能为空");
// }
// if (ObjectUtils.isEmpty(commissionUpdateRequest.getExchangeRate())) {
// log.error("当前结算汇率不能为空,来佣业务id:{}", commissionUpdateRequest.getCommissionBizId());
// throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空");
// }
}
......@@ -570,9 +567,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId));
}
public BigDecimal calculateCurrentCommissionRatio(BigDecimal amount, String premium, String exchangeRate) {
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, String exchangeRate, String currency) {
if (ObjectUtils.isEmpty(premium)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保费不能为空");
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单保费不能为空");
}
if (ObjectUtils.isEmpty(amount)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前入账金额不能为空");
......@@ -677,6 +674,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
log.warn("新增入账:未查询到预计来佣记录, policyNo: {}, commissionPeriod: {}, commissionName: {}, currency: {}",
request.getPolicyNo(), request.getCommissionPeriod(), request.getCommissionName(), request.getCurrency());
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
}
commissionList.add(commission);
......@@ -750,6 +748,11 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return commissionExpectedService.save(expected);
}
@Override
public int updateStatusBatchById(List<Commission> existingCommissions) {
return this.baseMapper.updateStatusBatchById(existingCommissions);
}
/**
* 查询列表
*
......
......@@ -167,7 +167,7 @@ public class CommissionVO implements Serializable {
/**
* 比对状态
*/
@Schema(description = "比对状态 0=未比对 1=比对成功 2=比对失败 字典值: csf_commission_status")
@Schema(description = "比对状态 0=未比对 1=比对成功 2=比对失败 3=未匹配到预计入账记录 字典值: csf_commission_status")
private String commissionStatus;
/**
......
......@@ -48,6 +48,22 @@
updater_id,create_time,update_time
</sql>
<update id="updateStatusBatchById">
UPDATE commission
<set>
status = CASE id
<foreach collection="list" item="item">
WHEN #{item.id} THEN #{item.status}
</foreach>
END,
update_time = NOW()
</set>
WHERE id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
<select id="queryCommissionBindPolicyBrokerList"
resultType="com.yd.csf.service.dto.CommissionBindPolicyBrokerDto">
select c.*,p.*,pb.*
......
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