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.etl.model.CacheModel; import com.yihu.wlyy.statistics.etl.mycache.CachePool; import com.yihu.wlyy.statistics.job.business.QuartzHelper; import com.yihu.wlyy.statistics.job.cache.CacheCleanJob; import com.yihu.wlyy.statistics.job.check.CheckSignJob; import com.yihu.wlyy.statistics.job.message.HealthMessageJob; 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.quartz.SchedulerException; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.text.ParseException; 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; @Autowired private CachePool cachePool; @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().toString().replace("-",""), 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("daybefore", getYesterday(0 - i-1 )); params.put("yesterday", getYesterday(0 - i)); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params); Thread.sleep(20000L); } } } } 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 daybefore = 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("daybefore", daybefore); params.put("yesterday", yesterday); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params); Thread.sleep(20000L); } } } /** * * @param quartzJobConfig * @return * @throws ClassNotFoundException */ private Class getRightClass(QuartzJobConfig quartzJobConfig) throws ClassNotFoundException { return Class.forName(quartzJobConfig.getJobClass()); } 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 daybefore = 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("daybefore", daybefore); params.put("yesterday", yesterday); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params); } } @Transactional @Async("dbExtractExecutor") public void startaaaa() throws Exception{ quartzHelper.startNow(HealthMessageJob.class,UUID.randomUUID().toString().replace("-",""),new HashMap<>()); } 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("daybefore", getYesterday(0 - i -1)); params.put("yesterday", getYesterday(0 - i)); if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) { quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params); Thread.sleep(20000L); } } } 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); } } public void productDataByDayToDay(String start, String end) throws Exception { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date startDate=sdf.parse(start); Date endDate=sdf.parse(end); if(startDate.after(endDate)){ throw new Exception("日期参数错误"); } int day=daysBetween(startDate,endDate); for(int i=0;i()); } } public void stopCleanCacheJob()throws Exception { if(quartzHelper.isExistJob(CacheCleanJob.jobKey)){ quartzHelper.removeJob(CacheCleanJob.jobKey); } } public void cleanCache() { CachePool.cleanAllCache(); } public String seeCache() { Map cacheModesCache= CachePool.getArriveSignFamilyExpenseStatus1Map(); Map patientGroupCache=CachePool.getPatientGroup(); Map healthGroupCache=CachePool.getHealthGroup(); Map> diseaseGroupCache=CachePool.getDiseaseGroup(); String returnMessage=" 签约缓存:缓存存在"+cacheModesCache.size()+"天的缓存,"; for(Map.Entry entry:cacheModesCache.entrySet()){ returnMessage+=entry.getKey()+","; } returnMessage+="patientGroupCache"+(patientGroupCache.size()>0?"有缓存":"没有缓存"); returnMessage+="healthGroupCache"+(healthGroupCache.size()>0?"有缓存":"没有缓存"); returnMessage+="diseaseGroupCache"+(diseaseGroupCache.size()>0?"有缓存":"没有缓存"); return returnMessage; } public void startHealthMessageJob() throws Exception { if(!quartzHelper.isExistJob(HealthMessageJob.jobKey)){ quartzHelper.addJob(HealthMessageJob.class,HealthMessageJob.cron,HealthMessageJob.jobKey,new HashMap<>()); } } public void stopHealthMessageJob()throws Exception { if(quartzHelper.isExistJob(HealthMessageJob.jobKey)){ quartzHelper.removeJob(HealthMessageJob.jobKey); } } }