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

Closed #121 显示机器人坐席名称

This commit is contained in:
Hai Liang Wang 2018-10-25 17:49:23 +08:00
parent 41763967a9
commit fc9ab87098
7 changed files with 153 additions and 161 deletions

View File

@ -72,7 +72,6 @@ public class AutomaticServiceDist {
/** /**
* 载入坐席 ACD策略配置 * 载入坐席 ACD策略配置
* *
* @param orgi
* @return * @return
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -530,7 +529,7 @@ public class AutomaticServiceDist {
* @return * @return
* @throws Exception * @throws Exception
*/ */
public static AgentService processChatbotService(final AgentUser agentUser, final String orgi) { public static AgentService processChatbotService(final String botName, final AgentUser agentUser, final String orgi) {
AgentService agentService = new AgentService(); //放入缓存的对象 AgentService agentService = new AgentService(); //放入缓存的对象
AgentServiceRepository agentServiceRes = MainContext.getContext().getBean(AgentServiceRepository.class); AgentServiceRepository agentServiceRes = MainContext.getContext().getBean(AgentServiceRepository.class);
Date now = new Date(); Date now = new Date();
@ -550,6 +549,8 @@ public class AutomaticServiceDist {
agentService.setRegion(agentUser.getRegion()); agentService.setRegion(agentUser.getRegion());
agentService.setUsername(agentUser.getUsername()); agentService.setUsername(agentUser.getUsername());
agentService.setChannel(agentUser.getChannel()); agentService.setChannel(agentUser.getChannel());
if (botName != null)
agentService.setAgentusername(botName);
if (StringUtils.isNotBlank(agentUser.getContextid())) { if (StringUtils.isNotBlank(agentUser.getContextid())) {
agentService.setContextid(agentUser.getContextid()); agentService.setContextid(agentUser.getContextid());

View File

@ -473,6 +473,12 @@ public class Handler {
this.starttime = starttime; this.starttime = starttime;
} }
/**
* 使用Blob保存文件
* @param multipart
* @return id
* @throws IOException
*/
public String saveImageFileWithMultipart(MultipartFile multipart) throws IOException { public String saveImageFileWithMultipart(MultipartFile multipart) throws IOException {
StreamingFile sf = new StreamingFile(); StreamingFile sf = new StreamingFile();
final String fileid = MainUtils.getUUID(); final String fileid = MainUtils.getUUID();

View File

@ -16,20 +16,14 @@
*/ */
package com.chatopera.cc.app.handler.apps.service; package com.chatopera.cc.app.handler.apps.service;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import com.chatopera.cc.app.basic.MainContext; import com.chatopera.cc.app.basic.MainContext;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.app.basic.MainUtils;
import com.chatopera.cc.app.handler.Handler;
import com.chatopera.cc.app.model.*;
import com.chatopera.cc.app.persistence.es.ContactsRepository; import com.chatopera.cc.app.persistence.es.ContactsRepository;
import com.chatopera.cc.app.persistence.impl.AgentUserService; import com.chatopera.cc.app.persistence.impl.AgentUserService;
import com.chatopera.cc.app.handler.Handler; import com.chatopera.cc.app.persistence.repository.*;
import com.chatopera.cc.app.model.AgentServiceSummary; import com.chatopera.cc.util.Menu;
import com.chatopera.cc.app.model.AgentUser;
import com.chatopera.cc.app.model.AgentUserContacts;
import com.chatopera.cc.app.model.OnlineUser;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
@ -39,28 +33,18 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import com.chatopera.cc.app.basic.MainUtils; import javax.servlet.http.HttpServletRequest;
import com.chatopera.cc.app.persistence.repository.AgentServiceRepository; import javax.validation.Valid;
import com.chatopera.cc.app.persistence.repository.AgentUserContactsRepository; import java.util.List;
import com.chatopera.cc.app.persistence.repository.ChatMessageRepository;
import com.chatopera.cc.app.persistence.repository.OnlineUserHisRepository;
import com.chatopera.cc.app.persistence.repository.OnlineUserRepository;
import com.chatopera.cc.app.persistence.repository.ServiceSummaryRepository;
import com.chatopera.cc.app.persistence.repository.TagRelationRepository;
import com.chatopera.cc.app.persistence.repository.TagRepository;
import com.chatopera.cc.app.persistence.repository.UserEventRepository;
import com.chatopera.cc.app.persistence.repository.WeiXinUserRepository;
import com.chatopera.cc.app.model.AgentService;
import com.chatopera.cc.app.model.WeiXinUser;
@Controller @Controller
@RequestMapping("/service") @RequestMapping("/service")
public class OnlineUserController extends Handler { public class OnlineUserController extends Handler {
@Autowired @Autowired
private AgentServiceRepository agentServiceRes ; private AgentServiceRepository agentServiceRes;
@Autowired @Autowired
private AgentUserService agentUserRes ; private AgentUserService agentUserRes;
@Autowired @Autowired
private OnlineUserRepository onlineUserRes; private OnlineUserRepository onlineUserRes;
@ -79,115 +63,116 @@ public class OnlineUserController extends Handler {
private WeiXinUserRepository weiXinUserRes; private WeiXinUserRepository weiXinUserRes;
@Autowired @Autowired
private TagRepository tagRes ; private TagRepository tagRes;
@Autowired @Autowired
private TagRelationRepository tagRelationRes ; private TagRelationRepository tagRelationRes;
@Autowired @Autowired
private ChatMessageRepository chatMessageRepository ; private ChatMessageRepository chatMessageRepository;
@Autowired @Autowired
private ContactsRepository contactsRes ; private ContactsRepository contactsRes;
@Autowired @Autowired
private AgentUserContactsRepository agentUserContactsRes ; private AgentUserContactsRepository agentUserContactsRes;
@RequestMapping("/online/index") @RequestMapping("/online/index")
@Menu(type = "service" , subtype = "online" , admin= true) @Menu(type = "service", subtype = "online", admin = true)
public ModelAndView index(ModelMap map , HttpServletRequest request , String userid , String agentservice , @Valid String channel) { public ModelAndView index(ModelMap map, HttpServletRequest request, String userid, String agentservice, @Valid String channel) {
if(!StringUtils.isBlank(userid)){ if (StringUtils.isNotBlank(userid)) {
map.put("inviteResult", MainUtils.getWebIMInviteResult(onlineUserRes.findByOrgiAndUserid(super.getOrgi(request), userid))) ; map.put("inviteResult", MainUtils.getWebIMInviteResult(onlineUserRes.findByOrgiAndUserid(super.getOrgi(request), userid)));
map.put("tagRelationList", tagRelationRes.findByUserid(userid)) ; map.put("tagRelationList", tagRelationRes.findByUserid(userid));
map.put("onlineUserHistList", onlineUserHisRes.findByUseridAndOrgi(userid, super.getOrgi(request))) ; map.put("onlineUserHistList", onlineUserHisRes.findByUseridAndOrgi(userid, super.getOrgi(request)));
map.put("agentServicesAvg", onlineUserRes.countByUserForAvagTime(super.getOrgi(request), MainContext.AgentUserStatusEnum.END.toString(),userid)) ; map.put("agentServicesAvg", onlineUserRes.countByUserForAvagTime(super.getOrgi(request), MainContext.AgentUserStatusEnum.END.toString(), userid));
List<AgentService> agentServiceList = agentServiceRes.findByUseridAndOrgi(userid, super.getOrgi(request)) ; List<AgentService> agentServiceList = agentServiceRes.findByUseridAndOrgiOrderByLogindateDesc(userid, super.getOrgi(request));
map.put("agentServiceList", agentServiceList) ; map.put("agentServiceList", agentServiceList);
if(agentServiceList.size()>0){ if (agentServiceList.size() > 0) {
map.put("serviceCount", Integer map.put("serviceCount", Integer
.valueOf(this.agentServiceRes .valueOf(this.agentServiceRes
.countByUseridAndOrgiAndStatus(userid, super.getOrgi(request), .countByUseridAndOrgiAndStatus(userid, super.getOrgi(request),
MainContext.AgentUserStatusEnum.END.toString()))); MainContext.AgentUserStatusEnum.END.toString())));
AgentService agentService = agentServiceList.get(0) ; AgentService agentService = agentServiceList.get(0);
if(!StringUtils.isBlank(agentservice)){ if (StringUtils.isNotBlank(agentservice)) {
for(AgentService as : agentServiceList){ for (AgentService as : agentServiceList) {
if(as.getId().equals(agentservice)){ if (as.getId().equals(agentservice)) {
agentService = as ; break ; agentService = as;
break;
} }
} }
} }
if(agentService!=null){ if (agentService != null) {
List<AgentServiceSummary> summaries = serviceSummaryRes.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request)) ; List<AgentServiceSummary> summaries = serviceSummaryRes.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request));
if(summaries.size() > 0) if (summaries.size() > 0)
map.put("summary" , summaries.get(0)) ; map.put("summary", summaries.get(0));
} }
List<AgentUserContacts> agentUserContactsList = agentUserContactsRes.findByUseridAndOrgi(userid, super.getOrgi(request)) ; List<AgentUserContacts> agentUserContactsList = agentUserContactsRes.findByUseridAndOrgi(userid, super.getOrgi(request));
if(agentUserContactsList.size() > 0){ if (agentUserContactsList.size() > 0) {
AgentUserContacts agentUserContacts = agentUserContactsList.get(0) ; AgentUserContacts agentUserContacts = agentUserContactsList.get(0);
map.put("contacts", contactsRes.findOne(agentUserContacts.getContactsid())) ; map.put("contacts", contactsRes.findOne(agentUserContacts.getContactsid()));
} }
map.put("tags", tagRes.findByOrgiAndTagtype(super.getOrgi(request) , MainContext.ModelType.USER.toString())) ; map.put("tags", tagRes.findByOrgiAndTagtype(super.getOrgi(request), MainContext.ModelType.USER.toString()));
map.put("summaryTags", tagRes.findByOrgiAndTagtype(super.getOrgi(request) , MainContext.ModelType.SUMMARY.toString())) ; map.put("summaryTags", tagRes.findByOrgiAndTagtype(super.getOrgi(request), MainContext.ModelType.SUMMARY.toString()));
map.put("curAgentService", agentService) ; map.put("curAgentService", agentService);
map.put("agentUserMessageList", chatMessageRepository.findByAgentserviceidAndOrgi(agentService.getId() , super.getOrgi(request), new PageRequest(0, 50, Direction.DESC , "updatetime"))); map.put("agentUserMessageList", chatMessageRepository.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request), new PageRequest(0, 50, Direction.DESC, "updatetime")));
} }
if(MainContext.ChannelTypeEnum.WEIXIN.toString().equals(channel)){ if (MainContext.ChannelTypeEnum.WEIXIN.toString().equals(channel)) {
List<WeiXinUser> weiXinUserList = weiXinUserRes.findByOpenidAndOrgi(userid, super.getOrgi(request)) ; List<WeiXinUser> weiXinUserList = weiXinUserRes.findByOpenidAndOrgi(userid, super.getOrgi(request));
if(weiXinUserList.size() > 0){ if (weiXinUserList.size() > 0) {
WeiXinUser weiXinUser = weiXinUserList.get(0) ; WeiXinUser weiXinUser = weiXinUserList.get(0);
map.put("weiXinUser",weiXinUser); map.put("weiXinUser", weiXinUser);
} }
}else if(MainContext.ChannelTypeEnum.WEBIM.toString().equals(channel)){ } else if (MainContext.ChannelTypeEnum.WEBIM.toString().equals(channel)) {
List<OnlineUser> onlineUserList = onlineUserRes.findByUseridAndOrgi(userid, super.getOrgi(request)) ; List<OnlineUser> onlineUserList = onlineUserRes.findByUseridAndOrgi(userid, super.getOrgi(request));
if(onlineUserList.size() >0){ if (onlineUserList.size() > 0) {
map.put("onlineUser", onlineUserList.get(0)) ; map.put("onlineUser", onlineUserList.get(0));
} }
} }
map.put("agentUser", agentUserRes.findByUseridAndOrgi(userid, super.getOrgi(request))) ; map.put("agentUser", agentUserRes.findByUseridAndOrgi(userid, super.getOrgi(request)));
map.put("curragentuser", agentUserRes.findByUseridAndOrgi(userid, super.getOrgi(request))) ; map.put("curragentuser", agentUserRes.findByUseridAndOrgi(userid, super.getOrgi(request)));
} }
return request(super.createAppsTempletResponse("/apps/service/online/index")); return request(super.createAppsTempletResponse("/apps/service/online/index"));
} }
@RequestMapping("/online/chatmsg") @RequestMapping("/online/chatmsg")
@Menu(type = "service" , subtype = "chatmsg" , admin= true) @Menu(type = "service", subtype = "chatmsg", admin = true)
public ModelAndView onlinechat(ModelMap map , HttpServletRequest request , String id , String title) { public ModelAndView onlinechat(ModelMap map, HttpServletRequest request, String id, String title) {
AgentService agentService = agentServiceRes.getOne(id) ; AgentService agentService = agentServiceRes.getOne(id);
AgentUser curragentuser = agentUserRes.findByUseridAndOrgi(agentService.getUserid(), super.getOrgi(request)) ; AgentUser curragentuser = agentUserRes.findByUseridAndOrgi(agentService.getUserid(), super.getOrgi(request));
map.put("curAgentService", agentService) ; map.put("curAgentService", agentService);
map.put("curragentuser", curragentuser) ; map.put("curragentuser", curragentuser);
if(!StringUtils.isBlank(title)){ if (StringUtils.isNotBlank(title)) {
map.put("title", title) ; map.put("title", title);
} }
map.put("summaryTags", tagRes.findByOrgiAndTagtype(super.getOrgi(request) , MainContext.ModelType.SUMMARY.toString())) ; map.put("summaryTags", tagRes.findByOrgiAndTagtype(super.getOrgi(request), MainContext.ModelType.SUMMARY.toString()));
if(agentService!=null){ if (agentService != null) {
List<AgentServiceSummary> summaries = serviceSummaryRes.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request)) ; List<AgentServiceSummary> summaries = serviceSummaryRes.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request));
if(summaries.size() > 0) if (summaries.size() > 0)
map.put("summary" , summaries.get(0)) ; map.put("summary", summaries.get(0));
} }
map.put("agentUserMessageList", chatMessageRepository.findByAgentserviceidAndOrgi(agentService.getId() , super.getOrgi(request), new PageRequest(0, 50, Direction.DESC , "updatetime"))); map.put("agentUserMessageList", chatMessageRepository.findByAgentserviceidAndOrgi(agentService.getId(), super.getOrgi(request), new PageRequest(0, 50, Direction.DESC, "updatetime")));
return request(super.createRequestPageTempletResponse("/apps/service/online/chatmsg")); return request(super.createRequestPageTempletResponse("/apps/service/online/chatmsg"));
} }
@RequestMapping("/trace") @RequestMapping("/trace")
@Menu(type = "service" , subtype = "trace" , admin= false) @Menu(type = "service", subtype = "trace", admin = false)
public ModelAndView trace(ModelMap map , HttpServletRequest request , @Valid String sessionid) { public ModelAndView trace(ModelMap map, HttpServletRequest request, @Valid String sessionid) {
if(!StringUtils.isBlank(sessionid)){ if (StringUtils.isNotBlank(sessionid)) {
map.addAttribute("traceHisList", userEventRes.findBySessionidAndOrgi(sessionid, super.getOrgi(request), new PageRequest(0, 100))) ; map.addAttribute("traceHisList", userEventRes.findBySessionidAndOrgi(sessionid, super.getOrgi(request), new PageRequest(0, 100)));
} }
return request(super.createRequestPageTempletResponse("/apps/service/online/trace")); return request(super.createRequestPageTempletResponse("/apps/service/online/trace"));
} }

