针灸质控中心平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

383 lines
17 KiB

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.acupuncture.system.persist.dao.AdminTongjiDao">
<select id="queryGenderStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$GenderVo">
SELECT
IFNULL(SUM(CASE WHEN gender = 0 THEN 1 ELSE 0 END), 0) AS male,
IFNULL(SUM(CASE WHEN gender = 1 THEN 1 ELSE 0 END), 0) AS female,
IFNULL(SUM(CASE WHEN gender IS NULL OR gender NOT IN (0, 1) THEN 1 ELSE 0 END), 0) AS other
FROM
v_pms_patient
<where>
del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
<if test="dto.startTime != null">
AND create_time &gt;= #{dto.startTime}
</if>
<if test="dto.endTime != null">
AND create_time &lt;= #{dto.endTime}
</if>
</where>
</select>
<select id="queryAgeStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$AgeVo">
SELECT
SUM(CASE WHEN age BETWEEN 0 AND 40 THEN 1 ELSE 0 END) AS num1,
SUM(CASE WHEN age BETWEEN 41 AND 50 THEN 1 ELSE 0 END) AS num2,
SUM(CASE WHEN age BETWEEN 51 AND 60 THEN 1 ELSE 0 END) AS num3,
SUM(CASE WHEN age BETWEEN 61 AND 70 THEN 1 ELSE 0 END) AS num4,
SUM(CASE WHEN age BETWEEN 71 AND 80 THEN 1 ELSE 0 END) AS num5,
SUM(CASE WHEN age > 80 THEN 1 ELSE 0 END) AS num6
FROM
(
SELECT
TIMESTAMPDIFF(YEAR, birth_date, now()) AS age
FROM
v_pms_patient
WHERE
del_flag = 0 and
birth_date IS NOT NULL
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
<if test="dto.startTime != null">
AND create_time &gt;= #{dto.startTime}
</if>
<if test="dto.endTime != null">
AND create_time &lt;= #{dto.endTime}
</if>
) AS age_data;
</select>
<select id="queryJwbzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$PatientVo$JwbzVo">
SELECT
SUM(CASE WHEN FIND_IN_SET ('高血压' ,current_illness_history ) THEN 1 ELSE 0 END) AS gxy, -- 高血压
SUM(CASE WHEN FIND_IN_SET ('脑血管病' ,current_illness_history ) THEN 1 ELSE 0 END) AS nxgb, -- 脑血管病
SUM(CASE WHEN FIND_IN_SET ('恶性肿瘤' ,current_illness_history ) THEN 1 ELSE 0 END) AS exzl, -- 恶性肿瘤
SUM(CASE WHEN FIND_IN_SET ('冠心病' ,current_illness_history ) THEN 1 ELSE 0 END) AS gxb, -- 冠心病
SUM(CASE WHEN FIND_IN_SET ('精神疾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS jsjb, -- 精神疾病
SUM(CASE WHEN FIND_IN_SET ('胃和十二指肠溃疡' ,current_illness_history ) THEN 1 ELSE 0 END) AS whsezcky, --
SUM(CASE WHEN FIND_IN_SET ('肥胖症' ,current_illness_history ) THEN 1 ELSE 0 END) AS fpz, -- 肥胖症
SUM(CASE WHEN FIND_IN_SET ('骨质疏松症' ,current_illness_history ) THEN 1 ELSE 0 END) AS gzssz, -- 骨质疏松症
SUM(CASE WHEN FIND_IN_SET ('遗传性、先天性疾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS ycxXtxjb, --
SUM(CASE WHEN FIND_IN_SET ('糖尿病' ,current_illness_history ) THEN 1 ELSE 0 END) AS tnb, -- 糖尿病
SUM(CASE WHEN FIND_IN_SET ('慢性肺系疾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS mxfxjb, -- 慢性肺系疾病
SUM(CASE WHEN FIND_IN_SET ('高脂血症' ,current_illness_history ) THEN 1 ELSE 0 END) AS gzxz, -- 高脂血症
SUM(CASE WHEN FIND_IN_SET ('肝脏疾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS gzjb, -- 肝脏疾病
SUM(CASE WHEN FIND_IN_SET ('过敏性疾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS gmxjb, -- 过敏性疾病
SUM(CASE WHEN FIND_IN_SET ('关节炎' ,current_illness_history ) THEN 1 ELSE 0 END) AS gjy, -- 关节炎
SUM(CASE WHEN FIND_IN_SET ('痛风' ,current_illness_history ) THEN 1 ELSE 0 END) AS tf, -- 痛风
SUM(CASE WHEN FIND_IN_SET ('肾炎、肾病' ,current_illness_history ) THEN 1 ELSE 0 END) AS sySb, -- 肾炎、肾病
SUM(CASE WHEN
FIND_IN_SET('高血压' , current_illness_history ) = 0 AND
FIND_IN_SET('脑血管病' , current_illness_history ) = 0 AND
FIND_IN_SET('恶性肿瘤' , current_illness_history ) = 0 AND
FIND_IN_SET('冠心病' , current_illness_history ) = 0 AND
FIND_IN_SET('精神疾病' , current_illness_history ) = 0 AND
FIND_IN_SET('胃和十二指肠溃疡' , current_illness_history ) = 0 AND
FIND_IN_SET('肥胖症' , current_illness_history ) = 0 AND
FIND_IN_SET('骨质疏松症' , current_illness_history ) = 0 AND
FIND_IN_SET('遗传性、先天性疾病' , current_illness_history ) = 0 AND
FIND_IN_SET('糖尿病' , current_illness_history ) = 0 AND
FIND_IN_SET('慢性肺系疾病' , current_illness_history ) = 0 AND
FIND_IN_SET('高脂血症' , current_illness_history ) = 0 AND
FIND_IN_SET('肝脏疾病' , current_illness_history ) = 0 AND
FIND_IN_SET('过敏性疾病' , current_illness_history ) = 0 AND
FIND_IN_SET('关节炎' , current_illness_history ) = 0 AND
FIND_IN_SET('痛风' , current_illness_history ) = 0 AND
FIND_IN_SET('肾炎、肾病' , current_illness_history ) = 0
THEN 1 ELSE 0 END) AS other -- 其他
FROM
v_pms_patient
<where>
del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</where>
</select>
<resultMap id="ResultMap" type="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$SortVo">
<id column="type" property="type" javaType="java.lang.String"/>
<result column="total" property="total" javaType="java.lang.Integer"/>
<result column="count" property="count" javaType="java.lang.Integer"/>
<result column="disease_name" property="diseaseName" javaType="java.lang.String"/>
</resultMap>
<select id="queryZyzdStatistics" resultType="java.lang.String">
SELECT
answer
FROM
v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE
r.question_code = 'JBXX_ZYZD'
and
r.del_flag = 0
and t.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="queryTotalPatient" resultType="java.lang.Integer">
SELECT
COUNT(1)
FROM
v_pms_patient
<where>
del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</where>
</select>
<select id="queryTxfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$TxfbVo">
SELECT
COUNT(*) AS total,
SUM(CASE WHEN answer = '隐形肥胖型' THEN 1 ELSE 0 END) AS yxfpz,
SUM(CASE WHEN answer = '脂肪过多型' THEN 1 ELSE 0 END) AS zfgdx,
SUM(CASE WHEN answer = '肥胖型' THEN 1 ELSE 0 END) AS fpx,
SUM(CASE WHEN answer = '肌肉不足型' THEN 1 ELSE 0 END) AS jrbzx,
SUM(CASE WHEN answer = '健康匀称型' THEN 1 ELSE 0 END) AS jkjcx,
SUM(CASE WHEN answer = '超重肌肉型' THEN 1 ELSE 0 END) AS czjrx,
SUM(CASE WHEN answer = '消瘦型' THEN 1 ELSE 0 END) AS xsx,
SUM(CASE WHEN answer = '低脂肪型' THEN 1 ELSE 0 END) AS dzfx,
SUM(CASE WHEN answer = '运动员型' THEN 1 ELSE 0 END) AS ydyx
FROM
v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE
question_code = 'PG_RTCF_TXLX'
AND r.del_flag = 0
and t.del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</select>
<select id="queryZytzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$ZytzVo">
SELECT
COUNT(*) AS total,
SUM(CASE WHEN answer = '平和质' THEN 1 ELSE 0 END) AS phz,
SUM(CASE WHEN answer = '气虚质' THEN 1 ELSE 0 END) AS qxz,
SUM(CASE WHEN answer = '阳虚质' THEN 1 ELSE 0 END) AS yangxz,
SUM(CASE WHEN answer = '阴虚质' THEN 1 ELSE 0 END) AS yinxz,
SUM(CASE WHEN answer = '痰湿质' THEN 1 ELSE 0 END) AS tsz,
SUM(CASE WHEN answer = '湿热质' THEN 1 ELSE 0 END) AS srz,
SUM(CASE WHEN answer = '血瘀质' THEN 1 ELSE 0 END) AS xyz,
SUM(CASE WHEN answer = '气郁质' THEN 1 ELSE 0 END) AS qyz,
SUM(CASE WHEN answer = '特禀质' THEN 1 ELSE 0 END) AS tlz
FROM
v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE
question_code = 'PG_TZBS_ZYTZ'
AND r.del_flag = 0 and t.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="queryZllxtjStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$Zllxtj">
SELECT
SUM( CASE WHEN answer = '中西医结合治疗' THEN 1 ELSE 0 END ) AS zxyjh,
SUM( CASE WHEN answer = '单纯中医治疗' THEN 1 ELSE 0 END ) AS czy
FROM
v_pms_treatment t
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id
WHERE
question_code = 'ZLFA_ZLLX'
AND t.del_flag = 0
AND t.del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</select>
<select id="queryFpzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$BzfffbVo$Fpz">
SELECT
COUNT( CASE WHEN question_code = 'ZLFA_XWXLGY' THEN 1 END ) AS xwxlg,
COUNT( CASE WHEN question_code = 'ZLFA_YDGY' THEN 1 END ) AS ydgy,
COUNT( CASE WHEN question_code = 'ZLFA_LCYYZL' THEN 1 END ) AS lcyyzl,
COUNT( CASE WHEN question_code = 'ZLFA_ZJ' THEN 1 END ) AS zjlf,
COUNT( CASE WHEN question_code = 'ZLFA_ZL' THEN 1 END ) AS ywzl
FROM
v_pms_treatment_record r
left join
v_pms_treatment t on r.treatment_id = t.id
WHERE
question_code IN ( 'ZLFA_XWXLGY', 'ZLFA_YDGY', 'ZLFA_LCYYZL', 'ZLFA_ZJ', 'ZLFA_ZL' )
AND r.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="queryZlxgStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$ZlxgVo">
sELECT
SUM(CASE WHEN answer = '治愈' THEN 1 ELSE 0 END) AS zy,
SUM(CASE WHEN answer = '显效' THEN 1 ELSE 0 END) AS xx,
SUM(CASE WHEN answer = '好转' THEN 1 ELSE 0 END) AS hz,
SUM(CASE WHEN answer = '无效' THEN 1 ELSE 0 END) AS wx
FROM
v_pms_treatment t
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id
WHERE
question_code = 'ZLFA_ZLXG'
AND t.del_flag = 0
and r.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="queryZlfyStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$ZlfyVo">
SELECT
SUM(CASE WHEN answer &lt; 300 THEN 1 ELSE 0 END) AS score1,
SUM(CASE WHEN answer BETWEEN 300 AND 900 THEN 1 ELSE 0 END) AS score2,
SUM(CASE WHEN answer BETWEEN 901 AND 2000 THEN 1 ELSE 0 END) AS score3,
SUM(CASE WHEN answer BETWEEN 2001 AND 5000 THEN 1 ELSE 0 END) AS score4,
SUM(CASE WHEN answer > 5000 THEN 1 ELSE 0 END) AS score5
FROM
v_pms_treatment t
LEFT JOIN v_pms_treatment_record r ON t.id = r.treatment_id
WHERE
question_code = 'ZLFA_ZTFY'
AND t.del_flag = 0
and r.del_flag = 0
AND answer REGEXP '^[0-9]+$';
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="querySftjStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$SftjVo">
SELECT
COUNT(*) AS num,
lost_reason AS reason
FROM
v_fms_followup_task
WHERE
status = 2
AND del_flag = 0
GROUP BY
lost_reason
ORDER BY
num DESC
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</select>
<select id="querySfStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$SffbVo$DlVo">
SELECT
queue_id as queueId,
q.name as queueName,
COUNT(*) AS num, -- 总记录数
SUM(CASE WHEN t.status = 0 THEN 1 ELSE 0 END) AS dsf, -- 待随访
SUM(CASE WHEN t.status = 0 AND followup_time IS NULL AND start_time BETWEEN DATE_SUB(NOW(), INTERVAL 2 DAY) AND DATE_ADD(NOW(), INTERVAL 2 DAY) THEN 1 ELSE 0 END) AS ljsf, -- 临近随访
SUM(CASE WHEN (t.status = 0 AND followup_time IS NULL AND end_time &lt; NOW()) OR (t.status = 1 AND followup_time &gt; end_time) THEN 1 ELSE 0 END) AS cqsf, -- 超期随访
SUM(CASE WHEN t.status = 1 AND followup_time &lt;= end_time THEN 1 ELSE 0 END) AS zc -- 正常随访
FROM
v_fms_followup_task t
left join all_fms_followup_queue q on t.queue_id = q.id
WHERE
t.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
group by queue_id
</select>
<select id="queryTtfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$TtfbVo">
SELECT
MAX( CASE WHEN answer = '1' THEN 1 ELSE 0 END ) AS score1,
MAX( CASE WHEN answer = '2' THEN 1 ELSE 0 END ) AS score2,
MAX( CASE WHEN answer = '3' THEN 1 ELSE 0 END ) AS score3,
MAX( CASE WHEN answer = '4' THEN 1 ELSE 0 END ) AS score4,
MAX( CASE WHEN answer = '5' THEN 1 ELSE 0 END ) AS score5
FROM
v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE
question_code = 'PG_TT_TAPS_DF'
AND t.del_flag = 0 and r.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="querySmfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$SmfbVo">
SELECT COUNT(CASE WHEN answer BETWEEN 0 AND 4 THEN 1 END) AS score1,
COUNT(CASE WHEN answer BETWEEN 5 AND 9 THEN 1 END) AS score2,
COUNT(CASE WHEN answer BETWEEN 10 AND 14 THEN 1 END) AS score3,
COUNT(CASE WHEN answer BETWEEN 15 AND 19 THEN 1 END) AS score4,
COUNT(CASE WHEN answer BETWEEN 20 AND 27 THEN 1 END) AS score5
FROM v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE question_code = 'PG_SM_PHQ-9_DF'
AND t.del_flag = 0
and r.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="queryJlfbStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$TreamentVo$JlfbVo">
SELECT COUNT(CASE WHEN answer &lt; 8 THEN 1 END) AS score1,
COUNT(CASE WHEN answer BETWEEN 8 AND 20 THEN 1 END) AS score2,
COUNT(CASE WHEN answer BETWEEN 21 AND 35 THEN 1 END) AS score3,
COUNT(CASE WHEN answer &gt; 35 THEN 1 END) AS score4
FROM v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE question_code = 'PG_JL_HAMD-24_DF'
AND t.del_flag = 0
and r.del_flag = 0
<if test="tenantId != null">
AND t.tenant_id = #{tenantId}
</if>
</select>
<select id="querySmzStatistics" resultType="com.acupuncture.system.domain.vo.AdminStatisticsVo$ZlTypeVo$BzfffbVo$Smz">
SELECT
COUNT( CASE WHEN question_code = 'ZLFA_SHXG' THEN 1 END ) AS xwxlg,
COUNT( CASE WHEN question_code = 'ZLFA_XLTS' THEN 1 END ) AS ydgy,
COUNT( CASE WHEN question_code = 'ZLFA_ZJ' THEN 1 END ) AS lcyyzl,
COUNT( CASE WHEN question_code = 'ZLFA_YW' THEN 1 END ) AS zjlf
FROM
v_pms_treatment t
left join
v_pms_treatment_record r on t.id = r.treatment_id
WHERE
question_code IN ( 'ZLFA_XWXLGY', 'ZLFA_YDGY', 'ZLFA_LCYYZL', 'ZLFA_ZJ', 'ZLFA_ZL' )
AND r.del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</select>
<select id="queryTxStatistics" resultType="java.lang.String">
SELECT answer
FROM v_pms_treatment_record r
left join
v_pms_treatment t
on r.treatment_id = t.id
WHERE r.question_code = 'PG_RTCF_TXLX'
and t.del_flag = 0
and r.del_flag = 0
<if test="tenantId != null">
AND tenant_id = #{tenantId}
</if>
</select>
</mapper>