Commit d063ba5b by jianan

来佣接口5

parent 39fc2df1
......@@ -9,11 +9,13 @@ import com.yd.csf.api.dto.CommissionExcelDTO;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.CommissionQueryRequest;
import com.yd.csf.service.dto.CommissionUpdateRequest;
import com.yd.csf.service.dto.GenerateFortuneRequest;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.service.CommissionService;
import com.yd.csf.service.vo.CommissionVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
......@@ -80,6 +82,24 @@ public class ApiCommissionController {
commissionService.saveBatch(entities);
}
/**
* 生成可出账(发佣)记录,支持手动复选框选择
*
* @param generateFortuneRequest
* @param request
* @return
*/
@PostMapping("/generate/fortune")
@Operation(summary = "生成可出账(发佣)记录,支持手动复选框选择")
public Result<Boolean> generateFortune(@RequestBody GenerateFortuneRequest generateFortuneRequest,
HttpServletRequest request) {
List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList();
if (CollectionUtils.isEmpty(commissionBizIdList)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "commissionBizIdList不能为空");
}
return Result.success(commissionService.generateFortune(generateFortuneRequest));
}
/**
* 创建保单来佣
......
......@@ -4,16 +4,24 @@ import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.csf.api.dto.FortuneImportDTO;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.FortuneDownloadRequest;
import com.yd.csf.service.dto.FortuneQueryRequest;
import com.yd.csf.service.dto.FortuneUpdateRequest;
import com.yd.csf.service.model.Fortune;
import com.yd.csf.service.service.FortuneService;
import com.yd.csf.service.vo.FortuneVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.servers.Server;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.models.annotations.OpenAPI30;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
......@@ -22,6 +30,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
......@@ -81,22 +90,22 @@ public class ApiFortuneController {
}
/**
* 创建保单发佣
* 下载选中的发佣数据
*
* @param customerAddRequest
* @param request
* @param fortuneDownloadRequest
* @param response
* @return
*/
// @Operation(summary = "创建保单发佣")
// @PostMapping("/add")
// @Transactional(rollbackFor = Exception.class)
// public Result<Map<String, Object>> addCustomer(@RequestBody CustomerAddRequest customerAddRequest, HttpServletRequest request) {
// if (customerAddRequest == null) {
// return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), ErrorCode.PARAMS_ERROR.getMessage());
// }
// return Result.success(policyFollowService.addCustomer(customerAddRequest));
// }
@Operation(summary = "下载选中的发佣数据")
@PostMapping("/download")
public void downloadFortune(@RequestBody FortuneDownloadRequest fortuneDownloadRequest, HttpServletResponse response) throws IOException {
if (CollectionUtils.isEmpty(fortuneDownloadRequest.getFortuneBizIdList())) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "请选择要下载的发佣数据");
}
fortuneService.downloadFortune(fortuneDownloadRequest, response);
}
/**
* 删除fna
......
......@@ -57,7 +57,7 @@ public class FortuneImportDTO {
entity.setBroker(data.getBroker());
entity.setTeam(data.getTeam());
entity.setRemark(data.getRemark());
entity.setStatus(FortuneStatusEnum.UNSENT.getItemValue());
entity.setStatus(FortuneStatusEnum.IN_PROCESS.getItemValue());
entity.setCreatorId(loginUserId);
entity.setUpdaterId(loginUserId);
entity.setCreateTime(new Date());
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class FortuneDownloadRequest {
@Schema(description = "发佣数据业务Id列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> fortuneBizIdList;
}
package com.yd.csf.service.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class FortuneExportDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty("发佣数据业务id")
private String fortuneBizId;
@ExcelProperty("保单号")
private String policyNo;
@ExcelProperty("发佣期数")
private Integer fortunePeriod;
@ExcelProperty("总发佣期数")
private Integer fortuneTotalPeriod;
@ExcelProperty("发佣项目")
private String fortuneName;
@ExcelProperty("发佣金额")
private BigDecimal amount;
@ExcelProperty("发佣币种")
private String currency;
@ExcelProperty("转介人")
private String broker;
@ExcelProperty("所属团队")
private String team;
@ExcelProperty("备注")
private String remark;
}
......@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
* 查询fortune请求
......@@ -14,11 +15,10 @@ import java.io.Serializable;
@EqualsAndHashCode(callSuper = true)
@Data
public class FortuneQueryRequest extends PageDto implements Serializable {
/**
* 发佣状态
*/
@Schema(description = "发佣状态 '0'-'待发佣','1'-'已发并关账', 字典值: csf_fortune_status")
@Schema(description = "发佣状态 '0'-'暂不可发','1'-'可发放','2'-'已发并关账', 字典值: csf_fortune_status")
private String status;
/**
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class GenerateFortuneRequest {
@Schema(description = "佣金业务id列表")
private List<String> commissionBizIdList;
}
......@@ -6,8 +6,10 @@ package com.yd.csf.service.enums;
public enum FortuneStatusEnum {
//发佣状态枚举
UNSENT("待发佣","0"),
SENT("已发并关账","1"),
IN_PROCESS("暂不可发","0"),
CANSEND("可发放","1"),
SENT("已发并关账","2"),
;
//字典项标签(名称)
private String itemLabel;
......
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.dto.CommissionQueryRequest;
import com.yd.csf.service.dto.CommissionUpdateRequest;
import com.yd.csf.service.dto.GenerateFortuneRequest;
import com.yd.csf.service.model.Commission;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.CommissionVO;
......@@ -21,4 +22,6 @@ public interface CommissionService extends IService<Commission> {
Page<CommissionVO> getCommissionVOPage(Page<Commission> commissionPage);
Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest);
Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest);
}
......@@ -2,12 +2,16 @@ package com.yd.csf.service.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.dto.FortuneDownloadRequest;
import com.yd.csf.service.dto.FortuneQueryRequest;
import com.yd.csf.service.dto.FortuneUpdateRequest;
import com.yd.csf.service.model.Fortune;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.FortuneVO;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author Zhang Jianan
* @description 针对表【fortune(保单发佣表)】的数据库操作Service
......@@ -20,4 +24,6 @@ public interface FortuneService extends IService<Fortune> {
Page<FortuneVO> getFortuneVOPage(Page<Fortune> fortunePage);
Boolean updateFortune(FortuneUpdateRequest fortuneUpdateRequest);
void downloadFortune(FortuneDownloadRequest fortuneDownloadRequest, HttpServletResponse response) throws IOException;
}
......@@ -6,21 +6,29 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.dto.CommissionQueryRequest;
import com.yd.csf.service.dto.CommissionUpdateRequest;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.Customer;
import com.yd.csf.service.dto.GenerateFortuneRequest;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*;
import com.yd.csf.service.service.CommissionService;
import com.yd.csf.service.dao.CommissionMapper;
import com.yd.csf.service.service.FortuneService;
import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.CommissionVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -32,6 +40,15 @@ import java.util.stream.Collectors;
public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commission>
implements CommissionService{
@Resource
private FortuneService fortuneService;
@Resource
private PolicyService policyService;
@Resource
private PolicyBrokerService policyBrokerService;
@Override
public QueryWrapper<Commission> getQueryWrapper(CommissionQueryRequest commissionQueryRequest) {
QueryWrapper<Commission> queryWrapper = new QueryWrapper<>();
......@@ -87,6 +104,68 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return this.updateById(commission);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
List<String> commissionBizIdList = generateFortuneRequest.getCommissionBizIdList();
List<Commission> commissionList = this.list(new QueryWrapper<Commission>().in("commission_biz_id", commissionBizIdList));
// 获取所有保单号
Set<String> policyNoSet = commissionList.stream().map(Commission::getPolicyNo).collect(Collectors.toSet());
// 根据保单号查询所有发佣记录
List<Fortune> fortuneList = fortuneService.list(new QueryWrapper<Fortune>().in("policy_no", policyNoSet));
// 校验,如果有"可发放或已发并关账"的发佣记录,不能重复生成
for (Fortune item : fortuneList) {
if (StringUtils.equals(item.getStatus(), FortuneStatusEnum.CANSEND.getItemValue()) ||
StringUtils.equals(item.getStatus(), FortuneStatusEnum.SENT.getItemValue())) {
throw new BusinessException(ResultCode.FAIL.getCode(), "该来佣记录已被处理,不能重复生成");
}
}
// 1.查询所有保单号对应的保单
List<Policy> policyList = policyService.list(new QueryWrapper<Policy>().in("policy_no", policyNoSet));
// 构建保单号到保单的映射
Map<String, Policy> policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, policy -> policy));
// 2.根据保单号查询所有转介人
List<PolicyBroker> brokerList = policyBrokerService.list(new QueryWrapper<PolicyBroker>().in("policy_no", policyNoSet));
// 构建保单号到转介人的映射
Map<String, List<PolicyBroker>> brokerMap = brokerList.stream().collect(Collectors.groupingBy(PolicyBroker::getPolicyNo));
// 3.删除旧的发佣记录
fortuneService.remove(new QueryWrapper<Fortune>().in("policy_no", policyNoSet));
// 4. 构建发佣记录
List<Fortune> newFortuneList = new ArrayList<>();
for (Commission commission : commissionList) {
String policyNo = commission.getPolicyNo();
List<PolicyBroker> policyBrokers = brokerMap.get(policyNo);
for (PolicyBroker policyBroker : policyBrokers) {
Fortune fortune = new Fortune();
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setPolicyNo(policyNo);
fortune.setBroker(policyBroker.getBrokerName());
fortune.setStatus(FortuneStatusEnum.IN_PROCESS.getItemValue());
fortune.setCreateTime(new Date());
fortune.setUpdateTime(new Date());
newFortuneList.add(fortune);
}
}
// 5. 保存发佣记录
if (CollUtil.isNotEmpty(newFortuneList)) {
boolean saveSuccess = fortuneService.saveBatch(newFortuneList);
if (!saveSuccess) {
throw new BusinessException(ResultCode.FAIL.getCode(), "保存发佣记录失败");
}
}
return true;
}
}
......
package com.yd.csf.service.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -9,6 +10,8 @@ import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.csf.service.dto.FortuneDownloadRequest;
import com.yd.csf.service.dto.FortuneExportDTO;
import com.yd.csf.service.dto.FortuneQueryRequest;
import com.yd.csf.service.dto.FortuneUpdateRequest;
import com.yd.csf.service.model.Fortune;
......@@ -19,6 +22,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
......@@ -83,6 +89,36 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return this.updateById(fortune);
}
@Override
public void downloadFortune(FortuneDownloadRequest fortuneDownloadRequest, HttpServletResponse response) throws IOException {
List<String> fortuneBizIdList = fortuneDownloadRequest.getFortuneBizIdList();
if (CollUtil.isNotEmpty(fortuneBizIdList)) {
List<Fortune> fortuneList = this.list(new QueryWrapper<Fortune>().in("fortune_biz_id", fortuneBizIdList));
if (CollUtil.isNotEmpty(fortuneList)) {
// 转换为导出DTO
List<FortuneExportDTO> exportDTOList = fortuneList.stream().map(fortune -> {
FortuneExportDTO exportDTO = new FortuneExportDTO();
BeanUtils.copyProperties(fortune, exportDTO);
return exportDTO;
}).collect(Collectors.toList());
// 设置响应头
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("utf-8");
String encode = URLEncoder.encode("保单发佣.xlsx", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + "fortune_"+System.currentTimeMillis() + ".xlsx");
// 导出
try {
EasyExcel.write(response.getOutputStream(), FortuneExportDTO.class).sheet("保单发佣").doWrite(exportDTOList);
} catch (IOException e) {
log.error("导出保单发佣数据失败", e);
throw new BusinessException(ResultCode.FAIL.getCode(), "导出失败");
}
}
}
}
}
......
......@@ -80,7 +80,7 @@ public class FortuneVO implements Serializable {
private String currency;
/**
* 佣金发放状态 0=待发佣 1=已发并关账
* 佣金发放状态 0=暂不可发 1=可发放 2=已发并关账
*/
private String status;
......
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