添加证件到期提醒功能和消息推送机制

main
zhangyue 2026-03-20 08:41:10 +08:00
parent 7d5f4223e2
commit 6ea7611c36
22 changed files with 534 additions and 2 deletions

View File

@ -26,5 +26,9 @@
<groupId>com.zcloud.certificate</groupId> <groupId>com.zcloud.certificate</groupId>
<artifactId>web-client</artifactId> <artifactId>web-client</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-job</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireFifteenDayCopyJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前15天-抄送上级",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireFifteenDayCopyJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前15天-抄送上级==========");
userCertificateService.listExpireCertCopy("15");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireFifteenDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前15天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireFifteenDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前15天==========");
userCertificateService.listExpireCert("15");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireNinetyDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前90天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireNinetyDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前90天==========");
userCertificateService.listExpireCert("90");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,34 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireOneDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前1天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireOneDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前1天==========");
userCertificateService.listExpireCert("1");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireSevenDayCopyJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前7天-抄送上级",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireSevenDayCopyJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前7天-抄送上级==========");
userCertificateService.listExpireCertCopy("7");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireSevenDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前7天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireSevenDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前7天==========");
userCertificateService.listExpireCert("7");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireThirtyDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前30天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireThirtyDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前30天==========");
userCertificateService.listExpireCert("30");
return ReturnT.SUCCESS;
}
}

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.certificate.api.UserCertificateServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@RequiredArgsConstructor
@Component
@Slf4j
public class ExpireThreeDayJob implements Job {
@Autowired
private UserCertificateServiceI userCertificateService;
@Override
@JobRegister(cron = "0 30 8 * * ?", jobDesc = "持证人员证件到期提醒-提前3天",triggerStatus = 1)
@XxlJob("com.zcloud.certificate.plan.ExpireThreeDayJob")
public ReturnT<String> execute(String param) {
System.out.println("开始执行计划任务");
XxlJobHelper.log( "============持证人员证件到期提醒-提前3天==========");
userCertificateService.listExpireCert("3");
return ReturnT.SUCCESS;
}
}

View File

