一.异步接口
package com.ruoyi.framework.manager;
import java.util.TimerTask;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.ruoyi.common.utils.Threads;
import com.ruoyi.common.utils.spring.SpringUtils;
public class AsyncManager
{
private final int OPERATE_DELAY_TIME = 10;
private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
private AsyncManager()
{
}
private static AsyncManager me = new AsyncManager();
public static AsyncManager me()
{
return me;
}
public void execute(TimerTask task)
{
executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
}
public void shutdown()
{
Threads.shutdownAndAwaitTermination(executor);
}
}
二.异步的实现:(在该类中添加方法就可以了)
package com.ruoyi.framework.manager.factory;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
import com.ruoyi.project.monitor.logininfor.service.LogininforServiceImpl;
import com.ruoyi.project.monitor.online.domain.OnlineSession;
import com.ruoyi.project.monitor.online.domain.UserOnline;
import com.ruoyi.project.monitor.online.service.IUserOnlineService;
import com.ruoyi.project.monitor.operlog.domain.OperLog;
import com.ruoyi.project.monitor.operlog.service.IOperLogService;
import com.ruoyi.project.my.course.domain.Course;
import com.ruoyi.project.my.course.service.impl.CourseOrderUserServiceImpl;
import com.ruoyi.project.my.course.service.impl.CourseServiceImpl;
import com.ruoyi.project.my.course.utils.EmalUtil;
import com.ruoyi.project.my.course.vo.OrderUserVo;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.system.user.service.UserServiceImpl;
import eu.bitwalker.useragentutils.UserAgent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.mail.MessagingException;
import java.util.*;
public class AsyncFactory
{
private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
public static TimerTask syncSessionToDb(final OnlineSession session)
{
return new TimerTask()
{
@Override
public void run()
{
UserOnline online = new UserOnline();
online.setSessionId(String.valueOf(session.getId()));
online.setDeptName(session.getDeptName());
online.setLoginName(session.getLoginName());
online.setStartTimestamp(session.getStartTimestamp());
online.setLastAccessTime(session.getLastAccessTime());
online.setExpireTime(session.getTimeout());
online.setIpaddr(session.getHost());
online.setLoginLocation(AddressUtils.getRealAddressByIP(session.getHost()));
online.setBrowser(session.getBrowser());
online.setOs(session.getOs());
online.setStatus(session.getStatus());
online.setSession(session);
SpringUtils.getBean(IUserOnlineService.class).saveOnline(online);
}
};
}
public static TimerTask recordOper(final OperLog operLog)
{
return new TimerTask()
{
@Override
public void run()
{
operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
SpringUtils.getBean(IOperLogService.class).insertOperlog(operLog);
}
};
}
public static TimerTask recordLogininfor(final String username, final String status, final String message, final Object... args)
{
final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
final String ip = ShiroUtils.getIp();
return new TimerTask()
{
@Override
public void run()
{
String address = AddressUtils.getRealAddressByIP(ip);
StringBuilder s = new StringBuilder();
s.append(LogUtils.getBlock(ip));
s.append(address);
s.append(LogUtils.getBlock(username));
s.append(LogUtils.getBlock(status));
s.append(LogUtils.getBlock(message));
sys_user_logger.info(s.toString(), args);
String os = userAgent.getOperatingSystem().getName();
String browser = userAgent.getBrowser().getName();
Logininfor logininfor = new Logininfor();
logininfor.setLoginName(username);
logininfor.setIpaddr(ip);
logininfor.setLoginLocation(address);
logininfor.setBrowser(browser);
logininfor.setOs(os);
logininfor.setMsg(message);
if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
{
logininfor.setStatus(Constants.SUCCESS);
}
else if (Constants.LOGIN_FAIL.equals(status))
{
logininfor.setStatus(Constants.FAIL);
}
SpringUtils.getBean(LogininforServiceImpl.class).insertLogininfor(logininfor);
}
};
}
public static TimerTask sendEmail(final String orderID,final String user_id,final String courseID)
{
return new TimerTask()
{
@Override
public void run()
{
String imgPath =System.getProperty("user.dir")+"\\src\\main\\resources\\static\\img\\header.png";
Course course = SpringUtils.getBean(CourseServiceImpl.class).selectCourseById(Long.parseLong(courseID));
OrderUserVo orderUserVo=new OrderUserVo();
orderUserVo.setOrderID(Long.parseLong(orderID));
List<OrderUserVo> orderUserVos=SpringUtils.getBean(CourseOrderUserServiceImpl.class).selectCourseOrderUserList(orderUserVo);
EmalUtil emalUtil = SpringUtils.getBean(EmalUtil.class);
if(orderUserVos != null && orderUserVos.size() > 0){
for(OrderUserVo userVo:orderUserVos){
Map<String,String> map=new HashMap<String,String>();
map.put("courseName",course.getCourseName());
map.put("orderInfor",userVo.getUserName()+"同学您好,您还有一个小时有一门课程答疑,请提前准备!!!");
map.put("updateDate", DateUtils.getTime());
map.put("remark", "点击:");
try {
emalUtil.thymeleafEmail(new String[]{userVo.getEmail()},"答疑系统提示:",map,"my/email/order",imgPath);
} catch (MessagingException e) {
sys_user_logger.error(e.getMessage());
}
}
}
User user = SpringUtils.getBean(UserServiceImpl.class).selectUserById(Long.parseLong(user_id));
try {
Map<String,String> map=new HashMap<String,String>();
map.put("courseName",course.getCourseName());
map.put("orderInfor",user.getUserName()+"老师您好,您还有一个小时有一门课程答疑,请提前准备!!!");
map.put("updateDate", DateUtils.getTime());
map.put("remark", "点击:");
emalUtil.thymeleafEmail(new String[]{user.getEmail()},"答疑系统提示:",map,"my/email/order",imgPath);
} catch (MessagingException e) {
sys_user_logger.error(e.getMessage());
}
}
};
}
}
三.调用:
AsyncManager.me().execute(AsyncFactory.sendEmail(orderID,user_id,courseID));