Commit d7f19dfe by jianan

前端对接问题修复64

parent b956ae2b
......@@ -24,8 +24,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* 预计发佣信息
......@@ -142,6 +144,28 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
}
/**
* 应付款导出
*
* @param request
* @return
*/
@PostMapping("/export")
@Operation(summary = "应付款导出")
public void exportExpectedFortune(@RequestBody ApiExpectedFortunePageRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
if (request == null) {
throw new RuntimeException("查询参数不能为空");
}
// 设置响应头
String fileName = URLEncoder.encode("应付款管理数据", "UTF-8").replaceAll("\\+", "%20");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
apiExpectedFortuneService.exportExpectedFortune(request, response);
}
/**
* 查询保单是否生成过预计发佣
* @param policyNo
* @return
......
package com.yd.csf.api.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.csf.api.dto.ApiExpectedFortunePageResponseVO;
......@@ -11,9 +12,11 @@ import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import com.yd.csf.service.model.CommissionRuleBinding;
import com.yd.csf.service.model.ExpectedFortune;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
......@@ -27,6 +30,8 @@ public interface ApiExpectedFortuneService {
Result<IPage<ApiExpectedFortunePageResponse>> page(ApiExpectedFortunePageRequest request);
QueryWrapper<ExpectedFortune> getQueryWrapper(ApiExpectedFortunePageRequest request);
Result<Boolean> isGenerate(String policyNo);
Result batchDelByPolicyNo(String policyNo);
......@@ -38,4 +43,6 @@ public interface ApiExpectedFortuneService {
Result<ApiExpectedFortunePageResponseVO> list(ApiExpectedFortunePageRequest request);
Boolean add(List<ExpectedFortuneAddRequest> request);
void exportExpectedFortune(ApiExpectedFortunePageRequest request, HttpServletResponse response);
}
package com.yd.csf.api.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -23,19 +26,18 @@ import com.yd.csf.feign.request.expectedfortune.*;
import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.feign.response.expectedfortune.ApiGenerateExpectedFortuneResponse;
import com.yd.csf.service.dto.CommissionRuleBindingDto;
import com.yd.csf.service.dto.FortuneStatisticsVO;
import com.yd.csf.service.dto.QueryPolicyAndBrokerDto;
import com.yd.csf.service.dto.QueryPolicyBrokerDto;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.CommissionRuleBinding;
import com.yd.csf.service.model.ExpectedFortune;
import com.yd.csf.service.model.Fortune;
import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyBroker;
import com.yd.csf.service.service.ICommissionRuleBindingService;
import com.yd.csf.service.service.IExpectedFortuneService;
import com.yd.csf.service.service.PolicyBrokerService;
import com.yd.csf.service.service.PolicyService;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.csf.service.vo.ExpectedFortuneExportDTO;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient;
import jodd.util.StringUtil;
......@@ -51,11 +53,13 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Slf4j
......@@ -477,6 +481,42 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
return true;
}
@Override
public void exportExpectedFortune(ApiExpectedFortunePageRequest request, HttpServletResponse response) {
// 查询数据
QueryWrapper<ExpectedFortune> queryWrapper = this.getQueryWrapper(request);
List<ExpectedFortune> fortuneList = iExpectedFortuneService.list(queryWrapper);
// 关联保单信息
List<Policy> policyList = policyService.lambdaQuery()
.in(Policy::getPolicyNo, fortuneList.stream().map(ExpectedFortune::getPolicyNo).collect(Collectors.toList()))
.list();
Map<String, Policy> policyMap = policyList.stream()
.collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
// 转换为导出DTO
List<ExpectedFortuneExportDTO> exportDataList = fortuneList.stream()
.map(fortune -> {
ExpectedFortuneExportDTO dto = ExpectedFortuneExportDTO.convertToExportDTO(fortune);
// 关联保单信息
Policy policy = policyMap.get(fortune.getPolicyNo());
if (!Objects.isNull(policy)) {
dto.setInsuranceCompany(policy.getInsuranceCompany());
dto.setProductName(policy.getProductName());
}
return dto;
})
.collect(Collectors.toList());
// 使用EasyExcel导出
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), ExpectedFortuneExportDTO.class).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet("应收款数据").build();
excelWriter.write(exportDataList, writeSheet);
} catch (Exception e) {
throw new RuntimeException("导出应收款数据失败", e);
}
}
/**
* 创建应付款编号 应付款类型-CSF-年份后两位-6位数字(不重复)
*
......@@ -517,6 +557,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
return response;
}
@Override
public QueryWrapper<ExpectedFortune> getQueryWrapper(ApiExpectedFortunePageRequest request) {
QueryWrapper<ExpectedFortune> queryWrapper = new QueryWrapper<>();
if (request == null) {
......
package com.yd.csf.service.vo;
import cn.hutool.core.convert.Convert;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.ExpectedFortune;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@Data
@ContentRowHeight(15)
@HeadRowHeight(20)
@ColumnWidth(20)
public class ExpectedFortuneExportDTO {
@ExcelProperty("预计发佣业务ID")
private String expectedFortuneBizId;
@ExcelProperty("应付款编号")
private String payableNo;
@ExcelProperty("应付款类型")
private String fortuneBizType;
@ExcelProperty("保单号")
private String policyNo;
@ExcelProperty("转介人名称")
private String broker;
@ExcelProperty("团队名称")
private String team;
@ExcelProperty("出账状态")
private String status;
@ExcelProperty("出账币种")
private String currency;
@ExcelProperty("出账期数")
private Integer fortunePeriod;
@ExcelProperty("出账总期数")
private Integer fortuneTotalPeriod;
@ExcelProperty("出账项目")
private String fortuneName;
@ExcelProperty("出账日(估)")
@DateTimeFormat("yyyy-MM-dd")
@ColumnWidth(25)
private Date payoutDate;
@ExcelProperty("出账日(实)")
@DateTimeFormat("yyyy-MM-dd")
@ColumnWidth(25)
private Date actualPayoutDate;
@ExcelProperty("出账金额(估)")
private BigDecimal amount;
@ExcelProperty("已出账比例(%)")
private BigDecimal paidRatio;
@ExcelProperty("已出账金额")
private BigDecimal paidAmount;
@ExcelProperty("待出账比例(%)")
private BigDecimal unpaidRatio;
@ExcelProperty("待出账金额")
private BigDecimal unpaidAmount;
@ExcelProperty("持有比例")
private String brokerRatio;
@ExcelProperty("保险公司")
private String insuranceCompany;
@ExcelProperty("产品计划")
private String productName;
@ExcelProperty("期交保费")
private BigDecimal premium;
@ExcelProperty("出账状态-修改理由")
@ColumnWidth(30)
private String statusDesc;
@ExcelProperty("备注")
@ColumnWidth(30)
private String remark;
@ExcelProperty("创建时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ColumnWidth(25)
private LocalDateTime createTime;
@ExcelProperty("更新时间")
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ColumnWidth(25)
private LocalDateTime updateTime;
/**
* 将对象转换为导出DTO
*/
public static ExpectedFortuneExportDTO convertToExportDTO(ExpectedFortune expectedFortune) {
ExpectedFortuneExportDTO dto = new ExpectedFortuneExportDTO();
dto.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
dto.setPayableNo(expectedFortune.getPayableNo());
dto.setFortuneBizType("R".equals(expectedFortune.getFortuneBizType()) ? "关联保单应付款" : "非关联保单应付款");
dto.setPolicyNo(expectedFortune.getPolicyNo());
dto.setPremium(expectedFortune.getPremium());
dto.setFortunePeriod(expectedFortune.getFortunePeriod());
dto.setFortuneTotalPeriod(expectedFortune.getFortuneTotalPeriod());
dto.setBroker(expectedFortune.getBroker());
dto.setTeam(expectedFortune.getTeam());
dto.setFortuneName(expectedFortune.getFortuneName());
dto.setBrokerRatio(expectedFortune.getBrokerRatio());
dto.setAmount(expectedFortune.getAmount());
dto.setCurrency(expectedFortune.getCurrency());
dto.setStatus(getStatusText(expectedFortune.getStatus()));
dto.setStatusDesc(expectedFortune.getStatusDesc());
dto.setPayoutDate(Convert.toDate(expectedFortune.getPayoutDate()));
dto.setActualPayoutDate(Convert.toDate(expectedFortune.getActualPayoutDate()));
dto.setPaidAmount(expectedFortune.getPaidAmount());
dto.setUnpaidAmount(expectedFortune.getUnpaidAmount());
dto.setPaidRatio(expectedFortune.getPaidRatio());
dto.setRemark(expectedFortune.getRemark());
dto.setCreateTime(expectedFortune.getCreateTime());
dto.setUpdateTime(expectedFortune.getUpdateTime());
return dto;
}
/**
* 获取状态文本
*/
public static String getStatusText(String status) {
if (status == null) return "未知";
for (FortuneStatusEnum enumItem : FortuneStatusEnum.values()) {
if (enumItem.getItemValue().equals(status)) {
return enumItem.getItemLabel();
}
}
return "未知";
}
}
\ No newline at end of file
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