|
@ -1,15 +1,28 @@
|
|
|
package com.yihu.jw.es.service;
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.databind.deser.Deserializers;
|
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
|
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
|
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
|
|
|
import com.yihu.jw.es.util.ElasticsearchUtil;
|
|
|
import com.yihu.jw.es.util.SaveModel;
|
|
|
import com.yihu.jw.rm.base.BaseRequestMapping;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.utils.StringUtil;
|
|
|
import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
|
import org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParametersFactory;
|
|
|
import org.omg.CORBA.OBJ_ADAPTER;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
@ -29,6 +42,10 @@ public class StatisticsEsService {
|
|
|
private ElasticsearchUtil elasticsearchUtil;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private BaseDoctorHospitalDao doctorHospitalDao;
|
|
|
@Autowired
|
|
|
private BaseDoctorDao doctorDao;
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
/**
|
|
@ -98,6 +115,93 @@ public class StatisticsEsService {
|
|
|
JSONArray array = monthTotalStatistics2(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL);
|
|
|
object.put("data",array);
|
|
|
}
|
|
|
if (StringUtils.isNoneBlank(level2_type)){
|
|
|
//问诊量表格
|
|
|
//专家咨询数量
|
|
|
List<SaveModel> specialistSaveModels = elasticsearchUtil.findDateQuotaLevel0(endDate, endDate, area, level, "4", SaveModel.timeLevel_DDL,null,level2_type);
|
|
|
//协同门诊
|
|
|
List<SaveModel> syngySaveModels = elasticsearchUtil.findDateQuotaLevel1(endDate, endDate, area, level, "1", SaveModel.timeLevel_DDL,"2",null,level2_type);
|
|
|
//图文复诊
|
|
|
List<SaveModel> topicSaveModels = elasticsearchUtil.findDateQuotaLevel2(endDate, endDate, area, level, "1", SaveModel.timeLevel_DDL,"1","1",null,level2_type);
|
|
|
///视频复诊
|
|
|
List<SaveModel> vedioSaveModels = elasticsearchUtil.findDateQuotaLevel2(endDate, endDate, area, level, "1", SaveModel.timeLevel_DDL,"1","2",null,level2_type);
|
|
|
JSONArray array = new JSONArray();
|
|
|
List<String> list = new ArrayList<>();
|
|
|
for (SaveModel saveModel:specialistSaveModels){
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
list.add(saveModel.getDept());
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
list.add(saveModel.getDoctor());
|
|
|
}
|
|
|
}
|
|
|
for (int i=0;i<list.size();i++){
|
|
|
String code = list.get(i);
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("code",code);
|
|
|
for (SaveModel saveModel:specialistSaveModels){
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDept())){
|
|
|
jsonObject.put("name",saveModel.getDeptName());
|
|
|
jsonObject.put("specialist",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
jsonObject.put("name",saveModel.getDoctorName());
|
|
|
jsonObject.put("specialist",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (SaveModel saveModel:syngySaveModels){
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDept())){
|
|
|
jsonObject.put("name",saveModel.getDeptName());
|
|
|
jsonObject.put("synegy",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
jsonObject.put("name",saveModel.getDoctorName());
|
|
|
jsonObject.put("synegy",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (SaveModel saveModel:topicSaveModels){
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDept())){
|
|
|
jsonObject.put("name",saveModel.getDeptName());
|
|
|
jsonObject.put("topic",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
jsonObject.put("name",saveModel.getDoctorName());
|
|
|
jsonObject.put("topic",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (SaveModel saveModel:vedioSaveModels){
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDept())){
|
|
|
jsonObject.put("name",saveModel.getDeptName());
|
|
|
jsonObject.put("vedio",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
if (code.equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
jsonObject.put("name",saveModel.getDoctorName());
|
|
|
jsonObject.put("vedio",saveModel.getResult1());
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
array.add(jsonObject);
|
|
|
}
|
|
|
object.put("excelData",array);
|
|
|
}
|
|
|
return object;
|
|
|
}
|
|
|
|
|
@ -140,13 +244,13 @@ public class StatisticsEsService {
|
|
|
int videoCount = saveModel3.getResult2().intValue();//视频复诊数量
|
|
|
int total = specialistCount+synergyCount+topicCount+videoCount;//总量
|
|
|
object.put("specialistCount",specialistCount);//专家咨询数
|
|
|
object.put("specialistRate",getRange(specialistCount,total,2));
|
|
|
object.put("specialistRate",getRange(specialistCount,total,0));
|
|
|
object.put("synergyCount",synergyCount);//专家咨询数
|
|
|
object.put("synergyRate",getRange(synergyCount,total,2));
|
|
|
object.put("synergyRate",getRange(synergyCount,total,0));
|
|
|
object.put("topicCount",topicCount);//图文复诊数量
|
|
|
object.put("topicRate",getRange(topicCount,total,2));
|
|
|
object.put("topicRate",getRange(topicCount,total,0));
|
|
|
object.put("videoCount",videoCount);//视频复诊数量
|
|
|
object.put("videoRate",getRange(videoCount,total,2));
|
|
|
object.put("videoRate",getRange(videoCount,total,0));
|
|
|
object.put("total",total);
|
|
|
return object;
|
|
|
}
|
|
@ -166,6 +270,12 @@ public class StatisticsEsService {
|
|
|
public JSONObject getOutPatientGrade(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
JSONObject object = new JSONObject();
|
|
|
|
|
|
//问诊总量
|
|
|
SaveModel saveModel1 = null;
|
|
|
saveModel1 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL);
|
|
|
int total = saveModel1.getResult1().intValue();
|
|
|
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(endDate,endDate,area,level,index,SaveModel.timeLevel_DDL,null,level2_type);
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
@ -182,6 +292,7 @@ public class StatisticsEsService {
|
|
|
object1.put("hospitalName",saveModel.getHospitalName());
|
|
|
}
|
|
|
object1.put("result1",saveModel.getResult1());
|
|
|
object1.put("rate",getRange(saveModel.getResult1().intValue(),total,0));
|
|
|
object1.put("result2",saveModel.getResult2());
|
|
|
result.add(object1);
|
|
|
}
|
|
@ -190,9 +301,9 @@ public class StatisticsEsService {
|
|
|
@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 if (o1.getString("result1").compareTo(o2.getString("result1")) < 0) {
|
|
|
return 1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
@ -235,7 +346,413 @@ public class StatisticsEsService {
|
|
|
}
|
|
|
|
|
|
|
|
|
public JSONObject getDoctorStatistics(String startDate, String endDate, String area, int level, String index, String level2_type,Integer flag) throws Exception {
|
|
|
String sql = null;
|
|
|
JSONObject object1= new JSONObject();
|
|
|
if (flag==1){
|
|
|
sql="SELECT dhd.CODE AS dept_code, dhd. NAME AS dept_name, CASE WHEN c. COUNT IS NOT NULL THEN " +
|
|
|
"c. COUNT ELSE 0 END AS COUNT FROM DICT_HOSPITAL_DEPT dhd " +
|
|
|
"LEFT JOIN ( SELECT dh.DEPT_CODE, hd. NAME AS dept_name, " +
|
|
|
"COUNT(dh.DOCTOR_CODE) AS COUNT FROM BASE_DOCTOR bd " +
|
|
|
"LEFT JOIN BASE_DOCTOR_HOSPITAL dh ON bd. ID = dh.DOCTOR_CODE " +
|
|
|
"RIGHT JOIN DICT_HOSPITAL_DEPT hd ON hd.CODE = dh.DEPT_CODE " +
|
|
|
"WHERE bd.DEL = 1 AND bd.OUTPATIENT_TYPE IS NOT NULL GROUP BY dh.DEPT_CODE, hd. NAME " +
|
|
|
"ORDER BY COUNT DESC ) c ON dhd.CODE = c.DEPT_CODE " +
|
|
|
"WHERE dhd.CONSULT_DEPT_FLAG='1' " +
|
|
|
"ORDER BY count desc";
|
|
|
List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);
|
|
|
JSONArray array = new JSONArray();
|
|
|
for (Map<String,Object> map:mapList){
|
|
|
JSONObject object = new JSONObject();
|
|
|
if (array!=null&&array.size()!=0){
|
|
|
JSONObject jsonObject = array.getJSONObject(array.size()-1);
|
|
|
object.put("deptCode",map.get("dept_code"));
|
|
|
object.put("deptName",map.get("dept_name"));
|
|
|
object.put("count",map.get("count"));
|
|
|
if (jsonObject.getInteger("count")==Integer.parseInt(map.get("count").toString())){
|
|
|
object.put("rank",jsonObject.getInteger("rank"));
|
|
|
}else if (jsonObject.getInteger("count")>Integer.parseInt(map.get("count").toString())){
|
|
|
object.put("rank",jsonObject.getInteger("rank")+1);
|
|
|
}
|
|
|
}else {
|
|
|
object.put("deptCode",map.get("dept_code"));
|
|
|
object.put("deptName",map.get("dept_name"));
|
|
|
object.put("count",map.get("count"));
|
|
|
object.put("rank",1);
|
|
|
}
|
|
|
array.add(object);
|
|
|
}
|
|
|
object1.put("data",array);//排名
|
|
|
|
|
|
}else if (flag ==2) {
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, null, "6");
|
|
|
String deptSql = "select hd.CODE,hd.NAME from DICT_HOSPITAL_DEPT hd where hd.ORG_CODE ='" + area + "' and CONSULT_DEPT_FLAG=1";
|
|
|
List<Map<String, Object>> mapList = jdbcTemplate.queryForList(deptSql);
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
List<BaseDoctorHospitalDO> baseDoctorHospitalDOS = doctorHospitalDao.findByDoctorCode(saveModel.getDoctor());
|
|
|
if (baseDoctorHospitalDOS != null && baseDoctorHospitalDOS.size() != 0) {
|
|
|
saveModel.setDept(baseDoctorHospitalDOS.get(0).getDeptCode());
|
|
|
saveModel.setDeptName(baseDoctorHospitalDOS.get(0).getDeptName());
|
|
|
}
|
|
|
}
|
|
|
for (Map<String, Object> map : mapList) {
|
|
|
JSONObject object = new JSONObject();
|
|
|
String code = map.get("code").toString();
|
|
|
object.put("deptCode", map.get("code"));
|
|
|
object.put("deptName", map.get("name"));
|
|
|
Integer count = 0;
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
if (saveModel.getDept().equalsIgnoreCase(code)) {
|
|
|
if (saveModel.getResult1() > 0) {
|
|
|
count += 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
object.put("count", count);
|
|
|
result.add(object);
|
|
|
}
|
|
|
// 排序
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
@Override
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
if (o1.getString("count").compareTo(o2.getString("count")) > 0) {
|
|
|
return -1;
|
|
|
} else if (o1.getString("count").compareTo(o2.getString("count")) < 0) {
|
|
|
return 1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
JSONArray array = new JSONArray();
|
|
|
for (JSONObject map:result){
|
|
|
JSONObject object = new JSONObject();
|
|
|
if (array!=null&&array.size()!=0){
|
|
|
JSONObject jsonObject = array.getJSONObject(array.size()-1);
|
|
|
object.put("deptCode",map.getString("deptCode"));
|
|
|
object.put("deptName",map.getString("deptName"));
|
|
|
object.put("count",map.getInteger("count"));
|
|
|
if (jsonObject.getInteger("count")==map.getInteger("count")){
|
|
|
object.put("rank",jsonObject.getInteger("rank"));
|
|
|
}else if (jsonObject.getInteger("count")>map.getInteger("count")){
|
|
|
object.put("rank",jsonObject.getInteger("rank")+1);
|
|
|
}
|
|
|
}else {
|
|
|
object.put("deptCode",map.get("deptCode"));
|
|
|
object.put("deptName",map.get("deptName"));
|
|
|
object.put("count",map.get("count"));
|
|
|
object.put("rank",1);
|
|
|
}
|
|
|
array.add(object);
|
|
|
}
|
|
|
object1.put("data", array);
|
|
|
|
|
|
}
|
|
|
return object1;
|
|
|
}
|
|
|
|
|
|
public JSONObject getDoctorTotal(String startDate, String endDate, String area, int level, String index, String level2_type,Integer flag) throws Exception {
|
|
|
JSONObject object = new JSONObject();
|
|
|
if (flag==1){
|
|
|
String sql = "SELECT bd.JOB_TITLE_CODE, bd.JOB_TITLE_NAME, COUNT(bd.ID) as count FROM " +
|
|
|
"BASE_DOCTOR bd, BASE_DOCTOR_HOSPITAL bdh,DICT_HOSPITAL_DEPT dhd WHERE bd.ID = bdh.DOCTOR_CODE AND dhd.code = bdh.DEPT_CODE AND bd.DEL = 1 " +
|
|
|
" AND bdh.DEL = 1 AND bd.OUTPATIENT_TYPE IS NOT NULL " ;
|
|
|
|
|
|
String sqlCount = "SELECT COUNT(bd.ID) as total FROM " +
|
|
|
"BASE_DOCTOR bd, BASE_DOCTOR_HOSPITAL bdh,DICT_HOSPITAL_DEPT dhd WHERE bd.ID = bdh.DOCTOR_CODE AND dhd.code = bdh.DEPT_CODE AND bd.DEL = 1 " +
|
|
|
" AND bdh.DEL = 1 AND bd.OUTPATIENT_TYPE IS NOT NULL AND dhd.CONSULT_DEPT_FLAG='1' ";
|
|
|
|
|
|
if (level==4){
|
|
|
sql+=" AND dhd.ORG_CODE = '"+area+"'";
|
|
|
sqlCount+=" AND dhd.ORG_CODE = '"+area+"'";
|
|
|
}else if (level==5){
|
|
|
sql+=" AND bdh.DEPT_CODE = '"+area+"'";
|
|
|
sqlCount+=" AND bdh.DEPT_CODE = '"+area+"'";
|
|
|
}
|
|
|
sql += " AND dhd.CONSULT_DEPT_FLAG='1' GROUP BY bd.JOB_TITLE_CODE,bd.JOB_TITLE_NAME";
|
|
|
List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);//各职称人数
|
|
|
List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sqlCount);//总人数
|
|
|
Long total = 0L;
|
|
|
if(rstotal!=null&&rstotal.size()>0){
|
|
|
total = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
for (Map<String,Object> map:mapList){
|
|
|
Integer count = Integer.parseInt(map.get("count").toString());
|
|
|
map.put("rate",getRange(count,total.intValue(),0));//百分比
|
|
|
}
|
|
|
object.put("total",total);//总量
|
|
|
object.put("data",mapList);//各职称人数
|
|
|
}else if (flag==2){
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, null, "6");
|
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
int total = 0;
|
|
|
for(SaveModel saveModel:saveModels){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
total+=1;
|
|
|
buffer.append("'"+saveModel.getDoctor()+"',");
|
|
|
}
|
|
|
}
|
|
|
if (buffer.length()>0){
|
|
|
buffer.deleteCharAt(buffer.length()-1);
|
|
|
}
|
|
|
if (buffer.length()>0){
|
|
|
String sql ="SELECT bd.JOB_TITLE_CODE, bd.JOB_TITLE_NAME,COUNT(bd.ID) AS total FROM BASE_DOCTOR bd WHERE bd.DEL = 1";
|
|
|
sql +=" AND bd.ID IN("+buffer+")";
|
|
|
sql +=" GROUP BY bd.JOB_TITLE_CODE,bd.JOB_TITLE_NAME";
|
|
|
List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);//各职称人数
|
|
|
for (Map<String,Object> map:mapList){
|
|
|
Integer count = Integer.parseInt(map.get("total").toString());
|
|
|
map.put("rate",getRange(count,total,0));//百分比
|
|
|
}
|
|
|
object.put("total",total);//总量
|
|
|
object.put("data",mapList);//各职称人数
|
|
|
}
|
|
|
}
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
public JSONObject getDoctorStatisticsExcel(String startDate, String endDate, String area, int level, String index, String level2_type,Integer flag) throws Exception {
|
|
|
JSONObject object = new JSONObject();
|
|
|
if (flag==1){//开通医生
|
|
|
String sql ="SELECT bd.ID, bd.NAME, bd.OUTPATIENT_TYPE, " +
|
|
|
"dhd.code AS dept_code, dhd.name AS dept_name,bd.JOB_TITLE_NAME FROM " +
|
|
|
"BASE_DOCTOR bd, BASE_DOCTOR_HOSPITAL bdh, " +
|
|
|
"DICT_HOSPITAL_DEPT dhd WHERE bd.ID = bdh.DOCTOR_CODE " +
|
|
|
"AND dhd.code = bdh.DEPT_CODE " +
|
|
|
"AND bd.DEL = 1 " +
|
|
|
"AND bdh.DEL = 1 " +
|
|
|
"AND bd.OUTPATIENT_TYPE IS NOT NULL " +
|
|
|
" AND dhd.CONSULT_DEPT_FLAG='1'";
|
|
|
String deptSql = "select hd.CODE,hd.NAME from DICT_HOSPITAL_DEPT hd where CONSULT_DEPT_FLAG=1";
|
|
|
if (level==4){//科室
|
|
|
sql+=" AND dhd.ORG_CODE = '"+area+"'";
|
|
|
deptSql+=" AND hd.ORG_CODE ='" + area + "'";
|
|
|
}else if (level==5){//医生
|
|
|
sql+=" AND bdh.DEPT_CODE = '"+area+"'";
|
|
|
deptSql+=" AND hd.CODE ='" + area + "'";
|
|
|
}
|
|
|
List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);
|
|
|
List<Map<String, Object>> mapList1 = jdbcTemplate.queryForList(deptSql);
|
|
|
JSONArray array =new JSONArray();
|
|
|
if (level==4){
|
|
|
for (Map<String,Object> map1:mapList1){
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
object1.put("deptCode",map1.get("code"));
|
|
|
object1.put("deptName",map1.get("name"));
|
|
|
Long topic = 0L;
|
|
|
Long vedio =0L;
|
|
|
Long synegy = 0L;
|
|
|
Long specialist =0L;
|
|
|
Long other =0L;
|
|
|
for (Map<String,Object> map:mapList){
|
|
|
if (map.get("dept_code").toString().equalsIgnoreCase(map1.get("code").toString())){
|
|
|
String outpatientType = map.get("outpatient_type").toString();
|
|
|
String str[]=outpatientType.split(",");
|
|
|
for (int i=0;i<str.length;i++){
|
|
|
if (str[i].contains("1")){
|
|
|
topic+=1;
|
|
|
}else if (str[i].contains("2")){
|
|
|
vedio+=1;
|
|
|
}else if (str[i].contains("xt")){
|
|
|
synegy+=1;
|
|
|
}else if (str[i].contains("zj")){
|
|
|
specialist+=1;
|
|
|
}else {
|
|
|
other+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
object1.put("topic",topic);//图文
|
|
|
object1.put("vedio",vedio);//视频
|
|
|
object1.put("synegy",synegy);//协同
|
|
|
object1.put("specialist",specialist);//专家
|
|
|
object1.put("other",other);//其他
|
|
|
object1.put("doctorName","-");//医生名字
|
|
|
object1.put("doctorJob","-");//医生职称
|
|
|
array.add(object1);
|
|
|
}
|
|
|
}else if (level==5){
|
|
|
for (Map<String,Object> map:mapList){
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
object1.put("deptCode","-");
|
|
|
object1.put("deptName","-");
|
|
|
Long topic = 0L;
|
|
|
Long vedio =0L;
|
|
|
Long synegy = 0L;
|
|
|
Long specialist =0L;
|
|
|
Long other =0L;
|
|
|
String outpatientType = map.get("outpatient_type").toString();
|
|
|
String str[]=outpatientType.split(",");
|
|
|
for (int i=0;i<str.length;i++){
|
|
|
if (str[i].contains("1")){
|
|
|
topic+=1;
|
|
|
}else if (str[i].contains("2")){
|
|
|
vedio+=1;
|
|
|
}else if (str[i].contains("xt")){
|
|
|
synegy+=1;
|
|
|
}else if (str[i].contains("zj")){
|
|
|
specialist+=1;
|
|
|
}else {
|
|
|
other+=1;
|
|
|
}
|
|
|
}
|
|
|
object1.put("topic",topic);//图文
|
|
|
object1.put("vedio",vedio);//视频
|
|
|
object1.put("synegy",synegy);//协同
|
|
|
object1.put("specialist",specialist);//专家
|
|
|
object1.put("other",other);//其他
|
|
|
object1.put("doctorName",map.get("name"));//医生名字
|
|
|
object1.put("doctorJob",map.get("job_title_name"));//医生职称
|
|
|
array.add(object1);
|
|
|
}
|
|
|
}
|
|
|
object.put("data",array);
|
|
|
}else if (flag==2){//活跃医生
|
|
|
//图文
|
|
|
List<SaveModel> topicModels = elasticsearchUtil.findDateQuotaLevel2(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, "1","1",null, "6");
|
|
|
//视频
|
|
|
List<SaveModel> vedioModels = elasticsearchUtil.findDateQuotaLevel2(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, "1","2",null, "6");
|
|
|
//协同
|
|
|
List<SaveModel> synegyModels = elasticsearchUtil.findDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, "2",null, "6");
|
|
|
//专科
|
|
|
List<SaveModel> specialistModels = elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level,"4", SaveModel.timeLevel_ZL,null, "6");
|
|
|
|
|
|
String deptSql = "select hd.CODE,hd.NAME from DICT_HOSPITAL_DEPT hd where CONSULT_DEPT_FLAG=1";
|
|
|
if (level==4){//科室
|
|
|
deptSql+=" AND hd.ORG_CODE ='" + area + "'";
|
|
|
}else if (level==5){//医生
|
|
|
deptSql+=" AND hd.CODE ='" + area + "'";
|
|
|
}
|
|
|
List<Map<String, Object>> mapList1 = jdbcTemplate.queryForList(deptSql);
|
|
|
JSONArray array =new JSONArray();
|
|
|
if (level==4){
|
|
|
for (Map<String,Object> map:mapList1){
|
|
|
Long topic = 0L;
|
|
|
Long vedio =0L;
|
|
|
Long synegy = 0L;
|
|
|
Long specialist =0L;
|
|
|
Long other =0L;
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
for(SaveModel saveModel:topicModels){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(saveModel.getDoctor());
|
|
|
if (doctorHospitalDOs!=null&&doctorHospitalDOs.size()!=0){
|
|
|
saveModel.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
saveModel.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
|
}
|
|
|
if(map.get("code").toString().equalsIgnoreCase(saveModel.getDept())) {
|
|
|
topic += 1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for(SaveModel saveModel:vedioModels){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(saveModel.getDoctor());
|
|
|
if (doctorHospitalDOs!=null&&doctorHospitalDOs.size()!=0){
|
|
|
saveModel.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
saveModel.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
|
}
|
|
|
if(map.get("code").toString().equalsIgnoreCase(saveModel.getDept())){
|
|
|
vedio+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(SaveModel saveModel:synegyModels){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(saveModel.getDoctor());
|
|
|
if (doctorHospitalDOs!=null&&doctorHospitalDOs.size()!=0){
|
|
|
saveModel.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
saveModel.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
|
}
|
|
|
if(map.get("code").toString().equalsIgnoreCase(saveModel.getDept())){
|
|
|
synegy+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(SaveModel saveModel:specialistModels){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(saveModel.getDoctor());
|
|
|
if (doctorHospitalDOs!=null&&doctorHospitalDOs.size()!=0){
|
|
|
saveModel.setDept(doctorHospitalDOs.get(0).getDeptCode());
|
|
|
saveModel.setDeptName(doctorHospitalDOs.get(0).getDeptName());
|
|
|
}
|
|
|
if(map.get("code").toString().equalsIgnoreCase(saveModel.getDept())){
|
|
|
specialist+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
jsonObject.put("topic",topic);//图文
|
|
|
jsonObject.put("vedio",vedio);//视频
|
|
|
jsonObject.put("synegy",synegy);//协同
|
|
|
jsonObject.put("specialist",specialist);//专家
|
|
|
jsonObject.put("other",other);//其他
|
|
|
jsonObject.put("doctorName","-");//医生名字
|
|
|
jsonObject.put("doctorJob","-");//医生职称
|
|
|
jsonObject.put("deptCode",map.get("code"));
|
|
|
jsonObject.put("deptName",map.get("name"));
|
|
|
array.add(jsonObject);
|
|
|
}
|
|
|
}else if (level==5){
|
|
|
Set<JSONObject> set = new HashSet<>();
|
|
|
for(SaveModel saveModel:topicModels){
|
|
|
BaseDoctorDO doctorDO = doctorDao.findById(saveModel.getDoctor());
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
object1.put("doctorName",doctorDO.getName());//
|
|
|
object1.put("doctorJob",doctorDO.getJobTitleName());//
|
|
|
object1.put("doctor",doctorDO.getId());
|
|
|
object1.put("deptCode","-");
|
|
|
object1.put("deptName","-");
|
|
|
set.add(object1);
|
|
|
}
|
|
|
for (JSONObject jsonObject:set){
|
|
|
Long topic = 0L;
|
|
|
Long vedio =0L;
|
|
|
Long synegy = 0L;
|
|
|
Long specialist =0L;
|
|
|
Long other =0L;
|
|
|
for(SaveModel saveModel:topicModels){
|
|
|
if(jsonObject.getString("doctor").equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
topic+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(SaveModel saveModel:vedioModels){
|
|
|
if(jsonObject.getString("doctor").equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
vedio+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(SaveModel saveModel:synegyModels){
|
|
|
if(jsonObject.getString("doctor").equalsIgnoreCase(saveModel.getDoctor())){
|
|
|
if (saveModel.getResult1()>0){
|
|
|
synegy+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for(SaveModel saveModel:specialistModels) {
|
|
|
if (jsonObject.getString("doctor").equalsIgnoreCase(saveModel.getDoctor())) {
|
|
|
if (saveModel.getResult1()>0){
|
|
|
specialist+=1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
jsonObject.put("topic",topic);//图文
|
|
|
jsonObject.put("vedio",vedio);//视频
|
|
|
jsonObject.put("synegy",synegy);//协同
|
|
|
jsonObject.put("specialist",specialist);//专家
|
|
|
jsonObject.put("other",other);//其他
|
|
|
array.add(jsonObject);
|
|
|
}
|
|
|
}
|
|
|
object.put("data",array);
|
|
|
}
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
@ -253,7 +770,7 @@ public class StatisticsEsService {
|
|
|
return "0%";
|
|
|
}
|
|
|
float size = (float) (first * 100) / second;
|
|
|
DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
|
|
|
DecimalFormat df = new DecimalFormat("0");//格式化小数,不足的补0
|
|
|
String filesize = df.format(size);
|
|
|
return filesize + "%";
|
|
|
}
|
|
@ -580,10 +1097,10 @@ public class StatisticsEsService {
|
|
|
if (k == 0) {
|
|
|
next.add(Calendar.MONTH, 1);
|
|
|
} else {
|
|
|
next.add(Calendar.MONTH, 2);
|
|
|
next.add(Calendar.MONTH, 1);
|
|
|
}
|
|
|
next.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
next.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
/*next.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
next.add(Calendar.DAY_OF_MONTH, -1);*/
|
|
|
|
|
|
if (next.getTime().before(DateUtil.strToDate(endDate, "yyyy-MM-dd"))) {
|
|
|
days.add(next);
|