From b13ec99ddfac2fb90fd10946640c4c81f4684086 Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 21:26:48 +0800 Subject: [PATCH] profile modify command --- .../sola/netsupport/api/ProfileModify.java | 42 +++++++++++++++---- .../love/sola/netsupport/api/Register.java | 1 - .../love/sola/netsupport/wechat/Command.java | 1 + .../wechat/handler/ProfileHandler.java | 42 +++++++++++++++++++ src/main/resources/lang.yml | 6 ++- 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java index 12624a4..d5817a1 100644 --- a/src/main/java/love/sola/netsupport/api/ProfileModify.java +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -2,12 +2,15 @@ package love.sola.netsupport.api; import com.google.gson.Gson; import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.enums.ISP; import love.sola.netsupport.pojo.User; import love.sola.netsupport.sql.SQLCore; +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 me.chanjar.weixin.common.session.WxSession; +import org.hibernate.exception.ConstraintViolationException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -17,6 +20,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import static love.sola.netsupport.util.Checker.*; + /** * *********************************************** * Created by Sola on 2015/12/15. @@ -43,18 +48,39 @@ public class ProfileModify extends HttpServlet { } private Response process(HttpServletRequest request) { - WxSession session = Checker.isAuthorized(request, Command.QUERY); + WxSession session = Checker.isAuthorized(request, Command.PROFILE); if (session == null) { return new Response(Response.ResponseCode.UNAUTHORIZED); } User u = (User) session.getAttribute(Attribute.USER); if (u == null) return new Response(Response.ResponseCode.UNAUTHORIZED); - String isp = request.getParameter("isp"); - String netaccount = request.getParameter("username"); - String block = request.getParameter("block"); - String room = request.getParameter("room"); - String phone = request.getParameter("phone"); - return null; - } + ISP isp = checkISP(request.getParameter("isp")); + String netAccount = checkNetAccount(request.getParameter("username"), isp); + int block = checkBlock(request.getParameter("block")); + int room = checkRoom(request.getParameter("room"), block); + long phone = checkPhoneNumber(request.getParameter("phone")); + if (netAccount != null) { + u.setIsp(isp); + u.setNetAccount(netAccount); + } + if (room != -1) { + u.setBlock(block); + u.setRoom(room); + } + if (phone != -1) { + u.setPhone(phone); + } + try { + TableUser.update(u); + } catch (ConstraintViolationException e) { + String dupKey = e.getConstraintName(); + return new Response(Response.ResponseCode.REQUEST_FAILED, "Duplicated_" + dupKey.toUpperCase()); + } catch (Exception e) { + e.printStackTrace(); + return new Response(Response.ResponseCode.INTERNAL_ERROR, e.getMessage()); + } + session.invalidate(); + return new Response(Response.ResponseCode.OK); + } } diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index c647f0f..f5365e9 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -31,7 +31,6 @@ import static love.sola.netsupport.util.Checker.*; @WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 21) public class Register extends HttpServlet { - private Gson gson = SQLCore.gson; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { diff --git a/src/main/java/love/sola/netsupport/wechat/Command.java b/src/main/java/love/sola/netsupport/wechat/Command.java index fa0e026..2953f34 100644 --- a/src/main/java/love/sola/netsupport/wechat/Command.java +++ b/src/main/java/love/sola/netsupport/wechat/Command.java @@ -20,6 +20,7 @@ public enum Command { QUERY(1, QueryHandler.class), SUBMIT(2, SubmitHandler.class), CANCEL(3, CancelHandler.class), + PROFILE(4, ProfileHandler.class), LOGIN(10, LoginHandler.class), ; diff --git a/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java new file mode 100644 index 0000000..c1b775a --- /dev/null +++ b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java @@ -0,0 +1,42 @@ +package love.sola.netsupport.wechat.handler; + +import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.pojo.User; +import love.sola.netsupport.sql.TableUser; +import love.sola.netsupport.wechat.Command; +import love.sola.netsupport.wechat.WechatSession; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.common.session.WxSession; +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; + +/** + * *********************************************** + * Created by Sola on 2015/12/15. + * Don't modify this source without my agreement + * *********************************************** + */ +public class ProfileHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { + User u = TableUser.getByWechat(wxMessage.getFromUserName()); + String id = WechatSession.genId(); + WxSession session = WechatSession.get(id, true); + session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE); + session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName()); + session.setAttribute(Attribute.USER, u); + TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()); + out.content(format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone())); + return out.build(); + } + +} diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index 699769c..4c95f3e 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -5,10 +5,11 @@ Unknown_Encrypt_Type: 'Unknown encrypt-type.' #Command Regex REGEX_QUERY: '^(?i)(Query)|(查询)|(cx)$' -REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)$' +REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)|(bd)$' REGEX_SUBMIT: '^(?i)(Submit)|(报修)|(bx)$' -REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)$' +REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$' REGEX_LOGIN: '^(?i)Authme$' +REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(xgzl)$' #Event Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n如您在使用中遇到任何问题,请将投诉或建议邮件至loli@sola.love.\n\n请发送'绑定'进行微信绑定" @@ -44,6 +45,7 @@ Internal_Error: '啊哦,登录失败了哦。' User_Register_Link: '您尚未进行微信绑定, 请点击这里进行微信绑定操作。' User_Query_Link: 'http://topaz.sinaapp.com/nm/v1/list.html?token={0}' User_Submit_Link: 'http://topaz.sinaapp.com/nm/v1/rrepair.html?token={0}&name={1}&isp={2}&room={3}&block={4}&phone={5,number,#}' +User_Profile_Link: 'http://topaz.sinaapp.com/nm/v1/profile.html?token={0}&name={1}&isp={2}&account={3}&block={4}&room={5}&phone={6,number,#}' Result_Page: 'http://topaz.sinaapp.com/nm/v1/result.html' Operator_Home_Page: 'CLICK HERE' Operator_Login_Page: ''