liusheng
3 天以前 27df1079c1d230fab29f565f5209f2a02e0def8a
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -48,6 +48,8 @@
        <result property="patno" column="patno"/>
        <result property="inhospstate" column="inhospstate"/>
        <result property="deptcheckFlag" column="deptcheck_flag"/>
        <result property="inWardcheckFlag" column="in_wardcheck_flag"/>
        <result property="inDeptcheckFlag" column="in_deptcheck_flag"/>
        <result property="wardcheckFlag" column="wardcheck_flag"/>
        <result property="diagcheckFlag" column="diagcheck_flag"/>
        <result property="age" column="age"/>
@@ -73,11 +75,13 @@
        <result property="managementDoctor" column="management_doctor"/>
        <result property="managementDoctorCode" column="management_doctor_code"/>
        <result property="campusid" column="campusid"/>
        <result property="inhospMydFlag" column="inhosp_myd_flag"/>
    </resultMap>
    <sql id="selectPatMedInhospVo">
        select inhospid,
               patname,
               inhosp_myd_flag,
               campusid,
               fuflag,
               management_doctor,
@@ -98,6 +102,8 @@
               nurse_name,
               deptcheck_flag,
               wardcheck_flag,
               in_deptcheck_flag,
               in_wardcheck_flag,
               diagcheck_flag,
               inhospstate,
               patno,
@@ -157,6 +163,8 @@
        b.out_way_name,
        b.deptcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.diagcheck_flag,
        b.inhospstate,
        b.patno,
@@ -207,6 +215,7 @@
        b.futypedesc,
        b.fuadvice,
        b.fuspecialadvice,
        b.inhosp_myd_flag,
        a.idcardno
        FROM
        pat_med_inhosp b
