Commit a6b8d1b0 authored by fangxinjiang's avatar fangxinjiang

商险可替换标识-fxj

parent 28350db6
......@@ -300,6 +300,9 @@ public class EmployeeRegistrationPreServiceImpl extends ServiceImpl<EmployeeRegi
//处理商险待办信息
BaseSearchVO insuranceSearchVo = new BaseSearchVO();
insuranceSearchVo.setRegisterId(updatePre.getId());
if (null != user){
insuranceSearchVo.setOperator(user.getNickname());
}
booleanR = insuranceDaprUtil.refuseInsurancePreByRegisterId(insuranceSearchVo);
if (null != booleanR && booleanR.getData().booleanValue()){
if (sb.length() == 0){
......
......@@ -68,4 +68,7 @@ public class BaseSearchVO implements Serializable {
//入职登记表ID
private String registerId;
//拒绝入职操作人
private String operator;
}
......@@ -17,7 +17,9 @@ import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author hgw
......@@ -199,4 +201,24 @@ public class InsuranceDaprUtil {
return res;
}
/**
* @param paramVoList 查询参数列表(身份证 + 项目编码)
* @param operator 操作人员
* @param operateType 操作类型
* @Description: 批量更新商险替换标签和说明(商险服务侧实现完整逻辑)
* @Author: fxj
* @Date: 2026-03-19
* @return: void
**/
public void batchUpdateInsuranceReplaceTagByParamList(List<BaseSearchVO> paramVoList, String operator, String operateType) {
// 构建请求参数
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("paramVoList", paramVoList);
paramMap.put("operator", operator);
paramMap.put("operateType", operateType);
HttpDaprUtil.invokeMethodPost(daprInsurancesProperties.getAppUrl(),daprInsurancesProperties.getAppId()
,"/insuranceDetail/inner/batchUpdateInsuranceReplaceTagByParamList", paramMap, Object.class, SecurityConstants.FROM_IN);
}
}
......@@ -27,6 +27,7 @@ import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistration;
import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistrationLeave;
import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistrationLeaveInsurance;
import com.yifu.cloud.plus.v1.csp.entity.EmployeeRegistrationLeaveLog;
import com.yifu.cloud.plus.v1.yifu.insurances.constants.InsurancesConstants;
import com.yifu.cloud.plus.v1.csp.mapper.EmployeeRegistrationLeaveInsuranceMapper;
import com.yifu.cloud.plus.v1.csp.mapper.EmployeeRegistrationLeaveMapper;
import com.yifu.cloud.plus.v1.csp.mapper.EmployeeRegistrationMapper;
......@@ -892,12 +893,15 @@ public class EmployeeRegistrationLeaveServiceImpl extends ServiceImpl<EmployeeRe
leave.setConfirmUser(user.getNickname());
leave.setConfirmTime(LocalDateTime.now());
this.updateById(leave);
// 离职待办确认后,更新为商险续签待办为已离职
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setEmpIdCard(registrationOld.getEmpIdcard());
paramVo.setDeptNo(registrationOld.getDeptNo());
insuranceDaprUtil.updateInsurancePreRenewToIsLeave(paramVo);
// 离职确认后,对该人员在该项目下的已投保未过期且有效的商险数据进行打标“可替换”
updateInsuranceReplaceTagBySingle(registrationOld.getEmpIdcard(), registrationOld.getDeptNo(), user.getNickname());
return R.ok();
} else {
return R.failed("状态不是待确认");
......@@ -1012,6 +1016,9 @@ public class EmployeeRegistrationLeaveServiceImpl extends ServiceImpl<EmployeeRe
BaseSearchListVO baseSearchListVO = new BaseSearchListVO();
baseSearchListVO.setListParam(paramVoList);
insuranceDaprUtil.updateInsurancePreRenewToIsLeaveList(baseSearchListVO);
// 离职确认后,对该人员在该项目下的已投保未过期且有效的商险数据进行打标“可替换”
updateInsuranceReplaceTagByBatch(paramVoList, user.getNickname());
}
return R.ok();
}
......@@ -1029,6 +1036,46 @@ public class EmployeeRegistrationLeaveServiceImpl extends ServiceImpl<EmployeeRe
return holidayMap;
}
/**
* @Description: 单个离职确认后更新商险替换标签为“可替换”
* @Author: fxj
* @Date: 2026-03-19
* @param empIdcard: 身份证号
* @param deptNo: 项目编码
* @param operator: 操作人员
* @return: void
**/
private void updateInsuranceReplaceTagBySingle(String empIdcard, String deptNo, String operator) {
List<BaseSearchVO> paramVoList = new ArrayList<>();
BaseSearchVO paramVo = new BaseSearchVO();
paramVo.setEmpIdCard(empIdcard);
paramVo.setDeptNo(deptNo);
paramVoList.add(paramVo);
updateInsuranceReplaceTagByBatch(paramVoList, operator);
}
/**
* @Description: 批量离职确认后更新商险替换标签为“可替换”(调用商险服务接口)
* @Author: fxj
* @Date: 2026-03-19
* @param paramVoList: 查询参数列表(身份证 + 项目编码)
* @param operator: 操作人员
* @return: void
**/
private void updateInsuranceReplaceTagByBatch(List<BaseSearchVO> paramVoList, String operator) {
if (Common.isEmpty(paramVoList)) {
log.warn("批量更新商险替换标签失败,参数列表为空");
return;
}
try {
// 调用商险服务批量更新替换标签和说明
insuranceDaprUtil.batchUpdateInsuranceReplaceTagByParamList(paramVoList, operator, "离职确认操作");
} catch (Exception e) {
log.warn("批量更新商险替换标签异常,参数列表大小:{}", paramVoList.size(), e);
}
}
// 去除浮动的商险
private void removeInsuranceToDoType(EmployeeRegistrationLeave alert) {
if (alert.getDoType().contains(",3")) {
......
......@@ -1381,4 +1381,5 @@ public class InsurancesConstants {
public static final String REFUND_YI_SETTLE = "费用已支出,禁止重复登记";
public static final String REFUND_ZH_SETTLE = "费用支出中,禁止重复登记";
public static final String REFUND_TYPE = "退费";
public static final String INSURANCE_REPLACE_TAG_REPLACE = "可替换";
}
......@@ -442,12 +442,14 @@ public class TInsuranceDetail extends BaseEntity {
/**
* 替换标签
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
@Schema(description = "替换标签")
private String replaceTag;
/**
* 可替换说明
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
@Schema(description = "可替换说明")
private String replaceRemark;
......
......@@ -35,6 +35,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.Size;
import java.util.List;
import java.util.Map;
/**
* @author licancan
......@@ -437,6 +438,23 @@ public class TInsuranceDetailController {
return tInsuranceDetailService.leaveToReduceInsurance(paramVo);
}
/**
* @param paramMap 请求参数(paramVoList: 查询参数列表,operator: 操作人员,operateType: 操作类型)
* @Description: 批量更新商险替换标签和说明(商险服务侧实现完整逻辑)
* @Author: hgw
* @Date: 2026-03-19
* @return: void
**/
@Inner
@PostMapping("/inner/batchUpdateInsuranceReplaceTagByParamList")
public void batchUpdateInsuranceReplaceTagByParamList(@RequestBody Map<String, Object> paramMap){
List<BaseSearchVO> paramVoList = (List<BaseSearchVO>) paramMap.get("paramVoList");
String operator = (String) paramMap.get("operator");
String operateType = (String) paramMap.get("operateType");
tInsuranceDetailService.batchUpdateInsuranceReplaceTagByParamList(paramVoList, operator, operateType);
}
/***********************减员办理********************************/
/**
* 导入减员校验
......
......@@ -225,6 +225,17 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> {
BaseSearchListVO leaveToReduceInsurance(BaseSearchListVO paramVo);
/**
* @param paramVoList 查询参数列表(身份证 + 项目编码)
* @param operator 操作人员
* @param operateType 操作类型
* @Description: 批量更新商险替换标签和说明(商险服务侧实现完整逻辑)
* @Author: hgw
* @Date: 2026-03-19
* @return: void
**/
void batchUpdateInsuranceReplaceTagByParamList(List<BaseSearchVO> paramVoList, String operator, String operateType);
/***********************减员办理********************************/
/**
......
......@@ -27,6 +27,7 @@ import com.yifu.cloud.plus.v1.yifu.common.dapr.util.ArchivesDaprUtil;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.UpmsDaprUtils;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.config.WxConfig;
import com.yifu.cloud.plus.v1.yifu.insurances.constants.InsurancesConstants;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.*;
import com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TEmployeeInsurancePreMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.*;
......@@ -1003,6 +1004,46 @@ public class TEmployeeInsurancePreServiceImpl extends ServiceImpl<TEmployeeInsur
}
@Override
public Boolean refuseInsurancePreByRegisterId(BaseSearchVO preVo) {
// 查询是否有商险已投保未过期且有效的商险数据,若有则将替换标签更新为"可替换"并添加替换说明
TEmployeeInsurancePre insurancePre = baseMapper.selectOne(
Wrappers.<TEmployeeInsurancePre>query()
.lambda()
.eq(TEmployeeInsurancePre::getRegisterId, preVo.getRegisterId())
.last(CommonConstants.LAST_ONE_SQL)
);
if (null != insurancePre && null != insurancePre.getInsurancesId()) {
// 查询对应的商险信息(已投保、未过期且有效)
TInsuranceDetail insuranceDetail = detailService.getOne(
Wrappers.<TInsuranceDetail>query()
.lambda()
.eq(TInsuranceDetail::getId, insurancePre.getInsurancesId())
.eq(TInsuranceDetail::getIsEffect, CommonConstants.ZERO_INT)
.eq(TInsuranceDetail::getIsOverdue, CommonConstants.ZERO_INT)
.eq(TInsuranceDetail::getBuyHandleStatus, CommonConstants.THREE_INT)
.eq(TInsuranceDetail::getDeleteFlag, CommonConstants.ZERO_INT),
false // 不抛出异常,允许返回 null
);
if (null != insuranceDetail) {
try {
// 设置替换标签为"可替换"
insuranceDetail.setReplaceTag(InsurancesConstants.INSURANCE_REPLACE_TAG_REPLACE);
// 构建替换说明:时间 + 操作人员 + 原因
String operateTime = DateUtil.dateToString(new Date(), DateUtil.DATETIME_PATTERN_MINUTE);
String operator = Common.isEmpty(preVo.getOperator()) ? "系统" : preVo.getOperator();
String replaceRemark = String.format("%s-客服%s-对人员进行拒绝入职操作", operateTime, operator);
insuranceDetail.setReplaceRemark(replaceRemark);
// 更新数据库
detailService.updateById(insuranceDetail);
} catch (Exception e) {
log.error("更新商险替换标签失败,商险 ID: {}", insuranceDetail.getId(), e);
throw new RuntimeException("更新商险替换标签失败:" + e.getMessage());
}
}
}
LambdaUpdateWrapper<TEmployeeInsurancePre> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TEmployeeInsurancePre::getRegisterId, preVo.getRegisterId());
updateWrapper.set(TEmployeeInsurancePre::getIsRefuse, CommonConstants.ZERO_STRING);
......
......@@ -224,6 +224,11 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
log.info("定时任务扫描到的已过期数据是:{}条",collect.size());
this.updateBatchById(collect);
}
// 清空已过期数据的替换标签和说明
if (CollectionUtils.isNotEmpty(collect)) {
List<String> expiredIds = collect.stream().map(TInsuranceDetail::getId).collect(Collectors.toList());
batchClearInsuranceReplaceTag(expiredIds, "1");
}
this.doFailInfo(changeList, sourceIdCardList, replaceIdList, CommonConstants.THREE_STRING);
}
}
......@@ -855,6 +860,9 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
BeanCopyUtils.copyProperties(detail,newDetail);
detail.setIsEffect(CommonConstants.ONE_INT);
detail.setIsOverdue(null);
// 清空被替换数据的替换标签和说明
detail.setReplaceTag(null);
detail.setReplaceRemark(null);
detail.setUpdateTime(LocalDateTime.now());
this.updateById(detail);
// 保险公司-险种-购买标准 是否存在
......@@ -2001,6 +2009,9 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
detail.setPolicyEffect(null);
detail.setIsEffect(null);
detail.setIsOverdue(null);
//投保成功后 退保 清空替换标签和替换说明
detail.setReplaceTag(null);
detail.setReplaceRemark(null);
}
detail.setUpdateBy(user.getId());
detail.setUpdateTime(LocalDateTime.now());
......@@ -5461,6 +5472,75 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
}
return vo;
}
/**
* @param paramVoList 查询参数列表(身份证 + 项目编码)
* @param operator 操作人员
* @param operateType 操作类型
* @Description: 批量更新商险替换标签和说明(商险服务侧实现完整逻辑)
* @Author: hgw
* @Date: 2026-03-19
* @return: void
**/
@Override
public void batchUpdateInsuranceReplaceTagByParamList(List<BaseSearchVO> paramVoList, String operator, String operateType) {
if (Common.isEmpty(paramVoList)) {
log.warn("批量更新商险替换标签失败,参数列表为空");
return;
}
try {
// 遍历每个参数,查询并更新对应的商险数据
for (BaseSearchVO paramVo : paramVoList) {
if (Common.isEmpty(paramVo.getEmpIdCard()) || Common.isEmpty(paramVo.getDeptNo())) {
log.warn("跳过无效参数,身份证号或项目编码为空,paramVo: {}", paramVo);
continue;
}
// 查询符合条件的商险数据:已投保、未过期且有效
List<TInsuranceDetail> insuranceList = baseMapper.selectList(Wrappers.<TInsuranceDetail>query().lambda()
.eq(TInsuranceDetail::getEmpIdcardNo, paramVo.getEmpIdCard())
.eq(TInsuranceDetail::getDeptNo, paramVo.getDeptNo())
.eq(TInsuranceDetail::getBuyHandleStatus, CommonConstants.THREE_INT) // 已投保
.eq(TInsuranceDetail::getIsOverdue, CommonConstants.ZERO_INT) // 未过期
.eq(TInsuranceDetail::getIsEffect, CommonConstants.ZERO_INT) // 有效
.eq(TInsuranceDetail::getDeleteFlag, CommonConstants.ZERO_INT)); // 未删除
if (Common.isEmpty(insuranceList)) {
continue;
}
// 构建替换说明
String operateTime = DateUtil.dateToString(new Date(), DateUtil.DATETIME_PATTERN_MINUTE);
String replaceRemark = String.format("%s-客服%s-%s", operateTime,
Common.isEmpty(operator) ? "系统" : operator, operateType);
// 批量更新该人员的所有符合条件的商险数据
LocalDateTime updateTime = LocalDateTime.now();
for (TInsuranceDetail detail : insuranceList) {
try {
LambdaUpdateWrapper<TInsuranceDetail> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(TInsuranceDetail::getReplaceTag, InsurancesConstants.INSURANCE_REPLACE_TAG_REPLACE)
.set(TInsuranceDetail::getReplaceRemark, replaceRemark)
.set(TInsuranceDetail::getUpdateBy, '1')
.set(TInsuranceDetail::getUpdateTime, updateTime)
.eq(TInsuranceDetail::getId, detail.getId());
update(updateWrapper);
} catch (Exception e) {
log.error("更新单个商险替换标签异常,商险 ID: {}", detail.getId(), e);
}
}
log.info("批量更新商险替换标签成功,身份证号:{}, 项目编码:{}, 操作类型:{}, 更新数量:{}",
paramVo.getEmpIdCard(), paramVo.getDeptNo(), operateType, insuranceList.size());
}
} catch (Exception e) {
log.error("批量更新商险替换标签异常,参数列表大小:{}", paramVoList.size(), e);
}
}
/***********************减员办理********************************/
/**
......@@ -6080,6 +6160,8 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
if(CommonConstants.FOUR_INT == refundType){
tInsuranceDetail.setIsOverdue(null);
tInsuranceDetail.setIsEffect(null);
tInsuranceDetail.setReplaceRemark(null);
tInsuranceDetail.setReplaceTag(null);
tInsuranceDetail.setBuyHandleStatus(CommonConstants.FIVE_INT);
// 已减员
......@@ -6165,6 +6247,8 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
if(InsurancesConstants.SUCCESS.equals(param.getHandType())){
detail.setReduceHandleStatus(CommonConstants.FOUR_INT);
detail.setBuyHandleStatus(CommonConstants.FIVE_INT);
detail.setReplaceTag(null);
detail.setReplaceRemark(null);
refund.set(TInsuranceRefund :: getReduceHandleStatus,CommonConstants.FOUR_INT);
}else{
detail.setReduceHandleStatus(CommonConstants.THREE_INT);
......@@ -7209,6 +7293,16 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
insuranceRefund.setUpdateBy(user.getId());
insuranceRefund.setUpdateTime(LocalDateTime.now());
tInsuranceRefundService.updateRefundMoney(insuranceRefund);
//清空原商险的可替换标签和可替换说明
if (Common.isNotNull(param.getInsDetailId())){
TInsuranceDetail insuranceDetail = baseMapper.selectById(param.getInsDetailId());
if (insuranceDetail != null){
insuranceDetail.setReplaceTag(null);
insuranceDetail.setReplaceRemark(null);
baseMapper.updateById(insuranceDetail);
}
}
//新增操作记录
TInsuranceOperate insuranceOperate = new TInsuranceOperate();
insuranceOperate.setInsuranceDetailId(param.getInsDetailId());
......@@ -10382,4 +10476,41 @@ public class TInsuranceDetailServiceImpl extends ServiceImpl<TInsuranceDetailMap
}
return sysUserMap;
}
/**
* @param insuranceIds 需要清空替换标签的商险 ID 列表
* @param updateBy 更新人
* @Description: 批量清空商险替换标签和说明(当商险状态变为非已投保且未过期且有效时调用)
* @Author: hgw
* @Date: 2026-03-19
* @return: void
**/
private void batchClearInsuranceReplaceTag(List<String> insuranceIds, String updateBy) {
if (Common.isEmpty(insuranceIds)) {
return;
}
try {
LocalDateTime updateTime = LocalDateTime.now();
for (String id : insuranceIds) {
if (Common.isEmpty(id)) {
continue;
}
try {
LambdaUpdateWrapper<TInsuranceDetail> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(TInsuranceDetail::getReplaceTag, null)
.set(TInsuranceDetail::getReplaceRemark, null)
.set(TInsuranceDetail::getUpdateBy, updateBy)
.set(TInsuranceDetail::getUpdateTime, updateTime)
.eq(TInsuranceDetail::getId, id);
update(updateWrapper);
} catch (Exception e) {
log.error("清空单个商险替换标签异常,商险 ID: {}", id, e);
}
}
log.info("批量清空商险替换标签成功,清空数量:{}", insuranceIds.size());
} catch (Exception e) {
log.error("批量清空商险替换标签异常,清空数量:{}", insuranceIds.size(), e);
}
}
}
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