Commit e9c901a4 by jianan

前端对接问题修复42

parent 90570caa
......@@ -14,10 +14,7 @@ import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.component.CommissionAsyncService;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.CommissionStatusEnum;
import com.yd.csf.service.model.Commission;
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.model.*;
import com.yd.csf.service.service.*;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
......@@ -44,6 +41,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
......@@ -73,24 +71,26 @@ public class ApiCommissionController {
private CommissionAsyncService commissionAsyncService;
@Resource
private PolicyFollowService policyFollowService;
@Resource
private PolicyService policyService;
@PostMapping("/upload/excel")
@Operation(summary = "上传入账Excel文件")
@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 {
// 校验来佣检核年月是否为空
if (Objects.isNull(reconciliationYearMonth)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "来佣检核年月不能为空");
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "入账检核年月不能为空");
}
List<CommissionExcelDTO> dataList = new ArrayList<>();
try {
dataList = EasyExcel.read(file.getInputStream())
.head(CommissionExcelDTO.class)
.sheet("来佣")
.sheet("template")
.doReadSync();
} catch (IOException e) {
......@@ -107,19 +107,23 @@ public class ApiCommissionController {
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()
.map(CommissionExcelDTO::getPolicyNo)
.map(CommissionExcelDTO::getPolicyNo2)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
List<PolicyFollow> policyFollows = policyFollowService.list(new LambdaQueryWrapper<PolicyFollow>()
.in(PolicyFollow::getPolicyNo, policyNos)
.select(PolicyFollow::getPolicyNo));
Set<String> existingPolicyNos = policyFollows.stream().map(PolicyFollow::getPolicyNo).collect(Collectors.toSet());
List<Policy> policies = policyService.lambdaQuery()
.in(Policy::getPolicyNo, policyNos)
.list();
Set<String> existingPolicyNos = policies.stream().map(Policy::getPolicyNo).collect(Collectors.toSet());
StringBuilder errorMsg = new StringBuilder();
for (CommissionExcelDTO excelDTO : dataList) {
......@@ -145,23 +149,26 @@ public class ApiCommissionController {
// 数据处理
List<Commission> entities = processData(dataList, loginUserId);
// 批量比对
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
try {
// 重新查询最新的数据,获取已提交的数据
commissionAsyncService.commissionCompareBatch(entities);
} catch (Exception e) {
// 比对失败不影响主事务,记录日志即可
log.error("批量导入, 比对操作执行失败, error: {}", e.getMessage());
}
}
}
);
// 转换为 VO
List<CommissionVO> commissionVOList = commissionService.getCommissionList(entities);
return Result.success(true);
// 批量比对
// TransactionSynchronizationManager.registerSynchronization(
// new TransactionSynchronization() {
// @Override
// public void afterCommit() {
// try {
// // 重新查询最新的数据,获取已提交的数据
// commissionAsyncService.commissionCompareBatch(entities);
// } catch (Exception e) {
// // 比对失败不影响主事务,记录日志即可
// log.error("批量导入, 比对操作执行失败, error: {}", e.getMessage());
// }
// }
// }
// );
return Result.success(commissionVOList);
}
/**
......@@ -198,18 +205,18 @@ public class ApiCommissionController {
}
/**
* 1.处理导入的数据 2.比对预计来佣 3.保存到数据库
* 1.处理导入的数据
*/
private List<Commission> processData(List<CommissionExcelDTO> dataList, String loginUserId) {
List<Commission> entities = new ArrayList<>();
for (CommissionExcelDTO data : dataList) {
// 数据验证
Commission entity = CommissionExcelDTO.convertToEntity(data, loginUserId);
Commission entity = CommissionExcelDTO.convertToEntityNew(data, loginUserId);
entities.add(entity);
}
// 保存来佣数据
commissionService.saveBatch(entities);
// commissionService.saveBatch(entities);
return entities;
}
......@@ -247,6 +254,20 @@ public class ApiCommissionController {
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;
import com.alibaba.excel.annotation.ExcelProperty;
import com.yd.common.enums.CommonEnum;
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.CommissionExpected;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.math.BigDecimal;
import java.util.Date;
......@@ -50,6 +48,53 @@ public class CommissionExcelDTO {
@ExcelProperty("备注")
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 {
private String status;
/**
* 出账日期
* 预计出账日期
*/
private LocalDate payoutDate;
/**
* 实际出账日期
*/
private LocalDate actualPayoutDate;
/**
* 出账数据业务ID
*/
private String fortuneAccountBizId;
......
......@@ -24,6 +24,8 @@ public interface CommissionService extends IService<Commission> {
Page<CommissionVO> getCommissionVOPage(Page<Commission> commissionPage);
List<CommissionVO> getCommissionList(List<Commission> commissionList);
Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest);
Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest);
......
......@@ -158,6 +158,53 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
@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)
public Boolean updateCommission(CommissionUpdateRequest commissionUpdateRequest) {
String commissionBizId = commissionUpdateRequest.getCommissionBizId();
......
......@@ -183,8 +183,8 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
newFortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
newFortune.setExpectedFortuneBizId(expectedFortune.getExpectedFortuneBizId());
newFortune.setIsPart(1);
// 出账年月为次月
newFortune.setReconciliationYearMonth(calculateReconciliationYearMonth(fortune));
// 设置预计出账日期为次月
newFortune.setPayoutDate(calculateReconciliationYearMonth(fortune));
this.save(newFortune);
}
......@@ -205,10 +205,9 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return this.updateById(fortune);
}
private String calculateReconciliationYearMonth(Fortune fortune) {
// 出账年月为次月
LocalDate reconciliationDate = LocalDate.now().plusMonths(1);
return reconciliationDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
private LocalDate calculateReconciliationYearMonth(Fortune fortune) {
// 设置预计出账日期为次月
return LocalDate.now().plusMonths(1);
}
@Override
......
......@@ -27,6 +27,7 @@
<result property="currentPaymentAmount" column="current_payment_amount" />
<result property="status" column="status" />
<result property="payoutDate" column="payout_date" />
<result property="actualPayoutDate" column="actual_payout_date" />
<result property="isTax" column="is_tax" />
<result property="taxAmount" column="tax_amount" />
<result property="netAmount" column="net_amount" />
......@@ -46,7 +47,7 @@
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,
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,
calculation_formula,remark,is_deleted,creator_id,updater_id,
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