View File

@ -161,6 +161,7 @@ public class ChatbotEventHandler {
agentUser.setCreatetime(now); agentUser.setCreatetime(now);
agentUser.setUpdatetime(now); agentUser.setUpdatetime(now);
agentUser.setSessionid(session); agentUser.setSessionid(session);
agentUser.setRegion(onlineUser.getRegion());
// 聊天机器人处理的请求 // 聊天机器人处理的请求
agentUser.setOpttype(MainContext.OptTypeEnum.CHATBOT.toString()); agentUser.setOpttype(MainContext.OptTypeEnum.CHATBOT.toString());
@ -168,7 +169,7 @@ public class ChatbotEventHandler {
agentUser.setCity(onlineUser.getCity()); agentUser.setCity(onlineUser.getCity());
agentUser.setProvince(onlineUser.getProvince()); agentUser.setProvince(onlineUser.getProvince());
agentUser.setCountry(onlineUser.getCountry()); agentUser.setCountry(onlineUser.getCountry());
AgentService agentService = AutomaticServiceDist.processChatbotService(agentUser, orgi); AgentService agentService = AutomaticServiceDist.processChatbotService(invite != null ? invite.getAiname() : "机器人客服", agentUser, orgi);
agentUser.setAgentserviceid(agentService.getId()); agentUser.setAgentserviceid(agentService.getId());
// 标记为机器人坐席 // 标记为机器人坐席
@ -194,7 +195,7 @@ public class ChatbotEventHandler {
AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(user, orgi); AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(user, orgi);
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi); OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
if (agentUser != null) { if (agentUser != null) {
AutomaticServiceDist.processChatbotService(agentUser, orgi); AutomaticServiceDist.processChatbotService(null, agentUser, orgi);
CacheHelper.getAgentUserCacheBean().delete(user, MainContext.SYSTEM_ORGI); CacheHelper.getAgentUserCacheBean().delete(user, MainContext.SYSTEM_ORGI);
CacheHelper.getOnlineUserCacheBean().delete(user, orgi); CacheHelper.getOnlineUserCacheBean().delete(user, orgi);
agentUser.setStatus(MainContext.OnlineUserOperatorStatus.OFFLINE.toString()); agentUser.setStatus(MainContext.OnlineUserOperatorStatus.OFFLINE.toString());

View File

@ -167,7 +167,7 @@ public class IMEventHandler {
} }
AgentServiceRepository agentServiceRes = MainContext.getContext().getBean(AgentServiceRepository.class); AgentServiceRepository agentServiceRes = MainContext.getContext().getBean(AgentServiceRepository.class);
List<AgentService> agentServiceList = agentServiceRes.findByUseridAndOrgi(user, orgi); List<AgentService> agentServiceList = agentServiceRes.findByUseridAndOrgiOrderByLogindateDesc(user, orgi);
if (agentServiceList.size() > 0) { if (agentServiceList.size() > 0) {
AgentService agentService = agentServiceList.get(0); AgentService agentService = agentServiceList.get(0);
agentService.setName(contacts.getName()); agentService.setName(contacts.getName());

View File

@ -31,7 +31,7 @@ public abstract interface AgentServiceRepository
{ {
public abstract AgentService findByIdAndOrgi(String paramString , String orgi); public abstract AgentService findByIdAndOrgi(String paramString , String orgi);
public abstract List<AgentService> findByUseridAndOrgi(String paramString, String orgi); public abstract List<AgentService> findByUseridAndOrgiOrderByLogindateDesc(String paramString, String orgi);
public abstract Page<AgentService> findByOrgi(String orgi, Pageable paramPageable); public abstract Page<AgentService> findByOrgi(String orgi, Pageable paramPageable);

View File

@ -97,9 +97,8 @@
<th>咨询时间</th> <th>咨询时间</th>
<th>服务时间</th> <th>服务时间</th>
<th>等待时长</th> <th>等待时长</th>
<th>服务时</th> <th>服务时</th>
<th>地域</th> <th>地域</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>