Browse Source

Merge remote-tracking branch 'origin/master'

hill9868 6 years ago
parent
commit
d5983dc0bb

+ 42 - 0
.gitignore

@ -0,0 +1,42 @@
#project files
ehr.ipr
ehr.iws
ehr.ids
*.html
*.iml
*/target/*
*/*/target/*
.idea/*
# ---> Java
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*#
# thrift generate code
commons-thrift-services/src/main/java/com/yihu/ehr/adaption
commons-thrift-services/src/main/java/com/yihu/ehr/app
commons-thrift-services/src/main/java/com/yihu/ehr/browser
commons-thrift-services/src/main/java/com/yihu/ehr/data/domain
commons-thrift-services/src/main/java/com/yihu/ehr/dict
commons-thrift-services/src/main/java/com/yihu/ehr/geography
commons-thrift-services/src/main/java/com/yihu/ehr/hadoop
commons-thrift-services/src/main/java/com/yihu/ehr/lang
commons-thrift-services/src/main/java/com/yihu/ehr/org
commons-thrift-services/src/main/java/com/yihu/ehr/pack
commons-thrift-services/src/main/java/com/yihu/ehr/patient
commons-thrift-services/src/main/java/com/yihu/ehr/profile
commons-thrift-services/src/main/java/com/yihu/ehr/resolve
commons-thrift-services/src/main/java/com/yihu/ehr/resource
commons-thrift-services/src/main/java/com/yihu/ehr/security
commons-thrift-services/src/main/java/com/yihu/ehr/std
commons-thrift-services/src/main/java/com/yihu/ehr/user

+ 0 - 4
pom.xml

@ -103,10 +103,6 @@
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-redis-mq</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-util</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.ehr</groupId>
            <artifactId>commons-data-solr</artifactId>

+ 8 - 0
src/main/java/com/yihu/ehr/analyze/common/AnalyzerApi.java

@ -0,0 +1,8 @@
package com.yihu.ehr.analyze.common;
public class AnalyzerApi {
    public class PackQcReport{
        public static final String ImageInfo = "imageInfo";
    }
}

+ 19 - 0
src/main/java/com/yihu/ehr/analyze/controller/PackQcReportEndPoint.java

@ -1,5 +1,6 @@
package com.yihu.ehr.analyze.controller;
import com.yihu.ehr.analyze.common.AnalyzerApi;
import com.yihu.ehr.analyze.feign.HosAdminServiceClient;
import com.yihu.ehr.analyze.model.AdapterDatasetModel;
import com.yihu.ehr.analyze.model.AdapterMetadataModel;
@ -409,4 +410,22 @@ public class PackQcReportEndPoint extends EnvelopRestEndPoint {
        envelop.setDetailModelList(profileInfo);
        return envelop;
    }
    @RequestMapping(value = AnalyzerApi.PackQcReport.ImageInfo, method = RequestMethod.GET)
    @ApiOperation(value = "获取影像采集情况")
    public Envelop getImageInfo(
            @ApiParam(name = "orgArea", value = "区县编码")
            @RequestParam(name = "orgArea", required = false) String orgArea,
            @ApiParam(name = "orgCode", value = "机构编码")
            @RequestParam(name = "orgCode", required = false) String orgCode,
            @ApiParam(name = "startDate", value = "开始日期", defaultValue = "2018-09-01")
            @RequestParam(name = "startDate", required = false)String startDate,
            @ApiParam(name = "endDate", value = "结束日期", defaultValue = "2018-09-11")
            @RequestParam(name = "endDate", required = false) String endDate) throws Exception {
        List<Map<String, Object>> esImageTotal = packQcReportService.getImageInfo(orgArea, orgCode, startDate, endDate);
        Envelop envelop = new Envelop();
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(esImageTotal);
        return envelop;
    }
}

+ 4 - 2
src/main/java/com/yihu/ehr/analyze/controller/PackStatisticsEndPoint.java

@ -147,7 +147,9 @@ public class PackStatisticsEndPoint extends EnvelopRestEndPoint {
            @ApiParam(name = "startDate", value = "开始日期")
            @RequestParam(name = "startDate") String startDate,
            @ApiParam(name = "endDate", value = "结束日期")
            @RequestParam(name = "endDate") String endDate) throws Exception {
        return statisticService.getReceiveNum(startDate, endDate);
            @RequestParam(name = "endDate") String endDate,
            @ApiParam(name = "orgArea", value = "区域代码")
            @RequestParam(name = "orgArea", required = false) String orgArea) throws Exception {
        return statisticService.getReceiveNum(startDate, endDate, orgArea);
    }
}

+ 100 - 12
src/main/java/com/yihu/ehr/analyze/controller/dataQuality/DataQualityHomeEndpoint.java

@ -29,8 +29,6 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
    private DataQualityHomeService dataQualityHomeService;
    @RequestMapping(value = ServiceApi.DataQuality.HomeSummary, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--质控情况")
    public Envelop homneSummary(
@ -99,7 +97,7 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
            @RequestParam(value = "orgArea", required = false) String orgArea,
            @ApiParam(name = "orgCode", value = "机构代码")
            @RequestParam(value = "orgCode", required = false) String orgCode,
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,1:准确性)")
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,2:准确性)")
            @RequestParam(value = "dataType", required = false) Integer dataType,
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
@ -125,7 +123,7 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
            @RequestParam(value = "orgCode", required = false) String orgCode,
            @ApiParam(name = "dataset", value = "数据集")
            @RequestParam(value = "dataset", required = false) String dataset,
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,1:准确性)")
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,2:准确性)")
            @RequestParam(value = "dataType", required = false) Integer dataType,
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
@ -142,15 +140,9 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
        return envelop;
    }
    @RequestMapping(value = "bulkUpDateOrgArea", method = RequestMethod.GET)
    @ApiOperation(value = "批量更新机构关联的区域编码(通过org_code字段更新org_area字段")
    public String bulkUploadOrgArea(
    public long bulkUploadOrgArea(
            @ApiParam(name = "index", value = "索引")
            @RequestParam(value = "index", required = true) String index,
            @ApiParam(name = "type", value = "type")
@ -159,7 +151,103 @@ public class DataQualityHomeEndpoint extends EnvelopRestEndPoint {
            @RequestParam(value = "filters", required = false) String filters
    ) throws Exception {
        long result = dataQualityHomeService.bulkUpdateOrgArea(index, type, filters);
        return "本次更新总数:"+result;
        return result;
    }
    /** *************************** APP 端接口 **********************************/
    @RequestMapping(value = ServiceApi.DataQuality.HomeCompleteAnalyze, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--完整率分析")
    public Envelop completeAnalyze(
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
            @ApiParam(name = "end", value = "结束时间,(接收时间)", defaultValue = "")
            @RequestParam(value = "end", required = false) String end ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.getCompleteStatistics(start,end));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeCorrectAnalyze, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--准确率分析")
    public Envelop correctAnalyze(
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
            @ApiParam(name = "end", value = "结束时间,(接收时间)", defaultValue = "")
            @RequestParam(value = "end", required = false) String end ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.getCorrectStatistics(start,end));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeInTimeAnalyze, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--及时率分析")
    public Envelop inTimeAnalyze(
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
            @ApiParam(name = "end", value = "结束时间,(接收时间)", defaultValue = "")
            @RequestParam(value = "end", required = false) String end ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.getInTimeStatistics(start,end));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeTrend, method = RequestMethod.GET)
    @ApiOperation(value = "质量监控首页--月趋势、日趋势")
    public Envelop homeTrend(
            @ApiParam(name = "flag", value = "类型(10:按月,20:按日)")
            @RequestParam(value = "flag", required = true) String flag,
            @ApiParam(name = "dataType", value = "数据维度  (0: 完整性,1:及时性,2:准确性)")
            @RequestParam(value = "dataType", required = false) Integer dataType,
            @ApiParam(name = "month", value = "月份")
            @RequestParam(value = "month", required = false) String month
           ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.homeTrend(flag, dataType, month));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
    @RequestMapping(value = ServiceApi.DataQuality.HomeHealthArchiveTrend, method = RequestMethod.GET)
    @ApiOperation(value = "app质量监控首页--电子健康档案数-建档趋势")
    public Envelop healthArchive(
            @ApiParam(name = "flag", value = "类型(10:按月,20:按日)")
            @RequestParam(value = "flag", required = true) String flag,
            @ApiParam(name = "month", value = "月份")
            @RequestParam(value = "month", required = false) String month
    ) throws Exception {
        Envelop envelop = new Envelop();
        try {
            return success(dataQualityHomeService.getHealthyArchiveTrend(flag, month));
        }catch (Exception e){
            e.printStackTrace();
            envelop.setSuccessFlg(false);
            envelop.setErrorMsg(e.getMessage());
        }
        return envelop;
    }
}

