Browse Source

ocr接口修改

master
ma 4 years ago
parent
commit
9420fed17b
  1. 5
      src/main/java/com/ccsens/carbasics/api/OcrController.java
  2. 10
      src/main/java/com/ccsens/carbasics/api/OrganizationController.java
  3. 6
      src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java
  4. 16
      src/main/java/com/ccsens/carbasics/bean/vo/OrganizationVo.java
  5. 2
      src/main/java/com/ccsens/carbasics/service/IOcrService.java
  6. 7
      src/main/java/com/ccsens/carbasics/service/IOrganizationService.java
  7. 48
      src/main/java/com/ccsens/carbasics/service/OcrService.java
  8. 6
      src/main/java/com/ccsens/carbasics/service/OrganizationService.java
  9. 14
      src/main/java/com/ccsens/carbasics/util/Constant.java
  10. 307
      src/main/resources/mapper_dao/OrganizationDao.xml

5
src/main/java/com/ccsens/carbasics/api/OcrController.java

@ -69,10 +69,11 @@ public class OcrController {
@MustLogin @MustLogin
@ApiOperation(value = "图片文字识别",notes = "") @ApiOperation(value = "图片文字识别",notes = "")
@RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"}) @RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<Map<String, Set<QuestionOcrVo.CodeAndAnswer>>> queryInpatient(QueryDto<List<MultipartFile>> params, Long projectId) throws Exception { public JsonResponse<Map<String, Set<QuestionOcrVo.CodeAndAnswer>>> queryInpatient(@ApiParam @Validated @RequestBody QueryDto<OcrDto.GeneralBasic> params) throws Exception {
log.info("图片文字识别请求:{}", params); log.info("图片文字识别请求:{}", params);
Map<String,Set<QuestionOcrVo.CodeAndAnswer>> words = ocrService.discernWords(params.getParam(), params.getUserId(),projectId); Map<String,Set<QuestionOcrVo.CodeAndAnswer>> words = ocrService.discernWords(params.getParam(), params.getUserId());
log.info("图片文字识别结束:{}", words); log.info("图片文字识别结束:{}", words);
return JsonResponse.newInstance().ok(words); return JsonResponse.newInstance().ok(words);
} }
} }

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

@ -108,4 +108,14 @@ public class OrganizationController {
log.info("医院排名查询结果:{}", rank); log.info("医院排名查询结果:{}", rank);
return JsonResponse.newInstance().ok(rank); return JsonResponse.newInstance().ok(rank);
} }
@MustLogin
@ApiOperation(value = "查询医院排名规则", notes = "")
@RequestMapping(value = "/queryRankRule", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<OrganizationVo.RankRule>> queryRankRule(@ApiParam @Validated @RequestBody QueryDto params) {
log.info("查询医院排名规则:{}", params);
List<OrganizationVo.RankRule> rankRuleList = organizationService.queryRankRule(params.getUserId());
log.info("查询医院排名规则结果:{}", rankRuleList);
return JsonResponse.newInstance().ok(rankRuleList);
}
} }

6
src/main/java/com/ccsens/carbasics/bean/dto/OcrDto.java

@ -17,11 +17,11 @@ public class OcrDto {
@Data @Data
public static class GeneralBasic{ public static class GeneralBasic{
@NotNull @NotNull
@ApiModelProperty("急救id") @ApiModelProperty("项目id")
private Long firstAidId; private Long projectId;
@NotEmpty @NotEmpty
@ApiModelProperty("图片") @ApiModelProperty("图片")
private List<MultipartFile> fileList; private List<String> fileList;
} }
} }

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

