由于最近有个需求,产品即将到期(不同时间段到期)时给后台用户按角色推送,功能完成之后在此做个小结
1. 在启动类中添加注解@EnableScheduling
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@MapperScan("com.siwei.insurance.*.dao")
@EnableScheduling //该注解是开启定时任务的支持
public class lifeInsuranceApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(lifeInsuranceApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(lifeInsuranceApplication.class, args);
}
}
2. 写定时器
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.siwei.insurance.entity.ExpirePushMsg;
import com.siwei.insurance.helper.TotalConstant;
import com.siwei.insurance.permission.dao.RolePermissionDao;
import com.siwei.insurance.productManage.dao.ExpirePushMsgMapper;
import com.siwei.insurance.productManage.service.ProductService;
import com.siwei.insurance.until.DateUtil;
@Component
public class ProductExpireTask {
@Autowired
private RolePermissionDao rolePermissionDao;
@Autowired
private ProductService productService;
@Autowired
private ExpirePushMsgMapper expirePushMsgMapper;
//每天早上0点执行
@Scheduled(cron = "0 0 0 1/1 * ?")
public void productExpire() {
//距离到期还有一个月提醒
String oneMonthExpireDate = DateUtil.addOneMonth();
dealExpireProduct(oneMonthExpireDate);
//距离到期还有一天提醒
String oneDayExpireDate = DateUtil.addOneDay();
dealExpireProduct(oneDayExpireDate);
//距离到期还有一周提醒
String oneWeekExpireDate = DateUtil.addFewDays(7);
dealExpireProduct(oneWeekExpireDate);
}
private void dealExpireProduct(String expireDate) {
List<Map<String, Object>> expireProductMapList = productService.findExpireProducts(expireDate);
if(expireProductMapList != null && !expireProductMapList.isEmpty()) {
// 根据路径查询需要推送的角色
List<String> needPushRoleIds = rolePermissionDao.findNeedPushRoleIdByUrl(TotalConstant.PRODUCT_PUSH_URL);
List<ExpirePushMsg> expirePushMsgs = new ArrayList<>();
for (Map<String, Object> expireProductMap : expireProductMapList) {
ExpirePushMsg expirePushMsg = new ExpirePushMsg();
expirePushMsg.setNeedPushEntityId((i