anderx лет назад: 2
Родитель
Сommit
a3fd4e5709

+ 22 - 0
src/main/java/com/goafanti/baiduAI/controller/BaiduAiController.java

@@ -0,0 +1,22 @@
+package com.goafanti.baiduAI.controller;
+
+import com.goafanti.baiduAI.service.BaiduAiService;
+import com.goafanti.common.bo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping(value = "/chat")
+public class BaiduAiController {
+
+    @Autowired
+    private BaiduAiService baiduAiService;
+
+    @RequestMapping(value = "/send",method = RequestMethod.POST)
+    public Result sendChat(String str){
+        Result res =new Result();
+        return res.data(baiduAiService.sendChat(str));
+    }
+}

+ 7 - 0
src/main/java/com/goafanti/baiduAI/service/BaiduAiService.java

@@ -0,0 +1,7 @@
+package com.goafanti.baiduAI.service;
+
+public interface BaiduAiService {
+
+
+    String sendChat(String str);
+}

+ 66 - 0
src/main/java/com/goafanti/baiduAI/service/impl/BaiduAiServiceImpl.java

@@ -0,0 +1,66 @@
+package com.goafanti.baiduAI.service.impl;
+
+import com.goafanti.baiduAI.service.BaiduAiService;
+import com.goafanti.common.error.BusinessException;
+import com.goafanti.common.utils.HttpUtils;
+import com.goafanti.common.utils.RedisUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.Calendar;
+
+@Service
+public class BaiduAiServiceImpl implements BaiduAiService {
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+
+    @Override
+    public String sendChat(String str) {
+        String redisAccessToken = getRedisAccessToken();
+            String result = null;
+        try {
+            result=HttpUtils.sendBaiduAI(redisAccessToken);
+        } catch (IOException e) {
+            throw new BusinessException("文言一心调用失败");
+        }
+        return result;
+    }
+
+    private String  getRedisAccessToken() {
+
+        String redisTime=redisUtil.getString("baiduAccessTime");
+        if (redisTime !=null){
+            Calendar cal = Calendar.getInstance();
+            Long redisAccessTime=Long.valueOf(redisTime);
+            if (cal.getTimeInMillis()>redisAccessTime){
+                redisUtil.deleteString("baiduAccessToken");
+                redisUtil.deleteString("baiduAccessTime");
+            }else {
+                return  redisUtil.getString("baiduAccessToken");
+            }
+        }
+        return getBaiduAccessToken();
+    }
+
+    private String getBaiduAccessToken() {
+        String baiduAccessToken;
+        try {
+            baiduAccessToken = HttpUtils.getBaiduAccessToken();
+        } catch (IOException e) {
+            throw new BusinessException("baiduAccessToken获取失败");
+        }
+        //获取当前系统时间
+        Calendar cal = Calendar.getInstance();
+        //将时间增加三十天
+        cal.add(Calendar.DATE, 30);
+        //获取改变后的时间
+        Long baiduAccessTime= cal.getTimeInMillis();
+        redisUtil.setString("baiduAccessToken",baiduAccessToken);
+        redisUtil.setString("baiduAccessTime",baiduAccessTime.toString());
+        return baiduAccessToken;
+    }
+}

+ 5 - 0
src/main/java/com/goafanti/common/controller/PublicController.java

@@ -912,6 +912,11 @@ public class PublicController extends BaseController {
 		return res.data(str);
 	}
 
+
+
+
+
+
 	/**
 	 * 删除Html标签
 	 */

+ 48 - 0
src/main/java/com/goafanti/common/utils/HttpUtils.java

@@ -2,6 +2,7 @@ package com.goafanti.common.utils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import okhttp3.*;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.ParseException;
@@ -12,7 +13,10 @@ import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Value;
 
+import javax.crypto.SecretKey;
 import java.io.IOException;
 import java.nio.charset.Charset;
 import java.util.Map;
