Browse Source

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

master
zy_Java 4 years ago
parent
commit
8a0e12c02c
  1. 47
      src/main/java/com/ccsens/carbasics/api/OrganizationController.java
  2. 37
      src/main/java/com/ccsens/carbasics/api/StatisticalController.java
  3. 30
      src/main/java/com/ccsens/carbasics/bean/dto/OrganizationDto.java
  4. 48
      src/main/java/com/ccsens/carbasics/bean/dto/StatisticalDto.java
  5. 22
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  6. 2
      src/main/java/com/ccsens/carbasics/bean/vo/StatisticalVo.java
  7. 21
      src/main/java/com/ccsens/carbasics/persist/dao/FirstAidRecordDao.java
  8. 36
      src/main/java/com/ccsens/carbasics/persist/dao/OrganizationDao.java
  9. 15
      src/main/java/com/ccsens/carbasics/service/IOrganizationService.java
  10. 15
      src/main/java/com/ccsens/carbasics/service/IStatisticalService.java
  11. 47
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  12. 56
      src/main/java/com/ccsens/carbasics/service/StatisticalService.java
  13. 13
      src/main/java/com/ccsens/carbasics/util/Constant.java
  14. 147
      src/main/resources/mapper_dao/FirstAidRecordDao.xml
  15. 123
      src/main/resources/mapper_dao/OrganizationDao.xml

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

@ -0,0 +1,47 @@
package com.ccsens.carbasics.api;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.dto.StatisticalDto;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import com.ccsens.carbasics.bean.vo.StatisticalVo;
import com.ccsens.carbasics.service.IOrganizationService;
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;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @description:
* @author: whj
* @time: 2021/9/3 16:38
*/
@Api(tags = "机构(质控,医院)相关")
@RestController
@RequestMapping("/organization")
@Slf4j
public class OrganizationController {
@Resource
private IOrganizationService organizationService;
@MustLogin
@ApiOperation(value = "山西省地市查询", notes = "山西省地市查询")
@RequestMapping(value = "/provinceCity", 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());
log.info("山西省地市查询结果:{}", rank);
return JsonResponse.newInstance().ok(rank);
}
}

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

