mirror of
https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
synced 2025-10-28 23:55:04 +08:00
improve - subscribe event pop up register links automatically
This commit is contained in:
@@ -59,7 +59,7 @@ public class GetUser extends HttpServlet {
|
||||
return new Response(Response.ResponseCode.UNAUTHORIZED);
|
||||
}
|
||||
Operator op = (Operator) session.getAttribute(Attribute.OPERATOR);
|
||||
if (op.getAccess() != Access.ROOT) {
|
||||
if (op.getAccess() > Access.LEADER) {
|
||||
return new Response(Response.ResponseCode.PERMISSION_DENIED);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ public class Settings {
|
||||
public int Check_Spam_Interval;
|
||||
|
||||
public int User_Session_Max_Inactive;
|
||||
public int User_Wechat_Cache_Expire_Time;
|
||||
|
||||
//No arg constructor for Yaml.loadAs
|
||||
public Settings() { I = this; }
|
||||
|
||||
@@ -72,6 +72,16 @@ public class TableTicket extends SQLCore {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<Ticket> unsolved() {
|
||||
try (Session s = SQLCore.sf.openSession()) {
|
||||
return s.createCriteria(Ticket.class)
|
||||
.add(Restrictions.ne(Ticket.PROPERTY_STATUS, Status.SOLVED))
|
||||
.createCriteria(Ticket.PROPERTY_USER)
|
||||
.list();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<Object[]> track(int tid) {
|
||||
try (Session s = SQLCore.sf.openSession()) {
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
package love.sola.netsupport.sql;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import love.sola.netsupport.config.Settings;
|
||||
import love.sola.netsupport.pojo.User;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* ***********************************************
|
||||
* Created by Sola on 2015/11/10.
|
||||
@@ -28,19 +35,21 @@ public class TableUser extends SQLCore {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static User getByWechat(String wechat) {
|
||||
try (Session s = sf.openSession()) {
|
||||
return (User) s.createCriteria(User.class).add(Restrictions.eq(User.PROPERTY_WECHAT, wechat)).uniqueResult();
|
||||
}
|
||||
}
|
||||
|
||||
public static User getByName(String name) {
|
||||
try (Session s = sf.openSession()) {
|
||||
return (User) s.createCriteria(User.class).add(Restrictions.eq(User.PROPERTY_NAME, name)).uniqueResult();
|
||||
}
|
||||
}
|
||||
|
||||
public static User getByWechat(String wechat) {
|
||||
try {
|
||||
return cache.get(wechat);
|
||||
} catch (ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static int update(User user) {
|
||||
try (Session s = sf.openSession()) {
|
||||
s.beginTransaction();
|
||||
@@ -58,4 +67,23 @@ public class TableUser extends SQLCore {
|
||||
}
|
||||
}
|
||||
|
||||
private static LoadingCache<String, User> cache = CacheBuilder.newBuilder()
|
||||
.concurrencyLevel(4)
|
||||
.maximumSize(4096)
|
||||
.expireAfterWrite(Settings.I.User_Wechat_Cache_Expire_Time, TimeUnit.SECONDS)
|
||||
.build(new ValueLoader());
|
||||
|
||||
private static class ValueLoader extends CacheLoader<String, User> {
|
||||
@Override
|
||||
public User load(String key) throws Exception {
|
||||
return TableUser.getByWechat0(key);
|
||||
}
|
||||
}
|
||||
|
||||
private static User getByWechat0(String wechat) {
|
||||
try (Session s = sf.openSession()) {
|
||||
return (User) s.createCriteria(User.class).add(Restrictions.eq(User.PROPERTY_WECHAT, wechat)).uniqueResult();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package love.sola.netsupport.wechat;
|
||||
|
||||
import love.sola.netsupport.config.Settings;
|
||||
import love.sola.netsupport.wechat.handler.RegisterHandler;
|
||||
import love.sola.netsupport.wechat.handler.SubscribeHandler;
|
||||
import love.sola.netsupport.wechat.matcher.CheckSpamMatcher;
|
||||
import love.sola.netsupport.wechat.matcher.RegisterMatcher;
|
||||
import me.chanjar.weixin.common.util.StringUtils;
|
||||
@@ -56,11 +57,7 @@ public class WxMpServlet extends HttpServlet {
|
||||
.async(false)
|
||||
.msgType("event")
|
||||
.event("subscribe")
|
||||
.handler((wxMessage, context, wxMpService1, sessionManager)
|
||||
-> WxMpXmlOutMessage.TEXT()
|
||||
.fromUser(wxMessage.getToUserName())
|
||||
.toUser(wxMessage.getFromUserName())
|
||||
.content(lang("Event_Subscribe")).build())
|
||||
.handler(new SubscribeHandler())
|
||||
.end();
|
||||
wxMpMessageRouter.rule()
|
||||
.async(false)
|
||||
|
||||
@@ -36,12 +36,12 @@ public class RegisterHandler implements WxMpMessageHandler {
|
||||
WxSession session = WechatSession.get(id, true);
|
||||
if (u != null) {
|
||||
session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE);
|
||||
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
|
||||
session.setAttribute(Attribute.WECHAT, fromUser);
|
||||
session.setAttribute(Attribute.USER, u);
|
||||
out.content(format("Already_Registered", format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone())));
|
||||
} else {
|
||||
session.setAttribute(Attribute.AUTHORIZED, Command.REGISTER);
|
||||
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
|
||||
session.setAttribute(Attribute.WECHAT, fromUser);
|
||||
out.content(format("User_Register", format("User_Register_Link", id)));
|
||||
}
|
||||
return out.build();
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package love.sola.netsupport.wechat.handler;
|
||||
|
||||
import love.sola.netsupport.enums.Attribute;
|
||||
import love.sola.netsupport.pojo.User;
|
||||
import love.sola.netsupport.sql.TableUser;
|
||||
import love.sola.netsupport.wechat.Command;
|
||||
import love.sola.netsupport.wechat.WechatSession;
|
||||
import me.chanjar.weixin.common.exception.WxErrorException;
|
||||
import me.chanjar.weixin.common.session.WxSession;
|
||||
import me.chanjar.weixin.common.session.WxSessionManager;
|
||||
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
|
||||
import me.chanjar.weixin.mp.api.WxMpService;
|
||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
|
||||
import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static love.sola.netsupport.config.Lang.format;
|
||||
|
||||
/**
|
||||
* ***********************************************
|
||||
* Created by Sola on 2015/12/25.
|
||||
* Don't modify this source without my agreement
|
||||
* ***********************************************
|
||||
*/
|
||||
public class SubscribeHandler implements WxMpMessageHandler {
|
||||
|
||||
@Override
|
||||
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
|
||||
TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
|
||||
String fromUser = wxMessage.getFromUserName();
|
||||
User u = TableUser.getByWechat(fromUser);
|
||||
String id = WechatSession.genId();
|
||||
WxSession session = WechatSession.get(id, true);
|
||||
if (u != null) {
|
||||
session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE);
|
||||
session.setAttribute(Attribute.WECHAT, fromUser);
|
||||
session.setAttribute(Attribute.USER, u);
|
||||
out.content(format("Event_Subscribe", format("Already_Registered", format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone()))));
|
||||
} else {
|
||||
session.setAttribute(Attribute.AUTHORIZED, Command.REGISTER);
|
||||
session.setAttribute(Attribute.WECHAT, fromUser);
|
||||
out.content(format("Event_Subscribe", format("User_Register", format("User_Register_Link", id))));
|
||||
}
|
||||
return out.build();
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,6 @@ public class CheckSpamMatcher implements WxMpMessageMatcher {
|
||||
|
||||
private LoadingCache<String, Long> cache = CacheBuilder.newBuilder()
|
||||
.concurrencyLevel(4)
|
||||
.weakKeys()
|
||||
.maximumSize(4096)
|
||||
.expireAfterWrite(Settings.I.Check_Spam_Cache_Expire_Time, TimeUnit.SECONDS)
|
||||
.build(new ValueLoader());
|
||||
|
||||
@@ -11,10 +11,11 @@ REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$'
|
||||
REGEX_LOGIN: '^(?i)Authme$'
|
||||
REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(修改信息)|(xgzl)|(xgxx)$'
|
||||
|
||||
#Event
|
||||
Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n\n若您尚未进行过微信绑定,请发送'绑定'(bd)进行微信绑定"
|
||||
#Misc
|
||||
Invalid_Operation: 'Whoops,报修姬找不到你想要的东西啦 (╯‵□′)╯︵┻━┻。'
|
||||
Message_Spam: '你的打字速度太快了,喝一杯82年的Java压压惊吧。'
|
||||
#Subscribe
|
||||
Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n\n{0}"
|
||||
#Register
|
||||
User_Register: "您尚未进行微信绑定。\n<a href=\"{0}\">>点击这里进行微信绑定操作<</a>"
|
||||
Already_Registered: '您已进行过微信绑定。若是需要更改个人信息,请<a href="{0}"> >点击此处<</a>。'
|
||||
|
||||
Reference in New Issue
Block a user