Commit 6f993f22 by jianan

生成预计发佣记录是查询出账币种、默认结算汇率2

parent 950aeb25
...@@ -15,11 +15,11 @@ import com.yd.csf.service.dto.QueryPolicyAndBrokerDto; ...@@ -15,11 +15,11 @@ import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import com.yd.csf.service.model.CommissionRuleBinding; import com.yd.csf.service.model.CommissionRuleBinding;
import com.yd.csf.service.model.ExpectedFortune; import com.yd.csf.service.model.ExpectedFortune;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO; import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.product.feign.response.announcementcommissionratio.ApiAnnouncementCommissionRatioListResponse;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map;
public interface ApiExpectedFortuneService { public interface ApiExpectedFortuneService {
Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request); Result<ApiGenerateExpectedFortuneResponse> generate(ApiGenerateExpectedFortuneRequest request);
...@@ -37,7 +37,8 @@ public interface ApiExpectedFortuneService { ...@@ -37,7 +37,8 @@ public interface ApiExpectedFortuneService {
@Async("asyncQueryExecutor") @Async("asyncQueryExecutor")
Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList, List<CommissionRuleBinding> commissionRuleBindingList,
String policyNo); String policyNo,
List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList);
/** /**
* 同步执行预计发佣生成 * 同步执行预计发佣生成
......
...@@ -2,9 +2,6 @@ package com.yd.csf.api.service.impl; ...@@ -2,9 +2,6 @@ package com.yd.csf.api.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.WriteSheet;
...@@ -32,6 +29,7 @@ import com.yd.csf.service.dto.CommissionRuleBindingDto; ...@@ -32,6 +29,7 @@ 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.enums.FortuneStatusEnum; import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.helper.FeignResultHelper;
import com.yd.csf.service.model.*; import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.vo.ExpectedFortuneExportDTO; import com.yd.csf.service.vo.ExpectedFortuneExportDTO;
...@@ -106,6 +104,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -106,6 +104,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
private CommissionExpectedService commissionExpectedService; private CommissionExpectedService commissionExpectedService;
@Resource @Resource
private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient; private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient;
@Resource
private FeignResultHelper feignResultHelper;
/** /**
* 生成预计发佣 * 生成预计发佣
...@@ -147,9 +147,23 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -147,9 +147,23 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
throw new BusinessException("绑定基本法数据不存在"); throw new BusinessException("绑定基本法数据不存在");
} }
//查询产品发佣配置,获取结算币种
QueryPolicyAndBrokerDto queryPolicyAndBrokerDto = queryPolicyAndBrokerDtoList.get(0);
ApiAnnouncementCommissionRatioListRequest announcementRatioListRequest = new ApiAnnouncementCommissionRatioListRequest();
announcementRatioListRequest.setProductLaunchBizId(queryPolicyAndBrokerDto.getPlanBizId());
announcementRatioListRequest.setEffectiveDate(Date.from(queryPolicyAndBrokerDto.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()));
announcementRatioListRequest.setPaymentTerm(String.valueOf(queryPolicyAndBrokerDto.getPaymentTerm()));
log.info("查询结算币种->保单号:{},入参request:{}", request.getPolicyNo(), JSON.toJSONString(announcementRatioListRequest));
List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList = feignResultHelper.extractListData(
apiAnnouncementCommissionRatioFeignClient.list(announcementRatioListRequest),
ApiAnnouncementCommissionRatioListResponse.class
);
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表 //遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
// 通过代理对象调用 // 通过代理对象调用
getSelf().execute(queryPolicyAndBrokerDtoList, commissionRuleBindingList, request.getPolicyNo()); getSelf().execute(queryPolicyAndBrokerDtoList, commissionRuleBindingList, request.getPolicyNo(), announcementRatioList);
return Result.success(null, "生成预计发佣正在处理....,稍后查看预计发佣列表"); return Result.success(null, "生成预计发佣正在处理....,稍后查看预计发佣列表");
} }
...@@ -193,8 +207,22 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -193,8 +207,22 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
// throw new BusinessException("绑定基本法数据不存在"); // throw new BusinessException("绑定基本法数据不存在");
// } // }
//查询产品发佣配置,获取结算币种
QueryPolicyAndBrokerDto queryPolicyAndBrokerDto = queryPolicyAndBrokerDtoList.get(0);
ApiAnnouncementCommissionRatioListRequest announcementRatioListRequest = new ApiAnnouncementCommissionRatioListRequest();
announcementRatioListRequest.setProductLaunchBizId(queryPolicyAndBrokerDto.getPlanBizId());
announcementRatioListRequest.setEffectiveDate(Date.from(queryPolicyAndBrokerDto.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()));
announcementRatioListRequest.setPaymentTerm(String.valueOf(queryPolicyAndBrokerDto.getPaymentTerm()));
log.info("查询结算币种->保单号:{},入参request:{}", request.getPolicyNo(), JSON.toJSONString(announcementRatioListRequest));
List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList = feignResultHelper.extractListData(
apiAnnouncementCommissionRatioFeignClient.list(announcementRatioListRequest),
ApiAnnouncementCommissionRatioListResponse.class
);
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行) //遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
executeSync(queryPolicyAndBrokerDtoList, request.getPolicyNo()); executeSync(queryPolicyAndBrokerDtoList, request.getPolicyNo(), announcementRatioList);
return Result.success(null, "生成预计发佣成功"); return Result.success(null, "生成预计发佣成功");
} }
...@@ -290,7 +318,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -290,7 +318,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Async("commonAsyncExecutor") @Async("commonAsyncExecutor")
public Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, public Result execute(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList, List<CommissionRuleBinding> commissionRuleBindingList,
String policyNo) { String policyNo,
List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList) {
// 使用编程式事务,确保异步方法内的事务一致性 // 使用编程式事务,确保异步方法内的事务一致性
return transactionTemplate.execute(status -> { return transactionTemplate.execute(status -> {
...@@ -322,7 +351,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -322,7 +351,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
List<ExpectedFortune> expectedFortuneList = updatePayableNoBatch(policyNo); List<ExpectedFortune> expectedFortuneList = updatePayableNoBatch(policyNo);
//默认结算汇率、港币金额 //默认结算汇率、港币金额
updateHkdAmountBatch(expectedFortuneList, queryPolicyAndBrokerDtoList.get(0)); String policyCurrency = queryPolicyAndBrokerDtoList.get(0).getCurrency();
updateHkdAmountBatch(expectedFortuneList, policyCurrency, announcementRatioList);
//执行成功完毕,也要销毁redis缓存 //执行成功完毕,也要销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo); redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo);
...@@ -351,35 +381,17 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -351,35 +381,17 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
}); });
} }
private void updateHkdAmountBatch(List<ExpectedFortune> expectedFortuneList, QueryPolicyAndBrokerDto queryPolicyAndBrokerDto) { private void updateHkdAmountBatch(List<ExpectedFortune> expectedFortuneList, String policyCurrency, List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList) {
log.info("------------------------开始计算默认结算汇率、港币金额----------------------"); log.info("------------------------开始计算默认结算汇率、港币金额----------------------");
//查询结算币种 if (!CollectionUtils.isEmpty(announcementRatioList)) {
ApiAnnouncementCommissionRatioListRequest request = new ApiAnnouncementCommissionRatioListRequest(); ApiAnnouncementCommissionRatioListResponse announcementRatio = announcementRatioList.get(0);
request.setProductLaunchBizId(queryPolicyAndBrokerDto.getPlanBizId()); String currency = announcementRatio.getCurrency();
//localDate转换为Date
request.setEffectiveDate(Date.from(queryPolicyAndBrokerDto.getEffectiveDate().atStartOfDay(ZoneId.systemDefault()).toInstant()));
request.setPaymentTerm(String.valueOf(queryPolicyAndBrokerDto.getPaymentTerm()));
Result<List<ApiAnnouncementCommissionRatioListResponse>> result = apiAnnouncementCommissionRatioFeignClient.list(request);
log.info("查询结算币种->入参request:{},出参result:{}", JSON.toJSONString(request), JSON.toJSONString(result));
if (result.getCode() == 200) {
// 使用 Map 来处理数据
Object data = result.getData();
// 将数据转换为JSONObject进行解析
JSONArray announcementRatioList = JSONUtil.parseArray(data);
//查询默认结算汇率
if (!announcementRatioList.isEmpty()) {
JSONObject announcementRatio = announcementRatioList.get(0, JSONObject.class);
String currency = announcementRatio.getStr("currency");
log.info("结算币种:{}", currency); log.info("结算币种:{}", currency);
BigDecimal exchangeRate = queryExchangeRateByFeign(queryPolicyAndBrokerDto.getCurrency(), currency); BigDecimal exchangeRate = queryExchangeRateByFeign(policyCurrency, currency);
log.info("结算汇率:{}", exchangeRate); log.info("结算汇率:{}", exchangeRate);
...@@ -393,11 +405,6 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -393,11 +405,6 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
iExpectedFortuneService.updateById(expectedFortune); iExpectedFortuneService.updateById(expectedFortune);
} }
} else {
log.error("查询结算币种失败,未查询到默认结算汇率->入参request:{},出参result:{}", JSON.toJSONString(request), JSON.toJSONString(result));
}
} else {
log.error("查询结算币种失败,入参request:{},出参result:{}", JSON.toJSONString(request), JSON.toJSONString(result));
} }
} }
...@@ -414,7 +421,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -414,7 +421,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
* @return * @return
*/ */
public Result executeSync(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, public Result executeSync(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
String policyNo) { String policyNo, List<ApiAnnouncementCommissionRatioListResponse> announcementRatioList) {
log.info("同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参queryPolicyAndBrokerDtoList:{}",JSON.toJSONString(queryPolicyAndBrokerDtoList)); log.info("同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参queryPolicyAndBrokerDtoList:{}",JSON.toJSONString(queryPolicyAndBrokerDtoList));
log.info("同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参policyNo:{}",policyNo); log.info("同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表->入参policyNo:{}",policyNo);
// 使用编程式事务,确保方法内的事务一致性 // 使用编程式事务,确保方法内的事务一致性
...@@ -450,9 +457,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService ...@@ -450,9 +457,9 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
//批量设置应付款编号 //批量设置应付款编号
List<ExpectedFortune> expectedFortuneList = updatePayableNoBatch(policyNo); List<ExpectedFortune> expectedFortuneList = updatePayableNoBatch(policyNo);
//默认结算汇率、港币金额 //默认结算汇率、港币金额
updateHkdAmountBatch(expectedFortuneList, queryPolicyAndBrokerDtoList.get(0)); String policyCurrency = queryPolicyAndBrokerDtoList.get(0).getCurrency();
updateHkdAmountBatch(expectedFortuneList, policyCurrency, announcementRatioList);;
//执行成功完毕,也要销毁redis缓存 //执行成功完毕,也要销毁redis缓存
redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo); redisUtil.deleteObject(RedisConstants.EXPECTED_FORTUNE + policyNo);
......
package com.yd.csf.service.helper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class FeignResultHelper {
private final ObjectMapper objectMapper = new ObjectMapper();
public <T> T extractData(Result<T> result) {
if (result == null) {
throw new BusinessException(ResultCode.FAIL.getCode(), "远程调用返回null");
}
if (result.getCode() != ResultCode.SUCCESS.getCode()) {
throw new BusinessException(result.getCode(), result.getMsg());
}
return result.getData();
}
public <T> List<T> extractListData(Result<?> result, Class<T> elementType) {
if (result == null) {
throw new BusinessException(ResultCode.FAIL.getCode(), "远程调用返回null");
}
if (result.getCode() != ResultCode.SUCCESS.getCode()) {
throw new BusinessException(result.getCode(), result.getMsg());
}
Object data = result.getData();
if (data == null) {
throw new BusinessException(ResultCode.FAIL.getCode(), "远程调用 result.getData() 为 null");
}
if (data instanceof List) {
if (((List<?>) data).isEmpty()) {
throw new BusinessException(ResultCode.FAIL.getCode(), "远程调用 result.getData() 为 []");
}
return objectMapper.convertValue(
data,
objectMapper.getTypeFactory().constructCollectionType(
List.class, elementType
)
);
} else {
throw new BusinessException(ResultCode.FAIL.getCode(), "返回数据类型错误");
}
}
}
\ No newline at end of file
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