|
@ -4,7 +4,6 @@ package com.yihu.jw.es.service;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.yihu.jw.area.dao.BaseCityDao;
|
|
|
|
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
|
|
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
@ -71,8 +70,6 @@ public class StatisticsEsService {
|
|
@Autowired
|
|
@Autowired
|
|
private BaseOrgDao orgDao;
|
|
private BaseOrgDao orgDao;
|
|
@Autowired
|
|
@Autowired
|
|
private BaseCityDao cityDao;
|
|
|
|
@Autowired
|
|
|
|
private BaseEvaluateScoreService baseEvaluateScoreService;
|
|
private BaseEvaluateScoreService baseEvaluateScoreService;
|
|
@Autowired
|
|
@Autowired
|
|
private HibenateUtils hibenateUtils;
|
|
private HibenateUtils hibenateUtils;
|
|
@ -6658,19 +6655,291 @@ public class StatisticsEsService {
|
|
* 6、同比增长:(本期统计周期数据-去年同期统计周期数据)去年同期统计周期数据× 100%;
|
|
* 6、同比增长:(本期统计周期数据-去年同期统计周期数据)去年同期统计周期数据× 100%;
|
|
* 7、环比增长:(本期统计周期数据 - 上期统计周期数据)上期统计周期数据× 100%;
|
|
* 7、环比增长:(本期统计周期数据 - 上期统计周期数据)上期统计周期数据× 100%;
|
|
*/
|
|
*/
|
|
public JSONObject businessSituation(ScreenQvo qvo){
|
|
|
|
|
|
public JSONObject businessSituation(ScreenQvo qvo) throws Exception{
|
|
JSONObject json = new JSONObject();
|
|
JSONObject json = new JSONObject();
|
|
// 计算上一个周期 开始时间period[0] 、结束时间period[1]
|
|
// 计算上一个周期 开始时间period[0] 、结束时间period[1]
|
|
String[] period = calculatePreviousPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
String[] period = calculatePreviousPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
//计算去年同期时间段 开始时间periodYear[0] 、结束时间periodYear[1]
|
|
//计算去年同期时间段 开始时间periodYear[0] 、结束时间periodYear[1]
|
|
String[] periodYear = calculatePreviousYearPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
String[] periodYear = calculatePreviousYearPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
|
|
|
|
//----------------------问诊量--------------------------------------
|
|
|
|
|
|
|
|
List<SaveModel> wz_model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, null);//问诊
|
|
|
|
//上个周期
|
|
|
|
List<SaveModel> wz_model02 = elasticsearchUtil.findListDateQuotaLevel1(period[0], period[1], qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, null);//问诊
|
|
|
|
//去年同期时间
|
|
|
|
List<SaveModel> wz_model03 = elasticsearchUtil.findListDateQuotaLevel1(periodYear[0], periodYear[1], qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, null);//问诊
|
|
|
|
|
|
|
|
//问诊类型 17 视频咨询 //1 图文咨询 //9 图文复诊 //12 专科协同 //16 视频复诊
|
|
|
|
List<SaveModel> wz_model01_17 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "17");
|
|
|
|
List<SaveModel> wz_model01_1 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "1");
|
|
|
|
List<SaveModel> wz_model01_9 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "9");
|
|
|
|
List<SaveModel> wz_model01_12 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "12");
|
|
|
|
List<SaveModel> wz_model01_16 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "16");
|
|
|
|
json.put("wzType17", countListTotal(wz_model01_17));//问诊类型_视频咨询
|
|
|
|
json.put("wzType1", countListTotal(wz_model01_1));//问诊类型_图文咨询
|
|
|
|
json.put("wzType9", countListTotal(wz_model01_9));//问诊类型_图文复诊
|
|
|
|
json.put("wzType12", countListTotal(wz_model01_12));//问诊类型_专科协同
|
|
|
|
json.put("wzType16", countListTotal(wz_model01_16));//问诊类型_视频复诊
|
|
|
|
|
|
|
|
//---------------------【处方量】------------------------------------
|
|
|
|
|
|
|
|
List<SaveModel> cf_model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, null, null);//开方量
|
|
|
|
//上个周期
|
|
|
|
List<SaveModel> cf_model02 = elasticsearchUtil.findListDateQuotaLevel1(period[0], period[1], qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, null, null);//开方量
|
|
|
|
//去年同期时间
|
|
|
|
List<SaveModel> cf_model03 = elasticsearchUtil.findListDateQuotaLevel1(periodYear[0], periodYear[1], qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, null, null);//开方量
|
|
|
|
|
|
|
|
//---------------------【接诊量】------------------------------------
|
|
|
|
//接诊量-已接诊
|
|
|
|
List<SaveModel> jz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12,14,16", "1", null, "9,16,12,1,17", "1");
|
|
|
|
//上个周期
|
|
|
|
List<SaveModel> jz_model02 = elasticsearchUtil.findListDateQuotaLevel2(period[0], period[1], qvo.getArea(), qvo.getLevel(), "12,14,16", "1", null, "9,16,12,1,17", "1");
|
|
|
|
//去年同期时间
|
|
|
|
List<SaveModel> jz_model03 = elasticsearchUtil.findListDateQuotaLevel2(periodYear[0], periodYear[1], qvo.getArea(), qvo.getLevel(), "12,14,16", "1", null, "9,16,12,1,17", "1");
|
|
|
|
|
|
|
|
//接诊量
|
|
|
|
int patientVolume = countListTotal(jz_model01);
|
|
|
|
int periodPatientVolume = countListTotal(jz_model02);//上个周期
|
|
|
|
int periodYearPatientVolume = countListTotal(jz_model03);//去年同期时间
|
|
|
|
|
|
|
|
|
|
|
|
json.put("wzl_jz", patientVolume);//接诊量
|
|
|
|
json.put("wzl_jz_hb", getRange((patientVolume - periodPatientVolume), periodPatientVolume, 0));//接诊量-环比
|
|
|
|
json.put("wzl_jz_tb", getRange((patientVolume - periodYearPatientVolume), periodYearPatientVolume, 0));//接诊量-同比
|
|
|
|
|
|
|
|
//问诊
|
|
|
|
int wzl = countListTotal(wz_model01);
|
|
|
|
//同比和环比
|
|
|
|
int wzl_period = countListTotal(wz_model02);//上个周期
|
|
|
|
int wzl_periodYear = countListTotal(wz_model03);//去年同周期
|
|
|
|
json.put("wzl_total", wzl);//问诊量
|
|
|
|
json.put("wzl_jzl", getRange(patientVolume, wzl, 0));//【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
|
|
json.put("wzl_hb", getRange((wzl - wzl_period), wzl_period, 0));//环比
|
|
|
|
json.put("wzl_tb", getRange((wzl - wzl_periodYear), wzl_periodYear, 0));//同比
|
|
|
|
|
|
|
|
//开方 【处方量】
|
|
|
|
int kf_total = countListTotal(cf_model01);
|
|
|
|
int kf_period = countListTotal(cf_model02);
|
|
|
|
//上个周期
|
|
|
|
int kf_periodYear = countListTotal(cf_model03);
|
|
|
|
//去年同周期
|
|
|
|
json.put("kf_total", kf_total);//开方量
|
|
|
|
json.put("kf_kfl", getRange(kf_total, patientVolume, 0));//【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
|
|
json.put("kf_hb", getRange((kf_total - kf_period), kf_period, 0));//环比
|
|
|
|
json.put("kf_tb", getRange((kf_total - kf_periodYear), kf_periodYear, 0));//同比
|
|
|
|
|
|
|
|
//门诊转住院
|
|
|
|
String sql = "select COUNT(DISTINCT r.id) from wlyy_outpatient_hospitalization r,base_doctor_hospital bdh,base_doctor bd,dict_hospital_dept hd " +
|
|
|
|
"WHERE r.doctor=bdh.doctor_code and bdh.doctor_code = bd.id AND hd.code= bdh.dept_code " +
|
|
|
|
"AND bdh.del=1 AND hd.CONSULT_DEPT_FLAG='1' AND bd.job_title_code IN('1201','1301','1401','1101','066','067','061','1310','061','065','1','2','3','4') ";
|
|
|
|
//本周期
|
|
|
|
String sql01 = sql + " and r.create_time>='"+qvo.getStartDate()+"' and r.create_time<='"+qvo.getEndDate()+" 23:59:59'";
|
|
|
|
//上个周期
|
|
|
|
String sql02 = sql + " and r.create_time>='"+period[0]+"' and r.create_time<='"+period[1]+" 23:59:59'";
|
|
|
|
//去年同期
|
|
|
|
String sql03 = sql + " and r.create_time>='"+periodYear[0]+"' and r.create_time<='"+periodYear[1]+" 23:59:59'";
|
|
|
|
if("5".equals(qvo.getLevel())){
|
|
|
|
//科室
|
|
|
|
sql01 += " and hd.code='"+qvo.getArea()+"' ";
|
|
|
|
sql02 += " and hd.code='"+qvo.getArea()+"' ";
|
|
|
|
sql03 += " and hd.code='"+qvo.getArea()+"' ";
|
|
|
|
}
|
|
|
|
if("6".equals(qvo.getLevel())){
|
|
|
|
//医生
|
|
|
|
sql01 += " and r.doctor='"+qvo.getArea()+"' ";
|
|
|
|
sql02 += " and r.doctor='"+qvo.getArea()+"' ";
|
|
|
|
sql03 += " and r.doctor='"+qvo.getArea()+"' ";
|
|
|
|
}
|
|
|
|
|
|
|
|
//已接诊的复诊数
|
|
|
|
String sql04 = sql01.replace("wlyy_outpatient_hospitalization","wlyy_outpatient");
|
|
|
|
sql04 += " and r.status IN(1,2,3) and r.outpatient_type !='3' ";
|
|
|
|
|
|
|
|
Integer hospitalization01 = jdbcTemplate.queryForObject(sql01,Integer.class);
|
|
|
|
Integer hospitalization02 = jdbcTemplate.queryForObject(sql02,Integer.class);
|
|
|
|
Integer hospitalization03 = jdbcTemplate.queryForObject(sql03,Integer.class);
|
|
|
|
Integer hospitalization04 = jdbcTemplate.queryForObject(sql04,Integer.class);
|
|
|
|
json.put("ar_total", hospitalization01);//门诊转住院量
|
|
|
|
json.put("ar_kfl", getRange(hospitalization01, hospitalization04, 0));//【转化率】= 门诊转住院量 ÷ 已接诊的复诊数 ×100%
|
|
|
|
json.put("ar_hb", getRange((hospitalization01 - hospitalization02), hospitalization02, 0));//环比
|
|
|
|
json.put("ar_tb", getRange((hospitalization01 - hospitalization03), hospitalization03, 0));//同比
|
|
|
|
|
|
return json;
|
|
return json;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 业务分析
|
|
|
|
* 1、【总问诊量】= 用户成功发起的问诊次数,包含取消的订单(同一人发起多次累计多次);
|
|
|
|
* 2、图文门诊、图文咨询、视频问诊、视频咨询、社区协诊 = 患者发起的属于该类型的订单次数(同一人发起多次累计多次);
|
|
|
|
* 3、【处方量】 = 成功开方且审核通过的数量;
|
|
|
|
* 4、【接诊率】 = 接诊量 ÷ 问诊量 × 100%;
|
|
|
|
* 5、【问诊转住院】 = 医生登记住院申请的次数;
|
|
|
|
* 6、根据页面显示医院总数据或科室数据!
|
|
|
|
*/
|
|
|
|
public JSONObject businessAnalysis(ScreenQvo qvo) throws Exception{
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
//----------------------问诊量--------------------------------------
|
|
|
|
|
|
|
|
List<SaveModel> wz_model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, null);//问诊
|
|
|
|
|
|
|
|
//问诊类型 17 视频咨询 //1 图文咨询 //9 图文复诊 //12 专科协同 //16 视频复诊
|
|
|
|
List<SaveModel> wz_model01_17 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "17");
|
|
|
|
List<SaveModel> wz_model01_1 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "1");
|
|
|
|
List<SaveModel> wz_model01_9 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "9");
|
|
|
|
List<SaveModel> wz_model01_12 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "12");
|
|
|
|
List<SaveModel> wz_model01_16 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, null, "16");
|
|
|
|
json.put("wzType17", countListTotal(wz_model01_17));//问诊类型_视频咨询
|
|
|
|
json.put("wzType1", countListTotal(wz_model01_1));//问诊类型_图文咨询
|
|
|
|
json.put("wzType9", countListTotal(wz_model01_9));//问诊类型_图文复诊
|
|
|
|
json.put("wzType12", countListTotal(wz_model01_12));//问诊类型_专科协同
|
|
|
|
json.put("wzType16", countListTotal(wz_model01_16));//问诊类型_视频复诊
|
|
|
|
|
|
|
|
//---------------------【处方量】------------------------------------
|
|
|
|
List<SaveModel> cf_model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, null, null);//开方量
|
|
|
|
//---------------------【接诊量】------------------------------------
|
|
|
|
//接诊量-已接诊
|
|
|
|
List<SaveModel> jz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12,14,16", "1", null, "9,16,12,1,17", "1");
|
|
|
|
//接诊量
|
|
|
|
int patientVolume = countListTotal(jz_model01);
|
|
|
|
json.put("wzl_jz", patientVolume);//接诊量
|
|
|
|
|
|
|
|
//问诊
|
|
|
|
int wzl = countListTotal(wz_model01);
|
|
|
|
json.put("wzl_total", wzl);//问诊量
|
|
|
|
json.put("wzl_jzl", getRange(patientVolume, wzl, 0));//【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
|
|
|
|
|
|
//开方 【处方量】
|
|
|
|
int kf_total = countListTotal(cf_model01);
|
|
|
|
//去年同周期
|
|
|
|
json.put("kf_total", kf_total);//开方量
|
|
|
|
json.put("kf_kfl", getRange(kf_total, patientVolume, 0));//【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
|
|
|
|
|
|
//门诊转住院
|
|
|
|
String sql = "select COUNT(DISTINCT r.id) from wlyy_outpatient_hospitalization r,base_doctor_hospital bdh,base_doctor bd,dict_hospital_dept hd " +
|
|
|
|
"WHERE r.doctor=bdh.doctor_code and bdh.doctor_code = bd.id AND hd.code= bdh.dept_code " +
|
|
|
|
"AND bdh.del=1 AND hd.CONSULT_DEPT_FLAG='1' AND bd.job_title_code IN('1201','1301','1401','1101','066','067','061','1310','061','065','1','2','3','4') ";
|
|
|
|
//本周期
|
|
|
|
String sql01 = sql + " and r.create_time>='"+qvo.getStartDate()+"' and r.create_time<='"+qvo.getEndDate()+" 23:59:59'";
|
|
|
|
if("5".equals(qvo.getLevel())){
|
|
|
|
//科室
|
|
|
|
sql01 += " and hd.code='"+qvo.getArea()+"' ";
|
|
|
|
}
|
|
|
|
if("6".equals(qvo.getLevel())){
|
|
|
|
//医生
|
|
|
|
sql01 += " and r.doctor='"+qvo.getArea()+"' ";
|
|
|
|
}
|
|
|
|
|
|
|
|
//已接诊的复诊数
|
|
|
|
String sql04 = sql01.replace("wlyy_outpatient_hospitalization","wlyy_outpatient");
|
|
|
|
sql04 += " and r.status IN(1,2,3) and r.outpatient_type !='3' ";
|
|
|
|
|
|
|
|
Integer hospitalization01 = jdbcTemplate.queryForObject(sql01,Integer.class);
|
|
|
|
Integer hospitalization04 = jdbcTemplate.queryForObject(sql04,Integer.class);
|
|
|
|
json.put("ar_total", hospitalization01);//门诊转住院量
|
|
|
|
json.put("ar_kfl", getRange(hospitalization01, hospitalization04, 0));//【转化率】= 门诊转住院量 ÷ 已接诊的复诊数 ×100%
|
|
|
|
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 业务增长趋势
|
|
|
|
* 1、显示展示的时间范围内的收入趋势图,默认按日展示,支持管理员点击区域右上角进行“日、周、月”进行趋势图X轴的切换;
|
|
|
|
* 2、支持管理员点击趋势图上的点位时,展示该点位的时间及各类型的订单数量;
|
|
|
|
*/
|
|
|
|
public JSONObject businessNewTrends(ScreenQvo qvo) throws Exception{
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
//问诊类型 17 视频咨询 //1 图文咨询 //9 图文复诊 //12 专科协同 //16 视频复诊
|
|
|
|
List<SaveModel> wz_17 = elasticsearchUtil.findLineChartDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, qvo.getInterval(), "17");
|
|
|
|
List<SaveModel> wz_1 = elasticsearchUtil.findLineChartDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, qvo.getInterval(), "1");
|
|
|
|
List<SaveModel> wz_9 = elasticsearchUtil.findLineChartDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, qvo.getInterval(), "9");
|
|
|
|
List<SaveModel> wz_12 = elasticsearchUtil.findLineChartDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, qvo.getInterval(), "12");
|
|
|
|
List<SaveModel> wz_16 = elasticsearchUtil.findLineChartDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", SaveModel.timeLevel_ZL, qvo.getInterval(), "16");
|
|
|
|
|
|
|
|
List<JSONObject> list17 = new ArrayList<>();
|
|
|
|
List<JSONObject> list1 = new ArrayList<>();
|
|
|
|
List<JSONObject> list9 = new ArrayList<>();
|
|
|
|
List<JSONObject> list12 = new ArrayList<>();
|
|
|
|
List<JSONObject> list16 = new ArrayList<>();
|
|
|
|
for (SaveModel saveModel : wz_17) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
list17.add(range);
|
|
|
|
}
|
|
|
|
for (SaveModel saveModel : wz_1) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
list1.add(range);
|
|
|
|
}
|
|
|
|
for (SaveModel saveModel : wz_9) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
list9.add(range);
|
|
|
|
}
|
|
|
|
for (SaveModel saveModel : wz_12) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
list12.add(range);
|
|
|
|
}
|
|
|
|
for (SaveModel saveModel : wz_16) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
list16.add(range);
|
|
|
|
}
|
|
|
|
json.put("wz_1",list1);
|
|
|
|
json.put("wz_9",list9);
|
|
|
|
json.put("wz_12",list12);
|
|
|
|
json.put("wz_16",list16);
|
|
|
|
json.put("wz_17",list17);
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 接诊排行
|
|
|
|
*/
|
|
|
|
public List<JSONObject> businessRanking(ScreenQvo qvo) throws Exception{
|
|
|
|
String level2_type = qvo.getLevel2_type();
|
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel2New(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(),
|
|
|
|
"12,14,16", "1", "9,16,12,1,17", "1",null,level2_type);
|
|
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
|
if (level2_type.equals(SaveModel.deptLevel)) {
|
|
|
|
object1.put("dept", saveModel.getDept());
|
|
|
|
object1.put("deptName", saveModel.getDeptName());
|
|
|
|
} else if (level2_type.equals(SaveModel.doctorLevel)) {
|
|
|
|
object1.put("doctor", saveModel.getDoctor());
|
|
|
|
object1.put("doctorName", saveModel.getDoctorName());
|
|
|
|
} else if (level2_type.equals(SaveModel.OrgLevel)) {
|
|
|
|
object1.put("hospital", saveModel.getHospital());
|
|
|
|
object1.put("hospitalName", saveModel.getHospitalName());
|
|
|
|
}
|
|
|
|
object1.put("result1", saveModel.getResult1());
|
|
|
|
object1.put("result2", saveModel.getResult2());
|
|
|
|
result.add(object1);
|
|
|
|
}
|
|
|
|
// 排序
|
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
|
@Override
|
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
|
if (o1.getString("result1").compareTo(o2.getString("result1")) > 0) {
|
|
|
|
return -1;
|
|
|
|
} else if (o1.getString("result1").compareTo(o2.getString("result1")) < 0) {
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 收入情况
|
|
* 收入情况
|
|
1、【总收入】=药品费+诊查费;
|
|
1、【总收入】=药品费+诊查费;
|
|
@ -6792,6 +7061,168 @@ public class StatisticsEsService {
|
|
return json;
|
|
return json;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 收入分析
|
|
|
|
1、【总收入】= 药品费+诊查费;
|
|
|
|
2、【药品费】= 患者支付的处方费用;
|
|
|
|
3、【诊查费】= 图文门诊+图文咨询+视频问诊+视频咨询+社区协诊;
|
|
|
|
4、图文门诊、图文咨询、视频问诊、视频咨询、社区协诊 = 患者支付的属于该类型的诊查费;
|
|
|
|
5、根据页面显示医院总数据或科室数据!
|
|
|
|
*/
|
|
|
|
public JSONObject incomeAnalysis(ScreenQvo qvo) throws Exception{
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
String lowLevel = "2";
|
|
|
|
String index3 = "3";//处方费/药品费
|
|
|
|
String index21 = "21";//诊查费
|
|
|
|
//图文问诊、图文咨询、视频问诊、视频咨询、社区协诊=患者支付的属于该类型的诊查费
|
|
|
|
|
|
|
|
//药品费
|
|
|
|
double ypFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index3, SaveModel.timeLevel_ZL, null, null, null,lowLevel);
|
|
|
|
//诊查费
|
|
|
|
double zcFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, null, null, null,lowLevel);
|
|
|
|
//总收入
|
|
|
|
double totalFee = ypFee+zcFee;
|
|
|
|
|
|
|
|
//图文问诊
|
|
|
|
double ppFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "1", "1", null,lowLevel);
|
|
|
|
//图文咨询
|
|
|
|
double pcFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "3", "1", null,lowLevel);
|
|
|
|
//视频问诊
|
|
|
|
double vpFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "1", "2", null,lowLevel);
|
|
|
|
//视频咨询
|
|
|
|
double vcFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "3", "2", null,lowLevel);
|
|
|
|
//社区协诊
|
|
|
|
double sxFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "2", null, null,lowLevel);
|
|
|
|
|
|
|
|
json.put("ypFee",ypFee);
|
|
|
|
json.put("zcFee",zcFee);
|
|
|
|
json.put("totalFee",totalFee);
|
|
|
|
json.put("ppFee",ppFee);
|
|
|
|
json.put("pcFee",pcFee);
|
|
|
|
json.put("vpFee",vpFee);
|
|
|
|
json.put("vcFee",vcFee);
|
|
|
|
json.put("sxFee",sxFee);
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 收入新增趋势
|
|
|
|
* 1、显示展示的时间范围内的收入趋势图,默认按日展示,支持管理员点击区域右上角进行“日、周、月”进行趋势图X轴的切换;
|
|
|
|
* 2、支持管理员点击趋势图上的点位时,展示该点位的时间及收入;
|
|
|
|
*/
|
|
|
|
public List<JSONObject> incomeNewTrends(ScreenQvo qvo) throws Exception{
|
|
|
|
//药品费+诊查费=总收入
|
|
|
|
List<SaveModel> list = elasticsearchUtil.findLineChartDateQuotaLevel0(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), "3,21", SaveModel.timeLevel_ZL, qvo.getInterval());
|
|
|
|
List<JSONObject> feeList = new ArrayList<>();
|
|
|
|
for (SaveModel saveModel : list) {
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
|
feeList.add(range);
|
|
|
|
}
|
|
|
|
return feeList;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 收入排行
|
|
|
|
*/
|
|
|
|
public List<JSONObject> incomeRanking(ScreenQvo qvo) throws Exception{
|
|
|
|
//药品费+诊查费=总收入
|
|
|
|
String level2_type = qvo.getLevel2_type();
|
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "3,21", SaveModel.timeLevel_ZL, null, level2_type);
|
|
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
|
if (level2_type.equals(SaveModel.deptLevel)) {
|
|
|
|
object1.put("dept", saveModel.getDept());
|
|
|
|
object1.put("deptName", saveModel.getDeptName());
|
|
|
|
} else if (level2_type.equals(SaveModel.doctorLevel)) {
|
|
|
|
object1.put("doctor", saveModel.getDoctor());
|
|
|
|
object1.put("doctorName", saveModel.getDoctorName());
|
|
|
|
} else if (level2_type.equals(SaveModel.OrgLevel)) {
|
|
|
|
object1.put("hospital", saveModel.getHospital());
|
|
|
|
object1.put("hospitalName", saveModel.getHospitalName());
|
|
|
|
}
|
|
|
|
object1.put("result1", saveModel.getResult1());
|
|
|
|
object1.put("result2", saveModel.getResult2());
|
|
|
|
result.add(object1);
|
|
|
|
}
|
|
|
|
// 排序
|
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
|
@Override
|
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
|
if (o1.getString("result1").compareTo(o2.getString("result1")) > 0) {
|
|
|
|
return -1;
|
|
|
|
} else if (o1.getString("result1").compareTo(o2.getString("result1")) < 0) {
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 全院诊室患者
|
|
|
|
*/
|
|
|
|
public JSONObject orgConsultPatient(String startDate,String endDate){
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
String sql = "SELECT COUNT(if(op.`status`=3,1,null)) status3,COUNT(if(op.`status`=1,1,null)) status2 " +
|
|
|
|
",COUNT(if(op.`status`=0 and op.pay_status=1,1,null)) status1 from wlyy_outpatient op " +
|
|
|
|
"where 1=1 ";
|
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
|
sql += " and create_time>='"+startDate+"' ";
|
|
|
|
}
|
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
|
sql += " and create_time<'"+endDate+"' ";
|
|
|
|
}
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
if(list.size()>0){
|
|
|
|
Map<String,Object> map = list.get(0);
|
|
|
|
json.put("status1",map.get("status1")+"");//候诊中
|
|
|
|
json.put("status2",map.get("status2")+"");//就诊中
|
|
|
|
json.put("status3",map.get("status3")+"");//已结束
|
|
|
|
}else {
|
|
|
|
json.put("status1","0");//候诊中
|
|
|
|
json.put("status2","0");//就诊中
|
|
|
|
json.put("status3","0");//已结束
|
|
|
|
}
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 科室诊室患者
|
|
|
|
*/
|
|
|
|
public List<Map<String,Object>> deptConsultPatient(String startDate,String endDate){
|
|
|
|
String sql = "SELECT d.code,d.name,if(t.status1 is null,0,t.status1) status1, " +
|
|
|
|
"if(t.status2 is null,0,t.status2) status2,if(t.status3 is null,0,t.status3) status3 " +
|
|
|
|
"from dict_hospital_dept d LEFT JOIN ( " +
|
|
|
|
"SELECT COUNT(if(op.`status`=3,1,null)) status3,COUNT(if(op.`status`=1,1,null)) status2 " +
|
|
|
|
",COUNT(if(op.`status`=0 and op.pay_status=1,1,null)) status1, op.dept from wlyy_outpatient op " +
|
|
|
|
"where 1=1 ";
|
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
|
sql += " and create_time>='"+startDate+"' ";
|
|
|
|
}
|
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
|
sql += " and create_time<'"+endDate+"' ";
|
|
|
|
}
|
|
|
|
sql += " GROUP BY op.dept) t on d.code=t.dept " +
|
|
|
|
"WHERE d.consult_dept_flag=1 " +
|
|
|
|
"ORDER BY t.status3 desc";
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
public SaveModel findOneBySaveModelList(String startDate, String endDate, String area, int level, String index, String timeLevel,
|
|
public SaveModel findOneBySaveModelList(String startDate, String endDate, String area, int level, String index, String timeLevel,
|
|
String slaveKey1, String slaveKey2, String interval, String lowLevel){
|
|
String slaveKey1, String slaveKey2, String interval, String lowLevel){
|
|
|
|
|