package com.yihu.wlyy.statistics.service; import com.yihu.wlyy.statistics.dao.DoctorPatientGroupInfoDao; import com.yihu.wlyy.statistics.dao.QuartzJobConfigDao; import com.yihu.wlyy.statistics.dao.QuotaDao; import com.yihu.wlyy.statistics.dao.SignFamilyDao; import com.yihu.wlyy.statistics.job.business.QuartzHelper; import com.yihu.wlyy.statistics.job.check.CheckSignJob; import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo; import com.yihu.wlyy.statistics.model.job.QuartzJobConfig; import com.yihu.wlyy.statistics.model.job.WlyyQuota; import com.yihu.wlyy.statistics.model.signfamily.SignFamily; import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO; import com.yihu.wlyy.statistics.vo.WlyyQuotaVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.text.SimpleDateFormat; import java.util.*; /** * @author chenweida */ @Service public class JobService { @Autowired private QuartzHelper quartzHelper; @Autowired private QuartzJobConfigDao wlyyJobConfigDao; @Autowired private QuotaDao quotaDao; @Autowired private SignFamilyDao signFamilyDao; @Autowired private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao; @Transactional public void stopById(String id) throws Exception { QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id, "1"); if (quartzJobConfig != null) { quartzHelper.removeJob(quartzJobConfig.getId()); quartzJobConfig.setStatus("0"); } else { throw new Exception("任务已经停止"); } } @Transactional public void startById(String id) throws Exception { QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id, "0"); if (quartzJobConfig != null) { startOneJob(quartzJobConfig); } else { throw new Exception("任务已经启动"); } } @Transactional public void stopAll() throws Exception { List quartzJobConfigs = wlyyJobConfigDao.findByAll("1"); if (quartzJobConfigs != null && quartzJobConfigs.size() > 0) { for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) { quartzHelper.removeJob(quartzJobConfig.getId()); quartzJobConfig.setStatus("0"); } } else { throw new Exception("任务已经全部停止"); } } @Transactional public void startAll() throws Exception { List quartzJobConfigs = wlyyJobConfigDao.findByAll("0"); if (quartzJobConfigs != null && quartzJobConfigs.size() > 0) { for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) { startOneJob(quartzJobConfig); } } else { throw new Exception("任务已经全部启动"); } } /** * 启动单个任务 * * @param quartzJobConfig * @throws Exception */ private void startOneJob(QuartzJobConfig quartzJobConfig) throws Exception { WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { //往quartz框架添加任务 quartzHelper.addJob(getRightClass(quartzJobConfig), quartzJobConfig.getQuartzCron(), quartzJobConfig.getId(), params); quartzJobConfig.setStatus("1");//设置任务状态是启动 } } public void startNowById(String id) throws Exception { QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findOne(id); WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); //往quartz框架添加任务 if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId()+ UUID.randomUUID(), params); } } public void productDataByDay(Integer day) throws Exception { List quartzJobConfigs = wlyyJobConfigDao.findByIds(); for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) { WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); for (int i = 1; i <= day; i++) { //往quartz框架添加任务 params.put("now", getYesterday(0 - i + 1)); params.put("yesterday", getYesterday(0 - i)); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params); } } } } public static String getYesterday(Integer day) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, day); String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); return yesterday; } public void productDataByOneDay(String yesterday) throws Exception { SimpleDateFormat dataSimple = new SimpleDateFormat("yyyy-MM-dd"); Date date = dataSimple.parse(yesterday); if (date == null) { throw new Exception("时间格式错误"); } Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动 Date nowDate = calendar.getTime(); //这个时间就是日期往后推一天的结果 String now = new SimpleDateFormat("yyyy-MM-dd").format(nowDate.getTime()); List quartzJobConfigs = wlyyJobConfigDao.findByIds(); for (QuartzJobConfig quartzJobConfig : quartzJobConfigs) { WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); //往quartz框架添加任务 params.put("now", now); params.put("yesterday", yesterday); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params); } } } /** * * @param quartzJobConfig * @return * @throws ClassNotFoundException */ private Class getRightClass(QuartzJobConfig quartzJobConfig) throws ClassNotFoundException { String packageString="com.yihu.wlyy.statistics.job.business."; Class classTemp; try{ classTemp=Class.forName(quartzJobConfig.getJobClass()); }catch (Exception e){ try{ String classString=quartzJobConfig.getJobClass().replace("wlyy","wlyy.statistics").replace("job","job.business"); classTemp=Class.forName(classString); }catch (Exception e1){ packageString=packageString+quartzJobConfig.getJobClass().substring(quartzJobConfig.getJobClass().lastIndexOf(".")); classTemp=Class.forName(packageString); } } return classTemp; } public void productDataByOneDayWithId(String yesterday, String id) throws Exception { SimpleDateFormat dataSimple = new SimpleDateFormat("yyyy-MM-dd"); Date date = dataSimple.parse(yesterday); if (date == null) { throw new Exception("时间格式错误"); } Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE, 1);//把日期往后增加一天.整数往后推,负数往前移动 Date nowDate = calendar.getTime(); //这个时间就是日期往后推一天的结果 String now = new SimpleDateFormat("yyyy-MM-dd").format(nowDate.getTime()); QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id); if (quartzJobConfig == null) { throw new Exception("id不存在"); } WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); //往quartz框架添加任务 params.put("now", now); params.put("yesterday", yesterday); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params); } } @Transactional public void startaaaa() { List s = signFamilyDao.findByDate("2016-08-05 15:40:00"); for (SignFamily ss : s) { List DoctorPatientGroupInfos = doctorPatientGroupInfoDao.findByPatient(ss.getPatient()); if (DoctorPatientGroupInfos != null && DoctorPatientGroupInfos.size() == 0) { DoctorPatientGroupInfo qkDoctorPatientGroupInfo = new DoctorPatientGroupInfo(); qkDoctorPatientGroupInfo.setCzrq(new Date()); qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate()); qkDoctorPatientGroupInfo.setGroup("2"); qkDoctorPatientGroupInfo.setPatient(ss.getPatient()); qkDoctorPatientGroupInfo.setPartAmount(0); qkDoctorPatientGroupInfo.setStatus(ss.getStatus() > 0 ? 1 : 0); if (ss.getStatus() < 0) { qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate()); } qkDoctorPatientGroupInfo.setSignType("1"); qkDoctorPatientGroupInfo.setDoctor(ss.getDoctor()); doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo); qkDoctorPatientGroupInfo = new DoctorPatientGroupInfo(); qkDoctorPatientGroupInfo.setCzrq(new Date()); qkDoctorPatientGroupInfo.setQyrq(ss.getApplyDate()); qkDoctorPatientGroupInfo.setGroup("2"); qkDoctorPatientGroupInfo.setPatient(ss.getPatient()); qkDoctorPatientGroupInfo.setPartAmount(0); qkDoctorPatientGroupInfo.setStatus(ss.getStatus() > 0 ? 1 : 0); if (ss.getStatus() < 0) { qkDoctorPatientGroupInfo.setDqrq(ss.getApplyUnsignDate()); } qkDoctorPatientGroupInfo.setSignType("1"); qkDoctorPatientGroupInfo.setDoctor(ss.getDoctorHealth()); doctorPatientGroupInfoDao.save(qkDoctorPatientGroupInfo); } } s = signFamilyDao.findByDate("2016-08-16 00:00:00"); } public void productDataByDayAndId(Integer day, String id) throws Exception{ QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id); if(quartzJobConfig==null){ throw new Exception("id不存在"); } WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId()); WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO(); WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO(); BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO); BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO); Map params = new HashMap(); params.put("quota", wlyyQuotaVO); params.put("jobConfig", wlyyJobConfigVO); for (int i = 1; i <= day; i++) { //往quartz框架添加任务 params.put("now", getYesterday(0 - i + 1)); params.put("yesterday", getYesterday(0 - i)); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params); } } } public void startCheckSignJob() throws Exception{ if(!quartzHelper.isExistJob(CheckSignJob.jobKey)){ quartzHelper.addJob(CheckSignJob.class,CheckSignJob.cron,CheckSignJob.jobKey,new HashMap<>()); } } public void stopCheckSignJob()throws Exception { if(quartzHelper.isExistJob(CheckSignJob.jobKey)){ quartzHelper.removeJob(CheckSignJob.jobKey); } } }