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 7c037db2..f83ba633 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 @@ -281,7 +281,7 @@ public class OrganController extends Handler { @RequestMapping("/update") @Menu(type = "admin", subtype = "organ") public ModelAndView update(HttpServletRequest request, @Valid Organ organ) { - String msg = organProxy.updateOrgan(organ, super.getOrgi(request), super.getUser(request)); + String msg = organProxy.updateOrgan(organ, super.getOrgi(request)); return request(super.createRequestPageTempletResponse( "redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java index 1c73cf04..1e7ccb75 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java @@ -1,336 +1,340 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.chatopera.cc.controller.admin.channel; - -import com.chatopera.cc.cache.Cache; -import com.chatopera.cc.controller.Handler; -import com.chatopera.cc.model.CousultInvite; -import com.chatopera.cc.model.Organ; -import com.chatopera.cc.model.OrgiSkillRel; -import com.chatopera.cc.model.User; -import com.chatopera.cc.persistence.repository.*; -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; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -@Controller -@RequestMapping("/admin/webim") -public class WebIMController extends Handler { - private final static Logger logger = LoggerFactory.getLogger(WebIMController.class); - - @Autowired - private ConsultInviteRepository inviteRes; - - @Autowired - private OrganRepository organRes; - - @Autowired - private UserRepository userRes; - - @Autowired - private ServiceAiRepository serviceAiRes; - - @Autowired - private OrgiSkillRelRepository orgiSkillRelService; - - @Value("${web.upload-path}") - private String path; - - @Autowired - private SNSAccountRepository snsAccountRes; - - @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) { - CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); - logger.info("[index] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); - - if (coultInvite != null) { - map.addAttribute("inviteData", coultInvite); - map.addAttribute("skillGroups", getSkillGroups(request)); - map.addAttribute("agentList", getUsers(request)); - map.addAttribute("import", request.getServerPort()); - map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); - } - return request(super.createAdminTempletResponse("/admin/webim/index")); - } - - /** - * @param request - * @param inviteData - * @param webimlogo - * @param agentheadimg - * @return - * @throws IOException - */ - @RequestMapping("/save") - @Menu(type = "admin", subtype = "app", admin = true) - public ModelAndView save(HttpServletRequest request, - @Valid CousultInvite inviteData, - @RequestParam(value = "webimlogo", required = false) MultipartFile webimlogo, - @RequestParam(value = "agentheadimg", required = false) MultipartFile agentheadimg) throws IOException { - logger.info("[save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); - - if (StringUtils.isNotBlank(inviteData.getSnsaccountid())) { - CousultInvite tempData = inviteRes.findBySnsaccountidAndOrgi(inviteData.getSnsaccountid(), super.getOrgi(request)); - if (tempData != null) { - tempData.setConsult_vsitorbtn_model(inviteData.getConsult_vsitorbtn_model()); - tempData.setConsult_vsitorbtn_color(inviteData.getConsult_vsitorbtn_color()); - tempData.setConsult_vsitorbtn_position(inviteData.getConsult_vsitorbtn_position()); - tempData.setConsult_vsitorbtn_content(inviteData.getConsult_vsitorbtn_content()); - tempData.setConsult_vsitorbtn_display(inviteData.getConsult_vsitorbtn_display()); - tempData.setConsult_dialog_color(inviteData.getConsult_dialog_color()); - inviteData = tempData; - } - } else { - inviteData.setSnsaccountid(super.getUser(request).getId()); - } - inviteData.setOrgi(super.getOrgi(request)); - // 网页品牌标识 - if (webimlogo != null && webimlogo.getOriginalFilename().lastIndexOf(".") > 0) { - inviteData.setConsult_dialog_logo(super.saveImageFileWithMultipart(webimlogo)); - } - - // 网页坐席头像 - if (agentheadimg != null && agentheadimg.getOriginalFilename().lastIndexOf(".") > 0) { - inviteData.setConsult_dialog_headimg(super.saveImageFileWithMultipart(agentheadimg)); - } - inviteRes.save(inviteData); - cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); - return request(super.createRequestPageTempletResponse("redirect:/admin/webim/index.html?snsid=" + inviteData.getSnsaccountid())); - } - - @RequestMapping("/profile") - @Menu(type = "app", subtype = "profile", admin = true) - public ModelAndView profile(ModelMap map, HttpServletRequest request, @Valid String snsid) { - CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); - logger.info("[profile] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); - - if (coultInvite != null) { - map.addAttribute("inviteData", coultInvite); - map.addAttribute("skillGroups", getSkillGroups(request)); - } - map.addAttribute("import", request.getServerPort()); - map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); - - map.put("serviceAiList", serviceAiRes.findByOrgi(super.getOrgi(request))); - return request(super.createAdminTempletResponse("/admin/webim/profile")); - } - - @RequestMapping("/profile/save") - @Menu(type = "admin", subtype = "profile", admin = true) - public ModelAndView saveprofile(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "dialogad", required = false) MultipartFile dialogad) throws IOException { - final String orgi = super.getOrgi(request); - - CousultInvite tempInviteData; - logger.info("[profile/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}, traceUser {}", - inviteData.getSnsaccountid(), - inviteData.isAi(), - inviteData.isAifirst(), - inviteData.getAiname(), - inviteData.getAisuccesstip(), - inviteData.getAiid(), - inviteData.isTraceuser()); - - if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { - // 从Cache及DB加载consult - tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), orgi); - - if (tempInviteData != null) { - tempInviteData.setDialog_name(inviteData.getDialog_name()); - tempInviteData.setDialog_address(inviteData.getDialog_address()); - tempInviteData.setDialog_phone(inviteData.getDialog_phone()); - tempInviteData.setDialog_mail(inviteData.getDialog_mail()); - tempInviteData.setDialog_introduction(inviteData.getDialog_introduction()); - tempInviteData.setDialog_message(inviteData.getDialog_message()); - tempInviteData.setLeavemessage(inviteData.isLeavemessage()); - tempInviteData.setLvmopentype(inviteData.getLvmopentype()); - tempInviteData.setLvmname(inviteData.isLvmname()); - tempInviteData.setLvmphone(inviteData.isLvmphone()); - tempInviteData.setLvmemail(inviteData.isLvmemail()); - tempInviteData.setLvmaddress(inviteData.isLvmaddress()); - tempInviteData.setLvmqq(inviteData.isLvmqq()); - - tempInviteData.setConsult_skill_fixed(inviteData.isConsult_skill_fixed()); - tempInviteData.setConsult_skill_fixed_id(inviteData.getConsult_skill_fixed_id()); - tempInviteData.setSkill(inviteData.isSkill()); - tempInviteData.setConsult_skill_title(inviteData.getConsult_skill_title()); - tempInviteData.setConsult_skill_msg(inviteData.getConsult_skill_msg()); - tempInviteData.setConsult_skill_bottomtitle(inviteData.getConsult_skill_bottomtitle()); - tempInviteData.setConsult_skill_maxagent(inviteData.getConsult_skill_maxagent()); - tempInviteData.setConsult_skill_numbers(inviteData.getConsult_skill_numbers()); - tempInviteData.setConsult_skill_agent(inviteData.isConsult_skill_agent()); - - tempInviteData.setOnlyareaskill(inviteData.isOnlyareaskill()); - tempInviteData.setAreaskilltipmsg(inviteData.getAreaskilltipmsg()); - - tempInviteData.setConsult_info(inviteData.isConsult_info()); - tempInviteData.setConsult_info_email(inviteData.isConsult_info_email()); - tempInviteData.setConsult_info_name(inviteData.isConsult_info_name()); - tempInviteData.setConsult_info_phone(inviteData.isConsult_info_phone()); - tempInviteData.setConsult_info_resion(inviteData.isConsult_info_resion()); - tempInviteData.setConsult_info_message(inviteData.getConsult_info_message()); - tempInviteData.setConsult_info_cookies(inviteData.isConsult_info_cookies()); - - tempInviteData.setRecordhis(inviteData.isRecordhis()); - tempInviteData.setTraceuser(inviteData.isTraceuser()); - - tempInviteData.setAi(inviteData.isAi()); - tempInviteData.setAifirst(inviteData.isAifirst()); - tempInviteData.setAimsg(inviteData.getAimsg()); - tempInviteData.setAisuccesstip(inviteData.getAisuccesstip()); - tempInviteData.setAiname(inviteData.getAiname()); - tempInviteData.setAiid(inviteData.getAiid()); - - - tempInviteData.setMaxwordsnum(inviteData.getMaxwordsnum()); - tempInviteData.setCtrlenter(inviteData.isCtrlenter()); - tempInviteData.setWhitelist_mode(inviteData.isWhitelist_mode()); - - if (dialogad != null && StringUtils.isNotBlank(dialogad.getName()) && dialogad.getBytes() != null && dialogad.getBytes().length > 0) { - tempInviteData.setDialog_ad(super.saveImageFileWithMultipart(dialogad)); - } - // 保存到DB - inviteRes.save(tempInviteData); - inviteData = tempInviteData; - } - } else { - inviteRes.save(inviteData); - } - - cache.putConsultInviteByOrgi(orgi, inviteData); - return request(super.createRequestPageTempletResponse("redirect:/admin/webim/profile.html?snsid=" + inviteData.getSnsaccountid())); - } - - @RequestMapping("/invote") - @Menu(type = "app", subtype = "invote", admin = true) - public ModelAndView invote(ModelMap map, HttpServletRequest request, @Valid String snsid) { - CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); - logger.info("[invote] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); - - if (coultInvite != null) { - map.addAttribute("inviteData", coultInvite); - } - map.addAttribute("import", request.getServerPort()); - map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); - return request(super.createAdminTempletResponse("/admin/webim/invote")); - } - - @RequestMapping("/invote/save") - @Menu(type = "admin", subtype = "profile", admin = true) - public ModelAndView saveinvote(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "invotebg", required = false) MultipartFile invotebg) throws IOException { - CousultInvite tempInviteData; - logger.info("[invote/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); - - if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { - tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), super.getOrgi(request)); - if (tempInviteData != null) { - tempInviteData.setConsult_invite_enable(inviteData.isConsult_invite_enable()); - tempInviteData.setConsult_invite_content(inviteData.getConsult_invite_content()); - tempInviteData.setConsult_invite_accept(inviteData.getConsult_invite_accept()); - tempInviteData.setConsult_invite_later(inviteData.getConsult_invite_later()); - tempInviteData.setConsult_invite_delay(inviteData.getConsult_invite_delay()); - - tempInviteData.setConsult_invite_color(inviteData.getConsult_invite_color()); - - if (invotebg != null && StringUtils.isNotBlank(invotebg.getName()) && invotebg.getBytes() != null && invotebg.getBytes().length > 0) { - tempInviteData.setConsult_invite_bg(super.saveImageFileWithMultipart(invotebg)); - } - inviteRes.save(tempInviteData); - inviteData = tempInviteData; - } - } else { - inviteRes.save(inviteData); - } - cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); - return request(super.createRequestPageTempletResponse("redirect:/admin/webim/invote.html?snsid=" + inviteData.getSnsaccountid())); - } - - /** - * 获取当前登录者组织下的技能组列表 - * - * @param request - * @return - */ - private List getSkillGroups(HttpServletRequest request) { - List skillgroups = new ArrayList<>(); - if (super.isTenantshare()) { - List organIdList = new ArrayList<>(); - List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); - if (!orgiSkillRelList.isEmpty()) { - for (OrgiSkillRel rel : orgiSkillRelList) { - organIdList.add(rel.getSkillid()); - } - } - skillgroups = organRes.findAll(organIdList); - } else { - List allgroups = organRes.findByOrgiAndOrgid(super.getOrgi(request), super.getOrgid(request)); - for (Organ o : allgroups) { - if (o.isSkill()) { - skillgroups.add(o); - } - } - } - return skillgroups; - } - - /** - * 获取当前产品下人员信息 - * - * @param request - * @return - */ - private List getUsers(HttpServletRequest request) { - List userList; - if (super.isTenantshare()) { - List organIdList = new ArrayList<>(); - List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); - if (!orgiSkillRelList.isEmpty()) { - for (OrgiSkillRel rel : orgiSkillRelList) { - organIdList.add(rel.getSkillid()); - } - } - userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); - } else { - userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false); - } - return userList; - } -} \ No newline at end of file +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chatopera.cc.controller.admin.channel; + +import com.chatopera.cc.cache.Cache; +import com.chatopera.cc.controller.Handler; +import com.chatopera.cc.model.CousultInvite; +import com.chatopera.cc.model.Organ; +import com.chatopera.cc.model.OrgiSkillRel; +import com.chatopera.cc.model.User; +import com.chatopera.cc.persistence.repository.*; +import com.chatopera.cc.proxy.OnlineUserProxy; +import com.chatopera.cc.proxy.UserProxy; +import com.chatopera.cc.util.Menu; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Controller +@RequestMapping("/admin/webim") +@RequiredArgsConstructor +public class WebIMController extends Handler { + private final static Logger logger = LoggerFactory.getLogger(WebIMController.class); + + @NonNull + private final ConsultInviteRepository inviteRes; + + @NonNull + private final OrganRepository organRes; + + @NonNull + private final UserRepository userRes; + + @NonNull + private final ServiceAiRepository serviceAiRes; + + @NonNull + private final OrgiSkillRelRepository orgiSkillRelService; + + @NonNull + private final SNSAccountRepository snsAccountRes; + + @NonNull + private final Cache cache; + + @NonNull + private final UserProxy userProxy; + + @RequestMapping("/index") + @Menu(type = "app", subtype = "app", admin = true) + public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String snsid) { + CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); + + if (coultInvite != null) { + logger.info("[index] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); + map.addAttribute("inviteData", coultInvite); + map.addAttribute("skillGroups", getSkillGroups(request)); + map.addAttribute("agentList", getUsers(request)); + map.addAttribute("import", request.getServerPort()); + map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); + } + return request(super.createAdminTempletResponse("/admin/webim/index")); + } + + /** + * + */ + @RequestMapping("/save") + @Menu(type = "admin", subtype = "app", admin = true) + public ModelAndView save(HttpServletRequest request, + @Valid CousultInvite inviteData, + @RequestParam(value = "webimlogo", required = false) MultipartFile webimlogo, + @RequestParam(value = "agentheadimg", required = false) MultipartFile agentheadimg) throws IOException { + logger.info("[save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); + + if (StringUtils.isNotBlank(inviteData.getSnsaccountid())) { + CousultInvite tempData = inviteRes.findBySnsaccountidAndOrgi(inviteData.getSnsaccountid(), super.getOrgi(request)); + if (tempData != null) { + tempData.setConsult_vsitorbtn_model(inviteData.getConsult_vsitorbtn_model()); + tempData.setConsult_vsitorbtn_color(inviteData.getConsult_vsitorbtn_color()); + tempData.setConsult_vsitorbtn_position(inviteData.getConsult_vsitorbtn_position()); + tempData.setConsult_vsitorbtn_content(inviteData.getConsult_vsitorbtn_content()); + tempData.setConsult_vsitorbtn_display(inviteData.getConsult_vsitorbtn_display()); + tempData.setConsult_dialog_color(inviteData.getConsult_dialog_color()); + inviteData = tempData; + } + } else { + inviteData.setSnsaccountid(super.getUser(request).getId()); + } + inviteData.setOrgi(super.getOrgi(request)); + // 网页品牌标识 + if (webimlogo != null) { + String originalFilename = webimlogo.getOriginalFilename(); + if (originalFilename != null && originalFilename.lastIndexOf(".") > 0) { + inviteData.setConsult_dialog_logo(super.saveImageFileWithMultipart(webimlogo)); + } + } + + // 网页坐席头像 + if (agentheadimg != null) { + String originalFilename = agentheadimg.getOriginalFilename(); + if (originalFilename != null && originalFilename.lastIndexOf(".") > 0) { + inviteData.setConsult_dialog_headimg(super.saveImageFileWithMultipart(agentheadimg)); + } + } + inviteRes.save(inviteData); + cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); + return request(super.createRequestPageTempletResponse("redirect:/admin/webim/index.html?snsid=" + inviteData.getSnsaccountid())); + } + + @RequestMapping("/profile") + @Menu(type = "app", subtype = "profile", admin = true) + public ModelAndView profile(ModelMap map, HttpServletRequest request, @Valid String snsid) { + CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); + + if (coultInvite != null) { + logger.info("[profile] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); + map.addAttribute("inviteData", coultInvite); + map.addAttribute("skillGroups", getSkillGroups(request)); + } + map.addAttribute("import", request.getServerPort()); + map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); + + map.put("serviceAiList", serviceAiRes.findByOrgi(super.getOrgi(request))); + return request(super.createAdminTempletResponse("/admin/webim/profile")); + } + + @RequestMapping("/profile/save") + @Menu(type = "admin", subtype = "profile", admin = true) + public ModelAndView saveprofile(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "dialogad", required = false) MultipartFile dialogad) throws IOException { + final String orgi = super.getOrgi(request); + + if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { + logger.info("[profile/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}, traceUser {}", + inviteData.getSnsaccountid(), + inviteData.isAi(), + inviteData.isAifirst(), + inviteData.getAiname(), + inviteData.getAisuccesstip(), + inviteData.getAiid(), + inviteData.isTraceuser()); + // 从Cache及DB加载consult + CousultInvite tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), orgi); + + if (tempInviteData != null) { + tempInviteData.setDialog_name(inviteData.getDialog_name()); + tempInviteData.setDialog_address(inviteData.getDialog_address()); + tempInviteData.setDialog_phone(inviteData.getDialog_phone()); + tempInviteData.setDialog_mail(inviteData.getDialog_mail()); + tempInviteData.setDialog_introduction(inviteData.getDialog_introduction()); + tempInviteData.setDialog_message(inviteData.getDialog_message()); + tempInviteData.setLeavemessage(inviteData.isLeavemessage()); + tempInviteData.setLvmopentype(inviteData.getLvmopentype()); + tempInviteData.setLvmname(inviteData.isLvmname()); + tempInviteData.setLvmphone(inviteData.isLvmphone()); + tempInviteData.setLvmemail(inviteData.isLvmemail()); + tempInviteData.setLvmaddress(inviteData.isLvmaddress()); + tempInviteData.setLvmqq(inviteData.isLvmqq()); + + tempInviteData.setConsult_skill_fixed(inviteData.isConsult_skill_fixed()); + tempInviteData.setConsult_skill_fixed_id(inviteData.getConsult_skill_fixed_id()); + tempInviteData.setSkill(inviteData.isSkill()); + tempInviteData.setConsult_skill_title(inviteData.getConsult_skill_title()); + tempInviteData.setConsult_skill_msg(inviteData.getConsult_skill_msg()); + tempInviteData.setConsult_skill_bottomtitle(inviteData.getConsult_skill_bottomtitle()); + tempInviteData.setConsult_skill_maxagent(inviteData.getConsult_skill_maxagent()); + tempInviteData.setConsult_skill_numbers(inviteData.getConsult_skill_numbers()); + tempInviteData.setConsult_skill_agent(inviteData.isConsult_skill_agent()); + + tempInviteData.setOnlyareaskill(inviteData.isOnlyareaskill()); + tempInviteData.setAreaskilltipmsg(inviteData.getAreaskilltipmsg()); + + tempInviteData.setConsult_info(inviteData.isConsult_info()); + tempInviteData.setConsult_info_email(inviteData.isConsult_info_email()); + tempInviteData.setConsult_info_name(inviteData.isConsult_info_name()); + tempInviteData.setConsult_info_phone(inviteData.isConsult_info_phone()); + tempInviteData.setConsult_info_resion(inviteData.isConsult_info_resion()); + tempInviteData.setConsult_info_message(inviteData.getConsult_info_message()); + tempInviteData.setConsult_info_cookies(inviteData.isConsult_info_cookies()); + + tempInviteData.setRecordhis(inviteData.isRecordhis()); + tempInviteData.setTraceuser(inviteData.isTraceuser()); + + tempInviteData.setAi(inviteData.isAi()); + tempInviteData.setAifirst(inviteData.isAifirst()); + tempInviteData.setAimsg(inviteData.getAimsg()); + tempInviteData.setAisuccesstip(inviteData.getAisuccesstip()); + tempInviteData.setAiname(inviteData.getAiname()); + tempInviteData.setAiid(inviteData.getAiid()); + + + tempInviteData.setMaxwordsnum(inviteData.getMaxwordsnum()); + tempInviteData.setCtrlenter(inviteData.isCtrlenter()); + tempInviteData.setWhitelist_mode(inviteData.isWhitelist_mode()); + + if (dialogad != null && StringUtils.isNotBlank(dialogad.getName()) && dialogad.getBytes().length > 0) { + tempInviteData.setDialog_ad(super.saveImageFileWithMultipart(dialogad)); + } + // 保存到DB + inviteRes.save(tempInviteData); + inviteData = tempInviteData; + } + } else { + if (inviteData != null) { + inviteRes.save(inviteData); + } + } + if (inviteData == null) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Invite data not found"); + } + cache.putConsultInviteByOrgi(orgi, inviteData); + return request(super.createRequestPageTempletResponse("redirect:/admin/webim/profile.html?snsid=" + inviteData.getSnsaccountid())); + } + + @RequestMapping("/invote") + @Menu(type = "app", subtype = "invote", admin = true) + public ModelAndView invote(ModelMap map, HttpServletRequest request, @Valid String snsid) { + CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); + + if (coultInvite != null) { + logger.info("[invote] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); + map.addAttribute("inviteData", coultInvite); + } + map.addAttribute("import", request.getServerPort()); + map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); + return request(super.createAdminTempletResponse("/admin/webim/invote")); + } + + @RequestMapping("/invote/save") + @Menu(type = "admin", subtype = "profile", admin = true) + public ModelAndView saveinvote(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "invotebg", required = false) MultipartFile invotebg) throws IOException { + CousultInvite tempInviteData; + + if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { + logger.info("[invote/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); + tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), super.getOrgi(request)); + if (tempInviteData != null) { + tempInviteData.setConsult_invite_enable(inviteData.isConsult_invite_enable()); + tempInviteData.setConsult_invite_content(inviteData.getConsult_invite_content()); + tempInviteData.setConsult_invite_accept(inviteData.getConsult_invite_accept()); + tempInviteData.setConsult_invite_later(inviteData.getConsult_invite_later()); + tempInviteData.setConsult_invite_delay(inviteData.getConsult_invite_delay()); + + tempInviteData.setConsult_invite_color(inviteData.getConsult_invite_color()); + + if (invotebg != null && StringUtils.isNotBlank(invotebg.getName()) && invotebg.getBytes().length > 0) { + tempInviteData.setConsult_invite_bg(super.saveImageFileWithMultipart(invotebg)); + } + inviteRes.save(tempInviteData); + inviteData = tempInviteData; + } + } else { + if (inviteData != null) { + inviteRes.save(inviteData); + } + } + + if (inviteData == null) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Invite data not found"); + } + + cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); + return request(super.createRequestPageTempletResponse("redirect:/admin/webim/invote.html?snsid=" + inviteData.getSnsaccountid())); + } + + /** + * 获取当前登录者组织下的技能组列表 + */ + private List getSkillGroups(HttpServletRequest request) { + List skillgroups = new ArrayList<>(); + if (super.isTenantshare()) { + List organIdList = new ArrayList<>(); + List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); + if (!orgiSkillRelList.isEmpty()) { + for (OrgiSkillRel rel : orgiSkillRelList) { + organIdList.add(rel.getSkillid()); + } + } + skillgroups = organRes.findAllById(organIdList); + } else { + List allgroups = organRes.findByOrgiAndOrgid(super.getOrgi(request), super.getOrgid(request)); + for (Organ o : allgroups) { + if (o.isSkill()) { + skillgroups.add(o); + } + } + } + return skillgroups; + } + + /** + * 获取当前产品下人员信息 + */ + private List getUsers(HttpServletRequest request) { + List userList; + if (super.isTenantshare()) { + List organIdList = new ArrayList<>(); + List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); + if (!orgiSkillRelList.isEmpty()) { + for (OrgiSkillRel rel : orgiSkillRelList) { + organIdList.add(rel.getSkillid()); + } + } + userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); + } else { + userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false); + } + return userList; + } +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiContactNotesController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiContactNotesController.java index 4178b21f..dfa961d6 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiContactNotesController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiContactNotesController.java @@ -20,8 +20,9 @@ import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.api.request.RestUtils; -import com.chatopera.cc.exception.CSKefuRestException; -import com.chatopera.cc.model.*; +import com.chatopera.cc.model.ContactNotes; +import com.chatopera.cc.model.OrganUser; +import com.chatopera.cc.model.User; import com.chatopera.cc.persistence.es.ContactNotesRepository; import com.chatopera.cc.persistence.es.ContactsRepository; import com.chatopera.cc.persistence.repository.OrganRepository; @@ -32,15 +33,16 @@ import com.chatopera.cc.util.json.GsonTools; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import lombok.RequiredArgsConstructor; 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.lang.NonNull; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -49,6 +51,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; +import java.util.Optional; /** * 联系人笔记 @@ -56,39 +59,34 @@ import java.util.List; */ @RestController @RequestMapping("/api/contacts/notes") +@RequiredArgsConstructor public class ApiContactNotesController extends Handler { private final static Logger logger = LoggerFactory.getLogger(ApiContactNotesController.class); - @Autowired - private ContactNotesRepository contactNotesRes; + @NonNull + private final ContactNotesRepository contactNotesRes; + @NonNull + private final ContactsRepository contactsRes; - @Autowired - private ContactsRepository contactsRes; + @NonNull + private final UserRepository userRes; + @NonNull + private final OrganRepository organRes; - @Autowired - private UserRepository userRes; - - - @Autowired - private OrganRepository organRes; - - - @Autowired - private OrganUserRepository organUserRes; + @NonNull + private final OrganUserRepository organUserRes; /** * 获取创建人 - * - * @param creater - * @return */ private JsonObject creater(final String creater) { JsonObject data = new JsonObject(); // 增加创建人 - User u = userRes.findById(creater); - if (u != null) { + Optional optional = userRes.findById(creater); + if (optional.isPresent()) { + User u = optional.get(); data.addProperty("creater", u.getId()); data.addProperty("creatername", u.getUname()); @@ -101,13 +99,13 @@ public class ApiContactNotesController extends Handler { JsonArray y = new JsonArray(); for (final OrganUser organ : organs) { - Organ o = organRes.findOne(organ.getOrgan()); - if (o != null) { - JsonObject x = new JsonObject(); - x.addProperty("createrorgan", o.getName()); - x.addProperty("createrorganid", o.getId()); - y.add(x); - } + organRes.findById(organ.getOrgan()) + .ifPresent(o -> { + JsonObject x = new JsonObject(); + x.addProperty("createrorgan", o.getName()); + x.addProperty("createrorganid", o.getId()); + y.add(x); + }); } data.add("organs", y); } @@ -119,17 +117,15 @@ public class ApiContactNotesController extends Handler { /** * 获取笔记详情 - * - * @param j - * @return */ private JsonObject detail(final JsonObject j) throws GsonTools.JsonObjectExtensionConflictException { - logger.info("[contact note] detail {}] {}", j.toString()); + logger.info("[contact note] detail: {}", j.toString()); JsonObject resp = new JsonObject(); // TODO 增加权限检查 if (j.has("id") && StringUtils.isNotBlank(j.get("id").getAsString())) { - ContactNotes cn = contactNotesRes.findOne(j.get("id").getAsString()); - if (cn != null) { + Optional optional = contactNotesRes.findById(j.get("id").getAsString()); + if (optional.isPresent()) { + ContactNotes cn = optional.get(); JsonObject data = new JsonObject(); data.addProperty("contactid", cn.getContactid()); data.addProperty("category", cn.getCategory()); @@ -151,9 +147,6 @@ public class ApiContactNotesController extends Handler { /** * 创建联系人笔记 - * - * @param payload - * @return */ private JsonObject create(final JsonObject payload) throws GsonTools.JsonObjectExtensionConflictException { logger.info("[contact note] create {}", payload.toString()); @@ -199,9 +192,6 @@ public class ApiContactNotesController extends Handler { /** * 验证创建数据 - * - * @param payload - * @return */ private String validateCreatePayload(JsonObject payload) { if (!payload.has("category")) { @@ -215,8 +205,7 @@ public class ApiContactNotesController extends Handler { if ((!payload.has("contactid")) || StringUtils.isBlank(payload.get("contactid").getAsString())) { return "参数传递不合法,没有[contactid]。"; } else { - Contacts c = contactsRes.findOne(payload.get("contactid").getAsString()); - if (c == null) + if (!contactsRes.existsById(payload.get("contactid").getAsString())) return "参数不合法,不存在该联系人。"; } @@ -225,12 +214,9 @@ public class ApiContactNotesController extends Handler { /** * Build query string - * - * @param j - * @return */ private String querybuilder(final JsonObject j) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); if (j.has("orgi")) { sb.append("orgi:"); sb.append(j.get("orgi").getAsString()); @@ -242,10 +228,6 @@ public class ApiContactNotesController extends Handler { /** * 根据联系人ID获取联系人笔记列表 - * - * @param j - * @param request - * @return */ private JsonObject fetch(final JsonObject j, final HttpServletRequest request) throws GsonTools.JsonObjectExtensionConflictException { logger.info("[contact note] fetch [{}]", j.toString()); @@ -256,9 +238,8 @@ public class ApiContactNotesController extends Handler { return resp; } final String cid = j.get("contactid").getAsString(); - Contacts c = contactsRes.findOne(cid); - if (c == null) { + if (!contactsRes.existsById(cid)) { resp.addProperty(RestUtils.RESP_KEY_RC, RestUtils.RESP_RC_FAIL_4); resp.addProperty(RestUtils.RESP_KEY_ERROR, "不存在该联系人。"); return resp; @@ -298,17 +279,11 @@ public class ApiContactNotesController extends Handler { /** * 联系人笔记 - * - * @param request - * @param body - * @return - * @throws CSKefuRestException - * @throws GsonTools.JsonObjectExtensionConflictException */ @RequestMapping(method = RequestMethod.POST) @Menu(type = "apps", subtype = "contactnotes", access = true) - public ResponseEntity operations(HttpServletRequest request, @RequestBody final String body) throws CSKefuRestException, GsonTools.JsonObjectExtensionConflictException { - final JsonObject j = (new JsonParser()).parse(body).getAsJsonObject(); + public ResponseEntity operations(HttpServletRequest request, @RequestBody final String body) throws GsonTools.JsonObjectExtensionConflictException { + final JsonObject j = JsonParser.parseString(body).getAsJsonObject(); logger.info("[contact note] operations payload {}", j.toString()); JsonObject json = new JsonObject(); HttpHeaders headers = RestUtils.header(); @@ -335,7 +310,7 @@ public class ApiContactNotesController extends Handler { break; } } - return new ResponseEntity(json.toString(), headers, HttpStatus.OK); + return new ResponseEntity<>(json.toString(), headers, HttpStatus.OK); } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiOrganController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiOrganController.java index a10239f7..65054dd4 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiOrganController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/api/ApiOrganController.java @@ -1,94 +1,87 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.chatopera.cc.controller.api; - -import com.chatopera.cc.controller.Handler; -import com.chatopera.cc.model.Organ; -import com.chatopera.cc.persistence.repository.OrganRepository; -import com.chatopera.cc.util.Menu; -import com.chatopera.cc.util.RestResult; -import com.chatopera.cc.util.RestResultType; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -/** - * 组织机构/部门/技能组功能 - */ -@RestController -@RequestMapping("/api/organ") -public class ApiOrganController extends Handler{ - - @Autowired - private OrganRepository organRepository; - - /** - * 返回所有部门 - * @param request - * @param username 搜索用户名,精确搜索 - * @return - */ - @RequestMapping( method = RequestMethod.GET) - @Menu(type = "apps" , subtype = "organ" , access = true) - public ResponseEntity list(HttpServletRequest request) { - return new ResponseEntity<>(new RestResult(RestResultType.OK, organRepository.findByOrgi(super.getOrgi(request))), HttpStatus.OK); - } - - /** - * 新增或修改部门 - * @param request - * @param user - * @return - */ - @RequestMapping(method = RequestMethod.PUT) - @Menu(type = "apps" , subtype = "organ" , access = true) - public ResponseEntity put(HttpServletRequest request , @Valid Organ organ) { - if(organ != null && !StringUtils.isBlank(organ.getName())){ - organRepository.save(organ) ; - } - 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) ; - Organ organ = null ; - if(!StringUtils.isBlank(id)){ - organ = organRepository.findByIdAndOrgi(id, super.getOrgi(request)) ; - if(organ != null){ //系统管理员, 不允许 使用 接口删除 - organRepository.delete(organ); - }else{ - result.setStatus(RestResultType.ORGAN_DELETE); - } - } - return new ResponseEntity<>(result, HttpStatus.OK); - } -} \ No newline at end of file +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chatopera.cc.controller.api; + +import com.chatopera.cc.controller.Handler; +import com.chatopera.cc.model.Organ; +import com.chatopera.cc.persistence.repository.OrganRepository; +import com.chatopera.cc.util.Menu; +import com.chatopera.cc.util.RestResult; +import com.chatopera.cc.util.RestResultType; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.lang.NonNull; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +/** + * 组织机构/部门/技能组功能 + */ +@RestController +@RequestMapping("/api/organ") +@RequiredArgsConstructor +public class ApiOrganController extends Handler { + + @NonNull + private final OrganRepository organRepository; + + /** + * 返回所有部门 + */ + @RequestMapping(method = RequestMethod.GET) + @Menu(type = "apps", subtype = "organ", access = true) + public ResponseEntity list(HttpServletRequest request) { + return new ResponseEntity<>(new RestResult(RestResultType.OK, organRepository.findByOrgi(super.getOrgi(request))), HttpStatus.OK); + } + + /** + * 新增或修改部门 + */ + @RequestMapping(method = RequestMethod.PUT) + @Menu(type = "apps", subtype = "organ", access = true) + public ResponseEntity put(@Valid Organ organ) { + if (organ != null && !StringUtils.isBlank(organ.getName())) { + organRepository.save(organ); + } + return new ResponseEntity<>(new RestResult(RestResultType.OK), HttpStatus.OK); + } + + /** + * 删除用户,只提供 按照用户ID删除 , 并且,不能删除系统管理员 + */ + @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); + Organ organ; + if (!StringUtils.isBlank(id)) { + organ = organRepository.findByIdAndOrgi(id, super.getOrgi(request)); + if (organ != null) { //系统管理员, 不允许 使用 接口删除 + organRepository.delete(organ); + } else { + result.setStatus(RestResultType.ORGAN_DELETE); + } + } + return new ResponseEntity<>(result, HttpStatus.OK); + } +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/resource/UsersResourceController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/resource/UsersResourceController.java index 8481f9ee..2f578601 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/resource/UsersResourceController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/resource/UsersResourceController.java @@ -25,9 +25,10 @@ import com.chatopera.cc.persistence.repository.OrgiSkillRelRepository; import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.util.Menu; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; @@ -40,22 +41,23 @@ import java.util.List; @Controller @RequestMapping("/res") +@RequiredArgsConstructor public class UsersResourceController extends Handler { - @Autowired - private UserRepository userRes; + @NonNull + private final UserRepository userRes; - @Autowired - private OrgiSkillRelRepository orgiSkillRelService; + @NonNull + private final OrgiSkillRelRepository orgiSkillRelService; - @Autowired - private OrganRepository organRes; + @NonNull + private final OrganRepository organRes; - @Autowired - private UserProxy userProxy; + @NonNull + private final UserProxy userProxy; @RequestMapping("/users") @Menu(type = "res", subtype = "users") - public ModelAndView add(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String id) { + public ModelAndView add(ModelMap map, HttpServletRequest request, @Valid String q) { if (q == null) { q = ""; } @@ -65,7 +67,7 @@ public class UsersResourceController extends Handler { @RequestMapping("/bpm/users") @Menu(type = "res", subtype = "users") - public ModelAndView bpmusers(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String id) { + public ModelAndView bpmusers(ModelMap map, HttpServletRequest request, @Valid String q) { if (q == null) { q = ""; } @@ -75,7 +77,7 @@ public class UsersResourceController extends Handler { @RequestMapping("/bpm/organ") @Menu(type = "res", subtype = "users") - public ModelAndView organ(ModelMap map, HttpServletRequest request, @Valid String q, @Valid String ids) { + public ModelAndView organ(ModelMap map, HttpServletRequest request, @Valid String ids) { map.addAttribute("organList", getOrgans(request)); map.addAttribute("usersList", getUsers(request)); map.addAttribute("ids", ids); @@ -83,7 +85,7 @@ public class UsersResourceController extends Handler { } private List getUsers(HttpServletRequest request) { - List list = null; + List list; if (super.isTenantshare()) { List organIdList = new ArrayList<>(); List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); @@ -101,16 +103,12 @@ public class UsersResourceController extends Handler { /** * 获取当前产品下人员信息 - * - * @param request - * @param q - * @return */ private Page getUsers(HttpServletRequest request, String q) { if (q == null) { q = ""; } - Page list = null; + Page list; if (super.isTenantshare()) { List organIdList = new ArrayList<>(); List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); @@ -128,12 +126,9 @@ public class UsersResourceController extends Handler { /** * 获取当前产品下 技能组 组织信息 - * - * @param request - * @return */ private List getOrgans(HttpServletRequest request) { - List list = null; + List list; if (super.isTenantshare()) { List organIdList = new ArrayList<>(); List orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/OrganDataExchangeImpl.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/OrganDataExchangeImpl.java index c71bc54d..e00000ec 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/OrganDataExchangeImpl.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/impl/OrganDataExchangeImpl.java @@ -1,46 +1,48 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.chatopera.cc.persistence.impl; - -import com.chatopera.cc.model.Organ; -import com.chatopera.cc.persistence.interfaces.DataExchangeInterface; -import com.chatopera.cc.persistence.repository.OrganRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.io.Serializable; -import java.util.List; - -@Service("organdata") -public class OrganDataExchangeImpl implements DataExchangeInterface { - @Autowired - private OrganRepository organRes ; - - public String getDataByIdAndOrgi(String id, String orgi){ - Organ organ = organRes.findByIdAndOrgi(id, orgi) ; - return organ!=null ? organ.getName() : id; - } - - @Override - public List getListDataByIdAndOrgi(String id , String creater, String orgi) { - return null ; - } - - public void process(Object data , String orgi) { - - } -} +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chatopera.cc.persistence.impl; + +import com.chatopera.cc.model.Organ; +import com.chatopera.cc.persistence.interfaces.DataExchangeInterface; +import com.chatopera.cc.persistence.repository.OrganRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Service; + +import java.io.Serializable; +import java.util.List; + +@Service("organdata") +@RequiredArgsConstructor +public class OrganDataExchangeImpl implements DataExchangeInterface { + @NonNull + private final OrganRepository organRes; + + public String getDataByIdAndOrgi(String id, String orgi) { + Organ organ = organRes.findByIdAndOrgi(id, orgi); + return organ != null ? organ.getName() : id; + } + + @Override + public List getListDataByIdAndOrgi(String id, String creater, String orgi) { + return null; + } + + public void process(Object data, String orgi) { + + } +} diff --git a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/OrganRepository.java b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/OrganRepository.java index 69ba439c..ae7ec31f 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/OrganRepository.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/OrganRepository.java @@ -1,53 +1,51 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.chatopera.cc.persistence.repository; - -import com.chatopera.cc.model.Organ; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - -public interface OrganRepository - extends JpaRepository -{ - Organ findByIdAndOrgi(String paramString, String orgi); - - Page findByOrgi(String orgi, Pageable paramPageable); - - Page findByOrgiAndOrgid(String orgi, String orgid, Pageable paramPageable); - - Organ findByNameAndOrgi(String paramString, String orgi); - - Organ findByNameAndOrgiAndOrgid(String paramString, String orgi, String orgid); - - Organ findByParentAndOrgi(String parent, String orgi); - - List findByOrgiAndParent(String orgi, String parent); - - List findByOrgi(String orgi); - - List findByOrgiAndOrgid(String orgi, String orgid); - - List findByOrgiAndSkill(String orgi, boolean skill); - - List findByOrgiAndSkillAndOrgid(String orgi, boolean skill, String orgid); - - List findByIdInAndSkill(List organIdList, boolean b); - -} +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chatopera.cc.persistence.repository; + +import com.chatopera.cc.model.Organ; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface OrganRepository extends JpaRepository { + Organ findByIdAndOrgi(String paramString, String orgi); + + Page findByOrgi(String orgi, Pageable paramPageable); + + // Page findByOrgiAndOrgid(String orgi, String orgid, Pageable paramPageable); + + Organ findByNameAndOrgi(String paramString, String orgi); + + Organ findByNameAndOrgiAndOrgid(String paramString, String orgi, String orgid); + + // Organ findByParentAndOrgi(String parent, String orgi); + + List findByOrgiAndParent(String orgi, String parent); + + List findByOrgi(String orgi); + + List findByOrgiAndOrgid(String orgi, String orgid); + + List findByOrgiAndSkill(String orgi, boolean skill); + + List findByOrgiAndSkillAndOrgid(String orgi, boolean skill, String orgid); + + List findByIdInAndSkill(List organIdList, boolean b); + +} 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 e8306d54..dfa17b1c 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 @@ -32,6 +32,7 @@ import freemarker.template.TemplateException; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.lang.Nullable; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import javax.servlet.http.Cookie; @@ -61,6 +62,7 @@ public class OnlineUserProxy { /** * */ + @Nullable public static CousultInvite consult(final String snsid, final String orgi) { // logger.info("[consult] snsid {}, orgi {}", snsid, orgi); CousultInvite consultInvite = MainContext.getCache().findOneConsultInviteBySnsidAndOrgi(snsid, orgi); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/proxy/OrganProxy.java b/contact-center/app/src/main/java/com/chatopera/cc/proxy/OrganProxy.java index a0ea0a54..b62a3cbb 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/proxy/OrganProxy.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/proxy/OrganProxy.java @@ -1,30 +1,23 @@ package com.chatopera.cc.proxy; -import com.chatopera.cc.controller.admin.OrganController; import com.chatopera.cc.model.Organ; -import com.chatopera.cc.model.User; import com.chatopera.cc.persistence.repository.OrganRepository; +import lombok.RequiredArgsConstructor; import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; import java.util.Date; @Service +@RequiredArgsConstructor public class OrganProxy { - private final static Logger logger = LoggerFactory.getLogger(OrganController.class); - @Autowired - private OrganRepository organRes; + @NonNull + private final OrganRepository organRes; /** * 检查组织机构树 - * @param organ - * @param organId - * @param orgi - * @return */ private boolean checkParentOrgan(Organ organ, String organId, String orgi) { if (StringUtils.equals(organ.getParent(), "0")) { @@ -48,13 +41,7 @@ public class OrganProxy { } - /** - * @param organ - * @param orgi - * @param user - * @return msg - */ - public String updateOrgan(final Organ organ, final String orgi, final User user) { + public String updateOrgan(final Organ organ, final String orgi) { final Organ oldOrgan = organRes.findByNameAndOrgi(organ.getName(), orgi); String msg = "admin_organ_update_success"; 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 7abfa2c7..74379cec 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 @@ -20,52 +20,47 @@ import com.chatopera.cc.persistence.repository.OrganUserRepository; import com.chatopera.cc.persistence.repository.RoleAuthRepository; import com.chatopera.cc.persistence.repository.UserRepository; import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; 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.data.jpa.domain.Specification; +import org.springframework.http.HttpStatus; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; +import org.springframework.web.server.ResponseStatusException; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; import java.util.*; /** * 用户/坐席 常用方法 */ @Component +@RequiredArgsConstructor public class UserProxy { private final static Logger logger = LoggerFactory.getLogger(UserProxy.class); - @Autowired - private OrganUserRepository organUserRes; + @NonNull + private final OrganUserRepository organUserRes; - @Autowired - private OrganRepository organRes; + @NonNull + private final OrganRepository organRes; - @Autowired - private UserRepository userRes; + @NonNull + private final UserRepository userRes; - @Autowired - private RoleAuthRepository roleAuthRes; + @NonNull + private final RoleAuthRepository roleAuthRes; /** * 创建新用户 * 支持多租户 - * - * @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 = ""; + String msg; msg = validUser(user); if (StringUtils.isNotBlank(msg) && !msg.equals("new_user_success")) { return msg; @@ -90,8 +85,10 @@ public class UserProxy { } + @NonNull public User findOne(final String id) { - return userRes.findOne(id); + return userRes.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, String.format("User %s not found", id))); } public List findUserIdsInOrgan(final String organ) { @@ -127,13 +124,10 @@ public class UserProxy { /** * 通过坐席ID查找其技能组Map - * - * @param agentno - * @return */ public HashMap getSkillsMapByAgentno(final String agentno) { - final User user = userRes.findOne(agentno); + final User user = userRes.findById(agentno).orElse(null); if (user == null) return new HashMap<>(); attachOrgansPropertiesForUser(user); @@ -142,9 +136,6 @@ public class UserProxy { /** * 获得一个用户的直属组织机构 - * - * @param userid - * @return */ public List findOrgansByUserid(final String userid) { List x = organUserRes.findByUserid(userid); @@ -216,10 +207,6 @@ public class UserProxy { /** * 检查用户更新是否合理 - * - * @param user - * @param oldUser - * @return */ public String validUserUpdate(final User user, final User oldUser) { String msg = "edit_user_success"; @@ -265,9 +252,6 @@ public class UserProxy { /** * 从Json中创建User - * - * @param json - * @return */ public User parseUserFromJson(final JsonObject json) { User tempUser = new User(); @@ -323,11 +307,7 @@ public class UserProxy { // 是否是坐席 if (json.has("agent")) { String val = json.get("agent").getAsString(); - if (StringUtils.isNotBlank(val) && StringUtils.equals("1", val)) { - tempUser.setAgent(true); - } else { - tempUser.setAgent(false); - } + tempUser.setAgent(StringUtils.isNotBlank(val) && StringUtils.equals("1", val)); } else { tempUser.setAgent(false); } @@ -349,11 +329,7 @@ public class UserProxy { // 是否是呼叫中心 if (json.has("callcenter")) { String val = json.get("callcenter").getAsString(); - if (StringUtils.isNotBlank(val) && StringUtils.equals("1", val)) { - tempUser.setCallcenter(true); - } else { - tempUser.setCallcenter(false); - } + tempUser.setCallcenter(StringUtils.isNotBlank(val) && StringUtils.equals("1", val)); } else { tempUser.setCallcenter(false); } @@ -374,9 +350,6 @@ public class UserProxy { /** * 验证用户数据合法性 - * - * @param user - * @return */ public String validUser(final User user) { String msg = "new_user_success"; @@ -428,11 +401,6 @@ public class UserProxy { /** * 或取Sips列表 - * - * @param organ - * @param datastatus - * @param orgi - * @return */ public List findSipsByOrganAndDatastatusAndOrgi(final String organ, final boolean datastatus, final String orgi) { List users = findUserIdsInOrgan(organ); @@ -445,15 +413,8 @@ public class UserProxy { /** * 通过租户ID,是否为坐席,是否有效和组织机构查询坐席数 - * - * @param orgi - * @param agent - * @param datastatus - * @param organ - * @return */ public long countByOrgiAndAgentAndDatastatusAndOrgan( - final String orgi, final boolean agent, final boolean datastatus, final String organ) { @@ -468,26 +429,19 @@ public class UserProxy { /** * 增加用户的角色信息 - * - * @param user */ public void attachRolesMap(final User user) { // 获取用户的角色权限,进行授权 - List roleAuthList = roleAuthRes.findAll(new Specification() { - @Override - public Predicate toPredicate( - Root root, CriteriaQuery query, - CriteriaBuilder cb) { - List criteria = new ArrayList(); - if (user.getRoleList() != null && user.getRoleList().size() > 0) { - for (Role role : user.getRoleList()) { - criteria.add(cb.equal(root.get("roleid").as(String.class), role.getId())); - } + List roleAuthList = roleAuthRes.findAll((Specification) (root, query, cb) -> { + List criteria = new ArrayList<>(); + if (user.getRoleList() != null && user.getRoleList().size() > 0) { + for (Role role : user.getRoleList()) { + criteria.add(cb.equal(root.get("roleid").as(String.class), role.getId())); } - Predicate[] p = new Predicate[criteria.size()]; - cb.and(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); - return cb.or(criteria.toArray(p)); } + Predicate[] p = new Predicate[criteria.size()]; + cb.and(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); + return cb.or(criteria.toArray(p)); }); // clear previous auth map values, ensure the changes are token effect in real time. @@ -501,8 +455,6 @@ public class UserProxy { /** * 获得一个部门及其子部门并添加到User的myorgans中 - * - * @param user */ public void processAffiliates(final User user, final Organ organ) { if (organ == null) { @@ -530,8 +482,6 @@ public class UserProxy { /** * 获取用户部门以及下级部门 - * - * @param user */ public void attachOrgansPropertiesForUser(final User user) { List organs = organUserRes.findByUserid(user.getId()); @@ -542,8 +492,10 @@ public class UserProxy { for (final OrganUser organ : organs) { // 添加直属部门到organs - final Organ o = organRes.findOne(organ.getOrgan()); - user.getOrgans().put(organ.getOrgan(), o); + String id = organ.getOrgan(); + final Organ o = organRes.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, String.format("Organization %s not found", id))); + user.getOrgans().put(id, o); if (o.isSkill()) { skills.put(o.getId(), o.getName()); } 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 b0ffb3e5..dc2f7b4f 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 @@ -1,506 +1,424 @@ -/* - * Copyright (C) 2017 优客服-多渠道客服系统 - * Modifications copyright (C) 2018-2019 Chatopera Inc, - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.chatopera.cc.util; - -import com.chatopera.cc.basic.Constants; -import com.chatopera.cc.basic.MainContext; -import com.chatopera.cc.model.*; -import com.chatopera.cc.persistence.repository.*; -import com.chatopera.cc.proxy.UserProxy; -import com.chatopera.cc.util.es.SearchTools; -import com.chatopera.cc.util.es.UKDataBean; -import org.apache.commons.lang.StringUtils; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.ui.ModelMap; - -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaBuilder.In; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; -import javax.validation.Valid; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; - -import static org.elasticsearch.index.query.QueryBuilders.termQuery; - -public class CallCenterUtils { - - - private static UserProxy userProxy; - - /** - * @param extno - * @param sipTrunkRes - * @param extRes - * @return - */ - public static SipTrunk siptrunk(String extno, SipTrunkRepository sipTrunkRes, ExtentionRepository extRes) { - SipTrunk sipTrunk = null; - List extList = extRes.findByExtention(extno); - if (extList.size() > 0) { - Extention ext = extList.get(0); - if (StringUtils.isNotBlank(ext.getSiptrunk())) { - sipTrunk = MainContext.getCache().findOneSystemByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); - if (sipTrunk == null) { - sipTrunk = sipTrunkRes.findByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); - if (sipTrunk != null) { - MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), ext.getOrgi(), sipTrunk); - } - } - } else { - List sipTrunkList = sipTrunkRes.findByDefaultsipAndOrgi(true, ext.getOrgi()); - if (sipTrunkList.size() > 0) { - sipTrunk = sipTrunkList.get(0); - } - } - } - return sipTrunk; - } - - - /** - * @param name - * @param sipTrunkRes - * @return - */ - public static SipTrunk siptrunk(String name, SipTrunkRepository sipTrunkRes) { - SipTrunk sipTrunk = null; - List sipTrunkList = sipTrunkRes.findByName(name); - if (sipTrunkList.size() > 0) { - sipTrunk = sipTrunkList.get(0); - } else { - sipTrunkList = sipTrunkRes.findByDefaultsip(true); - if (sipTrunkList.size() > 0) { - sipTrunk = sipTrunkList.get(0); - } - } - if (sipTrunk != null) { - MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), sipTrunk.getOrgi(), sipTrunk); - } - return sipTrunk; - } - - /** - * 我的部门以及授权给我的部门 - * - * @param userRoleRes - * @param callOutRoleRes - * @param user - * @return - */ - public static List getAuthOrgan(UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, User user) { - List userRole = userRoleRes.findByOrgiAndUser(user.getOrgi(), user); - ArrayList organList = new ArrayList(); - if (userRole.size() > 0) { - for (UserRole userTemp : userRole) { - UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid( - user.getOrgi(), - userTemp.getRole().getId()); - if (roleOrgan != null) { - if (StringUtils.isNotBlank(roleOrgan.getOrganid())) { - String[] organ = roleOrgan.getOrganid().split(","); - for (int i = 0; i < organ.length; i++) { - organList.add(organ[i]); - } - - } - } - } - } - - getUserProxy().attachOrgansPropertiesForUser(user); - if (user.getAffiliates().size() > 0) { - for (final String organ : user.getAffiliates()) { - organList.add(organ); - } - } - - return organList; - } - - /** - * 我的部门以及授权给我的部门 - 批次 - * - * @param batchRes - * @param userRoleRes - * @param callOutRoleRes - * @param user - * @return - */ - public static List getBatchList(JobDetailRepository batchRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) { - - //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); - - final List organList = CallCenterUtils.getExistOrgan(user); - - List batchList = batchRes.findAll(new Specification() { - @Override - public Predicate toPredicate( - Root root, CriteriaQuery query, - CriteriaBuilder cb) { - List list = new ArrayList(); - In in = cb.in(root.get("organ")); - - list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); - list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.BATCH.toString())); - - if (organList.size() > 0) { - - for (String id : organList) { - in.value(id); - } - } else { - in.value(Constants.CSKEFU_SYSTEM_NO_DAT); - } - list.add(in); - - Predicate[] p = new Predicate[list.size()]; - return cb.and(list.toArray(p)); - } - }); - - return batchList; - } - - /** - * 我的部门以及授权给我的部门 - 筛选表单 - * - * @param filterRes - * @param userRoleRes - * @param callOutRoleRes - * @param user - * @return - */ - public static List getFormFilterList(FormFilterRepository filterRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) { - - //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); - - final List organList = CallCenterUtils.getExistOrgan(user); - - List formFilterList = filterRes.findAll(new Specification() { - @Override - public Predicate toPredicate( - Root root, CriteriaQuery query, - CriteriaBuilder cb) { - List list = new ArrayList(); - In in = cb.in(root.get("organ")); - - list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); - - if (organList.size() > 0) { - - for (String id : organList) { - in.value(id); - } - } else { - in.value(Constants.CSKEFU_SYSTEM_NO_DAT); - } - list.add(in); - - Predicate[] p = new Predicate[list.size()]; - return cb.and(list.toArray(p)); - } - }); - - return formFilterList; - } - - /** - * 我的部门以及授权给我的部门 - 活动 - * - * @param batchRes - * @param userRoleRes - * @param callOutRoleRes - * @param user - * @return - */ - public static List getActivityList(JobDetailRepository batchRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) { - - //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); - - final List organList = CallCenterUtils.getExistOrgan(user); - - List activityList = batchRes.findAll(new Specification() { - @Override - public Predicate toPredicate( - Root root, CriteriaQuery query, - CriteriaBuilder cb) { - List list = new ArrayList(); - In in = cb.in(root.get("organ")); - - list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); - list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.ACTIVE.toString())); - - if (organList.size() > 0) { - - for (String id : organList) { - in.value(id); - } - } else { - in.value(Constants.CSKEFU_SYSTEM_NO_DAT); - } - list.add(in); - - Predicate[] p = new Predicate[list.size()]; - return cb.and(list.toArray(p)); - } - }); - - return activityList; - } - - /** - * 查询条件,下拉信息返回 - * - * @param map - * @param user - * @param ownerdept - * @param actid - */ - public static void getAllCallOutList(ModelMap map, User user, String ownerdept, String actid) { - JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); - UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); - UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); - FormFilterRepository filterRes = MainContext.getContext().getBean(FormFilterRepository.class); - OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); - - 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()); - salestatusList.addAll(salestastus); - - } - LinkedHashSet set = new LinkedHashSet(salestatusList.size()); - set.addAll(salestatusList); - salestatusList.clear(); - salestatusList.addAll(set); - map.put("salestatusList", salestatusList); - map.put("batchList", CallCenterUtils.getBatchList(batchRes, userRoleRes, callOutRoleRes, user)); - map.put("activityList", CallCenterUtils.getActivityList(batchRes, userRoleRes, callOutRoleRes, user)); - map.put("formFilterList", CallCenterUtils.getFormFilterList(filterRes, userRoleRes, callOutRoleRes, user)); - if (StringUtils.isBlank(ownerdept)) { - - map.addAttribute( - "owneruserList", - getUserProxy().findByOrganAndOrgiAndDatastatus( - Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false)); - } else { - 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)); - //JobDetail act = batchRes.findByIdAndOrgi(actid, user.getOrgi()); - //if(act != null){ - // map.put("salestatusList",MainContext.getContext().getBean(SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid())); - //} - map.addAttribute("statusList", Dict.getInstance().getDic("com.dic.callout.activity")); - } - - /** - * 指定活动,已设置的分配数 - * - * @param map - * @param activityid - * @param user - */ - public static void getNamenum(ModelMap map, String activityid, User user) { - - CallAgentRepository callAgentRes = MainContext.getContext().getBean(CallAgentRepository.class); - - List actList = callAgentRes.findByOrgiAndActid(user.getOrgi(), activityid); - int namenum = 0; - if (actList.size() > 0) { - for (CallAgent callAgent : actList) { - if (callAgent.getDisnum() > 0) { - namenum = namenum + callAgent.getDisnum(); - } - } - } - map.put("namenum", namenum); - } - - /** - * 查询目前存在的部门 - * 已分配部门的坐席,如果部门被删之后,这个方法可以把这些用户过滤掉 - * - * @param user - * @return - */ - public static List getExistOrgan(User user) { - - UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); - UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); - OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); - - final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); - - List organAllList = organRes.findByOrgi(user.getOrgi()); - - final List tempList = new ArrayList(); - - for (String organid : organList) { - for (Organ organ : organAllList) { - if (organid.equals(organ.getId())) { - tempList.add(organid); - } - } - } - return tempList; - } - - /** - * 分配给坐席的名单,单个名单,回收到池子 - * - * @param task - * @param batch - * @param ukefuCallOutFilter - */ - public static void getAgentRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) { - - UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); - JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( - UKefuCallOutFilterRepository.class); - - //修改,拨打任务 - if (task != null) { - task.setAssigned(task.getAssigned() - 1);//分配到坐席数 - task.setNotassigned(task.getNotassigned() + 1);//未分配数 - task.setRenum(task.getRenum() + 1);//回收到池子数 - callOutTaskRes.save(task); - } - - //修改,批次 - if (batch != null) { - batch.setAssigned(batch.getAssigned() - 1);//已分配 - batch.setNotassigned(batch.getNotassigned() + 1);//未分配 - batchRes.save(batch); - } - - //修改,筛选记录 - if (ukefuCallOutFilter != null) { - ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数 - ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数 - ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数 - callOutFilterRes.save(ukefuCallOutFilter); - } - } - - /** - * 分配给坐席的名单,单个名单,回收到部门 - * - * @param task - * @param ukefuCallOutFilter - */ - public static void getAgentReorgannum(UKefuCallOutTask task, UKefuCallOutFilter ukefuCallOutFilter) { - - UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( - UKefuCallOutFilterRepository.class); - - //修改,拨打任务 - if (task != null) { - task.setNotassigned(task.getNotassigned() + 1);//未分配数 - task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数 - task.setReorgannum(task.getReorgannum() + 1);//回收到部门数 - callOutTaskRes.save(task); - } - - - //修改,筛选记录 - if (ukefuCallOutFilter != null) { - ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数 - ukefuCallOutFilter.setReorgannum(ukefuCallOutFilter.getReorgannum() + 1);//回收到部门数 - callOutFilterRes.save(ukefuCallOutFilter); - } - } - - /** - * 分配给部门的名单,单个名单,回收到池子 - * - * @param task - * @param batch - * @param ukefuCallOutFilter - */ - public static void getOrganRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) { - - UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); - JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); - UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( - UKefuCallOutFilterRepository.class); - - //修改,拨打任务 - if (task != null) { - task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数 - task.setNotassigned(task.getNotassigned() + 1);//未分配数 - task.setRenum(task.getRenum() + 1);//回收到池子数 - callOutTaskRes.save(task); - } - - //修改,批次 - if (batch != null) { - batch.setAssigned(batch.getAssigned() - 1);//已分配 - batch.setNotassigned(batch.getNotassigned() + 1);//未分配 - batchRes.save(batch); - } - - //修改,筛选记录 - if (ukefuCallOutFilter != null) { - ukefuCallOutFilter.setAssignedorgan(ukefuCallOutFilter.getAssignedorgan() - 1);//分配到部门数 - ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数 - ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数 - callOutFilterRes.save(ukefuCallOutFilter); - } - } - - /** - * 获取指定活动,已分配的名单数 - * - * @param actid - * @param user - * @return - */ - public static int getActDisnum(@Valid String actid, User user, @Valid int p, @Valid int ps) { - BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); - queryBuilder.must(termQuery("actid", actid));// 活动ID - queryBuilder.mustNot(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())); - PageImpl dataList = SearchTools.search(queryBuilder, p, ps); - return dataList.getContent().size(); - } - - public static UserProxy getUserProxy() { - if (userProxy == null) { - userProxy = MainContext.getContext().getBean(UserProxy.class); - } - return userProxy; - } -} +/* + * Copyright (C) 2017 优客服-多渠道客服系统 + * Modifications copyright (C) 2018-2019 Chatopera Inc, + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chatopera.cc.util; + +import com.chatopera.cc.basic.Constants; +import com.chatopera.cc.basic.MainContext; +import com.chatopera.cc.model.*; +import com.chatopera.cc.persistence.repository.*; +import com.chatopera.cc.proxy.UserProxy; +import com.chatopera.cc.util.es.SearchTools; +import com.chatopera.cc.util.es.UKDataBean; +import org.apache.commons.lang.StringUtils; +import org.elasticsearch.index.query.BoolQueryBuilder; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.ui.ModelMap; + +import javax.persistence.criteria.CriteriaBuilder.In; +import javax.persistence.criteria.Predicate; +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; + +import static org.elasticsearch.index.query.QueryBuilders.termQuery; + +public class CallCenterUtils { + + + private static UserProxy userProxy; + + /** + * + */ + public static SipTrunk siptrunk(String extno, SipTrunkRepository sipTrunkRes, ExtentionRepository extRes) { + SipTrunk sipTrunk = null; + List extList = extRes.findByExtention(extno); + if (extList.size() > 0) { + Extention ext = extList.get(0); + if (StringUtils.isNotBlank(ext.getSiptrunk())) { + sipTrunk = MainContext.getCache().findOneSystemByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); + if (sipTrunk == null) { + sipTrunk = sipTrunkRes.findByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); + if (sipTrunk != null) { + MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), ext.getOrgi(), sipTrunk); + } + } + } else { + List sipTrunkList = sipTrunkRes.findByDefaultsipAndOrgi(true, ext.getOrgi()); + if (sipTrunkList.size() > 0) { + sipTrunk = sipTrunkList.get(0); + } + } + } + return sipTrunk; + } + + + /** + * + */ + public static SipTrunk siptrunk(String name, SipTrunkRepository sipTrunkRes) { + SipTrunk sipTrunk = null; + List sipTrunkList = sipTrunkRes.findByName(name); + if (sipTrunkList.size() > 0) { + sipTrunk = sipTrunkList.get(0); + } else { + sipTrunkList = sipTrunkRes.findByDefaultsip(true); + if (sipTrunkList.size() > 0) { + sipTrunk = sipTrunkList.get(0); + } + } + if (sipTrunk != null) { + MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), sipTrunk.getOrgi(), sipTrunk); + } + return sipTrunk; + } + + /** + * 我的部门以及授权给我的部门 + */ + public static List getAuthOrgan(UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, User user) { + List userRole = userRoleRes.findByOrgiAndUser(user.getOrgi(), user); + ArrayList organList = new ArrayList<>(); + if (userRole.size() > 0) { + for (UserRole userTemp : userRole) { + UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid( + user.getOrgi(), + userTemp.getRole().getId()); + if (roleOrgan != null) { + if (StringUtils.isNotBlank(roleOrgan.getOrganid())) { + String[] organ = roleOrgan.getOrganid().split(","); + Collections.addAll(organList, organ); + + } + } + } + } + + getUserProxy().attachOrgansPropertiesForUser(user); + if (user.getAffiliates().size() > 0) { + organList.addAll(user.getAffiliates()); + } + + return organList; + } + + /** + * 我的部门以及授权给我的部门 - 批次 + */ + public static List getBatchList(JobDetailRepository batchRes, final User user) { + + //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); + + final List organList = CallCenterUtils.getExistOrgan(user); + + return batchRes.findAll((Specification) (root, query, cb) -> { + List list = new ArrayList<>(); + In in = cb.in(root.get("organ")); + + list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); + list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.BATCH.toString())); + + if (organList.size() > 0) { + + for (String id : organList) { + in.value(id); + } + } else { + in.value(Constants.CSKEFU_SYSTEM_NO_DAT); + } + list.add(in); + + Predicate[] p = new Predicate[list.size()]; + return cb.and(list.toArray(p)); + }); + } + + /** + * 我的部门以及授权给我的部门 - 筛选表单 + */ + public static List getFormFilterList(FormFilterRepository filterRes, final User user) { + + //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); + + final List organList = CallCenterUtils.getExistOrgan(user); + + return filterRes.findAll((Specification) (root, query, cb) -> { + List list = new ArrayList<>(); + In in = cb.in(root.get("organ")); + + list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); + + if (organList.size() > 0) { + + for (String id : organList) { + in.value(id); + } + } else { + in.value(Constants.CSKEFU_SYSTEM_NO_DAT); + } + list.add(in); + + Predicate[] p = new Predicate[list.size()]; + return cb.and(list.toArray(p)); + }); + } + + /** + * 我的部门以及授权给我的部门 - 活动 + */ + public static List getActivityList(JobDetailRepository batchRes, final User user) { + + //final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); + + final List organList = CallCenterUtils.getExistOrgan(user); + + return batchRes.findAll((Specification) (root, query, cb) -> { + List list = new ArrayList<>(); + In in = cb.in(root.get("organ")); + + list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); + list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.ACTIVE.toString())); + + if (organList.size() > 0) { + + for (String id : organList) { + in.value(id); + } + } else { + in.value(Constants.CSKEFU_SYSTEM_NO_DAT); + } + list.add(in); + + Predicate[] p = new Predicate[list.size()]; + return cb.and(list.toArray(p)); + }); + } + + /** + * 查询条件,下拉信息返回 + */ + public static void getAllCallOutList(ModelMap map, User user, String ownerdept, String actid) { + JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); + UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); + UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); + FormFilterRepository filterRes = MainContext.getContext().getBean(FormFilterRepository.class); + OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); + + List activityList = CallCenterUtils.getActivityList(batchRes, user); + List salestatusList = new ArrayList<>(); + for (JobDetail act : activityList) { + List salestastus = MainContext.getContext().getBean( + SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid()); + salestatusList.addAll(salestastus); + + } + LinkedHashSet set = new LinkedHashSet<>(salestatusList.size()); + set.addAll(salestatusList); + salestatusList.clear(); + salestatusList.addAll(set); + map.put("salestatusList", salestatusList); + map.put("batchList", CallCenterUtils.getBatchList(batchRes, user)); + map.put("activityList", CallCenterUtils.getActivityList(batchRes, user)); + map.put("formFilterList", CallCenterUtils.getFormFilterList(filterRes, user)); + if (StringUtils.isBlank(ownerdept)) { + + map.addAttribute( + "owneruserList", + getUserProxy().findByOrganAndOrgiAndDatastatus( + Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false)); + } else { + map.addAttribute( + "owneruserList", getUserProxy().findByOrganAndOrgiAndDatastatus(ownerdept, user.getOrgi(), false)); + + } + map.addAttribute( + "skillGroups", organRes.findAllById(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())); + //} + map.addAttribute("statusList", Dict.getInstance().getDic("com.dic.callout.activity")); + } + + /** + * 指定活动,已设置的分配数 + */ + public static void getNamenum(ModelMap map, String activityid, User user) { + + CallAgentRepository callAgentRes = MainContext.getContext().getBean(CallAgentRepository.class); + + List actList = callAgentRes.findByOrgiAndActid(user.getOrgi(), activityid); + int namenum = 0; + if (actList.size() > 0) { + for (CallAgent callAgent : actList) { + if (callAgent.getDisnum() > 0) { + namenum = namenum + callAgent.getDisnum(); + } + } + } + map.put("namenum", namenum); + } + + /** + * 查询目前存在的部门 + * 已分配部门的坐席,如果部门被删之后,这个方法可以把这些用户过滤掉 + */ + public static List getExistOrgan(User user) { + + UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); + UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); + OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); + + final List organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); + + List organAllList = organRes.findByOrgi(user.getOrgi()); + + final List tempList = new ArrayList<>(); + + for (String organid : organList) { + for (Organ organ : organAllList) { + if (organid.equals(organ.getId())) { + tempList.add(organid); + } + } + } + return tempList; + } + + /** + * 分配给坐席的名单,单个名单,回收到池子 + */ + public static void getAgentRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) { + + UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); + JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); + + //修改,拨打任务 + if (task != null) { + task.setAssigned(task.getAssigned() - 1);//分配到坐席数 + task.setNotassigned(task.getNotassigned() + 1);//未分配数 + task.setRenum(task.getRenum() + 1);//回收到池子数 + callOutTaskRes.save(task); + } + + //修改,批次 + if (batch != null) { + batch.setAssigned(batch.getAssigned() - 1);//已分配 + batch.setNotassigned(batch.getNotassigned() + 1);//未分配 + batchRes.save(batch); + } + + //修改,筛选记录 + if (ukefuCallOutFilter != null) { + ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数 + ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数 + ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数 + callOutFilterRes.save(ukefuCallOutFilter); + } + } + + /** + * 分配给坐席的名单,单个名单,回收到部门 + */ + public static void getAgentReorgannum(UKefuCallOutTask task, UKefuCallOutFilter ukefuCallOutFilter) { + + UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); + + //修改,拨打任务 + if (task != null) { + task.setNotassigned(task.getNotassigned() + 1);//未分配数 + task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数 + task.setReorgannum(task.getReorgannum() + 1);//回收到部门数 + callOutTaskRes.save(task); + } + + + //修改,筛选记录 + if (ukefuCallOutFilter != null) { + ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数 + ukefuCallOutFilter.setReorgannum(ukefuCallOutFilter.getReorgannum() + 1);//回收到部门数 + callOutFilterRes.save(ukefuCallOutFilter); + } + } + + /** + * 分配给部门的名单,单个名单,回收到池子 + */ + public static void getOrganRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) { + + UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); + JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); + UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( + UKefuCallOutFilterRepository.class); + + //修改,拨打任务 + if (task != null) { + task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数 + task.setNotassigned(task.getNotassigned() + 1);//未分配数 + task.setRenum(task.getRenum() + 1);//回收到池子数 + callOutTaskRes.save(task); + } + + //修改,批次 + if (batch != null) { + batch.setAssigned(batch.getAssigned() - 1);//已分配 + batch.setNotassigned(batch.getNotassigned() + 1);//未分配 + batchRes.save(batch); + } + + //修改,筛选记录 + if (ukefuCallOutFilter != null) { + ukefuCallOutFilter.setAssignedorgan(ukefuCallOutFilter.getAssignedorgan() - 1);//分配到部门数 + ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数 + ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数 + callOutFilterRes.save(ukefuCallOutFilter); + } + } + + /** + * 获取指定活动,已分配的名单数 + */ + public static int getActDisnum(@Valid String actid, @Valid int p, @Valid int ps) { + BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); + queryBuilder.must(termQuery("actid", actid));// 活动ID + queryBuilder.mustNot(termQuery("status", MainContext.NamesDisStatusType.NOT.toString())); + PageImpl dataList = SearchTools.search(queryBuilder, p, ps); + return dataList.getContent().size(); + } + + public static UserProxy getUserProxy() { + if (userProxy == null) { + userProxy = MainContext.getContext().getBean(UserProxy.class); + } + return userProxy; + } +}