Commit e9c901a4 by jianan

前端对接问题修复42

parent 90570caa
...@@ -14,10 +14,7 @@ import com.yd.csf.service.common.ErrorCode; ...@@ -14,10 +14,7 @@ import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.component.CommissionAsyncService; import com.yd.csf.service.component.CommissionAsyncService;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
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.*;
import com.yd.csf.service.model.CommissionCompareRecord;
import com.yd.csf.service.model.CommissionEditRecord;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.service.*; import com.yd.csf.service.service.*;
import com.yd.csf.service.vo.CommissionStatisticsVO; import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO; import com.yd.csf.service.vo.CommissionVO;
...@@ -44,6 +41,7 @@ import java.math.BigDecimal; ...@@ -44,6 +41,7 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -73,24 +71,26 @@ public class ApiCommissionController { ...@@ -73,24 +71,26 @@ public class ApiCommissionController {
private CommissionAsyncService commissionAsyncService; private CommissionAsyncService commissionAsyncService;
@Resource @Resource
private PolicyFollowService policyFollowService; private PolicyFollowService policyFollowService;
@Resource
private PolicyService policyService;
@PostMapping("/upload/excel") @PostMapping("/upload/excel")
@Operation(summary = "上传入账Excel文件") @Operation(summary = "上传入账Excel文件")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<Boolean> uploadExcel(@RequestParam("file") MultipartFile file, public Result<List<CommissionVO>> uploadExcel(@RequestParam("file") MultipartFile file,
@RequestParam("reconciliationYearMonth") String reconciliationYearMonth) throws IOException { @RequestParam("reconciliationYearMonth") String reconciliationYearMonth) throws IOException {
// 校验来佣检核年月是否为空 // 校验来佣检核年月是否为空
if (Objects.isNull(reconciliationYearMonth)) { if (Objects.isNull(reconciliationYearMonth)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "来佣检核年月不能为空"); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账检核年月不能为空");
} }
List<CommissionExcelDTO> dataList = new ArrayList<>(); List<CommissionExcelDTO> dataList = new ArrayList<>();
try { try {
dataList = EasyExcel.read(file.getInputStream()) dataList = EasyExcel.read(file.getInputStream())
.head(CommissionExcelDTO.class) .head(CommissionExcelDTO.class)
.sheet("来佣") .sheet("template")
.doReadSync(); .doReadSync();
} catch (IOException e) { } catch (IOException e) {
...@@ -107,19 +107,23 @@ public class ApiCommissionController { ...@@ -107,19 +107,23 @@ public class ApiCommissionController {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "当前来佣检核年月所有记录都已检核成功,不允许上传新记录,若需更新请手动操作"); throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "当前来佣检核年月所有记录都已检核成功,不允许上传新记录,若需更新请手动操作");
} }
} }
// 校验数据是否为空
if (CollectionUtils.isEmpty(dataList)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "导入数据不能为空");
}
// 数据完整性校验 // 数据完整性校验
validateCommissionUpload(dataList); // validateCommissionUpload(dataList);
// 校验保单是否存在 // 校验保单是否存在
Set<String> policyNos = dataList.stream() Set<String> policyNos = dataList.stream()
.map(CommissionExcelDTO::getPolicyNo) .map(CommissionExcelDTO::getPolicyNo2)
.filter(StringUtils::isNotBlank) .filter(StringUtils::isNotBlank)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
List<PolicyFollow> policyFollows = policyFollowService.list(new LambdaQueryWrapper<PolicyFollow>() List<Policy> policies = policyService.lambdaQuery()
.in(PolicyFollow::getPolicyNo, policyNos) .in(Policy::getPolicyNo, policyNos)
.select(PolicyFollow::getPolicyNo)); .list();
Set<String> existingPolicyNos = policyFollows.stream().map(PolicyFollow::getPolicyNo).collect(Collectors.toSet()); Set<String> existingPolicyNos = policies.stream().map(Policy::getPolicyNo).collect(Collectors.toSet());
StringBuilder errorMsg = new StringBuilder(); StringBuilder errorMsg = new StringBuilder();
for (CommissionExcelDTO excelDTO : dataList) { for (CommissionExcelDTO excelDTO : dataList) {
...@@ -145,23 +149,26 @@ public class ApiCommissionController { ...@@ -145,23 +149,26 @@ public class ApiCommissionController {
// 数据处理 // 数据处理
List<Commission> entities = processData(dataList, loginUserId); List<Commission> entities = processData(dataList, loginUserId);
// 转换为 VO
List<CommissionVO> commissionVOList = commissionService.getCommissionList(entities);
// 批量比对 // 批量比对
TransactionSynchronizationManager.registerSynchronization( // TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() { // new TransactionSynchronization() {
@Override // @Override
public void afterCommit() { // public void afterCommit() {
try { // try {
// 重新查询最新的数据,获取已提交的数据 // // 重新查询最新的数据,获取已提交的数据
commissionAsyncService.commissionCompareBatch(entities); // commissionAsyncService.commissionCompareBatch(entities);
} catch (Exception e) { // } catch (Exception e) {
// 比对失败不影响主事务,记录日志即可 // // 比对失败不影响主事务,记录日志即可
log.error("批量导入, 比对操作执行失败, error: {}", e.getMessage()); // log.error("批量导入, 比对操作执行失败, error: {}", e.getMessage());
} // }
} // }
} // }
); // );
return Result.success(true); return Result.success(commissionVOList);
} }
/** /**
...@@ -198,18 +205,18 @@ public class ApiCommissionController { ...@@ -198,18 +205,18 @@ public class ApiCommissionController {
} }
/** /**
* 1.处理导入的数据 2.比对预计来佣 3.保存到数据库 * 1.处理导入的数据
*/ */
private List<Commission> processData(List<CommissionExcelDTO> dataList, String loginUserId) { private List<Commission> processData(List<CommissionExcelDTO> dataList, String loginUserId) {
List<Commission> entities = new ArrayList<>(); List<Commission> entities = new ArrayList<>();
for (CommissionExcelDTO data : dataList) { for (CommissionExcelDTO data : dataList) {
// 数据验证 // 数据验证
Commission entity = CommissionExcelDTO.convertToEntity(data, loginUserId); Commission entity = CommissionExcelDTO.convertToEntityNew(data, loginUserId);
entities.add(entity); entities.add(entity);
} }
// 保存来佣数据 // 保存来佣数据
commissionService.saveBatch(entities); // commissionService.saveBatch(entities);
return entities; return entities;
} }
...@@ -247,6 +254,20 @@ public class ApiCommissionController { ...@@ -247,6 +254,20 @@ public class ApiCommissionController {
return Result.success(commissionService.addCommissionBatch(customerAddRequestList)); return Result.success(commissionService.addCommissionBatch(customerAddRequestList));
} }
// commissionAsyncService.commissionCompareBatch(commissionList);
@GetMapping("/test")
public Result<List<Commission>> testCompareBatch(@RequestParam("customerBizId") String policyNo) {
if (StringUtils.isBlank(policyNo)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "保单号不能为空");
}
List<Commission> commissionList = commissionService.list(new QueryWrapper<Commission>().eq("policy_no", policyNo));
if (CollectionUtils.isEmpty(commissionList)) {
return Result.fail(ResultCode.PARAMS_ERROR.getCode(), "未查询到来佣数据");
}
commissionAsyncService.commissionCompareBatch(commissionList);
return Result.success(commissionList);
}
/** /**
* 同步到预计来佣 * 同步到预计来佣
* *
......
...@@ -3,11 +3,9 @@ package com.yd.csf.api.dto; ...@@ -3,11 +3,9 @@ package com.yd.csf.api.dto;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.yd.common.enums.CommonEnum; 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.model.Commission; import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected; 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;
...@@ -50,6 +48,53 @@ public class CommissionExcelDTO { ...@@ -50,6 +48,53 @@ public class CommissionExcelDTO {
@ExcelProperty("备注") @ExcelProperty("备注")
private String remark; private String remark;
@ExcelProperty("应收单类型")
private String commissionBizType;
@ExcelProperty("关联保单号")
private String policyNo2;
@ExcelProperty("佣金期数")
private Integer commissionPeriod2;
@ExcelProperty("入账日(实)")
private Date commissionDate2;
@ExcelProperty("入账金额")
private BigDecimal amount2;
@ExcelProperty("入账币种")
private String currency2;
@ExcelProperty("入账项目")
private String commissionName2;
@ExcelProperty("结算汇率(实)")
private String exchangeRate2;
/**
* 数据转换
*/
public static Commission convertToEntityNew(CommissionExcelDTO data, String loginUserId) {
Commission entity = new Commission();
// 字段映射
entity.setPolicyNo(data.getPolicyNo2());
entity.setCommissionPeriod(data.getCommissionPeriod2());
entity.setCommissionName(data.getCommissionName2());
entity.setAmount(data.getAmount2());
entity.setCurrency(data.getCurrency2());
entity.setExchangeRate(data.getExchangeRate2());
entity.setCommissionDate(data.getCommissionDate2());
entity.setRemark(data.getRemark());
entity.setStatus(null);
entity.setCreatorId(loginUserId);
entity.setUpdaterId(loginUserId);
entity.setCreateTime(new Date());
entity.setUpdateTime(new Date());
return entity;
}
/** /**
* 数据转换 * 数据转换
*/ */
......
...@@ -134,11 +134,16 @@ public class Fortune implements Serializable { ...@@ -134,11 +134,16 @@ public class Fortune implements Serializable {
private String status; private String status;
/** /**
* 出账日期 * 预计出账日期
*/ */
private LocalDate payoutDate; private LocalDate payoutDate;
/** /**
* 实际出账日期
*/
private LocalDate actualPayoutDate;
/**
* 出账数据业务ID * 出账数据业务ID
*/ */
private String fortuneAccountBizId; private String fortuneAccountBizId;
......
...@@ -24,6 +24,8 @@ public interface CommissionService extends IService<Commission> { ...@@ -24,6 +24,8 @@ public interface CommissionService extends IService<Commission> {
Page<CommissionVO> getCommissionVOPage(Page<Commission> commissionPage); Page<CommissionVO> getCommissionVOPage(Page<Commission> commissionPage);
List<CommissionVO> getCommissionList(List<Commission> commissionList);
Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest); Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest);
Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest); Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest);
......
...@@ -158,6 +158,53 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss ...@@ -158,6 +158,53 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} }
@Override @Override
public List<CommissionVO> getCommissionList(List<Commission> commissionList) {
if (CollUtil.isEmpty(commissionList)) {
return Collections.emptyList();
}
// 1.关联查询保单信息
Set<String> policyNoSet = commissionList.stream().map(Commission::getPolicyNo).collect(Collectors.toSet());
QueryWrapper<Policy> queryWrapper = new QueryWrapper<Policy>();
queryWrapper.in("policy_no", policyNoSet);
List<Policy> policyList = policyService.list(queryWrapper);
Map<String, Policy> policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, a -> a, (oldValue, newValue) -> newValue));
// 2.关联查询预计入账信息
Set<String> commissionExpectedBizIdSet = commissionList.stream().map(Commission::getCommissionExpectedBizId).collect(Collectors.toSet());
List<CommissionExpected> commissionExpectedList = commissionExpectedService.lambdaQuery()
.select(CommissionExpected::getCommissionExpectedBizId, CommissionExpected::getReceivableNo)
.in(CommissionExpected::getCommissionExpectedBizId, commissionExpectedBizIdSet)
.list();
Map<String, CommissionExpected> commissionExpectedMap = commissionExpectedList.stream().collect(Collectors.toMap(CommissionExpected::getCommissionExpectedBizId, a -> a, (oldValue, newValue) -> newValue));
// 填充信息
List<CommissionVO> commissionVOList = commissionList.stream().map(commission -> {
CommissionVO commissionVO = CommissionVO.objToVo(commission);
Policy policy = policyMap.get(commission.getPolicyNo());
if (policy != null) {
// 填充保费、产品名称、保险公司、对账公司
commissionVO.setPremium(policy.getPaymentPremium());
commissionVO.setProductName(policy.getProductName());
commissionVO.setProductLaunchBizId(policy.getProductLaunchBizId());
commissionVO.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commissionVO.setInsuranceCompany(policy.getInsuranceCompany());
commissionVO.setReconciliationCompany(policy.getReconciliationCompany());
commissionVO.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
}
CommissionExpected commissionExpected = commissionExpectedMap.get(commission.getCommissionExpectedBizId());
if (commissionExpected != null) {
// 填充应收账款编号
commissionVO.setReceivableNo(commissionExpected.getReceivableNo());
commissionVO.setCommissionExpectedStatus(commissionExpected.getStatus());
}
return commissionVO;
}).collect(Collectors.toList());
return commissionVOList;
}
@Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest) { public Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest) {
String commissionBizId = commissionUpdateRequest.getCommissionBizId(); String commissionBizId = commissionUpdateRequest.getCommissionBizId();
......
...@@ -183,8 +183,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -183,8 +183,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
newFortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode())); newFortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
newFortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId()); newFortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
newFortune.setIsPart(1); newFortune.setIsPart(1);
// 出账年月为次月 // 设置预计出账日期为次月
newFortune.setReconciliationYearMonth(calculateReconciliationYearMonth(fortune)); newFortune.setPayoutDate(calculateReconciliationYearMonth(fortune));
this.save(newFortune); this.save(newFortune);
} }
...@@ -205,10 +205,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune> ...@@ -205,10 +205,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return this.updateById(fortune); return this.updateById(fortune);
} }
private String calculateReconciliationYearMonth(Fortune fortune) { private LocalDate calculateReconciliationYearMonth(Fortune fortune) {
// 出账年月为次月 // 设置预计出账日期为次月
LocalDate reconciliationDate = LocalDate.now().plusMonths(1); return LocalDate.now().plusMonths(1);
return reconciliationDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
} }
@Override @Override
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
<result property="currentPaymentAmount" column="current_payment_amount" /> <result property="currentPaymentAmount" column="current_payment_amount" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="payoutDate" column="payout_date" /> <result property="payoutDate" column="payout_date" />
<result property="actualPayoutDate" column="actual_payout_date" />
<result property="isTax" column="is_tax" /> <result property="isTax" column="is_tax" />
<result property="taxAmount" column="tax_amount" /> <result property="taxAmount" column="tax_amount" />
<result property="netAmount" column="net_amount" /> <result property="netAmount" column="net_amount" />
...@@ -46,7 +47,7 @@ ...@@ -46,7 +47,7 @@
id,fortune_biz_id,expected_fortune_biz_id,reconciliation_year_month,fortune_biz_type,batch_biz_id, id,fortune_biz_id,expected_fortune_biz_id,reconciliation_year_month,fortune_biz_type,batch_biz_id,
commission_biz_id,policy_no,fortune_period,fortune_total_period,broker_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,is_part, team_biz_id,grade_commission_rate,share_rate,fortune_name,fortune_type,is_part,
amount,currency,current_payment_amount,status,payout_date,is_tax, amount,currency,current_payment_amount,status,payout_date,actual_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,
calculation_formula,remark,is_deleted,creator_id,updater_id, calculation_formula,remark,is_deleted,creator_id,updater_id,
create_time,update_time create_time,update_time
......
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