You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
5.0 KiB
Java

2 years ago
package com.ibeetl.jlw.service;
import cn.hutool.core.collection.CollectionUtil;
2 years ago
import cn.jlw.token.TokenService;
2 years ago
import cn.jlw.webSocket.WebSocketServer;
import com.ibeetl.admin.core.conf.CacheConfig;
import com.ibeetl.admin.core.conf.WxMpConfig;
2 years ago
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.service.CoreUserService;
import com.ibeetl.jlw.entity.CoreUserWx;
2 years ago
import com.ibeetl.jlw.entity.Student;
2 years ago
import com.ibeetl.jlw.entity.Teacher;
2 years ago
import com.ibeetl.jlw.web.query.CoreUserWxQuery;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.builder.kefu.TextBuilder;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
2 years ago
import java.util.HashMap;
import java.util.List;
2 years ago
import java.util.Map;
2 years ago
import java.util.concurrent.ConcurrentHashMap;
2 years ago
/**
* @author Binary Wang
*/
@Component
public class MsgHandler extends AbstractHandler {
@Autowired
private CoreUserService coreUserService;
@Autowired
private CoreUserWxService coreUserWxService;
2 years ago
@Autowired
private StudentService studentService;
2 years ago
@Autowired
2 years ago
private TeacherService teacherService;
@Autowired
2 years ago
private TokenService tokenService;
@Autowired
private WxMpConfig wxConfig;
2 years ago
2 years ago
/**
*
*/
public static ConcurrentHashMap<String, Map<String, Object>> WE_CHAT_MAP = new ConcurrentHashMap<>();
2 years ago
2 years ago
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService wxMpService,
WxSessionManager sessionManager) {
WeixinService weixinService = (WeixinService) wxMpService;
String fromUser = wxMessage.getFromUser();
String userId = wxMessage.getEventKey();
if (StringUtils.isEmpty(userId)) {
return WxMpXmlOutMessage.TEXT().content("欢迎关注天泽教育").toUser(fromUser)
2 years ago
.fromUser(wxMessage.getToUser())
.build();
}
userId = userId.replace("qrscene_", "");
2 years ago
Map<String, Object> map = new HashMap<>();
2 years ago
//登录
if (userId.contains("login")) {
//登录所包含userId为雪花算法ID
2 years ago
userId = userId.replace("login", "");
CoreUserWxQuery coreUserWxQuery = new CoreUserWxQuery();
coreUserWxQuery.setOpenid(fromUser);
List<CoreUserWx> info = coreUserWxService.getValuesByQueryNotWithPermission(coreUserWxQuery);
if (CollectionUtil.isNotEmpty(info)) {
2 years ago
String token = "";
Student student = studentService.getByUserId(info.get(0).getUserId());
2 years ago
if (student != null) {
token = tokenService.getToken(student);
}else {
Teacher teacher = teacherService.getByUserId(info.get(0).getUserId());
if (teacher !=null) {
token = tokenService.getToken(teacher);
}
}
2 years ago
map.put("type", "login");
map.put("status", "success");
map.put("token", token);
WE_CHAT_MAP.put(userId, map);
// WebSocketServer.sendToUser("token="+token, userId);
2 years ago
return WxMpXmlOutMessage.TEXT().content("登录成功").toUser(fromUser)
.fromUser(wxMessage.getToUser())
.build();
}
2 years ago
map.put("type", "login");
map.put("status", "error");
map.put("token", "登录失败,未绑定账号");
WE_CHAT_MAP.put(userId, map);
2 years ago
return WxMpXmlOutMessage.TEXT().content("登录失败,未绑定账号").toUser(fromUser)
2 years ago
.fromUser(wxMessage.getToUser())
.build();
}
CoreUserWxQuery coreUserWxQuery1 = new CoreUserWxQuery();
coreUserWxQuery1.setOpenid(fromUser);
CoreUserWx info1 = coreUserWxService.getInfo(coreUserWxQuery1);
CoreUserWxQuery coreUserWxQuery2 = new CoreUserWxQuery();
coreUserWxQuery2.setUserId(Long.parseLong(userId));
CoreUserWx info2 = coreUserWxService.getInfo(coreUserWxQuery2);
if (info2 != null || info1 != null) {
2 years ago
map.put("type", "bind");
map.put("status", "error");
map.put("token", "绑定失败,已经绑定");
WE_CHAT_MAP.put(userId, map);
return WxMpXmlOutMessage.TEXT().content("绑定失败,已经绑定").toUser(fromUser)
2 years ago
.fromUser(wxMessage.getToUser())
.build();
}
coreUserWxQuery2.setOpenid(fromUser);
coreUserWxService.add(coreUserWxQuery2);
2 years ago
map.put("type", "bind");
map.put("status", "success");
map.put("token", "绑定成功");
WE_CHAT_MAP.put(userId, map);
// String redirectURI = wxConfig.getCodeBackUrl();
// String s = weixinService.oauth2buildAuthorizationUrl(redirectURI, "snsapi_userinfo", "STATE");
2 years ago
return WxMpXmlOutMessage.TEXT().content("绑定成功").toUser(fromUser)
.fromUser(wxMessage.getToUser())
.build();
}
}