@@ -20,6 +24,15 @@ import java.util.Map;
 public class HttpUtils {
 
 
+	@Value(value = "${baidu.ApiKey}")
+	private static final String baiduApiKey=null;
+
+	@Value(value = "${baidu.SecretKey}")
+	private static final String baiduSecretKey=null;
+
+
+	static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
+
 
 	 public static JSONObject httpGet(String url) {
 			JSONObject jsonResult = null;
@@ -117,4 +130,39 @@ public class HttpUtils {
 		return resultString;
 	}
 
+
+
+
+	public static String  getBaiduAccessToken() throws IOException {
+				MediaType mediaType = MediaType.parse("application/json");
+				RequestBody body = RequestBody.create(mediaType, "");
+				StringBuffer url= new StringBuffer("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=")
+					.append(baiduApiKey).append("&client_secret=").append(baiduSecretKey);
+				Request request = new Request.Builder()
+						.url(url.toString())
+						.method("POST", body)
+						.addHeader("Content-Type", "application/json")
+						.addHeader("Accept", "application/json")
+						.build();
+				Response response = HTTP_CLIENT.newCall(request).execute();
+				String result=response.body().string();
+				System.out.println(result);
+				return result;
+	}
+
+	public static String sendBaiduAI(String accessToken) throws IOException{
+		MediaType mediaType = MediaType.parse("application/json");
+		RequestBody body = RequestBody.create(mediaType, "");
+		Request request = new Request.Builder()
+				.url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + accessToken)
+				.method("POST", body)
+				.addHeader("Content-Type", "application/json")
+				.build();
+		Response response = HTTP_CLIENT.newCall(request).execute();
+		String result=response.body().string();
+		System.out.println(result);
+		return result;
+	}
+
+
 }

+ 214 - 0
src/main/java/com/goafanti/common/utils/RedisUtil.java

