|
@@ -6,10 +6,13 @@ import com.fs.aiTongueApi.config.AiTongueConfig;
|
|
|
import com.fs.aiTongueApi.domain.AITongueResult;
|
|
|
import com.fs.aiTongueApi.domain.QueryAiTongue;
|
|
|
import com.fs.aiTongueApi.domain.QueryQuanXi;
|
|
|
-import com.fs.aiTongueApi.domain.inner.ConfidenceData;
|
|
|
-import com.fs.aiTongueApi.domain.inner.TongueData;
|
|
|
+import com.fs.aiTongueApi.domain.enums.TongueTypeEnums;
|
|
|
+import com.fs.aiTongueApi.domain.inner.*;
|
|
|
import com.fs.aiTongueApi.service.AiTongueService;
|
|
|
import com.fs.common.utils.uuid.UUID;
|
|
|
+import com.fs.his.domain.FsHealthTongue;
|
|
|
+import com.fs.his.service.IFsHealthTongueService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.hc.core5.net.URIBuilder;
|
|
|
import org.apache.http.HttpEntity;
|
|
|
import org.apache.http.HttpResponse;
|
|
@@ -20,6 +23,8 @@ import org.apache.http.entity.StringEntity;
|
|
|
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
|
|
import org.apache.http.impl.client.HttpClients;
|
|
|
import org.apache.http.util.EntityUtils;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.InputStream;
|
|
@@ -27,9 +32,18 @@ import java.net.URI;
|
|
|
import java.net.URL;
|
|
|
import java.nio.charset.Charset;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class AiTongueServiceImpl implements AiTongueService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IFsHealthTongueService tongueService;
|
|
|
+
|
|
|
@Override
|
|
|
public AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue) {
|
|
|
queryAiTongue.setAppkey(AiTongueConfig.appKey);
|
|
@@ -108,6 +122,177 @@ public class AiTongueServiceImpl implements AiTongueService {
|
|
|
return aiTongueResult;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public AITongueResult<FsHealthTongue> newCheckTongue(String url) {
|
|
|
+ String s="";
|
|
|
+ try {
|
|
|
+ HttpClient httpClient = HttpClients.createDefault();
|
|
|
+ HttpPost httpPost = new HttpPost(AiTongueConfig.newCheckTongue);
|
|
|
+ MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
|
|
+ URL urlItem = new URL(url);
|
|
|
+ InputStream inputStream =urlItem.openStream();
|
|
|
+ // 添加文件或表单参数
|
|
|
+ builder.addBinaryBody("file", inputStream, ContentType.DEFAULT_BINARY, "图片.jpg");
|
|
|
+
|
|
|
+ HttpEntity multipart = builder.build();
|
|
|
+ httpPost.setEntity(multipart);
|
|
|
+ // 执行请求
|
|
|
+ HttpResponse response = httpClient.execute(httpPost);
|
|
|
+ String responseBody = EntityUtils.toString(response.getEntity());
|
|
|
+ log.info(responseBody);
|
|
|
+ s=responseBody;
|
|
|
+
|
|
|
+ AITongueResult<List<List<ConfidenceDataNew>>> aiTongueResult = JSON.parseObject(s, new TypeReference<AITongueResult<List<List<ConfidenceDataNew>>>>(){});
|
|
|
+ List<List<ConfidenceDataNew>> data = aiTongueResult.getData();
|
|
|
+ FsHealthTongue healthTongue = new FsHealthTongue();
|
|
|
+ if (data != null && !data.isEmpty()){
|
|
|
+ String boTaiDesc = "舌未见剥落提示脏腑气充足,胃阴正常,气阴平衡。";
|
|
|
+ String chiHenDesc = "舌未见齿痕表示脾气正常。";
|
|
|
+ String lieWenDesc = "舌未见裂纹表示脏腑津液正常。";
|
|
|
+ String houDu;
|
|
|
+ TongueInfo tongueInfo = new TongueInfo();
|
|
|
+ for (int i = 0; i < 4; i++) {
|
|
|
+ List<ConfidenceDataNew> confidenceDataNews = data.get(i);
|
|
|
+ if (confidenceDataNews != null && !confidenceDataNews.isEmpty()){
|
|
|
+ Optional<ConfidenceDataNew> oldestPerson = confidenceDataNews.stream()
|
|
|
+ .max(Comparator.comparingDouble(p -> Double.parseDouble(p.getVal())));
|
|
|
+ ConfidenceDataNew confidenceDataNew = oldestPerson.get();
|
|
|
+
|
|
|
+ healthTongue.setTongueUrl(url);
|
|
|
+ if(i == 0){
|
|
|
+ switch (confidenceDataNew.getLabel()){
|
|
|
+ case "01":
|
|
|
+ healthTongue.setShemianName("鲜红舌");
|
|
|
+ break;
|
|
|
+ case "02":
|
|
|
+ healthTongue.setShemianName("淡白舌");
|
|
|
+ break;
|
|
|
+ case "03":
|
|
|
+ healthTongue.setShemianName("淡红舌");
|
|
|
+ break;
|
|
|
+ case "04":
|
|
|
+ healthTongue.setShemianName("紫舌");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ String sheZhi = TongueTypeEnums.fromCategoryAndCode("SheZhi", confidenceDataNew.getLabel());
|
|
|
+ healthTongue.setShemianDesc(sheZhi);
|
|
|
+ //设置舌质
|
|
|
+ tongueInfo.setShemianName(healthTongue.getShemianName());
|
|
|
+ }
|
|
|
+ if(i == 1){
|
|
|
+ switch (confidenceDataNew.getLabel()){
|
|
|
+ case "01":
|
|
|
+ healthTongue.setTaiseName("黄苔");
|
|
|
+ break;
|
|
|
+ case "02":
|
|
|
+ healthTongue.setTaiseName("灰苔");
|
|
|
+ break;
|
|
|
+ case "03":
|
|
|
+ healthTongue.setTaiseName("白苔");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ String taiSe = TongueTypeEnums.fromCategoryAndCode("TaiSe", confidenceDataNew.getLabel());
|
|
|
+ healthTongue.setTaiseDesc(taiSe);
|
|
|
+ //设置苔色
|
|
|
+ tongueInfo.setTaiseName(healthTongue.getTaiseName());
|
|
|
+ }
|
|
|
+ if(i == 2){
|
|
|
+ switch (confidenceDataNew.getLabel()){
|
|
|
+ case "01":
|
|
|
+ healthTongue.setBotai(1L);
|
|
|
+ String boTai = TongueTypeEnums.fromCategoryAndCode("Xing", "01");
|
|
|
+ healthTongue.setBotaiDesc(boTai);
|
|
|
+ //设置是否剥脱 0正常 1剥脱
|
|
|
+ tongueInfo.setBotai(1);
|
|
|
+
|
|
|
+ healthTongue.setChihen(0L);
|
|
|
+ healthTongue.setChihenDesc(chiHenDesc);
|
|
|
+ healthTongue.setLiewen(0);
|
|
|
+ healthTongue.setLiewenDesc(lieWenDesc);
|
|
|
+ break;
|
|
|
+ case "02":
|
|
|
+ healthTongue.setBotai(0L);
|
|
|
+ healthTongue.setBotaiDesc(boTaiDesc);
|
|
|
+ //设置是否剥脱 0正常 1剥脱
|
|
|
+ tongueInfo.setBotai(0);
|
|
|
+
|
|
|
+ healthTongue.setChihen(1L);
|
|
|
+ String chiHen = TongueTypeEnums.fromCategoryAndCode("Xing", "02");
|
|
|
+ healthTongue.setChihenDesc(chiHen);
|
|
|
+ healthTongue.setLiewen(0);
|
|
|
+ healthTongue.setLiewenDesc(lieWenDesc);
|
|
|
+ break;
|
|
|
+ case "03":
|
|
|
+ healthTongue.setBotai(0L);
|
|
|
+ healthTongue.setBotaiDesc(boTaiDesc);
|
|
|
+ //设置是否剥脱 0正常 1剥脱
|
|
|
+ tongueInfo.setBotai(0);
|
|
|
+
|
|
|
+ healthTongue.setChihen(0L);
|
|
|
+ healthTongue.setChihenDesc(chiHenDesc);
|
|
|
+ healthTongue.setLiewen(1);
|
|
|
+ String lieWen = TongueTypeEnums.fromCategoryAndCode("Xing", "03");
|
|
|
+ healthTongue.setLiewenDesc(lieWen);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(i == 3){
|
|
|
+ switch (confidenceDataNew.getLabel()){
|
|
|
+ case "01":
|
|
|
+ //厚
|
|
|
+ houDu = TongueTypeEnums.fromCategoryAndCode("HouDu", "01");
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ //薄
|
|
|
+ houDu = TongueTypeEnums.fromCategoryAndCode("HouDu", "02");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //设置厚度
|
|
|
+ tongueInfo.setHoudu(houDu);
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ //形状相关的为空就将这几个值置为0(表示正常)
|
|
|
+ if(i == 2){
|
|
|
+ healthTongue.setBotai(0L);
|
|
|
+ healthTongue.setBotaiDesc(boTaiDesc);
|
|
|
+ //设置是否剥脱 0正常 1剥脱
|
|
|
+ tongueInfo.setBotai(0);
|
|
|
+
|
|
|
+ healthTongue.setChihen(0L);
|
|
|
+ healthTongue.setChihenDesc(chiHenDesc);
|
|
|
+ healthTongue.setLiewen(0);
|
|
|
+ healthTongue.setLiewenDesc(lieWenDesc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ TongueInfo fastTongueInfo = tongueService.selectFsTongueInfo(tongueInfo);
|
|
|
+ if(fastTongueInfo != null && fastTongueInfo.getTypeName() != null){
|
|
|
+ healthTongue.setTypeName(fastTongueInfo.getTypeName());
|
|
|
+ healthTongue.setTypeJson(fastTongueInfo.getTypeJson());
|
|
|
+ return getAiTongueResult(healthTongue,"40001","ok");
|
|
|
+ }
|
|
|
+ return getAiTongueResult(healthTongue,"40003","未检测到舌头,请按照要求查询拍照检测");
|
|
|
+ }
|
|
|
+ return getAiTongueResult(healthTongue,"40003","未能从服务器获取结果,请稍后再试");
|
|
|
+ } catch (Exception e) {
|
|
|
+ return getAiTongueResult(null,"40003","请求频繁,请稍后再试");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static @NotNull AITongueResult<FsHealthTongue> getAiTongueResult(FsHealthTongue healthTongue, String code, String msg) {
|
|
|
+ AITongueResult<FsHealthTongue> result = new AITongueResult<>();
|
|
|
+ result.setData(healthTongue);
|
|
|
+ result.setCode(code);
|
|
|
+ meta meta = new meta();
|
|
|
+ meta.setCode(code);
|
|
|
+ meta.setMsg(msg);
|
|
|
+ meta.setTimestamp(String.valueOf(new Date()));
|
|
|
+ result.setMeta(meta);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
public String sendPost(String url,Object param){
|
|
|
HttpClient httpClient = HttpClients.createDefault();
|