@ -90,6 +90,22 @@ public class OrganizationVo {
@ApiModelProperty("医院排名") @ApiModelProperty("医院排名")
private List<RankItem> list; private List<RankItem> 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("医院排名项") @ApiModel("医院排名项")
@Data @Data

2
src/main/java/com/ccsens/carbasics/service/IOcrService.java

@ -33,5 +33,5 @@ public interface IOcrService {
* @return 文字列表 * @return 文字列表
* @throws IOException 异常 * @throws IOException 异常
*/ */
Map<String, Set<QuestionOcrVo.CodeAndAnswer>> discernWords(List<MultipartFile> param, Long userId, Long firstAidId) throws IOException, ParseException; Map<String, Set<QuestionOcrVo.CodeAndAnswer>> discernWords(OcrDto.GeneralBasic param, Long userId) throws IOException, ParseException;
} }

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

@ -38,4 +38,11 @@ public interface IOrganizationService {
* @return 返回医院排名 * @return 返回医院排名
*/ */
OrganizationVo.HospitalRank hospitalStatistical(OrganizationDto.RankNew param, Long userId); OrganizationVo.HospitalRank hospitalStatistical(OrganizationDto.RankNew param, Long userId);
/**
* 查询医院排名规则
* @param userId 用户id
* @return 规则列表
*/
List<OrganizationVo.RankRule> queryRankRule(Long userId);
} }

48
src/main/java/com/ccsens/carbasics/service/OcrService.java

@ -197,9 +197,9 @@ public class OcrService implements IOcrService {
@Override @Override
public Map<String,Set<QuestionOcrVo.CodeAndAnswer>> discernWords(List<MultipartFile> param, Long userId,Long projectId) throws IOException, ParseException { public Map<String,Set<QuestionOcrVo.CodeAndAnswer>> discernWords(OcrDto.GeneralBasic param, Long userId) throws IOException, ParseException {
// FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(firstAidId); // FirstAid firstAidInfo = firstAidDao.selectByPrimaryKey(firstAidId);
FirstAid firstAidInfo = firstAidDao.queryByProjectId(projectId); FirstAid firstAidInfo = firstAidDao.queryByProjectId(param.getProjectId());
if (ObjectUtil.isNull(firstAidInfo)) { if (ObjectUtil.isNull(firstAidInfo)) {
throw new BaseException("急救信息错误"); throw new BaseException("急救信息错误");
} }
@ -226,19 +226,19 @@ public class OcrService implements IOcrService {
List<String> strList = new ArrayList<>(); List<String> strList = new ArrayList<>();
Long startOcr = System.currentTimeMillis(); Long startOcr = System.currentTimeMillis();
log.info("接收到的文件{}",param); log.info("接收到的文件{}",param);
if (CollectionUtil.isNotEmpty(param)) { // if (CollectionUtil.isNotEmpty(param)) {
if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) { // if (param.get(param.size()-1).getOriginalFilename().equals(param.get(param.size()-2).getOriginalFilename())) {
log.info("已删除相同文件"); // log.info("已删除相同文件");
param.remove(param.size()-1); // param.remove(param.size()-1);
} // }
} // }
for (MultipartFile file : param) { for (String file : param.getFileList()) {
ByteArrayOutputStream out = new ByteArrayOutputStream(); // ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1); // ImageUtil.scale(ImageIO.read(file.getInputStream()), out, 1);
String img = Base64.encode(out.toByteArray()); // String img = Base64.encode(out.toByteArray());
BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); 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); BaiDuVo.GeneralBasic words = BaiDuUtil.accurateBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic);
log.info("文字识别:{}", words); log.info("文字识别:{}", words);
for (BaiDuVo.GeneralWord generalWord : words.getWordsResult()) { for (BaiDuVo.GeneralWord generalWord : words.getWordsResult()) {
@ -246,17 +246,17 @@ public class OcrService implements IOcrService {
} }
//保存图片 //保存图片
String extName = FileUtil.extName(file.getOriginalFilename()); // String extName = FileUtil.extName(file.getOriginalFilename());
String dir = PropUtil.path + File.separator + Constant.OrcImg.FILE_DIR; // String dir = PropUtil.path + File.separator + Constant.OrcImg.FILE_DIR;
String extraPath = DateUtil.format(new Date(), "yyyyMMdd"); // String extraPath = DateUtil.format(new Date(), "yyyyMMdd");
String path = extraPath + File.separator+firstAidInfo.getId()+firstAidInfo.getName()+File.separator+ IdUtil.simpleUUID() + "." + extName; // String path = extraPath + File.separator+firstAidInfo.getId()+firstAidInfo.getName()+File.separator+ IdUtil.simpleUUID() + "." + extName;
//转成file // //转成file
File saveFile = new File(dir + extraPath); // File saveFile = new File(dir + extraPath);
if (!saveFile.exists()) { // if (!saveFile.exists()) {
saveFile.mkdirs(); // saveFile.mkdirs();
} // }
String fullPath = dir + File.separator + path; // String fullPath = dir + File.separator + path;
FileUtil.writeFromStream(file.getInputStream(), fullPath); // FileUtil.writeFromStream(file.getInputStream(), fullPath);
} }
Long ocrEnd = System.currentTimeMillis(); Long ocrEnd = System.currentTimeMillis();

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

@ -177,4 +177,10 @@ public class OrganizationService implements IOrganizationService {
rank.setList(items); rank.setList(items);
return rank; return rank;
} }
@Override
public List<OrganizationVo.RankRule> queryRankRule(Long userId) {
return new ArrayList<>(Constant.RANK_RULE);
}
} }

