Commit 3c6e35bd by jianan

新单跟进80

parent b70d4af7
...@@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -411,7 +412,7 @@ public class ApiFortuneController { ...@@ -411,7 +412,7 @@ public class ApiFortuneController {
*/ */
@PostMapping("/list/page/vo") @PostMapping("/list/page/vo")
@Operation(summary = "分页获取保单发佣列表") @Operation(summary = "分页获取保单发佣列表")
public Result<Page<FortuneVO>> listFortuneByPage(@RequestBody FortuneQueryRequest fortuneQueryRequest, public Result<Map<String, Object>> listFortuneByPage(@RequestBody FortuneQueryRequest fortuneQueryRequest,
HttpServletRequest request) { HttpServletRequest request) {
long current = fortuneQueryRequest.getPageNo(); long current = fortuneQueryRequest.getPageNo();
long size = fortuneQueryRequest.getPageSize(); long size = fortuneQueryRequest.getPageSize();
...@@ -419,8 +420,26 @@ public class ApiFortuneController { ...@@ -419,8 +420,26 @@ public class ApiFortuneController {
// 查询数据库 // 查询数据库
Page<Fortune> fortunePage = fortuneService.page(new Page<>(current, size), Page<Fortune> fortunePage = fortuneService.page(new Page<>(current, size),
fortuneService.getQueryWrapper(fortuneQueryRequest)); fortuneService.getQueryWrapper(fortuneQueryRequest));
// 获取封装类
return Result.success(fortuneService.getFortuneVOPage(fortunePage)); // 查询统计数据
FortuneStatisticsVO statisticsVO = fortuneService.getFortuneStatistics(fortunePage.getRecords().stream().map(Fortune::getId).collect(Collectors.toList()));
// 组装返回结果
Map<String, Object> result = new HashMap<>();
result.put("statisticsVO", statisticsVO);
result.put("page", fortuneService.getFortuneVOPage(fortunePage));
return Result.success(result);
} }
/**
* 计算统计数据 总出账金额、对应这些保单的总入账金额、总保单数
*/
@PostMapping("/statistics")
@Operation(summary = "计算统计数据 总出账金额、对应这些保单的总入账金额、总保单数")
public Result<FortuneStatisticsVO> getFortuneStatistics(@RequestBody FortuneStatisticsRequest statisticsRequest) {
if (CollectionUtils.isEmpty(statisticsRequest.getFortuneIdList())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "fortuneId列表不能为空");
}
return Result.success(fortuneService.getFortuneStatistics(statisticsRequest.getFortuneIdList()));
}
} }
package com.yd.csf.service.dao; package com.yd.csf.service.dao;
import com.yd.csf.service.dto.FortuneStatisticsVO;
import com.yd.csf.service.model.Fortune; import com.yd.csf.service.model.Fortune;
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 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -11,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface FortuneMapper extends BaseMapper<Fortune> { public interface FortuneMapper extends BaseMapper<Fortune> {
FortuneStatisticsVO getFortuneStatistics(@Param("fortuneIdList") List<Long> fortuneIdList);
} }
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class FortuneStatisticsRequest {
/**
* fortuneId 列表
*/
@Schema(description = "fortuneId 列表")
private List<Long> fortuneIdList;
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class FortuneStatisticsVO {
/**
* 总出账金额
*/
@Schema(description = "总出账金额")
private BigDecimal totalOutAmount;
/**
* 总入账金额
*/
@Schema(description = "总入账金额")
private BigDecimal totalInAmount;
/**
* 总保单数
*/
@Schema(description = "总保单数")
private Long totalPolicyCount;
}
...@@ -10,6 +10,7 @@ import com.yd.csf.service.vo.FortuneVO; ...@@ -10,6 +10,7 @@ import com.yd.csf.service.vo.FortuneVO;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.List;
/** /**
* @author Zhang Jianan * @author Zhang Jianan
...@@ -35,4 +36,6 @@ public interface FortuneService extends IService<Fortune> { ...@@ -35,4 +36,6 @@ public interface FortuneService extends IService<Fortune> {
Boolean addFortune(FortuneAddRequest fortuneAddRequest); Boolean addFortune(FortuneAddRequest fortuneAddRequest);
Fortune queryOne(String fortuneBizId); Fortune queryOne(String fortuneBizId);
FortuneStatisticsVO getFortuneStatistics(List<Long> fortuneIdList);
} }
...@@ -154,13 +154,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -154,13 +154,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.list(expectedFortuneQueryWrapper); List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.list(expectedFortuneQueryWrapper);
if (CollectionUtils.isEmpty(expectedFortuneList)) { if (CollectionUtils.isEmpty(expectedFortuneList)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到该保单对应的预计发佣记录"); throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到保单对应的预计发佣记录,请先创建预计发佣记录");
} else { } else {
Set<String> expectedPolicyNoSet = expectedFortuneList.stream().map(ExpectedFortune::getPolicyNo).collect(Collectors.toSet()); Set<String> expectedPolicyNoSet = expectedFortuneList.stream().map(ExpectedFortune::getPolicyNo).collect(Collectors.toSet());
// 获取没有预计发佣的保单号 // 获取没有预计发佣的保单号
Set<String> notExpectedPolicyNoSet = policyNoSet.stream().filter(policyNo -> !expectedPolicyNoSet.contains(policyNo)).collect(Collectors.toSet()); Set<String> notExpectedPolicyNoSet = policyNoSet.stream().filter(policyNo -> !expectedPolicyNoSet.contains(policyNo)).collect(Collectors.toSet());
if (!CollectionUtils.isEmpty(notExpectedPolicyNoSet)) { if (!CollectionUtils.isEmpty(notExpectedPolicyNoSet)) {
throw new BusinessException(ResultCode.FAIL.getCode(), "未找到以下保单对应的预计发佣记录:" + String.join(",", notExpectedPolicyNoSet)); throw new BusinessException(ResultCode.FAIL.getCode(), "未找到以下保单对应的预计发佣记录,请先创建预计发佣记录:" + String.join(",", notExpectedPolicyNoSet));
} }
} }
...@@ -185,7 +185,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -185,7 +185,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 6.删除旧的发佣记录 // 6.删除旧的发佣记录
fortuneService.remove(new QueryWrapper<Fortune>().in("policy_no", policyNoSet)); fortuneService.remove(new QueryWrapper<Fortune>().in("policy_no", policyNoSet));
// 7. 构建实际的初始发佣记录 // 7.1 查询所选保单号对应已发薪资记录
QueryWrapper<Fortune> fortuneQueryWrapper = new QueryWrapper<>();
fortuneQueryWrapper.in("policy_no", filteredExpectedFortuneList.stream().map(ExpectedFortune::getPolicyNo).collect(Collectors.toList()));
fortuneQueryWrapper.eq("status", FortuneStatusEnum.SENT.getItemValue());
List<Fortune> policyPaidFortuneList = fortuneService.list(fortuneQueryWrapper);
// 7.2 构建实际的初始发佣记录
List<Fortune> newFortuneList = new ArrayList<>(); List<Fortune> newFortuneList = new ArrayList<>();
for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) { for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) {
Fortune fortune = new Fortune(); Fortune fortune = new Fortune();
...@@ -195,6 +201,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -195,6 +201,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
fortune.setStatus(FortuneStatusEnum.WAIT.getItemValue()); fortune.setStatus(FortuneStatusEnum.WAIT.getItemValue());
// 关联来佣业务ID // 关联来佣业务ID
matchCommission(fortune, commissionList); matchCommission(fortune, commissionList);
// 扣减已发薪资
calculateCurrentFortune(fortune, policyPaidFortuneList);
fortune.setCreateTime(new Date()); fortune.setCreateTime(new Date());
fortune.setUpdateTime(new Date()); fortune.setUpdateTime(new Date());
...@@ -211,6 +219,23 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -211,6 +219,23 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return true; return true;
} }
private void calculateCurrentFortune(Fortune fortune, List<Fortune> policyPaidFortuneList) {
// 根据转介人分组
Map<String, List<Fortune>> brokerFortuneMap = policyPaidFortuneList.stream()
.collect(Collectors.groupingBy(Fortune::getBrokerBizId));
// 当前转介人已发薪资
List<Fortune> brokerFortuneList = brokerFortuneMap.getOrDefault(fortune.getBrokerBizId(), new ArrayList<>());
// 计算当前佣金条目已发薪资
BigDecimal brokerPaidAmount = brokerFortuneList.stream()
.filter(item -> StringUtils.equals(item.getFortuneName(), fortune.getFortuneName())
&& item.getFortunePeriod().equals(fortune.getFortunePeriod()))
.map(Fortune::getNetAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 计算当前发佣金额,需要扣减已发薪资
fortune.setAmount(fortune.getAmount().subtract(brokerPaidAmount));
}
private void matchCommission(Fortune fortune, List<Commission> commissionList) { private void matchCommission(Fortune fortune, List<Commission> commissionList) {
for (Commission commission : commissionList) { for (Commission commission : commissionList) {
if (StringUtils.equals(commission.getPolicyNo(), fortune.getPolicyNo()) if (StringUtils.equals(commission.getPolicyNo(), fortune.getPolicyNo())
......
...@@ -21,6 +21,7 @@ import com.yd.csf.service.service.FortuneAccountService; ...@@ -21,6 +21,7 @@ import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.service.FortuneService; import com.yd.csf.service.service.FortuneService;
import com.yd.csf.service.dao.FortuneMapper; import com.yd.csf.service.dao.FortuneMapper;
import com.yd.csf.service.vo.FortuneVO; import com.yd.csf.service.vo.FortuneVO;
import org.apache.commons.collections4.CollectionUtils;
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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -297,6 +298,16 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -297,6 +298,16 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return this.getOne(new LambdaQueryWrapper<Fortune>().eq(Fortune::getFortuneBizId,fortuneBizId)); return this.getOne(new LambdaQueryWrapper<Fortune>().eq(Fortune::getFortuneBizId,fortuneBizId));
} }
@Override
public FortuneStatisticsVO getFortuneStatistics(List<Long> fortuneIdList) {
if (CollectionUtils.isEmpty(fortuneIdList)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "fortuneId列表不能为空");
}
// 自定义查询
FortuneStatisticsVO fortuneStatisticsVO = this.baseMapper.getFortuneStatistics(fortuneIdList);
return fortuneStatisticsVO;
}
} }
......
...@@ -15,6 +15,12 @@ import java.util.Date; ...@@ -15,6 +15,12 @@ import java.util.Date;
public class FortuneVO implements Serializable { public class FortuneVO implements Serializable {
/** /**
* fortune id
*/
@Schema(description = "fortune id")
private Long fortuneId;
/**
* 保单发佣业务id * 保单发佣业务id
*/ */
@Schema(description = "保单发佣业务id") @Schema(description = "保单发佣业务id")
......
...@@ -44,4 +44,17 @@ ...@@ -44,4 +44,17 @@
calculation_formula,remark,is_deleted,creator_id,updater_id, calculation_formula,remark,is_deleted,creator_id,updater_id,
create_time,update_time create_time,update_time
</sql> </sql>
<select id="getFortuneStatistics" resultType="com.yd.csf.service.dto.FortuneStatisticsVO">
select
ifnull(f.amount,0) as totalOutAmount,
ifnull(c.amount,0) as totalInAmount,
count(distinct f.policy_no) as totalPolicyCount
from fortune f
left join commission c on f.commission_biz_id = c.commission_biz_id
where f.id in
<foreach collection="fortuneIdList" item="fortuneId" open="(" close=")" separator=",">
#{fortuneId}
</foreach>
</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