Browse Source

Merge branch 'master' into 122run

gaodm 5 years ago
parent
commit
297865b6fd
59 changed files with 2549 additions and 337 deletions
  1. 930 0
      doc/001.20200417第一版本/qc_init.sql
  2. 6 0
      pom.xml
  3. 87 0
      src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java
  4. 124 0
      src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java
  5. 7 0
      src/main/java/com/diagbot/client/AuthServiceClient.java
  6. 9 0
      src/main/java/com/diagbot/client/hystrix/AuthServiceHystrix.java
  7. 4 4
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  8. 4 2
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  9. 1 1
      src/main/java/com/diagbot/dto/AnalyzeDTO.java
  10. 4 2
      src/main/java/com/diagbot/dto/AverageStatisticsDTO.java
  11. 24 0
      src/main/java/com/diagbot/dto/MsgApiDTO.java
  12. 12 0
      src/main/java/com/diagbot/dto/MsgDTO.java
  13. 9 6
      src/main/java/com/diagbot/dto/QcCasesEntryFindDTO.java
  14. 30 0
      src/main/java/com/diagbot/dto/QcCasesEntryPagedataDTO.java
  15. 31 0
      src/main/java/com/diagbot/dto/QcResultApiDTO.java
  16. 9 0
      src/main/java/com/diagbot/dto/RecordContentDTO.java
  17. 1 1
      src/main/java/com/diagbot/entity/BehospitalInfo.java
  18. 10 0
      src/main/java/com/diagbot/entity/MedicalRecordContent.java
  19. 73 0
      src/main/java/com/diagbot/entity/QcCasesEntryPagedata.java
  20. 41 14
      src/main/java/com/diagbot/facade/AlgorithmFacade.java
  21. 209 43
      src/main/java/com/diagbot/facade/BehospitalInfoFacade.java
  22. 174 129
      src/main/java/com/diagbot/facade/ConsoleFacade.java
  23. 2 7
      src/main/java/com/diagbot/facade/QcCasesEntryHospitalFacade.java
  24. 13 0
      src/main/java/com/diagbot/facade/QcCasesEntryPagedataFacade.java
  25. 16 0
      src/main/java/com/diagbot/facade/QcCasesFacade.java
  26. 12 8
      src/main/java/com/diagbot/facade/QcModeFacade.java
  27. 29 9
      src/main/java/com/diagbot/facade/QcresultInfoFacade.java
  28. 28 1
      src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java
  29. 16 0
      src/main/java/com/diagbot/mapper/QcCasesEntryPagedataMapper.java
  30. 4 6
      src/main/java/com/diagbot/mapper/QcresultInfoMapper.java
  31. 27 0
      src/main/java/com/diagbot/service/BehospitalInfoService.java
  32. 16 0
      src/main/java/com/diagbot/service/QcCasesEntryPagedataService.java
  33. 4 6
      src/main/java/com/diagbot/service/QcresultInfoService.java
  34. 38 0
      src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java
  35. 20 0
      src/main/java/com/diagbot/service/impl/QcCasesEntryPagedataServiceImpl.java
  36. 4 6
      src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java
  37. 10 5
      src/main/java/com/diagbot/task/BehospitalInfoAnalyzeTask.java
  38. 71 12
      src/main/java/com/diagbot/util/BigDecimalUtil.java
  39. 73 0
      src/main/java/com/diagbot/util/EncrypDES.java
  40. 18 0
      src/main/java/com/diagbot/vo/AnalyzeApiVO.java
  41. 2 0
      src/main/java/com/diagbot/vo/AnalyzeVO.java
  42. 19 5
      src/main/java/com/diagbot/vo/BehospitalPageVO.java
  43. 23 0
      src/main/java/com/diagbot/vo/QcresultFilterVO.java
  44. 36 0
      src/main/java/com/diagbot/web/BehospitalInfoController.java
  45. 2 0
      src/main/java/com/diagbot/web/QcCasesController.java
  46. 2 0
      src/main/java/com/diagbot/web/QcCasesEntryHospitalController.java
  47. 1 0
      src/main/java/com/diagbot/web/QcModeController.java
  48. 8 0
      src/main/resources/application-dev.yml
  49. 8 0
      src/main/resources/application-local.yml
  50. 9 1
      src/main/resources/application-pre.yml
  51. 8 0
      src/main/resources/application-pro.yml
  52. 8 0
      src/main/resources/application-test.yml
  53. 145 23
      src/main/resources/mapper/BehospitalInfoMapper.xml
  54. 8 4
      src/main/resources/mapper/HomePageMapper.xml
  55. 11 8
      src/main/resources/mapper/MedicalRecordMapper.xml
  56. 16 10
      src/main/resources/mapper/QcCasesEntryHospitalMapper.xml
  57. 15 21
      src/main/resources/mapper/QcCasesEntryMapper.xml
  58. 19 0
      src/main/resources/mapper/QcCasesEntryPagedataMapper.xml
  59. 9 3
      src/main/resources/mapper/QcresultInfoMapper.xml

+ 930 - 0
doc/001.20200417第一版本/qc_init.sql

