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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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="autoDeal"></property>
		<!-- 不同步执行 -->
		<property name="concurrent" value="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="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 实现自动受理的主要内容,如果未能解决你的问题,请参考以下文章

SSH系列:(28)JDK Timer和Quartz

JAVAEE——BOS物流项目09:业务受理需求分析创建表实现自动分单数据表格编辑功能使用方法和工作单快速录入

SSH系列:(27)添加投诉

BOS项目 第6天(业务受理自动分单工作单快速录入datagrid行编辑)

033 业务受理自动分单 - bos

Spring整合Quartz实现动态定时器