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
@ApiOperation(value = "图片文字识别",notes = "")
@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);
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);
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);
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
public static class GeneralBasic{
@NotNull
@ApiModelProperty("急救id")
private Long firstAidId;
@ApiModelProperty("项目id")
private Long projectId;
@NotEmpty
@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("医院排名")
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("医院排名项")
@Data

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

@ -33,5 +33,5 @@ public interface IOcrService {
* @return 文字列表
* @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 返回医院排名
*/
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
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.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<String> 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();

6
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<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;
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<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
(
<choose>
<when test="type == 0">
<when test="type == 1">
<include refid="nnt"></include>
</when>
<when test="type == 1">
<when test="type == 2">
<include refid="dnt45"></include>
</when>
<when test="type == 2">
<when test="type == 3">
<include refid="dnt60"></include>
</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>
)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
<if test="type == 4">
ORDER BY `value`
</if>
<if test="type != 4">
ORDER BY `value` DESC
</if>
</select>
<sql id="nnt">
SELECT
@ -516,4 +542,277 @@
and a2.detail_id = a3.detail_id
and a1.detail_id = a3.detail_id
</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>

Loading…
Cancel
Save