@@ -0,0 +1,930 @@
+CREATE DATABASE  `qc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+use `qc`;
+
+/*
+Navicat MySQL Data Transfer
+
+Source Server         : 朗通mysql 236联调服务器
+Source Server Version : 50725
+Source Host           : 192.168.2.236:3306
+Source Database       : qc
+
+Target Server Type    : MYSQL
+Target Server Version : 50725
+File Encoding         : 65001
+
+Date: 2020-04-17 13:49:32
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+
+-- ----------------------------
+-- Table structure for bas_dept_info
+-- ----------------------------
+DROP TABLE IF EXISTS `bas_dept_info`;
+CREATE TABLE `bas_dept_info` (
+  `dept_id` varchar(20) NOT NULL COMMENT '科室编码(HIS导入)',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `dept_name` varchar(100) NOT NULL COMMENT '科室名称',
+  `dept_type` varchar(20) DEFAULT NULL COMMENT '科室类别',
+  `spell` varchar(10) DEFAULT NULL COMMENT '首字母拼音',
+  `station` varchar(64) DEFAULT NULL COMMENT '区域类别(门诊、工作站、住院等)',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`dept_id`,`hospital_id`),
+  UNIQUE KEY `hospital_dept_unique` (`dept_id`,`hospital_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='医院科室信息';
+
+-- ----------------------------
+-- Table structure for bas_doctor_info
+-- ----------------------------
+DROP TABLE IF EXISTS `bas_doctor_info`;
+CREATE TABLE `bas_doctor_info` (
+  `doctor_id` varchar(16) NOT NULL COMMENT 'HIS导入的医生ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `dept_id` varchar(16) NOT NULL COMMENT '医院导入科室ID',
+  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
+  `professor` varchar(32) DEFAULT NULL COMMENT '职称',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`doctor_id`,`hospital_id`),
+  UNIQUE KEY `bas_hospital_dept_unique` (`hospital_id`,`dept_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for bas_hospital_info
+-- ----------------------------
+DROP TABLE IF EXISTS `bas_hospital_info`;
+CREATE TABLE `bas_hospital_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(32) NOT NULL COMMENT '医院名称',
+  `code` varchar(16) NOT NULL COMMENT '组织机构代码',
+  `spell` varchar(32) DEFAULT NULL COMMENT '医院名称拼音',
+  `address` varchar(128) DEFAULT NULL COMMENT '医院地址',
+  `status` int(1) NOT NULL DEFAULT '1' COMMENT '状态:0.禁用1.启用',
+  `order_no` int(5) DEFAULT NULL COMMENT '排序号',
+  `connect` int(1) DEFAULT '0' COMMENT '是否对接(0-不对接,1-对接)',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(128) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='医院信息表';
+
+-- ----------------------------
+-- Table structure for hz_column
+-- ----------------------------
+DROP TABLE IF EXISTS `hz_column`;
+CREATE TABLE `hz_column` (
+  `hz_mc` varchar(128) DEFAULT NULL,
+  `hz_zj` varchar(128) DEFAULT NULL,
+  `hz_type` int(11) DEFAULT '0' COMMENT '1-病案首页',
+  UNIQUE KEY `HZ_MC_ZJ_INDEX` (`hz_mc`,`hz_zj`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for kl_clinic
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_clinic`;
+CREATE TABLE `kl_clinic` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL COMMENT '术语概念id',
+  `has_bodypart` bigint(20) DEFAULT NULL COMMENT '科室概念id',
+  `has_label` varchar(2) DEFAULT NULL,
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=38446 DEFAULT CHARSET=utf8 COMMENT='疾病表';
+
+-- ----------------------------
+-- Table structure for kl_disease
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_disease`;
+CREATE TABLE `kl_disease` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL COMMENT '术语概念id',
+  `icd10` varchar(255) DEFAULT NULL,
+  `dept_id` bigint(20) DEFAULT NULL COMMENT '科室概念id',
+  `classify` varchar(8) DEFAULT NULL COMMENT '疾病的分类,现在分为I、II类',
+  `is_chronic` varchar(2) DEFAULT '0' COMMENT '慢病标识',
+  `is_infections` varchar(2) DEFAULT '0' COMMENT '传染病标识',
+  `has_label` varchar(2) DEFAULT NULL,
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=87719 DEFAULT CHARSET=utf8 COMMENT='疾病表';
+
+-- ----------------------------
+-- Table structure for kl_relevant_feature
+-- ----------------------------
+DROP TABLE IF EXISTS `kl_relevant_feature`;
+CREATE TABLE `kl_relevant_feature` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `diagnose` varchar(100) DEFAULT NULL,
+  `feature` varchar(100) DEFAULT NULL,
+  `feature_type` int(2) DEFAULT NULL COMMENT '1:直接相关特征 2.程度词等非直接相关词 3.部位',
+  `value_type` int(2) DEFAULT NULL COMMENT '1:字符类型(二值属性:阳性/阴性)\r\n2:数值类型',
+  `find_suspect_diagnose` int(2) DEFAULT NULL,
+  PRIMARY KEY (`id`),
+  KEY `doc_rec_diagnose` (`diagnose`)
+) ENGINE=InnoDB AUTO_INCREMENT=47161 DEFAULT CHARSET=utf8 COMMENT='此表保存每种诊断所需的特征字段,用于后续学习分析';
+
+-- ----------------------------
+-- Table structure for lt_column
+-- ----------------------------
+DROP TABLE IF EXISTS `lt_column`;
+CREATE TABLE `lt_column` (
+  `lt_mc` varchar(128) DEFAULT NULL,
+  `lt_zj` varchar(128) DEFAULT NULL,
+  `lt_type` int(11) DEFAULT '0' COMMENT '1-病案首页',
+  UNIQUE KEY `LT_MC_ZJ_INDEX` (`lt_mc`,`lt_zj`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for lt_hz_columnmap
+-- ----------------------------
+DROP TABLE IF EXISTS `lt_hz_columnmap`;
+CREATE TABLE `lt_hz_columnmap` (
+  `lt_mc` varchar(128) DEFAULT NULL,
+  `lt_zj` varchar(128) DEFAULT NULL,
+  `hz_mc` varchar(128) DEFAULT NULL,
+  `hz_zj` varchar(128) DEFAULT NULL,
+  `type` int(1) DEFAULT '0' COMMENT '1-病案首页',
+  UNIQUE KEY `LT_HZ_MC_ZJ_TYPE_INDEX` (`lt_mc`,`lt_zj`,`hz_mc`,`hz_zj`,`type`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_behospital_info
+-- ----------------------------
+DROP TABLE IF EXISTS `med_behospital_info`;
+CREATE TABLE `med_behospital_info` (
+  `behospital_code` varchar(16) NOT NULL COMMENT '病人住院ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `name` varchar(32) NOT NULL COMMENT '姓名',
+  `sex` varchar(2) DEFAULT NULL COMMENT '性别(男,女)',
+  `birthday` datetime DEFAULT NULL COMMENT '出生日期',
+  `file_code` varchar(16) DEFAULT NULL COMMENT '档案号',
+  `qc_type_id` bigint(20) DEFAULT '1' COMMENT '质控类型',
+  `ward_code` varchar(16) DEFAULT NULL COMMENT '病区编码',
+  `ward_name` varchar(32) DEFAULT NULL COMMENT '病区名称',
+  `beh_dept_id` varchar(16) NOT NULL COMMENT '住院科室ID',
+  `beh_dept_name` varchar(64) NOT NULL COMMENT '住院科室名称',
+  `bed_code` varchar(12) DEFAULT NULL COMMENT '床位号',
+  `bed_name` varchar(12) DEFAULT NULL COMMENT '床位名称',
+  `insurance_name` varchar(50) DEFAULT NULL COMMENT '医保类别',
+  `job_type` varchar(30) DEFAULT NULL COMMENT '职业',
+  `behospital_date` datetime DEFAULT NULL COMMENT '入院时间',
+  `leave_hospital_date` datetime DEFAULT NULL COMMENT '出院时间',
+  `diagnose_icd` varchar(50) DEFAULT NULL COMMENT '疾病ICD编码',
+  `diagnose` text COMMENT '疾病名称',
+  `doctor_id` varchar(6) DEFAULT NULL COMMENT '医生ID',
+  `doctor_name` varchar(50) DEFAULT NULL COMMENT '医生姓名',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`behospital_code`,`hospital_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='住院病历信息';
+
+-- ----------------------------
+-- Table structure for med_doctor_advice
+-- ----------------------------
+DROP TABLE IF EXISTS `med_doctor_advice`;
+CREATE TABLE `med_doctor_advice` (
+  `doctor_advice_id` varchar(20) NOT NULL COMMENT '病人医嘱ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院id',
+  `behospital_code` varchar(20) NOT NULL COMMENT '病人ID',
+  `order_doctor_name` varchar(20) DEFAULT NULL COMMENT '医生开单判别',
+  `frequency` varchar(20) DEFAULT NULL COMMENT '医嘱频率判别',
+  `parent_type_id` varchar(20) DEFAULT NULL COMMENT '父类医嘱ID',
+  `doctor_advice_type` varchar(20) DEFAULT NULL COMMENT '医嘱类型判别(嘱托长嘱、长期医嘱等)',
+  `usage_num` varchar(20) DEFAULT NULL COMMENT '一次使用数量',
+  `usage_unit` varchar(30) DEFAULT NULL COMMENT '一次用量单位',
+  `dose` varchar(20) DEFAULT NULL COMMENT '医嘱单次剂量',
+  `dose_unit` varchar(30) DEFAULT NULL COMMENT '单次剂量单位',
+  `med_mode_type` varchar(20) DEFAULT NULL COMMENT '给药方式',
+  `da_frequency` varchar(10) DEFAULT NULL COMMENT '医嘱频率',
+  `da_deal_type` varchar(20) DEFAULT NULL COMMENT '医嘱处理类型',
+  `da_start_date` datetime DEFAULT NULL COMMENT '医嘱开始时间',
+  `da_item_name` varchar(200) DEFAULT NULL COMMENT '医嘱项目名称',
+  `da_status` varchar(20) DEFAULT NULL COMMENT '医嘱状态判别',
+  `da_stop_date` datetime DEFAULT NULL COMMENT '医嘱结束时间',
+  `da_group_no` varchar(20) DEFAULT NULL COMMENT '医嘱同组序号',
+  `da_prescription_type` varchar(20) DEFAULT NULL COMMENT '医嘱处方类型(检验、描述医嘱、膳食、西药、护理等)',
+  `da_med_type` varchar(20) DEFAULT NULL COMMENT '医嘱领药类型',
+  `doctor_notice` varchar(100) DEFAULT NULL COMMENT '医生嘱托',
+  `doctor_id` varchar(20) DEFAULT NULL COMMENT '开单医生ID',
+  `doctor_name` varchar(60) DEFAULT NULL COMMENT '开单医生姓名',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  UNIQUE KEY `advice_behospital_code_unique` (`doctor_advice_id`,`behospital_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='病人医嘱';
+
+-- ----------------------------
+-- Table structure for med_home_diagnose_info
+-- ----------------------------
+DROP TABLE IF EXISTS `med_home_diagnose_info`;
+CREATE TABLE `med_home_diagnose_info` (
+  `home_page_id` varchar(20) NOT NULL COMMENT '病案首页ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `diagnose_order_no` varchar(20) NOT NULL COMMENT '诊断序号',
+  `diagnose_type` varchar(20) DEFAULT NULL COMMENT '诊断类别',
+  `diagnose_type_short` varchar(20) DEFAULT NULL COMMENT '诊断判别',
+  `diagnose_name` varchar(200) DEFAULT NULL COMMENT '诊断名称',
+  `behospital_type` varchar(20) DEFAULT NULL COMMENT '入院情况',
+  `leave_hospital_type` varchar(20) DEFAULT NULL COMMENT '出院情况',
+  `pathology_diagnose` varchar(20) DEFAULT NULL COMMENT '病理号',
+  `icd_code` varchar(20) DEFAULT NULL COMMENT '诊断编码',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_home_operation_info
+-- ----------------------------
+DROP TABLE IF EXISTS `med_home_operation_info`;
+CREATE TABLE `med_home_operation_info` (
+  `home_page_id` varchar(20) NOT NULL COMMENT '病案首页ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `operation_order_no` varchar(20) NOT NULL COMMENT '手术序号',
+  `operation_date` datetime(6) DEFAULT NULL COMMENT '手术日期',
+  `operation_code` varchar(20) DEFAULT NULL COMMENT '手术编码',
+  `operation_doctor_id` varchar(20) DEFAULT NULL COMMENT '手术医生',
+  `first_assistant_id` varchar(20) DEFAULT NULL COMMENT '一助医生',
+  `second_assistant_id` varchar(20) DEFAULT NULL COMMENT '二助医生',
+  `cut_level` varchar(20) DEFAULT NULL COMMENT '切口等级',
+  `healing_level` varchar(20) DEFAULT NULL COMMENT '愈合等级',
+  `operation_name` varchar(200) DEFAULT NULL COMMENT '手术名称',
+  `operation_level` varchar(20) DEFAULT NULL COMMENT '手术级别',
+  `anaesthesia_name` varchar(100) DEFAULT NULL COMMENT '麻醉方式',
+  `sham_operation_name` varchar(200) DEFAULT NULL COMMENT '拟手术名称',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_home_page
+-- ----------------------------
+DROP TABLE IF EXISTS `med_home_page`;
+CREATE TABLE `med_home_page` (
+  `home_page_id` varchar(20) NOT NULL COMMENT '病案首页编号',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(20) NOT NULL COMMENT '病人住院序号',
+  `hospital_code` varchar(20) DEFAULT NULL COMMENT '组织机构id',
+  `hospital_name` varchar(20) DEFAULT NULL COMMENT '医疗机构名称',
+  `org_code` varchar(20) DEFAULT NULL COMMENT '医疗机构代码',
+  `pay_type` varchar(20) DEFAULT NULL COMMENT '医疗付费方式',
+  `health_card` varchar(20) DEFAULT NULL COMMENT '健康卡号',
+  `behospital_num` varchar(10) DEFAULT NULL COMMENT '住院次数',
+  `file_code` varchar(20) DEFAULT NULL COMMENT '病案号',
+  `name` varchar(40) DEFAULT NULL COMMENT '姓名',
+  `sex` varchar(10) DEFAULT NULL COMMENT '性别',
+  `birthday` datetime DEFAULT NULL COMMENT '出生日期',
+  `age` varchar(10) DEFAULT NULL COMMENT '年龄',
+  `age_unit` varchar(20) DEFAULT NULL COMMENT '年龄单位',
+  `nationality` varchar(20) DEFAULT NULL COMMENT '国籍',
+  `newborn_month` varchar(10) DEFAULT NULL COMMENT '新生儿出生月数',
+  `newborn_day` varchar(10) DEFAULT NULL COMMENT '新生儿出生天数',
+  `newborn_weight` varchar(10) DEFAULT NULL COMMENT '新生儿出生体重',
+  `newborn_behospital_weight` varchar(10) DEFAULT NULL COMMENT '新生儿入院体重',
+  `born_address` varchar(100) DEFAULT NULL COMMENT '出生地',
+  `born_place` varchar(100) DEFAULT NULL COMMENT '籍贯',
+  `nation` varchar(10) DEFAULT NULL COMMENT '民族',
+  `identity_card_no` varchar(20) DEFAULT NULL COMMENT '身份证号',
+  `job_type` varchar(20) DEFAULT NULL COMMENT '职业',
+  `marriage` varchar(20) DEFAULT NULL COMMENT '婚姻',
+  `cur_address` varchar(100) DEFAULT NULL COMMENT '现住址',
+  `cur_phone` varchar(20) DEFAULT NULL COMMENT '现住址电话',
+  `cur_post_code` varchar(6) DEFAULT NULL COMMENT '现住址邮编',
+  `residence_address` varchar(100) DEFAULT NULL COMMENT '户口地址',
+  `residence_post_code` varchar(6) DEFAULT NULL COMMENT '户口地址邮编',
+  `work_address` varchar(60) DEFAULT NULL COMMENT '工作单位',
+  `work_phone` varchar(20) DEFAULT NULL COMMENT '工作单位电话',
+  `work_post_code` varchar(6) DEFAULT NULL COMMENT '工作单位邮编',
+  `contact_name` varchar(20) DEFAULT NULL COMMENT '联系人姓名',
+  `contact_relation` varchar(60) DEFAULT NULL COMMENT '联系人关系',
+  `contact_address` varchar(100) DEFAULT NULL COMMENT '联系人地址',
+  `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系人电话',
+  `behospital_way` varchar(20) DEFAULT NULL COMMENT '入院途径',
+  `behospital_date` datetime DEFAULT NULL COMMENT '入院时间',
+  `behospital_dept` varchar(20) DEFAULT NULL COMMENT '入院科别',
+  `behospital_ward` varchar(20) DEFAULT NULL COMMENT '入院病房',
+  `behospital_bed_id` varchar(20) DEFAULT NULL COMMENT '入院床位序号',
+  `behospital_bed_code` varchar(20) DEFAULT NULL COMMENT '入院床位号码',
+  `change_dept` varchar(50) DEFAULT NULL COMMENT '转科科别',
+  `leave_hospital_date` datetime DEFAULT NULL COMMENT '出院时间',
+  `leave_hospital_dept` varchar(20) DEFAULT NULL COMMENT '出院科别',
+  `leave_hospital_ward` varchar(20) DEFAULT NULL COMMENT '出院病房',
+  `leave_hospital_bed_id` varchar(20) DEFAULT NULL COMMENT '出院床位序号',
+  `leave_hospital_bed_code` varchar(20) DEFAULT NULL COMMENT '出院床位号码',
+  `behospital_day_num` varchar(10) DEFAULT NULL COMMENT '实际住院天数',
+  `outpatient_emr_diagnose` varchar(100) DEFAULT NULL COMMENT '门急诊诊断',
+  `outpatient_emr_diagnose_code` varchar(20) DEFAULT NULL COMMENT '门急诊诊断编码',
+  `poison_factor` varchar(100) DEFAULT NULL COMMENT '损伤中毒因素',
+  `poison_factor_code` varchar(50) DEFAULT NULL COMMENT '损伤中毒因素编码',
+  `pathology_diagnose` varchar(100) DEFAULT NULL COMMENT '病理诊断',
+  `pathology_diagnose_code` varchar(50) DEFAULT NULL COMMENT '病理诊断编码',
+  `pathology_diagnose_id` varchar(50) DEFAULT NULL COMMENT '病理诊断编号',
+  `is_med_allergy` varchar(10) DEFAULT NULL COMMENT '药物过敏',
+  `med_allergy_name` varchar(20) DEFAULT NULL COMMENT '过敏药物',
+  `autopsy` varchar(10) DEFAULT NULL COMMENT '死亡患者尸检',
+  `blood_type` varchar(20) DEFAULT NULL COMMENT '血型',
+  `rh` varchar(20) DEFAULT NULL COMMENT 'Rh',
+  `dept_director` varchar(20) DEFAULT NULL COMMENT '科主任',
+  `director_doctor` varchar(20) DEFAULT NULL COMMENT '主任医师',
+  `attending_doctor` varchar(20) DEFAULT NULL COMMENT '主治医师',
+  `behospital_doctor` varchar(20) DEFAULT NULL COMMENT '住院医师',
+  `response_nurse` varchar(20) DEFAULT NULL COMMENT '责任护士',
+  `study_doctor` varchar(20) DEFAULT NULL COMMENT '进修医师',
+  `practice_doctor` varchar(20) DEFAULT NULL COMMENT '实习医师',
+  `encode_man` varchar(20) DEFAULT NULL COMMENT '编码员',
+  `home_page_quality` varchar(20) DEFAULT NULL COMMENT '病案质量',
+  `qc_doctor` varchar(20) DEFAULT NULL COMMENT '质控医师',
+  `qc_nurse` varchar(20) DEFAULT NULL COMMENT '质控护士',
+  `qc_date` datetime DEFAULT NULL COMMENT '质控日期',
+  `leave_hospital_type` varchar(10) DEFAULT NULL COMMENT '离院方式',
+  `accept_org_code` varchar(100) DEFAULT NULL COMMENT '接收机构名称',
+  `again_behospital_plan` varchar(10) DEFAULT NULL COMMENT '31天内再住院计划',
+  `again_behospital_goal` varchar(100) DEFAULT NULL COMMENT '再住院目的',
+  `tbi_before_day` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷前天数',
+  `tbi_before_hour` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷前小时',
+  `tbi_before_minute` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷前分钟',
+  `tbi_after_day` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷后天数',
+  `tbi_after_hour` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷后小时',
+  `tbi_after_minute` varchar(10) DEFAULT NULL COMMENT '颅脑损伤患者昏迷后分钟',
+  `total_fee` varchar(20) DEFAULT NULL COMMENT '总费用',
+  `own_fee` varchar(20) DEFAULT NULL COMMENT '自付金额',
+  `general_fee` varchar(20) DEFAULT NULL COMMENT '一般医疗服务费',
+  `service_fee` varchar(20) DEFAULT NULL COMMENT '一般治疗服务费',
+  `nurse_fee` varchar(20) DEFAULT NULL COMMENT '护理费',
+  `other_fee` varchar(20) DEFAULT NULL COMMENT '其他费用',
+  `pathology_fee` varchar(20) DEFAULT NULL COMMENT '病理诊断费',
+  `lab_fee` varchar(20) DEFAULT NULL COMMENT '实验室诊断费',
+  `pacs_fee` varchar(20) DEFAULT NULL COMMENT '影像学诊断费',
+  `clinic_diagnose_fee` varchar(20) DEFAULT NULL COMMENT '临床诊断项目费',
+  `not_operation_fee` varchar(20) DEFAULT NULL COMMENT '非手术治疗项目费',
+  `clinic_physic_fee` varchar(20) DEFAULT NULL COMMENT '临床物理治疗费',
+  `operation_treat_fee` varchar(20) DEFAULT NULL COMMENT '手术治疗费',
+  `anaesthesia_fee` varchar(20) DEFAULT NULL COMMENT '麻醉费',
+  `operation_fee` varchar(20) DEFAULT NULL COMMENT '手术费',
+  `health_type_fee` varchar(20) DEFAULT NULL COMMENT '康复类',
+  `chn_treat_fee` varchar(20) DEFAULT NULL COMMENT '中医治疗费',
+  `western_med_fee` varchar(20) DEFAULT NULL COMMENT '西药费',
+  `antibiosis_fee` varchar(20) DEFAULT NULL COMMENT '抗菌药物费用',
+  `chn_med_fee` varchar(20) DEFAULT NULL COMMENT '中成药费',
+  `chn_herb_fee` varchar(20) DEFAULT NULL COMMENT '中草药费',
+  `blood_fee` varchar(20) DEFAULT NULL COMMENT '血费',
+  `albumen_fee` varchar(20) DEFAULT NULL COMMENT '白蛋白类制品费',
+  `globulin_fee` varchar(20) DEFAULT NULL COMMENT '球蛋白类制品费',
+  `blood_factor_fee` varchar(20) DEFAULT NULL COMMENT '凝血因子类制品费',
+  `cell_factor_fee` varchar(20) DEFAULT NULL COMMENT '细胞因子类制品费',
+  `check_material_fee` varchar(20) DEFAULT NULL COMMENT '检查用一次性医用材料费',
+  `treat_material_fee` varchar(20) DEFAULT NULL COMMENT '治疗用一次性医用材料费',
+  `operation_material_fee` varchar(20) DEFAULT NULL COMMENT '手术用一次性医用材料费',
+  `other_type_fee` varchar(20) DEFAULT NULL COMMENT '其他类其他费',
+  `single_diag_manage` varchar(10) DEFAULT NULL COMMENT '单病种管理',
+  `clinic_pathway_manage` varchar(10) DEFAULT NULL COMMENT '临床路径管理',
+  `is_outpatient_behospital` varchar(10) DEFAULT NULL COMMENT '门诊与住院',
+  `is_leave_behospital` varchar(10) DEFAULT NULL COMMENT '入院与出院',
+  `is_operation_before_after` varchar(10) DEFAULT NULL COMMENT '术前与术后',
+  `is_clinic_pathology` varchar(10) DEFAULT NULL COMMENT '临床与病理',
+  `is_radiate_pathology` varchar(10) DEFAULT NULL COMMENT '放射与病理',
+  `rescue_num` varchar(10) DEFAULT NULL COMMENT '病人抢救次数',
+  `rescue_success_num` varchar(10) DEFAULT NULL COMMENT '病人抢救成功次数',
+  `is_auto_leavehospital` varchar(10) DEFAULT NULL COMMENT '是否为自动出院',
+  `return_to_type` varchar(10) DEFAULT NULL COMMENT '转归情况',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`home_page_id`,`hospital_id`),
+  KEY `behospital_code` (`behospital_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_medical_record
+-- ----------------------------
+DROP TABLE IF EXISTS `med_medical_record`;
+CREATE TABLE `med_medical_record` (
+  `rec_id` varchar(20) NOT NULL,
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(50) DEFAULT NULL COMMENT '病人住院ID',
+  `org_code` varchar(20) DEFAULT NULL COMMENT '组织机构代码',
+  `rec_type_id` varchar(100) DEFAULT NULL COMMENT '病历类别编号',
+  `mode_id` bigint(20) DEFAULT 0 COMMENT '模块id',
+  `rec_date` varchar(50) DEFAULT NULL COMMENT '病历日期',
+  `rec_title` varchar(128) DEFAULT NULL COMMENT '病历标题',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`rec_id`,`hospital_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_medical_record_content
+-- ----------------------------
+DROP TABLE IF EXISTS `med_medical_record_content`;
+CREATE TABLE `med_medical_record_content` (
+  `rec_id` varchar(11) NOT NULL COMMENT '病历ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `content_blob` longblob COMMENT '文书内容(blob)',
+  `content_text` longtext COMMENT '病历文本(文本)',
+  `html_text` longtext COMMENT 'html文本信息',
+  `xml_text` longtext COMMENT 'xml文本信息',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`rec_id`,`hospital_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for med_qcresult_detail
+-- ----------------------------
+DROP TABLE IF EXISTS `med_qcresult_detail`;
+CREATE TABLE `med_qcresult_detail` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(255) NOT NULL DEFAULT '' COMMENT '病人住院ID',
+  `cases_id` bigint(20) DEFAULT NULL COMMENT '模块id',
+  `cases_score` decimal(5,1) DEFAULT NULL COMMENT '模块总分',
+  `cases_entry_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '条目ID',
+  `score` decimal(5,1) DEFAULT NULL COMMENT '人工修改分值',
+  `msg` varchar(255) DEFAULT NULL COMMENT '提示信息',
+  `is_reject` int(3) DEFAULT '0' COMMENT '单项否决(1-单项否决 0-非)',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `behospital_code` (`behospital_code`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='质控评分明细信息\r\n每次评分增加一条信息,前面所有评分is_deleted全部设置为Y';
+
+-- ----------------------------
+-- Table structure for med_qcresult_info
+-- ----------------------------
+DROP TABLE IF EXISTS `med_qcresult_info`;
+CREATE TABLE `med_qcresult_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `hospital_id` bigint(20) DEFAULT '0' COMMENT '医院ID',
+  `behospital_code` varchar(255) NOT NULL DEFAULT '' COMMENT '病人住院ID',
+  `level` varchar(20) NOT NULL DEFAULT '' COMMENT '等级',
+  `page_data` longtext COMMENT '页面数据',
+  `menu_data` longtext COMMENT '菜单数据',
+  `grade_type` tinyint(4) DEFAULT '1' COMMENT '评分类型(1:机器,2:人工)',
+  `score_res` decimal(5,1) NOT NULL DEFAULT '0.0' COMMENT '最后得分',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `behospital_code` (`behospital_code`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='质控评分主表信息\r\n每次评分增加一条信息,前面所有评分is_deleted全部设置为Y';
+
+-- ----------------------------
+-- Table structure for med_record_type
+-- ----------------------------
+DROP TABLE IF EXISTS `med_record_type`;
+CREATE TABLE `med_record_type` (
+  `type_id` varchar(16) NOT NULL COMMENT '类别ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `type_name` varchar(128) DEFAULT NULL COMMENT '类别名称',
+  `parent_type_id` varchar(16) DEFAULT NULL COMMENT '上级类别',
+  `obj_name` varchar(4) DEFAULT NULL COMMENT '服务对象(全院、科室、个人)',
+  `spell` varchar(32) DEFAULT NULL COMMENT '拼音',
+  `remark` varchar(256) DEFAULT NULL,
+  PRIMARY KEY (`type_id`,`hospital_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for qc_cases
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_cases`;
+CREATE TABLE `qc_cases` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(255) DEFAULT NULL COMMENT '模块名称',
+  `prefix` varchar(255) DEFAULT NULL COMMENT '模块编码前缀',
+  `order_no` int(6) DEFAULT NULL COMMENT '顺序号',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=285 DEFAULT CHARSET=utf8 COMMENT='模块数据标准';
+
+-- ----------------------------
+-- Table structure for qc_cases_entry
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_cases_entry`;
+CREATE TABLE `qc_cases_entry` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `cases_id` bigint(20) DEFAULT NULL COMMENT '病历id',
+  `cases_name` varchar(255) DEFAULT NULL,
+  `mode_id` bigint(20) DEFAULT NULL COMMENT '数据模块ID-对应qc_mode.id',
+  `code` varchar(255) DEFAULT NULL,
+  `name` varchar(255) DEFAULT NULL COMMENT '条目',
+  `precond` varchar(255) DEFAULT NULL,
+  `order_no` int(6) DEFAULT NULL COMMENT '顺序号',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2774 DEFAULT CHARSET=utf8 COMMENT='病历条目';
+
+-- ----------------------------
+-- Table structure for qc_cases_entry_hospital
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_cases_entry_hospital`;
+CREATE TABLE `qc_cases_entry_hospital` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `cases_entry_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '条目ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `score` decimal(5,1) NOT NULL DEFAULT '0.0' COMMENT '扣分值',
+  `msg` varchar(1024) DEFAULT NULL COMMENT '条目提示信息',
+  `is_used` int(3) NOT NULL DEFAULT '0' COMMENT '0-未启用 1-启用',
+  `is_reject` int(3) DEFAULT '0' COMMENT '单项否决(1-单项否决 0-非)',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=6944 DEFAULT CHARSET=utf8 COMMENT='病历条目';
+
+-- ----------------------------
+-- Table structure for qc_cases_hospital
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_cases_hospital`;
+CREATE TABLE `qc_cases_hospital` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `cases_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '模块ID',
+  `score` decimal(5,1) NOT NULL DEFAULT '0.0' COMMENT '模块总分',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 COMMENT='医院模块数据';
+
+-- ----------------------------
+-- Table structure for qc_mode
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_mode`;
+CREATE TABLE `qc_mode` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(128) DEFAULT NULL COMMENT '模块名称',
+  `order_no` int(11) DEFAULT '1' COMMENT '排序号',
+  `parent_id` bigint(20) DEFAULT NULL COMMENT '上级模块',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8 COMMENT='病历';
+
+-- ----------------------------
+-- Table structure for qc_model_hospital
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_model_hospital`;
+CREATE TABLE `qc_model_hospital` (
+  `hospital_model_name` varchar(255) DEFAULT NULL,
+  `stand_model_name` varchar(255) DEFAULT NULL,
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `hospital_id` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=957 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Table structure for qc_model_mapping
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_model_mapping`;
+CREATE TABLE `qc_model_mapping` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `case_number_id` bigint(20) DEFAULT NULL COMMENT '病历号',
+  `case_number` varchar(255) DEFAULT NULL,
+  `mode_id` bigint(20) DEFAULT NULL COMMENT '数据类型id',
+  `origin_mode` varchar(255) DEFAULT NULL,
+  `text` longtext COMMENT '内容',
+  `origin_text` longtext,
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=257952 DEFAULT CHARSET=utf8 COMMENT='病历内容';
+
+-- ----------------------------
+-- Table structure for qc_type
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_type`;
+CREATE TABLE `qc_type` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(255) DEFAULT NULL COMMENT '质控类型名称',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='质控类型标准';
+
+-- ----------------------------
+-- Table structure for qc_type_cases_entry
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_type_cases_entry`;
+CREATE TABLE `qc_type_cases_entry` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `type_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '质控类型ID',
+  `case_entry_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '条目数据ID',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=649 DEFAULT CHARSET=utf8 COMMENT='质控类型和质控条目关联表';
+
+-- ----------------------------
+-- Table structure for qc_type_doc
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_type_doc`;
+CREATE TABLE `qc_type_doc` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `type_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '质控类型ID(qc_type.id)',
+  `hospital_type_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院文书类型的类型id(med_record_type.type_id)',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院文书类型的医院ID(med_record_type.hospital_id)',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='质控类型和医院文书类型关联表';
+
+-- ----------------------------
+-- Table structure for sys_dictionary_info
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_dictionary_info`;
+CREATE TABLE `sys_dictionary_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `group_type` bigint(20) NOT NULL DEFAULT '0' COMMENT '分组(值自定义)',
+  `name` varchar(100) NOT NULL DEFAULT '' COMMENT '内容',
+  `val` varchar(255) NOT NULL DEFAULT '' COMMENT '值',
+  `return_type` int(11) NOT NULL DEFAULT '1' COMMENT '返回类型(0: 都返回,1:后台维护返回 2:界面返回)',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
+  `remark` varchar(300) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8 COMMENT='系统字典表';
+
+-- ----------------------------
+-- Table structure for sys_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu`;
+CREATE TABLE `sys_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单名称',
+  `parent_id` bigint(20) NOT NULL DEFAULT '-1' COMMENT '-1:表示顶级,其他值表示上级菜单的id',
+  `code` varchar(255) NOT NULL DEFAULT '' COMMENT '编码,与前端对应',
+  `order_no` int(11) NOT NULL DEFAULT '0' COMMENT '排序,从小到大',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='系统菜单';
+
+-- ----------------------------
+-- Table structure for sys_menu_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_menu_permission`;
+CREATE TABLE `sys_menu_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `menu_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '菜单id',
+  `permission_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '系统资源id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='菜单和系统资源的映射表';
+
+-- ----------------------------
+-- Table structure for sys_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_permission`;
+CREATE TABLE `sys_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '资源ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '资源名称',
+  `permissionUrl` varchar(255) NOT NULL DEFAULT '' COMMENT '资源Url',
+  `method` varchar(255) NOT NULL DEFAULT 'ALL' COMMENT '资源允许的请求方式',
+  `descritpion` varchar(255) NOT NULL DEFAULT '' COMMENT '资源描述',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='系统资源表';
+
+-- ----------------------------
+-- Table structure for sys_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role`;
+CREATE TABLE `sys_role` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '角色名称',
+  `roleLevel` int(11) NOT NULL DEFAULT '0' COMMENT '角色等级',
+  `descritpion` varchar(255) NOT NULL DEFAULT '' COMMENT '角色描述',
+  `menuItems` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单ID:对应角色ID(暂无用处)',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='系统角色表';
+
+-- ----------------------------
+-- Table structure for sys_role_menu
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_menu`;
+CREATE TABLE `sys_role_menu` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `role_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '角色id',
+  `menu_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '菜单id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='角色和菜单的映射表';
+
+-- ----------------------------
+-- Table structure for sys_role_permission
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_role_permission`;
+CREATE TABLE `sys_role_permission` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `role_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '角色id',
+  `permission_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '资源id',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='角色和资源的映射表';
+
+-- ----------------------------
+-- Table structure for sys_task_cron
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_task_cron`;
+CREATE TABLE `sys_task_cron` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `cron_code` varchar(30) NOT NULL DEFAULT '' COMMENT '任务编号',
+  `cron` varchar(30) NOT NULL DEFAULT '' COMMENT '任务执行周期',
+  `is_used` int(3) NOT NULL DEFAULT '0' COMMENT '0-未启用 1-启用',
+  `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='定时任务';
+
+-- ----------------------------
+-- Table structure for sys_user
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user`;
+CREATE TABLE `sys_user` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `username` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
+  `password` varchar(255) NOT NULL DEFAULT '' COMMENT '用户密码',
+  `linkman` varchar(255) NOT NULL DEFAULT '' COMMENT '联系人',
+  `type` int(11) NOT NULL DEFAULT '0' COMMENT '1内部用户,0外部用户(默认0)',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`),
+  KEY `uk_username` (`username`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT='系统用户表';
+
+-- ----------------------------
+-- Table structure for sys_user_hospital
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_hospital`;
+CREATE TABLE `sys_user_hospital` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户主键',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='用户-机构表映射表';
+
+-- ----------------------------
+-- Table structure for sys_user_role
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_role`;
+CREATE TABLE `sys_user_role` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户和角色关联ID',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '系统用户表.用户ID',
+  `role_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '系统角色表.角色ID',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT='系统用户角色关联表';
+
+
+-- ----------------------------
+-- Table structure for qc_cases_entry_pagedata
+-- ----------------------------
+DROP TABLE IF EXISTS `qc_cases_entry_pagedata`;
+CREATE TABLE `qc_cases_entry_pagedata` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `cases_entry_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '条目ID',
+  `hospital_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '医院ID',
+  `page_key` varchar(255) NOT NULL DEFAULT '' COMMENT '页面数据对应的key',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  `is_deleted` char(3) DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(60) DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(60) DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='质控条目对应页面数据映射表';

+ 6 - 0
pom.xml

@@ -183,6 +183,12 @@
             <artifactId>commons-pool2</artifactId>
             <artifactId>commons-pool2</artifactId>
         </dependency>
         </dependency>
 
 
+        <dependency>
+            <groupId>io.github.lvyahui8</groupId>
+            <artifactId>spring-boot-data-aggregator-starter</artifactId>
+            <version>${aggregator.version}</version>
+        </dependency>
+
     </dependencies>
     </dependencies>
 
 
     <!-- 私有仓库 -->
     <!-- 私有仓库 -->

+ 87 - 0
src/main/java/com/diagbot/aggregate/AverageStatisticsAggregate.java

@@ -0,0 +1,87 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.AverageStatisticsDTO;
+import com.diagbot.facade.ConsoleFacade;
+import com.diagbot.facade.HomePageFacade;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.FilterVO;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/23 14:11
+ */
+@Component
+public class AverageStatisticsAggregate {
+    @Autowired
+    private HomePageFacade homePageFacade;
+    @Autowired
+    private ConsoleFacade consoleFacade;
+
+    @DataProvider("setAllAverage")
+    public Map<String, Object> setAllResult(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("getAverageDayNum") List<AverageStatisticsDTO> averageDayNumList,
+            @DataConsumer("getAverageFee") List<AverageStatisticsDTO> averageFeeList) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        if (ListUtil.isNotEmpty(averageDayNumList)) {
+            retMap.put("平均住院日", averageDayNumList);
+        }
+        if (ListUtil.isNotEmpty(averageFeeList)) {
+            retMap.put("平均住院费用", averageFeeList);
+        }
+        return retMap;
+    }
+
+    /**
+     * 平均住院天数
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getAverageDayNum")
+    public List<AverageStatisticsDTO> getAverageDayNum(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
+        }
+        Integer limitCount = filterVO.getLimitCount();
+        //平均住院日
+        if (ListUtil.isNotEmpty(averageDayNumList)) {
+            retAverageDayNumList = consoleFacade.getLimitAverageList(averageDayNumList, limitCount);
+        }
+        return retAverageDayNumList;
+    }
+
+    /**
+     * 平均住院费用
+     *
+     * @param filterVO
+     * @return
+     */
+    @DataProvider("getAverageFee")
+    public List<AverageStatisticsDTO> getAverageFee(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
+        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+            filterVO.setLimitCount(10);
+        }
+        Integer limitCount = filterVO.getLimitCount();
+        //平均住院费用
+        if (ListUtil.isNotEmpty(averageFeeList)) {
+            retAverageFeeList = consoleFacade.getLimitAverageList(averageFeeList, limitCount);
+        }
+        return retAverageFeeList;
+    }
+}

+ 124 - 0
src/main/java/com/diagbot/aggregate/ResultStatisticsAggregate.java

@@ -0,0 +1,124 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.ResultDetailDTO;
+import com.diagbot.facade.BehospitalInfoFacade;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.FilterVO;
+import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/22 18:09
+ */
+@Component
+public class ResultStatisticsAggregate {
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
+    @DataProvider("setAllResult")
+    public Map<String, Object> setAllResult(
+            @InvokeParameter("filterVO") FilterVO filterVO,
+            @DataConsumer("getResult") List<ResultDetailDTO> results,
+            @DataConsumer("getResultDept") List<ResultDetailDTO> results2) {
+        Map<String, Object> retMap = new LinkedHashMap<>();
+        if (ListUtil.isNotEmpty(results)) {
+            retMap.put("缺陷排行列表", results);
+        }
+        if (ListUtil.isNotEmpty(results2)) {
+            retMap.put("各科室缺陷占比", results2);
+        }
+        return retMap;
+    }
+
+    @DataProvider("getResult")
+    public List<ResultDetailDTO> getResult(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics2(filterVO);
+
+        if (ListUtil.isNotEmpty(results)) {
+            int totle = results
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            List<ResultDetailDTO> retResutls = Lists.newLinkedList();
+            results.forEach(result -> {
+                Double percent = BigDecimal.valueOf(result.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                result.setPercent(percent);
+                DecimalFormat df = new DecimalFormat("#0.00");
+                String percentStr
+                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
+                result.setPercentStr(percentStr);
+                if (retResutls.size() < 10) {
+                    retResutls.add(result);
+                }
+
+            });
+            return retResutls;
+        }
+
+        return null;
+    }
+
+    @DataProvider("getResultDept")
+    public List<ResultDetailDTO> getResultDept(@InvokeParameter("filterVO") FilterVO filterVO) {
+        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept2(filterVO);
+        if (ListUtil.isNotEmpty(results2)) {
+            int totle = results2
+                    .stream()
+                    .map(ResultDetailDTO::getNum)
+                    .reduce(0, Integer::sum);
+            results2.forEach(result -> {
+                Double percent = BigDecimal.valueOf(result.getNum())
+                        .divide(BigDecimal.valueOf(totle), 4, RoundingMode.HALF_UP)
+                        .doubleValue();
+                result.setPercent(percent);
+            });
+            List<ResultDetailDTO> retResults = Lists.newLinkedList();
+            if (results2.size() <= 6) {
+                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+            } else {
+
+                Double rate = 0d;
+                Integer num = 0;
+                for (ResultDetailDTO result : results2) {
+                    if (retResults.size() < 5) {
+                        rate = BigDecimal.valueOf(rate)
+                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
+                                .doubleValue();
+                        retResults.add(result);
+                    } else {
+                        num += result.getNum();
+                    }
+                }
+                ResultDetailDTO retResult = new ResultDetailDTO();
+                retResult.setName("其他");
+                retResult.setNum(num);
+                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
+                retResults.add(retResult);
+            }
+            retResults.forEach(result -> {
+                DecimalFormat df = new DecimalFormat("#0.00");
+                String percentStr
+                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
+                result.setPercentStr(percentStr);
+            });
+            return retResults;
+        }
+        return null;
+    }
+}

+ 7 - 0
src/main/java/com/diagbot/client/AuthServiceClient.java

@@ -1,10 +1,14 @@
 package com.diagbot.client;
 package com.diagbot.client;
 
 
 import com.diagbot.client.hystrix.AuthServiceHystrix;
 import com.diagbot.client.hystrix.AuthServiceHystrix;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.JWT;
 import com.diagbot.entity.JWT;
+import com.diagbot.vo.AnalyzeVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 
 
@@ -25,6 +29,9 @@ public interface AuthServiceClient {
 
 
     @PostMapping(value = "/oauth/check_token")
     @PostMapping(value = "/oauth/check_token")
     OAuth2AccessToken checkToken(@RequestHeader(value = "Authorization") String authorization, @RequestParam("token") String token);
     OAuth2AccessToken checkToken(@RequestHeader(value = "Authorization") String authorization, @RequestParam("token") String token);
+
+    @PostMapping(value = "/qc/behospitalInfo/analyze_rpc")
+    RespDTO<AnalyzeDTO> analyze_rpc(@RequestBody AnalyzeVO analyzeVO);
 }
 }
 
 
 
 

+ 9 - 0
src/main/java/com/diagbot/client/hystrix/AuthServiceHystrix.java

@@ -2,7 +2,10 @@ package com.diagbot.client.hystrix;
 
 
 
 
 import com.diagbot.client.AuthServiceClient;
 import com.diagbot.client.AuthServiceClient;
+import com.diagbot.dto.AnalyzeDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.JWT;
 import com.diagbot.entity.JWT;
+import com.diagbot.vo.AnalyzeVO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -32,4 +35,10 @@ public class AuthServiceHystrix implements AuthServiceClient {
         log.error("【hystrix】调用{}异常", "checkToken");
         log.error("【hystrix】调用{}异常", "checkToken");
         return null;
         return null;
     }
     }
+
+    @Override
+    public RespDTO<AnalyzeDTO> analyze_rpc(AnalyzeVO analyzeVO) {
+        log.error("【hystrix】调用{}异常", "analyze_rpc");
+        return null;
+    }
 }
 }

+ 4 - 4
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -3,7 +3,6 @@ package com.diagbot.config;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -14,7 +13,6 @@ import org.springframework.security.jwt.crypto.sign.RsaVerifier;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
 import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
-import org.springframework.security.oauth2.provider.token.TokenStore;
 import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
 import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
 import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
 import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
 import org.springframework.util.FileCopyUtils;
 import org.springframework.util.FileCopyUtils;
@@ -45,9 +43,11 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/dictionaryInfo/getDictionary").permitAll()
                 .antMatchers("/sys/dictionaryInfo/getDictionary").permitAll()
                 .antMatchers("/oauth/token").permitAll()
                 .antMatchers("/oauth/token").permitAll()
                 .antMatchers("/oauth/check_token").permitAll()
                 .antMatchers("/oauth/check_token").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyze").permitAll()
                 .antMatchers("/cache/clear").permitAll()
                 .antMatchers("/cache/clear").permitAll()
-                .antMatchers("/qc/mode/getMenu").permitAll()
+                .antMatchers("/qc/behospitalInfo/execule").permitAll()
+                .antMatchers("/qc/behospitalInfo/analyze_rpc").permitAll()
+                .antMatchers("/qc/behospitalInfo/analyze").permitAll()
+                .antMatchers("/qc/behospitalInfo/analyze_api").permitAll()
                 .antMatchers("/**").authenticated();
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
 //                .antMatchers("/**").permitAll();
     }
     }

+ 4 - 2
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -86,9 +86,11 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/user/checkToken", request)
                 || matchers("/sys/user/checkToken", request)
                 || matchers("/oauth/token", request)
                 || matchers("/oauth/token", request)
                 || matchers("/oauth/check_token", request)
                 || matchers("/oauth/check_token", request)
-                || matchers("/qc/behospitalInfo/analyze", request)
                 || matchers("/cache/clear", request)
                 || matchers("/cache/clear", request)
-                || matchers("/qc/mode/getMenu", request)
+                || matchers("/qc/behospitalInfo/execule", request)
+                || matchers("/qc/behospitalInfo/analyze_rpc", request)
+                || matchers("/qc/behospitalInfo/analyze", request)
+                || matchers("/qc/behospitalInfo/analyze_api", request)
                 || matchers("/", request)) {
                 || matchers("/", request)) {
             return true;
             return true;
         }
         }

+ 1 - 1
src/main/java/com/diagbot/dto/AnalyzeDTO.java

@@ -16,7 +16,7 @@ import java.util.Date;
 public class AnalyzeDTO {
 public class AnalyzeDTO {
     // 病历id
     // 病历id
     private String behospitalCode;
     private String behospitalCode;
-    //得分
+    //是否成功
     private Boolean isSuccess;
     private Boolean isSuccess;
     //得分
     //得分
     private BigDecimal scoreRes;
     private BigDecimal scoreRes;

+ 4 - 2
src/main/java/com/diagbot/dto/AverageStatisticsDTO.java

@@ -11,7 +11,9 @@ import lombok.Setter;
 @Getter
 @Getter
 @Setter
 @Setter
 public class AverageStatisticsDTO {
 public class AverageStatisticsDTO {
-    private Long deptId;
+    private String deptId;
     private String deptName;
     private String deptName;
+    private Integer num;
     private Double averageValue;
     private Double averageValue;
-}
+    private Double totleValue;
+}

+ 24 - 0
src/main/java/com/diagbot/dto/MsgApiDTO.java

@@ -0,0 +1,24 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/4/14 13:07
+ */
+@Getter
+@Setter
+public class MsgApiDTO {
+    //得分
+    private BigDecimal score;
+    //提示信息
+    private String msg;
+    //单项否决
+    private String isReject;
+    //模块名称
+    private String modelName;
+}

+ 12 - 0
src/main/java/com/diagbot/dto/MsgDTO.java

@@ -4,6 +4,8 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
 /**
  * @Description:
  * @Description:
@@ -19,10 +21,20 @@ public class MsgDTO {
     private BigDecimal score;
     private BigDecimal score;
     //提示信息
     //提示信息
     private String msg;
     private String msg;
+    //标准提示信息
+    private String standardMsg;
     //单项否决
     //单项否决
     private String isReject;
     private String isReject;
     //模块名称
     //模块名称
     private String modelName;
     private String modelName;
+    //模块id
+    private String modelId;
+    //模块ID
+    private Long casesId;
+    //模块分数
+    private BigDecimal casesScore;
     // 条目ID
     // 条目ID
     private Long casesEntryId;
     private Long casesEntryId;
+    // 条目id对应页面数据的key值
+    private List<String> pageKeyList = new ArrayList<>();
 }
 }

+ 9 - 6
src/main/java/com/diagbot/dto/QcCasesEntryFindDTO.java

@@ -1,9 +1,10 @@
 package com.diagbot.dto;
 package com.diagbot.dto;
 
 
-import io.swagger.models.auth.In;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
+import java.math.BigDecimal;
+
 /**
 /**
  * @author wangfeng
  * @author wangfeng
  * @Description:
  * @Description:
@@ -12,22 +13,24 @@ import lombok.Setter;
 @Setter
 @Setter
 @Getter
 @Getter
 public class QcCasesEntryFindDTO {
 public class QcCasesEntryFindDTO {
+    //医院id
+    private Long hospitalId;
     //模块id
     //模块id
     private Long casesId;
     private Long casesId;
     //模块名
     //模块名
     private String casesName;
     private String casesName;
+    //模块分值
+    private BigDecimal CaseScore;
     //医院模块id
     //医院模块id
     private Long modeId;
     private Long modeId;
     //条目id
     //条目id
     private Long casesEntryId;
     private Long casesEntryId;
-    //医院id
-    private Long hospitalId;
     //条目名
     //条目名
     private String entryName;
     private String entryName;
     //提示信息
     //提示信息
-    private String msg ;
-    //分值
-    private Double score;
+    private String msg;
+    //条目分值
+    private BigDecimal score;
     //是否单项否决
     //是否单项否决
     private Integer isReject;
     private Integer isReject;
 }
 }

+ 30 - 0
src/main/java/com/diagbot/dto/QcCasesEntryPagedataDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 质控条目对应页面数据映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-20
+ */
+@Data
+public class QcCasesEntryPagedataDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 质控条目id
+     */
+    private Long casesEntryId;
+
+    /**
+     * 页面数据对应的key
+     */
+    private String pageKey;
+}
+

+ 31 - 0
src/main/java/com/diagbot/dto/QcResultApiDTO.java

@@ -0,0 +1,31 @@
+package com.diagbot.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 质控评分结果信息
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-13
+ */
+@Data
+public class QcResultApiDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 最后得分
+     */
+    private BigDecimal scoreRes;
+
+}

+ 9 - 0
src/main/java/com/diagbot/dto/RecordContentDTO.java

@@ -27,6 +27,15 @@ public class RecordContentDTO implements Serializable {
      */
      */
     private String contentText;
     private String contentText;
 
 
+    /**
+     * html内容
+     */
+    private String htmlText;
+    /**
+     * xml内容
+     */
+    private String xmlText;
+
     /**
     /**
      * 加密信息
      * 加密信息
      */
      */

+ 1 - 1
src/main/java/com/diagbot/entity/BehospitalInfo.java

@@ -28,7 +28,7 @@ public class BehospitalInfo implements Serializable {
     /**
     /**
      * 医院ID
      * 医院ID
      */
      */
-    private String hospitalId;
+    private Long hospitalId;
 
 
     /**
     /**
      * 姓名
      * 姓名

+ 10 - 0
src/main/java/com/diagbot/entity/MedicalRecordContent.java

@@ -41,6 +41,16 @@ public class MedicalRecordContent implements Serializable {
      */
      */
     private String contentText;
     private String contentText;
 
 
+    /**
+     * html文本信息
+     */
+    private String htmlText;
+
+    /**
+     * xml文本信息
+     */
+    private String xmlText;
+
     /**
     /**
      * 是否删除,N:未删除,Y:删除
      * 是否删除,N:未删除,Y:删除
      */
      */

+ 73 - 0
src/main/java/com/diagbot/entity/QcCasesEntryPagedata.java

@@ -0,0 +1,73 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 质控条目对应页面数据映射表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-04-20
+ */
+@Data
+public class QcCasesEntryPagedata implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 质控条目id
+     */
+    private Long casesEntryId;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * 页面数据对应的key
+     */
+    private String pageKey;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+}

+ 41 - 14
src/main/java/com/diagbot/facade/AlgorithmFacade.java

@@ -24,7 +24,12 @@ import java.util.Map;
 public class AlgorithmFacade {
 public class AlgorithmFacade {
     private final static List<Integer> types = Arrays.asList(0, 1, 2, 3);
     private final static List<Integer> types = Arrays.asList(0, 1, 2, 3);
 
 
-    //获取评分结果和等级
+    /**
+     * 获取评分结果和等级
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评分结果和等级
+     */
     public AlgorithmDTO getAlgorithmRes(AlgorithmVO algorithmVO) {
     public AlgorithmDTO getAlgorithmRes(AlgorithmVO algorithmVO) {
         AlgorithmDTO algorithmDTO = new AlgorithmDTO();
         AlgorithmDTO algorithmDTO = new AlgorithmDTO();
         BigDecimal score = this.getScore(algorithmVO);
         BigDecimal score = this.getScore(algorithmVO);
@@ -33,7 +38,12 @@ public class AlgorithmFacade {
         return algorithmDTO;
         return algorithmDTO;
     }
     }
 
 
-    //评结果分数
+    /**
+     * 评结果分数
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评结果分数
+     */
     private BigDecimal getScore(AlgorithmVO algorithmVO) {
     private BigDecimal getScore(AlgorithmVO algorithmVO) {
         if (!types.contains(algorithmVO.getType())) {
         if (!types.contains(algorithmVO.getType())) {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "操作类型只有0,1,2,3!");
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "操作类型只有0,1,2,3!");
@@ -45,27 +55,36 @@ public class AlgorithmFacade {
         return res;
         return res;
     }
     }
 
 
-    //评等级
+    /**
+     * 根据分数评定等级
+     *
+     * @param score 评分分数
+     * @return 等级
+     */
     private String getLevel(BigDecimal score) {
     private String getLevel(BigDecimal score) {
         String level = "甲";
         String level = "甲";
         //得分>90分为甲级
         //得分>90分为甲级
-        if (BigDecimalUtil.compareTo(score, new BigDecimal(90)) == 3) {
+        if (BigDecimalUtil.gt(score, new BigDecimal(90))) {
             level = "甲";
             level = "甲";
         }
         }
         //得分≤90分且得分>80分为乙级
         //得分≤90分且得分>80分为乙级
-        if (BigDecimalUtil.compareTo(score, new BigDecimal(90)) == 5
-                && BigDecimalUtil.compareTo(score, new BigDecimal(80)) == 4) {
+        if (BigDecimalUtil.le(score, new BigDecimal(90))
+                && BigDecimalUtil.gt(score, new BigDecimal(80))) {
             level = "乙";
             level = "乙";
         }
         }
         //得分≤80分为丙级
         //得分≤80分为丙级
-        if (BigDecimalUtil.compareTo(score, new BigDecimal(80)) == 5) {
+        if (BigDecimalUtil.le(score, new BigDecimal(80))) {
             level = "丙";
             level = "丙";
         }
         }
 
 
         return level;
         return level;
     }
     }
 
 
-    //处理数据
+    /**
+     * 处理数据
+     *
+     * @param algorithmVO 操作条目的所有信息
+     */
     private void dataDeal(AlgorithmVO algorithmVO) {
     private void dataDeal(AlgorithmVO algorithmVO) {
         List<QcResultAlgVO> qcResultAlgVOList = algorithmVO.getQcResultAlgVOList();
         List<QcResultAlgVO> qcResultAlgVOList = algorithmVO.getQcResultAlgVOList();
         //新增
         //新增
@@ -105,7 +124,7 @@ public class AlgorithmFacade {
                         break;
                         break;
                     }
                     }
                 }
                 }
-                if (!hasData){
+                if (!hasData) {
                     throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "删除的条目不存在!");
                     throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "删除的条目不存在!");
                 }
                 }
             }
             }
@@ -126,14 +145,19 @@ public class AlgorithmFacade {
                         break;
                         break;
                     }
                     }
                 }
                 }
-                if (!hasData){
+                if (!hasData) {
                     throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "修改的条目不存在!");
                     throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "修改的条目不存在!");
                 }
                 }
             }
             }
         }
         }
     }
     }
 
 
-    //计算
+    /**
+     * 计算分数
+     *
+     * @param algorithmVO 操作条目的所有信息
+     * @return 评分分数
+     */
     private BigDecimal cal(AlgorithmVO algorithmVO) {
     private BigDecimal cal(AlgorithmVO algorithmVO) {
         BigDecimal res = new BigDecimal(100);
         BigDecimal res = new BigDecimal(100);
         //模块总分
         //模块总分
@@ -168,13 +192,13 @@ public class AlgorithmFacade {
             //结果先减去单票否决计分总和
             //结果先减去单票否决计分总和
             res = res.subtract(rejectScore);
             res = res.subtract(rejectScore);
             //结果小于0按0计算
             //结果小于0按0计算
-            if (BigDecimalUtil.compareTo(res, BigDecimal.ZERO) == 1) {
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
                 return BigDecimal.ZERO;
                 return BigDecimal.ZERO;
             } else {
             } else {
                 //模块计分
                 //模块计分
                 for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
                 for (Map.Entry<Long, BigDecimal> casesScore : casesScoreMap.entrySet()) {
                     BigDecimal allSccore = casesMap.get(casesScore.getKey());
                     BigDecimal allSccore = casesMap.get(casesScore.getKey());
-                    if (BigDecimalUtil.compareTo(allSccore, casesScore.getValue()) == 5) {
+                    if (BigDecimalUtil.le(allSccore, casesScore.getValue())) {
                         //模块标准分小于等于模块减分总和就用模块标准分
                         //模块标准分小于等于模块减分总和就用模块标准分
                         res = res.subtract(allSccore);
                         res = res.subtract(allSccore);
                     } else {
                     } else {
@@ -184,7 +208,7 @@ public class AlgorithmFacade {
                 }
                 }
             }
             }
             //结果小于0按0计算
             //结果小于0按0计算
-            if (BigDecimalUtil.compareTo(res, BigDecimal.ZERO) == 1) {
+            if (BigDecimalUtil.lt(res, BigDecimal.ZERO)) {
                 res = BigDecimal.ZERO;
                 res = BigDecimal.ZERO;
             }
             }
         }
         }
@@ -204,5 +228,8 @@ public class AlgorithmFacade {
         System.out.println("60:" + algorithmFacade.getLevel(new BigDecimal(60)));
         System.out.println("60:" + algorithmFacade.getLevel(new BigDecimal(60)));
         System.out.println("0:" + algorithmFacade.getLevel(new BigDecimal(0)));
         System.out.println("0:" + algorithmFacade.getLevel(new BigDecimal(0)));
 
 
+        if (BigDecimalUtil.lt(new BigDecimal(-1), BigDecimal.ZERO)) {
+            System.out.println(BigDecimal.ZERO);
+        }
     }
     }
 }
 }

+ 209 - 43
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -3,15 +3,18 @@ package com.diagbot.facade;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.client.AuthServiceClient;
 import com.diagbot.client.QcServiceClient;
 import com.diagbot.client.QcServiceClient;
 import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.dto.AlgorithmDTO;
 import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.AnalyzeDTO;
 import com.diagbot.dto.BehosDTO;
 import com.diagbot.dto.BehosDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.BehospitalInfoDTO;
+import com.diagbot.dto.MsgApiDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.MsgDTO;
 import com.diagbot.dto.OutputInfo;
 import com.diagbot.dto.OutputInfo;
 import com.diagbot.dto.QcCasesEntryDTO;
 import com.diagbot.dto.QcCasesEntryDTO;
 import com.diagbot.dto.QcModeDTO;
 import com.diagbot.dto.QcModeDTO;
+import com.diagbot.dto.QcResultApiDTO;
 import com.diagbot.dto.QcResultDTO;
 import com.diagbot.dto.QcResultDTO;
 import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.dto.RecordContentDTO;
 import com.diagbot.dto.Response;
 import com.diagbot.dto.Response;
@@ -20,17 +23,20 @@ import com.diagbot.entity.DoctorAdvice;
 import com.diagbot.entity.HomeDiagnoseInfo;
 import com.diagbot.entity.HomeDiagnoseInfo;
 import com.diagbot.entity.HomeOperationInfo;
 import com.diagbot.entity.HomeOperationInfo;
 import com.diagbot.entity.HomePage;
 import com.diagbot.entity.HomePage;
+import com.diagbot.entity.QcCasesEntryPagedata;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.BehospitalInfoServiceImpl;
 import com.diagbot.service.impl.BehospitalInfoServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.EncrypDES;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.MapUtil;
 import com.diagbot.util.MapUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.AlgorithmVO;
 import com.diagbot.vo.AlgorithmVO;
+import com.diagbot.vo.AnalyzeApiVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.GetDetailVO;
@@ -40,15 +46,16 @@ import com.diagbot.vo.QcResultAlgVO;
 import com.diagbot.vo.QueryVo;
 import com.diagbot.vo.QueryVo;
 import com.diagbot.vo.RecordContentVO;
 import com.diagbot.vo.RecordContentVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
-import java.util.Calendar;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -83,17 +90,41 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     private QcresultInfoFacade qcresultInfoFacade;
     private QcresultInfoFacade qcresultInfoFacade;
     @Autowired
     @Autowired
     QcModeFacade qcModeFacade;
     QcModeFacade qcModeFacade;
+    @Autowired
+    AuthServiceClient authServiceClient;
+    @Autowired
+    QcCasesEntryPagedataFacade qcCasesEntryPagedataFacade;
+    @Value("${encrypt.enable}")
+    Boolean encryptFlag;
 
 
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
     public IPage<BehospitalInfoDTO> pageFac(BehospitalPageVO behospitalPageVO) {
-
-        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
-        IPage<BehospitalInfoDTO> res = getPage(behospitalPageVO);
-        List<BehospitalInfoDTO> behospitalInfoDTOList = res.getRecords();
-        for (BehospitalInfoDTO behospitalInfo : behospitalInfoDTOList) {
-            if (behospitalInfo != null && behospitalInfo.getBirthday() != null) {
-                behospitalInfo.setAge(getAge(behospitalInfo.getBirthday()));
+        //入参验证
+        //入院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart()) {
+            behospitalPageVO.setBehosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getBehosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateEnd()) {
+            behospitalPageVO.setBehosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getBehosDateEnd()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getBehosDateStart() && null != behospitalPageVO.getBehosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getBehosDateStart(), behospitalPageVO.getBehosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "入院时间的开始时间必须小于结束时间!");
+            }
+        }
+        //出院时间
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart()) {
+            behospitalPageVO.setLeaveHosDateStart(DateUtil.getFirstTimeOfDay(behospitalPageVO.getLeaveHosDateStart()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            behospitalPageVO.setLeaveHosDateEnd(DateUtil.getLastTimeOfDay(behospitalPageVO.getLeaveHosDateEnd()));
+        }
+        if (null != behospitalPageVO && null != behospitalPageVO.getLeaveHosDateStart() && null != behospitalPageVO.getLeaveHosDateEnd()) {
+            if (DateUtil.after(behospitalPageVO.getLeaveHosDateStart(), behospitalPageVO.getLeaveHosDateEnd())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "出院时间的开始时间必须小于结束时间!");
             }
             }
         }
         }
+        behospitalPageVO.setHospitalId(Long.parseLong(SysUserUtils.getCurrentHospitalID()));
+        IPage<BehospitalInfoDTO> res = getPage(behospitalPageVO);
         return res;
         return res;
     }
     }
 
 
@@ -137,18 +168,41 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             AnalyzeVO analyzeVO = new AnalyzeVO();
             AnalyzeVO analyzeVO = new AnalyzeVO();
             BeanUtil.copyProperties(getDetailVO, analyzeVO);
             BeanUtil.copyProperties(getDetailVO, analyzeVO);
             List<MsgDTO> msgDTOList = getMsg(analyzeVO);
             List<MsgDTO> msgDTOList = getMsg(analyzeVO);
+            List<Long> caseEntryId = msgDTOList.stream().map(r -> r.getCasesEntryId()).collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(caseEntryId)) {
+                List<QcCasesEntryPagedata> qcCasesEntryPagedataList = qcCasesEntryPagedataFacade.list(new QueryWrapper<QcCasesEntryPagedata>()
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())
+                        .eq("hospital_id", hospitalId)
+                        .in("cases_entry_id", caseEntryId)
+                );
+                Map<Long, List<QcCasesEntryPagedata>> pageKey = EntityUtil.makeEntityListMap(qcCasesEntryPagedataList, "casesEntryId");
+                for (MsgDTO msgDTO : msgDTOList) {
+                    List<QcCasesEntryPagedata> pagedata = pageKey.get(msgDTO.getCasesEntryId());
+                    if (ListUtil.isNotEmpty(pagedata)) {
+                        msgDTO.setPageKeyList(pagedata.stream().map(r -> r.getPageKey()).collect(Collectors.toList()));
+                    }
+                }
+            }
+
             Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
             Map<String, List<MsgDTO>> msgMap = EntityUtil.makeEntityListMap(msgDTOList, "modelName");
             res.put("msg", msgMap);
             res.put("msg", msgMap);
         }
         }
         return res;
         return res;
     }
     }
 
 
+
     public AnalyzeDTO analyze(AnalyzeVO analyzeVO) {
     public AnalyzeDTO analyze(AnalyzeVO analyzeVO) {
-        Long hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        Long hospitalId = analyzeVO.getHospitalId();
+        if (!analyzeVO.getIsTask()) {
+            hospitalId = Long.parseLong(SysUserUtils.getCurrentHospitalID());
+        }
 //        Long hospitalId = 1L; // 写死
 //        Long hospitalId = 1L; // 写死
         analyzeVO.setHospitalId(hospitalId);
         analyzeVO.setHospitalId(hospitalId);
         // 获取质控条目
         // 获取质控条目
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
         List<QcCasesEntryDTO> qcCasesEntryDTOList = qcCasesEntryFacade.getQcCasesEntry(analyzeVO);
+        if(ListUtil.isEmpty(qcCasesEntryDTOList)){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历找不到质控条目!");
+        }
 
 
         // 获取病历所有数据
         // 获取病历所有数据
         Map<String, Map<String, String>> dicMap = sysDictionaryFacade.getDictionaryWithKey(); // 获取字典信息
         Map<String, Map<String, String>> dicMap = sysDictionaryFacade.getDictionaryWithKey(); // 获取字典信息
@@ -156,6 +210,21 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         RecordContentVO recordContentVO = new RecordContentVO();
         RecordContentVO recordContentVO = new RecordContentVO();
         BeanUtil.copyProperties(analyzeVO, recordContentVO);
         BeanUtil.copyProperties(analyzeVO, recordContentVO);
         List<RecordContentDTO> recordContentDTOList = medicalRecordFacade.getRecordContentFac(recordContentVO);
         List<RecordContentDTO> recordContentDTOList = medicalRecordFacade.getRecordContentFac(recordContentVO);
+        String recTitle = "";
+        // 解密数据
+        if (encryptFlag) {
+            try {
+                EncrypDES encrypDES = new EncrypDES();
+                for (RecordContentDTO recordContentDTO : recordContentDTOList) {
+                    recTitle = recordContentDTO.getRecTitle();
+                    recordContentDTO.setXmlText(encrypDES.decryptor(recordContentDTO.getXmlText()));
+                }
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                        "解密错误!病历号=【" + analyzeVO.getBehospitalCode() + "】,医院文书名称=【" + recTitle + "】");
+            }
+        }
+
         Map<String, List<RecordContentDTO>> recMap = EntityUtil.makeEntityListMap(recordContentDTOList, "standModelName");
         Map<String, List<RecordContentDTO>> recMap = EntityUtil.makeEntityListMap(recordContentDTOList, "standModelName");
 
 
         // 获取医嘱
         // 获取医嘱
@@ -209,9 +278,15 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         addData("死亡记录", recMap, medrecVoList);
         addData("死亡记录", recMap, medrecVoList);
         addData("危急值记录", recMap, medrecVoList);
         addData("危急值记录", recMap, medrecVoList);
         addData("出院小结", recMap, medrecVoList);
         addData("出院小结", recMap, medrecVoList);
+        addData("疑难病例讨论记录", recMap, medrecVoList);
+        addData("输血后效果评价", recMap, medrecVoList);
+        addData("病理检验送检单", recMap, medrecVoList);
+
+        addDataWithInnerKey("知情同意书", recMap, medrecVoList);
+        addDataWithInnerKey("谈话告知书", recMap, medrecVoList);
 
 
         // 会诊记录
         // 会诊记录
-        addDataWithKey("会诊记录", recMap, medrecVoList,
+        addDataWithKey("会诊", recMap, medrecVoList,
                 Arrays.asList("会诊记录", "会诊结果单", "会诊申请单"));
                 Arrays.asList("会诊记录", "会诊结果单", "会诊申请单"));
 
 
         // 手术
         // 手术
@@ -226,8 +301,10 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         }
         }
 
 
         // 病案首页
         // 病案首页
-        addDataWithFirstPage("病案首页",  homePage, medrecVoList, dicMap,
-                homePageList, homeOperationInfoList);
+        if (homePage != null) {
+            addDataWithFirstPage("病案首页", homePage, medrecVoList, dicMap,
+                    homePageList, homeOperationInfoList);
+        }
 
 
         queryVo.setMedrec(medrecVoList);
         queryVo.setMedrec(medrecVoList);
 
 
@@ -258,7 +335,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         List<QcModeDTO> qcModeDTOList = qcModeFacade.getMenu(pageMap);
         List<QcModeDTO> qcModeDTOList = qcModeFacade.getMenu(pageMap);
         String menuData = JSON.toJSONString(qcModeDTOList);
         String menuData = JSON.toJSONString(qcModeDTOList);
 
 
-        Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData, menuData);
+        Date date = qcresultInfoFacade.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, pageData, menuData, analyzeVO.getIsTask());
 
 
         // 返回提示信息
         // 返回提示信息
         List<MsgDTO> msgDTOList = getMsg(analyzeVO);
         List<MsgDTO> msgDTOList = getMsg(analyzeVO);
@@ -292,7 +369,7 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
             MedrecVo medrecVo = new MedrecVo();
             MedrecVo medrecVo = new MedrecVo();
             medrecVo.setTitle(key);
             medrecVo.setTitle(key);
             Map<String, Object> content = new HashMap<>();
             Map<String, Object> content = new HashMap<>();
-            content.put("content", list.stream().map(r -> r.getContentText()).collect(Collectors.toList()));
+            content.put("content", list.stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
             medrecVo.setContent(content);
             medrecVo.setContent(content);
             medrecVoList.add(medrecVo);
             medrecVoList.add(medrecVo);
         }
         }
@@ -315,11 +392,16 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
         Boolean flag = false;
         Boolean flag = false;
         for (String k : keyList) {
         for (String k : keyList) {
             if (ListUtil.isNotEmpty(recMap.get(k))) {
             if (ListUtil.isNotEmpty(recMap.get(k))) {
-                listMap.put(k, recMap.get(k).stream().map(r -> r.getContentText()).collect(Collectors.toList()));
+                listMap.put(k, recMap.get(k).stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
                 flag = true;
                 flag = true;
             }
             }
         }
         }
         if (flag) {
         if (flag) {
+            // 会诊记录特殊处理,有会诊申请单,没有会诊结果单,复制一份到会诊结果单
+            if ("会诊记录".equals(key) && ListUtil.isNotEmpty(listMap.get("会诊申请单"))
+                    && ListUtil.isEmpty(listMap.get("会诊结果单"))) {
+                listMap.put("会诊结果单", listMap.get("会诊申请单"));
+            }
             content.put("content", listMap);
             content.put("content", listMap);
             medrecVo.setContent(content);
             medrecVo.setContent(content);
             medrecVoList.add(medrecVo);
             medrecVoList.add(medrecVo);
@@ -327,6 +409,34 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
     }
     }
 
 
 
 
+    /**
+     * 拼接数据(例如:知情同意书、谈话告知书)
+     *
+     * @param key
+     * @param recMap
+     * @param medrecVoList
+     */
+    public void addDataWithInnerKey(String key, Map<String, List<RecordContentDTO>> recMap, List<MedrecVo> medrecVoList) {
+        MedrecVo medrecVo = new MedrecVo();
+        medrecVo.setTitle(key);
+        Map<String, Object> content = new HashMap<>();
+        Map<String, List<String>> listMap = new HashMap<>();
+        List<RecordContentDTO> recordContentDTOList = recMap.get(key);
+        if (ListUtil.isNotEmpty(recordContentDTOList)) {
+            Map<String, List<RecordContentDTO>> keyMap =
+                    EntityUtil.makeEntityListMap(recordContentDTOList, "recTitle");
+            Set<String> keyList = keyMap.keySet();
+            for (String k : keyList) {
+                if (ListUtil.isNotEmpty(keyMap.get(k))) {
+                    listMap.put(k, keyMap.get(k).stream().map(r -> r.getXmlText()).collect(Collectors.toList()));
+                }
+            }
+            content.put("content", listMap);
+            medrecVo.setContent(content);
+            medrecVoList.add(medrecVo);
+        }
+    }
+
     /**
     /**
      * 拼接数据(医嘱),从数据字典获取信息转换
      * 拼接数据(医嘱),从数据字典获取信息转换
      *
      *
@@ -481,38 +591,94 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
 
 
 
 
     /**
     /**
-     * 通过日期计算年龄
+     * 执行未评分的病历
+     */
+    public void execute() {
+        List<BehospitalInfo> behospitalInfoList = getNoGrade();
+        for (BehospitalInfo bean : behospitalInfoList) {
+            AnalyzeVO analyzeVO = new AnalyzeVO();
+            analyzeVO.setIsTask(true);
+            analyzeVO.setHospitalId(bean.getHospitalId());
+            analyzeVO.setBehospitalCode(bean.getBehospitalCode());
+            authServiceClient.analyze_rpc(analyzeVO);
+        }
+
+//        List<BehospitalInfo> behospitalInfoList = this.list(new QueryWrapper<BehospitalInfo>()
+//                .eq("is_deleted", IsDeleteEnum.N.getKey())
+//        );
+//
+//        int i = 1;
+//        while(i < 100) {
+//            for (BehospitalInfo bean : behospitalInfoList) {
+//                AnalyzeVO analyzeVO = new AnalyzeVO();
+//                analyzeVO.setIsTask(true);
+//                analyzeVO.setHospitalId(bean.getHospitalId());
+//                analyzeVO.setBehospitalCode(bean.getBehospitalCode());
+//                authServiceClient.analyze_rpc(analyzeVO);
+//                System.out.println(i++);
+//            }
+//        }
+    }
+
+
+    /**
+     * 评分api
      *
      *
-     * @param birthDay
+     * @param analyzeApiVO
      * @return
      * @return
      */
      */
-    public int getAge(Date birthDay) {
-        Calendar cal = Calendar.getInstance();
-        if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算
-            return 0;
-            //            throw new IllegalArgumentException(
-            //                    "The birthDay is before Now.It's unbelievable!");
-        }
-        int yearNow = cal.get(Calendar.YEAR);  //当前年份
-        int monthNow = cal.get(Calendar.MONTH);  //当前月份
-        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期
-        cal.setTime(birthDay);
-        int yearBirth = cal.get(Calendar.YEAR);
-        int monthBirth = cal.get(Calendar.MONTH);
-        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
-        int age = yearNow - yearBirth;   //计算整岁数
-        if (monthNow <= monthBirth) {
-            if (monthNow == monthBirth) {
-                if (dayOfMonthNow < dayOfMonthBirth) {
-                    age--;//当前日期在生日之前,年龄减一
-                }
-            } else {
-                age--;//当前月份在生日之前,年龄减一
-            }
+    public Map<String, Object> analyzeApi(AnalyzeApiVO analyzeApiVO) {
+        AnalyzeVO analyzeVO = new AnalyzeVO();
+        BeanUtil.copyProperties(analyzeApiVO, analyzeVO);
+        // 评分
+        analyze(analyzeVO);
+        // 获取结果
+        GetDetailVO getDetailVO = new GetDetailVO();
+        getDetailVO.setHospitalId(analyzeApiVO.getHospitalId());
+        getDetailVO.setBehospitalCode(analyzeApiVO.getBehospitalCode());
+        return getByBehospitalCodeApi(getDetailVO);
+    }
+
+
+    /**
+     * 获取明细api
+     *
+     * @param getDetailVO
+     * @return
+     */
+    public Map<String, Object> getByBehospitalCodeApi(GetDetailVO getDetailVO) {
+        Map<String, Object> res = new HashMap<>(); // 返回结果
+        Long hospitalId = getDetailVO.getHospitalId();
+        // 获取病历信息
+        BehospitalInfo behospitalInfo = this.getOne(new QueryWrapper<BehospitalInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("hospital_id", getDetailVO.getHospitalId())
+                .eq("behospital_code", getDetailVO.getBehospitalCode()), false
+        );
+
+        BehosDTO behosDTO = new BehosDTO();
+        if (behospitalInfo == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历已删除!");
         }
         }
-        if (age < 0) {
-            return 0;
+        BeanUtil.copyProperties(behospitalInfo, behosDTO);
+
+        // 获取结果主表信息
+        QcResultDTO qcResultDTO = qcresultInfoFacade.getByBehospitalCode(getDetailVO);
+        if (qcResultDTO == null) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "该病历未评分!");
         }
         }
-        return age;
+        QcResultApiDTO qcResultApiDTO = new QcResultApiDTO();
+        BeanUtil.copyProperties(qcResultDTO, qcResultApiDTO);
+        res.put("result", qcResultApiDTO);
+
+        // 获取提示信息
+        AnalyzeVO analyzeVO = new AnalyzeVO();
+        BeanUtil.copyProperties(getDetailVO, analyzeVO);
+        List<MsgDTO> msgDTOList = getMsg(analyzeVO);
+        List<MsgApiDTO> msgApiDTOList = BeanUtil.listCopyTo(msgDTOList, MsgApiDTO.class);
+        Map<String, List<MsgApiDTO>> msgMap = EntityUtil.makeEntityListMap(msgApiDTOList, "modelName");
+
+        res.put("details", msgMap);
+        return res;
     }
     }
 }
 }

+ 174 - 129
src/main/java/com/diagbot/facade/ConsoleFacade.java

@@ -2,27 +2,27 @@ package com.diagbot.facade;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.AverageStatisticsDTO;
 import com.diagbot.dto.AverageStatisticsDTO;
-import com.diagbot.dto.ResultDetailDTO;
 import com.diagbot.entity.BehospitalInfo;
 import com.diagbot.entity.BehospitalInfo;
-import com.diagbot.entity.QcresultInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.DateUtil;
-import com.diagbot.util.ListUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.vo.FilterVO;
 import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.text.DecimalFormat;
+import java.math.RoundingMode;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 
 /**
 /**
  * @Description:
  * @Description:
@@ -38,6 +38,8 @@ public class ConsoleFacade {
     private BehospitalInfoFacade behospitalInfoFacade;
     private BehospitalInfoFacade behospitalInfoFacade;
     @Autowired
     @Autowired
     private HomePageFacade homePageFacade;
     private HomePageFacade homePageFacade;
+    @Autowired
+    private DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
 
 
 
 
     /**
     /**
@@ -46,17 +48,7 @@ public class ConsoleFacade {
      * @return
      * @return
      */
      */
     public Map<String, Object> mrStatistics(FilterVO filterVO) {
     public Map<String, Object> mrStatistics(FilterVO filterVO) {
-        Map<String, Object> retMap = new HashMap<>();
-        retMap.put("本月病历数", 0);
-        retMap.put("本月质控数-人工", 0);
-        retMap.put("本月质控数-机器", 0);
-        retMap.put("本月甲级病历-人工", 0);
-        retMap.put("本月甲级病历-机器", 0);
-        retMap.put("本月乙级病历-人工", 0);
-        retMap.put("本月乙级病历-机器", 0);
-        retMap.put("本月不合格病历-人工", 0);
-        retMap.put("本月不合格病历-机器", 0);
-
+        Map<String, Object> retMap = new LinkedHashMap<>();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String startDate = getStartDateStr(filterVO.getType());
         String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setStartDate(startDate);
@@ -65,57 +57,89 @@ public class ConsoleFacade {
         QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
         QueryWrapper<BehospitalInfo> behospitalInfoQueryWrapper = new QueryWrapper<>();
         behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
         behospitalInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("hospital_id", hospitalId)
                 .eq("hospital_id", hospitalId)
-                .ge("leave_hospital_date", startDate);
-        List<BehospitalInfo> behospitalInfoList = behospitalInfoFacade.list(behospitalInfoQueryWrapper);
-        if (ListUtil.isNotEmpty(behospitalInfoList)) {
-            //本月病历数
-            retMap.put("本月病历数", behospitalInfoList.size());
+                .ge("behospital_date", startDate);
+        int behospitalInfoCount = behospitalInfoFacade.count(behospitalInfoQueryWrapper);
+        //病历数
+        if (filterVO.getType().equals(1)) {
+            retMap.put("本月病历数", behospitalInfoCount);
+        } else if (filterVO.getType().equals(2)) {
+            retMap.put("本年病历数", behospitalInfoCount);
         }
         }
 
 
-        List<QcresultInfo> qcresultInfoList = qcresultInfoFacade.getQcresultSelectively(filterVO);
-        if (ListUtil.isNotEmpty(qcresultInfoList)) {
-            retMap.put("本月质控数-人工", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(2))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月质控数-机器", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(1))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月甲级病历-人工", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(2) && i.getLevel().equals("甲"))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月甲级病历-机器", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(1) && i.getLevel().equals("甲"))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月乙级病历-人工", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(2) && i.getLevel().equals("乙"))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月乙级病历-机器", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(1) && i.getLevel().equals("乙"))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月不合格病历-人工", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(2) && i.getLevel().equals("丙"))
-                    .collect(Collectors.toList())
-                    .size());
-            retMap.put("本月不合格病历-机器", qcresultInfoList
-                    .stream()
-                    .filter(i -> i.getGradeType().equals(1) && i.getLevel().equals("丙"))
-                    .collect(Collectors.toList())
-                    .size());
+        QcresultFilterVO qcresultFilterVO = new QcresultFilterVO();
+        BeanUtil.copyProperties(filterVO, qcresultFilterVO);
+        //本月质控数-人工
+        qcresultFilterVO.setGradeType(2);
+        qcresultFilterVO.setLevel("");
+        int qcresultByGradeType2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月质控数-人工", qcresultByGradeType2Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年质控数-人工", qcresultByGradeType2Count);
+        }
+        //本月质控数-机器
+        qcresultFilterVO.setGradeType(1);
+        qcresultFilterVO.setLevel("");
+        int qcresultByGradeType1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月质控数-机器", qcresultByGradeType1Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年质控数-机器", qcresultByGradeType1Count);
+        }
+        //本月甲级病历-人工
+        qcresultFilterVO.setGradeType(2);
+        qcresultFilterVO.setLevel("甲");
+        int qcresultByGradeType2AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月甲级病历-人工", qcresultByGradeType2AndLevel1Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年甲级病历-人工", qcresultByGradeType2AndLevel1Count);
+        }
+        //本月甲级病历-机器
+        qcresultFilterVO.setGradeType(1);
+        qcresultFilterVO.setLevel("甲");
+        int qcresultByGradeType1AndLevel1Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月甲级病历-机器", qcresultByGradeType1AndLevel1Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年甲级病历-机器", qcresultByGradeType1AndLevel1Count);
+        }
+        //本月乙级病历-人工
+        qcresultFilterVO.setGradeType(2);
+        qcresultFilterVO.setLevel("乙");
+        int qcresultByGradeType2AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月乙级病历-人工", qcresultByGradeType2AndLevel2Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年乙级病历-人工", qcresultByGradeType2AndLevel2Count);
+        }
+        //本月乙级病历-机器
+        qcresultFilterVO.setGradeType(1);
+        qcresultFilterVO.setLevel("乙");
+        int qcresultByGradeType1AndLevel2Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月乙级病历-机器", qcresultByGradeType1AndLevel2Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年乙级病历-机器", qcresultByGradeType1AndLevel2Count);
+        }
+        //本月乙级病历-人工
+        qcresultFilterVO.setGradeType(2);
+        qcresultFilterVO.setLevel("丙");
+        int qcresultByGradeType2AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (qcresultFilterVO.getType().equals(1)) {
+            retMap.put("本月丙级病历-人工", qcresultByGradeType2AndLevel3Count);
+        } else if (qcresultFilterVO.getType().equals(2)) {
+            retMap.put("本年丙级病历-人工", qcresultByGradeType2AndLevel3Count);
+        }
+        //本月乙级病历-机器
+        qcresultFilterVO.setGradeType(1);
+        qcresultFilterVO.setLevel("丙");
+        int qcresultByGradeType1AndLevel3Count = qcresultInfoFacade.getQcresultSelectively(qcresultFilterVO);
+        if (filterVO.getType().equals(1)) {
+            retMap.put("本月丙级病历-机器", qcresultByGradeType1AndLevel3Count);
+        } else if (filterVO.getType().equals(2)) {
+            retMap.put("本年丙级病历-机器", qcresultByGradeType1AndLevel3Count);
         }
         }
-
         return retMap;
         return retMap;
     }
     }
 
 
@@ -133,54 +157,60 @@ public class ConsoleFacade {
         String startDate = getStartDateStr(filterVO.getType());
         String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setStartDate(startDate);
         filterVO.setHospitalId(hospitalId);
         filterVO.setHospitalId(hospitalId);
-        if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
+        /*if (filterVO.getLimitCount() == null || filterVO.getLimitCount().equals(0)) {
             filterVO.setLimitCount(10);
             filterVO.setLimitCount(10);
-        }
-        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
-        if (ListUtil.isNotEmpty(results)) {
-            results.forEach(result -> {
-                DecimalFormat df = new DecimalFormat("#.00");
-                String percentStr
-                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-                result.setPercentStr(percentStr);
-            });
-            retMap.put("缺陷排行列表", results);
-        }
-        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
-        if (ListUtil.isNotEmpty(results2)) {
-            List<ResultDetailDTO> retResults = Lists.newLinkedList();
-            if (results2.size() <= 6) {
-                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
-            } else {
+        }*/
+        //        List<ResultDetailDTO> results = behospitalInfoFacade.resultStatistics(filterVO);
+        //        if (ListUtil.isNotEmpty(results)) {
+        //            results.forEach(result -> {
+        //                DecimalFormat df = new DecimalFormat("#0.00");
+        //                String percentStr
+        //                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
+        //                result.setPercentStr(percentStr);
+        //            });
+        //            retMap.put("缺陷排行列表", results);
+        //        }
+        //        List<ResultDetailDTO> results2 = behospitalInfoFacade.resultStatisticsByDept(filterVO);
+        //        if (ListUtil.isNotEmpty(results2)) {
+        //            List<ResultDetailDTO> retResults = Lists.newLinkedList();
+        //            if (results2.size() <= 6) {
+        //                retResults = BeanUtil.listCopyTo(results2, ResultDetailDTO.class);
+        //            } else {
+        //
+        //                Double rate = 0d;
+        //                Integer num = 0;
+        //                for (ResultDetailDTO result : results2) {
+        //                    if (retResults.size() < 5) {
+        //                        rate = BigDecimal.valueOf(rate)
+        //                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
+        //                                .doubleValue();
+        //                        retResults.add(result);
+        //                    } else {
+        //                        num += result.getNum();
+        //                    }
+        //                }
+        //                ResultDetailDTO retResult = new ResultDetailDTO();
+        //                retResult.setName("其他");
+        //                retResult.setNum(num);
+        //                retResult.setPercent(BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(rate)).doubleValue());
+        //                retResults.add(retResult);
+        //            }
+        //            retResults.forEach(result -> {
+        //                DecimalFormat df = new DecimalFormat("#0.00");
+        //                String percentStr
+        //                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
+        //                result.setPercentStr(percentStr);
+        //            });
+        //            retMap.put("各科室缺陷占比", retResults);
+        //        }
 
 
-                Double rate = 0d;
-                Integer num = 0;
-                for (ResultDetailDTO result : results2) {
-                    if (retResults.size() < 5) {
-                        rate = BigDecimal.valueOf(rate)
-                                .add(BigDecimal.valueOf(Double.valueOf(result.getPercent())))
-                                .doubleValue();
-                        retResults.add(result);
-                    } else {
-                        num += result.getNum();
-
-                    }
-                }
-                ResultDetailDTO retResult = new ResultDetailDTO();
-                retResult.setName("其他");
-                retResult.setNum(num);
-                retResult.setPercent(BigDecimal.valueOf(1)
-                        .min(BigDecimal.valueOf(rate))
-                        .doubleValue());
-                retResults.add(retResult);
-            }
-            retResults.forEach(result -> {
-                DecimalFormat df = new DecimalFormat("#.00");
-                String percentStr
-                        = df.format(BigDecimal.valueOf(result.getPercent()).multiply(BigDecimal.valueOf(100))) + "%";
-                result.setPercentStr(percentStr);
-            });
-            retMap.put("各科室缺陷占比", retResults);
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap
+                    = dataBeanAggregateQueryFacade.get("setAllResult", invokeParams, Map.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
         }
         return retMap;
         return retMap;
     }
     }
@@ -193,8 +223,6 @@ public class ConsoleFacade {
      */
      */
     public Map<String, Object> averageStatistics(FilterVO filterVO) {
     public Map<String, Object> averageStatistics(FilterVO filterVO) {
         Map<String, Object> retMap = new LinkedHashMap<>();
         Map<String, Object> retMap = new LinkedHashMap<>();
-        List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
-        List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
         retMap.put("平均住院日", Lists.newLinkedList());
         retMap.put("平均住院日", Lists.newLinkedList());
         retMap.put("平均住院费用", Lists.newLinkedList());
         retMap.put("平均住院费用", Lists.newLinkedList());
         String hospitalId = SysUserUtils.getCurrentHospitalID();
         String hospitalId = SysUserUtils.getCurrentHospitalID();
@@ -202,6 +230,9 @@ public class ConsoleFacade {
         String startDate = getStartDateStr(filterVO.getType());
         String startDate = getStartDateStr(filterVO.getType());
         filterVO.setStartDate(startDate);
         filterVO.setStartDate(startDate);
 
 
+        /*
+        List<AverageStatisticsDTO> retAverageDayNumList = Lists.newLinkedList();
+        List<AverageStatisticsDTO> retAverageFeeList = Lists.newLinkedList();
         List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
         List<AverageStatisticsDTO> averageDayNumList = homePageFacade.getAverageDayNum(filterVO);
         List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
         List<AverageStatisticsDTO> averageFeeList = homePageFacade.getAverageFee(filterVO);
 
 
@@ -220,6 +251,15 @@ public class ConsoleFacade {
         if (ListUtil.isNotEmpty(averageFeeList)) {
         if (ListUtil.isNotEmpty(averageFeeList)) {
             retAverageFeeList = getLimitAverageList(averageFeeList, limitCount);
             retAverageFeeList = getLimitAverageList(averageFeeList, limitCount);
             retMap.put("平均住院费用", retAverageFeeList);
             retMap.put("平均住院费用", retAverageFeeList);
+        }*/
+
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("filterVO", filterVO);
+            retMap
+                    = dataBeanAggregateQueryFacade.get("setAllAverage", invokeParams, Map.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
         }
         }
 
 
         return retMap;
         return retMap;
@@ -258,24 +298,29 @@ public class ConsoleFacade {
         if (averageList.size() < limitCount) {
         if (averageList.size() < limitCount) {
             retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
             retAverageList = BeanUtil.listCopyTo(averageList, AverageStatisticsDTO.class);
         } else {
         } else {
-            Double averageValue = 0d;
-            Integer num = 0;
-            for (AverageStatisticsDTO averageStatisticsDTO : averageList) {
-                if (retAverageList.size() < limitCount - 1) {
-                    retAverageList.add(averageStatisticsDTO);
-                } else {
-                    averageValue = BigDecimal
-                            .valueOf(averageValue)
-                            .add(BigDecimal.valueOf(averageStatisticsDTO.getAverageValue()))
-                            .doubleValue();
-                    num++;
-                }
+            if (averageList.size() > limitCount) {
+                retAverageList = averageList.subList(0, limitCount - 1);
+                List<AverageStatisticsDTO> otherList = averageList.subList(limitCount - 1, averageList.size());
+                Double totleValue = otherList
+                        .stream()
+                        .map(i -> BigDecimal.valueOf(i.getTotleValue()))
+                        .reduce(BigDecimal.ZERO, BigDecimal::add).doubleValue();
+                Integer num = otherList
+                        .stream()
+                        .map(AverageStatisticsDTO::getNum)
+                        .reduce(0, Integer::sum);
+                Double averageValue = BigDecimal.valueOf(totleValue)
+                        .divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP)
+                        .doubleValue();
+                AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
+                retAverageStatistics.setDeptName("其他");
+                retAverageStatistics.setNum(num);
+                retAverageStatistics.setAverageValue(averageValue);
+                retAverageStatistics.setTotleValue(totleValue);
+                retAverageList.add(retAverageStatistics);
+            } else {
+                retAverageList = averageList;
             }
             }
-            averageValue = BigDecimal.valueOf(averageValue).divide(BigDecimal.valueOf(num)).doubleValue();
-            AverageStatisticsDTO retAverageStatistics = new AverageStatisticsDTO();
-            retAverageStatistics.setDeptName("其他");
-            retAverageStatistics.setAverageValue(averageValue);
-            retAverageList.add(retAverageStatistics);
         }
         }
         return retAverageList;
         return retAverageList;
     }
     }

+ 2 - 7
src/main/java/com/diagbot/facade/QcCasesEntryHospitalFacade.java

@@ -10,12 +10,9 @@ import com.diagbot.entity.QcCasesEntryHospital;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.CommonException;
-import com.diagbot.service.QcCasesEntryHospitalService;
 import com.diagbot.service.impl.QcCasesEntryHospitalServiceImpl;
 import com.diagbot.service.impl.QcCasesEntryHospitalServiceImpl;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.DateUtil;
-import com.diagbot.util.StringUtil;
 import com.diagbot.util.SysUserUtils;
 import com.diagbot.util.SysUserUtils;
-import com.diagbot.util.UserUtils;
 import com.diagbot.vo.QcCasesEntryFindVO;
 import com.diagbot.vo.QcCasesEntryFindVO;
 import com.diagbot.vo.QcCasesEntryHospitalVO;
 import com.diagbot.vo.QcCasesEntryHospitalVO;
 import com.diagbot.vo.QcCasesEntryUpdataVO;
 import com.diagbot.vo.QcCasesEntryUpdataVO;
@@ -31,8 +28,6 @@ import java.util.List;
  */
  */
 @Component
 @Component
 public class QcCasesEntryHospitalFacade extends QcCasesEntryHospitalServiceImpl {
 public class QcCasesEntryHospitalFacade extends QcCasesEntryHospitalServiceImpl {
-    @Autowired
-    QcCasesEntryHospitalService qcCasesEntryHospitalService;
     @Autowired
     @Autowired
     private QcCasesFacade qcCasesFacade;
     private QcCasesFacade qcCasesFacade;
 
 
@@ -42,7 +37,7 @@ public class QcCasesEntryHospitalFacade extends QcCasesEntryHospitalServiceImpl
      * @return
      * @return
      */
      */
     public IPage<List<QcCasesEntryHospitalDTO>> QcCasesEntryHospitals(QcCasesEntryHospitalVO qcCasesEntryHospitalVO) {
     public IPage<List<QcCasesEntryHospitalDTO>> QcCasesEntryHospitals(QcCasesEntryHospitalVO qcCasesEntryHospitalVO) {
-        IPage<List<QcCasesEntryHospitalDTO>> data = qcCasesEntryHospitalService.getQcCasesEntryAlls(qcCasesEntryHospitalVO);
+        IPage<List<QcCasesEntryHospitalDTO>> data = this.getQcCasesEntryAlls(qcCasesEntryHospitalVO);
         return data;
         return data;
     }
     }
 
 
@@ -92,7 +87,7 @@ public class QcCasesEntryHospitalFacade extends QcCasesEntryHospitalServiceImpl
      * @return
      * @return
      */
      */
     public List<QcCasesEntryFindDTO> findQcCasesEntryAlls(QcCasesEntryFindVO qcCasesEntryFindVO) {
     public List<QcCasesEntryFindDTO> findQcCasesEntryAlls(QcCasesEntryFindVO qcCasesEntryFindVO) {
-        List<QcCasesEntryFindDTO> data = qcCasesEntryHospitalService.findQcCasesEntryAll(qcCasesEntryFindVO);
+        List<QcCasesEntryFindDTO> data = this.findQcCasesEntryAll(qcCasesEntryFindVO);
         return data;
         return data;
     }
     }
 }
 }

+ 13 - 0
src/main/java/com/diagbot/facade/QcCasesEntryPagedataFacade.java

@@ -0,0 +1,13 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.QcCasesEntryPagedataServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/4/13 20:20
+ */
+@Component
+public class QcCasesEntryPagedataFacade extends QcCasesEntryPagedataServiceImpl {
+}

+ 16 - 0
src/main/java/com/diagbot/facade/QcCasesFacade.java

@@ -33,12 +33,23 @@ public class QcCasesFacade extends QcCasesServiceImpl {
     @Autowired
     @Autowired
     private QcCasesHospitalFacade qcCasesHospitalFacade;
     private QcCasesHospitalFacade qcCasesHospitalFacade;
 
 
+    /**
+     * 获取医院模块数据信息
+     *
+     * @return 医院模块数据信息
+     */
     public List<QcCasesDTO> getQcCasesFac() {
     public List<QcCasesDTO> getQcCasesFac() {
         QcCasesQueryVO queryVO = new QcCasesQueryVO();
         QcCasesQueryVO queryVO = new QcCasesQueryVO();
         queryVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
         queryVO.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
         return this.getQcCases(queryVO);
         return this.getQcCases(queryVO);
     }
     }
 
 
+    /**
+     * 批量更新模块数据
+     *
+     * @param qcCasesSaveVOList 更新的模块数据
+     * @return 是否成功
+     */
     public Boolean saveQcCases(QcCasesSaveListVO qcCasesSaveVOList) {
     public Boolean saveQcCases(QcCasesSaveListVO qcCasesSaveVOList) {
         if (null != qcCasesSaveVOList
         if (null != qcCasesSaveVOList
                 && ListUtil.isNotEmpty(qcCasesSaveVOList.getQcCasesSaveVOList())) {
                 && ListUtil.isNotEmpty(qcCasesSaveVOList.getQcCasesSaveVOList())) {
@@ -56,6 +67,11 @@ public class QcCasesFacade extends QcCasesServiceImpl {
 
 
     }
     }
 
 
+    /**
+     * 获取基础模块数据信息
+     *
+     * @return 基础模块数据信息列表
+     */
     public List<QcCasesAllDTO> getQcCasesAlls() {
     public List<QcCasesAllDTO> getQcCasesAlls() {
         QueryWrapper<QcCases> qc = new QueryWrapper<>();
         QueryWrapper<QcCases> qc = new QueryWrapper<>();
         qc.eq("is_deleted", IsDeleteEnum.N.getKey());
         qc.eq("is_deleted", IsDeleteEnum.N.getKey());

+ 12 - 8
src/main/java/com/diagbot/facade/QcModeFacade.java

@@ -7,9 +7,9 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.QcModeServiceImpl;
 import com.diagbot.service.impl.QcModeServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -27,23 +27,27 @@ public class QcModeFacade extends QcModeServiceImpl {
                 .orderByAsc("parent_id", "order_no")
                 .orderByAsc("parent_id", "order_no")
         );
         );
 
 
-        Iterator<QcMode> iterator = qcModeList.iterator();
-        while (iterator.hasNext()) {
-            QcMode qcMode = iterator.next();
-            if (!pageData.containsKey(qcMode.getName()) && !"病程信息".equals(qcMode.getName())) {
-                iterator.remove();
+        for (int i = 0; i < qcModeList.size(); i++) {
+            String key = qcModeList.get(i).getName();
+            if (!pageData.containsKey(qcModeList.get(i).getName()) && !"病程信息".equals(key)) {
+                qcModeList.remove(i--);
             }
             }
         }
         }
-
         Map<Long, List<QcMode>> map = EntityUtil.makeEntityListMap(qcModeList, "parentId");
         Map<Long, List<QcMode>> map = EntityUtil.makeEntityListMap(qcModeList, "parentId");
+
         // 获取根节点
         // 获取根节点
         List<QcMode> root = map.get(-1L);
         List<QcMode> root = map.get(-1L);
         List<QcModeDTO> res = BeanUtil.listCopyTo(root, QcModeDTO.class);
         List<QcModeDTO> res = BeanUtil.listCopyTo(root, QcModeDTO.class);
 
 
-        for (QcModeDTO qcModeDTO : res) {
+        for (int i = 0; i < res.size(); i++) {
+            QcModeDTO qcModeDTO = res.get(i);
             if (map.containsKey(qcModeDTO.getId())) {
             if (map.containsKey(qcModeDTO.getId())) {
                 qcModeDTO.setSonMode(BeanUtil.listCopyTo(map.get(qcModeDTO.getId()), QcModeDTO.class));
                 qcModeDTO.setSonMode(BeanUtil.listCopyTo(map.get(qcModeDTO.getId()), QcModeDTO.class));
             }
             }
+            // 如果病程信息下无内容,则删除
+            if ("病程信息".equals(qcModeDTO.getName()) && ListUtil.isEmpty(qcModeDTO.getSonMode())) {
+                res.remove(i--);
+            }
         }
         }
         return res;
         return res;
     }
     }

+ 29 - 9
src/main/java/com/diagbot/facade/QcresultInfoFacade.java

@@ -46,6 +46,12 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
     @Autowired
     @Autowired
     private BehospitalInfoFacade behospitalInfoFacade;
     private BehospitalInfoFacade behospitalInfoFacade;
 
 
+    /**
+     * 修改评分结果信息
+     *
+     * @param qcresultVO 修改评分结果信息
+     * @return 评分的结果
+     */
     public AnalyzeDTO changeQcResult(QcresultVO qcresultVO) {
     public AnalyzeDTO changeQcResult(QcresultVO qcresultVO) {
         //入参验证
         //入参验证
         if (StringUtil.isBlank(qcresultVO.getBehospitalCode())) {
         if (StringUtil.isBlank(qcresultVO.getBehospitalCode())) {
@@ -56,15 +62,15 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         }
         }
 
 
         Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
         Long hospitalId = Long.valueOf(SysUserUtils.getCurrentHospitalID());
-        //验证病历的存在性
+        //验证病历的存在性
         Integer mrcnt
         Integer mrcnt
                 = behospitalInfoFacade.count(
                 = behospitalInfoFacade.count(
                 new QueryWrapper<BehospitalInfo>()
                 new QueryWrapper<BehospitalInfo>()
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("hospital_id", hospitalId)
                         .eq("hospital_id", hospitalId)
                         .eq("behospital_code", qcresultVO.getBehospitalCode()));
                         .eq("behospital_code", qcresultVO.getBehospitalCode()));
-        if (mrcnt < 1){
-            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院下病历号不存在!");
+        if (mrcnt < 1) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院下病历号不存在!");
         }
         }
         //验证是否评估过
         //验证是否评估过
         Integer cnt
         Integer cnt
@@ -73,7 +79,7 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("is_deleted", IsDeleteEnum.N.getKey())
                         .eq("hospital_id", hospitalId)
                         .eq("hospital_id", hospitalId)
                         .eq("behospital_code", qcresultVO.getBehospitalCode()));
                         .eq("behospital_code", qcresultVO.getBehospitalCode()));
-        if (cnt < 1){
+        if (cnt < 1) {
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历尚未评分,请先评分!");
             throw new CommonException(CommonErrorCode.NOT_EXISTS, "该病历尚未评分,请先评分!");
         }
         }
         //查询质控评分明细信息
         //查询质控评分明细信息
@@ -97,7 +103,7 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         AnalyzeVO analyzeVO = new AnalyzeVO();
         AnalyzeVO analyzeVO = new AnalyzeVO();
         analyzeVO.setHospitalId(hospitalId);
         analyzeVO.setHospitalId(hospitalId);
         analyzeVO.setBehospitalCode(qcresultVO.getBehospitalCode());
         analyzeVO.setBehospitalCode(qcresultVO.getBehospitalCode());
-        Date date = this.saveQcResult(algorithmDTO, algorithmVO, analyzeVO,null, null);
+        Date date = this.saveQcResult(algorithmDTO, algorithmVO, analyzeVO, null, null, false);
         //返回参数组装
         //返回参数组装
         AnalyzeDTO analyzeDTO = new AnalyzeDTO();
         AnalyzeDTO analyzeDTO = new AnalyzeDTO();
         analyzeDTO.setBehospitalCode(qcresultVO.getBehospitalCode());
         analyzeDTO.setBehospitalCode(qcresultVO.getBehospitalCode());
@@ -110,10 +116,24 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         return analyzeDTO;
         return analyzeDTO;
     }
     }
 
 
+    /**
+     * 保存评分结果信息
+     *
+     * @param algorithmDTO 评分结果
+     * @param algorithmVO  操作的条目
+     * @param analyzeVO    病历信息
+     * @param pageData     大数据解析出来的页面信息
+     * @param menuData     菜单信息
+     * @param isTask       是否是任务
+     * @return 评分的时间
+     */
     public Date saveQcResult(AlgorithmDTO algorithmDTO, AlgorithmVO algorithmVO, AnalyzeVO analyzeVO,
     public Date saveQcResult(AlgorithmDTO algorithmDTO, AlgorithmVO algorithmVO, AnalyzeVO analyzeVO,
-                             String pageData, String menuData) {
+                             String pageData, String menuData, Boolean isTask) {
         //更新质控评分结果信息
         //更新质控评分结果信息
-        Long useId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
+        Long useId = 0L;
+        if (!isTask) {
+            useId = Long.valueOf(SysUserUtils.getCurrentPrincipleID());
+        }
         Date now = DateUtil.now();
         Date now = DateUtil.now();
         //获取旧记录
         //获取旧记录
         QcresultInfo qcresultInfo
         QcresultInfo qcresultInfo
@@ -144,10 +164,10 @@ public class QcresultInfoFacade extends QcresultInfoServiceImpl {
         } else {
         } else {
             qcresultInfo.setGradeType(2);
             qcresultInfo.setGradeType(2);
         }
         }
-        if (StringUtil.isNotBlank(pageData)){
+        if (StringUtil.isNotBlank(pageData)) {
             qcresultInfo.setPageData(pageData);
             qcresultInfo.setPageData(pageData);
         }
         }
-        if (StringUtil.isNotBlank(menuData)){
+        if (StringUtil.isNotBlank(menuData)) {
             qcresultInfo.setMenuData(menuData);
             qcresultInfo.setMenuData(menuData);
         }
         }
 
 

+ 28 - 1
src/main/java/com/diagbot/mapper/BehospitalInfoMapper.java

@@ -41,4 +41,31 @@ public interface BehospitalInfoMapper extends BaseMapper<BehospitalInfo> {
      * @return
      * @return
      */
      */
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
-}
+
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    public int getTotleResultNum(FilterVO filterVO);
+
+
+    public List<BehospitalInfo> getNoGrade();
+}

+ 16 - 0
src/main/java/com/diagbot/mapper/QcCasesEntryPagedataMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.QcCasesEntryPagedata;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 质控条目对应页面数据映射表 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-20
+ */
+public interface QcCasesEntryPagedataMapper extends BaseMapper<QcCasesEntryPagedata> {
+
+}

+ 4 - 6
src/main/java/com/diagbot/mapper/QcresultInfoMapper.java

@@ -1,10 +1,8 @@
 package com.diagbot.mapper;
 package com.diagbot.mapper;
 
 
-import com.diagbot.entity.QcresultInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.diagbot.vo.FilterVO;
-
-import java.util.List;
+import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.QcresultFilterVO;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -20,8 +18,8 @@ public interface QcresultInfoMapper extends BaseMapper<QcresultInfo> {
     /**
     /**
      * 筛选质控记录
      * 筛选质控记录
      *
      *
-     * @param filterVO
+     * @param qcresultFilterVO
      * @return
      * @return
      */
      */
-    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO);
+    public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
 }
 }

+ 27 - 0
src/main/java/com/diagbot/service/BehospitalInfoService.java

@@ -41,4 +41,31 @@ public interface BehospitalInfoService extends IService<BehospitalInfo> {
      * @return
      * @return
      */
      */
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO);
+
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO);
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO);
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    public int getTotleResultNum(FilterVO filterVO);
+
+
+    public List<BehospitalInfo> getNoGrade();
 }
 }

+ 16 - 0
src/main/java/com/diagbot/service/QcCasesEntryPagedataService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.QcCasesEntryPagedata;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 质控条目对应页面数据映射表 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-20
+ */
+public interface QcCasesEntryPagedataService extends IService<QcCasesEntryPagedata> {
+
+}

+ 4 - 6
src/main/java/com/diagbot/service/QcresultInfoService.java

@@ -1,10 +1,8 @@
 package com.diagbot.service;
 package com.diagbot.service;
 
 
-import com.diagbot.entity.QcresultInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.diagbot.vo.FilterVO;
-
-import java.util.List;
+import com.diagbot.entity.QcresultInfo;
+import com.diagbot.vo.QcresultFilterVO;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -20,8 +18,8 @@ public interface QcresultInfoService extends IService<QcresultInfo> {
     /**
     /**
      * 筛选质控记录
      * 筛选质控记录
      *
      *
-     * @param filterVO
+     * @param qcresultFilterVO
      * @return
      * @return
      */
      */
-    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO);
+    public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO);
 }
 }

+ 38 - 0
src/main/java/com/diagbot/service/impl/BehospitalInfoServiceImpl.java

@@ -57,4 +57,42 @@ public class BehospitalInfoServiceImpl extends ServiceImpl<BehospitalInfoMapper,
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO) {
     public List<ResultDetailDTO> resultStatisticsByDept(FilterVO filterVO) {
         return baseMapper.resultStatisticsByDept(filterVO);
         return baseMapper.resultStatisticsByDept(filterVO);
     }
     }
+
+    /**
+     * 缺陷排行列表统计-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<ResultDetailDTO> resultStatistics2(FilterVO filterVO) {
+        return baseMapper.resultStatistics2(filterVO);
+    }
+
+    /**
+     * 各科室缺陷占比-百分比未计算
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public List<ResultDetailDTO> resultStatisticsByDept2(FilterVO filterVO) {
+        return baseMapper.resultStatisticsByDept2(filterVO);
+    }
+
+    /**
+     * 缺陷总数
+     *
+     * @param filterVO
+     * @return
+     */
+    @Override
+    public int getTotleResultNum(FilterVO filterVO) {
+        return baseMapper.getTotleResultNum(filterVO);
+    }
+
+    @Override
+    public List<BehospitalInfo> getNoGrade() {
+        return baseMapper.getNoGrade();
+    }
 }
 }

+ 20 - 0
src/main/java/com/diagbot/service/impl/QcCasesEntryPagedataServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.QcCasesEntryPagedata;
+import com.diagbot.mapper.QcCasesEntryPagedataMapper;
+import com.diagbot.service.QcCasesEntryPagedataService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 质控条目对应页面数据映射表 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-04-20
+ */
+@Service
+public class QcCasesEntryPagedataServiceImpl extends ServiceImpl<QcCasesEntryPagedataMapper, QcCasesEntryPagedata> implements QcCasesEntryPagedataService {
+
+}

+ 4 - 6
src/main/java/com/diagbot/service/impl/QcresultInfoServiceImpl.java

@@ -4,11 +4,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.entity.QcresultInfo;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.mapper.QcresultInfoMapper;
 import com.diagbot.service.QcresultInfoService;
 import com.diagbot.service.QcresultInfoService;
-import com.diagbot.vo.FilterVO;
+import com.diagbot.vo.QcresultFilterVO;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
-import java.util.List;
-
 /**
 /**
  * <p>
  * <p>
  * 质控评分结果信息
  * 质控评分结果信息
@@ -24,11 +22,11 @@ public class QcresultInfoServiceImpl extends ServiceImpl<QcresultInfoMapper, Qcr
     /**
     /**
      * 筛选质控记录
      * 筛选质控记录
      *
      *
-     * @param filterVO
+     * @param qcresultFilterVO
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public List<QcresultInfo> getQcresultSelectively(FilterVO filterVO) {
-        return baseMapper.getQcresultSelectively(filterVO);
+    public int getQcresultSelectively(QcresultFilterVO qcresultFilterVO) {
+        return baseMapper.getQcresultSelectively(qcresultFilterVO);
     }
     }
 }
 }

+ 10 - 5
src/main/java/com/diagbot/task/BehospitalInfoAnalyzeTask.java

@@ -3,8 +3,10 @@ package com.diagbot.task;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.SysTaskCron;
 import com.diagbot.entity.SysTaskCron;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.SysTaskCronFacade;
 import com.diagbot.facade.SysTaskCronFacade;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.Trigger;
 import org.springframework.scheduling.Trigger;
@@ -13,7 +15,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.SchedulingConfigurer;
 import org.springframework.scheduling.annotation.SchedulingConfigurer;
 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 import org.springframework.scheduling.support.CronTrigger;
 import org.springframework.scheduling.support.CronTrigger;
-import org.springframework.stereotype.Component;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.Date;
@@ -23,15 +24,18 @@ import java.util.Date;
  * @author: gaodm
  * @author: gaodm
  * @time: 2020/4/15 17:45
  * @time: 2020/4/15 17:45
  */
  */
-//@Component
-//@Configuration      //1.主要用于标记配置类,兼备Component的效果。
-//@EnableScheduling   // 2.开启定时任务
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+@Slf4j
 public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
 public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
     @Autowired
     @Autowired
     private SysTaskCronFacade sysTaskCronFacade;
     private SysTaskCronFacade sysTaskCronFacade;
 
 
     private SysTaskCron task001 = new SysTaskCron();
     private SysTaskCron task001 = new SysTaskCron();
 
 
+    @Autowired
+    private BehospitalInfoFacade behospitalInfoFacade;
+
     /**
     /**
      * 执行定时任务.
      * 执行定时任务.
      */
      */
@@ -44,7 +48,8 @@ public class BehospitalInfoAnalyzeTask implements SchedulingConfigurer {
                 if (null != task001
                 if (null != task001
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsDeleted().equals(IsDeleteEnum.N.getKey())
                         && task001.getIsUsed().equals(1)) {
                         && task001.getIsUsed().equals(1)) {
-                    System.out.println("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
+                    log.info("执行动态定时任务: " + LocalDateTime.now().toLocalTime());
+                    behospitalInfoFacade.execute();
                 }
                 }
             }
             }
         }, new Trigger() {
         }, new Trigger() {

+ 71 - 12
src/main/java/com/diagbot/util/BigDecimalUtil.java

@@ -1,6 +1,7 @@
 package com.diagbot.util;
 package com.diagbot.util;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 
 
 /**
 /**
  * @Description: 大数工具类
  * @Description: 大数工具类
@@ -30,32 +31,90 @@ public class BigDecimalUtil {
         );
         );
     }
     }
 
 
-    public static Integer compareTo(BigDecimal a, BigDecimal b) {
-        Integer res = 1;
+    //a小于b
+    public static Boolean lt(BigDecimal a, BigDecimal b) {
+        Boolean res = false;
         if (a.compareTo(b) == -1) {
         if (a.compareTo(b) == -1) {
-            res = 1;
-            //System.out.println("a小于b");
+            res = true;
         }
         }
+        return res;
+
+    }
 
 
+    //a等于b
+    public static Boolean eq(BigDecimal a, BigDecimal b) {
+        Boolean res = false;
         if (a.compareTo(b) == 0) {
         if (a.compareTo(b) == 0) {
-            res = 2;
-            //System.out.println("a等于b");
+            res = true;
         }
         }
+        return res;
+
+    }
 
 
+    //a大于b
+    public static Boolean gt(BigDecimal a, BigDecimal b) {
+        Boolean res = false;
         if (a.compareTo(b) == 1) {
         if (a.compareTo(b) == 1) {
-            res = 3;
-            //System.out.println("a大于b");
+            res = true;
         }
         }
+        return res;
+
+    }
 
 
+    //a大于等于b
+    public static Boolean ge(BigDecimal a, BigDecimal b) {
+        Boolean res = false;
         if (a.compareTo(b) > -1) {
         if (a.compareTo(b) > -1) {
-            res = 4;
-            //System.out.println("a大于等于b");
+            res = true;
         }
         }
+        return res;
 
 
+    }
+
+    //a小于等于b
+    public static Boolean le(BigDecimal a, BigDecimal b) {
+        Boolean res = false;
         if (a.compareTo(b) < 1) {
         if (a.compareTo(b) < 1) {
-            res = 5;
-            //System.out.println("a小于等于b");
+            res = true;
         }
         }
         return res;
         return res;
+
+    }
+
+    public static void main(String[] args) {
+        DecimalFormat df = new DecimalFormat("#.00");
+        DecimalFormat df2 = new DecimalFormat("#0.00");
+        BigDecimal a = new BigDecimal(0.55);
+        BigDecimal b = new BigDecimal(11.55);
+        System.out.println(df.format(a));
+        System.out.println(df2.format(a));
+        System.out.println(df.format(b));
+        System.out.println(df2.format(b));
+
+        System.out.println("====a小于b====");
+        System.out.println(lt(new BigDecimal(1.1), new BigDecimal(1)) == false);
+        System.out.println(lt(new BigDecimal(1), new BigDecimal(1)) == false);
+        System.out.println(lt(new BigDecimal(0.9), new BigDecimal(1)) == true);
+
+        System.out.println("====a等于b====");
+        System.out.println(eq(new BigDecimal(1.1), new BigDecimal(1)) == false);
+        System.out.println(eq(new BigDecimal(1), new BigDecimal(1)) == true);
+        System.out.println(eq(new BigDecimal(0.9), new BigDecimal(1)) == false);
+
+        System.out.println("====a大于b====");
+        System.out.println(gt(new BigDecimal(1.1), new BigDecimal(1)) == true);
+        System.out.println(gt(new BigDecimal(1), new BigDecimal(1)) == false);
+        System.out.println(gt(new BigDecimal(0.9), new BigDecimal(1)) == false);
+
+        System.out.println("====a大于等于b====");
+        System.out.println(ge(new BigDecimal(1.1), new BigDecimal(1)) == true);
+        System.out.println(ge(new BigDecimal(1), new BigDecimal(1)) == true);
+        System.out.println(ge(new BigDecimal(0.9), new BigDecimal(1)) == false);
+
+        System.out.println("====a小于等于b====");
+        System.out.println(le(new BigDecimal(1.1), new BigDecimal(1)) == false);
+        System.out.println(le(new BigDecimal(1), new BigDecimal(1)) == true);
+        System.out.println(le(new BigDecimal(0.9), new BigDecimal(1)) == true);
+
     }
     }
 }
 }

+ 73 - 0
src/main/java/com/diagbot/util/EncrypDES.java

@@ -0,0 +1,73 @@
+package com.diagbot.util;
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.*;
+import javax.crypto.spec.DESKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+
+/**
+ * @ClassName org.diagbot.pub.utils.security.EncrypDES
+ * @Description TODO
+ * @Author fyeman
+ * @Date 2019/2/22/022 14:44
+ * @Version 1.0
+ **/
+public class EncrypDES {
+    //随机加密串
+    private String key = "AUYEJHHH2019";
+    // SecretKey 负责保存对称密钥
+    private SecretKey deskey;
+    // Cipher负责完成加密或解密工作
+    private Cipher c;
+    // 该字节数组负责保存加密的结果
+    private byte[] cipherByte;
+
+    public EncrypDES() throws Exception {
+        DESKeySpec desKey = new DESKeySpec(key.getBytes("utf-8"));
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+        // 生成密钥
+        deskey = keyFactory.generateSecret(desKey);
+        // 生成Cipher对象,指定其支持的DES算法
+        c = Cipher.getInstance("DES");
+    }
+
+    /**
+     * 对字符串加密
+     *
+     * @param str
+     * @return
+     * @throws InvalidKeyException
+     * @throws IllegalBlockSizeException
+     * @throws BadPaddingException
+     */
+    public String encrytor(String str) throws InvalidKeyException,
+            IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
+        // 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
+        c.init(Cipher.ENCRYPT_MODE, deskey);
+        byte[] src = str.getBytes("utf-8");
+        // 加密,结果保存进cipherByte
+        cipherByte = c.doFinal(src);
+        return Base64.encodeBase64String(cipherByte);
+    }
+
+    /**
+     * 对字符串解密
+     *
+     * @param str
+     * @return
+     * @throws InvalidKeyException
+     * @throws IllegalBlockSizeException
+     * @throws BadPaddingException
+     */
+    public String decryptor(String str) throws InvalidKeyException,
+            IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
+        byte[] buff = Base64.decodeBase64(str);
+        // 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
+        c.init(Cipher.DECRYPT_MODE, deskey);
+        cipherByte = c.doFinal(buff);
+        return new String(cipherByte, "utf-8");
+    }
+}
+

+ 18 - 0
src/main/java/com/diagbot/vo/AnalyzeApiVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @time: 2020/4/13 18:31
+ */
+@Data
+public class AnalyzeApiVO {
+
+    private String behospitalCode; // 病历id
+    private Long hospitalId; //医院ID
+    @ApiModelProperty(hidden = true)
+    private Boolean isTask = true; // 使用hospitalId传入的值
+}

+ 2 - 0
src/main/java/com/diagbot/vo/AnalyzeVO.java

@@ -14,4 +14,6 @@ public class AnalyzeVO {
     private String behospitalCode; // 病历id
     private String behospitalCode; // 病历id
     @ApiModelProperty(hidden = true)
     @ApiModelProperty(hidden = true)
     private Long hospitalId; //医院ID
     private Long hospitalId; //医院ID
+    @ApiModelProperty(hidden = true)
+    private Boolean isTask = false;
 }
 }

+ 19 - 5
src/main/java/com/diagbot/vo/BehospitalPageVO.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.Date;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -43,23 +44,36 @@ public class BehospitalPageVO extends Page implements Serializable {
     /**
     /**
      * 入院时间开始时间
      * 入院时间开始时间
      */
      */
-    private String behosDateStart;
-
+    private Date behosDateStart;
 
 
     /**
     /**
      * 入院时间结束时间
      * 入院时间结束时间
      */
      */
-    private String behosDateEnd;
+    private Date behosDateEnd;
 
 
     /**
     /**
      * 出院时间开始时间
      * 出院时间开始时间
      */
      */
-    private String leaveHosDateStart;
+    private Date leaveHosDateStart;
 
 
     /**
     /**
      * 出院时间结束时间
      * 出院时间结束时间
      */
      */
-    private String leaveHosDateEnd;
+    private Date leaveHosDateEnd;
 
 
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 住院科室名称
+     */
+    private String behDeptName;
+
+    /**
+     * 医生姓名
+     */
+    private String doctorName;
 
 
 }
 }

+ 23 - 0
src/main/java/com/diagbot/vo/QcresultFilterVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/4/17 16:21
+ */
+@Getter
+@Setter
+public class QcresultFilterVO extends FilterVO {
+    /**
+     * 等级
+     */
+    private String level;
+
+    /**
+     * 评分类型
+     */
+    private Integer gradeType;
+}

+ 36 - 0
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -7,6 +7,7 @@ import com.diagbot.dto.BehospitalInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.BehospitalInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
 import com.diagbot.facade.QcresultInfoFacade;
+import com.diagbot.vo.AnalyzeApiVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.AnalyzeVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.BehospitalPageVO;
 import com.diagbot.vo.GetDetailVO;
 import com.diagbot.vo.GetDetailVO;
@@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
 
 
 import java.util.Map;
 import java.util.Map;
 
 
@@ -73,10 +75,33 @@ public class BehospitalInfoController {
         return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
         return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
     }
     }
 
 
+    @ApiOperation(value = "评分[by:zhoutg]",
+            notes = "")
+    @PostMapping("/analyze_rpc")
+    @SysLogger("analyze_rpc")
+    @Transactional
+    @ApiIgnore
+    public RespDTO<AnalyzeDTO> analyze_rpc(@RequestBody AnalyzeVO analyzeVO) {
+        return RespDTO.onSuc(behospitalInfoFacade.analyze(analyzeVO));
+    }
+
+
+    @ApiOperation(value = "评分-对外api接口[by:zhoutg]",
+            notes = "")
+    @PostMapping("/analyze_api")
+    @SysLogger("analyze_api")
+    @Transactional
+//    @ApiIgnore
+    public RespDTO<Map<String, Object>> analyzeApi(@RequestBody AnalyzeApiVO analyzeApiVO) {
+        return RespDTO.onSuc(behospitalInfoFacade.analyzeApi(analyzeApiVO));
+    }
+
+
     @ApiOperation(value = "新增质控条目[by:zhoutg]",
     @ApiOperation(value = "新增质控条目[by:zhoutg]",
             notes = "")
             notes = "")
     @PostMapping("/addCase")
     @PostMapping("/addCase")
     @SysLogger("addCase")
     @SysLogger("addCase")
+    @Transactional
     public RespDTO<AnalyzeDTO> addCase(@RequestBody QcresultVO qcresultVO){
     public RespDTO<AnalyzeDTO> addCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(1);
         qcresultVO.setType(1);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
@@ -87,6 +112,7 @@ public class BehospitalInfoController {
                     "id:明细id,必填<br>")
                     "id:明细id,必填<br>")
     @PostMapping("/delCase")
     @PostMapping("/delCase")
     @SysLogger("delCase")
     @SysLogger("delCase")
+    @Transactional
     public RespDTO<AnalyzeDTO> delCase(@RequestBody QcresultVO qcresultVO){
     public RespDTO<AnalyzeDTO> delCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(2);
         qcresultVO.setType(2);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
@@ -96,8 +122,18 @@ public class BehospitalInfoController {
             notes = "")
             notes = "")
     @PostMapping("/updCase")
     @PostMapping("/updCase")
     @SysLogger("updCase")
     @SysLogger("updCase")
+    @Transactional
     public RespDTO<AnalyzeDTO> updCase(@RequestBody QcresultVO qcresultVO){
     public RespDTO<AnalyzeDTO> updCase(@RequestBody QcresultVO qcresultVO){
         qcresultVO.setType(3);
         qcresultVO.setType(3);
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
         return RespDTO.onSuc(qcresultInfoFacade.changeQcResult(qcresultVO));
     }
     }
+
+    @ApiOperation(value = "批量执行[by:zhoutg]",
+            notes = "")
+    @PostMapping("/execule")
+    @SysLogger("execule")
+    public RespDTO<Boolean> execule(){
+        behospitalInfoFacade.execute();
+        return RespDTO.onSuc(true);
+    }
 }
 }

+ 2 - 0
src/main/java/com/diagbot/web/QcCasesController.java

@@ -9,6 +9,7 @@ import com.diagbot.vo.QcCasesSaveVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -46,6 +47,7 @@ public class QcCasesController {
             notes = "")
             notes = "")
     @PostMapping("/saveQcCases")
     @PostMapping("/saveQcCases")
     @SysLogger("saveQcCases")
     @SysLogger("saveQcCases")
+    @Transactional
     public RespDTO<Boolean> saveQcCases(@RequestBody QcCasesSaveListVO qcCasesSaveVOList) {
     public RespDTO<Boolean> saveQcCases(@RequestBody QcCasesSaveListVO qcCasesSaveVOList) {
         return RespDTO.onSuc(qcCasesFacade.saveQcCases(qcCasesSaveVOList));
         return RespDTO.onSuc(qcCasesFacade.saveQcCases(qcCasesSaveVOList));
     }
     }

+ 2 - 0
src/main/java/com/diagbot/web/QcCasesEntryHospitalController.java

@@ -14,6 +14,7 @@ import com.diagbot.vo.QcCasesEntryUpdataVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -52,6 +53,7 @@ public class QcCasesEntryHospitalController {
                     "isReject:单项否决 1-单项否决 0-非</br>isUsed:是否启用 0-未启用 1-启用")
                     "isReject:单项否决 1-单项否决 0-非</br>isUsed:是否启用 0-未启用 1-启用")
     @PostMapping("/updataQcCasesEntry")
     @PostMapping("/updataQcCasesEntry")
     @SysLogger("updataQcCasesEntry")
     @SysLogger("updataQcCasesEntry")
+    @Transactional
     public RespDTO<Boolean> updataQcCasesEntry(@RequestBody @Valid QcCasesEntryUpdataVO qcCasesEntryUpdataVO) {
     public RespDTO<Boolean> updataQcCasesEntry(@RequestBody @Valid QcCasesEntryUpdataVO qcCasesEntryUpdataVO) {
         return RespDTO.onSuc(qcCasesEntryHospitalFacade.updataQcCasesEntrys(qcCasesEntryUpdataVO));
         return RespDTO.onSuc(qcCasesEntryHospitalFacade.updataQcCasesEntrys(qcCasesEntryUpdataVO));
     }
     }

+ 1 - 0
src/main/java/com/diagbot/web/QcModeController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/qc/mode")
 @RequestMapping("/qc/mode")
 @Api(value = "菜单相关API", tags = { "菜单相关API" })
 @Api(value = "菜单相关API", tags = { "菜单相关API" })
 @SuppressWarnings("unchecked")
 @SuppressWarnings("unchecked")
+@Deprecated
 public class QcModeController {
 public class QcModeController {
 
 
 //    @Autowired
 //    @Autowired

+ 8 - 0
src/main/resources/application-dev.yml

@@ -150,9 +150,17 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
 myhost: localhost
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
 oath.self.address: http://${myhost}:${server.port}
 qc.address: http://192.168.2.232:6009
 qc.address: http://192.168.2.232:6009
 
 
+# 加解密开关
+encrypt:
+  enable: true
+
 swagger:
 swagger:
   enable: true
   enable: true

+ 8 - 0
src/main/resources/application-local.yml

@@ -150,9 +150,17 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
 myhost: localhost
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
 oath.self.address: http://${myhost}:${server.port}
 qc.address: http://192.168.2.232:6009
 qc.address: http://192.168.2.232:6009
 
 
+# 加解密开关
+encrypt:
+  enable: true
+
 swagger:
 swagger:
   enable: true
   enable: true

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

@@ -150,9 +150,17 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
 myhost: localhost
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
 oath.self.address: http://${myhost}:${server.port}
-qc.address: http://192.168.2.232:6009
+qc.address: http://192.168.2.186:6009
+
+# 加解密开关
+encrypt:
+  enable: true
 
 
 swagger:
 swagger:
   enable: true
   enable: true

+ 8 - 0
src/main/resources/application-pro.yml

@@ -150,9 +150,17 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
 myhost: localhost
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
 oath.self.address: http://${myhost}:${server.port}
 qc.address: http://192.168.2.232:6009
 qc.address: http://192.168.2.232:6009
 
 
+# 加解密开关
+encrypt:
+  enable: true
+
 swagger:
 swagger:
   enable: true
   enable: true

+ 8 - 0
src/main/resources/application-test.yml

@@ -150,9 +150,17 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
 myhost: localhost
 myhost: localhost
 oath.self.address: http://${myhost}:${server.port}
 oath.self.address: http://${myhost}:${server.port}
 qc.address: http://192.168.2.232:6009
 qc.address: http://192.168.2.232:6009
 
 
+# 加解密开关
+encrypt:
+  enable: true
+
 swagger:
 swagger:
   enable: true
   enable: true

+ 145 - 23
src/main/resources/mapper/BehospitalInfoMapper.xml

@@ -32,44 +32,62 @@
     </resultMap>
     </resultMap>
 
 
     <select id="getPage" resultType="com.diagbot.dto.BehospitalInfoDTO">
     <select id="getPage" resultType="com.diagbot.dto.BehospitalInfoDTO">
-        select a.*, b.level, b.grade_type, b.score_res, b.gmt_create as grade_time from med_behospital_info a LEFT JOIN med_qcresult_info b
-        on a.behospital_code = b.behospital_code and b.is_deleted = 'N'
-        where a.is_deleted = 'N'
+        select * from (
+            select a.*, ifnull(b.level,'未评分') as `level`, b.grade_type, b.score_res, b.gmt_create as grade_time, c.age from med_behospital_info a
+            LEFT JOIN med_qcresult_info b
+            on a.behospital_code = b.behospital_code and b.is_deleted = 'N'
+            left join med_home_page c
+            on a.behospital_code = c.behospital_code and c.is_deleted = 'N'
+        ) t
+        where t.is_deleted = 'N'
+        <if test="behDeptName != null and behDeptName != ''">
+            and t.beh_dept_name like CONCAT('%',#{behDeptName},'%')
+        </if>
+        <if test="doctorName != null and doctorName != ''">
+            and t.doctor_name like CONCAT('%',#{doctorName},'%')
+        </if>
         <if test="name != null and name != ''">
         <if test="name != null and name != ''">
-            and a.name like CONCAT('%',#{name},'%')
+            and t.name like CONCAT('%',#{name},'%')
         </if>
         </if>
         <if test="fileCode != null and fileCode != ''">
         <if test="fileCode != null and fileCode != ''">
-            and a.file_code like CONCAT('%',#{fileCode},'%')
+            and t.file_code like CONCAT('%',#{fileCode},'%')
         </if>
         </if>
         <if test="hospitalId != null">
         <if test="hospitalId != null">
-            and a.hospital_id = #{hospitalId}
+            and t.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="behospitalCode != null and behospitalCode != ''">
         <if test="behospitalCode != null and behospitalCode != ''">
-            and a.behospitalCode like CONCAT('%',#{behospitalCode},'%')
+            and t.behospital_code like CONCAT('%',#{behospitalCode},'%')
+        </if>
+        <if test="behosDateStart != null">
+            <![CDATA[ and t.behospital_date >= #{behosDateStart}]]>
         </if>
         </if>
-        <if test="behosDateStart != null and behosDateStart != ''">
-            <![CDATA[ and a.behospital_date >= #{behosDateStart}]]>
+        <if test="behosDateEnd != null">
+            <![CDATA[ and t.behospital_date <= #{behosDateEnd}]]>
         </if>
         </if>
-        <if test="behosDateEnd != null and behosDateEnd != ''">
-            <![CDATA[ and a.behospital_date <= #{behosDateEnd}]]>
+        <if test="leaveHosDateStart != null">
+            <![CDATA[ and t.leave_hospital_date >= #{leaveHosDateStart}]]>
         </if>
         </if>
-        <if test="leaveHosDateStart != null and leaveHosDateStart != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{leaveHosDateStart}]]>
+        <if test="leaveHosDateEnd != null">
+            <![CDATA[ and t.leave_hospital_date <= #{leaveHosDateEnd}]]>
         </if>
         </if>
-        <if test="leaveHosDateEnd != null and leaveHosDateEnd != ''">
-            <![CDATA[ and a.leave_hospital_date <= #{leaveHosDateEnd}]]>
+        <if test="level != null and level != ''">
+            and t.level = #{level}
         </if>
         </if>
+        order by t.behospital_date desc
     </select>
     </select>
 
 
     <select id="getMsg" resultType="com.diagbot.dto.MsgDTO">
     <select id="getMsg" resultType="com.diagbot.dto.MsgDTO">
-        SELECT b.`name` model_name,c.score,c.msg,c.cases_entry_id,c.is_reject,c.id id
-        FROM `qc_cases_entry` a, qc_mode b, med_qcresult_detail c
-        where a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N'
+        SELECT b.`name` model_name,c.score,c.msg,c.cases_entry_id,c.is_reject,c.id id,
+        a.cases_id cases_id, d.score cases_score,b.id model_id, a.name standard_msg
+        FROM `qc_cases_entry` a, qc_mode b, med_qcresult_detail c, qc_cases_hospital d
+        where a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N' and d.is_deleted = 'N'
         and a.id = c.cases_entry_id
         and a.id = c.cases_entry_id
         and a.mode_id = b.id
         and a.mode_id = b.id
+        AND c.cases_id = d.cases_id
+        and c.hospital_id = d.hospital_id
         and c.hospital_id = #{hospitalId}
         and c.hospital_id = #{hospitalId}
         and c.behospital_code = #{behospitalCode}
         and c.behospital_code = #{behospitalCode}
-        order by a.order_no
+        order by b.order_no, a.order_no
     </select>
     </select>
 
 
 
 
@@ -101,7 +119,7 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         GROUP BY
         GROUP BY
         c.msg
         c.msg
@@ -127,7 +145,7 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         ) t2
         ) t2
         )
         )
@@ -165,7 +183,7 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         GROUP BY
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_id,
@@ -192,9 +210,113 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         ) t2
         ) t2
         )
         )
     </select>
     </select>
+
+    <!-- 缺陷排行列表 -->
+    <select id="resultStatistics2"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.ResultDetailDTO">
+        SELECT
+        c.msg as name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        c.msg
+        ORDER BY
+        count(*) DESC
+        <if test="limitCount != null and limitCount != ''">
+            limit 0,#{limitCount}
+        </if>
+    </select>
+
+    <!-- 各科室缺陷占比 -->
+    <select id="resultStatisticsByDept2"  parameterType="com.diagbot.vo.FilterVO" resultType="com.diagbot.dto.ResultDetailDTO">
+        SELECT
+        a.beh_dept_id,
+        a.beh_dept_name as name,
+        count(*) AS num
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+        GROUP BY
+        a.beh_dept_id,
+        a.beh_dept_name
+        ORDER BY
+        count(*) DESC
+    </select>
+
+    <!-- 缺陷总数查询-->
+    <select id="getTotleResultNum"  parameterType="com.diagbot.vo.FilterVO" resultType="int">
+        SELECT
+        count(*) AS totle
+        FROM
+        med_behospital_info a,
+        med_qcresult_info b,
+        med_qcresult_detail c
+        WHERE
+        a.behospital_code = b.behospital_code
+        AND a.hospital_id = b.hospital_id
+        AND b.behospital_code = c.behospital_code
+        AND b.hospital_id = c.hospital_id
+        AND a.is_deleted = 'N'
+        AND b.is_deleted = 'N'
+        AND c.is_deleted = 'N'
+        <if test="hospitalId != null and hospitalId != ''">
+            AND a.hospital_id = #{hospitalId}
+        </if>
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+    </select>
+
+
+    <select id="getNoGrade" resultMap="BaseResultMap">
+         select * from med_behospital_info a
+            where a.is_deleted = 'N'
+            and
+            not EXISTS (
+            SELECT
+                1
+            FROM
+                med_qcresult_info b
+            WHERE
+                b.is_deleted = 'N'
+            AND a.hospital_id = b.hospital_id
+            AND a.behospital_code = b.behospital_code
+            )
+    </select>
 </mapper>
 </mapper>

+ 8 - 4
src/main/resources/mapper/HomePageMapper.xml

@@ -143,7 +143,9 @@
         SELECT
         SELECT
         a.beh_dept_id as deptId,
         a.beh_dept_id as deptId,
         a.beh_dept_name as deptName,
         a.beh_dept_name as deptName,
-        round( sum( b.behospital_day_num )/ count(*), 2 ) AS averageValue
+        count(*) AS num,
+        round( sum( b.behospital_day_num )/ count(*), 2 ) AS averageValue,
+        round( sum( b.behospital_day_num ), 2 ) AS totleValue
         FROM
         FROM
         med_behospital_info a,
         med_behospital_info a,
         med_home_page b
         med_home_page b
@@ -156,7 +158,7 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         GROUP BY
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_id,
@@ -170,7 +172,9 @@
         SELECT
         SELECT
         a.beh_dept_id as deptId,
         a.beh_dept_id as deptId,
         a.beh_dept_name as deptName,
         a.beh_dept_name as deptName,
-        round( sum( b.total_fee )/ count(*), 2 ) AS averageValue
+        count(*) AS num,
+        round( sum( b.total_fee )/ count(*), 2 ) AS averageValue,
+        round( sum( b.total_fee ), 2 ) AS totleValue
         FROM
         FROM
         med_behospital_info a,
         med_behospital_info a,
         med_home_page b
         med_home_page b
@@ -183,7 +187,7 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
         </if>
         </if>
         GROUP BY
         GROUP BY
         a.beh_dept_id,
         a.beh_dept_id,

+ 11 - 8
src/main/resources/mapper/MedicalRecordMapper.xml

@@ -19,14 +19,17 @@
     </resultMap>
     </resultMap>
 
 
     <select id="getRecordContent"  resultType="com.diagbot.dto.RecordContentDTO">
     <select id="getRecordContent"  resultType="com.diagbot.dto.RecordContentDTO">
-        select t.*,c.content_blob, c.content_text from (
-            SELECT a.rec_id, a.rec_title, b.stand_model_name FROM `med_medical_record` a, qc_model_hospital b
-            where a.is_deleted = 'N'  and a.rec_title = b.hospital_model_name
-            and a.hospital_id = #{hospitalId}
-            and b.hospital_id = #{hospitalId}
-            and a.behospital_code = #{behospitalCode}
-            and b.stand_model_name is not null) t, med_medical_record_content c
-        where t.rec_id = c.rec_id and c.is_deleted = 'N'
+        select t1.rec_id, t1.rec_title, t2.name stand_model_name, t3.content_text, t3.html_text, t3.xml_text
+        from med_medical_record t1, qc_mode t2, med_medical_record_content t3
+        where
+             t1.is_deleted = 'N'
+        and t2.is_deleted = 'N'
+        and t3.is_deleted = 'N'
+        and t1.mode_id = t2.id
+        and t1.hospital_id = t3.hospital_id
+        and t1.rec_id = t3.rec_id
+        and t1.hospital_id = #{hospitalId}
+        and t1.behospital_code = #{behospitalCode}
     </select>
     </select>
 
 
 </mapper>
 </mapper>

+ 16 - 10
src/main/resources/mapper/QcCasesEntryHospitalMapper.xml

@@ -50,7 +50,7 @@
         <if test="isUsed != null ">
         <if test="isUsed != null ">
             AND b.is_used =#{isUsed}
             AND b.is_used =#{isUsed}
         </if>
         </if>
-        ORDER BY b.gmt_modified DESC
+        ORDER BY a.cases_id,a.order_no DESC
     </select>
     </select>
     <select id="findQcCasesEntryAll" resultType="com.diagbot.dto.QcCasesEntryFindDTO">
     <select id="findQcCasesEntryAll" resultType="com.diagbot.dto.QcCasesEntryFindDTO">
         SELECT DISTINCT
         SELECT DISTINCT
@@ -59,17 +59,23 @@
         b.mode_id AS modeId,
         b.mode_id AS modeId,
         b.id AS casesEntryId,
         b.id AS casesEntryId,
         a.hospital_id AS hospitalId,
         a.hospital_id AS hospitalId,
-        b.name AS entryName,
-        a.msg AS msg ,
-        a.score as score,
-        a.is_reject as isReject
+        b. NAME AS entryName,
+        a.msg AS msg,
+        a.score AS score,
+        a.is_reject AS isReject,
+        c.score AS caseScore
         FROM
         FROM
-        qc_cases_entry_hospital a
-        JOIN qc_cases_entry b
-        ON a.cases_entry_id = b.id
-        WHERE a.is_deleted = "N"
+        qc_cases_entry_hospital a,
+        qc_cases_entry b,
+        qc_cases_hospital c
+        WHERE
+        a.is_deleted = "N"
         AND b.is_deleted = "N"
         AND b.is_deleted = "N"
-        AND a.is_used =1
+        AND c.is_deleted = "N"
+        AND a.cases_entry_id = b.id
+        AND c.cases_id = b.cases_id
+        AND c.hospital_id = a.hospital_id
+        AND a.is_used = 1
         <if test="hospitalId != null and hospitalId != ''">
         <if test="hospitalId != null and hospitalId != ''">
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>

+ 15 - 21
src/main/resources/mapper/QcCasesEntryMapper.xml

@@ -22,30 +22,24 @@
 
 
     <select id="getQcCasesEntry" parameterType="com.diagbot.vo.AnalyzeVO" resultType="com.diagbot.dto.QcCasesEntryDTO">
     <select id="getQcCasesEntry" parameterType="com.diagbot.vo.AnalyzeVO" resultType="com.diagbot.dto.QcCasesEntryDTO">
         SELECT DISTINCT
         SELECT DISTINCT
-            t7.`code`,t7.mode_id, t6.msg
+        t4.`code`,
+        t4.mode_id,
+        t3.msg
         FROM
         FROM
-            med_medical_record t1,
-            qc_model_hospital t2,
-            med_record_type t3,
-            qc_type_doc t4,
-            qc_type_cases_entry t5,
-            qc_cases_entry_hospital t6,
-            qc_cases_entry t7
+        med_behospital_info t1,
+        qc_type_cases_entry t2,
+        qc_cases_entry_hospital t3,
+        qc_cases_entry t4
         WHERE
         WHERE
-            t1.hospital_id = t2.hospital_id
-        AND t2.stand_model_name = '入院记录'
-        AND t2.hospital_model_name = t1.rec_title
-        AND t3.type_name = t2.hospital_model_name
-        AND t3.hospital_id = t4.hospital_id
-        AND t3.type_id = t4.hospital_type_id
+        t1.qc_type_id = t2.type_id
+        AND t2.case_entry_id = t3.cases_entry_id
+        AND t1.hospital_id = t3.hospital_id
+        AND t3.cases_entry_id = t4.id
+        AND t3.is_used = 1
+        AND t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t4.is_deleted = 'N'
         AND t4.is_deleted = 'N'
-        AND t5.is_deleted = 'N'
-        AND t6.is_deleted = 'N'
-        AND t7.is_deleted = 'N'
-        AND t4.type_id = t5.type_id
-        AND t5.case_entry_id = t6.cases_entry_id
-        AND t6.cases_entry_id = t7.id
-        AND t6.is_used = 1
         <if test="hospitalId != null and hospitalId != ''">
         <if test="hospitalId != null and hospitalId != ''">
             AND t1.hospital_id = #{hospitalId}
             AND t1.hospital_id = #{hospitalId}
         </if>
         </if>

+ 19 - 0
src/main/resources/mapper/QcCasesEntryPagedataMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.QcCasesEntryPagedataMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.QcCasesEntryPagedata">
+        <id column="id" property="id" />
+        <result column="cases_entry_id" property="casesEntryId" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="page_key" property="pageKey" />
+        <result column="remark" property="remark" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+    </resultMap>
+
+</mapper>

+ 9 - 3
src/main/resources/mapper/QcresultInfoMapper.xml

@@ -19,9 +19,9 @@
     </resultMap>
     </resultMap>
 
 
     <!-- 缺陷排行列表 -->
     <!-- 缺陷排行列表 -->
-    <select id="getQcresultSelectively"  parameterType="com.diagbot.vo.FilterVO" resultMap="BaseResultMap">
+    <select id="getQcresultSelectively"  parameterType="com.diagbot.vo.QcresultFilterVO" resultType="int">
         SELECT
         SELECT
-        b.*
+        count(1)
         FROM
         FROM
         med_behospital_info a,
         med_behospital_info a,
         med_qcresult_info b
         med_qcresult_info b
@@ -34,7 +34,13 @@
             AND a.hospital_id = #{hospitalId}
             AND a.hospital_id = #{hospitalId}
         </if>
         </if>
         <if test="startDate != null and startDate != ''">
         <if test="startDate != null and startDate != ''">
-            <![CDATA[ and a.leave_hospital_date >= #{startDate}]]>
+            <![CDATA[ and a.behospital_date >= #{startDate}]]>
+        </if>
+        <if test="gradeType != null and gradeType != ''">
+            AND b.grade_type = #{gradeType}
+        </if>
+        <if test="level != null and level != ''">
+            AND b.level = #{level}
         </if>
         </if>
     </select>
     </select>