Commit bdfc676e by zhangxingmin

Merge remote-tracking branch 'origin/test' into test_zxm_salary

parents 4779ebb8 d0523a47
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<project version="4"> <project version="4">
<component name="Encoding"> <component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-api/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/yd-csf-api/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-api/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/yd-csf-api/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-feign/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/yd-csf-feign/src/main/java" charset="UTF-8" />
......
...@@ -14,6 +14,7 @@ import com.yd.csf.api.dto.QueryCommissionExpectedByPageNewResponse; ...@@ -14,6 +14,7 @@ import com.yd.csf.api.dto.QueryCommissionExpectedByPageNewResponse;
import com.yd.csf.api.dto.QueryCommissionExpectedByPageResponse; import com.yd.csf.api.dto.QueryCommissionExpectedByPageResponse;
import com.yd.csf.api.dto.ReceivableReportResponse; import com.yd.csf.api.dto.ReceivableReportResponse;
import com.yd.csf.api.service.ApiCommissionExpectedService; import com.yd.csf.api.service.ApiCommissionExpectedService;
import com.yd.csf.feign.request.commission.CommissionExpectedEditStatusRequest;
import com.yd.csf.service.common.ErrorCode; import com.yd.csf.service.common.ErrorCode;
import com.yd.csf.service.dto.*; import com.yd.csf.service.dto.*;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
...@@ -34,6 +35,7 @@ import org.apache.commons.lang3.ObjectUtils; ...@@ -34,6 +35,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -253,6 +255,16 @@ public class ApiCommissionExpectedController { ...@@ -253,6 +255,16 @@ public class ApiCommissionExpectedController {
} }
/** /**
* 修改入账状态
* @param request
* @return
*/
@PutMapping("/edit/status")
public Result editStatus(@Validated @RequestBody CommissionExpectedEditStatusRequest request) {
return apiCommissionExpectedService.editStatus(request);
}
/**
* 应收款导出(旧) * 应收款导出(旧)
* *
* @param commissionExpectedQueryRequest * @param commissionExpectedQueryRequest
...@@ -343,12 +355,24 @@ public class ApiCommissionExpectedController { ...@@ -343,12 +355,24 @@ public class ApiCommissionExpectedController {
@Operation(summary = "应收款报表") @Operation(summary = "应收款报表")
public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) { public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
//保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表 //保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表
List<String> queryPolicyNoList = policyFollowService.queryPolicyNoList(commissionExpectedQueryRequest.getPolicyHolder(), List<String> queryPolicyNoList = new ArrayList<>();
Boolean queryFlag = false;
if (StringUtils.isNotBlank(commissionExpectedQueryRequest.getPolicyHolder())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getSigner())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getBrokerName())
|| StringUtils.isNotBlank(commissionExpectedQueryRequest.getInsured())
){
queryPolicyNoList = policyFollowService.queryPolicyNoList(
commissionExpectedQueryRequest.getPolicyHolder(),
commissionExpectedQueryRequest.getSigner(), commissionExpectedQueryRequest.getSigner(),
commissionExpectedQueryRequest.getBrokerName(), commissionExpectedQueryRequest.getBrokerName(),
commissionExpectedQueryRequest.getInsured()); commissionExpectedQueryRequest.getInsured());
queryFlag = true;
}
log.info("应收款报表=>receivableReport=>queryPolicyNoList:{}",JSON.toJSONString(queryPolicyNoList));
// 构建查询条件 // 构建查询条件
commissionExpectedQueryRequest.setPolicyNoList(queryPolicyNoList); commissionExpectedQueryRequest.setPolicyNoList(queryPolicyNoList);
commissionExpectedQueryRequest.setQueryFlag(queryFlag);
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest); QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
// 先查询所有符合条件的记录ID(用于统计) // 先查询所有符合条件的记录ID(用于统计)
......
...@@ -197,9 +197,6 @@ public class ApiFortuneController { ...@@ -197,9 +197,6 @@ public class ApiFortuneController {
if (CollectionUtils.isEmpty(fortuneDownloadRequest.getFortuneBizIdList())) { if (CollectionUtils.isEmpty(fortuneDownloadRequest.getFortuneBizIdList())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "请选择要出账的发佣数据"); return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "请选择要出账的发佣数据");
} }
if (StringUtils.isBlank(fortuneDownloadRequest.getActualPayoutDate())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "请输入出账年月(实)");
}
fortuneService.downloadAccount(fortuneDownloadRequest, response); fortuneService.downloadAccount(fortuneDownloadRequest, response);
...@@ -449,6 +446,25 @@ public class ApiFortuneController { ...@@ -449,6 +446,25 @@ public class ApiFortuneController {
return Result.success(fortuneService.editActualPayoutDate(editActualPayoutDateRequest)); return Result.success(fortuneService.editActualPayoutDate(editActualPayoutDateRequest));
} }
/**
* 批量设置出账年月(实)),已设置的跳过
*
* @param editBatchActualPayoutDateRequest
* @return
*/
@PostMapping("/edit/actual_payout_date/batch")
@Operation(summary = "批量设置出账年月(实),已设置的跳过")
public Result<String> batchEditActualPayoutDate(@RequestBody BatchEditActualPayoutDateRequest editBatchActualPayoutDateRequest) {
if (editBatchActualPayoutDateRequest == null || CollectionUtils.isEmpty(editBatchActualPayoutDateRequest.getFortuneBizIdList())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "fortuneBizIdList 不能为空");
}
if (StringUtils.isBlank(editBatchActualPayoutDateRequest.getActualPayoutDate())) {
return Result.fail(ErrorCode.PARAMS_ERROR.getCode(), "actualPayoutDate 不能为空");
}
return Result.success(fortuneService.batchEditActualPayoutDate(editBatchActualPayoutDateRequest));
}
/** /**
* 修改结算汇率,设置完成后,更新到应付款管理明细中 * 修改结算汇率,设置完成后,更新到应付款管理明细中
* *
......
...@@ -18,7 +18,9 @@ import org.apache.commons.collections4.CollectionUtils; ...@@ -18,7 +18,9 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -128,6 +130,8 @@ public class EvaluateRankJobHandler { ...@@ -128,6 +130,8 @@ public class EvaluateRankJobHandler {
log.setFycLogBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_ACCUMULATED_FYC_LOG.getCode())); log.setFycLogBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_AGENT_ACCUMULATED_FYC_LOG.getCode()));
//操作来源 //操作来源
log.setSourceType(OprSourceEnum.CALM_TASK_EVALUATE_RANK.getItemValue()); log.setSourceType(OprSourceEnum.CALM_TASK_EVALUATE_RANK.getItemValue());
log.setCreateTime(LocalDateTime.now());
log.setUpdateTime(LocalDateTime.now());
return log; return log;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
iAgentAccumulatedFycLogService.saveOrUpdateBatch(addLogList); iAgentAccumulatedFycLogService.saveOrUpdateBatch(addLogList);
......
package com.yd.csf.api.service; package com.yd.csf.api.service;
import com.yd.common.result.Result;
import com.yd.csf.feign.request.commission.CommissionExpectedEditStatusRequest;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest; import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -7,4 +9,6 @@ import java.io.UnsupportedEncodingException; ...@@ -7,4 +9,6 @@ import java.io.UnsupportedEncodingException;
public interface ApiCommissionExpectedService { public interface ApiCommissionExpectedService {
void exportCommissionExpectedNew(CommissionExpectedQueryRequest commissionExpectedQueryRequest, HttpServletResponse response) throws UnsupportedEncodingException; void exportCommissionExpectedNew(CommissionExpectedQueryRequest commissionExpectedQueryRequest, HttpServletResponse response) throws UnsupportedEncodingException;
Result editStatus(CommissionExpectedEditStatusRequest request);
} }
...@@ -685,6 +685,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -685,6 +685,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
// 保單持有人 // 保單持有人
if (apiPolicyholderInfoDto != null) { if (apiPolicyholderInfoDto != null) {
follow.setPolicyHolder(StringUtils.isNotBlank(apiPolicyholderInfoDto.getNameCn()) ? apiPolicyholderInfoDto.getNameCn() : apiPolicyholderInfoDto.getNamePyEn()); follow.setPolicyHolder(StringUtils.isNotBlank(apiPolicyholderInfoDto.getNameCn()) ? apiPolicyholderInfoDto.getNameCn() : apiPolicyholderInfoDto.getNamePyEn());
follow.setPolicyHolderEn(apiPolicyholderInfoDto.getNamePyEn());
} }
// 受保人信息 // 受保人信息
...@@ -709,6 +710,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService { ...@@ -709,6 +710,7 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
&& !response.getApiAppointmentInfoDto().getUserSignDtoList().isEmpty()) { && !response.getApiAppointmentInfoDto().getUserSignDtoList().isEmpty()) {
ApiAppointmentUserSignDto firstSigner = response.getApiAppointmentInfoDto().getUserSignDtoList().get(0); ApiAppointmentUserSignDto firstSigner = response.getApiAppointmentInfoDto().getUserSignDtoList().get(0);
follow.setSigner(firstSigner.getName()); follow.setSigner(firstSigner.getName());
follow.setSignerSc(ChineseTextConverter.traditionalToSimplified(firstSigner.getName()));
follow.setSignerBizId(firstSigner.getAppointmentUserSignBizId()); follow.setSignerBizId(firstSigner.getAppointmentUserSignBizId());
follow.setPracticeCode(firstSigner.getPracticeCode()); follow.setPracticeCode(firstSigner.getPracticeCode());
} }
......
...@@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSON; ...@@ -7,7 +7,9 @@ import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.common.exception.BusinessException; import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.csf.api.service.ApiCommissionExpectedService; import com.yd.csf.api.service.ApiCommissionExpectedService;
import com.yd.csf.feign.request.commission.CommissionExpectedEditStatusRequest;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest; import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.yd.csf.service.service.CommissionExpectedService; import com.yd.csf.service.service.CommissionExpectedService;
...@@ -84,4 +86,21 @@ public class ApiCommissionExpectedServiceImpl implements ApiCommissionExpectedSe ...@@ -84,4 +86,21 @@ public class ApiCommissionExpectedServiceImpl implements ApiCommissionExpectedSe
} }
} }
/**
* 修改入账状态
* @param request
* @return
*/
@Override
public Result editStatus(CommissionExpectedEditStatusRequest request) {
CommissionExpected commissionExpected = commissionExpectedService.queryOne(request.getCommissionExpectedBizId());
if (commissionExpected == null) {
throw new BusinessException("预计来佣数据不存在");
}
commissionExpected.setStatus(request.getStatus());
commissionExpected.setStatusDesc(request.getStatusDesc());
commissionExpectedService.saveOrUpdate(commissionExpected);
return Result.success();
}
} }
...@@ -13,8 +13,10 @@ import com.yd.csf.feign.request.policyreceipt.ApiPolicyReceiptPageRequest; ...@@ -13,8 +13,10 @@ import com.yd.csf.feign.request.policyreceipt.ApiPolicyReceiptPageRequest;
import com.yd.csf.feign.response.policyreceipt.ApiPolicyReceiptDetailResponse; import com.yd.csf.feign.response.policyreceipt.ApiPolicyReceiptDetailResponse;
import com.yd.csf.feign.response.policyreceipt.ApiPolicyReceiptPageResponse; import com.yd.csf.feign.response.policyreceipt.ApiPolicyReceiptPageResponse;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
import com.yd.csf.service.model.PolicyFollow;
import com.yd.csf.service.model.PolicyReceipt; import com.yd.csf.service.model.PolicyReceipt;
import com.yd.csf.service.service.IPolicyReceiptService; import com.yd.csf.service.service.IPolicyReceiptService;
import com.yd.csf.service.service.PolicyFollowService;
import com.yd.csf.service.service.PolicyService; import com.yd.csf.service.service.PolicyService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -24,8 +26,10 @@ import org.springframework.stereotype.Service; ...@@ -24,8 +26,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.time.ZoneId;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.Objects; import java.util.Objects;
@Slf4j @Slf4j
...@@ -38,6 +42,9 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService { ...@@ -38,6 +42,9 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService {
@Autowired @Autowired
private PolicyService policyService; private PolicyService policyService;
@Autowired
private PolicyFollowService policyFollowService;
/** /**
* 分页列表查询-保单回执信息 * 分页列表查询-保单回执信息
* @param request * @param request
...@@ -94,6 +101,10 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService { ...@@ -94,6 +101,10 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService {
policyReceipt.setReceiptStatus(request.getReceiptStatus()); policyReceipt.setReceiptStatus(request.getReceiptStatus());
policyReceipt.setPolicyHolderSignature(!CollectionUtils.isEmpty(request.getPolicyHolderSignatureList()) ? String.join(";", request.getPolicyHolderSignatureList()) : ""); policyReceipt.setPolicyHolderSignature(!CollectionUtils.isEmpty(request.getPolicyHolderSignatureList()) ? String.join(";", request.getPolicyHolderSignatureList()) : "");
iPolicyReceiptService.saveOrUpdate(policyReceipt); iPolicyReceiptService.saveOrUpdate(policyReceipt);
//更新新单跟进回执信息
updateReceiptToPolicyFollow(policyReceipt);
return Result.success(); return Result.success();
} }
...@@ -120,6 +131,10 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService { ...@@ -120,6 +131,10 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService {
policyReceipt.setReceiptStatus(request.getReceiptStatus()); policyReceipt.setReceiptStatus(request.getReceiptStatus());
policyReceipt.setPolicyHolderSignature(!CollectionUtils.isEmpty(request.getPolicyHolderSignatureList()) ? String.join(";", request.getPolicyHolderSignatureList()) : ""); policyReceipt.setPolicyHolderSignature(!CollectionUtils.isEmpty(request.getPolicyHolderSignatureList()) ? String.join(";", request.getPolicyHolderSignatureList()) : "");
iPolicyReceiptService.saveOrUpdate(policyReceipt); iPolicyReceiptService.saveOrUpdate(policyReceipt);
//更新新单跟进回执信息
updateReceiptToPolicyFollow(policyReceipt);
return Result.success(); return Result.success();
} }
...@@ -141,4 +156,27 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService { ...@@ -141,4 +156,27 @@ public class ApiPolicyReceiptServiceImpl implements ApiPolicyReceiptService {
return Result.success(); return Result.success();
} }
/**
* 更新新单跟进信息的回执信息
* @param policyReceipt
* @return
*/
public Result updateReceiptToPolicyFollow(PolicyReceipt policyReceipt) {
PolicyFollow policyFollow = policyFollowService.queryOneByPolicyNo(policyReceipt.getPolicyNo());
if (policyFollow == null) {
throw new BusinessException("新单跟进信息不存在");
}
if ("CONFIRMED".equals(policyReceipt.getReceiptStatus())) {
//回执状态为已确认时,更新新单跟进信息的回执状态和回执日期
policyFollow.setReceiptStatus(policyReceipt.getReceiptStatus());
policyFollow.setReceiptDate(policyReceipt.getReceiptDate() != null ? Date.from(policyReceipt.getReceiptDate().atZone(ZoneId.systemDefault()).toInstant()) : null);
}else if ("UNCONFIRMED".equals(policyReceipt.getReceiptStatus())) {
//回执状态为未确认时,更新新单跟进信息的回执状态
policyFollow.setReceiptStatus(policyReceipt.getReceiptStatus());
policyFollow.setReceiptDate(null);
}
policyFollowService.saveOrUpdate(policyFollow);
return Result.success();
}
} }
...@@ -134,11 +134,11 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia ...@@ -134,11 +134,11 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
// 投保人-中文转简体 // 投保人-中文转简体
String policyHolderNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder()); String policyHolderNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder());
// 投保人-英文转小写 // 投保人-英文转小写
String policyHolderNameEnLc = EnglishTextUtil.toLowerCase(request.getPolicyHolder()); String policyHolderNameEnLc = EnglishTextUtil.toLowerCaseSafe(request.getPolicyHolder());
// 受保人-中文转简体 // 受保人-中文转简体
String insuredNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder()); String insuredNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder());
// 受保人-英文转小写 // 受保人-英文转小写
String insuredNameEnLc = EnglishTextUtil.toLowerCase(request.getPolicyHolder()); String insuredNameEnLc = EnglishTextUtil.toLowerCaseSafe(request.getPolicyHolder());
request.setPolicyHolderNameSc(policyHolderNameSc); request.setPolicyHolderNameSc(policyHolderNameSc);
request.setPolicyHolderNameEnLc(policyHolderNameEnLc); request.setPolicyHolderNameEnLc(policyHolderNameEnLc);
request.setInsuredNameSc(insuredNameSc); request.setInsuredNameSc(insuredNameSc);
......
...@@ -33,16 +33,17 @@ import com.yd.oss.feign.client.ApiExcelFeignClient; ...@@ -33,16 +33,17 @@ import com.yd.oss.feign.client.ApiExcelFeignClient;
import com.yd.oss.feign.dto.ExportParam; import com.yd.oss.feign.dto.ExportParam;
import com.yd.oss.feign.dto.ExportResult; import com.yd.oss.feign.dto.ExportResult;
import com.yd.oss.feign.request.ApiExportRequest; import com.yd.oss.feign.request.ApiExportRequest;
import com.yd.user.feign.client.sysdict.ApiSysDictFeignClient;
import com.yd.user.feign.request.sysdict.GetDictTypeListRequest;
import com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse;
import com.yd.user.feign.response.sysdict.GetDictTypeListResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
...@@ -61,6 +62,9 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService { ...@@ -61,6 +62,9 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService {
@Autowired @Autowired
private ApiExcelFeignClient apiExcelFeignClient; private ApiExcelFeignClient apiExcelFeignClient;
@Autowired
private ApiSysDictFeignClient apiSysDictFeignClient;
/** /**
* 分页查询-薪资拆分应发信息汇总列表 * 分页查询-薪资拆分应发信息汇总列表
* @param request * @param request
...@@ -72,6 +76,13 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService { ...@@ -72,6 +76,13 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService {
// 查询分页信息 // 查询分页信息
Page<ApiSalarySplitSummaryPageDto> page = new Page<>(request.getPageNo(), request.getPageSize()); Page<ApiSalarySplitSummaryPageDto> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiSalarySplitSummaryPageDto> iPage = iSalarySplitService.summaryPage(page, request); IPage<ApiSalarySplitSummaryPageDto> iPage = iSalarySplitService.summaryPage(page, request);
if (CollectionUtils.isNotEmpty(iPage.getRecords())) {
Map<String, String> map = getBillOrgDict();
iPage.getRecords().stream().map(dto -> {
dto.setBillOrg(map != null ? map.get(dto.getBillOrg()) : "");
return dto;
}).collect(Collectors.toList());
}
response.setPage(iPage); response.setPage(iPage);
//查询薪资拆分业务ID列表 //查询薪资拆分业务ID列表
List<String> salarySplitBizIdList = iSalarySplitService.queryList(request); List<String> salarySplitBizIdList = iSalarySplitService.queryList(request);
...@@ -80,6 +91,33 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService { ...@@ -80,6 +91,33 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService {
} }
/** /**
* 获取出账机构字典数据
*/
private Map<String, String> getBillOrgDict() {
Map<String, String> dictMap = new HashMap<>();
try {
GetDictTypeListRequest dictRequest = new GetDictTypeListRequest();
dictRequest.setTypeList(Collections.singletonList("csf_bill_org"));
List<GetDictTypeListResponse> dictTypeResponses = apiSysDictFeignClient.getByDictTypeList(dictRequest).getData();
if (dictTypeResponses != null && !dictTypeResponses.isEmpty()) {
for (GetDictTypeListResponse dictTypeResponse : dictTypeResponses) {
if ("csf_bill_org".equals(dictTypeResponse.getDictType())
&& dictTypeResponse.getDictItemList() != null) {
for (GetDictItemListByDictTypeResponse dictItem : dictTypeResponse.getDictItemList()) {
dictMap.put(dictItem.getItemValue(), dictItem.getItemLabel());
}
break;
}
}
}
} catch (Exception e) {
log.error("获取出账机构字典数据失败", e);
}
return dictMap;
}
/**
* 分页查询-薪资拆分应发信息列表 * 分页查询-薪资拆分应发信息列表
* @param request * @param request
* @return * @return
...@@ -271,9 +309,9 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService { ...@@ -271,9 +309,9 @@ public class ApiSalarySplitServiceImpl implements ApiSalarySplitService {
ExportParam exportParam = new ExportParam(); ExportParam exportParam = new ExportParam();
// 指定需要导出的字段(字段名必须与 DTO 中的属性名一致) // 指定需要导出的字段(字段名必须与 DTO 中的属性名一致)
exportParam.setFieldNames(Arrays.asList( exportParam.setFieldNames(Arrays.asList(
"salarySplitNo","brokerName","team","fromAmount", "salarySplitNo","businessNo","brokerName","team","fromAmount",
"currency","exchangeRate","toAmount","toCurrency", "currency","exchangeRate","toAmount","toCurrency",
"fortuneAccountMonth","billOrg","hkdAmount","fortuneAccountBizId" "fortuneAccountMonth","billOrg","hkdAmount"
)); ));
exportParam.setFileName("薪资拆分应发信息汇总"); exportParam.setFileName("薪资拆分应发信息汇总");
exportParam.setUploadToOss(true); exportParam.setUploadToOss(true);
......
...@@ -10,6 +10,9 @@ public class ApiSalarySplitSummaryExcelDto { ...@@ -10,6 +10,9 @@ public class ApiSalarySplitSummaryExcelDto {
@Excel(name = "发放编号", orderNum = "1") @Excel(name = "发放编号", orderNum = "1")
private String salarySplitNo; private String salarySplitNo;
@Excel(name = "业务编号", orderNum = "1")
private String businessNo;
@Excel(name = "转介人", orderNum = "2") @Excel(name = "转介人", orderNum = "2")
private String brokerName; private String brokerName;
...@@ -43,7 +46,4 @@ public class ApiSalarySplitSummaryExcelDto { ...@@ -43,7 +46,4 @@ public class ApiSalarySplitSummaryExcelDto {
@Excel(name = "本期总出账金额(原币种)", orderNum = "12") @Excel(name = "本期总出账金额(原币种)", orderNum = "12")
private BigDecimal hkdAmount; private BigDecimal hkdAmount;
@Excel(name = "出账业务编号", orderNum = "13")
private String businessNo;
} }
...@@ -60,9 +60,7 @@ public class ApiExpectedFortunePageRequest extends PageDto { ...@@ -60,9 +60,7 @@ public class ApiExpectedFortunePageRequest extends PageDto {
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款") @Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款")
private String fortuneBizType; private String fortuneBizType;
/** @Schema(description = "保單持有人(中/英)")
* 保單持有人(中/英)
*/
private String policyHolder; private String policyHolder;
private List<String> PolicyNoList; private List<String> PolicyNoList;
......
...@@ -5,117 +5,84 @@ import io.swagger.v3.oas.annotations.media.Schema; ...@@ -5,117 +5,84 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
@Data @Data
public class ExpectedFortuneAddRequest { public class ExpectedFortuneAddRequest {
/**
* 应付款类型 R-关联保单应付款 U-非关联保单应付款 @Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款", requiredMode = Schema.RequiredMode.REQUIRED)
*/
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款")
private String fortuneBizType; private String fortuneBizType;
/** @Schema(description = "出账年月 (估)", requiredMode = Schema.RequiredMode.REQUIRED)
* 关联保单号 @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
*/ private String payoutDate;
@Schema(description = "出账年月 (实)", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private String actualPayoutDate;
@Schema(description = "关联保单号") @Schema(description = "关联保单号")
private String policyNo; private String policyNo;
/** @Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status")
* 产品计划 ID private String status;
*/
@Schema(description = "产品计划 ID") @Schema(description = "出账状态-修改理由")
private String productLaunchBizId; private String statusDesc;
/** @Schema(description = "出账项目", requiredMode = Schema.RequiredMode.REQUIRED)
* 佣金期数 private String fortuneName;
*/
@Schema(description = "佣金期数") @Schema(description = "出账项目类型 字典值:csf_fortune_type", requiredMode = Schema.RequiredMode.REQUIRED)
private String fortuneType;
@Schema(description = "出账期数", requiredMode = Schema.RequiredMode.REQUIRED)
private Integer fortunePeriod; private Integer fortunePeriod;
/** @Schema(description = "出账总期数", requiredMode = Schema.RequiredMode.REQUIRED)
* 总期数
*/
@Schema(description = "总期数")
private Integer fortuneTotalPeriod; private Integer fortuneTotalPeriod;
/** @Schema(description = "转介人名称", requiredMode = Schema.RequiredMode.REQUIRED)
* 转介人名称
*/
@Schema(description = "转介人名称")
private String broker; private String broker;
/** @Schema(description = "broker biz id", requiredMode = Schema.RequiredMode.REQUIRED)
* 转介人业务ID
*/
@Schema(description = "broker biz id")
private String brokerBizId; private String brokerBizId;
/** @Schema(description = "所属团队")
* 团队名称
*/
@Schema(description = "团队名称")
private String team; private String team;
/** @Schema(description = "所属团队业务ID")
* 所属团队业务ID
*/
@Schema(description = "所属团队 biz id")
private String teamBizId; private String teamBizId;
/** @Schema(description = "保单币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账项目 private BigDecimal ruleAmount;
*/
@Schema(description = "出账项目")
private String fortuneName;
/** @Schema(description = "保单币种", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账项目类型 private String ruleCurrency;
*/
@Schema(description = "出账项目类型 字典值:csf_fortune_type")
private String fortuneType;
/** @Schema(description = "保单币种→港币汇率(默认保单币种汇率)", requiredMode = Schema.RequiredMode.REQUIRED)
* 结算汇率 private BigDecimal defaultExchangeRate;
*/
@Schema(description = "结算汇率")
private BigDecimal exchangeRate;
/** @Schema(description = "原币种", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账金额 单位:港币 private String originalCurrency;
*/
@Schema(description = "出账金额 单位:港币")
private BigDecimal hkdAmount;
/** @Schema(description = "原币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账币种 private BigDecimal originalAmount;
*/
@Schema(description = "出账币种") @Schema(description = "原币种→港币汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private String currency; private BigDecimal originalToHkdRate;
/** @Schema(description = "发放币种", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账日 (估) private String payoutCurrency;
*/
@Schema(description = "出账日 (估)") @Schema(description = "发放币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private BigDecimal payoutAmount;
private Date payoutDate;
@Schema(description = "港币→发放币种汇率", requiredMode = Schema.RequiredMode.REQUIRED)
/** private BigDecimal hkdToPayoutRate;
* 出账日 (实)
*/ @Schema(description = "港币金额", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "出账日 (实)") private BigDecimal hkdAmount;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date actualPayoutDate;
/**
* 出账状态
*/
@Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status")
private String status;
/**
* 备注
*/
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
} }
...@@ -5,99 +5,94 @@ import io.swagger.v3.oas.annotations.media.Schema; ...@@ -5,99 +5,94 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
@Data @Data
public class ExpectedFortuneUpdateRequest { public class ExpectedFortuneUpdateRequest {
/**
* 预计发佣业务id @Schema(description = "预计发佣业务id", requiredMode = Schema.RequiredMode.REQUIRED)
*/
@Schema(description = "预计发佣业务id")
private String expectedFortuneBizId; private String expectedFortuneBizId;
/** @Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款", requiredMode = Schema.RequiredMode.REQUIRED)
* 应付款类型 R-关联保单应付款 U-非关联保单应付款
*/
@Schema(description = "应付款类型 R-关联保单应付款 U-非关联保单应付款")
private String fortuneBizType; private String fortuneBizType;
/** @Schema(description = "出账年月 (估)", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账日 (估) @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
*/ private String payoutDate;
@Schema(description = "出账日 (估)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate payoutDate;
/** @Schema(description = "出账年月 (实)", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账日 (实) @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
*/ private String actualPayoutDate;
@Schema(description = "出账日 (实)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate actualPayoutDate;
/** @Schema(description = "关联保单号")
* 港币出账金额 private String policyNo;
*/
@Schema(description = "港币出账金额")
private BigDecimal hkdAmount;
/** /**
* 出账状态 * 出账状态
*/ */
@Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status") // @Schema(description = "出账状态 0=待出账 1=可出帐,待检核 2=完成出账 3=部分出账 4=保留 5=已失效 6=可出帐,检核完成 7=未找到当前预计发佣对应的来佣, 字典值: csf_expected_fortune_status")
private String status; // private String status;
/** /**
* 出账状态-修改理由 * 出账状态-修改理由
*/ */
@Schema(description = "出账状态-修改理由") // @Schema(description = "出账状态-修改理由")
private String statusDesc; // private String statusDesc;
/**
* 出账项目 @Schema(description = "出账项目", requiredMode = Schema.RequiredMode.REQUIRED)
*/
@Schema(description = "出账项目")
private String fortuneName; private String fortuneName;
/** @Schema(description = "出账项目类型 字典值:csf_fortune_type", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账项目类型
*/
@Schema(description = "出账项目类型 字典值:csf_fortune_type")
private String fortuneType; private String fortuneType;
/** @Schema(description = "出账期数", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账期数
*/
@Schema(description = "出账期数")
private Integer fortunePeriod; private Integer fortunePeriod;
/** @Schema(description = "出账总期数", requiredMode = Schema.RequiredMode.REQUIRED)
* 出账总期数
*/
@Schema(description = "出账总期数")
private Integer fortuneTotalPeriod; private Integer fortuneTotalPeriod;
/** @Schema(description = "转介人名称", requiredMode = Schema.RequiredMode.REQUIRED)
* 币种
*/
@Schema(description = "币种")
private String currency;
/**
* 转介人名称
*/
@Schema(description = "转介人名称")
private String broker; private String broker;
/** @Schema(description = "broker biz id", requiredMode = Schema.RequiredMode.REQUIRED)
* 转介人业务ID
*/
@Schema(description = "broker biz id")
private String brokerBizId; private String brokerBizId;
/** @Schema(description = "所属团队")
* 备注 private String team;
*/
@Schema(description = "所属团队业务ID")
private String teamBizId;
@Schema(description = "保单币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal ruleAmount;
@Schema(description = "保单币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String ruleCurrency;
@Schema(description = "保单币种→港币汇率(默认保单币种汇率)", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal defaultExchangeRate;
@Schema(description = "原币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String originalCurrency;
@Schema(description = "原币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalAmount;
@Schema(description = "原币种→港币汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal originalToHkdRate;
@Schema(description = "发放币种", requiredMode = Schema.RequiredMode.REQUIRED)
private String payoutCurrency;
@Schema(description = "发放币种金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal payoutAmount;
@Schema(description = "港币→发放币种汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal hkdToPayoutRate;
@Schema(description = "港币金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal hkdAmount;
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
} }
...@@ -42,4 +42,9 @@ public class ApiSalarySplitSummaryPageRequest extends PageDto { ...@@ -42,4 +42,9 @@ public class ApiSalarySplitSummaryPageRequest extends PageDto {
* 出账机构 * 出账机构
*/ */
private String billOrg; private String billOrg;
/**
* 出账业务编号
*/
private String businessNo;
} }
...@@ -132,9 +132,9 @@ public class ApiExpectedFortunePageResponse { ...@@ -132,9 +132,9 @@ public class ApiExpectedFortunePageResponse {
private String fortuneType; private String fortuneType;
/** /**
* 转介人介绍费占比 * 持有比例
*/ */
@Schema(description = "转介人介绍费占比") @Schema(description = "持有比例")
private String brokerRatio; private String brokerRatio;
...@@ -152,22 +152,55 @@ public class ApiExpectedFortunePageResponse { ...@@ -152,22 +152,55 @@ public class ApiExpectedFortunePageResponse {
private String ruleCurrency; private String ruleCurrency;
/** /**
* 出账币种名称 * 预计出账-默认保单币种汇率(保单币种 -> 港币汇率)
*/ */
@Schema(description = "出账币种名称") @Schema(description = "预计出账-默认保单币种汇率(保单币种 -> 港币汇率)")
private String currencyName; private BigDecimal defaultExchangeRate;
/**
* 预计出账-HKD应出账金额
*/
@Schema(description = "预计出账-HKD应出账金额")
private BigDecimal hkdAmount;
// ========== 原币种及金额 ==========
@Schema(description = "原币种")
private String originalCurrency;
@Schema(description = "原币种金额")
private BigDecimal originalAmount;
@Schema(description = "原币→港币汇率")
private BigDecimal originalToHkdRate;
// ========== 发放币种及金额 ==========
@Schema(description = "发放币种")
private String payoutCurrency;
@Schema(description = "发放币种金额")
private BigDecimal payoutAmount;
@Schema(description = "港币→发放币汇率")
private BigDecimal hkdToPayoutRate;
/**
* 实际出账-本次出账金额(HKD)
*/
@Schema(description = "实际出账-本次出账金额(HKD)")
private BigDecimal currentPaymentHkdAmount;
/** /**
* 保单币种 -> 港币汇率 * 实际出账-本期结算汇率
*/ */
@Schema(description = "保单币种 -> 港币汇率") @Schema(description = "实际出账-本期结算汇率")
private BigDecimal exchangeRate; private BigDecimal exchangeRate;
/** /**
* HKD应出账金额 * 出账币种名称
*/ */
@Schema(description = "HKD应出账金额") @Schema(description = "出账币种名称")
private BigDecimal hkdAmount; private String currencyName;
/** /**
* 出账状态 * 出账状态
...@@ -196,51 +229,47 @@ public class ApiExpectedFortunePageResponse { ...@@ -196,51 +229,47 @@ public class ApiExpectedFortunePageResponse {
private LocalDate actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
* 已出账金额(HKD) * 预计出账-已出账金额(HKD)
*/ */
@Schema(description = "已出账金额(HKD)") @Schema(description = "预计出账-已出账金额(HKD)")
private BigDecimal paidAmount; private BigDecimal paidAmount;
/** /**
* 待出账金额 * 预计出账-待出账金额
*/ */
@Schema(description = "待出账金额") @Schema(description = "预计出账-待出账金额")
private BigDecimal unpaidAmount; private BigDecimal unpaidAmount;
/** /**
* 已出账比例 已出账金额/应出账金额 * 预计出账-已出账金额比例 已出账金额/应出账金额
*/ */
@Schema(description = "已出账比例 已出账金额/应出账金额") @Schema(description = "预计出账-已出账金额比例 已出账金额/应出账金额")
private BigDecimal paidRatio; private BigDecimal paidRatio;
/** /**
* 待出账比例 待出账金额/应出账金额 * 预计出账-待出账比例 待出账金额/应出账金额
*/ */
@Schema(description = "待出账比例 待出账金额/应出账金额") @Schema(description = "预计出账-待出账比例 待出账金额/应出账金额")
private BigDecimal unpaidRatio; private BigDecimal unpaidRatio;
/** /**
* 基本法项目配置表唯一业务ID
*/
@Schema(description = "rule item biz id")
private String ruleItemBizId;
/**
* 备注 * 备注
*/ */
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
/** /**
* 创建时间 * 创建
*/ */
@Schema(description = "创建时间") @Schema(description = "创建")
private LocalDateTime createTime; private String creatorName;
/** /**
* 创建人名称 * 创建时间
*/ */
private String creatorName; @Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
/** /**
* 更新时间(操作时间) * 更新时间(操作时间)
......
...@@ -247,8 +247,9 @@ public class PolicyReportPdfService { ...@@ -247,8 +247,9 @@ public class PolicyReportPdfService {
// 第五行:年繳金額 | 金額值 | 保費徵費 | 費用值 // 第五行:年繳金額 | 金額值 | 保費徵費 | 費用值
addTableHeaderCellNoBorder(table, "年繳金額"); addTableHeaderCellNoBorder(table, "年繳金額");
addTableCellNoBorder(table, formatAmount(data.getAnnualAmount())); addTableCellNoBorder(table, formatAmount(data.getAnnualAmount()));
//保单征费
addTableHeaderCellNoBorder(table, "保費徵費"); addTableHeaderCellNoBorder(table, "保費徵費");
addTableCellNoBorder(table, formatAmount(data.getPremiumFee())); addTableCellNoBorder(table, formatAmount(data.getPolicyLevy()));
// 第六行:首期合計金額 | 金額值 | (空) | (空) // 第六行:首期合計金額 | 金額值 | (空) | (空)
addTableHeaderCellNoBorder(table, "首期合計金額"); addTableHeaderCellNoBorder(table, "首期合計金額");
......
package com.yd.csf.service.config; //package com.yd.csf.service.config;
//
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; //import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; //import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; //import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; //import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; //import org.springframework.context.annotation.Configuration;
//
@Slf4j //@Slf4j
@Configuration //@Configuration
@ConditionalOnClass(XxlJobSpringExecutor.class) //@ConditionalOnClass(XxlJobSpringExecutor.class)
public class XxlJobConfig { //public class XxlJobConfig {
//
@Value("${xxl.job.admin.addresses:http://139.224.145.34:8686/xxl-job-admin}") // @Value("${xxl.job.admin.addresses:http://139.224.145.34:8686/xxl-job-admin}")
private String adminAddresses; // private String adminAddresses;
//
@Value("${xxl.job.executor.appname:csf-executor}") // @Value("${xxl.job.executor.appname:csf-executor}")
private String appname; // private String appname;
//
@Value("${xxl.job.executor.port:9999}") // @Value("${xxl.job.executor.port:9999}")
private int port; // private int port;
//
@Value("${xxl.job.accessToken:default_token}") // @Value("${xxl.job.accessToken:default_token}")
private String accessToken; // private String accessToken;
//
@Bean // @Bean
public XxlJobSpringExecutor xxlJobExecutor() { // public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init. appname: {}, port: {}, accessToken: {}", // log.info(">>>>>>>>>>> xxl-job config init. appname: {}, port: {}, accessToken: {}",
appname, port, StringUtils.isNotBlank(accessToken) ? "已配置" : "未配置"); // appname, port, StringUtils.isNotBlank(accessToken) ? "已配置" : "未配置");
//
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); // XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses); // xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname); // xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setPort(port); // xxlJobSpringExecutor.setPort(port);
// 设置accessToken // // 设置accessToken
xxlJobSpringExecutor.setAccessToken(accessToken); // xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogRetentionDays(30); // xxlJobSpringExecutor.setLogRetentionDays(30);
//
return xxlJobSpringExecutor; // return xxlJobSpringExecutor;
} // }
} //}
\ No newline at end of file \ No newline at end of file
...@@ -20,7 +20,7 @@ public interface PolicyFollowMapper extends BaseMapper<PolicyFollow> { ...@@ -20,7 +20,7 @@ public interface PolicyFollowMapper extends BaseMapper<PolicyFollow> {
List<String> queryPolicyNoList( List<String> queryPolicyNoList(
@Param("policyHolderSc") String policyHolderSc, @Param("policyHolderSc") String policyHolderSc,
@Param("policyHolderEnLc") String policyHolderEnLc, @Param("policyHolderEnLc") String policyHolderEnLc,
@Param("signer") String signer, @Param("signerSc") String signerSc,
@Param("brokerName") String brokerName, @Param("brokerName") String brokerName,
@Param("insuredSc") String insuredSc, @Param("insuredSc") String insuredSc,
@Param("insuredEnLc") String insuredEnLc @Param("insuredEnLc") String insuredEnLc
......
package com.yd.csf.service.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
public class BatchEditActualPayoutDateRequest {
@Schema(description = "出账业务ID列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> fortuneBizIdList;
@Schema(description = "实际出账年月(实)", requiredMode = Schema.RequiredMode.REQUIRED)
private String actualPayoutDate;
}
...@@ -81,11 +81,10 @@ public class CommissionAddRequest implements Serializable { ...@@ -81,11 +81,10 @@ public class CommissionAddRequest implements Serializable {
private BigDecimal exchangeRate; private BigDecimal exchangeRate;
/** /**
* 入账(实) * 入账年月(实)
*/ */
@Schema(description = "入账日(实)", requiredMode = Schema.RequiredMode.REQUIRED, format = "yyyy-MM-dd") @Schema(description = "入账年月(实)", requiredMode = Schema.RequiredMode.REQUIRED, format = "yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private String commissionDate;
private Date commissionDate;
/** /**
* 备注 * 备注
...@@ -93,5 +92,10 @@ public class CommissionAddRequest implements Serializable { ...@@ -93,5 +92,10 @@ public class CommissionAddRequest implements Serializable {
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
/**
* 人工备注
*/
private String manualRemark;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
...@@ -102,16 +102,16 @@ public class CommissionExpectedAddDto { ...@@ -102,16 +102,16 @@ public class CommissionExpectedAddDto {
/** /**
* 入账日 (估) * 入账日 (估)
*/ */
@Schema(description = "入账日 (估) format:yyyy-MM-dd") @Schema(description = "入账日 (估) format:yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date commissionDate; private Date commissionDate;
/** // /**
* 入账日 (实) // * 入账日 (实)
*/ // */
@Schema(description = "入账日 (实) format:yyyy-MM-dd") // @Schema(description = "入账日 (实) format:yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") // @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date actualCommissionDate; // private Date actualCommissionDate;
/** /**
* 入账状态 0=待入账 1=完成入账 2=部分入账 3=已失效 * 入账状态 0=待入账 1=完成入账 2=部分入账 3=已失效
...@@ -120,8 +120,8 @@ public class CommissionExpectedAddDto { ...@@ -120,8 +120,8 @@ public class CommissionExpectedAddDto {
private String status; private String status;
/** /**
* 备注 * 人工备注
*/ */
@Schema(description = "备注") @Schema(description = "人工备注")
private String remark; private String manualRemark;
} }
...@@ -105,4 +105,6 @@ public class CommissionExpectedQueryRequest extends PageDto { ...@@ -105,4 +105,6 @@ public class CommissionExpectedQueryRequest extends PageDto {
private List<String> policyNoList; private List<String> policyNoList;
private Boolean queryFlag;
} }
package com.yd.csf.service.dto; package com.yd.csf.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
...@@ -112,13 +113,13 @@ public class CommissionExpectedUpdateRequest implements Serializable { ...@@ -112,13 +113,13 @@ public class CommissionExpectedUpdateRequest implements Serializable {
* 入账日期 * 入账日期
*/ */
@Schema(description = "入账日期 format:yyyy-MM-dd") @Schema(description = "入账日期 format:yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date commissionDate; private Date commissionDate;
/** /**
* 备注 * 人工备注
*/ */
@Schema(description = "备注") private String manualRemark;
private String remark;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
\ No newline at end of file
...@@ -92,11 +92,10 @@ public class CommissionUpdateRequest implements Serializable { ...@@ -92,11 +92,10 @@ public class CommissionUpdateRequest implements Serializable {
private BigDecimal exchangeRate; private BigDecimal exchangeRate;
/** /**
* 入账日期 * 入账年月 yyyy-MM
*/ */
@Schema(description = "入账日期") @Schema(description = "入账年月 yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private String commissionDate;
private Date commissionDate;
/** /**
* 备注 * 备注
...@@ -104,5 +103,10 @@ public class CommissionUpdateRequest implements Serializable { ...@@ -104,5 +103,10 @@ public class CommissionUpdateRequest implements Serializable {
@Schema(description = "备注") @Schema(description = "备注")
private String remark; private String remark;
/**
* 人工备注
*/
private String manualRemark;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
package com.yd.csf.service.dto; package com.yd.csf.service.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
...@@ -143,10 +144,16 @@ public class FortuneAddRequest implements Serializable { ...@@ -143,10 +144,16 @@ public class FortuneAddRequest implements Serializable {
private BigDecimal hkdAmount; private BigDecimal hkdAmount;
/** /**
* 出账日期 * 出账年月(估)
*/ */
@Schema(description = "出账日期", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "出账年月(估)", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDate payoutDate; private String payoutDate;
/**
* 出账年月(实)
*/
@Schema(description = "出账年月(实)", requiredMode = Schema.RequiredMode.REQUIRED)
private String actualPayoutDate;
/** /**
* 出账备注 * 出账备注
......
...@@ -11,6 +11,4 @@ public class FortuneDownloadRequest { ...@@ -11,6 +11,4 @@ public class FortuneDownloadRequest {
@Schema(description = "发佣数据业务Id列表", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "发佣数据业务Id列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<String> fortuneBizIdList; private List<String> fortuneBizIdList;
@Schema(description = "出账年月(实),格式:yyyy-MM,例如:2026-04", requiredMode = Schema.RequiredMode.REQUIRED)
private String actualPayoutDate;
} }
...@@ -60,18 +60,16 @@ public class FortuneQueryRequest extends PageDto implements Serializable { ...@@ -60,18 +60,16 @@ public class FortuneQueryRequest extends PageDto implements Serializable {
private List<String> productLaunchBizIdList; private List<String> productLaunchBizIdList;
/** /**
* 出账(估)开始 * 出账年月(估)开始
*/ */
@Schema(description = "出账日(估)开始 格式:yyyy-MM-dd") @Schema(description = "出账年月(估)开始 格式:yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private String payoutDateStart;
private LocalDate payoutDateStart;
/** /**
* 出账(估)结束 * 出账年月(估)结束
*/ */
@Schema(description = "出账日(估)结束 格式:yyyy-MM-dd") @Schema(description = "出账年月(估)结束 格式:yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private String payoutDateEnd;
private LocalDate payoutDateEnd;
/** /**
* 检核年月 * 检核年月
......
package com.yd.csf.service.enums;
import org.apache.commons.lang3.StringUtils;
/**
* 项目类型码枚举
* XS("销售佣金", "1")
* M1("一级管理奖", "2")
* M2("二级管理奖", "3")
* TJ("终身推荐奖", "4")
* FD("辅导奖", "5")
* OT("其他加扣款", "6")
* PA("协议约定金额", "7")
*/
public enum FortuneTypeEnum {
//项目类型枚举
XS("XS", "1"),
M1("M1", "2"),
M2("M2", "3"),
TJ("TJ", "4"),
FD("FD", "5"),
OT("OT", "6"),
PA("PA", "7"),
;
//字典项标签(名称)
private String itemLabel;
//字典项值
private String itemValue;
//构造函数
FortuneTypeEnum(String itemLabel, String itemValue) {
this.itemLabel = itemLabel;
this.itemValue = itemValue;
}
public String getItemLabel() {
return itemLabel;
}
public String getItemValue() {
return itemValue;
}
/**
* 根据业务值(itemValue)获取枚举实例
*
* @param itemValue 业务值,如 "2"
* @return 对应的枚举实例
*/
public static FortuneTypeEnum getByItemValue(String itemValue) {
if (StringUtils.isBlank(itemValue)) {
throw new IllegalArgumentException("itemValue is blank");
}
for (FortuneTypeEnum type : FortuneTypeEnum.values()) {
if (type.itemValue.equals(itemValue)) {
return type;
}
}
throw new IllegalArgumentException("No enum constant for itemValue: " + itemValue);
}
}
...@@ -147,6 +147,11 @@ public class Commission implements Serializable { ...@@ -147,6 +147,11 @@ public class Commission implements Serializable {
private String commissionExpectedBizId; private String commissionExpectedBizId;
/** /**
* 人工备注
*/
private String manualRemark;
/**
* 通用备注 * 通用备注
*/ */
private String remark; private String remark;
...@@ -160,11 +165,19 @@ public class Commission implements Serializable { ...@@ -160,11 +165,19 @@ public class Commission implements Serializable {
/** /**
* 创建人ID * 创建人ID
*/ */
@TableField(value = "creator_id", fill = FieldFill.INSERT)
private String creatorId; private String creatorId;
/** /**
* 创建人名称
*/
@TableField(value = "creator_name", fill = FieldFill.INSERT)
private String creatorName;
/**
* 更新人ID * 更新人ID
*/ */
@TableField(value = "updater_id", fill = FieldFill.INSERT_UPDATE)
private String updaterId; private String updaterId;
/** /**
......
package com.yd.csf.service.model; package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
...@@ -161,6 +158,11 @@ public class CommissionExpected implements Serializable { ...@@ -161,6 +158,11 @@ public class CommissionExpected implements Serializable {
private BigDecimal pendingRatio; private BigDecimal pendingRatio;
/** /**
* 人工备注
*/
private String manualRemark;
/**
* 通用备注 * 通用备注
*/ */
private String remark; private String remark;
...@@ -173,14 +175,28 @@ public class CommissionExpected implements Serializable { ...@@ -173,14 +175,28 @@ public class CommissionExpected implements Serializable {
/** /**
* 创建人ID * 创建人ID
*/ */
@TableField(value = "creator_id", fill = FieldFill.INSERT)
private String creatorId; private String creatorId;
/** /**
* 创建人名称
*/
@TableField(value = "creator_name", fill = FieldFill.INSERT)
private String creatorName;
/**
* 更新人ID * 更新人ID
*/ */
@TableField(value = "updater_id", fill = FieldFill.INSERT_UPDATE)
private String updaterId; private String updaterId;
/** /**
* 更新人名称
*/
@TableField(value = "updater_name", fill = FieldFill.INSERT_UPDATE)
private String updaterName;
/**
* 创建时间 * 创建时间
*/ */
private Date createTime; private Date createTime;
......
...@@ -75,6 +75,11 @@ public class PolicyFollow implements Serializable { ...@@ -75,6 +75,11 @@ public class PolicyFollow implements Serializable {
private String signer; private String signer;
/** /**
* 签单人(简体)
*/
private String signerSc;
/**
* 签单人业务id * 签单人业务id
*/ */
private String signerBizId; private String signerBizId;
...@@ -265,6 +270,11 @@ public class PolicyFollow implements Serializable { ...@@ -265,6 +270,11 @@ public class PolicyFollow implements Serializable {
private String policyHolder; private String policyHolder;
/** /**
* 保單持有人(英文)
*/
private String policyHolderEn;
/**
* 受保人 * 受保人
*/ */
private String insured; private String insured;
......
...@@ -7,6 +7,7 @@ import com.yd.csf.service.dto.CommissionExpectedAddRequest; ...@@ -7,6 +7,7 @@ import com.yd.csf.service.dto.CommissionExpectedAddRequest;
import com.yd.csf.service.dto.CommissionExpectedChangeStatusRequest; import com.yd.csf.service.dto.CommissionExpectedChangeStatusRequest;
import com.yd.csf.service.dto.CommissionExpectedQueryRequest; import com.yd.csf.service.dto.CommissionExpectedQueryRequest;
import com.yd.csf.service.dto.CommissionExpectedUpdateRequest; import com.yd.csf.service.dto.CommissionExpectedUpdateRequest;
import com.yd.csf.service.model.Commission;
import com.yd.csf.service.model.CommissionExpected; import com.yd.csf.service.model.CommissionExpected;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
...@@ -88,4 +89,6 @@ public interface CommissionExpectedService extends IService<CommissionExpected> ...@@ -88,4 +89,6 @@ public interface CommissionExpectedService extends IService<CommissionExpected>
Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest); Boolean changeStatus(CommissionExpectedChangeStatusRequest commissionExpectedChangeStatusRequest);
CommissionExpected queryOne(String commissionExpectedBizId); CommissionExpected queryOne(String commissionExpectedBizId);
CommissionExpected queryOne(String policyNo, Integer commissionPeriod, String commissionType);
} }
...@@ -69,4 +69,6 @@ public interface CommissionService extends IService<Commission> { ...@@ -69,4 +69,6 @@ public interface CommissionService extends IService<Commission> {
* @return 结算汇率 * @return 结算汇率
*/ */
BigDecimal queryCommissionExchangeRate(String policyNo, Integer commissionPeriod); BigDecimal queryCommissionExchangeRate(String policyNo, Integer commissionPeriod);
} }
...@@ -22,7 +22,7 @@ public interface FortuneAccountService extends IService<FortuneAccount> { ...@@ -22,7 +22,7 @@ public interface FortuneAccountService extends IService<FortuneAccount> {
Page<FortuneAccountVO> getFortuneAccountVOPage(Page<FortuneAccount> fortunePage); Page<FortuneAccountVO> getFortuneAccountVOPage(Page<FortuneAccount> fortunePage);
void saveFortuneAccount(List<FortuneAccountExportDTO> accountExportDTOList, LocalDate actualPayoutDate); void saveFortuneAccount(List<FortuneAccountExportDTO> accountExportDTOList);
FortuneAccount getByFortuneAccountBizId(String fortuneAccountBizId); FortuneAccount getByFortuneAccountBizId(String fortuneAccountBizId);
......
...@@ -47,4 +47,5 @@ public interface FortuneService extends IService<Fortune> { ...@@ -47,4 +47,5 @@ public interface FortuneService extends IService<Fortune> {
Boolean editExchangeRate(EditExchangeRateRequest editExchangeRateRequest); Boolean editExchangeRate(EditExchangeRateRequest editExchangeRateRequest);
String batchEditActualPayoutDate(BatchEditActualPayoutDateRequest editBatchActualPayoutDateRequest);
} }
...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO; import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.csf.service.vo.PayableReportVO; import com.yd.csf.service.vo.PayableReportVO;
import java.time.LocalDate;
import java.util.List; import java.util.List;
/** /**
...@@ -39,6 +40,7 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> { ...@@ -39,6 +40,7 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> {
/** /**
* 应付款报表 - 按保单号和期数维度统计(分页) * 应付款报表 - 按保单号和期数维度统计(分页)
*
* @param page 分页参数 * @param page 分页参数
* @param expectedFortuneIds 预计发佣ID列表 * @param expectedFortuneIds 预计发佣ID列表
* @return 应付款报表VO分页列表 * @return 应付款报表VO分页列表
...@@ -52,14 +54,18 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> { ...@@ -52,14 +54,18 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> {
Integer getPayableNoCurrentSeq(); Integer getPayableNoCurrentSeq();
/** /**
* 生成应付款编号(序号递增) 格式:发佣类型-CSF+年份+序号 * 生成应付款编号 格式:发佣类型-保单号后6位-流水号
* @param fortuneType 发佣类型 *
* @param fortuneType 应付款类型
* @param policyNo 保单号
* @param expectedFortuneId 预计发佣ID
* @return 应付款编号 * @return 应付款编号
*/ */
String getPayableNo(String fortuneType); String getPayableNo(String fortuneType, String policyNo, long expectedFortuneId);
/** /**
* 查询预计发佣和实际发佣的分页列表(手动分页) * 查询预计发佣和实际发佣的分页列表(手动分页)
*
* @param pageNo 页码(从 1 开始) * @param pageNo 页码(从 1 开始)
* @param pageSize 每页大小 * @param pageSize 每页大小
* @param queryWrapper 查询条件 * @param queryWrapper 查询条件
...@@ -69,6 +75,7 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> { ...@@ -69,6 +75,7 @@ public interface IExpectedFortuneService extends IService<ExpectedFortune> {
/** /**
* 查询预计发佣和实际发佣的统计数据(使用 SQL 聚合) * 查询预计发佣和实际发佣的统计数据(使用 SQL 聚合)
*
* @param queryWrapper 查询条件 * @param queryWrapper 查询条件
* @return 统计信息 * @return 统计信息
*/ */
......
...@@ -4,8 +4,10 @@ import com.yd.csf.service.dto.QueryPolicyBrokerDto; ...@@ -4,8 +4,10 @@ import com.yd.csf.service.dto.QueryPolicyBrokerDto;
import com.yd.csf.service.model.PolicyBroker; import com.yd.csf.service.model.PolicyBroker;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* @author Zhang Jianan * @author Zhang Jianan
...@@ -22,6 +24,7 @@ public interface PolicyBrokerService extends IService<PolicyBroker> { ...@@ -22,6 +24,7 @@ public interface PolicyBrokerService extends IService<PolicyBroker> {
List<String> selectRelatedBrokerBizIds(String clientUserId); List<String> selectRelatedBrokerBizIds(String clientUserId);
Map<String, PolicyBroker> queryPolicyBrokerMap(Collection<String> policyNoSet);
Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList); Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList);
} }
...@@ -12,6 +12,7 @@ import com.yd.csf.service.vo.PolicyFollowDetailVO; ...@@ -12,6 +12,7 @@ import com.yd.csf.service.vo.PolicyFollowDetailVO;
import com.yd.csf.service.vo.PolicyFollowVO; import com.yd.csf.service.vo.PolicyFollowVO;
import com.yd.csf.service.vo.PolicyNumberResponseVO; import com.yd.csf.service.vo.PolicyNumberResponseVO;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -182,6 +183,8 @@ public interface PolicyFollowService extends IService<PolicyFollow> { ...@@ -182,6 +183,8 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
*/ */
Boolean updatePolicySecondHolder(PolicySecondHolderUpdateRequest policySecondHolderUpdateRequest); Boolean updatePolicySecondHolder(PolicySecondHolderUpdateRequest policySecondHolderUpdateRequest);
Map<String, PolicyFollow> queryPolicyFollowMap(Collection<?> policyNoSet);
Result<ApiPolicyFollowDetailResponse> detail(String policyNo); Result<ApiPolicyFollowDetailResponse> detail(String policyNo);
List<String> queryPolicyNoList(String policyHolder,String signer,String brokerName,String insured); List<String> queryPolicyNoList(String policyHolder,String signer,String brokerName,String insured);
......
...@@ -4,6 +4,9 @@ import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest; ...@@ -4,6 +4,9 @@ import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.model.PolicyPolicyholder; import com.yd.csf.service.model.PolicyPolicyholder;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.Map;
import java.util.List; import java.util.List;
/** /**
...@@ -22,6 +25,8 @@ public interface PolicyPolicyholderService extends IService<PolicyPolicyholder> ...@@ -22,6 +25,8 @@ public interface PolicyPolicyholderService extends IService<PolicyPolicyholder>
PolicyPolicyholder queryOne(String policyBizId); PolicyPolicyholder queryOne(String policyBizId);
Map<String, PolicyPolicyholder> queryPolicyholderMap(Collection<?> policyNoList);
List<PolicyPolicyholder> queryList(String policyHolder); List<PolicyPolicyholder> queryList(String policyHolder);
boolean updateName(String policyBizId,String name); boolean updateName(String policyBizId,String name);
......
...@@ -10,6 +10,7 @@ import com.yd.csf.service.vo.PolicyVO; ...@@ -10,6 +10,7 @@ import com.yd.csf.service.vo.PolicyVO;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* @author Zhang Jianan * @author Zhang Jianan
...@@ -33,4 +34,6 @@ public interface PolicyService extends IService<Policy> { ...@@ -33,4 +34,6 @@ public interface PolicyService extends IService<Policy> {
List<PolicyProductInfo> getPolicyProductInfo(List<String> productLaunchBizIdList); List<PolicyProductInfo> getPolicyProductInfo(List<String> productLaunchBizIdList);
Map<String, PolicyProductInfo> getPolicyProductInfoMap(Collection<String> productLaunchBizIdList); Map<String, PolicyProductInfo> getPolicyProductInfoMap(Collection<String> productLaunchBizIdList);
Map<String, Policy> queryPolicyMap(Collection<String> policyNoList);
} }
...@@ -74,7 +74,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> ...@@ -74,7 +74,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer>
// 中文转简体 // 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(name); String nameSc = ChineseTextConverter.traditionalToSimplified(name);
// 英文转小写 // 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(name); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(name);
queryWrapper.like(StringUtils.isNotBlank(nameSc), "name_sc", nameSc) queryWrapper.like(StringUtils.isNotBlank(nameSc), "name_sc", nameSc)
.or().like(StringUtils.isNotBlank(nameEnLc), "name_en_lc", nameEnLc); .or().like(StringUtils.isNotBlank(nameEnLc), "name_en_lc", nameEnLc);
...@@ -150,7 +150,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> ...@@ -150,7 +150,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer>
// 中文转简体 // 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(customerAddRequest.getNameCn()); String nameSc = ChineseTextConverter.traditionalToSimplified(customerAddRequest.getNameCn());
// 英文转小写 // 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(customerAddRequest.getNamePyEn()); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(customerAddRequest.getNamePyEn());
customer.setNameSc(nameSc); customer.setNameSc(nameSc);
customer.setNameEnLc(nameEnLc); customer.setNameEnLc(nameEnLc);
...@@ -263,7 +263,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> ...@@ -263,7 +263,7 @@ public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer>
// 中文转简体 // 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(customerUpdateRequest.getNameCn()); String nameSc = ChineseTextConverter.traditionalToSimplified(customerUpdateRequest.getNameCn());
// 英文转小写 // 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(customerUpdateRequest.getNamePyEn()); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(customerUpdateRequest.getNamePyEn());
oldCustomer.setNameSc(nameSc); oldCustomer.setNameSc(nameSc);
oldCustomer.setNameEnLc(nameEnLc); oldCustomer.setNameEnLc(nameEnLc);
boolean result = customerService.updateById(oldCustomer); boolean result = customerService.updateById(oldCustomer);
......
...@@ -9,6 +9,7 @@ import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest; ...@@ -9,6 +9,7 @@ import com.yd.csf.feign.request.expectedfortune.ApiExpectedFortunePageRequest;
import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse; import com.yd.csf.feign.response.expectedfortune.ApiExpectedFortunePageResponse;
import com.yd.csf.service.dto.UserGradeDto; import com.yd.csf.service.dto.UserGradeDto;
import com.yd.csf.service.enums.CurrencyEnum; import com.yd.csf.service.enums.CurrencyEnum;
import com.yd.csf.service.enums.FortuneTypeEnum;
import com.yd.csf.service.model.ExpectedFortune; import com.yd.csf.service.model.ExpectedFortune;
import com.yd.csf.service.dao.ExpectedFortuneMapper; import com.yd.csf.service.dao.ExpectedFortuneMapper;
import com.yd.csf.service.model.Policy; import com.yd.csf.service.model.Policy;
...@@ -17,6 +18,7 @@ import com.yd.csf.service.service.*; ...@@ -17,6 +18,7 @@ import com.yd.csf.service.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO; import com.yd.csf.service.vo.ExpectedFortuneStatisticsVO;
import com.yd.csf.service.vo.PayableReportVO; import com.yd.csf.service.vo.PayableReportVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -36,6 +38,7 @@ import java.util.stream.Collectors; ...@@ -36,6 +38,7 @@ import java.util.stream.Collectors;
* @since 2025-11-17 * @since 2025-11-17
*/ */
@Service @Service
@Slf4j
public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMapper, ExpectedFortune> implements IExpectedFortuneService { public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMapper, ExpectedFortune> implements IExpectedFortuneService {
@Resource @Resource
...@@ -90,38 +93,105 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -90,38 +93,105 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
return expectedFortuneVOPage; return expectedFortuneVOPage;
} }
// 调整数据顺序、格式
processData(expectedFortuneList);
// 1. 转介人职级信息 // 1. 转介人职级信息
List<String> brokerBizIds = expectedFortuneList.stream().map(ApiExpectedFortunePageResponse::getBrokerBizId).collect(Collectors.toList()); List<String> brokerBizIds = expectedFortuneList.stream().map(ApiExpectedFortunePageResponse::getBrokerBizId).collect(Collectors.toList());
Map<String, UserGradeDto> userGradeMap = iAgentAccumulatedFycService.queryUserGradeMap(brokerBizIds); Map<String, UserGradeDto> userGradeMap = iAgentAccumulatedFycService.queryUserGradeMap(brokerBizIds);
// 2. 关联查询保单信息 // 2. 关联查询新单跟进信息
Set<String> policyNoList = expectedFortuneList.stream().map(ApiExpectedFortunePageResponse::getPolicyNo).collect(Collectors.toSet());
Map<String, PolicyFollow> policyFollowMap = policyFollowService.queryPolicyFollowMap(policyNoList);
for (ApiExpectedFortunePageResponse vo : expectedFortuneList) { for (ApiExpectedFortunePageResponse vo : expectedFortuneList) {
// 出账币种名称
vo.setCurrencyName("港币"); vo.setCurrencyName("港币");
// String ratio = finalBrokerRatioMap.get(ef.getBrokerBizId());
// vo.setCommissionRatio(ratio);
// Policy policy = policyMap.get(vo.getPolicyNo());
// PolicyFollow follow = policyFollowMap.get(vo.getPolicyNo());
UserGradeDto userGradeDto = userGradeMap.get(vo.getBrokerBizId()); UserGradeDto userGradeDto = userGradeMap.get(vo.getBrokerBizId());
if (userGradeDto != null) { if (userGradeDto != null) {
vo.setBrokerGradeName(userGradeDto.getGradeName()); vo.setBrokerGradeName(userGradeDto.getGradeName());
} }
// if (policy != null) {
// vo.setInsuranceCompany(policy.getInsuranceCompany()); PolicyFollow policyFollow = policyFollowMap.get(vo.getPolicyNo());
// } if (policyFollow != null) {
// if (follow != null) { vo.setInsuranceCompany(policyFollow.getInsuranceCompany());
// vo.setProductName(follow.getProductName()); vo.setProductName(policyFollow.getProductName());
// vo.setProductLaunchBizId(follow.getProductLaunchBizId()); }
// }
} }
// expectedFortuneVOPage.setRecords(voList); expectedFortuneVOPage.setRecords(expectedFortuneList);
return expectedFortuneVOPage; return expectedFortuneVOPage;
} }
/**
* 调整数据顺序 预计在前,实际在后,按预计发佣月排序
*
* @param expectedFortuneList 预计发佣列表
*/
private void processData(List<ApiExpectedFortunePageResponse> expectedFortuneList) {
if (CollUtil.isEmpty(expectedFortuneList)) {
return;
}
log.info("顺序调整前: {}", expectedFortuneList.size());
// 1. 分组
Map<Integer, List<ApiExpectedFortunePageResponse>> groupMap = expectedFortuneList.stream()
.collect(Collectors.groupingBy(ApiExpectedFortunePageResponse::getType));
// 2. 获取预计发佣(type=1)和实际发佣(type=2)列表
List<ApiExpectedFortunePageResponse> expectedList = groupMap.getOrDefault(1, new ArrayList<>());
List<ApiExpectedFortunePageResponse> actualList = groupMap.getOrDefault(2, new ArrayList<>());
// 3. 将 actualList 转换为 Map
Map<String, List<ApiExpectedFortunePageResponse>> actualMap = actualList.stream()
.filter(item -> "R".equals(item.getFortuneBizType()))
.collect(Collectors.groupingBy(ApiExpectedFortunePageResponse::getExpectedFortuneBizId));
// 4. 调整数据顺序
List<ApiExpectedFortunePageResponse> sortedList = new ArrayList<>();
Set<String> matchedActualPayableNos = new HashSet<>();
for (ApiExpectedFortunePageResponse expected : expectedList) {
sortedList.add(expected);
// 查找对应的实际发佣
List<ApiExpectedFortunePageResponse> matchedList = actualMap.get(expected.getExpectedFortuneBizId());
if (CollUtil.isNotEmpty(matchedList)) {
// 设置实际出账记录的字段:待出账金额(估)、已出账比例、未出账比例、已出账金额
matchedList.forEach(actual -> {
actual.setUnpaidAmount(expected.getHkdAmount());
actual.setPaidRatio(expected.getPaidRatio());
actual.setUnpaidRatio(expected.getUnpaidRatio());
actual.setPaidAmount(expected.getPaidAmount());
});
sortedList.addAll(matchedList);
matchedActualPayableNos.add(expected.getExpectedFortuneBizId());
}
}
// 5. 添加未匹配的实际发佣记录
for (ApiExpectedFortunePageResponse actual : actualList) {
if (!matchedActualPayableNos.contains(actual.getExpectedFortuneBizId())) {
sortedList.add(actual);
}
}
// 6.设置实际出账记录的字段:待出账金额(估)
for (ApiExpectedFortunePageResponse item : sortedList) {
if (item.getType() == 2) {
item.setCurrentPaymentHkdAmount(item.getHkdAmount());
}
}
// 7. 将排序后的结果写回原列表
expectedFortuneList.clear();
expectedFortuneList.addAll(sortedList);
log.info("顺序调整后: {}", sortedList.size());
}
@Override @Override
public List<ApiExpectedFortunePageResponse> toVOList(List<ExpectedFortune> expectedFortuneList) { public List<ApiExpectedFortunePageResponse> toVOList(List<ExpectedFortune> expectedFortuneList) {
if (CollUtil.isEmpty(expectedFortuneList)) { if (CollUtil.isEmpty(expectedFortuneList)) {
...@@ -232,12 +302,27 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe ...@@ -232,12 +302,27 @@ public class ExpectedFortuneServiceImpl extends ServiceImpl<ExpectedFortuneMappe
} }
@Override @Override
public String getPayableNo(String fortuneType) { public String getPayableNo(String fortuneType, String policyNo, long expectedFortuneId) {
Integer currentSeq = getPayableNoCurrentSeq(); // 1. 安全获取保单号后6位
return String.format("%s%s%s", String last6Chars = "";
fortuneType + "-CSF", if (policyNo != null && !policyNo.isEmpty()) {
LocalDate.now().getYear() % 100, int startIdx = Math.max(0, policyNo.length() - 6);
currentSeq + 1); last6Chars = policyNo.substring(startIdx);
}
// 2. 字符串左补0至6位
// %6s 表示最小宽度为6,不足部分默认用空格填充在左侧
// replace(' ', '0') 将填充的空格替换为0,实现左补0效果
String formattedPolicySuffix = String.format("%6s", last6Chars).replace(' ', '0');
// 3. 项目类型枚举转换为字符串
String fortuneTypeCode = FortuneTypeEnum.getByItemValue(fortuneType).getItemLabel();
// 4. 组装最终字符串
return String.format("%s-%s-%d",
fortuneTypeCode,
formattedPolicySuffix,
expectedFortuneId);
} }
@Override @Override
......
...@@ -109,7 +109,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -109,7 +109,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
@Override @Override
@Transactional(rollbackFor = BusinessException.class) @Transactional(rollbackFor = BusinessException.class)
public void saveFortuneAccount(List<FortuneAccountExportDTO> accountExportDTOList, LocalDate actualPayoutDate) { public void saveFortuneAccount(List<FortuneAccountExportDTO> accountExportDTOList) {
if (CollectionUtils.isEmpty(accountExportDTOList)) { if (CollectionUtils.isEmpty(accountExportDTOList)) {
return; return;
} }
...@@ -122,19 +122,22 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -122,19 +122,22 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
Map<String, String> map = policyBrokerService.queryInternalCodeMap(brokerBizIdList); Map<String, String> map = policyBrokerService.queryInternalCodeMap(brokerBizIdList);
List<FortuneAccount> fortuneAccountList = new ArrayList<>(); List<FortuneAccount> fortuneAccountList = new ArrayList<>();
Date currentDate = new Date(); Date currentDate = new Date();
String billingYearMonth = actualPayoutDate != null
? actualPayoutDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyyMM")) Map<String, Integer> prefixSerialCache = new HashMap<>();
: "";
for (FortuneAccountExportDTO accountExportDTO : accountExportDTOList) { for (FortuneAccountExportDTO accountExportDTO : accountExportDTOList) {
FortuneAccount fortuneAccount = new FortuneAccount(); FortuneAccount fortuneAccount = new FortuneAccount();
fortuneAccount.setFortuneAccountBizId(RandomStringGenerator.generateBizId16("fortune_account")); fortuneAccount.setFortuneAccountBizId(RandomStringGenerator.generateBizId16("fortune_account"));
String internalCode = map.get(accountExportDTO.getBrokerBizId()); String internalCode = map.get(accountExportDTO.getBrokerBizId());
// LocalDate payoutDate = accountExportDTO.getActualPayoutDate();
// String billingYearMonth = payoutDate != null String billingYearMonth = accountExportDTO.getActualPayoutDate() != null
// ? actualPayoutDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyyMM")) ? accountExportDTO.getActualPayoutDate().format(java.time.format.DateTimeFormatter.ofPattern("yyyyMM"))
// : ""; : "";
String businessNo = BusinessNoUtils.generate(billingYearMonth, internalCode);
//出账业务编号(出账年月 + 转介人内部编号(后6位)(如无,用0补齐)+流水号(6位)) String prefix = BusinessNoUtils.getPrefix(billingYearMonth, internalCode);
// 业务编号生成
String businessNo = generateBusinessNoWithCache(prefix, billingYearMonth, internalCode, prefixSerialCache);
fortuneAccount.setBusinessNo(businessNo); fortuneAccount.setBusinessNo(businessNo);
fortuneAccount.setBroker(accountExportDTO.getBroker()); fortuneAccount.setBroker(accountExportDTO.getBroker());
fortuneAccount.setBrokerBizId(accountExportDTO.getBrokerBizId()); fortuneAccount.setBrokerBizId(accountExportDTO.getBrokerBizId());
...@@ -142,7 +145,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -142,7 +145,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
fortuneAccount.setTeamBizId(accountExportDTO.getTeamBizId()); fortuneAccount.setTeamBizId(accountExportDTO.getTeamBizId());
fortuneAccount.setCurrency(accountExportDTO.getCurrency()); fortuneAccount.setCurrency(accountExportDTO.getCurrency());
fortuneAccount.setHkdAmount(accountExportDTO.getAmount()); fortuneAccount.setHkdAmount(accountExportDTO.getAmount());
fortuneAccount.setFortuneAccountDate(this.getActualPayoutDate(actualPayoutDate)); fortuneAccount.setFortuneAccountDate(this.getActualPayoutDate(accountExportDTO.getActualPayoutDate()));
// 出账状态默认待出账 // 出账状态默认待出账
fortuneAccount.setStatus(FortuneStatusEnum.CHECKED.getItemValue()); fortuneAccount.setStatus(FortuneStatusEnum.CHECKED.getItemValue());
...@@ -186,7 +189,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -186,7 +189,7 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
updateFortune.setCurrentPaymentRatio(item.getCurrentPaymentHkdAmount() updateFortune.setCurrentPaymentRatio(item.getCurrentPaymentHkdAmount()
.divide(item.getHkdAmount(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100))); .divide(item.getHkdAmount(), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
} }
updateFortune.setReconciliationOperator(currentLoginUser.getUsername()); updateFortune.setReconciliationOperator(currentLoginUser.getRealName());
updateFortuneList.add(updateFortune); updateFortuneList.add(updateFortune);
// 处理关联预计发佣记录 // 处理关联预计发佣记录
expectedFortuneBizIdList.add(item.getExpectedFortuneBizId()); expectedFortuneBizIdList.add(item.getExpectedFortuneBizId());
...@@ -210,7 +213,6 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -210,7 +213,6 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
ExpectedFortune updateExpectedFortune = new ExpectedFortune(); ExpectedFortune updateExpectedFortune = new ExpectedFortune();
updateExpectedFortune.setId(expectedFortune.getId()); updateExpectedFortune.setId(expectedFortune.getId());
updateExpectedFortune.setStatus(FortuneStatusEnum.CHECKED.getItemValue()); updateExpectedFortune.setStatus(FortuneStatusEnum.CHECKED.getItemValue());
updateExpectedFortune.setActualPayoutDate(actualPayoutDate);
updateExpectedFortuneList.add(updateExpectedFortune); updateExpectedFortuneList.add(updateExpectedFortune);
} }
expectedFortuneService.updateBatchById(updateExpectedFortuneList); expectedFortuneService.updateBatchById(updateExpectedFortuneList);
...@@ -218,6 +220,50 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -218,6 +220,50 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
} }
/**
* 带本地缓存的业务编号生成(解决同一批次内相同 prefix 的流水号重复问题)
* @param prefix 业务编号前缀(出账年月 + 转介人内部编号后6位)
* @param billingYearMonth 出账年月
* @param internalCode 转介人内部编号
* @param prefixSerialCache 本地缓存(Map<prefix, 当前已使用的最大流水号数值>)
* @return 完整的业务编号
*/
private String generateBusinessNoWithCache(String prefix, String billingYearMonth,
String internalCode, Map<String, Integer> prefixSerialCache) {
// 从缓存中获取当前 prefix 已分配的最大流水号,若不存在则查询数据库
Integer currentMaxSerial = prefixSerialCache.get(prefix);
if (currentMaxSerial == null) {
String maxSerialFromDb = getMaxSerialNoByPrefix(prefix); // 返回如 "000000"
currentMaxSerial = Integer.parseInt(maxSerialFromDb);
}
int nextSerial = currentMaxSerial + 1;
String serialPart = String.format("%06d", nextSerial);
String businessNo = BusinessNoUtils.generate(billingYearMonth, internalCode, serialPart);
// 更新缓存
prefixSerialCache.put(prefix, nextSerial);
return businessNo;
}
/**
* 根据前缀查询当前最大流水号(后6位)
* @param prefix 业务编号前缀(出账年月+转介人内部编号后6位,共12位)
* @return 最大流水号(6位字符串),如果没有记录则返回 "000000"
*/
private String getMaxSerialNoByPrefix(String prefix) {
// 查询 business_no 以指定前缀开头的记录,按业务编号降序取第一条
LambdaQueryWrapper<FortuneAccount> wrapper = new LambdaQueryWrapper<>();
wrapper.likeRight(FortuneAccount::getBusinessNo, prefix)
.orderByDesc(FortuneAccount::getBusinessNo)
.last("limit 1");
FortuneAccount account = this.getOne(wrapper, false);
if (account == null) {
return "000000";
}
String businessNo = account.getBusinessNo();
// 取最后6位作为流水号
return businessNo.substring(businessNo.length() - 6);
}
private Date getActualPayoutDate(LocalDate actualPayoutDate) { private Date getActualPayoutDate(LocalDate actualPayoutDate) {
if (actualPayoutDate == null) { if (actualPayoutDate == null) {
return null; return null;
......
...@@ -11,9 +11,8 @@ import org.apache.commons.lang3.StringUtils; ...@@ -11,9 +11,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.Collections; import java.util.*;
import java.util.List; import java.util.function.Function;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -61,6 +60,15 @@ public class PolicyBrokerServiceImpl extends ServiceImpl<PolicyBrokerMapper, Pol ...@@ -61,6 +60,15 @@ public class PolicyBrokerServiceImpl extends ServiceImpl<PolicyBrokerMapper, Pol
} }
@Override @Override
public Map<String, PolicyBroker> queryPolicyBrokerMap(Collection<String> policyNoSet) {
if (CollectionUtils.isEmpty(policyNoSet)) {
return Collections.emptyMap();
}
List<PolicyBroker> list = this.lambdaQuery().in(PolicyBroker::getPolicyNo, policyNoSet).list();
return list.stream().collect(Collectors.toMap(PolicyBroker::getPolicyNo, Function.identity(), (oldValue, newValue) -> newValue));
}
@Override
public Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList) { public Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList) {
if (CollectionUtils.isEmpty(brokerBizIdList)) { if (CollectionUtils.isEmpty(brokerBizIdList)) {
return Collections.emptyMap(); return Collections.emptyMap();
......
...@@ -52,6 +52,7 @@ import org.springframework.web.bind.annotation.RequestParam; ...@@ -52,6 +52,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -168,7 +169,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -168,7 +169,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
} }
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getInsured())) queryWrapper.like("insured", policyFollowQueryRequest.getInsured()); if (StringUtils.isNotEmpty(policyFollowQueryRequest.getInsured())) queryWrapper.like("insured", policyFollowQueryRequest.getInsured());
//签单人 //签单人
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getSigner())) queryWrapper.like("signer", policyFollowQueryRequest.getSigner()); if (StringUtils.isNotEmpty(policyFollowQueryRequest.getSigner())) queryWrapper.like("signer_sc", ChineseTextConverter.traditionalToSimplified(policyFollowQueryRequest.getSigner()));
//转介人(保单转介人表) //转介人(保单转介人表)
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getBrokerName())) { if (StringUtils.isNotEmpty(policyFollowQueryRequest.getBrokerName())) {
List<PolicyBroker> policyBrokerList = policyBrokerService.queryList(QueryPolicyBrokerDto.builder().brokerName(policyFollowQueryRequest.getBrokerName()).build()); List<PolicyBroker> policyBrokerList = policyBrokerService.queryList(QueryPolicyBrokerDto.builder().brokerName(policyFollowQueryRequest.getBrokerName()).build());
...@@ -378,6 +379,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -378,6 +379,7 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
String loginUserId = currentLoginUser.getId().toString(); String loginUserId = currentLoginUser.getId().toString();
policyFollow.setUpdaterId(loginUserId); policyFollow.setUpdaterId(loginUserId);
policyFollow.setUpdateTime(new Date()); policyFollow.setUpdateTime(new Date());
policyFollow.setSignerSc(ChineseTextConverter.traditionalToSimplified(policyFollowDto.getSigner()));
try { try {
boolean result = updateById(policyFollow); boolean result = updateById(policyFollow);
...@@ -1298,6 +1300,15 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1298,6 +1300,15 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
return policySecondHolderService.updatePolicySecondHolder(policySecondHolderUpdateRequest); return policySecondHolderService.updatePolicySecondHolder(policySecondHolderUpdateRequest);
} }
@Override
public Map<String, PolicyFollow> queryPolicyFollowMap(Collection<?> policyNoSet) {
if (CollectionUtils.isEmpty(policyNoSet)) {
return Collections.emptyMap();
}
List<PolicyFollow> policyFollowList = this.list(new QueryWrapper<PolicyFollow>().in("policy_no", policyNoSet));
return policyFollowList.stream().collect(Collectors.toMap(PolicyFollow::getPolicyNo, Function.identity(), (oldValue, newValue) -> newValue));
}
/** /**
* 根据保单号查询新单跟进详情 * 根据保单号查询新单跟进详情
* @param policyNo * @param policyNo
...@@ -1321,15 +1332,18 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1321,15 +1332,18 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
public List<String> queryPolicyNoList(String policyHolder, String signer, String brokerName, String insured) { public List<String> queryPolicyNoList(String policyHolder, String signer, String brokerName, String insured) {
// 投保人转换:中文转简体、英文转小写 // 投保人转换:中文转简体、英文转小写
String policyHolderSc = ChineseTextConverter.traditionalToSimplified(policyHolder); String policyHolderSc = ChineseTextConverter.traditionalToSimplified(policyHolder);
String policyHolderEnLc = EnglishTextUtil.toLowerCase(policyHolder); String policyHolderEnLc = EnglishTextUtil.toLowerCaseSafe(policyHolder);
// 受保人转换:中文转简体、英文转小写 // 受保人转换:中文转简体、英文转小写
String insuredSc = ChineseTextConverter.traditionalToSimplified(insured); String insuredSc = ChineseTextConverter.traditionalToSimplified(insured);
String insuredEnLc = EnglishTextUtil.toLowerCase(insured); String insuredEnLc = EnglishTextUtil.toLowerCaseSafe(insured);
//签单员繁转简体
String signerSc = ChineseTextConverter.traditionalToSimplified(signer);
return this.baseMapper.queryPolicyNoList( return this.baseMapper.queryPolicyNoList(
policyHolderSc, policyHolderEnLc, policyHolderSc, policyHolderEnLc,
signer, signerSc,
brokerName, brokerName,
insuredSc, insuredEnLc insuredSc, insuredEnLc
); );
...@@ -1352,6 +1366,9 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1352,6 +1366,9 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
// 3. 更新客户表 // 3. 更新客户表
updateCustomerNameFields(pageSize); updateCustomerNameFields(pageSize);
// 4. 更新新单跟进表
updateSignerScFields(pageSize);
log.info("投保人/受保人名字冗余字段更新完成"); log.info("投保人/受保人名字冗余字段更新完成");
return Result.success("更新成功"); return Result.success("更新成功");
} }
...@@ -1376,23 +1393,23 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1376,23 +1393,23 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
// 繁体 → 简体 // 繁体 → 简体
if (StringUtils.isNotBlank(entity.getName())) { if (StringUtils.isNotBlank(entity.getName())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName()); String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName());
if (!nameSc.equals(entity.getNameSc())) { // if (!nameSc.equals(entity.getNameSc())) {
entity.setNameSc(nameSc); entity.setNameSc(nameSc);
changed = true; changed = true;
} // }
} }
// 英文 → 小写 // 英文 → 小写
if (StringUtils.isNotBlank(entity.getNameEn())) { if (StringUtils.isNotBlank(entity.getNameEn())) {
String nameEnLc = EnglishTextUtil.toLowerCase(entity.getNameEn()); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(entity.getNameEn());
if (!nameEnLc.equals(entity.getNameEnLc())) { // if (!nameEnLc.equals(entity.getNameEnLc())) {
entity.setNameEnLc(nameEnLc); entity.setNameEnLc(nameEnLc);
changed = true; changed = true;
} // }
} }
if (changed) { if (changed) {
entity.setUpdateTime(new Date()); // 可选,记录更新时间 // entity.setUpdateTime(new Date()); // 可选,记录更新时间
toUpdate.add(entity); toUpdate.add(entity);
} }
} }
...@@ -1423,22 +1440,22 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1423,22 +1440,22 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (StringUtils.isNotBlank(entity.getName())) { if (StringUtils.isNotBlank(entity.getName())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName()); String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName());
if (!nameSc.equals(entity.getNameSc())) { // if (!nameSc.equals(entity.getNameSc())) {
entity.setNameSc(nameSc); entity.setNameSc(nameSc);
changed = true; changed = true;
} // }
} }
if (StringUtils.isNotBlank(entity.getNameEn())) { if (StringUtils.isNotBlank(entity.getNameEn())) {
String nameEnLc = EnglishTextUtil.toLowerCase(entity.getNameEn()); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(entity.getNameEn());
if (!nameEnLc.equals(entity.getNameEnLc())) { // if (!nameEnLc.equals(entity.getNameEnLc())) {
entity.setNameEnLc(nameEnLc); entity.setNameEnLc(nameEnLc);
changed = true; changed = true;
} // }
} }
if (changed) { if (changed) {
entity.setUpdateTime(new Date()); // entity.setUpdateTime(new Date());
toUpdate.add(entity); toUpdate.add(entity);
} }
} }
...@@ -1469,22 +1486,22 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1469,22 +1486,22 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
if (StringUtils.isNotBlank(entity.getNameCn())) { if (StringUtils.isNotBlank(entity.getNameCn())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getNameCn()); String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getNameCn());
if (!nameSc.equals(entity.getNameSc())) { // if (!nameSc.equals(entity.getNameSc())) {
entity.setNameSc(nameSc); entity.setNameSc(nameSc);
changed = true; changed = true;
} // }
} }
if (StringUtils.isNotBlank(entity.getNamePyEn())) { if (StringUtils.isNotBlank(entity.getNamePyEn())) {
String nameEnLc = EnglishTextUtil.toLowerCase(entity.getNamePyEn()); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(entity.getNamePyEn());
if (!nameEnLc.equals(entity.getNameEnLc())) { // if (!nameEnLc.equals(entity.getNameEnLc())) {
entity.setNameEnLc(nameEnLc); entity.setNameEnLc(nameEnLc);
changed = true; changed = true;
} // }
} }
if (changed) { if (changed) {
entity.setUpdateTime(new Date()); // entity.setUpdateTime(new Date());
toUpdate.add(entity); toUpdate.add(entity);
} }
} }
...@@ -1495,5 +1512,41 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol ...@@ -1495,5 +1512,41 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
pageNo++; pageNo++;
} }
} }
/**
* 批量处理 PolicyFollow 的 signerSc
*/
private void updateSignerScFields(int pageSize) {
int pageNo = 1;
while (true) {
Page<PolicyFollow> page = new Page<>(pageNo, pageSize);
Page<PolicyFollow> resultPage = policyFollowService.page(page);
List<PolicyFollow> records = resultPage.getRecords();
if (CollUtil.isEmpty(records)) {
break;
}
List<PolicyFollow> toUpdate = new ArrayList<>();
for (PolicyFollow entity : records) {
boolean changed = false;
if (StringUtils.isNotBlank(entity.getSigner())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getSigner());
entity.setSignerSc(nameSc);
changed = true;
}
if (changed) {
// entity.setUpdateTime(new Date());
toUpdate.add(entity);
}
}
if (!toUpdate.isEmpty()) {
policyFollowService.updateBatchById(toUpdate);
}
pageNo++;
}
}
} }
...@@ -60,7 +60,7 @@ public class PolicyInsurantServiceImpl extends ServiceImpl<PolicyInsurantMapper, ...@@ -60,7 +60,7 @@ public class PolicyInsurantServiceImpl extends ServiceImpl<PolicyInsurantMapper,
// 中文转简体 // 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(insured); String nameSc = ChineseTextConverter.traditionalToSimplified(insured);
// 英文转小写 // 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(insured); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(insured);
return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyInsurant>() return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyInsurant>()
.and(wrapper -> wrapper .and(wrapper -> wrapper
......
...@@ -9,8 +9,6 @@ import com.yd.common.exception.BusinessException; ...@@ -9,8 +9,6 @@ import com.yd.common.exception.BusinessException;
import com.yd.common.utils.ChineseTextConverter; import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.EnglishTextUtil; import com.yd.common.utils.EnglishTextUtil;
import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest; import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.enums.FnaStatusEnum;
import com.yd.csf.service.model.Fna;
import com.yd.csf.service.model.PolicyPolicyholder; import com.yd.csf.service.model.PolicyPolicyholder;
import com.yd.csf.service.service.PolicyPolicyholderService; import com.yd.csf.service.service.PolicyPolicyholderService;
import com.yd.csf.service.dao.PolicyPolicyholderMapper; import com.yd.csf.service.dao.PolicyPolicyholderMapper;
...@@ -20,9 +18,8 @@ import org.apache.commons.lang3.StringUtils; ...@@ -20,9 +18,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections; import java.util.*;
import java.util.Date; import java.util.stream.Collectors;
import java.util.List;
/** /**
* @author Zhang Jianan * @author Zhang Jianan
...@@ -58,6 +55,19 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde ...@@ -58,6 +55,19 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde
} }
@Override @Override
public Map<String, PolicyPolicyholder> queryPolicyholderMap(Collection<?> policyNoList) {
if (CollectionUtils.isEmpty(policyNoList)) {
return Collections.emptyMap();
}
List<PolicyPolicyholder> policyholderList = this.lambdaQuery()
.in(PolicyPolicyholder::getPolicyNo, policyNoList)
.list();
return policyholderList.stream().collect(Collectors.toMap(PolicyPolicyholder::getPolicyNo, a -> a, (oldValue, newValue) -> newValue));
}
@Override
public List<PolicyPolicyholder> queryList(String policyHolder) { public List<PolicyPolicyholder> queryList(String policyHolder) {
// 输入为空时直接返回空列表,避免无意义的全表查询 // 输入为空时直接返回空列表,避免无意义的全表查询
if (StringUtils.isBlank(policyHolder)) { if (StringUtils.isBlank(policyHolder)) {
...@@ -67,7 +77,7 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde ...@@ -67,7 +77,7 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde
// 中文转简体 // 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(policyHolder); String nameSc = ChineseTextConverter.traditionalToSimplified(policyHolder);
// 英文转小写 // 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(policyHolder); String nameEnLc = EnglishTextUtil.toLowerCaseSafe(policyHolder);
return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyPolicyholder>() return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyPolicyholder>()
.and(wrapper -> wrapper .and(wrapper -> wrapper
......
...@@ -388,6 +388,17 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy> ...@@ -388,6 +388,17 @@ public class PolicyServiceImpl extends ServiceImpl<PolicyMapper, Policy>
.collect(Collectors.toMap(PolicyProductInfo::getProductLaunchBizId, Function.identity(), (oldValue, newValue) -> newValue)); .collect(Collectors.toMap(PolicyProductInfo::getProductLaunchBizId, Function.identity(), (oldValue, newValue) -> newValue));
} }
@Override
public Map<String, Policy> queryPolicyMap(Collection<String> policyNoList) {
// 校验参数
if (CollectionUtils.isEmpty(policyNoList)) {
return Collections.emptyMap();
}
return this.lambdaQuery().in(Policy::getPolicyNo, policyNoList).list()
.stream().collect(Collectors.toMap(Policy::getPolicyNo, Function.identity()));
}
/** /**
* 从JSON数组中解析自定义属性 * 从JSON数组中解析自定义属性
*/ */
......
package com.yd.csf.service.utils; package com.yd.csf.service.utils;
import java.util.concurrent.ThreadLocalRandom;
/** /**
* 业务编号生成工具类 * 业务编号生成工具类
* <p>格式:出账年月 + 转介人内部编号后6位(无则补0) + 6位随机数字</p> * 格式:出账年月(6) + 转介人内部编号后6位 + 6位流水号(从000001开始递增)
*/ */
public class BusinessNoUtils { public class BusinessNoUtils {
/** /**
* 生成业务编号 * 生成业务编号(流水号由调用方传入)
*
* @param billingYearMonth 出账年月,如 "202604" * @param billingYearMonth 出账年月,如 "202604"
* @param referrerInnerNo 转介人内部编号,可为 null 或空字符串 * @param referrerInnerNo 转介人内部编号,可为null或空
* @return 完整的业务编号字符串 * @param serialPart 6位流水号(如 "000001")
* @return 完整业务编号
*/ */
public static String generate(String billingYearMonth, String referrerInnerNo) { public static String generate(String billingYearMonth, String referrerInnerNo, String serialPart) {
String referrerPart = formatReferrerInnerNo(referrerInnerNo); String referrerPart = formatReferrerInnerNo(referrerInnerNo);
String serialPart = generateRandomSerial();
return billingYearMonth + referrerPart + serialPart; return billingYearMonth + referrerPart + serialPart;
} }
...@@ -33,9 +30,13 @@ public class BusinessNoUtils { ...@@ -33,9 +30,13 @@ public class BusinessNoUtils {
return String.format("%6s", no).replace(' ', '0'); return String.format("%6s", no).replace(' ', '0');
} }
// 生成6位随机数字(000000~999999) /**
private static String generateRandomSerial() { * 获取业务编号中的前缀部分(用于数据库查询)
int random = ThreadLocalRandom.current().nextInt(1000000); * @param billingYearMonth 出账年月
return String.format("%06d", random); * @param referrerInnerNo 转介人内部编号
* @return 前缀字符串(12位)
*/
public static String getPrefix(String billingYearMonth, String referrerInnerNo) {
return billingYearMonth + formatReferrerInnerNo(referrerInnerNo);
} }
} }
\ No newline at end of file
...@@ -186,11 +186,23 @@ public class CommissionExpectedExportNewDTO { ...@@ -186,11 +186,23 @@ public class CommissionExpectedExportNewDTO {
@ExcelProperty("期交保费") @ExcelProperty("期交保费")
private String premium; private String premium;
// /**
// * 入账检核记录-通用备注
// */
// @ExcelProperty("备注")
// private String realRemark;
/**
* 人工备注
*/
@ExcelProperty("人工备注")
private String manualRemark;
/** /**
* 入账检核记录-通用备注 * 系统备注
*/ */
@ExcelProperty("备注") @ExcelProperty("备注")
private String realRemark; private String remark;
/** /**
* 入账检核记录-更新人名称 * 入账检核记录-更新人名称
......
...@@ -16,6 +16,18 @@ import java.util.List; ...@@ -16,6 +16,18 @@ import java.util.List;
@Data @Data
@Schema(description = "预计来佣响应") @Schema(description = "预计来佣响应")
public class CommissionExpectedNewVO implements Serializable { public class CommissionExpectedNewVO implements Serializable {
/**
* 预计来佣业务id
*/
private String commissionExpectedBizId;
/**
* 保单来佣业务id
*/
private String commissionBizId;
//===========公共字段============= //===========公共字段=============
/** /**
* 是否实收:1-预计(预计来佣记录) 2-实收(保单来佣表记录)* * 是否实收:1-预计(预计来佣记录) 2-实收(保单来佣表记录)*
...@@ -72,6 +84,11 @@ public class CommissionExpectedNewVO implements Serializable { ...@@ -72,6 +84,11 @@ public class CommissionExpectedNewVO implements Serializable {
private Integer totalPeriod; private Integer totalPeriod;
/** /**
* 预计来佣-入账项目类型(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/
private String commissionType;
/**
* 预计来佣-来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等) * 预计来佣-来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)
*/ */
// @Schema(description = "来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)") // @Schema(description = "来佣名称(1:销售拥金;2:销售奖金;3:销售津贴;4:续期佣金;5:服务津贴;等等)")
...@@ -81,13 +98,18 @@ public class CommissionExpectedNewVO implements Serializable { ...@@ -81,13 +98,18 @@ public class CommissionExpectedNewVO implements Serializable {
* 预计来佣-入账年月(估) * (预计来佣日期) * 预计来佣-入账年月(估) * (预计来佣日期)
*/ */
// @Schema(description = "入账年月(估)") // @Schema(description = "入账年月(估)")
@JsonFormat(pattern = "yyyyMM", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date commissionDateMonth; private Date commissionDateMonth;
/** /**
* 预计来佣-入账日(同预计来佣表commissionDate)
*/
private Date commissionExpectedDate;
/**
* 入账检核记录-入账年月实(来佣日期 yyyyMM) * 入账检核记录-入账年月实(来佣日期 yyyyMM)
*/ */
@JsonFormat(pattern = "yyyyMM", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date commissionDate; private Date commissionDate;
/** /**
...@@ -151,6 +173,11 @@ public class CommissionExpectedNewVO implements Serializable { ...@@ -151,6 +173,11 @@ public class CommissionExpectedNewVO implements Serializable {
private BigDecimal expectedAmount; private BigDecimal expectedAmount;
/** /**
* 预计来佣-入账金额
*/
private BigDecimal amount;
/**
* 预计来佣-结算汇率(估) * 预计来佣-结算汇率(估)
*/ */
// @Schema(description = "结算汇率(估)") // @Schema(description = "结算汇率(估)")
...@@ -180,16 +207,15 @@ public class CommissionExpectedNewVO implements Serializable { ...@@ -180,16 +207,15 @@ public class CommissionExpectedNewVO implements Serializable {
private String policyCurrency; private String policyCurrency;
/** /**
* 预计来佣-期交保费 * 预计来佣-入账币种
*/ */
// @Schema(description = "期交保费") private String currency;
private Object premium;
/** /**
* 入账检核记录-通用备注 * 预计来佣-期交保费
*/ */
// @Schema(description = "备注") // @Schema(description = "期交保费")
private String realRemark; private Object premium;
/** /**
* 入账检核记录-更新人名称 * 入账检核记录-更新人名称
...@@ -203,9 +229,20 @@ public class CommissionExpectedNewVO implements Serializable { ...@@ -203,9 +229,20 @@ public class CommissionExpectedNewVO implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date realUpdateTime; private Date realUpdateTime;
/**
* 修改理由
*/
private String statusDesc;
/**
* 人工备注
*/
private String manualRemark;
/**
* 通用备注
*/
private String remark;
......
...@@ -171,10 +171,10 @@ public class CommissionVO implements Serializable { ...@@ -171,10 +171,10 @@ public class CommissionVO implements Serializable {
private String currency; private String currency;
/** /**
* 来佣日期 * 来佣年月 yyyy-MM
*/ */
@Schema(description = "来佣日期") @Schema(description = "来佣年月 yyyy-MM")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private Date commissionDate; private Date commissionDate;
/** /**
...@@ -268,6 +268,11 @@ public class CommissionVO implements Serializable { ...@@ -268,6 +268,11 @@ public class CommissionVO implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime; private Date updateTime;
/**
* 人工备注
*/
private String manualRemark;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
......
...@@ -282,17 +282,17 @@ public class FortuneVO implements Serializable { ...@@ -282,17 +282,17 @@ public class FortuneVO implements Serializable {
private String status; private String status;
/** /**
* 出账(估) / 预计发佣月 * 出账年月(估) / 预计发佣月
*/ */
@Schema(description = "出账(估) / 预计发佣月") @Schema(description = "出账年月(估) / 预计发佣月")
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private LocalDate payoutDate; private LocalDate payoutDate;
/** /**
* 出账(实) * 出账年月(实)
*/ */
@Schema(description = "出账(实)") @Schema(description = "出账年月(实)")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
private LocalDate actualPayoutDate; private LocalDate actualPayoutDate;
/** /**
......
...@@ -3,6 +3,7 @@ package com.yd.csf.service.vo; ...@@ -3,6 +3,7 @@ package com.yd.csf.service.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
...@@ -21,6 +22,18 @@ public class PayableReportVO { ...@@ -21,6 +22,18 @@ public class PayableReportVO {
private String policyNo; private String policyNo;
/** /**
* 投保人
*/
@Schema(description = "投保人")
private String policyHolder;
/**
* 投保人英文
*/
@Schema(description = "投保人英文")
private String policyHolderEn;
/**
* 转介人 * 转介人
*/ */
@Schema(description = "转介人(保单的第一位转介人)") @Schema(description = "转介人(保单的第一位转介人)")
...@@ -135,13 +148,13 @@ public class PayableReportVO { ...@@ -135,13 +148,13 @@ public class PayableReportVO {
@Schema(description = "产品计划") @Schema(description = "产品计划")
private String productName; private String productName;
/** // /**
* 保單持有人(投保人,保单表)(中文名) // * 保單持有人(投保人,保单表)(中文名)
*/ // */
private String policyHolder; // private String policyHolder;
//
/** // /**
* 保單持有人(投保人,保单表)(英文名) // * 保單持有人(投保人,保单表)(英文名)
*/ // */
private String policyHolderEn; // private String policyHolderEn;
} }
...@@ -141,10 +141,10 @@ public class ReceivableReportVO { ...@@ -141,10 +141,10 @@ public class ReceivableReportVO {
private String policyCurrency; private String policyCurrency;
/** /**
* 备注 * 人工备注
*/ */
@Schema(description = "备注") @Schema(description = "人工备注")
private String remark; private String manualRemark;
/** /**
* 保單持有人(投保人,保单表)(中文名) * 保單持有人(投保人,保单表)(中文名)
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn, (select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured, (select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn, (select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.remark, ce.manual_remark as manualRemark,
MAX(ce.reconciliation_company) as reconciliationCompany, MAX(ce.reconciliation_company) as reconciliationCompany,
MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId, MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod, ce.commission_period as commissionPeriod,
...@@ -122,7 +122,7 @@ ...@@ -122,7 +122,7 @@
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn, (select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
(select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured, (select pi.name from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insured,
(select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn, (select pi.name_en from policy_insurant pi where pi.policy_biz_id = p.policy_biz_id limit 1) as insuredEn,
ce.remark, ce.manual_remark as manualRemark,
ce.reconciliation_company as reconciliationCompany, ce.reconciliation_company as reconciliationCompany,
ce.reconciliation_company_biz_id as reconciliationCompanyBizId, ce.reconciliation_company_biz_id as reconciliationCompanyBizId,
ce.commission_period as commissionPeriod, ce.commission_period as commissionPeriod,
......
...@@ -79,24 +79,11 @@ ...@@ -79,24 +79,11 @@
then round(100 - (ifnull(sum(ef.paid_amount), 0) / ifnull(sum(ef.hkd_amount), 0) * 100), 2) then round(100 - (ifnull(sum(ef.paid_amount), 0) / ifnull(sum(ef.hkd_amount), 0) * 100), 2)
else 100 else 100
end as unpaidRatio, end as unpaidRatio,
MAX(first_broker.broker_name) as broker, MAX(ef.broker) as broker,
MAX(first_broker.broker_biz_id) as brokerBizId, MAX(ef.broker_biz_id) as brokerBizId,
DATE_ADD(DATE_ADD(MAX(p.effective_date), INTERVAL 2 MONTH), INTERVAL (ef.fortune_period - 1) YEAR) as payoutDate DATE_ADD(DATE_ADD(MAX(p.effective_date), INTERVAL 2 MONTH), INTERVAL (ef.fortune_period - 1) YEAR) as payoutDate
from expected_fortune ef from expected_fortune ef
left join policy p on ef.policy_no = p.policy_no left join policy p on ef.policy_no = p.policy_no
left join (
SELECT pb1.policy_no, pb1.broker_name,pb1.broker_biz_id
FROM policy_broker pb1
WHERE pb1.id = (
SELECT pb2.id
FROM policy_broker pb2
WHERE pb2.policy_no = pb1.policy_no
AND pb2.is_deleted = 0
ORDER BY pb2.id ASC
LIMIT 1
)
AND pb1.is_deleted = 0
) first_broker on ef.policy_no = first_broker.policy_no
<where> <where>
ef.fortune_biz_type = 'R' ef.fortune_biz_type = 'R'
<if test="expectedFortuneIds != null and expectedFortuneIds.size > 0"> <if test="expectedFortuneIds != null and expectedFortuneIds.size > 0">
...@@ -182,7 +169,7 @@ ...@@ -182,7 +169,7 @@
ef.status_desc, ef.status_desc,
ef.payout_date, ef.payout_date,
ef.actual_payout_date, ef.actual_payout_date,
ef.default_exchange_rate, ef.default_exchange_rate as exchangeRate,
ef.original_currency, ef.original_currency,
ef.original_amount, ef.original_amount,
ef.original_to_hkd_rate, ef.original_to_hkd_rate,
...@@ -190,6 +177,8 @@ ...@@ -190,6 +177,8 @@
ef.payout_amount, ef.payout_amount,
ef.hkd_to_payout_rate, ef.hkd_to_payout_rate,
ef.hkd_amount, ef.hkd_amount,
ef.hkd_amount as current_payment_hkd_amount,
ef.default_exchange_rate as exchange_rate,
ef.paid_amount, ef.paid_amount,
ef.unpaid_amount, ef.unpaid_amount,
ef.paid_ratio, ef.paid_ratio,
...@@ -242,7 +231,7 @@ ...@@ -242,7 +231,7 @@
NULL as status_desc, NULL as status_desc,
f.payout_date, f.payout_date,
f.actual_payout_date, f.actual_payout_date,
f.exchange_rate as default_exchange_rate, NUll as default_exchange_rate,
f.original_currency, f.original_currency,
f.original_amount, f.original_amount,
f.original_to_hkd_rate, f.original_to_hkd_rate,
...@@ -250,17 +239,19 @@ ...@@ -250,17 +239,19 @@
f.payout_amount, f.payout_amount,
f.hkd_to_payout_rate, f.hkd_to_payout_rate,
f.hkd_amount, f.hkd_amount,
f.current_payment_amount as paid_amount, NULL as current_payment_hkd_amount,
0 as unpaid_amount, f.exchange_rate,
f.current_payment_ratio as paid_ratio, NULL as paid_amount,
0 as unpaid_ratio, NULL as unpaid_amount,
NULL as paid_ratio,
NULL as unpaid_ratio,
f.is_tax, f.is_tax,
f.tax_amount, f.tax_amount,
f.net_amount, f.net_amount,
NULL as rule_item_biz_id, NULL as rule_item_biz_id,
f.remark, f.remark,
f.create_time, f.create_time,
NULL as creator_name, f.reconciliation_operator as creator_name,
f.update_time, f.update_time,
2 as type 2 as type
FROM fortune f FROM fortune f
...@@ -291,10 +282,9 @@ ...@@ -291,10 +282,9 @@
ef.paid_amount, ef.paid_amount,
ef.unpaid_amount, ef.unpaid_amount,
ef.policy_no, ef.policy_no,
(SELECT SUM(p.total_payment_premium) * MAX(ef.default_exchange_rate) (SELECT p.total_payment_premium * ef.default_exchange_rate
FROM policy p FROM policy p
WHERE p.policy_no = ef.policy_no WHERE p.policy_no = ef.policy_no
LIMIT 1
) AS totalPremiumAmount ) AS totalPremiumAmount
FROM expected_fortune ef FROM expected_fortune ef
WHERE ef.is_deleted = 0 WHERE ef.is_deleted = 0
......
...@@ -25,8 +25,8 @@ ...@@ -25,8 +25,8 @@
<result property="shareRate" column="share_rate" /> <result property="shareRate" column="share_rate" />
<result property="fortuneName" column="fortune_name" /> <result property="fortuneName" column="fortune_name" />
<result property="fortuneType" column="fortune_type" /> <result property="fortuneType" column="fortune_type" />
<result property="amount" column="amount" /> <result property="ruleAmount" column="rule_amount" />
<result property="currency" column="currency" /> <result property="ruleCurrency" column="rule_currency" />
<result property="exchangeRate" column="exchange_rate" /> <result property="exchangeRate" column="exchange_rate" />
<result property="hkdAmount" column="hkd_amount" /> <result property="hkdAmount" column="hkd_amount" />
<result property="currentPaymentAmount" column="current_payment_amount" /> <result property="currentPaymentAmount" column="current_payment_amount" />
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
id,fortune_biz_id,expected_fortune_biz_id,payable_no,reconciliation_year_month,fortune_biz_type,batch_biz_id, id,fortune_biz_id,expected_fortune_biz_id,payable_no,reconciliation_year_month,fortune_biz_type,batch_biz_id,
commission_biz_id,commission_expected_biz_id,policy_no,policy_currency,fortune_period,fortune_total_period,broker_biz_id, commission_biz_id,commission_expected_biz_id,policy_no,policy_currency,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,exchange_rate,hkd_amount,current_payment_amount,current_payment_hkd_amount,current_payment_ratio,status,payout_date,actual_payout_date,is_tax, rule_amount,rule_currency,exchange_rate,hkd_amount,current_payment_amount,current_payment_hkd_amount,current_payment_ratio,status,payout_date,actual_payout_date,is_tax,
tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id,reconciliation_operator, tax_amount,net_amount,salary_biz_id,base_rule_biz_id,settlement_biz_id,reconciliation_operator,
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
...@@ -71,7 +71,17 @@ ...@@ -71,7 +71,17 @@
from expected_fortune where status = '0' and policy_no = f.policy_no from expected_fortune where status = '0' and policy_no = f.policy_no
),0) AS pendingOutAmount, ),0) AS pendingOutAmount,
IFNULL(SUM(CASE WHEN f.status in ('6','1') THEN f.current_payment_hkd_amount ELSE 0 END),0) AS availableOutAmount, IFNULL(SUM(CASE WHEN f.status in ('6','1') THEN f.current_payment_hkd_amount ELSE 0 END),0) AS availableOutAmount,
COUNT(DISTINCT f.policy_no) AS totalPolicyCount (SELECT COUNT(DISTINCT f2.policy_no)
FROM fortune f2
WHERE 1 = 1
<if test="fortuneIdList != null and fortuneIdList.size() > 0">
AND f2.id IN
<foreach collection="fortuneIdList" item="fortuneId" open="(" close=")" separator=",">
#{fortuneId}
</foreach>
</if>
AND f2.is_part in (0,1)
) AS totalPolicyCount
FROM fortune f FROM fortune f
WHERE 1 = 1 WHERE 1 = 1
<if test="fortuneIdList != null and fortuneIdList.size() > 0"> <if test="fortuneIdList != null and fortuneIdList.size() > 0">
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
<result property="status" column="status" /> <result property="status" column="status" />
<result property="nextStatusList" column="next_status_list" /> <result property="nextStatusList" column="next_status_list" />
<result property="policyHolder" column="policy_holder" /> <result property="policyHolder" column="policy_holder" />
<result property="policyHolderEn" column="policy_holder_en" />
<result property="insured" column="insured" /> <result property="insured" column="insured" />
<result property="insuredBizId" column="insured_biz_id" /> <result property="insuredBizId" column="insured_biz_id" />
<result property="insuredAge" column="insured_age" /> <result property="insuredAge" column="insured_age" />
...@@ -95,7 +96,7 @@ ...@@ -95,7 +96,7 @@
each_issue_premium,is_prepay,is_traceable,retroactive_date,prepaid_term, each_issue_premium,is_prepay,is_traceable,retroactive_date,prepaid_term,
prepaid_amount,prepaid_amount_after_discount,policy_expiration_date,payment_number,product_launch_biz_id, prepaid_amount,prepaid_amount_after_discount,policy_expiration_date,payment_number,product_launch_biz_id,
product_name,product_cate,category_code,insurance_company,insurance_company_biz_id,reconciliation_company,insurance_category_biz_id, product_name,product_cate,category_code,insurance_company,insurance_company_biz_id,reconciliation_company,insurance_category_biz_id,
reconciliation_company_biz_id,status,next_status_list,policy_holder,insured,insured_biz_id, reconciliation_company_biz_id,status,next_status_list,policy_holder,policy_holder_en,insured,insured_biz_id,
insured_age,grace_period,is_join,policy_currency,initial_payment_method, insured_age,grace_period,is_join,policy_currency,initial_payment_method,
initial_premium,initial_premium_total,initial_payment_status,initial_premium_discount, initial_premium,initial_premium_total,initial_payment_status,initial_premium_discount,
mailing_method,renewal_payment_method,dividend_distribution_method,delivery_no, mailing_method,renewal_payment_method,dividend_distribution_method,delivery_no,
...@@ -181,8 +182,8 @@ ...@@ -181,8 +182,8 @@
</if> </if>
) )
</if> </if>
<if test="signer != null and signer != ''"> <if test="signerSc != null and signerSc != ''">
and pf.signer like concat('%', #{signer}, '%') and pf.signer_sc like concat('%', #{signerSc}, '%')
</if> </if>
<if test="brokerName != null and brokerName != ''"> <if test="brokerName != null and brokerName != ''">
and first_broker.broker_name like concat('%', #{brokerName}, '%') and first_broker.broker_name like concat('%', #{brokerName}, '%')
......
...@@ -54,6 +54,9 @@ ...@@ -54,6 +54,9 @@
<if test="request.billOrg != null and request.billOrg != ''"> <if test="request.billOrg != null and request.billOrg != ''">
and ss.bill_org like concat('%', #{request.billOrg}, '%') and ss.bill_org like concat('%', #{request.billOrg}, '%')
</if> </if>
<if test="request.businessNo != null and request.businessNo != ''">
and fa.business_no like concat('%', #{request.businessNo}, '%')
</if>
and ss.is_deleted = 0 and ss.is_deleted = 0
</where> </where>
</select> </select>
...@@ -83,6 +86,9 @@ ...@@ -83,6 +86,9 @@
<if test="request.billOrg != null and request.billOrg != ''"> <if test="request.billOrg != null and request.billOrg != ''">
and ss.bill_org like concat('%', #{request.billOrg}, '%') and ss.bill_org like concat('%', #{request.billOrg}, '%')
</if> </if>
<if test="request.businessNo != null and request.businessNo != ''">
and fa.business_no like concat('%', #{request.businessNo}, '%')
</if>
and ss.is_deleted = 0 and ss.is_deleted = 0
</where> </where>
</select> </select>
......
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