feat(报销/拨款): 进入页面检测OCR服务状态
- 后端新增 GET /ocr-health 端点,探测 Python OCR 服务 /health - 前端页面 created 时调用健康检查,服务不可用时顶部显示红色警告 "发票识别服务已停止,请联系信息化部门" - 服务不可用时禁用附件上传区域(FileUpload 新增 disabled prop) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -68,9 +68,11 @@ public class HrmAppropriationReqController extends BaseController {
|
||||
return R.ok(service.queryList(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过ossId触发发票OCR识别,返回识别条目(不保存,供前端实时回显)
|
||||
*/
|
||||
@GetMapping("/ocr-health")
|
||||
public R<Boolean> ocrHealth() {
|
||||
return R.ok(invoiceOcrService.isAlive());
|
||||
}
|
||||
|
||||
@PostMapping("/ocr-by-oss")
|
||||
public R<HrmInvoiceOcrResultVo> ocrByOss(@RequestParam @NotNull Long ossId) {
|
||||
return R.ok(invoiceOcrService.recognizeByOssId(ossId));
|
||||
|
||||
@@ -68,9 +68,11 @@ public class HrmReimburseReqController extends BaseController {
|
||||
return R.ok(service.queryList(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过ossId触发发票OCR识别,返回识别条目(不保存,供前端实时回显)
|
||||
*/
|
||||
@GetMapping("/ocr-health")
|
||||
public R<Boolean> ocrHealth() {
|
||||
return R.ok(invoiceOcrService.isAlive());
|
||||
}
|
||||
|
||||
@PostMapping("/ocr-by-oss")
|
||||
public R<HrmInvoiceOcrResultVo> ocrByOss(@RequestParam @NotNull Long ossId) {
|
||||
return R.ok(invoiceOcrService.recognizeByOssId(ossId));
|
||||
|
||||
@@ -9,9 +9,11 @@ public interface IHrmInvoiceOcrService {
|
||||
|
||||
/**
|
||||
* 通过ossId识别发票
|
||||
*
|
||||
* @param ossId 附件ID
|
||||
* @return 识别结果
|
||||
*/
|
||||
HrmInvoiceOcrResultVo recognizeByOssId(Long ossId);
|
||||
|
||||
/**
|
||||
* 检查OCR服务是否存活
|
||||
*/
|
||||
boolean isAlive();
|
||||
}
|
||||
|
||||
@@ -193,6 +193,20 @@ public class HrmInvoiceOcrServiceImpl implements IHrmInvoiceOcrService {
|
||||
return val.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAlive() {
|
||||
String ocrUrl = ocrProperties.getUrl();
|
||||
if (StringUtils.isBlank(ocrUrl)) return false;
|
||||
try {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
ResponseEntity<String> resp = restTemplate.getForEntity(ocrUrl + "/health", String.class);
|
||||
return resp.getStatusCode().is2xxSuccessful();
|
||||
} catch (Exception e) {
|
||||
log.warn("[OCR] 健康检查失败: {}", e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private String getStringOrFieldValue(JSONObject obj, String key) {
|
||||
Object val = obj.get(key);
|
||||
if (val == null) return null;
|
||||
|
||||
Reference in New Issue
Block a user