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

Fix OrganRepository related class

This commit is contained in:
dengchao@xgtl 2020-04-16 17:35:53 +08:00
parent 33a12a8be9
commit dd02157fad
11 changed files with 1045 additions and 1219 deletions

View File

@ -281,7 +281,7 @@ public class OrganController extends Handler {
@RequestMapping("/update") @RequestMapping("/update")
@Menu(type = "admin", subtype = "organ") @Menu(type = "admin", subtype = "organ")
public ModelAndView update(HttpServletRequest request, @Valid Organ 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( return request(super.createRequestPageTempletResponse(
"redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId())); "redirect:/admin/organ/index.html?msg=" + msg + "&organ=" + organ.getId()));
} }

View File

@ -1,336 +1,340 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.controller.admin.channel; package com.chatopera.cc.controller.admin.channel;
import com.chatopera.cc.cache.Cache; import com.chatopera.cc.cache.Cache;
import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.Handler;
import com.chatopera.cc.model.CousultInvite; import com.chatopera.cc.model.CousultInvite;
import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.Organ;
import com.chatopera.cc.model.OrgiSkillRel; import com.chatopera.cc.model.OrgiSkillRel;
import com.chatopera.cc.model.User; import com.chatopera.cc.model.User;
import com.chatopera.cc.persistence.repository.*; import com.chatopera.cc.persistence.repository.*;
import com.chatopera.cc.proxy.OnlineUserProxy; import com.chatopera.cc.proxy.OnlineUserProxy;
import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.proxy.UserProxy;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import org.apache.commons.lang.StringUtils; import lombok.RequiredArgsConstructor;
import org.slf4j.Logger; import org.apache.commons.lang.StringUtils;
import org.slf4j.LoggerFactory; import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller; import org.springframework.lang.NonNull;
import org.springframework.ui.ModelMap; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.server.ResponseStatusException;
import javax.servlet.http.HttpServletRequest; import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.io.IOException; import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import javax.validation.Valid;
import java.util.List; import java.io.IOException;
import java.util.ArrayList;
@Controller import java.util.List;
@RequestMapping("/admin/webim")
public class WebIMController extends Handler { @Controller
private final static Logger logger = LoggerFactory.getLogger(WebIMController.class); @RequestMapping("/admin/webim")
@RequiredArgsConstructor
@Autowired public class WebIMController extends Handler {
private ConsultInviteRepository inviteRes; private final static Logger logger = LoggerFactory.getLogger(WebIMController.class);
@Autowired @NonNull
private OrganRepository organRes; private final ConsultInviteRepository inviteRes;
@Autowired @NonNull
private UserRepository userRes; private final OrganRepository organRes;
@Autowired @NonNull
private ServiceAiRepository serviceAiRes; private final UserRepository userRes;
@Autowired @NonNull
private OrgiSkillRelRepository orgiSkillRelService; private final ServiceAiRepository serviceAiRes;
@Value("${web.upload-path}") @NonNull
private String path; private final OrgiSkillRelRepository orgiSkillRelService;
@Autowired @NonNull
private SNSAccountRepository snsAccountRes; private final SNSAccountRepository snsAccountRes;
@Autowired @NonNull
private Cache cache; private final Cache cache;
@Autowired @NonNull
private UserProxy userProxy; private final UserProxy userProxy;
@RequestMapping("/index") @RequestMapping("/index")
@Menu(type = "app", subtype = "app", admin = true) @Menu(type = "app", subtype = "app", admin = true)
public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String snsid) { public ModelAndView index(ModelMap map, HttpServletRequest request, @Valid String snsid) {
CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); 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) {
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("inviteData", coultInvite);
map.addAttribute("skillGroups", getSkillGroups(request)); map.addAttribute("skillGroups", getSkillGroups(request));
map.addAttribute("agentList", getUsers(request)); map.addAttribute("agentList", getUsers(request));
map.addAttribute("import", request.getServerPort()); map.addAttribute("import", request.getServerPort());
map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request)));
} }
return request(super.createAdminTempletResponse("/admin/webim/index")); return request(super.createAdminTempletResponse("/admin/webim/index"));
} }
/** /**
* @param request *
* @param inviteData */
* @param webimlogo @RequestMapping("/save")
* @param agentheadimg @Menu(type = "admin", subtype = "app", admin = true)
* @return public ModelAndView save(HttpServletRequest request,
* @throws IOException @Valid CousultInvite inviteData,
*/ @RequestParam(value = "webimlogo", required = false) MultipartFile webimlogo,
@RequestMapping("/save") @RequestParam(value = "agentheadimg", required = false) MultipartFile agentheadimg) throws IOException {
@Menu(type = "admin", subtype = "app", admin = true) logger.info("[save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid());
public ModelAndView save(HttpServletRequest request,
@Valid CousultInvite inviteData, if (StringUtils.isNotBlank(inviteData.getSnsaccountid())) {
@RequestParam(value = "webimlogo", required = false) MultipartFile webimlogo, CousultInvite tempData = inviteRes.findBySnsaccountidAndOrgi(inviteData.getSnsaccountid(), super.getOrgi(request));
@RequestParam(value = "agentheadimg", required = false) MultipartFile agentheadimg) throws IOException { if (tempData != null) {
logger.info("[save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); tempData.setConsult_vsitorbtn_model(inviteData.getConsult_vsitorbtn_model());
tempData.setConsult_vsitorbtn_color(inviteData.getConsult_vsitorbtn_color());
if (StringUtils.isNotBlank(inviteData.getSnsaccountid())) { tempData.setConsult_vsitorbtn_position(inviteData.getConsult_vsitorbtn_position());
CousultInvite tempData = inviteRes.findBySnsaccountidAndOrgi(inviteData.getSnsaccountid(), super.getOrgi(request)); tempData.setConsult_vsitorbtn_content(inviteData.getConsult_vsitorbtn_content());
if (tempData != null) { tempData.setConsult_vsitorbtn_display(inviteData.getConsult_vsitorbtn_display());
tempData.setConsult_vsitorbtn_model(inviteData.getConsult_vsitorbtn_model()); tempData.setConsult_dialog_color(inviteData.getConsult_dialog_color());
tempData.setConsult_vsitorbtn_color(inviteData.getConsult_vsitorbtn_color()); inviteData = tempData;
tempData.setConsult_vsitorbtn_position(inviteData.getConsult_vsitorbtn_position()); }
tempData.setConsult_vsitorbtn_content(inviteData.getConsult_vsitorbtn_content()); } else {
tempData.setConsult_vsitorbtn_display(inviteData.getConsult_vsitorbtn_display()); inviteData.setSnsaccountid(super.getUser(request).getId());
tempData.setConsult_dialog_color(inviteData.getConsult_dialog_color()); }
inviteData = tempData; inviteData.setOrgi(super.getOrgi(request));
} // 网页品牌标识
} else { if (webimlogo != null) {
inviteData.setSnsaccountid(super.getUser(request).getId()); String originalFilename = webimlogo.getOriginalFilename();
} if (originalFilename != null && originalFilename.lastIndexOf(".") > 0) {
inviteData.setOrgi(super.getOrgi(request)); inviteData.setConsult_dialog_logo(super.saveImageFileWithMultipart(webimlogo));
// 网页品牌标识 }
if (webimlogo != null && webimlogo.getOriginalFilename().lastIndexOf(".") > 0) { }
inviteData.setConsult_dialog_logo(super.saveImageFileWithMultipart(webimlogo));
} // 网页坐席头像
if (agentheadimg != null) {
// 网页坐席头像 String originalFilename = agentheadimg.getOriginalFilename();
if (agentheadimg != null && agentheadimg.getOriginalFilename().lastIndexOf(".") > 0) { if (originalFilename != null && originalFilename.lastIndexOf(".") > 0) {
inviteData.setConsult_dialog_headimg(super.saveImageFileWithMultipart(agentheadimg)); inviteData.setConsult_dialog_headimg(super.saveImageFileWithMultipart(agentheadimg));
} }
inviteRes.save(inviteData); }
cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); inviteRes.save(inviteData);
return request(super.createRequestPageTempletResponse("redirect:/admin/webim/index.html?snsid=" + inviteData.getSnsaccountid())); 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) @RequestMapping("/profile")
public ModelAndView profile(ModelMap map, HttpServletRequest request, @Valid String snsid) { @Menu(type = "app", subtype = "profile", admin = true)
CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request)); public ModelAndView profile(ModelMap map, HttpServletRequest request, @Valid String snsid) {
logger.info("[profile] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request));
if (coultInvite != null) { if (coultInvite != null) {
map.addAttribute("inviteData", coultInvite); logger.info("[profile] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid());
map.addAttribute("skillGroups", getSkillGroups(request)); map.addAttribute("inviteData", coultInvite);
} map.addAttribute("skillGroups", getSkillGroups(request));
map.addAttribute("import", request.getServerPort()); }
map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(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")); 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) @RequestMapping("/profile/save")
public ModelAndView saveprofile(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "dialogad", required = false) MultipartFile dialogad) throws IOException { @Menu(type = "admin", subtype = "profile", admin = true)
final String orgi = super.getOrgi(request); 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 {}", if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) {
inviteData.getSnsaccountid(), logger.info("[profile/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}, traceUser {}",
inviteData.isAi(), inviteData.getSnsaccountid(),
inviteData.isAifirst(), inviteData.isAi(),
inviteData.getAiname(), inviteData.isAifirst(),
inviteData.getAisuccesstip(), inviteData.getAiname(),
inviteData.getAiid(), inviteData.getAisuccesstip(),
inviteData.isTraceuser()); inviteData.getAiid(),
inviteData.isTraceuser());
if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { // 从Cache及DB加载consult
// 从Cache及DB加载consult CousultInvite tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), orgi);
tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), orgi);
if (tempInviteData != null) {
if (tempInviteData != null) { tempInviteData.setDialog_name(inviteData.getDialog_name());
tempInviteData.setDialog_name(inviteData.getDialog_name()); tempInviteData.setDialog_address(inviteData.getDialog_address());
tempInviteData.setDialog_address(inviteData.getDialog_address()); tempInviteData.setDialog_phone(inviteData.getDialog_phone());
tempInviteData.setDialog_phone(inviteData.getDialog_phone()); tempInviteData.setDialog_mail(inviteData.getDialog_mail());
tempInviteData.setDialog_mail(inviteData.getDialog_mail()); tempInviteData.setDialog_introduction(inviteData.getDialog_introduction());
tempInviteData.setDialog_introduction(inviteData.getDialog_introduction()); tempInviteData.setDialog_message(inviteData.getDialog_message());
tempInviteData.setDialog_message(inviteData.getDialog_message()); tempInviteData.setLeavemessage(inviteData.isLeavemessage());
tempInviteData.setLeavemessage(inviteData.isLeavemessage()); tempInviteData.setLvmopentype(inviteData.getLvmopentype());
tempInviteData.setLvmopentype(inviteData.getLvmopentype()); tempInviteData.setLvmname(inviteData.isLvmname());
tempInviteData.setLvmname(inviteData.isLvmname()); tempInviteData.setLvmphone(inviteData.isLvmphone());
tempInviteData.setLvmphone(inviteData.isLvmphone()); tempInviteData.setLvmemail(inviteData.isLvmemail());
tempInviteData.setLvmemail(inviteData.isLvmemail()); tempInviteData.setLvmaddress(inviteData.isLvmaddress());
tempInviteData.setLvmaddress(inviteData.isLvmaddress()); tempInviteData.setLvmqq(inviteData.isLvmqq());
tempInviteData.setLvmqq(inviteData.isLvmqq());
tempInviteData.setConsult_skill_fixed(inviteData.isConsult_skill_fixed());
tempInviteData.setConsult_skill_fixed(inviteData.isConsult_skill_fixed()); tempInviteData.setConsult_skill_fixed_id(inviteData.getConsult_skill_fixed_id());
tempInviteData.setConsult_skill_fixed_id(inviteData.getConsult_skill_fixed_id()); tempInviteData.setSkill(inviteData.isSkill());
tempInviteData.setSkill(inviteData.isSkill()); tempInviteData.setConsult_skill_title(inviteData.getConsult_skill_title());
tempInviteData.setConsult_skill_title(inviteData.getConsult_skill_title()); tempInviteData.setConsult_skill_msg(inviteData.getConsult_skill_msg());
tempInviteData.setConsult_skill_msg(inviteData.getConsult_skill_msg()); tempInviteData.setConsult_skill_bottomtitle(inviteData.getConsult_skill_bottomtitle());
tempInviteData.setConsult_skill_bottomtitle(inviteData.getConsult_skill_bottomtitle()); tempInviteData.setConsult_skill_maxagent(inviteData.getConsult_skill_maxagent());
tempInviteData.setConsult_skill_maxagent(inviteData.getConsult_skill_maxagent()); tempInviteData.setConsult_skill_numbers(inviteData.getConsult_skill_numbers());
tempInviteData.setConsult_skill_numbers(inviteData.getConsult_skill_numbers()); tempInviteData.setConsult_skill_agent(inviteData.isConsult_skill_agent());
tempInviteData.setConsult_skill_agent(inviteData.isConsult_skill_agent());
tempInviteData.setOnlyareaskill(inviteData.isOnlyareaskill());
tempInviteData.setOnlyareaskill(inviteData.isOnlyareaskill()); tempInviteData.setAreaskilltipmsg(inviteData.getAreaskilltipmsg());
tempInviteData.setAreaskilltipmsg(inviteData.getAreaskilltipmsg());
tempInviteData.setConsult_info(inviteData.isConsult_info());
tempInviteData.setConsult_info(inviteData.isConsult_info()); tempInviteData.setConsult_info_email(inviteData.isConsult_info_email());
tempInviteData.setConsult_info_email(inviteData.isConsult_info_email()); tempInviteData.setConsult_info_name(inviteData.isConsult_info_name());
tempInviteData.setConsult_info_name(inviteData.isConsult_info_name()); tempInviteData.setConsult_info_phone(inviteData.isConsult_info_phone());
tempInviteData.setConsult_info_phone(inviteData.isConsult_info_phone()); tempInviteData.setConsult_info_resion(inviteData.isConsult_info_resion());
tempInviteData.setConsult_info_resion(inviteData.isConsult_info_resion()); tempInviteData.setConsult_info_message(inviteData.getConsult_info_message());
tempInviteData.setConsult_info_message(inviteData.getConsult_info_message()); tempInviteData.setConsult_info_cookies(inviteData.isConsult_info_cookies());
tempInviteData.setConsult_info_cookies(inviteData.isConsult_info_cookies());
tempInviteData.setRecordhis(inviteData.isRecordhis());
tempInviteData.setRecordhis(inviteData.isRecordhis()); tempInviteData.setTraceuser(inviteData.isTraceuser());
tempInviteData.setTraceuser(inviteData.isTraceuser());
tempInviteData.setAi(inviteData.isAi());
tempInviteData.setAi(inviteData.isAi()); tempInviteData.setAifirst(inviteData.isAifirst());
tempInviteData.setAifirst(inviteData.isAifirst()); tempInviteData.setAimsg(inviteData.getAimsg());
tempInviteData.setAimsg(inviteData.getAimsg()); tempInviteData.setAisuccesstip(inviteData.getAisuccesstip());
tempInviteData.setAisuccesstip(inviteData.getAisuccesstip()); tempInviteData.setAiname(inviteData.getAiname());
tempInviteData.setAiname(inviteData.getAiname()); tempInviteData.setAiid(inviteData.getAiid());
tempInviteData.setAiid(inviteData.getAiid());
tempInviteData.setMaxwordsnum(inviteData.getMaxwordsnum());
tempInviteData.setMaxwordsnum(inviteData.getMaxwordsnum()); tempInviteData.setCtrlenter(inviteData.isCtrlenter());
tempInviteData.setCtrlenter(inviteData.isCtrlenter()); tempInviteData.setWhitelist_mode(inviteData.isWhitelist_mode());
tempInviteData.setWhitelist_mode(inviteData.isWhitelist_mode());
if (dialogad != null && StringUtils.isNotBlank(dialogad.getName()) && dialogad.getBytes().length > 0) {
if (dialogad != null && StringUtils.isNotBlank(dialogad.getName()) && dialogad.getBytes() != null && dialogad.getBytes().length > 0) { tempInviteData.setDialog_ad(super.saveImageFileWithMultipart(dialogad));
tempInviteData.setDialog_ad(super.saveImageFileWithMultipart(dialogad)); }
} // 保存到DB
// 保存到DB inviteRes.save(tempInviteData);
inviteRes.save(tempInviteData); inviteData = tempInviteData;
inviteData = tempInviteData; }
} } else {
} else { if (inviteData != null) {
inviteRes.save(inviteData); inviteRes.save(inviteData);
} }
}
cache.putConsultInviteByOrgi(orgi, inviteData); if (inviteData == null) {
return request(super.createRequestPageTempletResponse("redirect:/admin/webim/profile.html?snsid=" + inviteData.getSnsaccountid())); throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Invite data not found");
} }
cache.putConsultInviteByOrgi(orgi, inviteData);
@RequestMapping("/invote") return request(super.createRequestPageTempletResponse("redirect:/admin/webim/profile.html?snsid=" + inviteData.getSnsaccountid()));
@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)); @RequestMapping("/invote")
logger.info("[invote] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid()); @Menu(type = "app", subtype = "invote", admin = true)
public ModelAndView invote(ModelMap map, HttpServletRequest request, @Valid String snsid) {
if (coultInvite != null) { CousultInvite coultInvite = OnlineUserProxy.consult(snsid, super.getOrgi(request));
map.addAttribute("inviteData", coultInvite);
} if (coultInvite != null) {
map.addAttribute("import", request.getServerPort()); logger.info("[invote] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", coultInvite.getSnsaccountid(), coultInvite.isAi(), coultInvite.isAifirst(), coultInvite.getAiname(), coultInvite.getAisuccesstip(), coultInvite.getAiid());
map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request))); map.addAttribute("inviteData", coultInvite);
return request(super.createAdminTempletResponse("/admin/webim/invote")); }
} map.addAttribute("import", request.getServerPort());
map.addAttribute("snsAccount", snsAccountRes.findBySnsidAndOrgi(snsid, super.getOrgi(request)));
@RequestMapping("/invote/save") return request(super.createAdminTempletResponse("/admin/webim/invote"));
@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; @RequestMapping("/invote/save")
logger.info("[invote/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid()); @Menu(type = "admin", subtype = "profile", admin = true)
public ModelAndView saveinvote(HttpServletRequest request, @Valid CousultInvite inviteData, @RequestParam(value = "invotebg", required = false) MultipartFile invotebg) throws IOException {
if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) { CousultInvite tempInviteData;
tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), super.getOrgi(request));
if (tempInviteData != null) { if (inviteData != null && StringUtils.isNotBlank(inviteData.getId())) {
tempInviteData.setConsult_invite_enable(inviteData.isConsult_invite_enable()); logger.info("[invote/save] snsaccount Id {}, Ai {}, Aifirst {}, Ainame {}, Aisuccess {}, Aiid {}", inviteData.getSnsaccountid(), inviteData.isAi(), inviteData.isAifirst(), inviteData.getAiname(), inviteData.getAisuccesstip(), inviteData.getAiid());
tempInviteData.setConsult_invite_content(inviteData.getConsult_invite_content()); tempInviteData = OnlineUserProxy.consult(inviteData.getSnsaccountid(), super.getOrgi(request));
tempInviteData.setConsult_invite_accept(inviteData.getConsult_invite_accept()); if (tempInviteData != null) {
tempInviteData.setConsult_invite_later(inviteData.getConsult_invite_later()); tempInviteData.setConsult_invite_enable(inviteData.isConsult_invite_enable());
tempInviteData.setConsult_invite_delay(inviteData.getConsult_invite_delay()); tempInviteData.setConsult_invite_content(inviteData.getConsult_invite_content());
tempInviteData.setConsult_invite_accept(inviteData.getConsult_invite_accept());
tempInviteData.setConsult_invite_color(inviteData.getConsult_invite_color()); tempInviteData.setConsult_invite_later(inviteData.getConsult_invite_later());
tempInviteData.setConsult_invite_delay(inviteData.getConsult_invite_delay());
if (invotebg != null && StringUtils.isNotBlank(invotebg.getName()) && invotebg.getBytes() != null && invotebg.getBytes().length > 0) {
tempInviteData.setConsult_invite_bg(super.saveImageFileWithMultipart(invotebg)); tempInviteData.setConsult_invite_color(inviteData.getConsult_invite_color());
}
inviteRes.save(tempInviteData); if (invotebg != null && StringUtils.isNotBlank(invotebg.getName()) && invotebg.getBytes().length > 0) {
inviteData = tempInviteData; tempInviteData.setConsult_invite_bg(super.saveImageFileWithMultipart(invotebg));
} }
} else { inviteRes.save(tempInviteData);
inviteRes.save(inviteData); inviteData = tempInviteData;
} }
cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData); } else {
return request(super.createRequestPageTempletResponse("redirect:/admin/webim/invote.html?snsid=" + inviteData.getSnsaccountid())); if (inviteData != null) {
} inviteRes.save(inviteData);
}
/** }
* 获取当前登录者组织下的技能组列表
* if (inviteData == null) {
* @param request throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Invite data not found");
* @return }
*/
private List<Organ> getSkillGroups(HttpServletRequest request) { cache.putConsultInviteByOrgi(inviteData.getOrgi(), inviteData);
List<Organ> skillgroups = new ArrayList<>(); return request(super.createRequestPageTempletResponse("redirect:/admin/webim/invote.html?snsid=" + inviteData.getSnsaccountid()));
if (super.isTenantshare()) { }
List<String> organIdList = new ArrayList<>();
List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); /**
if (!orgiSkillRelList.isEmpty()) { * 获取当前登录者组织下的技能组列表
for (OrgiSkillRel rel : orgiSkillRelList) { */
organIdList.add(rel.getSkillid()); private List<Organ> getSkillGroups(HttpServletRequest request) {
} List<Organ> skillgroups = new ArrayList<>();
} if (super.isTenantshare()) {
skillgroups = organRes.findAll(organIdList); List<String> organIdList = new ArrayList<>();
} else { List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request));
List<Organ> allgroups = organRes.findByOrgiAndOrgid(super.getOrgi(request), super.getOrgid(request)); if (!orgiSkillRelList.isEmpty()) {
for (Organ o : allgroups) { for (OrgiSkillRel rel : orgiSkillRelList) {
if (o.isSkill()) { organIdList.add(rel.getSkillid());
skillgroups.add(o); }
} }
} skillgroups = organRes.findAllById(organIdList);
} } else {
return skillgroups; List<Organ> allgroups = organRes.findByOrgiAndOrgid(super.getOrgi(request), super.getOrgid(request));
} for (Organ o : allgroups) {
if (o.isSkill()) {
/** skillgroups.add(o);
* 获取当前产品下人员信息 }
* }
* @param request }
* @return return skillgroups;
*/ }
private List<User> getUsers(HttpServletRequest request) {
List<User> userList; /**
if (super.isTenantshare()) { * 获取当前产品下人员信息
List<String> organIdList = new ArrayList<>(); */
List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); private List<User> getUsers(HttpServletRequest request) {
if (!orgiSkillRelList.isEmpty()) { List<User> userList;
for (OrgiSkillRel rel : orgiSkillRelList) { if (super.isTenantshare()) {
organIdList.add(rel.getSkillid()); List<String> organIdList = new ArrayList<>();
} List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request));
} if (!orgiSkillRelList.isEmpty()) {
userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false); for (OrgiSkillRel rel : orgiSkillRelList) {
} else { organIdList.add(rel.getSkillid());
userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false); }
} }
return userList; userList = userProxy.findByOrganInAndAgentAndDatastatus(organIdList, true, false);
} } else {
} userList = userRes.findByOrgiAndAgentAndDatastatus(super.getOrgi(request), true, false);
}
return userList;
}
}