@@ -236,6 +245,7 @@
            concat('%', #{hospitaldistrictname}, '%')
        </if>
        <if test="endtime != null ">and b.endtime = #{endtime}</if>
        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
        <if test="managementDoctor != null ">and b.management_doctor = #{managementDoctor}</if>
        <if test="managementDoctorCode != null ">and b.management_doctor_code = #{managementDoctorCode}</if>
        <if test="inhospno != null ">and b.inhospno = #{inhospno}</if>
@@ -248,9 +258,13 @@
        <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if>
        <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if>
        <if test="cry != null and cry == 0 ">and b.endtime is null</if>
        <if test="cry != null and cry == 1 ">and b.inhospstate=1</if>
        <if test="cry != null and cry == 2 ">and b.inhospstate=2</if>
        <if test="cry != null and cry == 3 ">and b.inhospstate=3</if>
        <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if>
        <if test="campusid != null ">and b.campusid = #{campusid}</if>
        <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if>
@@ -280,11 +294,26 @@
                #{leavehospitaldistrictcode}
            </foreach>
        </if>
        <if test="hospitaldistrictcodeList != null and hospitaldistrictcodeList.size()>0">
            AND b.hospitaldistrictcode IN
            <foreach collection="hospitaldistrictcodeList" item="hospitaldistrictcode" open="(" separator=","
                     close=")">
                #{hospitaldistrictcode}
            </foreach>
        </if>
        <if test="leaveldeptcodes != null and leaveldeptcodes.size()>0">
            AND b.leaveldeptcode IN
            <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                     close=")">
                #{leaveldeptcode}
            </foreach>
        </if>
        <if test="deptcodeList != null and deptcodeList.size()>0">
            AND b.deptcode IN
            <foreach collection="deptcodeList" item="deptcode" open="(" separator=","
                     close=")">
                #{deptcode}
            </foreach>
        </if>
        GROUP BY
@@ -294,10 +323,16 @@
        a.telcode,
        a.id,
        a.sex
        <if test="cry==1">
        <if test="cry != null and cry==1">
            order by b.endtime desc
        </if>
        <if test="cry==0">
        <if test="cry != null and cry==2">
            order by b.endtime desc
        </if>
        <if test="cry != null and cry==3">
            order by b.endtime desc
        </if>
        <if test="cry != null and cry==0">
            order by b.starttime desc
        </if>
    </select>
@@ -316,6 +351,8 @@
        b.out_way_name,
        b.deptcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.diagcheck_flag,
        b.inhospstate,
        b.patno,
@@ -364,14 +401,16 @@
        b.futypecode,
        b.futypedesc,
        b.fuadvice,
        b.inhosp_myd_flag,
        b.fuspecialadvice
        FROM
        pat_med_inhosp b
        where 1=1
        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
        <if test="orgid != null and orgid != ''">
            and orgid = #{orgid}
        </if>
        <if test="serialnum != null ">
        <if test="serialnum != null and serialnum != ''">
            and b.serialnum = #{serialnum}
        </if>
        order by b.inhospid desc
@@ -394,8 +433,9 @@
        b.nurse_id,
        b.nurse_name,
        b.deptcheck_flag,
        b.diagcheck_flag,
        b.wardcheck_flag,
        b.in_deptcheck_flag,
        b.in_wardcheck_flag,
        b.inhospstate,
        b.patno,
        b.inhospno,
@@ -443,6 +483,7 @@
        b.futypedesc,
        b.fuadvice,
        b.fuspecialadvice,
        b.inhosp_myd_flag,
        b.schemetime
        FROM
        pat_med_inhosp b,
@@ -452,6 +493,7 @@
        and b.del_flag=0
        and a.id = b.patid
        AND a.idcardno != ''
        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
        <if test="orgid != null and orgid != ''">
            and a.orgid = #{orgid}
        </if>
@@ -474,6 +516,8 @@
        <if test="diagcheckFlag != null ">and b.diagcheck_flag = #{diagcheckFlag}</if>
        <if test="deptcheckFlag != null ">and b.deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null ">and b.wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null ">and b.in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null ">and b.in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if>
        <if test="schemestatus != null ">and b.schemestatus = #{schemestatus}</if>
        <if test="leavediagname != null  and leavediagname != ''">and b.leavediagname like concat('%',
@@ -517,6 +561,7 @@
        <if test="cry != null and cry == 0 ">and inhospstate=0</if>
        <if test="cry != null and cry == 1 ">and inhospstate=1</if>
        <if test="cry != null and cry == 3 ">and inhospstate=3</if>
        <if test="inhospMydFlag != null ">and inhosp_myd_flag = #{inhospMydFlag}</if>
        <if test="serialnum != null">and serialnum = #{serialnum}</if>
        <if test="hospitalname != null">and hospitalname = #{hospitalname}</if>
        <if test="hospitalcode != null">and hospitalcode = #{hospitalcode}</if>
@@ -557,6 +602,9 @@
        <if test="patno != null">and patno = #{patno}</if>
        <if test="inhospstate != null">and inhospstate = #{inhospstate}</if>
        <if test="deptcheckFlag != null">and deptcheck_flag = #{deptcheckFlag}</if>
        <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if>
        <if test="inDeptcheckFlag != null">and in_deptcheck_flag = #{inDeptcheckFlag}</if>
        <if test="inWardcheckFlag != null">and in_wardcheck_flag = #{inWardcheckFlag}</if>
        <if test="wardcheckFlag != null">and wardcheck_flag = #{wardcheckFlag}</if>
        <if test="diagcheckFlag != null">and diagcheck_flag = #{diagcheckFlag}</if>
        <if test="longTaskReason != null">and long_task_reason = #{longTaskReason}</if>
@@ -627,6 +675,8 @@
            <if test="inhospstate != null">inhospstate,</if>
            <if test="deptcheckFlag != null">deptcheck_flag,</if>
            <if test="wardcheckFlag != null">wardcheck_flag,</if>
            <if test="inDeptcheckFlag != null">in_deptcheck_flag,</if>
            <if test="inWardcheckFlag != null">in_wardcheck_flag,</if>
            <if test="diagcheckFlag != null">diagcheck_flag,</if>
            <if test="longTaskReason != null">long_task_reason,</if>
            <if test="nurseId != null ">nurse_id,</if>
@@ -648,6 +698,7 @@
            <if test="managementDoctor != null ">management_doctor,</if>
            <if test="managementDoctorCode != null ">management_doctor_code,</if>
            <if test="campusid != null ">campusid,</if>
            <if test="inhospMydFlag != null ">inhosp_myd_flag,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="serialnum != null">#{serialnum},</if>
@@ -692,6 +743,8 @@
            <if test="inhospstate != null">#{inhospstate},</if>
            <if test="deptcheckFlag != null">#{deptcheckFlag},</if>
            <if test="wardcheckFlag != null">#{wardcheckFlag},</if>
            <if test="inDeptcheckFlag != null">#{inDeptcheckFlag},</if>
            <if test="inWardcheckFlag != null">#{inWardcheckFlag},</if>
            <if test="diagcheckFlag != null">#{diagcheckFlag},</if>
            <if test="longTaskReason != null">#{longTaskReason},</if>
            <if test="nurseId != null ">#{nurseId},</if>
@@ -713,6 +766,7 @@
            <if test="managementDoctor != null ">#{managementDoctor},</if>
            <if test="managementDoctorCode != null ">#{managementDoctorCode},</if>
            <if test="campusid != null ">#{campusid},</if>
            <if test="inhospMydFlag != null ">#{inhospMydFlag},</if>
        </trim>
    </insert>
@@ -727,11 +781,11 @@
        schemestatus, generalschemestatus, leaveldeptcode, leaveldeptname, hospitaldistrictid,
        leavehospitaldistrictcode, leavehospitaldistrictname, leavehospitaldistrictid,
        deptid, leaveldeptid, schemetime, patname, patno, inhospstate,
        deptcheck_flag, wardcheck_flag, diagcheck_flag, long_task_reason,
        deptcheck_flag, wardcheck_flag,in_deptcheck_flag, in_wardcheck_flag, diagcheck_flag, long_task_reason,
        nurse_id, nurse_name, out_way_id, out_way_name, guid,
        operator, operator_id, inhospno, remark,
        fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice, management_doctor,
        management_doctor_doctor,campusid
        management_doctor_doctor,campusid, inhosp_myd_flag
        )
        values
        <foreach collection="list" item="item" separator=",">
@@ -749,11 +803,11 @@
            #{item.leavehospitaldistrictcode}, #{item.leavehospitaldistrictname}, #{item.leavehospitaldistrictid},
            #{item.deptid}, #{item.leaveldeptid}, #{item.schemetime}, #{item.patname}, #{item.patno},
            #{item.inhospstate},
            #{item.deptcheckFlag}, #{item.wardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason},
            #{item.deptcheckFlag}, #{item.wardcheckFlag},#{item.inDeptcheckFlag}, #{item.inWardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason},
            #{item.nurseId}, #{item.nurseName}, #{item.outWayId}, #{item.outWayName}, #{item.guid},
            #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark},
            #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice},
            #{item.fuspecialadvice}, #{item.managementDoctor}, #{item.managementDoctorCode}, #{item.campusid}
            #{item.fuspecialadvice}, #{item.managementDoctor}, #{item.managementDoctorCode}, #{item.campusid}, #{item.inhospMydFlag}
            )
        </foreach>
    </insert>
