Browse Source

Merge branch 'develop' into dev/mrman20200117_init

wangfeng 5 years ago
parent
commit
2543b38224
46 changed files with 1807 additions and 34 deletions
  1. 7 1
      config-server/src/main/resources/shared/prec-service-dev.yml
  2. 7 0
      config-server/src/main/resources/shared/prec-service-local.yml
  3. 7 1
      config-server/src/main/resources/shared/prec-service-pre.yml
  4. 7 1
      config-server/src/main/resources/shared/prec-service-pro.yml
  5. 7 1
      config-server/src/main/resources/shared/prec-service-test.yml
  6. 34 0
      docs/030.20200224预问诊交互方式改成QA/init_prec.sql
  7. 1043 0
      docs/030.20200224预问诊交互方式改成QA/init_user.sql
  8. 5 0
      gateway-service/pom.xml
  9. 2 0
      gateway-service/src/main/java/com/diagbot/config/swagger/SwaggerProvider.java
  10. 2 0
      gateway-service/src/main/java/com/diagbot/handler/SwaggerHandler.java
  11. 7 7
      pom.xml
  12. 1 0
      prec-service/src/main/java/com/diagbot/dto/QuestionDTO.java
  13. 5 0
      prec-service/src/main/java/com/diagbot/entity/QuestionDetail.java
  14. 5 0
      prec-service/src/main/java/com/diagbot/entity/QuestionInfo.java
  15. 234 0
      prec-service/src/main/java/com/diagbot/entity/Statistical.java
  16. 61 0
      prec-service/src/main/java/com/diagbot/facade/StatisticalFacade.java
  17. 16 0
      prec-service/src/main/java/com/diagbot/mapper/StatisticalMapper.java
  18. 9 0
      prec-service/src/main/java/com/diagbot/rabbit/MyProcessor.java
  19. 26 0
      prec-service/src/main/java/com/diagbot/rabbit/MyReceiver.java
  20. 9 0
      prec-service/src/main/java/com/diagbot/rabbit/MySender.java
  21. 16 0
      prec-service/src/main/java/com/diagbot/service/StatisticalService.java
  22. 20 0
      prec-service/src/main/java/com/diagbot/service/impl/StatisticalServiceImpl.java
  23. 49 0
      prec-service/src/main/java/com/diagbot/vo/StatisticalVO.java
  24. 46 0
      prec-service/src/main/java/com/diagbot/vo/Taggeds.java
  25. 0 2
      prec-service/src/main/java/com/diagbot/web/DisclaimerInformationController.java
  26. 4 4
      prec-service/src/main/java/com/diagbot/web/InquiryInfoController.java
  27. 0 1
      prec-service/src/main/java/com/diagbot/web/ModuleInfoController.java
  28. 0 1
      prec-service/src/main/java/com/diagbot/web/PatientInfoController.java
  29. 0 1
      prec-service/src/main/java/com/diagbot/web/QuestionInfoController.java
  30. 0 1
      prec-service/src/main/java/com/diagbot/web/QuestionUsualController.java
  31. 0 1
      prec-service/src/main/java/com/diagbot/web/RetrievalController.java
  32. 55 0
      prec-service/src/main/java/com/diagbot/web/StatisticalController.java
  33. 0 1
      prec-service/src/main/java/com/diagbot/web/SysSetController.java
  34. 3 2
      prec-service/src/main/resources/mapper/QuestionDetailMapper.xml
  35. 1 0
      prec-service/src/main/resources/mapper/QuestionInfoMapper.xml
  36. 25 0
      prec-service/src/main/resources/mapper/StatisticalMapper.xml
  37. 1 0
      precman-service/src/main/java/com/diagbot/dto/QuestionDTO.java
  38. 5 0
      precman-service/src/main/java/com/diagbot/entity/QuestionDetail.java
  39. 5 0
      precman-service/src/main/java/com/diagbot/entity/QuestionInfo.java
  40. 1 0
      precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java
  41. 41 0
      precman-service/src/main/java/com/diagbot/facade/QuestionFacade.java
  42. 1 0
      precman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java
  43. 15 0
      precman-service/src/main/java/com/diagbot/vo/SubQuestionVO.java
  44. 18 1
      precman-service/src/main/java/com/diagbot/web/QuestionInfoController.java
  45. 3 8
      precman-service/src/main/resources/mapper/QuestionDetailMapper.xml
  46. 4 0
      precman-service/src/main/resources/mapper/QuestionInfoMapper.xml

+ 7 - 1
config-server/src/main/resources/shared/prec-service-dev.yml

@@ -58,7 +58,13 @@ spring:
   #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
         outputBiLog:
           destination: myBiLog
-
+        #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        outputStatisti:
+          destination: myStatisti
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        inputStatisti:
+          destination: myStatisti
+          group: statistiReceiveGroup
   #mq
   rabbitmq:
     host: 192.168.2.236

