首页 > 代码库 > SSH系列:(29)使用Quartz 实现自动受理

SSH系列:(29)使用Quartz 实现自动受理


需求中要求每月月底将上个月的投诉自动处理为已失效。要求是每月月底,所以定时任务应该将处理时间设置在每月的月底;处理的任务是将上个月的未受理的投诉信息自动将其状态设置为已失效。


将自动受理的方法加入到complainService/complainServiceImpl中,以便事务控制:


ComplainService.java

package com.rk.tax.service;

import com.rk.core.service.BaseService;
import com.rk.tax.entity.Complain;

public interface ComplainService extends BaseService<Complain> {
	//自动受理投诉
	void autoDeal();
}

ComplainServiceImpl.java

package com.rk.tax.service.impl;


import java.util.Calendar;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.rk.core.service.Impl.BaseServiceImpl;
import com.rk.core.utils.QueryHelper;
import com.rk.tax.dao.ComplainDao;
import com.rk.tax.entity.Complain;
import com.rk.tax.service.ComplainService;

@Service("complainService")
public class ComplainServiceImpl extends BaseServiceImpl<Complain> implements ComplainService {
	private ComplainDao complainDao;
	@Resource
	public void setComplainDao(ComplainDao complainDao) {
		setBaseDao(complainDao);
		this.complainDao = complainDao;
	}
	@Override
	public void autoDeal() {
		//查找本月开始之前未受理的投诉信息
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.DAY_OF_MONTH, 1);//本月1号
		cal.set(Calendar.HOUR_OF_DAY, 0);//24小时制0时
		cal.set(Calendar.MINUTE, 0);//0分
		cal.set(Calendar.SECOND, 0);//0秒
		
		//1、查询上个月未受理投诉
		QueryHelper queryHelper = new QueryHelper(Complain.class, "c");
		queryHelper.addCondition("c.state=?", Complain.COMPLAIN_STATE_UNDONE);
		queryHelper.addCondition("c.compTime < ?", cal.getTime());
		List<Complain> list = findList(queryHelper);
		
		//2、更改投诉的状态为已失效
		if(list != null &&list.size()>0){
			for(Complain comp : list){
				//设置投诉状态为无效
				comp.setState(Complain.COMPLAIN_STATE_INVALID);
				update(comp);
			}
		}
	}
}


将任务注册到Spring的IOC容器内

	<!-- 1、定义一个jobDetail任务详细bean -->
	<bean id="complainJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 要执行的类实体映射到complainService -->
		<property name="targetObject" ref="complainService"></property>
		<!-- 执行方法为autoDeal -->
		<property name="targetMethod" value="http://www.mamicode.com/autoDeal"></property>
		<!-- 不同步执行 -->
		<property name="concurrent" value="http://www.mamicode.com/false"></property>
	</bean>
	
	<!-- 2、定义一个cronTrigger触发器 -->
	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<!-- 指定要执行的任务详细信息bean -->
		<property name="jobDetail" ref="complainJobDetail"></property>
		<!-- 制定任务的执行时间:每月最后一天的2点0分0秒开始执行 -->
		<property name="cronExpression" value="http://www.mamicode.com/0 0 2 L * ?"></property>
	</bean>
	
	<!-- 3、定义一个schedulerFactory -->
	<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="cronTrigger"/>
			</list>
		</property>
	</bean>






SSH系列:(29)使用Quartz 实现自动受理