@@ -804,6 +858,8 @@
            <if test="inhospstate != null">inhospstate = #{inhospstate},</if>
            <if test="deptcheckFlag != null">deptcheck_flag = #{deptcheckFlag},</if>
            <if test="wardcheckFlag != null">wardcheck_flag = #{wardcheckFlag},</if>
            <if test="inDeptcheckFlag != null">in_deptcheck_flag = #{inDeptcheckFlag},</if>
            <if test="inWardcheckFlag != null">in_wardcheck_flag = #{inWardcheckFlag},</if>
            <if test="diagcheckFlag != null">diagcheck_flag = #{diagcheckFlag},</if>
            <if test="longTaskReason != null">long_task_reason = #{longTaskReason},</if>
            <if test="nurseId != null ">nurse_id = #{nurseId},</if>
@@ -823,8 +879,8 @@
            <if test="fuspecialadvice != null ">fuspecialadvice = #{fuspecialadvice},</if>
            <if test="managementDoctor != null ">management_doctor = #{managementDoctor},</if>
            <if test="managementDoctorCode != null ">management_doctor_code = #{managementDoctorCode},</if>
            <if test="campusid != null ">campusid = #{campusid}</if>
            <if test="campusid != null ">campusid = #{campusid},</if>
            <if test="inhospMydFlag != null ">inhosp_myd_flag = #{inhospMydFlag},</if>
        </trim>
        where inhospid = #{inhospid}
    </update>
