diff --git a/pom.xml b/pom.xml
index 1999353..bb143ff 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
WechatTicketSystem
love.sola.netsupport
WechatTicketSystem
- 1.3
+ 1.4-SNAPSHOT
war
diff --git a/src/main/java/love/sola/netsupport/api/stuff/TicketLog.java b/src/main/java/love/sola/netsupport/api/stuff/TicketLog.java
index 8cac701..53d5b2f 100644
--- a/src/main/java/love/sola/netsupport/api/stuff/TicketLog.java
+++ b/src/main/java/love/sola/netsupport/api/stuff/TicketLog.java
@@ -76,7 +76,7 @@ public class TicketLog extends HttpServlet {
AuditReader reader = TableTicket.getAuditReader(s);
Object obj = reader.createQuery()
.forRevisionsOfEntity(Ticket.class, false, true)
- .addOrder(AuditEntity.revisionNumber().asc())
+ .addOrder(AuditEntity.revisionNumber().desc())
.add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime()))
.setFirstResult(first)
.setMaxResults(limit)
diff --git a/src/main/java/love/sola/netsupport/api/stuff/TicketLookup.java b/src/main/java/love/sola/netsupport/api/stuff/TicketLookup.java
index 7465df1..5c39694 100644
--- a/src/main/java/love/sola/netsupport/api/stuff/TicketLookup.java
+++ b/src/main/java/love/sola/netsupport/api/stuff/TicketLookup.java
@@ -2,6 +2,7 @@ package love.sola.netsupport.api.stuff;
import com.google.gson.Gson;
import love.sola.netsupport.api.Response;
+import love.sola.netsupport.enums.Access;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.Operator;
import love.sola.netsupport.pojo.Ticket;
@@ -60,6 +61,9 @@ public class TicketLookup extends HttpServlet {
} else {
block = op.getBlock();
}
+ if (block == 0 && op.getAccess() > Access.LEADER) {
+ return new Response(Response.ResponseCode.PERMISSION_DENIED);
+ }
List list = TableTicket.unsolvedByBlock(block);
return new Response(Response.ResponseCode.OK, list);
} catch (NumberFormatException e) {
diff --git a/src/main/java/love/sola/netsupport/api/user/Register.java b/src/main/java/love/sola/netsupport/api/user/Register.java
index 42db0b0..37f4529 100644
--- a/src/main/java/love/sola/netsupport/api/user/Register.java
+++ b/src/main/java/love/sola/netsupport/api/user/Register.java
@@ -10,7 +10,10 @@ import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.util.Checker;
import love.sola.netsupport.util.ParseUtil;
import love.sola.netsupport.wechat.Command;
+import love.sola.netsupport.wechat.WxMpServlet;
+import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSession;
+import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
import org.hibernate.exception.ConstraintViolationException;
import javax.servlet.ServletException;
@@ -20,6 +23,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import static love.sola.netsupport.util.Checker.*;
@@ -101,6 +108,8 @@ public class Register extends HttpServlet {
String dupKey = e.getConstraintName();
return "Duplicated_" + dupKey.toUpperCase(); // PHONE ACCOUNT WECHAT
}
+ // FIXME: 2015/12/30 Temporary converter
+ converterWithRetry(user);
return "Register_Success";
}
@@ -110,4 +119,45 @@ public class Register extends HttpServlet {
return;
}
+ public static void converterWithRetry(User u) {
+ Throwable last = null;
+ for (int i = 0; i < 3; i++) {
+ try {
+ converter(u);
+ return;
+ } catch (WxErrorException | SQLException e) {
+ last = e;
+ }
+ }
+ last.printStackTrace();
+ try {
+ WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换失败").build());
+ } catch (WxErrorException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void converter(User u) throws WxErrorException, SQLException {
+ try (Connection conn = SQLCore.ds.getConnection()) {
+ PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM `convert` WHERE id=?");
+ ps.setLong(1, u.getId());
+ ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ WxMpServlet.instance.wxMpService
+ .userUpdateGroup(u.getWechatId(), 100L);
+ String old = rs.getString(1);
+ ps = conn.prepareStatement("UPDATE `operators` SET wechat=? WHERE wechat=?");
+ ps.setString(1, u.getWechatId());
+ ps.setString(2, old);
+ if (ps.executeUpdate() == 1) {
+ WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换成功").build());
+ } else {
+ WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("已进行过数据转换").build());
+ }
+ }
+ } catch (SQLException | WxErrorException e) {
+ throw e;
+ }
+ }
+
}
diff --git a/src/main/java/love/sola/netsupport/config/Cortana.java b/src/main/java/love/sola/netsupport/config/Cortana.java
new file mode 100644
index 0000000..2947715
--- /dev/null
+++ b/src/main/java/love/sola/netsupport/config/Cortana.java
@@ -0,0 +1,33 @@
+package love.sola.netsupport.config;
+
+import org.yaml.snakeyaml.Yaml;
+
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * ***********************************************
+ * Created by Sola on 2015/12/29.
+ * Don't modify this source without my agreement
+ * ***********************************************
+ */
+public class Cortana {
+
+
+ public static List entries;
+
+ public static void load() {
+ InputStream in = Lang.class.getClassLoader().getResourceAsStream("cortana.yml");
+ Map root = (Map) new Yaml().load(in);
+
+ }
+
+
+ public static class Compiled {
+ Pattern[] patterns;
+ String[] replies;
+ }
+
+}
diff --git a/src/main/java/love/sola/netsupport/enums/Block.java b/src/main/java/love/sola/netsupport/enums/Block.java
index a881d8b..51f6702 100644
--- a/src/main/java/love/sola/netsupport/enums/Block.java
+++ b/src/main/java/love/sola/netsupport/enums/Block.java
@@ -67,7 +67,7 @@ public class Block {
AVAILABLE[BM_7] = new int[]{100, 216, 317, 417, 517, 617, 717};
AVAILABLE[BM_8] = new int[]{100, 221, 321, 421, 521, 621, 721};
AVAILABLE[BM_9] = new int[]{100, 221, 321, 421, 521, 621};
- AVAILABLE[BM_10] = new int[]{111, 239, 339, 439, 558, 658, 758, 858};
+ AVAILABLE[BM_10] = new int[]{111, 239, 354, 454, 564, 664, 764, 864};
AVAILABLE[BM_11] = new int[]{100, 213, 321, 421, 521, 621, 721, 821};
AVAILABLE[DM_12] = new int[]{119, 221, 321, 421, 521, 621, 720};
AVAILABLE[DM_13] = new int[]{120, 222, 322, 422, 522, 622, 722};
diff --git a/src/main/java/love/sola/netsupport/sql/TableTicket.java b/src/main/java/love/sola/netsupport/sql/TableTicket.java
index 12eb39b..0eccfa1 100644
--- a/src/main/java/love/sola/netsupport/sql/TableTicket.java
+++ b/src/main/java/love/sola/netsupport/sql/TableTicket.java
@@ -92,7 +92,7 @@ public class TableTicket extends SQLCore {
AuditReader reader = getAuditReader(s);
return reader.createQuery()
.forRevisionsOfEntity(Ticket.class, false, true)
- .addOrder(AuditEntity.revisionNumber().asc())
+ .addOrder(AuditEntity.revisionNumber().desc())
.add(AuditEntity.id().eq(tid))
.getResultList()
;
diff --git a/src/main/java/love/sola/netsupport/wechat/Command.java b/src/main/java/love/sola/netsupport/wechat/Command.java
index d3ff4a9..6787759 100644
--- a/src/main/java/love/sola/netsupport/wechat/Command.java
+++ b/src/main/java/love/sola/netsupport/wechat/Command.java
@@ -1,6 +1,8 @@
package love.sola.netsupport.wechat;
import love.sola.netsupport.wechat.handler.*;
+import love.sola.netsupport.wechat.handler.admin.LoginHandler;
+import love.sola.netsupport.wechat.handler.admin.OperatorInfoHandler;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import java.util.HashMap;
@@ -22,6 +24,7 @@ public enum Command {
CANCEL(3, CancelHandler.class),
PROFILE(4, ProfileHandler.class),
LOGIN(10, LoginHandler.class),
+ OPERATOR_INFO(11, OperatorInfoHandler.class),
;
private static final Map ID_MAP = new HashMap<>();
diff --git a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java
index b9507a0..83ee37f 100644
--- a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java
+++ b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java
@@ -2,10 +2,10 @@ package love.sola.netsupport.wechat;
import love.sola.netsupport.config.Settings;
import love.sola.netsupport.wechat.handler.RegisterHandler;
-import love.sola.netsupport.wechat.handler.SignHandler;
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.api.WxConsts;
import me.chanjar.weixin.common.util.StringUtils;
import me.chanjar.weixin.mp.api.*;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
@@ -31,7 +31,7 @@ public class WxMpServlet extends HttpServlet {
public static WxMpServlet instance;
protected WxMpInMemoryConfigStorage config;
- protected WxMpService wxMpService;
+ public WxMpService wxMpService;
protected WxMpMessageRouter wxMpMessageRouter;
protected CheckSpamMatcher checkSpamMatcher;
@@ -56,13 +56,12 @@ public class WxMpServlet extends HttpServlet {
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
wxMpMessageRouter.rule()
.async(false)
- .msgType("event")
- .event("subscribe")
+ .msgType(WxConsts.XML_MSG_EVENT)
+ .event(WxConsts.EVT_SUBSCRIBE)
.handler(new SubscribeHandler())
.end();
wxMpMessageRouter.rule()
.async(false)
- .msgType("text")
.matcher(new CheckSpamMatcher())
.handler((wxMessage, context, wxMpService1, sessionManager)
-> WxMpXmlOutMessage.TEXT()
@@ -72,7 +71,6 @@ public class WxMpServlet extends HttpServlet {
.end();
wxMpMessageRouter.rule()
.async(false)
- .msgType("text")
.matcher(new RegisterMatcher())
.handler(new RegisterHandler())
.end();
@@ -81,13 +79,13 @@ public class WxMpServlet extends HttpServlet {
} catch (IllegalAccessException | InstantiationException e) {
throw new ServletException(e);
}
- wxMpMessageRouter.rule().async(false).msgType("text").rContent("(?i)^Auth \\d{4}").handler(new SignHandler()).end();
}
public static void registerCommands(WxMpMessageRouter router) throws IllegalAccessException, InstantiationException {
for (Command c : Command.values()) {
WxMpMessageHandler handler = c.handler.newInstance();
- router.rule().async(false).msgType("text").rContent(c.regex).handler(handler).end();
+ router.rule().async(false).msgType(WxConsts.XML_MSG_TEXT).rContent(c.regex).handler(handler).end();
+ router.rule().async(false).msgType(WxConsts.XML_MSG_EVENT).event(WxConsts.EVT_CLICK).eventKey(c.name()).handler(handler).end();
}
}
@@ -117,19 +115,19 @@ public class WxMpServlet extends HttpServlet {
String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw" : request.getParameter("encrypt_type");
- if ("raw".equals(encryptType)) {
- WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
- WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
- if (outMessage == null) {
- outMessage = WxMpXmlOutMessage.TEXT()
- .fromUser(inMessage.getToUserName())
- .toUser(inMessage.getFromUserName())
- .content(lang("Invalid_Operation"))
- .build();
- }
- response.getWriter().write(outMessage.toXml());
- return;
- }
+// if ("raw".equals(encryptType)) {
+// WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
+// WxMpXmlOutMessage outMessage = wxMpMessageRouter.route(inMessage);
+// if (outMessage == null) {
+// outMessage = WxMpXmlOutMessage.TEXT()
+// .fromUser(inMessage.getToUserName())
+// .toUser(inMessage.getFromUserName())
+// .content(lang("Invalid_Operation"))
+// .build();
+// }
+// response.getWriter().write(outMessage.toXml());
+// return;
+// }
if ("aes".equals(encryptType)) {
String msgSignature = request.getParameter("msg_signature");
diff --git a/src/main/java/love/sola/netsupport/wechat/handler/AutoReplyHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/AutoReplyHandler.java
new file mode 100644
index 0000000..f147997
--- /dev/null
+++ b/src/main/java/love/sola/netsupport/wechat/handler/AutoReplyHandler.java
@@ -0,0 +1,26 @@
+package love.sola.netsupport.wechat.handler;
+
+import me.chanjar.weixin.common.exception.WxErrorException;
+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 java.util.Map;
+
+/**
+ * ***********************************************
+ * Created by Sola on 2015/12/29.
+ * Don't modify this source without my agreement
+ * ***********************************************
+ */
+public class AutoReplyHandler implements WxMpMessageHandler {
+
+ @Override
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
+ //TODO auto reply
+ return null;
+ }
+
+}
diff --git a/src/main/java/love/sola/netsupport/wechat/handler/SubscribeHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/SubscribeHandler.java
index 1c50439..f40dff2 100644
--- a/src/main/java/love/sola/netsupport/wechat/handler/SubscribeHandler.java
+++ b/src/main/java/love/sola/netsupport/wechat/handler/SubscribeHandler.java
@@ -1,5 +1,6 @@
package love.sola.netsupport.wechat.handler;
+import love.sola.netsupport.api.user.Register;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableUser;
@@ -38,6 +39,7 @@ public class SubscribeHandler implements WxMpMessageHandler {
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()))));
+ Register.converterWithRetry(u);
} else {
session.setAttribute(Attribute.AUTHORIZED, Command.REGISTER);
session.setAttribute(Attribute.WECHAT, fromUser);
@@ -45,4 +47,5 @@ public class SubscribeHandler implements WxMpMessageHandler {
}
return out.build();
}
+
}
diff --git a/src/main/java/love/sola/netsupport/wechat/handler/LoginHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java
similarity index 97%
rename from src/main/java/love/sola/netsupport/wechat/handler/LoginHandler.java
rename to src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java
index c82507e..667981c 100644
--- a/src/main/java/love/sola/netsupport/wechat/handler/LoginHandler.java
+++ b/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java
@@ -1,4 +1,4 @@
-package love.sola.netsupport.wechat.handler;
+package love.sola.netsupport.wechat.handler.admin;
import love.sola.netsupport.enums.Access;
import love.sola.netsupport.enums.Attribute;
diff --git a/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java
new file mode 100644
index 0000000..a713e59
--- /dev/null
+++ b/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java
@@ -0,0 +1,46 @@
+package love.sola.netsupport.wechat.handler.admin;
+
+import love.sola.netsupport.enums.Access;
+import love.sola.netsupport.pojo.Operator;
+import love.sola.netsupport.sql.TableOperator;
+import me.chanjar.weixin.common.exception.WxErrorException;
+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;
+import static love.sola.netsupport.config.Lang.lang;
+
+/**
+ * ***********************************************
+ * Created by Sola on 2015/12/28.
+ * Don't modify this source without my agreement
+ * ***********************************************
+ */
+public class OperatorInfoHandler implements WxMpMessageHandler {
+
+ @Override
+ public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
+ TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
+ try {
+ Operator op = TableOperator.get(wxMessage.getFromUserName());
+ if (op == null)
+ out.content(lang("Not_Operator"));
+ else if (op.getAccess() == Access.NOLOGIN) {
+ out.content(lang("No_Login"));
+ } else {
+ out.content(format("Operator_Info", op.getId(), op.getName(), op.getAccess(), op.getBlock(), op.getWeek()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ out.content(lang("Login_Error"));
+ }
+ return out.build();
+ }
+
+}
diff --git a/src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/admin/SignHandler.java
similarity index 98%
rename from src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java
rename to src/main/java/love/sola/netsupport/wechat/handler/admin/SignHandler.java
index a11a94b..47e8a8e 100644
--- a/src/main/java/love/sola/netsupport/wechat/handler/SignHandler.java
+++ b/src/main/java/love/sola/netsupport/wechat/handler/admin/SignHandler.java
@@ -1,4 +1,4 @@
-package love.sola.netsupport.wechat.handler;
+package love.sola.netsupport.wechat.handler.admin;
import love.sola.netsupport.sql.SQLCore;
import me.chanjar.weixin.common.exception.WxErrorException;
diff --git a/src/main/java/love/sola/netsupport/wechat/matcher/RegisterMatcher.java b/src/main/java/love/sola/netsupport/wechat/matcher/RegisterMatcher.java
index 6895fbe..eef8974 100644
--- a/src/main/java/love/sola/netsupport/wechat/matcher/RegisterMatcher.java
+++ b/src/main/java/love/sola/netsupport/wechat/matcher/RegisterMatcher.java
@@ -1,13 +1,9 @@
package love.sola.netsupport.wechat.matcher;
-import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableUser;
import me.chanjar.weixin.mp.api.WxMpMessageMatcher;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
-import java.util.HashSet;
-import java.util.Set;
-
/**
* ***********************************************
* Created by Sola on 2015/11/26.
@@ -16,18 +12,9 @@ import java.util.Set;
*/
public class RegisterMatcher implements WxMpMessageMatcher {
- public static Set registered = new HashSet<>();
-
@Override
public boolean match(WxMpXmlMessage message) {
- String fromUser = message.getFromUserName();
- if (registered.contains(fromUser)) {
- return false;
- } else {
- User u = TableUser.getByWechat(fromUser);
- if (u != null) registered.add(u.getWechatId());
- return u == null;
- }
+ return TableUser.getByWechat(message.getFromUserName()) == null;
}
}
diff --git a/src/main/resources/cortana.yml b/src/main/resources/cortana.yml
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml
index 158dea9..6eed633 100644
--- a/src/main/resources/lang.yml
+++ b/src/main/resources/lang.yml
@@ -10,6 +10,7 @@ REGEX_SUBMIT: '^(?i)(Submit)|(报修)|(保修)|(bx)$'
REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$'
REGEX_LOGIN: '^(?i)Authme$'
REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(修改信息)|(xgzl)|(xgxx)$'
+REGEX_OPERATOR_INFO: '^(?i)(OpInfo)|(网维资料)|(wwzl)$'
#Misc
Invalid_Operation: 'Whoops,报修姬找不到你想要的东西啦 (╯‵□′)╯︵┻━┻。'
@@ -45,7 +46,16 @@ Profile_Modify: '> 点此修改资料 <'
Not_Operator: '嘟嘟嘟……'
No_Login: 'Permission Denied.'
Internal_Error: '啊哦,登录失败了哦。'
+#Operator_Info
+Operator_Info: |
+ 网维成员资料:
+ 网维ID: {0,number,#}
+ 姓名: {1}
+ 岗位: {2,choice,0#'Administrator >ω<'|3#值班组长|6#正式成员|7#实习成员|}
+ 值班片区: {3,choice,0#'全图 >ω<'|1#岐头片区|2#北门片区|3#东门片区|4#香灰片区|5#凤翔片区}
+ 值班日: {4,choice,0#'2月30日 >ω<'|1#周一|2#周二|3#周三|4#周四|5#周五|6#周六|7#周日}
+ 若以上信息有误,请及时联系@15-排污-沙子森。
#URL
User_Register_Link: 'http://topaz.sinaapp.com/nm/v1/reg.html?token={0}'
User_Query_Link: 'http://topaz.sinaapp.com/nm/v1/list.html?token={0}'
diff --git a/src/main/resources/menu-op.json b/src/main/resources/menu-op.json
new file mode 100644
index 0000000..42ea9e3
--- /dev/null
+++ b/src/main/resources/menu-op.json
@@ -0,0 +1,47 @@
+{
+ "button": [
+ {
+ "name": "我要",
+ "sub_button": [
+ {
+ "type": "click",
+ "name": "提交报修",
+ "key": "SUBMIT"
+ },
+ {
+ "type": "click",
+ "name": "查询报修",
+ "key": "QUERY"
+ },
+ {
+ "type": "click",
+ "name": "撤销报修",
+ "key": "CANCEL"
+ },
+ {
+ "type": "click",
+ "name": "修改资料",
+ "key": "PROFILE"
+ }
+ ]
+ },
+ {
+ "name": "OP",
+ "sub_button": [
+ {
+ "type": "click",
+ "name": "网维资料",
+ "key": "OPERATOR_INFO"
+ },
+ {
+ "type": "click",
+ "name": "后台登录",
+ "key": "LOGIN"
+ }
+ ]
+ }
+ ],
+ "matchrule": {
+ "group_id": "100",
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/menu.json b/src/main/resources/menu.json
new file mode 100644
index 0000000..697b62a
--- /dev/null
+++ b/src/main/resources/menu.json
@@ -0,0 +1,29 @@
+{
+ "button": [
+ {
+ "name": "我要",
+ "sub_button": [
+ {
+ "type": "click",
+ "name": "提交报修",
+ "key": "SUBMIT"
+ },
+ {
+ "type": "click",
+ "name": "查询报修",
+ "key": "QUERY"
+ },
+ {
+ "type": "click",
+ "name": "撤销报修",
+ "key": "CANCEL"
+ },
+ {
+ "type": "click",
+ "name": "修改资料",
+ "key": "PROFILE"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/test/java/love/sola/netsupport/wechat/TestMessageFormat.java b/src/test/java/love/sola/netsupport/wechat/TestMessageFormat.java
index 49636f3..95360f7 100644
--- a/src/test/java/love/sola/netsupport/wechat/TestMessageFormat.java
+++ b/src/test/java/love/sola/netsupport/wechat/TestMessageFormat.java
@@ -40,4 +40,9 @@ public class TestMessageFormat {
assert "15838838438".equals(MessageFormat.format("{0,number,#}", 15838838438L));
}
+ @Test
+ public void testOpInfo() {
+ assert !Lang.format("Operator_Info", 1541, "Sola", 0, 0, 4).isEmpty();
+ }
+
}