Browse Source

统计新增报表

chenweida 8 years ago
parent
commit
fa07d83e0f

+ 33 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java

@ -402,4 +402,37 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动每天的统计报表任务
     *
     * @return
     */
    @ApiOperation(value = "启动每天的统计报表任务")
    @RequestMapping(value = "startEveryDayReportJob", method = RequestMethod.GET)
    public String startEveryDayReportJob() {
        try {
            jobService.startEveryDayReportJob();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止每天的统计报表任务
     *
     * @return
     */
    @ApiOperation(value = "停止每天的统计报表任务")
    @RequestMapping(value = "stopEveryDayReportJob", method = RequestMethod.GET)
    public String stopEveryDayReportJob() {
        try {
            jobService.stopEveryDayReportJob();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
}

+ 136 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/check/ReportAllLogJob.java

@ -0,0 +1,136 @@
package com.yihu.wlyy.statistics.job.check;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.util.DateUtil;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.mail.Multipart;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * Created by Administrator on 2016.10.31.
 */
@Component
@Scope("prototype")
public class ReportAllLogJob implements Job {
    public static String jobKey="Report_All_LOG_JOB";
    public static String cron="*/5 * * * * ?";
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private JavaMailSender javaMailSender;
    @Value("${spring.mail.from}")
    private String from;
    @Value("${spring.mail.to}")
    private String to;
    @Autowired
    private CachePool cachePool;
    @Transactional
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            String timeKey=redisTemplate.opsForValue().get("quota:timeKey");
            long produceTime=  redisTemplate.getExpire("quota:16:4:350200:"+timeKey);
            String date=getYesterday();
            //当前试试统计的key
            StringBuffer sb=new StringBuffer("<html><head><meta charset=\"UTF-8\"></head><body>");
            sb.append("<table width=\"100%\" border=\"blue solid 1px\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#FF9933\"  id=\"size\">\n");
            //报表时间
            sb.append("<tr><td>报表数据时间</td><td>"+date+"</td></tr>");//添加当前实时统计信息报表
            sb.append("<tr><td>报表生成时间</td><td>"+DateUtil.dateToStrLong(new Date())+"</td></tr>");//添加当前实时统计信息报表
            //今天签约信息
            String sqlCount="select count(id) from wlyy_sign_family a  where  status in(1,2) and a.type =2 and expenses_status=1 and a.expenses_time< '"+getYesterday(-1)+ Constant.quota_date_last+"' and a.expenses_time>= '"+getYesterday(-2)+ Constant.quota_date_last+"'";
            Integer count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 新增签约数</td><td>"+count+"个</td></tr>");
            //今天解约信息
            sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and a.status in(-3,-4) and a.apply_unsign_date< '"+getYesterday(-1)+ Constant.quota_date_last+"' and a.apply_unsign_date>= '"+getYesterday(-2)+ Constant.quota_date_last+"'";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 新增解约数</td><td>"+count+"个</td></tr>");
            //今天待签约信息
            sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2  and a.status=0 and  a.patient_apply_date< '"+getYesterday(-1)+ Constant.quota_date_last+"'  and  a.patient_apply_date >= '"+getYesterday(-2)+ Constant.quota_date_last+"'  ";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 新增待签约数</td><td>"+count+"个</td></tr>");
            //今天改签信息
            sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and a.status =100 and  a.patient_apply_date< '"+getYesterday(-1)+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 新增改签数</td><td>"+count+"个</td></tr>");
            //今天未交费数目
            sqlCount= " select count(id) from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+getYesterday(-1)+ Constant.quota_date_last+"' and  a.apply_date>= '"+getYesterday(-2)+ Constant.quota_date_last+"'and (expenses_status !=1 or expenses_status is null)  ";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 新增未缴费数</td><td>"+count+"个</td></tr>");
            //截止到今天的签约信息
            sb.append("<tr><td>截止到"+date+" 的签约数</td><td>"+cachePool.getSignFamilysWithExpenseStatus1ByDate(date).getSignFamilies().size()+"个</td></tr>");
            //截止到今天未交费数目
            sqlCount= " select count(id) from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.apply_date< '"+getYesterday(-1)+ Constant.quota_date_last+"'and (expenses_status !=1 or expenses_status is null)  ";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>截止到"+date+" 的未缴费数</td><td>"+count+"个</td></tr>");
            //今天实时统计执行的次数
            sqlCount= " select count(a.id) from wlyy_job_log a where a.job_id=11 and a.job_start_time>= '"+getYesterday(-1)+ " 00:00:00'and a.job_start_time<=  '"+getYesterday(-1)+" 00:00:00 '";
            count=jdbcTemplate.queryForObject(sqlCount,Integer.class);
            sb.append("<tr><td>"+date+" 实时统计执行的次数</td><td>"+count+"次</td></tr>");
            sb.append("<tr><td>最近执行的实时统计的时间:</td><td>"+DateUtil.dateToStrLong(new Date(Long.valueOf(timeKey)))+"</td></tr>");
            //最新的实时统计信息
            String current="最新的redis数据生成时间時間:"+ DateUtil.dateToStrLong(new Date(Long.valueOf(timeKey)))+",当前系统时间:"+ DateUtil.dateToStrLong(new Date())+",最新的key剩下多少时间:"+ (produceTime/3600)+"小时"+(produceTime%3600/60)+"分钟"+(produceTime%3600%60)+"秒";
            sb.append("<tr><td>当前实时统计信息</td><td>"+current+"</td></tr>");//添加当前实时统计信息报表
            sb.append("</table></body></html>");
            sendEmail(sb.toString());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private void sendEmail(String text) throws Exception {
        MimeBodyPart mbp1 = new MimeBodyPart();
        mbp1.setContent(text, "text/html;charset=utf-8");
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(mbp1);
        String[] tos=to.split(",");
        MimeMessage mimeMessage= javaMailSender.createMimeMessage();
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
        messageHelper.setSubject("实时统计报表");
        messageHelper.setFrom(from);
        mimeMessage.setContent(mp);
        messageHelper.setTo(tos);
        javaMailSender.send(mimeMessage);
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
    public String getYesterday(int count) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, count);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
}

+ 16 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -9,6 +9,7 @@ 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.check.ReportAllLogJob;
import com.yihu.wlyy.statistics.job.message.HealthMessageJob;
import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo;
import com.yihu.wlyy.statistics.model.job.QuartzJobConfig;
@ -439,4 +440,19 @@ public class JobService {
    }
    public void startEveryDayReportJob()throws Exception {
        if(!quartzHelper.isExistJob(ReportAllLogJob.jobKey)){
            quartzHelper.addJob(ReportAllLogJob.class,ReportAllLogJob.cron,ReportAllLogJob.jobKey,new HashMap<>());
        }else{
            throw new Exception("已经启动");
        }
    }
    public void stopEveryDayReportJob() throws Exception{
        if(quartzHelper.isExistJob(ReportAllLogJob.jobKey)){
            quartzHelper.removeJob(ReportAllLogJob.jobKey);
        }else{
            throw new Exception("已经停止");
        }
    }
}

+ 1 - 1
patient-co-statistics/src/main/resources/application.yml

@ -60,7 +60,7 @@ spring:
    port: 465
    username: 1501877145
    from: 1501877145@qq.com
    to: 494679975@qq.com,463166875@qq.com #接受者,多个接受逗号分隔,接受者邮箱要开启IMAP/SMTP服务(不开可能会在垃圾箱)
    to: 494679975@qq.com #接受者,多个接受逗号分隔,接受者邮箱要开启IMAP/SMTP服务(不开可能会在垃圾箱)
    password: pnubhfagxeophfej
    properties:
      mail: