package com.ruoyi.system.controller;
|
|
import com.alibaba.fastjson2.JSONArray;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.UrlDownloader;
|
import com.ruoyi.common.core.utils.orc.OcrUtils;
|
import com.ruoyi.system.api.model.BusinessLicense;
|
import com.ruoyi.system.api.model.IdCard;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
|
@RestController
|
@RequestMapping("/common")
|
@Tag(name = "通用接口")
|
public class CommonController {
|
|
/**
|
* ocr提取身份证信息
|
*/
|
@GetMapping("/idCard")
|
@Operation(summary = "ocr提取身份证信息", description = "ocr提取身份证信息")
|
public R<IdCard> idCard(@Parameter(name = "url", description = "图片地址") String url) {
|
InputStream inputStream;
|
try {
|
// 找到最后一个斜杠的位置
|
int lastSlashIndex = url.lastIndexOf("/");
|
// 从斜杠后提取文件名
|
String baseUrl = url.substring(0, lastSlashIndex);
|
String fileName = url.substring(lastSlashIndex + 1);
|
String encode = URLEncoder.encode(fileName, "UTF-8");
|
url = baseUrl + "/" + encode;
|
inputStream = UrlDownloader.downloadAsStream(url);
|
String jsonStr = OcrUtils.idCard(inputStream,"IdCard");
|
if (StringUtils.isEmpty(jsonStr)){
|
return R.fail();
|
}
|
|
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
|
Integer statusCode = jsonObject.getInteger("statusCode");
|
if (statusCode != 200) {
|
return R.fail("识别失败");
|
}
|
JSONObject body = jsonObject.getJSONObject("body");
|
JSONObject data = body.getJSONObject("Data");
|
JSONArray subImages = data.getJSONArray("SubImages");
|
if (subImages != null && !subImages.isEmpty()){
|
JSONObject subImage = subImages.getJSONObject(0);
|
JSONObject kvInfo = subImage.getJSONObject("KvInfo");
|
IdCard idCard = kvInfo.getObject("Data", IdCard.class);
|
return R.ok(idCard);
|
}
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
return R.fail();
|
}
|
|
/**
|
* ocr提取营业执照信息
|
*/
|
@GetMapping("/businessLicense")
|
@Operation(summary = "ocr提取营业执照信息", description = "ocr提取营业执照信息")
|
public R<BusinessLicense> businessLicense(@Parameter(name = "url", description = "图片地址") String url) {
|
InputStream inputStream;
|
try {
|
inputStream = UrlDownloader.downloadAsStream(url);
|
String jsonStr = OcrUtils.idCard(inputStream,"BusinessLicense");
|
if (StringUtils.isEmpty(jsonStr)){
|
return R.fail();
|
}
|
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
|
Integer statusCode = jsonObject.getInteger("statusCode");
|
if (statusCode != 200) {
|
return R.fail("识别失败");
|
}
|
JSONObject body = jsonObject.getJSONObject("body");
|
JSONObject data = body.getJSONObject("Data");
|
JSONArray subImages = data.getJSONArray("SubImages");
|
if (subImages != null && !subImages.isEmpty()){
|
JSONObject subImage = subImages.getJSONObject(0);
|
JSONObject kvInfo = subImage.getJSONObject("KvInfo");
|
BusinessLicense businessLicense = kvInfo.getObject("Data", BusinessLicense.class);
|
return R.ok(businessLicense);
|
}
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
return R.fail();
|
}
|
}
|