Browse Source

Merge branch 'master' of dd.tall.wiki:ccsens_wiki/carbasics

master
zy_Java 4 years ago
parent
commit
c3ab78f30b
  1. 27
      src/main/java/com/ccsens/carbasics/api/FirstAidController.java
  2. 4
      src/main/java/com/ccsens/carbasics/api/OrganizationController.java
  3. 14
      src/main/java/com/ccsens/carbasics/api/PatientController.java
  4. 12
      src/main/java/com/ccsens/carbasics/api/StatisticalController.java
  5. 7
      src/main/java/com/ccsens/carbasics/bean/dto/FirstAidDto.java
  6. 30
      src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java
  7. 13
      src/main/java/com/ccsens/carbasics/bean/vo/FirstAidVo.java
  8. 15
      src/main/java/com/ccsens/carbasics/bean/vo/OcrVo.java
  9. 6
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  10. 16
      src/main/java/com/ccsens/carbasics/bean/vo/PatientVo.java
  11. 1
      src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java
  12. 8
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidRecordDao.java
  13. 31
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  14. 6
      src/main/java/com/ccsens/carbasics/service/FirstAidRecordService.java
  15. 36
      src/main/java/com/ccsens/carbasics/service/FirstAidService.java
  16. 14
      src/main/java/com/ccsens/carbasics/service/IFirstAidService.java
  17. 6
      src/main/java/com/ccsens/carbasics/service/IStatisticalService.java
  18. 36
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  19. 68
      src/main/java/com/ccsens/carbasics/service/StatisticalService.java
  20. 4
      src/main/resources/application.yml
  21. 105
      src/main/resources/mapper_dao/FirstAidRecordDao.xml
  22. 126
      src/main/resources/mapper_dao/OrganizationDao.xml

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

