Commit 3861cafc by zhangxingmin

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

parents e2e121b2 f447d3aa
......@@ -46,6 +46,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
......@@ -91,6 +92,9 @@ public class ApiPolicyFollowController {
@Resource
private ApiPolicyFollowService apiPolicyFollowService;
@Resource
private ApiExpectedFortuneService apiExpectedFortuneService;
@PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class)
......@@ -545,12 +549,29 @@ public class ApiPolicyFollowController {
String token = request.getHeader("Authorization");
log.info("修改跟进状态获取token:{}", token);
// 同步:根据保单生成预计出账记录
apiPolicyFollowService.generateExpectedFortuneSync(token, policyFollow.getPolicyNo());
execute(token, policyFollow.getPolicyNo());
}
return Result.success(true);
}
/**
* 异步处理
*
* @return
*/
public Result execute(String token, String policyNo) {
// 调用 ApiExpectedFortuneService 的 generateSyncWithLogAndRedis(同步版本,包含日志和Redis处理)
ApiGenerateExpectedFortuneRequest generateExpectedFortuneRequest = new ApiGenerateExpectedFortuneRequest();
generateExpectedFortuneRequest.setPolicyNo(policyNo);
log.info("生成预计发佣generateSyncWithLogAndRedis——>PolicyNo:{}", policyNo);
Result<ApiGenerateExpectedFortuneResponse> result = apiExpectedFortuneService.generateSyncWithLogAndRedis(generateExpectedFortuneRequest);
if (result != null && result.getCode() == 200) {
log.info("新单跟进-同步生成预计出账记录成功:保单号={}", policyNo);
}
return Result.success();
}
/**
* 新单跟进状态列表查询
*
* @param policyBizId
......
......@@ -168,21 +168,21 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
throw new BusinessException("保单和转介人信息不存在");
}
//查询所有绑定基本法的业务员(客户端用户表用户), 计算业务员绑定的所有基本法对应的计算值, 新增积分明细和发佣记录
List<CommissionRuleBinding> commissionRuleBindingList = new ArrayList<>();
//根据租户ID和项目ID查询客户端用户ID列表
Result<List<String>> result = apiClientUserFeignClient.clientUserBizIdList(TenantEnum.YD.getTenantBizId(), ProjectEnum.CSF_MINI_PROGRAM.getProjectBizId());
if (!CollectionUtils.isEmpty(result.getData())) {
commissionRuleBindingList = iCommissionRuleBindingService.queryList(CommissionRuleBindingDto.builder()
.targetIdList(result.getData())
.build());
}
if (CollectionUtils.isEmpty(commissionRuleBindingList)) {
throw new BusinessException("绑定基本法数据不存在");
}
// //查询所有绑定基本法的业务员(客户端用户表用户), 计算业务员绑定的所有基本法对应的计算值, 新增积分明细和发佣记录
// List<CommissionRuleBinding> commissionRuleBindingList = new ArrayList<>();
// //根据租户ID和项目ID查询客户端用户ID列表
// Result<List<String>> result = apiClientUserFeignClient.clientUserBizIdList(TenantEnum.YD.getTenantBizId(), ProjectEnum.CSF_MINI_PROGRAM.getProjectBizId());
// if (!CollectionUtils.isEmpty(result.getData())) {
// commissionRuleBindingList = iCommissionRuleBindingService.queryList(CommissionRuleBindingDto.builder()
// .targetIdList(result.getData())
// .build());
// }
// if (CollectionUtils.isEmpty(commissionRuleBindingList)) {
// throw new BusinessException("绑定基本法数据不存在");
// }
//遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表(同步执行)
executeSync(queryPolicyAndBrokerDtoList, commissionRuleBindingList, request.getPolicyNo());
executeSync(queryPolicyAndBrokerDtoList, request.getPolicyNo());
return Result.success(null, "生成预计发佣成功");
}
......@@ -336,16 +336,19 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
});
}
@Override
public Result executeSync(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList, List<CommissionRuleBinding> commissionRuleBindingList, String policyNo) {
return null;
}
/**
* 同步处理-> 遍历保单转介人列表信息 -> 调用基本法算出预计发佣列表
*
* @param queryPolicyAndBrokerDtoList
* @param commissionRuleBindingList
* @param policyNo
* @return
*/
public Result executeSync(List<QueryPolicyAndBrokerDto> queryPolicyAndBrokerDtoList,
List<CommissionRuleBinding> commissionRuleBindingList,
String policyNo) {
// 使用编程式事务,确保方法内的事务一致性
......@@ -357,6 +360,8 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
throw new BusinessException("保单的供款年期不存在");
}
List<CommissionRuleBinding> commissionRuleBindingList = brokerRelUserIdList(brokerDto);
for (int i = 1; i <= paymentTerm; i++) {
executeBilling(ExecuteBillingDto.builder()
.name(brokerDto.getBrokerName())
......@@ -364,13 +369,15 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
.issueNumber(i)
.build());
for (CommissionRuleBinding binding : commissionRuleBindingList) {
executeReward(ExecuteBillingDto.builder()
.clientUserBizId(binding.getTargetId())
.name(binding.getTargetName())
.policyAndBrokerDto(brokerDto)
.issueNumber(i)
.build());
if (!CollectionUtils.isEmpty(commissionRuleBindingList)) {
for (CommissionRuleBinding binding : commissionRuleBindingList) {
executeReward(ExecuteBillingDto.builder()
.clientUserBizId(binding.getTargetId())
.name(binding.getTargetName())
.policyAndBrokerDto(brokerDto)
.issueNumber(i)
.build());
}
}
}
}
......@@ -404,6 +411,22 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
});
}
/**
* 查询和当前转介人相关关系(推荐,一级管理,二级管理,辅导)的客户端用户ID列表数据
* @param brokerDto
* @return
*/
public List<CommissionRuleBinding> brokerRelUserIdList(QueryPolicyAndBrokerDto brokerDto) {
List<CommissionRuleBinding> commissionRuleBindingList = new ArrayList<>();
List<String> userIdList = policyBrokerService.selectRelatedBrokerBizIds(brokerDto.getBrokerBizId());
if (!CollectionUtils.isEmpty(userIdList)) {
commissionRuleBindingList = iCommissionRuleBindingService.queryList(CommissionRuleBindingDto.builder()
.targetIdList(userIdList)
.build());
}
return commissionRuleBindingList;
}
private void updatePayableNoBatch(String policyNo) {
// 查询最新一条有 payableNo 记录
ExpectedFortune latest = iExpectedFortuneService.getOne(
......
......@@ -2,6 +2,9 @@ package com.yd.csf.service.dao;
import com.yd.csf.service.model.PolicyBroker;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface PolicyBrokerMapper extends BaseMapper<PolicyBroker> {
List<String> selectRelatedBrokerBizIds(@Param("clientUserId") String clientUserId);
}
......
......@@ -18,4 +18,6 @@ public interface PolicyBrokerService extends IService<PolicyBroker> {
PolicyBroker queryOne(QueryPolicyBrokerDto dto);
void removeByPolicyBizId(String policyBizId);
List<String> selectRelatedBrokerBizIds(String clientUserId);
}
......@@ -49,6 +49,11 @@ public class PolicyBrokerServiceImpl extends ServiceImpl<PolicyBrokerMapper, Pol
.eq(PolicyBroker::getPolicyBizId, policyBizId)
);
}
@Override
public List<String> selectRelatedBrokerBizIds(String clientUserId) {
return baseMapper.selectRelatedBrokerBizIds(clientUserId);
}
}
......
......@@ -22,10 +22,51 @@
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<!-- 在PolicyBrokerMapper.xml里面写个SQL,通过传入的客户端用户ID字段,查询该客户端用户ID在三张关系表里面的,推荐人的客户端用户ID, 一级管理人客户端用户ID,二级管理人客户端用户ID,辅导人客户端用户ID,这些客户端用户ID整合返回List<String>客户端用户ID列表-->
<sql id="Base_Column_List">
id,policy_biz_id,policy_no,broker_name,broker_biz_id,gender,internal_code,
team,broker_ratio,team_biz_id,remark,is_deleted,creator_id,updater_id,
create_time,update_time
</sql>
<!-- 根据客户端用户ID查询关联的推荐人、管理人(一级、二级)、辅导人ID列表 -->
<select id="selectRelatedBrokerBizIds" parameterType="java.lang.String" resultType="java.lang.String">
SELECT DISTINCT related_user_id FROM (
-- 推荐人
SELECT referrer_id AS related_user_id
FROM agent_referral_relation
WHERE agent_id = #{clientUserId}
AND is_deleted = 0
AND is_active = 1
UNION
-- 一级管理人
SELECT manage_id AS related_user_id
FROM agent_manage_relation
WHERE agent_id = #{clientUserId}
AND is_deleted = 0
AND is_active = 1
UNION
-- 二级管理人:通过一级管理人关联查询
SELECT m2.manage_id AS related_user_id
FROM agent_manage_relation m1
JOIN agent_manage_relation m2 ON m1.manage_id = m2.agent_id
WHERE m1.agent_id = #{clientUserId}
AND m1.is_deleted = 0 AND m1.is_active = 1
AND m2.is_deleted = 0 AND m2.is_active = 1
UNION
-- 辅导人
SELECT tutor_id AS related_user_id
FROM agent_tutoring_relation
WHERE agent_id = #{clientUserId}
AND is_deleted = 0
AND is_active = 1
) AS t
WHERE related_user_id IS NOT NULL
</select>
</mapper>
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