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:
parent
7bc572ae2e
commit
b4dbc68109
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -49,120 +49,130 @@ import com.chatopera.cc.webim.web.model.Secret;
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping("/admin/im")
|
||||
public class SNSAccountIMController extends Handler{
|
||||
public class SNSAccountIMController extends Handler {
|
||||
|
||||
@Autowired
|
||||
private SNSAccountRepository snsAccountRes;
|
||||
|
||||
@Autowired
|
||||
private ConsultInviteRepository invite;
|
||||
|
||||
@Autowired
|
||||
private SecretRepository secRes ;
|
||||
@Autowired
|
||||
private SNSAccountRepository snsAccountRes;
|
||||
|
||||
@Autowired
|
||||
private ConsultInviteRepository invite;
|
||||
|
||||
@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) {
|
||||
map.addAttribute("snsAccountList", snsAccountRes.findBySnstypeAndOrgi( UKDataContext.ChannelTypeEnum.WEBIM.toString() , super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request)))) ;
|
||||
List<Secret> secretConfig = secRes.findByOrgi(super.getOrgi(request)) ;
|
||||
if(secretConfig!=null && secretConfig.size() > 0){
|
||||
map.addAttribute("secret", secretConfig.get(0)) ;
|
||||
}
|
||||
if(!StringUtils.isBlank(execute) && execute.equals("false")){
|
||||
map.addAttribute("execute", execute) ;
|
||||
}
|
||||
return request(super.createAdminTempletResponse("/admin/channel/im/index"));
|
||||
@Menu(type = "admin", subtype = "im", access = false, admin = true)
|
||||
public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String execute) {
|
||||
map.addAttribute("snsAccountList", snsAccountRes.findBySnstypeAndOrgi(UKDataContext.ChannelTypeEnum.WEBIM.toString(), super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request))));
|
||||
List<Secret> secretConfig = secRes.findByOrgi(super.getOrgi(request));
|
||||
if (secretConfig != null && secretConfig.size() > 0) {
|
||||
map.addAttribute("secret", secretConfig.get(0));
|
||||
}
|
||||
if (!StringUtils.isBlank(execute) && execute.equals("false")) {
|
||||
map.addAttribute("execute", execute);
|
||||
}
|
||||
return request(super.createAdminTempletResponse("/admin/channel/im/index"));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/add")
|
||||
@Menu(type = "admin" , subtype = "im" , access = false ,admin = true)
|
||||
public ModelAndView add(ModelMap map , HttpServletRequest request) {
|
||||
@Menu(type = "admin", subtype = "im", access = false, admin = true)
|
||||
public ModelAndView add(ModelMap map, HttpServletRequest request) {
|
||||
return request(super.createRequestPageTempletResponse("/admin/channel/im/add"));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/save")
|
||||
@Menu(type = "admin" , subtype = "weixin")
|
||||
public ModelAndView save(HttpServletRequest request ,@Valid SNSAccount snsAccount) throws NoSuchAlgorithmException {
|
||||
if(!StringUtils.isBlank(snsAccount.getBaseURL())){
|
||||
snsAccount.setSnsid(Base62.encode(snsAccount.getBaseURL()).toLowerCase());
|
||||
int count = snsAccountRes.countBySnsidAndOrgi(snsAccount.getSnsid() , super.getOrgi(request)) ;
|
||||
if(count == 0){
|
||||
snsAccount.setOrgi(super.getOrgi(request));
|
||||
snsAccount.setSnstype(UKDataContext.ChannelTypeEnum.WEBIM.toString());
|
||||
snsAccount.setCreatetime(new Date());
|
||||
snsAccountRes.save(snsAccount) ;
|
||||
|
||||
/**
|
||||
* 同时创建CousultInvite 记录
|
||||
*/
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(snsAccount.getSnsid(), super.getOrgi(request)) ;
|
||||
if(coultInvite ==null){
|
||||
coultInvite = new CousultInvite() ;
|
||||
coultInvite.setSnsaccountid(snsAccount.getSnsid());
|
||||
coultInvite.setCreate_time(new Date());
|
||||
coultInvite.setOrgi(super.getOrgi(request));
|
||||
coultInvite.setName(snsAccount.getName());
|
||||
invite.save(coultInvite) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html"));
|
||||
@Menu(type = "admin", subtype = "weixin")
|
||||
public ModelAndView save(HttpServletRequest request, @Valid SNSAccount snsAccount) throws NoSuchAlgorithmException {
|
||||
if (!StringUtils.isBlank(snsAccount.getBaseURL())) {
|
||||
snsAccount.setSnsid(Base62.encode(snsAccount.getBaseURL()).toLowerCase());
|
||||
int count = snsAccountRes.countBySnsidAndOrgi(snsAccount.getSnsid(), super.getOrgi(request));
|
||||
if (count == 0) {
|
||||
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);
|
||||
|
||||
/**
|
||||
* 同时创建CousultInvite 记录
|
||||
*/
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(snsAccount.getSnsid(), super.getOrgi(request));
|
||||
if (coultInvite == null) {
|
||||
coultInvite = new CousultInvite();
|
||||
coultInvite.setSnsaccountid(snsAccount.getSnsid());
|
||||
coultInvite.setCreate_time(new Date());
|
||||
coultInvite.setOrgi(super.getOrgi(request));
|
||||
coultInvite.setName(snsAccount.getName());
|
||||
coultInvite.setOwner(snsAccount.getCreater());
|
||||
invite.save(coultInvite);
|
||||
}
|
||||
}
|
||||
}
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html"));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/delete")
|
||||
@Menu(type = "weixin" , subtype = "delete")
|
||||
public ModelAndView delete(ModelMap map , HttpServletRequest request , @Valid String id , @Valid String confirm) {
|
||||
boolean execute = false ;
|
||||
if(execute = UKTools.secConfirm(secRes, super.getOrgi(request), confirm)){
|
||||
SNSAccount snsAccount = snsAccountRes.findByIdAndOrgi(id , super.getOrgi(request)) ;
|
||||
if(snsAccountRes!=null){
|
||||
snsAccountRes.delete(snsAccount);
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(snsAccount.getSnsid(), super.getOrgi(request)) ;
|
||||
if(coultInvite != null){
|
||||
invite.delete(coultInvite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html?execute="+execute));
|
||||
@Menu(type = "weixin", subtype = "delete")
|
||||
public ModelAndView delete(ModelMap map, HttpServletRequest request, @Valid String id, @Valid String confirm) {
|
||||
boolean execute = false;
|
||||
if (execute = UKTools.secConfirm(secRes, super.getOrgi(request), confirm)) {
|
||||
SNSAccount snsAccount = snsAccountRes.findByIdAndOrgi(id, super.getOrgi(request));
|
||||
if (snsAccountRes != null) {
|
||||
snsAccountRes.delete(snsAccount);
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(snsAccount.getSnsid(), super.getOrgi(request));
|
||||
if (coultInvite != null) {
|
||||
invite.delete(coultInvite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html?execute=" + execute));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/edit")
|
||||
@Menu(type = "admin" , subtype = "im" , access = false ,admin = true)
|
||||
public ModelAndView edit(ModelMap map , HttpServletRequest request , @Valid String id) {
|
||||
map.addAttribute("snsAccount", snsAccountRes.findByIdAndOrgi(id , super.getOrgi(request))) ;
|
||||
@Menu(type = "admin", subtype = "im", access = false, admin = true)
|
||||
public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) {
|
||||
map.addAttribute("snsAccount", snsAccountRes.findByIdAndOrgi(id, super.getOrgi(request)));
|
||||
return request(super.createRequestPageTempletResponse("/admin/channel/im/edit"));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping("/update")
|
||||
@Menu(type = "admin" , subtype = "im" , access = false ,admin = true)
|
||||
public ModelAndView update(HttpServletRequest request ,@Valid SNSAccount snsAccount) throws NoSuchAlgorithmException {
|
||||
SNSAccount oldSnsAccount = snsAccountRes.findByIdAndOrgi(snsAccount.getId() , super.getOrgi(request));
|
||||
if(oldSnsAccount!=null){
|
||||
oldSnsAccount.setName(snsAccount.getName());
|
||||
oldSnsAccount.setBaseURL(snsAccount.getBaseURL());
|
||||
oldSnsAccount.setUpdatetime(new Date());
|
||||
/**
|
||||
* SNSID如果有变更,需要同时变更 CoultInvite 表的 记录
|
||||
*/
|
||||
if(!StringUtils.isBlank(oldSnsAccount.getSnsid())){
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(oldSnsAccount.getSnsid(), super.getOrgi(request)) ;
|
||||
if(coultInvite ==null){
|
||||
/**
|
||||
* 同时创建CousultInvite 记录
|
||||
*/
|
||||
coultInvite = new CousultInvite() ;
|
||||
coultInvite.setSnsaccountid(oldSnsAccount.getSnsid());
|
||||
coultInvite.setCreate_time(new Date());
|
||||
coultInvite.setOrgi(super.getOrgi(request));
|
||||
coultInvite.setName(snsAccount.getName());
|
||||
invite.save(coultInvite) ;
|
||||
}
|
||||
}
|
||||
|
||||
oldSnsAccount.setSnstype(UKDataContext.ChannelTypeEnum.WEBIM.toString());
|
||||
snsAccountRes.save(oldSnsAccount) ;
|
||||
}
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html"));
|
||||
@Menu(type = "admin", subtype = "im", access = false, admin = true)
|
||||
public ModelAndView update(HttpServletRequest request, @Valid SNSAccount snsAccount) throws NoSuchAlgorithmException {
|
||||
SNSAccount oldSnsAccount = snsAccountRes.findByIdAndOrgi(snsAccount.getId(), super.getOrgi(request));
|
||||
if (oldSnsAccount != null) {
|
||||
oldSnsAccount.setName(snsAccount.getName());
|
||||
oldSnsAccount.setBaseURL(snsAccount.getBaseURL());
|
||||
oldSnsAccount.setUpdatetime(new Date());
|
||||
/**
|
||||
* SNSID如果有变更,需要同时变更 CoultInvite 表的 记录
|
||||
*/
|
||||
if (!StringUtils.isBlank(oldSnsAccount.getSnsid())) {
|
||||
CousultInvite coultInvite = invite.findBySnsaccountidAndOrgi(oldSnsAccount.getSnsid(), super.getOrgi(request));
|
||||
if (coultInvite == null) {
|
||||
/**
|
||||
* 同时创建CousultInvite 记录
|
||||
*/
|
||||
coultInvite = new CousultInvite();
|
||||
coultInvite.setSnsaccountid(oldSnsAccount.getSnsid());
|
||||
coultInvite.setCreate_time(new Date());
|
||||
coultInvite.setOrgi(super.getOrgi(request));
|
||||
coultInvite.setName(snsAccount.getName());
|
||||
invite.save(coultInvite);
|
||||
}
|
||||
}
|
||||
|
||||
oldSnsAccount.setSnstype(UKDataContext.ChannelTypeEnum.WEBIM.toString());
|
||||
snsAccountRes.save(oldSnsAccount);
|
||||
}
|
||||
return request(super.createRequestPageTempletResponse("redirect:/admin/im/index.html"));
|
||||
}
|
||||
}
|
@ -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
|
||||
*
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user