Commit 135326c2 by zhangxingmin

push

parent 43b0aae6
......@@ -290,8 +290,11 @@ public class ApiCommissionExpectedController {
@PostMapping("/receivable_report")
@Operation(summary = "应收款报表")
public Result<ReceivableReportResponse> receivableReport(@RequestBody CommissionExpectedQueryRequest commissionExpectedQueryRequest) {
//保單持有人(中/英)、签单人、转介人名称(主)查询保单号列表
List<String> queryPolicyNoList = policyFollowService.queryPolicyNoList(commissionExpectedQueryRequest.getPolicyHolder(),commissionExpectedQueryRequest.getSigner(),commissionExpectedQueryRequest.getBrokerName());
//保單持有人(中/英、繁简/大小写)、签单人、转介人名称(主)、受保人(中/英、繁简/大小写)、查询保单号列表
List<String> queryPolicyNoList = policyFollowService.queryPolicyNoList(commissionExpectedQueryRequest.getPolicyHolder(),
commissionExpectedQueryRequest.getSigner(),
commissionExpectedQueryRequest.getBrokerName(),
commissionExpectedQueryRequest.getInsured());
// 构建查询条件
commissionExpectedQueryRequest.setPolicyNoList(queryPolicyNoList);
QueryWrapper<CommissionExpected> queryWrapper = commissionExpectedService.getQueryWrapper(commissionExpectedQueryRequest);
......
......@@ -957,5 +957,14 @@ public class ApiPolicyFollowController {
return policyFollowService.detail(policyNo);
}
/**
* 更新-新单跟进投保人和受保人的名字冗余字段
* @return
*/
@PutMapping("/update")
public Result update(){
return policyFollowService.updateTs();
}
}
\ No newline at end of file
......@@ -11,7 +11,9 @@ import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.CodeGenerator;
import com.yd.common.utils.EnglishTextUtil;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.service.*;
import com.yd.csf.feign.dto.appointment.*;
......@@ -947,6 +949,8 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
policyInsurant.setPolicyInsurantBizId(RandomStringGenerator.generateBizId16("policy_insurant"));
policyInsurant.setName(apiInsurantInfoDto.getNameCn());
policyInsurant.setNameEn(apiInsurantInfoDto.getNamePyEn());
policyInsurant.setNameSc(ChineseTextConverter.traditionalToSimplified(apiInsurantInfoDto.getNameCn()));
policyInsurant.setNameEnLc(EnglishTextUtil.toLowerCaseSafe(apiInsurantInfoDto.getNamePyEn()));
return policyInsurantService.saveOrUpdate(policyInsurant);
}
......@@ -965,6 +969,8 @@ public class ApiAppointmentServiceImpl implements ApiAppointmentService {
policyPolicyholder.setPolicyPolicyholderBizId(RandomStringGenerator.generateBizId16("policy_policyholder"));
policyPolicyholder.setName(apiPolicyholderInfoDto.getNameCn());
policyPolicyholder.setNameEn(apiPolicyholderInfoDto.getNamePyEn());
policyPolicyholder.setNameSc(ChineseTextConverter.traditionalToSimplified(apiPolicyholderInfoDto.getNameCn()));
policyPolicyholder.setNameEnLc(EnglishTextUtil.toLowerCaseSafe(apiPolicyholderInfoDto.getNamePyEn()));
return policyPolicyholderService.saveOrUpdate(policyPolicyholder);
}
......
......@@ -1079,7 +1079,7 @@ public class ApiExpectedFortuneServiceImpl implements ApiExpectedFortuneService
@Override
public Result<PayableReportResponse> payableReport(ApiExpectedFortunePageRequest request) {
//保單持有人(中/英)、签单人、转介人名称(主)查询保单号列表
List<String> queryPolicyNoList = policyFollowService.queryPolicyNoList(request.getPolicyHolder(),"","");
List<String> queryPolicyNoList = policyFollowService.queryPolicyNoList(request.getPolicyHolder(),"","","");
// 构建查询条件
request.setPolicyNoList(queryPolicyNoList);
......
......@@ -14,6 +14,8 @@ import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.EnglishTextUtil;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.async.ApiExpectedFortuneAsyncService;
import com.yd.csf.api.service.ApiExpectedFortuneService;
......@@ -129,6 +131,19 @@ public class ApiPremiumReconciliationServiceImpl implements ApiPremiumReconcilia
*/
@Override
public Result<IPage<ApiPremiumReconciliationPageResponse>> page(ApiPremiumReconciliationPageRequest request) {
// 投保人-中文转简体
String policyHolderNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder());
// 投保人-英文转小写
String policyHolderNameEnLc = EnglishTextUtil.toLowerCase(request.getPolicyHolder());
// 受保人-中文转简体
String insuredNameSc = ChineseTextConverter.traditionalToSimplified(request.getPolicyHolder());
// 受保人-英文转小写
String insuredNameEnLc = EnglishTextUtil.toLowerCase(request.getPolicyHolder());
request.setPolicyHolderNameSc(policyHolderNameSc);
request.setPolicyHolderNameEnLc(policyHolderNameEnLc);
request.setInsuredNameSc(insuredNameSc);
request.setInsuredNameEnLc(insuredNameEnLc);
Page<ApiPremiumReconciliationPageResponse> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiPremiumReconciliationPageResponse> iPage = iPremiumReconciliationService.page(page, request);
......
......@@ -43,7 +43,7 @@ public class ApiSalarySplitSummaryExcelDto {
@Excel(name = "本期总出账金额(原币种)", orderNum = "12")
private BigDecimal hkdAmount;
@Excel(name = "出账记录业务id", orderNum = "13")
private String fortuneAccountBizId;
@Excel(name = "出账业务编号", orderNum = "13")
private String businessNo;
}
......@@ -24,6 +24,11 @@ public class ApiSalarySplitSummaryPageDto {
private String fortuneAccountBizId;
/**
* 出账业务编号(出账年月 + 转介人内部编号(后6位)(如无,用0补齐)+流水号(6位))
*/
private String businessNo;
/**
* 转介人名称
*/
private String brokerName;
......
......@@ -2,7 +2,9 @@ package com.yd.csf.feign.request.premiumreconciliation;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.yd.common.dto.PageDto;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.CustomLocalDateTimeDeserializer;
import com.yd.common.utils.EnglishTextUtil;
import lombok.Data;
import java.time.LocalDateTime;
......@@ -35,12 +37,12 @@ public class ApiPremiumReconciliationPageRequest extends PageDto {
private String appointmentNo;
/**
* 保單持有人(投保人)(中文名/英文名)
* 保單持有人(投保人)(中文名/英文名)(繁简/大小写)
*/
private String policyHolder;
/**
* 受保人(保单表)(中文名/英文名)
* 受保人(保单表)(中文名/英文名)(繁简/大小写)
*/
private String insured;
......@@ -64,6 +66,15 @@ public class ApiPremiumReconciliationPageRequest extends PageDto {
*/
private String reconciliationType;
// 投保人-中文转简体
private String policyHolderNameSc;
// 投保人-英文转小写
private String policyHolderNameEnLc;
// 受保人-中文转简体
private String insuredNameSc;
// 受保人-英文转小写
private String insuredNameEnLc;
/**
* 付款日期
*/
......
......@@ -17,12 +17,14 @@ public interface PolicyFollowMapper extends BaseMapper<PolicyFollow> {
PolicyReportData queryPolicyReportData(@Param("policyBizId") String policyBizId);
//policyHolder(中英文姓名)查询policy_policyholder表
//signer签单员姓名查询policy_follow
//brokerName转介人(主,第一个转介人,一个保单对应多个转介人,查询第一个转介人姓名即可) policy_broker
List<String> queryPolicyNoList(@Param("policyHolder") String policyHolder,
@Param("signer") String signer,
@Param("brokerName") String brokerName);
List<String> queryPolicyNoList(
@Param("policyHolderSc") String policyHolderSc,
@Param("policyHolderEnLc") String policyHolderEnLc,
@Param("signer") String signer,
@Param("brokerName") String brokerName,
@Param("insuredSc") String insuredSc,
@Param("insuredEnLc") String insuredEnLc
);
}
......
......@@ -83,11 +83,17 @@ public class CommissionExpectedQueryRequest extends PageDto {
private String teamBizId;
/**
* 保單持有人(中/英)
* 保單持有人(中/英、繁简/大小写
*/
private String policyHolder;
/**
* 受保人(中/英、繁简/大小写)
*/
@Schema(description = "受保人")
private String insured;
/**
* 签单人
*/
private String signer;
......
......@@ -86,12 +86,12 @@ public class PolicyFollowQueryRequest extends PageDto implements Serializable {
private Integer issueNumber;
/**
* 保單持有人
* 保單持有人(中(繁/简)/英文(大小写))
*/
private String policyHolder;
/**
* 受保人
* 受保人(中(繁/简)/英文(大小写))
*/
private String insured;
......
......@@ -64,11 +64,21 @@ public class PolicyInsurant implements Serializable {
private String name;
/**
* 名字-简体(入库名字统一转换简体,方便查询)
*/
private String nameSc;
/**
* 名字-英文
*/
private String nameEn;
/**
* 名字-英文-小写(入库名字英文统一转换小写,方便查询)
*/
private String nameEnLc;
/**
* 性别(字典)
*/
private String gender;
......
......@@ -59,11 +59,21 @@ public class PolicyPolicyholder implements Serializable {
private String name;
/**
* 名字-简体(入库名字统一转换简体,方便查询)
*/
private String nameSc;
/**
* 名字-英文
*/
private String nameEn;
/**
* 名字-英文-小写(入库名字英文统一转换小写,方便查询)
*/
private String nameEnLc;
/**
* 性别(字典)
*/
private String gender;
......
......@@ -5,6 +5,7 @@ import com.yd.csf.service.model.PolicyBroker;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* @author Zhang Jianan
......@@ -21,4 +22,6 @@ public interface PolicyBrokerService extends IService<PolicyBroker> {
List<String> selectRelatedBrokerBizIds(String clientUserId);
Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList);
}
......@@ -184,5 +184,7 @@ public interface PolicyFollowService extends IService<PolicyFollow> {
Result<ApiPolicyFollowDetailResponse> detail(String policyNo);
List<String> queryPolicyNoList(String policyHolder,String signer,String brokerName);
List<String> queryPolicyNoList(String policyHolder,String signer,String brokerName,String insured);
Result updateTs();
}
......@@ -3,6 +3,9 @@ package com.yd.csf.service.service;
import com.yd.csf.service.dto.PolicyInsurantUpdateRequest;
import com.yd.csf.service.model.PolicyInsurant;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yd.csf.service.model.PolicyPolicyholder;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -18,4 +21,5 @@ public interface PolicyInsurantService extends IService<PolicyInsurant> {
*/
boolean update(PolicyInsurantUpdateRequest policyInsurantUpdateRequest);
List<PolicyInsurant> queryList(String policyHolder);
}
......@@ -4,6 +4,8 @@ import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author Zhang Jianan
* @description 针对表【policy_policyholder(保单投保人信息表)】的数据库操作Service
......@@ -19,4 +21,6 @@ public interface PolicyPolicyholderService extends IService<PolicyPolicyholder>
boolean update(PolicyPolicyholderUpdateRequest policyPolicyholderUpdateRequest);
PolicyPolicyholder queryOne(String policyBizId);
List<PolicyPolicyholder> queryList(String policyHolder);
}
......@@ -20,11 +20,9 @@ import com.yd.csf.service.dto.*;
import com.yd.csf.service.enums.FortuneAccountStatusEnum;
import com.yd.csf.service.enums.FortuneStatusEnum;
import com.yd.csf.service.model.*;
import com.yd.csf.service.service.FortuneAccountEditRecordService;
import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.FortuneAccountMapper;
import com.yd.csf.service.service.FortuneService;
import com.yd.csf.service.service.IExpectedFortuneService;
import com.yd.csf.service.utils.BusinessNoUtils;
import com.yd.csf.service.vo.FortuneAccountVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -57,6 +55,9 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
@Resource
private IExpectedFortuneService expectedFortuneService;
@Resource
private PolicyBrokerService policyBrokerService;
private final Gson GSON = new Gson();
@Override
......@@ -115,11 +116,22 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
AuthUserDto currentLoginUser = SecurityUtil.getCurrentLoginUser();
Long loginUserId = currentLoginUser.getId();
//查询转介人的内部编号列表信息
List<String> brokerBizIdList = accountExportDTOList.stream().map(FortuneAccountExportDTO::getBrokerBizId).collect(Collectors.toList());
Map<String, String> map = policyBrokerService.queryInternalCodeMap(brokerBizIdList);
List<FortuneAccount> fortuneAccountList = new ArrayList<>();
Date currentDate = new Date();
for (FortuneAccountExportDTO accountExportDTO : accountExportDTOList) {
FortuneAccount fortuneAccount = new FortuneAccount();
fortuneAccount.setFortuneAccountBizId(RandomStringGenerator.generateBizId16("fortune_account"));
String internalCode = map.get(accountExportDTO.getBrokerBizId());
LocalDate actualPayoutDate = accountExportDTO.getActualPayoutDate();
String billingYearMonth = actualPayoutDate != null
? actualPayoutDate.format(java.time.format.DateTimeFormatter.ofPattern("yyyyMM"))
: "";
String businessNo = BusinessNoUtils.generate(billingYearMonth, internalCode);
//出账业务编号(出账年月 + 转介人内部编号(后6位)(如无,用0补齐)+流水号(6位))
fortuneAccount.setBusinessNo(businessNo);
fortuneAccount.setBroker(accountExportDTO.getBroker());
fortuneAccount.setBrokerBizId(accountExportDTO.getBrokerBizId());
fortuneAccount.setTeam(accountExportDTO.getTeam());
......
......@@ -11,7 +11,10 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Zhang Jianan
......@@ -56,6 +59,23 @@ public class PolicyBrokerServiceImpl extends ServiceImpl<PolicyBrokerMapper, Pol
public List<String> selectRelatedBrokerBizIds(String clientUserId) {
return baseMapper.selectRelatedBrokerBizIds(clientUserId);
}
@Override
public Map<String, String> queryInternalCodeMap(List<String> brokerBizIdList) {
if (CollectionUtils.isEmpty(brokerBizIdList)) {
return Collections.emptyMap();
}
List<PolicyBroker> list = baseMapper.selectList(new LambdaQueryWrapper<PolicyBroker>()
.select(PolicyBroker::getBrokerBizId, PolicyBroker::getInternalCode) // 只查需要的字段
.in(PolicyBroker::getBrokerBizId, brokerBizIdList)
.isNotNull(PolicyBroker::getInternalCode) // 排除 internalCode 为 null 的记录(可选)
);
return list.stream().collect(Collectors.toMap(
PolicyBroker::getBrokerBizId,
PolicyBroker::getInternalCode,
(v1, v2) -> v1 // 如果 brokerBizId 可能重复,保留其中一个
));
}
}
......
......@@ -18,6 +18,8 @@ import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.EnglishTextUtil;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.feign.response.policyfollow.ApiPolicyFollowDetailResponse;
import com.yd.csf.service.common.ErrorCode;
......@@ -129,8 +131,41 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
queryWrapper.le(ObjectUtils.isNotEmpty(signDateEnd), "sign_date", signDateEnd);
queryWrapper.eq(ObjectUtils.isNotEmpty(latestPaymentDate), "latest_payment_date", latestPaymentDate);
//保單持有人(投保人)
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getPolicyHolder())) queryWrapper.like( "policy_holder", policyFollowQueryRequest.getPolicyHolder());
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getPolicyHolder())) {
List<PolicyPolicyholder> policyHolderList = policyPolicyholderService.queryList(policyFollowQueryRequest.getPolicyHolder());
List<String> policyBizIdList = null;
if (CollectionUtils.isNotEmpty(policyHolderList)) {
policyBizIdList = policyHolderList.stream()
.map(PolicyPolicyholder::getPolicyBizId)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(policyBizIdList)) {
queryWrapper.in("policy_biz_id", policyBizIdList);
} else {
// 没有匹配的投保人,直接让查询结果为空
queryWrapper.apply("1=0");
}
}
//受保人
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getInsured())) {
List<PolicyInsurant> policyHolderList = policyInsurantService.queryList(policyFollowQueryRequest.getInsured());
List<String> policyBizIdList = null;
if (CollectionUtils.isNotEmpty(policyHolderList)) {
policyBizIdList = policyHolderList.stream()
.map(PolicyInsurant::getPolicyBizId)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(policyBizIdList)) {
queryWrapper.in("policy_biz_id", policyBizIdList);
} else {
// 没有匹配的受保人,直接让查询结果为空
queryWrapper.apply("1=0");
}
}
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getInsured())) queryWrapper.like("insured", policyFollowQueryRequest.getInsured());
//签单人
if (StringUtils.isNotEmpty(policyFollowQueryRequest.getSigner())) queryWrapper.like("signer", policyFollowQueryRequest.getSigner());
......@@ -1226,8 +1261,133 @@ public class PolicyFollowServiceImpl extends ServiceImpl<PolicyFollowMapper, Pol
}
@Override
public List<String> queryPolicyNoList(String policyHolder, String signer, String brokerName) {
return this.baseMapper.queryPolicyNoList(policyHolder,signer,brokerName);
public List<String> queryPolicyNoList(String policyHolder, String signer, String brokerName, String insured) {
// 投保人转换:中文转简体、英文转小写
String policyHolderSc = ChineseTextConverter.traditionalToSimplified(policyHolder);
String policyHolderEnLc = EnglishTextUtil.toLowerCase(policyHolder);
// 受保人转换:中文转简体、英文转小写
String insuredSc = ChineseTextConverter.traditionalToSimplified(insured);
String insuredEnLc = EnglishTextUtil.toLowerCase(insured);
return this.baseMapper.queryPolicyNoList(
policyHolderSc, policyHolderEnLc,
signer,
brokerName,
insuredSc, insuredEnLc
);
}
/**
* 更新-新单跟进投保人和受保人的名字冗余字段
* @return
*/
@Override
public Result updateTs() {
int pageSize = 200;
// 1. 更新投保人表
updatePolicyholderNameFields(pageSize);
// 2. 更新受保人表
updateInsurantNameFields(pageSize);
log.info("投保人/受保人名字冗余字段更新完成");
return Result.success("更新成功");
}
/**
* 批量处理 policy_policyholder 的 nameSc 和 nameEnLc
*/
private void updatePolicyholderNameFields(int pageSize) {
int pageNo = 1;
while (true) {
Page<PolicyPolicyholder> page = new Page<>(pageNo, pageSize);
Page<PolicyPolicyholder> resultPage = policyPolicyholderService.page(page);
List<PolicyPolicyholder> records = resultPage.getRecords();
if (CollUtil.isEmpty(records)) {
break;
}
List<PolicyPolicyholder> toUpdate = new ArrayList<>();
for (PolicyPolicyholder entity : records) {
boolean changed = false;
// 繁体 → 简体
if (StringUtils.isNotBlank(entity.getName())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName());
if (!nameSc.equals(entity.getNameSc())) {
entity.setNameSc(nameSc);
changed = true;
}
}
// 英文 → 小写
if (StringUtils.isNotBlank(entity.getNameEn())) {
String nameEnLc = EnglishTextUtil.toLowerCase(entity.getNameEn());
if (!nameEnLc.equals(entity.getNameEnLc())) {
entity.setNameEnLc(nameEnLc);
changed = true;
}
}
if (changed) {
entity.setUpdateTime(new Date()); // 可选,记录更新时间
toUpdate.add(entity);
}
}
if (!toUpdate.isEmpty()) {
policyPolicyholderService.updateBatchById(toUpdate);
}
pageNo++;
}
}
/**
* 批量处理 policy_insurant 的 nameSc 和 nameEnLc
*/
private void updateInsurantNameFields(int pageSize) {
int pageNo = 1;
while (true) {
Page<PolicyInsurant> page = new Page<>(pageNo, pageSize);
Page<PolicyInsurant> resultPage = policyInsurantService.page(page);
List<PolicyInsurant> records = resultPage.getRecords();
if (CollUtil.isEmpty(records)) {
break;
}
List<PolicyInsurant> toUpdate = new ArrayList<>();
for (PolicyInsurant entity : records) {
boolean changed = false;
if (StringUtils.isNotBlank(entity.getName())) {
String nameSc = ChineseTextConverter.traditionalToSimplified(entity.getName());
if (!nameSc.equals(entity.getNameSc())) {
entity.setNameSc(nameSc);
changed = true;
}
}
if (StringUtils.isNotBlank(entity.getNameEn())) {
String nameEnLc = EnglishTextUtil.toLowerCase(entity.getNameEn());
if (!nameEnLc.equals(entity.getNameEnLc())) {
entity.setNameEnLc(nameEnLc);
changed = true;
}
}
if (changed) {
entity.setUpdateTime(new Date());
toUpdate.add(entity);
}
}
if (!toUpdate.isEmpty()) {
policyInsurantService.updateBatchById(toUpdate);
}
pageNo++;
}
}
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.EnglishTextUtil;
import com.yd.csf.service.dto.PolicyInsurantUpdateRequest;
import com.yd.csf.service.model.PolicyInsurant;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.yd.csf.service.service.PolicyInsurantService;
import com.yd.csf.service.dao.PolicyInsurantMapper;
import com.yd.csf.service.utils.GSONUtil;
......@@ -14,7 +18,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -42,6 +48,27 @@ public class PolicyInsurantServiceImpl extends ServiceImpl<PolicyInsurantMapper,
policyInsurant.setUpdateTime(new Date());
return this.updateById(policyInsurant);
}
@Override
public List<PolicyInsurant> queryList(String insured) {
// 输入为空时直接返回空列表,避免无意义的全表查询
if (StringUtils.isBlank(insured)) {
return Collections.emptyList();
}
// 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(insured);
// 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(insured);
return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyInsurant>()
.and(wrapper -> wrapper
.like(StringUtils.isNotBlank(nameSc), PolicyInsurant::getNameSc, nameSc)
.or()
.like(StringUtils.isNotBlank(nameEnLc), PolicyInsurant::getNameEnLc, nameEnLc)
)
);
}
}
......
......@@ -5,16 +5,21 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.utils.ChineseTextConverter;
import com.yd.common.utils.EnglishTextUtil;
import com.yd.csf.service.dto.PolicyPolicyholderUpdateRequest;
import com.yd.csf.service.model.PolicyPolicyholder;
import com.yd.csf.service.service.PolicyPolicyholderService;
import com.yd.csf.service.dao.PolicyPolicyholderMapper;
import com.yd.csf.service.utils.GSONUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author Zhang Jianan
......@@ -48,6 +53,27 @@ public class PolicyPolicyholderServiceImpl extends ServiceImpl<PolicyPolicyholde
return this.baseMapper.selectOne(new LambdaQueryWrapper<PolicyPolicyholder>()
.eq(PolicyPolicyholder::getPolicyBizId,policyBizId).last(" limit 1 "));
}
@Override
public List<PolicyPolicyholder> queryList(String policyHolder) {
// 输入为空时直接返回空列表,避免无意义的全表查询
if (StringUtils.isBlank(policyHolder)) {
return Collections.emptyList();
}
// 中文转简体
String nameSc = ChineseTextConverter.traditionalToSimplified(policyHolder);
// 英文转小写
String nameEnLc = EnglishTextUtil.toLowerCase(policyHolder);
return this.baseMapper.selectList(new LambdaQueryWrapper<PolicyPolicyholder>()
.and(wrapper -> wrapper
.like(StringUtils.isNotBlank(nameSc), PolicyPolicyholder::getNameSc, nameSc)
.or()
.like(StringUtils.isNotBlank(nameEnLc), PolicyPolicyholder::getNameEnLc, nameEnLc)
)
);
}
}
......
package com.yd.csf.service.utils;
import java.util.concurrent.ThreadLocalRandom;
/**
* 业务编号生成工具类
* <p>格式:出账年月 + 转介人内部编号后6位(无则补0) + 6位随机数字</p>
*/
public class BusinessNoUtils {
/**
* 生成业务编号
*
* @param billingYearMonth 出账年月,如 "202604"
* @param referrerInnerNo 转介人内部编号,可为 null 或空字符串
* @return 完整的业务编号字符串
*/
public static String generate(String billingYearMonth, String referrerInnerNo) {
String referrerPart = formatReferrerInnerNo(referrerInnerNo);
String serialPart = generateRandomSerial();
return billingYearMonth + referrerPart + serialPart;
}
// 格式化转介人内部编号:取后6位,不足左补0,无则全0
private static String formatReferrerInnerNo(String referrerInnerNo) {
if (referrerInnerNo == null || referrerInnerNo.trim().isEmpty()) {
return "000000";
}
String no = referrerInnerNo.trim();
if (no.length() > 6) {
return no.substring(no.length() - 6);
}
return String.format("%6s", no).replace(' ', '0');
}
// 生成6位随机数字(000000~999999)
private static String generateRandomSerial() {
int random = ThreadLocalRandom.current().nextInt(1000000);
return String.format("%06d", random);
}
}
\ No newline at end of file
package com.yd.csf.service.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yd.csf.service.model.FortuneAccount;
import io.swagger.v3.oas.annotations.media.Schema;
......@@ -26,6 +27,12 @@ public class FortuneAccountVO {
private String fortuneAccountBizId;
/**
* 出账业务编号(出账年月 + 转介人内部编号(后6位)(如无,用0补齐)+流水号(6位))
*/
@Schema(description = "出账业务编号")
private String businessNo;
/**
* 转介人
*/
@Schema(description = "转介人")
......
......@@ -94,12 +94,24 @@ public class PolicyFollowVO implements Serializable {
private String policyHolder;
/**
* 保單持有人-英文
*/
@Schema(description = "投保人-英文")
private String policyHolderEn;
/**
* 受保人
*/
@Schema(description = "受保人")
private String insured;
/**
* 受保人-英文
*/
@Schema(description = "受保人-英文")
private String insuredEn;
/**
* 受保人业务id
*/
@Schema(description = "受保人业务id")
......
......@@ -145,4 +145,14 @@ public class ReceivableReportVO {
*/
@Schema(description = "备注")
private String remark;
/**
* 保單持有人(投保人,保单表)(中文名)
*/
private String policyHolder;
/**
* 保單持有人(投保人,保单表)(英文名)
*/
private String policyHolderEn;
}
......@@ -71,6 +71,8 @@
select
null as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
ce.remark,
MAX(ce.reconciliation_company) as reconciliationCompany,
MAX(ce.reconciliation_company_biz_id) as reconciliationCompanyBizId,
......@@ -113,6 +115,8 @@
select
ce.receivable_no as receivableNo,
ce.policy_no as policyNo,
(select pp.name from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolder,
(select pp.name_en from policy_policyholder pp where pp.policy_biz_id = p.policy_biz_id limit 1) as policyHolderEn,
ce.remark,
ce.reconciliation_company as reconciliationCompany,
ce.reconciliation_company_biz_id as reconciliationCompanyBizId,
......
......@@ -137,6 +137,9 @@
left join policy_policyholder pp
on pf.policy_biz_id = pp.policy_biz_id
and pp.is_deleted = 0
left join policy_insurant pi
on pf.policy_biz_id = pi.policy_biz_id
and pi.is_deleted = 0
left join (
select pb.policy_biz_id, pb.broker_name
from policy_broker pb
......@@ -150,9 +153,33 @@
on pf.policy_biz_id = first_broker.policy_biz_id
<where>
pf.is_deleted = 0
<if test="policyHolder != null and policyHolder != ''">
and (pp.name like concat('%', #{policyHolder}, '%')
or pp.name_en like concat('%', #{policyHolder}, '%'))
<!-- 投保人:简体中文或英文小写,满足其一即可 -->
<if test="(policyHolderSc != null and policyHolderSc != '') or (policyHolderEnLc != null and policyHolderEnLc != '')">
and (
<if test="policyHolderSc != null and policyHolderSc != ''">
pp.name_sc like concat('%', #{policyHolderSc}, '%')
</if>
<if test="policyHolderSc != null and policyHolderSc != '' and policyHolderEnLc != null and policyHolderEnLc != ''">
or
</if>
<if test="policyHolderEnLc != null and policyHolderEnLc != ''">
pp.name_en_lc like concat('%', #{policyHolderEnLc}, '%')
</if>
)
</if>
<!-- 受保人:简体中文或英文小写,满足其一即可 -->
<if test="(insuredSc != null and insuredSc != '') or (insuredEnLc != null and insuredEnLc != '')">
and (
<if test="insuredSc != null and insuredSc != ''">
pi.name_sc like concat('%', #{insuredSc}, '%')
</if>
<if test="insuredSc != null and insuredSc != '' and insuredEnLc != null and insuredEnLc != ''">
or
</if>
<if test="insuredEnLc != null and insuredEnLc != ''">
pi.name_en_lc like concat('%', #{insuredEnLc}, '%')
</if>
)
</if>
<if test="signer != null and signer != ''">
and pf.signer like concat('%', #{signer}, '%')
......
......@@ -22,10 +22,10 @@
pr.recognized_currency,
prm_total.payer,
prm_total.paying_bank,
pp.name as policyHolder,
pp.name_en as policyHolderEn,
pi.name as insured,
pi.name_en as insuredEn,
pp.name AS policyHolder,
pp.name_en AS policyHolderEn,
pi.name AS insured,
pi.name_en AS insuredEn,
pb.broker_name AS brokerName,
pr.create_time,
pr.update_time,
......@@ -75,9 +75,6 @@
<if test="request.appointmentNo != null and request.appointmentNo != ''">
AND pf.appointment_no LIKE CONCAT('%', #{request.appointmentNo}, '%')
</if>
<if test="request.policyHolder != null and request.policyHolder != ''">
AND p.policy_holder LIKE CONCAT('%', #{request.policyHolder}, '%')
</if>
<if test="request.paymentMethod != null and request.paymentMethod != ''">
AND prm_total.payment_method LIKE CONCAT('%', #{request.paymentMethod}, '%')
</if>
......@@ -90,19 +87,38 @@
<if test="request.reconciliationType != null and request.reconciliationType != ''">
AND pr.reconciliation_type = #{request.reconciliationType}
</if>
<if test="request.policyHolder != null and request.policyHolder != ''">
AND (pp.name LIKE CONCAT('%', #{request.policyHolder}, '%') OR pp.name_en LIKE CONCAT('%', #{request.policyHolder}, '%'))
<!-- 投保人查询:支持中文繁/简体和英文大小写 -->
<if test="request.policyHolderNameSc != null and request.policyHolderNameSc != ''
or request.policyHolderNameEnLc != null and request.policyHolderNameEnLc != ''">
AND (
<if test="request.policyHolderNameSc != null and request.policyHolderNameSc != ''">
pp.name LIKE CONCAT('%', #{request.policyHolderNameSc}, '%')
</if>
<if test="request.policyHolderNameSc != null and request.policyHolderNameSc != ''
and request.policyHolderNameEnLc != null and request.policyHolderNameEnLc != ''">
OR
</if>
<if test="request.policyHolderNameEnLc != null and request.policyHolderNameEnLc != ''">
pp.name_en LIKE CONCAT('%', #{request.policyHolderNameEnLc}, '%')
</if>
)
</if>
<if test="request.insured != null and request.insured != ''">
AND (pi.name LIKE CONCAT('%', #{request.insured}, '%') OR pi.name_en LIKE CONCAT('%', #{request.insured}, '%'))
<!-- 受保人查询:支持中文繁/简体和英文大小写 -->
<if test="request.insuredNameSc != null and request.insuredNameSc != ''
or request.insuredNameEnLc != null and request.insuredNameEnLc != ''">
AND (
<if test="request.insuredNameSc != null and request.insuredNameSc != ''">
pi.name LIKE CONCAT('%', #{request.insuredNameSc}, '%')
</if>
<if test="request.insuredNameSc != null and request.insuredNameSc != ''
and request.insuredNameEnLc != null and request.insuredNameEnLc != ''">
OR
</if>
<if test="request.insuredNameEnLc != null and request.insuredNameEnLc != ''">
pi.name_en LIKE CONCAT('%', #{request.insuredNameEnLc}, '%')
</if>
)
</if>
<choose>
<when test="request.paymentDate != null">
AND pp.premium_reconciliation_biz_id IS NOT NULL
</when>
<otherwise>
</otherwise>
</choose>
ORDER BY pr.create_time DESC
</select>
</mapper>
\ No newline at end of file
......@@ -29,7 +29,8 @@
fa.amount,
fa.hkd_amount,
fa.currency,
DATE_FORMAT(fa.fortune_account_date, '%Y%m') as fortune_account_month
DATE_FORMAT(fa.fortune_account_date, '%Y%m') as fortune_account_month,
fa.business_no
from salary_split ss
inner join fortune_account fa
on ss.fortune_account_biz_id = fa.fortune_account_biz_id
......@@ -105,7 +106,8 @@
fa.amount,
fa.hkd_amount,
fa.currency,
DATE_FORMAT(fa.fortune_account_date, '%Y%m') as fortune_account_month
DATE_FORMAT(fa.fortune_account_date, '%Y%m') as fortune_account_month,
fa.business_no
from salary_split ss
inner join fortune_account fa
on ss.fortune_account_biz_id = fa.fortune_account_biz_id
......
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