Browse Source

全院条目缺陷改善统计逻辑修改

chengyao 3 years ago
parent
commit
5ce782a456

+ 20 - 0
doc/037.20211117_2.1.3/qc_initv2.1.3.sql

@@ -1,3 +1,23 @@
 
 use `qc`;
 -- 执行前请看注意事项!
+
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '数据分析', '-1', 'YH-SJFX', '1', '1', '12', '用户-数据分析');
+SET @id =@@identity;
+
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '临床质控使用统计', @id , 'YH-ZKK-LCZKSYTJ', '1', '1', '0', '用户-质控科-临床质控使用统计');
+SET @idSec =@@identity;
+INSERT INTO `sys_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `name`, `parent_id`, `code`, `show_status`, `maintain_status`, `order_no`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '条目缺陷改善统计', @id , 'YH-ZKK-TMQXGSTJ', '1', '1', '0', '用户-质控科-条目缺陷改善统计');
+SET @idThr =@@identity;
+
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @id, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @id, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', @id, NULL);
+
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @idSec, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @idSec, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', @idSec, NULL);
+
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '-1', @idThr, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '1', @idThr, NULL);
+INSERT INTO `sys_role_menu` ( `is_deleted`, `gmt_create`, `gmt_modified`, `creator`, `modifier`, `role_id`, `menu_id`, `remark`) VALUES ( 'N', '1970-01-01 12:00:00', '1970-01-01 12:00:00', '0', '0', '2', @idThr, NULL);

+ 10 - 2
src/main/java/com/diagbot/facade/BehospitalInfoFacade.java

@@ -2504,9 +2504,17 @@ public class BehospitalInfoFacade extends BehospitalInfoServiceImpl {
      */
     public Boolean addMedClickInfo(MedClickInfoVO medClickInfoVO) {
         MedClickInfo medClickInfo = new MedClickInfo();
-        medClickInfo.setHospitalId(Long.valueOf(SysUserUtils.getCurrentHospitalID()));
-        medClickInfo.setCreator(SysUserUtils.getCurrentPrincipleID());
         BeanUtil.copyProperties(medClickInfoVO, medClickInfo);
+        QcresultInfo qcresultInfo = qcresultInfoFacade.lambdaQuery()
+                .eq(QcresultInfo::getHospitalId, medClickInfoVO.getHospitalId())
+                .eq(QcresultInfo::getBehospitalCode, medClickInfoVO.getBehospitalCode())
+                .eq(QcresultInfo::getIsDeleted, IsDeleteEnum.N.getKey())
+                .select(QcresultInfo::getId).one();
+        if(null == qcresultInfo || null == qcresultInfo.getId()
+        ){
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "内部参数异常");
+        }
+        medClickInfo.setQcresultInfoId(qcresultInfo.getId());
         medClickInfo.setGmtCreate(new Date());
         return medClickInfoService.save(medClickInfo);
     }

+ 9 - 0
src/main/java/com/diagbot/vo/MedClickInfoVO.java

@@ -1,5 +1,8 @@
 package com.diagbot.vo;
 import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -16,26 +19,31 @@ public class MedClickInfoVO implements Serializable {
     /**
      * 医院ID
      */
+    @NotNull(message = "请输入医院id")
     private Long hospitalId;
 
     /**
      * 科室ID
      */
+    @NotBlank(message = "请输入科室id")
     private String deptId;
 
     /**
      * 科室名称
      */
+    @NotBlank(message = "请输入科室名称")
     private String deptName;
 
     /**
      * 医生ID
      */
+    @NotBlank(message = "请输入医生id")
     private String doctorId;
 
     /**
      * 医生姓名
      */
+    @NotBlank(message = "请输入医生姓名")
     private String doctorName;
 
     /**
@@ -46,5 +54,6 @@ public class MedClickInfoVO implements Serializable {
     /**
      * 病人住院ID
      */
+    @NotBlank(message = "请输入病历住院id")
     private String behospitalCode;
 }

+ 1 - 1
src/main/java/com/diagbot/web/BehospitalInfoController.java

@@ -288,7 +288,7 @@ public class BehospitalInfoController {
             notes = "")
     @PostMapping("/addMedClickInfo")
     @SysLogger("addMedClickInfo")
-    public RespDTO<Boolean> addMedClickInfo(@RequestBody MedClickInfoVO medClickInfoVO) {
+    public RespDTO<Boolean> addMedClickInfo(@RequestBody @Valid MedClickInfoVO medClickInfoVO) {
         return RespDTO.onSuc(behospitalInfoFacade.addMedClickInfo(medClickInfoVO));
     }
 }

+ 140 - 159
src/main/resources/mapper/MedClickInfoMapper.xml

@@ -108,201 +108,182 @@
     </select>
 
     <select id="getEntryDefectImprove" resultType="com.diagbot.dto.GetEntryDefectImproveDTO">
-        select
-        t6.hospitalId,
-        t6.deptId,
-        t6.deptName,
-        t6.casesId,
-        t6.casesName,
-        t6.entryName,
-        t6.entryId,
-        t6.totalNum,
-        t6.improveleNum,
-        t6.handleNum,
-        t6.handleStr
-        from(
         SELECT
-        t5.hospital_id AS hospitalId,
-        t5.dept_id AS deptId,
-        t5.dept_name AS deptName,
-        t5.cases_id AS casesId,
-        t5. NAME AS casesName,
-        t5.entryName,
-        t5.cases_entry_id AS entryId,
-        sum(t5.totalNum) AS totalNum,
-        sum(t5.improveleNum) AS improveleNum,
-        sum(t5.totalNum)-sum(t5.improveleNum) AS handleNum,
-        concat( ROUND((sum(t5.totalNum)-sum(t5.improveleNum))/ sum(t5.totalNum)* 100, 2 ), '%' ) AS handleStr
+        s.hospitalId,
+        s.deptId,
+        s.deptName,
+        s.casesId,
+        s.casesName,
+        s.casesEntryName,
+        s.beforeCasesEntryId,
+        sum(s.totalNum) AS totalNum,
+        sum(s.improveleNum) AS improveleNum,
+        sum(s.totalNum) - sum(s.improveleNum) AS handleNum,
+        concat(ROUND((sum(s.totalNum) - sum(s.improveleNum)) / sum(s.totalNum) * 100,2),'%') AS handleStr
         FROM
         (
         SELECT
-        t4.hospital_id,
-        t4.dept_id,
-        t4.dept_name,
-        t4.behospital_code,
-        t4.cases_id,
-        t4. NAME,
-        t4.entryName,
-        t4.cases_entry_id,
-        count(t4.msgSec) AS totalNum,
+        f.hospitalId,
+        f.deptId,
+        f.deptName,
+        f.behospitalCode,
+        f.casesId,
+        f.casesName,
+        f.casesEntryName,
+        f.beforeCasesEntryId,
+        count(f.beforeCasesEntryId) AS totalNum,
         CASE
-        WHEN count(t4.msg) &gt; 0
-        AND count(t4.msgSec) - count(t4.msg) &lt;= 0 THEN
-        count(t4.msgSec)
-        WHEN count(t4.msg) &gt; 0
-        AND count(t4.msgSec) - count(t4.msg) &gt; 0 THEN
-        count(t4.msgSec) - count(t4.msg)
-        WHEN count(t4.msg) = 0
-        AND count(t4.msgSec) - count(t4.msg) &gt; 0 THEN
-        0
+        WHEN count(f.lastCasesEntryId) &gt; 0 AND count(f.beforeCasesEntryId) - count(f.lastCasesEntryId) &lt;= 0 THEN
+        count(f.beforeCasesEntryId)
+        WHEN count(f.lastCasesEntryId) &gt; 0 AND count(f.beforeCasesEntryId) - count(f.lastCasesEntryId) &gt; 0 THEN
+        count(f.beforeCasesEntryId) - count(f.lastCasesEntryId)
+        WHEN count(f.lastCasesEntryId) = 0 THEN 0
         END AS improveleNum
         FROM
         (
         SELECT
-        t3.hospital_id,
-        t3.dept_id,
-        t3.dept_name,
-        t3.behospital_code,
-        t3.cases_id,
-        t3.name,
-        t3.msg AS entryName,
-        t3.cases_entry_id,
-        CASE
-        WHEN t3.is_deleted = 'N' THEN
-        t3.msg
-        END AS msg,
-        CASE
-        WHEN t3.is_deleted = 'Y' THEN
-        t3.msg
-        END AS msgSec
+        k.*, i. NAME AS casesName,
+        o. NAME AS casesEntryName,
+        y.cases_entry_id AS lastCasesEntryId
         FROM
         (
         SELECT
-        t1.hospital_id,
-        t1.beh_dept_id AS dept_id,
-        t1.beh_dept_name AS dept_name,
-        t2.behospital_code,
-        t2.qcresult_info_id,
-        t2.gmt_create as gmTime,
-        t3.cases_id,
-        t4.name,
-        t3.cases_entry_id,
-        t3.msg,
-        t3.is_deleted
+        t.hospital_id AS hospitalId,
+        t.dept_id AS deptId,
+        t.dept_name AS deptName,
+        t.behospital_code AS behospitalCode,
+        t.beforeQcresultInfoId,
+        u.cases_id AS casesId,
+        u.cases_entry_id AS beforeCasesEntryId,
+        e.lastQcresultInfoId
+        FROM
+        (
+        SELECT
+        h.hospital_id,
+        h.dept_id,
+        h.dept_name,
+        h.behospital_code,
+        h.lastQcresultInfoId
+        FROM
+        (
+        SELECT DISTINCT
+        w.hospital_id,
+        w.behospital_code
         FROM
-        med_behospital_info t1,
-        med_click_info t2,
-        med_qcresult_detail t3,
-        qc_cases t4
+        med_click_info w
         WHERE
-        t1.is_deleted = 'N'
-        AND t2.is_deleted = 'N'
-        AND t3.is_deleted = 'N'
-        AND t4.is_deleted = 'N'
-        AND t1.hospital_id = t2.hospital_id
-        AND t1.hospital_id = t3.hospital_id
-        AND t1.behospital_code = t2.behospital_code
-        AND t2.qcresult_info_id = t3.qcresult_info_id
-        AND t3.cases_id = t4.id
-        AND t1.qc_type_id != 0
+        w.is_deleted = 'N'
         <if test="hospitalId != null and hospitalId != ''">
-            AND t1.hospital_id = #{hospitalId}
+            AND w.hospital_id = #{hospitalId}
         </if>
-        <if test="deptId != null and deptId != ''">
-            and t1.dept_id = #{deptId}
-        </if>
-        <if test="deptName != null and deptName != ''">
-            and t1.dept_name like CONCAT('%',#{deptName},'%')
+        <if test="startDate != null and startDate != ''">
+            <![CDATA[ AND w.gmt_create >= #{startDate}]]>
         </if>
-        <if test="casesName != null and casesName != ''">
-            and t4.name like CONCAT('%',#{casesName},'%')
+        <if test="endDate != null and endDate != ''">
+            <![CDATA[ AND w.gmt_create <= #{endDate}]]>
         </if>
-        <if test="entryName != null and entryName != ''">
-            and t3.msg like CONCAT('%',#{entryName},'%')
+        ) g
+        LEFT JOIN (
+        SELECT
+        q.hospital_id,
+        q.beh_dept_id AS dept_id,
+        q.beh_dept_name AS dept_name,
+        w.behospital_code,
+        max(w.qcresult_info_id) AS lastQcresultInfoId
+        FROM
+        med_behospital_info q,
+        med_click_info w
+        WHERE
+        q.is_deleted = 'N'
+        AND w.is_deleted = 'N'
+        AND q.hospital_id = w.hospital_id
+        AND q.behospital_code = w.behospital_code
+        AND q.qc_type_id != 0
+        <if test="hospitalId != null and hospitalId != ''">
+            AND q.hospital_id = #{hospitalId}
         </if>
-        <if test="startDate != null and startDate != ''">
-            <![CDATA[ AND t1.leave_hospital_date >= #{startDate}]]>
+        <if test="deptId != null and deptId != ''">
+            and q.dept_id = #{deptId}
         </if>
-        <if test="endDate != null and endDate != ''">
-            <![CDATA[ AND t1.leave_hospital_date <= #{endDate}]]>
+        <if test="deptName != null and deptName != ''">
+            and q.dept_name like CONCAT('%',#{deptName},'%')
         </if>
         GROUP BY
-        t1.beh_dept_id,
-        t1.beh_dept_name,
-        t1.behospital_code,
-        t3.cases_id,
-        t3.cases_entry_id
-        UNION
+        q.beh_dept_id,
+        q.beh_dept_name,
+        q.behospital_code
+        ) h ON g.hospital_id = h.hospital_id
+        AND g.behospital_code = h.behospital_code
+        ) e
+        LEFT JOIN (
         SELECT
-        t1.hospital_id,
-        t1.beh_dept_id AS dept_id,
-        t1.beh_dept_name AS dept_name,
-        t2.behospital_code,
-        t2.qcresult_info_id,
-        min(t2.gmt_create) AS gmTime,
-        t3.cases_id,
-        t4.name,
-        t3.cases_entry_id,
-        t3.msg,
-        t3.is_deleted
+        q.hospital_id,
+        q.beh_dept_id AS dept_id,
+        q.beh_dept_name AS dept_name,
+        w.behospital_code,
+        min(w.qcresult_info_id) AS beforeQcresultInfoId
         FROM
-        med_behospital_info t1,
-        med_click_info t2,
-        med_qcresult_detail t3,
-        qc_cases t4
+        med_behospital_info q,
+        med_click_info w,
+        med_qcresult_detail e
         WHERE
-        t1.is_deleted = 'N'
-        AND t2.is_deleted = 'N'
-        AND t3.is_deleted = 'Y'
-        AND t4.is_deleted = 'N'
-        AND t1.hospital_id = t2.hospital_id
-        AND t1.hospital_id = t3.hospital_id
-        AND t1.behospital_code = t2.behospital_code
-        AND t2.qcresult_info_id = t3.qcresult_info_id
-        AND t3.cases_id = t4.id
-        AND t1.qc_type_id != 0
+        q.is_deleted = 'N'
+        AND w.is_deleted = 'N'
+        AND e.is_deleted = 'Y'
+        AND q.hospital_id = w.hospital_id
+        AND q.hospital_id = e.hospital_id
+        AND q.behospital_code = w.behospital_code
+        AND w.qcresult_info_id =e.qcresult_info_id
+        AND q.qc_type_id != 0
         <if test="hospitalId != null and hospitalId != ''">
-            AND t1.hospital_id = #{hospitalId}
+            AND q.hospital_id = #{hospitalId}
         </if>
         <if test="deptId != null and deptId != ''">
-            and t1.dept_id = #{deptId}
+            and q.dept_id = #{deptId}
         </if>
         <if test="deptName != null and deptName != ''">
-            and t1.dept_name like CONCAT('%',#{deptName},'%')
+            and q.dept_name like CONCAT('%',#{deptName},'%')
         </if>
+        GROUP BY
+        q.beh_dept_id,
+        q.beh_dept_name,
+        q.behospital_code
+        ) t ON e.hospital_id = t.hospital_id
+        AND e.behospital_code = t.behospital_code
+        LEFT JOIN med_qcresult_detail u ON t.hospital_id = u.hospital_id
+        AND t.beforeQcresultInfoId = u.qcresult_info_id
+        WHERE
+        u.grade_type = 1
+        ORDER BY
+        t.dept_name
+        ) k
+        LEFT JOIN med_qcresult_detail y ON k.hospitalId = y.hospital_id
+        AND k.lastQcresultInfoId = y.qcresult_info_id
+        AND k.beforeCasesEntryId = y.cases_entry_id
+        LEFT JOIN qc_cases i ON i.id = k.casesId
+        AND i.is_deleted = 'N'
+        LEFT JOIN qc_cases_entry o ON o.id = k.beforeCasesEntryId
+        AND o.is_deleted = 'N'
+        WHERE
+        (y.grade_type = 1 OR y.grade_type IS NULL)
         <if test="casesName != null and casesName != ''">
-            and t4.name like CONCAT('%',#{casesName},'%')
+            and i.name like CONCAT('%',#{casesName},'%')
         </if>
         <if test="entryName != null and entryName != ''">
-            and t3.msg like CONCAT('%',#{entryName},'%')
-        </if>
-        <if test="startDate != null and startDate != ''">
-            <![CDATA[ AND t1.leave_hospital_date >= #{startDate}]]>
-        </if>
-        <if test="endDate != null and endDate != ''">
-            <![CDATA[ AND t1.leave_hospital_date <= #{endDate}]]>
+            and o.name like CONCAT('%',#{entryName},'%')
         </if>
+        ) f
         GROUP BY
-        t1.beh_dept_id,
-        t1.beh_dept_name,
-        t1.behospital_code,
-        t3.cases_id,
-        t3.cases_entry_id
-        ) t3
-        ) t4
+        f.deptId,
+        f.deptName,
+        f.behospitalCode,
+        f.casesId,
+        f.beforeCasesEntryId
+        ) s
         GROUP BY
-        t4.dept_id,
-        t4.dept_name,
-        t4.behospital_code,
-        t4.cases_id,
-        t4.cases_entry_id
-        ) t5
-        GROUP BY
-        t5.dept_id,
-        t5.dept_name,
-        t5.cases_id,
-        t5.cases_entry_id)t6
-        where
-        t6.totalNum != 0
+        s.deptId,
+        s.deptName,
+        s.casesId,
+        s.beforeCasesEntryId
     </select>
 </mapper>