|
|
@@ -39,6 +39,7 @@ import org.springframework.http.HttpEntity;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.http.MediaType;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.LinkedMultiValueMap;
|
|
|
import org.springframework.util.MultiValueMap;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
@@ -48,6 +49,8 @@ import java.io.File;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.io.OutputStream;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
import java.util.*;
|
|
|
import static com.zd.alg.forward.utils.HttpUtils.*;
|
|
|
|
|
|
@@ -128,25 +131,56 @@ public class CheckService {
|
|
|
for (String code : checkItem) {
|
|
|
//========= 获取算法INFO ===========
|
|
|
AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
|
|
|
- MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
|
|
|
- HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
|
|
|
+
|
|
|
//添加一条算法请求记录
|
|
|
R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
|
|
|
logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
|
|
|
- ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
|
|
|
- //算法记录更新
|
|
|
- if (alg.getCode() == 200) {
|
|
|
- updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, send);
|
|
|
- logger.info("【调用算法服务】 更新算法调用日志记录");
|
|
|
- }
|
|
|
- //判断算法
|
|
|
- if (send == null || send.getStatus_code() != 1000) {
|
|
|
- assert send != null;
|
|
|
- logger.error("【调用算法服务】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
|
|
|
- return R.fail("算法服务错误,请重试!");
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ long status_code = 0;
|
|
|
+ //V5
|
|
|
+ if (algorithmYml.getPlatform() == null || "V5".equals(algorithmYml.getPlatform())) {
|
|
|
+ logger.info("【调用算法服务V5】 进入调用...........");
|
|
|
+ MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
|
|
|
+ HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile,"image", params);
|
|
|
+ ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
|
|
|
+ //算法记录更新
|
|
|
+ if (alg.getCode() == 200) {
|
|
|
+ updateRequestRecordLogV5(alg.getData() != null?Long.valueOf(alg.getData()+""):null, send);
|
|
|
+ logger.info("【调用算法服务V5】 更新算法调用日志记录");
|
|
|
+ }
|
|
|
+ //判断算法
|
|
|
+ if (send == null || send.getStatus_code() != 1000) {
|
|
|
+ assert send != null;
|
|
|
+ logger.error("【调用算法服务V5】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
|
|
|
+ return R.fail("算法服务错误,请重试!");
|
|
|
+ }
|
|
|
+ AnalysisReturnData data = send.getData();
|
|
|
+ result = (Map<String, Object>) data.getResult();
|
|
|
+ status_code = send.getStatus_code();
|
|
|
+ } else {
|
|
|
+ //V6
|
|
|
+ logger.info("【调用算法服务V6】 进入调用...........");
|
|
|
+ MultiValueMap<String, Object> params = generateParamsForV6(checkValid, String.valueOf(id));
|
|
|
+ HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile,"file", params);
|
|
|
+ ImgPostResponse<DataPostAnalysisRespDto> send = HttpUtils.send(restTemplateLocal, files, algorithmYml);
|
|
|
+ //logger.info("【调用算法服务V6】 响应结果: \n", JSONObject.toJSONString(send));
|
|
|
+ //算法记录更新
|
|
|
+ if (alg.getCode() == 200) {
|
|
|
+ updateRequestRecordLogV6(alg.getData() != null?Long.valueOf(alg.getData()+""):null, send);
|
|
|
+ logger.info("【调用算法服务V6】 更新算法调用日志记录");
|
|
|
+ }
|
|
|
+ //判断算法
|
|
|
+ if (send == null || send.getStatus_code() != 1000) {
|
|
|
+ assert send != null;
|
|
|
+ logger.error("【调用算法服务v6】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
|
|
|
+ return R.fail("算法服务错误,请重试!");
|
|
|
+ }
|
|
|
+ DataPostAnalysisRespDto data = send.getData();
|
|
|
+ result = (Map<String, Object>) data.getAnalysisDatas().get(0).getResult();
|
|
|
+ status_code = send.getStatus_code();
|
|
|
}
|
|
|
- AnalysisReturnData data = send.getData();
|
|
|
- Map<String, Object> result = (Map<String, Object>) data.getResult();
|
|
|
+ //AnalysisReturnData data = send.getData();
|
|
|
+ //Map<String, Object> result = (Map<String, Object>) data.getResult();
|
|
|
Map<String, Object> algorithmData = (Map<String, Object>) result.get("algorithm_data");
|
|
|
Map<String, Object> modelResult = (Map<String, Object>) result.get("model_data");
|
|
|
List<Map<String, Object>> objects = (List<Map<String, Object>>) modelResult.get("objects");
|
|
|
@@ -169,7 +203,7 @@ public class CheckService {
|
|
|
}
|
|
|
return R.fail(300, "算法识别未通过", code);
|
|
|
}
|
|
|
- Boolean f = send.getStatus_code() == 1000;
|
|
|
+ Boolean f = status_code == 1000;
|
|
|
String msg = f ? "解析成功!" : "解析失败!";
|
|
|
send(code, id, f, msg);
|
|
|
}
|
|
|
@@ -183,6 +217,21 @@ public class CheckService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 算法V6平台参数
|
|
|
+ * @param checkValid
|
|
|
+ * @param extension
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static MultiValueMap<String, Object> generateParamsForV6(AlgorithmYml.CheckValid checkValid, String extension) {
|
|
|
+ MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
|
|
|
+ form.add("sync", 1);
|
|
|
+ form.add("timeStamp", LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli() / 1000);
|
|
|
+ form.add("extension", extension);
|
|
|
+ form.add("algoId", checkValid.getAlgoId());
|
|
|
+ form.add("did", checkValid.getDid());
|
|
|
+ return form;
|
|
|
+ }
|
|
|
+ /**
|
|
|
* 添加日志记录
|
|
|
* @param fileUrl
|
|
|
* @param subId
|
|
|
@@ -201,19 +250,19 @@ public class CheckService {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 算法调用日志更新
|
|
|
+ * 算法调用日志更新V5
|
|
|
* @param id
|
|
|
* @param send
|
|
|
*/
|
|
|
- private void updateRequestRecordLog(Long id,ImgPostResponse<AnalysisReturnData> send) {
|
|
|
+ private void updateRequestRecordLogV5(Long id,ImgPostResponse<AnalysisReturnData> send) {
|
|
|
Algorithm algorithm = new Algorithm();
|
|
|
algorithm.setId(id);
|
|
|
//请求成功
|
|
|
if (send != null && send.getStatus_code() == 1000) {
|
|
|
- AnalysisReturnData data = send.getData();
|
|
|
+ AnalysisReturnData data = send.getData();
|
|
|
//识别后的图片
|
|
|
String picture = data.getRet_image();
|
|
|
- String header = "data:image/jpeg;base64,"+picture;
|
|
|
+ String header = "data:image/jpeg;base64," + picture;
|
|
|
MultipartFile multipartFile = Base64DecodedMultipartFile.base64ToMultipart(header);
|
|
|
R<SysFile> sysFileR = remoteFileService.upload(multipartFile);
|
|
|
String imageUrl = sysFileR.getData().getUrl();
|
|
|
@@ -221,13 +270,13 @@ public class CheckService {
|
|
|
//识别id
|
|
|
algorithm.setSignId(Long.parseLong(data.getCid()));
|
|
|
//是否报警
|
|
|
- Map<String, Object> result =(Map<String, Object>)data.getResult();
|
|
|
+ Map<String, Object> result = (Map<String, Object>) data.getResult();
|
|
|
Map<String, Object> algorithmData = (Map<String, Object>) result.get("algorithm_data");
|
|
|
Map<String, Object> modelResult = (Map<String, Object>) result.get("model_data");
|
|
|
List<Map<String, Object>> objects = (List<Map<String, Object>>) modelResult.get("objects");
|
|
|
- if(algorithmData.getOrDefault("is_alert", "").toString().equals("false")){
|
|
|
+ if (algorithmData.getOrDefault("is_alert", "").toString().equals("false")) {
|
|
|
algorithm.setIsAlarm(0);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
algorithm.setIsAlarm(1);
|
|
|
}
|
|
|
algorithm.setStatus(1);
|
|
|
@@ -259,6 +308,76 @@ public class CheckService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 算法调用日志更新V5
|
|
|
+ * @param id
|
|
|
+ * @param send
|
|
|
+ */
|
|
|
+ private void updateRequestRecordLogV6(Long id,ImgPostResponse<DataPostAnalysisRespDto> send) {
|
|
|
+ try {
|
|
|
+ Algorithm algorithm = new Algorithm();
|
|
|
+ algorithm.setId(id);
|
|
|
+ //请求成功
|
|
|
+ if (send != null && send.getStatus_code() == 1000) {
|
|
|
+ DataPostAnalysisRespDto analysisRespDto = send.getData();
|
|
|
+ List<AnalysisData> analysisDatas = analysisRespDto.getAnalysisDatas();
|
|
|
+ if (!analysisDatas.isEmpty() && analysisDatas.size() > 0) {
|
|
|
+ AnalysisData data = analysisDatas.get(0);
|
|
|
+ if (StringUtils.isNotEmpty(data.getRet_image())) {
|
|
|
+ String header = "data:image/jpeg;base64," + data.getRet_image();
|
|
|
+ MultipartFile multipartFile = Base64DecodedMultipartFile.base64ToMultipart(header);
|
|
|
+ //识别后的图片
|
|
|
+ R<SysFile> sysFileR = remoteFileService.upload(multipartFile);
|
|
|
+ String imageUrl = sysFileR.getData().getUrl();
|
|
|
+ algorithm.setAlgorithmResult(imageUrl);
|
|
|
+ }
|
|
|
+ //识别id
|
|
|
+ algorithm.setSignId(Long.parseLong(analysisRespDto.getAid()+""));
|
|
|
+ //是否报警
|
|
|
+ if (data.getResult() != null) {
|
|
|
+ Map<String, Object> result =(Map<String, Object>)data.getResult();
|
|
|
+ Map<String, Object> algorithmData = (Map<String, Object>) result.get("algorithm_data");
|
|
|
+ Map<String, Object> modelResult = (Map<String, Object>) result.get("model_data");
|
|
|
+ List<Map<String, Object>> objects = (List<Map<String, Object>>) modelResult.get("objects");
|
|
|
+ if(algorithmData.getOrDefault("is_alert", "").toString().equals("false") && objects.size() > 0){
|
|
|
+ algorithm.setIsAlarm(0);
|
|
|
+ }else{
|
|
|
+ algorithm.setIsAlarm(1);
|
|
|
+ }
|
|
|
+ algorithm.setStatus(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ algorithm.setStatus(0);
|
|
|
+ }
|
|
|
+ //存原始数据
|
|
|
+ if (send != null) {
|
|
|
+ if (send.getData() != null) {
|
|
|
+ DataPostAnalysisRespDto respData = send.getData();
|
|
|
+ if (respData.getAnalysisDatas() != null && respData.getAnalysisDatas().size() > 0) {
|
|
|
+ List<AnalysisData> list = respData.getAnalysisDatas();
|
|
|
+ list.stream().forEach(a -> {
|
|
|
+ a.setRet_image("");
|
|
|
+ a.setSrc_image("");
|
|
|
+ });
|
|
|
+ }
|
|
|
+ algorithm.setRespData(JSONObject.toJSONString(respData));
|
|
|
+ } else {
|
|
|
+ algorithm.setRespData(JSONObject.toJSONString(send));
|
|
|
+ }
|
|
|
+ algorithm.setRespCode(send.getStatus_code());
|
|
|
+ } else {
|
|
|
+ algorithm.setRespCode(0L);
|
|
|
+ algorithm.setRespData("算法服务未响应");
|
|
|
+ }
|
|
|
+ algorithm.setUpdateTime(new Date());
|
|
|
+ //logger.info("【算法服务】 更新日志实体信息:"+JSONObject.toJSONString(algorithm));
|
|
|
+ laboratoryService.update(algorithm);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.info("【调用算法服务V6】 更新日志异常,", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* @param id 进出记录ID
|
|
|
*/
|
|
|
public R checkAndCommit(String code, MultipartFile file, Long id) {
|