123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544 |
- /**
- * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
- */
- package com.jeeplus.modules.iim.web;
- import java.io.File;
- import java.io.IOException;
- import java.util.*;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ThreadPoolExecutor;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.google.common.collect.Lists;
- import com.google.common.collect.Maps;
- import com.jeeplus.common.json.AjaxJson;
- import com.jeeplus.common.oss.OSSClientUtil;
- import com.jeeplus.common.utils.*;
- import com.jeeplus.modules.sysuseroffice.entity.Useroffice;
- import com.jeeplus.modules.sysuseroffice.service.UserofficeService;
- import org.codehaus.jackson.map.ObjectMapper;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.servlet.mvc.support.RedirectAttributes;
- import com.jeeplus.common.config.Global;
- import com.jeeplus.common.web.BaseController;
- import com.jeeplus.modules.iim.entity.Friend;
- import com.jeeplus.modules.iim.entity.FriendGroup;
- import com.jeeplus.modules.iim.entity.LayFileJsonData;
- import com.jeeplus.modules.iim.entity.LayGroup;
- import com.jeeplus.modules.iim.entity.LayGroupJsonData;
- import com.jeeplus.modules.iim.entity.LayGroupUser;
- import com.jeeplus.modules.iim.entity.LayJson;
- import com.jeeplus.modules.iim.entity.LayJsonData;
- import com.jeeplus.modules.iim.entity.Mine;
- import com.jeeplus.modules.iim.service.LayGroupService;
- import com.jeeplus.modules.sys.dao.UserDao;
- import com.jeeplus.modules.sys.entity.Office;
- import com.jeeplus.modules.sys.entity.User;
- import com.jeeplus.modules.sys.service.OfficeService;
- import com.jeeplus.modules.sys.service.SystemService;
- import com.jeeplus.modules.sys.utils.UserUtils;
- /**
- * 联系人Controller
- *
- * @author jeeplus(seven修改)
- * @version 2016-6-23
- */
- @Controller
- @RequestMapping(value = "${adminPath}/iim/contact")
- public class ContactController extends BaseController {
- @Autowired
- private SystemService systemService;
- @Autowired
- private LayGroupService layGroupService;
- @Autowired
- private UserofficeService userofficeService;
- @Autowired
- private UserDao userDao;
- @Autowired
- private OfficeService officeService;
- private ExecutorService poolExecutor = Executors.newFixedThreadPool(10);
- /**
- * 打开通讯录
- *
- * @param user
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = { "index", "" })
- public String index(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
- List<User> list = systemService.findUser(user);
- model.addAttribute("list", list);
- return "modules/iim/contacts";
- }
- /**
- * 查找
- *
- * @param u
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = "searchUsers")
- public String searchUsers(User u, HttpServletRequest request, HttpServletResponse response, Model model) {
- User user = UserUtils.getUser();
- if(! user.isAdmin()) {
- if (StringUtils.isNotBlank(u.getMobile()) || StringUtils.isNotBlank(u.getName())) {
- List<User> users = userDao.findFriendByMobileOrName(u);
- model.addAttribute("list", users);
- }else if(StringUtils.isNotBlank(u.getComId()) && u.getComId().equals("comId")) {
- Useroffice useroffice = new Useroffice();
- List<Office> companyList = UserUtils.getAllCompany(user);
- List companyIds = new ArrayList();
- for (Office office : companyList) {
- companyIds.add(office.getId());
- }
- useroffice.setCompanyIds(companyIds);
- useroffice.setDelFlag("0");
- List<Useroffice> list = new ArrayList<Useroffice>();
- if(StringUtils.isEmpty(u.getName())&&StringUtils.isEmpty(u.getMobile())){
- list = userofficeService.searchUsers(useroffice);
- }
- if(StringUtils.isNotEmpty(u.getName())&&StringUtils.isEmpty(u.getMobile())){
- useroffice.setName(u.getName());
- list = userofficeService.searchUsers(useroffice);
- }
- if (StringUtils.isEmpty(u.getName())&&StringUtils.isNotEmpty(u.getMobile())) {
- useroffice.setMobile(u.getMobile());
- list = userofficeService.searchUsers(useroffice);
- }
- if (StringUtils.isNotEmpty(u.getName())&&StringUtils.isNotEmpty(u.getMobile())) {
- useroffice.setName(u.getName());
- useroffice.setMobile(u.getMobile());
- list = userofficeService.searchUsers(useroffice);
- }
- List<User> friends = new ArrayList<User>();
- for (int i = 0; i < list.size(); i++) {
- User u1 = UserUtils.get(list.get(i).getUserId());
- if(u1!=null&&u1.getCompany().getName().equals(user.getCompany().getName())&&!u1.getLoginName().equals(user.getLoginName())){
- friends.add(u1);
- }
- }
- // 我的好友--->常用联系人
- User currentUser = UserUtils.getUser();
- friends.addAll(userDao.findFriends(currentUser));
- List<User> users = new ArrayList<>();
- if (StringUtils.isNotBlank(u.getMobile())) {
- if (StringUtils.isNotBlank(u.getName())){
- for (User user1:friends){
- if (user1.getMobile().equals(u.getMobile())){
- if(user1.getName().contains(u.getName())) {
- users.add(user1);
- }
- break;
- }
- }
- }else {
- for (User user1:friends){
- if (user1.getMobile().equals(u.getMobile())){
- users.add(user1);
- break;
- }
- }
- }
- model.addAttribute("list", users);
- }else if (StringUtils.isNotBlank(u.getName())){
- for (User user1 : friends) {
- if (user1.getName().contains(u.getName())) {
- users.add(user1);
- }
- }
- model.addAttribute("list", users);
- }else {
- users.addAll(friends);
- model.addAttribute("list", users);
- }
- }else {
- model.addAttribute("list", null);
- }
- }else{
- List<User> friends = userDao.searchUsers(u);
- model.addAttribute("list", friends);
- }
- /*
- User u = UserUtils.getUser();
- if(! u.isAdmin()){
- user.setCompany(UserUtils.getSelectCompany());
- }
- List<User> friends = userDao.searchUsers(user);*/
- return "modules/iim/search_user";
- }
- /**
- * 添加好友--->常用联系人
- */
- @RequestMapping(value = "addFriend")
- public String addFriend(String ids, RedirectAttributes redirectAttributes) {
- String idArray[] = ids.split(",");
- User currentUser = UserUtils.getUser();
- for (String id : idArray) {
- if (userDao.findFriend(currentUser.getId(), id) == null) {
- userDao.insertFriend(IdGen.uuid(), currentUser.getId(), id,"0","0");// 添加对方为好友
- userDao.insertFriend(IdGen.uuid(), id,
- currentUser.getId(),"0","1");//同时把自己添加为对方的好友
- }
- }
- addMessage(redirectAttributes, "添加好友成功");
- return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
- }
- /**
- * 删除好友
- */
- @RequestMapping(value = "delFriend")
- public String delFriend(String id, RedirectAttributes redirectAttributes) {
- User friend = UserUtils.get(id);
- User currentUser = UserUtils.getUser();
- if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) != null) {
- userDao.deleteFriend(currentUser.getId(), friend.getId());// 删除好友
- userDao.deleteFriend(friend.getId(),
- currentUser.getId());//同时把自己从对方的好友列表删除
- }
- return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
- }
- /**
- * 确认通过好友
- */
- @RequestMapping(value = "friendAudit")
- public String friendAudit(String id, RedirectAttributes redirectAttributes) {
- User friend = UserUtils.get(id);
- User currentUser = UserUtils.getUser();
- if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) == null) {
- userDao.friendAudit(currentUser.getId(), friend.getId());// 确认通过好友
- userDao.friendAudit(friend.getId(),
- currentUser.getId());//同时把自己从对方的好友列表确认通过好友
- }
- return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
- }
- /**
- * 拒绝通过好友
- */
- @RequestMapping(value = "friendAuditNo")
- public String friendAuditNo(String id, RedirectAttributes redirectAttributes) {
- User friend = UserUtils.get(id);
- User currentUser = UserUtils.getUser();
- if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) == null) {
- userDao.friendAuditNo(currentUser.getId(), friend.getId());// 确认通过好友
- userDao.friendAuditNo(friend.getId(),
- currentUser.getId());//同时把自己从对方的好友列表确认通过好友
- }
- return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
- }
- /**
- * 打开我的好友列表--->常用联系人列表
- *
- * @param user
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = "myFriends")
- public String myFriends(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
- User currentUser = UserUtils.getUser();
- List<User> friends = userDao.findFriends(currentUser);
- model.addAttribute("list", friends);
- List<User> friendsAudit = userDao.findFriendsAudit(currentUser);
- model.addAttribute("listAudit", friendsAudit);
- return "modules/iim/myFriends";
- }
- /**
- * 打开我的好友列表--->常用联系人列表
- *
- * @param user
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = "myFriendsAudit")
- public String myFriendsAudit(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
- User currentUser = UserUtils.getUser();
- List<User> friends = userDao.findFriendsAudit(currentUser);
- model.addAttribute("list", friends);
- return "modules/iim/myFriends";
- }
- /**
- * 打开聊天窗口
- *
- * @param user
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = "layerIM")
- public String layerIM(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
- List<User> list = systemService.findUser(user);
- model.addAttribute("list", list);
- return "modules/iim/layerIM";
- }
- /**
- * layim初始化信息
- *
- * @param user
- * @param request
- * @param response
- * @param model
- * @return
- */
- @RequestMapping(value = "friend")
- @ResponseBody
- public LayJson getFriend(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
- LayJsonData data = new LayJsonData();
- data.getFriend().clear();
- LayJson j = new LayJson();
- j.setCode(0);
- // 我的个人信息
- Mine m = new Mine();
- m.setId(UserUtils.getUser().getId());
- m.setUsername(UserUtils.getUser().getName());
- m.setStatus("online");
- m.setRemark(UserUtils.getUser().getSign());
- m.setAvatar(UserUtils.getUser().getPhoto());
- data.setMine(m);
- // 我的好友--->常用联系人
- User currentUser = UserUtils.getUser();
- List<User> friends = userDao.findFriends(currentUser);
- FriendGroup friendGroup = new FriendGroup();
- friendGroup.setGroupname("我的好友");
- friendGroup.setId(1);
- friendGroup.setOnline(friends.size());
- for (User u : friends) {
- Friend friend = new Friend();
- friend.setId(u.getId());
- friend.setUsername(u.getName());
- friend.setAvatar(u.getPhoto());
- friend.setSign(u.getSign());
- friendGroup.getList().add(friend);
- }
- data.getFriend().add(friendGroup);
- // 按部门显示联系人
- //List<Office> officeList = officeService.findList(false);
- Office company = UserUtils.getSelectCompany();
- if(!"1".equals(company.getId())){
- List<Office> officeList = officeService.findByParentIdsCompany(UserUtils.getSelectCompany(), UserUtils.getSelectOffice());
- int index = 1;
- for (Office office : officeList) {
- user.setOffice(office);
- user.setCompany(UserUtils.getSelectCompany());
- List<User> users = userDao.findListByOffice(user);
- FriendGroup fgroup = new FriendGroup();
- fgroup.setGroupname(office.getName());
- fgroup.setOnline(users.size());
- fgroup.setId(++index);
- for (User u : users) {
- if(currentUser.getId().equals(u.getId())){
- continue;
- }
- Friend friend = new Friend();
- friend.setId(u.getId());
- friend.setAvatar(u.getPhoto());
- friend.setUsername(u.getName());
- friend.setSign(u.getSign());
- fgroup.getList().add(friend);
- }
- data.getFriend().add(fgroup);
- }
- }
- // 不属于任何部门的联系人
- /*user.setOffice(null);
- List<User> users = userDao.findListByOffice(user);
- FriendGroup group = new FriendGroup();
- group.setGroupname("未分组");
- group.setOnline(users.size());
- group.setId(++index);
- for (User u : users) {
- Friend friend = new Friend();
- friend.setId(u.getLoginName());
- friend.setUsername(u.getName());
- friend.setAvatar(u.getPhoto());
- friend.setSign(u.getSign());
- group.getList().add(friend);
- }
- data.getFriend().add(group);*/
- // 用户自己创建的群组和属于的群组
- // 查找我属于的群组
- List<LayGroup> memberLayGroupList = layGroupService.findGroupList(UserUtils.getUser());
- for (LayGroup g : memberLayGroupList) {
- data.getGroup().add(g);
- }
- j.setData(data);
- return j;
- }
- /**
- * 群组成员接口
- *
- * @return
- */
- @RequestMapping(value = "getMembers")
- @ResponseBody
- public LayJson getMembers(LayGroup group) {
- LayGroupJsonData data = new LayGroupJsonData();
- group = layGroupService.get(group.getId());
- // 设置群主
- data.getOwner().put("username", group.getCreateBy().getName());
- data.getOwner().put("id", group.getCreateBy().getId());
- data.getOwner().put("avatar", group.getCreateBy().getPhoto());
- data.getOwner().put("sign", group.getCreateBy().getSign());
- // 将群主添加到群聊第一个
- List<LayGroupUser> zlist = group.getLayGroupUserList();
- for (LayGroupUser lgUser : zlist) {
- Friend friend = new Friend();
- friend.setUsername(lgUser.getUser().getName());
- friend.setId(lgUser.getUser().getId());
- friend.setAvatar(lgUser.getUser().getPhoto());
- friend.setSign(lgUser.getUser().getSign());
- data.getList().add(friend);
- }
- LayJson j = new LayJson();
- j.setData(data);
- return j;
- }
- @ResponseBody
- @RequestMapping(value = { "uploadImage", "uploadFile" })
- public String uploadImage(HttpServletRequest request, HttpServletResponse response, MultipartFile file)
- throws IllegalStateException, IOException {
- String filepath = "";
- String content = null;
- LayFileJsonData data = new LayFileJsonData();
- String contentType = "";
- // 判断文件是否为空
- if (!file.isEmpty()) {
- contentType = file.getContentType();
- // 文件保存路径
- String realPath ="messages/"+DateUtils.formatDate(new Date())+"/"+ UserUtils.getPrincipal() + "/";
- OSSClientUtil ossUtil = new OSSClientUtil();
- String newName = System.currentTimeMillis()+"-"+file.getOriginalFilename();
- ossUtil.uploadFile2OSS(file.getInputStream(),realPath,newName);
- filepath = Global.getAliDownloadUrl() + "/" + realPath + newName;
- data.setName(file.getOriginalFilename());
- data.setSrc(filepath);
- }
- ObjectMapper mapper = new ObjectMapper();
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("code", "0");
- map.put("data", data);
- content = mapper.writeValueAsString(map);
- return content;
- }
- @RequestMapping(value = "friendStatus")
- @ResponseBody
- public AjaxJson getFriendStatus(User user,boolean flag,String status, HttpServletRequest request, HttpServletResponse response, Model model) {
- AjaxJson data = new AjaxJson();
- StringBuilder stringBuilder = new StringBuilder();
- // 我的好友--->常用联系人
- User currentUser = UserUtils.getUser();
- List<User> friends = userDao.findFriends(currentUser);
- List<String> ids = null;
- if(friends!=null&&friends.size()>0) {
- ids = new ArrayList<>(friends.size());
- for (User u : friends) {
- if ("online".equals(SmackUtils.IsUserOnLine(u.getId()))) {
- stringBuilder.append(u.getId()).append(",");
- }
- ids.add(u.getId());
- }
- }
- // 按部门显示联系人
- //List<Office> officeList = officeService.findList(false);
- Office company = UserUtils.getSelectCompany();
- if(!"1".equals(company.getId())){
- List<Office> officeList = officeService.findByParentIdsCompany(UserUtils.getSelectCompany(), UserUtils.getSelectOffice());
- for (Office office : officeList) {
- user.setOffice(office);
- user.setCompany(UserUtils.getSelectCompany());
- List<User> users = userDao.findListByOffice(user);
- for (User u : users) {
- if((ids!=null&&ids.contains(u.getId()))||currentUser.getId().equals(u.getId())){
- continue;
- }
- // if("online".equals(SmackUtils.IsUserOnLine(u.getId()))){
- // stringBuilder.append(u.getId()).append(",");
- // }
- }
- }
- }
- final String users = stringBuilder.toString();
- data.getBody().put("userStr", users);
- if(flag){
- if(StringUtils.isBlank(status)){
- status = "online";
- }
- final JSONObject body = new JSONObject();
- body.put("id",currentUser.getId());
- body.put("status",status);
- final String string = body.toJSONString();
- if(StringUtils.isNotBlank(users)) {
- poolExecutor.execute(new Runnable() {
- @Override
- public void run() {
- String[] split = users.split(",");
- Set<String> set = new HashSet<>(split.length * 2);
- set.addAll(Arrays.asList(split));
- for (String u : set) {
- //SmackUtils.sendSmackMessage(u, string, "_online_all_status_");
- }
- }
- });
- }
- }
- return data;
- }
- }
|