| | |
| | | and endtime |
| | | </select> |
| | | |
| | | <!-- 门诊满意度综合得分排名(按科室或病区) --> |
| | | <!-- 综合满意度 = Σ(评分明细权重) / 评分明细条数 × 100%,权重只取 1、0.8、0.6、0.4、0.2 五档 --> |
| | | <select id="selectMzMydScoreRank" parameterType="com.smartor.domain.VO.MzMydScoreRankVO" |
| | | resultType="com.smartor.domain.DTO.MzMydScoreRankDTO"> |
| | | SELECT |
| | | t.code AS code, |
| | | t.name AS name, |
| | | ROUND(AVG(t.w) * 100, 2) AS score, |
| | | COUNT(*) AS itemCount |
| | | FROM ( |
| | | SELECT |
| | | <choose> |
| | | <when test='dimensionType == "2"'> |
| | | s.leavehospitaldistrictcode AS code, |
| | | s.leavehospitaldistrictname AS name, |
| | | </when> |
| | | <otherwise> |
| | | s.deptcode AS code, |
| | | s.deptname AS name, |
| | | </otherwise> |
| | | </choose> |
| | | CAST(d.score AS DECIMAL(10,4)) AS w |
| | | FROM service_subtask s |
| | | INNER JOIN service_subtask_detail d ON d.sub_id = s.id |
| | | WHERE s.del_flag = '0' |
| | | AND d.del_flag = '0' |
| | | AND s.sendstate = 6 |
| | | AND s.service_type = #{serviceType} |
| | | <!-- <!– 只取公式里的五档权重,空值/0/未答等既不进分子也不进分母 –>--> |
| | | <!-- AND CAST(d.score AS DECIMAL(10,4)) IN (1, 0.8, 0.6, 0.4, 0.2)--> |
| | | <!-- 同一子任务同一题目只保留最新一条,避免重答被重复计入项数 --> |
| | | AND d.id = ( |
| | | SELECT MAX(d2.id) |
| | | FROM service_subtask_detail d2 |
| | | WHERE d2.sub_id = d.sub_id |
| | | AND d2.questiontext <=> d.questiontext |
| | | AND d2.del_flag = '0' |
| | | ) |
| | | <if test="orgid != null and orgid != ''"> |
| | | AND s.orgid = #{orgid} |
| | | </if> |
| | | <if test="campusid != null and campusid != ''"> |
| | | AND s.campusid = #{campusid} |
| | | </if> |
| | | <if test="startFinishTime != null"> |
| | | AND s.finishtime >= #{startFinishTime} |
| | | </if> |
| | | <if test="endFinishTime != null"> |
| | | AND s.finishtime < DATE_ADD(#{endFinishTime}, INTERVAL 1 DAY) |
| | | </if> |
| | | <choose> |
| | | <when test='dimensionType == "2"'> |
| | | AND s.leavehospitaldistrictcode IS NOT NULL AND s.leavehospitaldistrictcode <> '' |
| | | AND s.leavehospitaldistrictname IS NOT NULL AND s.leavehospitaldistrictname <> '' |
| | | <if test="districtCodes != null and districtCodes.size() > 0"> |
| | | AND s.leavehospitaldistrictcode IN |
| | | <foreach collection="districtCodes" item="districtCode" open="(" separator="," close=")"> |
| | | #{districtCode} |
| | | </foreach> |
| | | </if> |
| | | </when> |
| | | <otherwise> |
| | | AND s.deptcode IS NOT NULL AND s.deptcode <> '' |
| | | AND s.deptname IS NOT NULL AND s.deptname <> '' |
| | | <if test="deptCodes != null and deptCodes.size() > 0"> |
| | | AND s.deptcode IN |
| | | <foreach collection="deptCodes" item="deptCode" open="(" separator="," close=")"> |
| | | #{deptCode} |
| | | </foreach> |
| | | </if> |
| | | </otherwise> |
| | | </choose> |
| | | ) t |
| | | GROUP BY t.code, t.name |
| | | ORDER BY AVG(t.w) DESC, COUNT(*) DESC |
| | | <if test="limit != null and limit > 0"> |
| | | LIMIT #{limit} |
| | | </if> |
| | | </select> |
| | | |
| | | |
| | | </mapper> |
| | | |