@@ -0,0 +1,214 @@
+package com.goafanti.common.utils;
+
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+
+import java.io.*;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * redis辅助类
+ * @author
+ *
+ */
+@Component
+public class RedisUtil {
+	@Value(value = "${jedis.host}")
+	private  String host;
+	@Value(value = "${jedis.password}")
+	private  String pwd;
+	@Autowired
+	private  JedisPool pool;//创建代理对象
+
+
+	public static String SHIRO_SESSION="SHIRO_SESSION:";
+
+//	 /**
+//     * 初始化Redis连接池
+//     */
+//    public RedisUtil() {
+//    	if (pool==null) {
+//    		try {
+//    			JedisPoolConfig config = new JedisPoolConfig();
+//    			config.setBlockWhenExhausted(false);
+//    			config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
+//    			config.setJmxEnabled(true);
+//    			config.setJmxNamePrefix("pool");
+//    			config.setLifo(true);
+//    			config.setMaxIdle(8);
+//    			config.setMaxTotal(8);
+//    			config.setMaxWaitMillis(-1);
+//    			config.setMinEvictableIdleTimeMillis(1800000L);
+//    			config.setMinIdle(0);
+//    			config.setNumTestsPerEvictionRun(3);
+//    			config.setSoftMinEvictableIdleTimeMillis(1800000L);
+//    			config.setTestOnBorrow(false);
+//    			config.setTestWhileIdle(false);
+//    			config.setTimeBetweenEvictionRunsMillis(-1);
+//    			pool = new JedisPool(config, host, 6379, 10000, pwd);
+//    		} catch (Exception e) {
+//    			e.printStackTrace();
+//    		}
+//		}
+//    }
+
+
+
+	public boolean presence(String key){
+		Jedis jedis = pool.getResource();
+		boolean bool=true;
+		try {
+			bool =jedis.exists(key);//进行判断
+		}catch(Exception e){
+			e.printStackTrace();//输出错误信息
+		}finally {
+			jedis.close();//释放资源
+		}
+		return bool;
+	}
+	/**
+	 * 将缓存中数据进行反序列化
+	 * @param key
+	 * @param clazz
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public <T>List<T> getObject(String key,Class<T> clazz){
+		Jedis jedis = pool.getResource();
+		ByteArrayInputStream is=null;
+		ObjectInputStream ois=null;
+		try {
+			//将缓存中数据存入byte数组中
+			byte[] b = jedis.get(key.getBytes());
+			is= new ByteArrayInputStream(b);
+			ois = new ObjectInputStream(is);
+			return(List<T>)ois.readObject();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}finally{
+			try {
+				is.close();
+				ois.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			jedis.close();
+		}
+		return null;
+	}
+	/**
+	 * 将对象进行序列化存入redis中
+	 * @param object
+	 * @param key
+	 */
+	public void saveObject(Object object,String key){
+		Jedis jedis=pool.getResource();
+		ByteArrayOutputStream os=null;
+		ObjectOutputStream oos=null;
+		try {
+			os=new ByteArrayOutputStream();
+			oos =new ObjectOutputStream(os);
+			byte[] b=os.toByteArray();
+			JSON.toJSONString(b);
+			jedis.set(key.getBytes(), b);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}finally{
+			try {
+				os.close();
+				oos.close();
+			} catch (Exception e2) {
+				e2.printStackTrace();
+			}
+			jedis.close();
+		}
+	}
+	// 把List集合对象转换成json格式保存到指定的键中
+	public void saveJsonArray(Object object, String key) {
+		Jedis jedis = pool.getResource();
+		try {
+			// 格式化成Json字符串
+			String array = JSON.toJSONString(object);
+			jedis.set(key, array.toString()); // 存入缓存
+		} finally {
+			jedis.close();
+		}
+	}
+
+		public void setString(String key, String value) {
+			Jedis jedis = pool.getResource();
+			try {
+				jedis.set(key,value); // 存入缓存
+			} finally {
+				jedis.close();
+			}
+		}
+
+		public Set<String> keys(String key){
+			Jedis jedis = pool.getResource();
+			try {
+				return  jedis.keys(key);
+			} finally {
+				jedis.close();
+			}
+		}
+
+		public void deleteString(String key) {
+			Jedis jedis = pool.getResource();
+			try {
+				jedis.del(key);
+			} finally {
+				jedis.close();
+			}
+		}
+
+
+	public void deleteAid(String id) {
+		Jedis jedis = pool.getResource();
+		String str=new String();
+		try {
+			Set<String> set=jedis.keys(SHIRO_SESSION+"*");
+			for (String s : set) {
+				String value=getString(s);
+				if (value.contains(id)){
+					deleteString(s);
+					LoggerUtils.debug(this.getClass(),"清除缓存{%s,aid=%s}",s,id);
+				}
+			}
+		} finally {
+			jedis.close();
+		}
+	}
+
+		public String getString(String key) {
+			Jedis jedis = pool.getResource();
+			String str=new String();
+			try {
+				str=jedis.get(key);
+			} finally {
+				jedis.close();
+			}
+			return str;
+		}
+
+	// 通过键取出Json字符串并转换成 <T>这个T所指定的类型
+	public  <T> T getJsonArray(String key, Class<T> clazz) {
+		Jedis jedis = pool.getResource();
+		try {
+			String str = jedis.get(key);
+			// 把字符串转换回集合对象 clazz是指定的类型
+			return JSON.parseObject(str, clazz);
+		} finally {
+			jedis.close();
+		}
+	}
+
+}
+
+

+ 7 - 0
src/main/resources/props/config_local.properties

@@ -60,6 +60,13 @@ avatar.upload.host=//172.16.0.255:3000/upload
 upload.path=F:/data/public/upload
 upload.private.path=F:/data/private/upload
 
+#百度-技淘百问
+
+baidu.appID=33967565
+baidu.ApiKey=7UWsyLD5jPjK2i7HH4DpzETb
+baidu.SecretKey=ezkCpEarUNDquXWNp7ocwFCdbziEbDsK
+
+
 accessKey=LTAIqTgQLLwz252Z
 accessSecret=ICGuiUnqzaar7urw4zecVcJrJ1MHg9
 aesSecretKey=aft1234567890123

+ 1 - 0
src/main/resources/shiro_base_auth.ini

@@ -19,6 +19,7 @@
 /open/**=anon
 /favicon.ico=anon
 /static/**=anon
+/chat/**=anon
 /portal/**=device
 /api/portal/**=anon
 /api/admin/**=admin