Commit 3c6e35bd by jianan

新单跟进80

parent b70d4af7
......@@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
......@@ -411,7 +412,7 @@ public class ApiFortuneController {
*/
@PostMapping("/list/page/vo")
@Operation(summary = "分页获取保单发佣列表")
public Result<Page<FortuneVO>> listFortuneByPage(@RequestBody FortuneQueryRequest fortuneQueryRequest,
public Result<Map<String, Object>> listFortuneByPage(@RequestBody FortuneQueryRequest fortuneQueryRequest,
HttpServletRequest request) {
long current = fortuneQueryRequest.getPageNo();
long size = fortuneQueryRequest.getPageSize();
......@@ -419,8 +420,26 @@ public class ApiFortuneController {
// 查询数据库
Page<Fortune> fortunePage = fortuneService.page(new Page<>(current, size),
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;
import com.yd.csf.service.dto.FortuneStatisticsVO;
import com.yd.csf.service.model.Fortune;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -11,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
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;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -35,4 +36,6 @@ public interface FortuneService extends IService<Fortune> {
Boolean addFortune(FortuneAddRequest fortuneAddRequest);
Fortune queryOne(String fortuneBizId);
FortuneStatisticsVO getFortuneStatistics(List<Long> fortuneIdList);
}
......@@ -154,13 +154,13 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
List<ExpectedFortune> expectedFortuneList = iExpectedFortuneService.list(expectedFortuneQueryWrapper);
if (CollectionUtils.isEmpty(expectedFortuneList)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到该保单对应的预计发佣记录");
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到保单对应的预计发佣记录,请先创建预计发佣记录");
} else {
Set<String> expectedPolicyNoSet = expectedFortuneList.stream().map(ExpectedFortune::getPolicyNo).collect(Collectors.toSet());
// 获取没有预计发佣的保单号
Set<String> notExpectedPolicyNoSet = policyNoSet.stream().filter(policyNo -> !expectedPolicyNoSet.contains(policyNo)).collect(Collectors.toSet());
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
// 6.删除旧的发佣记录
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<>();
for (ExpectedFortune expectedFortune : filteredExpectedFortuneList) {
Fortune fortune = new Fortune();
......@@ -195,6 +201,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
fortune.setStatus(FortuneStatusEnum.WAIT.getItemValue());
// 关联来佣业务ID
matchCommission(fortune, commissionList);
// 扣减已发薪资
calculateCurrentFortune(fortune, policyPaidFortuneList);
fortune.setCreateTime(new Date());
fortune.setUpdateTime(new Date());
......@@ -211,6 +219,23 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
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) {
for (Commission commission : commissionList) {
if (StringUtils.equals(commission.getPolicyNo(), fortune.getPolicyNo())
......
......@@ -21,6 +21,7 @@ import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.service.FortuneService;
import com.yd.csf.service.dao.FortuneMapper;
import com.yd.csf.service.vo.FortuneVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
......@@ -297,6 +298,16 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
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;
public class FortuneVO implements Serializable {
/**
* fortune id
*/
@Schema(description = "fortune id")
private Long fortuneId;
/**
* 保单发佣业务id
*/
@Schema(description = "保单发佣业务id")
......
......@@ -44,4 +44,17 @@
calculation_formula,remark,is_deleted,creator_id,updater_id,
create_time,update_time
</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>
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