陈昶聿
2 天以前 8b9db684defff26456d58609ea243e9fd21ed081
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -263,8 +263,7 @@
    <select id="selectServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        where del_flag = 0
        <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
        <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if>
        <if test="continueCount != null ">and continue_count = #{continueCount}</if>
@@ -371,7 +370,7 @@
                </foreach>
            </if>
            <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
                and visit_dept_name IN
                and visit_dept_code IN
                <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
                         close="))">
                    #{visitDeptCode}
@@ -389,7 +388,7 @@
                </foreach>
            </if>
            <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
                OR visit_dept_name IN
                OR visit_dept_code IN
                <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
                         close="))">
                    #{visitDeptCode}
@@ -466,7 +465,43 @@
        <if test="sort != null  and sort==6">order by admindate desc</if>
        <if test="sort != null  and sort==7">order by visit_time asc</if>
        <if test="sort != null  and sort==8">order by visit_time desc</if>
        <if test="sort != null  and sort==9">order by sendname asc</if>
        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
    </select>
    <select id="selectSatisfactionSubtaskList" parameterType="com.smartor.domain.VO.PatSatisfactionReqVO"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        <if test="questionType != null">and type = #{questionType}</if>
        <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
            AND leavehospitaldistrictcode IN
            <foreach collection="hospitaldistrictcodes" item="hospitaldistrictcode" open="(" separator=","
                     close=")">
                #{hospitaldistrictcode}
            </foreach>
        </if>
        <if test="deptcodes != null and deptcodes.size() > 0">
            AND deptcode IN
            <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                     close=")">
                #{deptcode}
            </foreach>
        </if>
        <if test="serviceTypes != null and serviceTypes.size() > 0">
            AND service_type IN
            <foreach collection="serviceTypes" item="serviceType" open="(" separator=","
                     close=")">
                #{serviceType}
            </foreach>
        </if>
        <if test="startTime != null and endTime != null">
            AND date_format(visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
            AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
    </select>
    <select id="getCompensateServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
            resultMap="ServiceSubtaskResult">
@@ -650,6 +685,12 @@
        </if>
        <if test="managementDoctorCode != null">and management_doctor_code = #{managementDoctorCode}</if>
        <if test="managementDoctor != null">and management_doctor like concat('%',#{managementDoctor}, '%')</if>
        <if test="visitCount != null and visitCount == 1">
            AND visit_count = 1
        </if>
        <if test="visitCount != null and visitCount > 1">
            AND visit_count > 1
        </if>
        <if test="groupKey != null and groupKey != ''">
            AND ${groupKey} IN
            <foreach collection="groupKeyList" item="key" open="(" separator=","
@@ -702,6 +743,7 @@
            resultMap="ServiceSubtaskResult">
        select sendstate,starttime,endtime,nurse_name,phone,sex,task_name,sendname,leavediagname,visit_time FROM
        service_subtask WHERE del_flag=0
        and service_type != 4
        <if test="leavediagname != null">and leavediagname like concat('%',#{leavediagname}, '%')</if>
        <if test="sendname != null">and sendname like concat('%',#{sendname}, '%')</if>
        <if test="taskName != null">and task_name like concat('%',#{taskName}, '%')</if>
@@ -711,8 +753,8 @@
        <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if>
        <if test="continueCount != null ">and continue_count = #{continueCount}</if>
        <if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext}</if>
        GROUP BY sendname,sendstate,starttime,endtime,nurse_name,phone,sex,task_name,leavediagname,visit_time ORDER BY
        visit_time
        GROUP BY sendname,sendstate,starttime,endtime,nurse_name,phone,sex,task_name,leavediagname,visit_time
        ORDER BY sendname,visit_time
        <if test="pageSize != null  and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
    </select>
@@ -1196,6 +1238,9 @@
            <if test="continueContent != null ">continue_content = #{continueContent},</if>
        </trim>
        where patid = #{patid} and taskid = #{taskid}
        <if test="id != null ">
            and id = #{id}
        </if>
    </update>
    <update id="updateServiceSubtaskByTaskGuid" parameterType="com.smartor.domain.ServiceSubtask">
@@ -1392,6 +1437,12 @@
        <if test="type != null">
            and type = #{type}
        </if>
        <if test="visitCount != null and visitCount == 1">
            AND visit_count = 1
        </if>
        <if test="visitCount != null and visitCount > 1">
            AND visit_count > 1
        </if>
        <if test="groupKey != null and groupKey != '' and groupKeyList != null and groupKeyList.size>0">
            AND ${groupKey} IN
            <foreach collection="groupKeyList" item="key" open="(" separator=","
@@ -1447,6 +1498,12 @@
        <!-- 目前只统计语音和问卷 -->
        <if test="type != null">
            and type = #{type}
        </if>
        <if test="visitCount != null and visitCount == 1">
            AND visit_count = 1
        </if>
        <if test="visitCount != null and visitCount > 1">
            AND visit_count > 1
        </if>
        <if test="groupKey != null and groupKey != ''">
            group by ${groupKey}
@@ -1890,10 +1947,13 @@
    <select id="getDeptRanking" parameterType="com.smartor.domain.PatMedReq" resultType="com.smartor.domain.PatMedRes">
        SELECT deptname,
               count(1) AS rc
        count(1) AS rc
        FROM service_subtask
        WHERE DATE_FORMAT(finishtime, '%Y-%m-%d') >= #{startDate}
          AND DATE_FORMAT(finishtime, '%Y-%m-%d') &lt;= #{endDate}
        AND DATE_FORMAT(finishtime, '%Y-%m-%d') &lt;= #{endDate}
        <if test="orgid != null">
            AND orgid = #{orgid}
        </if>
        GROUP BY deptname
    </select>
@@ -2013,47 +2073,47 @@
            </foreach>
        </if>
<!--        UNION ALL-->
        <!--        UNION ALL-->
<!--        &#45;&#45; 门诊人次数据-->
<!--        SELECT-->
<!--        <choose>-->
<!--            <when test="timeType == 'day'">-->
<!--                DATE_FORMAT(admitdate, '%Y-%m-%d') AS timePeriod,-->
<!--            </when>-->
<!--            <when test="timeType == 'month'">-->
<!--                DATE_FORMAT(admitdate, '%Y-%m') AS timePeriod,-->
<!--            </when>-->
<!--            <when test="timeType == 'year'">-->
<!--                DATE_FORMAT(admitdate, '%Y') AS timePeriod,-->
<!--            </when>-->
<!--            <when test="timeType == 'week'">-->
<!--                CONCAT(YEAR(admitdate), '-W', LPAD(WEEK(admitdate, 1), 2, '0')) AS timePeriod,-->
<!--            </when>-->
<!--            <otherwise>-->
<!--                DATE_FORMAT(admitdate, '%Y-%m-%d') AS timePeriod,-->
<!--            </otherwise>-->
<!--        </choose>-->
<!--        0 AS dischargeFollowCount,-->
<!--        0 AS outpatientFollowCount,-->
<!--        0 AS pmiCount,-->
<!--        1 AS pmoCount-->
<!--        FROM pat_med_outhosp-->
<!--        WHERE del_flag = '0'-->
<!--        <if test="startDate != null and endDate != null">-->
<!--            AND admitdate >= #{startDate}-->
<!--            AND admitdate &lt;= DATE_ADD(#{endDate}, INTERVAL 1 DAY)-->
<!--        </if>-->
<!--        <if test="orgid != null">-->
<!--            AND orgid = #{orgid}-->
<!--        </if>-->
        <!--        &#45;&#45; 门诊人次数据-->
        <!--        SELECT-->
        <!--        <choose>-->
        <!--            <when test="timeType == 'day'">-->
        <!--                DATE_FORMAT(admitdate, '%Y-%m-%d') AS timePeriod,-->
        <!--            </when>-->
        <!--            <when test="timeType == 'month'">-->
        <!--                DATE_FORMAT(admitdate, '%Y-%m') AS timePeriod,-->
        <!--            </when>-->
        <!--            <when test="timeType == 'year'">-->
        <!--                DATE_FORMAT(admitdate, '%Y') AS timePeriod,-->
        <!--            </when>-->
        <!--            <when test="timeType == 'week'">-->
        <!--                CONCAT(YEAR(admitdate), '-W', LPAD(WEEK(admitdate, 1), 2, '0')) AS timePeriod,-->
        <!--            </when>-->
        <!--            <otherwise>-->
        <!--                DATE_FORMAT(admitdate, '%Y-%m-%d') AS timePeriod,-->
        <!--            </otherwise>-->
        <!--        </choose>-->
        <!--        0 AS dischargeFollowCount,-->
        <!--        0 AS outpatientFollowCount,-->
        <!--        0 AS pmiCount,-->
        <!--        1 AS pmoCount-->
        <!--        FROM pat_med_outhosp-->
        <!--        WHERE del_flag = '0'-->
        <!--        <if test="startDate != null and endDate != null">-->
        <!--            AND admitdate >= #{startDate}-->
        <!--            AND admitdate &lt;= DATE_ADD(#{endDate}, INTERVAL 1 DAY)-->
        <!--        </if>-->
        <!--        <if test="orgid != null">-->
        <!--            AND orgid = #{orgid}-->
        <!--        </if>-->
<!--        <if test="deptcodes != null and deptcodes.size() > 0">-->
<!--            AND deptcode IN-->
<!--            <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">-->
<!--                #{deptcode}-->
<!--            </foreach>-->
<!--        </if>-->
        <!--        <if test="deptcodes != null and deptcodes.size() > 0">-->
        <!--            AND deptcode IN-->
        <!--            <foreach collection="deptcodes" item="deptcode" open="(" separator="," close=")">-->
        <!--                #{deptcode}-->
        <!--            </foreach>-->
        <!--        </if>-->
        ) AS combined_data
        GROUP BY timePeriod
@@ -2070,7 +2130,8 @@
        SUM(CASE WHEN sendstate = 2 THEN 1 ELSE 0 END) AS dsf,
        SUM(CASE WHEN sendstate = 1 THEN 1 ELSE 0 END) AS blq,
        SUM(CASE WHEN excep IS NOT NULL AND excep = '1' THEN 1 ELSE 0 END) AS yc,
        SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg
        SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg,
        COUNT(1) as total
        FROM service_subtask
        where 1=1
        and del_flag = 0
@@ -2236,6 +2297,9 @@
        <if test="excep != null ">
            AND excep = #{excep}
        </if>
        <if test="taskName != null  and taskName != ''">
            AND task_name like concat('%', #{taskName}, '%')
        </if>
        <if test="visitCount != null and visitCount == 1">
            AND visit_count = 1
        </if>
@@ -2272,9 +2336,11 @@
        </if>
    </select>
    <select id="getCurrentUserServiceSubtaskCount" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity" resultType="map">
    <select id="getCurrentUserServiceSubtaskCount" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
            resultType="map">
        SELECT
        COUNT(CASE WHEN sendstate = 2 AND date_format(visit_time,'%y%m%d') &lt;= date_format(CURDATE(),'%y%m%d') THEN 1 END) AS pendingVisitCount,
        COUNT(CASE WHEN sendstate = 2 AND date_format(visit_time,'%y%m%d') &lt;= date_format(CURDATE(),'%y%m%d') THEN 1
        END) AS pendingVisitCount,
        COUNT(CASE WHEN sendstate = 5 THEN 1 END) AS failedVisitCount,
        SUM(CASE WHEN excep IS NOT NULL AND excep = '1' THEN 1 ELSE 0 END) AS abnormalVisitCount,
        SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS warnningVisitCount,
@@ -2303,4 +2369,110 @@
        </if>
    </select>
    <select id="querySendCount" parameterType="com.smartor.domain.entity.ServiceSubtaskSatisfactionEntity"
            resultType="Long">
        select distinct id from service_subtask
        where del_flag = 0
        <if test="orgid != null and orgid != ''">
            and orgid = #{orgid}
        </if>
        <if test="campusid != null and campusid != ''">
            and campusid = #{campusid}
        </if>
        <if test="type != null ">and type = #{type}</if>
        <if test="startTime != null">
            AND date_format(visit_time,'%y%m%d') >= date_format(#{startTime},'%y%m%d')
        </if>
        <if test="endTime != null">
            AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
        </if>
        <if test=" libTemplateIds != null and libTemplateIds.size()>0">
            AND libtemplateid IN
            <foreach collection="libTemplateIds" item="libTemplateId" open="(" separator=","
                     close=")">
                #{libTemplateId}
            </foreach>
        </if>
        <if test="(hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0) or (deptcodes != null and deptcodes.size() > 0)">
            AND (
            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
                leavehospitaldistrictcode IN
                <foreach collection="hospitaldistrictcodes" item="hospitaldistrictcode" open="("
                         separator=","
                         close=")">
                    #{hospitaldistrictcode}
                </foreach>
            </if>
            <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0 and deptcodes != null and deptcodes.size() > 0">
                OR
            </if>
            <if test="deptcodes != null and deptcodes.size() > 0">
                deptcode IN
                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                         close=")">
                    #{deptcode}
                </foreach>
            </if>
            )
        </if>
    </select>
    <!--
        按病区或科室分组统计 continue_flag 数量
        传了 leavehospitaldistrictcodes → 按病区维度
        传了 deptcodes              → 按科室维度
        都不传                     → 按病区维度统计全量
    -->
    <!-- 按病区分组统计延续护理数量 -->
    <select id="getContinueNurseCount"
            parameterType="com.smartor.domain.VO.ServiceSubtaskCotinueCountVO"
            resultType="java.util.Map">
        SELECT
        leavehospitaldistrictcode AS groupCode,
        leavehospitaldistrictname AS groupName,
        SUM(CASE WHEN continue_flag = 1 THEN 1 ELSE 0 END) AS noContinueCnt,
        SUM(CASE WHEN continue_flag = 2 THEN 1 ELSE 0 END) AS continueCnt
        FROM service_subtask
        WHERE del_flag = 0
        AND continue_flag IN (1, 2)
        AND leavehospitaldistrictcode IS NOT NULL AND leavehospitaldistrictcode != ''
        <if test="orgid != null and orgid != ''">
            AND orgid = #{orgid}
        </if>
        <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
            AND leavehospitaldistrictcode IN
            <foreach collection="leavehospitaldistrictcodes" item="code" open="(" separator="," close=")">
                #{code}
            </foreach>
        </if>
        GROUP BY leavehospitaldistrictcode, leavehospitaldistrictname
        ORDER BY groupCode
    </select>
    <!-- 按科室分组统计延续护理数量 -->
    <select id="getContinueNurseCountByDept"
            parameterType="com.smartor.domain.VO.ServiceSubtaskCotinueCountVO"
            resultType="java.util.Map">
        SELECT
        deptcode AS groupCode,
        deptname AS groupName,
        SUM(CASE WHEN continue_flag = 1 THEN 1 ELSE 0 END) AS noContinueCnt,
        SUM(CASE WHEN continue_flag = 2 THEN 1 ELSE 0 END) AS continueCnt
        FROM service_subtask
        WHERE del_flag = 0
        AND continue_flag IN (1, 2)
        AND deptcode IS NOT NULL AND deptcode != ''
        <if test="orgid != null and orgid != ''">
            AND orgid = #{orgid}
        </if>
        <if test="deptcodes != null and deptcodes.size() > 0">
            AND deptcode IN
            <foreach collection="deptcodes" item="code" open="(" separator="," close=")">
                #{code}
            </foreach>
        </if>
        GROUP BY deptcode, deptname
        ORDER BY groupCode
    </select>
</mapper>