selectByExample(UserExample example);
+
+ User selectByPrimaryKey(String openid);
+
+ int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);
+
+ int updateByExampleWithBLOBs(@Param("record") User record, @Param("example") UserExample example);
+
+ int updateByExample(@Param("record") User record, @Param("example") UserExample example);
+
+ int updateByPrimaryKeySelective(User record);
+
+ int updateByPrimaryKeyWithBLOBs(User record);
+
+ int updateByPrimaryKey(User record);
+}
\ No newline at end of file
diff --git a/dal/src/main/resources/generatorConfig.xml b/dal/src/main/resources/generatorConfig.xml
new file mode 100644
index 0000000..c46c053
--- /dev/null
+++ b/dal/src/main/resources/generatorConfig.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dal/src/main/resources/mybatis/mapper/UserMapper.xml b/dal/src/main/resources/mybatis/mapper/UserMapper.xml
new file mode 100644
index 0000000..39ddc62
--- /dev/null
+++ b/dal/src/main/resources/mybatis/mapper/UserMapper.xml
@@ -0,0 +1,241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ and ${criterion.condition}
+
+
+ and ${criterion.condition} #{criterion.value}
+
+
+ and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+
+
+ and ${criterion.condition}
+
+ #{listItem}
+
+
+
+
+
+
+
+
+
+
+ openid, username, phone
+
+
+ avatar_url
+
+
+
+
+
+ delete from tb_gw_user
+ where openid = #{openid,jdbcType=VARCHAR}
+
+
+ delete from tb_gw_user
+
+
+
+
+
+ insert into tb_gw_user (openid, username, phone,
+ avatar_url)
+ values (#{openid,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR},
+ #{avatarUrl,jdbcType=LONGVARCHAR})
+
+
+ insert into tb_gw_user
+
+
+ openid,
+
+
+ username,
+
+
+ phone,
+
+
+ avatar_url,
+
+
+
+
+ #{openid,jdbcType=VARCHAR},
+
+
+ #{username,jdbcType=VARCHAR},
+
+
+ #{phone,jdbcType=VARCHAR},
+
+
+ #{avatarUrl,jdbcType=LONGVARCHAR},
+
+
+
+
+
+ update tb_gw_user
+
+
+ openid = #{record.openid,jdbcType=VARCHAR},
+
+
+ username = #{record.username,jdbcType=VARCHAR},
+
+
+ phone = #{record.phone,jdbcType=VARCHAR},
+
+
+ avatar_url = #{record.avatarUrl,jdbcType=LONGVARCHAR},
+
+
+
+
+
+
+
+ update tb_gw_user
+ set openid = #{record.openid,jdbcType=VARCHAR},
+ username = #{record.username,jdbcType=VARCHAR},
+ phone = #{record.phone,jdbcType=VARCHAR},
+ avatar_url = #{record.avatarUrl,jdbcType=LONGVARCHAR}
+
+
+
+
+
+ update tb_gw_user
+ set openid = #{record.openid,jdbcType=VARCHAR},
+ username = #{record.username,jdbcType=VARCHAR},
+ phone = #{record.phone,jdbcType=VARCHAR}
+
+
+
+
+
+ update tb_gw_user
+
+
+ username = #{username,jdbcType=VARCHAR},
+
+
+ phone = #{phone,jdbcType=VARCHAR},
+
+
+ avatar_url = #{avatarUrl,jdbcType=LONGVARCHAR},
+
+
+ where openid = #{openid,jdbcType=VARCHAR}
+
+
+ update tb_gw_user
+ set username = #{username,jdbcType=VARCHAR},
+ phone = #{phone,jdbcType=VARCHAR},
+ avatar_url = #{avatarUrl,jdbcType=LONGVARCHAR}
+ where openid = #{openid,jdbcType=VARCHAR}
+
+
+ update tb_gw_user
+ set username = #{username,jdbcType=VARCHAR},
+ phone = #{phone,jdbcType=VARCHAR}
+ where openid = #{openid,jdbcType=VARCHAR}
+
+
\ No newline at end of file
diff --git a/dal/src/main/resources/mybatis/mybatis-config.xml b/dal/src/main/resources/mybatis/mybatis-config.xml
new file mode 100644
index 0000000..3eda75e
--- /dev/null
+++ b/dal/src/main/resources/mybatis/mybatis-config.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..e07be2f
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,8 @@
+FROM java:8
+
+ADD ../target/boot/bootstrap-1.0.0-executable.jar /home
+ADD run.sh /home
+
+EXPOSE 8088
+
+ENTRYPOINT [ "sh", "/home/run.sh" ]
\ No newline at end of file
diff --git a/docker/run.sh b/docker/run.sh
new file mode 100644
index 0000000..9ca6d65
--- /dev/null
+++ b/docker/run.sh
@@ -0,0 +1 @@
+java -jar /home/web-1.0.0.jar
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..b365dd4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,83 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.3.3.RELEASE
+
+ com.love.qn
+ forever
+ 1.0.0
+ pom
+
+
+ 1.8
+ 1.0.0
+
+
+
+
+
+ com.love.qn
+ web
+ ${version}
+
+
+ com.love.qn
+ common
+ ${version}
+
+
+ com.love.qn
+ dal
+ ${version}
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${java.version}
+ ${java.version}
+
+ 3.3
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.20
+
+ true
+ 1
+
+ **/*Tests.java
+ **/*Test.java
+
+
+ **/Abstract*.java
+
+
+
+
+ org.apache.maven.plugins
+ maven-eclipse-plugin
+ 2.6
+
+
+
+
+
+ web
+ common
+ dal
+ bootstrap
+
+
+
diff --git a/web/pom.xml b/web/pom.xml
new file mode 100644
index 0000000..fe68744
--- /dev/null
+++ b/web/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ forever
+ com.love.qn
+ 1.0.0
+ ../pom.xml
+
+ 4.0.0
+ web
+ ${version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.love.qn
+ common
+
+
+ com.love.qn
+ dal
+ 1.0.0
+
+
+
+ dom4j
+ dom4j
+ 1.6.1
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.4
+
+
+
+ com.github.binarywang
+ weixin-java-mp
+ 3.9.0
+ provided
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/main/java/com/qn/controller/HomeController.java b/web/src/main/java/com/qn/controller/HomeController.java
new file mode 100644
index 0000000..516c4ca
--- /dev/null
+++ b/web/src/main/java/com/qn/controller/HomeController.java
@@ -0,0 +1,29 @@
+package com.qn.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Controller
+public class HomeController {
+ /**
+ * 表白
+ */
+ @RequestMapping(value = "/", method = RequestMethod.GET)
+ public void enter(HttpServletResponse response) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ sb.append("");
+ sb.append("欢迎光临QN恋爱中!
");
+ sb.append("此网站没有网页,只为【惊喜女友的微信小程序】提供必要的后台支持,该网页为备案号专用网页。
");
+ // 设置备案号
+ sb.append("浙ICP备2020031991号");
+ sb.append("");
+ response.setStatus(200);
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter().write(sb.toString());
+ response.flushBuffer();
+ }
+}
diff --git a/web/src/main/java/com/qn/controller/TestController.java b/web/src/main/java/com/qn/controller/TestController.java
new file mode 100644
index 0000000..aad78a6
--- /dev/null
+++ b/web/src/main/java/com/qn/controller/TestController.java
@@ -0,0 +1,33 @@
+package com.qn.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Controller
+public class TestController {
+
+ /**
+ * 表白
+ */
+ @RequestMapping(value = "/to/{name}", method = RequestMethod.GET)
+ public void enter(@PathVariable("name") String name, HttpServletResponse response) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ sb.append("");
+ sb.append("");
+ if (name==null || "".equals(name)){
+ name = "王娜";
+ }
+ sb.append(name);
+ sb.append(",I love you!!!
");
+ response.setStatus(200);
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter().write(sb.toString());
+ response.flushBuffer();
+ }
+
+}
diff --git a/web/src/main/java/com/qn/controller/WXTokenController.java b/web/src/main/java/com/qn/controller/WXTokenController.java
new file mode 100644
index 0000000..78156a0
--- /dev/null
+++ b/web/src/main/java/com/qn/controller/WXTokenController.java
@@ -0,0 +1,75 @@
+package com.qn.controller;
+
+import com.qn.controller.utils.MessageUtils;
+import com.qn.utils.SignUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+@Controller
+public class WXTokenController {
+
+ private Logger logger = LoggerFactory.getLogger("WXTokenController");
+
+ /**
+ * 微信TokenCheck
+ */
+ @RequestMapping(value = "/wx", method = RequestMethod.GET)
+ public void wxTokenCheck(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ if (!StringUtils.isEmpty(request.getParameter("signature"))) {
+ String signature = request.getParameter("signature");
+ String timestamp = request.getParameter("timestamp");
+ String nonce = request.getParameter("nonce");
+ String echostr = request.getParameter("echostr");
+ logger.info("signature[{}], timestamp[{}], nonce[{}], echostr[{}]", signature, timestamp, nonce, echostr);
+ if (SignUtils.checkSignature(signature, timestamp, nonce)) {
+ logger.info("数据源为微信后台,将echostr[{}]返回!", echostr);
+ response.getOutputStream().println(echostr);
+ response.flushBuffer();
+ }
+ }else {
+ logger.info("不是微信请求,不操作");
+ }
+
+ }
+
+ /**
+ * 微信TokenCheck
+ */
+ @RequestMapping(value = "/wx", method = RequestMethod.POST)
+ public void wxMessage(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ Map map = MessageUtils.xmlToMap(request);
+ StringBuilder sb = new StringBuilder();
+ map.forEach((x,y) ->
+ sb.append(x + "===" + y + ";"));
+ logger.info("此次微信请求的消息内容为:" + sb.toString());
+ String toUserName = map.get("ToUserName");
+ String fromUserName = map.get("FromUserName");
+ String msgType = map.get("MsgType");
+ String content = map.get("Content");
+ String message = null;
+// HTTPUtils.doPost()
+ if ("text".equals(msgType)){
+ //回复文本信息触发的消息
+ message = MessageUtils.initText(toUserName,fromUserName,"text",fromUserName + "您好!" + content);
+ }else if ("text".equals(msgType)){
+ //关注时触发的消息
+ String event = map.get("Event");
+ if ("subscribe".equals(event)){
+ message = MessageUtils.initText(toUserName,fromUserName,"text","Welcome lmq love nn");
+ }
+ }
+ logger.info("返回微信的数据为" + message);
+ response.setContentType("text/xml;charset=utf-8");
+ response.getWriter().write(message);
+ response.flushBuffer();
+ }
+}
diff --git a/web/src/main/java/com/qn/controller/utils/MessageUtils.java b/web/src/main/java/com/qn/controller/utils/MessageUtils.java
new file mode 100644
index 0000000..b587834
--- /dev/null
+++ b/web/src/main/java/com/qn/controller/utils/MessageUtils.java
@@ -0,0 +1,69 @@
+package com.qn.controller.utils;
+
+import com.thoughtworks.xstream.XStream;
+import model.wx.TextMessage;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MessageUtils {
+ /**
+ * xml转Map
+ * @param request
+ * @return
+ */
+ public static Map xmlToMap(HttpServletRequest request) {
+ Map map = new HashMap<>();
+ SAXReader reader = new SAXReader();
+ ServletInputStream in = null;
+ try{
+ in = request.getInputStream();
+ Document doc = reader.read(in);
+ Element root = doc.getRootElement();
+ List list = root.elements();
+ for (Element e: list){
+ map.put(e.getName(),e.getText());
+ }
+ in.close();
+ }catch (Exception e){
+
+ }
+ return map;
+ }
+
+ /**
+ * 文本对象转换成xml
+ * @param message
+ * @return
+ */
+ public static String textMessageToXml(Object message){
+ XStream xStream = new XStream();
+ xStream.alias("xml",message.getClass());
+ return xStream.toXML(message);
+ }
+
+ /**
+ * 初始化文本信息
+ * @param toUserName
+ * @param fromUserName
+ * @param msgType
+ * @param content
+ * @return
+ */
+ public static String initText(String toUserName,String fromUserName,String msgType,String content){
+ TextMessage textMessage = new TextMessage();
+ textMessage.setFromUserName(toUserName);
+ textMessage.setToUserName(fromUserName);
+ textMessage.setMsgType(msgType);
+ textMessage.setCreateTime(new Date().getTime());
+ textMessage.setContent(content);
+ return MessageUtils.textMessageToXml(textMessage);
+ }
+}