19 changed files with 1853 additions and 2 deletions
@ -0,0 +1,52 @@ |
|||
package com.ccsens.tcm.api; |
|||
|
|||
import com.ccsens.cloudutil.annotation.MustLogin; |
|||
import com.ccsens.tcm.bean.dto.QuestionOcrDto; |
|||
import com.ccsens.tcm.bean.vo.InpatientVo; |
|||
import com.ccsens.tcm.bean.vo.QuestionOcrVo; |
|||
import com.ccsens.tcm.service.IOcrService; |
|||
import com.ccsens.tcm.uitl.Constant; |
|||
import com.ccsens.util.JsonResponse; |
|||
import com.ccsens.util.baidu.BaiDuDto; |
|||
import com.ccsens.util.baidu.BaiDuUtil; |
|||
import com.ccsens.util.baidu.BaiDuVo; |
|||
import com.ccsens.util.bean.dto.QueryDto; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiImplicitParams; |
|||
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/3/31 18:03 |
|||
*/ |
|||
@Slf4j |
|||
@Api(tags = "图片识别文字") |
|||
@RestController |
|||
@RequestMapping("/ocr") |
|||
public class OcrController { |
|||
|
|||
@Resource |
|||
private IOcrService ocrService; |
|||
|
|||
@MustLogin |
|||
@ApiOperation(value = "图片文字识别",notes = "") |
|||
@RequestMapping(value="/general/basic",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"}) |
|||
public JsonResponse<List<QuestionOcrVo.GeneralBasic>> queryInpatient(@ApiParam @Validated @RequestBody QueryDto<QuestionOcrDto.GeneralBasic> params) throws Exception { |
|||
//
|
|||
log.info("图片文字识别请求:{}", params); |
|||
List<QuestionOcrVo.GeneralBasic> words = ocrService.identifyWords(params.getParam(), params.getUserId()); |
|||
log.info("图片文字识别结束:{}", words); |
|||
return JsonResponse.newInstance().ok(words); |
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
package com.ccsens.tcm.bean.dto; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
|
|||
/** |
|||
* @description: 通用文字识别 |
|||
* @author: whj |
|||
* @time: 2021/4/1 10:31 |
|||
*/ |
|||
public class QuestionOcrDto { |
|||
|
|||
@ApiModel("报告单图片文字通用识别-请求") |
|||
@Data |
|||
public static class GeneralBasic{ |
|||
@ApiModelProperty("医院ID") |
|||
private Long hospitalId; |
|||
@ApiModelProperty("报告单类型") |
|||
@NotBlank |
|||
private String code; |
|||
@ApiModelProperty("图片路径") |
|||
private String url; |
|||
} |
|||
} |
@ -0,0 +1,139 @@ |
|||
package com.ccsens.tcm.bean.po; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Date; |
|||
|
|||
public class QuestionOcr implements Serializable { |
|||
private Long id; |
|||
|
|||
private String code; |
|||
|
|||
private Integer sort; |
|||
|
|||
private Long hospital; |
|||
|
|||
private String start; |
|||
|
|||
private String end; |
|||
|
|||
private String remark; |
|||
|
|||
private Long operator; |
|||
|
|||
private Date createdAt; |
|||
|
|||
private Date updatedAt; |
|||
|
|||
private Byte recStatus; |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
public Long getId() { |
|||
return id; |
|||
} |
|||
|
|||
public void setId(Long id) { |
|||
this.id = id; |
|||
} |
|||
|
|||
public String getCode() { |
|||
return code; |
|||
} |
|||
|
|||
public void setCode(String code) { |
|||
this.code = code == null ? null : code.trim(); |
|||
} |
|||
|
|||
public Integer getSort() { |
|||
return sort; |
|||
} |
|||
|
|||
public void setSort(Integer sort) { |
|||
this.sort = sort; |
|||
} |
|||
|
|||
public Long getHospital() { |
|||
return hospital; |
|||
} |
|||
|
|||
public void setHospital(Long hospital) { |
|||
this.hospital = hospital; |
|||
} |
|||
|
|||
public String getStart() { |
|||
return start; |
|||
} |
|||
|
|||
public void setStart(String start) { |
|||
this.start = start == null ? null : start.trim(); |
|||
} |
|||
|
|||
public String getEnd() { |
|||
return end; |
|||
} |
|||
|
|||
public void setEnd(String end) { |
|||
this.end = end == null ? null : end.trim(); |
|||
} |
|||
|
|||
public String getRemark() { |
|||
return remark; |
|||
} |
|||
|
|||
public void setRemark(String remark) { |
|||
this.remark = remark == null ? null : remark.trim(); |
|||
} |
|||
|
|||
public Long getOperator() { |
|||
return operator; |
|||
} |
|||
|
|||
public void setOperator(Long operator) { |
|||
this.operator = operator; |
|||
} |
|||
|
|||
public Date getCreatedAt() { |
|||
return createdAt; |
|||
} |
|||
|
|||
public void setCreatedAt(Date createdAt) { |
|||
this.createdAt = createdAt; |
|||
} |
|||
|
|||
public Date getUpdatedAt() { |
|||
return updatedAt; |
|||
} |
|||
|
|||
public void setUpdatedAt(Date updatedAt) { |
|||
this.updatedAt = updatedAt; |
|||
} |
|||
|
|||
public Byte getRecStatus() { |
|||
return recStatus; |
|||
} |
|||
|
|||
public void setRecStatus(Byte recStatus) { |
|||
this.recStatus = recStatus; |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
StringBuilder sb = new StringBuilder(); |
|||
sb.append(getClass().getSimpleName()); |
|||
sb.append(" ["); |
|||
sb.append("Hash = ").append(hashCode()); |
|||
sb.append(", id=").append(id); |
|||
sb.append(", code=").append(code); |
|||
sb.append(", sort=").append(sort); |
|||
sb.append(", hospital=").append(hospital); |
|||
sb.append(", start=").append(start); |
|||
sb.append(", end=").append(end); |
|||
sb.append(", remark=").append(remark); |
|||
sb.append(", operator=").append(operator); |
|||
sb.append(", createdAt=").append(createdAt); |
|||
sb.append(", updatedAt=").append(updatedAt); |
|||
sb.append(", recStatus=").append(recStatus); |
|||
sb.append("]"); |
|||
return sb.toString(); |
|||
} |
|||
} |
@ -0,0 +1,901 @@ |
|||
package com.ccsens.tcm.bean.po; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
public class QuestionOcrExample { |
|||
protected String orderByClause; |
|||
|
|||
protected boolean distinct; |
|||
|
|||
protected List<Criteria> oredCriteria; |
|||
|
|||
public QuestionOcrExample() { |
|||
oredCriteria = new ArrayList<Criteria>(); |
|||
} |
|||
|
|||
public void setOrderByClause(String orderByClause) { |
|||
this.orderByClause = orderByClause; |
|||
} |
|||
|
|||
public String getOrderByClause() { |
|||
return orderByClause; |
|||
} |
|||
|
|||
public void setDistinct(boolean distinct) { |
|||
this.distinct = distinct; |
|||
} |
|||
|
|||
public boolean isDistinct() { |
|||
return distinct; |
|||
} |
|||
|
|||
public List<Criteria> getOredCriteria() { |
|||
return oredCriteria; |
|||
} |
|||
|
|||
public void or(Criteria criteria) { |
|||
oredCriteria.add(criteria); |
|||
} |
|||
|
|||
public Criteria or() { |
|||
Criteria criteria = createCriteriaInternal(); |
|||
oredCriteria.add(criteria); |
|||
return criteria; |
|||
} |
|||
|
|||
public Criteria createCriteria() { |
|||
Criteria criteria = createCriteriaInternal(); |
|||
if (oredCriteria.size() == 0) { |
|||
oredCriteria.add(criteria); |
|||
} |
|||
return criteria; |
|||
} |
|||
|
|||
protected Criteria createCriteriaInternal() { |
|||
Criteria criteria = new Criteria(); |
|||
return criteria; |
|||
} |
|||
|
|||
public void clear() { |
|||
oredCriteria.clear(); |
|||
orderByClause = null; |
|||
distinct = false; |
|||
} |
|||
|
|||
protected abstract static class GeneratedCriteria { |
|||
protected List<Criterion> criteria; |
|||
|
|||
protected GeneratedCriteria() { |
|||
super(); |
|||
criteria = new ArrayList<Criterion>(); |
|||
} |
|||
|
|||
public boolean isValid() { |
|||
return criteria.size() > 0; |
|||
} |
|||
|
|||
public List<Criterion> getAllCriteria() { |
|||
return criteria; |
|||
} |
|||
|
|||
public List<Criterion> getCriteria() { |
|||
return criteria; |
|||
} |
|||
|
|||
protected void addCriterion(String condition) { |
|||
if (condition == null) { |
|||
throw new RuntimeException("Value for condition cannot be null"); |
|||
} |
|||
criteria.add(new Criterion(condition)); |
|||
} |
|||
|
|||
protected void addCriterion(String condition, Object value, String property) { |
|||
if (value == null) { |
|||
throw new RuntimeException("Value for " + property + " cannot be null"); |
|||
} |
|||
criteria.add(new Criterion(condition, value)); |
|||
} |
|||
|
|||
protected void addCriterion(String condition, Object value1, Object value2, String property) { |
|||
if (value1 == null || value2 == null) { |
|||
throw new RuntimeException("Between values for " + property + " cannot be null"); |
|||
} |
|||
criteria.add(new Criterion(condition, value1, value2)); |
|||
} |
|||
|
|||
public Criteria andIdIsNull() { |
|||
addCriterion("id is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdIsNotNull() { |
|||
addCriterion("id is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdEqualTo(Long value) { |
|||
addCriterion("id =", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdNotEqualTo(Long value) { |
|||
addCriterion("id <>", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdGreaterThan(Long value) { |
|||
addCriterion("id >", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdGreaterThanOrEqualTo(Long value) { |
|||
addCriterion("id >=", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdLessThan(Long value) { |
|||
addCriterion("id <", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdLessThanOrEqualTo(Long value) { |
|||
addCriterion("id <=", value, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdIn(List<Long> values) { |
|||
addCriterion("id in", values, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdNotIn(List<Long> values) { |
|||
addCriterion("id not in", values, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdBetween(Long value1, Long value2) { |
|||
addCriterion("id between", value1, value2, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andIdNotBetween(Long value1, Long value2) { |
|||
addCriterion("id not between", value1, value2, "id"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeIsNull() { |
|||
addCriterion("code is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeIsNotNull() { |
|||
addCriterion("code is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeEqualTo(String value) { |
|||
addCriterion("code =", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeNotEqualTo(String value) { |
|||
addCriterion("code <>", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeGreaterThan(String value) { |
|||
addCriterion("code >", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeGreaterThanOrEqualTo(String value) { |
|||
addCriterion("code >=", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeLessThan(String value) { |
|||
addCriterion("code <", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeLessThanOrEqualTo(String value) { |
|||
addCriterion("code <=", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeLike(String value) { |
|||
addCriterion("code like", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeNotLike(String value) { |
|||
addCriterion("code not like", value, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeIn(List<String> values) { |
|||
addCriterion("code in", values, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeNotIn(List<String> values) { |
|||
addCriterion("code not in", values, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeBetween(String value1, String value2) { |
|||
addCriterion("code between", value1, value2, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCodeNotBetween(String value1, String value2) { |
|||
addCriterion("code not between", value1, value2, "code"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortIsNull() { |
|||
addCriterion("sort is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortIsNotNull() { |
|||
addCriterion("sort is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortEqualTo(Integer value) { |
|||
addCriterion("sort =", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortNotEqualTo(Integer value) { |
|||
addCriterion("sort <>", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortGreaterThan(Integer value) { |
|||
addCriterion("sort >", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortGreaterThanOrEqualTo(Integer value) { |
|||
addCriterion("sort >=", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortLessThan(Integer value) { |
|||
addCriterion("sort <", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortLessThanOrEqualTo(Integer value) { |
|||
addCriterion("sort <=", value, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortIn(List<Integer> values) { |
|||
addCriterion("sort in", values, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortNotIn(List<Integer> values) { |
|||
addCriterion("sort not in", values, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortBetween(Integer value1, Integer value2) { |
|||
addCriterion("sort between", value1, value2, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andSortNotBetween(Integer value1, Integer value2) { |
|||
addCriterion("sort not between", value1, value2, "sort"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalIsNull() { |
|||
addCriterion("hospital is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalIsNotNull() { |
|||
addCriterion("hospital is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalEqualTo(Long value) { |
|||
addCriterion("hospital =", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalNotEqualTo(Long value) { |
|||
addCriterion("hospital <>", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalGreaterThan(Long value) { |
|||
addCriterion("hospital >", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalGreaterThanOrEqualTo(Long value) { |
|||
addCriterion("hospital >=", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalLessThan(Long value) { |
|||
addCriterion("hospital <", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalLessThanOrEqualTo(Long value) { |
|||
addCriterion("hospital <=", value, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalIn(List<Long> values) { |
|||
addCriterion("hospital in", values, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalNotIn(List<Long> values) { |
|||
addCriterion("hospital not in", values, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalBetween(Long value1, Long value2) { |
|||
addCriterion("hospital between", value1, value2, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andHospitalNotBetween(Long value1, Long value2) { |
|||
addCriterion("hospital not between", value1, value2, "hospital"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartIsNull() { |
|||
addCriterion("start is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartIsNotNull() { |
|||
addCriterion("start is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartEqualTo(String value) { |
|||
addCriterion("start =", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartNotEqualTo(String value) { |
|||
addCriterion("start <>", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartGreaterThan(String value) { |
|||
addCriterion("start >", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartGreaterThanOrEqualTo(String value) { |
|||
addCriterion("start >=", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartLessThan(String value) { |
|||
addCriterion("start <", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartLessThanOrEqualTo(String value) { |
|||
addCriterion("start <=", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartLike(String value) { |
|||
addCriterion("start like", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartNotLike(String value) { |
|||
addCriterion("start not like", value, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartIn(List<String> values) { |
|||
addCriterion("start in", values, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartNotIn(List<String> values) { |
|||
addCriterion("start not in", values, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartBetween(String value1, String value2) { |
|||
addCriterion("start between", value1, value2, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andStartNotBetween(String value1, String value2) { |
|||
addCriterion("start not between", value1, value2, "start"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndIsNull() { |
|||
addCriterion("end is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndIsNotNull() { |
|||
addCriterion("end is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndEqualTo(String value) { |
|||
addCriterion("end =", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndNotEqualTo(String value) { |
|||
addCriterion("end <>", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndGreaterThan(String value) { |
|||
addCriterion("end >", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndGreaterThanOrEqualTo(String value) { |
|||
addCriterion("end >=", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndLessThan(String value) { |
|||
addCriterion("end <", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndLessThanOrEqualTo(String value) { |
|||
addCriterion("end <=", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndLike(String value) { |
|||
addCriterion("end like", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndNotLike(String value) { |
|||
addCriterion("end not like", value, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndIn(List<String> values) { |
|||
addCriterion("end in", values, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndNotIn(List<String> values) { |
|||
addCriterion("end not in", values, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndBetween(String value1, String value2) { |
|||
addCriterion("end between", value1, value2, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andEndNotBetween(String value1, String value2) { |
|||
addCriterion("end not between", value1, value2, "end"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkIsNull() { |
|||
addCriterion("remark is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkIsNotNull() { |
|||
addCriterion("remark is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkEqualTo(String value) { |
|||
addCriterion("remark =", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkNotEqualTo(String value) { |
|||
addCriterion("remark <>", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkGreaterThan(String value) { |
|||
addCriterion("remark >", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkGreaterThanOrEqualTo(String value) { |
|||
addCriterion("remark >=", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkLessThan(String value) { |
|||
addCriterion("remark <", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkLessThanOrEqualTo(String value) { |
|||
addCriterion("remark <=", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkLike(String value) { |
|||
addCriterion("remark like", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkNotLike(String value) { |
|||
addCriterion("remark not like", value, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkIn(List<String> values) { |
|||
addCriterion("remark in", values, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkNotIn(List<String> values) { |
|||
addCriterion("remark not in", values, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkBetween(String value1, String value2) { |
|||
addCriterion("remark between", value1, value2, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRemarkNotBetween(String value1, String value2) { |
|||
addCriterion("remark not between", value1, value2, "remark"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorIsNull() { |
|||
addCriterion("operator is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorIsNotNull() { |
|||
addCriterion("operator is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorEqualTo(Long value) { |
|||
addCriterion("operator =", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorNotEqualTo(Long value) { |
|||
addCriterion("operator <>", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorGreaterThan(Long value) { |
|||
addCriterion("operator >", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorGreaterThanOrEqualTo(Long value) { |
|||
addCriterion("operator >=", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorLessThan(Long value) { |
|||
addCriterion("operator <", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorLessThanOrEqualTo(Long value) { |
|||
addCriterion("operator <=", value, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorIn(List<Long> values) { |
|||
addCriterion("operator in", values, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorNotIn(List<Long> values) { |
|||
addCriterion("operator not in", values, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorBetween(Long value1, Long value2) { |
|||
addCriterion("operator between", value1, value2, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andOperatorNotBetween(Long value1, Long value2) { |
|||
addCriterion("operator not between", value1, value2, "operator"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtIsNull() { |
|||
addCriterion("created_at is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtIsNotNull() { |
|||
addCriterion("created_at is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtEqualTo(Date value) { |
|||
addCriterion("created_at =", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtNotEqualTo(Date value) { |
|||
addCriterion("created_at <>", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtGreaterThan(Date value) { |
|||
addCriterion("created_at >", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) { |
|||
addCriterion("created_at >=", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtLessThan(Date value) { |
|||
addCriterion("created_at <", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtLessThanOrEqualTo(Date value) { |
|||
addCriterion("created_at <=", value, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtIn(List<Date> values) { |
|||
addCriterion("created_at in", values, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtNotIn(List<Date> values) { |
|||
addCriterion("created_at not in", values, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtBetween(Date value1, Date value2) { |
|||
addCriterion("created_at between", value1, value2, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andCreatedAtNotBetween(Date value1, Date value2) { |
|||
addCriterion("created_at not between", value1, value2, "createdAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtIsNull() { |
|||
addCriterion("updated_at is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtIsNotNull() { |
|||
addCriterion("updated_at is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtEqualTo(Date value) { |
|||
addCriterion("updated_at =", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtNotEqualTo(Date value) { |
|||
addCriterion("updated_at <>", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtGreaterThan(Date value) { |
|||
addCriterion("updated_at >", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) { |
|||
addCriterion("updated_at >=", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtLessThan(Date value) { |
|||
addCriterion("updated_at <", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtLessThanOrEqualTo(Date value) { |
|||
addCriterion("updated_at <=", value, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtIn(List<Date> values) { |
|||
addCriterion("updated_at in", values, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtNotIn(List<Date> values) { |
|||
addCriterion("updated_at not in", values, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtBetween(Date value1, Date value2) { |
|||
addCriterion("updated_at between", value1, value2, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andUpdatedAtNotBetween(Date value1, Date value2) { |
|||
addCriterion("updated_at not between", value1, value2, "updatedAt"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusIsNull() { |
|||
addCriterion("rec_status is null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusIsNotNull() { |
|||
addCriterion("rec_status is not null"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusEqualTo(Byte value) { |
|||
addCriterion("rec_status =", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusNotEqualTo(Byte value) { |
|||
addCriterion("rec_status <>", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusGreaterThan(Byte value) { |
|||
addCriterion("rec_status >", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) { |
|||
addCriterion("rec_status >=", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusLessThan(Byte value) { |
|||
addCriterion("rec_status <", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusLessThanOrEqualTo(Byte value) { |
|||
addCriterion("rec_status <=", value, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusIn(List<Byte> values) { |
|||
addCriterion("rec_status in", values, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusNotIn(List<Byte> values) { |
|||
addCriterion("rec_status not in", values, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusBetween(Byte value1, Byte value2) { |
|||
addCriterion("rec_status between", value1, value2, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
|
|||
public Criteria andRecStatusNotBetween(Byte value1, Byte value2) { |
|||
addCriterion("rec_status not between", value1, value2, "recStatus"); |
|||
return (Criteria) this; |
|||
} |
|||
} |
|||
|
|||
public static class Criteria extends GeneratedCriteria { |
|||
|
|||
protected Criteria() { |
|||
super(); |
|||
} |
|||
} |
|||
|
|||
public static class Criterion { |
|||
private String condition; |
|||
|
|||
private Object value; |
|||
|
|||
private Object secondValue; |
|||
|
|||
private boolean noValue; |
|||
|
|||
private boolean singleValue; |
|||
|
|||
private boolean betweenValue; |
|||
|
|||
private boolean listValue; |
|||
|
|||
private String typeHandler; |
|||
|
|||
public String getCondition() { |
|||
return condition; |
|||
} |
|||
|
|||
public Object getValue() { |
|||
return value; |
|||
} |
|||
|
|||
public Object getSecondValue() { |
|||
return secondValue; |
|||
} |
|||
|
|||
public boolean isNoValue() { |
|||
return noValue; |
|||
} |
|||
|
|||
public boolean isSingleValue() { |
|||
return singleValue; |
|||
} |
|||
|
|||
public boolean isBetweenValue() { |
|||
return betweenValue; |
|||
} |
|||
|
|||
public boolean isListValue() { |
|||
return listValue; |
|||
} |
|||
|
|||
public String getTypeHandler() { |
|||
return typeHandler; |
|||
} |
|||
|
|||
protected Criterion(String condition) { |
|||
super(); |
|||
this.condition = condition; |
|||
this.typeHandler = null; |
|||
this.noValue = true; |
|||
} |
|||
|
|||
protected Criterion(String condition, Object value, String typeHandler) { |
|||
super(); |
|||
this.condition = condition; |
|||
this.value = value; |
|||
this.typeHandler = typeHandler; |
|||
if (value instanceof List<?>) { |
|||
this.listValue = true; |
|||
} else { |
|||
this.singleValue = true; |
|||
} |
|||
} |
|||
|
|||
protected Criterion(String condition, Object value) { |
|||
this(condition, value, null); |
|||
} |
|||
|
|||
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { |
|||
super(); |
|||
this.condition = condition; |
|||
this.value = value; |
|||
this.secondValue = secondValue; |
|||
this.typeHandler = typeHandler; |
|||
this.betweenValue = true; |
|||
} |
|||
|
|||
protected Criterion(String condition, Object value, Object secondValue) { |
|||
this(condition, value, secondValue, null); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,45 @@ |
|||
package com.ccsens.tcm.bean.vo; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
|
|||
/** |
|||
* @description: |
|||
* @author: whj |
|||
* @time: 2021/4/1 10:34 |
|||
*/ |
|||
public class QuestionOcrVo { |
|||
@ApiModel("报告单图片文字通用识别-返回") |
|||
@Data |
|||
public static class GeneralBasic{ |
|||
@ApiModelProperty("报告单类型") |
|||
private String code; |
|||
@ApiModelProperty("排序") |
|||
private Integer sort; |
|||
@ApiModelProperty("试题ID") |
|||
private Long questionId; |
|||
@ApiModelProperty("答案") |
|||
private String content; |
|||
} |
|||
|
|||
@ApiModel("orc规则") |
|||
@Data |
|||
public static class OcrRule{ |
|||
@ApiModelProperty("规则ID") |
|||
private Long id; |
|||
@ApiModelProperty("code") |
|||
private String code; |
|||
@ApiModelProperty("排序") |
|||
private Integer sort; |
|||
@ApiModelProperty("医院ID") |
|||
private Long hospital; |
|||
@ApiModelProperty("试题ID") |
|||
private Long questionId; |
|||
@ApiModelProperty("开始标识") |
|||
private String start; |
|||
@ApiModelProperty("结束标识") |
|||
private String end; |
|||
} |
|||
} |
@ -0,0 +1,20 @@ |
|||
package com.ccsens.tcm.persist.dao; |
|||
|
|||
import com.ccsens.tcm.bean.vo.QuestionOcrVo; |
|||
import com.ccsens.tcm.persist.mapper.QuestionOcrMapper; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author whj |
|||
*/ |
|||
public interface QuestionOcrDao extends QuestionOcrMapper { |
|||
/** |
|||
* 查询识别规则 |
|||
* @param hospitalId 医院ID |
|||
* @param code 类型 |
|||
* @return 规则 |
|||
*/ |
|||
List<QuestionOcrVo.OcrRule> queryRules(@Param("hospitalId") Long hospitalId, @Param("code") String code); |
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.ccsens.tcm.persist.mapper; |
|||
|
|||
import com.ccsens.tcm.bean.po.QuestionOcr; |
|||
import com.ccsens.tcm.bean.po.QuestionOcrExample; |
|||
import java.util.List; |
|||
import org.apache.ibatis.annotations.Param; |
|||
|
|||
public interface QuestionOcrMapper { |
|||
long countByExample(QuestionOcrExample example); |
|||
|
|||
int deleteByExample(QuestionOcrExample example); |
|||
|
|||
int deleteByPrimaryKey(Long id); |
|||
|
|||
int insert(QuestionOcr record); |
|||
|
|||
int insertSelective(QuestionOcr record); |
|||
|
|||
List<QuestionOcr> selectByExample(QuestionOcrExample example); |
|||
|
|||
QuestionOcr selectByPrimaryKey(Long id); |
|||
|
|||
int updateByExampleSelective(@Param("record") QuestionOcr record, @Param("example") QuestionOcrExample example); |
|||
|
|||
int updateByExample(@Param("record") QuestionOcr record, @Param("example") QuestionOcrExample example); |
|||
|
|||
int updateByPrimaryKeySelective(QuestionOcr record); |
|||
|
|||
int updateByPrimaryKey(QuestionOcr record); |
|||
} |
@ -0,0 +1,20 @@ |
|||
package com.ccsens.tcm.service; |
|||
|
|||
|
|||
import com.ccsens.tcm.bean.dto.QuestionOcrDto; |
|||
import com.ccsens.tcm.bean.vo.QuestionOcrVo; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author whj |
|||
*/ |
|||
public interface IOcrService { |
|||
/** |
|||
* 文字识别 |
|||
* @param param 参数 |
|||
* @param userId 用户ID |
|||
* @return words |
|||
*/ |
|||
List<QuestionOcrVo.GeneralBasic> identifyWords(QuestionOcrDto.GeneralBasic param, Long userId); |
|||
} |
@ -0,0 +1,118 @@ |
|||
package com.ccsens.tcm.service; |
|||
|
|||
import cn.hutool.core.collection.CollectionUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.ccsens.tcm.bean.dto.QuestionOcrDto; |
|||
import com.ccsens.tcm.bean.po.QuestionOcr; |
|||
import com.ccsens.tcm.bean.po.QuestionOcrExample; |
|||
import com.ccsens.tcm.bean.vo.QuestionOcrVo; |
|||
import com.ccsens.tcm.persist.dao.QuestionOcrDao; |
|||
import com.ccsens.tcm.uitl.Constant; |
|||
import com.ccsens.util.baidu.BaiDuDto; |
|||
import com.ccsens.util.baidu.BaiDuUtil; |
|||
import com.ccsens.util.baidu.BaiDuVo; |
|||
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; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* @description: 图像识别 |
|||
* @author: whj |
|||
* @time: 2021/4/1 10:14 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
|||
public class OcrService implements IOcrService { |
|||
|
|||
@Resource |
|||
private QuestionOcrDao questionOcrDao; |
|||
|
|||
@Override |
|||
public List<QuestionOcrVo.GeneralBasic> identifyWords(QuestionOcrDto.GeneralBasic generalBasic, Long userId) { |
|||
List<QuestionOcrVo.GeneralBasic> vos = new ArrayList<>(); |
|||
BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); |
|||
basic.setUrl(generalBasic.getUrl()); |
|||
BaiDuVo.GeneralBasic words = BaiDuUtil.generalBasic(Constant.BaiDu.APP_KEY, Constant.BaiDu.SECRET_KEY, basic); |
|||
log.info("文字识别:{}", words); |
|||
if (words == null || words.getWordsResultNum() <= 0) { |
|||
return vos; |
|||
} |
|||
List<QuestionOcrVo.OcrRule> rules = questionOcrDao.queryRules(generalBasic.getHospitalId(), generalBasic.getCode()); |
|||
log.info("规则:{}", rules); |
|||
if (CollectionUtil.isEmpty(rules)) { |
|||
return vos; |
|||
} |
|||
Map<String, Integer> keyMap = new HashMap<>(); |
|||
rules.forEach(rule -> { |
|||
JSONObject start = StrUtil.isEmpty(rule.getStart()) ? null : JSONObject.parseObject(rule.getStart()); |
|||
JSONObject end = StrUtil.isEmpty(rule.getEnd()) ? null : JSONObject.parseObject(rule.getEnd()); |
|||
StringBuilder builder = new StringBuilder(); |
|||
|
|||
if (start == null) { |
|||
// 不知道这种场景
|
|||
} else if (start.containsKey(Constant.BaiDu.NUM)) { |
|||
// 包含读取第几个
|
|||
builder = getContent(words, keyMap, start); |
|||
} else { |
|||
builder = getContent(words, start, end); |
|||
} |
|||
|
|||
QuestionOcrVo.GeneralBasic vo = new QuestionOcrVo.GeneralBasic(); |
|||
vo.setQuestionId(rule.getQuestionId()); |
|||
vo.setCode(rule.getCode()); |
|||
vo.setSort(rule.getSort()); |
|||
vo.setContent(builder == null ? "" : builder.toString()); |
|||
vos.add(vo); |
|||
}); |
|||
|
|||
return vos; |
|||
} |
|||
|
|||
private StringBuilder getContent(BaiDuVo.GeneralBasic words, Map<String, Integer> keyMap, JSONObject start) { |
|||
StringBuilder builder = new StringBuilder(); |
|||
String key = start.getString(Constant.BaiDu.KEY); |
|||
int index = start.getIntValue(Constant.BaiDu.NUM); |
|||
if (keyMap.containsKey(key) ) { |
|||
if (keyMap.get(key) >= 0) { |
|||
builder.append( words.getWordsResult().get(keyMap.get(key) + index).getWords()); |
|||
} |
|||
} else { |
|||
for (int i = 0; i < words.getWordsResultNum(); i++) { |
|||
BaiDuVo.GeneralWord word = words.getWordsResult().get(i); |
|||
if (word.getWords().contains(key)) { |
|||
keyMap.put(key, i); |
|||
builder.append(words.getWordsResult().get(i + index).getWords()); |
|||
return builder; |
|||
} |
|||
} |
|||
} |
|||
return builder; |
|||
} |
|||
|
|||
private StringBuilder getContent(BaiDuVo.GeneralBasic words, JSONObject start, JSONObject end) { |
|||
StringBuilder builder = new StringBuilder(); |
|||
for (int i = 0; i < words.getWordsResult().size(); i++) { |
|||
BaiDuVo.GeneralWord word = words.getWordsResult().get(i); |
|||
String wordStr = word.getWords(); |
|||
if (start != null && wordStr.startsWith(start.getString(Constant.BaiDu.KEY))) { |
|||
builder.delete(0, builder.length()); |
|||
builder.append(wordStr); |
|||
} else if (end != null && wordStr.startsWith(end.getString(Constant.BaiDu.KEY))) { |
|||
break; |
|||
} else { |
|||
builder.append(wordStr); |
|||
} |
|||
|
|||
} |
|||
return builder; |
|||
} |
|||
} |
@ -0,0 +1,25 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="com.ccsens.tcm.persist.dao.QuestionOcrDao"> |
|||
|
|||
<select id="queryRules" resultType="com.ccsens.tcm.bean.vo.QuestionOcrVo$OcrRule"> |
|||
SELECT |
|||
q.id AS questionId, |
|||
o.id, |
|||
o.CODE, |
|||
o.sort, |
|||
o.hospital, |
|||
o.START, |
|||
o.END |
|||
FROM |
|||
t_question_ocr o, |
|||
t_question q |
|||
WHERE |
|||
o.CODE = q.CODE |
|||
AND o.sort = q.sort |
|||
AND o.CODE = #{code} |
|||
AND o.hospital = #{hospitalId} |
|||
AND o.rec_status = 0 |
|||
AND q.rec_status = 0 |
|||
</select> |
|||
</mapper> |
@ -0,0 +1,305 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="com.ccsens.tcm.persist.mapper.QuestionOcrMapper"> |
|||
<resultMap id="BaseResultMap" type="com.ccsens.tcm.bean.po.QuestionOcr"> |
|||
<id column="id" jdbcType="BIGINT" property="id" /> |
|||
<result column="code" jdbcType="VARCHAR" property="code" /> |
|||
<result column="sort" jdbcType="INTEGER" property="sort" /> |
|||
<result column="hospital" jdbcType="BIGINT" property="hospital" /> |
|||
<result column="start" jdbcType="VARCHAR" property="start" /> |
|||
<result column="end" jdbcType="VARCHAR" property="end" /> |
|||
<result column="remark" jdbcType="VARCHAR" property="remark" /> |
|||
<result column="operator" jdbcType="BIGINT" property="operator" /> |
|||
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" /> |
|||
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" /> |
|||
<result column="rec_status" jdbcType="TINYINT" property="recStatus" /> |
|||
</resultMap> |
|||
<sql id="Example_Where_Clause"> |
|||
<where> |
|||
<foreach collection="oredCriteria" item="criteria" separator="or"> |
|||
<if test="criteria.valid"> |
|||
<trim prefix="(" prefixOverrides="and" suffix=")"> |
|||
<foreach collection="criteria.criteria" item="criterion"> |
|||
<choose> |
|||
<when test="criterion.noValue"> |
|||
and ${criterion.condition} |
|||
</when> |
|||
<when test="criterion.singleValue"> |
|||
and ${criterion.condition} #{criterion.value} |
|||
</when> |
|||
<when test="criterion.betweenValue"> |
|||
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} |
|||
</when> |
|||
<when test="criterion.listValue"> |
|||
and ${criterion.condition} |
|||
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> |
|||
#{listItem} |
|||
</foreach> |
|||
</when> |
|||
</choose> |
|||
</foreach> |
|||
</trim> |
|||
</if> |
|||
</foreach> |
|||
</where> |
|||
</sql> |
|||
<sql id="Update_By_Example_Where_Clause"> |
|||
<where> |
|||
<foreach collection="example.oredCriteria" item="criteria" separator="or"> |
|||
<if test="criteria.valid"> |
|||
<trim prefix="(" prefixOverrides="and" suffix=")"> |
|||
<foreach collection="criteria.criteria" item="criterion"> |
|||
<choose> |
|||
<when test="criterion.noValue"> |
|||
and ${criterion.condition} |
|||
</when> |
|||
<when test="criterion.singleValue"> |
|||
and ${criterion.condition} #{criterion.value} |
|||
</when> |
|||
<when test="criterion.betweenValue"> |
|||
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} |
|||
</when> |
|||
<when test="criterion.listValue"> |
|||
and ${criterion.condition} |
|||
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=","> |
|||
#{listItem} |
|||
</foreach> |
|||
</when> |
|||
</choose> |
|||
</foreach> |
|||
</trim> |
|||
</if> |
|||
</foreach> |
|||
</where> |
|||
</sql> |
|||
<sql id="Base_Column_List"> |
|||
id, code, sort, hospital, start, end, remark, operator, created_at, updated_at, rec_status |
|||
</sql> |
|||
<select id="selectByExample" parameterType="com.ccsens.tcm.bean.po.QuestionOcrExample" resultMap="BaseResultMap"> |
|||
select |
|||
<if test="distinct"> |
|||
distinct |
|||
</if> |
|||
<include refid="Base_Column_List" /> |
|||
from t_question_ocr |
|||
<if test="_parameter != null"> |
|||
<include refid="Example_Where_Clause" /> |
|||
</if> |
|||
<if test="orderByClause != null"> |
|||
order by ${orderByClause} |
|||
</if> |
|||
</select> |
|||
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> |
|||
select |
|||
<include refid="Base_Column_List" /> |
|||
from t_question_ocr |
|||
where id = #{id,jdbcType=BIGINT} |
|||
</select> |
|||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> |
|||
delete from t_question_ocr |
|||
where id = #{id,jdbcType=BIGINT} |
|||
</delete> |
|||
<delete id="deleteByExample" parameterType="com.ccsens.tcm.bean.po.QuestionOcrExample"> |
|||
delete from t_question_ocr |
|||
<if test="_parameter != null"> |
|||
<include refid="Example_Where_Clause" /> |
|||
</if> |
|||
</delete> |
|||
<insert id="insert" parameterType="com.ccsens.tcm.bean.po.QuestionOcr"> |
|||
insert into t_question_ocr (id, code, sort, |
|||
hospital, start, end, |
|||
remark, operator, created_at, |
|||
updated_at, rec_status) |
|||
values (#{id,jdbcType=BIGINT}, #{code,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, |
|||
#{hospital,jdbcType=BIGINT}, #{start,jdbcType=VARCHAR}, #{end,jdbcType=VARCHAR}, |
|||
#{remark,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP}, |
|||
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}) |
|||
</insert> |
|||
<insert id="insertSelective" parameterType="com.ccsens.tcm.bean.po.QuestionOcr"> |
|||
insert into t_question_ocr |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
<if test="id != null"> |
|||
id, |
|||
</if> |
|||
<if test="code != null"> |
|||
code, |
|||
</if> |
|||
<if test="sort != null"> |
|||
sort, |
|||
</if> |
|||
<if test="hospital != null"> |
|||
hospital, |
|||
</if> |
|||
<if test="start != null"> |
|||
start, |
|||
</if> |
|||
<if test="end != null"> |
|||
end, |
|||
</if> |
|||
<if test="remark != null"> |
|||
remark, |
|||
</if> |
|||
<if test="operator != null"> |
|||
operator, |
|||
</if> |
|||
<if test="createdAt != null"> |
|||
created_at, |
|||
</if> |
|||
<if test="updatedAt != null"> |
|||
updated_at, |
|||
</if> |
|||
<if test="recStatus != null"> |
|||
rec_status, |
|||
</if> |
|||
</trim> |
|||
<trim prefix="values (" suffix=")" suffixOverrides=","> |
|||
<if test="id != null"> |
|||
#{id,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="code != null"> |
|||
#{code,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="sort != null"> |
|||
#{sort,jdbcType=INTEGER}, |
|||
</if> |
|||
<if test="hospital != null"> |
|||
#{hospital,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="start != null"> |
|||
#{start,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="end != null"> |
|||
#{end,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="remark != null"> |
|||
#{remark,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="operator != null"> |
|||
#{operator,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="createdAt != null"> |
|||
#{createdAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="updatedAt != null"> |
|||
#{updatedAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="recStatus != null"> |
|||
#{recStatus,jdbcType=TINYINT}, |
|||
</if> |
|||
</trim> |
|||
</insert> |
|||
<select id="countByExample" parameterType="com.ccsens.tcm.bean.po.QuestionOcrExample" resultType="java.lang.Long"> |
|||
select count(*) from t_question_ocr |
|||
<if test="_parameter != null"> |
|||
<include refid="Example_Where_Clause" /> |
|||
</if> |
|||
</select> |
|||
<update id="updateByExampleSelective" parameterType="map"> |
|||
update t_question_ocr |
|||
<set> |
|||
<if test="record.id != null"> |
|||
id = #{record.id,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="record.code != null"> |
|||
code = #{record.code,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="record.sort != null"> |
|||
sort = #{record.sort,jdbcType=INTEGER}, |
|||
</if> |
|||
<if test="record.hospital != null"> |
|||
hospital = #{record.hospital,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="record.start != null"> |
|||
start = #{record.start,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="record.end != null"> |
|||
end = #{record.end,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="record.remark != null"> |
|||
remark = #{record.remark,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="record.operator != null"> |
|||
operator = #{record.operator,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="record.createdAt != null"> |
|||
created_at = #{record.createdAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="record.updatedAt != null"> |
|||
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="record.recStatus != null"> |
|||
rec_status = #{record.recStatus,jdbcType=TINYINT}, |
|||
</if> |
|||
</set> |
|||
<if test="_parameter != null"> |
|||
<include refid="Update_By_Example_Where_Clause" /> |
|||
</if> |
|||
</update> |
|||
<update id="updateByExample" parameterType="map"> |
|||
update t_question_ocr |
|||
set id = #{record.id,jdbcType=BIGINT}, |
|||
code = #{record.code,jdbcType=VARCHAR}, |
|||
sort = #{record.sort,jdbcType=INTEGER}, |
|||
hospital = #{record.hospital,jdbcType=BIGINT}, |
|||
start = #{record.start,jdbcType=VARCHAR}, |
|||
end = #{record.end,jdbcType=VARCHAR}, |
|||
remark = #{record.remark,jdbcType=VARCHAR}, |
|||
operator = #{record.operator,jdbcType=BIGINT}, |
|||
created_at = #{record.createdAt,jdbcType=TIMESTAMP}, |
|||
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, |
|||
rec_status = #{record.recStatus,jdbcType=TINYINT} |
|||
<if test="_parameter != null"> |
|||
<include refid="Update_By_Example_Where_Clause" /> |
|||
</if> |
|||
</update> |
|||
<update id="updateByPrimaryKeySelective" parameterType="com.ccsens.tcm.bean.po.QuestionOcr"> |
|||
update t_question_ocr |
|||
<set> |
|||
<if test="code != null"> |
|||
code = #{code,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="sort != null"> |
|||
sort = #{sort,jdbcType=INTEGER}, |
|||
</if> |
|||
<if test="hospital != null"> |
|||
hospital = #{hospital,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="start != null"> |
|||
start = #{start,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="end != null"> |
|||
end = #{end,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="remark != null"> |
|||
remark = #{remark,jdbcType=VARCHAR}, |
|||
</if> |
|||
<if test="operator != null"> |
|||
operator = #{operator,jdbcType=BIGINT}, |
|||
</if> |
|||
<if test="createdAt != null"> |
|||
created_at = #{createdAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="updatedAt != null"> |
|||
updated_at = #{updatedAt,jdbcType=TIMESTAMP}, |
|||
</if> |
|||
<if test="recStatus != null"> |
|||
rec_status = #{recStatus,jdbcType=TINYINT}, |
|||
</if> |
|||
</set> |
|||
where id = #{id,jdbcType=BIGINT} |
|||
</update> |
|||
<update id="updateByPrimaryKey" parameterType="com.ccsens.tcm.bean.po.QuestionOcr"> |
|||
update t_question_ocr |
|||
set code = #{code,jdbcType=VARCHAR}, |
|||
sort = #{sort,jdbcType=INTEGER}, |
|||
hospital = #{hospital,jdbcType=BIGINT}, |
|||
start = #{start,jdbcType=VARCHAR}, |
|||
end = #{end,jdbcType=VARCHAR}, |
|||
remark = #{remark,jdbcType=VARCHAR}, |
|||
operator = #{operator,jdbcType=BIGINT}, |
|||
created_at = #{createdAt,jdbcType=TIMESTAMP}, |
|||
updated_at = #{updatedAt,jdbcType=TIMESTAMP}, |
|||
rec_status = #{recStatus,jdbcType=TINYINT} |
|||
where id = #{id,jdbcType=BIGINT} |
|||
</update> |
|||
</mapper> |
@ -0,0 +1,19 @@ |
|||
package com.ccsens.util.baidu; |
|||
|
|||
import io.swagger.annotations.ApiModel; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @description: |
|||
* @author: whj |
|||
* @time: 2021/3/31 16:39 |
|||
*/ |
|||
public class BaiDuDto { |
|||
|
|||
@ApiModel("通用文字识别(标准版)-请求参数") |
|||
@Data |
|||
public static class GeneralBasic{ |
|||
private String image; |
|||
private String url; |
|||
} |
|||
} |
@ -0,0 +1,95 @@ |
|||
package com.ccsens.util.baidu; |
|||
|
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.ccsens.util.CodeEnum; |
|||
import com.ccsens.util.RedisUtil; |
|||
import com.ccsens.util.RestTemplateUtil; |
|||
import com.ccsens.util.exception.BaseException; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.annotation.PostConstruct; |
|||
import javax.annotation.Resource; |
|||
|
|||
/** |
|||
* @description: 百度API |
|||
* @author: whj |
|||
* @time: 2021/3/31 15:30 |
|||
*/ |
|||
@Component |
|||
@Slf4j |
|||
public class BaiDuUtil { |
|||
|
|||
@Resource |
|||
private RedisUtil redisUtil; |
|||
private static BaiDuUtil util; |
|||
/**token_appKey*/ |
|||
private static final String tokenKey = "baidu_token_"; |
|||
|
|||
private static final String authUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}"; |
|||
private static final String generalBasicUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token={}"; |
|||
|
|||
@PostConstruct |
|||
public void init(){ |
|||
util = this; |
|||
util.redisUtil = this.redisUtil; |
|||
} |
|||
|
|||
/** |
|||
* 获取token |
|||
* @param appKey appKey |
|||
* @param secretKey secretKey |
|||
* @return token |
|||
*/ |
|||
public static String getToken(String appKey, String secretKey){ |
|||
log.info("获取百度认证:{},{}", appKey, secretKey); |
|||
String key = tokenKey + appKey; |
|||
String token = (String) util.redisUtil.get(key); |
|||
log.info("缓存token:{}", token); |
|||
if (StrUtil.isNotEmpty(token)) { |
|||
return token; |
|||
} |
|||
String url = StrUtil.format(authUrl, appKey, secretKey); |
|||
String result = RestTemplateUtil.postUrlEncode(url, null); |
|||
log.info("获取百度认证:{}", result); |
|||
JSONObject json = JSONObject.parseObject(result); |
|||
if (json.containsKey(Code.ERROR)) { |
|||
log.info("获取token失败"); |
|||
CodeEnum thirdError = CodeEnum.THIRD_ERROR; |
|||
thirdError.setMsg(result); |
|||
throw new BaseException(thirdError); |
|||
} |
|||
token = json.getString(Code.ACCESS_TOKEN); |
|||
// 有效期,减10分钟
|
|||
int expiresTime = json.getIntValue(Code.EXPIRES_TIME) - 10*60; |
|||
util.redisUtil.set(key, token, expiresTime); |
|||
return token; |
|||
} |
|||
|
|||
|
|||
public static BaiDuVo.GeneralBasic generalBasic(String appKey, String secretKey, BaiDuDto.GeneralBasic basic) { |
|||
String token = getToken(appKey, secretKey); |
|||
String url = StrUtil.format(generalBasicUrl, token); |
|||
// String result = RestTemplateUtil.postBody(url, basic);
|
|||
String result = RestTemplateUtil.postUrlEncode(url, basic); |
|||
log.info("调用通用文字识别(标准版)结果:{}", result); |
|||
if (result.contains(Code.GENERAL_BASIC_ERROR)) { |
|||
CodeEnum thirdError = CodeEnum.THIRD_ERROR; |
|||
thirdError.setMsg(result); |
|||
throw new BaseException(thirdError); |
|||
} |
|||
BaiDuVo.GeneralBasic basicVo = JSONObject.parseObject(result, BaiDuVo.GeneralBasic.class); |
|||
return basicVo; |
|||
} |
|||
|
|||
private static class Code{ |
|||
private final static String ERROR = "error"; |
|||
private final static String GENERAL_BASIC_ERROR = "error_code"; |
|||
private final static String ERROR_DESC = "error_description"; |
|||
private final static String ACCESS_TOKEN = "access_token"; |
|||
private final static String EXPIRES_TIME = "expires_in"; |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.ccsens.util.baidu; |
|||
|
|||
import com.alibaba.fastjson.annotation.JSONField; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.annotations.ApiModel; |
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @description: |
|||
* @author: whj |
|||
* @time: 2021/3/31 16:11 |
|||
*/ |
|||
public class BaiDuVo { |
|||
|
|||
@ApiModel("通用文字识别(标准版)") |
|||
@Data |
|||
public static class GeneralBasic{ |
|||
@JSONField(name="log_id") |
|||
private String logId; |
|||
@JSONField(name="words_result") |
|||
private List<GeneralWord> wordsResult; |
|||
@JSONField(name="words_result_num") |
|||
private int wordsResultNum; |
|||
} |
|||
|
|||
@Data |
|||
@ApiModel("文字识别-文字") |
|||
public static class GeneralWord{ |
|||
private String words; |
|||
} |
|||
} |
Loading…
Reference in new issue