@ -72,15 +72,6 @@ public class StatisticalController {
log.info("统计列表结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@MustLogin
@ApiOperation(value = "分项-溶栓率", notes = "分项-溶栓率")
@RequestMapping(value = "/thrombosisRate", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> thrombosisRate(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.ThrombosisRate> params) {
log.info("统计列表:{}", params);
StatisticalVo.Common common = statisticalService.thrombosisRate(params.getParam(), params.getUserId());
log.info("统计列表结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@MustLogin
@ApiOperation(value = "手术方式/来院统计", notes = "zy")
@ -112,6 +103,24 @@ public class StatisticalController {
}
@MustLogin
@ApiOperation(value = "分项-溶栓率", notes = "分项-溶栓率(总溶栓率除以100保留2位小数显示)")
@RequestMapping(value = "/thrombosisRate", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> thrombosisRate(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.ThrombosisRate> params) {
log.info("分项-溶栓率:{}", params);
StatisticalVo.Common common = statisticalService.thrombosisRate(params.getParam(), params.getUserId());
log.info("分项-溶栓率结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@MustLogin
@ApiOperation(value = "分项-中位数", notes = "分项-中位数")
@RequestMapping(value = "/timeMedian", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.Common> timeMedian(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.Median> params) {
log.info("分项-中位数:{}", params);
StatisticalVo.Common common = statisticalService.timeMedian(params.getParam(), params.getUserId());
log.info("分项-中位数结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@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) {
@ -131,6 +140,14 @@ public class StatisticalController {
}
@MustLogin
@ApiOperation(value = "各地-中位数", notes = "各地-中位数")
@RequestMapping(value = "/areaMedian", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<StatisticalVo.CommonList> areaMedian(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.AreaMedian> params) {
log.info("各地-中位数:{}", params);
StatisticalVo.CommonList common = statisticalService.areaMedian(params.getParam(), params.getUserId());
log.info("各地-中位数结果:{}", common);
return JsonResponse.newInstance().ok(common);
}
@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) {
@ -141,7 +158,7 @@ public class StatisticalController {
}
@MustLogin
@ApiOperation(value = "山西省地市查询", notes = "")
@ApiOperation(value = "山西省地市查询", notes = "山西省地市查询")
@RequestMapping(value = "/provinceCity", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<StatisticalVo.ProvinceCity>> provinceCityStatistical(@ApiParam @Validated @RequestBody QueryDto<StatisticalDto.ProvinceCode> params) {
log.info("各地-溶栓患者/机械再通/脑出血:{}", params);

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

@ -0,0 +1,30 @@
package com.ccsens.carbasics.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @description:
* @author: whj
* @time: 2021/9/3 16:47
*/
public class OrganizationDto {
@ApiModel("医院排名-请求")
@Data
public static class Rank{
@ApiModelProperty("地区ID 有市,则为市的ID,否则,省的ID;空则查全部医院")
private Long areaId;
@ApiModelProperty("等级 2:二级 3:三级")
private byte level;
@NotNull
@ApiModelProperty("指标类型-必填 0:时间窗患者例数,1:溶栓例数 2:溶栓率 3:DNT中位数 4:脑出血例数")
private byte type;
@NotNull
@ApiModelProperty("项目ID-必填")
private Long projectId;
}
}

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

@ -45,6 +45,29 @@ public class StatisticalDto {
private Byte countType;
}
@Data
@ApiModel("分项-中位数-请求")
public static class Median {
@NotNull(message = "项目id不能为空")
@ApiModelProperty("项目ID")
private Long projectId;
@NotNull
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@NotNull
@ApiModelProperty("统计类型(0-每小时 1-每天 2-每月)")
private Byte countType;
@NotBlank
@ApiModelProperty("减数code,例:ONT中位数 开始静脉溶栓时间-发病时间√")
private String subtractionCode;
@NotBlank
@ApiModelProperty("被减数code,例:ONT中位数 开始静脉溶栓时间(√ 统计时间依据)-发病时间")
private String minuendCode;
}
@ApiModel("分项-时间窗患者-请求")
@Data
public static class TimeAndType {
@ -97,6 +120,24 @@ public class StatisticalDto {
private String accordCode;
}
@Data
@ApiModel("地市-中位数-请求")
public static class AreaMedian {
@NotNull(message = "请选择对应的省份信息")
@ApiModelProperty("省质控code")
private String code;
@ApiModelProperty("开始时间")
private Long startTime;
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@NotBlank
@ApiModelProperty("减数code,例:ONT中位数 开始静脉溶栓时间-发病时间√")
private String subtractionCode;
@NotBlank
@ApiModelProperty("被减数code,例:ONT中位数 开始静脉溶栓时间(√ 统计时间依据)-发病时间")
private String minuendCode;
}
@Data
@ApiModel("各地-溶栓患者/机械再通/脑出血")
@ -115,7 +156,6 @@ public class StatisticalDto {
private String answer;
@ApiModelProperty("统计code 手术开始时间code/到院时间code")
private String accordCode;
}
@Data
@ApiModel("各地-溶栓率统计")
@ -128,6 +168,12 @@ public class StatisticalDto {
@NotNull
@ApiModelProperty("开始时间")
private Long endTime;
@NotBlank
@ApiModelProperty("减数code,例:ONT中位数 开始静脉溶栓时间-发病时间√")
private String subtractionCode;
@NotBlank
@ApiModelProperty("被减数code,例:ONT中位数 开始静脉溶栓时间(√ 统计时间依据)-发病时间")
private String minuendCode;
}
@Data

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

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @description:
* @author: whj
@ -42,4 +44,24 @@ public class OrganizationVo {
@ApiModelProperty("机构id")
private String organizationCode;
}
@ApiModel("医院排名-返回")
@Data
public static class Rank{
@ApiModelProperty("医院自身排名")
private RankItem self;
@ApiModelProperty("医院排名")
private List<RankItem> list;
}
@ApiModel("医院排名项")
@Data
public static class RankItem{
@ApiModelProperty("医院名")
private String name;
@ApiModelProperty("指标")
private String value;
@ApiModelProperty("排名")
private int rank;
}
}

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

@ -19,7 +19,7 @@ public class StatisticalVo {
@Data
public static class Common{
@ApiModelProperty("总数")
private Long total;
private String total;
@ApiModelProperty("统计列表")
private List<Item> list;
}

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

@ -5,6 +5,7 @@ import com.ccsens.carbasics.bean.vo.StatisticalVo;
import com.ccsens.carbasics.persist.mapper.FirstAidRecordMapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
@ -61,7 +62,7 @@ public interface FirstAidRecordDao extends FirstAidRecordMapper {
* @param endTime 结束时间
* @return 统计指定的中位数
*/
Long countMedian(@Param("minuendCode") String minuendCode, @Param("subtractionCode") String subtractionCode, @Param("hospitalIds") List<Long> hospitalIds, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
BigDecimal countMedian(@Param("minuendCode") String minuendCode, @Param("subtractionCode") String subtractionCode, @Param("hospitalIds") List<Long> hospitalIds, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
/**
* 统计累计收录病例数
@ -99,6 +100,24 @@ 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 minuendCode 减数code ONT中位数 开始静脉溶栓时间-发病时间
* @param subtractionCode 被减数code ONT中位数 开始静脉溶栓时间 统计时间依据-发病时间
* @param hospitalIds 医院ID
* @param startTime 开始时间
* @param endTime 结束时间
* @param countType 统计类型
* @return 分项溶栓率
*/
List<StatisticalVo.Item> countTimeMedian(@Param("minuendCode") String minuendCode, @Param("subtractionCode") String subtractionCode, @Param("hospitalIds")List<Long> hospitalIds, @Param("startTime")Long startTime, @Param("endTime") Long endTime, @Param("type")Byte countType);
/**
* 地区中位数
* @param param 请求参数
* @return 地区中位数
*/
List<StatisticalVo.Item> countAreaMedian(@Param("param") StatisticalDto.AreaMedian param);
/**
* 各地-溶栓率
* @param hospitalIds 医院id

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);
}

15
src/main/java/com/ccsens/carbasics/service/IOrganizationService.java

@ -0,0 +1,15 @@
package com.ccsens.carbasics.service;
import com.ccsens.carbasics.bean.dto.OrganizationDto;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
public interface IOrganizationService {
/**
* 医院排名
* @param param 搜索条件
* @param userId userId
* @return 医院排名
*/
OrganizationVo.Rank rank(OrganizationDto.Rank param, Long userId);
}

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

@ -66,6 +66,21 @@ public interface IStatisticalService {
*/
StatisticalVo.Common timeWindowsPatient(StatisticalDto.TimeAndType param, Long userId);
/**
* 分项-中位数
* @param param 请求参数
* @param userId 用户ID
* @return 统计结果
*/
StatisticalVo.Common timeMedian(StatisticalDto.Median param, Long userId);
/**
* 各地-中位数
* @param param 请求参数
* @param userId 用户ID
* @return 统计结果
*/
StatisticalVo.CommonList areaMedian(StatisticalDto.AreaMedian param, Long userId);
/**
* 各地-溶栓率统计
* @param param 请求参数

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

@ -0,0 +1,47 @@
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;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* @description:
* @author: whj
* @time: 2021/9/3 16:57
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class OrganizationService implements IOrganizationService {
@Resource
private OrganizationDao organizationDao;
@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;
}
}

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

@ -55,7 +55,7 @@ public class StatisticalService implements IStatisticalService {
Constant.Statistical.Ich.ANSWER, Constant.Statistical.Ich.TIME_CODE,
hospitalIds, param.getStartTime(), param.getEndTime());
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(timeWindowPatient);
common.setTotal(timeWindowPatient + "");
List<StatisticalVo.Item> items = new ArrayList<>();
items.add(new StatisticalVo.Item(Constant.Statistical.Thrombosis.NAME, ""+thrombosis));
items.add(new StatisticalVo.Item(Constant.Statistical.Mechanical.NAME, ""+mechanical));
@ -64,8 +64,6 @@ public class StatisticalService implements IStatisticalService {
return common;
}
@Override
public StatisticalVo.Common dnt(StatisticalDto.Time param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getProjectId());
@ -74,7 +72,7 @@ public class StatisticalService implements IStatisticalService {
dnt = new StatisticalVo.Dnt();
}
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(dnt.sum());
common.setTotal(dnt.sum() + "");
List<StatisticalVo.Item> items = new ArrayList<>();
items.add(new StatisticalVo.Item(Constant.Statistical.Dnt.ONE, ""+dnt.getOne()));
items.add(new StatisticalVo.Item(Constant.Statistical.Dnt.TWO, ""+dnt.getTwo()));
@ -92,7 +90,7 @@ public class StatisticalService implements IStatisticalService {
dpt = new StatisticalVo.Dpt();
}
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(dpt.sum());
common.setTotal(dpt.sum() + "");
List<StatisticalVo.Item> items = new ArrayList<>();
items.add(new StatisticalVo.Item(Constant.Statistical.Dpt.ONE, ""+dpt.getOne()));
items.add(new StatisticalVo.Item(Constant.Statistical.Dpt.TWO, ""+dpt.getTwo()));
@ -131,11 +129,11 @@ public class StatisticalService implements IStatisticalService {
hospitalIds, param.getStartTime(), param.getEndTime());
items.add(new StatisticalVo.Item(Constant.Statistical.Ich.NAME, ""+ich));
// DNT中位数
Long 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));
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()));
// DPT中位数
Long 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));
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()));
// 累计收录病例数
Long total = firstAidRecordDao.countPatient(hospitalIds, param.getStartTime(), param.getEndTime());
items.add(new StatisticalVo.Item(Constant.Statistical.PATIENT_TOTAL_NAME, "" + total));
@ -150,7 +148,16 @@ public class StatisticalService implements IStatisticalService {
List<Long> hospitalIds = getHospitalIds(param.getProjectId());
List<StatisticalVo.Item> items = firstAidRecordDao.countThrombosisRateDate(param.getCountType(), hospitalIds, param.getStartTime(), param.getEndTime());
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(getTotal(items));
// 时间窗患者
Long timeWindowPatient = firstAidRecordDao.countTimeWindowPatient(hospitalIds, param.getStartTime(), param.getEndTime());
//统计溶栓例数(开始静脉溶栓时间)
Long thrombosis = firstAidRecordDao.countSpecifyAnswer(Constant.Statistical.Thrombosis.QUESTION_CODE,
Constant.Statistical.Thrombosis.ANSWER, Constant.Statistical.Thrombosis.TIME_CODE,
hospitalIds, param.getStartTime(), param.getEndTime());
// 溶栓率 四舍五入,保留两位 52.33%
String rate = timeWindowPatient == null || timeWindowPatient == 0 ? "" :
new BigDecimal(thrombosis*100.00).divide(new BigDecimal(timeWindowPatient), 2, BigDecimal.ROUND_HALF_UP) + "%";
common.setTotal(rate);
List<StatisticalVo.Item> newItems = fillItems(items, param.getStartTime(), param.getEndTime(), param.getCountType());
common.setList(newItems);
return common;
@ -179,9 +186,9 @@ public class StatisticalService implements IStatisticalService {
while (calendar.getTimeInMillis() <= endTime) {
String format = sdf.format(calendar.getTime());
if (map.containsKey(format)) {
newItems.add(map.get(format));
newItems.add(new StatisticalVo.Item(calendar.getTimeInMillis() + "", map.get(format).getValue()));
} else {
newItems.add(new StatisticalVo.Item(format, null));
newItems.add(new StatisticalVo.Item(calendar.getTimeInMillis() + "", null));
}
calendar.add(unit, 1);
}
@ -209,6 +216,18 @@ public class StatisticalService implements IStatisticalService {
return common;
}
@Override
public StatisticalVo.Common timeMedian(StatisticalDto.Median param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getProjectId());
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());
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());
@ -222,6 +241,13 @@ public class StatisticalService implements IStatisticalService {
return common;
}
@Override
public StatisticalVo.CommonList areaMedian(StatisticalDto.AreaMedian param, Long userId) {
List<StatisticalVo.Item> items = firstAidRecordDao.countAreaMedian(param);
StatisticalVo.CommonList common = new StatisticalVo.CommonList();
common.setList(items);
return common;
}
@Override
public StatisticalVo.Common gdCountSpecifyAnswer(StatisticalDto.GdCountSpecifyAnswer param, Long userId) {
List<Long> hospitalIds = getHospitalIds(param.getCode());
@ -302,19 +328,19 @@ public class StatisticalService implements IStatisticalService {
}
//封装返回
StatisticalVo.Common common = new StatisticalVo.Common();
common.setTotal(total);
common.setTotal(total + "");
common.setList(items);
return common;
}
private long getTotal(List<StatisticalVo.Item> items) {
private String getTotal(List<StatisticalVo.Item> items) {
long total = 0L;
if(CollectionUtil.isNotEmpty(items)){
for (StatisticalVo.Item item : items){
total += Long.parseLong(item.getValue());
}
}
return total;
return total + "";
}
@Override

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;

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

@ -56,7 +56,7 @@
</foreach>
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
</select>
<select id="countMedian" resultType="java.lang.Long">
<select id="countMedian" resultType="java.math.BigDecimal">
SELECT AVG(dd.val) as num
FROM (
SELECT d.val, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
@ -86,16 +86,37 @@
and unix_timestamp(create_at)*1000 &gt;= #{startTime} and unix_timestamp(create_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, round(t2.part * 100 / t1.total, 2) as value from
(select FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date, count(*) as total from t_qcp_first_aid a, t_qcp_first_aid_record r1 , t_qcp_first_aid_record r2
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>
<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 - r1.answer &lt; 6 * 60 * 60 * 1000
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d')) t1,
(select FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') as date, count(a.id) as part from t_qcp_first_aid a, t_qcp_first_aid_record r1, t_qcp_first_aid_record r2
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>
<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>
<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
where a.id = r1.first_aid_id and a.id = r2.first_aid_id
and r1.question_code = 'ZLFA-JMRS' and r1.answer = '是'
and r2.question_code = 'JMRSSJ' and r2.answer + 0 &gt;= #{startTime} and r2.answer + 0 &lt;= #{endTime}
@ -103,7 +124,14 @@
#{id}
</foreach>
and a.rec_status = 0 and r1.rec_status = 0
group by FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d'))t2
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>
<otherwise>FROM_UNIXTIME(r2.answer/1000,'%Y-%m-%d') </otherwise>
</choose>
)t2
where t1.date = t2.date
</select>
<select id="toCourtStatistics" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
@ -161,6 +189,109 @@
GROUP BY
FROM_UNIXTIME(r2.answer / 1000, #{type})
</select>
<select id="countTimeMedian" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
select t1.date as name, avg(t1.val) as value from
(select date, val, @team,
case @team when date then @rk := @rk+1 else @rk := 1 end rk,
@team := date
from
(select
<choose>
<when test="type == 0">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="type == 1">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date,</when>
<when test="type == 2">FROM_UNIXTIME(r1.answer/1000,'%Y-%m') as date,</when>
<otherwise>FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date,</otherwise>
</choose>
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 = #{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=")">
#{id}
</foreach>
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
) d,
(select @rk := 0, @team := '') t
order by date, val) t1
left join (
select
<choose>
<when test="type == 0">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d %H') as date,</when>
<when test="type == 1">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date,</when>
<when test="type == 2">FROM_UNIXTIME(r1.answer/1000,'%Y-%m') as date,</when>
<otherwise>FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d') as date,</otherwise>
</choose>
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 = #{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=")">
#{id}
</foreach>
and a.rec_status = 0 and r1.rec_status = 0 and r2.rec_status = 0
group by
<choose>
<when test="type == 0">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d %H') </when>
<when test="type == 1">FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d')</when>
<when test="type == 2">FROM_UNIXTIME(r1.answer/1000,'%Y-%m')</when>
<otherwise>FROM_UNIXTIME(r1.answer/1000,'%Y-%m-%d')</otherwise>
</choose>
) t2 on t1.date = t2.date
where t1.rk IN (t2.cnt + 0.5, t2.cnt, t2.cnt + 1)
group by t1.date
</select>
<select id="countAreaMedian" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
select b.id,b.shortName as name, avg(b.val) as value from
(select id,shortName,val,@team,
case @team when id then @rk := @rk + 1 else @rk := 1 end rk,
@team := id
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
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
left join
(
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 = #{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 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
left join
(
select city.id, city.short_name as shortName, count(aid.id) as cnt 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 = #{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
left join
(
select
a.id,
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 = #{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 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
)c
on b.id = c.id
where b.rk IN (c.cnt + 0.5, c.cnt, c.cnt + 1)
group by id
</select>
<select id="subentrySpecifyAnswer" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
SELECT
FROM_UNIXTIME( r2.answer / 1000, #{type} ),
@ -293,7 +424,7 @@
<select id="gdCountSpecifyAnswer" resultType="com.ccsens.carbasics.bean.vo.StatisticalVo$Item">
SELECT
city.id,
city.short_name AS shortName AS name,
city.short_name AS name,
sum(t.total) AS value
FROM
(
@ -337,7 +468,7 @@
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 r1.answer = #{param.answer}
AND r2.question_code = #{param.accordCode}
AND r2.answer + 0 &gt;= #{param.startTime}
AND r2.answer + 0 &lt;= #{param.endTime}

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