package project.onlinechat.internal; import java.net.URLDecoder; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import kernel.exception.BusinessException; import kernel.util.StringUtils; import kernel.web.ApplicationUtil; import project.onlinechat.MessageUser; import project.onlinechat.OnlineChatMessage; import project.onlinechat.OnlineChatMessageService; import project.onlinechat.OnlineChatVisitorMessageService; import project.tip.TipConstants; import project.tip.TipService; import project.tip.model.Tip; import systemuser.CustomerService; import systemuser.model.Customer; public class OnlineChatVisitorMessageServiceImpl implements OnlineChatVisitorMessageService { private TipService tipService; private CustomerService customerService; private OnlineChatMessageService onlineChatMessageService; @Override public OnlineChatMessage saveSend(String ip, String type, String send_receive, String content, String username) { OnlineChatMessage onlineChatMessage = new OnlineChatMessage(); onlineChatMessage.setType(type); onlineChatMessage.setSend_receive(send_receive); onlineChatMessage.setContent(content); onlineChatMessage.setCreateTime(new Date()); onlineChatMessage.setUsername(username); onlineChatMessage.setIp(ip); ApplicationUtil.executeInsert(onlineChatMessage); List list = onlineChatMessageService.cacheMessage(ip); if (list == null) onlineChatMessageService.putMessage(ip,list=new LinkedList()); list.add(onlineChatMessage); Collections.sort(list,Collections.reverseOrder()); if (onlineChatMessageService.cacheMessageUser(ip) == null) saveCreate(ip,username); switch (send_receive) { case "receive":// 客服发送 updateUnread(ip, "user", "write"); break; case "send":// 用户发送 updateUnread(ip, "customer", "write"); break; } return onlineChatMessage; } /** * 更新未读数 * @param ip * @param user_customer 更新对象,用户,客服 * @param type read:读,write:写 */ public void updateUnread(final String ip, String user_customer, String type) { MessageUser messageUser = onlineChatMessageService.cacheMessageUser(ip); if (messageUser == null) { saveCreate(ip,null); messageUser = onlineChatMessageService.cacheMessageUser(ip); } int removeTipNum = 0; switch (user_customer) { case "user": if ("read".equals(type)) { messageUser.setUser_unreadmsg(0); } else if ("write".equals(type)) { messageUser.setUser_unreadmsg(messageUser.getUser_unreadmsg() + 1); messageUser.setDelete_status(0); } break; case "customer": if ("read".equals(type)) { removeTipNum = messageUser.getCustomer_unreadmsg(); messageUser.setCustomer_unreadmsg(0); } else if ("write".equals(type)) { messageUser.setCustomer_unreadmsg(messageUser.getCustomer_unreadmsg() + 1); messageUser.setDelete_status(0); final String targetUsername = onlineChatMessageService.userSendTarget(ip, new Date(), messageUser.getTarget_username()); if (StringUtils.isNotEmpty(targetUsername) && !targetUsername.equals(messageUser.getTarget_username())) { Customer customer = customerService.cacheByUsername(targetUsername); if (customer != null && customer.getAuto_answer() != null && !StringUtils.isEmptyString(customer.getAuto_answer().trim())) { saveSend(ip, "text", "receive", customer.getAuto_answer(), targetUsername + "_SYSTEM"); } } messageUser.setTarget_username(targetUsername); if (StringUtils.isNotEmpty(targetUsername)) {// 指定的在线客服存在,则发起通知 Tip tip = new Tip(); tip.setBusiness_id(onlineChatMessageService.cacheMessage(ip).get(0).getId().toString()); tip.setModel(TipConstants.ONLINECHAT); tip.setTarget_username(targetUsername); tipService.saveTip(tip); } } break; } onlineChatMessageService.updateMessageUserByIp(messageUser); if (removeTipNum > 0) onlineChatMessageService.removeTips(messageUser.getIp(), removeTipNum); } @Override public MessageUser saveCreate(String ip,String username) { MessageUser messageUser = onlineChatMessageService.cacheMessageUser(ip); if (messageUser == null) onlineChatMessageService.putMessageUser(ip,messageUser=new MessageUser()); messageUser.setIp(ip); messageUser.setDelete_status(0); messageUser.setUpdateTime(new Date()); messageUser.setTarget_username(username); ApplicationUtil.executeSaveOrUpdate(messageUser); return messageUser; } /** * 设置备注 * * @param ip * @param remarks */ public String updateResetRemarks(String ip, String remarks) throws Exception { if (StringUtils.isEmptyString(remarks) || StringUtils.isEmptyString(remarks.trim())) return null; MessageUser messageUser = onlineChatMessageService.cacheMessageUser(ip); if (messageUser == null) throw new BusinessException("用户不存在"); messageUser.setRemarks(URLDecoder.decode(remarks, "utf-8")); onlineChatMessageService.updateMessageUserByIp(messageUser); return remarks; } /** * 获取用户信息 * @param ip * @return */ public Map getUserInfo(String ip) { MessageUser messageUser = this.onlineChatMessageService.cacheMessageUser(ip); Map result = new HashMap(); result.put("partyId", ip); result.put("remarks", messageUser.getRemarks()); return result; } public void setOnlineChatMessageService(OnlineChatMessageService onlineChatMessageService) { this.onlineChatMessageService = onlineChatMessageService; } public void setTipService(TipService tipService) { this.tipService = tipService; } public void setCustomerService(CustomerService customerService) { this.customerService = customerService; } }