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<MdmUser> 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<String> userRoleAliasList = Func.toStrList(",", AuthUtil.getUserRole());//角色别名,多个角色逗号分隔
|
String managerRole = paramService.getProgramManagerRoleAlias();
|
if(!userRoleAliasList.contains(managerRole) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()){
|
//非数控管理员角色、管理员,限制未只能导出自己的程序
|
query.setUserId(userId);
|
}
|
|
IPage<NcProgramExportDncPageVO> pages = ncProgramApprovedService.exportDncPageQuery(query);
|
return pages.getTotal();
|
|
}
|
}
|