|
@ -1,6 +1,7 @@
|
|
|
package com.yihu.wlyy.statistics.job.business;
|
|
|
|
|
|
import com.yihu.wlyy.statistics.dao.*;
|
|
|
import com.yihu.wlyy.statistics.etl.cache.CachePool;
|
|
|
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
|
|
|
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
|
|
|
import com.yihu.wlyy.statistics.etl.model.ETLModel;
|
|
@ -10,39 +11,46 @@ import com.yihu.wlyy.statistics.etl.role.Level2Role;
|
|
|
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
|
|
|
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
|
|
|
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
|
|
|
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
|
|
|
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
|
|
|
import com.yihu.wlyy.statistics.model.system.Town;
|
|
|
import com.yihu.wlyy.statistics.model.team.AdminTeam;
|
|
|
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
|
|
|
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
|
|
|
import org.quartz.Job;
|
|
|
import org.quartz.JobDataMap;
|
|
|
import org.quartz.JobExecutionContext;
|
|
|
import org.quartz.JobExecutionException;
|
|
|
import org.quartz.*;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Scope;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.jdbc.core.PreparedStatementCreator;
|
|
|
import org.springframework.orm.jpa.JpaTransactionManager;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
|
|
|
|
|
|
import javax.persistence.EntityManager;
|
|
|
import javax.persistence.EntityTransaction;
|
|
|
import javax.persistence.PersistenceContext;
|
|
|
import java.sql.Connection;
|
|
|
import java.sql.PreparedStatement;
|
|
|
import java.sql.SQLException;
|
|
|
import java.sql.Timestamp;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.Calendar;
|
|
|
|
|
|
/**
|
|
|
* Created by Administrator on 2016.10.11.
|
|
|
* 签约费用统计 增量
|
|
|
* 签约费用统计 到达量
|
|
|
*/
|
|
|
@Component
|
|
|
@Scope("prototype")
|
|
|
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
|
|
|
public class SignExpenseStatusJob implements Job{
|
|
|
private WlyyQuotaVO wlyyQuota;//指标对象
|
|
|
private WlyyJobConfigVO wlyyJobConfig;//配置对象
|
|
|
@Autowired
|
|
|
private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private Level1Role levelRole;
|
|
@ -55,8 +63,7 @@ public class SignExpenseStatusJob implements Job{
|
|
|
@Autowired
|
|
|
private SignDataFilter signDataFilter;
|
|
|
|
|
|
String yesterday;
|
|
|
String daybefore;
|
|
|
String date; //起始时间
|
|
|
|
|
|
public void execute(JobExecutionContext context)
|
|
|
throws JobExecutionException {
|
|
@ -67,11 +74,11 @@ public class SignExpenseStatusJob implements Job{
|
|
|
wlyyQuota = (WlyyQuotaVO) map.get("quota");
|
|
|
wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
|
|
|
|
|
|
daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
|
|
|
yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
|
|
|
date = StringUtils.isEmpty(map.get("yesterday")) ? SignJob.getDayString(-1) : map.get("yesterday").toString();
|
|
|
//计算指标
|
|
|
computequota();
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
//如果出錯立即重新執行
|
|
|
JobExecutionException e2 =new JobExecutionException(e);
|
|
|
e2.setRefireImmediately(true);
|
|
@ -81,53 +88,47 @@ public class SignExpenseStatusJob implements Job{
|
|
|
/**
|
|
|
* 计算指标
|
|
|
*/
|
|
|
@Transactional
|
|
|
private void computequota() {
|
|
|
private void computequota()throws Exception {
|
|
|
try {
|
|
|
jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 16 + "'");
|
|
|
deleteData();
|
|
|
//新建任务日志对象
|
|
|
QuartzJobLog quartzJobLog = new QuartzJobLog();
|
|
|
quartzJobLog.setJobStartTime(new Date());
|
|
|
quartzJobLog.setJobId(wlyyJobConfig.getId());
|
|
|
quartzJobLog.setJobName(wlyyJobConfig.getJobName());
|
|
|
//找出今天的已改簽信息
|
|
|
String sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where a.type =2 and a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and a.apply_date< '"+yesterday+ Constant.quota_date_last+"' ";
|
|
|
|
|
|
//抽取數據
|
|
|
List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
|
|
|
//抽取第一种条件的语句
|
|
|
String sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where a.type =2 and a.apply_date< '"+date+ Constant.quota_date_last+"' and expenses_status=1";
|
|
|
String sqlCount=" select count(id) from wlyy_sign_family a where a.type =2 and a.apply_date< '"+date+ Constant.quota_date_last+"'and expenses_status=1 ";
|
|
|
//抽取數據 expensesStatus=1
|
|
|
List<SignFamily> signFamilies_1= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
|
|
|
//抽取第二种条件的语句
|
|
|
sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where a.type =2 and a.apply_date< '"+date+ Constant.quota_date_last+"' and (expenses_status !=1 or expenses_status is null)";
|
|
|
sqlCount=" select count(id) from wlyy_sign_family a where a.type =2 and a.apply_date< '"+date+ Constant.quota_date_last+"'and (expenses_status !=1 or expenses_status is null) ";
|
|
|
List<SignFamily> signFamilies_2= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
|
|
|
//抽取的语句
|
|
|
sql="select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where a.type =2 and a.apply_date< '"+date+ Constant.quota_date_last+"'";
|
|
|
//清洗數據
|
|
|
FilterModel etlModels= signDataFilter.filter(signFamilies, SignDataFilter.level2Expenses,sql,yesterday);
|
|
|
FilterModel etlModels= signDataFilter.filter(signFamilies_1, SignDataFilter.level2Expenses,sql,date);
|
|
|
//统计数据
|
|
|
//统计数据 一级维度
|
|
|
List<Map<String, List<ETLModel>>> returnDatas= levelRole.elt(etlModels.getEtlModelList());
|
|
|
//统计数据 二级维度
|
|
|
List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnDatas);
|
|
|
//保存数据
|
|
|
dbStorage.saveByLevel2(patientSexRoleData,yesterday,wlyyQuota,2,4,0);
|
|
|
|
|
|
List<Map<String, Map<String, List<ETLModel>>>> level2Data= level2Role.elt(returnDatas);
|
|
|
//数据转换
|
|
|
dbStorage.saveByLevel2(level2Data,date,wlyyQuota,2,4,0);
|
|
|
//保存日志
|
|
|
quartzJobLog.setJobEndTime(new Date());
|
|
|
quartzJobLog.setJobContent(etlModels.getMessage());
|
|
|
quartzJobLog.setJobType(etlModels.getError()?"1":"0");
|
|
|
quartzJobLogDao.save(quartzJobLog); }
|
|
|
catch (Exception e) {
|
|
|
dbStorage.saveLog(quartzJobLog);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount,String sql) {
|
|
|
StringBuffer string = new StringBuffer("统计" + yesterday + " 的簽約数据完成 ,数据库查询到簽約数据:" + signFamilys.size());
|
|
|
string.append(",sql语句:"+sql);
|
|
|
string.append(",过滤的脏数据数目:" + errorCount);
|
|
|
string.append(",统计到市的数据总数:" + cityCount);
|
|
|
string.append(",统计到区的数据总数:" + townCount);
|
|
|
string.append(",统计到机构的数据总数:" + orgCount);
|
|
|
string.append(",统计到团队的数据总数:" + qkCount);
|
|
|
string.append(",是否统计成功:" + isAll);
|
|
|
if (!isAll) {
|
|
|
string.append(",失败原因:" + errorContent);
|
|
|
}
|
|
|
return string.toString();
|
|
|
@Transactional
|
|
|
private void deleteData() {
|
|
|
jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + date + "' and quato_code='" + 16 + "'");
|
|
|
}
|
|
|
|
|
|
public String getYesterday() {
|