ContactController.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. /**
  2. * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
  3. */
  4. package com.jeeplus.modules.iim.web;
  5. import java.io.File;
  6. import java.io.IOException;
  7. import java.util.*;
  8. import java.util.concurrent.ExecutorService;
  9. import java.util.concurrent.Executors;
  10. import java.util.concurrent.ThreadPoolExecutor;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import com.alibaba.fastjson.JSON;
  14. import com.alibaba.fastjson.JSONObject;
  15. import com.google.common.collect.Lists;
  16. import com.google.common.collect.Maps;
  17. import com.jeeplus.common.json.AjaxJson;
  18. import com.jeeplus.common.oss.OSSClientUtil;
  19. import com.jeeplus.common.utils.*;
  20. import com.jeeplus.modules.sysuseroffice.entity.Useroffice;
  21. import com.jeeplus.modules.sysuseroffice.service.UserofficeService;
  22. import org.codehaus.jackson.map.ObjectMapper;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.stereotype.Controller;
  25. import org.springframework.ui.Model;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.ResponseBody;
  28. import org.springframework.web.multipart.MultipartFile;
  29. import org.springframework.web.servlet.mvc.support.RedirectAttributes;
  30. import com.jeeplus.common.config.Global;
  31. import com.jeeplus.common.web.BaseController;
  32. import com.jeeplus.modules.iim.entity.Friend;
  33. import com.jeeplus.modules.iim.entity.FriendGroup;
  34. import com.jeeplus.modules.iim.entity.LayFileJsonData;
  35. import com.jeeplus.modules.iim.entity.LayGroup;
  36. import com.jeeplus.modules.iim.entity.LayGroupJsonData;
  37. import com.jeeplus.modules.iim.entity.LayGroupUser;
  38. import com.jeeplus.modules.iim.entity.LayJson;
  39. import com.jeeplus.modules.iim.entity.LayJsonData;
  40. import com.jeeplus.modules.iim.entity.Mine;
  41. import com.jeeplus.modules.iim.service.LayGroupService;
  42. import com.jeeplus.modules.sys.dao.UserDao;
  43. import com.jeeplus.modules.sys.entity.Office;
  44. import com.jeeplus.modules.sys.entity.User;
  45. import com.jeeplus.modules.sys.service.OfficeService;
  46. import com.jeeplus.modules.sys.service.SystemService;
  47. import com.jeeplus.modules.sys.utils.UserUtils;
  48. /**
  49. * 联系人Controller
  50. *
  51. * @author jeeplus(seven修改)
  52. * @version 2016-6-23
  53. */
  54. @Controller
  55. @RequestMapping(value = "${adminPath}/iim/contact")
  56. public class ContactController extends BaseController {
  57. @Autowired
  58. private SystemService systemService;
  59. @Autowired
  60. private LayGroupService layGroupService;
  61. @Autowired
  62. private UserofficeService userofficeService;
  63. @Autowired
  64. private UserDao userDao;
  65. @Autowired
  66. private OfficeService officeService;
  67. private ExecutorService poolExecutor = Executors.newFixedThreadPool(10);
  68. /**
  69. * 打开通讯录
  70. *
  71. * @param user
  72. * @param request
  73. * @param response
  74. * @param model
  75. * @return
  76. */
  77. @RequestMapping(value = { "index", "" })
  78. public String index(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
  79. List<User> list = systemService.findUser(user);
  80. model.addAttribute("list", list);
  81. return "modules/iim/contacts";
  82. }
  83. /**
  84. * 查找
  85. *
  86. * @param u
  87. * @param request
  88. * @param response
  89. * @param model
  90. * @return
  91. */
  92. @RequestMapping(value = "searchUsers")
  93. public String searchUsers(User u, HttpServletRequest request, HttpServletResponse response, Model model) {
  94. User user = UserUtils.getUser();
  95. if(! user.isAdmin()) {
  96. if (StringUtils.isNotBlank(u.getMobile()) || StringUtils.isNotBlank(u.getName())) {
  97. List<User> users = userDao.findFriendByMobileOrName(u);
  98. model.addAttribute("list", users);
  99. }else if(StringUtils.isNotBlank(u.getComId()) && u.getComId().equals("comId")) {
  100. Useroffice useroffice = new Useroffice();
  101. List<Office> companyList = UserUtils.getAllCompany(user);
  102. List companyIds = new ArrayList();
  103. for (Office office : companyList) {
  104. companyIds.add(office.getId());
  105. }
  106. useroffice.setCompanyIds(companyIds);
  107. useroffice.setDelFlag("0");
  108. List<Useroffice> list = new ArrayList<Useroffice>();
  109. if(StringUtils.isEmpty(u.getName())&&StringUtils.isEmpty(u.getMobile())){
  110. list = userofficeService.searchUsers(useroffice);
  111. }
  112. if(StringUtils.isNotEmpty(u.getName())&&StringUtils.isEmpty(u.getMobile())){
  113. useroffice.setName(u.getName());
  114. list = userofficeService.searchUsers(useroffice);
  115. }
  116. if (StringUtils.isEmpty(u.getName())&&StringUtils.isNotEmpty(u.getMobile())) {
  117. useroffice.setMobile(u.getMobile());
  118. list = userofficeService.searchUsers(useroffice);
  119. }
  120. if (StringUtils.isNotEmpty(u.getName())&&StringUtils.isNotEmpty(u.getMobile())) {
  121. useroffice.setName(u.getName());
  122. useroffice.setMobile(u.getMobile());
  123. list = userofficeService.searchUsers(useroffice);
  124. }
  125. List<User> friends = new ArrayList<User>();
  126. for (int i = 0; i < list.size(); i++) {
  127. User u1 = UserUtils.get(list.get(i).getUserId());
  128. if(u1!=null&&u1.getCompany().getName().equals(user.getCompany().getName())&&!u1.getLoginName().equals(user.getLoginName())){
  129. friends.add(u1);
  130. }
  131. }
  132. // 我的好友--->常用联系人
  133. User currentUser = UserUtils.getUser();
  134. friends.addAll(userDao.findFriends(currentUser));
  135. List<User> users = new ArrayList<>();
  136. if (StringUtils.isNotBlank(u.getMobile())) {
  137. if (StringUtils.isNotBlank(u.getName())){
  138. for (User user1:friends){
  139. if (user1.getMobile().equals(u.getMobile())){
  140. if(user1.getName().contains(u.getName())) {
  141. users.add(user1);
  142. }
  143. break;
  144. }
  145. }
  146. }else {
  147. for (User user1:friends){
  148. if (user1.getMobile().equals(u.getMobile())){
  149. users.add(user1);
  150. break;
  151. }
  152. }
  153. }
  154. model.addAttribute("list", users);
  155. }else if (StringUtils.isNotBlank(u.getName())){
  156. for (User user1 : friends) {
  157. if (user1.getName().contains(u.getName())) {
  158. users.add(user1);
  159. }
  160. }
  161. model.addAttribute("list", users);
  162. }else {
  163. users.addAll(friends);
  164. model.addAttribute("list", users);
  165. }
  166. }else {
  167. model.addAttribute("list", null);
  168. }
  169. }else{
  170. List<User> friends = userDao.searchUsers(u);
  171. model.addAttribute("list", friends);
  172. }
  173. /*
  174. User u = UserUtils.getUser();
  175. if(! u.isAdmin()){
  176. user.setCompany(UserUtils.getSelectCompany());
  177. }
  178. List<User> friends = userDao.searchUsers(user);*/
  179. return "modules/iim/search_user";
  180. }
  181. /**
  182. * 添加好友--->常用联系人
  183. */
  184. @RequestMapping(value = "addFriend")
  185. public String addFriend(String ids, RedirectAttributes redirectAttributes) {
  186. String idArray[] = ids.split(",");
  187. User currentUser = UserUtils.getUser();
  188. for (String id : idArray) {
  189. if (userDao.findFriend(currentUser.getId(), id) == null) {
  190. userDao.insertFriend(IdGen.uuid(), currentUser.getId(), id,"0","0");// 添加对方为好友
  191. userDao.insertFriend(IdGen.uuid(), id,
  192. currentUser.getId(),"0","1");//同时把自己添加为对方的好友
  193. }
  194. }
  195. addMessage(redirectAttributes, "添加好友成功");
  196. return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
  197. }
  198. /**
  199. * 删除好友
  200. */
  201. @RequestMapping(value = "delFriend")
  202. public String delFriend(String id, RedirectAttributes redirectAttributes) {
  203. User friend = UserUtils.get(id);
  204. User currentUser = UserUtils.getUser();
  205. if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) != null) {
  206. userDao.deleteFriend(currentUser.getId(), friend.getId());// 删除好友
  207. userDao.deleteFriend(friend.getId(),
  208. currentUser.getId());//同时把自己从对方的好友列表删除
  209. }
  210. return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
  211. }
  212. /**
  213. * 确认通过好友
  214. */
  215. @RequestMapping(value = "friendAudit")
  216. public String friendAudit(String id, RedirectAttributes redirectAttributes) {
  217. User friend = UserUtils.get(id);
  218. User currentUser = UserUtils.getUser();
  219. if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) == null) {
  220. userDao.friendAudit(currentUser.getId(), friend.getId());// 确认通过好友
  221. userDao.friendAudit(friend.getId(),
  222. currentUser.getId());//同时把自己从对方的好友列表确认通过好友
  223. }
  224. return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
  225. }
  226. /**
  227. * 拒绝通过好友
  228. */
  229. @RequestMapping(value = "friendAuditNo")
  230. public String friendAuditNo(String id, RedirectAttributes redirectAttributes) {
  231. User friend = UserUtils.get(id);
  232. User currentUser = UserUtils.getUser();
  233. if (friend != null && userDao.findFriend(currentUser.getId(), friend.getId()) == null) {
  234. userDao.friendAuditNo(currentUser.getId(), friend.getId());// 确认通过好友
  235. userDao.friendAuditNo(friend.getId(),
  236. currentUser.getId());//同时把自己从对方的好友列表确认通过好友
  237. }
  238. return "redirect:" + Global.getAdminPath() + "/iim/contact/myFriends/?repage";
  239. }
  240. /**
  241. * 打开我的好友列表--->常用联系人列表
  242. *
  243. * @param user
  244. * @param request
  245. * @param response
  246. * @param model
  247. * @return
  248. */
  249. @RequestMapping(value = "myFriends")
  250. public String myFriends(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
  251. User currentUser = UserUtils.getUser();
  252. List<User> friends = userDao.findFriends(currentUser);
  253. model.addAttribute("list", friends);
  254. List<User> friendsAudit = userDao.findFriendsAudit(currentUser);
  255. model.addAttribute("listAudit", friendsAudit);
  256. return "modules/iim/myFriends";
  257. }
  258. /**
  259. * 打开我的好友列表--->常用联系人列表
  260. *
  261. * @param user
  262. * @param request
  263. * @param response
  264. * @param model
  265. * @return
  266. */
  267. @RequestMapping(value = "myFriendsAudit")
  268. public String myFriendsAudit(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
  269. User currentUser = UserUtils.getUser();
  270. List<User> friends = userDao.findFriendsAudit(currentUser);
  271. model.addAttribute("list", friends);
  272. return "modules/iim/myFriends";
  273. }
  274. /**
  275. * 打开聊天窗口
  276. *
  277. * @param user
  278. * @param request
  279. * @param response
  280. * @param model
  281. * @return
  282. */
  283. @RequestMapping(value = "layerIM")
  284. public String layerIM(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
  285. List<User> list = systemService.findUser(user);
  286. model.addAttribute("list", list);
  287. return "modules/iim/layerIM";
  288. }
  289. /**
  290. * layim初始化信息
  291. *
  292. * @param user
  293. * @param request
  294. * @param response
  295. * @param model
  296. * @return
  297. */
  298. @RequestMapping(value = "friend")
  299. @ResponseBody
  300. public LayJson getFriend(User user, HttpServletRequest request, HttpServletResponse response, Model model) {
  301. LayJsonData data = new LayJsonData();
  302. data.getFriend().clear();
  303. LayJson j = new LayJson();
  304. j.setCode(0);
  305. // 我的个人信息
  306. Mine m = new Mine();
  307. m.setId(UserUtils.getUser().getId());
  308. m.setUsername(UserUtils.getUser().getName());
  309. m.setStatus("online");
  310. m.setRemark(UserUtils.getUser().getSign());
  311. m.setAvatar(UserUtils.getUser().getPhoto());
  312. data.setMine(m);
  313. // 我的好友--->常用联系人
  314. User currentUser = UserUtils.getUser();
  315. List<User> friends = userDao.findFriends(currentUser);
  316. FriendGroup friendGroup = new FriendGroup();
  317. friendGroup.setGroupname("我的好友");
  318. friendGroup.setId(1);
  319. friendGroup.setOnline(friends.size());
  320. for (User u : friends) {
  321. Friend friend = new Friend();
  322. friend.setId(u.getId());
  323. friend.setUsername(u.getName());
  324. friend.setAvatar(u.getPhoto());
  325. friend.setSign(u.getSign());
  326. friendGroup.getList().add(friend);
  327. }
  328. data.getFriend().add(friendGroup);
  329. // 按部门显示联系人
  330. //List<Office> officeList = officeService.findList(false);
  331. Office company = UserUtils.getSelectCompany();
  332. if(!"1".equals(company.getId())){
  333. List<Office> officeList = officeService.findByParentIdsCompany(UserUtils.getSelectCompany(), UserUtils.getSelectOffice());
  334. int index = 1;
  335. for (Office office : officeList) {
  336. user.setOffice(office);
  337. user.setCompany(UserUtils.getSelectCompany());
  338. List<User> users = userDao.findListByOffice(user);
  339. FriendGroup fgroup = new FriendGroup();
  340. fgroup.setGroupname(office.getName());
  341. fgroup.setOnline(users.size());
  342. fgroup.setId(++index);
  343. for (User u : users) {
  344. if(currentUser.getId().equals(u.getId())){
  345. continue;
  346. }
  347. Friend friend = new Friend();
  348. friend.setId(u.getId());
  349. friend.setAvatar(u.getPhoto());
  350. friend.setUsername(u.getName());
  351. friend.setSign(u.getSign());
  352. fgroup.getList().add(friend);
  353. }
  354. data.getFriend().add(fgroup);
  355. }
  356. }
  357. // 不属于任何部门的联系人
  358. /*user.setOffice(null);
  359. List<User> users = userDao.findListByOffice(user);
  360. FriendGroup group = new FriendGroup();
  361. group.setGroupname("未分组");
  362. group.setOnline(users.size());
  363. group.setId(++index);
  364. for (User u : users) {
  365. Friend friend = new Friend();
  366. friend.setId(u.getLoginName());
  367. friend.setUsername(u.getName());
  368. friend.setAvatar(u.getPhoto());
  369. friend.setSign(u.getSign());
  370. group.getList().add(friend);
  371. }
  372. data.getFriend().add(group);*/
  373. // 用户自己创建的群组和属于的群组
  374. // 查找我属于的群组
  375. List<LayGroup> memberLayGroupList = layGroupService.findGroupList(UserUtils.getUser());
  376. for (LayGroup g : memberLayGroupList) {
  377. data.getGroup().add(g);
  378. }
  379. j.setData(data);
  380. return j;
  381. }
  382. /**
  383. * 群组成员接口
  384. *
  385. * @return
  386. */
  387. @RequestMapping(value = "getMembers")
  388. @ResponseBody
  389. public LayJson getMembers(LayGroup group) {
  390. LayGroupJsonData data = new LayGroupJsonData();
  391. group = layGroupService.get(group.getId());
  392. // 设置群主
  393. data.getOwner().put("username", group.getCreateBy().getName());
  394. data.getOwner().put("id", group.getCreateBy().getId());
  395. data.getOwner().put("avatar", group.getCreateBy().getPhoto());
  396. data.getOwner().put("sign", group.getCreateBy().getSign());
  397. // 将群主添加到群聊第一个
  398. List<LayGroupUser> zlist = group.getLayGroupUserList();
  399. for (LayGroupUser lgUser : zlist) {
  400. Friend friend = new Friend();
  401. friend.setUsername(lgUser.getUser().getName());
  402. friend.setId(lgUser.getUser().getId());
  403. friend.setAvatar(lgUser.getUser().getPhoto());
  404. friend.setSign(lgUser.getUser().getSign());
  405. data.getList().add(friend);
  406. }
  407. LayJson j = new LayJson();
  408. j.setData(data);
  409. return j;
  410. }
  411. @ResponseBody
  412. @RequestMapping(value = { "uploadImage", "uploadFile" })
  413. public String uploadImage(HttpServletRequest request, HttpServletResponse response, MultipartFile file)
  414. throws IllegalStateException, IOException {
  415. String filepath = "";
  416. String content = null;
  417. LayFileJsonData data = new LayFileJsonData();
  418. String contentType = "";
  419. // 判断文件是否为空
  420. if (!file.isEmpty()) {
  421. contentType = file.getContentType();
  422. // 文件保存路径
  423. String realPath ="messages/"+DateUtils.formatDate(new Date())+"/"+ UserUtils.getPrincipal() + "/";
  424. OSSClientUtil ossUtil = new OSSClientUtil();
  425. String newName = System.currentTimeMillis()+"-"+file.getOriginalFilename();
  426. ossUtil.uploadFile2OSS(file.getInputStream(),realPath,newName);
  427. filepath = Global.getAliDownloadUrl() + "/" + realPath + newName;
  428. data.setName(file.getOriginalFilename());
  429. data.setSrc(filepath);
  430. }
  431. ObjectMapper mapper = new ObjectMapper();
  432. HashMap<String, Object> map = new HashMap<String, Object>();
  433. map.put("code", "0");
  434. map.put("data", data);
  435. content = mapper.writeValueAsString(map);
  436. return content;
  437. }
  438. @RequestMapping(value = "friendStatus")
  439. @ResponseBody
  440. public AjaxJson getFriendStatus(User user,boolean flag,String status, HttpServletRequest request, HttpServletResponse response, Model model) {
  441. AjaxJson data = new AjaxJson();
  442. StringBuilder stringBuilder = new StringBuilder();
  443. // 我的好友--->常用联系人
  444. User currentUser = UserUtils.getUser();
  445. List<User> friends = userDao.findFriends(currentUser);
  446. List<String> ids = null;
  447. if(friends!=null&&friends.size()>0) {
  448. ids = new ArrayList<>(friends.size());
  449. for (User u : friends) {
  450. if ("online".equals(SmackUtils.IsUserOnLine(u.getId()))) {
  451. stringBuilder.append(u.getId()).append(",");
  452. }
  453. ids.add(u.getId());
  454. }
  455. }
  456. // 按部门显示联系人
  457. //List<Office> officeList = officeService.findList(false);
  458. Office company = UserUtils.getSelectCompany();
  459. if(!"1".equals(company.getId())){
  460. List<Office> officeList = officeService.findByParentIdsCompany(UserUtils.getSelectCompany(), UserUtils.getSelectOffice());
  461. for (Office office : officeList) {
  462. user.setOffice(office);
  463. user.setCompany(UserUtils.getSelectCompany());
  464. List<User> users = userDao.findListByOffice(user);
  465. for (User u : users) {
  466. if((ids!=null&&ids.contains(u.getId()))||currentUser.getId().equals(u.getId())){
  467. continue;
  468. }
  469. // if("online".equals(SmackUtils.IsUserOnLine(u.getId()))){
  470. // stringBuilder.append(u.getId()).append(",");
  471. // }
  472. }
  473. }
  474. }
  475. final String users = stringBuilder.toString();
  476. data.getBody().put("userStr", users);
  477. if(flag){
  478. if(StringUtils.isBlank(status)){
  479. status = "online";
  480. }
  481. final JSONObject body = new JSONObject();
  482. body.put("id",currentUser.getId());
  483. body.put("status",status);
  484. final String string = body.toJSONString();
  485. if(StringUtils.isNotBlank(users)) {
  486. poolExecutor.execute(new Runnable() {
  487. @Override
  488. public void run() {
  489. String[] split = users.split(",");
  490. Set<String> set = new HashSet<>(split.length * 2);
  491. set.addAll(Arrays.asList(split));
  492. for (String u : set) {
  493. //SmackUtils.sendSmackMessage(u, string, "_online_all_status_");
  494. }
  495. }
  496. });
  497. }
  498. }
  499. return data;
  500. }
  501. }