add duplicated check for member sign

This commit is contained in:
Sola
2015-12-26 15:55:47 +08:00
parent 1e3a0754a4
commit ccdffd01d7

View File

@@ -32,17 +32,24 @@ public class SignHandler implements WxMpMessageHandler {
String msg = wxMessage.getContent(); String msg = wxMessage.getContent();
TextBuilder out = WxMpXmlOutMessage.TEXT().toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()); TextBuilder out = WxMpXmlOutMessage.TEXT().toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName());
Matcher mat = pat.matcher(msg); Matcher mat = pat.matcher(msg);
root:
if (mat.find()) { if (mat.find()) {
int id = Integer.parseInt(mat.group(1)); int id = Integer.parseInt(mat.group(1));
try (Connection conn = SQLCore.ds.getConnection()) { try (Connection conn = SQLCore.ds.getConnection()) {
PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM auth WHERE id=?"); switch (checkID(conn, id)) {
ps.setInt(1, id); case -1:
ResultSet rs = ps.executeQuery(); out.content("无效ID。");
if (rs.next()) { break root;
if (rs.getString("wechat") != null) { case -2:
out.content("该ID已登记过。"); out.content("该ID已登记过。");
} else { break root;
ps = conn.prepareStatement("UPDATE auth SET wechat=? WHERE id=?"); }
if (checkDuplicated(conn, wxMessage.getFromUserName())) {
out.content("你的微信已经登记过。");
break root;
}
PreparedStatement ps = conn.prepareStatement("UPDATE auth SET wechat=? WHERE id=?");
ps.setString(1, wxMessage.getFromUserName()); ps.setString(1, wxMessage.getFromUserName());
ps.setInt(2, id); ps.setInt(2, id);
if (ps.executeUpdate() == 1) { if (ps.executeUpdate() == 1) {
@@ -50,10 +57,6 @@ public class SignHandler implements WxMpMessageHandler {
} else { } else {
out.content("登记失败,请联系管理员。"); out.content("登记失败,请联系管理员。");
} }
}
} else {
out.content("无效ID。");
}
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
out.content("系统异常,请联系管理员。"); out.content("系统异常,请联系管理员。");
@@ -64,4 +67,22 @@ public class SignHandler implements WxMpMessageHandler {
return out.build(); return out.build();
} }
private static int checkID(Connection conn, int id) throws SQLException {
PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM auth WHERE id=?");
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
return rs.getString("wechat") != null ? -2 : 0;
} else {
return -1;
}
}
private static boolean checkDuplicated(Connection conn, String wechat) throws SQLException {
PreparedStatement ps = conn.prepareStatement("SELECT wechat FROM auth WHERE wechat=?");
ps.setString(1, wechat);
ResultSet rs = ps.executeQuery();
return rs.next();
}
} }