zj
2025-05-02 01830e44921b187b448d8cce9c9a46b9ad55af43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
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<OnlineChatMessage> 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<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> map = new HashMap<String, Object>();
                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<String> list = new ArrayList<String>(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<String> list = new ArrayList<String>(Arrays.asList(blackMenu.split(",")));
        return list.contains(username);
    }
    
}