|
@ -6079,6 +6079,7 @@ public class StatisticsEsService {
|
|
* 【总收入】= 诊查费(21) + 处方费(3)
|
|
* 【总收入】= 诊查费(21) + 处方费(3)
|
|
* 【问诊量】= 用户成功发起问诊量,包含取消的订单(同一人发起多次累计多次) 【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
* 【问诊量】= 用户成功发起问诊量,包含取消的订单(同一人发起多次累计多次) 【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
* 【处方量】= 成功接诊后开方数量 【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
* 【处方量】= 成功接诊后开方数量 【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
|
|
* 门诊转住院:医生登记住院申请的次数
|
|
*/
|
|
*/
|
|
public JSONObject getTotal3Data(ScreenQvo qvo) throws Exception {
|
|
public JSONObject getTotal3Data(ScreenQvo qvo) throws Exception {
|
|
JSONObject result = new JSONObject();
|
|
JSONObject result = new JSONObject();
|
|
@ -6135,6 +6136,7 @@ public class StatisticsEsService {
|
|
//去年同期时间
|
|
//去年同期时间
|
|
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");
|
|
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");
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
* 计算同比和环比
|
|
* 计算同比和环比
|
|
* 环比增长= (本期统计周期数据-上期统计周期数据)上期统计周期数据×100%
|
|
* 环比增长= (本期统计周期数据-上期统计周期数据)上期统计周期数据×100%
|
|
@ -6182,6 +6184,44 @@ public class StatisticsEsService {
|
|
result.put("kf_kfl", getRange(kf_total, patientVolume, 0));//【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
result.put("kf_kfl", getRange(kf_total, patientVolume, 0));//【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
result.put("kf_hb", getRange((kf_total - kf_period), kf_period, 0));//环比
|
|
result.put("kf_hb", getRange((kf_total - kf_period), kf_period, 0));//环比
|
|
result.put("kf_tb", getRange((kf_total - kf_periodYear), kf_periodYear, 0));//同比
|
|
result.put("kf_tb", getRange((kf_total - kf_periodYear), kf_periodYear, 0));//同比
|
|
|
|
|
|
|
|
if("1".equals(qvo.getType())){
|
|
|
|
//门诊转住院
|
|
|
|
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);
|
|
|
|
result.put("ar_total", hospitalization01);//门诊转住院量
|
|
|
|
result.put("ar_kfl", getRange(hospitalization01, hospitalization04, 0));//【转化率】= 门诊转住院量 ÷ 已接诊的复诊数 ×100%
|
|
|
|
result.put("ar_hb", getRange((hospitalization01 - hospitalization02), hospitalization02, 0));//环比
|
|
|
|
result.put("ar_tb", getRange((hospitalization01 - hospitalization03), hospitalization03, 0));//同比
|
|
|
|
}
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
@ -6608,6 +6648,184 @@ public class StatisticsEsService {
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 业务情况说明
|
|
|
|
* 1、【问诊量】= 用户成功发起问诊量,包含取消的订单(同一人发起多次累计多次);
|
|
|
|
* 2、问诊类型:支持管理员点击问诊类型的颜色,展示该问诊类型占问诊量的百分比。
|
|
|
|
* 3、【处方量】 = 成功接诊开放的数量;
|
|
|
|
* 4、【接诊率】 = 接诊量 ÷ 问诊量 × 100%;
|
|
|
|
* 5、【问诊转住院】 = 医生登记住院申请的次数;
|
|
|
|
* 6、同比增长:(本期统计周期数据-去年同期统计周期数据)去年同期统计周期数据× 100%;
|
|
|
|
* 7、环比增长:(本期统计周期数据 - 上期统计周期数据)上期统计周期数据× 100%;
|
|
|
|
*/
|
|
|
|
public JSONObject businessSituation(ScreenQvo qvo){
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
// 计算上一个周期 开始时间period[0] 、结束时间period[1]
|
|
|
|
String[] period = calculatePreviousPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
//计算去年同期时间段 开始时间periodYear[0] 、结束时间periodYear[1]
|
|
|
|
String[] periodYear = calculatePreviousYearPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 收入情况
|
|
|
|
1、【总收入】=药品费+诊查费;
|
|
|
|
2、【药品费】=患者支付的处方费用;
|
|
|
|
3、【诊查费】=图文门诊+图文咨询+视频问诊+视频咨询+社区协诊;
|
|
|
|
4、同比增长:(本期统计周期数据-去年同期统计周期数据)去年同期统计周期数据× 100%;
|
|
|
|
5、环比增长:(本期统计周期数据 - 上期统计周期数据)上期统计周期数据× 100%;
|
|
|
|
6、图文问诊、图文咨询、视频问诊、视频咨询、社区协诊=患者支付的属于该类型的诊查费;
|
|
|
|
7、环形图,支持管理员点击颜色,显示所属类别占总收入的百分比;
|
|
|
|
8、点击【查看更多】按钮,页面跳转至「收入分析」页。
|
|
|
|
*/
|
|
|
|
public JSONObject incomeSituation(ScreenQvo qvo) throws Exception{
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
// 计算上一个周期 开始时间period[0] 、结束时间period[1]
|
|
|
|
String[] period = calculatePreviousPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
//计算去年同期时间段 开始时间periodYear[0] 、结束时间periodYear[1]
|
|
|
|
String[] periodYear = calculatePreviousYearPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
|
|
|
|
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 ypFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index3, SaveModel.timeLevel_ZL, null, null, null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double ypFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], 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 zcFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, null, null, null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double zcFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, null, null, null,lowLevel);
|
|
|
|
//总收入
|
|
|
|
double totalFee = ypFee+zcFee;
|
|
|
|
double totalFee_l1 = ypFee_l1+zcFee_l1;
|
|
|
|
double totalFee_l2 = ypFee_l2+zcFee_l2;
|
|
|
|
|
|
|
|
//图文问诊
|
|
|
|
double ppFee = findResult1BySaveModelList(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "1", "1", null,lowLevel);
|
|
|
|
//上一个周期
|
|
|
|
double ppFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "1", "1", null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double ppFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], 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 pcFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "3", "1", null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double pcFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], 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 vpFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "1", "2", null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double vpFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], 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 vcFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "3", "2", null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double vcFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], 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);
|
|
|
|
//上一个周期
|
|
|
|
double sxFee_l1 = findResult1BySaveModelList(period[0], period[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "2", null, null,lowLevel);
|
|
|
|
//去年同期
|
|
|
|
double sxFee_l2 = findResult1BySaveModelList(periodYear[0], periodYear[1], qvo.getArea(),
|
|
|
|
qvo.getLevel(), index21, SaveModel.timeLevel_ZL, "2", null, null,lowLevel);
|
|
|
|
|
|
|
|
|
|
|
|
json.put("ypFee",ypFee);
|
|
|
|
json.put("ypFee_hb", getDoubleRange((ypFee - ypFee_l1), ypFee_l1, 0));//环比
|
|
|
|
json.put("ypFee_tb", getDoubleRange((ypFee - ypFee_l2), ypFee_l2, 0));//同比
|
|
|
|
json.put("zcFee",zcFee);
|
|
|
|
json.put("zcFee_hb", getDoubleRange((zcFee - zcFee_l1), zcFee_l1, 0));//环比
|
|
|
|
json.put("zcFee_tb", getDoubleRange((zcFee - zcFee_l2), zcFee_l2, 0));//同比
|
|
|
|
json.put("totalFee",totalFee);
|
|
|
|
json.put("totalFee_hb", getDoubleRange((totalFee - totalFee_l1), totalFee_l1, 0));//环比
|
|
|
|
json.put("totalFee_tb", getDoubleRange((totalFee - totalFee_l2), totalFee_l2, 0));//同比
|
|
|
|
json.put("ppFee",ppFee);
|
|
|
|
json.put("ppFee_hb", getDoubleRange((ppFee - ppFee_l1), ppFee_l1, 0));//环比
|
|
|
|
json.put("ppFee_tb", getDoubleRange((ppFee - ppFee_l2), ppFee_l2, 0));//同比
|
|
|
|
json.put("pcFee",pcFee);
|
|
|
|
json.put("pcFee_hb", getDoubleRange((pcFee - pcFee_l1), pcFee_l1, 0));//环比
|
|
|
|
json.put("pcFee_tb", getDoubleRange((pcFee - pcFee_l2), pcFee_l2, 0));//同比
|
|
|
|
json.put("vpFee",vpFee);
|
|
|
|
json.put("vpFee_hb", getDoubleRange((vpFee - vpFee_l1), vpFee_l1, 0));//环比
|
|
|
|
json.put("vpFee_tb", getDoubleRange((vpFee - vpFee_l2), vpFee_l2, 0));//同比
|
|
|
|
json.put("vcFee",vcFee);
|
|
|
|
json.put("vcFee_hb", getDoubleRange((vcFee - vcFee_l1), vcFee_l1, 0));//环比
|
|
|
|
json.put("vcFee_tb", getDoubleRange((vcFee - vcFee_l2), vcFee_l2, 0));//同比
|
|
|
|
json.put("sxFee",sxFee);
|
|
|
|
json.put("sxFee_hb", getDoubleRange((sxFee - sxFee_l1), sxFee_l1, 0));//环比
|
|
|
|
json.put("sxFee_tb", getDoubleRange((sxFee - sxFee_l2), sxFee_l2, 0));//同比
|
|
|
|
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
public SaveModel findOneBySaveModelList(String startDate, String endDate, String area, int level, String index, String timeLevel,
|
|
|
|
String slaveKey1, String slaveKey2, String interval, String lowLevel){
|
|
|
|
|
|
|
|
List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel2(startDate, endDate, area,
|
|
|
|
level, index, timeLevel, slaveKey1, slaveKey2,interval,lowLevel);
|
|
|
|
if(list.size()>0){
|
|
|
|
return list.get(0);
|
|
|
|
}
|
|
|
|
SaveModel saveModel = new SaveModel();
|
|
|
|
saveModel.setResult1(0d);
|
|
|
|
saveModel.setResult2(0d);
|
|
|
|
return saveModel;
|
|
|
|
}
|
|
|
|
public Double findResult1BySaveModelList(String startDate, String endDate, String area, int level, String index, String timeLevel,
|
|
|
|
String slaveKey1, String slaveKey2, String interval, String lowLevel){
|
|
|
|
|
|
|
|
List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel2(startDate, endDate, area,
|
|
|
|
level, index, timeLevel, slaveKey1, slaveKey2,interval,lowLevel);
|
|
|
|
if(list.size()>0){
|
|
|
|
return list.get(0).getResult1();
|
|
|
|
}
|
|
|
|
return 0d;
|
|
|
|
}
|
|
|
|
public Double findResult2BySaveModelList(String startDate, String endDate, String area, int level, String index, String timeLevel,
|
|
|
|
String slaveKey1, String slaveKey2, String interval, String lowLevel){
|
|
|
|
|
|
|
|
List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel2(startDate, endDate, area,
|
|
|
|
level, index, timeLevel, slaveKey1, slaveKey2,interval,lowLevel);
|
|
|
|
if(list.size()>0){
|
|
|
|
return list.get(0).getResult2();
|
|
|
|
}
|
|
|
|
return 0d;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* 导出
|
|
* 导出
|
|
* 获取全部的科室和医生数据
|
|
* 获取全部的科室和医生数据
|