陈昶聿
3 天以前 340fdf3adf5b86242ea41934889742ed58c28f14
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -1134,6 +1134,7 @@
        where patid = #{patid} and taskid = #{taskid}
    </update>
    <select id="getSfStatistics" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
@@ -1165,8 +1166,69 @@
                AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endTime},'%y%m%d')
            </if>
            <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
            <if test="visitDeptName != null">abd visit_dept_name = #{visitDeptName}</if>
            <if test="isabnormal != null">abd isabnormal = #{isabnormal}</if>
            <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
            <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
        </where>
    </select>
    <!-- 优化后的查询:减少返回字段,优化日期查询,避免 date_format -->
    <select id="getSfStatistics1" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
            resultMap="ServiceSubtaskResult">
        SELECT
            id,
            sendname,
            phone,
            age,
            sendstate,
            deptcode,
            deptname,
            drcode,
            drname,
            leavehospitaldistrictcode,
            leavehospitaldistrictname,
            leavediagname,
            visit_count,
            preachform,
            excep,
            finishtime,
            visit_time,
            orgid,
            patid,
            taskid,
            task_situation,
            current_preachform
        FROM service_subtask
        <where>
            del_flag=0
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="(" separator=","
                         close=")">
                    #{leavehospitaldistrictcode}
                </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="serviceType != null and serviceType.size() > 0">
                AND service_type IN
                <foreach collection="serviceType" item="serviceType" open="(" separator=","
                         close=")">
                    #{serviceType}
                </foreach>
            </if>
            <!-- 优化:使用日期范围查询替代 date_format,可以使用索引 -->
            <if test="startTime != null and endTime!=null">
                AND visit_time >= #{startTime}
                AND visit_time &lt; DATE_ADD(#{endTime}, INTERVAL 1 DAY)
            </if>
            <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
            <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
            <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
        </where>
    </select>