14
src/main/java/com/ccsens/carbasics/util/Constant.java

@ -1,5 +1,6 @@
package com.ccsens.carbasics.util; package com.ccsens.carbasics.util;
import com.ccsens.carbasics.bean.vo.OrganizationVo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -649,4 +650,17 @@ public class Constant {
TIME_CODE.add("JMRSSJ"); TIME_CODE.add("JMRSSJ");
} }
public static final List<OrganizationVo.RankRule> 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总例数"));
}
} }

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

@ -428,21 +428,47 @@
LEFT JOIN LEFT JOIN
( (
<choose> <choose>
<when test="type == 0"> <when test="type == 1">
<include refid="nnt"></include> <include refid="nnt"></include>
</when> </when>
<when test="type == 1"> <when test="type == 2">
<include refid="dnt45"></include> <include refid="dnt45"></include>
</when> </when>
<when test="type == 2"> <when test="type == 3">
<include refid="dnt60"></include> <include refid="dnt60"></include>
</when> </when>
<when test="type == 4">
<include refid="sich"></include>
</when>
<when test="type == 5">
<include refid="qjxgnzll"></include>
</when>
<when test="type == 6">
<include refid="fqjxgnzll"></include>
</when>
<when test="type == 7">
<include refid="fqjDPT90"></include>
</when>
<when test="type == 8">
<include refid="fqjDPT60"></include>
</when>
<when test="type == 9">
<include refid="fqjPRT60"></include>
</when>
<when test="type == 10">
<include refid="fqjPRT30"></include>
</when>
</choose> </choose>
)t on h.detail_id = t.detail_id )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 LEFT JOIN t_qcp_questionnaire_detail d on h.detail_id = d.id and rec_status = 0
WHERE WHERE
d.submit_status = 1 d.submit_status = 1
ORDER BY `value` DESC <if test="type == 4">
ORDER BY `value`
</if>
<if test="type != 4">
ORDER BY `value` DESC
</if>
</select> </select>
<sql id="nnt"> <sql id="nnt">
SELECT SELECT
@ -516,4 +542,277 @@
and a2.detail_id = a3.detail_id and a2.detail_id = a3.detail_id
and a1.detail_id = a3.detail_id and a1.detail_id = a3.detail_id
</sql> </sql>
<sql id="sich">
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
</sql>
<sql id="qjxgnzll">
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
</sql>
<sql id="fqjxgnzll">
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
</sql>
<sql id="fqjDPT90">
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
</sql>
<sql id="fqjDPT60">
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
</sql>
<sql id="fqjPRT60">
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
</sql>
<sql id="fqjPRT30">
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
</sql>
</mapper> </mapper>

Loading…
Cancel
Save