@ -56,6 +56,13 @@ public class CorpCertificateController {
return corpCertificateService.list(qry); return corpCertificateService.list(qry);
} }
@ApiOperation("所有数据")
@GetMapping("/sendMessage")
public void sendMessage() {
corpCertificateService.sendMessage();
}
@ApiOperation("详情") @ApiOperation("详情")
@GetMapping("/getInfoById") @GetMapping("/getInfoById")
public SingleResponse<CorpCertificateCO> getInfoById(@RequestParam(value = "id") Long id) { public SingleResponse<CorpCertificateCO> getInfoById(@RequestParam(value = "id") Long id) {

View File

@ -2,18 +2,27 @@ package com.zcloud.certificate.command;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser; import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.message.client.message.facede.MessageFacade;
import com.jjb.saas.message.client.message.request.MessageSendCmd;
import com.jjb.saas.message.client.message.request.MessageTargetCmd;
import com.zcloud.certificate.domain.gateway.CorpCertificateGateway; import com.zcloud.certificate.domain.gateway.CorpCertificateGateway;
import com.zcloud.certificate.domain.model.CorpCertificateE; import com.zcloud.certificate.domain.model.CorpCertificateE;
import com.zcloud.certificate.dto.CorpCertificateAddCmd; import com.zcloud.certificate.dto.CorpCertificateAddCmd;
import com.alibaba.cola.exception.BizException; import com.alibaba.cola.exception.BizException;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO; import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import com.zcloud.gbscommon.utils.UuidUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.Map;
/** /**
* web-app * web-app
@ -51,5 +60,24 @@ public class CorpCertificateAddExe {
} }
return true; return true;
} }
@DubboReference
private final MessageFacade messageFacade;
@Transactional(rollbackFor = Exception.class)
public void sendMessage() {
MessageSendCmd messageSendCmd = new MessageSendCmd();
messageSendCmd.setBusinessId(UuidUtil.get32UUID());
MessageTargetCmd messageTargetCmd = new MessageTargetCmd();
messageTargetCmd.setUserId(2029741219479408640L);
messageSendCmd.setTargetCmd(messageTargetCmd);
messageSendCmd.setSourceCode("MS000093");
messageSendCmd.setNeedTokenEnum(false);
Map<String, Object> sendParams = new HashMap<String, Object>();
sendParams.put("Name", "1");
sendParams.put("DocumentName", "2");
sendParams.put("IdentificationNumber", "3");
sendParams.put("MaturityDate", "5");
messageSendCmd.setParams(sendParams);
SingleResponse<Boolean> d = messageFacade.send(messageSendCmd);
}
} }

View File

@ -1,10 +1,16 @@
package com.zcloud.certificate.command.query; package com.zcloud.certificate.command.query;
import cn.hutool.log.Log;
import com.alibaba.cola.dto.SingleResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jjb.saas.framework.auth.model.SSOUser; import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.jjb.saas.message.client.message.facede.MessageFacade;
import com.jjb.saas.message.client.message.request.MessageSendCmd;
import com.jjb.saas.message.client.message.request.MessageTargetCmd;
import com.zcloud.certificate.command.convertor.UserCertificateCoConvertor; import com.zcloud.certificate.command.convertor.UserCertificateCoConvertor;
import com.zcloud.certificate.domain.config.MessageTemplateConfig;
import com.zcloud.certificate.domain.model.UserBasicInfo; import com.zcloud.certificate.domain.model.UserBasicInfo;
import com.zcloud.certificate.domain.model.UserCertificateE; import com.zcloud.certificate.domain.model.UserCertificateE;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry; import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
@ -21,7 +27,10 @@ import com.zcloud.certificate.persistence.dataobject.UserDO;
import com.zcloud.certificate.persistence.repository.UserCertificateRepository; import com.zcloud.certificate.persistence.repository.UserCertificateRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper; import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.zcloud.gbscommon.utils.UuidUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.ehcache.core.util.CollectionUtil; import org.ehcache.core.util.CollectionUtil;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -38,10 +47,11 @@ import java.util.stream.Collectors;
*/ */
@Component @Component
@AllArgsConstructor @AllArgsConstructor
@Slf4j
public class UserCertificateQueryExe { public class UserCertificateQueryExe {
private final UserCertificateRepository userCertificateRepository; private final UserCertificateRepository userCertificateRepository;
private final UserCertificateCoConvertor userCertificateCoConvertor; private final UserCertificateCoConvertor userCertificateCoConvertor;
private final MessageTemplateConfig messageTemplateConfig;
/** /**
* id * id
* @param id * @param id
@ -133,6 +143,98 @@ public class UserCertificateQueryExe {
return userCertificateCoConvertor.converEsToCOs(userCertificateES); return userCertificateCoConvertor.converEsToCOs(userCertificateES);
} }
/**
*
*/
public void listExpireCert(String days) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("days", Integer.valueOf(days)-1);
// 查询临期证照
List<UserCertificateDO> expirelist = userCertificateRepository.listExpireCert(params);
if(expirelist != null && expirelist.size() > 0){
//15天的提醒特殊需要单独查部门负责人
Map<Long, String> deptMap = new HashMap<Long, String>();
if (days.equals("15") || days.equals("3")){
// 查询对应部门负责人
List<Long> deptIds = expirelist.stream().map(UserCertificateDO::getDepartmentId).distinct().collect(Collectors.toList());
if(deptIds != null && deptIds.size() > 0){
List<UserDO> leaders = userCertificateRepository.listDeptLeader(deptIds);
// leaders 根据 departmentId 分组 将 name 按逗号拼接
deptMap = leaders.stream().collect(Collectors.groupingBy(UserDO::getDepartmentId, Collectors.mapping(UserDO::getName, Collectors.joining(","))));
}
}
String template = messageTemplateConfig.getTemplate(days);
for (UserCertificateDO userCertificateDO : expirelist){
// 给持证人员发站内信
sendMessage(userCertificateDO, template, userCertificateDO.getUserId(), deptMap.get(userCertificateDO.getDepartmentId()));
}
}
}
/**
*
*/
public void listExpireCertCopy(String days) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("days", Integer.valueOf(days)-1);
// 查询临期证照
List<UserCertificateDO> expirelist = userCertificateRepository.listExpireCert(params);
// 查询对应部门负责人
List<Long> deptIds = expirelist.stream().map(UserCertificateDO::getDepartmentId).distinct().collect(Collectors.toList());
Map<Long, List<UserDO>> deptMap = new HashMap<Long, List<UserDO>>();
if(deptIds != null && deptIds.size() > 0){
List<UserDO> leaders = userCertificateRepository.listDeptLeader(deptIds);
deptMap = leaders.stream().collect(Collectors.groupingBy(UserDO::getDepartmentId));
}
if(expirelist != null && expirelist.size() > 0){
for (UserCertificateDO userCertificateDO : expirelist){
// 给部门负责人发站内信
if(deptMap != null && deptMap.size() > 0){
String leaderTemplate = messageTemplateConfig.getTemplate(days + "_copy_leader");
List<UserDO> leaderList = deptMap.get(userCertificateDO.getDepartmentId());
for (UserDO leader : leaderList){
sendMessage(userCertificateDO, leaderTemplate, leader.getId(), leader.getName());
}
}
}
}
}
@DubboReference
private MessageFacade messageFacade;
private void sendMessage(UserCertificateDO userCertificateDO, String template, Long userId, String LeaderName) {
try {
MessageSendCmd messageSendCmd = new MessageSendCmd();
messageSendCmd.setBusinessId(UuidUtil.get32UUID());
MessageTargetCmd messageTargetCmd = new MessageTargetCmd();
messageTargetCmd.setUserId(userId);
messageSendCmd.setTargetCmd(messageTargetCmd);
messageSendCmd.setSourceCode(template);
messageSendCmd.setNeedTokenEnum(false);
Map<String, Object> sendParams = new HashMap<String, Object>();
sendParams.put("Name", userCertificateDO.getUserName());
sendParams.put("DocumentName", userCertificateDO.getCertificateName());
sendParams.put("IdentificationNumber", userCertificateDO.getCertificateCode());
sendParams.put("MaturityDate", userCertificateDO.getCertificateDateEnd());
if(LeaderName != null){
sendParams.put("SuperiorName", LeaderName);
}
messageSendCmd.setParams(sendParams);
log.info("发送站内信人员:{}", userCertificateDO.getUserName());
SingleResponse<Boolean> result = messageFacade.send(messageSendCmd);
log.info("发送站内信结果:{}", result.toString());
} catch (Exception e){
e.printStackTrace();
}
}
private void getUserInfo(List<UserCertificateE> userCertificateES, List<Long> userIds) { private void getUserInfo(List<UserCertificateE> userCertificateES, List<Long> userIds) {
List<com.zcloud.certificate.domain.model.UserBasicInfo> userBasicInfos = userCertificateRepository.getUserNamesByUserIds(userIds); List<com.zcloud.certificate.domain.model.UserBasicInfo> userBasicInfos = userCertificateRepository.getUserNamesByUserIds(userIds);

View File

@ -74,5 +74,10 @@ public class CorpCertificateServiceImpl implements CorpCertificateServiceI {
public boolean isExistCertNo(String certNo, Long id) { public boolean isExistCertNo(String certNo, Long id) {
return corpCertificateQueryExe.checkCertNoExist(certNo, id); return corpCertificateQueryExe.checkCertNoExist(certNo, id);
} }
@Override
public void sendMessage() {
corpCertificateAddExe.sendMessage();
}
} }

View File

@ -80,9 +80,20 @@ public class UserCertificateServiceImpl implements UserCertificateServiceI {
return userCertificateQueryExe.listAll(qry); return userCertificateQueryExe.listAll(qry);
} }
@Override
public void listExpireCert(String days) {
userCertificateQueryExe.listExpireCert(days);
}
@Override
public void listExpireCertCopy(String days) {
userCertificateQueryExe.listExpireCertCopy(days);
}
@Override @Override
public boolean isExistCertNo(String certNo, Long id) { public boolean isExistCertNo(String certNo, Long id) {
return userCertificateQueryExe.checkCertNoExist(certNo, id); return userCertificateQueryExe.checkCertNoExist(certNo, id);
} }
} }

