|
@@ -3,15 +3,20 @@ package com.pavis.ai.app.fjsocrasy.service.impl;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.pavis.ai.app.fjsocrasy.common.utils.DateUtils;
|
|
|
import com.pavis.ai.app.fjsocrasy.common.utils.ocr.AipOcrUtils;
|
|
|
import com.pavis.ai.app.fjsocrasy.common.utils.ocr.GeneralUtils;
|
|
|
import com.pavis.ai.app.fjsocrasy.common.utils.ocr.ParseUtils;
|
|
|
import com.pavis.ai.app.fjsocrasy.form.FileDetails;
|
|
|
+import com.pavis.ai.app.fjsocrasy.form.ShuntParam;
|
|
|
import com.pavis.ai.app.fjsocrasy.form.res.ResData;
|
|
|
+import com.pavis.ai.app.fjsocrasy.mapper.ShuntMapper;
|
|
|
+import com.pavis.ai.app.fjsocrasy.model.Shunt;
|
|
|
import com.pavis.ai.app.fjsocrasy.service.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -52,6 +57,9 @@ public class OcrServiceImpl implements OcrService {
|
|
|
|
|
|
@Autowired
|
|
|
private BackService backService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ShuntMapper shuntMapper;
|
|
|
int countFlag = 0;
|
|
|
|
|
|
@Async("ocrFjsExecutor")
|
|
@@ -61,33 +69,103 @@ public class OcrServiceImpl implements OcrService {
|
|
|
// 2.2 获取ocr返回值。
|
|
|
log.info("step ***2: to ocr***");
|
|
|
data = fileType.equals("18") ? ParseUtils.changeSourceDataBy18(data) : data;
|
|
|
- log.info("*******ocr******* pre:{}",System.currentTimeMillis());
|
|
|
+ log.info("*******ocr******* pre:{}", System.currentTimeMillis());
|
|
|
// todo 分流:
|
|
|
+ List<Shunt> shunts = toSelShuntByType(fileType);
|
|
|
+ String shuntType = AipOcrUtils.checkLocalOrAli(shunts,countFlag);
|
|
|
|
|
|
- Map<String,Object> ocrMap = toOcrMap(reqId,fileType,url,fileName,data,startTime);
|
|
|
+ Map<String, Object> ocrMap = toOcrMap(reqId, fileType, url, fileName, data, startTime);
|
|
|
|
|
|
// 等于100时,置为0;可从数据库获取,按照比例来。
|
|
|
|
|
|
- log.info("*******ocr******* end:{}",System.currentTimeMillis());
|
|
|
- log.info("match-pre,only ocr:{}",JSON.toJSONString(ocrMap));
|
|
|
- if (null != ocrMap && ocrMap.containsKey("req_id")){
|
|
|
- log.info("*******match******* pre:{}",System.currentTimeMillis());
|
|
|
+ log.info("*******ocr******* end:{}", System.currentTimeMillis());
|
|
|
+ log.info("match-pre,only ocr:{}", JSON.toJSONString(ocrMap));
|
|
|
+ if (null != ocrMap && ocrMap.containsKey("req_id")) {
|
|
|
+ log.info("*******match******* pre:{}", System.currentTimeMillis());
|
|
|
// 3、用户画像相似匹配。
|
|
|
- linkService.match(ocrMap.get("req_id").toString(),ocrMap.get("type").toString(),startTime,
|
|
|
- ocrMap.get("source_data").toString(), ocrMap.get("ocr_data").toString(),ocrMap.get("mid_ocr").toString(),ocrMap.get("acc_json").toString(),
|
|
|
+ linkService.match(ocrMap.get("req_id").toString(), ocrMap.get("type").toString(), startTime,
|
|
|
+ ocrMap.get("source_data").toString(), ocrMap.get("ocr_data").toString(), ocrMap.get("mid_ocr").toString(), ocrMap.get("acc_json").toString(),
|
|
|
ocrMap.get("recommends").toString());
|
|
|
- log.info("*******match******* end:{}",System.currentTimeMillis());
|
|
|
+ log.info("*******match******* end:{}", System.currentTimeMillis());
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
String excTime = DateUtils.getExcTime(startTime, endTime);
|
|
|
- log.info("match exctime:{}",excTime);
|
|
|
- }else{
|
|
|
+ log.info("match exctime:{}", excTime);
|
|
|
+ } else {
|
|
|
// backService.back(fileType,reqId,startTime,new JSONObject());
|
|
|
- log.info("step 2 error,maybe ocrmap null....:{}",reqId);
|
|
|
+ log.info("step 2 error,maybe ocrmap null....:{}", reqId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> shuntSet(ShuntParam shuntParam) {
|
|
|
+ int changedId = 0;
|
|
|
+ for (String s : shuntParam.getType()) {
|
|
|
+ // 获取分流列表。
|
|
|
+ List<Shunt> params = toSelShuntByType(s);
|
|
|
+ // 更新or插入操作。
|
|
|
+ changedId = toShunt(params,shuntParam);
|
|
|
}
|
|
|
+
|
|
|
+ Map<String, Object> resMap = new HashMap<>();
|
|
|
+ if (changedId > 0) {
|
|
|
+ // 成功
|
|
|
+ QueryWrapper<Shunt> shuntQueryWrapper = new QueryWrapper<>();
|
|
|
+ shuntQueryWrapper.lambda()
|
|
|
+ .isNotNull(true, Shunt::getId);
|
|
|
+ List<Shunt> shunts = shuntMapper.selectList(shuntQueryWrapper);
|
|
|
+ resMap.put("code", 1);
|
|
|
+ resMap.put("data", shunts);
|
|
|
+ } else {
|
|
|
+ // 失败
|
|
|
+ resMap.put("code", 0);
|
|
|
+ resMap.put("data", null);
|
|
|
+ }
|
|
|
+ return resMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据类型获取分流列表。
|
|
|
+ * @param type
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Shunt> toSelShuntByType(String type){
|
|
|
+ QueryWrapper<Shunt> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda()
|
|
|
+ .eq(Shunt::getType, type);
|
|
|
+ return shuntMapper.selectList(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建shunt。
|
|
|
+ *
|
|
|
+ * @param shuntParam
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public int toShunt(List<Shunt> params, ShuntParam shuntParam) {
|
|
|
+ List<Integer> lists = AipOcrUtils.arraysHundred(Integer.valueOf(shuntParam.getProportionPre()),
|
|
|
+ Integer.valueOf(shuntParam.getProportion()));
|
|
|
+ Shunt shunt = new Shunt();
|
|
|
+ int changedId = 0;
|
|
|
+ BeanUtils.copyProperties(shuntParam, shunt);
|
|
|
+ shunt.setCheckArr(JSON.toJSONString(lists));
|
|
|
+ shunt.setOperator("sys");
|
|
|
+ shunt.setOperatorId("sys");
|
|
|
+ shunt.setOperateIp("sys");
|
|
|
+ if (params.size() > 0) {
|
|
|
+ // 比例设置已存在,做更新操作。
|
|
|
+ shunt.setUpdateTime(DateUtils.now());
|
|
|
+ shunt.setId(params.get(0).getId());
|
|
|
+ } else {
|
|
|
+ // 比例设置已存在,做新增操作。
|
|
|
+ shunt.setOperateTime(DateUtils.now());
|
|
|
+ }
|
|
|
+ changedId = params.size() > 0 ? shuntMapper.updateById(shunt) : shuntMapper.insert(shunt);
|
|
|
+ return changedId;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* ocr识别函数1。
|
|
|
+ *
|
|
|
* @param reqId
|
|
|
* @param fileType
|
|
|
* @param url
|
|
@@ -96,9 +174,9 @@ public class OcrServiceImpl implements OcrService {
|
|
|
* @param startTime
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String,Object> toOcrMap(String reqId, String fileType, String url, String fileName, String data, Long startTime){
|
|
|
- log.info("to Ocr Map:{}","开始调用ocr识别....");
|
|
|
- Map<String,Object> ocrMap = new HashMap<>();
|
|
|
+ public Map<String, Object> toOcrMap(String reqId, String fileType, String url, String fileName, String data, Long startTime) {
|
|
|
+ log.info("to Ocr Map:{}", "开始调用ocr识别....");
|
|
|
+ Map<String, Object> ocrMap = new HashMap<>();
|
|
|
try {
|
|
|
// 解析已处理过的有效的图片url
|
|
|
JSONArray recArr = JSON.parseArray(url);
|
|
@@ -116,22 +194,22 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setType(fileType);
|
|
|
resData.setRes(null);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("to Ocr Map:{}","ocr识别....超出大小限制。");
|
|
|
- back(resData, reqId, DateUtils.getExcTime(startTime,endTime), "-3");
|
|
|
+ log.info("to Ocr Map:{}", "ocr识别....超出大小限制。");
|
|
|
+ back(resData, reqId, DateUtils.getExcTime(startTime, endTime), "-3");
|
|
|
} else {
|
|
|
// 单文件上传。
|
|
|
- ocrMap = toSingleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, data,startTime);
|
|
|
+ ocrMap = toSingleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, data, startTime);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("step2 ocrMap excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
- log.info("to Ocr single Map:{}","结束调用ocr识别single....");
|
|
|
+ log.info("step2 ocrMap excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
+ log.info("to Ocr single Map:{}", "结束调用ocr识别single....");
|
|
|
return ocrMap;
|
|
|
}
|
|
|
} else if (effectiveImgpaths.size() > 1) {
|
|
|
// 多文件上传,pdf转图片&两张图片,第8、15、16种。
|
|
|
- ocrMap = toSingleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, data,startTime);
|
|
|
+ ocrMap = toSingleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, data, startTime);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("step2 ocrMap excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
- log.info("to Ocr more Map:{}","结束调用ocr识别more....");
|
|
|
+ log.info("step2 ocrMap excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
+ log.info("to Ocr more Map:{}", "结束调用ocr识别more....");
|
|
|
return ocrMap;
|
|
|
} else {
|
|
|
// todo 没有图片,不合法等,待开发。
|
|
@@ -140,18 +218,19 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setType(fileType);
|
|
|
resData.setRes(null);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- back(resData, reqId, DateUtils.getExcTime(startTime,endTime), "0");
|
|
|
- log.info("step2 ocrMap 无图/不合法等excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ back(resData, reqId, DateUtils.getExcTime(startTime, endTime), "0");
|
|
|
+ log.info("step2 ocrMap 无图/不合法等excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("ocr map:{}", e);
|
|
|
}
|
|
|
- log.info("to Ocr Map:{}","调用ocr识别.,ocrMap为空...");
|
|
|
+ log.info("to Ocr Map:{}", "调用ocr识别.,ocrMap为空...");
|
|
|
return ocrMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* ocr识别函数2。
|
|
|
+ *
|
|
|
* @param reqId
|
|
|
* @param fileType
|
|
|
* @param parsedFilePath
|
|
@@ -160,7 +239,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
* @param startTime
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String,Object> toSingleFileOcr(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData,Long startTime) {
|
|
|
+ public Map<String, Object> toSingleFileOcr(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData, Long startTime) {
|
|
|
System.err.println(reqId);
|
|
|
System.err.println(fileType);
|
|
|
System.err.println(JSON.toJSONString(parsedFilePath));
|
|
@@ -175,7 +254,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
try {
|
|
|
ocr = JSON.parseObject(AipOcrUtils.sample(parsedFilePath.getUrls(), fileType));
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("step2 ocr excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("step2 ocr excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid res:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.containsKey("image_status") && ocr.get("image_status").toString().equals("normal")) {
|
|
|
// 解析ocr数据。
|
|
@@ -183,27 +262,27 @@ public class OcrServiceImpl implements OcrService {
|
|
|
String ocrData = "";
|
|
|
if (fileType.equals("10")) {
|
|
|
ocrData = ParseUtils.front(ocr);
|
|
|
- midOcr = ParseUtils.midOcrFront(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrFront(true, "1", fileType, ocrData);
|
|
|
} else {
|
|
|
ocrData = ParseUtils.reverse(ocr);
|
|
|
- midOcr = ParseUtils.midOcrReverse(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrReverse(true, "1", fileType, ocrData);
|
|
|
}
|
|
|
// todo 张坤相似匹配算法
|
|
|
- matchMap.put("type",fileType);
|
|
|
+ matchMap.put("type", fileType);
|
|
|
matchMap.put("source_data", sourceData);
|
|
|
matchMap.put("ocr_data", ocrData);
|
|
|
- matchMap.put("acc_json",ParseUtils.createIdCardAcc(fileType));
|
|
|
- matchMap.put("req_id",reqId);
|
|
|
- matchMap.put("mid_ocr",midOcr);
|
|
|
- matchMap.put("start_time",startTime);
|
|
|
- matchMap.put("recommends",fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
+ matchMap.put("acc_json", ParseUtils.createIdCardAcc(fileType));
|
|
|
+ matchMap.put("req_id", reqId);
|
|
|
+ matchMap.put("mid_ocr", midOcr);
|
|
|
+ matchMap.put("start_time", startTime);
|
|
|
+ matchMap.put("recommends", fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
// 将ocr结果信息及其他信息封装后写入source表中。
|
|
|
// uploadService.updateByReqIdAndType(reqId,fileType,"time",JSON.toJSONString(matchMap));
|
|
|
// 返回map.
|
|
|
return matchMap;
|
|
|
} else {
|
|
|
// 返回至富士通。
|
|
|
- backService.back(fileType,reqId,startTime,ocr);
|
|
|
+ backService.back(fileType, reqId, startTime, ocr);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("singleFileOcr:{}", e);
|
|
@@ -215,20 +294,20 @@ public class OcrServiceImpl implements OcrService {
|
|
|
ocrMap = getOcrMap(reqId, fileType, paths);
|
|
|
ocr = internalSendService.ocr(ocrMap);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("step2 ocr excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("step2 ocr excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid result:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.get("code").toString().equals("1")) {
|
|
|
- matchMap = matchMap(matchMap,fileType,reqId,ocr,sourceData);
|
|
|
- matchMap.put("start_time",startTime);
|
|
|
- matchMap.put("mid_ocr",ocr);
|
|
|
+ matchMap = matchMap(matchMap, fileType, reqId, ocr, sourceData);
|
|
|
+ matchMap.put("start_time", startTime);
|
|
|
+ matchMap.put("mid_ocr", ocr);
|
|
|
// uploadService.updateByReqIdAndType(reqId,fileType,"time",JSON.toJSONString(matchMap));
|
|
|
return matchMap;
|
|
|
} else if (null != ocr && ocr.get("code").toString().equals("-1")) {
|
|
|
// 返回至富士通。
|
|
|
- backService.back(fileType,reqId,startTime,ocr);
|
|
|
+ backService.back(fileType, reqId, startTime, ocr);
|
|
|
} else {
|
|
|
// 返回至富士通。
|
|
|
- backService.back(fileType,reqId,startTime,ocr);
|
|
|
+ backService.back(fileType, reqId, startTime, ocr);
|
|
|
}
|
|
|
}
|
|
|
return matchMap;
|
|
@@ -236,7 +315,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public void ocr(String reqId, String fileType, String url, String fileName, String sourceData,Long startTime) {
|
|
|
+ public void ocr(String reqId, String fileType, String url, String fileName, String sourceData, Long startTime) {
|
|
|
try {
|
|
|
// 解析已处理过的有效的图片url
|
|
|
JSONArray recArr = JSON.parseArray(url);
|
|
@@ -253,18 +332,18 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setType(fileType);
|
|
|
resData.setRes(null);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- back(resData, reqId, DateUtils.getExcTime(startTime,endTime), "-3");
|
|
|
+ back(resData, reqId, DateUtils.getExcTime(startTime, endTime), "-3");
|
|
|
} else {
|
|
|
// 单文件上传。
|
|
|
- singleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, sourceData,startTime);
|
|
|
+ singleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, sourceData, startTime);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("res excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("res excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
}
|
|
|
} else if (effectiveImgpaths.size() > 1) {
|
|
|
// 多文件上传,pdf转图片&两张图片,第8、15、16种。
|
|
|
- singleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, sourceData,startTime);
|
|
|
+ singleFileOcr(reqId, fileType, effectiveImgpaths.get(0), effectiveImgpaths, sourceData, startTime);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("res excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("res excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
} else {
|
|
|
// todo 没有图片,不合法等,待开发。
|
|
|
ResData resData = new ResData();
|
|
@@ -272,7 +351,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setType(fileType);
|
|
|
resData.setRes(null);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- back(resData, reqId, DateUtils.getExcTime(startTime,endTime), "0");
|
|
|
+ back(resData, reqId, DateUtils.getExcTime(startTime, endTime), "0");
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("ocr:{}", e);
|
|
@@ -283,7 +362,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
@Override
|
|
|
public Map<String, Object> res(String reqId, String fileType, MultipartFile[] files, String data, Long startTime) throws Exception {
|
|
|
if (files != null && files.length > 0) {
|
|
|
- return resDetails(reqId, fileType, files, data,startTime);
|
|
|
+ return resDetails(reqId, fileType, files, data, startTime);
|
|
|
} else {
|
|
|
return resFailed("-2", "文件不能为空,请选择文件后重试。", reqId, fileType);
|
|
|
}
|
|
@@ -299,7 +378,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
* @param sourceData
|
|
|
* @throws IOException
|
|
|
*/
|
|
|
- public void singleFileOcr(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData,Long startTime) {
|
|
|
+ public void singleFileOcr(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData, Long startTime) {
|
|
|
Map<String, Object> matchMap = new HashMap<>();
|
|
|
Map<String, Object> ocrMap = new HashMap<>();
|
|
|
sourceData = fileType.equals("18") ? ParseUtils.changeSourceDataBy18(sourceData) : sourceData;
|
|
@@ -308,7 +387,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
try {
|
|
|
ocr = JSON.parseObject(AipOcrUtils.sample(parsedFilePath.getUrls(), fileType));
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid res:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.containsKey("image_status") && ocr.get("image_status").toString().equals("normal")) {
|
|
|
// 解析ocr数据。
|
|
@@ -316,33 +395,33 @@ public class OcrServiceImpl implements OcrService {
|
|
|
String ocrData = "";
|
|
|
if (fileType.equals("10")) {
|
|
|
ocrData = ParseUtils.front(ocr);
|
|
|
- midOcr = ParseUtils.midOcrFront(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrFront(true, "1", fileType, ocrData);
|
|
|
} else {
|
|
|
ocrData = ParseUtils.reverse(ocr);
|
|
|
- midOcr = ParseUtils.midOcrReverse(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrReverse(true, "1", fileType, ocrData);
|
|
|
}
|
|
|
// todo 张坤相似匹配算法
|
|
|
matchMap.put("source_data", sourceData);
|
|
|
matchMap.put("ocr_data", ocrData);
|
|
|
- matchMap.put("acc_json",ParseUtils.createIdCardAcc(fileType));
|
|
|
- matchMap.put("type",fileType);
|
|
|
- log.info("match pre:{}",JSON.toJSONString(matchMap));
|
|
|
+ matchMap.put("acc_json", ParseUtils.createIdCardAcc(fileType));
|
|
|
+ matchMap.put("type", fileType);
|
|
|
+ log.info("match pre:{}", JSON.toJSONString(matchMap));
|
|
|
String matchRes = internalSendService.match(matchMap);
|
|
|
log.info("ocr-match singleFileOcr res test:{}", JSON.toJSONString(matchRes));
|
|
|
ResData resData = ParseUtils.parseRes(reqId, fileType, JSON.parseObject(sourceData),
|
|
|
JSON.parseObject(ocrData), JSON.parseObject(matchRes));
|
|
|
- uploadService.saveBack(resData,JSON.toJSONString(midOcr),startTime);
|
|
|
+ uploadService.saveBack(resData, JSON.toJSONString(midOcr), startTime);
|
|
|
back(resData, reqId, fileType, "1");
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
} else {
|
|
|
- JSONObject midOcr = fileType.equals("10") ? ParseUtils.midOcrFront(false,"-1",fileType,"")
|
|
|
- : ParseUtils.midOcrReverse(false,"-1",fileType,"");
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(midOcr),startTime);
|
|
|
+ JSONObject midOcr = fileType.equals("10") ? ParseUtils.midOcrFront(false, "-1", fileType, "")
|
|
|
+ : ParseUtils.midOcrReverse(false, "-1", fileType, "");
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(midOcr), startTime);
|
|
|
boolean flag = null != ocr ? ocr.containsKey("image_status") ? ocr.get("image_status").equals("non_idcard") ? true : false : false : false;
|
|
|
back(backService.getNullBackResData(reqId, fileType), reqId, fileType, flag ? "-1" : "0");
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("singleFileOcr:{}", e);
|
|
@@ -354,33 +433,33 @@ public class OcrServiceImpl implements OcrService {
|
|
|
ocrMap = getOcrMap(reqId, fileType, paths);
|
|
|
ocr = internalSendService.ocr(ocrMap);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr ali excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr ali excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid result:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.get("code").toString().equals("1")) {
|
|
|
// todo 张坤相似匹配算法
|
|
|
ResData resData = toParseData(matchMap, fileType, reqId, ocr, sourceData);
|
|
|
- uploadService.saveBack(resData,JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(resData, JSON.toJSONString(ocr), startTime);
|
|
|
back(resData, reqId, fileType, ocr.get("code").toString());
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
} else if (null != ocr && ocr.get("code").toString().equals("-1")) {
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(ocr), startTime);
|
|
|
back(backService.getNullBackResData(reqId, fileType), reqId, fileType, ocr.get("code").toString());
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
} else {
|
|
|
// todo 待处理。
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(ocr), startTime);
|
|
|
back(backService.getNullBackResData(reqId, fileType), reqId, fileType, ocr.get("code").toString());
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> resDetails(String reqId, String fileType, MultipartFile[] files, String sourceData, Long startTime) throws Exception {
|
|
|
// 写入文件
|
|
|
- List<FileDetails> parsedFilePaths = uploadService.writeToDisk(files, reqId, fileType, sourceData,startTime);
|
|
|
+ List<FileDetails> parsedFilePaths = uploadService.writeToDisk(files, reqId, fileType, sourceData, startTime);
|
|
|
if (parsedFilePaths.size() == 1) {
|
|
|
if (GeneralUtils.checkFileSizeIsLimit(parsedFilePaths.get(0).getUrls(), 4, "M")) {
|
|
|
ResData resData = new ResData();
|
|
@@ -390,11 +469,11 @@ public class OcrServiceImpl implements OcrService {
|
|
|
return backService.res("-3", backService.getNullBackResData(reqId, fileType));
|
|
|
} else {
|
|
|
// 单文件上传。
|
|
|
- return singleFileOcrSyn(reqId, fileType, parsedFilePaths.get(0), parsedFilePaths, sourceData,startTime);
|
|
|
+ return singleFileOcrSyn(reqId, fileType, parsedFilePaths.get(0), parsedFilePaths, sourceData, startTime);
|
|
|
}
|
|
|
} else if (parsedFilePaths.size() > 1) {
|
|
|
// 多文件上传,pdf转图片多个,可能是第八种文件在内。
|
|
|
- return singleFileOcrSyn(reqId, fileType, parsedFilePaths.get(0), parsedFilePaths, sourceData,startTime);
|
|
|
+ return singleFileOcrSyn(reqId, fileType, parsedFilePaths.get(0), parsedFilePaths, sourceData, startTime);
|
|
|
} else {
|
|
|
return resFailed("-2", "文件不能为空,请选择文件后重试。", reqId, fileType);
|
|
|
}
|
|
@@ -409,7 +488,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
map.put("fileType", fileType);
|
|
|
map.put("data", "null");
|
|
|
// 20200507 新增回传参数:
|
|
|
- map.put("overallConfidence","");
|
|
|
+ map.put("overallConfidence", "");
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -433,6 +512,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
ocrMap.put("files_list", files);
|
|
|
ocrMap.put("type", fileType);
|
|
|
ocrMap.put("reqId", reqId);
|
|
|
+// ocrMap.put("shuntType","")
|
|
|
|
|
|
// todo 20200421 单文件暂时抛弃,选用多文件上传。
|
|
|
// File file = new File(parsedFilePath.getUrls());
|
|
@@ -454,7 +534,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
* @throws IOException
|
|
|
*/
|
|
|
@Override
|
|
|
- public Map<String, Object> singleFileOcrSyn(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData,Long startTime) throws IOException {
|
|
|
+ public Map<String, Object> singleFileOcrSyn(String reqId, String fileType, FileDetails parsedFilePath, List<FileDetails> paths, String sourceData, Long startTime) throws IOException {
|
|
|
Map<String, Object> matchMap = new HashMap<>();
|
|
|
Map<String, Object> ocrMap = new HashMap<>();
|
|
|
sourceData = fileType.equals("18") ? ParseUtils.changeSourceDataBy18(sourceData) : sourceData;
|
|
@@ -463,7 +543,7 @@ public class OcrServiceImpl implements OcrService {
|
|
|
try {
|
|
|
ocr = JSON.parseObject(AipOcrUtils.sample(parsedFilePath.getUrls(), fileType));
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid res:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.get("image_status").equals("normal")) {
|
|
|
// 解析ocr数据。
|
|
@@ -471,28 +551,28 @@ public class OcrServiceImpl implements OcrService {
|
|
|
String ocrData = "";
|
|
|
if (fileType.equals("10")) {
|
|
|
ocrData = ParseUtils.front(ocr);
|
|
|
- midOcr = ParseUtils.midOcrFront(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrFront(true, "1", fileType, ocrData);
|
|
|
} else {
|
|
|
ocrData = ParseUtils.reverse(ocr);
|
|
|
- midOcr = ParseUtils.midOcrReverse(true,"1",fileType,ocrData);
|
|
|
+ midOcr = ParseUtils.midOcrReverse(true, "1", fileType, ocrData);
|
|
|
}
|
|
|
// todo 张坤相似匹配算法
|
|
|
// matchMap.put("source_data",JSON.toJSONString(JSON.parseObject(sourceData)));
|
|
|
matchMap.put("source_data", sourceData);
|
|
|
matchMap.put("ocr_data", ocrData);
|
|
|
- matchMap.put("type",fileType);
|
|
|
- matchMap.put("acc_json",ParseUtils.createIdCardAcc(fileType));
|
|
|
- matchMap.put("recommends",fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
- log.info("match pre:{}",JSON.toJSONString(matchMap));
|
|
|
+ matchMap.put("type", fileType);
|
|
|
+ matchMap.put("acc_json", ParseUtils.createIdCardAcc(fileType));
|
|
|
+ matchMap.put("recommends", fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
+ log.info("match pre:{}", JSON.toJSONString(matchMap));
|
|
|
String matchRes = internalSendService.match(matchMap);
|
|
|
// String matchRes = internalSendService.link(matchMap);
|
|
|
ResData resData = ParseUtils.parseRes(reqId, fileType, JSON.parseObject(sourceData),
|
|
|
JSON.parseObject(ocrData), JSON.parseObject(matchRes));
|
|
|
- uploadService.saveBack(resData,JSON.toJSONString(midOcr),startTime);
|
|
|
+ uploadService.saveBack(resData, JSON.toJSONString(midOcr), startTime);
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
return backService.res("1", resData);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
// todo 待处理。
|
|
|
ResData resData = new ResData();
|
|
|
resData.setReqId(reqId);
|
|
@@ -500,16 +580,16 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setRes(null);
|
|
|
resData.setOverallConfidence("2");
|
|
|
resData.setMidConfidence("2");
|
|
|
- JSONObject midOcr = fileType.equals("10") ? ParseUtils.midOcrFront(false,"-1",fileType,"")
|
|
|
- : ParseUtils.midOcrReverse(false,"-1",fileType,"");
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(midOcr),startTime);
|
|
|
+ JSONObject midOcr = fileType.equals("10") ? ParseUtils.midOcrFront(false, "-1", fileType, "")
|
|
|
+ : ParseUtils.midOcrReverse(false, "-1", fileType, "");
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(midOcr), startTime);
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
boolean flag = null != ocr ? ocr.get("image_status").equals("non_idcard") ? true : false : false;
|
|
|
return backService.res(flag ? "-1" : "0", backService.getNullBackResData(reqId, fileType));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- log.info("singleFileOcrSyn:{}", e);
|
|
|
+ log.info("singleFileOcrSyn:{}", e);
|
|
|
}
|
|
|
|
|
|
} else {
|
|
@@ -518,19 +598,19 @@ public class OcrServiceImpl implements OcrService {
|
|
|
ocrMap = getOcrMap(reqId, fileType, paths);
|
|
|
ocr = internalSendService.ocr(ocrMap);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr ali excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr ali excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
log.info("ocr-mid result:{}", JSON.toJSONString(ocr));
|
|
|
if (null != ocr && ocr.get("code").toString().equals("1")) {
|
|
|
// todo 张坤相似匹配算法
|
|
|
ResData resData = toParseData(matchMap, fileType, reqId, ocr, sourceData);
|
|
|
- uploadService.saveBack(resData,JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(resData, JSON.toJSONString(ocr), startTime);
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
return backService.res(ocr.get("code").toString(), resData);
|
|
|
} else if (null != ocr && ocr.get("code").toString().equals("-1")) {
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(ocr), startTime);
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
return backService.res(ocr.get("code").toString(), backService.getNullBackResData(reqId, fileType));
|
|
|
} else {
|
|
|
// todo 待处理。
|
|
@@ -539,21 +619,22 @@ public class OcrServiceImpl implements OcrService {
|
|
|
resData.setType(fileType);
|
|
|
resData.setRes(null);
|
|
|
resData.setOverallConfidence("2");
|
|
|
- resData.setMidConfidence("2");
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(ocr),startTime);
|
|
|
+ resData.setMidConfidence("2");
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(ocr), startTime);
|
|
|
endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
return backService.res(ocr.get("code").toString(), backService.getNullBackResData(reqId, fileType));
|
|
|
}
|
|
|
}
|
|
|
- uploadService.saveBack(backService.getNullBackResData(reqId, fileType),JSON.toJSONString(ocr),startTime);
|
|
|
+ uploadService.saveBack(backService.getNullBackResData(reqId, fileType), JSON.toJSONString(ocr), startTime);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
- log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime,endTime));
|
|
|
+ log.info("ocr back excTime:{}", DateUtils.getExcTime(startTime, endTime));
|
|
|
return resFailed(ocr.containsKey("code") ? ocr.get("code").toString() : "", "操作失败", reqId, fileType);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 在调用相似匹配算法前判断是否存在关联数据。
|
|
|
+ *
|
|
|
* @param matchMap
|
|
|
* @param fileType
|
|
|
* @param reqId
|
|
@@ -561,24 +642,24 @@ public class OcrServiceImpl implements OcrService {
|
|
|
* @param sourceData
|
|
|
* @return
|
|
|
*/
|
|
|
- public Map<String,Object> matchMap(Map<String, Object> matchMap, String fileType, String reqId, JSONObject ocr, String sourceData){
|
|
|
+ public Map<String, Object> matchMap(Map<String, Object> matchMap, String fileType, String reqId, JSONObject ocr, String sourceData) {
|
|
|
// String bo = StringUtils.substringBeforeLast(reqId,"-");
|
|
|
// todo 201127
|
|
|
- String bo = StringUtils.substringBefore(reqId,"-");
|
|
|
- if (uploadService.findLinkByBo(bo).size() > 1){
|
|
|
+ String bo = StringUtils.substringBefore(reqId, "-");
|
|
|
+ if (uploadService.findLinkByBo(bo).size() > 1) {
|
|
|
log.info("关联数据START...");
|
|
|
- Map<String,Object> linkMap = uploadService.link(bo,ocr,fileType);
|
|
|
- linkMap.put("req_id",reqId);
|
|
|
+ Map<String, Object> linkMap = uploadService.link(bo, ocr, fileType);
|
|
|
+ linkMap.put("req_id", reqId);
|
|
|
return linkMap;
|
|
|
}
|
|
|
matchMap.put("source_data", fileType.equals("18") ? ParseUtils.changeSourceDataBy18(sourceData) : fileType.equals("2") || fileType.equals("13") || fileType.equals("14") || fileType.equals("17")
|
|
|
? dealSource(sourceData) : sourceData);
|
|
|
matchMap.put("ocr_data", JSON.toJSONString(ocr.get("data")));
|
|
|
- matchMap.put("type",fileType);
|
|
|
- matchMap.put("acc_json",ocr.containsKey("acc_json") ? JSON.toJSONString(ocr.get("acc_json")) : "");
|
|
|
+ matchMap.put("type", fileType);
|
|
|
+ matchMap.put("acc_json", ocr.containsKey("acc_json") ? JSON.toJSONString(ocr.get("acc_json")) : "");
|
|
|
// todo 根据类型3判断该字段是否有值。类型为3时,有值,类型不为3时,已补充。
|
|
|
- matchMap.put("recommends",fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
- matchMap.put("req_id",reqId);
|
|
|
+ matchMap.put("recommends", fileType.equals("3") ? JSON.toJSONString(recommendInfoService.findRecomInfo()) : "[]");
|
|
|
+ matchMap.put("req_id", reqId);
|
|
|
return matchMap;
|
|
|
}
|
|
|
|
|
@@ -595,10 +676,10 @@ public class OcrServiceImpl implements OcrService {
|
|
|
public ResData toParseData(Map<String, Object> matchMap, String fileType, String reqId, JSONObject ocr, String sourceData) {
|
|
|
// String bo = StringUtils.substringBeforeLast(reqId,"-");
|
|
|
// todo 201127
|
|
|
- String bo = StringUtils.substringBefore(reqId,"-");
|
|
|
- if (uploadService.findLinkByBo(bo).size() > 1){
|
|
|
+ String bo = StringUtils.substringBefore(reqId, "-");
|
|
|
+ if (uploadService.findLinkByBo(bo).size() > 1) {
|
|
|
log.info("关联数据START...");
|
|
|
- Map<String,Object> linkMap = matchMap(matchMap,fileType,reqId,ocr,sourceData);
|
|
|
+ Map<String, Object> linkMap = matchMap(matchMap, fileType, reqId, ocr, sourceData);
|
|
|
// todo ghj link数据部分也要新增类型三的findRecomInfo()数据。已补充。
|
|
|
log.info("link:{}", JSON.toJSONString(linkMap));
|
|
|
String matchRes = internalSendService.link(linkMap);
|
|
@@ -606,8 +687,8 @@ public class OcrServiceImpl implements OcrService {
|
|
|
ocr, JSON.parseObject(matchRes));
|
|
|
return resData;
|
|
|
}
|
|
|
- matchMap = matchMap(matchMap,fileType,reqId,ocr,sourceData);
|
|
|
- log.info("match pre:{}",JSON.toJSONString(matchMap));
|
|
|
+ matchMap = matchMap(matchMap, fileType, reqId, ocr, sourceData);
|
|
|
+ log.info("match pre:{}", JSON.toJSONString(matchMap));
|
|
|
String matchRes = internalSendService.match(matchMap);
|
|
|
ResData resData = ParseUtils.parseRes(reqId, fileType, JSON.parseObject(sourceData),
|
|
|
ocr, JSON.parseObject(matchRes));
|