package project.web.api; import java.net.URLDecoder; import java.text.SimpleDateFormat; import java.util.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import kernel.exception.BusinessException; import kernel.util.DateUtils; import kernel.util.StringUtils; import kernel.web.BaseAction; import kernel.web.ResultObject; import project.Constants; import project.onlinechat.MessageUser; import project.onlinechat.OnlineChatMessage; import project.onlinechat.OnlineChatMessageService; import project.onlinechat.OnlineChatVisitorMessageService; import project.party.PartyService; import project.party.model.Party; import project.syspara.SysparaService; import project.user.token.TokenService; @RestController @CrossOrigin public class NewOnlineChatController extends BaseAction { private Logger logger = LoggerFactory.getLogger(NewOnlineChatController.class); @Resource private OnlineChatMessageService onlineChatMessageService; @Resource private OnlineChatVisitorMessageService onlineChatVisitorMessageService; @Resource private SysparaService sysparaService; @Resource private PartyService partyService; @Resource private TokenService tokenService; public final String action = "api/newOnlinechat"; @RequestMapping(action + "!list.action") public Object list(HttpServletRequest request) { ResultObject resultObject = new ResultObject(); try { String message_id = request.getParameter("message_id"); String token = request.getParameter("token"); String partyId = tokenService.cacheGet(token); partyId = StringUtils.isNullOrEmpty(partyId) ? this.getIp() : partyId; List list = onlineChatMessageService.cacheGetList(message_id, 10, partyId, "user"); // 首页的时候才更新未读数 if (StringUtils.isNullOrEmpty(message_id)) { MessageUser cacheMessageUser = onlineChatMessageService.cacheMessageUser(partyId); if (cacheMessageUser != null && cacheMessageUser.getUser_unreadmsg() > 0) { if (partyId.indexOf(".") != -1) { onlineChatVisitorMessageService.updateUnread(partyId, "user", "read"); } else { onlineChatMessageService.updateUnread(partyId, "user", "read"); } } } List> data = new ArrayList>(); for (int i = 0; i < list.size(); i++) { Map map = new HashMap(); map.put("id", list.get(i).getId().toString()); map.put("send_receive", list.get(i).getSend_receive()); String type = list.get(i).getType(); map.put("type", type); String content = list.get(i).getContent(); if ("img".equals(type)) { content = Constants.WEB_URL + "/public/showimg!showImg.action?imagePath=" + content; } map.put("content", content); // map.put("createtime", DateUtils.format(list.get(i).getCreateTime(), "MM-dd HH:mm")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); map.put("createtime", sdf.format(list.get(i).getCreateTime())); map.put("delete_status", list.get(i).getDelete_status()); data.add(map); } resultObject.setData(data); } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Exception e) { resultObject.setCode("1"); resultObject.setMsg("Program error!"); logger.error("error:", e); } return resultObject; } @RequestMapping(action + "!unread.action") public Object unread(HttpServletRequest request) { ResultObject resultObject = new ResultObject(); try { int unreadMsg = 0; String token = request.getParameter("token"); String partyId = tokenService.cacheGet(token); partyId = StringUtils.isNullOrEmpty(partyId) ? this.getIp() : partyId; unreadMsg = onlineChatMessageService.unreadMsg(partyId, "user", null); resultObject.setData(unreadMsg); } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Exception e) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", e); } return resultObject; } @RequestMapping(value = action + "!send.action") public Object send(HttpServletRequest request) { ResultObject resultObject = new ResultObject(); try { String content = request.getParameter("content"); String type = request.getParameter("type"); String token = request.getParameter("token"); if (StringUtils.isNullOrEmpty(content.trim()) || StringUtils.isNullOrEmpty(type)) { return resultObject; } content = URLDecoder.decode(content.replaceAll("%(?![0-9a-fA-F]{2})", "%25").replaceAll("\\+", "%2B"),"utf-8"); String loginPartyId = tokenService.cacheGet(token); if (StringUtils.isNullOrEmpty(loginPartyId)) { if (checkVisitorIp()) { return resultObject; } onlineChatVisitorMessageService.saveSend(this.getIp(), type, "send", content, null); } else { if (checkUserBlack(loginPartyId)) { return resultObject; } onlineChatMessageService.saveSend(loginPartyId, type, "send", content, null); } } catch (BusinessException e) { resultObject.setCode("1"); resultObject.setMsg(e.getMessage()); } catch (Exception e) { resultObject.setCode("1"); resultObject.setMsg("程序错误"); logger.error("error:", e); } return resultObject; } /** * 检验游客ip是否是黑名单,true:是,false:否 */ private boolean checkVisitorIp() { String blackMenu = sysparaService.find("online_visitor_black_ip_menu").getValue(); List list = new ArrayList(Arrays.asList(blackMenu.split(","))); return list.contains(this.getIp()); } private boolean checkUserBlack(String loginPartyId) { Party party = partyService.cachePartyBy(loginPartyId, true); String username = party.getUsername(); String blackMenu = sysparaService.find("online_username_black_menu").getValue(); List list = new ArrayList(Arrays.asList(blackMenu.split(","))); return list.contains(username); } }