Commit 43a9f87c by zhangxingmin

Merge branch 'test' into test_zxm_lengjingqi

# Conflicts:
#	yd-csf-service/src/main/java/com/yd/csf/service/service/IAgentAccumulatedFycService.java
parents 22addbbe 84319ad9
...@@ -542,24 +542,25 @@ public class ApiCommissionController { ...@@ -542,24 +542,25 @@ public class ApiCommissionController {
/** /**
* 入账记录 * 入账记录
* *
* @param commissionQueryRequest * @param pageByCommissionexpectedBizIdRequest
* @param request * @param request
* @return * @return
*/ */
@PostMapping("/pageByCommissionexpectedBizId") @PostMapping("/pageByCommissionexpectedBizId")
@Operation(summary = "入账记录") @Operation(summary = "入账记录")
public Result<Page<CommissionVO>> pageByCommissionexpectedBizId(@RequestBody CommissionQueryRequest commissionQueryRequest, public Result<Page<CommissionVO>> pageByCommissionexpectedBizId(@RequestBody PageByCommissionexpectedBizIdRequest pageByCommissionexpectedBizIdRequest,
HttpServletRequest request) { HttpServletRequest request) {
if (ObjectUtils.isEmpty(commissionQueryRequest.getCommissionExpectedBizId()) && ObjectUtils.isEmpty(commissionQueryRequest.getReconciliationYearMonth())) { if (ObjectUtils.isEmpty(pageByCommissionexpectedBizIdRequest.getCommissionExpectedBizId()) && ObjectUtils.isEmpty(pageByCommissionexpectedBizIdRequest.getReconciliationYearMonth())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "commissionExpectedBizId、 reconciliationYearMonth 不能全部为空"); return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "commissionExpectedBizId、 reconciliationYearMonth 不能全部为空");
} }
long current = commissionQueryRequest.getPageNo(); long current = pageByCommissionexpectedBizIdRequest.getPageNo();
long size = commissionQueryRequest.getPageSize(); long size = pageByCommissionexpectedBizIdRequest.getPageSize();
// 查询列表数据 // 查询列表数据
QueryWrapper<Commission> queryWrapper = new QueryWrapper<>(); QueryWrapper<Commission> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(ObjectUtils.isNotEmpty(commissionQueryRequest.getCommissionExpectedBizId()),"commission_expected_biz_id", commissionQueryRequest.getCommissionExpectedBizId()); queryWrapper.eq(ObjectUtils.isNotEmpty(pageByCommissionexpectedBizIdRequest.getCommissionExpectedBizId()),"commission_expected_biz_id", pageByCommissionexpectedBizIdRequest.getCommissionExpectedBizId());
queryWrapper.eq(ObjectUtils.isNotEmpty(commissionQueryRequest.getReconciliationYearMonth()),"reconciliation_year_month", commissionQueryRequest.getReconciliationYearMonth()); queryWrapper.eq(ObjectUtils.isNotEmpty(pageByCommissionexpectedBizIdRequest.getReconciliationYearMonth()),"reconciliation_year_month", pageByCommissionexpectedBizIdRequest.getReconciliationYearMonth());
queryWrapper.like(StringUtils.isNotBlank(pageByCommissionexpectedBizIdRequest.getPolicyNo()), "policy_no", pageByCommissionexpectedBizIdRequest.getPolicyNo());
Page<Commission> commissionPage = commissionService.page(new Page<>(current, size), Page<Commission> commissionPage = commissionService.page(new Page<>(current, size),
queryWrapper); queryWrapper);
// 组装返回值 // 组装返回值
......
...@@ -113,6 +113,21 @@ public class ApiCommissionExpectedController { ...@@ -113,6 +113,21 @@ public class ApiCommissionExpectedController {
} }
/** /**
* 预计入账-修改状态
*
* @param commissionExpectedChangeStatusRequest
* @return
*/
@PostMapping("/change_status")
@Operation(summary = "预计入账-修改状态")
public Result<Boolean> changeStatus(@RequestBody CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest) {
if (commissionExpectedChangeStatusRequest == null || StringUtils.isBlank(commissionExpectedChangeStatusRequest.getCommissionExpectedBizId())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "commissionExpectedBizId不能为空");
}
return Result.success(commissionExpectedService.changeStatus(commissionExpectedChangeStatusRequest));
}
/**
* 根据 CommissionExpectedBizId 获取CommissionExpected(封装类) * 根据 CommissionExpectedBizId 获取CommissionExpected(封装类)
* *
* @param commissionExpectedBizId 预计入账业务id * @param commissionExpectedBizId 预计入账业务id
......
...@@ -579,21 +579,7 @@ public class ApiPolicyFollowController { ...@@ -579,21 +579,7 @@ public class ApiPolicyFollowController {
} }
// 修改逻辑 // 修改逻辑
try { policyFollowService.changePolicyFollowStatus(changePolicyFollowStatusRequest, policyFollow);
policyFollowService.changePolicyFollowStatus(changePolicyFollowStatusRequest, policyFollow);
} catch (DataIntegrityViolationException e) {
log.info("修改跟进状态失败:{}", e.getMessage());
// 判断是否为唯一索引冲突
String message = e.getMessage();
if (StringUtils.isNotBlank(message) && message.contains("idx_policy_no")) {
return Result.fail("保单号已存在,请勿重复添加");
} else {
return Result.fail("修改跟进状态失败");
}
} catch (Exception e) {
log.info("修改跟进状态失败:{}", e.getMessage());
return Result.fail("修改跟进状态失败");
}
// 修改为生效时需要同步预计发佣 // 修改为生效时需要同步预计发佣
if (PolicyFollowStatusEnum.EFFECTIVE.equals(currentStatusEnum)) { if (PolicyFollowStatusEnum.EFFECTIVE.equals(currentStatusEnum)) {
......
...@@ -38,6 +38,11 @@ public class ExecuteBillingDto { ...@@ -38,6 +38,11 @@ public class ExecuteBillingDto {
private Integer issueNumber; private Integer issueNumber;
/** /**
* 出账总期数(实际出账期数)
*/
private Integer paymentTerm;
/**
* 保单和转介人信息 * 保单和转介人信息
*/ */
private QueryPolicyAndBrokerDto policyAndBrokerDto; private QueryPolicyAndBrokerDto policyAndBrokerDto;
......
...@@ -30,6 +30,7 @@ import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneRespo ...@@ -30,6 +30,7 @@ import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneRespo
import com.yd.csf.service.dto.CommissionRuleBindingDto; import com.yd.csf.service.dto.CommissionRuleBindingDto;
import com.yd.csf.service.dto.QueryPolicyAndBrokerDto; import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import com.yd.csf.service.dto.QueryPolicyBrokerDto; import com.yd.csf.service.dto.QueryPolicyBrokerDto;
import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.enums.CurrencyEnum; import com.yd.csf.service.enums.CurrencyEnum;
import com.yd.csf.service.enums.FortuneStatusEnum; import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.helper.FeignResultHelper; import com.yd.csf.service.helper.FeignResultHelper;
...@@ -117,6 +118,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -117,6 +118,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Autowired @Autowired
private ApiCommissionConditionService apiCommissionConditionService; private ApiCommissionConditionService apiCommissionConditionService;
@Autowired
private IAgentAccumulatedFycService iAgentAccumulatedFycService;
@Autowired @Autowired
private ApiExpectedFortuneAsyncService apiExpectedFortuneAsyncService; private ApiExpectedFortuneAsyncService apiExpectedFortuneAsyncService;
...@@ -211,6 +214,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -211,6 +214,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
//根据保单号查询保单和转介人列表信息 //根据保单号查询保单和转介人列表信息
List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList = policyService.queryPolicyBrokerList(request.getPolicyNo()); List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList = policyService.queryPolicyBrokerList(request.getPolicyNo());
log.info("根据保单号查询保单和转介人列表信息======>,{}",JSON.toJSONString(queryPolicyAndBrokerDtoList));
if (CollectionUtils.isEmpty(queryPolicyAndBrokerDtoList)) { if (CollectionUtils.isEmpty(queryPolicyAndBrokerDtoList)) {
throw new BusinessException("保单和转介人信息不存在"); throw new BusinessException("保单和转介人信息不存在");
} }
...@@ -464,7 +468,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -464,7 +468,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
private void updateHkdAmountBatch(List<ExpectedFortune> expectedFortuneList, String policyCurrency, List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList) { public void updateHkdAmountBatch(List<ExpectedFortune> expectedFortuneList, String policyCurrency, List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList) {
log.info("------------------------开始计算默认结算汇率、港币金额----------------------"); log.info("------------------------开始计算默认结算汇率、港币金额----------------------");
...@@ -545,6 +549,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -545,6 +549,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
.name(brokerDto.getBrokerName()) .name(brokerDto.getBrokerName())
.policyAndBrokerDto(brokerDto) .policyAndBrokerDto(brokerDto)
.issueNumber(i) .issueNumber(i)
.paymentTerm(paymentTerm)
.build()); .build());
//收集计算销售佣金的转介人 //收集计算销售佣金的转介人
AlgorithmCollectResDto resDto = new AlgorithmCollectResDto(); AlgorithmCollectResDto resDto = new AlgorithmCollectResDto();
...@@ -566,6 +571,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -566,6 +571,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
.name(binding.getTargetName()) .name(binding.getTargetName())
.policyAndBrokerDto(brokerDto) .policyAndBrokerDto(brokerDto)
.issueNumber(i) .issueNumber(i)
.paymentTerm(paymentTerm)
.build()); .build());
//收集计算非销售佣金的转介人 //收集计算非销售佣金的转介人
AlgorithmCollectResDto resDto1 = new AlgorithmCollectResDto(); AlgorithmCollectResDto resDto1 = new AlgorithmCollectResDto();
...@@ -716,7 +722,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -716,7 +722,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//发佣期数 //发佣期数
.fortunePeriod(dto.getIssueNumber()) .fortunePeriod(dto.getIssueNumber())
//发佣总期数 //发佣总期数
.fortuneTotalPeriod(brokerDto.getPaymentTerm()) // .fortuneTotalPeriod(brokerDto.getPaymentTerm())
.fortuneTotalPeriod(dto.getPaymentTerm())
//发佣类型 TODO //发佣类型 TODO
// .fortuneType() // .fortuneType()
//发佣日期 保单生效日期 + 3个月 //发佣日期 保单生效日期 + 3个月
...@@ -791,7 +798,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -791,7 +798,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//发佣期数 //发佣期数
.fortunePeriod(dto.getIssueNumber()) .fortunePeriod(dto.getIssueNumber())
//发佣总期数 //发佣总期数
.fortuneTotalPeriod(brokerDto.getPaymentTerm()) // .fortuneTotalPeriod(brokerDto.getPaymentTerm())
.fortuneTotalPeriod(dto.getPaymentTerm())
//发佣类型 TODO //发佣类型 TODO
// .fortuneType() // .fortuneType()
//发佣日期 //发佣日期
...@@ -989,14 +997,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -989,14 +997,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
expectedFortune.setPayableNo(this.createPayableNo(expectedFortune.getFortuneBizType(), ++currentSeq)); expectedFortune.setPayableNo(this.createPayableNo(expectedFortune.getFortuneBizType(), ++currentSeq));
// 默认结算汇率 // 默认结算汇率
expectedFortune.setDefaultExchangeRate( expectedFortune.setDefaultExchangeRate(
queryExchangeRateByFeign(expectedFortune.getPolicyCurrency(), expectedFortune.getCurrency())); queryExchangeRateByFeign(expectedFortuneDto.getCurrency(), "HKD"));
// 计算港币金额 // 计算港币金额
expectedFortune.setHkdAmount(expectedFortune.getAmount().multiply(expectedFortune.getDefaultExchangeRate())); expectedFortune.setHkdAmount(expectedFortuneDto.getAmount().multiply(expectedFortune.getDefaultExchangeRate()));
// 已出帐金额、待出帐金额、已出帐比例、待出帐比例 // 已出帐金额、待出帐金额、已出帐比例、待出帐比例
expectedFortune.setPaidAmount(BigDecimal.ZERO); expectedFortune.setPaidAmount(BigDecimal.ZERO);
// 转介人比例默认100% // 转介人比例默认100%
expectedFortune.setBrokerRatio("100"); expectedFortune.setBrokerRatio("100");
expectedFortune.setUnpaidAmount(expectedFortune.getAmount()); expectedFortune.setUnpaidAmount(expectedFortune.getHkdAmount());
expectedFortune.setPaidRatio(BigDecimal.ZERO); expectedFortune.setPaidRatio(BigDecimal.ZERO);
expectedFortune.setUnpaidRatio(BigDecimal.valueOf(100)); expectedFortune.setUnpaidRatio(BigDecimal.valueOf(100));
fortuneList.add(expectedFortune); fortuneList.add(expectedFortune);
...@@ -1107,6 +1115,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -1107,6 +1115,14 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
public IPage<PayableReportVO> convertPayableReportVO(IPage<PayableReportVO> payableReportPage) { public IPage<PayableReportVO> convertPayableReportVO(IPage<PayableReportVO> payableReportPage) {
if (!CollectionUtils.isEmpty(payableReportPage.getRecords())) { if (!CollectionUtils.isEmpty(payableReportPage.getRecords())) {
List<String> brokerBizIdList = payableReportPage.getRecords().stream().map(PayableReportVO::getBrokerBizId).collect(Collectors.toList());
List<UserGradeDto> userGradeDtoList = new ArrayList<>();
if (!CollectionUtils.isEmpty(brokerBizIdList)) {
userGradeDtoList = iAgentAccumulatedFycService.queryUserGradeList(brokerBizIdList);
}
Map<String, UserGradeDto> userGradeMap = userGradeDtoList.stream()
.collect(Collectors.toMap(UserGradeDto::getClientUserBizId, Function.identity()));
List<String> policyNoList = payableReportPage.getRecords().stream().map(PayableReportVO::getPolicyNo).collect(Collectors.toList()); List<String> policyNoList = payableReportPage.getRecords().stream().map(PayableReportVO::getPolicyNo).collect(Collectors.toList());
List<Policy> policyList = new ArrayList<>(); List<Policy> policyList = new ArrayList<>();
List<PolicyFollow> policyFollowList = new ArrayList<>(); List<PolicyFollow> policyFollowList = new ArrayList<>();
...@@ -1125,8 +1141,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -1125,8 +1141,12 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
List<PayableReportVO> voList = payableReportPage.getRecords().stream().map(vo -> { List<PayableReportVO> voList = payableReportPage.getRecords().stream().map(vo -> {
Policy policy = policyMap.get(vo.getPolicyNo()); Policy policy = policyMap.get(vo.getPolicyNo());
PolicyFollow policyFollow= policyFollowMap.get(vo.getPolicyNo()); PolicyFollow policyFollow= policyFollowMap.get(vo.getPolicyNo());
UserGradeDto userGradeDto= userGradeMap.get(vo.getBrokerBizId());
vo.setCurrency(CurrencyEnum.toLabel(vo.getCurrency())); vo.setCurrency(CurrencyEnum.toLabel(vo.getCurrency()));
if (userGradeDto != null) {
vo.setBrokerGradeName(userGradeDto.getGradeName());
}
if (policy != null) { if (policy != null) {
vo.setPolicyCurrency(CurrencyEnum.toLabel(policy.getCurrency())); vo.setPolicyCurrency(CurrencyEnum.toLabel(policy.getCurrency()));
} }
...@@ -1299,12 +1319,13 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -1299,12 +1319,13 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// 默认结算汇率 // 默认结算汇率
updateExpectedFortune.setDefaultExchangeRate( updateExpectedFortune.setDefaultExchangeRate(
queryExchangeRateByFeign( queryExchangeRateByFeign(
expectedFortune.getPolicyCurrency(), updateExpectedFortune.getCurrency(),
updateExpectedFortune.getCurrency() "HKD"
)); ));
// 计算港币金额 // 计算港币金额
updateExpectedFortune.setHkdAmount(updateExpectedFortune.getAmount().multiply(updateExpectedFortune.getDefaultExchangeRate())); updateExpectedFortune.setHkdAmount(updateExpectedFortune.getAmount().multiply(updateExpectedFortune.getDefaultExchangeRate()));
// 更新待出账金额
updateExpectedFortune.setUnpaidAmount(updateExpectedFortune.getHkdAmount());
// 获取当前登录用户 // 获取当前登录用户
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser(); AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString(); String loginUserId = currentLoginUser.getId().toString();
......
...@@ -18,12 +18,12 @@ public class ExchangeUtils { ...@@ -18,12 +18,12 @@ public class ExchangeUtils {
if (fromAmount == null || percent == null) { if (fromAmount == null || percent == null) {
throw new IllegalArgumentException("fromAmount and percent must not be null"); throw new IllegalArgumentException("fromAmount and percent must not be null");
} }
BigDecimal rate = percent.divide(ONE_HUNDRED, DIVISION_SCALE, RoundingMode.HALF_UP); // BigDecimal rate = percent.divide(ONE_HUNDRED, DIVISION_SCALE, RoundingMode.HALF_UP);
BigDecimal target = fromAmount.multiply(rate); BigDecimal target = fromAmount.multiply(percent);
return target.setScale(SCALE, RoundingMode.HALF_UP); return target.setScale(SCALE, RoundingMode.HALF_UP);
} }
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(calculateTargetAmount(new BigDecimal(20102.8921), new BigDecimal(20.18))); System.out.println(calculateTargetAmount(new BigDecimal(20102.8921), new BigDecimal(0.12800000)));
} }
} }
\ No newline at end of file
...@@ -53,8 +53,13 @@ public class ApiSalarySplitSummaryPageDto { ...@@ -53,8 +53,13 @@ public class ApiSalarySplitSummaryPageDto {
*/ */
private String toCurrency; private String toCurrency;
// /**
// * 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改)
// */
// private BigDecimal exchangeRate;
/** /**
* 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改) * 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改)字符串 例:100%
*/ */
private BigDecimal exchangeRate; private BigDecimal exchangeRate;
......
...@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; ...@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.time.LocalDate;
@Data @Data
public class ExpectedFortuneUpdateRequest { public class ExpectedFortuneUpdateRequest {
...@@ -26,14 +26,14 @@ public class ExpectedFortuneUpdateRequest { ...@@ -26,14 +26,14 @@ public class ExpectedFortuneUpdateRequest {
*/ */
@Schema(description = "出账日 (估)") @Schema(description = "出账日 (估)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date payoutDate; private LocalDate payoutDate;
/** /**
* 出账日 (实) * 出账日 (实)
*/ */
@Schema(description = "出账日 (实)") @Schema(description = "出账日 (实)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
* 出账金额 * 出账金额
...@@ -66,6 +66,18 @@ public class ExpectedFortuneUpdateRequest { ...@@ -66,6 +66,18 @@ public class ExpectedFortuneUpdateRequest {
private String fortuneType; private String fortuneType;
/** /**
* 出账期数
*/
@Schema(description = "出账期数")
private Integer fortunePeriod;
/**
* 出账总期数
*/
@Schema(description = "出账总期数")
private Integer fortuneTotalPeriod;
/**
* 币种 * 币种
*/ */
@Schema(description = "币种") @Schema(description = "币种")
......
...@@ -96,6 +96,12 @@ public class ApiExpectedFortunePageResponse { ...@@ -96,6 +96,12 @@ public class ApiExpectedFortunePageResponse {
private String brokerBizId; private String brokerBizId;
/** /**
* 转介人等级名称
*/
@Schema(description = "转介人等级名称")
private String brokerGradeName;
/**
* 团队名称 * 团队名称
*/ */
@Schema(description = "团队名称") @Schema(description = "团队名称")
......
package com.yd.csf.service.dao; package com.yd.csf.service.dao;
import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.model.AgentAccumulatedFyc; import com.yd.csf.service.model.AgentAccumulatedFyc;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* <p> * <p>
...@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface AgentAccumulatedFycMapper extends BaseMapper<AgentAccumulatedFyc> { public interface AgentAccumulatedFycMapper extends BaseMapper<AgentAccumulatedFyc> {
List<UserGradeDto> queryUserGradeList(@Param("userBizIdList") List<String> userBizIdList);
} }
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class CommissionExpectedChangeStatusRequest implements Serializable {
/**
* 预计入账业务id
*/
@Schema(description = "预计入账业务id", requiredMode = Schema.RequiredMode.REQUIRED)
private String commissionExpectedBizId;
/**
* 入账状态
*/
@Schema(description = "入账状态 字典值: csf_expected_commission_status", requiredMode = Schema.RequiredMode.REQUIRED)
private String status;
/**
* 设置入账状态-修改理由
*/
@Schema(description = "设置入账状态-修改理由")
private String statusDesc;
private static final long serialVersionUID = 1L;
}
...@@ -5,6 +5,7 @@ import lombok.Data; ...@@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
@Data @Data
...@@ -97,7 +98,7 @@ public class FortuneAddRequest implements Serializable { ...@@ -97,7 +98,7 @@ public class FortuneAddRequest implements Serializable {
* 出账日期 * 出账日期
*/ */
@Schema(description = "出账日期", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "出账日期", requiredMode = Schema.RequiredMode.REQUIRED)
private Date payoutDate; private LocalDate payoutDate;
/** /**
* 出账备注 * 出账备注
......
package com.yd.csf.service.dto;
import com.yd.common.dto.PageDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class PageByCommissionexpectedBizIdRequest extends PageDto implements Serializable {
/**
* 预计入账 id
*/
@Schema(description = "预计入账 id")
private String commissionExpectedBizId;
/**
* 检核年月
*/
@Schema(description = "检核年月 格式: yyyy-MM")
private String reconciliationYearMonth;
/**
* 保单号
*/
@Schema(description = "保单号")
private String policyNo;
private static final long serialVersionUID = 1L;
}
package com.yd.csf.service.dto;
import lombok.Data;
@Data
public class UserGradeDto {
/**
* 客户端用户表唯一业务ID
*/
private String clientUserBizId;
/**
* 等级
*/
private String gradeCode;
/**
* 等级名称
*/
private String gradeName;
}
...@@ -170,7 +170,7 @@ public class Fortune implements Serializable { ...@@ -170,7 +170,7 @@ public class Fortune implements Serializable {
/** /**
* 实际出账日期 * 实际出账日期
*/ */
private Date actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
* 检核人 * 检核人
......
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,6 +4,7 @@ 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.dto.CommissionExpectedAddRequest; import com.yd.csf.service.dto.CommissionExpectedAddRequest;
import com.yd.csf.service.dto.CommissionExpectedChangeStatusRequest;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest; import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.dto.CommissionExpectedUpdateRequest; import com.yd.csf.service.dto.CommissionExpectedUpdateRequest;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
...@@ -81,4 +82,6 @@ public interface CommissionExpectedService extends IService<CommissionExpected> ...@@ -81,4 +82,6 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds); IPage<ReceivableReportVO> receivableReportPage(Page<ReceivableReportVO> page, List<Long> expectedIds);
void testExpectedCommission(String policyNo,String effectiveDate,String coolingOffEndDate) throws IOException; void testExpectedCommission(String policyNo,String effectiveDate,String coolingOffEndDate) throws IOException;
Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest);
} }
package com.yd.csf.service.service; package com.yd.csf.service.service;
import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.model.AgentAccumulatedFyc; import com.yd.csf.service.model.AgentAccumulatedFyc;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -17,6 +18,8 @@ public interface IAgentAccumulatedFycService extends IService<AgentAccumulatedFy ...@@ -17,6 +18,8 @@ public interface IAgentAccumulatedFycService extends IService<AgentAccumulatedFy
AgentAccumulatedFyc queryOne(String agentId); AgentAccumulatedFyc queryOne(String agentId);
List<UserGradeDto> queryUserGradeList(List<String> userBizIdList);
List<AgentAccumulatedFyc> queryList(List<String> agentIdList); List<AgentAccumulatedFyc> queryList(List<String> agentIdList);
List<AgentAccumulatedFyc> queryAll(); List<AgentAccumulatedFyc> queryAll();
......
package com.yd.csf.service.service.impl; package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.model.AgentAccumulatedFyc; import com.yd.csf.service.model.AgentAccumulatedFyc;
import com.yd.csf.service.dao.AgentAccumulatedFycMapper; import com.yd.csf.service.dao.AgentAccumulatedFycMapper;
import com.yd.csf.service.service.IAgentAccumulatedFycService; import com.yd.csf.service.service.IAgentAccumulatedFycService;
...@@ -43,4 +44,13 @@ public class AgentAccumulatedFycServiceImpl extends ServiceImpl<AgentAccumulated ...@@ -43,4 +44,13 @@ public class AgentAccumulatedFycServiceImpl extends ServiceImpl<AgentAccumulated
return this.baseMapper.selectList(null); return this.baseMapper.selectList(null);
} }
/**
* 根据客户端用户业务ID列表查询对应的等级列表
* @return
*/
@Override
public List<UserGradeDto> queryUserGradeList(List<String> userBizIdList) {
return this.baseMapper.queryUserGradeList(userBizIdList);
}
} }
...@@ -748,6 +748,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -748,6 +748,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
// 1. 生效日期独立验证(第一步) // 1. 生效日期独立验证(第一步)
Date effectiveDate = policy.getEffectiveDate(); Date effectiveDate = policy.getEffectiveDate();
List<ApiExpectedSpeciesListResponse> validDateList = filterAndCheck( List<ApiExpectedSpeciesListResponse> validDateList = filterAndCheck(
expectedSpeciesList, expectedSpeciesList,
i -> isEffective(i.getEffectiveStart(), i.getEffectiveEnd(), effectiveDate), i -> isEffective(i.getEffectiveStart(), i.getEffectiveEnd(), effectiveDate),
...@@ -758,8 +759,16 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -758,8 +759,16 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
return new MatchResult(Collections.emptyList(), unmatchedConditions); return new MatchResult(Collections.emptyList(), unmatchedConditions);
} }
if (validDateList.isEmpty()) { // 1. 出单经纪公司独立验证
return new MatchResult(Collections.emptyList(), Collections.emptyList()); String reconciliationCompanyBizId = policy.getReconciliationCompanyBizId();
validDateList = filterAndCheck(
validDateList,
i -> i.getReconciliationCompany().equals(reconciliationCompanyBizId),
unmatchedConditions,
"出单经纪公司[" + policy.getReconciliationCompany() + "]");
if (!unmatchedConditions.isEmpty()) {
return new MatchResult(Collections.emptyList(), unmatchedConditions);
} }
// 2. 获取第一个规格的条件模板 // 2. 获取第一个规格的条件模板
...@@ -870,7 +879,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -870,7 +879,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
private boolean isEffective(LocalDateTime effectiveStart, LocalDateTime effectiveEnd, Date effectiveDate) { private boolean isEffective(LocalDateTime effectiveStart, LocalDateTime effectiveEnd, Date effectiveDate) {
LocalDateTime effectiveDateLocal = effectiveDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); LocalDateTime effectiveDateLocal = effectiveDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
return effectiveDateLocal.isAfter(effectiveStart) && effectiveDateLocal.isBefore(effectiveEnd); return effectiveDateLocal.compareTo(effectiveStart) >= 0
&& effectiveDateLocal.compareTo(effectiveEnd) <= 0;
} }
/** /**
...@@ -900,12 +910,12 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -900,12 +910,12 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
ApiExpectedSpeciesListRequest apiExpectedSpeciesListRequest = new ApiExpectedSpeciesListRequest(); ApiExpectedSpeciesListRequest apiExpectedSpeciesListRequest = new ApiExpectedSpeciesListRequest();
apiExpectedSpeciesListRequest.setProductLaunchBizId(productLaunchBizId); apiExpectedSpeciesListRequest.setProductLaunchBizId(productLaunchBizId);
Result<List<ApiExpectedSpeciesListResponse>> result = apiExpectedSpeciesFeignClient.list(apiExpectedSpeciesListRequest); Result<List<ApiExpectedSpeciesListResponse>> result = apiExpectedSpeciesFeignClient.list(apiExpectedSpeciesListRequest);
log.info("查询预计佣规格queryExpectedSpeciesByFeign==========>,{}",JSON.toJSONString(result)); log.info("查询预计佣规格queryExpectedSpeciesByFeign==========>,{}",JSON.toJSONString(result));
if (result != null && result.getCode() == 200) { if (result != null && result.getCode() == 200) {
return result.getData(); return result.getData();
} else { } else {
log.error("查询预计佣规格失败: productLaunchBizId={}", productLaunchBizId); log.error("查询预计佣规格失败: productLaunchBizId={}", productLaunchBizId);
throw new BusinessException(ResultCode.FAIL.getCode(), "查询预计佣规格失败"); throw new BusinessException(ResultCode.FAIL.getCode(), "查询预计佣规格失败");
} }
} }
...@@ -1043,6 +1053,27 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -1043,6 +1053,27 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
} }
} }
@Override
public Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest) {
// 校验预计入账是否存在
CommissionExpected commissionExpected = getByBizId(commissionExpectedChangeStatusRequest.getCommissionExpectedBizId());
if (commissionExpected == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "预计入账不存在");
}
// 校验数据
if (StringUtils.isBlank(commissionExpectedChangeStatusRequest.getStatus())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "状态不能为空");
}
// 转换为实体类
CommissionExpected updateObj = new CommissionExpected();
BeanUtil.copyProperties(commissionExpectedChangeStatusRequest, updateObj);
updateObj.setId(commissionExpected.getId());
// 更新
return this.updateById(updateObj);
}
private Policy convertPolicy(PolicyFollow policyFollow,String effectiveDate,String coolingOffEndDate) { private Policy convertPolicy(PolicyFollow policyFollow,String effectiveDate,String coolingOffEndDate) {
Policy policy = new Policy(); Policy policy = new Policy();
BeanUtil.copyProperties(policyFollow, policy); BeanUtil.copyProperties(policyFollow, policy);
......
...@@ -6,20 +6,20 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -6,20 +6,20 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest; import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest;
import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse; import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.enums.CurrencyEnum; import com.yd.csf.service.enums.CurrencyEnum;
import com.yd.csf.service.model.ExpectedFortune; import com.yd.csf.service.model.ExpectedFortune;
import com.yd.csf.service.dao.ExpectedFortuneMapper; import com.yd.csf.service.dao.ExpectedFortuneMapper;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyFollow; import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.IConditionConfigService; import com.yd.csf.service.service.*;
import com.yd.csf.service.service.IExpectedFortuneService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO; import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.csf.service.vo.PayableReportVO; import com.yd.csf.service.vo.PayableReportVO;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
...@@ -46,6 +46,9 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -46,6 +46,9 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
@Resource @Resource
private IConditionConfigService iConditionConfigService; private IConditionConfigService iConditionConfigService;
@Autowired
private IAgentAccumulatedFycService iAgentAccumulatedFycService;
@Override @Override
public IPage<ApiExpectedFortunePageResponse> page(Page<ApiExpectedFortunePageResponse> page, public IPage<ApiExpectedFortunePageResponse> page(Page<ApiExpectedFortunePageResponse> page,
ApiExpectedFortunePageRequest request) { ApiExpectedFortunePageRequest request) {
...@@ -104,6 +107,7 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -104,6 +107,7 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
.collect(Collectors.toList()); .collect(Collectors.toList());
Map<String, String> brokerRatioMap = new HashMap<>(); Map<String, String> brokerRatioMap = new HashMap<>();
List<UserGradeDto> userGradeDtoList = new ArrayList<>();
if (CollUtil.isNotEmpty(brokerBizIds)) { if (CollUtil.isNotEmpty(brokerBizIds)) {
List<Map<String, Object>> ratioList = iConditionConfigService.selectBrokerRatioByBizIds(brokerBizIds); List<Map<String, Object>> ratioList = iConditionConfigService.selectBrokerRatioByBizIds(brokerBizIds);
brokerRatioMap = ratioList.stream() brokerRatioMap = ratioList.stream()
...@@ -113,7 +117,10 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -113,7 +117,10 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
map -> (String) map.get("conditional_value"), map -> (String) map.get("conditional_value"),
(v1, v2) -> v1 (v1, v2) -> v1
)); ));
userGradeDtoList = iAgentAccumulatedFycService.queryUserGradeList(brokerBizIds);
} }
Map<String, UserGradeDto> userGradeMap = userGradeDtoList.stream()
.collect(Collectors.toMap(UserGradeDto::getClientUserBizId, Function.identity()));
List<String> policyNos = expectedFortuneList.stream() List<String> policyNos = expectedFortuneList.stream()
.map(ExpectedFortune::getPolicyNo) .map(ExpectedFortune::getPolicyNo)
...@@ -141,6 +148,10 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -141,6 +148,10 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
Policy policy = policyMap.get(ef.getPolicyNo()); Policy policy = policyMap.get(ef.getPolicyNo());
PolicyFollow follow = policyFollowMap.get(ef.getPolicyNo()); PolicyFollow follow = policyFollowMap.get(ef.getPolicyNo());
UserGradeDto userGradeDto = userGradeMap.get(ef.getBrokerBizId());
if (userGradeDto != null) {
vo.setBrokerGradeName(userGradeDto.getGradeName());
}
if (policy != null) { if (policy != null) {
vo.setInsuranceCompany(policy.getInsuranceCompany()); vo.setInsuranceCompany(policy.getInsuranceCompany());
vo.setPremium(policy.getPaymentPremium()); vo.setPremium(policy.getPaymentPremium());
......
...@@ -306,7 +306,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -306,7 +306,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
f.setCurrentPaymentRatio(BigDecimal.valueOf(100)); f.setCurrentPaymentRatio(BigDecimal.valueOf(100));
} }
f.setStatus(FortuneStatusEnum.SENT.getItemValue()); f.setStatus(FortuneStatusEnum.SENT.getItemValue());
f.setActualPayoutDate(new Date()); // f.setActualPayoutDate(new Date());
f.setUpdaterId(loginUserId.toString()); f.setUpdaterId(loginUserId.toString());
f.setUpdateTime(new Date()); f.setUpdateTime(new Date());
}); });
......
...@@ -226,10 +226,6 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -226,10 +226,6 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
fortune.setUpdaterId(loginUserId); fortune.setUpdaterId(loginUserId);
fortune.setUpdateTime(new Date()); fortune.setUpdateTime(new Date());
// 更新实际出账日期
Date actualPayoutDate = new Date();
fortune.setActualPayoutDate(actualPayoutDate);
this.updateById(fortune); this.updateById(fortune);
} }
...@@ -349,6 +345,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -349,6 +345,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
// 校验发佣记录状态 // 校验发佣记录状态
StringBuilder validateMsg = new StringBuilder(); StringBuilder validateMsg = new StringBuilder();
for (Fortune fortune : fortuneList) { for (Fortune fortune : fortuneList) {
if (StringUtils.isNotBlank(fortune.getFortuneAccountBizId())) {
validateMsg.append(fortune.getPolicyNo()).append("-").append(fortune.getBroker()).append("已发薪资,不能重复生成薪资记录; ");
}
if (StringUtils.equals(fortune.getStatus(), FortuneStatusEnum.WAIT.getItemValue())) { if (StringUtils.equals(fortune.getStatus(), FortuneStatusEnum.WAIT.getItemValue())) {
validateMsg.append(fortune.getPolicyNo()).append("-").append(fortune.getBroker()).append("待出账状态不能直接改为'可出账, 检核完成',不能生成出账记录; "); validateMsg.append(fortune.getPolicyNo()).append("-").append(fortune.getBroker()).append("待出账状态不能直接改为'可出账, 检核完成',不能生成出账记录; ");
} }
...@@ -680,9 +679,18 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -680,9 +679,18 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
.map(FortuneAddRequest::getPolicyNo) .map(FortuneAddRequest::getPolicyNo)
.filter(StringUtils::isNotBlank).collect(Collectors.toSet()); .filter(StringUtils::isNotBlank).collect(Collectors.toSet());
// 查询保单号
Map<String, Policy> policyMap = new HashMap<>();
// 查询预计出账 // 查询预计出账
Map<String, ExpectedFortune> expectedFortuneMap = new HashMap<>(); Map<String, ExpectedFortune> expectedFortuneMap = new HashMap<>();
// 查询入账记录
Map<String, Commission> commissionByPolicyPeriod = new HashMap<>();
if (CollectionUtils.isNotEmpty(policyNoSet)) { if (CollectionUtils.isNotEmpty(policyNoSet)) {
// 查询保单号
List<Policy> policyList = policyService.lambdaQuery().in(Policy::getPolicyNo, policyNoSet).list();
policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity(), (oldValue, newValue) -> newValue));
// 查询预计出账
expectedFortuneMap = expectedFortuneService.lambdaQuery() expectedFortuneMap = expectedFortuneService.lambdaQuery()
.in(ExpectedFortune::getPolicyNo, policyNoSet) .in(ExpectedFortune::getPolicyNo, policyNoSet)
.list() .list()
...@@ -692,21 +700,19 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -692,21 +700,19 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
Function.identity(), Function.identity(),
(oldValue, newValue) -> newValue) (oldValue, newValue) -> newValue)
); );
} // 查询入账记录
// 查询入账记录 List<Commission> commissionList = commissionService.lambdaQuery().in(Commission::getPolicyNo, policyNoSet)
List<Commission> commissionList = commissionService.lambdaQuery().in(Commission::getPolicyNo, policyNoSet) .list();
.list(); if (CollectionUtils.isNotEmpty(commissionList)) {
Map<String, Commission> commissionByPolicyPeriod = new HashMap<>(); commissionByPolicyPeriod = commissionList.stream()
if (CollectionUtils.isNotEmpty(commissionList)) { .collect(Collectors.toMap(
commissionByPolicyPeriod = commissionList.stream() commission -> commissionService.buildPolicyPeriodKey(commission.getPolicyNo(), commission.getCommissionPeriod()),
.collect(Collectors.toMap( Function.identity(),
commission -> commissionService.buildPolicyPeriodKey(commission.getPolicyNo(), commission.getCommissionPeriod()), (oldValue, newValue) -> newValue // 遇到重复时使用新值
Function.identity(), ));
(oldValue, newValue) -> newValue // 遇到重复时使用新值 }
));
} }
List<Fortune> fortuneList = new ArrayList<>(); List<Fortune> fortuneList = new ArrayList<>();
List<ExpectedFortune> expectedFortuneUpdateList = new ArrayList<>(); List<ExpectedFortune> expectedFortuneUpdateList = new ArrayList<>();
for (FortuneAddRequest fortuneAddRequest : fortuneAddRequestList) { for (FortuneAddRequest fortuneAddRequest : fortuneAddRequestList) {
...@@ -721,6 +727,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -721,6 +727,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
fortune.setCurrentPaymentHkdAmount(fortune.getHkdAmount()); fortune.setCurrentPaymentHkdAmount(fortune.getHkdAmount());
if ("R".equals(fortuneAddRequest.getFortuneBizType())) { if ("R".equals(fortuneAddRequest.getFortuneBizType())) {
if (policyMap.get(fortuneAddRequest.getPolicyNo()) == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), fortuneAddRequest.getPolicyNo() + " 保单号不存在");
}
ExpectedFortune expectedFortune = expectedFortuneMap.get(fortuneAddRequest.getPolicyNo() + "_" + fortuneAddRequest.getFortunePeriod() + "_" + fortuneAddRequest.getFortuneType()); ExpectedFortune expectedFortune = expectedFortuneMap.get(fortuneAddRequest.getPolicyNo() + "_" + fortuneAddRequest.getFortunePeriod() + "_" + fortuneAddRequest.getFortuneType());
if (expectedFortune == null) { if (expectedFortune == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), fortuneAddRequest.getFortuneName() + " 预计出账不存在"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), fortuneAddRequest.getFortuneName() + " 预计出账不存在");
...@@ -770,6 +779,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -770,6 +779,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
ExpectedFortune updateObj = new ExpectedFortune(); ExpectedFortune updateObj = new ExpectedFortune();
updateObj.setId(expectedFortune.getId()); updateObj.setId(expectedFortune.getId());
updateObj.setHkdAmount(expectedFortune.getHkdAmount().add(hkdAmount)); updateObj.setHkdAmount(expectedFortune.getHkdAmount().add(hkdAmount));
updateObj.setUnpaidAmount(hkdAmount.add(expectedFortune.getUnpaidAmount()));
updateObj.setUnpaidRatio(updateObj.getUnpaidAmount().divide(updateObj.getHkdAmount(), 4, RoundingMode.HALF_UP));
// 根据预计出账币种计算 expectedFortune.getAmount() 字段 // 根据预计出账币种计算 expectedFortune.getAmount() 字段
BigDecimal originalAmount = fortune.getAmount(); // 原始币种金额 BigDecimal originalAmount = fortune.getAmount(); // 原始币种金额
......
...@@ -40,6 +40,7 @@ import org.apache.commons.lang3.ObjectUtils; ...@@ -40,6 +40,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -194,12 +195,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -194,12 +195,12 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
public Boolean updatePolicyFollowDto(PolicyFollowDto policyFollowDto) { public Boolean updatePolicyFollowDto(PolicyFollowDto policyFollowDto) {
// 校验参数 // 校验参数
if (StringUtils.isBlank(policyFollowDto.getPolicyBizId())) { if (StringUtils.isBlank(policyFollowDto.getPolicyBizId())) {
throw new BusinessException(ErrorCode.PARAMS_ERROR.getCode(), "policyBizId不能为空"); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
} }
String policyBizId = policyFollowDto.getPolicyBizId(); String policyBizId = policyFollowDto.getPolicyBizId();
PolicyFollow policyFollow = getByPolicyBizId(policyBizId); PolicyFollow policyFollow = getByPolicyBizId(policyBizId);
if (policyFollow == null) { if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), "新单跟进记录不存在"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "新单跟进记录不存在");
} }
// 复制属性,排除系统字段 // 复制属性,排除系统字段
...@@ -224,17 +225,31 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -224,17 +225,31 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policyFollow.setUpdaterId(loginUserId); policyFollow.setUpdaterId(loginUserId);
policyFollow.setUpdateTime(new Date()); policyFollow.setUpdateTime(new Date());
boolean result = updateById(policyFollow); try {
boolean result = updateById(policyFollow);
} catch (DataIntegrityViolationException e) {
log.info("修改跟进信息失败:{}", e.getMessage());
// 判断是否为唯一索引冲突
String message = e.getMessage();
if (StringUtils.isNotBlank(message) && message.contains("idx_policy_no")) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单号已存在,请勿重复添加");
} else {
throw new BusinessException(ResultCode.FAIL.getCode(), "修改跟进信息失败");
}
} catch (Exception e) {
log.info("修改跟进信息失败:{}", e.getMessage());
throw new BusinessException(ResultCode.FAIL.getCode(), "修改跟进信息失败");
}
// 如果保单号从空变为有值,更新关联的FNA状态为"签单完成" // 如果保单号从空变为有值,更新关联的FNA状态为"签单完成"
if (isPolicyNoUpdated && result) { if (isPolicyNoUpdated) {
fnaService.lambdaUpdate() fnaService.lambdaUpdate()
.eq(Fna::getFnaBizId, policyFollow.getFnaBizId()) .eq(Fna::getFnaBizId, policyFollow.getFnaBizId())
.set(Fna::getStatus, FnaStatusEnum.SIGNED_COMPLETED.getItemValue()) .set(Fna::getStatus, FnaStatusEnum.SIGNED_COMPLETED.getItemValue())
.update(); .update();
} }
return result; return true;
} }
private void setPolicyMailing(PolicyFollow policyFollow, PolicyMailing policyMailing) { private void setPolicyMailing(PolicyFollow policyFollow, PolicyMailing policyMailing) {
...@@ -518,7 +533,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -518,7 +533,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
// 更新保单状态为生效 // 更新保单状态为生效
policy.setStatus(PolicyStatusEnum.INFORCE.getItemValue()); policy.setStatus(PolicyStatusEnum.INFORCE.getItemValue());
// 手动映射不同名的字段 // 手动映射不同名的字段
policy.setPaymentPremium(policyFollow.getInitialPremium()); policy.setPaymentPremium(policyFollow.getEachIssuePremium());
policy.setCurrency(policyFollow.getPolicyCurrency()); policy.setCurrency(policyFollow.getPolicyCurrency());
policy.setPaymentTerm(policyFollow.getIssueNumber()); policy.setPaymentTerm(policyFollow.getIssueNumber());
policy.setTotalPaymentPremium(calculateTotalPaymentPremium(policy)); policy.setTotalPaymentPremium(calculateTotalPaymentPremium(policy));
......
...@@ -39,6 +39,9 @@ public class ExpectedFortuneExportDTO { ...@@ -39,6 +39,9 @@ public class ExpectedFortuneExportDTO {
@ExcelProperty("转介人名称") @ExcelProperty("转介人名称")
private String broker; private String broker;
@ExcelProperty("转介人等级")
private String brokerGradeName;
@ExcelProperty("团队名称") @ExcelProperty("团队名称")
private String team; private String team;
...@@ -138,6 +141,7 @@ public class ExpectedFortuneExportDTO { ...@@ -138,6 +141,7 @@ public class ExpectedFortuneExportDTO {
dto.setPaidRatio(vo.getPaidRatio()); dto.setPaidRatio(vo.getPaidRatio());
dto.setUnpaidRatio(vo.getUnpaidRatio()); dto.setUnpaidRatio(vo.getUnpaidRatio());
dto.setRemark(vo.getRemark()); dto.setRemark(vo.getRemark());
dto.setBrokerGradeName(vo.getBrokerGradeName());
return dto; return dto;
} }
......
...@@ -329,14 +329,16 @@ public class FortuneVO implements Serializable { ...@@ -329,14 +329,16 @@ public class FortuneVO implements Serializable {
} }
FortuneVO fortuneVO = new FortuneVO(); FortuneVO fortuneVO = new FortuneVO();
BeanUtils.copyProperties(fortune, fortuneVO); BeanUtils.copyProperties(fortune, fortuneVO);
// 计算已出账金额和待出账金额
fortuneVO.setFortunePaidAmount(fortune.getCurrentPaymentHkdAmount());
fortuneVO.setFortuneUnpaidAmount(NumberUtil.sub(fortune.getHkdAmount(), fortune.getCurrentPaymentHkdAmount()));
// 计算待出账比例 // 计算待出账比例
BigDecimal currentPaymentRatio = ObjectUtil.defaultIfNull(fortuneVO.getCurrentPaymentRatio(), BigDecimal.ZERO); BigDecimal currentPaymentRatio = NumberUtil
.div(fortune.getCurrentPaymentHkdAmount(), fortune.getHkdAmount(), 4)
.multiply(BigDecimal.valueOf(100));
fortuneVO.setCurrentPaymentRatio(currentPaymentRatio); fortuneVO.setCurrentPaymentRatio(currentPaymentRatio);
fortuneVO.setFortuneUnpaidRatio(BigDecimal.valueOf(100).subtract(currentPaymentRatio)); fortuneVO.setFortuneUnpaidRatio(BigDecimal.valueOf(100).subtract(currentPaymentRatio));
fortuneVO.setFortunePaidAmount(fortune.getCurrentPaymentHkdAmount());
fortuneVO.setFortuneUnpaidAmount(NumberUtil.sub(fortune.getHkdAmount(), fortune.getCurrentPaymentHkdAmount()));
fortuneVO.setCurrency(CurrencyEnum.toLabel(fortune.getCurrency())); fortuneVO.setCurrency(CurrencyEnum.toLabel(fortune.getCurrency()));
fortuneVO.setPolicyCurrency((CurrencyEnum.toLabel(fortune.getPolicyCurrency()))); fortuneVO.setPolicyCurrency((CurrencyEnum.toLabel(fortune.getPolicyCurrency())));
......
...@@ -3,7 +3,6 @@ package com.yd.csf.service.vo; ...@@ -3,7 +3,6 @@ package com.yd.csf.service.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; 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; import java.time.LocalDate;
...@@ -28,6 +27,18 @@ public class PayableReportVO { ...@@ -28,6 +27,18 @@ public class PayableReportVO {
private String broker; private String broker;
/** /**
* 转介人业务ID
*/
@Schema(description = "转介人业务ID")
private String brokerBizId;
/**
* 转介人等级名称
*/
@Schema(description = "转介人等级名称")
private String brokerGradeName;
/**
* 出账期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年) * 出账期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/ */
@Schema(description = "出账期数") @Schema(description = "出账期数")
......
...@@ -2,4 +2,21 @@ ...@@ -2,4 +2,21 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yd.csf.service.dao.AgentAccumulatedFycMapper"> <mapper namespace="com.yd.csf.service.dao.AgentAccumulatedFycMapper">
<select id="queryUserGradeList" resultType="com.yd.csf.service.dto.UserGradeDto">
select
aaf.agent_id as clientUserBizId,
mgc.grade_code as gradeCode,
mgc.grade_name as gradeName
from agent_accumulated_fyc aaf
left join member_grade_config mgc on aaf.current_grade_code = mgc.grade_code and mgc.is_deleted = 0
<where>
<if test="userBizIdList != null and userBizIdList.size > 0">
aaf.agent_id in
<foreach collection="userBizIdList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
and aaf.is_deleted = 0
</where>
</select>
</mapper> </mapper>
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
ce.commission_period as commissionPeriod, ce.commission_period as commissionPeriod,
MAX(ce.total_period) as totalPeriod, MAX(ce.total_period) as totalPeriod,
MAX(ce.commission_date) as commissionDate, MAX(ce.commission_date) as commissionDate,
ifnull(avg(ce.commission_ratio), 0) as commissionRatio, ifnull(sum(ce.commission_ratio), 0) as commissionRatio,
ifnull(sum(ce.amount), 0) as amount, ifnull(sum(ce.amount), 0) as amount,
MAX(ce.currency) as currency, MAX(ce.currency) as currency,
ifnull(sum(ce.expected_amount), 0) as hkdAmount, ifnull(sum(ce.expected_amount), 0) as hkdAmount,
......
...@@ -76,11 +76,12 @@ ...@@ -76,11 +76,12 @@
else 100 else 100
end as unpaidRatio, end as unpaidRatio,
MAX(first_broker.broker_name) as broker, MAX(first_broker.broker_name) as broker,
MAX(first_broker.broker_biz_id) as brokerBizId,
DATE_ADD(DATE_ADD(MAX(p.effective_date), INTERVAL 2 MONTH), INTERVAL (ef.fortune_period - 1) YEAR) as payoutDate DATE_ADD(DATE_ADD(MAX(p.effective_date), INTERVAL 2 MONTH), INTERVAL (ef.fortune_period - 1) YEAR) as payoutDate
from expected_fortune ef from expected_fortune ef
left join policy p on ef.policy_no = p.policy_no left join policy p on ef.policy_no = p.policy_no
left join ( left join (
SELECT pb1.policy_no, pb1.broker_name SELECT pb1.policy_no, pb1.broker_name,pb1.broker_biz_id
FROM policy_broker pb1 FROM policy_broker pb1
WHERE pb1.id = ( WHERE pb1.id = (
SELECT pb2.id SELECT pb2.id
...@@ -128,6 +129,7 @@ ...@@ -128,6 +129,7 @@
else 100 else 100
end as unpaidRatio, end as unpaidRatio,
ef.broker as broker, ef.broker as broker,
ef.broker_biz_id as brokerBizId,
ef.payout_date as payoutDate ef.payout_date as payoutDate
from expected_fortune ef from expected_fortune ef
left join policy p on ef.policy_no = p.policy_no left join policy p on ef.policy_no = p.policy_no
......
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