//代码生成时,文件路径: E:/platform/myProject/svn/oss/quickbundle/trunk/quickbundle-securityweb/src/main/java/org/quickbundle/third/quartz/jobdetail/service/impl/JobDetailService.java //代码生成时,系统时间: 2012-04-02 22:28:47 //代码生成时,操作系统用户: qb /* * 系统名称:单表模板 --> quickbundle-securityweb * * 文件名称: org.quickbundle.third.quartz.jobdetail.service.impl --> JobDetailService.java * * 功能描述: * * 版本历史: 2012-04-02 22:28:47 创建1.0.0版 (白小勇) * */ package org.quickbundle.third.quartz.jobdetail.service.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.matchers.GroupMatcher; import org.quickbundle.base.beans.factory.RmBeanFactory; import org.quickbundle.base.service.RmService; import org.quickbundle.third.quartz.jobdetail.service.IJobDetailService; import org.quickbundle.third.quartz.jobdetail.util.IJobDetailConstants; import org.quickbundle.third.quartz.jobdetail.vo.JobDetailVo; import org.quickbundle.third.quartz.util.ISchedulerConstants; /** * 功能、用途、现存BUG: * * @author 白小勇 * @version 1.0.0 * @see 需要参见的其它类 * @since 1.0.0 */ public class JobDetailService extends RmService implements IJobDetailService, IJobDetailConstants { Scheduler getScheduler() { return (Scheduler)RmBeanFactory.getBean(ISchedulerConstants.QUARTZ_SHEDULER); } /** * 插入单条记录 * * @param vo 用于添加的VO对象 * @return 若添加成功,返回新生成的Oid * @throws SchedulerException * @throws ClassNotFoundException */ public String insert(JobDetailVo vo) throws ClassNotFoundException, SchedulerException { getScheduler().addJob(vo.toQuartzJobDetail(), false); //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "插入了1条记录,id=" + String.valueOf(id)); return null; } /** * 插入多条记录 * * @param vos 用于添加的VO对象数组 * @return 返回新生成的id数组 * @throws SchedulerException * @throws ClassNotFoundException */ public String[] insert(JobDetailVo[] vos) throws ClassNotFoundException, SchedulerException { List<String> ids = new ArrayList<String>(vos.length); for(JobDetailVo vo : vos) { ids.add(insert(vo)); } return ids.toArray(new String[0]); } /** * 删除单条记录 * * @param id 用于删除的记录的id * @return 成功删除的记录数 * @throws SchedulerException */ public int delete(String job_name, String job_group) throws SchedulerException { boolean success = getScheduler().deleteJob(JobKey.jobKey(job_name, job_group)); //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "删除了" + sum + "条记录,id=" + String.valueOf(id)); if(success) { return 1; } else { return 0; } } /** * 删除多条记录 * * @param job_name_groups 用于删除的记录的ids * @return 成功删除的记录数 */ public int delete(String[][] job_name_groups) throws SchedulerException { List<JobKey> jobKeys = new ArrayList<JobKey>(job_name_groups.length); for(String[] name_group : job_name_groups) { jobKeys.add(JobKey.jobKey(name_group[0], name_group[1])); } boolean success = getScheduler().deleteJobs(jobKeys); //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "删除了" + sum + "条记录,id=" + RmStringHelper.ArrayToString(ids, ",")); if(success) { return jobKeys.size(); } else { return 0; } } /** * 根据Id进行查询 * * @param id 用于查找的id * @return 查询到的VO对象 * @throws SchedulerException */ public JobDetailVo find(String job_name, String job_group) throws SchedulerException { JobDetailVo vo = JobDetailVo.fromQuartzJobDetail(getScheduler().getJobDetail(JobKey.jobKey(job_name, job_group))); //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "察看了1条记录,id=" + id); return vo; } /** * 更新单条记录 * * @param vo 用于更新的VO对象 * @return 成功更新的记录数 */ public int update(JobDetailVo vo) throws ClassNotFoundException, SchedulerException{ getScheduler().addJob(vo.toQuartzJobDetail(), true); //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "更新了" + sum + "条记录,id=" + String.valueOf(vo.getJob_name())); return 1; } /** * 批量更新修改多条记录 * * @param vos 更新的VO对象数组 * @return 成功更新的记录最终数量 */ public int update(JobDetailVo[] vos) throws ClassNotFoundException, SchedulerException{ int sum = 0; for(JobDetailVo vo : vos) { sum += update(vo); } return sum; } /** * 批量保存,没有主键的insert,有主键的update * * @param vos 更新的VO对象数组 * @return new int[2]{insert的记录数, update的记录数} */ public int[] insertUpdateBatch(JobDetailVo[] vos) { throw new UnsupportedOperationException(); } /** * 查询总记录数,带查询条件 * * @param queryCondition 查询条件 * @return 总记录数 * @throws SchedulerException */ public int getRecordCount(Map<String,String> queryCondition) throws SchedulerException { GroupMatcher gm = GroupMatcher.jobGroupContains(""); if(queryCondition.containsKey("job_group")) { gm = GroupMatcher.jobGroupContains(queryCondition.get("job_group")); } Set<JobKey> jobKeys = getScheduler().getJobKeys(gm); if(queryCondition.containsKey("job_name")) { for(Iterator<JobKey> iter = jobKeys.iterator();iter.hasNext();) { JobKey jk = iter.next(); if(!jk.getName().contains(queryCondition.get("job_name"))) { iter.remove(); } } } //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "查询到了总记录数,count=" + sum + ", queryCondition=" + queryCondition); return jobKeys.size(); } /** * 功能: 通过查询条件获得所有的VO对象列表,不带翻页查全部,只查询必要的字段 * * @param queryCondition 查询条件, queryCondition等于null或""时查询全部 * @param orderStr 排序字段 * @return 查询到的VO列表 */ public List<JobDetailVo> queryByCondition(Map<String,String> queryCondition, String orderStr) throws SchedulerException { return queryByCondition(queryCondition, orderStr, -1, -1); } /** * 功能: 通过查询条件获得所有的VO对象列表,带翻页,带排序字符,只查询必要的字段 * * @param queryCondition 查询条件, queryCondition等于null或""时查询全部 * @param orderStr 排序字符 * @param startIndex 开始位置(第一条是1,第二条是2...) * @param size 查询多少条记录(size小于等于0时,忽略翻页查询全部) * @return 查询到的VO列表 */ public List<JobDetailVo> queryByCondition(Map<String,String> queryCondition, String orderStr, int startIndex, int size) throws SchedulerException { return queryByCondition(queryCondition, orderStr, startIndex, size, false); } /** * 功能: 通过查询条件获得所有的VO对象列表,带翻页,带排序字符,根据selectAllClumn判断是否查询所有字段 * * @param queryCondition 查询条件, queryCondition等于null或""时查询全部 * @param orderStr 排序字符 * @param startIndex 开始位置(第一条是1,第二条是2...) * @param size 查询多少条记录(size小于等于0时,忽略翻页查询全部) * @param selectAllClumn 是否查询所有列,即 SELECT * FROM ...(适用于导出) * @return 查询到的VO列表 * @throws SchedulerException */ public List<JobDetailVo> queryByCondition(Map<String,String> queryCondition, String orderStr, int startIndex, int size, boolean selectAllClumn) throws SchedulerException { List<JobDetailVo> vos = new LinkedList<JobDetailVo>(); GroupMatcher gm = GroupMatcher.jobGroupContains(""); if(queryCondition.containsKey("job_group")) { gm = GroupMatcher.jobGroupContains(queryCondition.get("job_group")); } Set<JobKey> jks = getScheduler().getJobKeys(gm); if(queryCondition.containsKey("job_name")) { for(Iterator<JobKey> iter = jks.iterator();iter.hasNext();) { JobKey jk = iter.next(); if(!jk.getName().contains(queryCondition.get("job_name"))) { iter.remove(); } } } for(JobKey jk : jks) { JobDetailVo vo = null; try { vo = JobDetailVo.fromQuartzJobDetail(getScheduler().getJobDetail(jk)); } catch (org.quartz.JobPersistenceException e) { vo = new JobDetailVo(); vo.setJob_name(jk.getName()); vo.setJob_group(jk.getGroup()); } vos.add(vo); } //RmProjectHelper.log(TABLE_LOG_TYPE_NAME, "按条件查询了多条记录,recordCount=" + lResult.size() + ", startIndex=" + startIndex + ", size=" + size + ", queryCondition=" + queryCondition + ", orderStr=" + orderStr + ", selectAllClumn=" + selectAllClumn); return vos; } public int execute(String[][] job_name_groups) throws SchedulerException { for(String[] name_group : job_name_groups) { getScheduler().triggerJob(JobKey.jobKey(name_group[0], name_group[1])); } return job_name_groups.length; } }