Commit 4e9dd8ca by jianan

新单跟进146

parent 81d99ff3
package com.yd.csf.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.enums.ResultCode;
import com.yd.common.result.Result;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
......@@ -14,6 +17,10 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* CommissionExpected接口
......@@ -27,7 +34,7 @@ import javax.servlet.http.HttpServletRequest;
public class ApiCommissionExpectedController {
@Resource
private CommissionExpectedService CommissionExpectedService;
private CommissionExpectedService commissionExpectedService;
/**
* 批量新增预计来佣
......@@ -42,7 +49,7 @@ public class ApiCommissionExpectedController {
if (commissionExpectedAddRequest == null) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), ResultCode.PARAMS_ERROR.getMessage());
}
return Result.success(CommissionExpectedService.addCommissionExpected(commissionExpectedAddRequest));
return Result.success(commissionExpectedService.addCommissionExpected(commissionExpectedAddRequest));
}
/**
......@@ -58,7 +65,7 @@ public class ApiCommissionExpectedController {
if (StringUtils.isBlank(commissionExpectedBizId)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "预计来佣业务id不能为空");
}
return Result.success(CommissionExpectedService.deleteCommissionExpected(commissionExpectedBizId));
return Result.success(commissionExpectedService.deleteCommissionExpected(commissionExpectedBizId));
}
/**
......@@ -73,30 +80,30 @@ public class ApiCommissionExpectedController {
if (commissionExpectedUpdateRequest == null || StringUtils.isBlank(commissionExpectedUpdateRequest.getCommissionExpectedBizId())) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "commissionExpectedBizId不能为空");
}
return Result.success(CommissionExpectedService.updateCommissionExpected(commissionExpectedUpdateRequest));
return Result.success(commissionExpectedService.updateCommissionExpected(commissionExpectedUpdateRequest));
}
/**
* 根据 CommissionExpectedBizId 获取CommissionExpected(封装类)
*
* @param CommissionExpectedBizId
* @param commissionExpectedBizId 预计来佣业务id
* @return
*/
// @GetMapping("/get/vo")
// @Operation(summary = "预计来佣详情")
// public Result<CommissionExpectedVO> getCommissionExpectedVOByBizId(String CommissionExpectedBizId, HttpServletRequest request) {
// if (StringUtils.isBlank(CommissionExpectedBizId)) {
// return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "CommissionExpectedBizId不能为空");
// }
// // 查询数据库
// CommissionExpected CommissionExpected = CommissionExpectedService.getByBizId(CommissionExpectedBizId);
// if (CommissionExpected == null) {
// return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
// }
//
// // 获取封装类
// return Result.success(CommissionExpectedService.getCommissionExpectedVO(CommissionExpected));
// }
@GetMapping("/get/vo")
@Operation(summary = "预计来佣详情")
public Result<CommissionExpectedVO> getCommissionExpectedVOByBizId(String commissionExpectedBizId, HttpServletRequest request) {
if (StringUtils.isBlank(commissionExpectedBizId)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "commissionExpectedBizId不能为空");
}
// 查询数据库
CommissionExpected CommissionExpected = commissionExpectedService.getByBizId(commissionExpectedBizId);
if (CommissionExpected == null) {
return Result.fail(ResultCode.NULL_ERROR.getCode(), ResultCode.NULL_ERROR.getMessage());
}
// 获取封装类
return Result.success(commissionExpectedService.getCommissionExpectedVO(CommissionExpected));
}
/**
* 分页获取CommissionExpected列表(仅管理员可用)
......@@ -115,9 +122,49 @@ public class ApiCommissionExpectedController {
long size = CommissionExpectedQueryRequest.getPageSize();
// 查询数据库
Page<CommissionExpected> CommissionExpectedPage = CommissionExpectedService.page(new Page<>(current, size),
CommissionExpectedService.getQueryWrapper(CommissionExpectedQueryRequest));
return Result.success(CommissionExpectedService.getCommissionExpectedVOPage(CommissionExpectedPage));
Page<CommissionExpected> CommissionExpectedPage = commissionExpectedService.page(new Page<>(current, size),
commissionExpectedService.getQueryWrapper(CommissionExpectedQueryRequest));
return Result.success(commissionExpectedService.getCommissionExpectedVOPage(CommissionExpectedPage));
}
/**
* 计算统计数据 总金额、总入账金额、待入账金额、已入账比例(已入账金额/总金额)、总保单数
*/
@PostMapping("/statistics")
@Operation(summary = "计算统计数据 总金额、总入账金额、待入账金额、已入账比例(已入账金额/总金额)、总保单数")
public Result<CommissionExpectedStatisticsVO> getCommissionStatistics(@RequestBody CommissionExpectedStatisticsRequest commissionExpectedStatisticsRequest) {
if (commissionExpectedStatisticsRequest == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
return Result.success(commissionExpectedService.getExpectedStatistics(commissionExpectedStatisticsRequest.getCommissionExpectedIds()));
}
/**
* 应收款管理列表查询
*
* @param commissionExpectedQueryRequest
* @return
*/
@PostMapping("/queryCommissionExpectedByPage")
@Operation(summary = "应收款管理列表查询")
public Result<Map<String, Object>> queryCommissionExpectedByPage(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
long current = commissionExpectedQueryRequest.getPageNo();
long size = commissionExpectedQueryRequest.getPageSize();
// 查询列表数据
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
Page<CommissionExpected> commissionExpectedPage = commissionExpectedService.page(new Page<>(current, size),
queryWrapper);
// 查询统计数据
List<CommissionExpected> commissionExpectedList = commissionExpectedService.list(queryWrapper);
// 计算统计数据
List<Long> expectedIds = commissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
CommissionExpectedStatisticsVO expectedStatisticsVO = commissionExpectedService.getExpectedStatistics(expectedIds);
// 组装返回值
Map<String, Object> map = new HashMap<>();
map.put("expectedStatisticsVO", expectedStatisticsVO);
map.put("page", commissionExpectedService.getCommissionExpectedVOPage(commissionExpectedPage));
return Result.success(map);
}
}
......@@ -2,6 +2,10 @@ package com.yd.csf.service.dao;
import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
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 CommissionExpectedMapper extends BaseMapper<CommissionExpected> {
CommissionExpectedStatisticsVO getExpectedStatistics(@Param("expectedIds")List<Long> expectedIds);
}
......
......@@ -4,11 +4,25 @@ import com.yd.common.dto.PageDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
public class CommissionExpectedQueryRequest extends PageDto {
/**
* 保单号
*/
@Schema(description = "保单号", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "保单号")
private String policyNo;
/**
* 来佣状态 0=待来佣 1=已来佣 2=部分来佣
*/
@Schema(description = "来佣状态 0=待来佣 1=已来佣 2=部分来佣")
private String status;
/**
* 预计来佣日期 格式:yyyy-MM-dd 查询该日期及之前的预计来佣记录
*/
@Schema(description = "预计来佣日期 格式:yyyy-MM-dd 查询该日期及之前的预计来佣记录")
private Date commissionDate;
}
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class CommissionExpectedStatisticsRequest {
/**
* 预计来佣id 列表
*/
@Schema(description = "预计来佣id 列表")
private List<Long> commissionExpectedIds;
}
......@@ -91,7 +91,7 @@ public class CommissionExpected implements Serializable {
private BigDecimal defaultExchangeRate;
/**
* 预计来佣金额
* 预计来佣金额,单位:港币
*/
private BigDecimal expectedAmount;
......
......@@ -7,9 +7,11 @@ import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.dto.CommissionExpectedUpdateRequest;
import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
......@@ -50,4 +52,8 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
Boolean deleteCommissionExpected(String commissionExpectedBizId);
Boolean updateCommissionExpected(CommissionExpectedUpdateRequest commissionExpectedUpdateRequest);
CommissionExpectedStatisticsVO getExpectedStatistics(List<Long> expectedIds);
CommissionExpected getByBizId(String commissionExpectedBizId);
}
......@@ -13,14 +13,18 @@ import com.yd.csf.service.dto.CommissionExpectedAddRequest;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.dto.CommissionExpectedUpdateRequest;
import com.yd.csf.service.enums.CommissionExpectedStatusEnum;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.dao.CommissionExpectedMapper;
import com.yd.csf.service.service.CommissionService;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -49,6 +53,10 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
@Resource
private PolicyFollowService policyFollowService;
@Resource
private CommissionService commissionService;
@Override
public Page<CommissionExpectedVO> getCommissionExpectedVOPage(Page<CommissionExpected> commissionExpectedPage) {
......@@ -131,10 +139,14 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
}
// 获取查询参数
String policyNo = commissionExpectedQueryRequest.getPolicyNo();
String status = commissionExpectedQueryRequest.getStatus();
Date commissionDate = commissionExpectedQueryRequest.getCommissionDate();
// 精确查询
queryWrapper.eq(ObjectUtils.isNotEmpty(policyNo), "policy_no", policyNo);
queryWrapper.eq(ObjectUtils.isNotEmpty(status), "status", status);
queryWrapper.le(ObjectUtils.isNotEmpty(commissionDate), "commission_date", commissionDate);
// 默认排序规则
queryWrapper.orderByAsc("commission_period");
queryWrapper.orderByDesc("commission_date");
// 排序字段
String sortField = commissionExpectedQueryRequest.getSortField();
String sortOrder = commissionExpectedQueryRequest.getSortOrder();
......@@ -160,7 +172,10 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
// 对象转封装类
CommissionExpectedVO commissionExpectedVO = CommissionExpectedVO.objToVo(commissionExpected);
// todo 可以根据需要为封装对象补充值,不需要的内容可以删除
// 查询已入账来佣记录
List<Commission> commissionList = commissionService.list(new QueryWrapper<Commission>().eq("commissionExpectedBizId", commissionExpected.getCommissionExpectedBizId()));
// 关联已入账来佣记录
commissionExpectedVO.setCommissionList(commissionList);
return commissionExpectedVO;
}
......@@ -181,14 +196,18 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
for (CommissionExpectedAddDto addDto : addDtoList) {
CommissionExpected commissionExpected = new CommissionExpected();
BeanUtils.copyProperties(addDto, commissionExpected);
// 默认结算汇率 7.8 美元对港币
// 初始值
commissionExpected.setDefaultExchangeRate(BigDecimal.valueOf(1));
// 如果币种是美元,默认结算汇率 7.8 美元对港币
if (StringUtils.equalsIgnoreCase(addDto.getCurrency(), "USD")) {
commissionExpected.setDefaultExchangeRate(BigDecimal.valueOf(7.8));
}
// 预计总金额
if (policy != null) {
BigDecimal expectedAmount = policy.getPaymentPremium()
.multiply(commissionExpected.getCommissionRatio())
.multiply(commissionExpected.getDefaultExchangeRate())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
commissionExpected.setExpectedAmount(expectedAmount);
}
......@@ -267,7 +286,28 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
return this.updateById(commissionExpected);
}
private CommissionExpected getByBizId(String commissionExpectedBizId) {
@Override
public CommissionExpectedStatisticsVO getExpectedStatistics(List<Long> expectedIds) {
// 自定义统计数据
CommissionExpectedStatisticsVO commissionStatistics = baseMapper.getExpectedStatistics(expectedIds);
BigDecimal totalAmount = commissionStatistics.getTotalAmount();
BigDecimal totalPaidAmount = commissionStatistics.getTotalPaidAmount();
// 计算待入账金额
commissionStatistics.setPendingPaidAmount(totalAmount.subtract(totalPaidAmount));
// 计算已入账比例
BigDecimal divided = BigDecimal.ZERO;
if (totalAmount.compareTo(BigDecimal.ZERO) > 0) {
divided = totalPaidAmount.divide(totalAmount, 4, RoundingMode.HALF_UP);
}
// 格式化 %
commissionStatistics.setPaidAmountRatio(String.format("%.2f%%", divided.doubleValue() * 100));
return commissionStatistics;
}
@Override
public CommissionExpected getByBizId(String commissionExpectedBizId) {
return this.getOne(new QueryWrapper<CommissionExpected>().eq("commission_expected_biz_id", commissionExpectedBizId));
}
}
......
package com.yd.csf.service.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 应收款管理统计VO
*/
@Data
public class CommissionExpectedStatisticsVO {
/**
* 总金额
*/
@Schema(description = "总金额")
private BigDecimal totalAmount;
/**
* 总入账金额
*/
@Schema(description = "总入账金额")
private BigDecimal totalPaidAmount;
/**
* 待入账金额
*/
@Schema(description = "待入账金额")
private BigDecimal pendingPaidAmount;
/**
* 已入账比例(已入账金额/总金额)
*/
@Schema(description = "已入账比例(已入账金额/总金额)")
private String paidAmountRatio;
/**
* 总保单数
*/
@Schema(description = "总保单数")
private Integer totalPolicyCount;
}
......@@ -10,6 +10,7 @@ import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class CommissionExpectedVO implements Serializable {
......@@ -69,9 +70,9 @@ public class CommissionExpectedVO implements Serializable {
private String commissionType;
/**
* 来佣比例 (%)
* 预计来佣比例 (%)
*/
@Schema(description = "来佣比例 (%)")
@Schema(description = "预计来佣比例 (%)")
private BigDecimal commissionRatio;
/**
......@@ -81,12 +82,6 @@ public class CommissionExpectedVO implements Serializable {
private BigDecimal ratio;
/**
* 来佣金额
*/
@Schema(description = "来佣金额")
private BigDecimal amount;
/**
* 来佣币种
*/
@Schema(description = "来佣币种")
......@@ -106,6 +101,36 @@ public class CommissionExpectedVO implements Serializable {
private String status;
/**
* 预计来佣金额
*/
@Schema(description = "预计来佣金额")
private BigDecimal expectedAmount;
/**
* 默认结算汇率
*/
@Schema(description = "默认结算汇率")
private BigDecimal defaultExchangeRate;
/**
* 已入账来佣金额
*/
@Schema(description = "已入账来佣金额")
private BigDecimal paidAmount;
/**
* 已入账来佣比例
*/
@Schema(description = "已入账来佣比例")
private BigDecimal paidRatio;
/**
* 已入账来佣列表
*/
@Schema(description = "已入账来佣列表")
private List<Commission> commissionList;
/**
* 通用备注
*/
@Schema(description = "备注")
......
......@@ -35,4 +35,18 @@
commission_date,status,paid_amount,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
<select id="getExpectedStatistics" resultType="com.yd.csf.service.vo.CommissionExpectedStatisticsVO">
SELECT
IFNULL(SUM(expected_amount),0) AS totalAmount,
IFNULL(SUM(paid_amount),0) AS totalPaidAmount,
COUNT(DISTINCT policy_no) AS totalPolicyCount
FROM
commission_expected
WHERE
id IN
<foreach collection="expectedIds" item="item" open="(" close=")" separator=",">
#{item}
</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