mirror of
https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
synced 2025-10-28 15:45:04 +08:00
Merge branch 'release/1.4-Converter'
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
||||
<name>WechatTicketSystem</name>
|
||||
<groupId>love.sola.netsupport</groupId>
|
||||
<artifactId>WechatTicketSystem</artifactId>
|
||||
<version>1.3</version>
|
||||
<version>1.4-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<Ticket> list = TableTicket.unsolvedByBlock(block);
|
||||
return new Response(Response.ResponseCode.OK, list);
|
||||
} catch (NumberFormatException e) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
33
src/main/java/love/sola/netsupport/config/Cortana.java
Normal file
33
src/main/java/love/sola/netsupport/config/Cortana.java
Normal file
@@ -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<Compiled> entries;
|
||||
|
||||
public static void load() {
|
||||
InputStream in = Lang.class.getClassLoader().getResourceAsStream("cortana.yml");
|
||||
Map<String, Object> root = (Map<String, Object>) new Yaml().load(in);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static class Compiled {
|
||||
Pattern[] patterns;
|
||||
String[] replies;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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};
|
||||
|
||||
@@ -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()
|
||||
;
|
||||
|
||||
@@ -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<Integer, Command> ID_MAP = new HashMap<>();
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
|
||||
//TODO auto reply
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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<String, Object> 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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
0
src/main/resources/cortana.yml
Normal file
0
src/main/resources/cortana.yml
Normal file
@@ -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: '<a href="{0}">> 点此修改资料 <</a>'
|
||||
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}'
|
||||
|
||||
47
src/main/resources/menu-op.json
Normal file
47
src/main/resources/menu-op.json
Normal file
@@ -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",
|
||||
}
|
||||
}
|
||||
29
src/main/resources/menu.json
Normal file
29
src/main/resources/menu.json
Normal file
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user