+ 233 - 0
src/main/java/com/yihu/ehr/analyze/controller/dataQuality/TestDemo.java

@ -0,0 +1,233 @@
package com.yihu.ehr.analyze.controller.dataQuality;
import com.yihu.ehr.elasticsearch.ElasticSearchPool;
import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.search.aggregations.metrics.cardinality.CardinalityBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.ResultSet;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 *  临时测试聚合demo,后续删除
 * @author HZY
 * @created 2018/9/3 9:08
 */
@Service
public class TestDemo {
    private final static Logger logger = LoggerFactory.getLogger(TestDemo.class);
    @Autowired
    private ElasticSearchPool elasticSearchPool;
    @Autowired
    private ElasticSearchUtil elasticSearchUtil;
    public List<Map<String, Object>> testAgg(String eventDateStart, String eventDateEnd , String org_area){
        StringBuilder stringBuilder2 = new StringBuilder();
//        stringBuilder2.append("archive_status=3;");
        stringBuilder2.append("pack_type=1;");
        stringBuilder2.append("receive_date>=" + eventDateStart + " 00:00:00;");
        stringBuilder2.append("receive_date<" + eventDateEnd + " 23:59:59;");
        if (org_area!=null) {
            stringBuilder2.append("org_area=" + org_area);
        }
        TransportClient transportClient = elasticSearchPool.getClient();
        List<Map<String, Object>> resultList = new ArrayList<>();
        SearchRequestBuilder builder = transportClient.prepareSearch("json_archives");
        builder.setTypes("info");
        builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        builder.setQuery(elasticSearchUtil.getQueryBuilder(stringBuilder2.toString()));
        AggregationBuilder terms = AggregationBuilders.terms("org_area").field("org_area").size(200);
        CardinalityBuilder childTerms = AggregationBuilders.cardinality("count").field("event_no").precisionThreshold(40000);
        terms.subAggregation(childTerms);
        builder.addAggregation(terms);
        builder.setSize(0);
        builder.setExplain(true);
        SearchResponse response = builder.get();
        StringTerms longTerms = response.getAggregations().get("org_area");
        for (Terms.Bucket item : longTerms.getBuckets()) {
            Map<String, Object> temp = new HashMap<>();
            temp.put("org_area", item.getKeyAsString());
            temp.put("count11", item.getDocCount());
            resultList.add(temp);
        }
        return resultList;
    }
    public List<Map<String, Object>> testAgg2(String start,String end ) throws Exception {
        String dateField = "receive_date";
        List<Map<String, Object>> resultList = new ArrayList<>();
        List<String> orgList = new ArrayList<>();
        Map<String, Object> map = null;
        //统计有数据的医院code
        String sqlOrg = "SELECT org_area FROM json_archives/info where receive_date>= '" + start + " 00:00:00' AND receive_date<='" + end + " 23:59:59' group by org_area ";
        try {
            ResultSet resultSetOrg = elasticSearchUtil.findBySql(sqlOrg);
            while (resultSetOrg.next()) {
                String orgCode = resultSetOrg.getString("org_area");
                orgList.add(orgCode);
            }
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
            }
        }
        //按医院code查找,直接group by查找结果有问题
        for (String orgCode : orgList) {
            map = new HashMap<>();
            //完整数
            try {
                long starttime = System.currentTimeMillis();
                String sql3 = "";
                if (StringUtils.isNotEmpty(orgCode)) {
                    sql3 = "SELECT COUNT(DISTINCT org_area) FROM json_archives WHERE pack_type=1 AND org_area='" + orgCode + "' AND " + dateField + " BETWEEN " +
                            "'" + start + " 00:00:00' AND '" + end + " 23:59:59'";
                } else {
                    sql3 = "SELECT COUNT(DISTINCT org_area) FROM json_archives WHERE pack_type=1 AND " + dateField +
                            " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59'";
                }
                ResultSet resultSet3 = elasticSearchUtil.findBySql(sql3);
                resultSet3.next();
                map.put("count", new Double(resultSet3.getObject("COUNT(DISTINCT event_no)").toString()).intValue());//就诊
                map.put("org_area",orgCode);//就诊
                resultList.add(map);
                logger.info("平台就诊人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
            } catch (Exception e) {
                if (!"Error".equals(e.getMessage())) {
                    e.printStackTrace();
                }
            }
        }
        return resultList;
    }
    public List<Map<String, Object>>  testSearch(){
        TransportClient transportClient = elasticSearchPool.getClient();
        Map<String, Long> resMap = new HashMap<>();
        List<Map<String, Object>> resultList = new ArrayList<>();
        List<String> fileds = new ArrayList<>();
        String filters = "";
        fileds.add("count");
        fileds.add("upload_status");
        //完整数
        long total = 0;
        try {
            long starttime = System.currentTimeMillis();
            SearchRequestBuilder builder = transportClient.prepareSearch("test1");
            builder.setTypes("hzy");
            builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
//                builder.setQuery(elasticSearchUtil.getQueryBuilder(filters.toString()));
            AggregationBuilder terms = AggregationBuilders.terms("upload_status").field("upload_status").size(200);
            CardinalityBuilder childTerms = AggregationBuilders.cardinality("COUNT(DISTINCT org_area)").field("distinct org_area").precisionThreshold(40000);
            terms.subAggregation(childTerms);
            builder.addAggregation(terms);
            builder.setSize(0);
            builder.setFrom(0);
            Map<String,Object> sourceMap = new HashMap<>();
            List<String> include = new ArrayList<>();
            include.add("COUNT");
            sourceMap.put("includes",include);
            sourceMap.put("excludes",new ArrayList<>());
            builder.setSource(sourceMap);
            SearchResponse response = builder.get();
            StringTerms longTerms = response.getAggregations().get("upload_status");
            for (Terms.Bucket item : longTerms.getBuckets()) {
                Map<String, Object> temp = new HashMap<>();
                temp.put("upload_status", item.getKeyAsString());
                temp.put("count11", item.getDocCount());
                resultList.add(temp);
            }
            logger.info("平台就诊人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
            }
        }
        return resultList;
    }
    public List<Map<String, Object>> testSearch2(){
        StringBuilder stringBuilder2 = new StringBuilder();
        List<Map<String, Object>> resultList = new ArrayList<>();
        List<Map<String, Object>> resultList2 = new ArrayList<>();
        TransportClient transportClient = elasticSearchPool.getClient();
        SearchRequestBuilder builder = transportClient.prepareSearch("test1");
        builder.setTypes("hzy");
        builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        builder.setQuery(elasticSearchUtil.getQueryBuilder(stringBuilder2.toString()));
        AggregationBuilder terms = AggregationBuilders.terms("upload_status").field("upload_status").size(200);
        TermsBuilder childTerms = AggregationBuilders.terms("count").field("org_area") ;
        terms.subAggregation(childTerms);
        builder.addAggregation(terms);
        builder.setSize(0);
        builder.setExplain(true);
        SearchResponse response = builder.get();
        StringTerms longTerms = response.getAggregations().get("upload_status");
        for (Terms.Bucket item : longTerms.getBuckets()) {
            Map<String, Object> temp = new HashMap<>();
            temp.put("org_area", item.getKeyAsString());
            temp.put("count11", item.getDocCount());
            resultList.add(temp);
        }
        return resultList;
    }
    public void testadd(String type) throws ParseException {
        List<Map<String, Object>> list = null;
        for (int x = 0; x < 30; x++) {
            for (int i = 0; i < 10; i++) {
                list = new ArrayList<>();
                for (int j = 0; j < 10000; j++) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("upload_status", i);
                    map.put("event_type", "i:" + i + "下面的:" + j);
                    map.put("org_area", type + j);
                    list.add(map);
                }
                for (int j = 0; j < 10; j++) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("upload_status", i);
                    map.put("event_type", "i:" + i + "重复出来的:" + j);
                    map.put("org_area", type + j);
                    list.add(map);
                }
                elasticSearchUtil.bulkIndex("test1", "hzy", list);
            }
        }
    }
    public void testDel() throws ParseException {
        elasticSearchUtil.deleteByFilter("test1","hzy","");
    }
}

