|
@ -15,6 +15,7 @@ import com.yihu.jw.es.util.ElasticsearchUtil;
|
|
|
import com.yihu.jw.es.util.SaveModel;
|
|
|
import com.yihu.jw.evaluate.score.service.BaseEvaluateScoreService;
|
|
|
import com.yihu.jw.org.dao.BaseOrgDao;
|
|
|
import com.yihu.jw.restmodel.hospital.statistics.ScreenQvo;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.utils.hibernate.HibenateUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@ -26,9 +27,16 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.DayOfWeek;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.ZonedDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.format.TextStyle;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
@ -65,10 +73,11 @@ public class StatisticsEsService {
|
|
|
|
|
|
/**
|
|
|
* 问诊量
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level 2 市 3区 4医院 5、科室 6医生
|
|
|
* @param level 2 市 3区 4医院 5、科室 6医生
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
@ -1757,7 +1766,7 @@ public class StatisticsEsService {
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
|
|
|
// if (saveModels != null && saveModels.size() >0) {
|
|
|
List<Map<String, Object>> resultList = DateUtil.findDates(dateFormat.parse(startDate), dateFormat.parse(DateUtil.getNextDay(dateFormat.parse(endDate), 1)));
|
|
|
List<Map<String, Object>> resultList = DateUtil.findDates(dateFormat.parse(startDate), dateFormat.parse(DateUtil.getNextDay(endDate, 1)));
|
|
|
// result.clear();
|
|
|
for (Map<String, Object> one : resultList) {
|
|
|
JSONObject json = new JSONObject();
|
|
@ -4264,7 +4273,7 @@ public class StatisticsEsService {
|
|
|
rs.put("total", totalNm);
|
|
|
rs.put("noReceiveCount", noReceiveNm);
|
|
|
rs.put("haveReceiveCount", haveReceiveNm);
|
|
|
rs.put("endAndReciveCount",endNm+haveReceiveNm);
|
|
|
rs.put("endAndReciveCount", endNm + haveReceiveNm);
|
|
|
rs.put("code", key);
|
|
|
resultMaps.add(rs);
|
|
|
}
|
|
@ -5022,24 +5031,24 @@ public class StatisticsEsService {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
for (SaveModel saveModel2:precriptionIsPayList){
|
|
|
String isPay=saveModel2.getHospital()==null?"":saveModel2.getHospital();
|
|
|
String pre=saveModel.getHospital()==null?"":saveModel.getHospital();
|
|
|
if(isPay.equalsIgnoreCase(pre)){
|
|
|
for (SaveModel saveModel2 : precriptionIsPayList) {
|
|
|
String isPay = saveModel2.getHospital() == null ? "" : saveModel2.getHospital();
|
|
|
String pre = saveModel.getHospital() == null ? "" : saveModel.getHospital();
|
|
|
if (isPay.equalsIgnoreCase(pre)) {
|
|
|
isPayNum = saveModel2.getResult1();
|
|
|
prescriptionPayRate = getRange(isPayNum.intValue(),preNum.intValue(),0);
|
|
|
jsonObject.put("prescriptionPayRate",prescriptionPayRate);
|
|
|
prescriptionPayRate = getRange(isPayNum.intValue(), preNum.intValue(), 0);
|
|
|
jsonObject.put("prescriptionPayRate", prescriptionPayRate);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if(null==saveModel.getHospital()){
|
|
|
resultArray =new JSONArray();
|
|
|
}else {
|
|
|
if (null == saveModel.getHospital()) {
|
|
|
resultArray = new JSONArray();
|
|
|
} else {
|
|
|
resultArray.add(jsonObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
object.put("excelData",resultArray);
|
|
|
object.put("excelData", resultArray);
|
|
|
return object;
|
|
|
}
|
|
|
|
|
@ -5873,4 +5882,696 @@ public class StatisticsEsService {
|
|
|
return jsonObject;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 1自定义时间 2 本月 3 近半年 4 全年
|
|
|
* 【总收入】= 诊查费(21) + 处方费(3)
|
|
|
* 【问诊量】= 用户成功发起问诊量,包含取消的订单(同一人发起多次累计多次) 【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
|
* 【处方量】= 成功接诊后开方数量 【处方率】= 处方量 ÷ 接诊量 ×100%
|
|
|
*/
|
|
|
public JSONObject getTotal3Data(ScreenQvo qvo) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
|
// 计算上一个周期 开始时间period[0] 、结束时间period[1]
|
|
|
String[] period = calculatePreviousPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
//计算去年同期时间段 开始时间periodYear[0] 、结束时间periodYear[1]
|
|
|
String[] periodYear = calculatePreviousYearPeriod(qvo.getStartDate(), qvo.getEndDate());
|
|
|
|
|
|
//到结束时间的增量
|
|
|
SaveModel model01 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getEndDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model02 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getEndDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
//到开始时间的增量
|
|
|
SaveModel model03 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getStartDate(), qvo.getStartDate(), qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model04 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getStartDate(), qvo.getStartDate(), qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
|
|
|
//上个周期的结束时间的增量
|
|
|
SaveModel model05 = elasticsearchUtil.findOneDateQuotaLevel0(period[1], period[1], qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model06 = elasticsearchUtil.findOneDateQuotaLevel0(period[1], period[1], qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
//上个周期的开始时间的增量
|
|
|
SaveModel model07 = elasticsearchUtil.findOneDateQuotaLevel0(period[0], period[0], qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model08 = elasticsearchUtil.findOneDateQuotaLevel0(period[0], period[0], qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
|
|
|
//去年同期时间的结束时间的增量
|
|
|
SaveModel model09 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[1], periodYear[1], qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model10 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[1], periodYear[1], qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
//去年同期时间的开始时间的增量
|
|
|
SaveModel model11 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[0], periodYear[0], qvo.getArea(), qvo.getLevel(), "3", "2");//查询诊查费
|
|
|
SaveModel model12 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[0], periodYear[0], qvo.getArea(), qvo.getLevel(), "21", "2");//处方费
|
|
|
|
|
|
//----------------------问诊量--------------------------------------
|
|
|
SaveModel wz_model01 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getEndDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "5", "2");//问诊-到结束时间的增量
|
|
|
SaveModel wz_model02 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getStartDate(), qvo.getStartDate(), qvo.getArea(), qvo.getLevel(), "5", "2");//问诊-到开始时间的增量
|
|
|
//上个周期的增量
|
|
|
SaveModel wz_model03 = elasticsearchUtil.findOneDateQuotaLevel0(period[1], period[1], qvo.getArea(), qvo.getLevel(), "5", "2");//问诊-结束时间
|
|
|
SaveModel wz_model04 = elasticsearchUtil.findOneDateQuotaLevel0(period[0], period[0], qvo.getArea(), qvo.getLevel(), "5", "2");//问诊=开始时间
|
|
|
//去年同期时间的增量
|
|
|
SaveModel wz_model05 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[1], periodYear[1], qvo.getArea(), qvo.getLevel(), "5", "2");//问诊-结束时间
|
|
|
SaveModel wz_model06 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[0], periodYear[0], qvo.getArea(), qvo.getLevel(), "5", "2");//问诊=开始时间
|
|
|
|
|
|
|
|
|
//---------------------【处方量】------------------------------------
|
|
|
SaveModel cf_model01 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getEndDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", "2");//开方量-到结束时间的增量
|
|
|
SaveModel cf_model02 = elasticsearchUtil.findOneDateQuotaLevel0(qvo.getStartDate(), qvo.getStartDate(), qvo.getArea(), qvo.getLevel(), "2", "2");//开方量-到开始时间的增量
|
|
|
//上个周期的增量
|
|
|
SaveModel cf_model03 = elasticsearchUtil.findOneDateQuotaLevel0(period[1], period[1], qvo.getArea(), qvo.getLevel(), "2", "2");//开方量-结束时间
|
|
|
SaveModel cf_model04 = elasticsearchUtil.findOneDateQuotaLevel0(period[0], period[0], qvo.getArea(), qvo.getLevel(), "2", "2");//开方量=开始时间
|
|
|
//去年同期时间的增量
|
|
|
SaveModel cf_model05 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[1], periodYear[1], qvo.getArea(), qvo.getLevel(), "2", "2");//开方量-结束时间
|
|
|
SaveModel cf_model06 = elasticsearchUtil.findOneDateQuotaLevel0(periodYear[0], periodYear[0], qvo.getArea(), qvo.getLevel(), "2", "2");//开方量=开始时间
|
|
|
|
|
|
//---------------------【接诊量】------------------------------------
|
|
|
//接诊量-已接诊
|
|
|
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");
|
|
|
|
|
|
/**
|
|
|
* 计算同比和环比
|
|
|
* 环比增长= (本期统计周期数据-上期统计周期数据)上期统计周期数据×100%
|
|
|
* 同比增长= (本期统计周期数据-去年同期统计周期数据)去年同期统计周期据×100%
|
|
|
*/
|
|
|
long totalRevenue = ((model01 == null ? 0 : model01.getResult1().longValue()) - (model03 == null ? 0 : model03.getResult1().longValue())) +
|
|
|
(model02 == null ? 0 : model02.getResult1().longValue()) - (model04 == null ? 0 : model04.getResult1().longValue());
|
|
|
//上周期总收入
|
|
|
long periodTotal = ((model05 == null ? 0 : model05.getResult1().longValue()) - (model07 == null ? 0 : model07.getResult1().longValue()))
|
|
|
+ (model06 == null ? 0 : model06.getResult1().longValue()) - (model08 == null ? 0 : model08.getResult1().longValue());
|
|
|
//去年同期时间段总收入
|
|
|
long periodYearTotal = ((model09 == null ? 0 : model09.getResult1().longValue()) - (model11 == null ? 0 : model11.getResult1().longValue()))
|
|
|
+ (model10 == null ? 0 : model10.getResult1().longValue() - (model12 == null ? 0 : model12.getResult1().longValue()));
|
|
|
//同比和环比
|
|
|
long fee_hb = periodTotal == 0 ? 0 : (totalRevenue - periodTotal) / periodTotal;//环比
|
|
|
long fee_tb = periodYearTotal == 0 ? 0 : (totalRevenue - periodYearTotal) / periodYearTotal;//同比
|
|
|
result.put("fee_examination", (model01 == null ? 0 : model01.getResult1().longValue()) - (model03 == null ? 0 : model03.getResult1().longValue()));//诊查费
|
|
|
result.put("fee_prescription", (model02 == null ? 0 : model02.getResult1().longValue()) - (model04 == null ? 0 : model04.getResult1().longValue()));//处方费
|
|
|
result.put("fee_total", totalRevenue);//总收入
|
|
|
result.put("fee_hb", fee_hb);//环比
|
|
|
result.put("fee_tb", fee_tb);//同比
|
|
|
|
|
|
int patientVolume = 0;
|
|
|
//接诊量
|
|
|
if (!jz_model01.isEmpty()) {
|
|
|
patientVolume = (int) jz_model01.stream().mapToDouble(SaveModel::getResult1).sum();
|
|
|
}
|
|
|
|
|
|
//问诊
|
|
|
int wzl = (wz_model01 == null ? 0 : wz_model01.getResult1().intValue()) - (wz_model02 == null ? 0 : wz_model02.getResult2().intValue());
|
|
|
//同比和环比
|
|
|
int wzl_period = (wz_model03 == null ? 0 : wz_model03.getResult1().intValue()) - (wz_model04 == null ? 0 : wz_model04.getResult1().intValue());//上个周期
|
|
|
int wzl_periodYear = (wz_model05 == null ? 0 : wz_model05.getResult1().intValue()) - (wz_model06 == null ? 0 : wz_model06.getResult1().intValue());//去年同周期
|
|
|
result.put("wzl_total", wzl);//问诊量
|
|
|
result.put("wzl_jz", patientVolume);//接诊量
|
|
|
result.put("wzl_jzl", getRange(patientVolume, wzl, 0));//【接诊率】= 接诊量 ÷ 问诊量 ×100%
|
|
|
result.put("wzl_hb", getRange((wzl - wzl_period), wzl_period, 0));//环比
|
|
|
result.put("wzl_tb", getRange((wzl - wzl_periodYear), wzl_periodYear, 0));//同比
|
|
|
|
|
|
//开方 【处方量】
|
|
|
int kf_total = (cf_model01 == null ? 0 : cf_model01.getResult1().intValue()) - (cf_model02 == null ? 0 : cf_model02.getResult1().intValue());
|
|
|
int kf_period = (cf_model03 == null ? 0 : cf_model03.getResult1().intValue()) - (cf_model04 == null ? 0 : cf_model04.getResult1().intValue());//上个周期
|
|
|
int kf_periodYear = (cf_model05 == null ? 0 : cf_model05.getResult1().intValue()) - (cf_model06 == null ? 0 : cf_model06.getResult1().intValue());//去年同周期
|
|
|
result.put("kf_total", kf_total);//开方量
|
|
|
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_tb", getRange((kf_total - kf_periodYear), kf_periodYear, 0));//同比
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 借鉴:
|
|
|
* hospital/statistics/outPatientLine
|
|
|
* {"index":5,"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"level2_type":4,"interval":1}
|
|
|
*/
|
|
|
public JSONObject getKindsConsultCount(ScreenQvo qvo) throws Exception {
|
|
|
//专家咨询数量 = 图文咨询 + 视频咨询
|
|
|
//协同门诊
|
|
|
List<SaveModel> xt_list = elasticsearchUtil.findDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "12", null, "4");
|
|
|
///图文咨询
|
|
|
List<SaveModel> twzx_list = elasticsearchUtil.findDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "1", null, "4");
|
|
|
//图文复诊
|
|
|
List<SaveModel> twfz_list = elasticsearchUtil.findDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "9", null, "4");
|
|
|
//视频咨询
|
|
|
List<SaveModel> spzx_list = elasticsearchUtil.findDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "17", null, "4");
|
|
|
//视频复诊
|
|
|
List<SaveModel> spfz_list = elasticsearchUtil.findDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "16", null, "4");
|
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
|
int xtmz = xt_list.isEmpty() ? 0 : xt_list.get(0).getResult1().intValue();
|
|
|
int twzx = twzx_list.isEmpty() ? 0 : twfz_list.get(0).getResult1().intValue();
|
|
|
int twfz = twfz_list.isEmpty() ? 0 : twfz_list.get(0).getResult1().intValue();
|
|
|
int spzx = spzx_list.isEmpty() ? 0 : spzx_list.get(0).getResult1().intValue();
|
|
|
int spfz = spfz_list.isEmpty() ? 0 : spfz_list.get(0).getResult1().intValue();
|
|
|
|
|
|
|
|
|
//计算百分比
|
|
|
int total =xtmz+twzx+twfz+spzx+spfz;
|
|
|
|
|
|
result.put("xtmz", xtmz);//协同门诊
|
|
|
result.put("twzx", twzx);//图文咨询
|
|
|
result.put("twfz", twfz);//图文复诊
|
|
|
result.put("spzx", spzx);//视频咨询
|
|
|
result.put("spfz", spfz);//视频复诊
|
|
|
//百分比
|
|
|
result.put("xtmz_bfb", getRange(xtmz,total , 0));//协同门诊
|
|
|
result.put("twzx_bfb", getRange(twzx,total , 0));//图文咨询
|
|
|
result.put("twfz_bfb", getRange(twfz,total , 0));//图文复诊
|
|
|
result.put("spzx_bfb", getRange(spzx,total , 0));//视频咨询
|
|
|
result.put("spfz_bfb", getRange(spfz,total , 0));//视频复诊
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取 已接诊量、未接诊量、取消量、处方量数量
|
|
|
* 自定义时间、本月 按天展示
|
|
|
* 近半年、全年 按月展示
|
|
|
* <p>
|
|
|
* 图文复诊 {"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"interval":1,"index":11,"lowCode":9}
|
|
|
* 视频复诊{"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"interval":1,"index":15,"lowCode":16}
|
|
|
* 社区协诊{"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"interval":1,"index":13,"lowCode":12}
|
|
|
* 图文咨询{"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"interval":1,"index":11,"lowCode":1}
|
|
|
* 视频咨询{"startDate":"2023-07-01","endDate":"2023-07-19","area":"350200","level":2,"interval":1,"index":15,"lowCode":17}
|
|
|
*/
|
|
|
public JSONObject getConsultAndPrescriptionList(ScreenQvo qvo) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
|
|
|
HashMap<String, String> map = new HashMap<>();
|
|
|
map.put("notReceivedTreatment", "0"); //未接诊
|
|
|
map.put("receivedTreatment", "1"); //已接诊
|
|
|
map.put("patientCanceled", "-1"); //患者取消
|
|
|
//按天分组
|
|
|
if ("1".equals(qvo.getTimeType())) {
|
|
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
|
|
String key = entry.getKey();
|
|
|
String value = entry.getValue();
|
|
|
|
|
|
JSONArray array01 = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", "9", SaveModel.timeLevel_ZL, value);//图文复诊
|
|
|
JSONArray array02 = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", "16", SaveModel.timeLevel_ZL, value);//视频复诊
|
|
|
JSONArray array03 = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", "12", SaveModel.timeLevel_ZL, value);//社区协诊
|
|
|
JSONArray array04 = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", "1", SaveModel.timeLevel_ZL, value);//图文咨询
|
|
|
JSONArray array05 = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", "17", SaveModel.timeLevel_ZL, value);//视频咨询
|
|
|
|
|
|
//数据处理进行合并相加
|
|
|
ArrayList<JSONArray> list = new ArrayList<>();
|
|
|
list.add(array01);
|
|
|
list.add(array02);
|
|
|
list.add(array03);
|
|
|
list.add(array04);
|
|
|
list.add(array05);
|
|
|
JSONArray arrayAll = jsonArrayCalculation(list);
|
|
|
//数据转化
|
|
|
result.put(key, addWeekdayToJSONArray(arrayAll));
|
|
|
}
|
|
|
//算出每天的开方量
|
|
|
JSONArray array = dateTotalStatistics3(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", null, SaveModel.timeLevel_ZL, null);
|
|
|
result.put("prescriptionVolume", addWeekdayToJSONArray(array));
|
|
|
}
|
|
|
//按月分组
|
|
|
if ("3".equals(qvo.getTimeType())) {
|
|
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
|
|
String key = entry.getKey();
|
|
|
String value = entry.getValue();
|
|
|
|
|
|
JSONArray array01 = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", "9", SaveModel.timeLevel_ZL, value);//图文复诊
|
|
|
JSONArray array02 = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", "16", SaveModel.timeLevel_ZL, value);//视频复诊
|
|
|
JSONArray array03 = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", "12", SaveModel.timeLevel_ZL, value);//社区协诊
|
|
|
JSONArray array04 = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", "1", SaveModel.timeLevel_ZL, value);//图文咨询
|
|
|
JSONArray array05 = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", "17", SaveModel.timeLevel_ZL, value);//视频咨询
|
|
|
|
|
|
//数据处理进行合并相加
|
|
|
ArrayList<JSONArray> list = new ArrayList<>();
|
|
|
list.add(array01);
|
|
|
list.add(array02);
|
|
|
list.add(array03);
|
|
|
list.add(array04);
|
|
|
list.add(array05);
|
|
|
JSONArray arrayAll = jsonArrayCalculation(list);
|
|
|
result.put(key, arrayAll);
|
|
|
}
|
|
|
//算出开方量
|
|
|
JSONArray array = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", null, SaveModel.timeLevel_ZL, null);
|
|
|
result.put("prescriptionVolume", array);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 诊查费(21) + 处方费(3)
|
|
|
*/
|
|
|
public JSONObject getDrugAndExaminationFeeList(ScreenQvo qvo) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
HashMap<String, String> map = new HashMap<>();
|
|
|
map.put("drugFree", "3"); //诊查费
|
|
|
map.put("ExaminationFee", "1"); //处方费
|
|
|
|
|
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
|
|
String key = entry.getKey();
|
|
|
String value = entry.getValue();
|
|
|
//按日
|
|
|
if ("1".equals(qvo.getTimeType())) {
|
|
|
JSONArray array = dateTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), value, null, SaveModel.timeLevel_ZL, null);
|
|
|
result.put(key, addWeekdayToJSONArray(array));
|
|
|
}
|
|
|
//按月
|
|
|
if ("3".equals(qvo.getTimeType())) {
|
|
|
JSONArray array = monthTotalStatistics2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), value, null, SaveModel.timeLevel_ZL, null);
|
|
|
result.put(key, array);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取【科室、医生】的接诊量接诊率排名
|
|
|
* 参照:hospital/statistics/consultListPC
|
|
|
* 查科室数据
|
|
|
* 图文问诊:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":11,"lowCode":9}
|
|
|
* 视频问诊:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":15,"lowCode":16}
|
|
|
* 社区协诊:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":13,"lowCode":12}
|
|
|
* 图文咨询:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":11,"lowCode":1}
|
|
|
* 视频咨询:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":15,"lowCode":17}
|
|
|
* <p>
|
|
|
* <p>
|
|
|
* 查找医生
|
|
|
* {"startDate":"2023-07-17","endDate":"2023-07-20","area":"1010100","level":5,"lowLevel":6,"index":11,"lowCode":9}
|
|
|
*/
|
|
|
public JSONObject getDeptOrDoctorVolumeList(ScreenQvo qvo) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
//查科室
|
|
|
if ("4".equals(String.valueOf(qvo.getLevel()))) {
|
|
|
//问诊总数
|
|
|
List<SaveModel> model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "9");
|
|
|
List<SaveModel> model02 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "16");
|
|
|
List<SaveModel> model03 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "5", "12");
|
|
|
List<SaveModel> model04 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "1");
|
|
|
List<SaveModel> model05 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "17");
|
|
|
//已接诊
|
|
|
List<SaveModel> jz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "9", "1");
|
|
|
List<SaveModel> jz_model02 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "16", "1");
|
|
|
List<SaveModel> jz_model03 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "5", "12", "1");
|
|
|
List<SaveModel> jz_model04 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "1", "1");
|
|
|
List<SaveModel> jz_model05 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "17", "1");
|
|
|
//未接诊
|
|
|
List<SaveModel> wjz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "9", "0");
|
|
|
List<SaveModel> wjz_model02 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "16", "0");
|
|
|
List<SaveModel> wjz_model03 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "5", "12", "0");
|
|
|
List<SaveModel> wjz_model04 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "5", "1", "0");
|
|
|
List<SaveModel> wjz_model05 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "5", "17", "0");
|
|
|
|
|
|
//转换
|
|
|
List<Map<String, Object>> list01 = getCoutListPCNew(4, "5", model01, jz_model01, wjz_model01);
|
|
|
List<Map<String, Object>> list02 = getCoutListPCNew(4, "5", model02, jz_model02, wjz_model02);
|
|
|
List<Map<String, Object>> list03 = getCoutListPCNew(4, "5", model03, jz_model03, wjz_model03);
|
|
|
List<Map<String, Object>> list04 = getCoutListPCNew(4, "5", model04, jz_model04, wjz_model04);
|
|
|
List<Map<String, Object>> list05 = getCoutListPCNew(4, "5", model05, jz_model05, wjz_model05);
|
|
|
|
|
|
List<List<Map<String, Object>>> listOfLists = new ArrayList<>();
|
|
|
listOfLists.add(list01);
|
|
|
listOfLists.add(list02);
|
|
|
listOfLists.add(list03);
|
|
|
listOfLists.add(list04);
|
|
|
listOfLists.add(list05);
|
|
|
//数据转换
|
|
|
List<Map<String, Object>> list = mergeAndSortLists(listOfLists, "1");
|
|
|
result.put("resultList", list);
|
|
|
}
|
|
|
|
|
|
//查医生
|
|
|
if ("5".equals(String.valueOf(qvo.getLevel()))) {
|
|
|
//问诊总数
|
|
|
List<SaveModel> model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "9");
|
|
|
List<SaveModel> model02 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "16");
|
|
|
List<SaveModel> model03 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "6", "12");
|
|
|
List<SaveModel> model04 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "1");
|
|
|
List<SaveModel> model05 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "17");
|
|
|
//已接诊
|
|
|
List<SaveModel> jz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "9", "1");
|
|
|
List<SaveModel> jz_model02 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "16", "1");
|
|
|
List<SaveModel> jz_model03 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "6", "12", "1");
|
|
|
List<SaveModel> jz_model04 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "1", "1");
|
|
|
List<SaveModel> jz_model05 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "17", "1");
|
|
|
//未接诊
|
|
|
List<SaveModel> wjz_model01 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "9", "0");
|
|
|
List<SaveModel> wjz_model02 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "16", "0");
|
|
|
List<SaveModel> wjz_model03 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "14", SaveModel.timeLevel_ZL, "6", "12", "0");
|
|
|
List<SaveModel> wjz_model04 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "12", SaveModel.timeLevel_ZL, "6", "1", "0");
|
|
|
List<SaveModel> wjz_model05 = elasticsearchUtil.findListDateQuotaLevel2(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "16", SaveModel.timeLevel_ZL, "6", "17", "0");
|
|
|
|
|
|
List<Map<String, Object>> list01 = getCoutListPCNew(5, "6", model01, jz_model01, wjz_model01);
|
|
|
List<Map<String, Object>> list02 = getCoutListPCNew(5, "6", model02, jz_model02, wjz_model02);
|
|
|
List<Map<String, Object>> list03 = getCoutListPCNew(5, "6", model03, jz_model03, wjz_model03);
|
|
|
List<Map<String, Object>> list04 = getCoutListPCNew(5, "6", model04, jz_model04, wjz_model04);
|
|
|
List<Map<String, Object>> list05 = getCoutListPCNew(5, "6", model05, jz_model05, wjz_model05);
|
|
|
|
|
|
//查询所有医生的照片和科室
|
|
|
List<List<Map<String, Object>>> listOfLists = new ArrayList<>();
|
|
|
listOfLists.add(list01);
|
|
|
listOfLists.add(list02);
|
|
|
listOfLists.add(list03);
|
|
|
listOfLists.add(list04);
|
|
|
listOfLists.add(list05);
|
|
|
//数据转换
|
|
|
List<Map<String, Object>> list = mergeAndSortLists(listOfLists, "2");
|
|
|
result.put("resultList", list);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 【全院明细】
|
|
|
* 科室、医生、问诊量、接诊量、未接诊量、接诊率、处方量、检查费、药品费、总收入
|
|
|
* 1、按科室 level 4 lowLevel 5
|
|
|
* 2、按医生 level 4 lowLevel 6
|
|
|
* //科室和医生
|
|
|
* 视频咨询:{"startDate":"2023-07-01","endDate":"2023-07-20","area":"350211A1002","level":4,"lowLevel":5,"index":15,"lowCode":17}
|
|
|
* 查找医生: {"startDate":"2023-07-17","endDate":"2023-07-20","area":"1010100","level":5,"lowLevel":6,"index":11,"lowCode":9}
|
|
|
*/
|
|
|
public JSONObject getAllHospitalDetails(ScreenQvo qvo) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
List<Map<String, Object>> resultList = null;
|
|
|
//查科室
|
|
|
if ("4".equals(String.valueOf(qvo.getLevel()))) {
|
|
|
JSONObject jsonObject = getDeptOrDoctorVolumeList(qvo);//问诊量、接诊量、未接诊量、接诊率
|
|
|
resultList = (List<Map<String, Object>>) jsonObject.get("resultList");
|
|
|
//诊查费(21) + 处方费(3)=总收入 处方量(2)
|
|
|
List<SaveModel> model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "3", SaveModel.timeLevel_ZL, "5", null);
|
|
|
List<SaveModel> model02 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "21", SaveModel.timeLevel_ZL, "5", null);
|
|
|
List<SaveModel> model03 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, "5", null);
|
|
|
List<Map<String, Object>> list = mergeListsToList(resultList, model01, model02, model03, "1");
|
|
|
result.put("list", list);
|
|
|
}
|
|
|
//查医生
|
|
|
if ("5".equals(String.valueOf(qvo.getLevel()))) {
|
|
|
JSONObject jsonObject = getDeptOrDoctorVolumeList(qvo);//问诊量、接诊量、未接诊量、接诊率
|
|
|
resultList = (List<Map<String, Object>>) jsonObject.get("resultList");
|
|
|
// 处方费(3)+诊查费(21) =总收入 处方量(2)
|
|
|
List<SaveModel> model01 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "3", SaveModel.timeLevel_ZL, "6", null);
|
|
|
List<SaveModel> model02 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "21", SaveModel.timeLevel_ZL, "6", null);
|
|
|
List<SaveModel> model03 = elasticsearchUtil.findListDateQuotaLevel1(qvo.getStartDate(), qvo.getEndDate(), qvo.getArea(), qvo.getLevel(), "2", SaveModel.timeLevel_ZL, "6", null);
|
|
|
List<Map<String, Object>> list = mergeListsToList(resultList, model01, model02, model03, "2");
|
|
|
result.put("list", list);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 补充数据
|
|
|
*/
|
|
|
private List<Map<String, Object>> mergeListsToList(List<Map<String, Object>> resultList, List<SaveModel> model01, List<SaveModel> model02, List<SaveModel> model03, String type) {
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
String name = (String) map.get("name");
|
|
|
//处方费
|
|
|
for (SaveModel model : model01) {
|
|
|
if ("1".equals(type)) {
|
|
|
String deptName = model.getDeptName();
|
|
|
if (deptName.equals(name)) {
|
|
|
map.put("free_prescription", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
if ("2".equals(type)) {
|
|
|
String doctorName = model.getDoctorName();
|
|
|
if (doctorName.equals(name)) {
|
|
|
map.put("free_prescription", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//诊查费
|
|
|
for (SaveModel model : model02) {
|
|
|
if ("1".equals(type)) {
|
|
|
String deptName = model.getDeptName();
|
|
|
if (deptName.equals(name)) {
|
|
|
map.put("free_exam", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
if ("2".equals(type)) {
|
|
|
String doctorName = model.getDoctorName();
|
|
|
if (doctorName.equals(name)) {
|
|
|
map.put("free_exam", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//处方量
|
|
|
for (SaveModel model : model03) {
|
|
|
if ("1".equals(type)) {
|
|
|
String deptName = model.getDeptName();
|
|
|
if (deptName.equals(name)) {
|
|
|
map.put("prescription_volume", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
if ("2".equals(type)) {
|
|
|
String doctorName = model.getDoctorName();
|
|
|
if (doctorName.equals(name)) {
|
|
|
map.put("prescription_volume", model.getResult1().doubleValue());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//计算总收入【检查费+处方费】
|
|
|
for (Map<String, Object> map : resultList) {
|
|
|
double free_prescription = Double.parseDouble(map.get("free_prescription").toString());
|
|
|
double free_exam = Double.parseDouble(map.get("free_exam").toString());
|
|
|
BigDecimal bd1 = new BigDecimal(Double.toString(free_prescription));
|
|
|
BigDecimal bd2 = new BigDecimal(Double.toString(free_exam));
|
|
|
double fee_total = bd1.add(bd2).doubleValue();
|
|
|
map.put("fee_total", fee_total);//总收入
|
|
|
}
|
|
|
|
|
|
return resultList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* list的map进行合并计算
|
|
|
*/
|
|
|
private List<Map<String, Object>> mergeAndSortLists(List<List<Map<String, Object>>> listOfLists, String type) {
|
|
|
Map<String, Map<String, Object>> mergedMap = new HashMap<>();
|
|
|
for (List<Map<String, Object>> list : listOfLists) {
|
|
|
for (Map<String, Object> map : list) {
|
|
|
String name = (String) map.get("name");
|
|
|
if (mergedMap.containsKey(name)) {
|
|
|
Map<String, Object> existingMap = mergedMap.get(name);
|
|
|
existingMap.put("total", (int) existingMap.get("total") + (int) map.get("total"));
|
|
|
existingMap.put("haveReceiveCount", (int) existingMap.get("haveReceiveCount") + (int) map.get("haveReceiveCount"));
|
|
|
existingMap.put("noReceiveCount", (int) existingMap.get("noReceiveCount") + (int) map.get("noReceiveCount"));
|
|
|
} else {
|
|
|
mergedMap.put(name, new HashMap<>(map));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
List<Map<String, Object>> sortedMaps = new ArrayList<>(mergedMap.values());
|
|
|
|
|
|
for (Map<String, Object> map : sortedMaps) {
|
|
|
double haveReceiveCount = Double.parseDouble(map.get("haveReceiveCount").toString());
|
|
|
double total = Double.parseDouble(map.get("total").toString());
|
|
|
double jzl = (double) haveReceiveCount / total * 100;
|
|
|
map.put("jzl", jzl + "%");//接诊率
|
|
|
}
|
|
|
if ("1".equals(type)) {
|
|
|
//排序
|
|
|
sortedMaps.sort(Comparator.comparingInt(map -> (int) map.get("total")));
|
|
|
Collections.reverse(sortedMaps);
|
|
|
}
|
|
|
if ("2".equals(type)) {
|
|
|
// todo 查出所有医生的数据 赋值科室
|
|
|
String sql = " SELECT\t`id`,\t`name`,\tphoto,\tvisit_dept \"deptCode\",visit_dept_name \"deptName\" \n" +
|
|
|
"FROM\n" +
|
|
|
"\tbase.base_doctor \n" +
|
|
|
"WHERE\n" +
|
|
|
"\t1 = 1 \n" +
|
|
|
"\tAND visit_dept IS NOT NULL \n";
|
|
|
List<Map<String, Object>> doctorList = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String, Object> map : sortedMaps) {
|
|
|
map.put("deptCode", "");
|
|
|
map.put("deptName", "");
|
|
|
map.put("photo", "");
|
|
|
String code = String.valueOf(map.get("code"));
|
|
|
for (Map<String, Object> doctorMap : doctorList) {
|
|
|
if (code.equals(String.valueOf(doctorMap.get("id")))) {
|
|
|
map.put("deptCode", String.valueOf(doctorMap.get("deptCode")));
|
|
|
map.put("deptName", String.valueOf(doctorMap.get("deptName")));
|
|
|
map.put("photo", String.valueOf(doctorMap.get("photo")));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
sortedMaps.sort(Comparator.comparingInt(map -> (int) map.get("haveReceiveCount")));
|
|
|
Collections.reverse(sortedMaps);
|
|
|
}
|
|
|
return sortedMaps;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 给jsonArray里面数据多放一个参数,星期几
|
|
|
*/
|
|
|
public static JSONArray addWeekdayToJSONArray(JSONArray jsonArray) {
|
|
|
for (int j = 0; j < jsonArray.size(); j++) {
|
|
|
JSONObject obj = jsonArray.getJSONObject(j);
|
|
|
String dateString = obj.getString("range");
|
|
|
obj.put("weekday", getChineseWeekday(dateString));
|
|
|
}
|
|
|
return jsonArray;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 根据字符串时间,算出星期几
|
|
|
*/
|
|
|
public static String getChineseWeekday(String dateString) {
|
|
|
LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
ZonedDateTime zonedDateTime = date.atStartOfDay(ZoneId.of("Asia/Shanghai"));
|
|
|
DayOfWeek dayOfWeek = zonedDateTime.getDayOfWeek();
|
|
|
|
|
|
Locale locale = Locale.CHINESE;
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E", locale);
|
|
|
|
|
|
return dayOfWeek.getDisplayName(TextStyle.FULL, locale);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 计算上一个周期。按时间间隔
|
|
|
*/
|
|
|
public static String[] calculatePreviousPeriod(String start, String end) {
|
|
|
// 将时间字符串转换为LocalDate对象
|
|
|
LocalDate startDate = LocalDate.parse(start, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
LocalDate endDate = LocalDate.parse(end, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
// 计算周期
|
|
|
int interval = (int) (endDate.toEpochDay() - startDate.toEpochDay()) + 1;
|
|
|
// 计算上一个周期的开始时间和结束时间
|
|
|
LocalDate previousStart = startDate.minusDays(interval);
|
|
|
LocalDate previousEnd = endDate.minusDays(interval);
|
|
|
// 将日期对象转换为字符串
|
|
|
String previousStartDate = previousStart.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
String previousEndDate = previousEnd.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
// 返回上一个周期的时间段
|
|
|
return new String[]{previousStartDate, previousEndDate};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算去年同期时间段
|
|
|
*/
|
|
|
public static String[] calculatePreviousYearPeriod(String start, String end) {
|
|
|
// 将时间字符串转换为LocalDate对象
|
|
|
LocalDate startDate = LocalDate.parse(start, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
LocalDate endDate = LocalDate.parse(end, DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
// 计算去年同期的开始时间和结束时间
|
|
|
LocalDate previousStart = startDate.minusYears(1);
|
|
|
LocalDate previousEnd = endDate.minusYears(1);
|
|
|
// 将日期对象转换为字符串
|
|
|
String previousStartDate = previousStart.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
String previousEndDate = previousEnd.format(DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
// 返回去年同期的时间段
|
|
|
return new String[]{previousStartDate, previousEndDate};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 转换
|
|
|
*/
|
|
|
public List<Map<String, Object>> getCoutListPCNew(Integer level, String lowLevel, List<SaveModel> total, List<SaveModel> haveReceive, List<SaveModel> noReceive) {
|
|
|
Map<String, Object> totalMap = new HashMap<>();
|
|
|
Map<String, Object> haveReceiveMap = new HashMap<>();
|
|
|
Map<String, Object> noReceiveMap = new HashMap<>();
|
|
|
|
|
|
String low_level = StringUtils.isEmpty(lowLevel) ? String.valueOf(level + 1) : lowLevel;
|
|
|
//转换已接诊
|
|
|
for (SaveModel saveModel : haveReceive) {
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
haveReceiveMap.put(saveModel.getDoctor(), saveModel);
|
|
|
} else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
haveReceiveMap.put(saveModel.getDept(), saveModel);
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
haveReceiveMap.put(saveModel.getHospital(), saveModel);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//转换总咨询数
|
|
|
for (SaveModel saveModel : total) {
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
totalMap.put(saveModel.getDoctor(), saveModel);
|
|
|
} else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
totalMap.put(saveModel.getDept(), saveModel);
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
totalMap.put(saveModel.getHospital(), saveModel);
|
|
|
}
|
|
|
}
|
|
|
//转换未接诊
|
|
|
for (SaveModel saveModel : noReceive) {
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
noReceiveMap.put(saveModel.getDoctor(), saveModel);
|
|
|
} else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
noReceiveMap.put(saveModel.getDept(), saveModel);
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
noReceiveMap.put(saveModel.getHospital(), saveModel);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<Map<String, Object>> resultMaps = new ArrayList<>();
|
|
|
for (String key : totalMap.keySet()) {
|
|
|
Map<String, Object> rs = new HashMap<>();
|
|
|
SaveModel totalRs = (SaveModel) totalMap.get(key);
|
|
|
SaveModel haveReceiveRs = (SaveModel) haveReceiveMap.get(key);
|
|
|
SaveModel noReceiveRs = (SaveModel) noReceiveMap.get(key);
|
|
|
|
|
|
totalRs = totalRs == null ? new SaveModel() : totalRs;
|
|
|
haveReceiveRs = haveReceiveRs == null ? new SaveModel() : haveReceiveRs;
|
|
|
noReceiveRs = noReceiveRs == null ? new SaveModel() : noReceiveRs;
|
|
|
|
|
|
//合并结果集
|
|
|
Integer totalNm = totalRs.getResult2().intValue();
|
|
|
Integer haveReceiveNm = haveReceiveRs.getResult2().intValue();
|
|
|
Integer noReceiveNm = noReceiveRs.getResult2().intValue();
|
|
|
if (SaveModel.doctorLevel.equals(low_level)) {
|
|
|
rs.put("name", totalRs.getDoctorName());
|
|
|
} else if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
rs.put("name", totalRs.getDeptName());
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
rs.put("name", totalRs.getHospitalName());
|
|
|
}
|
|
|
rs.put("total", totalNm);
|
|
|
rs.put("haveReceiveCount", haveReceiveNm);
|
|
|
rs.put("noReceiveCount", noReceiveNm);
|
|
|
rs.put("code", key);
|
|
|
resultMaps.add(rs);
|
|
|
}
|
|
|
return resultMaps;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按日期合并jsonarray的数据
|
|
|
*/
|
|
|
private JSONArray jsonArrayCalculation(ArrayList<JSONArray> list) {
|
|
|
JSONArray result = new JSONArray();
|
|
|
for (JSONArray jsonArray : list) {
|
|
|
for (int i = 0; i < jsonArray.size(); i++) {
|
|
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
|
|
String range = jsonObject.getString("range");
|
|
|
boolean isExisting = false;
|
|
|
for (int j = 0; j < result.size(); j++) {
|
|
|
JSONObject existingObject = result.getJSONObject(j);
|
|
|
if (existingObject.getString("range").equals(range)) {
|
|
|
int amount = existingObject.getIntValue("amount") + jsonObject.getIntValue("amount");
|
|
|
double num = existingObject.getDoubleValue("num") + jsonObject.getDoubleValue("num");
|
|
|
existingObject.put("amount", amount);
|
|
|
existingObject.put("num", num);
|
|
|
isExisting = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (!isExisting) {
|
|
|
result.add(jsonObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|