View File

@ -38,5 +38,7 @@ public interface CorpCertificateServiceI {
* *
*/ */
boolean isExistCertNo(String certNo, Long id); boolean isExistCertNo(String certNo, Long id);
void sendMessage();
} }

View File

@ -40,9 +40,17 @@ public interface UserCertificateServiceI {
*/ */
List<UserCertificateCO> listAll(UserCertificatePageQry qry); List<UserCertificateCO> listAll(UserCertificatePageQry qry);
/** /**
* *
*/ */
boolean isExistCertNo(String certNo, Long id); boolean isExistCertNo(String certNo, Long id);
void listExpireCert(String days);
/**
* -
*/
void listExpireCertCopy(String days);
} }

View File

@ -0,0 +1,69 @@
package com.zcloud.certificate.domain.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
* @author zhangyue
* @date 2026/2/11 10:05
*/
@Component
@ConfigurationProperties(prefix = "certificate.message.template")
@Data
public class MessageTemplateConfig {
//持证人员证件到期提醒-提前1天
private String oneDayBeforeExpire;
// 持证人员证件到期提醒-提前3天
private String threeDayBeforeExpire;
// 持证人员证件到期提醒-提前7天
private String sevenDayBeforeExpire;
// 持证人员证件到期提醒-提前15天
private String fifteenDayBeforeExpire;
// 持证人员证件到期提醒-提前30天
private String thirtyDayBeforeExpire;
// 持证人员证件到期提醒-提前90天
private String ninetyDayBeforeExpire;
// 持证人员证件到期提醒-提前7天-抄送上级
private String sevenDayBeforeExpireCopyLeader;
// 持证人员证件到期提醒-提前15天-抄送上级
private String fifteenDayBeforeExpireCopyLeader;
// 存储所有模板的 Map
private Map<String, String> templateMap;
@PostConstruct
public void init() {
templateMap = new HashMap<>();
templateMap.put("1", oneDayBeforeExpire);
templateMap.put("3", threeDayBeforeExpire);
templateMap.put("7", sevenDayBeforeExpire);
templateMap.put("15", fifteenDayBeforeExpire);
templateMap.put("30", thirtyDayBeforeExpire);
templateMap.put("90", ninetyDayBeforeExpire);
templateMap.put("7_copy_leader", sevenDayBeforeExpireCopyLeader);
templateMap.put("15_copy_leader", fifteenDayBeforeExpireCopyLeader);
}
/**
* key
*/
public String getTemplate(String key) {
return templateMap.get(key);
}
/**
*
*/
public String getByDays(Integer days) {
return templateMap.get(String.valueOf(days));
}
}