+ 94 - 0
src/main/java/com/yihu/ehr/analyze/controller/dataQuality/TestDemoEndpoint.java

@ -0,0 +1,94 @@
package com.yihu.ehr.analyze.controller.dataQuality;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.controller.EnvelopRestEndPoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
 *  质控管理- 首页
 * @author HZY
 * @created 2018/8/17 11:24
 */
@RestController("/demo")
@RequestMapping(value = ApiVersion.Version1_0, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@Api(value = "TestDemoEndpoint", description = "测试es聚合demo", tags = {"临时测试demo"})
public class TestDemoEndpoint extends EnvelopRestEndPoint {
    @Autowired
    private TestDemo testDemo;
    @RequestMapping(value = "test", method = RequestMethod.GET)
    @ApiOperation(value = "test(测试数据获取")
    public   List<Map<String, Object>>  test(
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
            @ApiParam(name = "end", value = "结束时间,(接收时间)")
            @RequestParam(value = "end", required = false) String end ,
            @ApiParam(name = "org_area", value = "org_area")
            @RequestParam(value = "org_area", required = false) String org_area
    ) throws Exception {
        List<Map<String, Object>> result = testDemo.testAgg(start, end, org_area);
        return result;
    }
    @RequestMapping(value = "test2", method = RequestMethod.GET)
    @ApiOperation(value = "test(测试数据获取")
    public   List<Map<String, Object>>  test2(
            @ApiParam(name = "start", value = "开始时间,(接收时间)")
            @RequestParam(value = "start", required = false) String start,
            @ApiParam(name = "end", value = "结束时间,(接收时间)")
            @RequestParam(value = "end", required = false) String end ,
            @ApiParam(name = "org_area", value = "org_area")
            @RequestParam(value = "org_area", required = false) String org_area
    ) throws Exception {
//        List<Map<String, Object>> result = testDemo.testAgg(start, end, org_area);
        List<Map<String, Object>> result = testDemo.testAgg2(start, end);
        return result;
    }
    @RequestMapping(value = "testAdd", method = RequestMethod.GET)
    @ApiOperation(value = "testAdd(测试数据添加")
    public   void testAdd(
            @ApiParam(name = "org_area", value = "org_area")
            @RequestParam(value = "org_area", required = false) String org_area
    ) throws Exception {
//        List<Map<String, Object>> result = testDemo.testAgg(start, end, org_area);
        testDemo.testadd(org_area);
    }
    @RequestMapping(value = "testQuery", method = RequestMethod.GET)
    @ApiOperation(value = "testQuery(测试数据查询")
    public    List<Map<String, Object>> testQuery(
    ) throws Exception {
        List<Map<String, Object>> map = testDemo.testSearch();
        return map;
    }
    @RequestMapping(value = "testQuer2y", method = RequestMethod.GET)
    @ApiOperation(value = "testQuery(测试数据查询2")
    public    List<Map<String, Object>> testQuery2(
    ) throws Exception {
        List<Map<String, Object>> map = testDemo.testSearch2();
        return map;
    }
    @RequestMapping(value = "testDel", method = RequestMethod.DELETE)
    @ApiOperation(value = "testAdd(测试数据删除")
    public   void testDel(
    ) throws Exception {
//        List<Map<String, Object>> result = testDemo.testAgg(start, end, org_area);
        testDemo.testDel();
    }
}

+ 2 - 2
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataCompleteService.java

@ -78,7 +78,7 @@ public class DataCompleteService extends DataQualityBaseService {
            }
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
            Map<String, Object> totalMap = genTotalData("上饶市",totalNum,totalHospitalNum);
@ -128,7 +128,7 @@ public class DataCompleteService extends DataQualityBaseService {
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
            Map<String, Object> totalMap = genTotalData("全部机构", totalNum, totalHospitalNum);

+ 2 - 2
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataCorrectService.java

@ -284,7 +284,7 @@ public class DataCorrectService extends DataQualityBaseService {
            }
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
            Map<String, Object> totalMap = genTotalData("上饶市", totalNum, totalHospitalNum);
@ -334,7 +334,7 @@ public class DataCorrectService extends DataQualityBaseService {
            }
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
            Map<String, Object> totalMap = genTotalData("全部机构", totalNum, totalHospitalNum);

+ 59 - 63
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataInTimeService.java

@ -51,46 +51,51 @@ public class DataInTimeService extends DataQualityBaseService {
     * @param end
     * @return
     */
    public Map<String, Object> getInTimeMap(Integer dataLevel,Integer eventType, String dateField, String start, String end, String orgArea) {
    public Map<String, Object> getInTimeMap(Integer dataLevel, String dateField, String start, String end, String orgArea) {
        Map<String, Object> resMap = new HashMap<>();
        double totalInTime = 0;
        //初始化 及时率预警信息
        DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
        long starttime = System.currentTimeMillis();
        String sql0 = "";
        List<String> fields = new ArrayList<String>();
        fields.add("count");
        try {
            if (StringUtils.isNotEmpty(orgArea) ) {
                fields.add("org_code");
                sql0 = "SELECT  COUNT(DISTINCT event_no) as count,org_code FROM json_archives WHERE event_type=" + eventType + " AND pack_type=1 AND org_area='" + orgArea + "' AND " + dateField +
                        " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() + " GROUP BY org_code";
            } else if (  dataLevel ==0 && StringUtils.isEmpty(orgArea)){
                fields.add("org_area");
                sql0 = "SELECT  COUNT(DISTINCT event_no) as count,org_area FROM json_archives WHERE event_type=" + eventType + " AND pack_type=1 AND " + dateField +
                        " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() + " GROUP BY org_area";
            }else  if (  dataLevel ==1 && StringUtils.isEmpty(orgArea)){
                fields.add("org_code");
                sql0 = "SELECT  COUNT(DISTINCT event_no) as count,org_area FROM json_archives WHERE event_type=" + eventType + " AND pack_type=1 AND " + dateField +
                        " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() + " GROUP BY org_code";
        //获取有数据的医院code列表
        List<String> orgList = hasDataHospital(dateField, start, end);
        for (String orgCode : orgList) {
            //初始化 及时率预警信息
            DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(orgCode);
            if (warning == null) {
                warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
            }
            long starttime = System.currentTimeMillis();
            String sql0 = "";
            List<String> fields = new ArrayList<String>();
            fields.add("count");
            fields.add("org_code");
            try {
                if (StringUtils.isNotEmpty(orgArea)) {
                    sql0 = "SELECT  COUNT(DISTINCT event_no) as count,org_code FROM json_archives WHERE  pack_type=1 AND org_area='" + orgArea + "' AND " + dateField +
                            " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() + " GROUP BY org_code";
                } else {
                    sql0 = "SELECT  COUNT(DISTINCT event_no) as count,org_code FROM json_archives WHERE  pack_type=1 AND " + dateField +
                            " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() + " GROUP BY org_code";
                }
            List<Map<String, Object>> resultSet0 = elasticSearchUtil.findBySql(fields, sql0);
            if (resultSet0 != null && resultSet0.size() > 0) {
                for (Map<String, Object> map : resultSet0) {
                    if (StringUtils.isNotEmpty(orgArea) || ( dataLevel ==1 && StringUtils.isEmpty(orgArea))) {
                        resMap.put(map.get("org_code").toString(), map.get("count"));
                    } else {
                        resMap.put(map.get("org_area").toString(), map.get("count"));
                List<Map<String, Object>> resultSet0 = elasticSearchUtil.findBySql(fields, sql0);
                for (Map<String, Object> orgData : resultSet0) {
                    if (dataLevel == 0) {
                        //区域级别分组
                        String org = orgData.get("org_code").toString();
                        double newValue = (double) orgData.get("count");
                        String area = redisClient.get("organizations:" + org + ":area");
                        double oldValue = resMap.get(area) == null ? 0 : (double) resMap.get(area);
                        resMap.put(area, oldValue + newValue);
                    } else if (dataLevel == 1) {
                        //机构级别分组
                        resMap.put(orgData.get("org_code").toString(), orgData.get("count"));
                    }
                }
            }
            logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
                logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
            } catch (Exception e) {
                if (!"Error".equals(e.getMessage())) {
                    e.printStackTrace();
                }
            }
        }
        return resMap;
@ -104,28 +109,19 @@ public class DataInTimeService extends DataQualityBaseService {
     * @param end
     * @return
     */
    public Map<String, Object> getInTimeMap(Integer dataLevel,String dateField, String start, String end, String orgArea) {
    public Map<String, Object> getInTimeDataMap(Integer dataLevel, String dateField, String start, String end, String orgArea) {
        Map<String, Object> resMap = new HashMap<>();
        double totalAreaCout = 0;//总计
        double totalInTime = 0;//就诊及时数
        //初始化 及时率预警信息
        DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
        double totalInTime = 0;//总计就诊及时数
        long starttime = System.currentTimeMillis();
        //获取及时数组
        Map<String, Object> outPatientInTimeMap = getInTimeMap(dataLevel,0, dateField, start, end, orgArea); //门诊及时数
        Map<String, Object> inPatientInTimeMap = getInTimeMap(dataLevel,1, dateField, start, end, orgArea); //住院及时数
        Map<String, Object> examInTimeMap = getInTimeMap(dataLevel,2, dateField, start, end, orgArea); //体检及时数
        for (String key : outPatientInTimeMap.keySet()) {
            double outpatientInTime = getDoubleValue(outPatientInTimeMap.get(key));
            double inpatientInTime = getDoubleValue(inPatientInTimeMap.get(key));
            double examInTime = getDoubleValue(examInTimeMap.get(key));
            totalInTime = outpatientInTime + inpatientInTime + examInTime; // //就诊及时性
            resMap.put(key, totalInTime);
            totalAreaCout += totalInTime;
        resMap = getInTimeMap(dataLevel, dateField, start, end, orgArea); //就诊及时数
        for (String key : resMap.keySet()) {
            double outpatientInTime = getDoubleValue(resMap.get(key));
            totalInTime += outpatientInTime; // //就诊及时性
        }
        //指定数据类型
        if (dataLevel ==0) {
        if (dataLevel == 0) {
            resMap.put("type", "org_area");
        } else {
            resMap.put("type", "org_code");
@ -133,7 +129,7 @@ public class DataInTimeService extends DataQualityBaseService {
        //总计
        if (!resMap.isEmpty()) {
            resMap.put("", totalAreaCout);
            resMap.put("", totalInTime);
        }
        logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
@ -144,16 +140,16 @@ public class DataInTimeService extends DataQualityBaseService {
    /* ******************************** 区域层级模块相关 ***********************************/
    @Override
    public List<Map<String, Object>> getAreaDataQuality(Integer dataLevel,String startDate, String endDate) throws Exception {
    public List<Map<String, Object>> getAreaDataQuality(Integer dataLevel, String startDate, String endDate) throws Exception {
        String end = DateUtil.addDate(1, endDate, DateUtil.DEFAULT_DATE_YMD_FORMAT);
        Map<String, Object> resMap = null;
        List<Map<String, Object>> list = new ArrayList<>();
        double totalNum = 0;//平台总数
        double totalHospitalNum = 0;//医院总数
        //机构数据
        List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel,"create_date", startDate, end, null);
        List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel, "create_date", startDate, end, null);
        //平台接收数据量
        Map<String, Object> platformDataGroup = getInTimeMap(dataLevel,"receive_date", startDate, endDate, null);
        Map<String, Object> platformDataGroup = getInTimeDataMap(dataLevel, "receive_date", startDate, endDate, null);
        // 计算
        for (Map<String, Object> map : groupList) {
            resMap = new HashMap<String, Object>();
@ -182,9 +178,9 @@ public class DataInTimeService extends DataQualityBaseService {
            }
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
        if (totalHospitalNum != 0) {
            Map<String, Object> totalMap = genTotalData("上饶市", totalNum, totalHospitalNum);
            list.add(0, totalMap);
        }
@ -192,16 +188,16 @@ public class DataInTimeService extends DataQualityBaseService {
    }
    @Override
    public List<Map<String, Object>> getOrgDataQuality(Integer dataLevel,String areaCode, String startDate, String endDate) throws Exception {
    public List<Map<String, Object>> getOrgDataQuality(Integer dataLevel, String areaCode, String startDate, String endDate) throws Exception {
        String end = DateUtil.addDate(1, endDate, DateUtil.DEFAULT_DATE_YMD_FORMAT);
        Map<String, Object> resMap = null;
        List<Map<String, Object>> list = new ArrayList<>();
        double totalNum = 0;//平台总数
        double totalHospitalNum = 0;//医院总数
        //机构数据
        List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel,"create_date", startDate, end, areaCode);
        List<Map<String, Object>> groupList = dataCorrectService.getOrgDataMap(dataLevel, "create_date", startDate, end, areaCode);
        //平台接收数据量
        Map<String, Object> platformDataGroup = getInTimeMap(dataLevel,"receive_date", startDate, endDate, areaCode);
        Map<String, Object> platformDataGroup = getInTimeDataMap(dataLevel, "receive_date", startDate, endDate, areaCode);
        // 计算
        for (Map<String, Object> map : groupList) {
            resMap = new HashMap<String, Object>();
@ -230,9 +226,9 @@ public class DataInTimeService extends DataQualityBaseService {
            }
        }
        //排序
        comparator(list);
        rateComparator(list);
        //添加总计
        if (totalHospitalNum !=0) {
        if (totalHospitalNum != 0) {
            Map<String, Object> totalMap = genTotalData("全部机构", totalNum, totalHospitalNum);
            list.add(0, totalMap);
        }

+ 92 - 9
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataQualityBaseService.java

@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.util.*;
/**
@ -64,26 +65,52 @@ public abstract class DataQualityBaseService extends BaseJpaService {
        totalMap.put("name", name);
        totalMap.put("count", platformNum);
        totalMap.put("total", orgNum);
        double rate = calDoubleRate(platformNum, orgNum);
        totalMap.put("rate", rate + "%");
        if (orgNum == 0 ){
            totalMap.put("rate", "--");
        }else {
            double rate = calDoubleRate(platformNum, orgNum);
            totalMap.put("rate", rate + "%");
        }
        return totalMap;
    }
    /**
     * 通过map中的rate字段降序排列
     * 通过map中的rate字段降序排列,并添加% 号
     * @param list
     */
    public void comparator(List<Map<String, Object>> list ){
    public void rateComparator(List<Map<String, Object>> list ){
        comparator(list,"rate",1);
        list.forEach(map->{
            if (map.get("total") == null || (double) map.get("total") == 0) {
                map.put("rate","--");
            }else {
                map.put("rate",map.get("rate") + "%");
            }
        });
    }
    /**
     * 根据map中的字段排序
     * @param list           map集合
     * @param orderField    排序字段
     * @param order          排序顺序  0:正序,1:降序
     */
    public void comparator(List<Map<String, Object>> list ,String orderField,int order){
        Collections.sort(list, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                return getDoubleValue(o2.get("rate")).compareTo(getDoubleValue(o1.get("rate")));
                if (order==0) {
                    return getDoubleValue(o1.get(orderField)).compareTo(getDoubleValue(o2.get(orderField)));
                }else if (order==1) {
                    return getDoubleValue(o2.get(orderField)).compareTo(getDoubleValue(o1.get(orderField)));
                }else {
                    return 0;
                }
            }
        });
        list.forEach(map->{
            map.put("rate",map.get("rate") + "%");
        });
    }
    }
    /**
     * 百分比计算(不带单位)
@ -173,4 +200,60 @@ public abstract class DataQualityBaseService extends BaseJpaService {
        }
    }
    /**
     * 获取有数据的医院
     * @param dateField  过滤时间字段
     * @param start       起始时间
     * @param end          截止时间
     * @return
     */
    public List<String> hasDataHospital(String dateField,String start,String end){
        //统计有数据的医院code
        String sqlOrg = "";
        List<String> list = new ArrayList<>();
         sqlOrg = "SELECT org_code FROM json_archives/info where "+ dateField +">= '" + start + " 00:00:00' AND "+dateField+"<='" + end + " 23:59:59' group by org_code ";
        try {
            ResultSet resultSetOrg = elasticSearchUtil.findBySql(sqlOrg);
            while (resultSetOrg.next()) {
                String orgCode = resultSetOrg.getString("org_code");
                if (StringUtils.isNotEmpty(orgCode)) {
                    list.add(orgCode);
                }
            }
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
            }
        }
        return list;
    }
    /**
     * 获取有数据的区县
     * @param dateField
     * @param start
     * @param end
     * @return
     */
    public List<String> hasDataArea(String dateField,String start,String end){
        //统计有数据的区域code
        String sqlOrg = "";
        List<String> list = new ArrayList<>();
        sqlOrg = "SELECT org_area FROM json_archives/info where "+ dateField +">= '" + start + " 00:00:00' AND "+dateField+"<='" + end + " 23:59:59' group by org_area ";
        try {
            ResultSet resultSetOrg = elasticSearchUtil.findBySql(sqlOrg);
            while (resultSetOrg.next()) {
                String orgCode = resultSetOrg.getString("org_code");
                if (StringUtils.isNotEmpty(orgCode)) {
                    list.add(orgCode);
                }
            }
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
            }
        }
        return list;
    }
}

+ 341 - 46
src/main/java/com/yihu/ehr/analyze/service/dataQuality/DataQualityHomeService.java

@ -3,6 +3,7 @@ package com.yihu.ehr.analyze.service.dataQuality;
import com.yihu.ehr.analyze.dao.DqPaltformReceiveWarningDao;
import com.yihu.ehr.analyze.service.pack.PackQcReportService;
import com.yihu.ehr.elasticsearch.ElasticSearchPool;
import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import com.yihu.ehr.entity.quality.DqPaltformReceiveWarning;
import com.yihu.ehr.profile.qualilty.DqDataType;
@ -11,6 +12,17 @@ import com.yihu.ehr.redis.client.RedisClient;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.ehr.util.rest.Envelop;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -49,12 +61,11 @@ public class DataQualityHomeService extends BaseJpaService {
    @Autowired
    private RedisClient redisClient;
    @Autowired
    private DataCompleteService dataCompleteService;
    @Autowired
    private ApplicationContext context;
    @Autowired
    private ElasticSearchPool elasticSearchPool;
    private Map<DqDataType, DataQualityBaseService> dqBaseServiceMap;
    @PostConstruct
    private void init() {
        dqBaseServiceMap = new HashMap<>();
@ -152,7 +163,7 @@ public class DataQualityHomeService extends BaseJpaService {
        if (molecular == 0) {
            return "0.00%";
        } else if (denominator == 0) {
            return "100.00%";
            return "--";
        }
        DecimalFormat decimalFormat = new DecimalFormat("0.00%");
        return decimalFormat.format(molecular / denominator);
@ -177,17 +188,10 @@ public class DataQualityHomeService extends BaseJpaService {
            end = dateStr;
        }
        //初始化 及时率预警信息
        DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
        int totalHospitalNum = 0;//医院总就诊数
        double hospitalOutpatientNum = 0;//总门诊数
        double hospitalExamNum = 0;//总体检数
        double hospitalInpatientNum = 0;//总住院数
        double totalOutpatientNum = 0;//总门诊数
        double totalExamNum = 0;//总体检数
        double totalInpatientNum = 0;//总住院数
        double totalInTime = 0;//总及时数
        double totalVisitNum = 0;//总完整数(平台总就诊数)
        double totalCorrect = 0;//总准确数
@ -203,15 +207,12 @@ public class DataQualityHomeService extends BaseJpaService {
        Map<String, Object> dataMap = new HashMap<>();
        //2. 平台就诊完整数
        getPatientCount("receive_date",start, end, null, dataMap);
        totalOutpatientNum = Double.valueOf(dataMap.get("outpatientIntegrity").toString());//门诊完整数
        totalInpatientNum = Double.valueOf(dataMap.get("hospitalIntegrity").toString());//住院完整数
        totalExamNum = Double.valueOf(dataMap.get("peIntegrity").toString());//体检完整数
        totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());//就诊完整数
        //3. 及时数
        totalInTime = getInTimeNum("receive_date" ,start, end, warning);
        // 3. 准确数
        totalInTime = getInTimeNum("receive_date" ,start, end);
        // 3. 去重准确数【】
        totalCorrect = getErrorDataSetData("receive_date",start, end, null);
        //4. 数据集总条数
        //4. 数据集总量
        int dataSetsMun = getDataSetsMap(start, end, null);
        totalMap.put("orgCode", cloud);//机构code
@ -238,6 +239,108 @@ public class DataQualityHomeService extends BaseJpaService {
    }
    /**
     * 质控分析 -  完整性统计
     *
     * @param start 就诊时间- 起始
     * @param end   就诊时间- 截止
     *              【目前取的是平台全部机构,若做多区域平台的话,需要添加区域参数】
     */
    public Map<String, Object> getCompleteStatistics(String start, String end) throws Exception {
        Map<String, Object> totalMap = new HashMap<>();
        String dateStr = DateUtil.toString(new Date());
        if (StringUtils.isBlank(start)) {
            start = dateStr;
        }
        if (StringUtils.isBlank(end)) {
            end = dateStr;
        }
        int totalHospitalNum = 0;//医院总就诊数
        double totalVisitNum = 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");
        Map<String, Object> dataMap = new HashMap<>();
        //2. 平台就诊完整数
        getPatientCount("receive_date",start, end, null, dataMap);
        totalVisitNum = Double.valueOf(dataMap.get("visitIntegrity").toString());
        totalMap.put("totalComplete", totalVisitNum);//总就诊完整数
        totalMap.put("totalHospital", totalHospitalNum);//医院总就诊数
        //计算完整率,
        totalMap.put("completeRate", calRate(totalVisitNum, totalHospitalNum));//完整率
        return totalMap;
    }
    /**
     * 质控分析 -  准确率统计
     *
     * @param start 就诊时间- 起始
     * @param end   就诊时间- 截止
     */
    public Map<String, Object> getCorrectStatistics(String start, String end) throws Exception {
        Map<String, Object> totalMap = new HashMap<>();
        String dateStr = DateUtil.toString(new Date());
        if (StringUtils.isBlank(start)) {
            start = dateStr;
        }
        if (StringUtils.isBlank(end)) {
            end = dateStr;
        }
        double totalCorrect = 0;//总准确数
        Map<String, Object> dataMap = new HashMap<>();
        //1. 去重准确数
        totalCorrect = getErrorDataSetData("receive_date",start, end, null);
        //2. 数据集总量
        int dataSetsMun = getDataSetsMap(start, end, null);
        totalMap.put("totalCorrect", totalCorrect);//准确数
        totalMap.put("totalDataSet", dataSetsMun);//数据集总行数
        //3  计算准确性
        totalMap.put("correctRate", calRate(totalCorrect, dataSetsMun));//数据集准确率
        return totalMap;
    }
    /**
     * 质控分析 -  及时率统计
     *
     * @param start 就诊时间- 起始
     * @param end   就诊时间- 截止
     */
    public Map<String, Object> getInTimeStatistics(String start, String end) throws Exception {
        Map<String, Object> totalMap = new HashMap<>();
        String dateStr = DateUtil.toString(new Date());
        if (StringUtils.isBlank(start)) {
            start = dateStr;
        }
        if (StringUtils.isBlank(end)) {
            end = dateStr;
        }
        int totalHospitalNum = 0;//医院总就诊数
        double totalInTime = 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");
        Map<String, Object> dataMap = new HashMap<>();
        //2. 及时数
        totalInTime = getInTimeNum("receive_date" ,start, end);
        totalMap.put("totalInTime", totalInTime);//及时数
        totalMap.put("totalHospital", totalHospitalNum);//医院总就诊数
        //3 计算及时率
        totalMap.put("inTimeRate", calRate(totalInTime, totalHospitalNum));//及时率
        return totalMap;
    }
    /**
     * 获取质控错误 - 数据集总条数
     * @param dateField  时间区间查询字段
@ -292,7 +395,7 @@ public class DataQualityHomeService extends BaseJpaService {
     * @return
     */
    public int getDataSetsMap(String start, String end, String orgCode) throws IOException {
        // TODO 数据集总量
        //  数据集总量
        int totalNum = 0;
        String dateStr = DateUtil.toString(new Date());
        if (StringUtils.isBlank(start)) {
@ -310,48 +413,50 @@ public class DataQualityHomeService extends BaseJpaService {
        List<Map<String, Object>> dataSets = elasticSearchUtil.list("json_archives_qc", "qc_dataset_detail", stringBuilder1.toString());
        for (Map<String, Object> dataSet : dataSets) {
            for (Map.Entry<String, Object> entry : dataSet.entrySet()) {
                totalNum += (Integer) dataSet.get("row");
                totalNum += (Integer) dataSet.get("count");
            }
        }
        return totalNum;
    }
    /**
     *  获取及时上传数
     *  获取所有及时上传数
     * @param dateField  时间区间查询字段
     * @param start
     * @param end
     * @param warning  预警信息
     * @return
     */
    public double getInTimeNum(String dateField,String start, String end, DqPaltformReceiveWarning warning) {
    public double getInTimeNum(String dateField,String start, String end) {
        double totalInTime = 0;
        //及时率
        try {
        Map<String, Object> resMap = new HashMap<>();
        DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
        //获取有数据的医院code列表
        List<String> orgList = dataQualityBaseService.hasDataHospital(dateField, start, end);
        for (String orgCode : orgList) {
            //初始化 及时率预警信息
            DqPaltformReceiveWarning warning = dqPaltformReceiveWarningDao.findByOrgCode(orgCode);
            if (warning == null) {
                warning = dqPaltformReceiveWarningDao.findByOrgCode(defaultOrgCode);
            }
            long starttime = System.currentTimeMillis();
            String sql0 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=2 AND pack_type=1 AND " + dateField +
                    " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime();
            String sql1 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=1 AND pack_type=1 AND " + dateField +
                    " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getHospitalInTime();
            String sql2 = "SELECT COUNT(DISTINCT event_no) FROM json_archives WHERE event_type=0 AND pack_type=1 AND " + dateField +
                    " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getOutpatientInTime();
            String sql0 = "";
            List<String> fields = new ArrayList<String>();
            fields.add("count");
            try {
                sql0 = "SELECT  COUNT(DISTINCT event_no) as count FROM json_archives WHERE  pack_type=1 AND org_code='" + orgCode + "' AND " + dateField +
                        " BETWEEN '" + start + " 00:00:00' AND '" + end + " 23:59:59' and delay <=" + warning.getPeInTime() ;
                List<Map<String, Object>> resultSet0 = elasticSearchUtil.findBySql(fields, sql0);
                for (Map<String, Object> orgData : resultSet0) {
                    double newValue = (double) orgData.get("count");
                    totalInTime +=newValue;
                }
            ResultSet resultSet0 = elasticSearchUtil.findBySql(sql0);
            ResultSet resultSet1 = elasticSearchUtil.findBySql(sql1);
            ResultSet resultSet2 = elasticSearchUtil.findBySql(sql2);
            resultSet0.next();
            resultSet1.next();
            resultSet2.next();
            double outpatientInTime = new Double(resultSet2.getObject("COUNT(DISTINCT event_no)").toString());//门诊及时数
            double inpatientInTime = new Double(resultSet1.getObject("COUNT(DISTINCT event_no)").toString());//住院及时数
            double examInTime = new Double(resultSet0.getObject("COUNT(DISTINCT event_no)").toString());//体检及时数
            totalInTime = outpatientInTime + inpatientInTime + examInTime; // //就诊及时性
            logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
        } catch (Exception e) {
            if (!"Error".equals(e.getMessage())) {
                e.printStackTrace();
                logger.info("平台就诊及时人数 去重复:" + (System.currentTimeMillis() - starttime) + "ms");
            } catch (Exception e) {
                if (!"Error".equals(e.getMessage())) {
                    e.printStackTrace();
                }
            }
        }
        return totalInTime;
@ -481,6 +586,8 @@ public class DataQualityHomeService extends BaseJpaService {
        for(Map<String,Object> map:list){
            map.put("dataset_name", redisClient.get("std_data_set_" + map.get("version") + ":" + map.get("dataset") + ":name"));
        }
        DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
        dataQualityBaseService.comparator(list,"count",1);//降序排序
        return list;
    }
@ -523,6 +630,194 @@ public class DataQualityHomeService extends BaseJpaService {
        for(Map<String,Object> map:list){
            map.put("metadata_name", redisClient.get("std_meta_data_" + map.get("version") + ":" + map.get("dataset")+"."+ map.get("metadata")+ ":name"));
        }
        DataQualityBaseService dataQualityBaseService = getInstance(DqDataType.create(1));
        dataQualityBaseService.comparator(list,"count",1);//降序排序
        return list;
    }
    /**
     * 完整率、准确率、及时率趋势
     * @param flag 10按月 20按日
     * @param dataType 0: 完整性,1:及时性,2:准确性
     * @param month
     * @return
     * @throws Exception
     */
    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 = new ArrayList<>();
        if("10".equals(flag)){//按月
            for(int i=0;i<6;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{//按日
            //当前月份显示最近30天,否则显示当月的数据
            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;
                    }
                }
            }
        }
        map.put("data", data);
        map.put("name", name);
        return map;
    }
    /**
     * 获取比例
     * @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. 数据集总量
            int 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<>();
        List<Long> receiveCount = new ArrayList<>();
        List<Long> storageCount = new ArrayList<>();
       //采集量统计
        Map<String, Object> receive = getHealthyTrend(flag, "receive_date", month);
        //入库量统计
        Map<String, Object> storage  = getHealthyTrend(flag, "finish_date", month);
        //前端趋势图 格式生成
        for (String key : receive.keySet()) {
            Long receiveValue = receive.get(key) == null ? 0 : (Long) receive.get(key);
            Long storageValue = storage.get(key) == null ? 0 : (Long) storage.get(key);
            receiveCount.add(receiveValue);
            storageCount.add(storageValue);
            date.add(key);
        }
        resMap.put("name",date);
        resMap.put("receiveData",receiveCount);
        resMap.put("storageData",storageCount);
        return resMap;
    }
    /**
     * 健康档案建档数
     * @param flag 10按月 20按日
     * @param dateField 分组时间字段  receive_date:采集维度,finish_date:入库维度
     * @param month
     * @return
     * @throws Exception
     */
    public Map<String, Object> getHealthyTrend(String flag, String dateField, 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(dateField)
                    .interval(DateHistogramInterval.DAY).format("yyyy-MM-dd");
        }
        // 声明where 条件
        BoolQueryBuilder qbs = QueryBuilders.boolQuery();
        RangeQueryBuilder startRange = QueryBuilders.rangeQuery(dateField);
        startRange.gte(start + " 00:00:00");
        qbs.must(startRange);
        RangeQueryBuilder endRange = QueryBuilders.rangeQuery(dateField);
        endRange.lt(end+" 23:59:59");
        qbs.must(endRange);
        SearchRequestBuilder requestBuilder = transportClient.prepareSearch("json_archives")
                .setTypes("info");
        requestBuilder.setQuery(qbs);
        requestBuilder.addAggregation(aggregation);
        requestBuilder.addSort(dateField, SortOrder.DESC);
        SearchResponse response = requestBuilder.execute().actionGet();
        Histogram agg = response.getAggregations().get("agg");
// For each entry
        for (Histogram.Bucket entry : agg.getBuckets()) {
            String key = entry.getKey().toString();
            String keyAsString = entry.getKeyAsString();
            long docCount = entry.getDocCount();
            map.put(keyAsString,docCount);
            System.out.println("key [{" + keyAsString + "}]");
            System.out.println("date [{" + key + "}]");
            System.out.println("doc_count [{" + docCount + "}]");
        }
        return map;
    }
}

+ 1 - 1
src/main/java/com/yihu/ehr/analyze/service/dataQuality/WarningQuestionService.java

@ -73,7 +73,7 @@ public class WarningQuestionService extends BaseJpaService {
    public void receive(String dateStr){
        Session session = currentSession();
        //0.获取医院数据
        Query query1 = session.createSQLQuery("SELECT org_code,full_name from organizations where org_type = 'Hospital'");
        Query query1 = session.createSQLQuery("SELECT org_code,full_name from organizations");
        List<Object[]> orgList = query1.list();
        Map<String, String> orgMap = new HashedMap(orgList.size());
        orgList.forEach(one->{

+ 111 - 0
src/main/java/com/yihu/ehr/analyze/service/pack/PackQcReportService.java

@ -8,6 +8,7 @@ import com.yihu.ehr.redis.client.RedisClient;
import com.yihu.ehr.redis.schema.OrgKeySchema;
import com.yihu.ehr.redis.schema.RsAdapterMetaKeySchema;
import com.yihu.ehr.solr.SolrUtil;
import com.yihu.ehr.util.datetime.DateTimeUtil;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.ehr.util.rest.Envelop;
import org.apache.commons.lang.ObjectUtils;
@ -37,6 +38,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.sql.ResultSet;
import java.util.*;
/**
@ -860,4 +862,113 @@ public class PackQcReportService extends BaseJpaService {
        list.add(0,profileInfo);
        return list;
    }
    public List<String> getOrgCodes(String orgArea,String orgCode){
        StringBuffer sql = new StringBuffer("select org_code from organizations where 1=1");
        if(StringUtils.isNotBlank(orgArea)){
            sql.append(" and administrative_division= '"+orgArea+"'");
        }
        if(StringUtils.isNotBlank(orgCode)){
            sql.append(" and org_code='"+ orgCode+"'");
        }
        List<String> list = jdbcTemplate.queryForList(sql.toString(),String.class);
        return list;
    }
    /**
     *  统计某段接收时间,影像采集情况,入库情况
     * @param orgArea
     * @param orgCode
     * @param startDate
     * @param endDate  为空,默认获取到当天数据
     * @return
     */
    public List<Map<String, Object>> getImageInfo(String orgArea, String orgCode, String startDate, String endDate) throws Exception {
        List<Map<String,Object>> res = new ArrayList<>();
        List<String> fields = new ArrayList<>();
        StringBuffer sqlSb = new StringBuffer();
        if(StringUtils.isBlank(orgArea) && StringUtils.isBlank(orgCode)){
            sqlSb = new StringBuffer("select org_area,count(*) as count from json_archives where pack_type=3");
        }else{
            sqlSb = new StringBuffer("select org_code,count(*) as count from json_archives where pack_type=3");
        }
        if(StringUtils.isBlank(endDate)){
            endDate = DateTimeUtil.simpleDateFormat(new Date());
        }
        sqlSb.append(" and receive_date<='"+endDate+" 23:59:59'");
        if(!StringUtils.isBlank(startDate)){
            sqlSb.append(" and receive_date>='"+startDate+" 00:00:00'");
        }
        if(!StringUtils.isBlank(orgCode)){
            sqlSb.append(" and org_code='"+orgCode+"'");
        }
        if(!StringUtils.isBlank(orgArea)){
            sqlSb.append(" and org_area='"+orgArea+"'");
        }
        if(StringUtils.isBlank(orgArea) && StringUtils.isBlank(orgCode)){
            sqlSb.append(" group by org_area");
            fields.add("org_area");
        }else{
            sqlSb.append(" group by org_code");
            fields.add("org_code");
        }
        sqlSb.append(" order by count desc");
        fields.add("count");
        List<Map<String, Object>> resultList = elasticSearchUtil.findBySql(fields, sqlSb.toString());
        if (resultList != null && resultList.size() > 0) {
            for (Map<String,Object> map : resultList){
                Map info = new HashMap();
                if(StringUtils.isBlank(orgArea) && StringUtils.isBlank(orgCode)){
                    String org_area = map.get("org_area").toString();
                    String name = redisClient.get("area:" + org_area + ":name");
                    info.put("orgArea",org_area);
                    info.put("orgAreaName",name);
                    info.put("total",map.get("count"));
                    //查找该地区入库量
                    String sql = "";
                    if(StringUtils.isBlank(startDate)){
                        sql = "select count(*) from json_archives where org_area ='"+org_area+"' and archive_status=3 and pack_type=3 and receive_date<='"+endDate+" 23:59:59' group by profile_id";
                    }else{
                        sql = "select count(*) from json_archives where org_area ='"+org_area+"' and archive_status=3 and pack_type=3 and receive_date<='"+endDate+" 23:59:59' and receive_date>='"+startDate+" 00:00:00' group by profile_id";
                    }
                    ResultSet resultSet = elasticSearchUtil.findBySql(sql);
                    resultSet.next();
                    double resourceCount = 0;
                    try {
                        resourceCount = resultSet.getDouble("COUNT(*)");
                    }catch (Exception e){
                        resourceCount = 0;
                    }
                    info.put("resourceCount",resourceCount);
                }else {
                    String org_code = map.get("org_code").toString();
                    String name = redisClient.get("organizations:" + org_code + ":name");
                    info.put("orgCode",org_code);
                    info.put("orgCodeName",name);
                    info.put("total",map.get("count"));
                    //查找该机构入库量
                    String sql = "";
                    if(StringUtils.isBlank(startDate)){
                        sql = "select count(*) from json_archives where org_code ='"+org_code+"' and archive_status=3 and pack_type=3 and receive_date<='"+endDate+" 23:59:59' group by profile_id";
                    }else{
                        sql = "select count(*) from json_archives where org_code ='"+org_code+"' and archive_status=3 and pack_type=3 and receive_date<='"+endDate+" 23:59:59' and receive_date>='"+startDate+" 00:00:00' group by profile_id";
                    }
                    ResultSet resultSet = elasticSearchUtil.findBySql(sql);
                    resultSet.next();
                    double resourceCount = 0;
                    try {
                        resourceCount = resultSet.getDouble("COUNT(*)");
                    }catch (Exception e){
                        resourceCount = 0;
                    }
                    info.put("resourceCount",resourceCount);
                }
                res.add(info);
            }
        }
        return res;
    }
}

+ 64 - 26
src/main/java/com/yihu/ehr/analyze/service/pack/PackStatisticsService.java

@ -3,6 +3,7 @@ package com.yihu.ehr.analyze.service.pack;
import com.yihu.ehr.elasticsearch.ElasticSearchPool;
import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import com.yihu.ehr.query.BaseJpaService;
import com.yihu.ehr.redis.client.RedisClient;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.ehr.util.rest.Envelop;
import org.apache.commons.lang.ObjectUtils;
@ -11,15 +12,9 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramBuilder;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.bucket.terms.LongTerms;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.metrics.valuecount.InternalValueCount;
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCountBuilder;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
@ -43,6 +38,8 @@ public class PackStatisticsService extends BaseJpaService {
    private ElasticSearchPool elasticSearchPool;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private RedisClient redisClient;
    /**
     * getRecieveOrgCount 根据接收日期统计各个医院的数据解析情况
     *
@ -928,16 +925,26 @@ public class PackStatisticsService extends BaseJpaService {
     * @return
     * @throws Exception
     */
    public Envelop getReceiveNum(String startDate, String endDate) throws Exception {
    public Envelop getReceiveNum(String startDate, String endDate, String orgArea) throws Exception {
        Envelop envelop = new Envelop();
        List<Map<String, Object>> res = new ArrayList<>();
        String city = getCurrentCity();
        res = getAreaList(city);
        List<Map<String, Object>> res  = getReceive(startDate, endDate ,orgArea);
        for(Map<String, Object> map : res){
            map.put("receiveNum",getReceive(startDate, endDate, map.get("ID")+""));
            map.put("analyzeNum",getAnalyzer(startDate, endDate, map.get("ID")+""));
            map.put("uploadNum",getUpload(startDate, endDate, map.get("ID")+""));
            if(StringUtils.isNotEmpty(orgArea)){
                map.put("analyzeNum",getAnalyzer(startDate, endDate,"", map.get("org_code")+""));
                map.put("uploadNum",getUpload(startDate, endDate, "", map.get("org_code")+""));
            }else{
                map.put("analyzeNum",getAnalyzer(startDate, endDate, map.get("org_area")+"",""));
                map.put("uploadNum",getUpload(startDate, endDate, map.get("org_area")+"",""));
            }
        }
        Collections.sort(res, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                Integer num1 = Double.valueOf(o1.get("receiveNum")+"").intValue();
                Integer num2 = Double.valueOf(o2.get("receiveNum")+"").intValue();
                return num2.compareTo(num1);
            }
        });
        envelop.setObj(res);
        envelop.setSuccessFlg(true);
        return envelop;
@ -959,30 +966,61 @@ public class PackStatisticsService extends BaseJpaService {
        return jdbcTemplate.queryForList("select id,name from address_dict where pid = "+city);
    }
    private long getReceive(String startDate, String endDate ,String area){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("pack_type=1;");
        stringBuilder.append("receive_date>=" + startDate + " 00:00:00;");
        stringBuilder.append("receive_date<" + endDate + " 23:59:59;");
        stringBuilder.append("org_area="+area+";");
        return elasticSearchUtil.count("json_archives","info",stringBuilder.toString());
    private List<Map<String,Object>> getReceive(String startDate, String endDate ,String area) throws Exception{
        List<String> fields = new ArrayList<>();
        fields.add("receiveNum");
        String sql = "";
        if(StringUtils.isNotEmpty(area)){
            fields.add("org_code");
            sql = "SELECT org_code ,COUNT(org_code) as receiveNum from json_archives/info where pack_type=1 and org_area='" + area + "' and " +
                    "receive_date >='" + startDate + " 00:00:00' and receive_date <='" + endDate + " 23:59:59' group by org_code";
        }else{
            fields.add("org_area");
            sql = "SELECT org_area ,COUNT(org_area) as receiveNum from json_archives/info where pack_type=1  and " +
                    "receive_date >='" + startDate + " 00:00:00' and receive_date <='" + endDate + " 23:59:59' group by org_area";
        }
        List<Map<String, Object>>  resultList = elasticSearchUtil.findBySql(fields, sql);
        //设置机构,区域名称
        if (resultList != null && resultList.size() > 0) {
            for (Map<String, Object> map : resultList) {
                String name = "";
                if (StringUtils.isNotEmpty(area)) {
                    String code = (String) map.get("org_code");
                    name = redisClient.get("organizations:" + code + ":name");
                }else {
                    String code = (String) map.get("org_area");
                    name = redisClient.get("area:" + code + ":name");
                }
                map.put("name",name);
            }
        }
        return resultList;
    }
    private long getAnalyzer(String startDate, String endDate ,String area){
    private long getAnalyzer(String startDate, String endDate ,String area, String orgCode){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("archive_status=3;pack_type=1;");
        stringBuilder.append("parse_date>=" + startDate + " 00:00:00;");
        stringBuilder.append("parse_date<" + endDate + " 23:59:59;");
        stringBuilder.append("org_area="+area+";");
        if(StringUtils.isNotEmpty(area)){
            stringBuilder.append("org_area="+area+";");
        }
        if(StringUtils.isNotEmpty(orgCode)){
            stringBuilder.append("org_code="+orgCode+";");
        }
        return elasticSearchUtil.count("json_archives","info",stringBuilder.toString());
    }
    private long getUpload(String startDate, String endDate ,String area){
    private long getUpload(String startDate, String endDate ,String area, String orgCode){
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("archive_status=3;pack_type=1;");
        stringBuilder.append("create_date>=" + startDate + " 00:00:00;");
        stringBuilder.append("create_date<" + endDate + " 23:59:59;");
        stringBuilder.append("org_area="+area+";");
        return elasticSearchUtil.count("upload","info",stringBuilder.toString());
        if(StringUtils.isNotEmpty(area)){
            stringBuilder.append("org_area="+area+";");
        }
        if(StringUtils.isNotEmpty(orgCode)){
            stringBuilder.append("org_code="+orgCode+";");
        }
        return elasticSearchUtil.count("upload","record",stringBuilder.toString());
    }
}

+ 1 - 1
src/main/resources/application.yml

@ -51,7 +51,7 @@ analyze:
    cronExp: 0/1 * * * * ? #质控任务触发间隔表达式
quality:
  orgCode : 1 #默认机构
  orgCode : jkzl #默认机构
  version: 59083976eebd #默认版本号
  cloud: medicalCloud #默认云平台code
  cloudName: 上饶医疗云 #默认云平台name