zhizhi wu 4 years ago
parent
commit
d292dfa0d8
  1. 9
      src/main/java/com/ccsens/carbasics/api/FirstAidController.java
  2. 6
      src/main/java/com/ccsens/carbasics/api/PatientController.java
  3. 1
      src/main/java/com/ccsens/carbasics/bean/vo/OcrVo.java
  4. 2
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  5. 10
      src/main/java/com/ccsens/carbasics/bean/vo/PatientVo.java
  6. 29
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  7. 13
      src/main/java/com/ccsens/carbasics/service/FirstAidService.java
  8. 4
      src/main/java/com/ccsens/carbasics/service/IFirstAidService.java
  9. 16
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  10. 5
      src/main/java/com/ccsens/carbasics/service/StatisticalService.java
  11. 14
      src/main/resources/mapper_dao/FirstAidRecordDao.xml
  12. 108
      src/main/resources/mapper_dao/OrganizationDao.xml

9
src/main/java/com/ccsens/carbasics/api/FirstAidController.java

@ -55,15 +55,6 @@ public class FirstAidController {
firstAidService.quitFirstAid(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok();
}
@MustLogin
@ApiOperation(value = "病例列表", notes = "分诊护士/神内医生/神外医生查看相关病例")
@RequestMapping(value = "/querySelf", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<PageInfo<PatientVo.QueryPatientList>> querySelf(@ApiParam @Validated @RequestBody QueryDto<PatientDto.QueryPatient> params) throws Exception{
log.info("查询自己相关的病例列表:{}", params);
PageInfo<PatientVo.QueryPatientList> page = firstAidService.querySelf(params.getParam(), params.getUserId());
log.info("查询自己相关的病例列表成功");
return JsonResponse.newInstance().ok(page);
}
@MustLogin
@ApiOperation(value = "修改病例状态")

6
src/main/java/com/ccsens/carbasics/api/PatientController.java

@ -36,11 +36,11 @@ public class PatientController {
@MustLogin
@ApiOperation(value = "病例列表", notes = "分诊护士/神内医生/神外医生查看相关病例")
@RequestMapping(value = "/querySelf", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<PageInfo<PatientVo.QueryPatientList>> querySelf(@ApiParam @Validated @RequestBody QueryDto<PatientDto.QueryPatient> params) throws Exception{
public JsonResponse<PatientVo.SelfPatient> querySelf(@ApiParam @Validated @RequestBody QueryDto<PatientDto.QueryPatient> params) throws Exception{
log.info("查询自己相关的病例列表:{}", params);
PageInfo<PatientVo.QueryPatientList> page = firstAidService.querySelf(params.getParam(), params.getUserId());
PatientVo.SelfPatient data = firstAidService.querySelf(params.getParam(), params.getUserId());
log.info("查询自己相关的病例列表成功");
return JsonResponse.newInstance().ok(page);
return JsonResponse.newInstance().ok(data);
}
@MustLogin

1
src/main/java/com/ccsens/carbasics/bean/vo/OcrVo.java

@ -21,6 +21,7 @@ public class OcrVo {
private String idCardNo;
@ApiModelProperty("年龄")
private int age;
@ApiModelProperty("")
public void toMsg(List<BaiDuVo.GeneralWord> words) {
if (CollectionUtil.isEmpty(words)) {

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

@ -19,7 +19,7 @@ public class OrganizationVo {
@ApiModelProperty("医院ID")
private Long organizationId;
@ApiModelProperty("角色")
private byte role;
private String role;
}
@Data

10
src/main/java/com/ccsens/carbasics/bean/vo/PatientVo.java

@ -2,6 +2,7 @@ package com.ccsens.carbasics.bean.vo;
import com.ccsens.carbasics.util.Constant;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -15,6 +16,15 @@ import java.util.Map;
@Data
public class PatientVo {
@Data
@ApiModel("自己相关的患者")
public static class SelfPatient{
@ApiModelProperty("角色 HuShi YiSheng ZhiKong MiShu")
private String role;
@ApiModelProperty("病例分页数据")
private PageInfo<QueryPatientList> page;
}
@Data
@ApiModel("医院下的患者列表")
public static class QueryPatientList{

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

@ -44,26 +44,14 @@ public interface OrganizationDao extends OrganizationMapper {
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);
OrganizationVo.Rank rankByType(@Param("type") byte type, @Param("areaId") Long areaId, @Param("level")byte level);
/**
* 根据DNT中位数排名
* @param areaId 地区ID
@ -71,11 +59,6 @@ public interface OrganizationDao extends OrganizationMapper {
* @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);
}

13
src/main/java/com/ccsens/carbasics/service/FirstAidService.java

@ -71,17 +71,20 @@ public class FirstAidService implements IFirstAidService{
@Override
public PageInfo<PatientVo.QueryPatientList> querySelf(PatientDto.QueryPatient param, Long userId) {
public PatientVo.SelfPatient querySelf(PatientDto.QueryPatient param, Long userId) {
PatientVo.SelfPatient patients = new PatientVo.SelfPatient();
// 判断有无权限添加
OrganizationVo.Basic basic = organizationDao.getOrganization(param.getProjectId(), userId);
if (basic == null) {
throw new BaseException(DefaultCodeError.NO_DATA_MODIFY_PRIVILEGE);
}
patients.setRole(basic.getRole());
// 基础信息
PageHelper.startPage(param.getPageNum(), param.getPageSize());
List<PatientVo.QueryPatientList> list = firstAidDao.querySelf(param, userId);
if (CollectionUtil.isEmpty(list)) {
return new PageInfo<>(list);
patients.setPage(new PageInfo<>(list));
return patients;
}
log.info("查询日志");
List<Long> firstAidIds = new ArrayList<>();
@ -93,11 +96,13 @@ public class FirstAidService implements IFirstAidService{
// 查询医生信息
List<FirstAidLogVo.JoinMember> members = firstAidLogDao.queryMember(firstAidIds);
if (CollectionUtil.isEmpty(members)) {
return new PageInfo<>(list);
patients.setPage(new PageInfo<>(list));
return patients;
}
members.forEach(member -> map.get(member.getFirstAidId()).setDoctors(member.getDoctors()));
log.info("设置成员");
return new PageInfo<>(list);
patients.setPage(new PageInfo<>(list));
return patients;
}
@Override

4
src/main/java/com/ccsens/carbasics/service/IFirstAidService.java

@ -13,9 +13,9 @@ public interface IFirstAidService {
* 查询和自己相关的病例信息
* @param param 搜索条件
* @param userId 操作人用户ID
* @return
* @return 病例信息和用户角色
*/
PageInfo<PatientVo.QueryPatientList> querySelf(PatientDto.QueryPatient param, Long userId);
PatientVo.SelfPatient querySelf(PatientDto.QueryPatient param, Long userId);
/**
* 添加病例

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

@ -26,22 +26,16 @@ public class OrganizationService implements IOrganizationService {
@Override
public OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId) {
switch (param.getType()) {
case Constant.HospitalRank.DNT_MEDIAN:
return organizationDao.rankByDntMedian(param.getAreaId(), param.getLevel());
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 organizationDao.rankByType(param.getType(), param.getAreaId(), param.getLevel());
default:
return null;
}
return null;
}
}

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

@ -130,15 +130,14 @@ public class StatisticalService implements IStatisticalService {
items.add(new StatisticalVo.Item(Constant.Statistical.Ich.NAME, ""+ich));
// DNT中位数
BigDecimal dntMedian = firstAidRecordDao.countMedian(Constant.Statistical.Dnt.MINUEND_CODE, Constant.Statistical.Dnt.SUBTRACTION_CODE, hospitalIds, param.getStartTime(), param.getEndTime());
items.add(new StatisticalVo.Item(Constant.Statistical.DNT_MEDIAN_NAME, dntMedian.toString()));
items.add(new StatisticalVo.Item(Constant.Statistical.DNT_MEDIAN_NAME, dntMedian == null ? "" : dntMedian.toString()));
// DPT中位数
BigDecimal dptMedian = firstAidRecordDao.countMedian(Constant.Statistical.Dpt.MINUEND_CODE, Constant.Statistical.Dpt.SUBTRACTION_CODE, hospitalIds, param.getStartTime(), param.getEndTime());
items.add(new StatisticalVo.Item(Constant.Statistical.DPT_MEDIAN_NAME, dptMedian.toString()));
items.add(new StatisticalVo.Item(Constant.Statistical.DPT_MEDIAN_NAME, dptMedian == null ? "" : dptMedian.toString()));
// 累计收录病例数
Long total = firstAidRecordDao.countPatient(hospitalIds, param.getStartTime(), param.getEndTime());
items.add(new StatisticalVo.Item(Constant.Statistical.PATIENT_TOTAL_NAME, "" + total));
StatisticalVo.CommonList common = new StatisticalVo.CommonList();
items.add(new StatisticalVo.Item(Constant.Statistical.TIME_WINDOW_NAME, ""+timeWindowPatient));
common.setList(items);
return common;
}

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

@ -80,10 +80,10 @@
</select>
<select id="countPatient" resultType="java.lang.Long">
select count(*) from t_qcp_first_aid where
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
<foreach collection="hospitalIds" item="id" separator="," open="hospital_id in (" close=")">
#{id}
</foreach>
and unix_timestamp(create_at)*1000 &gt;= #{startTime} and unix_timestamp(create_at)*1000 &lt;= #{endTime} and rec_status = 0
and unix_timestamp(created_at)*1000 &gt;= #{startTime} and unix_timestamp(created_at)*1000 &lt;= #{endTime} and rec_status = 0
</select>
<select id="countThrombosisRateDate" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
select t1.date as name, concat(round(t2.part * 100 / t1.total, 2), '%') as value from
@ -97,8 +97,10 @@
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 a.hospital_id in (0)
and r2.answer + 0 &gt;= #{startTime} and r2.answer + 0 &lt;= #{endTime}
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" 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
@ -207,7 +209,7 @@
where a.id = r1.first_aid_id and r1.question_code = #{minuendCode}
and a.id = r2.first_aid_id and r2.question_code = #{subtractionCode}
and r1.answer + 0 &gt;= #{startTime} and r1.answer + 0 &lt;= #{endTime}
<foreach collection="hospitalIds" item="id" separator="," open="(" close=")">
<foreach collection="hospitalIds" item="id" separator="," open="AND a.hospital_id IN (" close=")">
#{id}
</foreach>
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
@ -227,7 +229,7 @@
where a.id = r1.first_aid_id and r1.question_code = #{minuendCode}
and a.id = r2.first_aid_id and r2.question_code = #{subtractionCode}
and r1.answer + 0 &gt;= #{startTime} and r1.answer + 0 &lt;= #{endTime}
<foreach collection="hospitalIds" item="id" separator="," open="(" close=")">
<foreach collection="hospitalIds" item="id" separator="," open="AND a.hospital_id IN (" close=")">
#{id}
</foreach>
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0

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

@ -4,24 +4,29 @@
<select id="getOrganization" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Basic">
SELECT
t1.organization_id
t1.organization_id as organizationId,
t2.code as role
FROM
( SELECT organization_id FROM t_organization_project WHERE project_id = #{projectId} AND rec_status = 0 ) t1,
(
SELECT
d.organization_id
d.organization_id,
p.code
FROM
t_organization_member m,
t_organization_department d
t_organization_department d,
t_organization_position p
WHERE
m.department_id = d.id
AND m.position_id = p.id
AND m.user_id = #{userId}
AND m.rec_status = 0
AND d.rec_status = 0
limit 1
AND p.rec_status = 0
) t2
WHERE
t1.organization_id = t2.organization_id
limit 1
</select>
<select id="getByProjectId" resultType="com.ccsens.carbasics.bean.po.Organization">
SELECT
@ -82,7 +87,7 @@
AND o.rec_status = 0
LIMIT 1
</select>
<select id="rankByTimeWindowPatient" resultType="com.ccsens.carbasics.bean.vo.OrganizationVo$Rank">
<select id="rankByType" 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
(
@ -131,21 +136,58 @@
</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
<choose>
<when test="type == 0">
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 - 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
</when>
<when test="type == 1">
select a.hospital_id, count(r2.id) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1
where a.id = r1.first_aid_id
and r1.question_code = 'ZLFA-JMRS' and r1.answer = '是'
and a.rec_status = 0 and r1.rec_status = 0
group by a.hospital_id
</when>
<when test="type == 2">
select t1.hospital_id, round(t2.part * 100 / t1.total, 2) as total from
(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 - 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,
(select
a.hospital_id, count(a.id) as part from t_qcp_first_aid a, t_qcp_first_aid_record r1
where a.id = r1.first_aid_id
and r1.question_code = 'ZLFA-JMRS' and r1.answer = '是'
and a.rec_status = 0 and r1.rec_status = 0
group by a.hospital_id
)t2
where t1.hospital_id = t2.hospital_id
</when>
<when test="type == 4">
select a.hospital_id, count(a.id) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1
where a.id = r1.first_aid_id
and r1.question_code = 'RYPG-ZDJG' and r1.answer = '出血性脑卒中'
and a.rec_status = 0 and r1.rec_status = 0
</when>
</choose>
) 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 id="rankByDntMedian" 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
(
select h.id, h.name, ifNULL(t.total, 0) as value from (
<choose>
<when test="areaId == null or areaId == 0">
SELECT
@ -191,18 +233,36 @@
</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
select t1.hospital_id, avg(t1.val) as total from
(select hospital_id, val, @team,
case @team when hospital_id then @rk := @rk+1 else @rk := 1 end rk,
@team := hospital_id
from
(select
a.hospital_id,
ROUND((r1.answer - r2.answer)/60000, 2) as val
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 = 'JMRSSJ'
and a.id = r2.first_aid_id and r2.question_code = 'JBXX-DYSJ'
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
) d,
(select @rk := 0, @team := '') t
order by hospital_id, val) t1
left join (
select
a.hospital_id,
count(*) as cnt
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 = 'JMRSSJ'
and a.id = r2.first_aid_id and r2.question_code = 'JBXX-DYSJ'
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
) t2 on t1.hospital_id = t2.hospital_id
where t1.rk IN (t2.cnt + 0.5, t2.cnt, t2.cnt + 1)
group by t1.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