+ 7 - 0
config-server/src/main/resources/shared/prec-service-local.yml

@@ -58,6 +58,13 @@ spring:
   #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
         outputBiLog:
           destination: myBiLog
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        outputStatisti:
+          destination: myStatisti
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        inputStatisti:
+          destination: myStatisti
+          group: statistiReceiveGroup
 
   #mq
   rabbitmq:

+ 7 - 1
config-server/src/main/resources/shared/prec-service-pre.yml

@@ -58,7 +58,13 @@ spring:
   #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
         outputBiLog:
           destination: myBiLog
-
+        #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        outputStatisti:
+          destination: myStatisti
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        inputStatisti:
+          destination: myStatisti
+          group: statistiReceiveGroup
   #mq
   rabbitmq:
     host: 192.168.2.121

+ 7 - 1
config-server/src/main/resources/shared/prec-service-pro.yml

@@ -58,7 +58,13 @@ spring:
   #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
         outputBiLog:
           destination: myBiLog
-
+        #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        outputStatisti:
+          destination: myStatisti
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        inputStatisti:
+          destination: myStatisti
+          group: statistiReceiveGroup
   #mq
   rabbitmq:
     host: 192.168.2.122

+ 7 - 1
config-server/src/main/resources/shared/prec-service-test.yml

@@ -58,7 +58,13 @@ spring:
   #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
         outputBiLog:
           destination: myBiLog
-
+        #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        outputStatisti:
+          destination: myStatisti
+          #          contentType: text/plain      # 实体 json string 在传递的类型装换 查看 http://docs.spring
+        inputStatisti:
+          destination: myStatisti
+          group: statistiReceiveGroup
   #mq
   rabbitmq:
     host: 192.168.2.241

+ 34 - 0
docs/030.20200224预问诊交互方式改成QA/init_prec.sql

