Commit b70d4af7 by zhangxingmin

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

parents 744d58f7 0707d9ed
package com.yd.csf.api.controller; package com.yd.csf.api.controller;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil; import com.yd.auth.core.utils.SecurityUtil;
...@@ -14,6 +15,7 @@ import com.yd.csf.service.model.Commission; ...@@ -14,6 +15,7 @@ import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.service.CommissionExpectedService; import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.service.CommissionService; import com.yd.csf.service.service.CommissionService;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO; import com.yd.csf.service.vo.CommissionVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
...@@ -30,7 +32,9 @@ import javax.servlet.http.HttpServletRequest; ...@@ -30,7 +32,9 @@ import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
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.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -247,6 +251,19 @@ public class ApiCommissionController { ...@@ -247,6 +251,19 @@ public class ApiCommissionController {
} }
/** /**
* 计算统计数据 总金额、总入账金额、待入账金额、已入账比例(已入账金额/总金额)、总保单数
*/
@PostMapping("/statistics")
@Operation(summary = "计算统计数据 总金额、总入账金额、待入账金额、已入账比例(已入账金额/总金额)、总保单数")
public Result<CommissionStatisticsVO> getCommissionStatistics(@RequestBody CommissionStatisticsRequest commissionStatisticsRequest) {
if (commissionStatisticsRequest == null) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
}
return Result.success(commissionService.getCommissionStatistics(commissionStatisticsRequest.getCommissionIds()));
}
/**
* 根据 commissionBizId 获取保单来佣(封装类) * 根据 commissionBizId 获取保单来佣(封装类)
* *
* @param commissionBizId * @param commissionBizId
...@@ -293,16 +310,26 @@ public class ApiCommissionController { ...@@ -293,16 +310,26 @@ public class ApiCommissionController {
*/ */
@PostMapping("/list/page/vo") @PostMapping("/list/page/vo")
@Operation(summary = "分页获取保单来佣列表") @Operation(summary = "分页获取保单来佣列表")
public Result<Page<CommissionVO>> listPolicyFollowByPage(@RequestBody CommissionQueryRequest commissionQueryRequest, public Result<Map<String, Object>> listPolicyFollowByPage(@RequestBody CommissionQueryRequest commissionQueryRequest,
HttpServletRequest request) { HttpServletRequest request) {
long current = commissionQueryRequest.getPageNo(); long current = commissionQueryRequest.getPageNo();
long size = commissionQueryRequest.getPageSize(); long size = commissionQueryRequest.getPageSize();
// 查询数据库 // 查询列表数据
QueryWrapper<Commission> queryWrapper = commissionService.getQueryWrapper(commissionQueryRequest);
Page<Commission> commissionPage = commissionService.page(new Page<>(current, size), Page<Commission> commissionPage = commissionService.page(new Page<>(current, size),
commissionService.getQueryWrapper(commissionQueryRequest)); queryWrapper);
// 获取封装类
return Result.success(commissionService.getCommissionVOPage(commissionPage)); // 查询统计数据
List<Commission> commissionList = commissionService.list(queryWrapper);
// 计算统计数据
List<Long> commissionIds = commissionList.stream().map(Commission::getId).collect(Collectors.toList());
CommissionStatisticsVO commissionStatisticsVO = commissionService.getCommissionStatistics(commissionIds);
// 组装返回值
Map<String, Object> map = new HashMap<>();
map.put("commissionStatisticsVO", commissionStatisticsVO);
map.put("page", commissionService.getCommissionVOPage(commissionPage));
return Result.success(map);
} }
} }
...@@ -12,19 +12,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -12,19 +12,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.auth.core.dto.AuthUserDto; import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil; import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.dto.CommissionExcelDTO; import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.api.dto.PolicyExcelDTO; import com.yd.csf.api.dto.PolicyExcelDTO;
import com.yd.csf.api.dto.PolicyFollowDTO; import com.yd.csf.api.dto.PolicyFollowDTO;
import com.yd.csf.api.listener.PolicyDataListener; import com.yd.csf.api.listener.PolicyDataListener;
import com.yd.csf.api.service.ApiExpectedFortuneService;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.PolicyFollowStatusEnum; import com.yd.csf.service.enums.PolicyFollowStatusEnum;
import com.yd.csf.service.model.*; import com.yd.csf.service.model.*;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.utils.AsyncQueryUtil;
import com.yd.csf.service.vo.PolicyFollowDetailVO; import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowRecordVO; import com.yd.csf.service.vo.PolicyFollowRecordVO;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
...@@ -35,13 +34,15 @@ import org.apache.commons.lang3.StringUtils; ...@@ -35,13 +34,15 @@ 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.beans.factory.annotation.Autowired;
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;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.ParseException; import java.text.ParseException;
import java.util.*; import java.util.*;
...@@ -82,6 +83,10 @@ public class ApiPolicyFollowController { ...@@ -82,6 +83,10 @@ public class ApiPolicyFollowController {
private PolicyFollowFileService policyFollowFileService; private PolicyFollowFileService policyFollowFileService;
@Resource
private PolicyReportPdfService policyReportPdfService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws Exception {
...@@ -258,6 +263,8 @@ public class ApiPolicyFollowController { ...@@ -258,6 +263,8 @@ public class ApiPolicyFollowController {
if (policyFollow.getEffectiveDate()!= null && policyFollow.getCoolingOffDays() != null) { if (policyFollow.getEffectiveDate()!= null && policyFollow.getCoolingOffDays() != null) {
policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollow.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollow.getCoolingOffDays())); policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollow.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollow.getCoolingOffDays()));
} }
// 获取币种字典值
policyFollow.setCurrency(policyFollowService.getCurrencyValue(policyExcelDTO.getCurrency()));
// 转换为Policy对象 // 转换为Policy对象
Policy policy = new Policy(); Policy policy = new Policy();
...@@ -549,4 +556,89 @@ public class ApiPolicyFollowController { ...@@ -549,4 +556,89 @@ public class ApiPolicyFollowController {
List<PolicyFollowRecord> policyFollowStatusList = policyFollowRecordService.list(queryWrapper); List<PolicyFollowRecord> policyFollowStatusList = policyFollowRecordService.list(queryWrapper);
return Result.success(policyFollowRecordService.getVOList(policyFollowStatusList)); return Result.success(policyFollowRecordService.getVOList(policyFollowStatusList));
} }
/**
* 生成签约单
*/
@GetMapping(value = "/report/download", produces = "application/pdf")
@Operation(summary = "生成签约单")
public void previewPolicyReport(@RequestParam("policyBizId") String policyBizId,
HttpServletResponse response) {
PolicyFollow policyFollow = policyFollowService.getByPolicyBizId(policyBizId);
if (policyFollow == null) {
throw new BusinessException(ErrorCode.NOT_FOUND_ERROR.getCode(), ErrorCode.NOT_FOUND_ERROR.getMessage());
}
PolicyReportData reportData = new PolicyReportData();
// 填充数据
// reportData.setStartTime("2025-10-30");
// reportData.setEndTime("2025-10-30");
// reportData.setLocation("香港");
// reportData.setServiceManager("Vickie");
// reportData.setPolicyHolder(policyFollow.getPolicyHolder());
// reportData.setPolicyNumber(policyFollow.getPolicyNo());
// reportData.setInsuranceCompany(policyFollow.getInsurer());
// reportData.setInsuredPerson(policyFollow.getInsured());
// reportData.setInsurancePlan(policyFollow.getProductName());
// reportData.setInsuredAge(0);
// reportData.setCurrency(policyFollow.getCurrency());
// reportData.setPaymentPeriod((Integer) policyFollow.getPaymentTerm());
// reportData.setAnnualAmount(policyFollow.getPaymentPremium());
// reportData.setTotalPrepayment(BigDecimal.ZERO);
// reportData.setPremiumFee(BigDecimal.ZERO);
reportData.setStartTime("2025-10-30");
reportData.setEndTime("2025-10-30");
reportData.setLocation("香港");
reportData.setServiceManager("Vickie");
reportData.setPolicyHolder("policyHolder");
reportData.setPolicyNumber("B635379588");
reportData.setInsuranceCompany("友邦保险");
reportData.setInsuredPerson("insuredPerson");
reportData.setInsurancePlan("环宇盈活储蓄保险计划");
reportData.setInsuredAge(1);
reportData.setCurrency("HKD");
reportData.setPaymentPeriod(5);
reportData.setAnnualAmount(BigDecimal.valueOf(30000.08));
reportData.setTotalPrepayment(BigDecimal.valueOf(150064.70));
reportData.setPremiumFee(BigDecimal.valueOf(12.86));
try {
log.info("收到PDF生成请求: {}", reportData);
log.info("PolicyReportData 内容检查:");
log.info("startTime: {}", reportData.getStartTime());
log.info("endTime: {}", reportData.getEndTime());
log.info("location: {}", reportData.getLocation());
log.info("serviceManager: {}", reportData.getServiceManager());
byte[] pdfBytes = policyReportPdfService.generatePolicyReport(reportData);
if (pdfBytes == null || pdfBytes.length == 0) {
log.error("生成的PDF为空");
throw new BusinessException("生成的PDF内容为空");
}
log.info("PDF生成成功,大小: {} bytes", pdfBytes.length);
// 设置下载响应头
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=policy-report-" +
reportData.getPolicyNumber() + ".pdf");
response.setContentLength(pdfBytes.length);
// 写入响应流
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(pdfBytes);
outputStream.flush();
log.info("PDF响应发送完成");
} catch (Exception e) {
log.error("PDF预览失败", e);
throw new BusinessException("PDF预览失败: " + e.getMessage());
}
}
} }
\ No newline at end of file
...@@ -12,6 +12,20 @@ ...@@ -12,6 +12,20 @@
<artifactId>yd-csf-service</artifactId> <artifactId>yd-csf-service</artifactId>
<dependencies> <dependencies>
<!-- 公共工具类 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<!-- itextpdf -->
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.30</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId> <artifactId>easyexcel</artifactId>
...@@ -104,5 +118,10 @@ ...@@ -104,5 +118,10 @@
<artifactId>yd-feign</artifactId> <artifactId>yd-feign</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<!-- 添加AOP依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
package com.yd.csf.service.dao; package com.yd.csf.service.dao;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yd.csf.service.dto.CommissionBindPolicyBrokerDto; import com.yd.csf.service.dto.CommissionBindPolicyBrokerDto;
import com.yd.csf.service.dto.CommissionDto; import com.yd.csf.service.dto.CommissionDto;
import com.yd.csf.service.model.Commission; import com.yd.csf.service.model.Commission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -17,6 +20,8 @@ import java.util.List; ...@@ -17,6 +20,8 @@ import java.util.List;
public interface CommissionMapper extends BaseMapper<Commission> { public interface CommissionMapper extends BaseMapper<Commission> {
List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(@Param("dto") CommissionDto dto); List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(@Param("dto") CommissionDto dto);
CommissionStatisticsVO getCommissionStatistics(@Param("commissionIdList") List<Long> commissionIdList);
} }
......
...@@ -64,6 +64,12 @@ public class CommissionAddRequest implements Serializable { ...@@ -64,6 +64,12 @@ public class CommissionAddRequest implements Serializable {
private String currency; private String currency;
/** /**
* 结算汇率
*/
@Schema(description = "结算汇率")
private String exchangeRate;
/**
* 来佣日期 * 来佣日期
*/ */
@Schema(description = "来佣日期", requiredMode = Schema.RequiredMode.REQUIRED, format = "yyyy-MM-dd") @Schema(description = "来佣日期", requiredMode = Schema.RequiredMode.REQUIRED, format = "yyyy-MM-dd")
......
...@@ -49,5 +49,12 @@ public class CommissionQueryRequest extends PageDto implements Serializable { ...@@ -49,5 +49,12 @@ public class CommissionQueryRequest extends PageDto implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date commissionDateEnd; private Date commissionDateEnd;
/**
* 预计入账日期
*/
@Schema(description = "预计入账日期 格式-yyyy-MM-dd", example = "2023-01-01")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date expectedDate;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
\ No newline at end of file
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class CommissionStatisticsRequest {
/**
* 佣金ID列表
*/
@Schema(description = "佣金ID列表")
private List<Long> commissionIds;
}
...@@ -75,6 +75,12 @@ public class CommissionUpdateRequest implements Serializable { ...@@ -75,6 +75,12 @@ public class CommissionUpdateRequest implements Serializable {
@Schema(description = "来佣币种") @Schema(description = "来佣币种")
private String currency; private String currency;
/**
* 结算汇率
*/
@Schema(description = "结算汇率")
private String exchangeRate;
/** /**
* 来佣日期 * 来佣日期
*/ */
......
package com.yd.csf.service.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PolicyReportData {
// 基本信息
private String startTime;
private String endTime;
private String location;
private String serviceManager;
// 保单详细信息
private String policyHolder;
private String policyNumber;
private String insuranceCompany;
private String insuredPerson;
private String insurancePlan;
private Integer insuredAge;
private String currency;
private Integer paymentPeriod;
private BigDecimal annualAmount;
private BigDecimal totalPrepayment;
private BigDecimal premiumFee;
// 附加险信息
private List<AdditionalInsurance> additionalInsurances;
@Data
public static class AdditionalInsurance {
private String name;
private String paymentTerm;
private String currency;
private BigDecimal firstYearAmount;
}
}
...@@ -9,6 +9,7 @@ public enum FortuneStatusEnum { ...@@ -9,6 +9,7 @@ public enum FortuneStatusEnum {
WAIT("待出账", "0"), WAIT("待出账", "0"),
CAN_SEND("可出账", "1"), CAN_SEND("可出账", "1"),
SENT("已出账", "2"), SENT("已出账", "2"),
MATCH_FAIL("未找到当前预计发佣对应的来佣", "3"),
; ;
//字典项标签(名称) //字典项标签(名称)
......
...@@ -30,6 +30,11 @@ public class Fortune implements Serializable { ...@@ -30,6 +30,11 @@ public class Fortune implements Serializable {
*/ */
private String fortuneBizId; private String fortuneBizId;
/**
* 来佣保单业务id
*/
private String commissionBizId;
/** /**
* 保单号 * 保单号
*/ */
......
...@@ -7,6 +7,7 @@ import com.yd.csf.service.dto.*; ...@@ -7,6 +7,7 @@ import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.Commission; import com.yd.csf.service.model.Commission;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO; import com.yd.csf.service.vo.CommissionVO;
import java.util.List; import java.util.List;
...@@ -36,4 +37,6 @@ public interface CommissionService extends IService<Commission> { ...@@ -36,4 +37,6 @@ public interface CommissionService extends IService<Commission> {
List<Commission> queryList(CommissionDto dto); List<Commission> queryList(CommissionDto dto);
List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(CommissionDto dto); List<CommissionBindPolicyBrokerDto> queryCommissionBindPolicyBrokerList(CommissionDto dto);
CommissionStatisticsVO getCommissionStatistics(List<Long> commissionIds);
} }
...@@ -42,4 +42,6 @@ public interface PolicyFollowService extends IService<PolicyFollow> { ...@@ -42,4 +42,6 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
PolicyFollowAggregateDto getPolicyFollowAggregate(String policyBizId); PolicyFollowAggregateDto getPolicyFollowAggregate(String policyBizId);
Page<PolicyFollowDetailVO> getPolicyFollowDetailVOList(Page<PolicyFollow> policyFollowPage); Page<PolicyFollowDetailVO> getPolicyFollowDetailVOList(Page<PolicyFollow> policyFollowPage);
String getCurrencyValue(String currency);
} }
...@@ -157,6 +157,8 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -157,6 +157,8 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (policyFollowUpdateDto.getCoolingOffDays() != null && policyFollowUpdateDto.getEffectiveDate() != null) { if (policyFollowUpdateDto.getCoolingOffDays() != null && policyFollowUpdateDto.getEffectiveDate() != null) {
policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollowUpdateDto.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollowUpdateDto.getCoolingOffDays())); policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollowUpdateDto.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollowUpdateDto.getCoolingOffDays()));
} }
// 获取币种字典值
policyFollow.setCurrency(this.getCurrencyValue(policyFollowUpdateDto.getCurrency()));
} }
// 设置核保信息 // 设置核保信息
setValidPolicyInfo(policyFollow, policyFollowUpdateRequest.getVerifyPolicyInfo()); setValidPolicyInfo(policyFollow, policyFollowUpdateRequest.getVerifyPolicyInfo());
...@@ -248,6 +250,9 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -248,6 +250,9 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (policyFollowAddRequest.getCoolingOffDays() != null) { if (policyFollowAddRequest.getCoolingOffDays() != null) {
policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollowAddRequest.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollowAddRequest.getCoolingOffDays())); policyFollow.setCoolingOffEndDate(DateUtil.offset(policyFollowAddRequest.getEffectiveDate(), DateField.DAY_OF_MONTH, policyFollowAddRequest.getCoolingOffDays()));
} }
// 获取币种字典值
policyFollow.setCurrency(this.getCurrencyValue(policyFollowAddRequest.getCurrency()));
// 创建 Policy对象 // 创建 Policy对象
Policy policy = new Policy(); Policy policy = new Policy();
BeanUtils.copyProperties(policyFollowAddRequest, policy); BeanUtils.copyProperties(policyFollowAddRequest, policy);
...@@ -527,6 +532,42 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -527,6 +532,42 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
} }
@Override @Override
public String getCurrencyValue(String currency) {
if (StringUtils.isBlank(currency)) {
return null;
}
switch (currency) {
case "美元":
currency = "USD";
break;
case "人民幣":
currency = "CNY";
break;
case "港幣":
currency = "HKD";
break;
case "澳元":
currency = "AUD";
break;
case "加元":
currency = "CAD";
break;
case "欧元":
currency = "EUR";
break;
case "英鎊":
currency = "GBP";
break;
case "新加坡元":
currency = "SGD";
break;
default:
break;
}
return currency;
}
@Override
public Boolean uploadAttachment(AttachmentUploadRequest attachmentUploadRequest) { public Boolean uploadAttachment(AttachmentUploadRequest attachmentUploadRequest) {
String policyBizId = attachmentUploadRequest.getPolicyBizId(); String policyBizId = attachmentUploadRequest.getPolicyBizId();
if (policyBizId == null) { if (policyBizId == null) {
......
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 CommissionStatisticsVO {
/**
* 总金额
*/
@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;
}
...@@ -14,6 +14,12 @@ import java.util.Date; ...@@ -14,6 +14,12 @@ import java.util.Date;
public class CommissionVO implements Serializable { public class CommissionVO implements Serializable {
/** /**
* commission id
*/
@Schema(description = "commission id")
private Long id;
/**
* 保单来佣业务id * 保单来佣业务id
*/ */
@Schema(description = "保单来佣业务id") @Schema(description = "保单来佣业务id")
......
...@@ -52,4 +52,26 @@ ...@@ -52,4 +52,26 @@
left join policy_broker pb on pb.policy_no = p.policy_no and pb.is_deleted = 0 left join policy_broker pb on pb.policy_no = p.policy_no and pb.is_deleted = 0
</select> </select>
<!-- 总金额:统计保单预计来佣表 已入账金额:统计来佣表-->
<select id="getCommissionStatistics" resultType="com.yd.csf.service.vo.CommissionStatisticsVO">
SELECT
COALESCE(SUM(e.amount), 0) as totalAmount,
COALESCE(SUM(c.amount), 0) as totalPaidAmount,
COUNT(DISTINCT c.policy_no) as totalPolicyCount
FROM commission c
LEFT JOIN (
SELECT policy_no, SUM(amount) as amount
FROM commission_expected
GROUP BY policy_no
) e ON c.policy_no = e.policy_no
<where>
<if test="commissionIdList != null and commissionIdList.size > 0">
c.id IN
<foreach collection="commissionIdList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.Fortune"> <resultMap id="BaseResultMap" type="com.yd.csf.service.model.Fortune">
<id property="id" column="id" /> <id property="id" column="id" />
<result property="fortuneBizId" column="fortune_biz_id" /> <result property="fortuneBizId" column="fortune_biz_id" />
<result property="commissionBizId" column="commission_biz_id" />
<result property="policyNo" column="policy_no" /> <result property="policyNo" column="policy_no" />
<result property="fortunePeriod" column="fortune_period" /> <result property="fortunePeriod" column="fortune_period" />
<result property="fortuneTotalPeriod" column="fortune_total_period" /> <result property="fortuneTotalPeriod" column="fortune_total_period" />
...@@ -36,7 +37,7 @@ ...@@ -36,7 +37,7 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,fortune_biz_id,policy_no,fortune_period,fortune_total_period,broker_biz_id, id,fortune_biz_id,commission_biz_id,policy_no,fortune_period,fortune_total_period,broker_biz_id,
team_biz_id,grade_commission_rate,share_rate,fortune_name,fortune_type, team_biz_id,grade_commission_rate,share_rate,fortune_name,fortune_type,
amount,currency,status,payout_date,is_tax, amount,currency,status,payout_date,is_tax,
tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id, tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id,
......
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