From fee95c1e3240ed67d80343dc51d8cd177047928b Mon Sep 17 00:00:00 2001 From: mukaiu Date: Mon, 9 Nov 2020 18:22:08 +0800 Subject: [PATCH] #373 add new organ rule --- .../cc/controller/admin/OrganController.java | 32 +-- .../cc/controller/admin/RoleController.java | 19 +- .../cc/controller/admin/UsersController.java | 42 ++-- .../admin/channel/SNSAccountIMController.java | 12 +- .../cc/controller/api/ApiUserController.java | 12 +- .../controller/apps/AgentAuditController.java | 3 +- .../java/com/chatopera/cc/model/Role.java | 186 ++++++++++-------- .../repository/RoleRepository.java | 17 +- .../repository/SNSAccountRepository.java | 4 +- .../com/chatopera/cc/proxy/UserProxy.java | 14 +- .../src/main/resources/static/js/cskefu.js | 6 +- .../templates/admin/include/left.html | 16 ++ .../resources/templates/admin/organ/add.html | 4 +- .../resources/templates/admin/organ/edit.html | 14 +- .../templates/admin/organ/index.html | 6 +- .../resources/templates/admin/user/add.html | 121 ++++++++++++ .../templates/apps/agent/mainagentuser.html | 24 ++- .../templates/apps/cca/mainagentuser.html | 14 +- .../main/resources/templates/apps/index.html | 10 - .../config/sql/cosinee-MySQL-slim.sql | 1 + 20 files changed, 384 insertions(+), 173 deletions(-) diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/OrganController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/OrganController.java index 4018d2a3..c652a227 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/OrganController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/OrganController.java @@ -37,10 +37,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @author 程序猿DD @@ -83,11 +80,16 @@ public class OrganController extends Handler { @Autowired private UserProxy userProxy; + private Collection getOwnOragans(HttpServletRequest request) { + Organ currentOrgan = super.getOrgan(request); + return organProxy.findAllOrganByParentAndOrgi(currentOrgan, super.getOrgi()).values(); + } + @RequestMapping("/index") @Menu(type = "admin", subtype = "organ") public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String organ, @Valid String msg) { List organList = organRepository.findByOrgi(super.getOrgi()); - map.addAttribute("organList", organList); + map.addAttribute("organList", getOwnOragans(request)); if (organList.size() > 0) { Organ organData = null; if (!StringUtils.isBlank(organ) && !"null".equals(organ)) { @@ -98,7 +100,7 @@ public class OrganController extends Handler { } } } else { - map.addAttribute("organData", organData = organList.get(0)); + map.addAttribute("organData", organData = super.getOrgan(request)); } if (organData != null) { map.addAttribute( @@ -125,7 +127,7 @@ public class OrganController extends Handler { map.addAttribute("area", areaRepository.findByIdAndOrgi(area, super.getOrgi())); } - map.addAttribute("organList", organRepository.findByOrgi(super.getOrgi())); + map.addAttribute("organList", getOwnOragans(request)); return request(super.createRequestPageTempletResponse("/admin/organ/add")); } @@ -159,8 +161,8 @@ 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.findByOrgiAndDatastatus(super.getOrgi(), false)); + Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); + map.addAttribute("userList", userProxy.findUserInOrgans(organs.keySet())); Organ organData = organRepository.findByIdAndOrgi(organ, super.getOrgi()); map.addAttribute("userOrganList", userProxy .findByOrganAndOrgiAndDatastatus(organ, super.getOrgi(), false)); @@ -249,7 +251,12 @@ public class OrganController extends Handler { ) { logger.info("[userroledelete] user id {}, organ {}", id, organ); if (id != null) { - organUserRes.deleteOrganUserByUseridAndOrgan(id, organ); + List organUsers = organUserRes.findByUserid(id); + if (organUsers.size() > 1) { + organUserRes.deleteOrganUserByUseridAndOrgan(id, organ); + } else { + return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?organ=" + organ + "&msg=not_allow_remove_user")); + } } return request(super.createRequestPageTempletResponse("redirect:/admin/organ/index.html?organ=" + organ)); } @@ -258,10 +265,11 @@ public class OrganController extends Handler { @Menu(type = "admin", subtype = "organ") public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) { ModelAndView view = request(super.createRequestPageTempletResponse("/admin/organ/edit")); + Organ currentOrgan = super.getOrgan(request); map.addAttribute("areaList", areaRepository.findByOrgi(super.getOrgi())); view.addObject("organData", organRepository.findByIdAndOrgi(id, super.getOrgi())); - - map.addAttribute("organList", organRepository.findByOrgi(super.getOrgi())); + view.addObject("isRootOrgan", id.equals(currentOrgan.getId())); + map.addAttribute("organList", getOwnOragans(request)); return view; } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/RoleController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/RoleController.java index 7daf12b5..9c3a9c6e 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/RoleController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/RoleController.java @@ -21,6 +21,8 @@ import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.controller.Handler; import com.chatopera.cc.model.*; import com.chatopera.cc.persistence.repository.*; +import com.chatopera.cc.proxy.OrganProxy; +import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.util.Menu; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; @@ -36,6 +38,7 @@ import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.util.Date; import java.util.List; +import java.util.Map; @Controller @RequestMapping("/admin/role") @@ -58,10 +61,18 @@ public class RoleController extends Handler { @Autowired private SysDicRepository sysDicRes; + @Autowired + OrganProxy organProxy; + + @Autowired + UserProxy userProxy; + @RequestMapping("/index") @Menu(type = "admin", subtype = "role") public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String role, @Valid String msg) { - List roleList = roleRepository.findByOrgi(super.getOrgi()); + Organ currentOrgan = super.getOrgan(request); + + List roleList = roleRepository.findByOrgiAndOrgan(super.getOrgi(),currentOrgan.getId()); map.addAttribute("roleList", roleList); map.addAttribute("msg", msg); if (roleList.size() > 0) { @@ -92,6 +103,7 @@ public class RoleController extends Handler { @RequestMapping("/save") @Menu(type = "admin", subtype = "role") public ModelAndView save(HttpServletRequest request, @Valid Role role) { + Organ currentOrgan = super.getOrgan(request); Role tempRole = roleRepository.findByNameAndOrgi(role.getName(), super.getOrgi()); String msg = "admin_role_save_success"; if (tempRole != null) { @@ -101,6 +113,7 @@ public class RoleController extends Handler { role.setCreater(super.getUser(request).getId()); role.setCreatetime(new Date()); role.setUpdatetime(new Date()); + role.setOrgan(currentOrgan.getId()); roleRepository.save(role); } return request(super.createRequestPageTempletResponse("redirect:/admin/role/index.html?msg=" + msg)); @@ -109,14 +122,14 @@ public class RoleController extends Handler { @RequestMapping("/seluser") @Menu(type = "admin", subtype = "seluser", admin = true) public ModelAndView seluser(ModelMap map, HttpServletRequest request, @Valid String role) { - map.addAttribute("userList", userRepository.findByOrgiAndDatastatus(super.getOrgi(), false)); + Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); + map.addAttribute("userList", userProxy.findUserInOrgans(organs.keySet())); Role roleData = roleRepository.findByIdAndOrgi(role, super.getOrgi()); map.addAttribute("userRoleList", userRoleRes.findByOrgiAndRole(super.getOrgi(), roleData)); map.addAttribute("role", roleData); return request(super.createRequestPageTempletResponse("/admin/role/seluser")); } - @RequestMapping("/saveuser") @Menu(type = "admin", subtype = "saveuser", admin = true) public ModelAndView saveuser(HttpServletRequest request, @Valid String[] users, @Valid String role) { diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/UsersController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/UsersController.java index 97480359..e2dda0be 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/UsersController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/UsersController.java @@ -79,37 +79,29 @@ public class UsersController extends Handler { @Menu(type = "admin", subtype = "user") public ModelAndView index(ModelMap map, HttpServletRequest request) throws IOException { User logined = super.getUser(request); - if (!logined.isSuperadmin()) { - Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); - map.addAttribute("userList", userProxy.findUserInOrgans(organs.keySet(), new PageRequest( - super.getP(request), - super.getPs(request), - Sort.Direction.ASC, - "createtime" - ))); - } else { - map.addAttribute( - "userList", - userRepository.findByDatastatusAndOrgiAndSuperadminNot( - false, - super.getOrgi(), - true, - new PageRequest( - super.getP(request), - super.getPs(request), - Sort.Direction.ASC, - "createtime" - ) - ) - ); - } + + Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); + map.addAttribute("userList", userProxy.findUserInOrgans(organs.keySet(), new PageRequest( + super.getP(request), + super.getPs(request), + Sort.Direction.ASC, + "createtime" + ))); + + return request(super.createAdminTempletResponse("/admin/user/index")); } @RequestMapping("/add") @Menu(type = "admin", subtype = "user") public ModelAndView add(ModelMap map, HttpServletRequest request) { - return request(super.createRequestPageTempletResponse("/admin/user/add")); + ModelAndView view = request(super.createRequestPageTempletResponse("/admin/user/add")); + Organ currentOrgan = super.getOrgan(request); + Map organs = organProxy.findAllOrganByParentAndOrgi(currentOrgan, super.getOrgi(request)); + map.addAttribute("currentOrgan", currentOrgan); + map.addAttribute("organList", organs.values()); + + return view; } @RequestMapping("/edit") diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/SNSAccountIMController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/SNSAccountIMController.java index 9e09a871..710b4e29 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/SNSAccountIMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/SNSAccountIMController.java @@ -64,13 +64,9 @@ public class SNSAccountIMController extends Handler { @RequestMapping("/index") @Menu(type = "admin", subtype = "im", access = false, admin = true) public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String execute, @RequestParam(name = "status", required = false) String status) { - User logined = super.getUser(request); - if (logined.isSuperadmin()) { - map.addAttribute("snsAccountList", snsAccountRes.findBySnstypeAndOrgi(MainContext.ChannelType.WEBIM.toString(), super.getOrgi(request), new PageRequest(super.getP(request), super.getPs(request)))); - } else { - Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); - map.addAttribute("snsAccountList", snsAccountRes.findBySnstypeAndOrgiAndOrgan(MainContext.ChannelType.WEBIM.toString(), super.getOrgi(request), organs.keySet(), new PageRequest(super.getP(request), super.getPs(request)))); - } + Map organs = organProxy.findAllOrganByParentAndOrgi(super.getOrgan(request), super.getOrgi(request)); + map.addAttribute("snsAccountList", snsAccountRes.findBySnstypeAndOrgiAndOrgan(MainContext.ChannelType.WEBIM.toString(), super.getOrgi(request), organs.keySet(), new PageRequest(super.getP(request), super.getPs(request)))); + map.addAttribute("status", status); List secretConfig = secRes.findByOrgi(super.getOrgi(request)); if (secretConfig != null && secretConfig.size() > 0) { @@ -92,6 +88,7 @@ public class SNSAccountIMController extends Handler { @Menu(type = "admin", subtype = "weixin") public ModelAndView save(HttpServletRequest request, @Valid SNSAccount snsAccount) throws NoSuchAlgorithmException { + Organ currentOrgan = super.getOrgan(request); String status = "new_webim_fail"; if (StringUtils.isNotBlank(snsAccount.getBaseURL())) { snsAccount.setSnsid(Base62.encode(snsAccount.getBaseURL()).toLowerCase()); @@ -103,6 +100,7 @@ public class SNSAccountIMController extends Handler { snsAccount.setCreatetime(new Date()); User curr = super.getUser(request); snsAccount.setCreater(curr.getId()); + snsAccount.setOrgan(currentOrgan.getId()); snsAccountRes.save(snsAccount); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiUserController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiUserController.java index 38944bcb..95f83cd2 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiUserController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiUserController.java @@ -23,6 +23,7 @@ import com.chatopera.cc.cache.Cache; import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.api.request.RestUtils; import com.chatopera.cc.model.*; +import com.chatopera.cc.persistence.repository.OrganRepository; import com.chatopera.cc.persistence.repository.OrganUserRepository; import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRoleRepository; @@ -72,6 +73,9 @@ public class ApiUserController extends Handler { @Autowired private OrganUserRepository organUserRes; + @Autowired + private OrganRepository organRes; + @Autowired private UserRoleRepository userRoleRes; @@ -156,11 +160,17 @@ public class ApiUserController extends Handler { */ private JsonObject create(final HttpServletRequest request, final JsonObject payload) { logger.info("[create] payload {}", payload.toString()); + String parent = payload.get("parent").getAsString(); + Organ parentOrgan = super.getOrgan(request); + if (StringUtils.isNotEmpty(parent)) { + parentOrgan = organRes.getOne(parent); + } + // 创建新用户时,阻止传入ID payload.remove("id"); // 从payload中创建User User user = userProxy.parseUserFromJson(payload); - JsonObject resp = userProxy.createNewUser(user); + JsonObject resp = userProxy.createNewUser(user, parentOrgan); logger.info("[create] response {}", resp.toString()); return resp; } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/AgentAuditController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/AgentAuditController.java index abdec5aa..2e09956b 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/AgentAuditController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/AgentAuditController.java @@ -51,6 +51,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Controller @RequestMapping(value = "/apps/cca") @@ -197,7 +198,7 @@ public class AgentAuditController extends Handler { List skills = organRes.findByOrgiAndSkill(orgi, true); List agents = userRes.findByOrgiAndAgentAndDatastatusAndIdIsNot(orgi, true, false, logined.getId()); - view.addObject("skillGroups", skills); + view.addObject("skillGroups", skills.stream().filter(s -> organs.containsKey(s.getId())).collect(Collectors.toList())); view.addObject("agentList", agents); return view; diff --git a/contact-center/app/src/main/java/com/chatopera/cc/model/Role.java b/contact-center/app/src/main/java/com/chatopera/cc/model/Role.java index ad4d7d58..ba7e86ba 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/model/Role.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/model/Role.java @@ -24,87 +24,113 @@ import java.util.Date; @Entity @Table(name = "uk_role") @org.hibernate.annotations.Proxy(lazy = false) -public class Role implements java.io.Serializable{ +public class Role implements java.io.Serializable { - /** - * - */ - private static final long serialVersionUID = 1115593425069549681L; - - private String id ; - private String name ; - private String code ; - private Date createtime ; - private String creater; - private String username ; - private Date updatetime ; - private String orgi ; - private String orgid ; - - - public Role(){} - - public Role(String id){ - this.id = id ; - } - @Id - @Column(length = 32) - @GeneratedValue(generator = "system-uuid") - @GenericGenerator(name = "system-uuid", strategy = "uuid") - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getCode() { - return code; - } - public void setCode(String code) { - this.code = code; - } - public String getCreater() { - return creater; - } - public void setCreater(String creater) { - this.creater = creater; - } - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getOrgi() { - return orgi; - } - public void setOrgi(String orgi) { - this.orgi = orgi; - } - public Date getCreatetime() { - return createtime; - } - public void setCreatetime(Date createtime) { - this.createtime = createtime; - } - public Date getUpdatetime() { - return updatetime; - } - public void setUpdatetime(Date updatetime) { - this.updatetime = updatetime; - } + /** + * + */ + private static final long serialVersionUID = 1115593425069549681L; - public String getOrgid() { - return orgid; - } + private String id; + private String name; + private String code; + private Date createtime; + private String creater; + private String username; + private Date updatetime; + private String orgi; + private String orgid; + private String organ; - public void setOrgid(String orgid) { - this.orgid = orgid; - } + + public Role() { + } + + public Role(String id) { + this.id = id; + } + + @Id + @Column(length = 32) + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getCreater() { + return creater; + } + + public void setCreater(String creater) { + this.creater = creater; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getOrgi() { + return orgi; + } + + public void setOrgi(String orgi) { + this.orgi = orgi; + } + + public Date getCreatetime() { + return createtime; + } + + public void setCreatetime(Date createtime) { + this.createtime = createtime; + } + + public Date getUpdatetime() { + return updatetime; + } + + public void setUpdatetime(Date updatetime) { + this.updatetime = updatetime; + } + + public String getOrgid() { + return orgid; + } + + public void setOrgid(String orgid) { + this.orgid = orgid; + } + + public String getOrgan() { + return organ; + } + + public void setOrgan(String organ) { + this.organ = organ; + } } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/RoleRepository.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/RoleRepository.java index dba932f4..d7b94b70 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/RoleRepository.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/RoleRepository.java @@ -22,14 +22,15 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface RoleRepository - extends JpaRepository -{ - Role findByIdAndOrgi(String paramString, String orgi); + extends JpaRepository { + Role findByIdAndOrgi(String paramString, String orgi); - List findByOrgi(String orgi); - - List findByOrgi(String orgi, String orgid); - - Role findByNameAndOrgi(String paramString, String orgi); + List findByOrgi(String orgi); + + List findByOrgiAndOrgan(String orgi, String organ); + + List findByOrgi(String orgi, String orgid); + + Role findByNameAndOrgi(String paramString, String orgi); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/SNSAccountRepository.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/SNSAccountRepository.java index 35b1d6ac..9c964f5a 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/SNSAccountRepository.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/SNSAccountRepository.java @@ -49,8 +49,8 @@ public interface SNSAccountRepository Page findBySnstypeAndOrgi(String paramString, String orgi, Pageable page); - @Query(value = "select s.* from `uk_snsaccount` s left join `uk_consult_invite` ci on ci.`snsaccountid`=s.`snsid` WHERE s.snstype = ?1 AND s.orgi = ?2 and ci.`consult_skill_fixed_id` in (?3) ORDER BY ?#{#pageable}", - countQuery = "select count(1) from `uk_snsaccount` s left join `uk_consult_invite` ci on ci.`snsaccountid`=s.`snsid` WHERE s.snstype = ?1 AND s.orgi = ?2 and ci.`consult_skill_fixed_id` in (?3)", nativeQuery = true) + @Query(value = "select s.* from `uk_snsaccount` s WHERE s.snstype = ?1 AND s.orgi = ?2 and s.`organ` in (?3) ORDER BY ?#{#pageable}", + countQuery = "select count(1) from `uk_snsaccount` s WHERE s.snstype = ?1 AND s.orgi = ?2 and s.`organ` in (?3)", nativeQuery = true) Page findBySnstypeAndOrgiAndOrgan(String paramString, String orgi, Collection organ, Pageable page); @Query(value = "SELECT * FROM uk_snsaccount WHERE snstype = ?1 AND snsid = ?2 AND orgi = ?3 LIMIT 1", nativeQuery = true) 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 47145fa8..ae4e2d33 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 @@ -59,6 +59,10 @@ public class UserProxy { @Autowired private ExtensionRepository extensionRes; + public JsonObject createNewUser(final User user) { + return this.createNewUser(user, null); + } + /** * 创建新用户 * 支持多租户 @@ -67,7 +71,7 @@ public class UserProxy { * @param organ * @return */ - public JsonObject createNewUser(final User user) { + public JsonObject createNewUser(final User user, Organ organ) { JsonObject result = new JsonObject(); String msg = validUser(user); if (StringUtils.equalsIgnoreCase(msg, "new_user_success")) { @@ -80,6 +84,14 @@ public class UserProxy { user.setPassword(MainUtils.md5(user.getPassword())); } userRes.save(user); + + if(organ!=null) { + OrganUser ou = new OrganUser(); + ou.setUserid(user.getId()); + ou.setOrgan(organ.getId()); + organUserRes.save(ou); + } + } // 新账号未通过验证,返回创建失败信息msg result.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_SUCC); diff --git a/contact-center/app/src/main/resources/static/js/cskefu.js b/contact-center/app/src/main/resources/static/js/cskefu.js index 51b4ffa0..e980c44a 100644 --- a/contact-center/app/src/main/resources/static/js/cskefu.js +++ b/contact-center/app/src/main/resources/static/js/cskefu.js @@ -391,11 +391,11 @@ var Proxy = { } } if(answer) { - var li = '
  • \n' + + var li = '
  • \n' + '
    问题:' + result.data[j].post + '
    \n' + '
    \n' + '

    答案:' + answer.content + '

    \n' + - ' \n' + + ' \n' + '
    \n' + '
  • ' type == "agent" ? $("#quickReplyBox").append(li) : $("#ccaQuickReplyBox").append(li); @@ -431,6 +431,8 @@ var Proxy = { } } }, + + endAgentUserService:function(data){ if($('#tip_message_'+data.userid).length >0){ if(data.channel){ diff --git a/contact-center/app/src/main/resources/templates/admin/include/left.html b/contact-center/app/src/main/resources/templates/admin/include/left.html index b705bacf..1736486a 100644 --- a/contact-center/app/src/main/resources/templates/admin/include/left.html +++ b/contact-center/app/src/main/resources/templates/admin/include/left.html @@ -77,6 +77,16 @@
    class="layui-this"> 元数据
    + <#if models?seq_contains("chatbot")> + <#if user?? &&( user.roleAuthMap["A09"]?? || user.admin) > +
    + + 智能机器人 + +
    + + +
    class="layui-this"> 系统模板
    @@ -91,3 +101,9 @@ + + diff --git a/contact-center/app/src/main/resources/templates/admin/organ/add.html b/contact-center/app/src/main/resources/templates/admin/organ/add.html index 52a0f409..60aa9883 100644 --- a/contact-center/app/src/main/resources/templates/admin/organ/add.html +++ b/contact-center/app/src/main/resources/templates/admin/organ/add.html @@ -125,10 +125,10 @@ layui.use('form', function(){ var zNodes =[ - { id:'0', pId:'00', name:"组织机构", open:true , organ : true, type : "organ"} + // { id:'0', pId:'00', name:"组织机构", open:true , organ : true, type : "organ"} <#if organList??> <#list organList as organ> - ,{ id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , organ : true , type : "organ", icon:"/images/dept.png" } + { id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , organ : true , type : "organ", icon:"/images/dept.png" }, ]; diff --git a/contact-center/app/src/main/resources/templates/admin/organ/edit.html b/contact-center/app/src/main/resources/templates/admin/organ/edit.html index 11face96..8372034d 100644 --- a/contact-center/app/src/main/resources/templates/admin/organ/edit.html +++ b/contact-center/app/src/main/resources/templates/admin/organ/edit.html @@ -2,17 +2,18 @@
    +
    + <#if isRootOrgan!=true>
    - @@ -22,6 +23,7 @@
    +
    @@ -133,10 +135,10 @@ layui.use('form', function(){ var zNodes =[ - { id:'0', pId:'00', name:"组织机构", open:true , organ : true, type : "organ"} + // { id:'0', pId:'00', name:"组织机构", open:true , organ : true, type : "organ"} <#if organList??> <#list organList as organ> - ,{ id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , organ : true , type : "organ", icon:"/images/dept.png" } + { id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , organ : true , type : "organ", icon:"/images/dept.png" }, ]; @@ -144,8 +146,10 @@ layui.use('form', function(){ var ztree = $.fn.zTree.init($("#organTree"), setting, zNodes); <#if organData??> var node = ztree.getNodeByParam('id', '${organData.parent!''}');//获取id为1的点 - ztree.selectNode(node);//选择点 - $("#parentname").attr("value", node.name); + ztree.selectNode(node);//选择点 + if(node){ + $("#parentname").attr("value", node.name); + } <#if organData.area??> <#list organData.area?split(",") as area> var areanode_${area_index} = ztree.getNodeByParam('id', '${area}');//获取id为1的点 diff --git a/contact-center/app/src/main/resources/templates/admin/organ/index.html b/contact-center/app/src/main/resources/templates/admin/organ/index.html index fc7fb748..49c922a3 100644 --- a/contact-center/app/src/main/resources/templates/admin/organ/index.html +++ b/contact-center/app/src/main/resources/templates/admin/organ/index.html @@ -117,10 +117,10 @@ } var zNodes =[ - { id:'0', pId:'00', name:"组织机构", open:true , topic : false} + // { id:'0', pId:'00', name:"组织机构", open:true , topic : false} <#if organList??> <#list organList as organ> - ,{ id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , topic : true , <#if organ.area?? && organ.area != "">icon:"/images/area.png" <#else>icon:"/images/dept.png" } + { id:'${organ.id!''}', pId:'${organ.parent!'0'}', name:"${organ.name!''}", open:true , topic : true , <#if organ.area?? && organ.area != "">icon:"/images/area.png" <#else>icon:"/images/dept.png" }, ]; @@ -153,6 +153,8 @@ layer.msg('新建组织成功',{icon: 1, time: 1500}) <#elseif msg?? && msg == 'admin_organ_update_not_standard'> layer.msg('修改无法完成,上级机构选择错误',{icon: 2, time: 1500}) + <#elseif msg?? && msg == 'not_allow_remove_user'> + layer.msg('用户只有一个组织,不允许移除',{icon: 2, time: 1500}) 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 911d9c3c..92de78d8 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 @@ -35,6 +35,21 @@
    +
    +
    + +
    + + + + +
    +
    +
    +
    @@ -269,3 +284,109 @@ layui.use('form', function(){ }); + + 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 ab612606..20b99e35 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 @@ -199,11 +199,11 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura } } if(answer){ - var li = '
  • \n' + + var li = '
  • \n' + '
    问题:'+result.data[j].post+'
    \n' + '
    \n' + '

    答案:'+answer.content+'

    \n' + - ' \n' + + ' \n' + '
    \n' + '
  • ' $("#quickReplyAgentBox").append(li); @@ -609,10 +609,9 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura showOrHide('none'); }; - function chooseAnswer(data){ - editor.html(data) - } - + // function chooseAnswer(data){ + // editor.html(data) + // } function showOrHide(data){ $("#agentAnswer").css("display",data) } @@ -651,11 +650,11 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura } } if(answer) { - var li = '
  • \n' + + var li = '
  • \n' + '
    问题:' + result.data[j].post + '
    \n' + '
    \n' + '

    答案:' + answer.content + '

    \n' + - ' \n' + + ' \n' + '
    \n' + '
  • ' $("#quickReplyBox").append(li); @@ -752,6 +751,7 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura $("#searchlabel").removeClass('selected') $("#all").addClass('selected') }) + //点击标注 $('#searchlabel').click(function () { searchSwitch = !searchSwitch; @@ -817,5 +817,13 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura }); + $('#quickReplyAgentBox').on('click','.chooseAnswer', function(){ + editor.html($(this).data('title')) + }); + + $('#quickReplyBox').on('click','.chooseAnswer', function(){ + editor.html($(this).data('title')) + }); + 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 824562c3..07a5b9bd 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 @@ -182,11 +182,11 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura } } if(answer) { - var li = '
  • \n' + + var li = '
  • \n' + '
    问题:' + result.data[j].post + '
    \n' + '
    \n' + '

    答案:' + answer.content + '

    \n' + - ' \n' + + ' \n' + '
    \n' + '
  • ' $("#ccaQuickReplyAgentBox").append(li); @@ -634,11 +634,11 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura } } if(answer) { - var li = '
  • \n' + + var li = '
  • \n' + '
    问题:' + result.data[j].post + '
    \n' + '
    \n' + '

    答案:' + answer.content + '

    \n' + - ' \n' + + ' \n' + '
    \n' + '
  • ' $("#ccaQuickReplyBox").append(li); @@ -800,6 +800,12 @@ word-break: break-all;"><#if curagentuser??>${curagentuser.username!''}<#if cura }); }); + $('#ccaQuickReplyAgentBox').on('click','.chooseAnswer', function(){ + editor.html($(this).data('title')) + }); + $('#ccaQuickReplyBox').on('click','.chooseAnswer', function(){ + editor.html($(this).data('title')) + }); 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 eaadd40d..0eddf6e6 100644 --- a/contact-center/app/src/main/resources/templates/apps/index.html +++ b/contact-center/app/src/main/resources/templates/apps/index.html @@ -349,16 +349,6 @@ - <#if models?seq_contains("chatbot")> - <#if user?? &&( user.roleAuthMap["A09"]?? || user.admin) > -
    - - - -
    - - - <#if models?seq_contains("sample")>
    diff --git a/contact-center/config/sql/cosinee-MySQL-slim.sql b/contact-center/config/sql/cosinee-MySQL-slim.sql index 3e112729..b7b5c472 100644 --- a/contact-center/config/sql/cosinee-MySQL-slim.sql +++ b/contact-center/config/sql/cosinee-MySQL-slim.sql @@ -3183,6 +3183,7 @@ CREATE TABLE `uk_role` ( `ORGI` varchar(32) DEFAULT NULL COMMENT '租户ID', `ORGID` varchar(32) DEFAULT NULL COMMENT '企业ID', `USERNAME` varchar(50) DEFAULT NULL COMMENT '用户名', + `ORGAN` varchar(32) DEFAULT NULL COMMENT '部门', PRIMARY KEY (`ID`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='角色表';