提交 9d1cece5 authored 作者: 杨启发's avatar 杨启发

磅单OCR识别接口

上级 c22e344a
package com.clx.performance.param.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @author yangqifa
*/
@Getter
@Setter
@NoArgsConstructor
public class OcrRecognitionParam {
@ApiModelProperty(value = "运单编号", example = "100000000")
@NotBlank(message = "运单编号不能为空")
private String childNo;
@ApiModelProperty(value = "磅单图片url")
@NotBlank(message = "磅单图片url不能为空")
private String imageUrl;
}
package com.clx.performance.vo.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
/**
* @author yangqifa
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class OcrRecognitionResultVO {
@ApiModelProperty(value = "毛重", example = "48.36")
private Double grossWeight;
@ApiModelProperty(value = "皮重", example = "16.32")
private Double tareWeight;
}
...@@ -319,7 +319,16 @@ ...@@ -319,7 +319,16 @@
<version>2.0.0-beta7</version> <version>2.0.0-beta7</version>
</dependency> </dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-common</artifactId>
<version>LATEST</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-ocr</artifactId>
<version>LATEST</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -189,4 +189,10 @@ public class AppDriverOrderChildController { ...@@ -189,4 +189,10 @@ public class AppDriverOrderChildController {
return Result.page(page.getRecords(), page.getTotal(), page.getPages()); return Result.page(page.getRecords(), page.getTotal(), page.getPages());
} }
@ApiOperation(value = "磅单OCR识别", notes = "<br>By:杨启发")
@PostMapping("/ocrRecognition")
public Result<OcrRecognitionResultVO> ocrRecognition(@RequestBody @Validated OcrRecognitionParam param) {
return Result.ok(orderChildService.ocrRecognition(param));
}
} }
package com.clx.performance.dao;
import com.clx.performance.mapper.OcrRecognitionMapper;
import com.clx.performance.model.OcrRecognition;
import com.msl.common.dao.BaseDao;
/**
* @author yangqifa
*/
public interface OcrRecognitionDao extends BaseDao<OcrRecognitionMapper, OcrRecognition, Integer> {
}
package com.clx.performance.dao.impl;
import com.clx.performance.dao.OcrRecognitionDao;
import com.clx.performance.mapper.OcrRecognitionMapper;
import com.clx.performance.model.OcrRecognition;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @author yangqifa
*/
@Repository
public class OcrRecognitionDaoImpl extends BaseDaoImpl<OcrRecognitionMapper, OcrRecognition, Integer> implements OcrRecognitionDao {
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OcrRecognition;
/**
* @author yangqifa
*/
public interface OcrRecognitionMapper extends BaseMapper<OcrRecognition> {
}
package com.clx.performance.model;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import lombok.Data;
/**
* @author yangqifa
*/
@Data
public class OcrRecognition implements HasKey<Integer> {
/**
* 主键ID
*/
@ApiModelProperty(value = "主键ID")
private Integer id;
/**
* 运单编号
*/
@ApiModelProperty(value = "运单编号")
private String childNo;
/**
* 磅单图片url
*/
@ApiModelProperty(value = "磅单图片url")
private String imageUrl;
/**
* 毛重
*/
@ApiModelProperty(value = "毛重")
private Double grossWeight;
/**
* 皮重
*/
@ApiModelProperty(value = "皮重")
private Double tareWeight;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private Date createdTime;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private Date modifiedTime;
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
...@@ -99,4 +99,6 @@ public interface OrderChildService { ...@@ -99,4 +99,6 @@ public interface OrderChildService {
Integer getOrderChildCheck(OrderChildCheckParam param); Integer getOrderChildCheck(OrderChildCheckParam param);
void cancelOrderChilds(CancelOrderGoodsParam param); void cancelOrderChilds(CancelOrderGoodsParam param);
OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param);
} }
...@@ -71,15 +71,24 @@ import com.msl.common.utils.LocalDateTimeUtils; ...@@ -71,15 +71,24 @@ import com.msl.common.utils.LocalDateTimeUtils;
import com.msl.common.utils.gps.GpsUtil; import com.msl.common.utils.gps.GpsUtil;
import com.msl.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.ocr.v20181119.OcrClient;
import com.tencentcloudapi.ocr.v20181119.models.GroupInfo;
import com.tencentcloudapi.ocr.v20181119.models.ItemInfo;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Request;
import com.tencentcloudapi.ocr.v20181119.models.SmartStructuralOCRV2Response;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -102,6 +111,12 @@ import java.util.stream.Collectors; ...@@ -102,6 +111,12 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class OrderChildServiceImpl implements OrderChildService { public class OrderChildServiceImpl implements OrderChildService {
@Value("${tencentcloudapi.credential.secretId}")
private String secretId;
@Value("${tencentcloudapi.credential.secretKey}")
private String secretKey;
@Autowired @Autowired
private AmqpTemplate rabbitTemplate; private AmqpTemplate rabbitTemplate;
@Autowired @Autowired
...@@ -206,6 +221,10 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -206,6 +221,10 @@ public class OrderChildServiceImpl implements OrderChildService {
@Autowired @Autowired
private QuotationService quotationService; private QuotationService quotationService;
@Autowired
private OcrRecognitionDao ocrRecognitionDao;
@Override @Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) { public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
...@@ -2709,4 +2728,41 @@ public class OrderChildServiceImpl implements OrderChildService { ...@@ -2709,4 +2728,41 @@ public class OrderChildServiceImpl implements OrderChildService {
} }
} }
} }
@Override
public OcrRecognitionResultVO ocrRecognition(OcrRecognitionParam param) {
OcrRecognitionResultVO vo = new OcrRecognitionResultVO();
try{
Credential cred = new Credential(secretId, secretKey);
OcrClient client = new OcrClient(cred, "ap-beijing");
String[] itemNames = {"毛重", "皮重"};
SmartStructuralOCRV2Request req = new SmartStructuralOCRV2Request();
req.setImageUrl(param.getImageUrl());
req.setItemNames(itemNames);
SmartStructuralOCRV2Response resp = client.SmartStructuralOCRV2(req);
for (GroupInfo groupInfo : resp.getStructuralList()) {
ItemInfo itemInfo = groupInfo.getGroups()[0].getLines()[0];
String autoName = itemInfo.getKey().getAutoName();
String autoContent = itemInfo.getValue().getAutoContent();
if (NumberUtils.isCreatable(autoContent)) {
if ("毛重".equals(autoName)) {
vo.setGrossWeight(Double.valueOf(autoContent));
}else if ("皮重".equals(autoName)) {
vo.setTareWeight(Double.valueOf(autoContent));
}
}
}
//保存识别结果
OcrRecognition ocrRecognition = new OcrRecognition();
ocrRecognition.setChildNo(param.getChildNo());
ocrRecognition.setImageUrl(param.getImageUrl());
ocrRecognition.setGrossWeight(vo.getGrossWeight());
ocrRecognition.setTareWeight(vo.getTareWeight());
ocrRecognitionDao.saveEntity(ocrRecognition);
} catch (TencentCloudSDKException e) {
log.error(e.getMessage(),e);
}
return vo;
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论