1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

#76 enable fetch vacant chatbots

This commit is contained in:
Hai Liang Wang 2018-09-12 09:56:56 +08:00
parent 7bc572ae2e
commit b4dbc68109
5 changed files with 191 additions and 118 deletions

View File

@ -22,6 +22,8 @@ import com.chatopera.cc.webim.web.model.SNSAccount;
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;
public abstract interface SNSAccountRepository
extends JpaRepository<SNSAccount, String>
@ -43,4 +45,10 @@ public abstract interface SNSAccountRepository
public abstract List<SNSAccount> findBySnstype(String snsType);
public abstract Page<SNSAccount> findBySnstypeAndOrgi(String paramString ,String orgi, Pageable page);
@Query(value = "select s from SNSAccount s where " +
"(:orgi is null or s.orgi = :orgi) and " +
"(:snsType is null or s.snstype = :snsType) and " +
"(:myorgans is null or s.organ IN :myorgans)")
public List<SNSAccount> findBySnstypeAndOrgiAndOrgans(@Param("snsType") String snsType, @Param("orgi") String orgi, @Param("myorgans") List<String> organs);
}

View File

@ -16,17 +16,19 @@
*/
package com.chatopera.cc.webim.web.handler.admin.channel;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import com.chatopera.cc.core.UKDataContext;
import com.chatopera.cc.util.Base62;
import com.chatopera.cc.util.Menu;
import com.chatopera.cc.util.UKTools;
import com.chatopera.cc.webim.service.repository.ConsultInviteRepository;
import com.chatopera.cc.webim.service.repository.OrganRepository;
import com.chatopera.cc.webim.service.repository.SNSAccountRepository;
import com.chatopera.cc.webim.service.repository.SecretRepository;
import com.chatopera.cc.webim.web.handler.Handler;
import com.chatopera.cc.webim.web.model.CousultInvite;
import com.chatopera.cc.webim.web.model.SNSAccount;
import com.chatopera.cc.webim.web.model.Secret;
import com.chatopera.cc.webim.web.model.User;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
@ -35,13 +37,11 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.chatopera.cc.core.UKDataContext;
import com.chatopera.cc.util.Base62;
import com.chatopera.cc.util.UKTools;
import com.chatopera.cc.webim.service.repository.ConsultInviteRepository;
import com.chatopera.cc.webim.service.repository.SNSAccountRepository;
import com.chatopera.cc.webim.web.handler.Handler;
import com.chatopera.cc.webim.web.model.Secret;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.List;
/**
*
@ -60,6 +60,9 @@ public class SNSAccountIMController extends Handler{
@Autowired
private SecretRepository secRes;
@Autowired
private OrganRepository organRes;
@RequestMapping("/index")
@Menu(type = "admin", subtype = "im", access = false, admin = true)
public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String execute) {
@ -90,6 +93,12 @@ public class SNSAccountIMController extends Handler{
snsAccount.setOrgi(super.getOrgi(request));
snsAccount.setSnstype(UKDataContext.ChannelTypeEnum.WEBIM.toString());
snsAccount.setCreatetime(new Date());
User curr = super.getUser(request);
snsAccount.setCreater(curr.getId());
if (curr.getOrgan() != null) {
snsAccount.setOrgan(curr.getOrgan());
}
snsAccountRes.save(snsAccount);
/**
@ -102,6 +111,7 @@ public class SNSAccountIMController extends Handler{
coultInvite.setCreate_time(new Date());
coultInvite.setOrgi(super.getOrgi(request));
coultInvite.setName(snsAccount.getName());
coultInvite.setOwner(snsAccount.getCreater());
invite.save(coultInvite);
}
}

View File

@ -23,10 +23,7 @@ import com.chatopera.cc.webim.util.OnlineUserUtils;
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.CousultInvite;
import com.chatopera.cc.webim.web.model.Organ;
import com.chatopera.cc.webim.web.model.User;
import com.chatopera.cc.webim.web.model.*;
import com.chatopera.chatbot.ChatbotAPI;
import com.chatopera.chatbot.ChatbotAPIRuntimeException;
import com.google.gson.JsonArray;
@ -56,6 +53,7 @@ import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@RestController
@RequestMapping("/api/chatbot")
@ -114,6 +112,9 @@ public class ApiChatbotController extends Handler {
case "disable":
json = enable(j, false);
break;
case "vacant":
json = vacant(j, curruser.getOrgi(), curruser.isSuperuser(), curruser.getMyorgans());
break;
default:
json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2);
json.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的操作。");
@ -122,6 +123,40 @@ public class ApiChatbotController extends Handler {
return new ResponseEntity<String>(json.toString(), headers, HttpStatus.OK);
}
/**
* 获取空缺聊天机器人的网站渠道列表
*
* @param j
* @param orgi
* @param myorgans
* @return
*/
private JsonObject vacant(final JsonObject j, String orgi, boolean isSuperuser, final HashSet<String> myorgans) {
JsonObject resp = new JsonObject();
if ((!isSuperuser) && (myorgans == null || myorgans.size() == 0)) {
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC);
resp.addProperty(RestUtils.RESP_KEY_ERROR, "您还未属于任何【部门】,不具有访问该资源的权限。");
return resp;
}
List<SNSAccount> records = snsAccountRes.findBySnstypeAndOrgiAndOrgans(ChatbotUtils.SNS_TYPE_WEBIM, orgi, myorgans != null ? new ArrayList<String>(myorgans) : null);
JsonArray ja = new JsonArray();
for (SNSAccount r : records) {
if (!chatbotRes.existsBySnsAccountIdentifierAndOrgi(r.getSnsid(), orgi)) {
JsonObject o = new JsonObject();
o.addProperty("id", r.getId());
o.addProperty("snsid", r.getSnsid());
o.addProperty("snsType", r.getSnstype());
ja.add(o);
}
}
resp.add("data", ja);
resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC);
return resp;
}
/**
* Enable Chatbot
*

View File

@ -76,6 +76,8 @@ public class SNSAccount{
private boolean defaultaccount ;
private String moreparam ; //改变用处用于记录 爬虫的 爬取位置(微博)/如果是微信记录Secret
private String orgi ;
private String organ;
private String creater;
private String lastatupdate ;
private String lastprimsgupdate ;
@ -331,4 +333,20 @@ public class SNSAccount{
public void setBaseURL(String baseURL) {
this.baseURL = baseURL;
}
public String getOrgan() {
return organ;
}
public void setOrgan(String organ) {
this.organ = organ;
}
public String getCreater() {
return creater;
}
public void setCreater(String creater) {
this.creater = creater;
}
}

View File

@ -3411,6 +3411,8 @@ CREATE TABLE `uk_snsaccount` (
`SESSIONKEY` varchar(255) DEFAULT NULL COMMENT '会话Key',
`MOREPARAM` varchar(255) DEFAULT NULL COMMENT '更多参数',
`ORGI` varchar(255) DEFAULT NULL COMMENT '租户ID',
`ORGAN` varchar(32) DEFAULT NULL COMMENT '组织机构ID',
`CREATER` varchar(32) DEFAULT NULL COMMENT '创建人ID',
`DEFAULTACCOUNT` smallint(6) DEFAULT NULL COMMENT '默认账号',
`lastatupdate` varchar(96) DEFAULT NULL COMMENT '最后更新时间',
`lastprimsgupdate` varchar(96) DEFAULT NULL,