Browse Source

各地-溶栓率

各地-溶栓患者/机械再通/脑出血
master
ma 4 years ago
parent
commit
e4dff26d36
  1. 18
      src/main/java/com/ccsens/carbasics/api/StatisticalController.java
  2. 32
      src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java
  3. 20
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidRecordDao.java
  4. 6
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  5. 16
      src/main/java/com/ccsens/carbasics/service/IStatisticalService.java
  6. 49
      src/main/java/com/ccsens/carbasics/service/StatisticalService.java
  7. 167
      src/main/resources/mapper_dao/FirstAidRecordDao.xml
  8. 17
      src/main/resources/mapper_dao/OrganizationDao.xml

18
src/main/java/com/ccsens/carbasics/api/StatisticalController.java

@ -110,5 +110,23 @@ public class StatisticalController {
return JsonResponse.newInstance().ok(common);
}
@MustLogin
@ApiOperation(value = "各地-溶栓率", notes = "各地-溶栓率")
@RequestMapping(value = "/gdThrombosisRate", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> gdThrombosisRate(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.GdThrombosisRate> params) {
log.info("各地-溶栓率:{}", params);
StatisticalVo.Common common = statisticalService.gdThrombosisRate(params.getParam(), params.getUserId());
log.info("各地-溶栓率结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@MustLogin
@ApiOperation(value = "各地-溶栓患者/机械再通/脑出血", notes = "各地-溶栓患者/机械再通/脑出血")
@RequestMapping(value = "/gdCountSpecifyAnswer", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> gdCountSpecifyAnswer(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.GdCountSpecifyAnswer> params) {
log.info("各地-溶栓患者/机械再通/脑出血:{}", params);
StatisticalVo.Common common = statisticalService.gdCountSpecifyAnswer(params.getParam(), params.getUserId());
log.info("各地-溶栓患者/机械再通/脑出血结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
}

32
src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java

@ -97,4 +97,36 @@ public class StatisticalDto {
private String accordCode;
}
@Data
@ApiModel("各地-溶栓患者/机械再通/脑出血")
public static class GdCountSpecifyAnswer {
@ApiModelProperty("项目编码(默认山西省质控的机构编码)")
private String code = "SZK";
@NotNull
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@ApiModelProperty("题目code")
private String questionCode;
@ApiModelProperty("指定答案")
private String answer;
@ApiModelProperty("统计code 手术开始时间code/到院时间code")
private String accordCode;
}
@Data
@ApiModel("各地-溶栓率统计")
public static class GdThrombosisRate {
@ApiModelProperty("项目编码(默认山西省质控的机构编码)")
private String code = "SZK";
@NotNull
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
}
}

20
src/main/java/com/ccsens/carbasics/persist/dao/FirstAidRecordDao.java

@ -99,6 +99,18 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
*/
List<StatisticalVo.Item> countTimeWindowPatientFx(@Param("hospitalIds") List<Long> hospitalIds,@Param("startTime") Long startTime,@Param("endTime") Long endTime,@Param("type") String type);
/**
* 各地-溶栓率
* @param hospitalIds 医院id
* @param startTime 开始时间
* @param endTime 结束时间
* @param questionCode 类型
* @param answer 指定答案
* @param timeGist 时间类型依据
* @return 各地溶栓率统计
*/
List<StatisticalVo.Item> gdThrombosisRate(@Param("hospitalIds") List<Long> hospitalIds,@Param("startTime") Long startTime,@Param("endTime") Long endTime,@Param("questionCode") String questionCode,@Param("answer") String answer,@Param("timeGist") String timeGist);
/**
* 分项-溶栓患者/机械再通/脑出血
* @param param 筛选条件
@ -107,4 +119,12 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
* @return 返回统计结果
*/
List<StatisticalVo.Item> subentrySpecifyAnswer(@Param("param")StatisticalDto.CountSpecifyAnswer param, @Param("hospitalIds")List<Long> hospitalIds,@Param("type") String type);
/**
* 各地-溶栓患者/机械再通/脑出血
* @param param 筛选条件
* @param hospitalIds 医院id
* @return 返回统计结果
*/
List<StatisticalVo.Item> gdCountSpecifyAnswer(@Param("hospitalIds") List<Long> hospitalIds,@Param("param") StatisticalDto.GdCountSpecifyAnswer param);
}

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

@ -36,4 +36,10 @@ public interface OrganizationDao extends OrganizationMapper {
*/
List<Organization> getHospitalByParentId(@Param("parentId")Long parentId);
/**
* 通过项目编码查找医院信息
* @param code 项目编码
* @return 机构信息
*/
Organization getByCode(@Param("code") String code);
}

16
src/main/java/com/ccsens/carbasics/service/IStatisticalService.java

@ -64,6 +64,22 @@ public interface IStatisticalService {
*/
StatisticalVo.Common timeWindowsPatient(StatisticalDto.TimeAndType param, Long userId);
/**
* 各地-溶栓率统计
* @param param 请求参数
* @param userId 用户id
* @return 各地溶栓率统计
*/
StatisticalVo.Common gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId);
/**
*各地-溶栓患者/机械再通/脑出血
* @param param 请求参数
* @param userId 用户id
* @return 统计结果
*/
StatisticalVo.Common gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId);
/**
* 分项-溶栓患者/机械再通/脑出血
* @param param 筛选条件

49
src/main/java/com/ccsens/carbasics/service/StatisticalService.java

@ -209,6 +209,55 @@ public class StatisticalService implements IStatisticalService {
return common;
}
@Override
public StatisticalVo.Common gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getCode());
String questionCode = Constant.Statistical.Thrombosis.QUESTION_CODE;
String answer = Constant.Statistical.Thrombosis.ANSWER;
String timeGist = Constant.Statistical.Thrombosis.TIME_CODE;
List<StatisticalVo.Item> items = firstAidRecordDao.gdThrombosisRate(hospitalIds,param.getStartTime(),param.getEndTime(),questionCode,answer,timeGist);
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(getTotal(items));
common.setList(items);
return common;
}
@Override
public StatisticalVo.Common gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getCode());
List<StatisticalVo.Item> items = firstAidRecordDao.gdCountSpecifyAnswer(hospitalIds,param);
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(getTotal(items));
common.setList(items);
return common;
}
/**
* 查找项目对应的医院ID或对应下级医院ID
* @param code 机构编码
* @return 医院ID
*/
private List<Long> getHospitalIds(String code) {
// 判断机构是否存在
Organization organization = organizationDao.getByCode(code);
if (organization == null) {
throw new BaseException(DefaultCodeError.NOT_ORGANIZATION);
}
List<Long> hospitalIds = new ArrayList<>();
if (organization.getOrganizationType() == Constant.Organization.HOSPITAL) {
//医院
hospitalIds.add(organization.getId());
} else {
// 查所有下级
List<Organization> hospitals = organizationDao.getHospitalByParentId(organization.getId());
if (CollectionUtil.isEmpty(hospitals)) {
throw new BaseException(DefaultCodeError.NOT_ORGANIZATION);
}
hospitals.forEach(hospital -> hospitalIds.add(hospital.getId()));
}
return hospitalIds;
}
/**
* 查找项目对应的医院ID或对应下级医院ID
* @param projectId 项目ID

167
src/main/resources/mapper_dao/FirstAidRecordDao.xml

@ -145,9 +145,9 @@
t_qcp_first_aid_record r2
WHERE
a.id = r1.first_aid_id
AND r1.question_code = '发病时间'
AND r1.question_code = 'JBXX-FBSJ'
AND a.id = r2.first_aid_id
AND r1.question_code = '到院时间'
AND r2.question_code = 'JBXX-DYSJ'
AND r2.answer + 0 &gt;= #{startTime}
AND r2.answer + 0 &lt;= #{endTime}
AND a.hospital_id IN
@ -190,4 +190,167 @@
GROUP BY
FROM_UNIXTIME( r2.answer / 1000, #{type})
</select>
<select id="gdThrombosisRate" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
SELECT
t.id,
t.shortName AS name,
round(t.part / t.total, 2) AS value
FROM
(
SELECT
city.id,
city.short_name AS shortName,
sum(t2.part * 100) AS part,
sum(t1.total) AS total
FROM
(
SELECT
city.id,
city.short_name
FROM
t_organization o,
t_organization_parent p,
t_organization city
WHERE
o.id = p.parent_id
AND p.organization_id = city.id
AND o. CODE = 'SXSZK'
AND o.rec_status = 0
AND p.rec_status = 0
AND city.rec_status = 0
) city
LEFT JOIN (
SELECT
o.id,
p.parent_id
FROM
t_organization o,
t_organization_parent p
WHERE
o.id = p.organization_id
AND o.organization_type = 3
AND o.rec_status = 0
AND p.rec_status = 0
) hospital ON city.id = hospital.parent_id
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 a.id = r2.first_aid_id
AND r1.question_code = 'JBXX-FBSJ'
AND a.id = r2.first_aid_id
AND r2.question_code = 'JBXX-DYSJ'
AND r2.answer + 0 &gt;= #{startTime}
AND r2.answer + 0 &lt;= #{endTime}
AND a.hospital_id IN
<foreach collection="hospitalIds" item="id" separator="," open="(" close=")">
#{id}
</foreach>
AND r2.answer - r1.answer &lt; 6 * 60 * 60 * 1000
AND a.rec_status = 0
AND r1.rec_status = 0
AND r2.rec_status = 0
GROUP BY
a.hospital_id
) t1 ON hospital.id = t1.hospital_id
LEFT JOIN (
SELECT
a.hospital_id,
count(a.id) AS part
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 = #{timeGist}
AND r2.answer + 0 &gt;= #{startTime}
AND r2.answer + 0 &lt;= #{endTime}
AND a.hospital_id IN
<foreach collection="hospitalIds" item="id" separator="," open="(" close=")">
#{id}
</foreach>
AND a.rec_status = 0
AND r1.rec_status = 0
GROUP BY
a.hospital_id
) t2 ON hospital.id = t2.hospital_id
GROUP BY
city.id
) t
</select>
<select id="gdCountSpecifyAnswer" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
SELECT
city.id,
city.short_name AS shortName AS name,
sum(t.total) AS value
FROM
(
SELECT
city.id,
city.short_name
FROM
t_organization o,
t_organization_parent p,
t_organization city
WHERE
o.id = p.parent_id
AND p.organization_id = city.id
AND o. CODE = 'SXSZK'
AND o.rec_status = 0
AND p.rec_status = 0
AND city.rec_status = 0
) city
LEFT JOIN (
SELECT
o.id,
p.parent_id
FROM
t_organization o,
t_organization_parent p
WHERE
o.id = p.organization_id
AND o.organization_type = 3
AND o.rec_status = 0
AND p.rec_status = 0
) hospital ON city.id = hospital.parent_id
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 a.id = r2.first_aid_id
AND r1.question_code = #{param.questionCode}
AND r1.answer = #param.answer
AND r2.question_code = #{param.accordCode}
AND r2.answer + 0 &gt;= #{param.startTime}
AND r2.answer + 0 &lt;= #{param.endTime}
AND a.hospital_id IN
<foreach collection="hospitalIds" item="id" separator="," open="(" close=")">
#{id}
</foreach>
AND a.rec_status = 0
AND r1.rec_status = 0
GROUP BY
a.hospital_id
) t ON hospital.id = t.hospital_id
GROUP BY
city.id
</select>
</mapper>

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

@ -65,4 +65,21 @@
ischild != 0
AND organizationType = 3
</select>
<select id="getByCode" resultType="com.ccsens.carbasics.bean.po.Organization">
SELECT
o.id,
o.organization_type AS organizationType,
o.`code`,
o.`name`,
o.short_name AS shortName,
o.introduce,
o.`level`
FROM
t_organization o
WHERE
o.`code` = #{code}
AND o.rec_status = 0
LIMIT 1
</select>
</mapper>

Loading…
Cancel
Save