From c0f72f4d702a0bec29e11e69c7a322844e5a2977 Mon Sep 17 00:00:00 2001 From: Sola Date: Thu, 26 Nov 2015 15:58:56 +0800 Subject: [PATCH] use student id as primary key instead. --- src/main/java/love/sola/netsupport/Index.java | 2 + .../love/sola/netsupport/api/GetUser.java | 2 +- .../java/love/sola/netsupport/pojo/User.java | 3 +- .../love/sola/netsupport/sql/TableUser.java | 36 +++++++--- .../sola/netsupport/wechat/WxMpServlet.java | 1 + .../wechat/handler/RegisterHandler.java | 68 ++++++++++++++++--- .../love/sola/netsupport/wechat/TestGson.java | 26 +++++++ .../sola/netsupport/wechat/TestRegex.java | 21 ++++++ 8 files changed, 136 insertions(+), 23 deletions(-) create mode 100644 src/test/java/love/sola/netsupport/wechat/TestGson.java create mode 100644 src/test/java/love/sola/netsupport/wechat/TestRegex.java diff --git a/src/main/java/love/sola/netsupport/Index.java b/src/main/java/love/sola/netsupport/Index.java index a638353..b45dea6 100644 --- a/src/main/java/love/sola/netsupport/Index.java +++ b/src/main/java/love/sola/netsupport/Index.java @@ -1,5 +1,7 @@ package love.sola.netsupport; +import love.sola.netsupport.config.Settings; + import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; diff --git a/src/main/java/love/sola/netsupport/api/GetUser.java b/src/main/java/love/sola/netsupport/api/GetUser.java index decab07..9670290 100644 --- a/src/main/java/love/sola/netsupport/api/GetUser.java +++ b/src/main/java/love/sola/netsupport/api/GetUser.java @@ -45,7 +45,7 @@ public class GetUser extends HttpServlet { out.println(gson.toJson(new Response(Response.ResponseCode.PARAMETER_REQUIRED))); } else if (id != null) { try { - User u = TableUser.getUserById(Integer.parseInt(id)); + User u = TableUser.getUserById(Long.parseLong(id)); if (u == null) out.println(gson.toJson(new Response(Response.ResponseCode.USER_NOT_FOUND))); else diff --git a/src/main/java/love/sola/netsupport/pojo/User.java b/src/main/java/love/sola/netsupport/pojo/User.java index a711c0d..74e96d0 100644 --- a/src/main/java/love/sola/netsupport/pojo/User.java +++ b/src/main/java/love/sola/netsupport/pojo/User.java @@ -14,9 +14,8 @@ import love.sola.netsupport.enums.ISPType; @AllArgsConstructor public class User { - private final int id; + private final long id; private final String name; - private final long studentId; private String netAccount; private ISPType isp; private String wechatId; diff --git a/src/main/java/love/sola/netsupport/sql/TableUser.java b/src/main/java/love/sola/netsupport/sql/TableUser.java index 4ca6a14..b1fc2b2 100644 --- a/src/main/java/love/sola/netsupport/sql/TableUser.java +++ b/src/main/java/love/sola/netsupport/sql/TableUser.java @@ -18,7 +18,6 @@ public class TableUser extends SQLCore { public static final String COLUMN_ID = "id"; public static final String COLUMN_NAME = "name"; - public static final String COLUMN_STUDENT_ID = "studentid"; public static final String COLUMN_NET_ACCOUNT = "netaccount"; public static final String COLUMN_ISP = "isp"; public static final String COLUMN_WECHAT = "wechat"; @@ -29,32 +28,51 @@ public class TableUser extends SQLCore { ps.setString(1, name); ResultSet rs = ps.executeQuery(); if (rs.next()) { - return new User(rs.getInt(COLUMN_ID), + return new User(rs.getLong(COLUMN_ID), rs.getString(COLUMN_NAME), - rs.getLong(COLUMN_STUDENT_ID), rs.getString(COLUMN_NET_ACCOUNT), ISPType.fromId(rs.getInt(COLUMN_ISP)), rs.getString(COLUMN_WECHAT)); } - } catch (SQLException e) { } + } catch (SQLException e) { + e.printStackTrace(); + } return null; } - public static User getUserById(int id) { + public static User getUserById(long id) { try (Connection conn = ds.getConnection()) { PreparedStatement ps = conn.prepareStatement("SELECT * FROM user_info WHERE id=?"); - ps.setInt(1, id); + ps.setLong(1, id); ResultSet rs = ps.executeQuery(); if (rs.next()) { - return new User(rs.getInt(COLUMN_ID), + return new User(rs.getLong(COLUMN_ID), rs.getString(COLUMN_NAME), - rs.getLong(COLUMN_STUDENT_ID), rs.getString(COLUMN_NET_ACCOUNT), ISPType.fromId(rs.getInt(COLUMN_ISP)), rs.getString(COLUMN_WECHAT)); } - } catch (SQLException e) { } + } catch (SQLException e) { + e.printStackTrace(); + } return null; } + public static int updateUser(User user) { + try (Connection conn = ds.getConnection()) { + PreparedStatement ps = conn.prepareStatement("UPDATE user_info SET " + + COLUMN_WECHAT + "=?," + + COLUMN_NET_ACCOUNT + "=?," + + COLUMN_ISP + "=? " + + "WHERE id=?"); + ps.setString(1, user.getWechatId()); + ps.setString(2, user.getNetAccount()); + ps.setInt(3, user.getIsp().id); + ps.setLong(4, user.getId()); + return ps.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); + } + return -1; + } } diff --git a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java index 7bb4aa9..5785aaa 100644 --- a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java +++ b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java @@ -52,6 +52,7 @@ public class WxMpServlet extends HttpServlet { wxMpMessageRouter = new WxMpMessageRouter(wxMpService); wxMpMessageRouter.rule() .async(false) + .msgType("text") .matcher(new CommandMatcher(Command.REGISTER)) .handler(new RegisterHandler()) .interceptor(checkSpamInterceptor) diff --git a/src/main/java/love/sola/netsupport/wechat/handler/RegisterHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/RegisterHandler.java index 8b36aea..c6c1aa6 100644 --- a/src/main/java/love/sola/netsupport/wechat/handler/RegisterHandler.java +++ b/src/main/java/love/sola/netsupport/wechat/handler/RegisterHandler.java @@ -1,6 +1,7 @@ package love.sola.netsupport.wechat.handler; import love.sola.netsupport.pojo.User; +import love.sola.netsupport.sql.TableUser; import love.sola.netsupport.wechat.Command; import love.sola.netsupport.wechat.matcher.CommandMatcher; import me.chanjar.weixin.common.exception.WxErrorException; @@ -22,24 +23,69 @@ import java.util.Map; */ public class RegisterHandler implements WxMpMessageHandler { + public static final String STUDENT_ID_REGEX = "^(2012|2013|2014|2015)[0-9]{9}"; + Map pre_confirm = new HashMap<>(); + Map confirmed = new HashMap<>(); @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()); - String in = wxMessage.getContent(); - String userName = wxMessage.getFromUserName(); - if (in.matches(Command.REGISTER.getRegex())) { - out.content("Welcome, please type your student identification number."); - } else if (pre_confirm.containsKey(userName)) { - //TODO - - } else { - out.content("Illegal Operation."); - CommandMatcher.inCmdUsers.remove(userName); - } + handle(wxMessage.getContent(), wxMessage.getFromUserName(), out); return out.build(); } + private void handle(String in, String userName, TextBuilder out) { + if (in.matches(Command.REGISTER.getRegex())) { + out.content("Welcome, please type your student identification number."); + return; + } + if (pre_confirm.containsKey(userName)) { + User user = pre_confirm.get(userName); + if (in.trim().equals(user.getName())) { + pre_confirm.remove(userName); + confirmed.put(userName, user); + out.content("Confirmed Success.\n" + + "Please enter your ISP."); + } else { + out.content("Validate failed.\n" + + "if you have any issue, please contact administrator.\n" + + "Type 'q' to cancel this operation."); + } + return; + } + if (confirmed.containsKey(userName)) { + User user = pre_confirm.get(userName); + if (user.getIsp() == null) { + //TODO + } + return; + } + if (in.equalsIgnoreCase("q")) { + CommandMatcher.inCmdUsers.remove(userName); + pre_confirm.remove(userName); + confirmed.remove(userName); + out.content("Operation Canceled."); + return; + } + Long sid = checkStudentId(in); + User user; + if (sid == null || (user = TableUser.getUserById(sid)) == null) { + out.content("Invalid student identification number. Type 'q' to cancel this operation."); + return; + } + pre_confirm.put(userName, user); + out.content("Please type your real name to validate."); + } + + private Long checkStudentId(String studentId) { + if (studentId.matches(STUDENT_ID_REGEX)) { + try { + return Long.parseLong(studentId); + } catch (NumberFormatException ignored) { } + } + return null; + } + } diff --git a/src/test/java/love/sola/netsupport/wechat/TestGson.java b/src/test/java/love/sola/netsupport/wechat/TestGson.java new file mode 100644 index 0000000..df00297 --- /dev/null +++ b/src/test/java/love/sola/netsupport/wechat/TestGson.java @@ -0,0 +1,26 @@ +package love.sola.netsupport.wechat; + +import com.google.gson.Gson; +import love.sola.netsupport.config.Settings; +import org.junit.Test; + +/** + * *********************************************** + * Created by Sola on 2015/11/26. + * Don't modify this source without my agreement + * *********************************************** + */ +public class TestGson { + + @Test + public void testGson() { + Gson gson = new Gson(); + Settings settings = new Settings(); + settings.Wechat_AppId = "*"; + settings.Wechat_Secret = "*"; + settings.Wechat_Token = "*"; + settings.Wechat_AesKey = "*"; + System.out.println(gson.toJson(settings)); + } + +} diff --git a/src/test/java/love/sola/netsupport/wechat/TestRegex.java b/src/test/java/love/sola/netsupport/wechat/TestRegex.java new file mode 100644 index 0000000..26bf430 --- /dev/null +++ b/src/test/java/love/sola/netsupport/wechat/TestRegex.java @@ -0,0 +1,21 @@ +package love.sola.netsupport.wechat; + +import org.junit.Test; + +/** + * *********************************************** + * Created by Sola on 2015/11/26. + * Don't modify this source without my agreement + * *********************************************** + */ +public class TestRegex { + + public static final String STUDENT_ID_REGEX = "^(2012|2013|2014|2015)[0-9]{9}"; + + @Test + public void testStudentId() { + System.out.println("2011130201233".matches(STUDENT_ID_REGEX)); + System.out.println("2015130201233".matches(STUDENT_ID_REGEX)); + } + +}