Commit af65649b by jianan

来佣接口12

parent 3098bf2d
...@@ -4,13 +4,18 @@ import com.alibaba.excel.EasyExcel; ...@@ -4,13 +4,18 @@ import com.alibaba.excel.EasyExcel;
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;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.csf.api.dto.CommissionExcelDTO; import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.CommissionQueryRequest; import com.yd.csf.service.dto.CommissionQueryRequest;
import com.yd.csf.service.dto.CommissionUpdateRequest; import com.yd.csf.service.dto.CommissionUpdateRequest;
import com.yd.csf.service.dto.GenerateFortuneRequest; import com.yd.csf.service.dto.GenerateFortuneRequest;
import com.yd.csf.service.enums.CommissionExpectedStatusEnum;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.model.Commission; import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected;
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.CommissionVO; import com.yd.csf.service.vo.CommissionVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
...@@ -25,8 +30,10 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -25,8 +30,10 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* 保单来佣接口 * 保单来佣接口
...@@ -44,32 +51,36 @@ public class ApiCommissionController { ...@@ -44,32 +51,36 @@ public class ApiCommissionController {
@Resource @Resource
private CommissionService commissionService; private CommissionService commissionService;
@Resource
private CommissionExpectedService commissionExpectedService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException { public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
List<CommissionExcelDTO> dataList = new ArrayList<>();
try { try {
List<CommissionExcelDTO> dataList = EasyExcel.read(file.getInputStream()) dataList = EasyExcel.read(file.getInputStream())
.head(CommissionExcelDTO.class) .head(CommissionExcelDTO.class)
.sheet("来佣") .sheet("来佣")
.doReadSync(); .doReadSync();
// 获取当前登录用户的ID
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 数据验证和处理
processData(dataList, loginUserId);
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException("Excel读取失败", e); throw new RuntimeException("Excel读取失败", e);
} }
// 获取当前登录用户的ID
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 数据验证和处理
processData(dataList, loginUserId);
return Result.success(true); return Result.success(true);
} }
/** /**
* 处理导入的数据 * 1.处理导入的数据 2.比对预计来佣 3.保存到数据库
*/ */
private void processData(List<CommissionExcelDTO> dataList, String loginUserId) { private void processData(List<CommissionExcelDTO> dataList, String loginUserId) {
List<Commission> entities = new ArrayList<>(); List<Commission> entities = new ArrayList<>();
...@@ -78,8 +89,50 @@ public class ApiCommissionController { ...@@ -78,8 +89,50 @@ public class ApiCommissionController {
Commission entity = CommissionExcelDTO.convertToEntity(data, loginUserId); Commission entity = CommissionExcelDTO.convertToEntity(data, loginUserId);
entities.add(entity); entities.add(entity);
} }
// 批量保存
// 根据导入的来佣获取保单号集合
List<String> policyNoList = entities.stream()
.map(Commission::getPolicyNo)
.collect(Collectors.toList());
// 根据保单号查询预计来佣
List<CommissionExpected> expectedList = commissionExpectedService.lambdaQuery()
.in(CommissionExpected::getPolicyNo, policyNoList)
.list();
// 校验导入的来佣是否与预计来佣一致
for (Commission commission : entities) {
String policyNo = commission.getPolicyNo();
Integer commissionPeriod = commission.getCommissionPeriod();
String commissionName = commission.getCommissionName();
CommissionExpected expected = getCommissionExpected(expectedList, policyNo, commissionPeriod, commissionName);
if (expected != null) {
if (expected.getAmount().compareTo(commission.getAmount()) == 0) {
// 一致,来佣状态设置为 已比对
commission.setStatus(CommissionStatusEnum.COMPARED.getItemValue());
// 预计来佣的状态设置为 已来佣
expected.setStatus(CommissionExpectedStatusEnum.COMPARED.getItemValue());
} else {
// 不一致,来佣状态设置为 部分来佣
commission.setStatus(CommissionStatusEnum.PARTIAL.getItemValue());
expected.setStatus(CommissionExpectedStatusEnum.PARTIAL.getItemValue());
}
}
}
// 保存来佣数据
commissionService.saveBatch(entities); commissionService.saveBatch(entities);
// 更新预计来佣状态
commissionExpectedService.updateBatchById(expectedList);
}
private static CommissionExpected getCommissionExpected(List<CommissionExpected> expectedList, String policyNo, Integer commissionPeriod, String commissionName) {
return expectedList.stream()
.filter(item -> item.getPolicyNo().equals(policyNo)
&& commissionPeriod.equals(item.getCommissionPeriod())
&& commissionName.equals(item.getCommissionName()))
.findFirst()
.orElse(null);
} }
/** /**
......
...@@ -8,15 +8,12 @@ import com.yd.common.result.Result; ...@@ -8,15 +8,12 @@ import com.yd.common.result.Result;
import com.yd.csf.api.service.ApiAppointmentService; import com.yd.csf.api.service.ApiAppointmentService;
import com.yd.csf.feign.dto.appointment.ApiAppointmentInfoDto; import com.yd.csf.feign.dto.appointment.ApiAppointmentInfoDto;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.Customer;
import com.yd.csf.service.model.Fna; import com.yd.csf.service.model.Fna;
import com.yd.csf.service.service.CustomerService;
import com.yd.csf.service.service.FnaService; import com.yd.csf.service.service.FnaService;
import com.yd.csf.service.vo.FnaVO; import com.yd.csf.service.vo.FnaVO;
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;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
......
package com.yd.csf.api.controller; package com.yd.csf.api.controller;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.gson.Gson;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum; import com.yd.common.enums.CommonEnum;
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.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.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.PolicyFollowQueryRequest; import com.yd.csf.service.dto.PolicyFollowQueryRequest;
import com.yd.csf.service.dto.PolicyFollowUpdateRequest; import com.yd.csf.service.dto.PolicyFollowUpdateRequest;
import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyBroker; import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.model.PolicyFollow; import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.service.PolicyBrokerService; import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.service.PolicyFollowService; import com.yd.csf.service.service.PolicyFollowService;
import com.yd.csf.service.service.PolicyService; import com.yd.csf.service.service.PolicyService;
...@@ -33,9 +43,11 @@ import javax.servlet.http.HttpServletRequest; ...@@ -33,9 +43,11 @@ import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* customer接口 * 新单跟进接口
* *
* @author jianan * @author jianan
* @since 2025-07-31 * @since 2025-07-31
...@@ -47,25 +59,63 @@ public class ApiPolicyFollowController { ...@@ -47,25 +59,63 @@ public class ApiPolicyFollowController {
private static final Logger log = LoggerFactory.getLogger(ApiPolicyFollowController.class); private static final Logger log = LoggerFactory.getLogger(ApiPolicyFollowController.class);
private final static Gson GSON = new Gson();
@Resource @Resource
private PolicyFollowService policyFollowService; private PolicyFollowService policyFollowService;
@Resource @Resource
private PolicyService policyService; private PolicyService policyService;
@Resource @Resource
private PolicyBrokerService policyBrokerService; private PolicyBrokerService policyBrokerService;
@Resource @Resource
private PolicyDataListener policyDataListener; private PolicyDataListener policyDataListener;
@Resource
private CommissionExpectedService commissionExpectedService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws IOException { public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file) throws Exception {
EasyExcel.read(file.getInputStream(), PolicyExcelDTO.class, policyDataListener).sheet("保单").doRead(); // 创建监听器用于读取保单数据
PolicyDataListener policyDataListener = new PolicyDataListener();
// 一次性读取所有Sheet
ExcelReader excelReader = EasyExcel.read(file.getInputStream()).build();
// 1. 读取保单数据
ReadSheet readSheet1 = EasyExcel.readSheet("保单")
.head(PolicyExcelDTO.class)
.registerReadListener(policyDataListener)
.build();
excelReader.read(readSheet1);
// 2. 读取预计来佣数据
List<CommissionExcelDTO> dataList = new ArrayList<>();
ReadSheet readSheet2 = EasyExcel.readSheet("预计来佣")
.head(CommissionExcelDTO.class)
.registerReadListener(new AnalysisEventListener<CommissionExcelDTO>() {
@Override
public void invoke(CommissionExcelDTO data, AnalysisContext context) {
dataList.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 读取完成
}
})
.build();
excelReader.read(readSheet2);
// 关闭读取器
excelReader.finish();
List<PolicyExcelDTO> dtoList = policyDataListener.getList(); List<PolicyExcelDTO> dtoList = policyDataListener.getList();
// 预计来佣根据保单号分组
Map<String, List<CommissionExcelDTO>> commissionMap = dataList.stream()
.collect(Collectors.groupingBy(CommissionExcelDTO::getPolicyNo));
// 转换为PolicyFollow对象 // 转换为PolicyFollow对象
List<PolicyFollowDTO> list = convertToObj(dtoList); List<PolicyFollowDTO> list = convertToObj(dtoList);
...@@ -82,6 +132,17 @@ public class ApiPolicyFollowController { ...@@ -82,6 +132,17 @@ public class ApiPolicyFollowController {
policyService.saveBatch(policyList); policyService.saveBatch(policyList);
policyBrokerService.saveBatch(policyBrokerList); policyBrokerService.saveBatch(policyBrokerList);
// 获取当前登录用户的ID
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
String loginUserId = currentLoginUser.getId().toString();
// 保存预计来佣
List<CommissionExpected> commissionExpectedList = new ArrayList<>();
for (CommissionExcelDTO commissionExcelDTO : dataList) {
CommissionExpected commissionExpected = CommissionExcelDTO.convertToCommissionExpectedObj(commissionExcelDTO, loginUserId);
commissionExpectedList.add(commissionExpected);
}
commissionExpectedService.saveBatch(commissionExpectedList);
return Result.success(true); return Result.success(true);
} }
......
...@@ -5,7 +5,9 @@ import com.yd.common.enums.CommonEnum; ...@@ -5,7 +5,9 @@ import com.yd.common.enums.CommonEnum;
import com.yd.common.utils.RandomStringGenerator; import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.enums.CommissionStatusEnum; import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.model.Commission; import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
...@@ -55,7 +57,35 @@ public class CommissionExcelDTO { ...@@ -55,7 +57,35 @@ public class CommissionExcelDTO {
entity.setCurrency(data.getCurrency()); entity.setCurrency(data.getCurrency());
entity.setCommissionDate(data.getCommissionDate()); entity.setCommissionDate(data.getCommissionDate());
entity.setRemark(data.getRemark()); entity.setRemark(data.getRemark());
entity.setStatus(CommissionStatusEnum.PENDING.getItemValue()); entity.setStatus(null);
entity.setCreatorId(loginUserId);
entity.setUpdaterId(loginUserId);
entity.setCreateTime(new Date());
entity.setUpdateTime(new Date());
return entity;
}
/**
* Excel数据转 预计来佣实体
*
* @param data
* @param loginUserId
* @return
*/
public static CommissionExpected convertToCommissionExpectedObj(CommissionExcelDTO data, String loginUserId) {
CommissionExpected entity = new CommissionExpected();
// 字段映射
entity.setPolicyNo(data.getPolicyNo());
entity.setCommissionBizId(RandomStringGenerator.generateBizId16("commission_expected"));
entity.setReconciliationCompany(data.getReconciliationCompany());
entity.setCommissionPeriod(data.getCommissionPeriod());
entity.setTotalPeriod(data.getTotalPeriod());
entity.setCommissionName(data.getCommissionName());
entity.setAmount(data.getAmount());
entity.setCurrency(data.getCurrency());
entity.setCommissionDate(data.getCommissionDate());
entity.setRemark(data.getRemark());
entity.setStatus("0");
entity.setCreatorId(loginUserId); entity.setCreatorId(loginUserId);
entity.setUpdaterId(loginUserId); entity.setUpdaterId(loginUserId);
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
......
package com.yd.csf.service.dao;
import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author Zhang Jianan
* @description 针对表【commission_expected(预计来佣表)】的数据库操作Mapper
* @createDate 2025-10-08 19:47:40
* @Entity generator.domain.CommissionExpected
*/
public interface CommissionExpectedMapper extends BaseMapper<CommissionExpected> {
}
package com.yd.csf.service.enums;
/**
* 预计来佣状态枚举
*/
public enum CommissionExpectedStatusEnum {
PENDING("待来佣","0"),
COMPARED("已比对","1"),
PARTIAL("部分来佣","2"),
;
//字典项标签(名称)
private String itemLabel;
//字典项值
private String itemValue;
//构造函数
CommissionExpectedStatusEnum(String itemLabel, String itemValue) {
this.itemLabel = itemLabel;
this.itemValue = itemValue;
}
public String getItemLabel() {
return itemLabel;
}
public String getItemValue() {
return itemValue;
}
}
...@@ -6,9 +6,9 @@ package com.yd.csf.service.enums; ...@@ -6,9 +6,9 @@ package com.yd.csf.service.enums;
public enum CommissionStatusEnum { public enum CommissionStatusEnum {
//来佣状态枚举 //来佣状态枚举
PENDING("待来佣","0"),
COMPARED("已比对","1"), COMPARED("已比对","1"),
CANCELLED("已退保","2"), PARTIAL("部分来佣","2"),
; ;
//字典项标签(名称) //字典项标签(名称)
private String itemLabel; private String itemLabel;
......
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.yd.csf.service.vo.FnaVO;
import lombok.Data;
import org.springframework.beans.BeanUtils;
/**
* 预计来佣表
* @TableName commission_expected
*/
@TableName(value ="commission_expected")
@Data
public class CommissionExpected implements Serializable {
/**
* serial id
*/
@TableId(type = IdType.AUTO)
private Long id;
/**
* 保单来佣业务id
*/
private String commissionBizId;
/**
* 保单号
*/
private String policyNo;
/**
* 对账公司
*/
private String reconciliationCompany;
/**
* 对账公司业务id
*/
private String reconciliationCompanyBizId;
/**
* 佣金期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
private Integer commissionPeriod;
/**
* 总来佣期数
*/
private Integer totalPeriod;
/**
* 来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
private String commissionName;
/**
* 来佣类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
private String commissionType;
/**
* 来佣金额
*/
private BigDecimal amount;
/**
* 来佣币种
*/
private String currency;
/**
* 来佣日期
*/
private Date commissionDate;
/**
* 来佣状态 0=待来佣 1=已来佣 2=部分来佣
*/
private String status;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.yd.csf.service.service;
import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author Zhang Jianan
* @description 针对表【commission_expected(预计来佣表)】的数据库操作Service
* @createDate 2025-10-08 19:47:40
*/
public interface CommissionExpectedService extends IService<CommissionExpected> {
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.service.CommissionExpectedService;
import com.yd.csf.service.dao.CommissionExpectedMapper;
import org.springframework.stereotype.Service;
/**
* @author Zhang Jianan
* @description 针对表【commission_expected(预计来佣表)】的数据库操作Service实现
* @createDate 2025-10-08 19:47:40
*/
@Service
public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpectedMapper, CommissionExpected>
implements CommissionExpectedService{
}
...@@ -75,9 +75,9 @@ public class CommissionVO implements Serializable { ...@@ -75,9 +75,9 @@ public class CommissionVO implements Serializable {
private Date commissionDate; private Date commissionDate;
/** /**
* 来佣状态 0=未比对 1=已比对 * 来佣状态
*/ */
@Schema(description = "来佣状态 0=待来佣 1=已比对 2=已退保") @Schema(description = "来佣状态 1=已比对 2=部分来佣")
private String status; private String status;
/** /**
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yd.csf.service.dao.CommissionExpectedMapper">
<resultMap id="BaseResultMap" type="com.yd.csf.service.model.CommissionExpected">
<id property="id" column="id" />
<result property="commissionBizId" column="commission_biz_id" />
<result property="policyNo" column="policy_no" />
<result property="reconciliationCompany" column="reconciliation_company" />
<result property="reconciliationCompanyBizId" column="reconciliation_company_biz_id" />
<result property="commissionPeriod" column="commission_period" />
<result property="totalPeriod" column="total_period" />
<result property="commissionName" column="commission_name" />
<result property="commissionType" column="commission_type" />
<result property="amount" column="amount" />
<result property="currency" column="currency" />
<result property="commissionDate" column="commission_date" />
<result property="status" column="status" />
<result property="remark" column="remark" />
<result property="isDeleted" column="is_deleted" />
<result property="creatorId" column="creator_id" />
<result property="updaterId" column="updater_id" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="Base_Column_List">
id,commission_biz_id,policy_no,reconciliation_company,reconciliation_company_biz_id,commission_period,
total_period,commission_name,commission_type,amount,currency,
commission_date,status,remark,is_deleted,creator_id,
updater_id,create_time,update_time
</sql>
</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