Commit 3f5ebec7 authored by hongguangwu's avatar hongguangwu

Merge branch 'develop'

parents cc688308 3132739c
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePre;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -100,6 +101,9 @@ public class EmployeeRegistrationPre extends BaseEntity {
@Schema(description = "档案所在地-市编号")
private String cityCode;
@Schema(description = "商险是否已购买 0 是 1 否")
private String insuranceIsBuy;
@Schema(description = "档案所在地-县编号")
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String townCode;
......@@ -126,6 +130,10 @@ public class EmployeeRegistrationPre extends BaseEntity {
@TableField(exist = false)
private TEmployeeContractPre employeeContractPre;
@Schema(description = "商险流程中信息集合")
@TableField(exist = false)
private List<TInsurancePreDetail> exitInsuranceInfoList;
@Schema(description = "附件集合")
@TableField(exist = false)
private List<TAttaInfo> attaList;
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @Author fxj
* @Description 系统配置表
* @Date 9:38 2025/3/13
* @Param
* @return
**/
@Data
@TableName("sys_config")
@Schema(description = "系统配置表")
public class SysConfig {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("id")
@Schema(description = "id")
private String id;
/**
* 配置键
*/
@ExcelAttribute(name = "配置键", isNotEmpty = true, errorInfo = "配置键不能为空", maxLength = 32)
@NotBlank(message = "配置键不能为空")
@Length(max = 32, message = "配置键不能超过32个字符")
@ExcelProperty("配置键")
@Schema(description = "配置键")
private String configKey;
/**
* 配置值
*/
@ExcelAttribute(name = "配置值", isNotEmpty = true, errorInfo = "配置值不能为空")
@NotBlank(message = "配置值不能为空")
@ExcelProperty("配置值")
@Schema(description = "配置值")
private String configValue;
/**
* 配置值1
*/
@ExcelAttribute(name = "配置值1")
@ExcelProperty("配置值1")
@Schema(description = "配置值1")
private String configValue1;
/**
* 配置值2
*/
@ExcelAttribute(name = "配置值2")
@ExcelProperty("配置值2")
@Schema(description = "配置值2")
private String configValue2;
/**
* 备注
*/
@ExcelAttribute(name = "备注", maxLength = 255)
@Length(max = 255, message = "备注不能超过255个字符")
@ExcelProperty("备注")
@Schema(description = "备注")
private String remark;
}
......@@ -30,6 +30,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.Date;
/**
......@@ -574,4 +575,10 @@ public class TGzEmpInfo extends BaseEntity {
@Schema(description = "持卡人姓名")
private String accountName;
@Schema(description = "档案状态(0:已提交,1:暂存)")
private String empStatus;
@Schema(description = "档案提交时间")
private LocalDateTime submitTime;
}
......@@ -2,6 +2,7 @@ package com.yifu.cloud.plus.v1.yifu.archives.vo;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
......@@ -116,16 +117,26 @@ public class EmployeeRegistrationPreVo implements Serializable {
@Schema(description = "更新人")
private String updateBy;
@Schema(description = "商险是否已购买 0 是 1 否")
private String insuranceIsBuy;
@Schema(description = "身份证合集")
private List<String> idcardList;
@Schema(description = "商险待派单信息集合")
private List<TEmployeeInsurancePreVo> employeeInsurancePreVos;
@Schema(description = "商险流程中信息集合")
private List<TInsurancePreDetail> exitInsuranceInfoList;
@Schema(description = "合同待派单信息")
private TEmployeeContractPreVo employeeContractPreVos;
@Schema(description = "附件集合")
private List<TAttaInfoSaveVo> attaList;
@TableField(exist = false)
@Schema(description = "修改类型:1新增;2修改;3删除;4状态346为不可编辑")
private String modelType;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* HCM档案子Vo
* 不良记录
* @author chenyuxi
* @date 2025-08-08
*/
@Data
@ColumnWidth(30)
public class HcmArchiveBadRecordVo implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "发生时间")
private String happenDate;
@Schema(description = "不良记录描述")
private String remark;
@Schema(description = "身份证号")
private String empIdCard;
}
......@@ -60,13 +60,73 @@ public class HcmArchiveBasicVo implements Serializable {
@Schema(description = "民族")
private String nation;
// 户籍所在地
@Schema(description = "籍贯")
@Schema(description = "籍贯(省+市+区)")
private String nativePlace;
@Schema(description = "政治面貌")
private String political;
// 通讯地址
@Schema(description = "联系地址")
@Schema(description = "联系地址(省+市+区+详细地址)")
private String contactAddress;
// 1.7.14新增推送字段
@Schema(description = "手机号")
private String empPhone;
@Schema(description = "户籍所在地(省+市+区)")
private String householdPlace;
@Schema(description = "紧急联系人")
private String emergencyContactName;
@Schema(description = "紧急联系人与本人关系")
private String emergencyContactRelation;
@Schema(description = "紧急联系人电话")
private String emergencyContactPhone;
@Schema(description = "银行卡号")
private String bankNo;
@Schema(description = "开户行(总行)")
private String bankName;
@Schema(description = "社保户")
private String socialHouseholdName;
@Schema(description = "最高学历字典值")
private String educationValue;
// 户口性质
@Schema(description = "户口类型字典值")
private String residentTypeValue;
@Schema(description = "婚姻状况字典值")
private String maritalStatusValue;
@Schema(description = "民族字典值")
private String nationValue;
@Schema(description = "政治面貌字典值")
private String politicalValue;
@Schema(description = "身份证-省")
private Integer idProvince;
@Schema(description = "身份证-市")
private Integer idCity;
@Schema(description = "身份证-县")
private Integer idTown;
@Schema(description = "通信地址省")
private Integer contactProvince;
@Schema(description = "通信地址市")
private Integer contactCity;
@Schema(description = "通信地址县")
private Integer contactTown;
}
......@@ -52,4 +52,10 @@ public class HcmArchiveCertificateVo implements Serializable {
@Schema(description = "证照附件")
private String annex;
@Schema(description = "身份证号")
private String empIdCard;
@Schema(description = "资格类型")
private String certificateType;
}
......@@ -33,16 +33,16 @@ import java.io.Serializable;
public class HcmArchiveEducationVo implements Serializable {
private static final long serialVersionUID = 1L;
// 学校
@Schema(description = "学校名称")
private String schoolName;
// 工作部门
@Schema(description = "专业")
private String major;
// 工作岗位
@Schema(description = "学历")
private String education;
// 入学时间
@Schema(description = "入校日期")
private String joinDate;
// 毕业时间
......@@ -55,4 +55,13 @@ public class HcmArchiveEducationVo implements Serializable {
@Schema(description = "学历附件")
private String annex;
@Schema(description = "身份证号")
private String empIdCard;
@Schema(description = "学历值")
private String educationValue;
@Schema(description = "学历类型值")
private String educationTypeValue;
}
......@@ -53,4 +53,10 @@ public class HcmArchiveFamilyVo implements Serializable {
@Schema(description = "职位/职务")
private String jobName;
@Schema(description = "与本人关系")
private String relation;
@Schema(description = "身份证号")
private String empIdCard;
}
......@@ -52,4 +52,7 @@ public class HcmArchiveJobVo implements Serializable {
@Schema(description = "职位描述")
private String remark;
@Schema(description = "身份证号")
private String empIdCard;
}
......@@ -48,5 +48,8 @@ public class HcmEmployeeInfoVO extends RowIndex implements Serializable {
// 合同信息-含附件
private List<HcmContractVo> contract;
// 不良记录
private List<HcmArchiveBadRecordVo> archiveBadRecord;
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* @Author fxj
* @Description 项目客服信息
* @Date 17:35 2025/8/14
* @Param
* @return
**/
@Data
public class ProjectCustomerServiceVo implements Serializable {
/**
* 项目编码
*/
@Schema(description = "项目编码")
private String departNo;
/**
* 项目名称
*/
@Schema(description = "项目名称")
private String departName;
/**
* 前端客服-登录账号
*/
@Schema(description ="登录账号")
private String csLoginName;
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import lombok.Data;
import java.util.Map;
import java.util.Set;
/**
* 获取社保公积信息
*
* @author chenyuxi
* @date 2025/8/6
* @since v1.7.14
**/
@Data
public class SocialFundVo {
private Set<String> empIdCardSet;
private Map<String,String> socialFundByIdCard;
}
package com.yifu.cloud.plus.v1.yifu.archives.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 地区包装类
* @author chenyuxi
* @date 2025/8/6
* @since v1.7.14
*/
@Data
public class SysAreaVo implements Serializable {
private Integer id;
private String name;
}
......@@ -48,6 +48,10 @@ public class TGzEmpInfoExportMain implements Serializable {
@ExcelProperty("员工档案提交时间")
private String createTime;
@ExcelAttribute(name = "档案状态", isDataId = true, readConverterExp = "0=已提交,1=暂存")
@ExcelProperty("档案状态")
private String empStatus;
@ExcelAttribute(name = "档案推送瓜子状态", isDataId = true, readConverterExp = "0=待推送,1=已推送")
@ExcelProperty("档案推送瓜子状态")
private String empPushStatus;
......
......@@ -11,4 +11,6 @@ public class EmployeeContractConstants {
public static final String NOT_AUDIT = "未审核通过,无法更新";
public static final String INVALID = "作废、终止,无法更新";
public static final String CONTRACT_ALERT_DEFAULT_PERSON = "CONTRACT_ALERT_DEFAULT_PERSON";
}
......@@ -236,4 +236,16 @@ public class TEmpContractAlertController {
public R<List<ErrorMessage>> importListAdd(@RequestBody MultipartFile file) {
return tEmpContractAlertService.importDiy(file.getInputStream());
}
/**
* @Author fxj
* @Description 每日09:00推送一条整合的续签代码信息给配置的人员
* @Date 16:03 2025/8/15
**/
@Operation(description = "每天10:00推送整合后的待办商险数据给对应项目的前端客服信息")
@Inner
@PostMapping("/inner/pushContractAlertToWx")
public void pushInsuranceAlertToWx() {
tEmpContractAlertService.pushContractAlertToWx();
}
}
package com.yifu.cloud.plus.v1.yifu.archives.mapper;/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.archives.entity.SysConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* @Author fxj
* @Description 系统配置表
* @Date 9:40 2025/3/13
* @Param
* @return
**/
@Mapper
public interface SysConfigMapper extends BaseMapper<SysConfig> {
/**
* 系统限制配置表简单分页查询
*
* @param configKey 键
* @return
*/
SysConfig getSysConfigLimitByKey(@Param("configKey") String configKey);
}
......@@ -110,4 +110,6 @@ public interface TEmployeeContractInfoMapper extends BaseMapper<TEmployeeContrac
String getMinDateByCardAndDeptId(@Param("vo") IdNameNoVo vo);
void updateContractEnd( @Param("tEmployeeContractInfo")TEmployeeContractInfo tEmployeeContractInfo);
List<TEmployeeContractInfo> getContractAlertDeptNosList();
}
......@@ -146,4 +146,19 @@ public interface TEmployeeInfoMapper extends BaseMapper<TEmployeeInfo> {
void updateEmployeeAgeTask();
Set<String> getEmpOnlineMap(@Param("empIdCardList")List<String> empIdCardList);
List<HcmArchiveBasicVo> getHcmArchiveBasicList(@Param("idCardSet") Set<String> idCardSet);
List<HcmArchiveFamilyVo> getHcmArchiveFamilyList(@Param("idCardSet") Set<String> idCardSet);
List<HcmArchiveEducationVo> getHcmArchiveEducationList(@Param("idCardSet") Set<String> idCardSet);
List<HcmArchiveJobVo> getHcmArchiveJobList(@Param("idCardSet") Set<String> idCardSet);
List<HcmArchiveBadRecordVo> getHcmArchiveBadRecordList(@Param("idCardSet") Set<String> idCardSet);
List<HcmArchiveCertificateVo> getHcmArchiveCertificateList(@Param("idCardSet") Set<String> idCardSet);
List<SysAreaVo> getSysAreaList(@Param("areaIdSet") Set<Integer> areaIdSet);
}
......@@ -115,4 +115,5 @@ public interface TSettleDomainMapper extends BaseMapper<TSettleDomain> {
List<String> getAllDeptByCustomerLoginName(@Param(value = "userLoginName") String userLoginName);
List<ProjectCustomerServiceVo> getServiceInfoByCodes(@Param(value = "codes")List<String> deptNos);
}
......@@ -68,4 +68,5 @@ public interface TEmpContractAlertService extends IService<TEmpContractAlert> {
R<List<ErrorMessage>> importDiy(InputStream inputStream);
void pushContractAlertToWx();
}
......@@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 项目档案表
......@@ -312,4 +313,6 @@ public interface TEmployeeProjectService extends IService<TEmployeeProject> {
**/
void doSaveBelongDept(TEmployeeProject p, String feedbackType);
Map<String,String> getSocialFundByEmpIdcardSet(Set<String> empIdCardSet);
}
......@@ -702,9 +702,9 @@ public class TEmpChangeInfoServiceImpl extends ServiceImpl<TEmpChangeInfoMapper,
R res = tEmployeeProjectService.deleteEmpPro(oldEmpProject);
resStr.append(res.getMsg());
}
//保存变更记录
saveChangeInfo(newEmpProject, updateTEmployeeProject);
}
//保存变更记录
saveChangeInfo(newEmpProject, updateTEmployeeProject);
return R.ok(null,resStr.toString());
}
......
......@@ -31,24 +31,31 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.ekp.vo.EkpDeptInfoVo;
import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysUserListVo;
import com.yifu.cloud.plus.v1.yifu.archives.config.WxConfig;
import com.yifu.cloud.plus.v1.yifu.archives.constants.ArchivesConstants;
import com.yifu.cloud.plus.v1.yifu.archives.constants.EmployeeContractConstants;
import com.yifu.cloud.plus.v1.yifu.archives.entity.*;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.*;
import com.yifu.cloud.plus.v1.yifu.archives.service.FeedBackDetailService;
import com.yifu.cloud.plus.v1.yifu.archives.service.TEmpContractAlertService;
import com.yifu.cloud.plus.v1.yifu.archives.vo.ChangeFeedBackAllVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.ContractAlertSearchVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpContractAlertUpdateVO;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeContractCheckVO;
import com.yifu.cloud.plus.v1.yifu.archives.vo.*;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.UpmsDaprUtils;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.archives.entity.SysConfig;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
......@@ -57,6 +64,7 @@ import java.io.InputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* 员工合同续签待办
......@@ -79,6 +87,17 @@ public class TEmpContractAlertServiceImpl extends ServiceImpl<TEmpContractAlertM
private final FeedBackDetailService feedBackDetailService;
private final TSettleDomainMapper settleDomainMapper;
@Autowired
private UpmsDaprUtils upmsDaprUtils;
@Autowired
private SysConfigMapper sysConfigMapper;
@Autowired
private WxConfig wxConfig;
@Override
public IPage<TEmpContractAlert> pageDiy(Page page, ContractAlertSearchVo searchVo) {
LambdaQueryWrapper<TEmpContractAlert> wrapper = buildQueryWrapper(searchVo);
......@@ -789,4 +808,132 @@ public class TEmpContractAlertServiceImpl extends ServiceImpl<TEmpContractAlertM
}
return null;
}
/**
* @Author fxj
* @Description 获取合同续签但前端客服异常的数据发送给柳毅晨(可配置)
* @Date 17:05 2025/8/14
* @Param
* @return
**/
@Override
public void pushContractAlertToWx() {
try {
//获取所有合同提醒的数据--去重
List<TEmployeeContractInfo> contractAlertList = contractInfoMapper.getContractAlertDeptNosList();
//从contractAlertList 对象的 中获取所有元素的 deptNo 属性,要去空和去重。放到 deptNos 中
List<String> deptNos = new ArrayList<>();
if (contractAlertList != null) {
for (TEmployeeContractInfo contract : contractAlertList) {
if (Common.isNotNull(contract) && !Common.isEmpty(contract.getDeptNo())) {
deptNos.add(contract.getDeptNo());
}
}
}
//通过项目获取所有项目的前端客服信息
List<ProjectCustomerServiceVo> deptInfoVos = settleDomainMapper.getServiceInfoByCodes(deptNos);
//需要提醒的项目信息
StringBuilder sb = new StringBuilder();
if (!Common.isEmpty(deptInfoVos)){
StringBuilder userNames = new StringBuilder();
//获取所有项目对应的客服信息
initUserNames(deptInfoVos, sb, userNames);
Map<String, SysUser> sysUserMap = getSysUserMap(userNames);
if (Common.isNotKong(sysUserMap)){
SysUser user;
for (ProjectCustomerServiceVo dept : deptInfoVos) {
if (Common.isEmpty(dept.getCsLoginName())){
continue;
}
user = sysUserMap.get(dept.getCsLoginName());
if (!Common.isNotNull(user)){
Common.appendStr(sb,dept.getDepartNo(),CommonConstants.DUNHAO_STRING);
}else if (!CommonConstants.ZERO_STRING.equals(user.getLockFlag()) || !CommonConstants.ZERO_STRING.equals(user.getDelFlag())){
//锁定标识:lockFlag != 0 都算作异常 删除标识:deleteFlag != 0 算作异常
Common.appendStr(sb,dept.getDepartNo(),CommonConstants.DUNHAO_STRING);
}
}
}
if (sb.length() > 0){
// 获取默认提醒人
SysConfig sysConfig = sysConfigMapper.getSysConfigLimitByKey(EmployeeContractConstants.CONTRACT_ALERT_DEFAULT_PERSON);
if (Common.isNotNull(sysConfig) && Common.isNotKong(sysConfig.getConfigValue2())){
sendMessageToWx(sysConfig.getConfigValue2(),sb);
}
}
}
}catch (Exception e){
// 记录日志或进行适当异常处理
log.error("推送合同提醒到企业微信时发生异常", e);
}
}
//发送企业微信待办
private void sendMessageToWx(String useruserWx, StringBuilder content) {
if (Common.isEmpty(useruserWx) || Common.isEmpty(content)) {
return;
}
StringBuilder sendUser = null;
if (Common.isNotKong(useruserWx)) {
sendUser = new StringBuilder(useruserWx);
}
if (sendUser != null) {
RestTemplate restTemplate = new RestTemplate();
Map<String, Object> requestMap = new HashMap<>();
Map<String, Object> textcard = new HashMap<>();
textcard.put("title", "合同到期提醒");
textcard.put("url", String.format(SecurityConstants.WX_GET_MESSAGE_AUTH_URL, wxConfig.getCorpid(), wxConfig.getDomainName() + "/auth/oauth/wxLogin", "66" ));
content.append("的所属前端客服当前状态异常,请及时更新服务手册数据,跟进项目情况。");
textcard.put("description", "项目编码为"+content);
requestMap.put("touser", sendUser);
requestMap.put("agentid", wxConfig.getAgentid());
requestMap.put("msgtype", "textcard");
requestMap.put("textcard", textcard);
// 必须加上header说明
if (!wxConfig.sendTextCard(restTemplate, requestMap)) {
wxConfig.sendTextCard(restTemplate, requestMap);
}
}
}
private Map<String, SysUser> getSysUserMap(StringBuilder userNames) {
Map<String, SysUser> sysUserMap = null;
if (!Common.isEmpty(userNames.toString())) {
try {
R<SysUserListVo> res = upmsDaprUtils.getUserIdsByUserNames(userNames.toString());
List<SysUser> users = null;
if (Common.isNotNull(res) && Common.isNotNull(res.getData()) && Common.isNotNull(res.getData().getUserList())) {
users = res.getData().getUserList();
}
if (Common.isNotKong(users)) {
sysUserMap = users.stream().collect(Collectors.toMap(k -> k.getUsername(), v -> v));
}
}catch (Exception e){
log.error("获取用户映射时发生异常", e);
}
}
return sysUserMap;
}
private void initUserNames(List<ProjectCustomerServiceVo> deptInfoVos, StringBuilder sb, StringBuilder userNames) {
// 使用 Set 来确保用户名唯一性
Set<String> uniqueUserNames = new HashSet<>();
for (ProjectCustomerServiceVo deptInfoVo : deptInfoVos) {
if (Common.isNotNull(deptInfoVo)) {
// 不为空后面要查询对应账号状态异常的
if (Common.isNotNull(deptInfoVo.getCsLoginName())) {
uniqueUserNames.add(deptInfoVo.getCsLoginName());
} else {
Common.appendStr(sb,deptInfoVo.getDepartNo(),CommonConstants.DUNHAO_STRING);
}
}
}
// 将去重后的用户名添加到 userNames 中
for (String userName : uniqueUserNames) {
Common.appendStr(userNames, userName,CommonConstants.COMMA_STRING);
}
}
}
......@@ -209,12 +209,18 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
newInfo.setAttaIdList(null);
oldInfo.setAttaList(null);
newInfo.setAttaList(null);
//商险是否已购买list不做比较
oldInfo.setExitInsuranceInfoList(newInfo.getExitInsuranceInfoList());
//比较记录不影响业务逻辑,用try套住
//记录商险是否已购买日志
String isBuyOld = oldInfo.getInsuranceIsBuy();
String isBuyNew = newInfo.getInsuranceIsBuy();
oldInfo.setInsuranceIsBuy(newInfo.getInsuranceIsBuy());
//比较差异
String differenceKey = HrEquator.comparisonValue(oldInfo, newInfo);
//如果有差异保存差异
List<TEmployeeInsurancePre> newList = newInfo.getInsurancePreList();
String diffTitle = null;
String logId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
// 要保存的明细
......@@ -237,18 +243,49 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
oldMap = new HashMap<>();
}
List<TEmployeeInsurancePre> saveOrUpdateList = new ArrayList<>();
// 是否修改了商险
boolean isModifyInsurance = false;
TEmployeeInsurancePre oldInsurance;
TEmployeePreLogDetail detailInsuranceLog;
String differenceInsuranceKey;
//如果服务类型包含商险处理商险明细数据
newInfo.setId(empPreId);
if (Common.isNotNull(newInfo.getServerItem()) && newInfo.getServerItem().contains("商险")) {
//是否已购买商险单独加日志
if (Common.isEmpty(isBuyOld) || (Common.isNotNull(isBuyOld) && !isBuyOld.equals(isBuyNew))) {
//单独记录是否已购买商险的变更记录
differenceInsuranceKey = "insuranceIsBuy";
detailInsuranceLog = new TEmployeePreLogDetail();
detailInsuranceLog.setModelType(CommonConstants.TWO_STRING);
detailInsuranceLog.setType(CommonConstants.TWO_STRING);
Map<String, Object> old = new HashMap<>();
old.put("insuranceIsBuy", isBuyOld);
Map<String, Object> simNew = new HashMap<>();
simNew.put("insuranceIsBuy", isBuyNew);
this.setLogBaseInfo(empPreId, old, simNew, user, differenceInsuranceKey, logId, detailInsuranceLog);
isModifyInsurance = true;
detailList.add(detailInsuranceLog);
}
if (!newInfo.getExitInsuranceInfoList().isEmpty()) {
newInfo.getExitInsuranceInfoList().forEach(insurancePreVo -> insurancePreVo.setRegisterId(empPreId));
}
HttpDaprUtil.invokeMethodPost(daprInsurancesProperties.getAppUrl(), daprInsurancesProperties.getAppId()
, "/temployeeinsurancepre/inner/updateInfoSaveInsurancePreInfo"
, newInfo, Boolean.class, SecurityConstants.FROM_IN);
}
//如果服务类型不包含商险删除商险明细数据
if (Common.isNotNull(newInfo.getServerItem()) && !newInfo.getServerItem().contains("商险")) {
HttpDaprUtil.invokeMethodPost(daprInsurancesProperties.getAppUrl(), daprInsurancesProperties.getAppId()
, "/temployeeinsurancepre/inner/deleteInsurancePreInfo"
, newInfo, Boolean.class, SecurityConstants.FROM_IN);
}
if (newList != null && !newList.isEmpty()) {
// 是否修改了商险
boolean isModifyInsurance = false;
TEmployeeInsurancePre oldInsurance;
String differenceInsuranceKey;
TEmployeePreLogDetail detailInsuranceLog;
for (TEmployeeInsurancePre newInsurance : newList) {
differenceInsuranceKey = null;
if (Common.isNotNull(newInsurance.getModelType())) {
// 1:新增
if (CommonConstants.ONE_STRING.equals(newInsurance.getModelType())) {
saveOrUpdateList.add(newInsurance);
detailInsuranceLog = new TEmployeePreLogDetail();
detailInsuranceLog.setModelType(newInsurance.getModelType());
......@@ -305,6 +342,13 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
diffTitle = "商险信息";
}
}
} else {
// 没有变更
if (Common.isNotNull(diffTitle)) {
diffTitle += "、商险信息";
} else {
diffTitle = "商险信息";
}
}
String differenceContractKey = null;
......@@ -402,6 +446,12 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
newInfo.setAttaIdList(null);
oldInfo.setAttaList(null);
newInfo.setAttaList(null);
//记录商险是否已购买日志
String isBuyOld = oldInfo.getInsuranceIsBuy();
String isBuyNew = newInfo.getInsuranceIsBuy();
//商险是否已购买list不做比较
oldInfo.setExitInsuranceInfoList(newInfo.getExitInsuranceInfoList());
oldInfo.setInsuranceIsBuy(newInfo.getInsuranceIsBuy());
//比较记录不影响业务逻辑,用try套住
//比较差异
String differenceKey = HrEquator.comparisonValue(oldInfo, newInfo);
......@@ -431,8 +481,32 @@ public class TEmployeePreLogServiceImpl extends ServiceImpl<TEmployeePreLogMappe
TEmployeeInsurancePre oldInsurance;
String differenceInsuranceKey;
TEmployeePreLogDetail detailInsuranceLog;
if (Common.isEmpty(isBuyOld) ||(Common.isNotNull(isBuyOld) && !isBuyOld.equals(isBuyNew))) {
//单独记录是否已购买商险的变更记录
differenceInsuranceKey = "insuranceIsBuy";
detailInsuranceLog = new TEmployeePreLogDetail();
detailInsuranceLog.setModelType(CommonConstants.TWO_STRING);
detailInsuranceLog.setType(CommonConstants.TWO_STRING);
Map<String,Object> old = new HashMap<>();
old.put("insuranceIsBuy", isBuyOld);
Map<String,Object> simNew = new HashMap<>();
simNew.put("insuranceIsBuy", isBuyNew);
this.setPreLogBaseInfo(empPreId, old, simNew, userId, nickName, differenceInsuranceKey, logId, detailInsuranceLog);
isModifyInsurance = true;
detailList.add(detailInsuranceLog);
}
for (TEmployeeInsurancePre newInsurance : newList) {
differenceInsuranceKey = null;
if (CommonConstants.THREE_STRING.equals(newInsurance.getModelType())) {
// 3:删除
detailInsuranceLog = new TEmployeePreLogDetail();
detailInsuranceLog.setModelType(newInsurance.getModelType());
detailInsuranceLog.setType(CommonConstants.TWO_STRING);
this.setPreLogBaseInfo(empPreId, newInsurance, null, userId, nickName, differenceInsuranceKey, logId, detailInsuranceLog);
isModifyInsurance = true;
detailList.add(detailInsuranceLog);
continue;
}
// 2:修改有老ID
if (Common.isNotNull(newInsurance.getId())) {
oldInsurance = oldMap.get(newInsurance.getId());
......
......@@ -2157,4 +2157,17 @@ public class TEmployeeProjectServiceImpl extends ServiceImpl<TEmployeeProjectMap
}
}
@Override
public Map<String,String> getSocialFundByEmpIdcardSet(Set<String> empIdCardSet) {
// 获取社保和公积金派减信息
SocialFundVo vo = new SocialFundVo();
vo.setEmpIdCardSet(empIdCardSet);
Map<String,String> socialFundMap = new HashMap<>();
R<SocialFundVo> reduceVoR = HttpDaprUtil.invokeMethodPost(daprSocialProperties.getAppUrl(), daprSocialProperties.getAppId()
, "/tsocialfundinfo/inner/getSocialAndFundReduceListByEmpIdCardSet", vo, SocialFundVo.class, SecurityConstants.FROM_IN);
if (null != reduceVoR && reduceVoR.getData() != null){
socialFundMap = reduceVoR.getData().getSocialFundByIdCard();
}
return socialFundMap;
}
}
......@@ -491,6 +491,10 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
YifuUser user = getNewYifuUser();
TGzEmpInfo tGzEmpInfo = tGzEmpInfoVo;
Integer offerId = tGzEmpInfoVo.getOfferId();
// 1.7.14: 档案状态必传
if (Common.isEmpty(tGzEmpInfoVo.getEmpStatus())) {
return R.failed("档案状态必传!");
}
if (Common.isEmpty(offerId)) {
return R.failed("请传参流程ID!");
} else {
......@@ -504,30 +508,33 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
// 测试 郭彤:这个提示改下吧,没必要吧ID还有状态枚举值列出来 2025-6-30 18:09:05
// return R.failed("瓜子Offer状态不对("+gzOfferInfo.getOfferStatus()+"),不可编辑,Offer的ID="+ offerId)
}
gzOfferInfo.setOfferStatus("12");
gzOfferInfoMapper.updateById(gzOfferInfo);
// 记录状态变更的offer操作日志 记录来源: 6:(系统触发)C端采集提交
this.saveOfferStatusRecord(gzOfferInfo.getId(),CommonConstants.SIX_STRING,
CommonConstants.NINE_STRING,gzOfferInfo.getOfferStatus(),"0","系统触发");
// 1.7.13: 同一个流程ID推送过12:候选人信息审核,之前没推送过这个状态的,才触发推送
TGzPushEntry findFailInfo = tGzPushEntryService.getOne(Wrappers.<TGzPushEntry>query().lambda()
.eq(TGzPushEntry::getBizId, gzOfferInfo.getBizId())
.eq(TGzPushEntry::getTaskType, "12")
.eq(TGzPushEntry::getDelFlag, CommonConstants.ZERO_STRING)
.last(CommonConstants.LAST_ONE_SQL));
if (Common.isEmpty(findFailInfo)) {
// 推送状态给瓜子
if(!CommonConstants.ZERO_STRING.equals(gzOfferInfo.getBizId())){
TGzPushEntry tGzPushEntry = new TGzPushEntry();
tGzPushEntry.setCreateBy(user.getId());
tGzPushEntry.setCreateName(user.getNickname());
tGzPushEntry.setBizId(gzOfferInfo.getBizId());
tGzPushEntry.setTaskType("12");
tGzPushEntry.setName(gzOfferInfo.getName());
tGzPushEntry.setNationalId(gzOfferInfo.getNationalId());
tGzPushEntryService.addPushEntry(tGzPushEntry);
// 1.7.14: 档案状态是提交,才更新offer状态
if(CommonConstants.ZERO_STRING.equals(tGzEmpInfoVo.getEmpStatus())){
gzOfferInfo.setOfferStatus("12");
gzOfferInfoMapper.updateById(gzOfferInfo);
// 记录状态变更的offer操作日志 记录来源: 6:(系统触发)C端采集提交
this.saveOfferStatusRecord(gzOfferInfo.getId(),CommonConstants.SIX_STRING,
CommonConstants.NINE_STRING,gzOfferInfo.getOfferStatus(),"0","系统触发");
// 1.7.13: 同一个流程ID推送过12:候选人信息审核,之前没推送过这个状态的,才触发推送
TGzPushEntry findFailInfo = tGzPushEntryService.getOne(Wrappers.<TGzPushEntry>query().lambda()
.eq(TGzPushEntry::getBizId, gzOfferInfo.getBizId())
.eq(TGzPushEntry::getTaskType, "12")
.eq(TGzPushEntry::getDelFlag, CommonConstants.ZERO_STRING)
.last(CommonConstants.LAST_ONE_SQL));
if (Common.isEmpty(findFailInfo)) {
// 推送状态给瓜子
if(!CommonConstants.ZERO_STRING.equals(gzOfferInfo.getBizId())){
TGzPushEntry tGzPushEntry = new TGzPushEntry();
tGzPushEntry.setCreateBy(user.getId());
tGzPushEntry.setCreateName(user.getNickname());
tGzPushEntry.setBizId(gzOfferInfo.getBizId());
tGzPushEntry.setTaskType("12");
tGzPushEntry.setName(gzOfferInfo.getName());
tGzPushEntry.setNationalId(gzOfferInfo.getNationalId());
tGzPushEntryService.addPushEntry(tGzPushEntry);
}
}
}
}
......@@ -536,12 +543,20 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
if (Common.isEmpty(gzEmpId)) {
tGzEmpInfo.setCreateBy(user.getId());
tGzEmpInfo.setCreateName(user.getNickname());
tGzEmpInfo.setCreateTime(LocalDateTime.now());
tGzEmpInfo.setSubmitTime(null);
// 1.7.14: 档案状态是提交,才存 提交时间
if(CommonConstants.ZERO_STRING.equals(tGzEmpInfoVo.getEmpStatus())){
tGzEmpInfo.setSubmitTime(LocalDateTime.now());
}
this.save(tGzEmpInfo);
gzEmpId = tGzEmpInfo.getId();
} else {
tGzEmpInfo.setUpdateBy(user.getId());
tGzEmpInfo.setUpdateTime(LocalDateTime.now());
// 1.7.14: 档案状态是提交,更新 提交时间
if(CommonConstants.ZERO_STRING.equals(tGzEmpInfoVo.getEmpStatus())){
tGzEmpInfo.setSubmitTime(LocalDateTime.now());
}
this.updateById(tGzEmpInfo);
}
// 获取瓜子档案附属信息:先删除后增加:
......@@ -843,6 +858,22 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
if (Common.isEmpty(attaEmp.getAttaName())) {
attaEmp.setAttaName(CommonConstants.CENTER_SPLIT_LINE_STRING);
}
// 1.7.14: 附件类型映射
// 41(瓜子申明签名)42(瓜子确认签名)NID_A(证件正面) NID_B(证件反面)
// 附件类型转化:声明签字:21;确认签字:22; 9身份证;24 身份证国徽
if("41".equals(atta.getRelationType())){
attaEmp.setRelationType("21");
}
if("42".equals(atta.getRelationType())){
attaEmp.setRelationType("22");
}
if("NID_A".equals(atta.getRelationType())){
attaEmp.setRelationType("9");
}
if("NID_B".equals(atta.getRelationType())){
attaEmp.setRelationType("24");
}
attaEmp.setDomainId(empId);
attaEmp.setCreateBy(user.getId());
attaEmp.setCreateName(user.getNickname());
......@@ -1020,9 +1051,11 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
// 按gzEmpInfo实体类顺序转化:
emp.setEmpName(gzEmpInfo.getName());
emp.setEmpIdcard(gzEmpInfo.getNationalId());
emp.setIdProvince(gzEmpInfo.getNativePlaceAreaId());
emp.setIdCity(null);
emp.setIdTown(null);
// 1.7.14: 户籍所在地取值调整
emp.setIdProvince(gzEmpInfo.getHukouProvinceAreaId());
emp.setIdCity(gzEmpInfo.getHukouCityAreaId());
emp.setIdTown(gzEmpInfo.getHukouCountyAreaId());
// 民族
emp.setEmpNational(getDictValue(dictMap, gzEmpInfo.getEthnicGrpCd(), ExcelAttributeConstants.GZ_ETHNIC_GRP_CD));
// 婚姻状态
......@@ -1050,10 +1083,10 @@ public class TGzEmpInfoServiceImpl extends ServiceImpl<TGzEmpInfoMapper, TGzEmpI
emp.setContactAddress(gzEmpInfo.getAddress());
// 户口性质
emp.setEmpRegisType(getDictValue(dictMap, gzEmpInfo.getHukouType(), ExcelAttributeConstants.GZ_HUKOU_TYPE));
emp.setFileProvince(gzEmpInfo.getHukouProvinceAreaId());
emp.setFileCity(gzEmpInfo.getHukouCityAreaId());
emp.setFileTown(gzEmpInfo.getHukouCountyAreaId());
// 1.7.14: 档案所在地取值调整: ”默认为“安徽省-合肥市-蜀山区”
emp.setFileProvince(12);
emp.setFileCity(135);
emp.setFileTown(1267);
emp.setBankName(getDictValue(dictMap, gzEmpInfo.getBankCd(), ExcelAttributeConstants.GZ_BANK));
emp.setBankSubName(gzEmpInfo.getBankName());
if (Common.isNotNull(gzEmpInfo.getAccountProvinceAreaId())) {
......
......@@ -37,6 +37,7 @@
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="customerUsernameNew" column="customer_username_new"/>
<result property="insuranceIsBuy" column="insurance_is_buy"/>
</resultMap>
<resultMap id="employeeRegistrationPreExportMap" type="com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeRegistrationPreExportVo">
......@@ -113,7 +114,7 @@
a.update_time,
a.contract_sub_name,
a.customer_username_new,
province_code,city_code,town_code
province_code,city_code,town_code,insurance_is_buy
</sql>
<sql id="employeeRegistrationPre_where">
<if test="employeeRegistrationPre != null">
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.archives.mapper.SysConfigMapper">
<resultMap id="sysConfigLimitMap" type="com.yifu.cloud.plus.v1.yifu.archives.entity.SysConfig">
<id property="id" column="ID"/>
<result property="configKey" column="CONFIG_KEY"/>
<result property="configValue" column="CONFIG_VALUE"/>
<result property="configValue1" column="CONFIG_VALUE_1"/>
<result property="configValue2" column="CONFIG_VALUE_2"/>
<result property="remark" column="REMARK"/>
</resultMap>
<!-- 根据key获取value -->
<select id="getSysConfigLimitByKey" resultType="com.yifu.cloud.plus.v1.yifu.archives.entity.SysConfig">
SELECT a.CONFIG_VALUE,CONFIG_VALUE_1,CONFIG_VALUE_2
FROM sys_config a
where a.CONFIG_KEY = #{configKey} limit 1
</select>
</mapper>
......@@ -851,4 +851,14 @@
from t_employee_contract_info e
where e.EMP_IDCARD = #{vo.no} and e.SETTLE_DOMAIN = #{vo.id} and e.DELETE_FLAG = '0' and e.AUDIT_STATUS = '2'
</select>
<!--list-->
<select id="getContractAlertDeptNosList" resultMap="tEmployeeContrctInfoMap">
SELECT
distinct a.DEPT_NO
FROM t_employee_contract_info a
<where>
a.DELETE_FLAG = 0
</where>
</select>
</mapper>
......@@ -1408,4 +1408,124 @@
and DELETE_FLAG ='0' <!-- 未删除 -->
</select>
<select id="getHcmArchiveBasicList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveBasicVo">
select
a.EMP_NAME empName
,a.EMP_IDCARD empIdCard
,a.EMP_PHONE empPhone
,a.EMP_EMAIL email
,a.EMP_BIRTHDAY bornDate
,if(a.EMP_SEX='2','女',if(a.EMP_SEX='1','男','-')) sex
,a.HIGN_EDUCATION educationValue
,a.EMP_REGIS_TYPE residentTypeValue
,a.EMP_MARRI_STATUS maritalStatusValue
,a.EMP_NATIONAL nationValue
,a.POLITICAL_STATUS politicalValue
,a.ID_PROVINCE idProvince
,a.ID_CITY idCity
,a.ID_TOWN idTown
,a.CONTACT_PROVINCE contactProvince
,a.CONTACT_CITY contactCity
,a.CONTACT_TOWN contactTown
,a.contact_Address contactAddress
,a.BANK_NO bankNo
,a.BANK_NAME bankName
from t_employee_info a
where a.DELETE_FLAG = '0' and a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="getSysAreaList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.SysAreaVo">
select a.id id,a.AREA_NAME name from sys_area a
where a.id in
<foreach item="item" index="index" collection="areaIdSet" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="getHcmArchiveFamilyList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveFamilyVo">
select
a.RELATIONSHIP_SELF relation
,a.EMP_IDCARD empIdCard
,a.FAMILY_NAME trueName
,a.BIRTHDAY bornTime
,'' political
,a.WORK_UNIT company
,'' jobName
from t_emp_family a
where a.DELETE_FLAG = '0' and a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
<select id="getHcmArchiveEducationList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveEducationVo">
select
a.SCHOOL schoolName
,a.EMP_IDCARD empIdCard
,a.MAJOR major
,EDUCATION_NAME educationValue
,a.ENTRY_DATE joinDate
,a.GRADUTION_DATE leaveDate
,a.type educationTypeValue
,'' annex
from t_emp_education a
where a.DELETE_FLAG = '0' and a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
<select id="getHcmArchiveJobList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveJobVo">
select
a.WORK_UNIT companyName
,a.EMP_IDCARD empIdCard
,a.WORK_DEPART deptName
,a.WORK_JOB jobName
,a.START_DATE joinDate
,a.END_DATE leaveDate
,a.REMARK remark
from t_emp_work_recording a
where a.DELETE_FLAG = '0' and a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
<select id="getHcmArchiveBadRecordList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveBadRecordVo">
select
a.EMP_IDCARD empIdCard
,a.HAPPEN_TIME happenDate
,a.REMARK remark
from t_emp_bad_record a
where a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
<select id="getHcmArchiveCertificateList" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.HcmArchiveCertificateVo">
select
a.QUALIFICATION_TYPE certificateType
,a.EMP_IDCARD empIdCard
,a.CERTIFICATION_NO certificateNo
,a.ASSESSMENT_UNIT certificateOrg
,'' certificateDate
,'' certificateExpireDate
,'' annex
from t_emp_professional_qualification a
where a.DELETE_FLAG = '0' and a.EMP_IDCARD in
<foreach item="item" index="index" collection="idCardSet" open="(" separator="," close=")">
#{item}
</foreach>
order by a.CREATE_TIME desc
</select>
</mapper>
......@@ -102,6 +102,8 @@
<result property="hukouCountyAreaId" column="hukou_county_area_id"/>
<result property="accountProvinceAreaId" column="account_province_area_id"/>
<result property="accountCityAreaId" column="account_city_area_id"/>
<result property="empStatus" column="emp_status"/>
<result property="submitTime" column="submit_time"/>
</resultMap>
<sql id="Base_Column_List">
a.id,
......@@ -181,7 +183,9 @@
a.hukou_city_area_id,
a.hukou_county_area_id,
a.account_province_area_id,
a.account_city_area_id
a.account_city_area_id,
a.emp_status,
a.submit_time
</sql>
<sql id="tGzEmpInfo_where">
<if test="tGzEmpInfo != null">
......@@ -194,6 +198,9 @@
<if test="tGzEmpInfo.offerId != null ">
AND a.offer_id = #{tGzEmpInfo.offerId}
</if>
<if test="tGzEmpInfo.empStatus != null and tGzEmpInfo.empStatus.trim() != ''">
AND a.emp_status = #{tGzEmpInfo.empStatus}
</if>
<if test="tGzEmpInfo.empPushStatus != null and tGzEmpInfo.empPushStatus.trim() != ''">
AND a.emp_push_status = #{tGzEmpInfo.empPushStatus}
</if>
......@@ -211,10 +218,10 @@
</if>
<!--查询提交档案时间-->
<if test="tGzEmpInfo.createTimeStart != null ">
AND a.create_time &gt;= #{tGzEmpInfo.createTimeStart}
AND a.submit_time &gt;= #{tGzEmpInfo.createTimeStart}
</if>
<if test="tGzEmpInfo.createTimeEnd != null ">
AND a.create_time &lt;= #{tGzEmpInfo.createTimeEnd}
AND a.submit_time &lt;= #{tGzEmpInfo.createTimeEnd}
</if>
<if test="tGzEmpInfo.createBy != null and tGzEmpInfo.createBy.trim() != ''">
AND a.create_by = #{tGzEmpInfo.createBy}
......@@ -411,7 +418,7 @@
a.del_flag = '0'
<include refid="tGzEmpInfo_where"/>
</where>
ORDER by a.create_time desc,a.id desc
ORDER by a.emp_status,a.submit_time desc,a.id desc
</select>
<!--count-->
......@@ -431,10 +438,11 @@
a.id,
a.biz_id,
a.offer_id,
a.emp_status,
a.emp_push_status,
a.contract_push_status,
a.contract_atta_push_status,
date_format(a.create_time, '%Y-%m-%d %H:%i:%s') create_time,
date_format(a.submit_time, '%Y-%m-%d %H:%i:%s') create_time,
a.create_by,
a.create_name,
a.update_by,
......@@ -517,7 +525,7 @@
<include refid="tGzEmpInfo_where"/>
</where>
group by a.id
ORDER by a.create_time desc,a.id desc
ORDER by a.emp_status,a.submit_time desc,a.id desc
<if test="tGzEmpInfo.limitStart != null">
limit #{tGzEmpInfo.limitStart},#{tGzEmpInfo.limitEnd}
</if>
......
......@@ -667,4 +667,20 @@
t_settle_domain a
where a.DELETE_FLAG = '0' and a.CS_LOGIN_NAME = #{userLoginName}
</select>
<select id="getServiceInfoByCodes" resultType="com.yifu.cloud.plus.v1.yifu.archives.vo.ProjectCustomerServiceVo">
SELECT
a.DEPART_NO as 'departNo',
a.DEPART_NAME as 'departName',
a.cs_login_name as 'csLoginName'
FROM t_settle_domain a
where 1=1
and a.DELETE_FLAG = '0'
<if test="codes != null and codes.size() > 0">
and a.DEPART_NO in
<foreach collection="codes" item="param" index="index" open="(" close=")" separator=",">
#{param}
</foreach>
</if>
</select>
</mapper>
......@@ -638,7 +638,7 @@ public interface CommonConstants {
List<String> processStatus = Stream.of("0","1").collect(Collectors.toList());
List<String> processStatusEnd = Stream.of("3","4").collect(Collectors.toList());
List<String> insuranceAutoProcessStatus = Stream.of("0","1","2","5").collect(Collectors.toList());
List<String> processPreStatus = Stream.of("1").collect(Collectors.toList());
......
......@@ -13,6 +13,7 @@ import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
......@@ -711,4 +712,43 @@ public class Common {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
/**
* @Author fxj
* @Description 判断是否为日期 格式 yyyyMMdd
* @Date 11:24 2025/8/6
**/
public static boolean isValidDateAsso(String dateStr) {
// 1. 检查长度是否为8
if (dateStr == null || dateStr.length() != 8) {
return false;
}
// 2. 检查是否全为数字
if (!dateStr.matches("\\d+")) {
return false;
}
try {
Date date = new SimpleDateFormat("yyyyMMdd").parse(dateStr);
} catch (Exception e) {
return false; // 理论上不会发生(因正则已过滤)
}
return true;
}
/**
* @Author fxj
* @Description
* @Date 17:43 2025/8/14
**/
public static void appendStr(StringBuilder sb,String str,String split){
if (Common.isNotNull(sb) && Common.isNotNull(str)){
if (sb.length()>0){
sb.append(Common.isEmpty(split)?",":split);
sb.append(str);
}else {
sb.append(str);
}
}
}
}
......@@ -1241,6 +1241,17 @@ public class DateUtil {
public static String getFirstDayString(String yearMonth){
return yearMonth.substring(0,4)+"-"+yearMonth.substring(4,6)+"-01";
}
/**
* 获取第一天
* @Author fxj
* @Date 2019-10-16
* @param yearMonth YYYYMM 返回 YYYYMMDD
* @return
**/
public static String getFirstDayStringAsso(String yearMonth){
return yearMonth+"01";
}
/**
* 当月第一天
* @Author fxj
......
......@@ -85,4 +85,9 @@ public class InsuranceDaprUtil {
, daprInsurancesProperties.getAppId(),"/temployeeinsurancepre/inner/updateInsurancePreCustomerName" , updateVo
, Object.class, SecurityConstants.FROM_IN);
}
public R<Boolean> checkExitInsuanceIsProcess(EmployeeRegistrationPreVo preVo) {
return HttpDaprUtil.invokeMethodPost(daprInsurancesProperties.getAppUrl(),daprInsurancesProperties.getAppId(),
"/temployeeinsurancepre/inner/checkExitInsuanceIsProcess", JSON.toJSONString(preVo), Boolean.class, SecurityConstants.FROM_IN);
}
}
......@@ -36,96 +36,113 @@ public class MenuUtil {
private static final String START_STR = "start";
public void setAuthSql(YifuUser user, BaseEntity entity) {
// 是否无权限,默认否
boolean noAuth = false;
// 普通用户:
if (user != null && Common.isNotNull(user.getId()) && CommonConstants.ONE_STRING.equals(user.getSystemFlag())) {
// 菜单id
String menuId = entity.getMId();
if (Common.isEmpty(menuId)) {
menuId = entity.getMenuInfo();
}
if (Common.isNotNull(menuId)) {
String linkId = user.getId();
int linkType = 1; // 用户
SysDataAuth sysDataAuth = new SysDataAuth();
sysDataAuth.setLinkId(linkId);
sysDataAuth.setLinkType(linkType);
// 获取缓存菜单权限的步骤:
Cache cache = cacheManager.getCache(CacheConstants.DATA_AUTH_DETAILS + linkType);
Object obj = null;
if (cache != null) {
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
if (Common.isEmpty(obj)) {
HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(), daprUpmsProperties.getAppId()
, "/dataAuth/refreshAuth", sysDataAuth, SysDataAuth.class, SecurityConstants.FROM_IN);
if (user != null && Common.isNotNull(user.getId())) {
if (CommonConstants.ONE_STRING.equals(user.getSystemFlag())) {
// 菜单id
String menuId = entity.getMId();
if (Common.isEmpty(menuId)) {
menuId = entity.getMenuInfo();
}
if (Common.isNotNull(menuId)) {
String linkId = user.getId();
int linkType = 1; // 用户
SysDataAuth sysDataAuth = new SysDataAuth();
sysDataAuth.setLinkId(linkId);
sysDataAuth.setLinkType(linkType);
// 获取缓存菜单权限的步骤:
Cache cache = cacheManager.getCache(CacheConstants.DATA_AUTH_DETAILS + linkType);
Object obj = null;
if (cache != null) {
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
if (Common.isEmpty(obj)) {
linkId = user.getUserGroup();
linkType = 0; // 用户组
cache = cacheManager.getCache(CacheConstants.DATA_AUTH_DETAILS + linkType);
if (cache != null) {
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
if (Common.isEmpty(obj)) {
sysDataAuth.setLinkId(linkId);
sysDataAuth.setLinkType(linkType);
HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(), daprUpmsProperties.getAppId()
, "/dataAuth/refreshAuth", sysDataAuth, SysDataAuth.class, SecurityConstants.FROM_IN);
HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(), daprUpmsProperties.getAppId()
, "/dataAuth/refreshAuth", sysDataAuth, SysDataAuth.class, SecurityConstants.FROM_IN);
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
if (Common.isEmpty(obj)) {
linkId = user.getUserGroup();
// 无用户组,直接返回阻断sql
if (Common.isEmpty(linkId)) {
entity.setAuthSql( " and 1=2 ");
return;
}
linkType = 0; // 用户组
cache = cacheManager.getCache(CacheConstants.DATA_AUTH_DETAILS + linkType);
if (cache != null) {
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
if (Common.isEmpty(obj)) {
sysDataAuth.setLinkId(linkId);
sysDataAuth.setLinkType(linkType);
HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(), daprUpmsProperties.getAppId()
, "/dataAuth/refreshAuth", sysDataAuth, SysDataAuth.class, SecurityConstants.FROM_IN);
obj = cache.get(linkId + CommonConstants.DOWN_LINE_STRING + menuId);
}
}
}
}
}
}
if (Common.isNotNull(obj)) {
SimpleValueWrapper objs = (SimpleValueWrapper) obj;
if (Common.isNotNull(objs)) {
String sql = String.valueOf(objs.get());
if (sql.contains("#create_by")) {
sql = sql.replace("#create_by", user.getId());
}
if (sql.contains("#settleDomainId")) {
// 获取人员项目权限
R<TSettleDomainListVo> res = HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl()
, daprArchivesProperties.getAppId(),"/tsettledomain/getSettleDomainIdsByUserId"
, user.getId(), TSettleDomainListVo.class, SecurityConstants.FROM_IN);
StringBuilder deptStr = new StringBuilder();
if (res != null && CommonConstants.SUCCESS == res.getCode()
&& res.getData() != null && res.getData().getDeptIds() != null
&& !res.getData().getDeptIds().isEmpty()) {
for (String deptId : res.getData().getDeptIds()) {
deptStr.append(",'").append(deptId).append("'");
if (Common.isNotNull(obj)) {
SimpleValueWrapper objs = (SimpleValueWrapper) obj;
if (Common.isNotNull(objs)) {
String sql = String.valueOf(objs.get());
if (sql.contains("#create_by")) {
sql = sql.replace("#create_by", user.getId());
}
if (sql.contains("#settleDomainId")) {
// 获取人员项目权限
R<TSettleDomainListVo> res = HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl()
, daprArchivesProperties.getAppId(), "/tsettledomain/getSettleDomainIdsByUserId"
, user.getId(), TSettleDomainListVo.class, SecurityConstants.FROM_IN);
StringBuilder deptStr = new StringBuilder();
if (res != null && CommonConstants.SUCCESS == res.getCode()
&& res.getData() != null && res.getData().getDeptIds() != null
&& !res.getData().getDeptIds().isEmpty()) {
for (String deptId : res.getData().getDeptIds()) {
deptStr.append(",'").append(deptId).append("'");
}
}
//sql = sql.replace("or a.settle_domain_id in ('0'#settleDomainId) ", "")
sql = sql.replace("#settleDomainId", deptStr.toString());
}
//sql = sql.replace("or a.settle_domain_id in ('0'#settleDomainId) ", "")
sql = sql.replace("#settleDomainId", deptStr.toString());
}
String userIds = "0";
if (sql.contains(START_STR)) {
String deptIds = StringUtils.substringBetween(sql,START_STR, "end");
R<String> userIdR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl()
,daprUpmsProperties.getAppId(),"/user/inner/getUserIdByDeptIds",deptIds
, String.class, SecurityConstants.FROM_IN);
if (userIdR != null && CommonConstants.SUCCESS == userIdR.getCode()) {
userIds = userIdR.getData();
String userIds = "0";
if (sql.contains(START_STR)) {
String deptIds = StringUtils.substringBetween(sql, START_STR, "end");
R<String> userIdR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl()
, daprUpmsProperties.getAppId(), "/user/inner/getUserIdByDeptIds", deptIds
, String.class, SecurityConstants.FROM_IN);
if (userIdR != null && CommonConstants.SUCCESS == userIdR.getCode()) {
userIds = userIdR.getData();
}
sql = sql.replace(START_STR, "").replace("end", "")
.replace(deptIds, userIds);
}
sql = sql.replace(START_STR, "").replace("end", "")
.replace(deptIds, userIds);
}
if (sql.contains("#deptId")) {
R<String> userIdR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl()
,daprUpmsProperties.getAppId(),"/user/inner/getUserIdByDeptIds"
,String.valueOf(user.getDeptId()), String.class, SecurityConstants.FROM_IN);
if (userIdR != null && CommonConstants.SUCCESS == userIdR.getCode()) {
userIds = userIdR.getData();
if (sql.contains("#deptId")) {
R<String> userIdR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl()
, daprUpmsProperties.getAppId(), "/user/inner/getUserIdByDeptIds"
, String.valueOf(user.getDeptId()), String.class, SecurityConstants.FROM_IN);
if (userIdR != null && CommonConstants.SUCCESS == userIdR.getCode()) {
userIds = userIdR.getData();
}
sql = sql.replace("#deptId", userIds);
//sql = sql.replace(" or dept.dept_id = #deptId ", "")
}
if (Common.isNotNull(sql)) {
entity.setAuthSql(sql);
}
sql = sql.replace("#deptId", userIds);
//sql = sql.replace(" or dept.dept_id = #deptId ", "")
}
if (Common.isNotNull(sql)) {
entity.setAuthSql(sql);
}
}
} else {
noAuth = true;
}
}
} else {
noAuth = true;
}
// 无权限的,默认无数据
if (noAuth) {
entity.setAuthSql( " and 1=2 ");
}
}
}
......@@ -99,7 +99,7 @@ public class UpmsDaprUtils {
}
/**
* @Author fxj
* @Description 通过用户ID 获取 在用的MVP系统的用户
* @Description 通过用户ID 获取 在用的MVP系统的用户
* @Date 17:24 2025/3/12
**/
public R<SysUsersVo> getUserVoByUserIds(String userIds) {
......@@ -109,6 +109,21 @@ public class UpmsDaprUtils {
}
return allUserVoR;
}
/**
* @Author hgw
* @Description 通过用户ID 获取 在用的MVP系统的用户
* @Date 2025-8-1 14:51:03
**/
public R<SysUsersVo> getInUseUserByIds(String userIds) {
R<SysUsersVo> allUserVoR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(),daprUpmsProperties.getAppId()
,"/user/inner/getInUseUserByIds", userIds, SysUsersVo.class, SecurityConstants.FROM_IN);
if (Common.isEmpty(allUserVoR)){
return R.failed("获取指定用户IDS对应在用的用户信息失败!");
}
return allUserVoR;
}
public R<SysUser> getSimpleUser(String userId) {
R<SysUser> userR = HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(),daprUpmsProperties.getAppId(),"/user/inner/getSimpleUser",userId, SysUser.class, SecurityConstants.FROM_IN);
if (Common.isEmpty(userR)){
......
......@@ -569,7 +569,9 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
!CommonConstants.ONE_STRING.equals(registration.getProcessStatus()))) {
return R.failed(CommonConstants.NO_DATA_TO_HANDLE);
}
if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()) {
if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()
&& Common.isNotNull(preVo.getInsuranceIsBuy())
&& preVo.getInsuranceIsBuy().equals(CommonConstants.ONE_STRING)) {
List<TEmployeeAutoRegistCheckVo> errorList = new ArrayList<>();
TEmployeeAutoRegistCheckVo checkVo;
String key;
......@@ -619,6 +621,19 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
}
}
if (preVo.getServerItem().contains("商险") && Common.isNotNull(preVo.getInsuranceIsBuy())
&& preVo.getInsuranceIsBuy().equals(CommonConstants.ZERO_STRING)
&& !preVo.getExitInsuranceInfoList().isEmpty()) {
//判断带出的流程中或者已完结的商险数据是否准确
//商险是否存在判断
preVo.setEmpIdcard(registration.getEmpIdcard());
preVo.getExitInsuranceInfoList().forEach(e -> e.setCreateTime(null));
boolean isTrue = checkInsuranceIsProcess(preVo);
if (isTrue) {
return R.other(CommonConstants.TWO_INT,null,"带出的商险已购买数据状态或条数发生变更,请重新确认接收!");
}
}
//点击“接收确认”的时候,监测到该人员该项目下已有在项的档案时,再次提醒:该人员已在项,
//状态将更新成“已处理”;处理记录中,针对此情况,记录真实的进项时间,备注:先于登记入项
EmpProjectStatusVo vo = new EmpProjectStatusVo();
......@@ -645,7 +660,16 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
initRegistPreInfo(registration, preVo, user, CommonConstants.ZERO_STRING);
R<String> domainR = archivesDaprUtil.saveRegistPreInfo(preVo);
if (Common.isNotNull(domainR) && Common.isNotNull(domainR.getData())) {
if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()) {
//是否存在商险为是时生成入职确认信息商险明细数据
if (preVo.getServerItem().contains("商险") && Common.isNotNull(preVo.getInsuranceIsBuy())
&& preVo.getInsuranceIsBuy().equals(CommonConstants.ZERO_STRING)
&& !preVo.getExitInsuranceInfoList().isEmpty()) {
preVo.getExitInsuranceInfoList().forEach(insurancePreVo -> insurancePreVo.setRegisterId(domainR.getData()));
//生成入职确认信息商险明细数据
insuranceDaprUtil.saveInsurancePreInfo(preVo);
} else if (preVo.getServerItem().contains("商险")
&& preVo.getInsuranceIsBuy().equals(CommonConstants.ONE_STRING)
&& !preVo.getEmployeeInsurancePreVos().isEmpty()) {
//生成商险待购买的数据
for (TEmployeeInsurancePreVo insurancePreVo : preVo.getEmployeeInsurancePreVos()) {
initInsruancePreInfo(registration, insurancePreVo, user, domainR.getData());
......@@ -958,6 +982,8 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()) {
//生成商险待购买的数据
TEmployeeInsurancePreVo insurancePreVo = preVo.getEmployeeInsurancePreVos().get(0);
//批量的商险是否已购买默认为否
preVo.setInsuranceIsBuy(CommonConstants.ONE_STRING);
initInsruancePreInfo(registration, insurancePreVo, user, domainR.getData());
insuranceDaprUtil.saveInsurancePreInfo(preVo);
}
......@@ -1097,7 +1123,15 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
initRegistPreInfo(registrationNow, preVo, user, CommonConstants.FOUR_STRING);
R<String> domainR = archivesDaprUtil.saveRegistPreInfo(preVo);
if (Common.isNotNull(domainR) && Common.isNotNull(domainR.getData())){
if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()) {
//是否存在商险为是时生成入职确认信息商险明细数据
if (preVo.getServerItem().contains("商险") && Common.isNotNull(preVo.getInsuranceIsBuy())
&& preVo.getInsuranceIsBuy().equals(CommonConstants.ZERO_STRING)
&& !preVo.getExitInsuranceInfoList().isEmpty()) {
preVo.getExitInsuranceInfoList().forEach(e -> e.setCreateTime(null));
preVo.getExitInsuranceInfoList().forEach(insurancePreVo -> insurancePreVo.setRegisterId(domainR.getData()));
//生成入职确认信息商险明细数据
insuranceDaprUtil.saveInsurancePreInfo(preVo);
} else if (preVo.getServerItem().contains("商险") && !preVo.getEmployeeInsurancePreVos().isEmpty()) {
//生成商险待购买的数据
for (TEmployeeInsurancePreVo insurancePreVo : preVo.getEmployeeInsurancePreVos()) {
initInsruancePreInfo(registrationNow, insurancePreVo, user, domainR.getData());
......@@ -1602,6 +1636,13 @@ public class EmployeeRegistrationServiceImpl extends ServiceImpl<EmployeeRegistr
preVo.getExpectedCollectionTime(), DateUtil.ISO_EXPANDED_DATE_FORMAT) + " 15:20", DateUtil.DATETIME_PATTERN_MINUTE));
}
//商险状态是否正常判断
private boolean checkInsuranceIsProcess(EmployeeRegistrationPreVo preVo) {
R<Boolean> flag = insuranceDaprUtil.checkExitInsuanceIsProcess(preVo);
//是否已签署为是需要判断合同是否在用或者流程中
return Common.isEmpty(flag) || Boolean.TRUE.equals(!flag.getData());
}
//商险是否存在判断
private TEmployeeAutoRegistCheckVo checkInsuranceExit(TEmployeeInsurancePreVo preVo,EmployeeRegistration registration) {
//查询入职确认信息数据
......
......@@ -104,6 +104,10 @@ public class InsurancesConstants {
* 投保记录已存在
*/
public static final String DATA_IS_EXIST = "投保记录已存在";
/**
* 本次派单前系统已有该人员在途/在保数据
*/
public static final String DIS_PERSON_DATA_IS_EXIST = "本次派单前系统已有该人员在途/在保数据";
/**
* 投保记录不存在
*/
......@@ -468,6 +472,14 @@ public class InsurancesConstants {
* 商险已结算,无法登记保单保费
*/
public static final String SETTLE_HANDLE_THREE_NOT_REGISTERED = "商险已结算,无法登记保单保费";
/**
* 商险支出中,无法登记保单保费
*/
public static final String PAY_SETTLE_ONE_NOT_REGISTERED = "商险支出中,无法登记保单保费";
/**
* 商险已支出,无法登记保单保费
*/
public static final String PAY_SETTLE_TWO_NOT_REGISTERED = "商险已支出,无法登记保单保费";
/**
* 保单号不存在或已过期
*/
......
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
......@@ -147,6 +148,14 @@ public class TEmployeeInsurancePre extends BaseEntity {
@Schema(description = "商险ID")
private String insurancesId;
@Schema(description = "发起失败原因")
private String errorInfo;
@Schema(description = "发起失败时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
@JsonIgnore
private LocalDateTime errorTime;
@TableField(exist = false)
@Schema(description = "修改类型:1新增;2修改;3删除;4状态346为不可编辑")
private String modelType;
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Data
@TableName("t_employee_insurance_pre_qw")
@Schema(description = "商险定时失败的企微")
public class TEmployeeInsurancePreQw {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String id;
/**
* 前端客服
*/
@ExcelAttribute(name = "前端客服", maxLength = 30)
@Length(max = 30, message = "前端客服不能超过30个字符")
@ExcelProperty("前端客服")
@Schema(description = "前端客服")
private String customerUsername;
/**
* 前端客服登录名
*/
@ExcelAttribute(name = "前端客服登录名", isNotEmpty = true, errorInfo = "前端客服登录名不能为空", maxLength = 30)
@NotBlank(message = "前端客服登录名不能为空")
@Length(max = 30, message = "前端客服登录名不能超过30个字符")
@ExcelProperty("前端客服登录名")
@Schema(description = "前端客服登录名")
private String customerUserLoginname;
/**
* 内容
*/
@ExcelAttribute(name = "内容", isNotEmpty = true, errorInfo = "内容不能为空", maxLength = 200)
@NotBlank(message = "内容不能为空")
@Length(max = 200, message = "内容不能超过200个字符")
@ExcelProperty("内容")
@Schema(description = "内容")
private String description;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建时间")
@TableField(fill = FieldFill.INSERT)
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("创建时间")
@ColumnWidth(18)
private LocalDateTime createTime;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
* 商险定时失败的企微的详情
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Data
@TableName("t_employee_insurance_pre_qw_detail")
@Schema(description = "商险定时失败的企微的详情")
public class TEmployeeInsurancePreQwDetail {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String id;
/**
* 关联主键(t_employee_insurance_pre_qw表的ID)
*/
@ExcelAttribute(name = "关联主键(t_employee_insurance_pre_qw表的ID)", isNotEmpty = true, errorInfo = "关联主键(t_employee_insurance_pre_qw表的ID)不能为空", maxLength = 36)
@NotBlank(message = "关联主键(t_employee_insurance_pre_qw表的ID)不能为空")
@Length(max = 36, message = "关联主键(t_employee_insurance_pre_qw表的ID)不能超过36个字符")
@ExcelProperty("关联主键(t_employee_insurance_pre_qw表的ID)")
@Schema(description = "关联主键(t_employee_insurance_pre_qw表的ID)")
private String mainId;
/**
* 姓名
*/
@ExcelAttribute(name = "姓名", maxLength = 30)
@Length(max = 30, message = "姓名不能超过30个字符")
@ExcelProperty("姓名")
@Schema(description = "姓名")
private String empName;
/**
* 身份证
*/
@ExcelAttribute(name = "身份证", maxLength = 18)
@Length(max = 18, message = "身份证不能超过18个字符")
@ExcelProperty("身份证")
@Schema(description = "身份证")
private String empIdcard;
/**
* 失败原因
*/
@ExcelAttribute(name = "失败原因", maxLength = 200)
@Length(max = 200, message = "失败原因不能超过200个字符")
@ExcelProperty("失败原因")
@Schema(description = "失败原因")
private String errorInfo;
/**
* 失败时间
*/
@ExcelAttribute(name = "失败时间", isDate = true)
@ExcelProperty("失败时间")
@Schema(description = "失败时间")
private LocalDateTime errorTime;
/**
* 商险待派单ID(t_employee_insurance_pre的ID)
*/
@ExcelAttribute(name = "商险待派单ID(t_employee_insurance_pre的ID)", maxLength = 36)
@Length(max = 36, message = "商险待派单ID(t_employee_insurance_pre的ID)不能超过36个字符")
@ExcelProperty("商险待派单ID(t_employee_insurance_pre的ID)")
@Schema(description = "商险待派单ID(t_employee_insurance_pre的ID)")
private String preId;
}
package com.yifu.cloud.plus.v1.yifu.insurances.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.util.Date;
/**
* 入职确认信息已购买商险明细
*
* @author huych
* @date 2025-08-05 15:08:42
*/
@Data
@TableName("t_insurance_pre_detail")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "入职确认信息已购买商险明细")
public class TInsurancePreDetail extends BaseEntity {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String id;
/**
* 姓名
*/
@ExcelAttribute(name = "姓名", maxLength = 32)
@Length(max = 32, message = "姓名不能超过32个字符")
@ExcelProperty("姓名")
@Schema(description = "姓名")
private String empName;
/**
* 身份证号
*/
@ExcelAttribute(name = "身份证号", isNotEmpty = true, errorInfo = "身份证号不能为空", maxLength = 32)
@NotBlank(message = "身份证号不能为空")
@Length(max = 32, message = "身份证号不能超过32个字符")
@ExcelProperty("身份证号")
@Schema(description = "身份证号")
private String empIdcardNo;
/**
* 项目编码
*/
@ExcelAttribute(name = "项目编码", maxLength = 30)
@Length(max = 30, message = "项目编码不能超过30个字符")
@ExcelProperty("项目编码")
@Schema(description = "项目编码")
private String deptNo;
/**
* 投保岗位
*/
@ExcelAttribute(name = "投保岗位", maxLength = 32)
@Length(max = 32, message = "投保岗位不能超过32个字符")
@ExcelProperty("投保岗位")
@Schema(description = "投保岗位")
private String post;
/**
* 保险公司名称
*/
@ExcelAttribute(name = "保险公司名称", maxLength = 60)
@Length(max = 60, message = "保险公司名称不能超过60个字符")
@ExcelProperty("保险公司名称")
@Schema(description = "保险公司名称")
private String insuranceCompanyName;
/**
* 险种名称
*/
@ExcelAttribute(name = "险种名称", maxLength = 50)
@Length(max = 50, message = "险种名称不能超过50个字符")
@ExcelProperty("险种名称")
@Schema(description = "险种名称")
private String insuranceTypeName;
/**
* 购买标准
*/
@ExcelAttribute(name = "购买标准", maxLength = 32)
@Length(max = 32, message = "购买标准不能超过32个字符")
@ExcelProperty("购买标准")
@Schema(description = "购买标准")
private String buyStandard;
/**
* 保单开始时间
*/
@ExcelAttribute(name = "保单开始时间", isDate = true)
@ExcelProperty("保单开始时间")
@Schema(description = "保单开始时间")
@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
private Date policyStart;
/**
* 保单结束时间
*/
@ExcelAttribute(name = "保单结束时间", isDate = true)
@ExcelProperty("保单结束时间")
@Schema(description = "保单结束时间")
@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
private Date policyEnd;
/**
* 保单生效日期
*/
@ExcelAttribute(name = "保单生效日期", isDate = true)
@ExcelProperty("保单生效日期")
@Schema(description = "保单生效日期")
@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
private Date policyEffect;
/**
* 投保类型, 1新增、3批增、4替换
*/
@ExcelAttribute(name = "购买类型, 1新增、3批增、4替换")
@ExcelProperty("投保类型, 1新增、3批增、4替换")
@Schema(description = "投保类型, 1新增、3批增、4替换")
private Integer buyType;
/**
* 投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员
*/
@ExcelAttribute(name = "投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员")
@ExcelProperty("投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员")
@Schema(description = "投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员")
private Integer buyHandleStatus;
/**
* 结算主体名称
*/
@ExcelAttribute(name = "结算主体名称", maxLength = 50)
@Length(max = 50, message = "结算主体名称不能超过50个字符")
@ExcelProperty("结算主体名称")
@Schema(description = "结算主体名称")
private String deptName;
/**
* 客户名称
*/
@ExcelAttribute(name = "客户名称", maxLength = 50)
@Length(max = 50, message = "客户名称不能超过50个字符")
@ExcelProperty("客户名称")
@Schema(description = "客户名称")
private String unitName;
/**
* 客户编码
*/
@ExcelAttribute(name = "客户编码", maxLength = 32)
@Length(max = 32, message = "客户编码不能超过32个字符")
@ExcelProperty("客户编码")
@Schema(description = "客户编码")
private String unitNo;
/**
* 是否地市自购0是 1 否
*/
@ExcelAttribute(name = "是否地市自购0是 1 否", maxLength = 1)
@Length(max = 1, message = "是否地市自购0是 1 否不能超过1个字符")
@ExcelProperty("是否地市自购0是 1 否")
@Schema(description = "是否地市自购0是 1 否")
private String isAdress;
/**
* 入离职登记id
*/
@ExcelAttribute(name = "入离职登记id", maxLength = 32)
@Length(max = 32, message = "入离职登记id不能超过32个字符")
@ExcelProperty("入离职登记id")
@Schema(description = "入离职登记id")
private String registerId;
/**
* 商险购买地省
*/
@Schema(description = "商险购买地省")
private String insuranceProvinceName;
/**
* 商险购买地市
*/
@Schema(description = "商险购买地市")
private String insuranceCityName;
/**
* 派单时间
*/
@ExcelAttribute(name = "派单时间", isDate = true)
@ExcelProperty("派单时间")
@Schema(description = "派单时间")
@TableField(exist = false)
@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
private Date disTime;
}
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: 查询EKP中的状态,拦截批量保单号保费
* @Author: hgw
* @Date: 2025/8/1 18:02
* @return:
**/
@Data
public class EkpSettleStatusVo implements Serializable {
/**
* 结算状态
**/
private String settleStatus;
/**
* 支出状态
**/
private String payStatus;
}
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author huych
* @description 商险自动化已购买商险明细VO
* @date 2025-8-7 10:20:26
*/
@Data
@Schema(description = "商险自动化已购买商险明细VO")
public class EmployeePreInsuranceListVo implements Serializable {
private static final long serialVersionUID = 628032758008497542L;
private List<TInsurancePreDetail> preList;
}
......@@ -2,11 +2,13 @@ package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @author licancan
......@@ -200,6 +202,9 @@ public class InsuranceAddParam implements Serializable {
@Schema(description = "项目名称")
private String deptName;
@Schema(description = "投标类型")
private Integer buyType;
@Schema(description ="客户id")
private String unitId;
......@@ -214,4 +219,12 @@ public class InsuranceAddParam implements Serializable {
*/
@Schema(description = "是否地市自购")
private String isAdress;
/**
* 是否已有参保明细标识 1是 空否
*/
@Schema(description = "是否已有参保明细标识")
private String isExit;
private List<TInsurancePreDetail> inProgressList;
}
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author huyc
......@@ -25,6 +27,16 @@ public class InsuranceAutoParam implements Serializable {
*/
@Schema(description = "项目编码")
private String deptNo;
/**
* 项目名称
*/
@Schema(description = "项目名称")
private String deptName;
/**
* 投标类型
*/
@Schema(description = "投标类型")
private Integer buyType;
/**
* 员工姓名
......@@ -156,4 +168,12 @@ public class InsuranceAutoParam implements Serializable {
*/
@Schema(description = "前端客服姓名")
private String customerUserName;
/**
* 是否已有参保明细标识 1是 空否
*/
@Schema(description = "是否已有参保明细标识")
private String isExit;
private List<TInsurancePreDetail> inProgressList;
}
......@@ -2,12 +2,14 @@ package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* @author licancan
......@@ -188,15 +190,19 @@ public class InsuranceBatchParam implements Serializable {
/**
* 保单开始时间
*/
@JsonIgnore
private LocalDate policyStart;
/**
* 保单结束时间
*/
@JsonIgnore
private LocalDate policyEnd;
@Schema(description = "项目名称")
private String deptName;
@Schema(description = "投标类型")
private Integer buyType;
/**
* EKP的 是否BPO: 是 否
*/
......@@ -204,9 +210,6 @@ public class InsuranceBatchParam implements Serializable {
@ExcelIgnore
private String bpoFlag;
@Schema(description = "项目名称")
private String deptName;
@Schema(description ="客户id")
private String unitId;
......@@ -221,4 +224,12 @@ public class InsuranceBatchParam implements Serializable {
*/
@Schema(description = "是否地市自购")
private String isAdress;
/**
* 是否已有参保明细标识 1是 空否
*/
@Schema(description = "是否已有参保明细标识")
private String isExit;
private List<TInsurancePreDetail> inProgressList;
}
......@@ -3,10 +3,12 @@ package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author licancan
......@@ -136,6 +138,9 @@ public class InsuranceReplaceParam implements Serializable {
@Schema(description = "项目名称")
private String deptName;
@Schema(description = "投标类型")
private Integer buyType;
@Schema(description ="客户id")
private String unitId;
......@@ -151,11 +156,18 @@ public class InsuranceReplaceParam implements Serializable {
@Schema(description = "是否地市自购")
private String isAdress;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 是否已有参保明细标识 1是 空否
*/
@Schema(description = "是否已有参保明细标识")
private String isExit;
private List<TInsurancePreDetail> inProgressList;
}
......@@ -230,6 +230,13 @@ public class InsuredListVo implements Serializable {
@ExcelIgnore
private Integer insuranceCity;
/**
* 投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员
*/
@Schema(description = "投保办理状态 1待投保 2投保中 3已投保 4投保退回 5 已减员")
@ExcelIgnore
private Integer buyHandleStatus;
/**
* 商险购买地市
*/
......
......@@ -3,6 +3,7 @@ package com.yifu.cloud.plus.v1.yifu.insurances.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationCustomerUserUpdateVo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.EmployeeRegistrationPre;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeRegistrationPreVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
......@@ -12,10 +13,7 @@ import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePre;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TEmployeeInsurancePreService;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.EmployeePreLogListVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreSearchVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsuranceSelectVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
......@@ -162,8 +160,8 @@ public class TEmployeeInsurancePreController {
**/
@Operation(description = "商险派单信息单个/批量派单")
@PostMapping("/batchDispatcherInsurance")
public R batchDispatcherInsurance(@RequestBody List<String> idList) {
return tEmployeeInsurancePreService.batchDispatcherInsurance(idList);
public R batchDispatcherInsurance(@RequestBody List<String> idList,@RequestParam(required = false) String isExit) {
return tEmployeeInsurancePreService.batchDispatcherInsurance(idList, isExit, false);
}
/**
......@@ -190,6 +188,42 @@ public class TEmployeeInsurancePreController {
return tEmployeeInsurancePreService.saveInsurancePreInfo(preVo);
}
/**
* 信息修改入口新增商险已购买明细
* @author huych
* @date 2025-08-14 11:46:16
**/
@Operation(description = "信息修改入口新增商险已购买明细")
@Inner
@PostMapping("/inner/updateInfoSaveInsurancePreInfo")
public Boolean updateInfoSaveInsurancePreInfo(@RequestBody EmployeeRegistrationPre pre) {
return tEmployeeInsurancePreService.updateInfoSaveInsurancePreInfo(pre);
}
/**
* 信息修改入口删除商险已购买明细
* @author huych
* @date 2025-08-14 11:46:16
**/
@Operation(description = "信息修改入口删除商险已购买明细")
@Inner
@PostMapping("/inner/deleteInsurancePreInfo")
public Boolean deleteInsurancePreInfo(@RequestBody EmployeeRegistrationPre pre) {
return tEmployeeInsurancePreService.deleteInsurancePreInfo(pre);
}
/**
* 商险状态是否正常判断
* @author huych
* @date 2025-08-05 16:26:38
**/
@Operation(description = "商险状态是否正常判断")
@Inner
@PostMapping("/inner/checkExitInsuanceIsProcess")
public Boolean checkExitInsuanceIsProcess(@RequestBody EmployeeRegistrationPreVo preVo) {
return tEmployeeInsurancePreService.checkExitInsuanceIsProcess(preVo);
}
/**
* 更新商险待购买的前端客服姓名
* @author huych
......@@ -265,4 +299,17 @@ public class TEmployeeInsurancePreController {
return tEmployeeInsurancePreService.deleteInsuranceByPreId(preId);
}
/**
* @param empPreId 入职确认信息表ID
* @Description: 获取商险已购买信息
* @Author: huych
* @Date: 2025/8/7 10:25
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.util.List < com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail>>
**/
@Inner
@PostMapping("/inner/getExitInsuranceListByEmpPreId")
public EmployeePreInsuranceListVo getExitInsuranceListByEmpPreId(@RequestBody String empPreId){
return tEmployeeInsurancePreService.getExitInsuranceListByEmpPreId(empPreId);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQwDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TEmployeeInsurancePreQwDetailService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/temployeeinsurancepreqwdetail")
@Tag(name = "商险定时失败的企微管理")
public class TEmployeeInsurancePreQwDetailController {
private final TEmployeeInsurancePreQwDetailService tEmployeeInsurancePreQwDetailService;
/**
* 简单分页查询
*
* @param page 分页对象
* @param tEmployeeInsurancePreQwDetail 商险定时失败的企微
* @return
*/
@Operation(description = "简单分页查询")
@GetMapping("/page")
public R<IPage<TEmployeeInsurancePreQwDetail>> getTEmployeeInsurancePreQwDetailPage(Page<TEmployeeInsurancePreQwDetail> page, TEmployeeInsurancePreQwDetail tEmployeeInsurancePreQwDetail) {
if (tEmployeeInsurancePreQwDetail == null) {
tEmployeeInsurancePreQwDetail = new TEmployeeInsurancePreQwDetail();
}
if (Common.isEmpty(tEmployeeInsurancePreQwDetail.getMainId())) {
tEmployeeInsurancePreQwDetail.setMainId(CommonConstants.ZERO_STRING);
}
return new R<>(tEmployeeInsurancePreQwDetailService.getTEmployeeInsurancePreQwDetailPage(page, tEmployeeInsurancePreQwDetail));
}
}
......@@ -14,6 +14,7 @@ import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.constants.InsurancesConstants;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceOperate;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TInsuranceDetailService;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryAccount;
......@@ -874,4 +875,15 @@ public class TInsuranceDetailController {
return R.ok(tInsuranceDetailService.policyPageToAutoSelect(page, param, mId));
}
/**
* 查询在用或者在途的商险数据
* @param empIdcard 身份证号
* @return
*/
@Operation(description = "查询在用或者在途的商险数据")
@PostMapping("/getOnProcessInsurancesInfo")
public R<List<TInsurancePreDetail>> getInProcessInsurancesInfo(@RequestParam String empIdcard) {
return R.ok(tInsuranceDetailService.getOnProcessInsurancesInfo(empIdcard));
}
}
......@@ -47,7 +47,7 @@ public interface EkpSettleMapper {
* @param id
* @return {@link SettleVo}
*/
String getSettleStatusFromEkpInsuranceDetail(String id);
EkpSettleStatusVo getSettleStatusFromEkpInsuranceDetail(String id);
List<EkpInsuranceViewVo> selectSettleStatusBySettleNo(@Param("settleNo") String settleNo, @Param("payFlag") String payFlag);
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQwDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Mapper
public interface TEmployeeInsurancePreQwDetailMapper extends BaseMapper<TEmployeeInsurancePreQwDetail> {
/**
* 商险定时失败的企微简单分页查询
*
* @param tEmployeeInsurancePreQwDetail 商险定时失败的企微
* @return
*/
IPage<TEmployeeInsurancePreQwDetail> getTEmployeeInsurancePreQwDetailPage(Page<TEmployeeInsurancePreQwDetail> page
, @Param("tEmployeeInsurancePreQwDetail") TEmployeeInsurancePreQwDetail tEmployeeInsurancePreQwDetail);
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQw;
import org.apache.ibatis.annotations.Mapper;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Mapper
public interface TEmployeeInsurancePreQwMapper extends BaseMapper<TEmployeeInsurancePreQw> {
}
......@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TSettleDomainSelectVo;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -334,5 +335,9 @@ public interface TInsuranceDetailMapper extends BaseMapper<TInsuranceDetail> {
*/
IPage<InsuredListVo> policyPageToAutoSelect(Page<InsuredListVo> page, @Param("param") InsuredParam param);
/**
* 派单前系统已有在途/在保数据的人员明细
*/
List<TInsurancePreDetail> getOnProcessInsuredList(@Param("empIdCard") String empIdCard);
}
package com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import org.apache.ibatis.annotations.Mapper;
/**
* 入职确认信息已购买商险明细
*
* @author huych
* @date 2025-08-05 15:08:42
*/
@Mapper
public interface TInsurancePreDetailMapper extends BaseMapper<TInsurancePreDetail> {
}
......@@ -36,7 +36,7 @@ public interface EkpSettleService extends IService<TInsuranceTypeRate> {
* @param id 新增类
* @return {@link R}
*/
String getSettleStatusFromEkpInsuranceDetail(String id);
EkpSettleStatusVo getSettleStatusFromEkpInsuranceDetail(String id);
/**
* 根据结算单编号查询商险视图信息
......
......@@ -45,7 +45,7 @@ public class EkpSettleServiceImpl implements EkpSettleService {
}
@Override
public String getSettleStatusFromEkpInsuranceDetail(String id) {
public EkpSettleStatusVo getSettleStatusFromEkpInsuranceDetail(String id) {
return ekpSettleMapper.getSettleStatusFromEkpInsuranceDetail(id);
}
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQwDetail;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
public interface TEmployeeInsurancePreQwDetailService extends IService<TEmployeeInsurancePreQwDetail> {
/**
* 商险定时失败的企微简单分页查询
*
* @param tEmployeeInsurancePreQwDetail 商险定时失败的企微
* @return
*/
IPage<TEmployeeInsurancePreQwDetail> getTEmployeeInsurancePreQwDetailPage(Page<TEmployeeInsurancePreQwDetail> page, TEmployeeInsurancePreQwDetail tEmployeeInsurancePreQwDetail);
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQw;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
public interface TEmployeeInsurancePreQwService extends IService<TEmployeeInsurancePreQw> {
}
......@@ -4,13 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.csp.vo.EmployeeRegistrationCustomerUserUpdateVo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.EmployeeRegistrationPre;
import com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeRegistrationPreVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePre;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.EmployeePreLogListVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreSearchVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsuranceSelectVo;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
......@@ -59,9 +57,10 @@ public interface TEmployeeInsurancePreService extends IService<TEmployeeInsuranc
/**
* 商险派单信息批量派单
* @param idList id集合
* @param sameFlag 是否要做重复人员明细校验的标识 1 不需要 空需要
* @return
*/
R batchDispatcherInsurance(List<String> idList);
R batchDispatcherInsurance(List<String> idList,String sameFlag, boolean pushQiWeiFlag);
/**
* 新增商险待购买信息
......@@ -70,6 +69,17 @@ public interface TEmployeeInsurancePreService extends IService<TEmployeeInsuranc
*/
Boolean saveInsurancePreInfo(EmployeeRegistrationPreVo preVo);
/**
* 信息修改入口新增商险待购买信息
* @param pre
* @return
*/
Boolean updateInfoSaveInsurancePreInfo(EmployeeRegistrationPre pre);
Boolean deleteInsurancePreInfo(EmployeeRegistrationPre pre);
Boolean checkExitInsuanceIsProcess(EmployeeRegistrationPreVo preVo);
TEmployeeInsuranceSelectVo selectInsurancePreInfoList(TEmployeeInsurancePreVo preVo);
void updateInsurancePreCustomerName(EmployeeRegistrationCustomerUserUpdateVo updateVo);
......@@ -101,4 +111,12 @@ public interface TEmployeeInsurancePreService extends IService<TEmployeeInsuranc
**/
boolean deleteInsuranceByPreId(String preId);
/**
* @param empPreId 入职确认信息表ID
* @Description: 获取商险已购买信息
* @Author: huych
* @Date: 2025/8/7 10:25
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.util.List < com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail>>
**/
EmployeePreInsuranceListVo getExitInsuranceListByEmpPreId(String empPreId);
}
......@@ -9,6 +9,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsuranceOperate;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import com.yifu.cloud.plus.v1.yifu.salary.entity.TSalaryAccount;
import com.yifu.cloud.plus.v1.yifu.salary.vo.SalaryRiskListVo;
......@@ -575,5 +576,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> {
*/
IPage<InsuredListVo> policyPageToAutoSelect(Page<InsuredListVo> page, InsuredParam param, String mId);
List<TInsurancePreDetail> getOnProcessInsurancesInfo(String empIdCard);
}
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
/**
* 入职确认信息已购买商险明细
*
* @author huych
* @date 2025-08-05 15:08:42
*/
public interface TInsurancePreDetailService extends IService<TInsurancePreDetail> {
}
......@@ -53,7 +53,7 @@ public class ScheduleServiceImpl implements ScheduleService {
transactionTemplate.execute(status -> {
List<String> idList = new ArrayList<>();
idList.add(aId);
insurancePreService.batchDispatcherInsurance(idList);
insurancePreService.batchDispatcherInsurance(idList,CommonConstants.ONE_STRING, false);
return null;
});
}
......
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQwDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TEmployeeInsurancePreQwDetailMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TEmployeeInsurancePreQwDetailService;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Log4j2
@Service
public class TEmployeeInsurancePreQwDetailServiceImpl extends ServiceImpl<TEmployeeInsurancePreQwDetailMapper, TEmployeeInsurancePreQwDetail> implements TEmployeeInsurancePreQwDetailService {
/**
* 商险定时失败的企微简单分页查询
*
* @param tEmployeeInsurancePreQwDetail 商险定时失败的企微
* @return
*/
@Override
public IPage<TEmployeeInsurancePreQwDetail> getTEmployeeInsurancePreQwDetailPage(Page<TEmployeeInsurancePreQwDetail> page, TEmployeeInsurancePreQwDetail tEmployeeInsurancePreQwDetail) {
return baseMapper.getTEmployeeInsurancePreQwDetailPage(page, tEmployeeInsurancePreQwDetail);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQw;
import com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TEmployeeInsurancePreQwMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TEmployeeInsurancePreQwService;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
/**
* 商险定时失败的企微
*
* @author hgw
* @date 2025-08-07 17:49:14
*/
@Log4j2
@Service
public class TEmployeeInsurancePreQwServiceImpl extends ServiceImpl<TEmployeeInsurancePreQwMapper, TEmployeeInsurancePreQw> implements TEmployeeInsurancePreQwService {
}
package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail;
import com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TInsurancePreDetailMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TInsurancePreDetailService;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
/**
* 入职确认信息已购买商险明细
*
* @author huych
* @date 2025-08-05 15:08:42
*/
@Log4j2
@Service
public class TInsurancePreDetailServiceImpl extends ServiceImpl<TInsurancePreDetailMapper, TInsurancePreDetail> implements TInsurancePreDetailService {
}
......@@ -40,6 +40,7 @@ security:
- /actuator/**
- /swagger-ui/**
- /insuranceDetail/urgentUpdateIsUse
- /temployeeinsurancepreqwdetail/page
# 文件上传相关 支持阿里云、华为云、腾讯、minio
......
......@@ -61,9 +61,9 @@
group by fd_3b0a5743acab7e
</select>
<select id="getSettleStatusFromEkpInsuranceDetail" resultType="java.lang.String">
<select id="getSettleStatusFromEkpInsuranceDetail" resultType="com.yifu.cloud.plus.v1.yifu.insurances.vo.EkpSettleStatusVo">
select
fd_3adfe6ec6a8cbe
fd_3adfe6ec6a8cbe settleStatus,fd_3adfe6eda67236 payStatus
from
ekp_insurances_info
where
......
......@@ -48,6 +48,8 @@
<result property="updateTime" column="update_time"/>
<result property="registTime" column="regist_time"/>
<result property="registUser" column="regist_user"/>
<result property="errorInfo" column="error_info"/>
<result property="errorTime" column="error_time"/>
</resultMap>
<resultMap id="tEmployeeInsurancePreExportMap" type="com.yifu.cloud.plus.v1.yifu.insurances.vo.TEmployeeInsurancePreExportVo">
......@@ -101,7 +103,7 @@
a.create_name,
a.create_time,
a.update_by,
a.update_time,a.policy_no,a.config_name,a.policy_effect,a.insurances_id,a.regist_time,a.regist_user,a.config_id
a.update_time,a.policy_no,a.config_name,a.policy_effect,a.insurances_id,a.regist_time,a.regist_user,a.config_id,a.error_info,a.error_time
</sql>
<sql id="tEmployeeInsurancePre_where">
<if test="tEmployeeInsurancePre != null">
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TEmployeeInsurancePreQwDetailMapper">
<resultMap id="tEmployeeInsurancePreQwDetailMap" type="com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQwDetail">
<id property="id" column="ID"/>
<result property="mainId" column="MAIN_ID"/>
<result property="empName" column="EMP_NAME"/>
<result property="empIdcard" column="EMP_IDCARD"/>
<result property="errorInfo" column="ERROR_INFO"/>
<result property="errorTime" column="ERROR_TIME"/>
<result property="preId" column="PRE_ID"/>
</resultMap>
<sql id="Base_Column_List">
a.ID,
a.MAIN_ID,
a.EMP_NAME,
a.EMP_IDCARD,
a.ERROR_INFO,
a.ERROR_TIME,
a.PRE_ID
</sql>
<sql id="tEmployeeInsurancePreQwDetail_where">
<if test="tEmployeeInsurancePreQwDetail != null">
<if test="tEmployeeInsurancePreQwDetail.id != null and tEmployeeInsurancePreQwDetail.id.trim() != ''">
AND a.ID = #{tEmployeeInsurancePreQwDetail.id}
</if>
<if test="tEmployeeInsurancePreQwDetail.mainId != null and tEmployeeInsurancePreQwDetail.mainId.trim() != ''">
AND a.MAIN_ID = #{tEmployeeInsurancePreQwDetail.mainId}
</if>
<if test="tEmployeeInsurancePreQwDetail.empName != null and tEmployeeInsurancePreQwDetail.empName.trim() != ''">
AND a.EMP_NAME = #{tEmployeeInsurancePreQwDetail.empName}
</if>
<if test="tEmployeeInsurancePreQwDetail.empIdcard != null and tEmployeeInsurancePreQwDetail.empIdcard.trim() != ''">
AND a.EMP_IDCARD = #{tEmployeeInsurancePreQwDetail.empIdcard}
</if>
<if test="tEmployeeInsurancePreQwDetail.errorInfo != null and tEmployeeInsurancePreQwDetail.errorInfo.trim() != ''">
AND a.ERROR_INFO = #{tEmployeeInsurancePreQwDetail.errorInfo}
</if>
<if test="tEmployeeInsurancePreQwDetail.errorTime != null">
AND a.ERROR_TIME = #{tEmployeeInsurancePreQwDetail.errorTime}
</if>
<if test="tEmployeeInsurancePreQwDetail.preId != null and tEmployeeInsurancePreQwDetail.preId.trim() != ''">
AND a.PRE_ID = #{tEmployeeInsurancePreQwDetail.preId}
</if>
</if>
</sql>
<!--tEmployeeInsurancePreQwDetail简单分页查询-->
<select id="getTEmployeeInsurancePreQwDetailPage" resultMap="tEmployeeInsurancePreQwDetailMap">
SELECT
<include refid="Base_Column_List"/>
FROM t_employee_insurance_pre_qw_detail a
<where>
1=1
<include refid="tEmployeeInsurancePreQwDetail_where"/>
</where>
order by a.id
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TEmployeeInsurancePreQwMapper">
<resultMap id="tEmployeeInsurancePreQwMap"
type="com.yifu.cloud.plus.v1.yifu.insurances.entity.TEmployeeInsurancePreQw">
<id property="id" column="ID"/>
<result property="customerUsername" column="customer_username"/>
<result property="customerUserLoginname" column="customer_user_loginname"/>
<result property="description" column="description"/>
</resultMap>
<sql id="Base_Column_List">
a.id,
a.customer_username,
a.customer_user_loginname,
a.description
</sql>
<sql id="tEmployeeInsurancePreQw_where">
<if test="tEmployeeInsurancePreQw != null">
<if test="tEmployeeInsurancePreQw.id != null and tEmployeeInsurancePreQw.id.trim() != ''">
AND a.ID = #{tEmployeeInsurancePreQw.id}
</if>
<if test="tEmployeeInsurancePreQw.customerUsername != null and tEmployeeInsurancePreQw.customerUsername.trim() != ''">
AND a.customer_username = #{tEmployeeInsurancePreQw.customerUsername}
</if>
<if test="tEmployeeInsurancePreQw.customerUserLoginname != null and tEmployeeInsurancePreQw.customerUserLoginname.trim() != ''">
AND a.customer_user_loginname = #{tEmployeeInsurancePreQw.customerUserLoginname}
</if>
<if test="tEmployeeInsurancePreQw.description != null and tEmployeeInsurancePreQw.description.trim() != ''">
AND a.description = #{tEmployeeInsurancePreQw.description}
</if>
</if>
</sql>
</mapper>
......@@ -593,6 +593,38 @@
</foreach>
</update>
<!-- 派单人员系统已有参保明细查询-->
<select id="getOnProcessInsuredList" resultType="com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail">
select
a.id as id,
a.EMP_NAME as empName,
a.EMP_IDCARD_NO as empIdcardNo,
a.BUY_TYPE as buyType,
a.DEPT_NO as deptNo,
a.DEPT_NAME as deptName,
a.POST as post,
a.POLICY_START as policyStart,
a.POLICY_END as policyEnd,
a.POLICY_EFFECT as policyEffect,
a.INSURANCE_COMPANY_NAME as insuranceCompanyName,
a.INSURANCE_TYPE_NAME as insuranceTypeName,
a.BUY_STANDARD as buyStandard,
a.BUY_HANDLE_STATUS as buyHandleStatus,
a.CREATE_TIME as createTime,
a.CREATE_NAME as createName,
a.UNIT_NAME as unitName,
a.UNIT_NO as unitNo,
a.IS_ADRESS as isAdress,
a.INSURANCE_PROVINCE_NAME as insuranceProvinceName,
a.INSURANCE_CITY_NAME as insuranceCityName
from
t_insurance_detail a
where
a.DELETE_FLAG = 0
and (a.BUY_HANDLE_STATUS in (1,2) or (a.BUY_HANDLE_STATUS = 3 and a.IS_EFFECT = 0 and a.IS_OVERDUE = 0))
AND EMP_IDCARD_NO = #{empIdCard}
</select>
<!-- ***********************减员办理******************************** -->
<!-- 已投保列表分页查询-->
<select id="getInsuredListPage" resultType="com.yifu.cloud.plus.v1.yifu.insurances.vo.InsuredListVo">
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances.TInsurancePreDetailMapper">
<resultMap id="tInsurancePreDetailMap" type="com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePreDetail">
<id property="id" column="ID"/>
<result property="empName" column="EMP_NAME"/>
<result property="empIdcardNo" column="EMP_IDCARD_NO"/>
<result property="deptNo" column="DEPT_NO"/>
<result property="post" column="POST"/>
<result property="insuranceCompanyName" column="INSURANCE_COMPANY_NAME"/>
<result property="insuranceTypeName" column="INSURANCE_TYPE_NAME"/>
<result property="buyStandard" column="BUY_STANDARD"/>
<result property="policyStart" column="POLICY_START"/>
<result property="policyEnd" column="POLICY_END"/>
<result property="policyEffect" column="POLICY_EFFECT"/>
<result property="buyType" column="BUY_TYPE"/>
<result property="buyHandleStatus" column="BUY_HANDLE_STATUS"/>
<result property="createBy" column="CREATE_BY"/>
<result property="createName" column="CREATE_NAME"/>
<result property="createTime" column="CREATE_TIME"/>
<result property="updateBy" column="UPDATE_BY"/>
<result property="updateTime" column="UPDATE_TIME"/>
<result property="deptName" column="DEPT_NAME"/>
<result property="unitName" column="UNIT_NAME"/>
<result property="unitNo" column="UNIT_NO"/>
<result property="isAdress" column="IS_ADRESS"/>
<result property="registerId" column="REGISTER_ID"/>
</resultMap>
</mapper>
......@@ -109,4 +109,18 @@ public class ArchiveTask {
log.info("-------------每日刷新运营风险管控数据-定时任务开始------------");
}
/**
* @Author fxj
* @Description 每天10点刷新合同续签待办信息到微信
* @Date 16:06 2025/8/15
* @Param
* @return
**/
public void everyDaypushContractAlertToWx() {
log.info("-------------每天刷新合同续签待办信息到微信-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(), daprArchivesProperties.getAppId(),
"/tempcontractalert/inner/pushContractAlertToWx","", Void.class, SecurityConstants.FROM_IN);
log.info("-------------每天刷新合同续签待待办信息到微信-定时任务结束------------");
}
}
\ No newline at end of file
......@@ -48,6 +48,7 @@ public interface TSalaryEmployeeMapper extends BaseMapper<TSalaryEmployee> {
List<TSalaryEmployeeExportVo> noPageDiy( @Param("tSalaryEmployee") TSalaryEmployeeSearchVo searchVo, @Param("idList")List<String> idList);
List<TSalaryEmployee> getListByIdCard(@Param("idCardList") List<String> idCardList);
List<TSalaryEmployee> getListByPhone(@Param("phoneList") List<String> phoneList);
TSalaryEmployee getByEmpIdCard(@Param("empIdCard") String empIdCard);
......
......@@ -71,7 +71,7 @@ public interface TSalaryEmployeeService extends IService<TSalaryEmployee> {
* @Date: 2023/2/9 14:57
* @return: java.lang.String
**/
String saveNewEmployeeList(List<TSalaryEmployee> saveNewEmpList, List<ErrorMessage> errorList);
String saveNewEmployeeList(List<TSalaryEmployee> saveNewEmpList, List<ErrorMessage> errorList, Map<String, Integer> phoneExcelMap);
/**
* @Description: 更新卡号等信息
......@@ -79,7 +79,8 @@ public interface TSalaryEmployeeService extends IService<TSalaryEmployee> {
* @Date: 2024/7/22 10:27
* @return: java.lang.String
**/
String updateEmployeeBankList(List<TSalaryEmployee> updateEmpBankList, Map<String, TSalaryEmployee> updateEmpBankMap, List<ErrorMessage> errorList);
String updateEmployeeBankList(List<TSalaryEmployee> updateEmpBankList, Map<String, TSalaryEmployee> updateEmpBankMap
, List<ErrorMessage> errorList, Map<String, Integer> phoneExcelMap);
/**
* @param inputStream
......
......@@ -633,13 +633,18 @@ public class SalaryAccountUtil implements Serializable {
}
}
if (canSave) {
// 查本表重
Map<String, Integer> phoneExcelMap = new HashMap<>();
// 新增
if (!saveNewEmpList.isEmpty()) {
tSalaryEmployeeService.saveNewEmployeeList(saveNewEmpList, errorList);
tSalaryEmployeeService.saveNewEmployeeList(saveNewEmpList, errorList, phoneExcelMap);
}
// 更新人员信息
if (!updateEmpBankList.isEmpty()) {
tSalaryEmployeeService.updateEmployeeBankList(updateEmpBankList, updateEmpBankMap, errorList);
tSalaryEmployeeService.updateEmployeeBankList(updateEmpBankList, updateEmpBankMap, errorList, phoneExcelMap);
}
if (phoneExcelMap != null && !phoneExcelMap.isEmpty()) {
phoneExcelMap.clear();
}
}
}
......@@ -774,7 +779,7 @@ public class SalaryAccountUtil implements Serializable {
entity.setEmpId(emp.getId());
entity.setEmpIdcard(emp.getEmpIdcard());
entity.setEmpName(emp.getEmpName());
entity.setEmpPhone(emp.getEmpPhone());
// hgs 2024-7-19 09:33:29 新增按照页面开关与新员工字段,来更新员工信息:
if (SalaryConstants.SALARY_STYLE_BANK.equals(salaryStyle)) {
if (CommonConstants.ONE_STRING.equals(newEmpUpdateFlag) && isNewEmployee) {
......@@ -830,6 +835,10 @@ public class SalaryAccountUtil implements Serializable {
String areaInt = ExcelUtil.getRedisAreaValue(CacheConstants.AREA_VALUE + emp.getBankProvince().trim());
if (Common.isNotNull(areaInt)) {
entity.setBankProvince(areaInt);
} else {
error = "第" + i + SalaryConstants.LINE_EMP + emp.getEmpIdcard() + "-开户行省错误,请在工资模板正确填写!";
errorList.add(new ErrorMessage(i, error));
return true;
}
String areaCityInt = null;
if (Common.isNotNull(emp.getBankCity())) {
......@@ -837,6 +846,10 @@ public class SalaryAccountUtil implements Serializable {
+ CommonConstants.DOWN_LINE_STRING + emp.getBankProvince().trim());
if (Common.isNotNull(areaCityInt)) {
entity.setBankCity(areaCityInt);
} else {
error = "第" + i + SalaryConstants.LINE_EMP + emp.getEmpIdcard() + "-开户行市错误或开户行市不在开户行省内,请在工资模板正确填写!";
errorList.add(new ErrorMessage(i, error));
return true;
}
}
}
......@@ -853,6 +866,14 @@ public class SalaryAccountUtil implements Serializable {
errorList.add(new ErrorMessage(i, error));
return true;
}
// 2025-8-5 17:29:33 以本表为准,且写了是新员工,新增手机号也用表里的 倩倩与荣珍同意
if (Common.isNotNull(entity.getEmpPhone())){
emp.setEmpPhone(entity.getEmpPhone());
} else {
error = "第" + i + SalaryConstants.LINE_EMP + emp.getEmpIdcard() + "-新员工以本次导入为准,手机号不可为空,请在工资模板正确填写!";
errorList.add(new ErrorMessage(i, error));
return true;
}
updateEmpBankList.add(emp);
} else if (salaryGiveTimeFlag) {
if (Common.isEmpty(emp.getBankName())) {
......@@ -880,11 +901,17 @@ public class SalaryAccountUtil implements Serializable {
errorList.add(new ErrorMessage(i, error));
return true;
}
if (Common.isEmpty(emp.getEmpPhone())) {
error = "第" + i + SalaryConstants.LINE_EMP + emp.getEmpIdcard() + "-发放方式为银行发放,但是-手机号-为空,请去薪酬人员查询处更新!";
errorList.add(new ErrorMessage(i, error));
return true;
}
entity.setBankName(emp.getBankName());
entity.setBankNo(emp.getBankNo());
entity.setBankProvince(String.valueOf(emp.getBankProvince()));
entity.setBankCity(String.valueOf(emp.getBankCity()));
entity.setBankSubName(emp.getBankSubName());
entity.setEmpPhone(emp.getEmpPhone());
} else {
if (Common.isNotNull(emp.getBankName())) {
if (bankMap.get(emp.getBankName()) == null) {
......@@ -916,7 +943,10 @@ public class SalaryAccountUtil implements Serializable {
} else {
entity.setBankCity(null);
}
entity.setEmpPhone(emp.getEmpPhone());
}
} else {
entity.setEmpPhone(emp.getEmpPhone());
}
if (!"3".equals(salaryType) && !"4".equals(salaryType)) {
if (emp.getTaxMonth().length() > CommonConstants.dingleDigitIntArray[6]) {
......@@ -1239,12 +1269,20 @@ public class SalaryAccountUtil implements Serializable {
areaStr = ExcelUtil.getRedisAreaValue(CacheConstants.AREA_VALUE + entity.getBankProvince().trim());
if (Common.isNotNull(areaStr)) {
newEmp.setBankProvince(areaStr);
} else {
error = "第" + i + "行:" + newEmpStr + "-开户行省错误:" + entity.getBankProvince();
errorList.add(new ErrorMessage(i, error));
return false;
}
if (Common.isNotNull(entity.getBankCity())) {
areaStr = ExcelUtil.getRedisAreaValue(CacheConstants.AREA_VALUE + entity.getBankCity().trim()
+ CommonConstants.DOWN_LINE_STRING + entity.getBankProvince().trim());
if (Common.isNotNull(areaStr)) {
newEmp.setBankCity(areaStr);
} else {
error = "第" + i + "行:" + newEmpStr + "-开户行市错误:" + entity.getBankCity();
errorList.add(new ErrorMessage(i, error));
return false;
}
}
}
......
......@@ -256,6 +256,19 @@
</if>
</select>
<!-- 按手机号查询全部人员 -->
<select id="getListByPhone" resultMap="tSalaryEmployeeMap" >
<if test="phoneList != null and phoneList.size>0">
SELECT
<include refid="Base_Column_List"/>
FROM t_salary_employee a
where a.EMP_PHONE in
<foreach item="idStr" index="index" collection="phoneList" open="(" separator="," close=")">
#{idStr}
</foreach>
</if>
</select>
<!-- 按身份证查询人员 -->
<select id="getByEmpIdCard" resultMap="tSalaryEmployeeMap" >
SELECT
......
......@@ -65,7 +65,7 @@ public class TSocialFriendBackLog {
/**
* @Description: 类型1社保增 2社保减 3医保增 4医保减 5推送的日志 6社保图片路径7医保图片路径
* 8社保解除劳动合同9医保解除劳动合同11社保增拉取 12社保减拉取 13医保增拉取 14医保减拉取16社保单个图片17医保单个图片
* 8社保解除劳动合同9医保解除劳动合同11社保增拉取 12社保减拉取 13医保增拉取 14医保减拉取16社保单个图片17医保单个图片 18 反馈附件下载
* @Author: hgw
* @Date: 2025/5/27 10:15
**/
......@@ -89,4 +89,13 @@ public class TSocialFriendBackLog {
@Schema(description = "创建时间")
private LocalDateTime createTime;
/**
* 任务状态
*/
@ExcelAttribute(name = "任务状态")
@ExcelProperty("任务状态")
@Schema(description = "任务状态")
private String status;
}
......@@ -1231,6 +1231,16 @@ public class TSocialFundInfo extends BaseEntity {
@ExcelProperty("派单ID" )
private String dispatchId;
/**
* 社保ID(取值最新办理成功的社保ID)
*/
@Length(max = 32, message = "社保ID(取值最新办理成功的社保ID) 不能超过32个字符" )
@ExcelAttribute(name = "社保ID(取值最新办理成功的社保ID)", maxLength = 32)
@Schema(description = "社保ID(取值最新办理成功的社保ID)" )
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保ID(取值最新办理成功的社保ID)" )
private String socialIdSuccess;
// 执行月份,整体调基使用的
@TableField(exist = false)
private String doMonth;
......
......@@ -141,7 +141,7 @@ public class FundHandleExportVo implements Serializable {
* 公积金停缴日期
*/
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "公积金停缴日期", isDate = true,needExport = true)
@Schema(description = "公积金停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
......
......@@ -75,4 +75,15 @@ public class SocialSoldierBackVo implements Serializable {
private String socialHouseholdName;
/**
* 请求ID
*/
@ExcelAttribute(name = "请求ID", needExport = true)
@Schema(description = "请求ID")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("请求ID")
private String requestId;
}
......@@ -219,7 +219,7 @@ public class TDispatchAuditExportVo {
/**
* 社保停缴日期
*/
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "社保停缴日期", isDate = true)
@Schema(description = "社保停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
......@@ -229,7 +229,7 @@ public class TDispatchAuditExportVo {
/**
* 公积金停缴日期
*/
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "公积金停缴日期", isDate = true)
@Schema(description = "公积金停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
......
......@@ -175,7 +175,7 @@ public class TDispatchInfoExportVo {
/**
* 社保停缴日期
*/
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "社保停缴日期", isDate = true)
@Schema(description = "社保停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
......@@ -195,7 +195,7 @@ public class TDispatchInfoExportVo {
/**
* 公积金停缴日期
*/
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "公积金停缴日期", isDate = true)
@Schema(description = "公积金停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
......
......@@ -68,20 +68,20 @@ public class TDispatchReduceVo extends RowIndex implements Serializable {
/**
* 社保停缴日期
*/
@ExcelAttribute(name = "社保停缴日期", isDate = true)
@ExcelAttribute(name = "社保停缴日期", isDate = false)
@Schema(description = "社保停缴日期:购买社保时必填" )
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保停缴日期" )
private Date socialReduceDate;
private String socialReduceDate;
/**
* 公积金停缴日期
*/
@ExcelAttribute(name = "公积金停缴日期", isDate = true)
@ExcelAttribute(name = "公积金停缴日期", isDate = false)
@Schema(description = "公积金停缴日期" )
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("公积金停缴日期" )
private Date fundReduceDate;
private String fundReduceDate;
/**
* 离职日期
......
package com.yifu.cloud.plus.v1.yifu.social.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @description 派单办理失败发送企微消息
* @date 2025-8-1 11:22:43
*/
@Data
@Schema(description = "派单办理失败发送企微消息")
public class TSocialAlert {
@Schema(description = "客服ID")
private String createBy;
@Schema(description = "客服姓名")
private String createName;
@Schema(description = "社保条数")
private int socialNum;
@Schema(description = "公积金条数")
private int fundNum;
}
\ No newline at end of file
......@@ -249,14 +249,14 @@ public class TSocialFundInfoExportVo extends RowIndex implements Serializable {
@ExcelProperty("公积金起缴日期")
private Date providentStart;
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "社保停缴日期", isDate = true)
@Schema(description = "社保停缴日期")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保停缴日期")
private Date socialReduceDate;
@DateTimeFormat("yyyy-MM-dd")
@DateTimeFormat("yyyyMM")
@ExcelAttribute(name = "公积金停缴日期", isDate = true)
@Schema(description = "公积金停缴日期")
@HeadFontStyle(fontHeightInPoints = 11)
......
......@@ -11,10 +11,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.social.entity.SysHouseHoldInfo;
import com.yifu.cloud.plus.v1.yifu.social.entity.TSocialFriendBackLog;
import com.yifu.cloud.plus.v1.yifu.social.vo.FriendResult;
import com.yifu.cloud.plus.v1.yifu.social.vo.SociaFriendYgsAddVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.SocialSoldierBackVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.SocialSoldierExportVo;
import com.yifu.cloud.plus.v1.yifu.social.vo.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
......@@ -777,7 +774,6 @@ public class SocialFriendConfig {
public HashMap<String, String> getDownloadEmployeeAsync(RestTemplate restTemplate, SysHouseHoldInfo houseHold,
SocialSoldierBackVo backVo) {
HashMap<String, String> result = new HashMap<>();
try {
// 构建请求头
HttpHeaders headers = buildCommonHeaders(null);
......@@ -797,9 +793,6 @@ public class SocialFriendConfig {
if ("Y".equals(head.getString("status"))) {
String requestId = JSON.parseObject(response.getString("body")).getString("requestId");
result.put(backVo.getSocialId(), requestId);
/*if (Common.isNotNull(requestId)) {
urls.addAll(getDownloadFeedbackUrls(restTemplate, requestId));
}*/
}
}
......@@ -834,11 +827,7 @@ public class SocialFriendConfig {
private JSONObject buildDownloadRequestJson(SysHouseHoldInfo vo, SocialSoldierBackVo exportVo) {
JSONObject json = new JSONObject();
/*json.put("bizNo", "211429621163811844098020250715-172343");
json.put("qymc", "安徽皖信人力资源管理有限公司0");
json.put("nsrsbh", "91340152570242449C");
json.put("areaid", "340100");*/
json.put("bizNo", exportVo.getSocialId());
json.put("bizNo", exportVo.getSocialId() + DateUtil.getThisTime());
json.put("qymc", vo.getName());
json.put("nsrsbh", vo.getUnitCreditCode());
json.put("areaid", vo.getAreaCode());
......@@ -877,18 +866,26 @@ public class SocialFriendConfig {
}
// 获取反馈 URL 列表
public List<String> getDownloadFeedbackUrls(RestTemplate restTemplate, String requestId) {
public FeedBackUrlVo getDownloadFeedbackUrls(RestTemplate restTemplate, String requestId, List<TSocialFriendBackLog> backLogList, String socialId) {
FeedBackUrlVo result = new FeedBackUrlVo();
List<String> urls = new ArrayList<>();
if (null == backLogList){
backLogList = new ArrayList<>();
}
String downloadEmployeeFeedbackUrl = urlPre + urlDownloadEmployeeFeedback + "?requestId=" + requestId;
int retryCount = 0;
final int maxRetries = 2;
final int maxRetries = 4;
final long delayMillis = 2000; // 2 seconds
TSocialFriendBackLog backLog;
JSONObject dataObject = null;
String msg = "";
String zt= "0";
try {
// 构建请求头
HttpHeaders headers = buildCommonHeaders(requestId);
// 构建请求体
HttpEntity<String> formEntity = new HttpEntity<>(headers);
//具体的项目办理状态:1-处理中,2-处理成功,3-处理失败 如果是处理中继续重试2次,处理成功则返回反馈URL
while (retryCount <= maxRetries) {
ResponseEntity<String> response = restTemplate.exchange(
......@@ -896,39 +893,52 @@ public class SocialFriendConfig {
// 处理返回值
if (response != null && response.getStatusCodeValue() == 200) {
JSONObject dataObject = JSON.parseObject(response.getBody());
dataObject = JSON.parseObject(response.getBody());
String head = dataObject.getString("head");
if (Common.isNotNull(head)) {
JSONObject headObject = JSON.parseObject(head);
if ("Y".equals(headObject.getString("status"))) {
JSONObject bodyObject = JSON.parseObject(dataObject.getString("body"));
String ryywbljglb = bodyObject.getString("ryywbljglb");
JSONArray ryywbljglbArr = JSON.parseArray(ryywbljglb);
if (ryywbljglbArr != null && !ryywbljglbArr.isEmpty()){
for (Object itemObj : ryywbljglbArr) {
JSONObject ryywbljglbItem = (JSONObject) itemObj;
JSONArray blxmjglbArr = JSON.parseArray(ryywbljglbItem.getString("blxmjglb"));
if (blxmjglbArr != null && !blxmjglbArr.isEmpty()){
for (Object blxmjglbObj : blxmjglbArr) {
JSONObject blxmjglbItem = (JSONObject) blxmjglbObj;
JSONArray jgmxlbArr = JSON.parseArray(blxmjglbItem.getString("jgmxlb"));
if (jgmxlbArr != null && !jgmxlbArr.isEmpty()){
for (Object jgmxlbObj : jgmxlbArr) {
JSONObject jgmxlbItem = (JSONObject) jgmxlbObj;
JSONArray wjdzlb = jgmxlbItem.getJSONArray("wjdzlb");
if (wjdzlb != null && !wjdzlb.isEmpty()) {
urls.addAll(wjdzlb.toJavaList(String.class));
//1:处理中 2:成功 3:失败
zt = bodyObject.getString("zt");
if ("2".equals(zt)){
String ryywbljglb = bodyObject.getString("ryywbljglb");
JSONArray ryywbljglbArr = JSON.parseArray(ryywbljglb);
if (ryywbljglbArr != null && !ryywbljglbArr.isEmpty()){
for (Object itemObj : ryywbljglbArr) {
JSONObject ryywbljglbItem = (JSONObject) itemObj;
JSONArray blxmjglbArr = JSON.parseArray(ryywbljglbItem.getString("blxmjglb"));
if (blxmjglbArr != null && !blxmjglbArr.isEmpty()){
for (Object blxmjglbObj : blxmjglbArr) {
JSONObject blxmjglbItem = (JSONObject) blxmjglbObj;
//具体的项目办理状态:1-处理中,2-处理成功,3-处理失败
zt = blxmjglbItem.getString("zt");
if ("2".equals(zt)){
JSONArray jgmxlbArr = JSON.parseArray(blxmjglbItem.getString("jgmxlb"));
if (jgmxlbArr != null && !jgmxlbArr.isEmpty()){
for (Object jgmxlbObj : jgmxlbArr) {
JSONObject jgmxlbItem = (JSONObject) jgmxlbObj;
JSONArray wjdzlb = jgmxlbItem.getJSONArray("wjdzlb");
if (wjdzlb != null && !wjdzlb.isEmpty()) {
urls.addAll(wjdzlb.toJavaList(String.class));
}
}
}
}else {
msg = bodyObject.getString("cwxx");
}
}
}
}
}
}else {
msg = bodyObject.getString("cwxx");
}
}
}
// 先记录每次的反馈请求
}
// 如果成功获取到数据,则跳出循环
......@@ -936,9 +946,9 @@ public class SocialFriendConfig {
break;
}
// 如果没有获取到数据,等待一段时间后重试
if (retryCount < maxRetries) {
Thread.sleep(delayMillis);
// 如果没有获取到数据,等待一段时间后重试 (处理中重试)
if (retryCount < maxRetries && zt.equals("1")) {
Thread.sleep(delayMillis*retryCount);
retryCount++;
} else {
break;
......@@ -947,8 +957,19 @@ public class SocialFriendConfig {
} catch (Exception e) {
log.error("获取税友人员审核查询证明文件反馈链接失败", e);
}
return urls;
backLog = new TSocialFriendBackLog();
backLog.setId(socialId);
backLog.setRequestId(requestId);
backLog.setSocialId(socialId);
backLog.setStatus(zt);
backLog.setType(18);
backLog.setLogInfo(null==dataObject?"":dataObject.toJSONString());
backLog.setCreateTime(LocalDateTime.now());
backLogList.add(backLog);
result.setUrls(urls);
result.setRequestId(requestId);
result.setMsg(msg);
return result;
}
......
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