From c1c73d01d337b52cd173f9a81f86130db82121da Mon Sep 17 00:00:00 2001 From: Hai Liang Wang Date: Tue, 11 Sep 2018 01:38:30 +0800 Subject: [PATCH] =?UTF-8?q?#74=20=E6=94=AF=E6=8C=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=81=8A=E5=A4=A9=E6=9C=BA=E5=99=A8=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/repository/ChatbotRepository.java | 11 +++ .../api/rest/ApiChatbotController.java | 83 +++++++++++++++++++ .../Chatopera_cc_v1.postman_collection.json | 33 ++++++++ 3 files changed, 127 insertions(+) diff --git a/contact-center/app/src/main/java/com/chatopera/cc/webim/service/repository/ChatbotRepository.java b/contact-center/app/src/main/java/com/chatopera/cc/webim/service/repository/ChatbotRepository.java index b9db054c..831ff212 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/webim/service/repository/ChatbotRepository.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/webim/service/repository/ChatbotRepository.java @@ -1,10 +1,21 @@ package com.chatopera.cc.webim.service.repository; import com.chatopera.cc.webim.web.model.Chatbot; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; public abstract interface ChatbotRepository extends JpaRepository { public abstract boolean existsByChatbotIDAndOrgi(String chatbotID, String orgi); + public abstract boolean existsBySnsAccountIdentifierAndOrgi(String snsid, String orgi); + + @Query(value = "select c from Chatbot c where " + + "(:myorgans is null or c.organ IN :myorgans)") + public Page findByOrgans(@Param("myorgans") List myorgans, Pageable pageRequest); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/api/rest/ApiChatbotController.java b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/api/rest/ApiChatbotController.java index 158feeb6..d828757e 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/api/rest/ApiChatbotController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/webim/web/handler/api/rest/ApiChatbotController.java @@ -19,14 +19,18 @@ import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.UKTools; import com.chatopera.cc.util.exception.CallOutRecordException; import com.chatopera.cc.webim.service.repository.ChatbotRepository; +import com.chatopera.cc.webim.service.repository.OrganRepository; import com.chatopera.cc.webim.service.repository.SNSAccountRepository; +import com.chatopera.cc.webim.service.repository.UserRepository; import com.chatopera.cc.webim.util.chatbot.ChatbotUtils; import com.chatopera.cc.webim.web.handler.Handler; import com.chatopera.cc.webim.web.handler.api.request.RestUtils; import com.chatopera.cc.webim.web.model.Chatbot; +import com.chatopera.cc.webim.web.model.Organ; import com.chatopera.cc.webim.web.model.User; import com.chatopera.chatbot.ChatbotAPI; import com.chatopera.chatbot.ChatbotAPIRuntimeException; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import io.swagger.annotations.Api; @@ -37,6 +41,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -47,7 +54,9 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.net.MalformedURLException; +import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; @RestController @RequestMapping("/api/chatbot") @@ -64,6 +73,12 @@ public class ApiChatbotController extends Handler { @Autowired private SNSAccountRepository snsAccountRes; + @Autowired + private UserRepository userRes; + + @Autowired + private OrganRepository organRes; + @RequestMapping(method = RequestMethod.POST) @Menu(type = "apps", subtype = "chatbot", access = true) @ApiOperation("聊天机器人") @@ -85,6 +100,9 @@ public class ApiChatbotController extends Handler { case "delete": json = delete(j, curruser.getId(), curruser.getOrgan(), curruser.getOrgi()); break; + case "fetch": + json = fetch(j, curruser.getId(), curruser.isSuperuser(), curruser.getMyorgans(), curruser.getOrgi(), super.getP(request), super.getPs(request)); + break; default: json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2); json.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的操作。"); @@ -93,8 +111,73 @@ public class ApiChatbotController extends Handler { return new ResponseEntity(json.toString(), headers, HttpStatus.OK); } + /** + * 获取聊天机器人列表 + * + * @param j + * @param id + * @param myorgans + * @param orgi + * @param p + * @param ps + * @return + */ + private JsonObject fetch(JsonObject j, String id, boolean isSuperuser, HashSet myorgans, String orgi, int p, int ps) { + JsonObject resp = new JsonObject(); + if (isSuperuser) { + myorgans = null; + } else if (myorgans.size() == 0) { + resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_3); + resp.addProperty(RestUtils.RESP_KEY_ERROR, "当前登录用户未分配到任何部门并且不是管理员,无权访问机器人客服资源。"); + return resp; + } + + Page records = chatbotRes.findByOrgans( myorgans != null? new ArrayList(myorgans) : null, new PageRequest(p, ps, Sort.Direction.DESC, new String[]{"createtime"})); + + JsonArray ja = new JsonArray(); + for (Chatbot c : records) { + JsonObject o = new JsonObject(); + o.addProperty("id", c.getId()); + o.addProperty("name", c.getName()); + o.addProperty("primaryLanguage", c.getPrimaryLanguage()); + o.addProperty("description", c.getDescription()); + o.addProperty("fallback", c.getFallback()); + o.addProperty("welcome", c.getWelcome()); + o.addProperty("workmode", c.getWorkmode()); + o.addProperty("channel", c.getChannel()); + o.addProperty("snsid", c.getSnsAccountIdentifier()); + o.addProperty("enabled", c.isEnabled()); + + // 创建人 + User user = userRes.findById(c.getCreater()); + if (user != null) { + o.addProperty("creater", c.getCreater()); + o.addProperty("creatername", user.getUname()); + } + + // 部门 + Organ g = organRes.findOne(c.getOrgan()); + if (g != null) { + o.addProperty("organ", c.getOrgan()); + o.addProperty("organname", g.getName()); + } + ja.add(o); + } + + resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC); + resp.add("data", ja); + resp.addProperty("size", records.getSize()); // 每页条数 + resp.addProperty("number", records.getNumber()); // 当前页 + resp.addProperty("totalPage", records.getTotalPages()); // 所有页 + resp.addProperty("totalElements", records.getTotalElements()); // 所有检索结果数量 + + return resp; + + } + /** * 删除聊天机器人 + * * @param j * @param uid * @param organ diff --git a/contact-center/config/postman/Chatopera_cc_v1.postman_collection.json b/contact-center/config/postman/Chatopera_cc_v1.postman_collection.json index 8cf9a428..546f257e 100644 --- a/contact-center/config/postman/Chatopera_cc_v1.postman_collection.json +++ b/contact-center/config/postman/Chatopera_cc_v1.postman_collection.json @@ -558,6 +558,39 @@ } }, "response": [] + }, + { + "name": "机器人客服:查询", + "request": { + "method": "POST", + "header": [ + { + "key": "authorization", + "value": "8b9567161da54400b994f141d119100b" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"ops\": \"fetch\"\n}" + }, + "url": { + "raw": "http://{{IP}}:{{PORT}}/api/chatbot", + "protocol": "http", + "host": [ + "{{IP}}" + ], + "port": "{{PORT}}", + "path": [ + "api", + "chatbot" + ] + } + }, + "response": [] } ], "event": [