| | |
| | | </where> |
| | | </select> |
| | | |
| | | <select id="selectTimelyRate" parameterType="com.smartor.domain.ServiceSubtask" resultType="double"> |
| | | <!-- 原有查询,性能差 --> |
| | | <select id="selectTimelyRateOld" parameterType="com.smartor.domain.ServiceSubtask" resultType="double"> |
| | | SELECT sum( a.finished )/ sum( 1 ) FROM |
| | | (SELECT id, visit_time, finishtime, |
| | | (CASE WHEN ( DATE_FORMAT( visit_time, '%y%m%d' )< DATE_FORMAT( IF ( ISNULL( finishtime ), NOW(), finishtime |
| | |
| | | <if test="managementDoctorCode != null">and management_doctor_code = #{managementDoctorCode}</if> |
| | | <if test="managementDoctor != null">and management_doctor like concat('%',#{managementDoctor}, '%')</if> |
| | | ) a |
| | | </select> |
| | | |
| | | <!-- 优化后的及时率查询:直接在 WHERE 中计算,避免子查询 --> |
| | | <select id="selectTimelyRate" parameterType="com.smartor.domain.ServiceSubtask" resultType="double"> |
| | | SELECT |
| | | SUM(CASE WHEN DATE(visit_time) < DATE(COALESCE(finishtime, NOW())) THEN 1 ELSE 0 END) / COUNT(*) |
| | | FROM service_subtask |
| | | WHERE del_flag=0 |
| | | <if test="starttime == null and endtime==null"> |
| | | AND visit_time < NOW() |
| | | </if> |
| | | <if test="starttime != null and endtime!=null"> |
| | | <!-- 优化:使用日期范围查询替代 date_format --> |
| | | AND visit_time >= #{starttime} |
| | | AND visit_time < 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="drcode != null and drcode != ''">AND drcode = #{drcode}</if> |
| | | <if test="deptname != null and deptname != ''">AND deptname = #{deptname}</if> |
| | | <if test="isabnormal != null">AND isabnormal = #{isabnormal}</if> |
| | | <if test="leavehospitaldistrictcode != null and leavehospitaldistrictcode != ''"> |
| | | AND leavehospitaldistrictcode = #{leavehospitaldistrictcode} |
| | | </if> |
| | | <if test="leavehospitaldistrictname != null and leavehospitaldistrictname != ''"> |
| | | AND leavehospitaldistrictname = #{leavehospitaldistrictname} |
| | | </if> |
| | | <if test="managementDoctorCode != null">AND management_doctor_code = #{managementDoctorCode}</if> |
| | | <if test="managementDoctor != null">AND management_doctor LIKE CONCAT('%',#{managementDoctor}, '%')</if> |
| | | </select> |
| | | |
| | | <select id="selectTimelyRateDetail" parameterType="com.smartor.domain.ServiceSubtask" |
| | |
| | | where patid = #{patid} and taskid = #{taskid} |
| | | </update> |
| | | |
| | | <select id="getSfStatistics" parameterType="com.smartor.domain.ServiceSubtaskCountReq" |
| | | |
| | | <select id="getSfStatisticsOld" parameterType="com.smartor.domain.ServiceSubtaskCountReq" |
| | | resultMap="ServiceSubtaskResult"> |
| | | <include refid="selectServiceSubtaskVo"/> |
| | | <where> |
| | |
| | | AND date_format(visit_time,'%y%m%d') <= 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="getSfStatistics" 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 < 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> |
| | | |