@ -1,21 +1,11 @@
package com.ccsens.carbasics.api;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.ccsens.carbasics.service.IFirstAidService;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import com.github.pagehelper.PageInfo;
import com.ccsens.carbasics.bean.dto.FirstAidDto;
import com.ccsens.carbasics.bean.dto.PatientDto;
import com.ccsens.carbasics.bean.po.FirstAid;
import com.ccsens.carbasics.bean.vo.FirstAidVo;
import com.ccsens.carbasics.bean.vo.PatientVo;
import com.ccsens.carbasics.service.IFirstAidService;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -55,15 +45,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 = "修改病例状态")
@ -75,4 +56,12 @@ public class FirstAidController {
return JsonResponse.newInstance().ok();
}
@MustLogin
@ApiOperation(value = "获取项目信息", notes = "")
@RequestMapping(value = "/getDetail", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FirstAidVo.FirstAidBase> getDetail(@ApiParam @Validated @RequestBody QueryDto<FirstAidDto.Project> params) throws Exception{
FirstAidVo.FirstAidBase projectDetail = firstAidService.getDetail(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(projectDetail);
}
}

4
src/main/java/com/ccsens/carbasics/api/OrganizationController.java

@ -36,8 +36,8 @@ public class OrganizationController {
private IOrganizationService organizationService;
@MustLogin
@ApiOperation(value = "山西省地市查询", notes = "山西省地市查询")
@RequestMapping(value = "/provinceCity", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
@ApiOperation(value = "医院排名", notes = "医院排名")
@RequestMapping(value = "/rank", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<OrganizationVo.Rank> provinceCityStatistical(@ApiParam @Validated @RequestBody QueryDto<OrganizationDto.Rank> params) {
log.info("山西省地市查询:{}", params);
OrganizationVo.Rank rank = organizationService.rank(params.getParam(), params.getUserId());

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

@ -36,21 +36,21 @@ 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
@ApiOperation(value = "添加病例", notes = "zy")
@RequestMapping(value = "/savePatient", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse savePatient(@ApiParam @Validated @RequestBody QueryDto<PatientDto.SavePatient> params) throws Exception{
public JsonResponse<PatientVo.PatientSimple> savePatient(@ApiParam @Validated @RequestBody QueryDto<PatientDto.SavePatient> params) throws Exception{
log.info("添加病例:{}", params);
firstAidService.savePatient(params.getParam(), params.getUserId());
log.info("添加病例成功");
return JsonResponse.newInstance().ok();
PatientVo.PatientSimple patient = firstAidService.savePatient(params.getParam(), params.getUserId());
log.info("添加病例成功:{}", patient);
return JsonResponse.newInstance().ok(patient);
}
@MustLogin

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

@ -123,18 +123,18 @@ public class StatisticalController {
}
@ApiOperation(value = "各地-时间窗", notes = "zy")
@RequestMapping(value = "/placeTimeWindows", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> placeTimeWindows(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.GdThrombosisRate> params) {
public JsonResponse<StatisticalVo.CommonList> placeTimeWindows(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.AreaTimeWindowPatient> params) {
log.info("各地-时间窗:{}", params);
StatisticalVo.Common common = statisticalService.placeTimeWindows(params.getParam(), params.getUserId());
StatisticalVo.CommonList common = statisticalService.placeTimeWindows(params.getParam(), params.getUserId());
log.info("各地-时间窗结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@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) {
public JsonResponse<StatisticalVo.CommonList> gdThrombosisRate(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.GdThrombosisRate> params) {
log.info("各地-溶栓率:{}", params);
StatisticalVo.Common common = statisticalService.gdThrombosisRate(params.getParam(), params.getUserId());
StatisticalVo.CommonList common = statisticalService.gdThrombosisRate(params.getParam(), params.getUserId());
log.info("各地-溶栓率结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@ -150,9 +150,9 @@ public class StatisticalController {
}
@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) {
public JsonResponse<StatisticalVo.CommonList> gdCountSpecifyAnswer(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.GdCountSpecifyAnswer> params) {
log.info("各地-溶栓患者/机械再通/脑出血:{}", params);
StatisticalVo.Common common = statisticalService.gdCountSpecifyAnswer(params.getParam(), params.getUserId());
StatisticalVo.CommonList common = statisticalService.gdCountSpecifyAnswer(params.getParam(), params.getUserId());
log.info("各地-溶栓患者/机械再通/脑出血结果:{}", common);
return JsonResponse.newInstance().ok(common);
}

7
src/main/java/com/ccsens/carbasics/bean/dto/FirstAidDto.java

@ -41,4 +41,11 @@ public class FirstAidDto {
@ApiModelProperty("审核状态( 1:急救审核通过 2:急救审核拒绝 3出院审核通过 4出院审核拒绝 5:申请修改 )")
private Byte dataStatus;
}
@Data
@ApiModel("查询项目详情--请求")
public static class Project{
@ApiModelProperty("项目ID")
private Long projectId;
}
}

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

@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
@ -95,6 +96,12 @@ public class StatisticalDto {
@NotBlank
@ApiModelProperty("统计code 手术开始时间code/到院时间code")
private String accordCode;
@NotNull
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
}
@Data
@ -109,13 +116,16 @@ public class StatisticalDto {
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@NotBlank
@NotNull
@ApiModelProperty("统计类型 0:每小时 1:每天 2:每月")
private byte countType;
@NotEmpty
@ApiModelProperty("题目code")
private String questionCode;
@NotEmpty
@ApiModelProperty("指定答案")
private String answer;
@NotEmpty
@ApiModelProperty("统计code 手术开始时间code/到院时间code")
private String accordCode;
@ -168,12 +178,18 @@ public class StatisticalDto {
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@NotBlank
@ApiModelProperty("减数code,例:ONT中位数 开始静脉溶栓时间-发病时间√")
private String subtractionCode;
@NotBlank
@ApiModelProperty("被减数code,例:ONT中位数 开始静脉溶栓时间(√ 统计时间依据)-发病时间")
private String minuendCode;
}
@Data
@ApiModel("各地-溶栓率统计")
public static class AreaTimeWindowPatient {
@ApiModelProperty("项目编码(默认山西省质控的机构编码)")
private String code = "SZK";
@NotNull
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
}
@Data

13
src/main/java/com/ccsens/carbasics/bean/vo/FirstAidVo.java

@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author AUSU
@ -19,5 +18,17 @@ public class FirstAidVo {
private Long projectId;
}
@Data
@ApiModel("加入急救后的项目id")
public static class FirstAidBase {
@ApiModelProperty("项目id")
private Long projectId;
@ApiModelProperty("是否是演示数据 0正式 1演示")
private byte valueType;
@ApiModelProperty("急救类型(0-神内,1-神外)")
private Byte type;
}
}

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

@ -9,6 +9,9 @@ import lombok.Data;
import java.util.List;
/**
* @author whj
*/
public class OcrVo {
@Data
@ApiModel("身份信息")
@ -21,19 +24,25 @@ public class OcrVo {
private String idCardNo;
@ApiModelProperty("年龄")
private int age;
@ApiModelProperty("民族")
private String nation;
public void toMsg(List<BaiDuVo.GeneralWord> words) {
if (CollectionUtil.isEmpty(words)) {
return;
}
String idCardName = "姓名";
String idCardSex = "性别";
String idCardNo = "公民身份号码";
words.forEach(wordNode ->{
String word = wordNode.getWords();
if (word.startsWith("姓名")) {
if (word.startsWith(idCardName)) {
this.name = word.substring(2);
} else if (word.startsWith("性别")) {
} else if (word.startsWith(idCardSex)) {
String sexWord = word.substring(2,3);
this.sex = "女".equals(sexWord) ? (byte)0 : (byte)1;
} else if (word.startsWith("公民身份号码")) {
this.nation = word.substring(5);
} else if (word.startsWith(idCardNo)) {
this.idCardNo = word.substring(6);
this.age = IdcardUtil.getAgeByIdCard(this.idCardNo);
}

6
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
@ -57,11 +57,15 @@ public class OrganizationVo {
@ApiModel("医院排名项")
@Data
public static class RankItem{
@ApiModelProperty("医院ID")
private Long id;
@ApiModelProperty("医院名")
private String name;
@ApiModelProperty("指标")
private String value;
@ApiModelProperty("排名")
private int rank;
@ApiModelProperty
private Byte level;
}
}

16
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{
@ -47,7 +57,13 @@ public class PatientVo {
private List<FirstAidLogVo.Member> doctors;
}
@Data
@ApiModel("添加病例-急救ID")
public static class PatientSimple{
@ApiModelProperty("急救id")
private Long firstAidId;
}
@Data
@ApiModel("急救记录信息")

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

@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**

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

@ -120,7 +120,7 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
List<StatisticalVo.Item> countAreaMedian(@Param("param") StatisticalDto.AreaMedian param);
/**
* 各地-溶栓率
* @param hospitalIds 医院id
* @param code 省份code
* @param startTime 开始时间
* @param endTime 结束时间
* @param questionCode 类型
@ -128,7 +128,7 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
* @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);
List<StatisticalVo.Item> gdThrombosisRate(@Param("code") String code,@Param("startTime") Long startTime,@Param("endTime") Long endTime,@Param("questionCode") String questionCode,@Param("answer") String answer,@Param("timeGist") String timeGist);
/**
* 分项-溶栓患者/机械再通/脑出血
@ -149,12 +149,12 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
/**
* 各地时间窗的统计
* @param hospitalIds 医院id列表
* @param code 省份code
* @param startTime 开始时间
* @param endTime 结束时间
* @return 返回统计数据
*/
List<StatisticalVo.Item> placeTimeWindows(@Param("hospitalIds")List<Long> hospitalIds, @Param("startTime")Long startTime, @Param("endTime")Long endTime);
List<StatisticalVo.Item> placeTimeWindows(@Param("code")String code, @Param("startTime")Long startTime, @Param("endTime")Long endTime);
/**
* 山西省地市查询

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

@ -44,38 +44,21 @@ 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);
List<OrganizationVo.RankItem> rankByType(@Param("type") byte type, @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);
List<OrganizationVo.RankItem> rankByDntMedian(@Param("areaId") Long areaId, @Param("level")byte level);
}

6
src/main/java/com/ccsens/carbasics/service/FirstAidRecordService.java

@ -100,7 +100,7 @@ public class FirstAidRecordService implements IFirstAidRecordService {
if (firstAid.getDataStatus() == Constant.DataStatus.Create.status || firstAid.getDataStatus() == Constant.DataStatus.FirstAidRefuse.status) {
// 不校验,允许修改
// 创建/急救拒绝 不校验,允许修改
log.info("允许修改:{}", firstAid.getDataStatus());
} else if (firstAid.getDataStatus() == Constant.DataStatus.FirstAidPass.status) {
// 急救审核通过,急救不能修改
@ -120,8 +120,10 @@ public class FirstAidRecordService implements IFirstAidRecordService {
throw new BaseException(DefaultCodeError.NO_DATA_MODIFY_PRIVILEGE);
}
});
} else if (firstAid.getDataStatus() == Constant.DataStatus.ApplyFor.status ){
// 申请修改/修改拒绝
} else {
// 出院通过
throw new BaseException(DefaultCodeError.NO_DATA_MODIFY_PRIVILEGE);
}

36
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,15 +96,17 @@ 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
public void savePatient(PatientDto.SavePatient param, Long userId) {
public PatientVo.PatientSimple savePatient(PatientDto.SavePatient param, Long userId) {
// 判断有无权限添加
OrganizationVo.Basic basic = organizationDao.getOrganization(param.getProjectId(), userId);
if (basic == null) {
@ -189,6 +194,10 @@ public class FirstAidService implements IFirstAidService{
BeanUtil.copyProperties(firstAidRecord,firstAidRecordLog);
firstAidRecordLog.setId(snowflake.nextId());
firstAidRecordLogMapper.insertSelective(firstAidRecordLog);
PatientVo.PatientSimple simple = new PatientVo.PatientSimple();
simple.setFirstAidId(firstAid.getId());
return simple;
}
@Override
@ -562,4 +571,21 @@ public class FirstAidService implements IFirstAidService{
firstAidLog.setOperationRole((byte)3);
firstAidLogDao.insertSelective(firstAidLog);
}
@Override
public FirstAidVo.FirstAidBase getDetail(FirstAidDto.Project param, Long userId) {
FirstAidExample example = new FirstAidExample();
example.createCriteria().andProjectIdEqualTo(param.getProjectId());
example.setOrderByClause("id desc limit 1");
List<FirstAid> firstAids = firstAidDao.selectByExample(example);
if (CollectionUtil.isEmpty(firstAids)) {
return null;
}
FirstAid firstAid = firstAids.get(0);
FirstAidVo.FirstAidBase detail = new FirstAidVo.FirstAidBase();
detail.setProjectId(firstAid.getProjectId());
detail.setType(firstAid.getType());
detail.setValueType(firstAid.getValueType());
return detail;
}
}

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

@ -13,16 +13,17 @@ 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);
/**
* 添加病例
* @param param 患者信息
* @param userId userId
* @return
*/
void savePatient(PatientDto.SavePatient param, Long userId);
PatientVo.PatientSimple savePatient(PatientDto.SavePatient param, Long userId);
/**
* 通过项目id查找患者信息
@ -84,4 +85,11 @@ public interface IFirstAidService {
*/
void updateStatus(FirstAidDto.UpdateStatus param, Long userId);
/**
* 获取病例详情
* @param param 请求参数
* @param userId 用户ID
* @return 病例信息
*/
FirstAidVo.FirstAidBase getDetail(FirstAidDto.Project param, Long userId);
}

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

@ -87,7 +87,7 @@ public interface IStatisticalService {
* @param userId 用户id
* @return 各地溶栓率统计
*/
StatisticalVo.Common gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId);
StatisticalVo.CommonList gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId);
/**
*各地-溶栓患者/机械再通/脑出血
@ -95,7 +95,7 @@ public interface IStatisticalService {
* @param userId 用户id
* @return 统计结果
*/
StatisticalVo.Common gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId);
StatisticalVo.CommonList gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId);
/**
* 分项-溶栓患者/机械再通/脑出血
@ -111,7 +111,7 @@ public interface IStatisticalService {
* @param userId userId
* @return 返回统计结果
*/
StatisticalVo.Common placeTimeWindows(StatisticalDto.GdThrombosisRate param, Long userId);
StatisticalVo.CommonList placeTimeWindows(StatisticalDto.AreaTimeWindowPatient param, Long userId);
/**
* 山西省地市查询

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

@ -1,6 +1,8 @@
package com.ccsens.carbasics.service;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.po.Organization;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.persist.dao.OrganizationDao;
import com.ccsens.carbasics.util.Constant;
@ -10,6 +12,8 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
@ -26,22 +30,34 @@ public class OrganizationService implements IOrganizationService {
@Override
public OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId) {
// 判断机构是否存在
Organization organization = organizationDao.getByProjectId(param.getProjectId());
List<OrganizationVo.RankItem> items = new ArrayList<>();
switch (param.getType()) {
case Constant.HospitalRank.DNT_MEDIAN:
items = organizationDao.rankByDntMedian(param.getAreaId(), param.getLevel());
break;
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());
items = organizationDao.rankByType(param.getType(), param.getAreaId(), param.getLevel());
break;
default:break;
}
return null;
OrganizationVo.RankItem self = null;
if (organization != null && organization.getOrganizationType() == Constant.Organization.HOSPITAL && CollectionUtil.isNotEmpty(items)) {
for (OrganizationVo.RankItem item: items) {
if (item.getId().longValue() == organization.getId().longValue()) {
self = item;
break;
}
}
}
OrganizationVo.Rank rank = new OrganizationVo.Rank();
rank.setSelf(self);
rank.setList(items);
return rank;
}
}

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

@ -3,6 +3,7 @@ package com.ccsens.carbasics.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.carbasics.bean.dto.StatisticalDto;
import com.ccsens.carbasics.bean.po.Organization;
import com.ccsens.carbasics.bean.vo.StatisticalVo;
@ -130,15 +131,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;
}
@ -165,14 +165,11 @@ public class StatisticalService implements IStatisticalService {
private List<StatisticalVo.Item> fillItems(List<StatisticalVo.Item> items, Long startTime, Long endTime, Byte countType) {
if (CollectionUtil.isEmpty(items)) {
return items;
}
Map<String, StatisticalVo.Item> map = new HashMap<>();
List<StatisticalVo.Item> newItems = new ArrayList<>();
items.forEach(item -> map.put(item.getName(), item));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int unit = Calendar.HOUR_OF_DAY;
int unit = Calendar.DAY_OF_YEAR;
if (countType == Constant.Param.COUNT_TYPE_HOUR) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH");
unit = Calendar.HOUR;
@ -192,7 +189,7 @@ public class StatisticalService implements IStatisticalService {
}
calendar.add(unit, 1);
}
return items;
return newItems;
}
@Override
@ -222,21 +219,19 @@ public class StatisticalService implements IStatisticalService {
List<StatisticalVo.Item> items = firstAidRecordDao.countTimeMedian(param.getMinuendCode(), param.getSubtractionCode(), hospitalIds, param.getStartTime(), param.getEndTime(), param.getCountType());
StatisticalVo.Common common = new StatisticalVo.Common();
BigDecimal median = firstAidRecordDao.countMedian(Constant.Statistical.Dnt.MINUEND_CODE, Constant.Statistical.Dnt.SUBTRACTION_CODE, hospitalIds, param.getStartTime(), param.getEndTime());
common.setTotal(median.toString());
common.setTotal(median == null ? "" : median.toString());
List<StatisticalVo.Item> newItems = fillItems(items, param.getStartTime(), param.getEndTime(), param.getCountType());
common.setList(newItems);
return common;
}
@Override
public StatisticalVo.Common gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getCode());
public StatisticalVo.CommonList gdThrombosisRate(StatisticalDto.GdThrombosisRate param, Long userId) {
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));
List<StatisticalVo.Item> items = firstAidRecordDao.gdThrombosisRate(param.getCode(),param.getStartTime(),param.getEndTime(),questionCode,answer,timeGist);
StatisticalVo.CommonList common = new StatisticalVo.CommonList();
common.setList(items);
return common;
}
@ -249,11 +244,10 @@ public class StatisticalService implements IStatisticalService {
return common;
}
@Override
public StatisticalVo.Common gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId) {
public StatisticalVo.CommonList 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));
StatisticalVo.CommonList common = new StatisticalVo.CommonList();
common.setList(items);
return common;
}
@ -337,7 +331,7 @@ public class StatisticalService implements IStatisticalService {
long total = 0L;
if(CollectionUtil.isNotEmpty(items)){
for (StatisticalVo.Item item : items){
total += Long.parseLong(item.getValue());
total += StrUtil.isEmpty(item.getValue()) ? 0 : Long.parseLong(item.getValue());
}
}
return total + "";
@ -363,23 +357,49 @@ public class StatisticalService implements IStatisticalService {
}
@Override
public StatisticalVo.Common placeTimeWindows(StatisticalDto.GdThrombosisRate param, Long userId) {
public StatisticalVo.CommonList placeTimeWindows(StatisticalDto.AreaTimeWindowPatient param, Long userId) {
//查找机构下的医院id
List<Long> hospitalIds = getHospitalIds(param.getCode());
if(CollectionUtil.isNotEmpty(hospitalIds)){
if(CollectionUtil.isEmpty(hospitalIds)){
throw new BaseException(DefaultCodeError.NOT_ORGANIZATION);
}
//统计数据
List<StatisticalVo.Item> items = firstAidRecordDao.placeTimeWindows(hospitalIds,param.getStartTime(),param.getEndTime());
List<StatisticalVo.Item> items = firstAidRecordDao.placeTimeWindows(param.getCode(),param.getStartTime(),param.getEndTime());
//封装返回
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(getTotal(items));
StatisticalVo.CommonList common = new StatisticalVo.CommonList();
common.setList(items);
return common;
}
@Override
public List<StatisticalVo.ProvinceCity> provinceCityStatistical(StatisticalDto.ProvinceCode param, Long userId) {
return firstAidRecordDao.provinceCityStatistical(param.getCode());
List<StatisticalVo.ProvinceCity> cities = firstAidRecordDao.provinceCityStatistical(param.getCode());
Map<Long, StatisticalVo.ProvinceCity> parentMap = new HashMap<>();
List<StatisticalVo.ProvinceCity> cityLevels = new ArrayList<>();
cities.forEach(parentCity -> {
if (parentCity.getParentId() == null || parentCity.getParentId() == 0) {
parentCity.setChildren(new ArrayList<>());
parentMap.put(parentCity.getId(), parentCity);
cityLevels.add(parentCity);
}
});
StatisticalVo.ProvinceCity unknownCity = new StatisticalVo.ProvinceCity();
List<StatisticalVo.ProvinceCity> unknownChildren = new ArrayList<>();
unknownCity.setChildren(unknownChildren);
cities.forEach(childCity -> {
if (childCity.getParentId() == null || childCity.getParentId() == 0) {
return;
}
if (parentMap.containsKey(childCity.getParentId())) {
parentMap.get(childCity.getParentId()).getChildren().add(childCity);
} else {
unknownChildren.add(childCity);
}
});
if (unknownChildren.size() > 0) {
cityLevels.add(unknownCity);
}
return cityLevels;
}
}

4
src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: common, util-dev
active: test
include: common, util-test

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

@ -12,6 +12,7 @@
#{id}
</foreach>
and r2.answer - r1.answer &lt; 6 * 60 * 60 * 1000
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
</select>
<select id="countSpecifyAnswer" resultType="java.lang.Long">
@ -22,6 +23,7 @@
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
#{id}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0
</select>
<select id="countDnt" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Dnt">
@ -37,6 +39,7 @@
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
#{id}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
</select>
<select id="countDpt" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Dpt">
@ -54,6 +57,7 @@
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
#{id}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
</select>
<select id="countMedian" resultType="java.math.BigDecimal">
@ -71,6 +75,7 @@
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
#{id}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
)d,
(SELECT @rownum:=0) r
@ -80,40 +85,44 @@
</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 value_type = 0 and data_status in (1, 3, 5, 6)
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
(select
<choose>
<when test="type == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="type == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</when>
<when test="type == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') as date,</when>
<when test="countType == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="countType == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</when>
<when test="countType == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') as date,</when>
<otherwise>FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</otherwise>
</choose>
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by
<choose>
<when test="type == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H')</when>
<when test="type == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </when>
<when test="type == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') </when>
<when test="countType == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H')</when>
<when test="countType == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </when>
<when test="countType == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') </when>
<otherwise>FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </otherwise>
</choose>
) t1,
(select
<choose>
<when test="type == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="type == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</when>
<when test="type == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') as date,</when>
<when test="countType == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="countType == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</when>
<when test="countType == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') as date,</when>
<otherwise>FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date,</otherwise>
</choose>
count(a.id) as part from t_qcp_first_aid a, t_qcp_first_aid_record r1, t_qcp_first_aid_record r2
@ -123,12 +132,13 @@
<foreach collection="hospitalIds" item="id" separator="," open="and a.hospital_id in (" close=")">
#{id}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0
group by
<choose>
<when test="type == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H')</when>
<when test="type == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </when>
<when test="type == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') </when>
<when test="countType == 0">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d %H')</when>
<when test="countType == 1">FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </when>
<when test="countType == 2">FROM_UNIXTIME(r2.answer/1000,'%Y-%m') </when>
<otherwise>FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </otherwise>
</choose>
)t2
@ -151,6 +161,7 @@
<foreach collection="hospitalIds" open="(" close=")" separator="," item="hospitalId">
#{hospitalId}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
<if test="param.startTime!=null and param.startTime!=0">
@ -183,6 +194,7 @@
#{id}
</foreach>
AND r2.answer - r1.answer &lt; 6 * 60 * 60 * 1000
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
AND r2.rec_status = 0
@ -207,9 +219,10 @@
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
) d,
(select @rk := 0, @team := '') t
@ -227,9 +240,10 @@
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by
<choose>
@ -250,7 +264,7 @@
from (
select city.id, city.short_name as shortName, aid.val 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
where o.id = p.parent_id and p.organization_id = city.id AND city.organization_type = 2
and o.code = #{param.code} and o.rec_status = 0 and p.rec_status = 0 and city.rec_status = 0) city
left join
(select o.id, o.name, 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
@ -262,7 +276,8 @@
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 = #{param.minuendCode}
and a.id = r2.first_aid_id and r2.question_code = #{param.subtractionCode}
and r1.answer + 0 &gt;= #{startTime} and r1.answer + 0 &lt;= #{endTime}
and r1.answer + 0 &gt;= #{param.startTime} and r1.answer + 0 &lt;= #{param.endTime}
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
) aid on hospital.id = aid.hospital_id
) t1, (select @rk := 0, @team := '') a order by id,val) b
@ -283,7 +298,8 @@
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 = #{param.minuendCode}
and a.id = r2.first_aid_id and r2.question_code = #{param.subtractionCode}
and r1.answer + 0 &gt;= #{startTime} and r1.answer + 0 &lt;= #{endTime}
and r1.answer + 0 &gt;= #{param.startTime} and r1.answer + 0 &lt;= #{param.endTime}
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
) aid on hospital.id = aid.hospital_id
group by city.id
@ -316,6 +332,7 @@
<foreach collection="hospitalIds" open="(" close=")" separator="," item="hospitalId">
#{hospitalId}
</foreach>
AND a.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
GROUP BY
@ -346,7 +363,8 @@
WHERE
o.id = p.parent_id
AND p.organization_id = city.id
AND o. CODE = 'SXSZK'
AND o.code = #{code}
AND city.organization_type = 2
AND o.rec_status = 0
AND p.rec_status = 0
AND city.rec_status = 0
@ -380,11 +398,8 @@
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
AND r2.rec_status = 0
@ -407,10 +422,7 @@
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
GROUP BY
@ -438,7 +450,8 @@
WHERE
o.id = p.parent_id
AND p.organization_id = city.id
AND o. CODE = 'SXSZK'
AND o.code = #{param.code}
AND city.organization_type = 2
AND o.rec_status = 0
AND p.rec_status = 0
AND city.rec_status = 0
@ -472,10 +485,7 @@
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.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
GROUP BY
@ -501,7 +511,8 @@
WHERE
o.id = p.parent_id
AND p.organization_id = city.id
AND o.CODE = 'SXSZK'
AND o.CODE = #{code}
AND city.organization_type = 2
AND o.rec_status = 0
AND p.rec_status = 0
AND city.rec_status = 0
@ -534,11 +545,8 @@
AND r1.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.value_type = 0 and a.data_status in (1, 3, 5, 6)
AND a.rec_status = 0
AND r1.rec_status = 0
AND r2.rec_status = 0
@ -549,22 +557,9 @@
city.id
</select>
<resultMap id="provinceCityStatistical" type="com.ccsens.carbasics.bean.vo.StatisticalVo$ProvinceCity">
<id column="id" property="id"/>
<result column="code" property="code"/>
<result column="shortName" property="shortName"/>
<result column="projectId" property="projectId"/>
<result column="parentId" property="parentId"/>
<collection property="children" ofType="com.ccsens.carbasics.bean.vo.StatisticalVo$ProvinceCity">
<id column="parentId" property="parentId"/>
<result column="id" property="id"/>
<result column="code" property="code"/>
<result column="shortName" property="shortName"/>
<result column="projectId" property="projectId"/>
</collection>
</resultMap>
<select id="provinceCityStatistical" resultMap="provinceCityStatistical">
<select id="provinceCityStatistical" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$ProvinceCity">
SELECT
o.id,
o.CODE,

126
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,9 +87,9 @@
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$RankItem">
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, h.level, ifNULL(t.total, 0) as value from
(
<choose>
<when test="areaId == null or areaId == 0">
@ -95,10 +100,10 @@
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL
from t_organization
t1.level
from t_organization t1
WHERE
organizationType = 3
organization_type = 3
<if test="level != null">
AND level = 3
</if>
@ -115,7 +120,7 @@
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL,
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,
@ -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(r1.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$RankItem">
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, h.level, ifNULL(t.total, 0) as value from (
<choose>
<when test="areaId == null or areaId == 0">
SELECT
@ -155,10 +197,10 @@
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL
from t_organization
t1.level
from t_organization t1
WHERE
organizationType = 3
organization_type = 3
<if test="level != null">
AND level = 3
</if>
@ -175,7 +217,7 @@
t1.NAME,
t1.short_name AS shortName,
t1.introduce,
t1.LEVEL,
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,
@ -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