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