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
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 >= #{dto.startTime}
|
|
</if>
|
|
<if test="dto.endTime != null">
|
|
AND create_time <= #{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 >= #{dto.startTime}
|
|
</if>
|
|
<if test="dto.endTime != null">
|
|
AND create_time <= #{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 < 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 < NOW()) OR (t.status = 1 AND followup_time > end_time) THEN 1 ELSE 0 END) AS cqsf, -- 超期随访
|
|
SUM(CASE WHEN t.status = 1 AND followup_time <= 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 < 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 > 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>
|
|
|