diff --git a/contact-center/app/.gitignore b/contact-center/app/.gitignore index c5082ee2..d85c7295 100644 --- a/contact-center/app/.gitignore +++ b/contact-center/app/.gitignore @@ -1,3 +1,6 @@ +# dev profile +src/main/resources/application-dev.properties + # ignore plugins source code src/main/java/com/chatopera/cc/plugins/ diff --git a/contact-center/app/src/main/java/com/chatopera/cc/config/DelegateRequestMatchingFilter.java b/contact-center/app/src/main/java/com/chatopera/cc/config/DelegateRequestMatchingFilter.java index c11bb27a..47576160 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/config/DelegateRequestMatchingFilter.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/config/DelegateRequestMatchingFilter.java @@ -40,38 +40,38 @@ public class DelegateRequestMatchingFilter implements Filter { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { - HttpServletRequest request = (HttpServletRequest) req; - boolean matchAnyRoles = false ; - for(RequestMatcher anyRequest : ignoredRequests ){ - if(anyRequest.matches(request)){ - matchAnyRoles = true ; - } - } - User user = (User) request.getSession().getAttribute(Constants.USER_SESSION_NAME) ; - if(matchAnyRoles){ - if(user !=null && "0".equals(user.getUsertype())){ - chain.doFilter(req,resp); - }else{ - //重定向到 无权限执行操作的页面 - HttpServletResponse response = (HttpServletResponse) resp ; - response.sendRedirect("/?msg=security"); - } - }else{ - try{ - chain.doFilter(req,resp); - }catch(ClientAbortException ex){ - //Tomcat异常,不做处理 - } - } + HttpServletRequest request = (HttpServletRequest) req; + boolean matchAnyRoles = false; + for (RequestMatcher anyRequest : ignoredRequests) { + if (anyRequest.matches(request)) { + matchAnyRoles = true; + } + } + User user = (User) request.getSession().getAttribute(Constants.USER_SESSION_NAME); + if (matchAnyRoles) { + if (user != null && (user.isAdmin())) { + chain.doFilter(req, resp); + } else { + // 重定向到 无权限执行操作的页面 + HttpServletResponse response = (HttpServletResponse) resp; + response.sendRedirect("/?msg=security"); + } + } else { + try { + chain.doFilter(req, resp); + } catch (ClientAbortException ex) { + //Tomcat异常,不做处理 + } + } } - @Override - public void destroy() { - - } + @Override + public void destroy() { - @Override - public void init(FilterConfig arg0) throws ServletException { - - } + } + + @Override + public void init(FilterConfig arg0) throws ServletException { + + } } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/ApplicationController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/ApplicationController.java index ee80b6ea..4fc4d949 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/ApplicationController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/ApplicationController.java @@ -51,8 +51,10 @@ public class ApplicationController extends Handler { view.addObject("timeDifference", timezone.getRawOffset()); if (super.isEnabletneant()) { - //多租户启用 非超级管理员 一定要选择租户才能进入界面 - if (!logined.isSuperuser() && StringUtils.isNotBlank(logined.getOrgid()) && super.isTenantconsole() && MainContext.SYSTEM_ORGI.equals(logined.getOrgi())) { + // 多租户启用 非管理员 一定要选择租户才能进入界面 + if (!logined.isAdmin() && StringUtils.isNotBlank( + logined.getOrgid()) && super.isTenantconsole() && MainContext.SYSTEM_ORGI.equals( + logined.getOrgi())) { view = request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index")); } if (StringUtils.isBlank(logined.getOrgid())) { diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/Handler.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/Handler.java index 6c3604eb..40864ef1 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/Handler.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/Handler.java @@ -120,8 +120,8 @@ public class Handler { User u = getUser(request); if (u == null) { throw new CSKefuException("[esOrganFilter] 未能获取到登录用户。"); - } else if (u.isSuperuser()) { - // 超级管理员, 查看任何数据 + } else if (u.isAdmin()) { + // 管理员, 查看任何数据 return true; } else { // 用户在部门中,通过部门过滤数据 @@ -145,7 +145,8 @@ public class Handler { String q = request.getParameter("q"); q = q.replaceAll("(OR|AND|NOT|:|\\(|\\))", ""); if (StringUtils.isNotBlank(q)) { - queryBuilder.must(QueryBuilders.boolQuery().must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND))); + queryBuilder.must( + QueryBuilders.boolQuery().must(new QueryStringQueryBuilder(q).defaultOperator(Operator.AND))); map.put("q", q); } } @@ -188,12 +189,14 @@ public class Handler { RangeQueryBuilder rangeQuery = null; // 拨打时间区间查询 - if (StringUtils.isNotBlank(request.getParameter("callbegin")) || StringUtils.isNotBlank(request.getParameter("callend"))) { + if (StringUtils.isNotBlank(request.getParameter("callbegin")) || StringUtils.isNotBlank( + request.getParameter("callend"))) { if (StringUtils.isNotBlank(request.getParameter("callbegin"))) { try { - rangeQuery = QueryBuilders.rangeQuery("calltime").from(MainUtils.dateFormate.parse(request.getParameter("callbegin")).getTime()); + rangeQuery = QueryBuilders.rangeQuery("calltime").from( + MainUtils.dateFormate.parse(request.getParameter("callbegin")).getTime()); } catch (ParseException e) { e.printStackTrace(); @@ -204,7 +207,8 @@ public class Handler { try { if (rangeQuery == null) { - rangeQuery = QueryBuilders.rangeQuery("calltime").to(MainUtils.dateFormate.parse(request.getParameter("callend")).getTime()); + rangeQuery = QueryBuilders.rangeQuery("calltime").to( + MainUtils.dateFormate.parse(request.getParameter("callend")).getTime()); } else { rangeQuery.to(MainUtils.dateFormate.parse(request.getParameter("callend")).getTime()); } @@ -218,12 +222,14 @@ public class Handler { map.put("callend", request.getParameter("callend")); } // 预约时间区间查询 - if (StringUtils.isNotBlank(request.getParameter("apbegin")) || StringUtils.isNotBlank(request.getParameter("apend"))) { + if (StringUtils.isNotBlank(request.getParameter("apbegin")) || StringUtils.isNotBlank( + request.getParameter("apend"))) { if (StringUtils.isNotBlank(request.getParameter("apbegin"))) { try { - rangeQuery = QueryBuilders.rangeQuery("aptime").from(MainUtils.dateFormate.parse(request.getParameter("apbegin")).getTime()); + rangeQuery = QueryBuilders.rangeQuery("aptime").from( + MainUtils.dateFormate.parse(request.getParameter("apbegin")).getTime()); } catch (ParseException e) { e.printStackTrace(); @@ -234,7 +240,8 @@ public class Handler { try { if (rangeQuery == null) { - rangeQuery = QueryBuilders.rangeQuery("aptime").to(MainUtils.dateFormate.parse(request.getParameter("apend")).getTime()); + rangeQuery = QueryBuilders.rangeQuery("aptime").to( + MainUtils.dateFormate.parse(request.getParameter("apend")).getTime()); } else { rangeQuery.to(MainUtils.dateFormate.parse(request.getParameter("apend")).getTime()); } @@ -281,6 +288,7 @@ public class Handler { * 创建或从HTTP会话中查找到访客的User对象,该对象不在数据库中,属于临时会话。 * 这个User很可能是打开一个WebIM访客聊天控件,随机生成用户名,之后和Contact关联 * 这个用户可能关联一个OnlineUser,如果开始给TA分配坐席 + * * @param request * @param userid * @param nickname @@ -298,7 +306,8 @@ public class Handler { if (StringUtils.isNotBlank(nickname)) { user.setUsername(nickname); } else { - Map sessionMessage = cache.findOneSystemMapByIdAndOrgi(request.getSession().getId(), MainContext.SYSTEM_ORGI); + Map sessionMessage = cache.findOneSystemMapByIdAndOrgi( + request.getSession().getId(), MainContext.SYSTEM_ORGI); if (sessionMessage != null) { String struname = sessionMessage.get("username"); String strcname = sessionMessage.get("company_name"); @@ -327,7 +336,8 @@ public class Handler { if (StringUtils.isNotBlank(nickname)) { user.setUsername(nickname); } else { - Map sessionMessage = cache.findOneSystemMapByIdAndOrgi(sessionid, MainContext.SYSTEM_ORGI); + Map sessionMessage = cache.findOneSystemMapByIdAndOrgi( + sessionid, MainContext.SYSTEM_ORGI); if (sessionMessage != null) { String struname = sessionMessage.get("username"); String strcname = sessionMessage.get("company_name"); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/LoginController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/LoginController.java index cd9745a5..3da04dec 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/LoginController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/LoginController.java @@ -88,6 +88,9 @@ public class LoginController extends Handler { @Autowired private AgentSessionProxy agentSessionProxy; + @Autowired + private UserProxy userProxy; + /** * 登录页面 * @@ -196,7 +199,7 @@ public class LoginController extends Handler { if ((loginUser.isAgent() && loginUser.getRoleAuthMap().containsKey("A01") && ((boolean) loginUser.getRoleAuthMap().get("A01") == true)) - || loginUser.isSuperuser()) { + || loginUser.isAdmin()) { try { /**************************************** * 登录成功,设置该坐席为就绪状态(默认) @@ -215,7 +218,7 @@ public class LoginController extends Handler { AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), - user.isSuperuser(), // 0代表admin + user.isAdmin(), // 0代表admin agentStatus.getAgentno(), MainContext.AgentStatusEnum.OFFLINE.toString(), MainContext.AgentStatusEnum.READY.toString(), @@ -273,7 +276,7 @@ public class LoginController extends Handler { // 登录成功 判断是否进入多租户页面 SystemConfig systemConfig = MainUtils.getSystemConfig(); - if (systemConfig != null && systemConfig.isEnabletneant() && systemConfig.isTenantconsole() && !loginUser.isSuperuser()) { + if (systemConfig != null && systemConfig.isEnabletneant() && systemConfig.isTenantconsole() && !loginUser.isAdmin()) { view = new ModelAndView("redirect:/apps/tenant/index"); } List userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser); @@ -284,7 +287,7 @@ public class LoginController extends Handler { } // 获取用户部门以及下级部门 - UserProxy.attachOrgansPropertiesForUser(loginUser); + userProxy.attachOrgansPropertiesForUser(loginUser); // 获取用户的角色权限,进行授权 List roleAuthList = roleAuthRes.findAll(new Specification() { @@ -381,7 +384,7 @@ public class LoginController extends Handler { return request(super.createRequestPageTempletResponse("redirect:/register.html?msg=" + msg)); } else { user.setUname(user.getUsername()); - user.setUsertype("0"); + user.setAdmin(true); if (StringUtils.isNotBlank(user.getPassword())) { user.setPassword(MainUtils.md5(user.getPassword())); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/OrganController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/OrganController.java index 5d41ebff..024bd76b 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/OrganController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/OrganController.java @@ -80,10 +80,14 @@ public class OrganController extends Handler { @Autowired private Cache cache; + @Autowired + private UserProxy userProxy; + @RequestMapping("/index") @Menu(type = "admin", subtype = "organ") public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String organ, @Valid String msg) { - List organList = organRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request)); + List organList = organRepository.findByOrgiAndOrgid( + super.getOrgiByTenantshare(request), super.getOrgid(request)); map.addAttribute("organList", organList); if (organList.size() > 0) { Organ organData = null; @@ -98,11 +102,16 @@ public class OrganController extends Handler { map.addAttribute("organData", organData = organList.get(0)); } if (organData != null) { - map.addAttribute("userList", UserProxy.findByOrganAndOrgiAndDatastatus(organData.getId(), super.getOrgiByTenantshare(request), false)); + map.addAttribute( + "userList", userProxy.findByOrganAndOrgiAndDatastatus(organData.getId(), + super.getOrgiByTenantshare(request), + false)); } } map.addAttribute("areaList", areaRepository.findByOrgi(super.getOrgiByTenantshare(request))); - map.addAttribute("roleList", roleRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request))); + map.addAttribute( + "roleList", roleRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), + super.getOrgid(request))); map.put("msg", msg); return request(super.createAdminTempletResponse("/admin/organ/index")); } @@ -118,7 +127,9 @@ public class OrganController extends Handler { map.addAttribute("area", areaRepository.findByIdAndOrgi(area, super.getOrgiByTenantshare(request))); } - map.addAttribute("organList", organRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request))); + map.addAttribute( + "organList", organRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), + super.getOrgid(request))); return request(super.createRequestPageTempletResponse("/admin/organ/add")); } @@ -126,7 +137,8 @@ public class OrganController extends Handler { @RequestMapping("/save") @Menu(type = "admin", subtype = "organ") public ModelAndView save(HttpServletRequest request, @Valid Organ organ) { - Organ tempOrgan = organRepository.findByNameAndOrgiAndOrgid(organ.getName(), super.getOrgiByTenantshare(request), super.getOrgid(request)); + Organ tempOrgan = organRepository.findByNameAndOrgiAndOrgid( + organ.getName(), super.getOrgiByTenantshare(request), super.getOrgid(request)); String msg = "admin_organ_new_success"; String firstId = null; if (tempOrgan != null) { @@ -145,7 +157,8 @@ public class OrganController extends Handler { OnlineUserProxy.clean(super.getOrgi(request)); } - return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + firstId)); + return request(super.createRequestPageTempletResponse( + "redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + firstId)); } /** @@ -159,9 +172,12 @@ public class OrganController extends Handler { @RequestMapping("/seluser") @Menu(type = "admin", subtype = "seluser", admin = true) public ModelAndView seluser(ModelMap map, HttpServletRequest request, @Valid String organ) { - map.addAttribute("userList", userRepository.findByOrgiAndDatastatusAndOrgid(super.getOrgiByTenantshare(request), false, super.getOrgid(request))); + map.addAttribute( + "userList", userRepository.findByOrgiAndDatastatusAndOrgid(super.getOrgiByTenantshare(request), false, + super.getOrgid(request))); Organ organData = organRepository.findByIdAndOrgi(organ, super.getOrgiByTenantshare(request)); - map.addAttribute("userOrganList", UserProxy.findByOrganAndOrgiAndDatastatus(organ, super.getOrgiByTenantshare(request), false)); + map.addAttribute("userOrganList", userProxy + .findByOrganAndOrgiAndDatastatus(organ, super.getOrgiByTenantshare(request), false)); map.addAttribute("organ", organData); return request(super.createRequestPageTempletResponse("/admin/organ/seluser")); } @@ -181,7 +197,7 @@ public class OrganController extends Handler { HttpServletRequest request, final @Valid String[] users, final @Valid String organ - ) { + ) { logger.info("[saveuser] save users {} into organ {}", StringUtils.join(users, ","), organ); final User loginUser = super.getUser(request); @@ -205,12 +221,13 @@ public class OrganController extends Handler { /** * 以下更新技能组状态 */ - AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig(user.getId(), super.getOrgiByTenantshare(request)); + AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig( + user.getId(), super.getOrgiByTenantshare(request)); // TODO 因为一个用户可以包含在多个技能组中,所以,skill应该对应 // 一个List列表,此处需要重构Skill为列表 if (agentStatus != null) { - UserProxy.attachOrgansPropertiesForUser(user); + userProxy.attachOrgansPropertiesForUser(user); agentStatus.setSkills(user.getSkills()); cache.putAgentStatusByOrgi(agentStatus, super.getOrgiByTenantshare(request)); } @@ -228,7 +245,7 @@ public class OrganController extends Handler { final HttpServletRequest request, final @Valid String id, final @Valid String organ - ) { + ) { logger.info("[userroledelete] user id {}, organ {}", id, organ); if (id != null) { organUserRes.deleteOrganUserByUseridAndOrgan(id, organ); @@ -244,7 +261,9 @@ public class OrganController extends Handler { map.addAttribute("areaList", areaRepository.findByOrgi(super.getOrgiByTenantshare(request))); view.addObject("organData", organRepository.findByIdAndOrgi(id, super.getOrgiByTenantshare(request))); - map.addAttribute("organList", organRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request))); + map.addAttribute( + "organList", organRepository.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), + super.getOrgid(request))); return view; } @@ -252,7 +271,8 @@ public class OrganController extends Handler { @Menu(type = "admin", subtype = "organ") public ModelAndView update(HttpServletRequest request, @Valid Organ organ) { String msg = organProxy.updateOrgan(organ, super.getOrgi(request), super.getUser(request)); - return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); + return request(super.createRequestPageTempletResponse( + "redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); } @RequestMapping("/area") @@ -283,7 +303,8 @@ public class OrganController extends Handler { } else { msg = "admin_organ_update_not_exist"; } - return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); + return request(super.createRequestPageTempletResponse( + "redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); } @RequestMapping("/delete") @@ -328,6 +349,7 @@ public class OrganController extends Handler { } } - return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?organ=" + organData.getId())); + return request( + super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?organ=" + organData.getId())); } } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/UsersController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/UsersController.java index 6a68e6f7..a9047524 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/UsersController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/UsersController.java @@ -27,6 +27,7 @@ import com.chatopera.cc.model.UserRole; import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRoleRepository; import com.chatopera.cc.proxy.OnlineUserProxy; +import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.util.Menu; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -64,22 +65,26 @@ public class UsersController extends Handler { @Autowired private Cache cache; + @Autowired + private UserProxy userProxy; + @RequestMapping("/index") @Menu(type = "admin", subtype = "user") public ModelAndView index(ModelMap map, HttpServletRequest request) throws IOException { map.addAttribute( "userList", - userRepository.findByDatastatusAndOrgiAndOrgid( + userRepository.findByDatastatusAndOrgiAndOrgidAndSuperadminNot( false, super.getOrgiByTenantshare(request), super.getOrgid(request), + true, new PageRequest( super.getP(request), super.getPs(request), Sort.Direction.ASC, "createtime" ) - ) + ) ); return request(super.createAdminTempletResponse("/admin/user/index")); } @@ -93,76 +98,11 @@ public class UsersController extends Handler { @RequestMapping("/save") @Menu(type = "admin", subtype = "user") public ModelAndView save(HttpServletRequest request, @Valid User user) { - String msg = ""; - msg = validUser(user); - if (!StringUtils.isBlank(msg) && !msg.equals("new_user_success")) { - 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 (user.isSuperuser()) { - user.setSuperuser(true); - user.setUsertype("0"); - } else { - user.setSuperuser(false); - user.setUsertype(""); - } - 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); - OnlineUserProxy.clean(super.getOrgi(request)); - } + String msg = userProxy.createNewUser( + user, super.getOrgi(request), super.getUser(request).getOrgid(), super.getOrgiByTenantshare(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; - } - - if (StringUtils.isNotBlank(user.getEmail())) { - tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(), false); - if (tempUser != null) { - msg = "email_exist"; - return msg; - } - } - - if (StringUtils.isNotBlank(user.getMobile())) { - tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(), false); - if (tempUser != null) { - msg = "mobile_exist"; - return msg; - } - } - - if (!validUserCallcenterParams(user)) { - msg = "sip_account_exist"; - return msg; - } - - if (tempUser == null && validUserCallcenterParams(user)) { - msg = "new_user_success"; - return msg; - } - - return msg; - } - @RequestMapping("/edit") @Menu(type = "admin", subtype = "user") public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) { @@ -177,16 +117,9 @@ public class UsersController extends Handler { User tempUser = userRepository.getOne(user.getId()); String msg = validUserUpdate(user, tempUser); if (tempUser != null) { - if (!StringUtils.isBlank(msg) && !msg.equals("edit_user_success")) { + if (StringUtils.isNotBlank(msg) && !msg.equals("edit_user_success")) { return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); } - if (user.isSuperuser()) { - tempUser.setSuperuser(true); - tempUser.setUsertype("0"); - } else { - tempUser.setSuperuser(false); - tempUser.setUsertype(""); - } tempUser.setUname(user.getUname()); tempUser.setUsername(user.getUsername()); tempUser.setEmail(user.getEmail()); @@ -205,23 +138,17 @@ public class UsersController extends Handler { tempUser.setOrgi(super.getOrgiByTenantshare(request)); - if (!StringUtils.isBlank(super.getUser(request).getOrgid())) { + if (StringUtils.isNotBlank(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())) { + if (StringUtils.isNotBlank(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()); } @@ -256,20 +183,18 @@ public class UsersController extends Handler { } } - if (!validUserCallcenterParams(user)) { + if (!userProxy.validUserCallcenterParams(user)) { msg = "sip_account_exist"; return msg; } if (user.getUsername().equals(oldUser.getUsername()) && user.getEmail().equals( - oldUser.getEmail()) && user.getMobile().equals(oldUser.getMobile()) && validUserCallcenterParams( + oldUser.getEmail()) && user.getMobile().equals( + oldUser.getMobile()) && userProxy.validUserCallcenterParams( user)) { return ""; } - -// if () - return msg; } @@ -290,18 +215,4 @@ public class UsersController extends Handler { return request(super.createRequestPageTempletResponse("redirect:/admin/user/index.html?msg=" + msg)); } - /** - * 根据是否开启呼叫中心模块检测账号 - * - * @param user - * @return - */ - private boolean validUserCallcenterParams(final User user) { - if (user.isCallcenter() && MainContext.hasModule(Constants.CSKEFU_MODULE_CALLOUT)) { - List tempUserList = userRepository.findBySipaccountAndDatastatus(user.getSipaccount(), false); - return tempUserList.size() == 0 || user.getSipaccount() == ""; - } - return true; - } - } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/channel/WebIMController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/channel/WebIMController.java index d3040e5f..ab0e240a 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/channel/WebIMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/channel/WebIMController.java @@ -73,6 +73,9 @@ public class WebIMController extends Handler { @Autowired private Cache cache; + @Autowired + private UserProxy userProxy; + @RequestMapping("/index") @Menu(type = "app", subtype = "app", admin = true) public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String snsid) { @@ -323,7 +326,7 @@ public class WebIMController extends Handler { organIdList.add(rel.getSkillid()); } } - userList = UserProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); + userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); } else { userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/config/SystemConfigController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/config/SystemConfigController.java index 1ebfd420..7bffa33c 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/config/SystemConfigController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/admin/config/SystemConfigController.java @@ -150,7 +150,7 @@ public class SystemConfigController extends Handler { @RequestMapping("/startentim") @Menu(type = "admin", subtype = "startentim", access = false, admin = true) public ModelAndView startentim(ModelMap map, HttpServletRequest request) throws SQLException { - MainContext.hasModule(Constants.CSKEFU_MODULE_ENTIM); + MainContext.enableModule(Constants.CSKEFU_MODULE_ENTIM); return request(super.createRequestPageTempletResponse("redirect:/admin/config/index.html")); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiAgentUserController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiAgentUserController.java index 4a966951..d03a014f 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiAgentUserController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiAgentUserController.java @@ -168,7 +168,7 @@ public class ApiAgentUserController extends Handler { final String userId = agentUser.getUserid(); // 检查权限 - if ((!logined.isSuperuser()) && (!StringUtils.equals( + if ((!logined.isAdmin()) && (!StringUtils.equals( agentUser.getAgentno(), logined.getId())) && (!isTransPermissionAllowed( agentAudits, logined))) { @@ -286,7 +286,7 @@ public class ApiAgentUserController extends Handler { final AgentUser agentUser = agentUserRes.findByIdAndOrgi(payload.get("id").getAsString(), orgi); if (agentUser != null) { if ((StringUtils.equals( - logined.getId(), agentUser.getAgentno()) || logined.isSuperuser())) { + logined.getId(), agentUser.getAgentno()) || logined.isAdmin())) { // 删除访客-坐席关联关系,包括缓存 try { AutomaticServiceDist.deleteAgentUser(agentUser, orgi); @@ -368,4 +368,4 @@ public class ApiAgentUserController extends Handler { } return false; } -} \ No newline at end of file +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiServiceQueneController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiServiceQueneController.java index 1a7bedbe..d984f9bf 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiServiceQueneController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiServiceQueneController.java @@ -74,7 +74,9 @@ public class ApiServiceQueneController extends Handler { @RequestMapping(method = RequestMethod.GET) @Menu(type = "apps", subtype = "user", access = true) public ResponseEntity list(HttpServletRequest request) { - return new ResponseEntity<>(new RestResult(RestResultType.OK, AutomaticServiceDist.getAgentReport(super.getOrgi(request))), HttpStatus.OK); + return new ResponseEntity<>( + new RestResult(RestResultType.OK, AutomaticServiceDist.getAgentReport(super.getOrgi(request))), + HttpStatus.OK); } /** @@ -85,12 +87,14 @@ public class ApiServiceQueneController extends Handler { */ @RequestMapping(method = RequestMethod.PUT) @Menu(type = "apps", subtype = "user", access = true) - public ResponseEntity agentStatus(HttpServletRequest request, - @Valid String status) throws CharacterCodingException { + public ResponseEntity agentStatus( + HttpServletRequest request, + @Valid String status) throws CharacterCodingException { User logined = super.getUser(request); AgentStatus agentStatus = null; if (StringUtils.isNotBlank(status) && status.equals(MainContext.AgentStatusEnum.READY.toString())) { - List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi(logined.getId(), super.getOrgi(request)); + List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi( + logined.getId(), super.getOrgi(request)); if (agentStatusList.size() > 0) { agentStatus = agentStatusList.get(0); agentStatus.setSkills(logined.getSkills()); @@ -104,7 +108,10 @@ public class ApiServiceQueneController extends Handler { SessionConfig sessionConfig = AutomaticServiceDist.initSessionConfig(super.getOrgi(request)); - agentStatus.setUsers(agentUserRepository.countByAgentnoAndStatusAndOrgi(logined.getId(), MainContext.AgentUserStatusEnum.INSERVICE.toString(), super.getOrgi(request))); + agentStatus.setUsers(agentUserRepository.countByAgentnoAndStatusAndOrgi( + logined.getId(), + MainContext.AgentUserStatusEnum.INSERVICE.toString(), + super.getOrgi(request))); agentStatus.setUpdatetime(new Date()); @@ -117,38 +124,64 @@ public class ApiServiceQueneController extends Handler { /** * 更新当前用户状态 */ - agentStatus.setUsers(cache.getInservAgentUsersSizeByAgentnoAndOrgi(agentStatus.getAgentno(), super.getOrgi(request))); + agentStatus.setUsers(cache.getInservAgentUsersSizeByAgentnoAndOrgi( + agentStatus.getAgentno(), + super.getOrgi(request))); agentStatus.setStatus(MainContext.AgentStatusEnum.READY.toString()); cache.putAgentStatusByOrgi(agentStatus, super.getOrgi(request)); - AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), logined.isSuperuser(), agentStatus.getAgentno(), MainContext.AgentStatusEnum.OFFLINE.toString(), MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), null); + AutomaticServiceDist.recordAgentStatus( + agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), + logined.isAdmin(), agentStatus.getAgentno(), + MainContext.AgentStatusEnum.OFFLINE.toString(), MainContext.AgentStatusEnum.READY.toString(), + MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), null); AutomaticServiceDist.allotAgent(agentStatus.getAgentno(), super.getOrgi(request)); } } else if (StringUtils.isNotBlank(status)) { if (status.equals(MainContext.AgentStatusEnum.NOTREADY.toString())) { - List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi(logined.getId(), super.getOrgi(request)); + List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi( + logined.getId(), super.getOrgi(request)); for (AgentStatus temp : agentStatusList) { - AutomaticServiceDist.recordAgentStatus(temp.getAgentno(), temp.getUsername(), temp.getAgentno(), logined.isSuperuser(), temp.getAgentno(), temp.isBusy() ? MainContext.AgentStatusEnum.BUSY.toString() : MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentStatusEnum.NOTREADY.toString(), MainContext.AgentWorkType.MEIDIACHAT.toString(), temp.getOrgi(), temp.getUpdatetime()); + AutomaticServiceDist.recordAgentStatus( + temp.getAgentno(), temp.getUsername(), temp.getAgentno(), + logined.isAdmin(), + temp.getAgentno(), + temp.isBusy() ? MainContext.AgentStatusEnum.BUSY.toString() : MainContext.AgentStatusEnum.READY.toString(), + MainContext.AgentStatusEnum.NOTREADY.toString(), + MainContext.AgentWorkType.MEIDIACHAT.toString(), temp.getOrgi(), temp.getUpdatetime()); agentStatusRepository.delete(temp); } cache.deleteAgentStatusByAgentnoAndOrgi(super.getUser(request).getId(), super.getOrgi(request)); } else if (StringUtils.isNotBlank(status) && status.equals(MainContext.AgentStatusEnum.BUSY.toString())) { - List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi(logined.getId(), super.getOrgi(request)); + List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi( + logined.getId(), super.getOrgi(request)); if (agentStatusList.size() > 0) { agentStatus = agentStatusList.get(0); agentStatus.setBusy(true); - AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), logined.isSuperuser(), agentStatus.getAgentno(), MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentStatusEnum.BUSY.toString(), MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), agentStatus.getUpdatetime()); + AutomaticServiceDist.recordAgentStatus( + agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), + logined.isAdmin(), agentStatus.getAgentno(), + MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentStatusEnum.BUSY.toString(), + MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), + agentStatus.getUpdatetime()); agentStatus.setUpdatetime(new Date()); agentStatusRepository.save(agentStatus); cache.putAgentStatusByOrgi(agentStatus, super.getOrgi(request)); } - } else if (StringUtils.isNotBlank(status) && status.equals(MainContext.AgentStatusEnum.NOTBUSY.toString())) { - List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi(logined.getId(), super.getOrgi(request)); + } else if (StringUtils.isNotBlank(status) && status.equals( + MainContext.AgentStatusEnum.NOTBUSY.toString())) { + List agentStatusList = agentStatusRepository.findByAgentnoAndOrgi( + logined.getId(), super.getOrgi(request)); if (agentStatusList.size() > 0) { agentStatus = agentStatusList.get(0); agentStatus.setBusy(false); - AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), logined.isSuperuser(), agentStatus.getAgentno(), MainContext.AgentStatusEnum.BUSY.toString(), MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), agentStatus.getUpdatetime()); + AutomaticServiceDist.recordAgentStatus( + agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), + logined.isAdmin(), agentStatus.getAgentno(), + MainContext.AgentStatusEnum.BUSY.toString(), MainContext.AgentStatusEnum.READY.toString(), + MainContext.AgentWorkType.MEIDIACHAT.toString(), agentStatus.getOrgi(), + agentStatus.getUpdatetime()); agentStatus.setUpdatetime(new Date()); agentStatusRepository.save(agentStatus); @@ -156,7 +189,8 @@ public class ApiServiceQueneController extends Handler { } AutomaticServiceDist.allotAgent(agentStatus.getAgentno(), super.getOrgi(request)); } - AutomaticServiceDist.broadcastAgentsStatus(super.getOrgi(request), "agent", "api", super.getUser(request).getId()); + AutomaticServiceDist.broadcastAgentsStatus( + super.getOrgi(request), "agent", "api", super.getUser(request).getId()); } return new ResponseEntity<>(new RestResult(RestResultType.OK, agentStatus), HttpStatus.OK); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiUserController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiUserController.java index 5e4f99e5..1a12aae5 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiUserController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/api/ApiUserController.java @@ -16,98 +16,195 @@ */ package com.chatopera.cc.handler.api; -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.chatopera.cc.basic.MainUtils; +import com.chatopera.cc.handler.Handler; +import com.chatopera.cc.handler.api.request.RestUtils; +import com.chatopera.cc.model.OrganUser; +import com.chatopera.cc.model.User; +import com.chatopera.cc.persistence.repository.OrganUserRepository; +import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.RestResult; -import com.chatopera.cc.handler.Handler; -import com.chatopera.cc.model.User; +import com.chatopera.cc.util.RestResultType; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; 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.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.chatopera.cc.basic.MainUtils; -import com.chatopera.cc.persistence.repository.UserRepository; -import com.chatopera.cc.util.RestResultType; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; @RestController @RequestMapping("/api/user") public class ApiUserController extends Handler { + private final static Logger logger = LoggerFactory.getLogger(ApiUserController.class); - @Autowired - private UserRepository userRepository; + @Autowired + private UserRepository userRepository; - /** - * 返回用户列表,支持分页,分页参数为 p=1&ps=50,默认分页尺寸为 20条每页 - * @param request - * @param username 搜索用户名,精确搜索 - * @return - */ - @RequestMapping( method = RequestMethod.GET) - @Menu(type = "apps" , subtype = "user" , access = true) - public ResponseEntity list(HttpServletRequest request , @Valid String id , @Valid String username) { - Page userList = null ; - if(!StringUtils.isBlank(id)){ - userList = userRepository.findByIdAndOrgi(id, super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request))) ; - }else{ - if(!StringUtils.isBlank(username)){ - userList = userRepository.findByDatastatusAndOrgiAndUsernameLike(false, super.getOrgi(request), username , new PageRequest(super.getP(request), super.getPs(request))) ; - }else{ - userList = userRepository.findByDatastatusAndOrgi(false, super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request))) ; - } - } + @Autowired + private OrganUserRepository organUserRepository; + + /** + * 返回用户列表,支持分页,分页参数为 p=1&ps=50,默认分页尺寸为 20条每页 + * + * @param request + * @param username 搜索用户名,精确搜索 + * @return + */ + @RequestMapping(method = RequestMethod.GET) + @Menu(type = "apps", subtype = "user", access = true) + public ResponseEntity list(HttpServletRequest request, @Valid String id, @Valid String username) { + Page userList = null; + if (!StringUtils.isBlank(id)) { + userList = userRepository.findByIdAndOrgi( + id, super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request))); + } else { + if (!StringUtils.isBlank(username)) { + userList = userRepository.findByDatastatusAndOrgiAndUsernameLike( + false, super.getOrgi(request), username, new PageRequest( + super.getP(request), + super.getPs(request))); + } else { + userList = userRepository.findByDatastatusAndOrgi( + false, super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request))); + } + } return new ResponseEntity<>(new RestResult(RestResultType.OK, userList), HttpStatus.OK); } - - /** - * 新增或修改用户用户 ,在修改用户信息的时候,如果用户 密码未改变,请设置为 NULL - * @param request - * @param user - * @return - */ - @RequestMapping(method = RequestMethod.PUT) - @Menu(type = "apps" , subtype = "user" , access = true) - public ResponseEntity put(HttpServletRequest request , @Valid User user) { - if(user != null && !StringUtils.isBlank(user.getUsername())){ - if(!StringUtils.isBlank(user.getPassword())){ - user.setPassword(MainUtils.md5(user.getPassword())); - userRepository.save(user) ; - }else if(!StringUtils.isBlank(user.getId())){ - User old = userRepository.findByIdAndOrgi(user.getId(), super.getOrgi(request)) ; - user.setPassword(old.getPassword()); - userRepository.save(user) ; - } - } + + /** + * 新增或修改用户用户 ,在修改用户信息的时候,如果用户 密码未改变,请设置为 NULL + * + * @param request + * @param user + * @return + */ + @RequestMapping(method = RequestMethod.PUT) + @Menu(type = "apps", subtype = "user", access = true) + public ResponseEntity put(HttpServletRequest request, @Valid User user) { + if (user != null && !StringUtils.isBlank(user.getUsername())) { + if (!StringUtils.isBlank(user.getPassword())) { + user.setPassword(MainUtils.md5(user.getPassword())); + userRepository.save(user); + } else if (!StringUtils.isBlank(user.getId())) { + User old = userRepository.findByIdAndOrgi(user.getId(), super.getOrgi(request)); + user.setPassword(old.getPassword()); + userRepository.save(user); + } + } return new ResponseEntity<>(new RestResult(RestResultType.OK), HttpStatus.OK); } - - /** - * 删除用户,只提供 按照用户ID删除 , 并且,不能删除系统管理员 - * @param request - * @param id - * @return - */ - @RequestMapping(method = RequestMethod.DELETE) - @Menu(type = "apps" , subtype = "user" , access = true) - public ResponseEntity delete(HttpServletRequest request , @Valid String id) { - RestResult result = new RestResult(RestResultType.OK) ; - User user = null ; - if(!StringUtils.isBlank(id)){ - user = userRepository.findByIdAndOrgi(id, super.getOrgi(request)) ; - if(!user.getUsertype().equals("0")){ //系统管理员, 不允许 使用 接口删除 - userRepository.delete(user); - }else{ - result.setStatus(RestResultType.USER_DELETE); - } - } + + /** + * 删除用户,只提供 按照用户ID删除 , 并且,不能删除系统管理员 + * + * @param request + * @param id + * @return + */ + @RequestMapping(method = RequestMethod.DELETE) + @Menu(type = "apps", subtype = "user", access = true) + public ResponseEntity delete(HttpServletRequest request, @Valid String id) { + RestResult result = new RestResult(RestResultType.OK); + User user = null; + if (!StringUtils.isBlank(id)) { + user = userRepository.findByIdAndOrgi(id, super.getOrgi(request)); + if (!user.isSuperadmin()) { //系统管理员, 不允许 使用 接口删除 + userRepository.delete(user); + } else { + result.setStatus(RestResultType.USER_DELETE); + } + } return new ResponseEntity<>(result, HttpStatus.OK); } -} \ No newline at end of file + + @RequestMapping(path = "/findByOrgan", method = RequestMethod.POST) + @Menu(type = "apps", subtype = "user", access = true) + public ResponseEntity findByOrgan(HttpServletRequest request, @Valid String organ) { + List organUsers = organUserRepository.findByOrgan(organ); + List userids = organUsers.stream().map(p -> p.getUserid()).collect(Collectors.toList()); + List users = userRepository.findAll(userids); + JSONArray json = new JSONArray(); + users.stream().forEach(u -> { + JSONObject obj = new JSONObject(); + obj.put("id", u.getId()); + obj.put("uname", u.getUname()); + json.add(obj); + }); + + return new ResponseEntity<>(new RestResult(RestResultType.OK, json), HttpStatus.OK); + } + + /** + * 用户管理 + * + * @param request + * @param body + * @param q + * @return + */ + @RequestMapping(method = RequestMethod.POST) + @Menu(type = "apps", subtype = "user", access = true) + public ResponseEntity operations(HttpServletRequest request, @RequestBody final String body, @Valid String q) { + logger.info("[operations] body {}, q {}", body, q); + final JsonObject j = StringUtils.isBlank(body) ? (new JsonObject()) : (new JsonParser()).parse( + body).getAsJsonObject(); + JsonObject json = new JsonObject(); + HttpHeaders headers = RestUtils.header(); + + if (!j.has("ops")) { + json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_1); + json.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的请求参数。"); + } else { + switch (StringUtils.lowerCase(j.get("ops").getAsString())) { + case "create": + json = create(request, j); + break; + default: + json.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_2); + json.addProperty(RestUtils.RESP_KEY_ERROR, "不合法的操作。"); + } + } + + return new ResponseEntity(json.toString(), headers, HttpStatus.OK); + + } + + /** + * 创建新用户 + * + * @param request + * @param payload + * @return + */ + private JsonObject create(final HttpServletRequest request, final JsonObject payload) { + JsonObject resp = new JsonObject(); + + // 从payload中创建User + + +// if (payload) { +// return resp; +// } + + return resp; + } + +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentAuditController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentAuditController.java index da3f8794..f80e6fab 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentAuditController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentAuditController.java @@ -85,7 +85,7 @@ public class AgentAuditController extends Handler { private ServiceSummaryRepository serviceSummaryRes; @Autowired - private StatusEventRepository statusEventRes; + private UserProxy userProxy; @Autowired private OnlineUserRepository onlineUserRes; @@ -121,7 +121,8 @@ public class AgentAuditController extends Handler { HttpServletRequest request, @Valid final String skill, @Valid final String agentno, - @Valid String sort) { + @Valid String sort + ) { final String orgi = super.getOrgi(request); final User logined = super.getUser(request); logger.info("[index] skill {}, agentno {}, logined {}", skill, agentno, logined.getId()); @@ -192,6 +193,38 @@ public class AgentAuditController extends Handler { return view; } + @RequestMapping("/query") + @Menu(type = "apps", subtype = "cca") + public ModelAndView query(HttpServletRequest request, String skill, String agentno) { + ModelAndView view = request(super.createRequestPageTempletResponse("/apps/cca/chatusers")); + + final String orgi = super.getOrgi(request); + final User logined = super.getUser(request); + + Sort defaultSort = new Sort(Sort.Direction.DESC, "status"); + + // 坐席对话列表 + List agentUsers; + + if (StringUtils.isBlank(skill) && StringUtils.isBlank(agentno)) { + agentUsers = agentUserRes.findByOrgiAndStatusAndAgentnoIsNot( + orgi, MainContext.AgentUserStatusEnum.INSERVICE.toString(), logined.getId(), defaultSort); + } else if (StringUtils.isNotBlank(skill) && StringUtils.isNotBlank(agentno)) { + agentUsers = agentUserRes.findByOrgiAndStatusAndSkillAndAgentno( + orgi, MainContext.AgentUserStatusEnum.INSERVICE.toString(), skill, agentno, defaultSort); + } else if (StringUtils.isNotBlank(skill)) { + agentUsers = agentUserRes.findByOrgiAndStatusAndSkillAndAgentnoIsNot( + orgi, MainContext.AgentUserStatusEnum.INSERVICE.toString(), skill, agentno, defaultSort); + } else { + // agent is not Blank + agentUsers = agentUserRes.findByOrgiAndStatusAndAgentno( + orgi, MainContext.AgentUserStatusEnum.INSERVICE.toString(), agentno, defaultSort); + } + + view.addObject("agentUserList", agentUsers); + + return view; + } @RequestMapping("/agentusers") @Menu(type = "apps", subtype = "cca") @@ -216,7 +249,8 @@ public class AgentAuditController extends Handler { ModelMap map, HttpServletRequest request, String id, - String channel) throws IOException, TemplateException { + String channel + ) throws IOException, TemplateException { String mainagentuser = "/apps/cca/mainagentuser"; if (channel.equals("phone")) { mainagentuser = "/apps/cca/mainagentuser_callout"; @@ -247,8 +281,11 @@ public class AgentAuditController extends Handler { view.addObject( "agentUserMessageList", this.chatMessageRepository.findByUsessionAndOrgi(agentUser.getUserid(), orgi, - new PageRequest(0, 20, Sort.Direction.DESC, - "updatetime"))); + new PageRequest(0, 20, Sort.Direction.DESC, + "updatetime" + ) + ) + ); AgentService agentService = null; if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) { agentService = this.agentServiceRes.findOne(agentUser.getAgentserviceid()); @@ -277,10 +314,11 @@ public class AgentAuditController extends Handler { view.addObject("serviceCount", Integer .valueOf(this.agentServiceRes - .countByUseridAndOrgiAndStatus(agentUser - .getUserid(), orgi, - MainContext.AgentUserStatusEnum.END - .toString()))); + .countByUseridAndOrgiAndStatus(agentUser + .getUserid(), orgi, + MainContext.AgentUserStatusEnum.END + .toString() + ))); } SessionConfig sessionConfig = AutomaticServiceDist.initSessionConfig(super.getOrgi(request)); @@ -314,7 +352,8 @@ public class AgentAuditController extends Handler { final @Valid String userid, final @Valid String agentserviceid, final @Valid String agentnoid, - final @Valid String agentuserid) { + final @Valid String agentuserid + ) { logger.info("[transfer] userId {}, agentUser {}", userid, agentuserid); final String orgi = super.getOrgi(request); final User logined = super.getUser(request); @@ -347,7 +386,7 @@ public class AgentAuditController extends Handler { for (final User o : userList) { o.setAgentStatus(agentStatusMap.get(o.getId())); // find user's skills - UserProxy.attachOrgansPropertiesForUser(o); + userProxy.attachOrgansPropertiesForUser(o); } map.addAttribute("userList", userList); @@ -378,7 +417,8 @@ public class AgentAuditController extends Handler { ModelMap map, HttpServletRequest request, @Valid String agentnoid, - @Valid String organ) { + @Valid String organ + ) { final String orgi = super.getOrgi(request); if (StringUtils.isNotBlank(organ)) { List usersids = new ArrayList(); @@ -392,7 +432,7 @@ public class AgentAuditController extends Handler { } List userList = userRes.findAll(usersids); for (User user : userList) { - UserProxy.attachOrgansPropertiesForUser(user); + userProxy.attachOrgansPropertiesForUser(user); for (final AgentStatus as : agentStatusList) { if (StringUtils.equals(as.getAgentno(), user.getId())) { user.setAgentStatus(as); @@ -428,7 +468,8 @@ public class AgentAuditController extends Handler { @Valid final String agentuserid, // 坐席访客ID @Valid final String currentAgentnoid, @Valid final String agentno, // 会话转接给下一个坐席 - @Valid final String memo) throws CSKefuException { + @Valid final String memo + ) throws CSKefuException { final String currentAgentno = currentAgentnoid; // 当前会话坐席的agentno final String orgi = super.getOrgi(request); @@ -488,7 +529,8 @@ public class AgentAuditController extends Handler { MainContext.MessageType.STATUS, agentUser.getUserid(), outMessage, - true); + true + ); } // 通知转接消息给新坐席 @@ -497,7 +539,8 @@ public class AgentAuditController extends Handler { peerSyncIM.send( MainContext.ReceiverType.AGENT, MainContext.ChannelType.WEBIM, agentUser.getAppid(), MainContext.MessageType.NEW, agentService.getAgentno(), - outMessage, true); + outMessage, true + ); } catch (Exception ex) { logger.error("[transfersave]", ex); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentController.java index db0d7965..8bfb75a8 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AgentController.java @@ -160,6 +160,9 @@ private BrokerPublisher brokerPublisher; + @Autowired + private UserProxy userProxy; + /** * 坐席从联系人列表进入坐席工作台和该联系人聊天 * @@ -521,7 +524,8 @@ public ModelAndView ready(HttpServletRequest request) { final User logined = super.getUser(request); final String orgi = super.getOrgi(request); - final AgentStatus agentStatus = agentProxy.resolveAgentStatusByAgentnoAndOrgi(logined.getId(), orgi, logined.getSkills()); + final AgentStatus agentStatus = agentProxy.resolveAgentStatusByAgentnoAndOrgi( + logined.getId(), orgi, logined.getSkills()); // 缓存就绪状态 agentProxy.ready(logined, agentStatus); @@ -538,7 +542,7 @@ AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), - StringUtils.equals(logined.getUsertype(), "0"), // 0代表admin + logined.isAdmin(), // 0代表admin agentStatus.getAgentno(), MainContext.AgentStatusEnum.NOTREADY.toString(), MainContext.AgentStatusEnum.READY.toString(), @@ -574,7 +578,7 @@ AutomaticServiceDist.recordAgentStatus(agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), - logined.isSuperuser(), // 0代表admin + logined.isAdmin(), // 0代表admin agentStatus.getAgentno(), MainContext.AgentStatusEnum.READY.toString(), MainContext.AgentStatusEnum.NOTREADY.toString(), @@ -603,7 +607,7 @@ agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), - "0".equals(super.getUser(request).getUsertype()), + super.getUser(request).isAdmin(), agentStatus.getAgentno(), MainContext.AgentStatusEnum.NOTBUSY.toString(), MainContext.AgentStatusEnum.BUSY.toString(), @@ -644,7 +648,7 @@ agentStatus.getAgentno(), agentStatus.getUsername(), agentStatus.getAgentno(), - "0".equals(super.getUser(request).getUsertype()), + super.getUser(request).isAdmin(), agentStatus.getAgentno(), MainContext.AgentStatusEnum.BUSY.toString(), MainContext.AgentStatusEnum.NOTBUSY.toString(), @@ -705,7 +709,7 @@ if (agentUser != null) { if ((StringUtils.equals( - logined.getId(), agentUser.getAgentno()) || logined.isSuperuser())) { + logined.getId(), agentUser.getAgentno()) || logined.isAdmin())) { // 删除访客-坐席关联关系,包括缓存 try { AutomaticServiceDist.deleteAgentUser(agentUser, orgi); @@ -1151,7 +1155,7 @@ for (final User o : userList) { o.setAgentStatus(agentStatusMap.get(o.getId())); // find user's skills - UserProxy.attachOrgansPropertiesForUser(o); + userProxy.attachOrgansPropertiesForUser(o); } map.addAttribute("userList", userList); @@ -1194,7 +1198,7 @@ } List userList = userRes.findAll(usersids); for (User user : userList) { - UserProxy.attachOrgansPropertiesForUser(user); + userProxy.attachOrgansPropertiesForUser(user); for (final AgentStatus as : agentStatusList) { if (StringUtils.equals(as.getAgentno(), user.getId())) { user.setAgentStatus(as); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AppsController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AppsController.java index d485fab8..d0f3bfff 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AppsController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/AppsController.java @@ -70,6 +70,9 @@ public class AppsController extends Handler { @Autowired private Cache cache; + @Autowired + private UserProxy userProxy; + @RequestMapping({"/apps/content"}) @Menu(type = "apps", subtype = "content") public ModelAndView content(ModelMap map, HttpServletRequest request, @Valid String msg) { @@ -90,7 +93,7 @@ public class AppsController extends Handler { Sort.Direction.DESC, "createtime" ) - ); + ); final long msec = System.currentTimeMillis(); final List contactIds = new ArrayList(); @@ -136,27 +139,59 @@ public class AppsController extends Handler { private void aggValues(ModelMap map, HttpServletRequest request) { map.put("agentReport", AutomaticServiceDist.getAgentReport(super.getOrgi(request))); - map.put("webIMReport", MainUtils.getWebIMReport(userEventRes.findByOrgiAndCreatetimeRange(super.getOrgi(request), MainUtils.getStartTime(), MainUtils.getEndTime()))); + map.put( + "webIMReport", MainUtils.getWebIMReport( + userEventRes.findByOrgiAndCreatetimeRange(super.getOrgi(request), MainUtils.getStartTime(), + MainUtils.getEndTime()))); // TODO 此处为什么不用agentReport中的agents? map.put("agents", getUsers(request).size()); - map.put("webIMInvite", MainUtils.getWebIMInviteStatus(onlineUserRes.findByOrgiAndStatus(super.getOrgi(request), MainContext.OnlineUserStatusEnum.ONLINE.toString()))); + map.put( + "webIMInvite", MainUtils.getWebIMInviteStatus(onlineUserRes.findByOrgiAndStatus( + super.getOrgi(request), + MainContext.OnlineUserStatusEnum.ONLINE.toString()))); - map.put("inviteResult", MainUtils.getWebIMInviteResult(onlineUserRes.findByOrgiAndAgentnoAndCreatetimeRange(super.getOrgi(request), super.getUser(request).getId(), MainUtils.getStartTime(), MainUtils.getEndTime()))); + map.put( + "inviteResult", MainUtils.getWebIMInviteResult( + onlineUserRes.findByOrgiAndAgentnoAndCreatetimeRange( + super.getOrgi(request), + super.getUser(request).getId(), + MainUtils.getStartTime(), + MainUtils.getEndTime()))); - map.put("agentUserCount", onlineUserRes.countByAgentForAgentUser(super.getOrgi(request), MainContext.AgentUserStatusEnum.INSERVICE.toString(), super.getUser(request).getId(), MainUtils.getStartTime(), MainUtils.getEndTime())); + map.put( + "agentUserCount", onlineUserRes.countByAgentForAgentUser( + super.getOrgi(request), + MainContext.AgentUserStatusEnum.INSERVICE.toString(), + super.getUser(request).getId(), + MainUtils.getStartTime(), + MainUtils.getEndTime())); - map.put("agentServicesCount", onlineUserRes.countByAgentForAgentUser(super.getOrgi(request), MainContext.AgentUserStatusEnum.END.toString(), super.getUser(request).getId(), MainUtils.getStartTime(), MainUtils.getEndTime())); + map.put( + "agentServicesCount", onlineUserRes.countByAgentForAgentUser( + super.getOrgi(request), + MainContext.AgentUserStatusEnum.END.toString(), + super.getUser(request).getId(), + MainUtils.getStartTime(), + MainUtils.getEndTime())); - map.put("agentServicesAvg", onlineUserRes.countByAgentForAvagTime(super.getOrgi(request), MainContext.AgentUserStatusEnum.END.toString(), super.getUser(request).getId(), MainUtils.getStartTime(), MainUtils.getEndTime())); + map.put( + "agentServicesAvg", onlineUserRes.countByAgentForAvagTime( + super.getOrgi(request), + MainContext.AgentUserStatusEnum.END.toString(), + super.getUser(request).getId(), + MainUtils.getStartTime(), + MainUtils.getEndTime())); } @RequestMapping({"/apps/onlineuser"}) @Menu(type = "apps", subtype = "onlineuser") public ModelAndView onlineuser(ModelMap map, HttpServletRequest request) { - Page onlineUserList = this.onlineUserRes.findByOrgiAndStatus(super.getOrgi(request), MainContext.OnlineUserStatusEnum.ONLINE.toString(), new PageRequest(super.getP(request), super.getPs(request), Sort.Direction.DESC, "createtime")); + Page onlineUserList = this.onlineUserRes.findByOrgiAndStatus( + super.getOrgi(request), MainContext.OnlineUserStatusEnum.ONLINE.toString(), + new PageRequest(super.getP(request), super.getPs(request), Sort.Direction.DESC, "createtime")); List ids = new ArrayList(); for (OnlineUser onlineUser : onlineUserList.getContent()) { onlineUser.setBetweentime((int) (System.currentTimeMillis() - onlineUser.getLogintime().getTime())); @@ -194,6 +229,8 @@ public class AppsController extends Handler { @Menu(type = "apps", subtype = "content") public ModelAndView profile(ModelMap map, HttpServletRequest request, @Valid User user, @Valid String index) { User tempUser = userRes.getOne(user.getId()); + final User logined = super.getUser(request); + if (tempUser != null) { String msg = validUserUpdate(user, tempUser); if (StringUtils.isNotBlank(msg)) { @@ -206,8 +243,8 @@ public class AppsController extends Handler { tempUser.setEmail(user.getEmail()); tempUser.setMobile(user.getMobile()); - if (super.getUser(request).isSuperuser()) { - // 作为超级管理员,强制设置为坐席 + if (logined.isAdmin()) { + // 作为管理员,强制设置为坐席 tempUser.setAgent(true); } else { tempUser.setAgent(user.isAgent()); @@ -231,9 +268,11 @@ public class AppsController extends Handler { super.setUser(request, u); //切换成非坐席 判断是否坐席 以及 是否有对话 if (!user.isAgent()) { - AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig((super.getUser(request)).getId(), super.getOrgi(request)); + AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig( + (super.getUser(request)).getId(), super.getOrgi(request)); - if (!(agentStatus == null && cache.getInservAgentUsersSizeByAgentnoAndOrgi(super.getUser(request).getId(), super.getOrgi(request)) == 0)) { + if (!(agentStatus == null && cache.getInservAgentUsersSizeByAgentnoAndOrgi( + super.getUser(request).getId(), super.getOrgi(request)) == 0)) { if (StringUtils.isBlank(index)) { return request(super.createRequestPageTempletResponse("redirect:/apps/content.html?msg=t1")); } @@ -291,7 +330,7 @@ public class AppsController extends Handler { organIdList.add(rel.getSkillid()); } } - userList = UserProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); + userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); } else { userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/EntIMController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/EntIMController.java index 0f027a4d..ff542494 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/EntIMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/EntIMController.java @@ -19,10 +19,7 @@ package com.chatopera.cc.handler.apps; import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.handler.Handler; -import com.chatopera.cc.model.IMGroup; -import com.chatopera.cc.model.IMGroupUser; -import com.chatopera.cc.model.RecentUser; -import com.chatopera.cc.model.User; +import com.chatopera.cc.model.*; import com.chatopera.cc.persistence.repository.*; import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.socketio.client.NettyClients; @@ -65,6 +62,9 @@ public class EntIMController extends Handler { @Autowired private RecentUserRepository recentUserRes; + @Autowired + private UserProxy userProxy; + @RequestMapping("/index") @Menu(type = "im", subtype = "entim", access = false) public ModelAndView index(HttpServletRequest request, HttpServletResponse response) { @@ -74,7 +74,7 @@ public class EntIMController extends Handler { // TODO: 优化性能 for (User u : users) { - UserProxy.attachOrgansPropertiesForUser(u); + userProxy.attachOrgansPropertiesForUser(u); } view.addObject("userList", users); @@ -108,7 +108,14 @@ public class EntIMController extends Handler { @Menu(type = "im", subtype = "entim", access = false) public ModelAndView chat(HttpServletRequest request, HttpServletResponse response, @Valid String userid) { ModelAndView view = request(super.createEntIMTempletResponse("/apps/entim/chat")); - view.addObject("entimuser", userRes.findByIdAndOrgi(userid, super.getOrgi(request))); + User entImUser = userRes.findByIdAndOrgi(userid, super.getOrgi(request)); + + if (entImUser != null) { + userProxy.attachOrgansPropertiesForUser(entImUser); + view.addObject("organs", entImUser.getOrgans().values()); + } + + view.addObject("entimuser", entImUser); view.addObject("contextid", MainUtils.genNewID(super.getUser(request).getId(), userid)); view.addObject("online", NettyClients.getInstance().getEntIMClientsNum(userid) > 0); @@ -179,13 +186,13 @@ public class EntIMController extends Handler { public ModelAndView user(HttpServletRequest request, HttpServletResponse response, @Valid String id) { ModelAndView view = request(super.createEntIMTempletResponse("/apps/entim/group/user")); User logined = super.getUser(request); - UserProxy.attachOrgansPropertiesForUser(logined); + userProxy.attachOrgansPropertiesForUser(logined); // TODO: 优化性能 - List organIds = UserProxy.findOrgansByUserid(logined.getId()); - List users = UserProxy.findByOrganInAndDatastatus(organIds, false); + List organIds = userProxy.findOrgansByUserid(logined.getId()); + List users = userProxy.findByOrganInAndDatastatus(organIds, false); for (User u : users) { - UserProxy.attachOrgansPropertiesForUser(u); + userProxy.attachOrgansPropertiesForUser(u); } IMGroup imGroup = imGroupRes.findById(id); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/TenantController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/TenantController.java index 4582d2d1..607f45f7 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/TenantController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/TenantController.java @@ -73,16 +73,18 @@ public class TenantController extends Handler { @RequestMapping("/index") @Menu(type = "apps", subtype = "tenant") - public ModelAndView index(ModelMap map, final HttpServletRequest request, - final @Valid String msg, - final @Valid String currentorgi, - final @Valid String currentname) throws IOException { + public ModelAndView index( + ModelMap map, final HttpServletRequest request, + final @Valid String msg, + final @Valid String currentorgi, + final @Valid String currentname) throws IOException { if (super.isEnabletneant()) { - // "0"代表超级用户 - if ("0".equals(super.getUser(request).getUsertype())) { + // 超级管理员开启多租户访问 + if (super.getUser(request).isAdmin()) { map.addAttribute("tenantList", tenantRes.findByOrgid(super.getOrgid(request))); } else { - List orgiSkillRelList = orgiSkillRelRes.findBySkillidIn(new ArrayList<>((super.getUser(request)).getAffiliates())); + List orgiSkillRelList = orgiSkillRelRes.findBySkillidIn( + new ArrayList<>((super.getUser(request)).getAffiliates())); List tenantList = null; if (!orgiSkillRelList.isEmpty()) { tenantList = new ArrayList(); @@ -112,7 +114,8 @@ public class TenantController extends Handler { public ModelAndView add(ModelMap map, HttpServletRequest request) { if (super.isTenantshare()) { map.addAttribute("isShowSkillGroups", true); - List organList = organRes.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request)); + List organList = organRes.findByOrgiAndOrgid( + super.getOrgiByTenantshare(request), super.getOrgid(request)); map.addAttribute("skillGroups", organList); } return request(super.createRequestPageTempletResponse("/apps/tenant/add")); @@ -131,7 +134,8 @@ public class TenantController extends Handler { if (!logoDir.exists()) { logoDir.mkdirs(); } - String fileName = "tenantpic/" + tenant.getId() + tenantpic.getOriginalFilename().substring(tenantpic.getOriginalFilename().lastIndexOf(".")); + String fileName = "tenantpic/" + tenant.getId() + tenantpic.getOriginalFilename().substring( + tenantpic.getOriginalFilename().lastIndexOf(".")); FileCopyUtils.copy(tenantpic.getBytes(), new File(path, fileName)); tenant.setTenantlogo(fileName); } @@ -164,7 +168,8 @@ public class TenantController extends Handler { public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) { if (super.isTenantshare()) { map.addAttribute("isShowSkillGroups", true); - List organList = organRes.findByOrgiAndOrgid(super.getOrgiByTenantshare(request), super.getOrgid(request)); + List organList = organRes.findByOrgiAndOrgid( + super.getOrgiByTenantshare(request), super.getOrgid(request)); map.addAttribute("skillGroups", organList); List orgiSkillRelList = orgiSkillRelRes.findByOrgi(id); map.addAttribute("orgiSkillRelList", orgiSkillRelList); @@ -188,7 +193,8 @@ public class TenantController extends Handler { if (!logoDir.exists()) { logoDir.mkdirs(); } - String fileName = "tenantpic/" + tenant.getId() + tenantpic.getOriginalFilename().substring(tenantpic.getOriginalFilename().lastIndexOf(".")); + String fileName = "tenantpic/" + tenant.getId() + tenantpic.getOriginalFilename().substring( + tenantpic.getOriginalFilename().lastIndexOf(".")); FileCopyUtils.copy(tenantpic.getBytes(), new File(path, fileName)); tenant.setTenantlogo(fileName); } else { @@ -232,8 +238,10 @@ public class TenantController extends Handler { @Menu(type = "apps", subtype = "tenant") public ModelAndView canswitch(HttpServletRequest request, @Valid Tenant tenant) throws UnsupportedEncodingException { ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); - AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig((super.getUser(request)).getId(), super.getOrgi(request)); - if (agentStatus == null && cache.getInservAgentUsersSizeByAgentnoAndOrgi(super.getUser(request).getId(), super.getOrgi(request)) == 0) { + AgentStatus agentStatus = cache.findOneAgentStatusByAgentnoAndOrig( + (super.getUser(request)).getId(), super.getOrgi(request)); + if (agentStatus == null && cache.getInservAgentUsersSizeByAgentnoAndOrgi( + super.getUser(request).getId(), super.getOrgi(request)) == 0) { Tenant temp = tenantRes.findById(tenant.getId()); if (temp != null) { super.getUser(request).setOrgi(temp.getId()); @@ -249,10 +257,14 @@ public class TenantController extends Handler { return view; } else { Tenant temp = tenantRes.findById(agentStatus.getOrgi()); - return request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index.html?msg=t0" + "¤torgi=" + agentStatus.getOrgi() + "¤tname=" + URLEncoder.encode(temp != null ? temp.getTenantname() : "", "UTF-8"))); + return request(super.createRequestPageTempletResponse( + "redirect:/apps/tenant/index.html?msg=t0" + "¤torgi=" + agentStatus.getOrgi() + "¤tname=" + URLEncoder.encode( + temp != null ? temp.getTenantname() : "", "UTF-8"))); } } - AgentUser agentUser = agentUserRepository.findOneByAgentnoAndStatusAndOrgi(super.getUser(request).getId(), MainContext.AgentUserStatusEnum.INSERVICE.toString(), super.getOrgi(request)); + AgentUser agentUser = agentUserRepository.findOneByAgentnoAndStatusAndOrgi( + super.getUser(request).getId(), MainContext.AgentUserStatusEnum.INSERVICE.toString(), + super.getOrgi(request)); if (agentUser != null) { if (tenant.getId().equals(agentUser.getOrgi())) { Tenant temp = tenantRes.findById(tenant.getId()); @@ -262,7 +274,9 @@ public class TenantController extends Handler { return view; } else { Tenant temp = tenantRes.findById(agentUser.getOrgi()); - return request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index.html?msg=t0" + "¤torgi=" + agentUser.getOrgi() + "¤tname=" + URLEncoder.encode(temp != null ? temp.getTenantname() : "", "UTF-8"))); + return request(super.createRequestPageTempletResponse( + "redirect:/apps/tenant/index.html?msg=t0" + "¤torgi=" + agentUser.getOrgi() + "¤tname=" + URLEncoder.encode( + temp != null ? temp.getTenantname() : "", "UTF-8"))); } } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/service/ChatServiceController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/service/ChatServiceController.java index 79fcd0e0..27be4a43 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/service/ChatServiceController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/apps/service/ChatServiceController.java @@ -91,7 +91,7 @@ public class ChatServiceController extends Handler { private OrgiSkillRelRepository orgiSkillRelService; @Autowired - private AgentAuditProxy agentAuditProxy; + private UserProxy userProxy; @Autowired private Cache cache; @@ -191,7 +191,7 @@ public class ChatServiceController extends Handler { List userList = userRes.findAll(usersids); for (User user : userList) { user.setAgentStatus(cache.findOneAgentStatusByAgentnoAndOrig(user.getId(), super.getOrgi(request))); - UserProxy.attachOrgansPropertiesForUser(user); + userProxy.attachOrgansPropertiesForUser(user); } map.addAttribute("userList", userList); map.addAttribute("userid", agentService.getUserid()); @@ -463,7 +463,7 @@ public class ChatServiceController extends Handler { organIdList.add(rel.getSkillid()); } } - userList = UserProxy.findByOrganInAndAgentAndDatastatus( + userList = userProxy.findByOrganInAndAgentAndDatastatus( organIdList, true, false, new PageRequest(super.getP(request), super.getPs(request), Direction.DESC, "createtime")); } else { diff --git a/contact-center/app/src/main/java/com/chatopera/cc/handler/resource/UsersResourceController.java b/contact-center/app/src/main/java/com/chatopera/cc/handler/resource/UsersResourceController.java index bd70f6a8..f00bc212 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/handler/resource/UsersResourceController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/handler/resource/UsersResourceController.java @@ -50,6 +50,9 @@ public class UsersResourceController extends Handler { @Autowired private OrganRepository organRes; + @Autowired + private UserProxy userProxy; + @RequestMapping("/users") @Menu(type = "res", subtype = "users") public ModelAndView add(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String id) { @@ -89,7 +92,7 @@ public class UsersResourceController extends Handler { organIdList.add(rel.getSkillid()); } } - list = UserProxy.findByOrganInAndDatastatus(organIdList, false); + list = userProxy.findByOrganInAndDatastatus(organIdList, false); } else { list = userRes.findByOrgiAndDatastatus(super.getOrgi(request), false); } @@ -116,7 +119,7 @@ public class UsersResourceController extends Handler { organIdList.add(rel.getSkillid()); } } - list = UserProxy.findByOrganInAndDatastatusAndUsernameLike(organIdList, false, "%" + q + "%", new PageRequest(0, 10)); + list = userProxy.findByOrganInAndDatastatusAndUsernameLike(organIdList, false, "%" + q + "%", new PageRequest(0, 10)); } else { list = userRes.findByDatastatusAndOrgiAndOrgidAndUsernameLike(false, super.getOrgi(request), super.getOrgid(request), "%" + q + "%", new PageRequest(0, 10)); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/model/User.java b/contact-center/app/src/main/java/com/chatopera/cc/model/User.java index b10c529e..f1bbff68 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/model/User.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/model/User.java @@ -51,9 +51,8 @@ public class User implements java.io.Serializable { private String birthday; private String nickname; private String secureconf = "5"; - private String usertype; // 0 Admin User : !0 Other User - - private boolean superuser = false; //是否是超级管理员 + private boolean admin; // 是否是管理员 + private boolean superadmin = false; // 是否是超级管理员 private String orgi; private String orgid; @@ -265,16 +264,6 @@ public class User implements java.io.Serializable { } - public String getUsertype() { - return usertype; - } - - - public void setUsertype(String usertype) { - this.usertype = usertype; - } - - public String getOrgi() { return orgi; } @@ -470,8 +459,20 @@ public class User implements java.io.Serializable { this.callcenter = callcenter; } - public boolean isSuperuser() { - return superuser; + public boolean isAdmin() { + return admin; + } + + public void setAdmin(boolean admin) { + this.admin = admin; + } + + public boolean isSuperadmin() { + return superadmin; + } + + public void setSuperadmin(boolean superadmin) { + this.superadmin = superadmin; } @Transient @@ -483,10 +484,6 @@ public class User implements java.io.Serializable { this.roleAuthMap = roleAuthMap; } - public void setSuperuser(boolean superuser) { - this.superuser = superuser; - } - public String getOrgid() { return orgid; } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java index 75c40930..c96a85bc 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java @@ -17,6 +17,7 @@ package com.chatopera.cc.persistence.repository; import java.util.List; +import java.util.Optional; import com.chatopera.cc.model.User; import org.springframework.data.domain.Page; @@ -28,14 +29,12 @@ import org.springframework.data.repository.query.Param; public interface UserRepository extends JpaRepository { User findByIdAndOrgi(String paramString, String orgi); - User findById(String id); - User findByEmailAndDatastatus(String email, boolean datastatus); - User findByMobileAndDatastatus(String mobile, boolean datastatus); - List findBySipaccountAndDatastatus(String sipaccount, boolean datastatus); + @Query(value = "SELECT * FROM cs_user WHERE sipaccount = ?1 AND DATASTATUS = ?2 LIMIT 1", nativeQuery = true) + Optional findOneBySipaccountAndDatastatus(String sipaccount, boolean datastatus); @Query(value = "SELECT u FROM User u WHERE sipaccount <> '' AND datastatus = 0") List findBySipaccountIsNotNullAndDatastatusIsFalse(); @@ -46,31 +45,25 @@ public interface UserRepository extends JpaRepository { List findAllByCallcenterIsTrueAndDatastatusIsFalseAndIdIn(@Param("users") List users); User findByUsernameAndDatastatus(String username, boolean datastatus); - User findByUsernameAndPasswordAndDatastatus(String username, String password, boolean datastatus); - User findByMobileAndPasswordAndDatastatus(String mobile, String password, boolean datastatus); - User findByUsernameAndOrgi(String paramString, String orgi); - User findByUsernameAndPassword(String username, String password); - Page findByOrgi(String orgi, Pageable paramPageable); +// // 查询超级管理员 +// List findBySuperadminAndOrgi(boolean isSuperadmin, final String orgi); + // 查询所有管理员 - List findBySuperuserAndOrgi(boolean isSuperuser, final String orgi); - + List findByAdminAndOrgi(boolean admin, final String orgi); List findByOrgi(String orgi); - Page findByDatastatusAndOrgi(boolean datastatus, String orgi, Pageable paramPageable); - Page findByDatastatusAndOrgiAndUsernameLike(boolean datastatus, String orgi, String username, Pageable paramPageable); - Page findByIdAndOrgi(String id, String orgi, Pageable paramPageable); - - List findByOrgiAndDatastatusAndIdIn(String orgi, - boolean datastatus, - List users); + List findByOrgiAndDatastatusAndIdIn( + String orgi, + boolean datastatus, + List users); @Query(value = "SELECT s.sipaccount from User s " + "WHERE " + @@ -78,9 +71,10 @@ public interface UserRepository extends JpaRepository { "s.datastatus = :datastatus AND " + "s.id IN :users AND " + "s.orgi = :orgi") - List findSipsByDatastatusAndOrgiAndIdIn(@Param("datastatus") boolean datastatus, - @Param("orgi") String orgi, - @Param("users") List users); + List findSipsByDatastatusAndOrgiAndIdIn( + @Param("datastatus") boolean datastatus, + @Param("orgi") String orgi, + @Param("users") List users); List findByOrgiAndDatastatus(final String orgi, final boolean datastatus); @@ -88,31 +82,40 @@ public interface UserRepository extends JpaRepository { List findByOrgiAndAgentAndDatastatus(final String orgi, final boolean agent, final boolean status); - long countByAgentAndDatastatusAndIdIn(final boolean agent, - final boolean datastatus, - final List users); + long countByAgentAndDatastatusAndIdIn( + final boolean agent, + final boolean datastatus, + final List users); List findAll(Specification spec); - Page findByDatastatusAndOrgiAndOrgid(boolean b, String orgi, String orgid, - Pageable pageRequest); + Page findByDatastatusAndOrgiAndOrgid( + boolean b, String orgi, String orgid, + Pageable pageRequest); + + Page findByDatastatusAndOrgiAndOrgidAndSuperadminNot( + boolean datastatus, String orgi, String orgid, boolean superadmin, + Pageable pageRequest); + List findByOrgiAndDatastatusAndOrgid(String orgi, boolean b, String orgid); - Page findByDatastatusAndOrgiAndOrgidAndUsernameLike(boolean Datastatus, - final String orgi, - final String orgid, - final String username, - Pageable pageRequest); + Page findByDatastatusAndOrgiAndOrgidAndUsernameLike( + boolean Datastatus, + final String orgi, + final String orgid, + final String username, + Pageable pageRequest); - Page findByAgentAndDatastatusAndIdIn(boolean agent, - boolean datastatus, - final List users, - Pageable pageRequest); + Page findByAgentAndDatastatusAndIdIn( + boolean agent, + boolean datastatus, + final List users, + Pageable pageRequest); List findByAgentAndDatastatusAndIdIn(boolean agent, boolean datastatus, final List users); @@ -120,9 +123,10 @@ public interface UserRepository extends JpaRepository { List findByDatastatusAndIdIn(boolean datastatus, List users); - Page findByDatastatusAndUsernameLikeAndIdIn(boolean datastatus, - final String username, - final List users, Pageable pageRequest); + Page findByDatastatusAndUsernameLikeAndIdIn( + boolean datastatus, + final String username, + final List users, Pageable pageRequest); List findByOrgidAndAgentAndDatastatus(String orgid, boolean agent, boolean datastatus); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/proxy/AgentUserProxy.java b/contact-center/app/src/main/java/com/chatopera/cc/proxy/AgentUserProxy.java index e6b989a2..0aa02595 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/proxy/AgentUserProxy.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/proxy/AgentUserProxy.java @@ -276,8 +276,8 @@ public class AgentUserProxy { bypass.add(agentUser.getAgentno()); } - // 首先查看超级用户 - List admins = userRes.findBySuperuserAndOrgi(true, orgi); + // 首先查看管理员 + List admins = userRes.findByAdminAndOrgi(true, orgi); for (final User user : admins) { if (bypass.contains(user.getId())) continue; diff --git a/contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java b/contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java index 391ada30..a6941bdb 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java @@ -69,6 +69,7 @@ public class OnlineUserProxy { private static AgentUserProxy agentUserProxy; private static AgentUserContactsRepository agentUserContactsRes; private static ContactsRepository contactsRes; + private static UserProxy userProxy; // Compare two onlineUser by createtime public final static Comparator compareByCreateTime = (OnlineUser o1, OnlineUser o2) -> o1.getCreatetime().compareTo( @@ -362,7 +363,7 @@ public class OnlineUserProxy { for (User user : agentList) { // TODO 此处的查询处理比较多,应使用缓存 // 一个用户可隶属于多个组织 - UserProxy.attachOrgansPropertiesForUser(user); + getUserProxy().attachOrgansPropertiesForUser(user); for (OrgiSkillRel rel : orgiSkillRelList) { if (user.getOrgans().size() > 0 && user.inAffiliates(rel.getSkillid())) { agentTempList.add(user); @@ -1557,4 +1558,11 @@ public class OnlineUserProxy { } return orgiSkillRelRes; } + + public static UserProxy getUserProxy() { + if (userProxy == null) { + userProxy = MainContext.getContext().getBean(UserProxy.class); + } + return userProxy; + } } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/proxy/UserProxy.java b/contact-center/app/src/main/java/com/chatopera/cc/proxy/UserProxy.java index 863fa91f..49e02ac4 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/proxy/UserProxy.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/proxy/UserProxy.java @@ -11,38 +11,84 @@ package com.chatopera.cc.proxy; +import com.chatopera.cc.basic.Constants; import com.chatopera.cc.basic.MainContext; +import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.OrganUser; import com.chatopera.cc.model.User; import com.chatopera.cc.persistence.repository.OrganRepository; import com.chatopera.cc.persistence.repository.OrganUserRepository; import com.chatopera.cc.persistence.repository.UserRepository; +import com.google.gson.JsonObject; +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.Page; import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; import java.util.*; /** * 用户/坐席 常用方法 */ +@Component public class UserProxy { private final static Logger logger = LoggerFactory.getLogger(UserProxy.class); - private static OrganUserRepository organUserRes; - private static OrganRepository organRes; - private static UserRepository userRes; + @Autowired + private OrganUserRepository organUserRes; + @Autowired + private OrganRepository organRes; - public static User findOne(final String id) { - return getUserRes().findOne(id); + @Autowired + private UserRepository userRes; + + /** + * 创建新用户 + * 支持多租户 + * + * @param user + * @param orgi + * @param orgid + * @param orgiByTenantshare + * @return + */ + public String createNewUser(final User user, final String orgi, final String orgid, final String orgiByTenantshare) { + String msg = ""; + msg = validUser(user); + if (StringUtils.isNotBlank(msg) && !msg.equals("new_user_success")) { + return msg; + } else { + // 此时 msg 是 new_user_success + user.setSuperadmin(false); // 不支持创建第二个超级管理员 + + if (StringUtils.isNotBlank(user.getPassword())) { + user.setPassword(MainUtils.md5(user.getPassword())); + } + + user.setOrgi(orgiByTenantshare); + if (StringUtils.isNotBlank(orgid)) { + user.setOrgid(orgid); + } else { + user.setOrgid(MainContext.SYSTEM_ORGI); + } + userRes.save(user); + OnlineUserProxy.clean(orgi); + } + return msg; } - public static List findUserIdsInOrgan(final String organ) { - List x = getOrganUserRes().findByOrgan(organ); + public User findOne(final String id) { + return userRes.findOne(id); + } + + public List findUserIdsInOrgan(final String organ) { + List x = organUserRes.findByOrgan(organ); if (x.size() == 0) { return null; @@ -55,9 +101,9 @@ public class UserProxy { return z; } - public static List findUserIdsInOrgans(final List organs) { + public List findUserIdsInOrgans(final List organs) { - List x = getOrganUserRes().findByOrganIn(organs); + List x = organUserRes.findByOrganIn(organs); if (x.size() == 0) return null; @@ -78,9 +124,9 @@ public class UserProxy { * @param agentno * @return */ - public static HashMap getSkillsMapByAgentno(final String agentno) { + public HashMap getSkillsMapByAgentno(final String agentno) { - final User user = getUserRes().findOne(agentno); + final User user = userRes.findOne(agentno); if (user == null) return new HashMap<>(); attachOrgansPropertiesForUser(user); @@ -93,8 +139,8 @@ public class UserProxy { * @param userid * @return */ - public static List findOrgansByUserid(final String userid) { - List x = getOrganUserRes().findByUserid(userid); + public List findOrgansByUserid(final String userid) { + List x = organUserRes.findByUserid(userid); if (x.size() == 0) return null; @@ -108,7 +154,7 @@ public class UserProxy { } - public static Page findByOrganInAndAgentAndDatastatus( + public Page findByOrganInAndAgentAndDatastatus( final List organs, boolean agent, boolean datastatus, @@ -117,11 +163,11 @@ public class UserProxy { if (users == null) return null; - return getUserRes().findByAgentAndDatastatusAndIdIn(agent, datastatus, users, pageRequest); + return userRes.findByAgentAndDatastatusAndIdIn(agent, datastatus, users, pageRequest); } - public static List findByOrganInAndAgentAndDatastatus( + public List findByOrganInAndAgentAndDatastatus( final List organs, boolean agent, boolean datastatus) { @@ -129,51 +175,146 @@ public class UserProxy { if (users == null) return null; - return getUserRes().findByAgentAndDatastatusAndIdIn(agent, datastatus, users); + return userRes.findByAgentAndDatastatusAndIdIn(agent, datastatus, users); } - - public static List findByOrganInAndDatastatus( + public List findByOrganInAndDatastatus( final List organs, boolean datastatus) { List users = findUserIdsInOrgans(organs); if (users == null) return null; - return getUserRes().findByDatastatusAndIdIn(datastatus, users); + return userRes.findByDatastatusAndIdIn(datastatus, users); } - - public static Page findByOrganInAndDatastatusAndUsernameLike( + public Page findByOrganInAndDatastatusAndUsernameLike( final List organs, final boolean datastatus, final String username, Pageable pageRequest) { List users = findUserIdsInOrgans(organs); - if (users == null) return null; - - return getUserRes().findByDatastatusAndUsernameLikeAndIdIn(datastatus, username, users, pageRequest); - + return userRes.findByDatastatusAndUsernameLikeAndIdIn(datastatus, username, users, pageRequest); } - public static List findByOrganAndOrgiAndDatastatus(final String organ, final String orgi, final boolean datastatus) { + public List findByOrganAndOrgiAndDatastatus(final String organ, final String orgi, final boolean datastatus) { List users = findUserIdsInOrgan(organ); if (users == null) return null; - return getUserRes().findByOrgiAndDatastatusAndIdIn(orgi, datastatus, users); + return userRes.findByOrgiAndDatastatusAndIdIn(orgi, datastatus, users); } + /** + * 根据是否开启呼叫中心模块检测账号 + * + * @param user + * @return + */ + public boolean validUserCallcenterParams(final User user) { + if (user.isCallcenter() && MainContext.hasModule(Constants.CSKEFU_MODULE_CALLOUT)) { + return (!userRes.findOneBySipaccountAndDatastatus( + user.getSipaccount(), false).isPresent()) || user.getSipaccount() == ""; + } + return true; + } - public static List findAllByCallcenterIsTrueAndDatastatusIsFalseAndOrgan(final String organ) { + /** + * 从Json中创建User + * + * @param json + * @return + */ + private User exetractUserFromJson(final JsonObject json) { + User tempUser = new User(); + + if (json.has("username")) { + String val = json.get("username").getAsString(); + if (StringUtils.isNotBlank(val)) { + tempUser.setUsername(val); + } + } + + if (json.has("uname")) { + String val = json.get("uname").getAsString(); + if (StringUtils.isNotBlank(val)) { + tempUser.setUname(val); + } + } + + if (json.has("email")) { + String val = json.get("email").getAsString(); + if (StringUtils.isNotBlank(val)) { + tempUser.setEmail(val); + } + } + + if (json.has("mobile")) { + String val = json.get("mobile").getAsString(); + if (StringUtils.isNotBlank(val)) { + tempUser.setMobile(val); + } + } + + // 密码 + + + return tempUser; + } + + /** + * 验证用户数据合法性 + * + * @param user + * @return + */ + public String validUser(final User user) { + String msg = ""; + User tempUser = userRes.findByUsernameAndDatastatus(user.getUsername(), false); + if (tempUser != null) { + msg = "username_exist"; + return msg; + } + + if (StringUtils.isNotBlank(user.getEmail())) { + tempUser = userRes.findByEmailAndDatastatus(user.getEmail(), false); + if (tempUser != null) { + msg = "email_exist"; + return msg; + } + } + + if (StringUtils.isNotBlank(user.getMobile())) { + tempUser = userRes.findByMobileAndDatastatus(user.getMobile(), false); + if (tempUser != null) { + msg = "mobile_exist"; + return msg; + } + } + + if (!validUserCallcenterParams(user)) { + msg = "sip_account_exist"; + return msg; + } + + if (tempUser == null && validUserCallcenterParams(user)) { + msg = "new_user_success"; + return msg; + } + + return msg; + } + + + public List findAllByCallcenterIsTrueAndDatastatusIsFalseAndOrgan(final String organ) { final List users = findUserIdsInOrgan(organ); if (users == null) return null; - return getUserRes().findAllByCallcenterIsTrueAndDatastatusIsFalseAndIdIn(users); + return userRes.findAllByCallcenterIsTrueAndDatastatusIsFalseAndIdIn(users); } @@ -185,12 +326,12 @@ public class UserProxy { * @param orgi * @return */ - public static List findSipsByOrganAndDatastatusAndOrgi(final String organ, final boolean datastatus, final String orgi) { + public List findSipsByOrganAndDatastatusAndOrgi(final String organ, final boolean datastatus, final String orgi) { List users = findUserIdsInOrgan(organ); if (users == null) return null; - return getUserRes().findSipsByDatastatusAndOrgiAndIdIn(datastatus, orgi, users); + return userRes.findSipsByDatastatusAndOrgiAndIdIn(datastatus, orgi, users); } @@ -203,7 +344,7 @@ public class UserProxy { * @param organ * @return */ - public static long countByOrgiAndAgentAndDatastatusAndOrgan( + public long countByOrgiAndAgentAndDatastatusAndOrgan( final String orgi, final boolean agent, final boolean datastatus, @@ -213,7 +354,7 @@ public class UserProxy { if (users == null) return 0; - return getUserRes().countByAgentAndDatastatusAndIdIn(agent, datastatus, users); + return userRes.countByAgentAndDatastatusAndIdIn(agent, datastatus, users); } @@ -222,7 +363,7 @@ public class UserProxy { * * @param user */ - public static void processAffiliates(final User user, final Map skills, final Organ organ) { + public void processAffiliates(final User user, final Map skills, final Organ organ) { if (organ == null) { return; } @@ -236,7 +377,7 @@ public class UserProxy { if (organ.isSkill()) skills.put(organ.getId(), organ.getName()); // 获得子部门 - List y = getOrganRes().findByOrgiAndParent(user.getOrgi(), organ.getId()); + List y = organRes.findByOrgiAndParent(user.getOrgi(), organ.getId()); for (Organ x : y) { try { @@ -253,14 +394,14 @@ public class UserProxy { * * @param user */ - public static void attachOrgansPropertiesForUser(final User user) { - List organs = getOrganUserRes().findByUserid(user.getId()); + public void attachOrgansPropertiesForUser(final User user) { + List organs = organUserRes.findByUserid(user.getId()); user.setOrgans(new HashMap<>()); final HashMap skills = new HashMap<>(); for (final OrganUser organ : organs) { // 添加直属部门到organs - final Organ o = getOrganRes().findOne(organ.getOrgan()); + final Organ o = organRes.findOne(organ.getOrgan()); user.getOrgans().put(organ.getOrgan(), o); // 添加部门及附属部门 @@ -269,26 +410,4 @@ public class UserProxy { user.setSkills(skills); } - - - private static OrganRepository getOrganRes() { - if (organRes == null) { - organRes = MainContext.getContext().getBean(OrganRepository.class); - } - return organRes; - } - - private static OrganUserRepository getOrganUserRes() { - if (organUserRes == null) { - organUserRes = MainContext.getContext().getBean(OrganUserRepository.class); - } - return organUserRes; - } - - private static UserRepository getUserRes() { - if (userRes == null) { - userRes = MainContext.getContext().getBean(UserRepository.class); - } - return userRes; - } } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/socketio/handler/AgentEventHandler.java b/contact-center/app/src/main/java/com/chatopera/cc/socketio/handler/AgentEventHandler.java index f1f71e6e..0e979088 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/socketio/handler/AgentEventHandler.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/socketio/handler/AgentEventHandler.java @@ -65,6 +65,7 @@ public class AgentEventHandler { private static AgentUserProxy agentUserProxy; private static AgentProxy agentProxy; private static AgentSessionProxy agentSessionProxy; + private static UserProxy userProxy; @OnConnect public void onConnect(SocketIOClient client) { @@ -93,7 +94,7 @@ public class AgentEventHandler { agentStatus.setConnected(true); // 设置agentSkills - agentStatus.setSkills(UserProxy.getSkillsMapByAgentno(userid)); + agentStatus.setSkills(getUserProxy().getSkillsMapByAgentno(userid)); getAgentStatusRes().save(agentStatus); MainContext.getCache().putAgentStatusByOrgi(agentStatus, orgi); @@ -199,7 +200,7 @@ public class AgentEventHandler { return; } - final User supervisor = UserProxy.findOne(received.getSupervisorid()); + final User supervisor = getUserProxy().findOne(received.getSupervisorid()); final Date now = new Date(); // 创建消息 @@ -355,4 +356,10 @@ public class AgentEventHandler { return agentSessionProxy; } + public static UserProxy getUserProxy() { + if (userProxy == null) { + userProxy = MainContext.getContext().getBean(UserProxy.class); + } + return userProxy; + } } \ No newline at end of file diff --git a/contact-center/app/src/main/java/com/chatopera/cc/util/CallCenterUtils.java b/contact-center/app/src/main/java/com/chatopera/cc/util/CallCenterUtils.java index cc67446f..b0ffb3e5 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/util/CallCenterUtils.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/util/CallCenterUtils.java @@ -43,6 +43,9 @@ import static org.elasticsearch.index.query.QueryBuilders.termQuery; public class CallCenterUtils { + + private static UserProxy userProxy; + /** * @param extno * @param sipTrunkRes @@ -108,7 +111,8 @@ public class CallCenterUtils { ArrayList organList = new ArrayList(); if (userRole.size() > 0) { for (UserRole userTemp : userRole) { - UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid(user.getOrgi(), + UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid( + user.getOrgi(), userTemp.getRole().getId()); if (roleOrgan != null) { if (StringUtils.isNotBlank(roleOrgan.getOrganid())) { @@ -122,7 +126,7 @@ public class CallCenterUtils { } } - UserProxy.attachOrgansPropertiesForUser(user); + getUserProxy().attachOrgansPropertiesForUser(user); if (user.getAffiliates().size() > 0) { for (final String organ : user.getAffiliates()) { organList.add(organ); @@ -149,8 +153,9 @@ public class CallCenterUtils { List batchList = batchRes.findAll(new Specification() { @Override - public Predicate toPredicate(Root root, CriteriaQuery query, - CriteriaBuilder cb) { + public Predicate toPredicate( + Root root, CriteriaQuery query, + CriteriaBuilder cb) { List list = new ArrayList(); In in = cb.in(root.get("organ")); @@ -192,8 +197,9 @@ public class CallCenterUtils { List formFilterList = filterRes.findAll(new Specification() { @Override - public Predicate toPredicate(Root root, CriteriaQuery query, - CriteriaBuilder cb) { + public Predicate toPredicate( + Root root, CriteriaQuery query, + CriteriaBuilder cb) { List list = new ArrayList(); In in = cb.in(root.get("organ")); @@ -234,8 +240,9 @@ public class CallCenterUtils { List activityList = batchRes.findAll(new Specification() { @Override - public Predicate toPredicate(Root root, CriteriaQuery query, - CriteriaBuilder cb) { + public Predicate toPredicate( + Root root, CriteriaQuery query, + CriteriaBuilder cb) { List list = new ArrayList(); In in = cb.in(root.get("organ")); @@ -278,7 +285,8 @@ public class CallCenterUtils { List activityList = CallCenterUtils.getActivityList(batchRes, userRoleRes, callOutRoleRes, user); List salestatusList = new ArrayList<>(); for (JobDetail act : activityList) { - List salestastus = MainContext.getContext().getBean(SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid()); + List salestastus = MainContext.getContext().getBean( + SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid()); salestatusList.addAll(salestastus); } @@ -292,14 +300,24 @@ public class CallCenterUtils { map.put("formFilterList", CallCenterUtils.getFormFilterList(filterRes, userRoleRes, callOutRoleRes, user)); if (StringUtils.isBlank(ownerdept)) { - map.addAttribute("owneruserList", UserProxy.findByOrganAndOrgiAndDatastatus(Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false)); + map.addAttribute( + "owneruserList", + getUserProxy().findByOrganAndOrgiAndDatastatus( + Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false)); } else { - map.addAttribute("owneruserList", UserProxy.findByOrganAndOrgiAndDatastatus(ownerdept, user.getOrgi(), false)); + map.addAttribute( + "owneruserList", getUserProxy().findByOrganAndOrgiAndDatastatus(ownerdept, user.getOrgi(), false)); } - map.addAttribute("skillGroups", organRes.findAll(CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user))); - map.put("taskList", MainContext.getContext().getBean(UKefuCallOutTaskRepository.class).findByActidAndOrgi(actid, user.getOrgi())); - map.put("allUserList", MainContext.getContext().getBean(UserRepository.class).findByOrgiAndDatastatus(user.getOrgi(), false)); + map.addAttribute( + "skillGroups", organRes.findAll(CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user))); + map.put( + "taskList", MainContext.getContext().getBean(UKefuCallOutTaskRepository.class).findByActidAndOrgi( + actid, + user.getOrgi())); + map.put( + "allUserList", + MainContext.getContext().getBean(UserRepository.class).findByOrgiAndDatastatus(user.getOrgi(), false)); //JobDetail act = batchRes.findByIdAndOrgi(actid, user.getOrgi()); //if(act != null){ // map.put("salestatusList",MainContext.getContext().getBean(SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid())); @@ -370,7 +388,8 @@ public class CallCenterUtils { UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(UKefuCallOutFilterRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); //修改,拨打任务 if (task != null) { @@ -405,7 +424,8 @@ public class CallCenterUtils { public static void getAgentReorgannum(UKefuCallOutTask task, UKefuCallOutFilter ukefuCallOutFilter) { UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(UKefuCallOutFilterRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); //修改,拨打任务 if (task != null) { @@ -435,7 +455,8 @@ public class CallCenterUtils { UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(UKefuCallOutFilterRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); //修改,拨打任务 if (task != null) { @@ -476,5 +497,10 @@ public class CallCenterUtils { return dataList.getContent().size(); } - + public static UserProxy getUserProxy() { + if (userProxy == null) { + userProxy = MainContext.getContext().getBean(UserProxy.class); + } + return userProxy; + } } diff --git a/contact-center/app/src/main/resources/application.properties b/contact-center/app/src/main/resources/application.properties index 3cf5decc..99c826bb 100644 --- a/contact-center/app/src/main/resources/application.properties +++ b/contact-center/app/src/main/resources/application.properties @@ -18,9 +18,6 @@ # 在集群状态下,每个Node都有自己唯一的ID application.node.id=localhost -# 运行环境,production|development -application.env=production - ############################################## # 安全设置 ############################################## diff --git a/contact-center/app/src/main/resources/templates/admin/channel/im/index.html b/contact-center/app/src/main/resources/templates/admin/channel/im/index.html index 165516bd..7efa2918 100644 --- a/contact-center/app/src/main/resources/templates/admin/channel/im/index.html +++ b/contact-center/app/src/main/resources/templates/admin/channel/im/index.html @@ -39,7 +39,7 @@ 编辑 - <#if !(snsAccount.usertype?? && snsAccount.usertype == "0") && snsAccount.datastatus != true > + <#if !(snsAccount.admin) && snsAccount.datastatus != true > data-confirm="请输入二次安全验证密码" title="删除网站需要进行二次密码验证,请确认是否删除?" > 删除 @@ -75,9 +75,9 @@ var layer = layui.layer; console.log(window.location.href) <#if status?? && status == 'new_webim_success'> - layer.msg('网站添加成功',{icon: 1, offset: 'rb', time: 1000}) + layer.msg('网站添加成功',{icon: 1, time: 1000}) <#elseif status?? && status == 'new_webim_fail'> - layer.msg('网站添加失败',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('网站添加失败',{icon: 2, time: 3000}) }); @@ -96,4 +96,4 @@ } }); }); - \ No newline at end of file + diff --git a/contact-center/app/src/main/resources/templates/admin/role/index.html b/contact-center/app/src/main/resources/templates/admin/role/index.html index bbd63c3f..91f2ccb9 100644 --- a/contact-center/app/src/main/resources/templates/admin/role/index.html +++ b/contact-center/app/src/main/resources/templates/admin/role/index.html @@ -107,17 +107,17 @@ word-break: break-all;"><#if roleData??>${roleData.name!''}<#else>坐席组 - layer.msg('添加成功',{icon: 1, offset: 'rb', time: 1000}) + layer.msg('添加成功',{icon: 1, time: 1000}) <#if msg?? && msg == 'admin_role_save_exist'> - layer.msg('角色添加失败,角色已存在',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('角色添加失败,角色已存在',{icon: 2, time: 3000}) <#if msg?? && msg == 'admin_role_update_success'> - layer.msg('角色修改成功',{icon: 1, offset: 'rb', time: 1000}) + layer.msg('角色修改成功',{icon: 1, time: 1000}) <#if msg?? && msg == 'admin_role_update_not_exist'> - layer.msg('角色修改失败',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('角色修改失败',{icon: 2, time: 3000}) }); - \ No newline at end of file + diff --git a/contact-center/app/src/main/resources/templates/admin/user/add.html b/contact-center/app/src/main/resources/templates/admin/user/add.html index 96fa6000..cbc365a1 100644 --- a/contact-center/app/src/main/resources/templates/admin/user/add.html +++ b/contact-center/app/src/main/resources/templates/admin/user/add.html @@ -38,7 +38,7 @@
- +
@@ -60,15 +60,16 @@
- - + + +
diff --git a/contact-center/app/src/main/resources/templates/admin/user/edit.html b/contact-center/app/src/main/resources/templates/admin/user/edit.html index 8d4346f8..cbb5b814 100644 --- a/contact-center/app/src/main/resources/templates/admin/user/edit.html +++ b/contact-center/app/src/main/resources/templates/admin/user/edit.html @@ -39,7 +39,7 @@
- checked="checked"> + checked="checked">
diff --git a/contact-center/app/src/main/resources/templates/admin/user/index.html b/contact-center/app/src/main/resources/templates/admin/user/index.html index 8b4d4011..41cebcf2 100644 --- a/contact-center/app/src/main/resources/templates/admin/user/index.html +++ b/contact-center/app/src/main/resources/templates/admin/user/index.html @@ -70,7 +70,7 @@ - <#if user.usertype?? && user.usertype =="0"> + <#if user.admin> @@ -79,7 +79,7 @@ 编辑 - <#if !(user.usertype?? && user.usertype == "0") && user.datastatus != true > + <#if !(user.admin) && user.datastatus != true > 删除 @@ -102,19 +102,19 @@ layui.use('layer', function(){ var layer = layui.layer; <#if msg?? && msg == 'username_exist'> - layer.msg('用户名存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('用户名存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'email_exist'> - layer.msg('邮件存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('邮件存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'mobile_exist'> - layer.msg('手机存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('手机存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'sip_account_exist'> - layer.msg('SIP地址已经存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('SIP地址已经存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 't1'> - layer.msg('当前用户坐席就绪或对话未结束,不能切换为非坐席',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('当前用户坐席就绪或对话未结束,不能切换为非坐席',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'new_user_success'> - layer.msg('新用户创建成功',{icon: 1, offset: 'rb', time: 1000}) + layer.msg('新用户创建成功',{icon: 1, time: 1000}) <#elseif msg?? && msg == 'edit_user_success'> - layer.msg('用户编辑成功',{icon: 1, offset: 'rb', time: 1000}) + layer.msg('用户编辑成功',{icon: 1, time: 1000}) }); layui.use(['laypage', 'layer'], function(){ diff --git a/contact-center/app/src/main/resources/templates/apps/agent/index.html b/contact-center/app/src/main/resources/templates/apps/agent/index.html index 8d9e77c9..b36f9f46 100644 --- a/contact-center/app/src/main/resources/templates/apps/agent/index.html +++ b/contact-center/app/src/main/resources/templates/apps/agent/index.html @@ -187,18 +187,18 @@ parent.$('#agentdesktop').click(); } } else if(result.rc === 1){ - top.layer.msg('不合法的请求参数!',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的请求参数!',{icon: 2, time: 3000}) } else if(result.rc === 2){ - top.layer.msg('不合法的操作!',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的操作!',{icon: 2, time: 3000}) } else if(result.rc ===3){ - top.layer.msg('没有权限执行该操作',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('没有权限执行该操作',{icon: 2, time: 3000}) } else if(result.rc ===4){ - top.layer.msg('未找到该访客会话',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('未找到该访客会话',{icon: 2, time: 3000}) } }, function(error){ console.log("error", error); // 服务器异常 - top.layer.msg('服务器抽风,请稍后再试!',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('服务器抽风,请稍后再试!',{icon: 2, time: 3000}) }) }, function(index, layro){ diff --git a/contact-center/app/src/main/resources/templates/apps/agent/mainagentuser.html b/contact-center/app/src/main/resources/templates/apps/agent/mainagentuser.html index df3ff705..ddb4d37e 100644 --- a/contact-center/app/src/main/resources/templates/apps/agent/mainagentuser.html +++ b/contact-center/app/src/main/resources/templates/apps/agent/mainagentuser.html @@ -28,9 +28,9 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura <#if chatmessage?? && chatmessage.calltype?? && chatmessage.calltype == '呼出'> - ${chatmessage.intervented?string(chatmessage.supervisorname,curagentuser.agentname)} + ${chatmessage.intervented?string(chatmessage.supervisorname,chatmessage.username)} <#else> - ${curagentuser.username!''} + ${chatmessage.username!''} ${chatmessage.createtime?string('yyyy-MM-dd HH:mm:ss')} diff --git a/contact-center/app/src/main/resources/templates/apps/agent/transfer.html b/contact-center/app/src/main/resources/templates/apps/agent/transfer.html index 4b1b98be..f0cc07f4 100644 --- a/contact-center/app/src/main/resources/templates/apps/agent/transfer.html +++ b/contact-center/app/src/main/resources/templates/apps/agent/transfer.html @@ -99,7 +99,6 @@ * @param memo */ function submitTransAgentUserOut(agentUserId, targetAgentno, agentUserServiceId, memo) { - console.log("[submitTransAgentUser] ", agentUserId, targetAgentno, agentUserServiceId, memo); restApiRequest({ silent: true, path: 'agentuser', @@ -125,20 +124,20 @@ $('#agentdesktop').click(); } } else if(result.rc === 1){ - top.layer.msg('不合法的请求参数',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的请求参数',{icon: 2, time: 3000}) } else if(result.rc === 2){ - top.layer.msg('不合法的操作',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的操作',{icon: 2, time: 3000}) } else if(result.rc === 3){ - top.layer.msg('您没有权限执行该操作',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('您没有权限执行该操作',{icon: 2, time: 3000}) } else if(result.rc === 4){ - top.layer.msg('该访客会话不存在',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('该访客会话不存在',{icon: 2, time: 3000}) } else if(result.rc === 5){ - top.layer.msg('参数不合法',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('参数不合法',{icon: 2, time: 3000}) } }, function(error){ console.log("error", error); // 服务器异常 - top.layer.msg('服务器抽风,请稍后再试!', {icon: 2, offset: 'b', time: 3000}) + top.layer.msg('服务器抽风,请稍后再试!', {icon: 2, time: 3000}) }) } @@ -154,7 +153,7 @@ if(params["userid"] && params["agentuserid"] && params["agentserviceid"] && params["agentno"]){ submitTransAgentUserOut(params["agentuserid"], params["agentno"], params["agentserviceid"], params["memo"]); } else { - top.layer.msg('未选择合理的转接信息!',{icon: 2, offset: 'b', time: 3000}); + top.layer.msg('未选择合理的转接信息!',{icon: 2, time: 3000}); } }); }); diff --git a/contact-center/app/src/main/resources/templates/apps/business/contacts/include/left.html b/contact-center/app/src/main/resources/templates/apps/business/contacts/include/left.html index 95d69e56..cf46b51d 100644 --- a/contact-center/app/src/main/resources/templates/apps/business/contacts/include/left.html +++ b/contact-center/app/src/main/resources/templates/apps/business/contacts/include/left.html @@ -1,15 +1,15 @@ \ No newline at end of file + diff --git a/contact-center/app/src/main/resources/templates/apps/business/contacts/index.html b/contact-center/app/src/main/resources/templates/apps/business/contacts/index.html index e084c502..19a218bd 100644 --- a/contact-center/app/src/main/resources/templates/apps/business/contacts/index.html +++ b/contact-center/app/src/main/resources/templates/apps/business/contacts/index.html @@ -31,26 +31,26 @@
- <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B05"]?? || user.usertype=="0" )> + <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B05"]?? || user.admin)> - <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B08"]?? || user.usertype=="0" )> + <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B08"]?? || user.admin)>
- <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B08"]?? || user.usertype=="0" )> + <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B08"]?? || user.admin)>
- <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B09"]?? || user.usertype=="0" )> + <#if user?? && (user.roleAuthMap[ "A02_A01_A02_B09"]?? || user.admin)>
- <#if user?? && (user.roleAuthMap["A03_A01_A02_B06"]?? || user.usertype == "0") > + <#if user?? && (user.roleAuthMap["A03_A01_A02_B06"]?? || user.admin) > - <#if user?? && (user.roleAuthMap["A03_A01_A02_B09"]?? || user.usertype == "0") > + <#if user?? && (user.roleAuthMap["A03_A01_A02_B09"]?? || user.admin) >
- - color:#ffffff !important;"> - - - color:#ffffff !important;"> - - +
+
+
+ + + +
+ +
+
- -
+ - \ No newline at end of file + + + + + diff --git a/contact-center/app/src/main/resources/templates/apps/cca/chatusers.html b/contact-center/app/src/main/resources/templates/apps/cca/chatusers.html new file mode 100644 index 00000000..aa86d8c4 --- /dev/null +++ b/contact-center/app/src/main/resources/templates/apps/cca/chatusers.html @@ -0,0 +1,48 @@ +<#if agentUserList??> +<#list agentUserList as agentuser> +
  • + + <#if agentuser.status?? && agentuser.status == 'end'> + <#if agentuser.channel?? && agentuser.channel == "weixin"> + + <#elseif agentuser.channel?? && agentuser.channel == "webim"> + + <#elseif agentuser.channel?? && agentuser.channel == "skype"> + + <#elseif agentuser.channel?? && agentuser.channel == "phone"> + + + <#else> + <#if agentuser.channel?? && agentuser.channel == "weixin"> + + <#elseif agentuser.channel?? && agentuser.channel == "webim"> + + <#elseif agentuser.channel?? && agentuser.channel == "skype"> + + <#elseif agentuser.channel?? && agentuser.channel == "phone"> + + + +
    +
    + ${agentuser.username!''} +
    +
    + <#if agentUser.servicetime??>${agentuser.servicetime?string('yyyy-MM-dd HH:mm:ss')}<#else>${agentuser.servicetime?string('yyyy-MM-dd HH:mm:ss')} + <#if agentuser.status?? && agentuser.status == 'end'> + 离开 + <#else> + 在线 + + +
    +
    +
    + ${agentuser.tokenum!0} +
    +
    +
  • + + \ No newline at end of file diff --git a/contact-center/app/src/main/resources/templates/apps/cca/index.html b/contact-center/app/src/main/resources/templates/apps/cca/index.html index 535e2f29..4a06482b 100644 --- a/contact-center/app/src/main/resources/templates/apps/cca/index.html +++ b/contact-center/app/src/main/resources/templates/apps/cca/index.html @@ -90,28 +90,22 @@ <#if agentUserList?? && agentUserList?size gt 0> - - <#include "/apps/cca/searchbox.html"> - -
    +
    <#include "/apps/cca/agentusers.html"/>
    <#if curagentuser?? && curagentuser.channel == "phone"> -
    +
    <#include "/apps/cca/mainagentuser_callout.html">
    <#else> -
    +
    <#include "/apps/cca/mainagentuser.html">
    <#else>
    - - <#include "/apps/cca/searchbox.html"> -
    diff --git a/contact-center/app/src/main/resources/templates/apps/cca/mainagentuser.html b/contact-center/app/src/main/resources/templates/apps/cca/mainagentuser.html index 6656cb3c..2100cc83 100644 --- a/contact-center/app/src/main/resources/templates/apps/cca/mainagentuser.html +++ b/contact-center/app/src/main/resources/templates/apps/cca/mainagentuser.html @@ -26,9 +26,9 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura <#if chatmessage?? && chatmessage.calltype?? && chatmessage.calltype == '呼出'> - ${chatmessage.intervented?string(chatmessage.supervisorname,curagentuser.agentname)} + ${chatmessage.intervented?string(chatmessage.supervisorname,chatmessage.username)} <#else> - ${curagentuser.username!''} + ${chatmessage.username!''} ${chatmessage.createtime?string('yyyy-MM-dd HH:mm:ss')} diff --git a/contact-center/app/src/main/resources/templates/apps/cca/transfer.html b/contact-center/app/src/main/resources/templates/apps/cca/transfer.html index ed62a321..a72634b1 100644 --- a/contact-center/app/src/main/resources/templates/apps/cca/transfer.html +++ b/contact-center/app/src/main/resources/templates/apps/cca/transfer.html @@ -113,20 +113,20 @@ customerChatAudit.$("li[remove-id="+agentUserId+"] a").click(); top.layer.msg('转接已完成',{icon: 1, time: 1000}) } else if(result.rc === 1){ - top.layer.msg('不合法的请求参数',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的请求参数',{icon: 2, time: 3000}) } else if(result.rc === 2){ - top.layer.msg('不合法的操作',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('不合法的操作',{icon: 2, time: 3000}) } else if(result.rc === 3){ - top.layer.msg('您没有权限执行该操作',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('您没有权限执行该操作',{icon: 2, time: 3000}) } else if(result.rc === 4){ - top.layer.msg('该访客会话不存在',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('该访客会话不存在',{icon: 2, time: 3000}) } else if(result.rc === 5){ - top.layer.msg('参数不合法',{icon: 2, offset: 'b', time: 3000}) + top.layer.msg('参数不合法',{icon: 2, time: 3000}) } }, function(error){ console.log("error", error); // 服务器异常 - top.layer.msg('服务器抽风,请稍后再试!', {icon: 2, offset: 'b', time: 3000}) + top.layer.msg('服务器抽风,请稍后再试!', {icon: 2, time: 3000}) }) } @@ -142,7 +142,7 @@ if(params["userid"] && params["agentuserid"] && params["agentserviceid"] && params["agentno"]){ submitTransAgentUserOut(params["agentuserid"], params["agentno"], params["agentserviceid"], params["memo"]); } else { - top.layer.msg('未选择合理的转接信息!',{icon: 2, offset: 'b', time: 3000}); + top.layer.msg('未选择合理的转接信息!',{icon: 2, time: 3000}); } }); }); diff --git a/contact-center/app/src/main/resources/templates/apps/desktop/index.html b/contact-center/app/src/main/resources/templates/apps/desktop/index.html index d279cae2..a693072d 100644 --- a/contact-center/app/src/main/resources/templates/apps/desktop/index.html +++ b/contact-center/app/src/main/resources/templates/apps/desktop/index.html @@ -166,11 +166,11 @@ } }); <#if msg?? && msg == 'username_exist'> - layer.msg('用户名存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('用户名存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'email_exist'> - layer.msg('邮件存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('邮件存在,请重新填写',{icon: 2, time: 3000}) <#elseif msg?? && msg == 'mobile_exist'> - layer.msg('手机存在,请重新填写',{icon: 2, offset: 'rb', time: 3000}) + layer.msg('手机存在,请重新填写',{icon: 2, time: 3000}) }); diff --git a/contact-center/app/src/main/resources/templates/apps/desktop/profile.html b/contact-center/app/src/main/resources/templates/apps/desktop/profile.html index 4c32b1ca..6386db8a 100644 --- a/contact-center/app/src/main/resources/templates/apps/desktop/profile.html +++ b/contact-center/app/src/main/resources/templates/apps/desktop/profile.html @@ -36,14 +36,15 @@
    - <#if userData?? && userData.usertype != '0'> -
    - -
    - checked> -
    -
    - + + + + + + + + +
    @@ -70,4 +71,4 @@ layui.use('form', function(){ } }); }); - \ No newline at end of file + diff --git a/contact-center/app/src/main/resources/templates/apps/entim/chat.html b/contact-center/app/src/main/resources/templates/apps/entim/chat.html index 4c34db1d..f9964e60 100644 --- a/contact-center/app/src/main/resources/templates/apps/entim/chat.html +++ b/contact-center/app/src/main/resources/templates/apps/entim/chat.html @@ -74,6 +74,15 @@
  • 电话:${entimuser.mobile!''}

  • +
  • +

    部门: + <#if organs?? > + <#list organs as organ> + ${organ.name!''}  + + +

    +
  • diff --git a/contact-center/app/src/main/resources/templates/apps/entim/index.html b/contact-center/app/src/main/resources/templates/apps/entim/index.html index 62fceab9..0ad1e5e4 100644 --- a/contact-center/app/src/main/resources/templates/apps/entim/index.html +++ b/contact-center/app/src/main/resources/templates/apps/entim/index.html @@ -156,7 +156,7 @@ ${newmsg} - <#if user?? && (user.roleAuthMap[ "A14_A01"]?? || user.usertype=="0" )> + <#if user?? && (user.roleAuthMap[ "A14_A01"]?? || user.admin )>
  • diff --git a/contact-center/app/src/main/resources/templates/apps/index.html b/contact-center/app/src/main/resources/templates/apps/index.html index cd6c5a7f..498c1d36 100644 --- a/contact-center/app/src/main/resources/templates/apps/index.html +++ b/contact-center/app/src/main/resources/templates/apps/index.html @@ -62,17 +62,17 @@