@@ -0,0 +1,34 @@
+use `sys-prec`;
+
+alter table `prec_question_info` add  column `exclusion_detail` varchar(100) DEFAULT '' COMMENT '互斥选项(如1,2|3,4(1,2互斥,3,4互斥))' AFTER `required`;
+ALTER TABLE `prec_question_info` MODIFY COLUMN `control_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '控件类型(0:无类型,默认值 1:单选 2:多选 3:多行输入,生命体征 4:上传图片 5:文本域,自行服药 6:文本框 7:数字文本框 8:多选伴无,9:时间带单位, 10:温度拨盘)';
+
+INSERT INTO `prec_dictionary_info` (`is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `group_type`, `name`, `val`, `return_type`, `order_no`, `remark`) VALUES ('N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', '温度拨盘', '10', '1', '99', '单标签组件类型');
+
+
+DROP TABLE IF EXISTS `prec_statistical`;
+CREATE TABLE `prec_statistical` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT,
+  `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则表示纪录未修改',
+  `hospital_id` bigint(20) DEFAULT NULL COMMENT '医院id',
+  `hospital_dept_id` bigint(20) DEFAULT NULL COMMENT '部门id',
+  `doctor_id` bigint(20) DEFAULT NULL COMMENT '医生id',
+  `patient_id` bigint(20) DEFAULT NULL COMMENT '病人id',
+  `inquiry_code` varchar(255) DEFAULT NULL COMMENT '就诊号',
+  `label_id` int(10) DEFAULT NULL COMMENT '标签ID',
+  `label_name` varchar(100) DEFAULT NULL COMMENT '标签名',
+  `operation_type` varchar(100) DEFAULT NULL COMMENT '操作类型(1:常见标签点击, 2:搜索标签点击)',
+  `operation_num` int(5) DEFAULT NULL COMMENT '操作次数',
+  `status` int(5) DEFAULT '0' COMMENT '是否存在标签库(0:默认有,1:无)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据埋点统计表';
+
+-- 加入关联子问题
+ALTER TABLE `prec_question_detail` ADD  COLUMN  `sub_question` varchar(100) NOT NULL DEFAULT '' COMMENT '关联子问题(questionId多个逗号隔开)' AFTER `exclusion`;
+
+UPDATE `prec_dictionary_info` SET `id`='16', `is_deleted`='N', `gmt_create`='1970-01-01 12:00:00', `gmt_modified`='1970-01-01 12:00:00', `creator`='0', `modifier`='0', `group_type`='2', `name`='多选伴随', `val`='8', `return_type`='1', `order_no`='80', `remark`='单标签组件类型' WHERE (`id`='16');
+

File diff suppressed because it is too large
+ 1043 - 0
docs/030.20200224预问诊交互方式改成QA/init_user.sql


+ 5 - 0
gateway-service/pom.xml

@@ -70,6 +70,11 @@
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger-ui</artifactId>
         </dependency>
+        <!--knife4j-->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-ui</artifactId>
+        </dependency>
         <!-- 开启feign-->
         <!--<dependency>-->
             <!--<groupId>org.springframework.cloud</groupId>-->

+ 2 - 0
gateway-service/src/main/java/com/diagbot/config/swagger/SwaggerProvider.java

@@ -1,6 +1,7 @@
 package com.diagbot.config.swagger;
 
 import lombok.AllArgsConstructor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.cloud.gateway.config.GatewayProperties;
 import org.springframework.cloud.gateway.route.RouteLocator;
 import org.springframework.cloud.gateway.support.NameUtils;
@@ -20,6 +21,7 @@ import java.util.List;
 @Component
 @Primary
 @AllArgsConstructor
+@ConditionalOnProperty(prefix = "swagger", value = { "enable" }, havingValue = "true")
 public class SwaggerProvider implements SwaggerResourcesProvider {
     public static final String API_URI = "/v2/api-docs";
     private final RouteLocator routeLocator;

+ 2 - 0
gateway-service/src/main/java/com/diagbot/handler/SwaggerHandler.java

@@ -1,6 +1,7 @@
 package com.diagbot.handler;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -17,6 +18,7 @@ import java.util.Optional;
 
 @RestController
 @RequestMapping("/swagger-resources")
+@ConditionalOnProperty(prefix = "swagger", value = { "enable" }, havingValue = "true")
 public class SwaggerHandler {
     @Autowired(required = false)
     private SecurityConfiguration securityConfiguration;

+ 7 - 7
pom.xml

@@ -55,7 +55,7 @@
         <mybatis-spring-boot.version>2.1.1</mybatis-spring-boot.version>
         <druid.version>1.1.21</druid.version>
         <swagger.version>2.9.2</swagger.version>
-        <!--<swagger-bootstrap.version>1.9.1</swagger-bootstrap.version>-->
+        <knife4j.version>2.0.2</knife4j.version>
         <logstash.version>5.2</logstash.version>
         <poi.version>4.1.1</poi.version>
         <aggregator.version>1.1.0</aggregator.version>
@@ -125,12 +125,12 @@
                 <artifactId>springfox-swagger-ui</artifactId>
                 <version>${swagger.version}</version>
             </dependency>
-            <!--<dependency>-->
-                <!--<groupId>com.github.xiaoymin</groupId>-->
-                <!--<artifactId>swagger-bootstrap-ui</artifactId>-->
-                <!--<version>${swagger-bootstrap.version}</version>-->
-            <!--</dependency>-->
-
+            <!--knife4j-->
+            <dependency>
+                <groupId>com.github.xiaoymin</groupId>
+                <artifactId>knife4j-spring-ui</artifactId>
+                <version>${knife4j.version}</version>
+            </dependency>
             <!--<dependency>-->
                 <!--<groupId>de.codecentric</groupId>-->
                 <!--<artifactId>spring-boot-admin-starter-client</artifactId>-->

+ 1 - 0
prec-service/src/main/java/com/diagbot/dto/QuestionDTO.java

@@ -29,6 +29,7 @@ public class QuestionDTO {
     private String description; // 客户端界面描述
     private Integer specFlag;//特殊标记(0:没有标记,1:拼接到主诉)
     private Integer required;//必填(0:不必填,1:必填)
+    private String exclusionDetail; //互斥选项(如1,2|3,4(1,2互斥,3,4互斥))
     private String explains;//详细阐述
     private Integer exclusionType; //互斥类型
     private List<QuestionDetail> questionDetailList = new ArrayList<>(); //标签明细表

+ 5 - 0
prec-service/src/main/java/com/diagbot/entity/QuestionDetail.java

@@ -52,6 +52,11 @@ public class QuestionDetail implements Serializable {
      */
     private Integer exclusion;
 
+    /**
+     * 关联子问题(questionId多个逗号隔开)
+     */
+    private String subQuestion;
+
     /**
      * 备注
      */

+ 5 - 0
prec-service/src/main/java/com/diagbot/entity/QuestionInfo.java

@@ -112,6 +112,11 @@ public class QuestionInfo implements Serializable {
      */
     private String flag;
 
+    /**
+     * 互斥选项(如1,2|3,4(1,2互斥,3,4互斥))
+     */
+    private String exclusionDetail;
+
     /**
      * 备注
      */

+ 234 - 0
prec-service/src/main/java/com/diagbot/entity/Statistical.java

@@ -0,0 +1,234 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 数据埋点统计表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-02-24
+ */
+@TableName("prec_statistical")
+public class Statistical implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院id
+     */
+    private Long hospitalId;
+
+    /**
+     * 部门id
+     */
+    private Long hospitalDeptId;
+
+    /**
+     * 医生id
+     */
+    private Long doctorId;
+
+    /**
+     * 病人id
+     */
+    private Long patientId;
+
+    /**
+     * 就诊号
+     */
+    private String inquiryCode;
+
+    /**
+     * 标签ID
+     */
+    private Integer labelId;
+
+    /**
+     * 标签名
+     */
+    private String labelName;
+
+    /**
+     * 操作类型
+     */
+    private String operationType;
+
+    /**
+     * 操作次数
+     */
+    private Integer operationNum;
+
+    /**
+     * 是否存在标签库(0:默认有,1:无)
+     */
+    private Integer status;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public Long getHospitalDeptId() {
+        return hospitalDeptId;
+    }
+
+    public void setHospitalDeptId(Long hospitalDeptId) {
+        this.hospitalDeptId = hospitalDeptId;
+    }
+    public Long getDoctorId() {
+        return doctorId;
+    }
+
+    public void setDoctorId(Long doctorId) {
+        this.doctorId = doctorId;
+    }
+    public Long getPatientId() {
+        return patientId;
+    }
+
+    public void setPatientId(Long patientId) {
+        this.patientId = patientId;
+    }
+    public String getInquiryCode() {
+        return inquiryCode;
+    }
+
+    public void setInquiryCode(String inquiryCode) {
+        this.inquiryCode = inquiryCode;
+    }
+    public Integer getLabelId() {
+        return labelId;
+    }
+
+    public void setLabelId(Integer labelId) {
+        this.labelId = labelId;
+    }
+    public String getLabelName() {
+        return labelName;
+    }
+
+    public void setLabelName(String labelName) {
+        this.labelName = labelName;
+    }
+    public String getOperationType() {
+        return operationType;
+    }
+
+    public void setOperationType(String operationType) {
+        this.operationType = operationType;
+    }
+    public Integer getOperationNum() {
+        return operationNum;
+    }
+
+    public void setOperationNum(Integer operationNum) {
+        this.operationNum = operationNum;
+    }
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    @Override
+    public String toString() {
+        return "Statistical{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", hospitalId=" + hospitalId +
+            ", hospitalDeptId=" + hospitalDeptId +
+            ", doctorId=" + doctorId +
+            ", patientId=" + patientId +
+            ", inquiryCode=" + inquiryCode +
+            ", labelId=" + labelId +
+            ", labelName=" + labelName +
+            ", operationType=" + operationType +
+            ", operationNum=" + operationNum +
+            ", status=" + status +
+        "}";
+    }
+}

+ 61 - 0
prec-service/src/main/java/com/diagbot/facade/StatisticalFacade.java

@@ -0,0 +1,61 @@
+package com.diagbot.facade;
+
+import com.diagbot.entity.Statistical;
+import com.diagbot.service.impl.StatisticalServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.StatisticalVO;
+import com.diagbot.vo.Taggeds;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-02-24 14:34
+ */
+@Component
+public class StatisticalFacade extends StatisticalServiceImpl {
+
+    @Autowired
+    @Qualifier("statisticalServiceImpl")
+    private StatisticalServiceImpl statisticalService;
+
+    /**
+     * 批量保存
+     *
+     * @param statisticalVO
+     * @return
+     */
+    public boolean saveStatistical(StatisticalVO statisticalVO) {
+        boolean res = false;
+        if (null != statisticalVO
+                && ListUtil.isNotEmpty(statisticalVO.getTaggeds())) {
+            List<Statistical> buriedList = new ArrayList<Statistical>();
+            for (Taggeds taggedsNew : statisticalVO.getTaggeds()) {
+                Statistical buriedData = new Statistical();
+                buriedData.setCreator(statisticalVO.getDoctorId().toString());
+                buriedData.setDoctorId(statisticalVO.getDoctorId());
+                buriedData.setGmtCreate(DateUtil.now());
+                buriedData.setHospitalDeptId(statisticalVO.getHospitalDeptId());
+                buriedData.setHospitalId(statisticalVO.getHospitalId());
+                buriedData.setInquiryCode(statisticalVO.getInquiryCode());
+                buriedData.setPatientId(statisticalVO.getPatientId());
+                buriedData.setLabelId(taggedsNew.getLabelId());
+                buriedData.setLabelName(taggedsNew.getLabelName());
+                buriedData.setOperationNum(taggedsNew.getOperationNum());
+                buriedData.setOperationType(taggedsNew.getOperationType());
+                buriedData.setStatus(taggedsNew.getStatus());
+                buriedList.add(buriedData);
+            }
+
+            res = statisticalService.saveBatch(buriedList);
+        }
+        return res;
+    }
+
+}

+ 16 - 0
prec-service/src/main/java/com/diagbot/mapper/StatisticalMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.Statistical;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 数据埋点统计表 Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-02-24
+ */
+public interface StatisticalMapper extends BaseMapper<Statistical> {
+
+}

+ 9 - 0
prec-service/src/main/java/com/diagbot/rabbit/MyProcessor.java

@@ -29,4 +29,13 @@ public interface MyProcessor {
 
     @Output(OUTPUT_BI_LOG)
     MessageChannel outputBiLog();
+
+    String INPUT_STATISTI = "inputStatisti";
+    String OUTPUT_STATISTI = "outputStatisti";
+
+    @Input(INPUT_STATISTI)
+    SubscribableChannel inputStatisti();
+
+    @Output(OUTPUT_STATISTI)
+    MessageChannel outputStatisti();
 }

+ 26 - 0
prec-service/src/main/java/com/diagbot/rabbit/MyReceiver.java

@@ -0,0 +1,26 @@
+package com.diagbot.rabbit;
+
+import com.diagbot.facade.StatisticalFacade;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.vo.StatisticalVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.stream.annotation.EnableBinding;
+import org.springframework.cloud.stream.annotation.StreamListener;
+
+/**
+ * @Description: 消费者
+ * @author: gaodm
+ * @time: 2018/8/29 14:02
+ */
+@EnableBinding({ MyProcessor.class })
+public class MyReceiver {
+    @Autowired
+    StatisticalFacade statisticalFacade;
+
+    @StreamListener(MyProcessor.INPUT_STATISTI)
+    public void inputPoint(String message) {
+        System.out.println("Received <" + "数据埋点数据" + ">");
+        StatisticalVO statisticalVO = GsonUtil.toObject(message, StatisticalVO.class);
+        statisticalFacade.saveStatistical(statisticalVO);
+    }
+}

+ 9 - 0
prec-service/src/main/java/com/diagbot/rabbit/MySender.java

@@ -3,6 +3,7 @@ package com.diagbot.rabbit;
 import com.diagbot.biz.log.entity.BiRecord;
 import com.diagbot.biz.log.entity.SysLog;
 import com.diagbot.util.GsonUtil;
+import com.diagbot.vo.StatisticalVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.cloud.stream.annotation.EnableBinding;
@@ -33,4 +34,12 @@ public class MySender {
     public void outputBiLogSend(BiRecord biRecord) {
         outputBiLog.send(MessageBuilder.withPayload(GsonUtil.toJson(biRecord)).build());
     }
+
+    @Autowired
+    @Qualifier("outputStatisti")
+    MessageChannel outputStatisti;
+
+    public void outputStatistiSend(StatisticalVO statisticalVO) {
+        outputStatisti.send(MessageBuilder.withPayload(GsonUtil.toJson(statisticalVO)).build());
+    }
 }

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.Statistical;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 数据埋点统计表 服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-02-24
+ */
+public interface StatisticalService extends IService<Statistical> {
+
+}

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.Statistical;
+import com.diagbot.mapper.StatisticalMapper;
+import com.diagbot.service.StatisticalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 数据埋点统计表 服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-02-24
+ */
+@Service
+public class StatisticalServiceImpl extends ServiceImpl<StatisticalMapper, Statistical> implements StatisticalService {
+
+}

+ 49 - 0
prec-service/src/main/java/com/diagbot/vo/StatisticalVO.java

@@ -0,0 +1,49 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-02-24 14:30
+ */
+@Getter
+@Setter
+public class StatisticalVO {
+    /**
+     * 医院id
+     */
+    @NotNull(message = "请输入医院id")
+    private Long hospitalId;
+
+    /**
+     * 部门id
+     */
+    //@NotNull(message = "请输入部门id")
+    private Long hospitalDeptId;
+
+    /**
+     * 医生id
+     */
+    //@NotNull(message = "请输入医生id")
+    private Long doctorId;
+
+    /**
+     * 病人id
+     */
+    @NotNull(message = "请输入病人id")
+    private Long patientId;
+
+    /**
+     * 就诊号
+     */
+    //@NotBlank(message = "请输入就诊号")
+    private String inquiryCode;
+
+    private List<Taggeds> taggeds;
+}

+ 46 - 0
prec-service/src/main/java/com/diagbot/vo/Taggeds.java

@@ -0,0 +1,46 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 
+ * @author wangfeng
+ * @Description: TODO
+ * @date 2018年11月23日 上午10:35:30
+ */
+@Getter
+@Setter
+public class Taggeds {
+
+	/**
+     * 标签ID
+     */
+	//@NotNull(message = "请输入标签ID")
+    private Integer labelId;
+
+    /**
+     * 标签名
+     */
+    @NotBlank(message = "请输入标签名")
+    private String labelName;
+
+    /**
+     * 操作类型(1:常见标签点击, 2:搜索标签点击)
+     */
+    @NotBlank(message = "请输入操作类型")
+    private String operationType;
+
+    /**
+     * 操作次数
+     */
+    private Integer operationNum;
+    
+    /**
+     * 是否存在标签库
+     */
+    private Integer status;
+}

+ 0 - 2
prec-service/src/main/java/com/diagbot/web/DisclaimerInformationController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.RespDTO;
@@ -14,7 +13,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
-
 /**
  * @author wangfeng
  * @Description: 智能预问诊提示 前端控制器

+ 4 - 4
prec-service/src/main/java/com/diagbot/web/InquiryInfoController.java

@@ -53,7 +53,7 @@ public class InquiryInfoController {
         return RespDTO.onSuc(inquiryInfoFacade.recordCheck(recordCheckVO));
     }
 
-    @ApiOperation(value = "历史病历列表[by:rengb]")
+    @ApiOperation(value = "历史病历列表(医院对接用)[by:rengb]")
     @PostMapping("/hisInquirys")
     @SysLogger("hisInquirys")
     public RespDTO<List<HisInquiryDTO>> hisInquirys(@Valid @RequestBody HisInquirysVO hisInquirysVO) {
@@ -67,14 +67,14 @@ public class InquiryInfoController {
         return RespDTO.onSuc(inquiryInfoFacade.hisInquirysForIcss(hisInquirysVO));
     }
 
-    @ApiOperation(value = "病历详情[by:rengb]")
+    @ApiOperation(value = "病历详情(医院对接用)[by:rengb]")
     @PostMapping("/getInquiryDetail")
     @SysLogger("getInquiryDetail")
     public RespDTO<GetInquiryDetailDTO> getInquiryDetail(@Valid @RequestBody GetInquiryDetailVO getInquiryDetailVO) {
         return RespDTO.onSuc(inquiryInfoFacade.getInquiryDetail(getInquiryDetailVO));
     }
 
-    @ApiOperation(value = "病历引用[by:rengb]")
+    @ApiOperation(value = "病历引用(医院对接用)[by:rengb]")
     @PostMapping("/inquiryQuote")
     @SysLogger("inquiryQuote")
     @Transactional
@@ -82,7 +82,7 @@ public class InquiryInfoController {
         return RespDTO.onSuc(inquiryInfoFacade.inquiryQuote(inquiryQuoteVO));
     }
 
-    @ApiOperation(value = "icss引用预问诊[by:rengb]")
+    @ApiOperation(value = "icss引用预问诊(ICSS调用)[by:rengb]")
     @PostMapping("/inquiryQuoteForIcss")
     @SysLogger("inquiryQuoteForIcss")
     @Transactional

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/ModuleInfoController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.dto.ModuleInfoDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ModuleFacade;

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/PatientInfoController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import java.util.List;
 
 import javax.validation.Valid;

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/QuestionInfoController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.dto.QuestionDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.QuestionFacade;

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/QuestionUsualController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.QuestionUsualDTO;
 import com.diagbot.dto.RespDTO;

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/RetrievalController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;

+ 55 - 0
prec-service/src/main/java/com/diagbot/web/StatisticalController.java

@@ -0,0 +1,55 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.StatisticalFacade;
+import com.diagbot.rabbit.MySender;
+import com.diagbot.vo.StatisticalVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 数据埋点统计表 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-02-24
+ */
+@RestController
+@RequestMapping("/statistical")
+@Api(value = "标签数据埋点统计API[by:wangfeng]", tags = { "WF——标签数据埋点统计API" })
+@SuppressWarnings("unchecked")
+public class StatisticalController {
+    @Autowired
+    MySender mySender;
+    @Autowired
+    StatisticalFacade statisticalFacade;
+
+
+    @ApiOperation(value = "标签数据埋点统计异步保存[by:wangfeng]", notes = "标签数据埋点统计异步保存")
+    @PostMapping("/saveBuriedSome")
+    @SysLogger("saveBuriedSome")
+    @Transactional
+    public RespDTO<Boolean> saveBuriedSomeStatisticals(@Valid @RequestBody StatisticalVO statisticalVO) {
+        mySender.outputStatistiSend(statisticalVO);
+        return RespDTO.onSuc(true);
+    }
+
+    @ApiOperation(value = "标签数据埋点统计保存[by:wangfeng]", notes = "标签数据埋点统计保存")
+    @PostMapping("/saveStatisticals")
+    @SysLogger("saveStatisticals")
+    @Transactional
+    public RespDTO<Boolean> saveStatisticals(@Valid @RequestBody StatisticalVO statisticalVO) {
+        boolean res =  statisticalFacade.saveStatistical(statisticalVO);
+        return RespDTO.onSuc(res);
+    }
+}

+ 0 - 1
prec-service/src/main/java/com/diagbot/web/SysSetController.java

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.SysHospitalDTO;

+ 3 - 2
prec-service/src/main/resources/mapper/QuestionDetailMapper.xml

@@ -5,11 +5,12 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.QuestionDetail">
         <id column="id" property="id" />
-        <result column="name" property="name" />
         <result column="question_id" property="questionId" />
-        <result column="order_no" property="orderNo" />
         <result column="description" property="description" />
+        <result column="name" property="name" />
+        <result column="order_no" property="orderNo" />
         <result column="exclusion" property="exclusion" />
+        <result column="sub_question" property="subQuestion" />
         <result column="remark" property="remark" />
     </resultMap>
 

+ 1 - 0
prec-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -20,6 +20,7 @@
         <result column="url" property="url" />
         <result column="spec_flag" property="specFlag" />
         <result column="required" property="required" />
+        <result column="exclusion_detail" property="exclusionDetail" />
         <result column="explains" property="explains" />
         <result column="remark" property="remark" />
     </resultMap>

+ 25 - 0
prec-service/src/main/resources/mapper/StatisticalMapper.xml

@@ -0,0 +1,25 @@
+<?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.StatisticalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.Statistical">
+        <id column="id" property="id" />
+        <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" />
+        <result column="hospital_id" property="hospitalId" />
+        <result column="hospital_dept_id" property="hospitalDeptId" />
+        <result column="doctor_id" property="doctorId" />
+        <result column="patient_id" property="patientId" />
+        <result column="inquiry_code" property="inquiryCode" />
+        <result column="label_id" property="labelId" />
+        <result column="label_name" property="labelName" />
+        <result column="operation_type" property="operationType" />
+        <result column="operation_num" property="operationNum" />
+        <result column="status" property="status" />
+    </resultMap>
+
+</mapper>

+ 1 - 0
precman-service/src/main/java/com/diagbot/dto/QuestionDTO.java

@@ -29,6 +29,7 @@ public class QuestionDTO {
     private String url;
     private Integer specFlag;//特殊标记(0:没有标记,1:拼接到主诉)
     private Integer required;//必填(0:不必填,1:必填)
+    private String exclusionDetail; //互斥选项(如1,2|3,4(1,2互斥,3,4互斥))
     private String explains;//详细阐述
     private String description; // 客户端界面描述
     private Integer exclusionType; //互斥类型

+ 5 - 0
precman-service/src/main/java/com/diagbot/entity/QuestionDetail.java

@@ -80,6 +80,11 @@ public class QuestionDetail implements Serializable {
      */
     private Integer exclusion;
 
+    /**
+     * 关联子问题(questionId多个逗号隔开)
+     */
+    private String subQuestion;
+
     /**
      * 备注
      */

+ 5 - 0
precman-service/src/main/java/com/diagbot/entity/QuestionInfo.java

@@ -126,6 +126,11 @@ public class QuestionInfo implements Serializable {
      */
     private Integer required;
 
+    /**
+     * 互斥选项(如1,2|3,4(1,2互斥,3,4互斥))
+     */
+    private String exclusionDetail;
+
     /**
      * 详细阐述
      */

+ 1 - 0
precman-service/src/main/java/com/diagbot/entity/wrapper/QuestionWrapper.java

@@ -35,6 +35,7 @@ public class QuestionWrapper implements Serializable {
     private String url; //图片显示地址
     private Integer specFlag; //特殊标记(0:没有标记,1:拼接到主诉)
     private Integer required; //必填(0:不必填,1:必填)
+    private String exclusionDetail; //互斥选项(如1,2|3,4(1,2互斥,3,4互斥))
     private String explains; //必填(0:不必填,1:必填)
     private String description; //患者界面描述
     private String flag; //类型标记

+ 41 - 0
precman-service/src/main/java/com/diagbot/facade/QuestionFacade.java

@@ -38,6 +38,7 @@ import com.diagbot.vo.QuestionIndexVO;
 import com.diagbot.vo.QuestionPageVO;
 import com.diagbot.vo.QuestionSaveVO;
 import com.diagbot.vo.QuestionVO;
+import com.diagbot.vo.SubQuestionVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -329,6 +330,21 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
                         finalMsg.toString());
             }
+
+            // 判断是否在明细中有关联
+            SubQuestionVO subQuestionVO = new SubQuestionVO();
+            subQuestionVO.setId(Long.parseLong(id));
+            List<QuestionInfo> list = getBySubQuestionId(subQuestionVO);
+            if (ListUtil.isNotEmpty(list)) {
+                StringBuffer errMsg = new StringBuffer();
+                errMsg.append("请先删除在上级明细中的关联:");
+                for (QuestionInfo questionInfo : list) {
+                    errMsg.append("【" + questionInfo.getTagName() + "】");
+                }
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                        errMsg.toString());
+            }
+
             //删除自身
             this.deleteByIds(paramMap);
             //删除明细
@@ -358,6 +374,7 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
         paramMap.put("existName", questionIndexVO.getExistName());
         paramMap.put("notTagType", questionIndexVO.getNotTagType());
         paramMap.put("notControlType", questionIndexVO.getNotControlType());
+        paramMap.put("noSubQuestion", questionIndexVO.getNoSubQuestion());
         List<QuestionInfo> res = this.index(paramMap);
         return res;
     }
@@ -489,6 +506,30 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
         return data;
     }
 
+
+    /**
+     * 根据id返回被引用的父标签
+     *
+     * @param subQuestionVO 获取父标签内容参数
+     * @return 标签内容
+     */
+    public List<QuestionInfo> getBySubQuestionId(SubQuestionVO subQuestionVO) {
+        List<QuestionDetail> list = questionDetailFacade.list(new QueryWrapper<QuestionDetail>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .apply("find_in_set({0}, sub_question)", subQuestionVO.getId())
+        );
+        if (ListUtil.isNotEmpty(list)) {
+            List<Long> ids = list.stream().map(r -> r.getQuestionId()).distinct().collect(Collectors.toList());
+            return this.list(new QueryWrapper<QuestionInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("id", ids)
+            );
+        }
+        return null;
+    }
+
+
+
     /**
      * 获取所有需要删除的缓存id列表
      *

+ 1 - 0
precman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java

@@ -24,4 +24,5 @@ public class QuestionIndexVO {
     private List<Integer> notTagType;
     private List<Integer> notControlType;
     private List<String> filterList;
+    private Integer noSubQuestion;
 }

+ 15 - 0
precman-service/src/main/java/com/diagbot/vo/SubQuestionVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/8/6 10:16
+ */
+@Getter
+@Setter
+public class SubQuestionVO {
+    private Long id;
+}

+ 18 - 1
precman-service/src/main/java/com/diagbot/web/QuestionInfoController.java

@@ -14,6 +14,7 @@ import com.diagbot.vo.QuestionIndexVO;
 import com.diagbot.vo.QuestionPageVO;
 import com.diagbot.vo.QuestionSaveVO;
 import com.diagbot.vo.QuestionVO;
+import com.diagbot.vo.SubQuestionVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -66,7 +67,15 @@ public class QuestionInfoController {
 
 
     @ApiOperation(value = "标签检索[by:zhoutg]",
-            notes = "")
+            notes = "tagName:系统名称<br>" +
+                    "sexType:性别:1:男,2:女,3:通用<br>" +
+                    "age:年龄<br>" +
+                    "type:归属<br>" +
+                    "notIds:过滤的id值<br>" +
+                    "notControlType:不能为的控件类型<br>" +
+                    "controlType:指定的控件类型<br>" +
+                    "tagType:指定的标签类型<br>" +
+                    "noSubQuestion:明细字段subQuestion有值,1:过滤;其他值:不过滤<br>")
     @PostMapping("/index")
     @SysLogger("index")
     public RespDTO<List<QuestionInfo>> index(@RequestBody QuestionIndexVO questionIndexVO) {
@@ -107,4 +116,12 @@ public class QuestionInfoController {
         return RespDTO.onSuc(data);
     }
 
+
+    @ApiOperation(value = "根据id返回被引用的父标签[by:zhoutg]",
+            notes = "id: 标签id<br>")
+    @PostMapping("/getBySubQuestionId")
+    public RespDTO<List<QuestionInfo>> getBySubQuestionId(@RequestBody SubQuestionVO subQuestionVO) {
+        List<QuestionInfo> data = questionFacade.getBySubQuestionId(subQuestionVO);
+        return RespDTO.onSuc(data);
+    }
 }

+ 3 - 8
precman-service/src/main/resources/mapper/QuestionDetailMapper.xml

@@ -5,17 +5,12 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.diagbot.entity.QuestionDetail">
         <id column="id" property="id" />
-        <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" />
         <result column="question_id" property="questionId" />
+        <result column="description" property="description" />
         <result column="name" property="name" />
         <result column="order_no" property="orderNo" />
-        <result column="default_select" property="defaultSelect" />
-        <result column="abnormal" property="abnormal" />
-        <result column="code" property="code" />
+        <result column="exclusion" property="exclusion" />
+        <result column="sub_question" property="subQuestion" />
         <result column="remark" property="remark" />
     </resultMap>
 

+ 4 - 0
precman-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -23,6 +23,7 @@
         <result column="label_suffix" property="labelSuffix" />
         <result column="url" property="url" />
         <result column="spec_flag" property="specFlag" />
+        <result column="exclusion_detail" property="exclusionDetail" />
         <result column="required" property="required" />
         <result column="explains" property="explains" />
         <result column="description" property="description" />
@@ -98,6 +99,9 @@
                 #{id}
             </foreach>
         </if>
+        <if test="noSubQuestion !=null and noSubQuestion == 1">
+            and id not in (select distinct question_id from prec_question_detail t where t.is_deleted = 'N' and t.sub_question != '')
+        </if>
         order by gmt_modified desc
     </select>