陈昶聿
3 天以前 8f3649533c9a4062cf00f583dfef96dcb7837514
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -98,6 +98,7 @@
        <result property="scheduleDetailId" column="schedule_detail_id"/>
        <result property="scheduleSeq" column="schedule_seq"/>
        <result property="loopCount" column="loop_count"/>
        <result property="campusid" column="campusid"/>
    </resultMap>
    <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -151,6 +152,7 @@
    <sql id="selectServiceSubtaskVo">
        select id,
               hosp_type,
               campusid,
               task_guid,
               diagname,
               patfrom,
@@ -279,7 +281,6 @@
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        and sendstate != 5
        <if test="orgid != null and orgid != ''">
            and orgid = #{orgid}
        </if>
@@ -289,26 +290,6 @@
        <if test="taskid != null ">and taskid = #{taskid}</if>
        <if test="visitTime != null">
            AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{visitTime},'%y%m%d')
        </if>
        <if test="sendstate != null ">and sendstate = #{sendstate}</if>
        <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>
        <if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext}</if>
        UNION ALL
        <include refid="selectServiceSubtaskVo"/>
        where 1=1
        and del_flag = 0
        and sendstate = 5
        <if test="orgid != null and orgid != ''">
            and orgid = #{orgid}
        </if>
        <if test="subId != null">
            AND id = #{subId}
        </if>
        <if test="taskid != null ">and taskid = #{taskid}</if>
        <if test="visitTime != null">
            AND date_format(visit_time,'%y%m%d') &lt;= date_format(DATE_ADD(#{visitTime}, INTERVAL 1 DAY),'%y%m%d')
        </if>
        <if test="sendstate != null ">and sendstate = #{sendstate}</if>
        <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if>
@@ -525,10 +506,10 @@
        <if test="isVisitAgain != null">and is_visit_again = #{isVisitAgain}</if>
        <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
            AND visit_dept_code IN
            <foreach collection="visitDeptCodes" item="visitDeptCodes" open="("
            <foreach collection="visitDeptCodes" item="visitDeptCode" open="("
                     separator=","
                     close=")">
                #{visitDeptCodes}
                #{visitDeptCode}
            </foreach>
        </if>
        <if test="sort != null  and sort==0">order by endtime asc</if>
@@ -756,57 +737,70 @@
    <select id="selectTimelyRateBatch" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity" resultType="map">
        SELECT
        <if test="groupKey != null and groupKey != ''">
            ${groupKey} as groupKey,
            ss.${groupKey} as groupKey,
        </if>
        SUM(CASE WHEN finishtime IS NOT NULL AND DATE(visit_time) &lt;= DATE(finishtime) THEN 1 ELSE 0 END) / COUNT(*) AS finishRate,
        SUM(CASE WHEN ss.finishtime IS NOT NULL AND DATE(ss.visit_time) &lt;= DATE(ss.finishtime) THEN 1 ELSE 0 END) / COUNT(*) AS finishRate,
        <if test="rateDay != null">
            SUM(CASE WHEN finishtime IS NOT NULL AND DATEDIFF(finishtime, endtime) &lt;= #{rateDay} THEN 1 ELSE 0 END) / COUNT(*) AS rate
            SUM(CASE WHEN ss.finishtime IS NOT NULL
            AND DATEDIFF(ss.finishtime, ss.endtime) &lt;= #{rateDay} + COALESCE(cp.compensate_days, 0)
            THEN 1 ELSE 0 END) / COUNT(*) AS rate
        </if>
        <if test="rateDay == null">
            NULL AS rate
        </if>
        FROM service_subtask
        WHERE del_flag = 0
        AND visit_time IS NOT NULL
        FROM service_subtask ss
        <if test="rateDay != null">
            <!-- 补偿时间:先按子任务聚合成一行再关联,避免一对多放大 COUNT(*) 分母。
                 compensate_time 是 varchar 且可能存成空串,需先置空再转数字 -->
            LEFT JOIN (
            SELECT subid,
            SUM(CAST(COALESCE(NULLIF(TRIM(compensate_time), ''), '0') AS SIGNED)) AS compensate_days
            FROM service_subtask_preachform
            WHERE del_flag = 0
            GROUP BY subid
            ) cp ON cp.subid = ss.id
        </if>
        WHERE ss.del_flag = 0
        AND ss.visit_time IS NOT NULL
        <if test="starttime == null and endtime==null">
            AND DATE(visit_time) &lt; DATE(NOW())
            AND DATE(ss.visit_time) &lt; DATE(NOW())
        </if>
        <if test="starttime != null and endtime!=null">
            AND visit_time >= #{starttime}
            AND visit_time &lt; DATE_ADD(#{endtime}, INTERVAL 1 DAY)
            AND ss.visit_time >= #{starttime}
            AND ss.visit_time &lt; DATE_ADD(#{endtime}, INTERVAL 1 DAY)
        </if>
        <if test="orgid != null and orgid != ''">AND orgid = #{orgid}</if>
        <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
        <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>
        <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
        <if test="orgid != null and orgid != ''">AND ss.orgid = #{orgid}</if>
        <if test="deptcode != null  and deptcode != ''">and ss.deptcode = #{deptcode}</if>
        <if test="deptname != null  and deptname != ''">and ss.deptname = #{deptname}</if>
        <if test="isabnormal != null">and ss.isabnormal = #{isabnormal}</if>
        <if test="leavehospitaldistrictcode != null  and leavehospitaldistrictcode != ''">and
            leavehospitaldistrictcode = #{leavehospitaldistrictcode}
            ss.leavehospitaldistrictcode = #{leavehospitaldistrictcode}
        </if>
        <if test="leavehospitaldistrictname != null  and leavehospitaldistrictname != ''">and
            leavehospitaldistrictname = #{leavehospitaldistrictname}
            ss.leavehospitaldistrictname = #{leavehospitaldistrictname}
        </if>
        <if test="managementDoctorCode != null">and management_doctor_code = #{managementDoctorCode}</if>
        <if test="managementDoctor != null">and management_doctor like concat('%',#{managementDoctor}, '%')</if>
        <if test="managementDoctorCode != null">and ss.management_doctor_code = #{managementDoctorCode}</if>
        <if test="managementDoctor != null">and ss.management_doctor like concat('%',#{managementDoctor}, '%')</if>
        <if test="visitCount != null and visitCount == 1">
            AND visit_count = 1
            AND ss.visit_count = 1
        </if>
        <if test="visitCount != null and visitCount > 1">
            AND visit_count > 1
            AND ss.visit_count > 1
        </if>
        <if test="serviceTypeList != null">
            AND service_type IN
            AND ss.service_type IN
            <foreach collection="serviceTypeList" item="serviceType" open="(" separator=","
                     close=")">
                #{serviceType}
            </foreach>
        </if>
        <if test="groupKey != null and groupKey != ''">
            AND ${groupKey} IN
            AND ss.${groupKey} IN
            <foreach collection="groupKeyList" item="key" open="(" separator=","
                     close=")">
                #{key}
            </foreach>
            GROUP BY ${groupKey}
            GROUP BY ss.${groupKey}
        </if>
    </select>
@@ -969,6 +963,7 @@
            <if test="continueTimeNext != null ">continue_time_next,</if>
            <if test="continueContent != null ">continue_content,</if>
            <if test="operationItemId != null ">operation_item_id,</if>
            <if test="campusid != null">campusid,</if>
            <if test="scheduleId != null ">schedule_id,</if>
            <if test="scheduleDetailId != null ">schedule_detail_id,</if>
            <if test="scheduleSeq != null ">schedule_seq,</if>
@@ -1065,6 +1060,7 @@
            <if test="continueTimeNext != null ">#{continueTimeNext,jdbcType=TIMESTAMP},</if>
            <if test="continueContent != null ">#{continueContent},</if>
            <if test="operationItemId != null ">#{operationItemId},</if>
            <if test="campusid != null">#{campusid},</if>
            <if test="scheduleId != null ">#{scheduleId},</if>
            <if test="scheduleDetailId != null ">#{scheduleDetailId},</if>
            <if test="scheduleSeq != null ">#{scheduleSeq},</if>
@@ -1166,6 +1162,7 @@
            <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
            <if test="continueContent != null ">continue_content = #{continueContent},</if>
            <if test="operationItemId != null ">operation_item_id = #{operationItemId},</if>
            <if test="campusid != null">campusid=#{campusid},</if>
            <if test="scheduleId != null ">schedule_id = #{scheduleId},</if>
            <if test="scheduleDetailId != null ">schedule_detail_id = #{scheduleDetailId},</if>
            <if test="scheduleSeq != null ">schedule_seq = #{scheduleSeq},</if>
@@ -1370,16 +1367,17 @@
            <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
            <if test="continueContent != null ">continue_content = #{continueContent},</if>
        </trim>
        where
        <if test="patid != null ">
            patid = #{patid}
        </if>
        <if test="taskid != null ">
            and taskid = #{taskid}
        </if>
        <if test="id != null ">
            and id = #{id}
        </if>
        <where>
            <if test="patid != null ">
                patid = #{patid}
            </if>
            <if test="taskid != null ">
                and taskid = #{taskid}
            </if>
            <if test="id != null ">
                and id = #{id}
            </if>
        </where>
    </update>
    <update id="updateServiceSubtaskByTaskGuid" parameterType="com.smartor.domain.ServiceSubtask">
@@ -1504,6 +1502,8 @@
        orgid,
        drcode,
        drname,
        management_doctor_code,
        management_doctor,
        leavehospitaldistrictcode,
        leavehospitaldistrictname,
        deptcode,
@@ -1817,7 +1817,8 @@
            continue_content,
            continue_count,
            continue_time_next,
            task_situation
            task_situation,
            remark
            from service_subtask
            where 1=1
            and del_flag = 0
@@ -2559,8 +2560,9 @@
            </if>
        </if>
        <if test="deptOrDistrict==2">
            AND (1=1
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND (leavehospitaldistrictcode IN
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                         separator=","
                         close=")">
@@ -2570,17 +2572,18 @@
            <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
                OR deptcode IN
                <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                         close="))">
                         close=")">
                    #{leaveldeptcode}
                </foreach>
            </if>
            )
        </if>
        <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
            AND visit_dept_code IN
            <foreach collection="visitDeptCodes" item="visitDeptCodes" open="("
            <foreach collection="visitDeptCodes" item="visitDeptCode" open="("
                     separator=","
                     close=")">
                #{visitDeptCodes}
                #{visitDeptCode}
            </foreach>
        </if>
        <if test="leavehospitaldistrictname != null and leavehospitaldistrictname != ''">
@@ -2906,8 +2909,8 @@
        <if test="sendstate != null">
            AND sendstate = #{sendstate}
        </if>
        <if test="isFinished != null and isFinished == '1'">
            AND finishtime is not null
        <if test="isFinished != null and isFinished != ''">
            and finishtime is not null
        </if>
        <if test="starttime != null">AND starttime &gt;= #{starttime}</if>
        <if test="endtime != null">AND endtime &lt;= #{endtime}</if>
@@ -2955,7 +2958,7 @@
        order by schedule_seq asc, id asc
    </select>
    <select id="gethelibraryCountHyperlink" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
    <select id="gethelibraryCountHyperlink" parameterType="com.smartor.domain.VO.HeLibraryCountVO"
            resultMap="ServiceSubtaskResult">
        select id,
        visit_count,
@@ -2994,7 +2997,8 @@
        continue_content,
        continue_count,
        continue_time_next,
        task_situation
        task_situation,
        remark
        from service_subtask
        where 1=1
        and del_flag = 0
@@ -3005,8 +3009,8 @@
        <if test="sendstate != null">
            AND sendstate = #{sendstate}
        </if>
        <if test="isFinished != null and isFinished == '1'">
            AND finishtime is not null
        <if test="isFinished != null and isFinished != ''">
            and finishtime is not null
        </if>
        <if test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0">
            AND leavehospitaldistrictcode IN
@@ -3058,6 +3062,7 @@
            #{taskId}
        </foreach>
        and s.sendstate=6
        and d.del_flag=0
        GROUP BY
        t.taskid,
        d.questiontext
@@ -3067,6 +3072,7 @@
            #{taskId}
        </foreach>
        AND s.sendstate = 6
        and d.del_flag=0
      <if test="startOutHospTime != null">
        AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
    </if>