@@ -855,73 +911,73 @@
    <select id="selectPatMedInhospCount" parameterType="com.smartor.domain.PatMedReq"
            resultType="com.smartor.domain.PatMedRes">
        SELECT SUM(rc) AS rc,
               SUM(rs) AS rs,
               SUM(scsf) AS scsf,
               SUM(zcsf) AS zcsf,
               SUM(zbsf) AS zbsf
        SUM(rs) AS rs,
        SUM(scsf) AS scsf,
        SUM(zcsf) AS zcsf,
        SUM(zbsf) AS zbsf
        FROM (
            <!-- 出院人次:去掉 date_format 包装,使日期字段索引生效 -->
            SELECT
                COUNT(1) AS rc,
                0 AS rs,
                0 AS scsf,
                0 AS zcsf,
                0 AS zbsf
            FROM pat_med_inhosp
            JOIN pat_archive ON pat_archive.id = pat_med_inhosp.patid
            WHERE pat_med_inhosp.del_flag = 0
            <if test="orgid != null and orgid != ''">
                AND pat_med_inhosp.orgid = #{orgid}
            </if>
            AND pat_archive.idcardno IS NOT NULL
            <if test="zy != null">
                AND pat_med_inhosp.inhospstate = 0
                AND pat_med_inhosp.starttime &gt;= #{startDate}
                AND pat_med_inhosp.starttime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
                <if test="deptcodeList != null and deptcodeList.size() > 0">
                    AND pat_med_inhosp.deptcode IN
                    <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                        #{deptcode}
                    </foreach>
                </if>
            </if>
            <if test="cy != null">
                AND pat_med_inhosp.inhospstate = 1
                AND pat_med_inhosp.endtime &gt;= #{startDate}
                AND pat_med_inhosp.endtime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
                <if test="deptcodeList != null and deptcodeList.size() > 0">
                    AND pat_med_inhosp.leaveldeptcode IN
                    <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                        #{deptcode}
                    </foreach>
                </if>
            </if>
            UNION ALL
            <!-- 随访服务/首次/再次/专病随访:合并为单次扫描,用条件聚合代替4个 UNION ALL -->
            SELECT
                0 AS rc,
                COUNT(1) AS rs,
                SUM(CASE WHEN service_type = 2 AND visit_count = 1 THEN 1 ELSE 0 END) AS scsf,
                SUM(CASE WHEN service_type = 2 AND visit_count > 1  THEN 1 ELSE 0 END) AS zcsf,
                SUM(CASE WHEN service_type = 13                      THEN 1 ELSE 0 END) AS zbsf
            FROM service_subtask
            WHERE del_flag = 0
            AND service_type IN (2, 13)
            <if test="orgid != null and orgid != ''">
                AND orgid = #{orgid}
            </if>
            <if test="startDate != null">
                AND visit_time &gt;= #{startDate}
            </if>
            <if test="endDate != null">
                AND visit_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
            </if>
        <!-- 出院人次:去掉 date_format 包装,使日期字段索引生效 -->
        SELECT
        COUNT(1) AS rc,
        0 AS rs,
        0 AS scsf,
        0 AS zcsf,
        0 AS zbsf
        FROM pat_med_inhosp
        JOIN pat_archive ON pat_archive.id = pat_med_inhosp.patid
        WHERE pat_med_inhosp.del_flag = 0
        <if test="orgid != null and orgid != ''">
            AND pat_med_inhosp.orgid = #{orgid}
        </if>
        AND pat_archive.idcardno IS NOT NULL
        <if test="zy != null">
            AND pat_med_inhosp.inhospstate = 0
            AND pat_med_inhosp.starttime &gt;= #{startDate}
            AND pat_med_inhosp.starttime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
            <if test="deptcodeList != null and deptcodeList.size() > 0">
                AND deptcode IN
                AND pat_med_inhosp.deptcode IN
                <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                    #{deptcode}
                </foreach>
            </if>
        </if>
        <if test="cy != null">
            AND pat_med_inhosp.inhospstate = 1
            AND pat_med_inhosp.endtime &gt;= #{startDate}
            AND pat_med_inhosp.endtime &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
            <if test="deptcodeList != null and deptcodeList.size() > 0">
                AND pat_med_inhosp.leaveldeptcode IN
                <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                    #{deptcode}
                </foreach>
            </if>
        </if>
        UNION ALL
        <!-- 随访服务/首次/再次/专病随访:合并为单次扫描,用条件聚合代替4个 UNION ALL -->
        SELECT
        0 AS rc,
        COUNT(1) AS rs,
        SUM(CASE WHEN service_type = 2 AND visit_count = 1 THEN 1 ELSE 0 END) AS scsf,
        SUM(CASE WHEN service_type = 2 AND visit_count > 1 THEN 1 ELSE 0 END) AS zcsf,
        SUM(CASE WHEN service_type = 13 THEN 1 ELSE 0 END) AS zbsf
        FROM service_subtask
        WHERE del_flag = 0
        AND service_type IN (2, 13)
        <if test="orgid != null and orgid != ''">
            AND orgid = #{orgid}
        </if>
        <if test="startDate != null">
            AND visit_time &gt;= #{startDate}
        </if>
        <if test="endDate != null">
            AND visit_time &lt; DATE_ADD(#{endDate}, INTERVAL 1 DAY)
        </if>
        <if test="deptcodeList != null and deptcodeList.size() > 0">
            AND deptcode IN
            <foreach collection="deptcodeList" item="deptcode" open="(" separator="," close=")">
                #{deptcode}
            </foreach>
        </if>
        ) AS combined_data
    </select>