diff --git a/contact-center/app/src/main/java/com/chatopera/cc/app/Application.java b/contact-center/app/src/main/java/com/chatopera/cc/app/Application.java index 8af3c34f..60e6e8f0 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/app/Application.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/app/Application.java @@ -18,6 +18,7 @@ package com.chatopera.cc.app; import com.chatopera.cc.app.basic.MainContext; import com.chatopera.cc.app.config.StartedEventListener; +import com.chatopera.cc.util.Constants; import com.chatopera.cc.util.SystemEnvHelper; import com.chatopera.cc.util.mobile.MobileNumberUtils; import org.apache.commons.lang.StringUtils; @@ -67,15 +68,15 @@ public class Application { static { // 外呼模块 if (isCalloutModule) { - MainContext.model.put("sales", true); + MainContext.model.put(Constants.CSKEFU_MODULE_CALLOUT, true); } // CRM模块 if (isContactsModule) { - MainContext.model.put("contacts", true); + MainContext.model.put(Constants.CSKEFU_MODULE_CONTACTS, true); } // 聊天机器人模块 if (isChatbotModule) { - MainContext.model.put("chatbot", true); + MainContext.model.put(Constants.CSKEFU_MODULE_CHATBOT, true); } } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/app/basic/MainContext.java b/contact-center/app/src/main/java/com/chatopera/cc/app/basic/MainContext.java index d55b1023..0ba913af 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/app/basic/MainContext.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/app/basic/MainContext.java @@ -17,6 +17,7 @@ package com.chatopera.cc.app.basic; +import com.chatopera.cc.util.Constants; import com.chatopera.cc.util.DateConverter; import com.chatopera.cc.app.basic.resource.ActivityResource; import com.chatopera.cc.app.basic.resource.BatchResource; @@ -409,7 +410,7 @@ public class MainContext { return this.name; } - public int getIndex(){ + public int getIndex() { return this.index; } } @@ -986,4 +987,13 @@ public class MainContext { public static Class getResource(String resource) { return uKeFuResourceMap.get(resource); } + + /** + * 是否开启外呼模块 + * @return + */ + public static boolean isEnableCalloutModule() { + return model.containsKey(Constants.CSKEFU_MODULE_CALLOUT) && (model.get(Constants.CSKEFU_MODULE_CALLOUT).equals(true)); + } + } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/app/handler/admin/users/UsersController.java b/contact-center/app/src/main/java/com/chatopera/cc/app/handler/admin/users/UsersController.java index 57ad6a87..79af083a 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/app/handler/admin/users/UsersController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/app/handler/admin/users/UsersController.java @@ -16,20 +16,21 @@ */ package com.chatopera.cc.app.handler.admin.users; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Date; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - import com.chatopera.cc.app.algorithm.AutomaticServiceDist; import com.chatopera.cc.app.basic.MainContext; +import com.chatopera.cc.app.basic.MainUtils; import com.chatopera.cc.app.cache.CacheHelper; -import com.chatopera.cc.app.persistence.repository.UserRoleRepository; +import com.chatopera.cc.app.handler.Handler; import com.chatopera.cc.app.model.AgentStatus; +import com.chatopera.cc.app.model.User; +import com.chatopera.cc.app.model.UserRole; +import com.chatopera.cc.app.persistence.repository.UserRepository; +import com.chatopera.cc.app.persistence.repository.UserRoleRepository; +import com.chatopera.cc.util.Menu; +import com.chatopera.cc.util.OnlineUserUtils; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; @@ -38,211 +39,225 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; -import com.chatopera.cc.util.Menu; -import com.chatopera.cc.app.basic.MainUtils; -import com.chatopera.cc.app.persistence.repository.UserRepository; -import com.chatopera.cc.util.OnlineUserUtils; -import com.chatopera.cc.app.handler.Handler; -import com.chatopera.cc.app.model.User; -import com.chatopera.cc.app.model.UserRole; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Date; +import java.util.List; /** - * * @author 程序猿DD * @version 1.0.0 * @blog http://blog.didispace.com - * */ @Controller @RequestMapping("/admin/user") -public class UsersController extends Handler{ +public class UsersController extends Handler { + private final static Logger logger = LoggerFactory.getLogger(UsersController.class); - @Autowired - private UserRepository userRepository; - - @Autowired - private UserRoleRepository userRoleRes; + @Autowired + private UserRepository userRepository; + + @Autowired + private UserRoleRepository userRoleRes; @RequestMapping("/index") - @Menu(type = "admin" , subtype = "user") - public ModelAndView index(ModelMap map , HttpServletRequest request) throws FileNotFoundException, IOException { - map.addAttribute( - "userList", - userRepository.findByDatastatusAndOrgiAndOrgid( - false, - super.getOrgiByTenantshare(request), - super.getOrgid(request), - new PageRequest( - super.getP(request), - super.getPs(request), - Sort.Direction.ASC, - "createtime" - ) - ) - ); - return request(super.createAdminTempletResponse("/admin/user/index")); + @Menu(type = "admin", subtype = "user") + public ModelAndView index(ModelMap map, HttpServletRequest request) throws FileNotFoundException, IOException { + map.addAttribute( + "userList", + userRepository.findByDatastatusAndOrgiAndOrgid( + false, + super.getOrgiByTenantshare(request), + super.getOrgid(request), + new PageRequest( + super.getP(request), + super.getPs(request), + Sort.Direction.ASC, + "createtime" + ) + ) + ); + return request(super.createAdminTempletResponse("/admin/user/index")); } - + @RequestMapping("/add") - @Menu(type = "admin" , subtype = "user") - public ModelAndView add(ModelMap map , HttpServletRequest request) { + @Menu(type = "admin", subtype = "user") + public ModelAndView add(ModelMap map, HttpServletRequest request) { return request(super.createRequestPageTempletResponse("/admin/user/add")); } - + @RequestMapping("/save") - @Menu(type = "admin" , subtype = "user") - public ModelAndView save(HttpServletRequest request ,@Valid User user) { - String msg = "" ; - msg = validUser(user); - if(!StringUtils.isBlank(msg)){ - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg="+msg)); - }else{ - if(request.getParameter("admin")!=null){ - user.setUsertype("0"); - }else{ - user.setUsertype(null); - } - if(!StringUtils.isBlank(user.getPassword())){ - user.setPassword(MainUtils.md5(user.getPassword())); - } - - user.setOrgi(super.getOrgiByTenantshare(request)); - if(!StringUtils.isBlank(super.getUser(request).getOrgid())) { - user.setOrgid(super.getUser(request).getOrgid()); - }else { - user.setOrgid(MainContext.SYSTEM_ORGI); - } - userRepository.save(user) ; - OnlineUserUtils.clean(super.getOrgi(request)); - } - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg="+msg)); + @Menu(type = "admin", subtype = "user") + public ModelAndView save(HttpServletRequest request, @Valid User user) { + String msg = ""; + msg = validUser(user); + if (!StringUtils.isBlank(msg)) { + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); + } else { + if (request.getParameter("admin") != null) { + user.setUsertype("0"); + } else { + user.setUsertype(null); + } + if (!StringUtils.isBlank(user.getPassword())) { + user.setPassword(MainUtils.md5(user.getPassword())); + } + + user.setOrgi(super.getOrgiByTenantshare(request)); + if (!StringUtils.isBlank(super.getUser(request).getOrgid())) { + user.setOrgid(super.getUser(request).getOrgid()); + } else { + user.setOrgid(MainContext.SYSTEM_ORGI); + } + userRepository.save(user); + OnlineUserUtils.clean(super.getOrgi(request)); + } + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); } - + private String validUser(User user) { - String msg = ""; - User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(),false) ; - if(tempUser!=null) { - msg = "username_exist"; - return msg; - } - tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(),false) ; - if(tempUser!=null) { - msg = "email_exist"; - return msg; - } - tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(),false) ; - if(tempUser!=null) { - msg = "mobile_exist"; - return msg; - } - List tempUserList = userRepository.findBySipaccountAndDatastatus(user.getSipaccount(),false) ; - if(tempUserList.size()!=0&&user.getSipaccount()!="") { - msg = "sip_account_exist"; - return msg; - } - return msg; + String msg = ""; + User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(), false); + if (tempUser != null) { + msg = "username_exist"; + return msg; + } + tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(), false); + if (tempUser != null) { + msg = "email_exist"; + return msg; + } + tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(), false); + if (tempUser != null) { + msg = "mobile_exist"; + return msg; + } + + if (!validUserCallcenterParams(user)) { + msg = "sip_account_exist"; + return msg; + } + return msg; } - + @RequestMapping("/edit") - @Menu(type = "admin" , subtype = "user") - public ModelAndView edit(ModelMap map ,HttpServletRequest request , @Valid String id) { - ModelAndView view = request(super.createRequestPageTempletResponse("/admin/user/edit")) ; - view.addObject("userData", userRepository.findByIdAndOrgi(id, super.getOrgiByTenantshare(request))) ; + @Menu(type = "admin", subtype = "user") + public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) { + ModelAndView view = request(super.createRequestPageTempletResponse("/admin/user/edit")); + view.addObject("userData", userRepository.findByIdAndOrgi(id, super.getOrgiByTenantshare(request))); return view; } - + @RequestMapping("/update") - @Menu(type = "admin" , subtype = "user" , admin = true) - public ModelAndView update(HttpServletRequest request ,@Valid User user) { - User tempUser = userRepository.getOne(user.getId()) ; - if(tempUser != null){ - String msg = validUserUpdate(user,tempUser); - if(!StringUtils.isBlank(msg)){ - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg="+msg)); - } - tempUser.setUname(user.getUname()); - tempUser.setUsername(user.getUsername()); - tempUser.setEmail(user.getEmail()); - tempUser.setMobile(user.getMobile()); - tempUser.setSipaccount(user.getSipaccount()); - //切换成非坐席 判断是否坐席 以及 是否有对话 - if(!user.isAgent()) { - AgentStatus agentStatus = (AgentStatus) CacheHelper.getAgentStatusCacheBean().getCacheObject((super.getUser(request)).getId(), super.getOrgi(request)); - if(!(agentStatus==null && AutomaticServiceDist.getAgentUsers(super.getUser(request).getId(), super.getOrgi(request))==0)) { - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=t1")); - } - } - tempUser.setAgent(user.isAgent()); - - tempUser.setOrgi(super.getOrgiByTenantshare(request)); - - if(!StringUtils.isBlank(super.getUser(request).getOrgid())) { - tempUser.setOrgid(super.getUser(request).getOrgid()); - }else { - tempUser.setOrgid(MainContext.SYSTEM_ORGI); - } - - tempUser.setCallcenter(user.isCallcenter()); - if(!StringUtils.isBlank(user.getPassword())){ - tempUser.setPassword(MainUtils.md5(user.getPassword())); - } - - if(request.getParameter("admin")!=null){ - tempUser.setUsertype("0"); - }else{ - tempUser.setUsertype(null); - } - - if(tempUser.getCreatetime() == null){ - tempUser.setCreatetime(new Date()); - } - tempUser.setUpdatetime(new Date()); - userRepository.save(tempUser) ; - OnlineUserUtils.clean(super.getOrgi(request)); - } - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html")); + @Menu(type = "admin", subtype = "user", admin = true) + public ModelAndView update(HttpServletRequest request, @Valid User user) { + User tempUser = userRepository.getOne(user.getId()); + if (tempUser != null) { + String msg = validUserUpdate(user, tempUser); + if (!StringUtils.isBlank(msg)) { + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); + } + tempUser.setUname(user.getUname()); + tempUser.setUsername(user.getUsername()); + tempUser.setEmail(user.getEmail()); + tempUser.setMobile(user.getMobile()); + tempUser.setSipaccount(user.getSipaccount()); + //切换成非坐席 判断是否坐席 以及 是否有对话 + if (!user.isAgent()) { + AgentStatus agentStatus = (AgentStatus) CacheHelper.getAgentStatusCacheBean().getCacheObject((super.getUser(request)).getId(), super.getOrgi(request)); + if (!(agentStatus == null && AutomaticServiceDist.getAgentUsers(super.getUser(request).getId(), super.getOrgi(request)) == 0)) { + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=t1")); + } + } + tempUser.setAgent(user.isAgent()); + + tempUser.setOrgi(super.getOrgiByTenantshare(request)); + + if (!StringUtils.isBlank(super.getUser(request).getOrgid())) { + tempUser.setOrgid(super.getUser(request).getOrgid()); + } else { + tempUser.setOrgid(MainContext.SYSTEM_ORGI); + } + + tempUser.setCallcenter(user.isCallcenter()); + if (!StringUtils.isBlank(user.getPassword())) { + tempUser.setPassword(MainUtils.md5(user.getPassword())); + } + + if (request.getParameter("admin") != null) { + tempUser.setUsertype("0"); + } else { + tempUser.setUsertype(null); + } + + if (tempUser.getCreatetime() == null) { + tempUser.setCreatetime(new Date()); + } + tempUser.setUpdatetime(new Date()); + userRepository.save(tempUser); + OnlineUserUtils.clean(super.getOrgi(request)); + } + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html")); } - - private String validUserUpdate(User user,User oldUser) { - String msg = ""; - User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(),false) ; - if(tempUser!=null&&!user.getUsername().equals(oldUser.getUsername())) { - msg = "username_exist"; - return msg; - } - tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(),false) ; - if(tempUser!=null&&!user.getEmail().equals(oldUser.getEmail())) { - msg = "email_exist"; - return msg; - } - tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(),false) ; - if(tempUser!=null&&!user.getMobile().equals(oldUser.getMobile())) { - msg = "mobile_exist"; - return msg; - } - List tempUserList = userRepository.findBySipaccountAndDatastatus(user.getSipaccount(),false) ; - if(tempUserList.size()!=0&&user.getSipaccount()!=""&&!user.getSipaccount().equals(oldUser.getSipaccount())) { - msg = "sip_account_exist"; - return msg; - } - return msg; + + private String validUserUpdate(User user, User oldUser) { + String msg = ""; + User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(), false); + if (tempUser != null && !user.getUsername().equals(oldUser.getUsername())) { + msg = "username_exist"; + return msg; + } + tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(), false); + if (tempUser != null && !user.getEmail().equals(oldUser.getEmail())) { + msg = "email_exist"; + return msg; + } + tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(), false); + if (tempUser != null && !user.getMobile().equals(oldUser.getMobile())) { + msg = "mobile_exist"; + return msg; + } + + if (!validUserCallcenterParams(user)) { + msg = "sip_account_exist"; + return msg; + } + + return msg; } - + @RequestMapping("/delete") - @Menu(type = "admin" , subtype = "user") - public ModelAndView delete(HttpServletRequest request ,@Valid User user) { - String msg = "admin_user_delete" ; - if(user!=null){ - List userRole = userRoleRes.findByOrgiAndUser(super.getOrgiByTenantshare(request), user) ; - userRoleRes.delete(userRole); //删除用户的时候,同时删除用户对应的 - user = userRepository.getOne(user.getId()) ; - user.setDatastatus(true); - userRepository.save(user) ; - OnlineUserUtils.clean(super.getOrgi(request)); - }else{ - msg = "admin_user_not_exist" ; - } - return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg="+msg)); + @Menu(type = "admin", subtype = "user") + public ModelAndView delete(HttpServletRequest request, @Valid User user) { + String msg = "admin_user_delete"; + if (user != null) { + List userRole = userRoleRes.findByOrgiAndUser(super.getOrgiByTenantshare(request), user); + userRoleRes.delete(userRole); //删除用户的时候,同时删除用户对应的 + user = userRepository.getOne(user.getId()); + user.setDatastatus(true); + userRepository.save(user); + OnlineUserUtils.clean(super.getOrgi(request)); + } else { + msg = "admin_user_not_exist"; + } + return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); } - + + /** + * 根据是否开启呼叫中心模块检测账号 + * @param user + * @return + */ + private boolean validUserCallcenterParams(final User user) { + if (user.isCallcenter() && MainContext.isEnableCalloutModule()) { + List tempUserList = userRepository.findBySipaccountAndDatastatus(user.getSipaccount(), false); + if (tempUserList.size() != 0 && user.getSipaccount() != "") { + return false; + } + } + return true; + } + } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/util/Constants.java b/contact-center/app/src/main/java/com/chatopera/cc/util/Constants.java index 53004f80..c83644ba 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/util/Constants.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/util/Constants.java @@ -30,6 +30,14 @@ public class Constants { public final static String IM_MESSAGE_TYPE_MESSAGE = "message"; public final static String CHATBOT_EVENT_TYPE_CHAT = "chat"; + + /** + * Modules + */ + public final static String CSKEFU_MODULE_CALLOUT = "sales"; + public final static String CSKEFU_MODULE_CHATBOT = "chatbot"; + public final static String CSKEFU_MODULE_CONTACTS = "contacts"; + /** * Formatter */