|
@ -686,13 +686,69 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
public Map<String, Object> homeTrend(String flag, int dataType, String month) throws Exception {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
List<Double> data = new ArrayList<>();
|
|
|
List<String> name = getName(flag, month);
|
|
|
if(dataType==0){
|
|
|
Map<String,Object> hospitalDataMap = packQcReportService.getHospitalNum(flag,month);
|
|
|
Map<String,Object> map1 =getTotalVisitNum(flag, month);
|
|
|
for(int i=0;i<name.size();i++){
|
|
|
if(map1.get(name.get(i))!=null&&hospitalDataMap.get(name.get(i))!=null){
|
|
|
if(Double.parseDouble(hospitalDataMap.get(name.get(i))+"")!=0){
|
|
|
double rate = (long)map1.get(name.get(i))/(double)hospitalDataMap.get(name.get(i))*100;
|
|
|
data.add((double) Math.round(rate * 100) / 100);
|
|
|
}else{
|
|
|
data.add(0.0);
|
|
|
}
|
|
|
}else{
|
|
|
data.add(0.0);
|
|
|
}
|
|
|
}
|
|
|
}else if(dataType==1){
|
|
|
Map<String,Object> hospitalDataMap = packQcReportService.getHospitalNum(flag,month);
|
|
|
for(int i=0;i<name.size();i++){
|
|
|
//2. 及时数
|
|
|
String start="";
|
|
|
String end="";
|
|
|
if("10".equals(flag)){
|
|
|
start = name.get(i)+"01";
|
|
|
end = DateUtil.getLastDate(start, "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}else{
|
|
|
start=name.get(i);
|
|
|
end=name.get(i);
|
|
|
}
|
|
|
double totalInTime = getInTimeNum("receive_date" ,start, end);
|
|
|
if(hospitalDataMap.get(name.get(i))!=null&&Double.parseDouble(hospitalDataMap.get(name.get(i))+"")!=0){
|
|
|
double rate = totalInTime/(double)hospitalDataMap.get(name.get(i))*100;
|
|
|
data.add((double) Math.round(rate * 100) / 100);
|
|
|
}else{
|
|
|
data.add(0.0);
|
|
|
}
|
|
|
}
|
|
|
}else if(dataType==2){
|
|
|
Map<String,Object> map1 = getErrorDataSetData(flag, month);
|
|
|
Map<String,Object> map2 = getTotalDataSets(flag, month);
|
|
|
for(int i=0;i<name.size();i++){
|
|
|
if(map1.get(name.get(i))!=null&&map2.get(name.get(i))!=null){
|
|
|
if(Double.parseDouble(map2.get(name.get(i))+"")!=0){
|
|
|
double rate = (double)map1.get(name.get(i))/(double)map2.get(name.get(i))*100;
|
|
|
data.add((double) Math.round(rate * 100) / 100);
|
|
|
}else{
|
|
|
data.add(0.0);
|
|
|
}
|
|
|
}else{
|
|
|
data.add(0.0);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
map.put("data", data);
|
|
|
map.put("name", name);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
private List<String> getName(String flag ,String month) throws Exception{
|
|
|
List<String> name = new ArrayList<>();
|
|
|
if("10".equals(flag)){//按月
|
|
|
for(int i=5;i>=0;i--){
|
|
|
for(int i=6;i>0;i--){
|
|
|
String start = DateUtil.formatDate(DateUtil.addMonth(0-i, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM");
|
|
|
String end = DateUtil.getLastDate (start+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
double rate = getRate(dataType, start+"-01", end);
|
|
|
data.add((double) Math.round(rate * 100) / 100);
|
|
|
name.add(start);
|
|
|
}
|
|
|
}else{//按日
|
|
@ -700,16 +756,12 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
for(int i=0;i<30;i++){
|
|
|
String date = DateUtil.toString(DateUtil.addDate(0-i,new Date()));
|
|
|
double rate = getRate(dataType, date, date);
|
|
|
data.add (0,(double) Math.round(rate * 100) / 100);
|
|
|
name.add(0,date);
|
|
|
}
|
|
|
}else{
|
|
|
String end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
for(int i=0;i<32;i++){
|
|
|
String date = DateUtil.toString(DateUtil.addDate(i,DateUtil.strToDate(month+"-01")));
|
|
|
double rate = getRate(dataType, date, date);
|
|
|
data.add ((double) Math.round(rate * 100) / 100);
|
|
|
name.add(date);
|
|
|
if(date.equals(end)){
|
|
|
break;
|
|
@ -717,62 +769,9 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
map.put("data", data);
|
|
|
map.put("name", name);
|
|
|
return map;
|
|
|
return name;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取比例
|
|
|
* @param dataType
|
|
|
* @param start
|
|
|
* @param end
|
|
|
* @return
|
|
|
*/
|
|
|
public double getRate(int dataType, String start, String end) throws Exception{
|
|
|
int totalHospitalNum = 0;//医院总就诊数
|
|
|
double totalInTime = 0;//总及时数
|
|
|
double totalVisitNum = 0;//总完整数(平台总就诊数)
|
|
|
double totalCorrect = 0;//总准确数
|
|
|
|
|
|
//1. 获取医院档案量;
|
|
|
Envelop envelop = packQcReportService.dailyReport("create_date", start + "T00:00:00Z", end + "T23:59:59Z", null);
|
|
|
Map<String, Object> hospitalDataMap = (Map<String, Object>) envelop.getDetailModelList().get(0);
|
|
|
//医院总数据量
|
|
|
totalHospitalNum = (int) hospitalDataMap.get("total");
|
|
|
|
|
|
if(dataType==0){
|
|
|
//1. 平台就诊完整数
|
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
|
getPatientCount("receive_date",start, end, null, dataMap);
|
|
|
totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());//就诊完整数
|
|
|
if(totalHospitalNum==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalVisitNum/totalHospitalNum*100;
|
|
|
}
|
|
|
}else if (dataType==1){
|
|
|
//2. 及时数
|
|
|
totalInTime = getInTimeNum("receive_date" ,start, end);
|
|
|
if(totalHospitalNum==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalInTime/totalHospitalNum*100;
|
|
|
}
|
|
|
}else{
|
|
|
//3. 去重准确数【】
|
|
|
totalCorrect = getErrorDataSetData("receive_date",start, end, null);
|
|
|
//4. 数据集总量
|
|
|
double dataSetsMun = getDataSetsMap(start, end, null);
|
|
|
if(dataSetsMun==0){
|
|
|
return 0.0;
|
|
|
}else{
|
|
|
return totalCorrect/dataSetsMun*100;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
public Map<String, Object> getHealthyArchiveTrend(String flag,String month) throws Exception {
|
|
|
Map<String, Object> resMap = new HashMap<>();
|
|
|
List<String> date = new ArrayList<>();
|
|
@ -860,4 +859,170 @@ public class DataQualityHomeService extends BaseJpaService {
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 平台人数 去重复
|
|
|
* @param flag 10按月 20按日
|
|
|
* @param month
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Map<String, Object> getTotalVisitNum(String flag, String month) throws Exception {
|
|
|
TreeMap<String, Object> map = new TreeMap<>();
|
|
|
TransportClient transportClient = elasticSearchPool.getClient();
|
|
|
String start = "";
|
|
|
String end = "";
|
|
|
AggregationBuilder aggregation =null;
|
|
|
if("10".equals(flag)){//按月
|
|
|
start = DateUtil.formatDate(DateUtil.addMonth(-6, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM") + "-01";
|
|
|
end = DateUtil.getLastDate (month + "-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.MONTH).format("yyyy-MM");
|
|
|
|
|
|
}else{//按日
|
|
|
//当前月份显示最近30天,否则显示当月的数据
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
start = DateUtil.toString(DateUtil.addDate(-30,new Date()));
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}else{
|
|
|
start = month+"-01";
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
stringBuilder.append("pack_type=1;");
|
|
|
stringBuilder.append("receive_date>=" + start + " 00:00:00;");
|
|
|
stringBuilder.append("receive_date<" + end + " 23:59:59;");
|
|
|
CardinalityBuilder childTerms = AggregationBuilders.cardinality("count").field("event_no").precisionThreshold(40000);
|
|
|
|
|
|
SearchRequestBuilder requestBuilder = transportClient.prepareSearch("json_archives")
|
|
|
.setTypes("info");
|
|
|
requestBuilder.setQuery(elasticSearchUtil.getQueryBuilder(stringBuilder.toString()));
|
|
|
requestBuilder.addAggregation(aggregation.subAggregation(childTerms));
|
|
|
requestBuilder.addSort("receive_date", SortOrder.DESC);
|
|
|
SearchResponse response = requestBuilder.execute().actionGet();
|
|
|
Histogram agg = response.getAggregations().get("agg");
|
|
|
|
|
|
for (Histogram.Bucket entry : agg.getBuckets()) {
|
|
|
String keyAsString = entry.getKeyAsString();
|
|
|
long docCount = entry.getDocCount();
|
|
|
InternalCardinality extendedStats = entry.getAggregations().get("count");
|
|
|
map.put(keyAsString,extendedStats.getValue());
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取数据集总量
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Object> getTotalDataSets(String flag, String month) throws Exception {
|
|
|
TreeMap<String, Object> map = new TreeMap<>();
|
|
|
TransportClient transportClient = elasticSearchPool.getClient();
|
|
|
String start = "";
|
|
|
String end = "";
|
|
|
AggregationBuilder aggregation =null;
|
|
|
if("10".equals(flag)){//按月
|
|
|
start = DateUtil.formatDate(DateUtil.addMonth(-6, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM") + "-01";
|
|
|
end = DateUtil.getLastDate (month + "-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.MONTH).format("yyyy-MM");
|
|
|
|
|
|
}else{//按日
|
|
|
//当前月份显示最近30天,否则显示当月的数据
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
start = DateUtil.toString(DateUtil.addDate(-30,new Date()));
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}else{
|
|
|
start = month+"-01";
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
stringBuilder.append("receive_date>=" + start + " 00:00:00;");
|
|
|
stringBuilder.append("receive_date<=" + end + " 23:59:59;");
|
|
|
SumBuilder terms = AggregationBuilders.sum("sumCount").field("count");
|
|
|
|
|
|
SearchRequestBuilder requestBuilder = transportClient.prepareSearch("json_archives_qc")
|
|
|
.setTypes("qc_dataset_detail");
|
|
|
requestBuilder.setQuery(elasticSearchUtil.getQueryBuilder(stringBuilder.toString()));
|
|
|
requestBuilder.addAggregation(aggregation.subAggregation(terms));
|
|
|
requestBuilder.addSort("receive_date", SortOrder.DESC);
|
|
|
SearchResponse response = requestBuilder.execute().actionGet();
|
|
|
Histogram agg = response.getAggregations().get("agg");
|
|
|
|
|
|
for (Histogram.Bucket entry : agg.getBuckets()) {
|
|
|
String keyAsString = entry.getKeyAsString();
|
|
|
InternalSum longTerms = entry.getAggregations().get("sumCount");
|
|
|
map.put(keyAsString,longTerms.getValue());
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取质控错误 - 数据集总条数
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> getErrorDataSetData(String flag, String month)throws Exception {
|
|
|
TreeMap<String, Object> map = new TreeMap<>();
|
|
|
TransportClient transportClient = elasticSearchPool.getClient();
|
|
|
String start = "";
|
|
|
String end = "";
|
|
|
AggregationBuilder aggregation =null;
|
|
|
if("10".equals(flag)){//按月
|
|
|
start = DateUtil.formatDate(DateUtil.addMonth(-6, DateUtil.formatCharDateYMD(month+"-01")), "yyyy-MM") + "-01";
|
|
|
end = DateUtil.getLastDate (month + "-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.MONTH).format("yyyy-MM");
|
|
|
|
|
|
}else{//按日
|
|
|
//当前月份显示最近30天,否则显示当月的数据
|
|
|
if(month.equals(DateUtil.toString(new Date(), "yyyy-MM"))){
|
|
|
start = DateUtil.toString(DateUtil.addDate(-30,new Date()));
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}else{
|
|
|
start = month+"-01";
|
|
|
end = DateUtil.getLastDate (month+"-01", "yyyy-MM-dd", "yyyy-MM-dd");
|
|
|
}
|
|
|
aggregation = AggregationBuilders.dateHistogram("agg").field("receive_date")
|
|
|
.interval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
|
stringBuilder.append("receive_date>=" + start + " 00:00:00;");
|
|
|
stringBuilder.append("receive_date<=" + end + " 23:59:59;");
|
|
|
stringBuilder.append("qc_step=1||qc_step=2;");
|
|
|
AggregationBuilder terms = AggregationBuilders.terms("dataset").field("dataset").size(200);
|
|
|
CardinalityBuilder childTerms = AggregationBuilders.cardinality("count").field("pack_id").precisionThreshold(40000);
|
|
|
terms.subAggregation(childTerms);
|
|
|
|
|
|
SearchRequestBuilder requestBuilder = transportClient.prepareSearch("json_archives_qc")
|
|
|
.setTypes("qc_metadata_info");
|
|
|
requestBuilder.setQuery(elasticSearchUtil.getQueryBuilder(stringBuilder.toString()));
|
|
|
requestBuilder.addAggregation(aggregation.subAggregation(terms));
|
|
|
requestBuilder.addSort("receive_date", SortOrder.DESC);
|
|
|
SearchResponse response = requestBuilder.execute().actionGet();
|
|
|
Histogram agg = response.getAggregations().get("agg");
|
|
|
|
|
|
for (Histogram.Bucket entry : agg.getBuckets()) {
|
|
|
String keyAsString = entry.getKeyAsString();
|
|
|
StringTerms longTerms = entry.getAggregations().get("dataset");
|
|
|
double num = 0;
|
|
|
for (Terms.Bucket item : longTerms.getBuckets()) {
|
|
|
InternalCardinality extendedStats = item.getAggregations().get("count");
|
|
|
num+=extendedStats.getValue();
|
|
|
}
|
|
|
map.put(keyAsString,num);
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
}
|