1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-06-16 18:30:03 +08:00
cosin/public/plugins/chatbot/classes/ChatbotController.java

153 lines
5.5 KiB
Java

/*
* Copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.chatopera.cc.plugins.chatbot;
import com.chatopera.cc.controller.Handler;
import com.chatopera.cc.exception.CSKefuException;
import com.chatopera.cc.model.Chatbot;
import com.chatopera.cc.model.Organ;
import com.chatopera.cc.model.SNSAccount;
import com.chatopera.cc.model.User;
import com.chatopera.cc.persistence.repository.ChatbotRepository;
import com.chatopera.cc.persistence.repository.SNSAccountRepository;
import com.chatopera.cc.proxy.OrganProxy;
import com.chatopera.cc.proxy.UserProxy;
import com.chatopera.cc.util.Menu;
import com.chatopera.cc.util.SystemEnvHelper;
import org.apache.commons.lang.StringUtils;
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.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
@Controller
@RequestMapping(value = "/apps/chatbot")
public class ChatbotController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(ChatbotController.class);
@Autowired
private ChatbotRepository chatbotRes;
@Autowired
private SNSAccountRepository snsAccountRes;
@Autowired
private UserProxy userProxy;
@Autowired
private SNSAccountRepository snsAccountRepository;
private final static String botServiecProvider = SystemEnvHelper.getenv(
ChatbotConstants.BOT_PROVIDER, ChatbotConstants.DEFAULT_BOT_PROVIDER);
@RequestMapping(value = "/index")
@Menu(type = "chatbot", subtype = "index", access = true)
public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid final String chatbotid) throws CSKefuException {
logger.info("[index] chatbot id {}", chatbotid);
ModelAndView view = request(super.createAppsTempletResponse("/apps/chatbot/index"));
List<Chatbot> chatbots = chatbotRes.findByOrgi(super.getOrgi(request));
Chatbot currentbot = null;
logger.info("[index] chatbot size {}", chatbots.size());
if (chatbots.size() > 0) {
view.addObject("chatbots", chatbots);
if (StringUtils.isNotBlank(chatbotid)) {
view.addObject("currentbotid", chatbotid);
boolean resolved = false;
for (final Chatbot b : chatbots) {
if (StringUtils.equals(b.getId(), chatbotid)) {
view.addObject("currentbot", b);
currentbot = b;
resolved = true;
break;
}
}
if (!resolved) {
// TODO 优化查到不到Bot的提示
throw new CSKefuException("Can not find target chatbot by id [" + chatbotid + "]");
}
} else {
currentbot = chatbots.get(0);
view.addObject("currentbotid", currentbot.getId());
view.addObject("currentbot", currentbot);
}
}
view.addObject("botServiecProvider", botServiecProvider);
// 增加当前bot的更多信息
if (currentbot != null) {
// 创建人
final User creator = userProxy.findOne(currentbot.getCreater());
if (creator != null) {
view.addObject("creatorname", creator.getUname());
}
// 隶属渠道
if (StringUtils.isNotBlank(currentbot.getSnsAccountIdentifier())) {
snsAccountRepository.findOneBySnsTypeAndSnsIdAndOrgi(
currentbot.getChannel(),
currentbot.getSnsAccountIdentifier(),
currentbot.getOrgi()).ifPresent(p -> {
view.addObject("snsAccountName", p.getName());
view.addObject("snsAccountId", p.getId());
});
}
}
return view;
}
@RequestMapping(value = "/edit")
@Menu(type = "chatbot", subtype = "index", access = true)
public ModelAndView eidt(ModelMap map, HttpServletRequest request, @Valid String id) {
User curruser = super.getUser(request);
ModelAndView view = request(super.createAppsTempletResponse("/apps/chatbot/edit"));
if (id != null) {
Chatbot c = chatbotRes.findOne(id);
SNSAccount snsAccount = snsAccountRes.findBySnsidAndOrgi(c.getSnsAccountIdentifier(), curruser.getOrgi());
view.addObject("snsurl", snsAccount.getBaseURL());
view.addObject("bot", c);
}
view.addObject("id", id);
view.addObject("botServiecProvider", botServiecProvider);
return view;
}
}