View File

@ -20,8 +20,9 @@ import com.chatopera.cc.basic.MainContext;
import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.basic.MainUtils;
import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.Handler;
import com.chatopera.cc.controller.api.request.RestUtils; import com.chatopera.cc.controller.api.request.RestUtils;
import com.chatopera.cc.exception.CSKefuRestException; import com.chatopera.cc.model.ContactNotes;
import com.chatopera.cc.model.*; 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.ContactNotesRepository;
import com.chatopera.cc.persistence.es.ContactsRepository; import com.chatopera.cc.persistence.es.ContactsRepository;
import com.chatopera.cc.persistence.repository.OrganRepository; 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.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@ -49,6 +51,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 联系人笔记 * 联系人笔记
@ -56,39 +59,34 @@ import java.util.List;
*/ */
@RestController @RestController
@RequestMapping("/api/contacts/notes") @RequestMapping("/api/contacts/notes")
@RequiredArgsConstructor
public class ApiContactNotesController extends Handler { public class ApiContactNotesController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(ApiContactNotesController.class); private final static Logger logger = LoggerFactory.getLogger(ApiContactNotesController.class);
@Autowired @NonNull
private ContactNotesRepository contactNotesRes; private final ContactNotesRepository contactNotesRes;
@NonNull
private final ContactsRepository contactsRes;
@Autowired @NonNull
private ContactsRepository contactsRes; private final UserRepository userRes;
@NonNull
private final OrganRepository organRes;
@Autowired @NonNull
private UserRepository userRes; private final OrganUserRepository organUserRes;
@Autowired
private OrganRepository organRes;
@Autowired
private OrganUserRepository organUserRes;
/** /**
* 获取创建人 * 获取创建人
*
* @param creater
* @return
*/ */
private JsonObject creater(final String creater) { private JsonObject creater(final String creater) {
JsonObject data = new JsonObject(); JsonObject data = new JsonObject();
// 增加创建人 // 增加创建人
User u = userRes.findById(creater); Optional<User> optional = userRes.findById(creater);
if (u != null) { if (optional.isPresent()) {
User u = optional.get();
data.addProperty("creater", u.getId()); data.addProperty("creater", u.getId());
data.addProperty("creatername", u.getUname()); data.addProperty("creatername", u.getUname());
@ -101,13 +99,13 @@ public class ApiContactNotesController extends Handler {
JsonArray y = new JsonArray(); JsonArray y = new JsonArray();
for (final OrganUser organ : organs) { for (final OrganUser organ : organs) {
Organ o = organRes.findOne(organ.getOrgan()); organRes.findById(organ.getOrgan())
if (o != null) { .ifPresent(o -> {
JsonObject x = new JsonObject(); JsonObject x = new JsonObject();
x.addProperty("createrorgan", o.getName()); x.addProperty("createrorgan", o.getName());
x.addProperty("createrorganid", o.getId()); x.addProperty("createrorganid", o.getId());
y.add(x); y.add(x);
} });
} }
data.add("organs", y); 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 { 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(); JsonObject resp = new JsonObject();
// TODO 增加权限检查 // TODO 增加权限检查
if (j.has("id") && StringUtils.isNotBlank(j.get("id").getAsString())) { if (j.has("id") && StringUtils.isNotBlank(j.get("id").getAsString())) {
ContactNotes cn = contactNotesRes.findOne(j.get("id").getAsString()); Optional<ContactNotes> optional = contactNotesRes.findById(j.get("id").getAsString());
if (cn != null) { if (optional.isPresent()) {
ContactNotes cn = optional.get();
JsonObject data = new JsonObject(); JsonObject data = new JsonObject();
data.addProperty("contactid", cn.getContactid()); data.addProperty("contactid", cn.getContactid());
data.addProperty("category", cn.getCategory()); 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 { private JsonObject create(final JsonObject payload) throws GsonTools.JsonObjectExtensionConflictException {
logger.info("[contact note] create {}", payload.toString()); logger.info("[contact note] create {}", payload.toString());
@ -199,9 +192,6 @@ public class ApiContactNotesController extends Handler {
/** /**
* 验证创建数据 * 验证创建数据
*
* @param payload
* @return
*/ */
private String validateCreatePayload(JsonObject payload) { private String validateCreatePayload(JsonObject payload) {
if (!payload.has("category")) { if (!payload.has("category")) {
@ -215,8 +205,7 @@ public class ApiContactNotesController extends Handler {
if ((!payload.has("contactid")) || StringUtils.isBlank(payload.get("contactid").getAsString())) { if ((!payload.has("contactid")) || StringUtils.isBlank(payload.get("contactid").getAsString())) {
return "参数传递不合法,没有[contactid]。"; return "参数传递不合法,没有[contactid]。";
} else { } else {
Contacts c = contactsRes.findOne(payload.get("contactid").getAsString()); if (!contactsRes.existsById(payload.get("contactid").getAsString()))
if (c == null)
return "参数不合法,不存在该联系人。"; return "参数不合法,不存在该联系人。";
} }
@ -225,12 +214,9 @@ public class ApiContactNotesController extends Handler {
/** /**
* Build query string * Build query string
*
* @param j
* @return
*/ */
private String querybuilder(final JsonObject j) { private String querybuilder(final JsonObject j) {
StringBuffer sb = new StringBuffer(); StringBuilder sb = new StringBuilder();
if (j.has("orgi")) { if (j.has("orgi")) {
sb.append("orgi:"); sb.append("orgi:");
sb.append(j.get("orgi").getAsString()); sb.append(j.get("orgi").getAsString());
@ -242,10 +228,6 @@ public class ApiContactNotesController extends Handler {
/** /**
* 根据联系人ID获取联系人笔记列表 * 根据联系人ID获取联系人笔记列表
*
* @param j
* @param request
* @return
*/ */
private JsonObject fetch(final JsonObject j, final HttpServletRequest request) throws GsonTools.JsonObjectExtensionConflictException { private JsonObject fetch(final JsonObject j, final HttpServletRequest request) throws GsonTools.JsonObjectExtensionConflictException {
logger.info("[contact note] fetch [{}]", j.toString()); logger.info("[contact note] fetch [{}]", j.toString());
@ -256,9 +238,8 @@ public class ApiContactNotesController extends Handler {
return resp; return resp;
} }
final String cid = j.get("contactid").getAsString(); 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_RC, RestUtils.RESP_RC_FAIL_4);
resp.addProperty(RestUtils.RESP_KEY_ERROR, "不存在该联系人。"); resp.addProperty(RestUtils.RESP_KEY_ERROR, "不存在该联系人。");
return resp; 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) @RequestMapping(method = RequestMethod.POST)
@Menu(type = "apps", subtype = "contactnotes", access = true) @Menu(type = "apps", subtype = "contactnotes", access = true)
public ResponseEntity<String> operations(HttpServletRequest request, @RequestBody final String body) throws CSKefuRestException, GsonTools.JsonObjectExtensionConflictException { public ResponseEntity<String> operations(HttpServletRequest request, @RequestBody final String body) throws GsonTools.JsonObjectExtensionConflictException {
final JsonObject j = (new JsonParser()).parse(body).getAsJsonObject(); final JsonObject j = JsonParser.parseString(body).getAsJsonObject();
logger.info("[contact note] operations payload {}", j.toString()); logger.info("[contact note] operations payload {}", j.toString());
JsonObject json = new JsonObject(); JsonObject json = new JsonObject();
HttpHeaders headers = RestUtils.header(); HttpHeaders headers = RestUtils.header();
@ -335,7 +310,7 @@ public class ApiContactNotesController extends Handler {
break; break;
} }
} }
return new ResponseEntity<String>(json.toString(), headers, HttpStatus.OK); return new ResponseEntity<>(json.toString(), headers, HttpStatus.OK);
} }

View File

@ -1,94 +1,87 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.controller.api; package com.chatopera.cc.controller.api;
import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.Handler;
import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.Organ;
import com.chatopera.cc.persistence.repository.OrganRepository; import com.chatopera.cc.persistence.repository.OrganRepository;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import com.chatopera.cc.util.RestResult; import com.chatopera.cc.util.RestResult;
import com.chatopera.cc.util.RestResultType; import com.chatopera.cc.util.RestResultType;
import org.apache.commons.lang.StringUtils; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.apache.commons.lang.StringUtils;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
/**
* 组织机构/部门/技能组功能 /**
*/ * 组织机构/部门/技能组功能
@RestController */
@RequestMapping("/api/organ") @RestController
public class ApiOrganController extends Handler{ @RequestMapping("/api/organ")
@RequiredArgsConstructor
@Autowired public class ApiOrganController extends Handler {
private OrganRepository organRepository;
@NonNull
/** private final OrganRepository organRepository;
* 返回所有部门
* @param request /**
* @param username 搜索用户名精确搜索 * 返回所有部门
* @return */
*/ @RequestMapping(method = RequestMethod.GET)
@RequestMapping( method = RequestMethod.GET) @Menu(type = "apps", subtype = "organ", access = true)
@Menu(type = "apps" , subtype = "organ" , access = true) public ResponseEntity<RestResult> list(HttpServletRequest request) {
public ResponseEntity<RestResult> list(HttpServletRequest request) { return new ResponseEntity<>(new RestResult(RestResultType.OK, organRepository.findByOrgi(super.getOrgi(request))), HttpStatus.OK);
return new ResponseEntity<>(new RestResult(RestResultType.OK, organRepository.findByOrgi(super.getOrgi(request))), HttpStatus.OK); }
}
/**
/** * 新增或修改部门
* 新增或修改部门 */
* @param request @RequestMapping(method = RequestMethod.PUT)
* @param user @Menu(type = "apps", subtype = "organ", access = true)
* @return public ResponseEntity<RestResult> put(@Valid Organ organ) {
*/ if (organ != null && !StringUtils.isBlank(organ.getName())) {
@RequestMapping(method = RequestMethod.PUT) organRepository.save(organ);
@Menu(type = "apps" , subtype = "organ" , access = true) }
public ResponseEntity<RestResult> put(HttpServletRequest request , @Valid Organ organ) { return new ResponseEntity<>(new RestResult(RestResultType.OK), HttpStatus.OK);
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)
* 删除用户只提供 按照用户ID删除 并且不能删除系统管理员 public ResponseEntity<RestResult> delete(HttpServletRequest request, @Valid String id) {
* @param request RestResult result = new RestResult(RestResultType.OK);
* @param id Organ organ;
* @return if (!StringUtils.isBlank(id)) {
*/ organ = organRepository.findByIdAndOrgi(id, super.getOrgi(request));
@RequestMapping(method = RequestMethod.DELETE) if (organ != null) { //系统管理员 不允许 使用 接口删除
@Menu(type = "apps" , subtype = "user" , access = true) organRepository.delete(organ);
public ResponseEntity<RestResult> delete(HttpServletRequest request , @Valid String id) { } else {
RestResult result = new RestResult(RestResultType.OK) ; result.setStatus(RestResultType.ORGAN_DELETE);
Organ organ = null ; }
if(!StringUtils.isBlank(id)){ }
organ = organRepository.findByIdAndOrgi(id, super.getOrgi(request)) ; return new ResponseEntity<>(result, HttpStatus.OK);
if(organ != null){ //系统管理员 不允许 使用 接口删除 }
organRepository.delete(organ); }
}else{
result.setStatus(RestResultType.ORGAN_DELETE);
}
}
return new ResponseEntity<>(result, HttpStatus.OK);
}
}

View File

@ -25,9 +25,10 @@ import com.chatopera.cc.persistence.repository.OrgiSkillRelRepository;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.proxy.UserProxy;
import com.chatopera.cc.util.Menu; 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.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -40,22 +41,23 @@ import java.util.List;
@Controller @Controller
@RequestMapping("/res") @RequestMapping("/res")
@RequiredArgsConstructor
public class UsersResourceController extends Handler { public class UsersResourceController extends Handler {
@Autowired @NonNull
private UserRepository userRes; private final UserRepository userRes;
@Autowired @NonNull
private OrgiSkillRelRepository orgiSkillRelService; private final OrgiSkillRelRepository orgiSkillRelService;
@Autowired @NonNull
private OrganRepository organRes; private final OrganRepository organRes;
@Autowired @NonNull
private UserProxy userProxy; private final UserProxy userProxy;
@RequestMapping("/users") @RequestMapping("/users")
@Menu(type = "res", subtype = "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) { if (q == null) {
q = ""; q = "";
} }
@ -65,7 +67,7 @@ public class UsersResourceController extends Handler {
@RequestMapping("/bpm/users") @RequestMapping("/bpm/users")
@Menu(type = "res", subtype = "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) { if (q == null) {
q = ""; q = "";
} }
@ -75,7 +77,7 @@ public class UsersResourceController extends Handler {
@RequestMapping("/bpm/organ") @RequestMapping("/bpm/organ")
@Menu(type = "res", subtype = "users") @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("organList", getOrgans(request));
map.addAttribute("usersList", getUsers(request)); map.addAttribute("usersList", getUsers(request));
map.addAttribute("ids", ids); map.addAttribute("ids", ids);
@ -83,7 +85,7 @@ public class UsersResourceController extends Handler {
} }
private List<User> getUsers(HttpServletRequest request) { private List<User> getUsers(HttpServletRequest request) {
List<User> list = null; List<User> list;
if (super.isTenantshare()) { if (super.isTenantshare()) {
List<String> organIdList = new ArrayList<>(); List<String> organIdList = new ArrayList<>();
List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request));
@ -101,16 +103,12 @@ public class UsersResourceController extends Handler {
/** /**
* 获取当前产品下人员信息 * 获取当前产品下人员信息
*
* @param request
* @param q
* @return
*/ */
private Page<User> getUsers(HttpServletRequest request, String q) { private Page<User> getUsers(HttpServletRequest request, String q) {
if (q == null) { if (q == null) {
q = ""; q = "";
} }
Page<User> list = null; Page<User> list;
if (super.isTenantshare()) { if (super.isTenantshare()) {
List<String> organIdList = new ArrayList<>(); List<String> organIdList = new ArrayList<>();
List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request));
@ -128,12 +126,9 @@ public class UsersResourceController extends Handler {
/** /**
* 获取当前产品下 技能组 组织信息 * 获取当前产品下 技能组 组织信息
*
* @param request
* @return
*/ */
private List<Organ> getOrgans(HttpServletRequest request) { private List<Organ> getOrgans(HttpServletRequest request) {
List<Organ> list = null; List<Organ> list;
if (super.isTenantshare()) { if (super.isTenantshare()) {
List<String> organIdList = new ArrayList<>(); List<String> organIdList = new ArrayList<>();
List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request)); List<OrgiSkillRel> orgiSkillRelList = orgiSkillRelService.findByOrgi(super.getOrgi(request));

View File

@ -1,46 +1,48 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.impl; package com.chatopera.cc.persistence.impl;
import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.Organ;
import com.chatopera.cc.persistence.interfaces.DataExchangeInterface; import com.chatopera.cc.persistence.interfaces.DataExchangeInterface;
import com.chatopera.cc.persistence.repository.OrganRepository; import com.chatopera.cc.persistence.repository.OrganRepository;
import org.springframework.beans.factory.annotation.Autowired; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.List; import java.io.Serializable;
import java.util.List;
@Service("organdata")
public class OrganDataExchangeImpl implements DataExchangeInterface { @Service("organdata")
@Autowired @RequiredArgsConstructor
private OrganRepository organRes ; public class OrganDataExchangeImpl implements DataExchangeInterface {
@NonNull
public String getDataByIdAndOrgi(String id, String orgi){ private final OrganRepository organRes;
Organ organ = organRes.findByIdAndOrgi(id, orgi) ;
return organ!=null ? organ.getName() : id; public String getDataByIdAndOrgi(String id, String orgi) {
} Organ organ = organRes.findByIdAndOrgi(id, orgi);
return organ != null ? organ.getName() : id;
@Override }
public List<Serializable> getListDataByIdAndOrgi(String id , String creater, String orgi) {
return null ; @Override
} public List<Serializable> getListDataByIdAndOrgi(String id, String creater, String orgi) {
return null;
public void process(Object data , String orgi) { }
} public void process(Object data, String orgi) {
}
}
}

View File

@ -1,53 +1,51 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.persistence.repository; package com.chatopera.cc.persistence.repository;
import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.Organ;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface OrganRepository public interface OrganRepository extends JpaRepository<Organ, String> {
extends JpaRepository<Organ, String> Organ findByIdAndOrgi(String paramString, String orgi);
{
Organ findByIdAndOrgi(String paramString, String orgi); Page<Organ> findByOrgi(String orgi, Pageable paramPageable);
Page<Organ> findByOrgi(String orgi, Pageable paramPageable); // Page<Organ> findByOrgiAndOrgid(String orgi, String orgid, Pageable paramPageable);
Page<Organ> findByOrgiAndOrgid(String orgi, String orgid, Pageable paramPageable); Organ findByNameAndOrgi(String paramString, String orgi);
Organ findByNameAndOrgi(String paramString, String orgi); Organ findByNameAndOrgiAndOrgid(String paramString, String orgi, String orgid);
Organ findByNameAndOrgiAndOrgid(String paramString, String orgi, String orgid); // Organ findByParentAndOrgi(String parent, String orgi);
Organ findByParentAndOrgi(String parent, String orgi); List<Organ> findByOrgiAndParent(String orgi, String parent);
List<Organ> findByOrgiAndParent(String orgi, String parent); List<Organ> findByOrgi(String orgi);
List<Organ> findByOrgi(String orgi); List<Organ> findByOrgiAndOrgid(String orgi, String orgid);
List<Organ> findByOrgiAndOrgid(String orgi, String orgid); List<Organ> findByOrgiAndSkill(String orgi, boolean skill);
List<Organ> findByOrgiAndSkill(String orgi, boolean skill); List<Organ> findByOrgiAndSkillAndOrgid(String orgi, boolean skill, String orgid);
List<Organ> findByOrgiAndSkillAndOrgid(String orgi, boolean skill, String orgid); List<Organ> findByIdInAndSkill(List<String> organIdList, boolean b);
List<Organ> findByIdInAndSkill(List<String> organIdList, boolean b); }
}

View File

@ -32,6 +32,7 @@ import freemarker.template.TemplateException;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
@ -61,6 +62,7 @@ public class OnlineUserProxy {
/** /**
* *
*/ */
@Nullable
public static CousultInvite consult(final String snsid, final String orgi) { public static CousultInvite consult(final String snsid, final String orgi) {
// logger.info("[consult] snsid {}, orgi {}", snsid, orgi); // logger.info("[consult] snsid {}, orgi {}", snsid, orgi);
CousultInvite consultInvite = MainContext.getCache().findOneConsultInviteBySnsidAndOrgi(snsid, orgi); CousultInvite consultInvite = MainContext.getCache().findOneConsultInviteBySnsidAndOrgi(snsid, orgi);

View File

@ -1,30 +1,23 @@
package com.chatopera.cc.proxy; package com.chatopera.cc.proxy;
import com.chatopera.cc.controller.admin.OrganController;
import com.chatopera.cc.model.Organ; import com.chatopera.cc.model.Organ;
import com.chatopera.cc.model.User;
import com.chatopera.cc.persistence.repository.OrganRepository; import com.chatopera.cc.persistence.repository.OrganRepository;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.springframework.lang.NonNull;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
@Service @Service
@RequiredArgsConstructor
public class OrganProxy { public class OrganProxy {
private final static Logger logger = LoggerFactory.getLogger(OrganController.class);
@Autowired @NonNull
private OrganRepository organRes; private final OrganRepository organRes;
/** /**
* 检查组织机构树 * 检查组织机构树
* @param organ
* @param organId
* @param orgi
* @return
*/ */
private boolean checkParentOrgan(Organ organ, String organId, String orgi) { private boolean checkParentOrgan(Organ organ, String organId, String orgi) {
if (StringUtils.equals(organ.getParent(), "0")) { if (StringUtils.equals(organ.getParent(), "0")) {
@ -48,13 +41,7 @@ public class OrganProxy {
} }
/** public String updateOrgan(final Organ organ, final String orgi) {
* @param organ
* @param orgi
* @param user
* @return msg
*/
public String updateOrgan(final Organ organ, final String orgi, final User user) {
final Organ oldOrgan = organRes.findByNameAndOrgi(organ.getName(), orgi); final Organ oldOrgan = organRes.findByNameAndOrgi(organ.getName(), orgi);
String msg = "admin_organ_update_success"; String msg = "admin_organ_update_success";

View File

@ -20,52 +20,47 @@ import com.chatopera.cc.persistence.repository.OrganUserRepository;
import com.chatopera.cc.persistence.repository.RoleAuthRepository; import com.chatopera.cc.persistence.repository.RoleAuthRepository;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification; 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.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.Predicate;
import javax.persistence.criteria.Root;
import java.util.*; import java.util.*;
/** /**
* 用户/坐席 常用方法 * 用户/坐席 常用方法
*/ */
@Component @Component
@RequiredArgsConstructor
public class UserProxy { public class UserProxy {
private final static Logger logger = LoggerFactory.getLogger(UserProxy.class); private final static Logger logger = LoggerFactory.getLogger(UserProxy.class);
@Autowired @NonNull
private OrganUserRepository organUserRes; private final OrganUserRepository organUserRes;
@Autowired @NonNull
private OrganRepository organRes; private final OrganRepository organRes;
@Autowired @NonNull
private UserRepository userRes; private final UserRepository userRes;
@Autowired @NonNull
private RoleAuthRepository roleAuthRes; 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) { public String createNewUser(final User user, final String orgi, final String orgid, final String orgiByTenantshare) {
String msg = ""; String msg;
msg = validUser(user); msg = validUser(user);
if (StringUtils.isNotBlank(msg) && !msg.equals("new_user_success")) { if (StringUtils.isNotBlank(msg) && !msg.equals("new_user_success")) {
return msg; return msg;
@ -90,8 +85,10 @@ public class UserProxy {
} }
@NonNull
public User findOne(final String id) { 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<String> findUserIdsInOrgan(final String organ) { public List<String> findUserIdsInOrgan(final String organ) {
@ -127,13 +124,10 @@ public class UserProxy {
/** /**
* 通过坐席ID查找其技能组Map * 通过坐席ID查找其技能组Map
*
* @param agentno
* @return
*/ */
public HashMap<String, String> getSkillsMapByAgentno(final String agentno) { public HashMap<String, String> getSkillsMapByAgentno(final String agentno) {
final User user = userRes.findOne(agentno); final User user = userRes.findById(agentno).orElse(null);
if (user == null) return new HashMap<>(); if (user == null) return new HashMap<>();
attachOrgansPropertiesForUser(user); attachOrgansPropertiesForUser(user);
@ -142,9 +136,6 @@ public class UserProxy {
/** /**
* 获得一个用户的直属组织机构 * 获得一个用户的直属组织机构
*
* @param userid
* @return
*/ */
public List<String> findOrgansByUserid(final String userid) { public List<String> findOrgansByUserid(final String userid) {
List<OrganUser> x = organUserRes.findByUserid(userid); List<OrganUser> 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) { public String validUserUpdate(final User user, final User oldUser) {
String msg = "edit_user_success"; String msg = "edit_user_success";
@ -265,9 +252,6 @@ public class UserProxy {
/** /**
* 从Json中创建User * 从Json中创建User
*
* @param json
* @return
*/ */
public User parseUserFromJson(final JsonObject json) { public User parseUserFromJson(final JsonObject json) {
User tempUser = new User(); User tempUser = new User();
@ -323,11 +307,7 @@ public class UserProxy {
// 是否是坐席 // 是否是坐席
if (json.has("agent")) { if (json.has("agent")) {
String val = json.get("agent").getAsString(); String val = json.get("agent").getAsString();
if (StringUtils.isNotBlank(val) && StringUtils.equals("1", val)) { tempUser.setAgent(StringUtils.isNotBlank(val) && StringUtils.equals("1", val));
tempUser.setAgent(true);
} else {
tempUser.setAgent(false);
}
} else { } else {
tempUser.setAgent(false); tempUser.setAgent(false);
} }
@ -349,11 +329,7 @@ public class UserProxy {
// 是否是呼叫中心 // 是否是呼叫中心
if (json.has("callcenter")) { if (json.has("callcenter")) {
String val = json.get("callcenter").getAsString(); String val = json.get("callcenter").getAsString();
if (StringUtils.isNotBlank(val) && StringUtils.equals("1", val)) { tempUser.setCallcenter(StringUtils.isNotBlank(val) && StringUtils.equals("1", val));
tempUser.setCallcenter(true);
} else {
tempUser.setCallcenter(false);
}
} else { } else {
tempUser.setCallcenter(false); tempUser.setCallcenter(false);
} }
@ -374,9 +350,6 @@ public class UserProxy {
/** /**
* 验证用户数据合法性 * 验证用户数据合法性
*
* @param user
* @return
*/ */
public String validUser(final User user) { public String validUser(final User user) {
String msg = "new_user_success"; String msg = "new_user_success";
@ -428,11 +401,6 @@ public class UserProxy {
/** /**
* 或取Sips列表 * 或取Sips列表
*
* @param organ
* @param datastatus
* @param orgi
* @return
*/ */
public List<String> findSipsByOrganAndDatastatusAndOrgi(final String organ, final boolean datastatus, final String orgi) { public List<String> findSipsByOrganAndDatastatusAndOrgi(final String organ, final boolean datastatus, final String orgi) {
List<String> users = findUserIdsInOrgan(organ); List<String> users = findUserIdsInOrgan(organ);
@ -445,15 +413,8 @@ public class UserProxy {
/** /**
* 通过租户ID是否为坐席是否有效和组织机构查询坐席数 * 通过租户ID是否为坐席是否有效和组织机构查询坐席数
*
* @param orgi
* @param agent
* @param datastatus
* @param organ
* @return
*/ */
public long countByOrgiAndAgentAndDatastatusAndOrgan( public long countByOrgiAndAgentAndDatastatusAndOrgan(
final String orgi,
final boolean agent, final boolean agent,
final boolean datastatus, final boolean datastatus,
final String organ) { final String organ) {
@ -468,26 +429,19 @@ public class UserProxy {
/** /**
* 增加用户的角色信息 * 增加用户的角色信息
*
* @param user
*/ */
public void attachRolesMap(final User user) { public void attachRolesMap(final User user) {
// 获取用户的角色权限进行授权 // 获取用户的角色权限进行授权
List<RoleAuth> roleAuthList = roleAuthRes.findAll(new Specification<RoleAuth>() { List<RoleAuth> roleAuthList = roleAuthRes.findAll((Specification<RoleAuth>) (root, query, cb) -> {
@Override List<Predicate> criteria = new ArrayList<>();
public Predicate toPredicate( if (user.getRoleList() != null && user.getRoleList().size() > 0) {
Root<RoleAuth> root, CriteriaQuery<?> query, for (Role role : user.getRoleList()) {
CriteriaBuilder cb) { criteria.add(cb.equal(root.get("roleid").as(String.class), role.getId()));
List<Predicate> criteria = new ArrayList<Predicate>();
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. // clear previous auth map values, ensure the changes are token effect in real time.
@ -501,8 +455,6 @@ public class UserProxy {
/** /**
* 获得一个部门及其子部门并添加到User的myorgans中 * 获得一个部门及其子部门并添加到User的myorgans中
*
* @param user
*/ */
public void processAffiliates(final User user, final Organ organ) { public void processAffiliates(final User user, final Organ organ) {
if (organ == null) { if (organ == null) {
@ -530,8 +482,6 @@ public class UserProxy {
/** /**
* 获取用户部门以及下级部门 * 获取用户部门以及下级部门
*
* @param user
*/ */
public void attachOrgansPropertiesForUser(final User user) { public void attachOrgansPropertiesForUser(final User user) {
List<OrganUser> organs = organUserRes.findByUserid(user.getId()); List<OrganUser> organs = organUserRes.findByUserid(user.getId());
@ -542,8 +492,10 @@ public class UserProxy {
for (final OrganUser organ : organs) { for (final OrganUser organ : organs) {
// 添加直属部门到organs // 添加直属部门到organs
final Organ o = organRes.findOne(organ.getOrgan()); String id = organ.getOrgan();
user.getOrgans().put(organ.getOrgan(), o); 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()) { if (o.isSkill()) {
skills.put(o.getId(), o.getName()); skills.put(o.getId(), o.getName());
} }

View File

@ -1,506 +1,424 @@
/* /*
* Copyright (C) 2017 优客服-多渠道客服系统 * Copyright (C) 2017 优客服-多渠道客服系统
* Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com> * Modifications copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.chatopera.cc.util; package com.chatopera.cc.util;
import com.chatopera.cc.basic.Constants; import com.chatopera.cc.basic.Constants;
import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.basic.MainContext;
import com.chatopera.cc.model.*; import com.chatopera.cc.model.*;
import com.chatopera.cc.persistence.repository.*; import com.chatopera.cc.persistence.repository.*;
import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.proxy.UserProxy;
import com.chatopera.cc.util.es.SearchTools; import com.chatopera.cc.util.es.SearchTools;
import com.chatopera.cc.util.es.UKDataBean; import com.chatopera.cc.util.es.UKDataBean;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.BoolQueryBuilder;
import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageImpl;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder.In;
import javax.persistence.criteria.CriteriaBuilder.In; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.CriteriaQuery; import javax.validation.Valid;
import javax.persistence.criteria.Predicate; import java.util.ArrayList;
import javax.persistence.criteria.Root; import java.util.Collections;
import javax.validation.Valid; import java.util.LinkedHashSet;
import java.util.ArrayList; import java.util.List;
import java.util.LinkedHashSet;
import java.util.List; import static org.elasticsearch.index.query.QueryBuilders.termQuery;
import static org.elasticsearch.index.query.QueryBuilders.termQuery; public class CallCenterUtils {
public class CallCenterUtils {
private static UserProxy userProxy;
private static UserProxy userProxy; /**
*
/** */
* @param extno public static SipTrunk siptrunk(String extno, SipTrunkRepository sipTrunkRes, ExtentionRepository extRes) {
* @param sipTrunkRes SipTrunk sipTrunk = null;
* @param extRes List<Extention> extList = extRes.findByExtention(extno);
* @return if (extList.size() > 0) {
*/ Extention ext = extList.get(0);
public static SipTrunk siptrunk(String extno, SipTrunkRepository sipTrunkRes, ExtentionRepository extRes) { if (StringUtils.isNotBlank(ext.getSiptrunk())) {
SipTrunk sipTrunk = null; sipTrunk = MainContext.getCache().findOneSystemByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi());
List<Extention> extList = extRes.findByExtention(extno); if (sipTrunk == null) {
if (extList.size() > 0) { sipTrunk = sipTrunkRes.findByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi());
Extention ext = extList.get(0); if (sipTrunk != null) {
if (StringUtils.isNotBlank(ext.getSiptrunk())) { MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), ext.getOrgi(), sipTrunk);
sipTrunk = MainContext.getCache().findOneSystemByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); }
if (sipTrunk == null) { }
sipTrunk = sipTrunkRes.findByIdAndOrgi(ext.getSiptrunk(), ext.getOrgi()); } else {
if (sipTrunk != null) { List<SipTrunk> sipTrunkList = sipTrunkRes.findByDefaultsipAndOrgi(true, ext.getOrgi());
MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), ext.getOrgi(), sipTrunk); if (sipTrunkList.size() > 0) {
} sipTrunk = sipTrunkList.get(0);
} }
} else { }
List<SipTrunk> sipTrunkList = sipTrunkRes.findByDefaultsipAndOrgi(true, ext.getOrgi()); }
if (sipTrunkList.size() > 0) { return sipTrunk;
sipTrunk = sipTrunkList.get(0); }
}
}
} /**
return sipTrunk; *
} */
public static SipTrunk siptrunk(String name, SipTrunkRepository sipTrunkRes) {
SipTrunk sipTrunk = null;
/** List<SipTrunk> sipTrunkList = sipTrunkRes.findByName(name);
* @param name if (sipTrunkList.size() > 0) {
* @param sipTrunkRes sipTrunk = sipTrunkList.get(0);
* @return } else {
*/ sipTrunkList = sipTrunkRes.findByDefaultsip(true);
public static SipTrunk siptrunk(String name, SipTrunkRepository sipTrunkRes) { if (sipTrunkList.size() > 0) {
SipTrunk sipTrunk = null; sipTrunk = sipTrunkList.get(0);
List<SipTrunk> sipTrunkList = sipTrunkRes.findByName(name); }
if (sipTrunkList.size() > 0) { }
sipTrunk = sipTrunkList.get(0); if (sipTrunk != null) {
} else { MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), sipTrunk.getOrgi(), sipTrunk);
sipTrunkList = sipTrunkRes.findByDefaultsip(true); }
if (sipTrunkList.size() > 0) { return sipTrunk;
sipTrunk = sipTrunkList.get(0); }
}
} /**
if (sipTrunk != null) { * 我的部门以及授权给我的部门
MainContext.getCache().putSystemByIdAndOrgi(sipTrunk.getId(), sipTrunk.getOrgi(), sipTrunk); */
} public static List<String> getAuthOrgan(UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, User user) {
return sipTrunk; List<UserRole> userRole = userRoleRes.findByOrgiAndUser(user.getOrgi(), user);
} ArrayList<String> organList = new ArrayList<>();
if (userRole.size() > 0) {
/** for (UserRole userTemp : userRole) {
* 我的部门以及授权给我的部门 UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid(
* user.getOrgi(),
* @param userRoleRes userTemp.getRole().getId());
* @param callOutRoleRes if (roleOrgan != null) {
* @param user if (StringUtils.isNotBlank(roleOrgan.getOrganid())) {
* @return String[] organ = roleOrgan.getOrganid().split(",");
*/ Collections.addAll(organList, organ);
public static List<String> getAuthOrgan(UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, User user) {
List<UserRole> userRole = userRoleRes.findByOrgiAndUser(user.getOrgi(), user); }
ArrayList<String> organList = new ArrayList<String>(); }
if (userRole.size() > 0) { }
for (UserRole userTemp : userRole) { }
UKefuCallOutRole roleOrgan = callOutRoleRes.findByOrgiAndRoleid(
user.getOrgi(), getUserProxy().attachOrgansPropertiesForUser(user);
userTemp.getRole().getId()); if (user.getAffiliates().size() > 0) {
if (roleOrgan != null) { organList.addAll(user.getAffiliates());
if (StringUtils.isNotBlank(roleOrgan.getOrganid())) { }
String[] organ = roleOrgan.getOrganid().split(",");
for (int i = 0; i < organ.length; i++) { return organList;
organList.add(organ[i]); }
}
/**
} * 我的部门以及授权给我的部门 - 批次
} */
} public static List<JobDetail> getBatchList(JobDetailRepository batchRes, final User user) {
}
//final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user);
getUserProxy().attachOrgansPropertiesForUser(user);
if (user.getAffiliates().size() > 0) { final List<String> organList = CallCenterUtils.getExistOrgan(user);
for (final String organ : user.getAffiliates()) {
organList.add(organ); return batchRes.findAll((Specification<JobDetail>) (root, query, cb) -> {
} List<Predicate> list = new ArrayList<>();
} In<Object> in = cb.in(root.get("organ"));
return organList; 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) {
* @param batchRes in.value(id);
* @param userRoleRes }
* @param callOutRoleRes } else {
* @param user in.value(Constants.CSKEFU_SYSTEM_NO_DAT);
* @return }
*/ list.add(in);
public static List<JobDetail> getBatchList(JobDetailRepository batchRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) {
Predicate[] p = new Predicate[list.size()];
//final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); return cb.and(list.toArray(p));
});
final List<String> organList = CallCenterUtils.getExistOrgan(user); }
List<JobDetail> batchList = batchRes.findAll(new Specification<JobDetail>() { /**
@Override * 我的部门以及授权给我的部门 - 筛选表单
public Predicate toPredicate( */
Root<JobDetail> root, CriteriaQuery<?> query, public static List<FormFilter> getFormFilterList(FormFilterRepository filterRes, final User user) {
CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>(); //final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user);
In<Object> in = cb.in(root.get("organ"));
final List<String> organList = CallCenterUtils.getExistOrgan(user);
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())); return filterRes.findAll((Specification<FormFilter>) (root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
if (organList.size() > 0) { In<Object> in = cb.in(root.get("organ"));
for (String id : organList) { list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi()));
in.value(id);
} if (organList.size() > 0) {
} else {
in.value(Constants.CSKEFU_SYSTEM_NO_DAT); for (String id : organList) {
} in.value(id);
list.add(in); }
} else {
Predicate[] p = new Predicate[list.size()]; in.value(Constants.CSKEFU_SYSTEM_NO_DAT);
return cb.and(list.toArray(p)); }
} list.add(in);
});
Predicate[] p = new Predicate[list.size()];
return batchList; return cb.and(list.toArray(p));
} });
}
/**
* 我的部门以及授权给我的部门 - 筛选表单 /**
* * 我的部门以及授权给我的部门 - 活动
* @param filterRes */
* @param userRoleRes public static List<JobDetail> getActivityList(JobDetailRepository batchRes, final User user) {
* @param callOutRoleRes
* @param user //final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user);
* @return
*/ final List<String> organList = CallCenterUtils.getExistOrgan(user);
public static List<FormFilter> getFormFilterList(FormFilterRepository filterRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) {
return batchRes.findAll((Specification<JobDetail>) (root, query, cb) -> {
//final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); List<Predicate> list = new ArrayList<>();
In<Object> in = cb.in(root.get("organ"));
final List<String> organList = CallCenterUtils.getExistOrgan(user);
list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi()));
List<FormFilter> formFilterList = filterRes.findAll(new Specification<FormFilter>() { list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.ACTIVE.toString()));
@Override
public Predicate toPredicate( if (organList.size() > 0) {
Root<FormFilter> root, CriteriaQuery<?> query,
CriteriaBuilder cb) { for (String id : organList) {
List<Predicate> list = new ArrayList<Predicate>(); in.value(id);
In<Object> in = cb.in(root.get("organ")); }
} else {
list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); in.value(Constants.CSKEFU_SYSTEM_NO_DAT);
}
if (organList.size() > 0) { list.add(in);
for (String id : organList) { Predicate[] p = new Predicate[list.size()];
in.value(id); return cb.and(list.toArray(p));
} });
} else { }
in.value(Constants.CSKEFU_SYSTEM_NO_DAT);
} /**
list.add(in); * 查询条件下拉信息返回
*/
Predicate[] p = new Predicate[list.size()]; public static void getAllCallOutList(ModelMap map, User user, String ownerdept, String actid) {
return cb.and(list.toArray(p)); 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);
return formFilterList; OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class);
}
List<JobDetail> activityList = CallCenterUtils.getActivityList(batchRes, user);
/** List<SaleStatus> salestatusList = new ArrayList<>();
* 我的部门以及授权给我的部门 - 活动 for (JobDetail act : activityList) {
* List<SaleStatus> salestastus = MainContext.getContext().getBean(
* @param batchRes SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid());
* @param userRoleRes salestatusList.addAll(salestastus);
* @param callOutRoleRes
* @param user }
* @return LinkedHashSet<SaleStatus> set = new LinkedHashSet<>(salestatusList.size());
*/ set.addAll(salestatusList);
public static List<JobDetail> getActivityList(JobDetailRepository batchRes, UserRoleRepository userRoleRes, UKefuCallOutRoleRepository callOutRoleRes, final User user) { salestatusList.clear();
salestatusList.addAll(set);
//final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user); map.put("salestatusList", salestatusList);
map.put("batchList", CallCenterUtils.getBatchList(batchRes, user));
final List<String> organList = CallCenterUtils.getExistOrgan(user); map.put("activityList", CallCenterUtils.getActivityList(batchRes, user));
map.put("formFilterList", CallCenterUtils.getFormFilterList(filterRes, user));
List<JobDetail> activityList = batchRes.findAll(new Specification<JobDetail>() { if (StringUtils.isBlank(ownerdept)) {
@Override
public Predicate toPredicate( map.addAttribute(
Root<JobDetail> root, CriteriaQuery<?> query, "owneruserList",
CriteriaBuilder cb) { getUserProxy().findByOrganAndOrgiAndDatastatus(
List<Predicate> list = new ArrayList<Predicate>(); Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false));
In<Object> in = cb.in(root.get("organ")); } else {
map.addAttribute(
list.add(cb.equal(root.get("orgi").as(String.class), user.getOrgi())); "owneruserList", getUserProxy().findByOrganAndOrgiAndDatastatus(ownerdept, user.getOrgi(), false));
list.add(cb.equal(root.get("tasktype").as(String.class), MainContext.TaskType.ACTIVE.toString()));
}
if (organList.size() > 0) { map.addAttribute(
"skillGroups", organRes.findAllById(CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user)));
for (String id : organList) { map.put(
in.value(id); "taskList", MainContext.getContext().getBean(UKefuCallOutTaskRepository.class).findByActidAndOrgi(
} actid,
} else { user.getOrgi()));
in.value(Constants.CSKEFU_SYSTEM_NO_DAT); map.put(
} "allUserList",
list.add(in); MainContext.getContext().getBean(UserRepository.class).findByOrgiAndDatastatus(user.getOrgi(), false));
//JobDetail act = batchRes.findByIdAndOrgi(actid, user.getOrgi());
Predicate[] p = new Predicate[list.size()]; //if(act != null){
return cb.and(list.toArray(p)); // map.put("salestatusList",MainContext.getContext().getBean(SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid()));
} //}
}); map.addAttribute("statusList", Dict.getInstance().getDic("com.dic.callout.activity"));
}
return activityList;
} /**
* 指定活动已设置的分配数
/** */
* 查询条件下拉信息返回 public static void getNamenum(ModelMap map, String activityid, User user) {
*
* @param map CallAgentRepository callAgentRes = MainContext.getContext().getBean(CallAgentRepository.class);
* @param user
* @param ownerdept List<CallAgent> actList = callAgentRes.findByOrgiAndActid(user.getOrgi(), activityid);
* @param actid int namenum = 0;
*/ if (actList.size() > 0) {
public static void getAllCallOutList(ModelMap map, User user, String ownerdept, String actid) { for (CallAgent callAgent : actList) {
JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class); if (callAgent.getDisnum() > 0) {
UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); namenum = namenum + callAgent.getDisnum();
UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); }
FormFilterRepository filterRes = MainContext.getContext().getBean(FormFilterRepository.class); }
OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); }
map.put("namenum", namenum);
List<JobDetail> activityList = CallCenterUtils.getActivityList(batchRes, userRoleRes, callOutRoleRes, user); }
List<SaleStatus> salestatusList = new ArrayList<>();
for (JobDetail act : activityList) { /**
List<SaleStatus> salestastus = MainContext.getContext().getBean( * 查询目前存在的部门
SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid()); * 已分配部门的坐席如果部门被删之后这个方法可以把这些用户过滤掉
salestatusList.addAll(salestastus); */
public static List<String> getExistOrgan(User user) {
}
LinkedHashSet<SaleStatus> set = new LinkedHashSet<SaleStatus>(salestatusList.size()); UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class);
set.addAll(salestatusList); UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class);
salestatusList.clear(); OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class);
salestatusList.addAll(set);
map.put("salestatusList", salestatusList); final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user);
map.put("batchList", CallCenterUtils.getBatchList(batchRes, userRoleRes, callOutRoleRes, user));
map.put("activityList", CallCenterUtils.getActivityList(batchRes, userRoleRes, callOutRoleRes, user)); List<Organ> organAllList = organRes.findByOrgi(user.getOrgi());
map.put("formFilterList", CallCenterUtils.getFormFilterList(filterRes, userRoleRes, callOutRoleRes, user));
if (StringUtils.isBlank(ownerdept)) { final List<String> tempList = new ArrayList<>();
map.addAttribute( for (String organid : organList) {
"owneruserList", for (Organ organ : organAllList) {
getUserProxy().findByOrganAndOrgiAndDatastatus( if (organid.equals(organ.getId())) {
Constants.CSKEFU_SYSTEM_NO_DAT, user.getOrgi(), false)); tempList.add(organid);
} else { }
map.addAttribute( }
"owneruserList", getUserProxy().findByOrganAndOrgiAndDatastatus(ownerdept, user.getOrgi(), false)); }
return tempList;
} }
map.addAttribute(
"skillGroups", organRes.findAll(CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user))); /**
map.put( * 分配给坐席的名单单个名单回收到池子
"taskList", MainContext.getContext().getBean(UKefuCallOutTaskRepository.class).findByActidAndOrgi( */
actid, public static void getAgentRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) {
user.getOrgi()));
map.put( UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class);
"allUserList", JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class);
MainContext.getContext().getBean(UserRepository.class).findByOrgiAndDatastatus(user.getOrgi(), false)); UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(
//JobDetail act = batchRes.findByIdAndOrgi(actid, user.getOrgi()); UKefuCallOutFilterRepository.class);
//if(act != null){
// map.put("salestatusList",MainContext.getContext().getBean(SaleStatusRepository.class).findByOrgiAndActivityid(user.getOrgi(), act.getDicid())); //修改拨打任务
//} if (task != null) {
map.addAttribute("statusList", Dict.getInstance().getDic("com.dic.callout.activity")); task.setAssigned(task.getAssigned() - 1);//分配到坐席数
} task.setNotassigned(task.getNotassigned() + 1);//未分配数
task.setRenum(task.getRenum() + 1);//回收到池子数
/** callOutTaskRes.save(task);
* 指定活动已设置的分配数 }
*
* @param map //修改批次
* @param activityid if (batch != null) {
* @param user batch.setAssigned(batch.getAssigned() - 1);//已分配
*/ batch.setNotassigned(batch.getNotassigned() + 1);//未分配
public static void getNamenum(ModelMap map, String activityid, User user) { batchRes.save(batch);
}
CallAgentRepository callAgentRes = MainContext.getContext().getBean(CallAgentRepository.class);
//修改筛选记录
List<CallAgent> actList = callAgentRes.findByOrgiAndActid(user.getOrgi(), activityid); if (ukefuCallOutFilter != null) {
int namenum = 0; ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数
if (actList.size() > 0) { ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数
for (CallAgent callAgent : actList) { ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数
if (callAgent.getDisnum() > 0) { callOutFilterRes.save(ukefuCallOutFilter);
namenum = namenum + callAgent.getDisnum(); }
} }
}
} /**
map.put("namenum", namenum); * 分配给坐席的名单单个名单回收到部门
} */
public static void getAgentReorgannum(UKefuCallOutTask task, UKefuCallOutFilter ukefuCallOutFilter) {
/**
* 查询目前存在的部门 UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class);
* 已分配部门的坐席如果部门被删之后这个方法可以把这些用户过滤掉 UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(
* UKefuCallOutFilterRepository.class);
* @param user
* @return //修改拨打任务
*/ if (task != null) {
public static List<String> getExistOrgan(User user) { task.setNotassigned(task.getNotassigned() + 1);//未分配数
task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数
UserRoleRepository userRoleRes = MainContext.getContext().getBean(UserRoleRepository.class); task.setReorgannum(task.getReorgannum() + 1);//回收到部门数
UKefuCallOutRoleRepository callOutRoleRes = MainContext.getContext().getBean(UKefuCallOutRoleRepository.class); callOutTaskRes.save(task);
OrganRepository organRes = MainContext.getContext().getBean(OrganRepository.class); }
final List<String> organList = CallCenterUtils.getAuthOrgan(userRoleRes, callOutRoleRes, user);
//修改筛选记录
List<Organ> organAllList = organRes.findByOrgi(user.getOrgi()); if (ukefuCallOutFilter != null) {
ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数
final List<String> tempList = new ArrayList<String>(); ukefuCallOutFilter.setReorgannum(ukefuCallOutFilter.getReorgannum() + 1);//回收到部门数
callOutFilterRes.save(ukefuCallOutFilter);
for (String organid : organList) { }
for (Organ organ : organAllList) { }
if (organid.equals(organ.getId())) {
tempList.add(organid); /**
} * 分配给部门的名单单个名单回收到池子
} */
} public static void getOrganRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) {
return tempList;
} UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class);
JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class);
/** UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean(
* 分配给坐席的名单单个名单回收到池子 UKefuCallOutFilterRepository.class);
*
* @param task //修改拨打任务
* @param batch if (task != null) {
* @param ukefuCallOutFilter task.setAssignedorgan(task.getAssignedorgan() - 1);//分配到部门数
*/ task.setNotassigned(task.getNotassigned() + 1);//未分配数
public static void getAgentRenum(UKefuCallOutTask task, JobDetail batch, UKefuCallOutFilter ukefuCallOutFilter) { task.setRenum(task.getRenum() + 1);//回收到池子数
callOutTaskRes.save(task);
UKefuCallOutTaskRepository callOutTaskRes = MainContext.getContext().getBean(UKefuCallOutTaskRepository.class); }
JobDetailRepository batchRes = MainContext.getContext().getBean(JobDetailRepository.class);
UKefuCallOutFilterRepository callOutFilterRes = MainContext.getContext().getBean( //修改批次
UKefuCallOutFilterRepository.class); if (batch != null) {
batch.setAssigned(batch.getAssigned() - 1);//已分配
//修改拨打任务 batch.setNotassigned(batch.getNotassigned() + 1);//未分配
if (task != null) { batchRes.save(batch);
task.setAssigned(task.getAssigned() - 1);//分配到坐席数 }
task.setNotassigned(task.getNotassigned() + 1);//未分配数
task.setRenum(task.getRenum() + 1);//回收到池子数 //修改筛选记录
callOutTaskRes.save(task); if (ukefuCallOutFilter != null) {
} ukefuCallOutFilter.setAssignedorgan(ukefuCallOutFilter.getAssignedorgan() - 1);//分配到部门数
ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数
//修改批次 ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数
if (batch != null) { callOutFilterRes.save(ukefuCallOutFilter);
batch.setAssigned(batch.getAssigned() - 1);//已分配 }
batch.setNotassigned(batch.getNotassigned() + 1);//未分配 }
batchRes.save(batch);
} /**
* 获取指定活动已分配的名单数
//修改筛选记录 */
if (ukefuCallOutFilter != null) { public static int getActDisnum(@Valid String actid, @Valid int p, @Valid int ps) {
ukefuCallOutFilter.setAssigned(ukefuCallOutFilter.getAssigned() - 1);//分配给坐席数 BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
ukefuCallOutFilter.setRenum(ukefuCallOutFilter.getRenum() + 1);//回收到池子数 queryBuilder.must(termQuery("actid", actid));// 活动ID
ukefuCallOutFilter.setNotassigned(ukefuCallOutFilter.getNotassigned() + 1);//未分配数 queryBuilder.mustNot(termQuery("status", MainContext.NamesDisStatusType.NOT.toString()));
callOutFilterRes.save(ukefuCallOutFilter); PageImpl<UKDataBean> dataList = SearchTools.search(queryBuilder, p, ps);
} return dataList.getContent().size();
} }
/** public static UserProxy getUserProxy() {
* 分配给坐席的名单单个名单回收到部门 if (userProxy == null) {
* userProxy = MainContext.getContext().getBean(UserProxy.class);
* @param task }
* @param ukefuCallOutFilter return userProxy;
*/ }
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<UKDataBean> 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;
}
}