Commit dfc546dc by zhangxingmin

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

parents 9e19f051 bedd41e8
......@@ -119,22 +119,25 @@ public class ApiCommissionController {
.map(CommissionExcelDTO::getPolicyNo2)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
List<Policy> policies = policyService.lambdaQuery()
.in(Policy::getPolicyNo, policyNos)
.list();
Set<String> existingPolicyNos = policies.stream().map(Policy::getPolicyNo).collect(Collectors.toSet());
StringBuilder errorMsg = new StringBuilder();
for (CommissionExcelDTO excelDTO : dataList) {
if (StringUtils.isNotBlank(excelDTO.getPolicyNo())) {
if (!existingPolicyNos.contains(excelDTO.getPolicyNo())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行保单不存在");
if (ObjectUtils.isNotEmpty(policyNos)) {
List<Policy> policies = policyService.lambdaQuery()
.in(Policy::getPolicyNo, policyNos)
.list();
Set<String> existingPolicyNos = policies.stream().map(Policy::getPolicyNo).collect(Collectors.toSet());
StringBuilder errorMsg = new StringBuilder();
for (CommissionExcelDTO excelDTO : dataList) {
if (StringUtils.isNotBlank(excelDTO.getPolicyNo())) {
if (!existingPolicyNos.contains(excelDTO.getPolicyNo())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行保单不存在");
}
}
}
}
if (StringUtils.isNotBlank(errorMsg)) {
errorMsg.append("\n请确认保单中心是否存在该保单,若不存在请先添加");
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), errorMsg.toString());
if (StringUtils.isNotBlank(errorMsg)) {
errorMsg.append("\n请确认保单中心是否存在该保单,若不存在请先添加");
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), errorMsg.toString());
}
}
// 获取当前登录用户的ID
......@@ -197,12 +200,16 @@ public class ApiCommissionController {
}
if ("关联保单应收单".equals(excelDTO.getCommissionBizType())) {
if (StringUtils.isBlank(excelDTO.getPolicyNo())) {
if (StringUtils.isBlank(excelDTO.getPolicyNo2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 保单号不能为空");
}
if (ObjectUtils.isEmpty(excelDTO.getExchangeRate2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行关联保单应收单, 结算汇率不能为空");
}
} else {
if (StringUtils.isBlank(excelDTO.getReconciliationCompany2())) {
errorMsg.append("第").append(dataList.indexOf(excelDTO) + 1).append("行, 非关联保单应收单, 对账公司不能为空");
}
}
}
if (errorMsg.length() > 0) {
......
......@@ -534,12 +534,6 @@ public class ApiPolicyFollowController {
if (changePolicyFollowStatusRequest == null || StringUtils.isBlank(changePolicyFollowStatusRequest.getPolicyBizId())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "policyBizId不能为空");
}
if (ObjectUtils.isEmpty(changePolicyFollowStatusRequest.getEffectiveDate())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "生效日期不能为空");
}
if (ObjectUtils.isEmpty(changePolicyFollowStatusRequest.getUnderwritingDate())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "核保日期不能为空");
}
String policyBizId = changePolicyFollowStatusRequest.getPolicyBizId();
PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId);
......@@ -550,6 +544,12 @@ public class ApiPolicyFollowController {
PolicyFollowStatusEnum currentStatusEnum = PolicyFollowStatusEnum.getEnumByValue(changePolicyFollowStatusRequest.getStatus());
// 修改为生效时需要校验、同步预计发佣
if (PolicyFollowStatusEnum.EFFECTIVE.equals(currentStatusEnum)) {
if (ObjectUtils.isEmpty(changePolicyFollowStatusRequest.getEffectiveDate())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "修改为生效状态时,生效日期不能为空");
}
if (ObjectUtils.isEmpty(changePolicyFollowStatusRequest.getUnderwritingDate())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "修改为生效状态时,核保日期不能为空");
}
String productLaunchBizId = policyFollow.getProductLaunchBizId();
// 校验产品是否维护预计来佣数据
if (ObjectUtils.isEmpty(productLaunchBizId)) {
......
......@@ -25,9 +25,6 @@ public class CommissionExcelDTO {
@ExcelProperty("保费")
private String premium;
@ExcelProperty("对账公司")
private String reconciliationCompany;
@ExcelProperty("当前来佣期数")
private Integer commissionPeriod;
......@@ -76,6 +73,9 @@ public class CommissionExcelDTO {
@ExcelProperty("结算汇率(实)")
private BigDecimal exchangeRate2;
@ExcelProperty("对账公司")
private String reconciliationCompany2;
/**
* 数据转换
......@@ -94,6 +94,7 @@ public class CommissionExcelDTO {
entity.setCurrency(CurrencyEnum.getEnumByItemLabel(data.getCurrency2()));
entity.setExchangeRate(data.getExchangeRate2());
entity.setCommissionDate(data.getCommissionDate2());
entity.setReconciliationCompany(data.getReconciliationCompany2());
entity.setRemark(data.getRemark());
entity.setStatus(null);
entity.setCreatorId(loginUserId);
......@@ -113,7 +114,7 @@ public class CommissionExcelDTO {
entity.setPolicyNo(data.getPolicyNo());
entity.setPremium(data.getPremium());
entity.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode()));
entity.setReconciliationCompany(data.getReconciliationCompany());
entity.setReconciliationCompany(data.getReconciliationCompany2());
entity.setCommissionPeriod(data.getCommissionPeriod());
entity.setTotalPeriod(data.getTotalPeriod());
entity.setCommissionName(data.getCommissionName());
......@@ -142,7 +143,7 @@ public class CommissionExcelDTO {
// 字段映射
entity.setPolicyNo(data.getPolicyNo());
entity.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
entity.setReconciliationCompany(data.getReconciliationCompany());
entity.setReconciliationCompany(data.getReconciliationCompany2());
entity.setCommissionPeriod(data.getCommissionPeriod());
entity.setTotalPeriod(data.getTotalPeriod());
entity.setCommissionName(data.getCommissionName());
......
......@@ -54,6 +54,11 @@ public class Commission implements Serializable {
private String premium;
/**
* 保单币种
*/
private String policyCurrency;
/**
* 保险公司 id
*/
private String insuranceCompanyBizId;
......
......@@ -54,6 +54,8 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
Boolean uploadAttachment(AttachmentUploadRequest attachmentUploadRequest);
String queryReconciliationCompanyByFeign(String reconciliationCompanyBizId);
String getNextStatus(PolicyFollowStatusEnum policyFollowStatusEnum);
String getCurrencyValue(String currency);
......
......@@ -486,7 +486,7 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
if (effectiveDate == null) {
throw new BusinessException("保单生效日期不能为空");
}
Object paymentTerm = policy.getPaymentTerm();
String paymentTerm = Convert.toStr(policy.getPaymentTerm());
if (paymentTerm == null) {
throw new BusinessException("保单供款年期不能为空");
}
......@@ -496,21 +496,23 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
if (StringUtils.isNotBlank(productLaunchBizId)) {
List<ApiExpectedSpeciesListResponse> expectedSpeciesList = queryExpectedSpeciesByFeign(productLaunchBizId);
log.info("productLaunchBizId:{}, 查询到的佣金规格列表:{}", productLaunchBizId, expectedSpeciesList);
List<CommissionExpected> commissionExpectedList = new ArrayList<>();
if (CollUtil.isNotEmpty(expectedSpeciesList)) {
// 计算佣金总期数 list 中 endPeriod最大值
Integer maxEndPeriod = expectedSpeciesList.stream()
.map(item -> Convert.toInt(item.getEndPeriod()))
.max(Integer::compareTo)
.orElse(0);
// 根据供款年期匹配规格
List<ApiExpectedSpeciesListResponse> collect = expectedSpeciesList.stream()
.filter(i -> paymentTerm.equals(i.getPaymentTerm()))
.collect(Collectors.toList());
if (ObjectUtils.isEmpty(collect)) {
throw new BusinessException(ResultCode.FAIL.getCode(), "未查询到对应供款年期的佣金规格");
}
// 计算佣金总期数 list 中 endPeriod最大值
Integer maxEndPeriod = collect.stream()
.map(item -> Convert.toInt(item.getEndPeriod()))
.max(Integer::compareTo)
.orElse(0);
for (ApiExpectedSpeciesListResponse item : collect) {
CommissionExpected commissionExpected = new CommissionExpected();
commissionExpected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
......@@ -565,10 +567,12 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
apiExpectedSpeciesListRequest.setProductLaunchBizId(productLaunchBizId);
Result<List<ApiExpectedSpeciesListResponse>> result = apiExpectedSpeciesFeignClient.list(apiExpectedSpeciesListRequest);
if (ObjectUtils.isNotEmpty(result.getData())) {
if (result != null && result.getCode() == 200) {
return result.getData();
} else {
log.error("查询预计出佣规格失败: productLaunchBizId={}", productLaunchBizId);
throw new BusinessException(ResultCode.FAIL.getCode(), "查询预计出佣规格失败");
}
return Collections.emptyList();
}
@Override
......
......@@ -25,6 +25,8 @@ import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.CommissionMapper;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import com.yd.insurance.base.feign.client.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyFeignClient;
import com.yd.insurance.base.feign.request.insurancereconciliationcompany.ApiInsuranceReconciliationCompanyPageRequest;
import com.yd.user.feign.client.sysdict.ApiSysDictFeignClient;
import com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse;
import lombok.extern.slf4j.Slf4j;
......@@ -81,6 +83,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private ReceivableService receivableService;
@Autowired
private ApiSysDictFeignClient apiSysDictFeignClient;
@Resource
private ApiInsuranceReconciliationCompanyFeignClient apiInsuranceReconciliationCompanyFeignClient;
@Override
......@@ -240,6 +244,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
.in(CommissionExpected::getPolicyNo, policyNoSet)
.select(CommissionExpected::getCommissionExpectedBizId,
CommissionExpected::getPolicyNo,
CommissionExpected::getCommissionBizType,
CommissionExpected::getReceivableNo,
CommissionExpected::getCommissionPeriod,
CommissionExpected::getTotalPeriod,
......@@ -249,13 +254,25 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
CommissionExpected::getStatus)
.list();
// 3.查询对账公司列表
Set<String> reconciliationCompanySet = commissionList.stream()
.map(Commission::getReconciliationCompany)
.filter(Objects::nonNull).collect(Collectors.toSet());
List<Map<String, Object>> reconciliationCompanyList = Collections.emptyList();
if (!reconciliationCompanySet.isEmpty()) {
reconciliationCompanyList = queryReconciliationCompanyListByFeign();
}
// 填充信息
commissionList.forEach(commission -> {
for (Commission commission : commissionList) {
Policy policy = policyMap.get(commission.getPolicyNo());
if (policy != null) {
// 填充保费、产品名称、保险公司、对账公司
commission.setPremium(String.valueOf(policy.getPaymentPremium()));
commission.setCurrency(policy.getCurrency());
commission.setPolicyCurrency(policy.getCurrency());
commission.setProductLaunchBizId(policy.getProductLaunchBizId());
commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commission.setReconciliationCompany(policy.getReconciliationCompany());
......@@ -275,9 +292,52 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
// 设置对账公司信息
if (!reconciliationCompanyList.isEmpty()) {
setReconciliationCompanyInfo(commission, reconciliationCompanyList);
}
// 计算来佣金额(港币)
commission.setHkdAmount(calculateHKDAmount(commission.getAmount(), commission.getExchangeRate(), commission.getCurrency()));
});
}
}
private void setReconciliationCompanyInfo(Commission commission, List<Map<String, Object>> reconciliationCompanyList) {
for (Map<String, Object> map : reconciliationCompanyList) {
String name = (String) map.get("name");
if (name.contains(commission.getReconciliationCompany())) {
commission.setReconciliationCompany(Convert.toStr(map.get("name")));
commission.setReconciliationCompanyBizId(Convert.toStr(map.get("reconciliationCompanyBizId")));
commission.setReconciliationCompanyCode(Convert.toStr(map.get("code")));
break;
}
}
}
public List<Map<String, Object>> queryReconciliationCompanyListByFeign() {
ApiInsuranceReconciliationCompanyPageRequest reconciliationCompanyPageRequest = new ApiInsuranceReconciliationCompanyPageRequest();
reconciliationCompanyPageRequest.setPageNo(1);
reconciliationCompanyPageRequest.setPageSize(999);
Result iPageResult = apiInsuranceReconciliationCompanyFeignClient.page(reconciliationCompanyPageRequest);
// 解析响应获取对账公司编码
if (iPageResult != null && iPageResult.getCode() == 200) {
try {
// Feign 返回的泛型会被反序列化为 LinkedHashMap,需要手动提取
Object data = iPageResult.getData();
if (data instanceof Map) {
Map<String, Object> dataMap = (Map<String, Object>) data;
Object recordsObj = dataMap.get("records");
if (recordsObj instanceof List) {
List<Map<String, Object>> records = (List<Map<String, Object>>) recordsObj;
return records;
}
}
} catch (Exception e) {
log.error("解析对账公司响应失败: {}", e.getMessage(), e);
}
}
return Collections.emptyList();
}
private CommissionExpected findExpectedFromList(Commission commission, List<CommissionExpected> commissionExpectedList) {
......@@ -653,7 +713,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return BigDecimal.valueOf(1);
}
Result<List<GetDictItemListByDictTypeResponse>> result = apiSysDictFeignClient.getDictItemListByDictType("csf_exchange_rate_hkd");
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(result.getData())) {
if (CollectionUtils.isNotEmpty(result.getData())) {
for (GetDictItemListByDictTypeResponse dictItem : result.getData()) {
if (StringUtils.equalsIgnoreCase(dictItem.getItemLabel(), currency)) {
return new BigDecimal(dictItem.getItemValue());
......@@ -777,6 +837,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commission.setPremium(Convert.toStr(policy.getPaymentPremium()));
commission.setCurrency(policy.getCurrency());
commission.setPolicyCurrency(policy.getCurrency());
} else {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo());
}
......@@ -910,6 +971,16 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
CommissionExpected expected = new CommissionExpected();
BeanUtils.copyProperties(commission, expected, "id", "remark");
expected.setCommissionExpectedBizId(RandomStringGenerator.generateBizId16("commission_expected"));
if (ObjectUtils.isEmpty(commission.getReconciliationCompanyCode())) {
if (ObjectUtils.isEmpty(commission.getReconciliationCompanyBizId())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "来佣记录未关联对账公司");
}
// 调用对账公司 feignclient,查询对账公司编码
String reconciliationCompanyCode = policyFollowService.queryReconciliationCompanyByFeign(commission.getReconciliationCompanyBizId());
expected.setReconciliationCompanyCode(reconciliationCompanyCode);
commission.setReconciliationCompanyCode(reconciliationCompanyCode);
}
// 生成应收单编号
expected.setReceivableNo(receivableService.generateReceivableNo(
commission.getCommissionBizType(),
......@@ -937,13 +1008,21 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
.set(Commission::getCommissionExpectedBizId, expected.getCommissionExpectedBizId())
.set(Commission::getReceivableNo, expected.getReceivableNo())
.set(Commission::getStatus, CommissionStatusEnum.COMPARE_SUCCESS.getItemValue())
.set(Commission::getRemark, null)
.set(Commission::getStatusDesc, expected.getStatusDesc())
.set(Commission::getRemark, expected.getStatusDesc())
.eq(Commission::getId, commission.getId())
.update();
return true;
}
private String queryReconciliationCompany(String insuranceCompanyBizId) {
if (ObjectUtils.isNotEmpty(insuranceCompanyBizId)) {
}
return null;
}
@Override
public int updateStatusBatchById(List<Commission> existingCommissions) {
return this.baseMapper.updateStatusBatchById(existingCommissions);
......
......@@ -499,41 +499,8 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
policy.setReconciliationCompany(productInfo.getReconciliationCompany());
policy.setReconciliationCompanyBizId(productInfo.getReconciliationCompanyBizId());
String reconciliationCompanyCode = null;
// 调用对账公司 feignclient,查询对账公司编码
ApiInsuranceReconciliationCompanyPageRequest reconciliationCompanyPageRequest = new ApiInsuranceReconciliationCompanyPageRequest();
reconciliationCompanyPageRequest.setPageNo(1);
reconciliationCompanyPageRequest.setPageSize(999);
Result iPageResult = apiInsuranceReconciliationCompanyFeignClient.page(reconciliationCompanyPageRequest);
// 解析响应获取对账公司编码
if (iPageResult != null && iPageResult.getCode() == 200) {
try {
// Feign 返回的泛型会被反序列化为 LinkedHashMap,需要手动提取
Object data = iPageResult.getData();
if (data instanceof Map) {
Map<String, Object> dataMap = (Map<String, Object>) data;
Object recordsObj = dataMap.get("records");
if (recordsObj instanceof List) {
List<Map<String, Object>> records = (List<Map<String, Object>>) recordsObj;
// 遍历分页结果,找到匹配的对账公司
String targetBizId = policy.getReconciliationCompanyBizId();
for (Map<String, Object> record : records) {
String recordBizId = (String) record.get("reconciliationCompanyBizId");
if (targetBizId.equals(recordBizId)) {
// 获取对账公司编码
reconciliationCompanyCode = (String) record.get("code");
log.info("从对账公司服务获取编码: reconciliationCompanyBizId={}, code={}",
targetBizId, reconciliationCompanyCode);
break; // 找到后跳出循环
}
}
}
}
} catch (Exception e) {
log.error("解析对账公司响应失败: {}", e.getMessage(), e);
}
}
String reconciliationCompanyCode = queryReconciliationCompanyByFeign(policy.getReconciliationCompanyBizId());
// 如果仍然没有获取到编码,抛异常
if (StringUtils.isBlank(reconciliationCompanyCode)) {
......@@ -570,6 +537,43 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return true;
}
/**
* 调用对账公司 feignclient,查询对账公司编码
*/
@Override
public String queryReconciliationCompanyByFeign(String reconciliationCompanyBizId) {
ApiInsuranceReconciliationCompanyPageRequest reconciliationCompanyPageRequest = new ApiInsuranceReconciliationCompanyPageRequest();
reconciliationCompanyPageRequest.setPageNo(1);
reconciliationCompanyPageRequest.setPageSize(999);
Result iPageResult = apiInsuranceReconciliationCompanyFeignClient.page(reconciliationCompanyPageRequest);
// 解析响应获取对账公司编码
if (iPageResult != null && iPageResult.getCode() == 200) {
try {
// Feign 返回的泛型会被反序列化为 LinkedHashMap,需要手动提取
Object data = iPageResult.getData();
if (data instanceof Map) {
Map<String, Object> dataMap = (Map<String, Object>) data;
Object recordsObj = dataMap.get("records");
if (recordsObj instanceof List) {
List<Map<String, Object>> records = (List<Map<String, Object>>) recordsObj;
// 遍历分页结果,找到匹配的对账公司
for (Map<String, Object> record : records) {
String recordBizId = (String) record.get("reconciliationCompanyBizId");
if (reconciliationCompanyBizId.equals(recordBizId)) {
// 获取对账公司编码
return (String) record.get("code");
}
}
}
}
} catch (Exception e) {
log.error("解析对账公司响应失败: {}", e.getMessage(), e);
}
}
return null;
}
@Override
public String getNextStatus(PolicyFollowStatusEnum policyFollowStatusEnum) {
// 根据当前状态返回可能的下一步状态
......
......@@ -50,6 +50,12 @@ public class CommissionVO implements Serializable {
private String policyNo;
/**
* 保单币种
*/
@Schema(description = "保单币种")
private String policyCurrency;
/**
* 期交保费
*/
@Schema(description = "期交保费")
......
......@@ -12,6 +12,7 @@
<result property="commissionBizType" column="commission_biz_type" />
<result property="policyNo" column="policy_no" />
<result property="premium" column="premium" />
<result property="policyCurrency" column="policy_currency" />
<result property="insuranceCompanyBizId" column="insurance_company_biz_id" />
<result property="productLaunchBizId" column="product_launch_biz_id" />
<result property="reconciliationCompany" column="reconciliation_company" />
......@@ -39,7 +40,7 @@
</resultMap>
<sql id="Base_Column_List">
id,receivable_no,commission_biz_id,reconciliation_year_month,commission_biz_type,policy_no,premium,
id,receivable_no,commission_biz_id,reconciliation_year_month,commission_biz_type,policy_no,premium,policy_currency,
insurance_company_biz_id,product_launch_biz_id,
reconciliation_company,reconciliation_company_code,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,exchange_rate,amount,currency,
......
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