Browse Source

医院排名 部分

master
zhizhi wu 4 years ago
parent
commit
5029ac43cf
  1. 4
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  2. 36
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  3. 17
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  4. 13
      src/main/java/com/ccsens/carbasics/util/Constant.java
  5. 123
      src/main/resources/mapper_dao/OrganizationDao.xml

4
src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java

@ -57,7 +57,11 @@ public class OrganizationVo {
@ApiModel("医院排名项")
@Data
public static class RankItem{
@ApiModelProperty("医院名")
private String name;
@ApiModelProperty("指标")
private String value;
@ApiModelProperty("排名")
private int rank;
}
}

36
src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java

@ -42,4 +42,40 @@ public interface OrganizationDao extends OrganizationMapper {
* @return 机构信息
*/
Organization getByCode(@Param("code") String code);
/**
* 根据时间窗患者排名
* @param areaId 地区ID
* @param level 医院等级
* @return 排名
*/
OrganizationVo.Rank rankByTimeWindowPatient(@Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据溶栓排序
* @param areaId 地区ID
* @param level 医院等级
* @return 排名
*/
OrganizationVo.Rank rankByThrombosis(@Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据溶栓率排名
* @param areaId 地区ID
* @param level 医院等级
* @return 排名
*/
OrganizationVo.Rank rankByThrombosisRate(@Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据DNT中位数排名
* @param areaId 地区ID
* @param level 医院等级
* @return 排名
*/
OrganizationVo.Rank rankByDntMedian(@Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据脑出血排名
* @param areaId 地区ID
* @param level 医院等级
* @return 排名
*/
OrganizationVo.Rank rankByIch(@Param("areaId") Long areaId, @Param("level")byte level);
}

17
src/main/java/com/ccsens/carbasics/service/OrganizationService.java

@ -3,6 +3,7 @@ package com.ccsens.carbasics.service;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.persist.dao.OrganizationDao;
import com.ccsens.carbasics.util.Constant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -25,6 +26,22 @@ public class OrganizationService implements IOrganizationService {
@Override
public OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId) {
switch (param.getType()) {
case Constant.HospitalRank.TIME_WINDOW_PATIENT:
return organizationDao.rankByTimeWindowPatient(param.getAreaId(), param.getLevel());
case Constant.HospitalRank.THROMBOSIS:
return organizationDao.rankByThrombosis(param.getAreaId(), param.getLevel());
case Constant.HospitalRank.THROMBOSIS_RATE:
return organizationDao.rankByThrombosisRate(param.getAreaId(), param.getLevel());
case Constant.HospitalRank.DNT_MEDIAN:
return organizationDao.rankByDntMedian(param.getAreaId(), param.getLevel());
case Constant.HospitalRank.ICH:
return organizationDao.rankByIch(param.getAreaId(), param.getLevel());
}
return null;
}
}

13
src/main/java/com/ccsens/carbasics/util/Constant.java

@ -15,6 +15,19 @@ public class Constant {
/**xls*/
public static final String XLS = "xls";
public static final class HospitalRank{
/**时间窗患者例数(从大到小)*/
public static final byte TIME_WINDOW_PATIENT = 0;
/**溶栓例数(从大到小)*/
public static final byte THROMBOSIS = 1;
/**溶栓率(从大到小)*/
public static final byte THROMBOSIS_RATE = 2;
/**DNT中位数(从小到大)*/
public static final byte DNT_MEDIAN = 3;
/**脑出血例数(从大到小)*/
public static final byte ICH = 4;
}
public static final class Param {
//0-每小时 1-每天 2-每月
public final static byte COUNT_TYPE_HOUR = 0;

123
src/main/resources/mapper_dao/OrganizationDao.xml

@ -82,4 +82,127 @@
AND o.rec_status = 0
LIMIT 1
</select>
<select id="rankByTimeWindowPatient" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank">
select rank.*, @rank := @rank + 1 as rank from (
select h.id, h.name, ifNULL(t.total, 0) as value from
(
<choose>
<when test="areaId == null or areaId == 0">
SELECT
t1.id,
t1.organization_type as organizationType,
t1.CODE,
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL
from t_organization
WHERE
organizationType = 3
<if test="level != null">
AND level = 3
</if>
</when>
<otherwise>
SELECT
*
FROM
(
SELECT
t1.id,
t1.organization_type as organizationType,
t1.CODE,
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL,
IF( find_in_set( parent_id, @pids ) &gt; 0, @pids := concat( @pids, ',', id ), 0 ) AS ischild
FROM
( SELECT t.*, p.parent_id FROM t_organization t, t_organization_parent p WHERE t.id = p.organization_id ORDER BY parent_id, id ) t1,
( SELECT @pids := 2 ) t2
) t3
WHERE
ischild != 0
<if test="level != null">
AND level = 3
</if>
AND organizationType = 3
</otherwise>
</choose>
) h
left join (
select a.hospital_id, count(*) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1 , t_qcp_first_aid_record r2
where a.id = r1.first_aid_id and r1.question_code = 'JBXX-FBSJ'
and a.id = r2.first_aid_id and r1.question_code = 'JBXX-DYSJ'
and r2.answer + 0 &gt;= 0 and r2.answer + 0 &lt;= 0
and r2.answer - r1.answer &gt; 6 * 60 * 60 * 1000
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by a.hospital_id
) t on t.hospital_id = h.id
) rank, (SELECT @rank:= 0) b
order by value
</select>
<select id="rankByThrombosis" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank">
select rank.*, @rank := @rank + 1 as rank from (
select h.id, h.name, ifNULL(t.total, 0) as value from
(
<choose>
<when test="areaId == null or areaId == 0">
SELECT
t1.id,
t1.organization_type as organizationType,
t1.CODE,
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL
from t_organization
WHERE
organizationType = 3
<if test="level != null">
AND level = 3
</if>
</when>
<otherwise>
SELECT
*
FROM
(
SELECT
t1.id,
t1.organization_type as organizationType,
t1.CODE,
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL,
IF( find_in_set( parent_id, @pids ) &gt; 0, @pids := concat( @pids, ',', id ), 0 ) AS ischild
FROM
( SELECT t.*, p.parent_id FROM t_organization t, t_organization_parent p WHERE t.id = p.organization_id ORDER BY parent_id, id ) t1,
( SELECT @pids := 2 ) t2
) t3
WHERE
ischild != 0
<if test="level != null">
AND level = 3
</if>
AND organizationType = 3
</otherwise>
</choose>
) h
left join (
select a.hospital_id, count(r2.id) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1, t_qcp_first_aid_record r2
where a.id = r1.first_aid_id and a.id = r2.first_aid_id
and r1.question_code = #{questionCode} and r1.answer = #{answer}
and r2.question_code = #{timeCode} and r2.answer + 0 &gt;=#{startTime} and r2.answer + 0 &lt;=#{endTime}
and a.rec_status = 0 and r1.rec_status = 0
group by a.hospital_id
) t on t.hospital_id = h.id
) rank, (SELECT @rank:= 0) b
order by value
</select>
<select id="rankByThrombosisRate" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank"></select>
<select id="rankByDntMedian" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank"></select>
<select id="rankByIch" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank"></select>
</mapper>

Loading…
Cancel
Save