From ea9e78936da60dea3b024f8d67aa27b449f9d199 Mon Sep 17 00:00:00 2001 From: Sola Date: Sun, 3 Jan 2016 12:25:56 +0800 Subject: [PATCH] improve operator converting --- .../sola/netsupport/api/user/Register.java | 51 ++++++++++++------- .../sola/netsupport/wechat/WxMpServlet.java | 2 +- .../wechat/handler/SubscribeHandler.java | 3 ++ 3 files changed, 36 insertions(+), 20 deletions(-) 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 41193bb..37f4529 100644 --- a/src/main/java/love/sola/netsupport/api/user/Register.java +++ b/src/main/java/love/sola/netsupport/api/user/Register.java @@ -109,7 +109,7 @@ public class Register extends HttpServlet { return "Duplicated_" + dupKey.toUpperCase(); // PHONE ACCOUNT WECHAT } // FIXME: 2015/12/30 Temporary converter - converter(user); + converterWithRetry(user); return "Register_Success"; } @@ -119,27 +119,17 @@ public class Register extends HttpServlet { return; } - private void converter(User u) { - 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()) { - String old = rs.getString(1); - ps = conn.prepareStatement("UPDATE `operators` SET wechat=? WHERE wechat=?"); - ps.setString(1, u.getWechatId()); - ps.setString(2, old); - ps.executeUpdate(); - WxMpServlet.instance.wxMpService - .userUpdateGroup(u.getWechatId(), 100L); - WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换成功").build()); - return; - } else { + 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; } - } catch (SQLException | WxErrorException e) { - e.printStackTrace(); } + last.printStackTrace(); try { WxMpServlet.instance.wxMpService.customMessageSend(WxMpCustomMessage.TEXT().toUser(u.getWechatId()).content("数据转换失败").build()); } catch (WxErrorException e) { @@ -147,4 +137,27 @@ public class Register extends HttpServlet { } } + 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/wechat/WxMpServlet.java b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java index 40931cb..83ee37f 100644 --- a/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java +++ b/src/main/java/love/sola/netsupport/wechat/WxMpServlet.java @@ -59,7 +59,7 @@ public class WxMpServlet extends HttpServlet { .msgType(WxConsts.XML_MSG_EVENT) .event(WxConsts.EVT_SUBSCRIBE) .handler(new SubscribeHandler()) - .next(); + .end(); wxMpMessageRouter.rule() .async(false) .matcher(new CheckSpamMatcher()) 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(); } + }