View File

@ -1,6 +1,7 @@
package com.zcloud.certificate.persistence.dataobject; package com.zcloud.certificate.persistence.dataobject;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO; import com.jjb.saas.framework.repository.basedo.BaseDO;
import com.zcloud.gbscommon.utils.Tools; import com.zcloud.gbscommon.utils.Tools;
@ -87,6 +88,15 @@ public class UserCertificateDO extends BaseDO {
//复审日期 //复审日期
@ApiModelProperty(value = "复审日期") @ApiModelProperty(value = "复审日期")
private LocalDate reviewDate; private LocalDate reviewDate;
//用户名称
@ApiModelProperty(value = "用户名称")
@TableField(exist = false)
private String userName;
//班级id
@ApiModelProperty(value = "班级id")
@TableField(exist = false)
private Long departmentId;
public UserCertificateDO(String userCertificateId) { public UserCertificateDO(String userCertificateId) {
if (StrUtil.isNotBlank(userCertificateId)) this.userCertificateId = userCertificateId; if (StrUtil.isNotBlank(userCertificateId)) this.userCertificateId = userCertificateId;

View File

@ -48,7 +48,8 @@ public interface UserCertificateMapper extends BaseMapper<UserCertificateDO> {
IPage<UserCerDO> certifiedPersonnelListPage(IPage<UserCerDO> page, @Param("params") Map<String, Object> params); IPage<UserCerDO> certifiedPersonnelListPage(IPage<UserCerDO> page, @Param("params") Map<String, Object> params);
List<UserCertificateDO> listExpireCert(@Param("params") Map<String, Object> params);
List<UserDO> listDeptLeader(@Param("deptIds") List<Long> deptIds);
} }

View File

@ -46,5 +46,13 @@ public interface UserCertificateRepository extends BaseRepository<UserCertificat
List<UserCertificateDO> listAll(Map<String, Object> params); List<UserCertificateDO> listAll(Map<String, Object> params);
List<UserCertificateDO> listExpireCert(Map<String, Object> params);
List<UserDO> listDeptLeader(List<Long> deptIds);
} }

View File

@ -89,5 +89,15 @@ public class UserCertificateRepositoryImpl extends BaseRepositoryImpl<UserCertif
return result; return result;
} }
@Override
public List<UserCertificateDO> listExpireCert(Map<String, Object> params) {
return userCertificateMapper.listExpireCert(params);
}
@Override
public List<UserDO> listDeptLeader(List<Long> deptIds) {
return userCertificateMapper.listDeptLeader(deptIds);
}
} }

View File

@ -316,5 +316,21 @@
group by u.id group by u.id
order by u.sort asc,u.create_time desc order by u.sort asc,u.create_time desc
</select> </select>
<select id="listExpireCert" resultType="com.zcloud.certificate.persistence.dataobject.UserCertificateDO">
select uc.*, u.name as user_name, u.department_id
from user_certificate uc
left join user u on u.id = uc.user_id
where uc.delete_enum = 'false'
and uc.certificate_date_end = DATE_ADD(CURDATE(), INTERVAL #{params.days} DAY);
</select>
<select id="listDeptLeader" resultType="com.zcloud.certificate.persistence.dataobject.UserDO">
select * from user where delete_enum = 'false' and department_leader_flag = 1
and department_id in
<foreach index="index" collection="deptIds" item="deptId" open="(" separator="," close=")">
#{deptId}
</foreach>
</select>
</mapper> </mapper>