diff --git a/src/main/java/com/ccsens/carbasics/api/OcrController.java b/src/main/java/com/ccsens/carbasics/api/OcrController.java index 7bf3531..fe74478 100644 --- a/src/main/java/com/ccsens/carbasics/api/OcrController.java +++ b/src/main/java/com/ccsens/carbasics/api/OcrController.java @@ -69,10 +69,11 @@ public class OcrController { @MustLogin @ApiOperation(value = "图片文字识别",notes = "") @RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"}) - public JsonResponse>> queryInpatient(QueryDto> params, Long projectId) throws Exception { + public JsonResponse>> queryInpatient(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { log.info("图片文字识别请求:{}", params); - Map> words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId); + Map> words = ocrService.discernWords(params.getParam(), params.getUserId()); log.info("图片文字识别结束:{}", words); return JsonResponse.newInstance().ok(words); } + } diff --git a/src/main/java/com/ccsens/carbasics/api/OrganizationController.java b/src/main/java/com/ccsens/carbasics/api/OrganizationController.java index 495e9a2..724fdba 100644 --- a/src/main/java/com/ccsens/carbasics/api/OrganizationController.java +++ b/src/main/java/com/ccsens/carbasics/api/OrganizationController.java @@ -108,4 +108,14 @@ public class OrganizationController { log.info("医院排名查询结果:{}", rank); return JsonResponse.newInstance().ok(rank); } + + @MustLogin + @ApiOperation(value = "查询医院排名规则", notes = "") + @RequestMapping(value = "/queryRankRule", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> queryRankRule(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("查询医院排名规则:{}", params); + List rankRuleList = organizationService.queryRankRule(params.getUserId()); + log.info("查询医院排名规则结果:{}", rankRuleList); + return JsonResponse.newInstance().ok(rankRuleList); + } } diff --git a/src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java b/src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java index 77e98df..b4e9d5e 100644 --- a/src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java +++ b/src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java @@ -17,11 +17,11 @@ public class OcrDto { @Data public static class GeneralBasic{ @NotNull - @ApiModelProperty("急救id") - private Long firstAidId; + @ApiModelProperty("项目id") + private Long projectId; @NotEmpty @ApiModelProperty("图片") - private List fileList; + private List fileList; } } diff --git a/src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java b/src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java index 595b08f..f45eb30 100644 --- a/src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java +++ b/src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java @@ -90,6 +90,22 @@ public class OrganizationVo { @ApiModelProperty("医院排名") private List list; } + @ApiModel("医院排名规则-返回") + @Data + public static class RankRule{ + @ApiModelProperty("序号") + private Integer ruleId; + @ApiModelProperty("指标") + private String value; + @ApiModelProperty("标注(前端切换指标显示)") + private String label; + + public RankRule(Integer ruleId, String value, String label) { + this.ruleId = ruleId; + this.value = value; + this.label = label; + } + } @ApiModel("医院排名项") @Data diff --git a/src/main/java/com/ccsens/carbasics/service/IOcrService.java b/src/main/java/com/ccsens/carbasics/service/IOcrService.java index 64619f6..aa8d450 100644 --- a/src/main/java/com/ccsens/carbasics/service/IOcrService.java +++ b/src/main/java/com/ccsens/carbasics/service/IOcrService.java @@ -33,5 +33,5 @@ public interface IOcrService { * @return 文字列表 * @throws IOException 异常 */ - Map> discernWords(List param, Long userId, Long firstAidId) throws IOException, ParseException; + Map> discernWords(OcrDto.GeneralBasic param, Long userId) throws IOException, ParseException; } diff --git a/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java b/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java index ea908de..b869f07 100644 --- a/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java +++ b/src/main/java/com/ccsens/carbasics/service/IOrganizationService.java @@ -38,4 +38,11 @@ public interface IOrganizationService { * @return 返回医院排名 */ OrganizationVo.HospitalRank hospitalStatistical(OrganizationDto.RankNew param, Long userId); + + /** + * 查询医院排名规则 + * @param userId 用户id + * @return 规则列表 + */ + List queryRankRule(Long userId); } diff --git a/src/main/java/com/ccsens/carbasics/service/OcrService.java b/src/main/java/com/ccsens/carbasics/service/OcrService.java index aa70382..19b4e87 100644 --- a/src/main/java/com/ccsens/carbasics/service/OcrService.java +++ b/src/main/java/com/ccsens/carbasics/service/OcrService.java @@ -197,9 +197,9 @@ public class OcrService implements IOcrService { @Override - public Map> discernWords(List param, Long userId,Long projectId) throws IOException, ParseException { + public Map> discernWords(OcrDto.GeneralBasic param, Long userId) throws IOException, ParseException { // FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(firstAidId); - FirstAid firstAidInfo = firstAidDao.queryByProjectId(projectId); + FirstAid firstAidInfo = firstAidDao.queryByProjectId(param.getProjectId()); if (ObjectUtil.isNull(firstAidInfo)) { throw new BaseException("急救信息错误"); } @@ -226,19 +226,19 @@ public class OcrService implements IOcrService { List strList = new ArrayList<>(); Long startOcr = System.currentTimeMillis(); log.info("接收到的文件{}",param); - if (CollectionUtil.isNotEmpty(param)) { - if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) { - log.info("已删除相同文件"); - param.remove(param.size()-1); - } - } +// if (CollectionUtil.isNotEmpty(param)) { +// if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) { +// log.info("已删除相同文件"); +// param.remove(param.size()-1); +// } +// } - for (MultipartFile file : param) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1); - String img = Base64.encode(out.toByteArray()); + for (String file : param.getFileList()) { +// ByteArrayOutputStream out = new ByteArrayOutputStream(); +// ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1); +// String img = Base64.encode(out.toByteArray()); BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); - basic.setImage(img); + basic.setUrl(file); BaiDuVo.GeneralBasic words = BaiDuUtil.accurateBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic); log.info("文字识别:{}", words); for (BaiDuVo.GeneralWord generalWord : words.getWordsResult()) { @@ -246,17 +246,17 @@ public class OcrService implements IOcrService { } //保存图片 - String extName = FileUtil.extName(file.getOriginalFilename()); - String dir = PropUtil.path + File.separator + Constant.OrcImg.FILE_DIR; - String extraPath = DateUtil.format(new Date(), "yyyyMMdd"); - String path = extraPath + File.separator+firstAidInfo.getId()+firstAidInfo.getName()+File.separator+ IdUtil.simpleUUID() + "." + extName; - //转成file - File saveFile = new File(dir + extraPath); - if (!saveFile.exists()) { - saveFile.mkdirs(); - } - String fullPath = dir + File.separator + path; - FileUtil.writeFromStream(file.getInputStream(), fullPath); +// String extName = FileUtil.extName(file.getOriginalFilename()); +// String dir = PropUtil.path + File.separator + Constant.OrcImg.FILE_DIR; +// String extraPath = DateUtil.format(new Date(), "yyyyMMdd"); +// String path = extraPath + File.separator+firstAidInfo.getId()+firstAidInfo.getName()+File.separator+ IdUtil.simpleUUID() + "." + extName; +// //转成file +// File saveFile = new File(dir + extraPath); +// if (!saveFile.exists()) { +// saveFile.mkdirs(); +// } +// String fullPath = dir + File.separator + path; +// FileUtil.writeFromStream(file.getInputStream(), fullPath); } Long ocrEnd = System.currentTimeMillis(); diff --git a/src/main/java/com/ccsens/carbasics/service/OrganizationService.java b/src/main/java/com/ccsens/carbasics/service/OrganizationService.java index 015f819..2f9084a 100644 --- a/src/main/java/com/ccsens/carbasics/service/OrganizationService.java +++ b/src/main/java/com/ccsens/carbasics/service/OrganizationService.java @@ -177,4 +177,10 @@ public class OrganizationService implements IOrganizationService { rank.setList(items); return rank; } + + + @Override + public List queryRankRule(Long userId) { + return new ArrayList<>(Constant.RANK_RULE); + } } diff --git a/src/main/java/com/ccsens/carbasics/util/Constant.java b/src/main/java/com/ccsens/carbasics/util/Constant.java index 5ad9f00..ea7b386 100644 --- a/src/main/java/com/ccsens/carbasics/util/Constant.java +++ b/src/main/java/com/ccsens/carbasics/util/Constant.java @@ -1,5 +1,6 @@ package com.ccsens.carbasics.util; +import com.ccsens.carbasics.bean.vo.OrganizationVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -649,4 +650,17 @@ public class Constant { TIME_CODE.add("JMRSSJ"); } + public static final List RANK_RULE = new ArrayList<>(); + static { + RANK_RULE.add(new OrganizationVo.RankRule(1,"溶栓率(发病时间≦4.5小时)","溶栓率(发病时间≦4.5小时)=实际溶栓总数/AIS就诊患者总数")); + RANK_RULE.add(new OrganizationVo.RankRule(2,"DNT≦60min达标率","DNT≦60min达标率=DNT≦60min例数/DNT总例数")); + RANK_RULE.add(new OrganizationVo.RankRule(3,"DNT≦45min达标率","DNT≦45min达标率=DNT≦45min例数/DNT总例数")); + RANK_RULE.add(new OrganizationVo.RankRule(4,"sICH发生率","sICH发生率=溶栓后sICH例数/实际溶栓总数")); + RANK_RULE.add(new OrganizationVo.RankRule(5,"桥接血管内治疗率","桥接血管内治疗率=实际溶栓后血管内治疗总人数/溶栓后符合血管内治疗指征总人数")); + RANK_RULE.add(new OrganizationVo.RankRule(6,"非桥接血管内治疗率","非桥接血管内治疗率=实际血管内治疗总人数/符合血管内治疗指征总人数")); + RANK_RULE.add(new OrganizationVo.RankRule(7,"非桥接DPT≤90min比例","非桥接DPT≤90min比例=DPT≤90min例数/DPT总例数")); + RANK_RULE.add(new OrganizationVo.RankRule(8,"非桥接DPT≤60min比例","非桥接DPT≤60min比例=DPT≤60min例数/DPT总例数")); + RANK_RULE.add(new OrganizationVo.RankRule(9,"非桥接PRT≤60min比例","非桥接PRT≤60min比例=PRT≤60min例数/PRT总例数")); + RANK_RULE.add(new OrganizationVo.RankRule(10,"非桥接PRT≤30min比例","非桥接PRT≤30min比例=PRT≤30min例数/PRT总例数")); + } } diff --git a/src/main/resources/mapper_dao/OrganizationDao.xml b/src/main/resources/mapper_dao/OrganizationDao.xml index 2c17dfc..5a46b02 100644 --- a/src/main/resources/mapper_dao/OrganizationDao.xml +++ b/src/main/resources/mapper_dao/OrganizationDao.xml @@ -428,21 +428,47 @@ LEFT JOIN ( - + - + - + + + + + + + + + + + + + + + + + + + + + + )t on h.detail_id = t.detail_id LEFT JOIN t_qcp_questionnaire_detail d on h.detail_id = d.id and rec_status = 0 WHERE d.submit_status = 1 - ORDER BY `value` DESC + + ORDER BY `value` + + + ORDER BY `value` DESC + SELECT @@ -516,4 +542,277 @@ and a2.detail_id = a3.detail_id and a1.detail_id = a3.detail_id + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + a1.answer * 100 / a2.answer, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'sICH-Nnt' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'actual-Nnt' + AND rec_status = 0 + ) AS a2 + WHERE + a1.detail_id = a2.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + a1.answer * 100 / a2.answer, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-sICH-Nnt' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-RSH-Nnt' + AND rec_status = 0 + ) AS a2 + WHERE + a1.detail_id = a2.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + a1.answer * 100 / a2.answer, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-actual-Nnt' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-FIT-Nnt' + AND rec_status = 0 + ) AS a2 + WHERE + a1.detail_id = a2.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + a1.answer * 100 / ( + a1.answer + a2.answer + a3.answer + ), + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-60' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-89' + AND rec_status = 0 + ) AS a2, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-91' + AND rec_status = 0 + ) AS a3 + WHERE + a1.detail_id = a2.detail_id + and a2.detail_id = a3.detail_id + and a1.detail_id = a3.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + (a1.answer + a2.answer) / ( + a1.answer + a2.answer + a3.answer + ) * 100, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-60' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-89' + AND rec_status = 0 + ) AS a2, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-DPT-91' + AND rec_status = 0 + ) AS a3 + WHERE + a1.detail_id = a2.detail_id + and a2.detail_id = a3.detail_id + and a1.detail_id = a3.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + (a1.answer + a2.answer) / ( + a1.answer + a2.answer + a3.answer + ) * 100, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-29' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-59' + AND rec_status = 0 + ) AS a2, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-62' + AND rec_status = 0 + ) AS a3 + WHERE + a1.detail_id = a2.detail_id + and a2.detail_id = a3.detail_id + and a1.detail_id = a3.detail_id + + + SELECT + a1.detail_id AS detail_id, + CONVERT ( + a1.answer / ( + a1.answer + a2.answer + a3.answer + ) * 100, + DECIMAL (15, 0) + ) AS count + FROM + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-29' + AND rec_status = 0 + ) AS a1, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-59' + AND rec_status = 0 + ) AS a2, + ( + SELECT + questionnaire_detail_id AS detail_id, + answer + FROM + `t_qcp_questionnaire_record` + WHERE + question_code = 'XGZL-PRT-62' + AND rec_status = 0 + ) AS a3 + WHERE + a1.detail_id = a2.detail_id + and a2.detail_id = a3.detail_id + and a1.detail_id = a3.detail_id +