package org.springblade.mdm.task; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.TaskService; import org.flowable.task.api.TaskQuery; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.producedivision.entity.MdmUser; import org.springblade.mdm.basesetting.producedivision.service.MdmUserService; import org.springblade.mdm.commons.contants.ParamConstants; import org.springblade.mdm.commons.service.InternalEmailProperties; import org.springblade.mdm.commons.service.InternalEmailService; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.program.service.NcProgramApprovedService; import org.springblade.mdm.program.vo.NcProgramExportDncPageVO; import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; /** * 内部邮件任务提醒定时任务 */ @Slf4j @Component @EnableScheduling public class InternalEmailNotifyTask { @Autowired private MdmUserService mdmUserService; @Autowired private ParamService paramService; @Autowired private TaskService taskService; @Autowired private InternalEmailService internalEmailService; @Autowired private NcProgramApprovedService ncProgramApprovedService; @Autowired private InternalEmailProperties internalEmailProperties; //@Value("${mail-remind.sender-account:xxx}") //private String senderAccount; @Scheduled(cron = "${task.cron.innernal_email_notify:0 0 9 * * ?}") public void execute() { String notifyFlag = paramService.getParamValue(ParamConstants.EMAIL_NOTIFY_FLAG,ParamConstants.EMAIL_NOTIFY_FLAG_OFF); if("1".equals(notifyFlag)){ //状态为开启,执行邮件通知 queryAllUserTodo(); } } void queryAllUserTodo(){ List allUsers = mdmUserService.list(); for(MdmUser user : allUsers){ queryAndSendNotify(user); } } /** * 查询用户todo并发送通知邮件 * @param user */ private void queryAndSendNotify(MdmUser user) { long flowTodoCount = queryFlowTodo(user.getId()); long expTodoCount = queryExportTodo(user.getId()); if(flowTodoCount + expTodoCount > 0){ sendRemindEmail(flowTodoCount,expTodoCount,user.getAccount()); } } /** * 发送提醒邮件 * @param flowTodoCount * @param expTodoCount * @param userAccount */ void sendRemindEmail(long flowTodoCount,long expTodoCount,String userAccount){ String content = buildMailConent(flowTodoCount,expTodoCount); internalEmailService.send(this.internalEmailProperties.getSenderAccount(),userAccount,null,null,"MDM程序管理任务提醒",content,null); } String buildMailConent(long flowTodoCount,long expTodoCount){ String content= String.format("您共有%s条任务待处理",(flowTodoCount+expTodoCount)); if(flowTodoCount>0){ content += ","+flowTodoCount+"条为待审批流程"; } if(flowTodoCount>0){ content += ","+expTodoCount+"条为待导出工控网程序"; } return content+"。"; } private long queryFlowTodo(long userId){ String userIdStr = "" + userId; TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(userIdStr).active().includeProcessVariables(); return todoQuery.count(); } private long queryExportTodo(long userId){ NcProgramExportDncQueryVO query = new NcProgramExportDncQueryVO(); query.setCurrent(1); query.setSize(1); List userRoleAliasList = Func.toStrList(",", AuthUtil.getUserRole());//角色别名,多个角色逗号分隔 String managerRole = paramService.getProgramManagerRoleAlias(); if(!userRoleAliasList.contains(managerRole) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()){ //非数控管理员角色、管理员,限制未只能导出自己的程序 query.setUserId(userId); } IPage pages = ncProgramApprovedService.exportDncPageQuery(query); return pages.getTotal(); } }