|
@ -1,7 +1,9 @@
|
|
|
package com.yihu.wlyy.statistics.job.business;
|
|
|
|
|
|
import com.yihu.wlyy.statistics.dao.*;
|
|
|
import com.yihu.wlyy.statistics.etl.dataFilter.FollowUpDataFilter;
|
|
|
import com.yihu.wlyy.statistics.etl.model.ETLModel;
|
|
|
import com.yihu.wlyy.statistics.etl.model.FilterModel;
|
|
|
import com.yihu.wlyy.statistics.etl.role.Level1Role;
|
|
|
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
|
|
|
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
|
|
@ -42,22 +44,16 @@ public class FollowUpJob implements Job {
|
|
|
private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
|
|
|
@Autowired
|
|
|
private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
|
|
|
@Autowired
|
|
|
private HospitalDao hospitalDao;
|
|
|
@Autowired
|
|
|
private TownDao townDao;
|
|
|
@Autowired
|
|
|
private SignFamilyDao signFamilyDao;
|
|
|
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate_wlyy;
|
|
|
@Autowired
|
|
|
private DoctorAdminTeamDao doctorAdminTeamDao;
|
|
|
@Autowired
|
|
|
private Level1Role levelRole;
|
|
|
@Autowired
|
|
|
private DBStorage dbStorage;
|
|
|
private org.apache.tomcat.jdbc.pool.DataSource fvdataSource=new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
|
|
|
@Autowired
|
|
|
private FollowUpDataFilter followUpDataFilter;
|
|
|
|
|
|
private org.apache.tomcat.jdbc.pool.DataSource fvdataSource = new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
|
|
|
|
|
|
private JdbcTemplate jdbcTemplate = new JdbcTemplate();
|
|
|
|
|
@ -75,7 +71,7 @@ public class FollowUpJob implements Job {
|
|
|
@Override
|
|
|
public void execute(JobExecutionContext context)
|
|
|
throws JobExecutionException {
|
|
|
try{
|
|
|
try {
|
|
|
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
|
|
|
//初始化参数
|
|
|
JobDataMap map = context.getJobDetail().getJobDataMap();
|
|
@ -89,164 +85,58 @@ public class FollowUpJob implements Job {
|
|
|
//计算指标
|
|
|
jdbcTemplate.setDataSource(fvdataSource);//初始化随访的数据源
|
|
|
//線刪除今天的数据
|
|
|
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();
|
|
|
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();
|
|
|
|
|
|
computequota();
|
|
|
}catch (Exception e){
|
|
|
} catch (Exception e) {
|
|
|
//如果出錯立即重新執行
|
|
|
JobExecutionException e2 =new JobExecutionException(e);
|
|
|
JobExecutionException e2 = new JobExecutionException(e);
|
|
|
e2.setRefireImmediately(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
private void computequota() {
|
|
|
jdbcTemplate_wlyy.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+4+"'");
|
|
|
|
|
|
//新建任务日志对象
|
|
|
QuartzJobLog quartzJobLog = new QuartzJobLog();
|
|
|
quartzJobLog.setJobStartTime(new Date());
|
|
|
quartzJobLog.setJobId(wlyyJobConfig.getId());
|
|
|
quartzJobLog.setJobName(wlyyJobConfig.getJobName());
|
|
|
|
|
|
//查找出系统全部的医生
|
|
|
List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
|
|
|
Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
|
|
|
for (AdminTeam adminTeam : adminTeams) {
|
|
|
adminTeamMap.put(adminTeam.getId()+"", adminTeam);
|
|
|
}
|
|
|
//查找出系统全部的机构
|
|
|
List<Hospital> hospitals = hospitalDao.findHospital2();
|
|
|
Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
|
|
|
for (Hospital hospital : hospitals) {
|
|
|
hospitalsMap.put(hospital.getCode(), hospital);
|
|
|
}
|
|
|
//查找出厦门市全部的区
|
|
|
List<Town> towns = townDao.findByCityCode(Constant.city);
|
|
|
Map<String, Town> townsMap = new HashMap<String, Town>();
|
|
|
for (Town town : towns) {
|
|
|
townsMap.put(town.getCode(), town);
|
|
|
}
|
|
|
|
|
|
String sql=" select * from fv_plan a where a.update_time>='"+daybefore+ Constant.quota_date_last+"' and a.update_time< '"+yesterday+ Constant.quota_date_last+"' ";
|
|
|
//找出今天的随访信息
|
|
|
List<Map<String,Object>> plans = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
Long cityCount = new Long(0L); //统计到市的数目
|
|
|
Long townCount = new Long(0L); //统计到所有区的数目
|
|
|
Long orgCount =new Long(0L);//统计到所有机构的数目
|
|
|
Long adminCount = new Long(0L);//统计到所有团队的数目
|
|
|
Long errorCount=new Long(0L);//脏数据
|
|
|
Boolean isAll=true;//是否统计失败
|
|
|
StringBuffer errorContent=new StringBuffer();
|
|
|
//统计有已改簽的
|
|
|
List<ETLModel> etlModels=new ArrayList<ETLModel>();
|
|
|
//数据过滤清洗出脏数据 -----------start
|
|
|
for(Map<String,Object> plan:plans){
|
|
|
ETLModel etlModel=new ETLModel();
|
|
|
Object idCard=plan.get("id_card");//得到隨訪的身份證
|
|
|
if(StringUtils.isEmpty(idCard)){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",随访(fv_plan)表id_card为空");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
SignFamily signFamily=signFamilyDao.findByIdcard(idCard.toString());
|
|
|
if(signFamily==null){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",签约code:,随访中的患者身份证在签约表中找不到数据");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
Long adminTeamId=signFamily.getAdminTeamCode();
|
|
|
if(adminTeamId==null||adminTeamId<=0){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+" 中的adminTeamId为空");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamCode());
|
|
|
if(adminTeam==null){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+",医生团队不存在");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
//统计机构------------------start ------------------
|
|
|
//判断医生属于哪个机构
|
|
|
String orgCodeTemp="";
|
|
|
String orgCode=adminTeam.getOrgCode();
|
|
|
if(StringUtils.isEmpty(orgCode)){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队(wlyy_admin_team)机构为空");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
//统计机构
|
|
|
if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
|
|
|
//统计站
|
|
|
orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
|
|
|
}else{
|
|
|
//统计社区
|
|
|
orgCodeTemp=orgCode;
|
|
|
}
|
|
|
Hospital hospital=hospitalsMap.get(orgCodeTemp);
|
|
|
if(hospital==null){
|
|
|
errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队的机构不存在");
|
|
|
isAll=false;
|
|
|
continue;
|
|
|
}
|
|
|
String town =hospital.getTown();
|
|
|
if(StringUtils.isEmpty(town)) {
|
|
|
errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town为空");
|
|
|
isAll=false;
|
|
|
errorCount++;
|
|
|
continue;
|
|
|
}
|
|
|
Town townObj =townsMap.get(town);
|
|
|
if(townObj==null) {
|
|
|
errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town不存在");
|
|
|
isAll=false;
|
|
|
errorCount++;
|
|
|
continue;
|
|
|
}
|
|
|
etlModel.setAdminTeam(adminTeam.getId()+"");
|
|
|
etlModel.setHospital(orgCodeTemp);
|
|
|
etlModel.setTown(hospital.getTown());
|
|
|
etlModel.setCity(Constant.city);
|
|
|
etlModel.setIdcard(signFamily.getIdcard());
|
|
|
etlModels.add(etlModel);
|
|
|
//统计数目+1
|
|
|
cityCount++;
|
|
|
townCount++;
|
|
|
orgCount++;
|
|
|
adminCount++;
|
|
|
}
|
|
|
//数据过滤清洗出脏数据 -----------end
|
|
|
try{
|
|
|
//统计数据
|
|
|
List<Map<String, List<ETLModel>>> returnDatas= levelRole.elt(etlModels);
|
|
|
try {
|
|
|
jdbcTemplate_wlyy.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 4 + "'");
|
|
|
|
|
|
//新建任务日志对象
|
|
|
QuartzJobLog quartzJobLog = new QuartzJobLog();
|
|
|
quartzJobLog.setJobStartTime(new Date());
|
|
|
quartzJobLog.setJobId(wlyyJobConfig.getId());
|
|
|
quartzJobLog.setJobName(wlyyJobConfig.getJobName());
|
|
|
|
|
|
String sql = " select * from fv_plan a where a.update_time>='" + daybefore + Constant.quota_date_last + "' and a.update_time< '" + yesterday + Constant.quota_date_last + "' ";
|
|
|
//找出今天的随访信息
|
|
|
List<Map<String, Object>> plans = jdbcTemplate.queryForList(sql);
|
|
|
FilterModel etlModels = followUpDataFilter.filter(plans, sql, yesterday);
|
|
|
// 统计数据
|
|
|
List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels.getEtlModelList());
|
|
|
//保存数据
|
|
|
dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
|
|
|
}catch (Exception e){
|
|
|
dbStorage.saveByLevel1(returnDatas, yesterday, wlyyQuota);
|
|
|
//保存日志
|
|
|
quartzJobLog.setJobEndTime(new Date());
|
|
|
quartzJobLog.setJobContent(etlModels.getMessage());
|
|
|
quartzJobLog.setJobType(etlModels.getError() ? "1" : "0");
|
|
|
quartzJobLogDao.save(quartzJobLog);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
errorContent.append("统计失败:"+e.getMessage());
|
|
|
}
|
|
|
//保存日志
|
|
|
quartzJobLog.setJobEndTime(new Date());
|
|
|
quartzJobLog.setJobContent(saveContent(plans,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount,sql));
|
|
|
quartzJobLog.setJobType(isAll?"1":"0");
|
|
|
quartzJobLogDao.save(quartzJobLog);
|
|
|
}
|
|
|
|
|
|
|
|
|
private String saveContent(List<Map<String, Object>> plans, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount,String sql) {
|
|
|
StringBuffer string=new StringBuffer("统计"+yesterday+" 的随访完成 ,数据库查询到随访数目:"+plans.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);
|
|
|
private String saveContent(List<Map<String, Object>> plans, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount, String sql) {
|
|
|
StringBuffer string = new StringBuffer("统计" + yesterday + " 的随访完成 ,数据库查询到随访数目:" + plans.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();
|
|
|
}
|
|
@ -281,10 +171,10 @@ public class FollowUpJob implements Job {
|
|
|
wlyyQuotaResultDao.save(wlyyQuotaResult);
|
|
|
}
|
|
|
|
|
|
private String getOrg(String org){
|
|
|
if(!"00".equals(org.substring(org.length()-2,org.length()))){
|
|
|
return org.substring(0,org.length()-2)+"00";
|
|
|
}else{
|
|
|
private String getOrg(String org) {
|
|
|
if (!"00".equals(org.substring(org.length() - 2, org.length()))) {
|
|
|
return org.substring(0, org.length() - 2) + "00";
|
|
|
} else {
|
|
|
return org;
|
|
|
}
|
|
|
}
|