Commit 97f1f7f6 by jianan

应收管理、应付管理2

parent c7598e16
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.enums.ResultCode;
import com.yd.common.result.Result;
import com.yd.csf.api.dto.QueryCommissionExpectedByPageResponse;
import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.CommissionExpected;
......@@ -147,7 +148,7 @@ public class ApiCommissionExpectedController {
*/
@PostMapping("/queryCommissionExpectedByPage")
@Operation(summary = "应收款管理列表查询")
public Result<Map<String, Object>> queryCommissionExpectedByPage(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
public Result<QueryCommissionExpectedByPageResponse> queryCommissionExpectedByPage(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
long current = commissionExpectedQueryRequest.getPageNo();
long size = commissionExpectedQueryRequest.getPageSize();
......@@ -162,9 +163,9 @@ public class ApiCommissionExpectedController {
List<Long> expectedIds = commissionExpectedList.stream().map(CommissionExpected::getId).collect(Collectors.toList());
CommissionExpectedStatisticsVO expectedStatisticsVO = commissionExpectedService.getExpectedStatistics(expectedIds);
// 组装返回值
Map<String, Object> map = new HashMap<>();
map.put("expectedStatisticsVO", expectedStatisticsVO);
map.put("page", commissionExpectedService.getCommissionExpectedVOPage(commissionExpectedPage));
return Result.success(map);
QueryCommissionExpectedByPageResponse response = new QueryCommissionExpectedByPageResponse();
response.setExpectedStatisticsVO(expectedStatisticsVO);
response.setPage(commissionExpectedService.getCommissionExpectedVOPage(commissionExpectedPage));
return Result.success(response);
}
}
......@@ -5,6 +5,7 @@ import com.yd.common.constant.RedisConstants;
import com.yd.common.result.Result;
import com.yd.common.utils.RedisUtil;
import com.yd.csf.api.dto.ApiExpectedFortuneLogDto;
import com.yd.csf.api.dto.ApiExpectedFortunePageResponseVO;
import com.yd.csf.api.service.ApiExpectedFortuneLogService;
import com.yd.csf.api.service.ApiExpectedFortuneService;
import com.yd.csf.feign.client.expectedfortune.ApiExpectedFortuneFeignClient;
......@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
......@@ -93,7 +95,7 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
*/
@PostMapping("/list")
@Operation(summary = "分页查询 - 应付款管理列表(预计发佣列表)")
public Result<Map<String, Object>> list(@RequestBody ApiExpectedFortunePageRequest request) {
public Result<ApiExpectedFortunePageResponseVO> list(@RequestBody ApiExpectedFortunePageRequest request) {
return apiExpectedFortuneService.list(request);
}
......@@ -112,16 +114,16 @@ public class ApiExpectedFortuneController implements ApiExpectedFortuneFeignClie
/**
* 新增应付账款,可批量
*
* @param request
* @param fortuneAddRequestList
* @return
*/
@PostMapping("/add")
@Operation(summary = "新增应付账款,可批量")
public Result<Boolean> add(@RequestBody ExpectedFortuneAddRequest request) {
if (request == null || CollectionUtils.isEmpty(request.getAddList())) {
public Result<Boolean> add(@RequestBody List<ExpectedFortuneAddRequest> fortuneAddRequestList) {
if (fortuneAddRequestList == null || CollectionUtils.isEmpty(fortuneAddRequestList)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "新增应付账款列表不能为空");
}
return Result.success(apiExpectedFortuneService.add(request));
return Result.success(apiExpectedFortuneService.add(fortuneAddRequestList));
}
/**
......
......@@ -154,6 +154,22 @@ public class ApiFortuneController {
}
/**
* 批量创建发佣
*
* @param fortuneAddRequestList
* @param request
* @return
*/
@Operation(summary = "批量创建发佣")
@PostMapping("/addBatch")
public Result<Boolean> addFortuneBatch(@RequestBody List<FortuneAddRequest> fortuneAddRequestList, HttpServletRequest request) {
if (CollectionUtils.isEmpty(fortuneAddRequestList)) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "发佣数据不能为空");
}
return Result.success(fortuneService.addFortuneBatch(fortuneAddRequestList));
}
/**
* 下载选中的发佣数据
*
* @param fortuneDownloadRequest
......
package com.yd.csf.api.dto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class ApiExpectedFortunePageResponseVO {
@Schema(description = "预计出账统计信息")
private ExpectedFortuneStatisticsVO statisticsVO;
@Schema(description = "预计出账分页列表")
private IPage<ApiExpectedFortunePageResponse> page;
}
package com.yd.csf.api.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.service.vo.CommissionExpectedStatisticsVO;
import com.yd.csf.service.vo.CommissionExpectedVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "查询预计来佣分页响应")
public class QueryCommissionExpectedByPageResponse {
@Schema(description = "预计来佣统计信息")
private CommissionExpectedStatisticsVO expectedStatisticsVO;
@Schema(description = "预计来佣分页列表")
private Page<CommissionExpectedVO> page;
}
......@@ -2,6 +2,7 @@ package com.yd.csf.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.csf.api.dto.ApiExpectedFortunePageResponseVO;
import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest;
import com.yd.csf.feign.request.expectedfortune.ApiGenerateExpectedFortuneRequest;
import com.yd.csf.feign.request.expectedfortune.ExpectedFortuneAddRequest;
......@@ -34,7 +35,7 @@ public interface ApiExpectedFortuneService {
Boolean update(ExpectedFortuneUpdateRequest request);
Result<Map<String, Object>> list(ApiExpectedFortunePageRequest request);
Result<ApiExpectedFortunePageResponseVO> list(ApiExpectedFortunePageRequest request);
Boolean add(ExpectedFortuneAddRequest request);
Boolean add(List<ExpectedFortuneAddRequest> request);
}
......@@ -418,7 +418,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
}
@Override
public Result<Map<String, Object>> list(ApiExpectedFortunePageRequest request) {
public Result<ApiExpectedFortunePageResponseVO> list(ApiExpectedFortunePageRequest request) {
Page<ExpectedFortune> page = new Page<>(request.getPageNo(), request.getPageSize());
QueryWrapper<ExpectedFortune> queryWrapper = this.getQueryWrapper(request);
......@@ -428,16 +428,15 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
ExpectedFortuneStatisticsVO statisticsVO = iExpectedFortuneService.getStatistics(fortuneList.stream().map(ExpectedFortune::getId).collect(Collectors.toList()));
// 组装返回结果
Map<String, Object> result = new HashMap<>();
result.put("statisticsVO", statisticsVO);
result.put("page", iExpectedFortuneService.getVOPage(iPage));
return Result.success(result);
ApiExpectedFortunePageResponseVO response = new ApiExpectedFortunePageResponseVO();
response.setStatisticsVO(statisticsVO);
response.setPage(iExpectedFortuneService.getVOPage(iPage));
return Result.success(response);
}
@Override
public Boolean add(ExpectedFortuneAddRequest request) {
List<ExpectedFortuneDto> addList = request.getAddList();
if (CollectionUtils.isEmpty(addList)) {
public Boolean add(List<ExpectedFortuneAddRequest> fortuneAddRequestList) {
if (CollectionUtils.isEmpty(fortuneAddRequestList)) {
return true;
}
// 查询最新一条记录
......@@ -445,7 +444,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
ExpectedFortune latest = latestList.isEmpty() ? null : latestList.get(0);
ArrayList<ExpectedFortune> fortuneList = new ArrayList<>();
for (ExpectedFortuneDto expectedFortuneDto : addList) {
for (ExpectedFortuneAddRequest expectedFortuneDto : fortuneAddRequestList) {
ExpectedFortune expectedFortune = new ExpectedFortune();
BeanUtil.copyProperties(expectedFortuneDto, expectedFortune);
......@@ -465,7 +464,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
* @param expectedFortuneDto
* @return
*/
private String createPayableNo(ExpectedFortuneDto expectedFortuneDto, ExpectedFortune latest) {
private String createPayableNo(ExpectedFortuneAddRequest expectedFortuneDto, ExpectedFortune latest) {
String seq = "000001";
// 有最新记录,根据最新记录的序号生成下一个序号
if (!Objects.isNull(latest)) {
......
package com.yd.csf.feign.request.expectedfortune;
import com.yd.csf.feign.response.expectedfortune.PolicyInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExpectedFortuneAddRequest {
private List<ExpectedFortuneDto> addList;
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款")
private String fortuneBizType;
/**
* 保单号
*/
@Schema(description = "policy no")
private String policyNo;
/**
* 产品上架信息业务ID
*/
@Schema(description = "产品计划: 产品上架信息业务ID")
private String productLaunchBizId;
/**
* 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
*/
@Schema(description = "fortune period")
private Integer fortunePeriod;
/**
* 发佣总期数
*/
@Schema(description = "fortune total period")
private Integer fortuneTotalPeriod;
/**
* 转介人名称
*/
@Schema(description = "转介人名称")
private String broker;
/**
* 转介人业务ID
*/
@Schema(description = "broker biz id")
private String brokerBizId;
/**
* 团队名称
*/
@Schema(description = "团队名称")
private String team;
/**
* 所属团队业务ID
*/
@Schema(description = "所属团队 biz id")
private String teamBizId;
/**
* 发佣名称
*/
@Schema(description = "发佣名称")
private String fortuneName;
/**
* 发佣类型
*/
@Schema(description = "发佣类型")
private String fortuneType;
/**
* 预计应发金额
*/
@Schema(description = "预计应发金额")
private BigDecimal amount;
/**
* 发佣币种
*/
@Schema(description = "发佣币种")
private String currency;
/**
* 预计发佣日期
*/
@Schema(description = "预计发佣日期")
private LocalDate payoutDate;
}
......@@ -18,7 +18,7 @@ public class FortuneQueryRequest extends PageDto implements Serializable {
/**
* 出账状态
*/
@Schema(description = "出账状态 0=待出账 1=可出帐 2=完成出账 3=部分出账 4=保留 5=已失效, 字典值: csf_fortune_status")
@Schema(description = "出账状态 0=待出账 1=可出账,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出账,检核完成, 字典值: csf_fortune_status")
private String status;
/**
......
......@@ -15,6 +15,6 @@ public class GenerateFortuneRequest {
@Schema(description = "expected fortune id 列表")
private List<Long> expectedFortuneIdList;
@Schema(description = "本次发佣日期")
@Schema(description = "发佣检核日期")
private LocalDate payoutDate;
}
......@@ -38,4 +38,6 @@ public interface FortuneService extends IService<Fortune> {
Fortune queryOne(String fortuneBizId);
FortuneStatisticsVO getFortuneStatistics(List<Long> fortuneIdList);
Boolean addFortuneBatch(List<FortuneAddRequest> fortuneAddRequestList);
}
......@@ -31,6 +31,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.math.BigDecimal;
......@@ -68,6 +69,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private CommissionCompareRecordService commissionCompareRecordService;
@Resource
private CommissionAsyncService commissionAsyncService;
@Resource
private TransactionTemplate transactionTemplate;
@Override
......@@ -325,7 +328,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
@Transactional(rollbackFor = Exception.class)
public Boolean generateFortune(GenerateFortuneRequest generateFortuneRequest) {
if (generateFortuneRequest.getPayoutDate() == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "请选择本次发佣日期");
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "请选择发佣检核日期");
}
// 1. 查询对应的预计发佣记录
......@@ -633,10 +636,29 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addCommissionBatch(List<CommissionAddRequest> customerAddRequestList) {
if (CollectionUtils.isEmpty(customerAddRequestList)) {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "来佣数据不能为空");
}
Set<String> policyNoSet = customerAddRequestList.stream().map(CommissionAddRequest::getPolicyNo).collect(Collectors.toSet());
// 校验来佣所属保单是否存在
List<Policy> policyList = policyService.list(new QueryWrapper<Policy>().in("policy_no", policyNoSet));
// 校验来佣所属保单跟进是否存在
if (!CollectionUtils.isEmpty(policyList)) {
// 保单号映射
Map<String, Policy> policyMap = policyList.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
for (CommissionAddRequest commissionAddRequest : customerAddRequestList) {
Policy policy = policyMap.get(commissionAddRequest.getPolicyNo());
if (policy == null) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), String.format("保单号:%s不存在,不能添加来佣", commissionAddRequest.getPolicyNo()));
}
if (ObjectUtils.isEmpty(commissionAddRequest.getPremium())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), String.format("保单号:%s保费不能为空", commissionAddRequest.getPolicyNo()));
}
}
}
List<Commission> commissionList = new ArrayList<>();
for (CommissionAddRequest request : customerAddRequestList) {
Commission commission = new Commission();
......@@ -645,8 +667,20 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setCommissionBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_COMMISSION.getCode()));
commissionList.add(commission);
}
boolean b = this.saveOrUpdateBatch(commissionList);
// 开启新事务,比对数据
transactionTemplate.execute(status -> {
try {
commissionAsyncService.commissionCompareBatch(commissionList);
} catch (Exception e) {
// 比对失败不影响主事务,记录日志即可
log.error("批量新增, 比对操作执行失败, error: {}", e.getMessage());
}
return null;
});
return this.saveBatch(commissionList);
return b;
}
/**
......
......@@ -321,6 +321,25 @@ public class FortuneServiceImpl extends ServiceImpl<FortuneMapper, Fortune>
return this.baseMapper.getFortuneStatistics(fortuneIdList);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean addFortuneBatch(List<FortuneAddRequest> fortuneAddRequestList) {
if (CollectionUtils.isEmpty(fortuneAddRequestList)) {
return false;
}
List<Fortune> fortuneList = new ArrayList<>();
for (FortuneAddRequest fortuneAddRequest : fortuneAddRequestList) {
Fortune fortune = new Fortune();
BeanUtil.copyProperties(fortuneAddRequest, fortune);
// 生成发佣业务ID
fortune.setFortuneBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_FORTUNE.getCode()));
fortune.setStatus(FortuneStatusEnum.WAIT.getItemValue());
fortuneList.add(fortune);
}
return this.saveBatch(fortuneList);
}
}
......
......@@ -13,6 +13,7 @@ import java.util.Date;
import java.util.List;
@Data
@Schema(description = "预计来佣响应")
public class CommissionExpectedVO implements Serializable {
/**
......
......@@ -48,10 +48,12 @@
FROM
commission_expected
<where>
<if test="expectedIds != null and expectedIds.size > 0">
id IN
<foreach collection="expectedIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
</where>
</select>
</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