wangxiaoming 6 gadi atpakaļ
vecāks
revīzija
005f01f459

+ 3 - 0
watero-common-tool/pom.xml

@@ -11,8 +11,11 @@
 	
 	<!-- 工具类本身并不依赖其他模块 -->
 	<artifactId>watero-common-tool</artifactId>
+
+
 	
 	<dependencies>
+
         <!-- JWT -->
         <dependency>
 		    <groupId>com.auth0</groupId>

+ 6 - 0
watero-rst-interface/pom.xml

@@ -17,5 +17,11 @@
             <artifactId>watero-rst-core</artifactId>
             <version>1.0.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.iamberry</groupId>
+            <artifactId>watero-common-core</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 </project>

+ 55 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/member/MemberService.java

@@ -0,0 +1,55 @@
+package com.iamberry.rst.faces.member;
+
+import com.iamberry.wechat.core.entity.member.Member;
+
+import java.util.List;
+
+/**
+ * 会员信息 service
+ * 2016年4月21日
+ * @author Administrator
+ *
+ */
+public interface MemberService {
+
+	
+	/**
+	 * 根据 openid 查询一个member
+	 * 2016年4月28日
+	 * @author 穆再兴
+	 * @return
+	 */
+	public Member getMemberByUserOpenId(String openid);
+
+	/**
+	 * 获取集合
+	 * @param  member
+	 * @return List
+	 */
+	List<Member>  getMemberList(Member  member);
+	/**
+	 * 查询单条数据
+	 * @param  id
+	 * @return  member
+	 */
+	Member  getMemberById(Integer  id);
+	/**
+	 * 增加数据
+	 * @param  member
+	 * @return Integer
+	 */
+	Integer  save(Member  member);
+	/**
+	 * 修改数据
+	 * @param  member
+	 * @return Integer
+	 */
+	Integer  update(Member  member);
+	/**
+	 * 删除数据
+	 * @param  id
+	 * @return Integer
+	 */
+	Integer  delete(Integer  id);
+
+}

+ 79 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/member/MemberServiceImpl.java

@@ -0,0 +1,79 @@
+package com.iamberry.rst.service.member;
+
+import com.iamberry.rst.faces.member.MemberService;
+import com.iamberry.rst.service.member.mapper.MemberMapper;
+import com.iamberry.wechat.core.entity.member.Member;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 会员信息 service 实现
+ * 2016年4月21日
+ * @author Administrator
+ *
+ */
+@Service
+public class MemberServiceImpl implements MemberService {
+
+	@Autowired
+	private MemberMapper memberMapper;
+
+	/**
+	 * 根据 openid 查询一个member
+	 * 2016年4月28日
+	 * @author 穆再兴
+	 * @return
+	 */
+	@Override
+	public Member getMemberByUserOpenId(String openid){
+		return memberMapper.getMemberByUserOpenId(openid);
+	}
+
+	/**
+	 * 获取集合
+	 * @param  member
+	 * @return List
+	 */
+	@Override
+	public  List<Member>  getMemberList(Member  member){
+		return  memberMapper.getMemberList(member);
+	}
+	/**
+	 * 查询单条数据
+	 * @param  id
+	 * @return  member
+	 */
+	@Override
+	public  Member  getMemberById(Integer  id){
+		return  memberMapper.getMemberById(id);
+	}
+	/**
+	 * 增加数据
+	 * @param  member
+	 * @return Integer
+	 */
+	@Override
+	public  Integer  save(Member  member){
+		return  memberMapper.save(member);
+	}
+	/**
+	 * 修改数据
+	 * @param  member
+	 * @return Integer
+	 */
+	@Override
+	public  Integer  update(Member  member){
+		return  memberMapper.update(member);
+	}
+	/**
+	 * 删除数据
+	 * @param  id
+	 * @return Integer
+	 */
+	@Override
+	public  Integer  delete(Integer  id){
+		return  memberMapper.delete(id);
+	}
+}

+ 54 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/member/mapper/MemberMapper.java

@@ -0,0 +1,54 @@
+package com.iamberry.rst.service.member.mapper;
+
+import com.iamberry.wechat.core.entity.member.Member;
+
+import java.util.List;
+
+/**
+ * 会员信息 mapper
+ * 2016年4月21日
+ * @author Administrator
+ *
+ */
+public interface MemberMapper {
+
+	/**
+	 * 根据 openid 查询一个member
+	 * 2016年4月28日
+	 * @author 穆再兴
+	 * @return
+	 */
+	Member getMemberByUserOpenId(String openid);
+
+	/**
+	 * 获取集合
+	 * @param  member
+	 * @return List
+	 */
+	List<Member>  getMemberList(Member  member);
+	/**
+	 * 查询单条数据
+	 * @param  id
+	 * @return  member
+	 */
+	Member  getMemberById(Integer  id);
+	/**
+	 * 增加数据
+	 * @param  member
+	 * @return Integer
+	 */
+	Integer  save(Member  member);
+	/**
+	 * 修改数据
+	 * @param  member
+	 * @return Integer
+	 */
+	Integer  update(Member  member);
+	/**
+	 * 删除数据
+	 * @param  id
+	 * @return Integer
+	 */
+	Integer  delete(Integer  id);
+
+}

+ 258 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/member/mapper/memberMapper.xml

@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.iamberry.wechat.service.mapper.MemberMapper">
+	<resultMap  id="BaseResultMap" type="Member" >
+		<result    column="user_id"    property="userId" />
+		<result    column="user_openid"    property="userOpenid" />
+		<result    column="user_head"    property="userHead" />
+		<result    column="user_nickname"    property="userNickname" />
+		<result    column="user_addr"    property="userAddr" />
+		<result    column="user_sex"    property="userSex" />
+		<result    column="user_integral"    property="userIntegral" />
+		<result    column="user_account_num"    property="userAccountNum" />
+		<result    column="user_pwd"    property="userPwd" />
+		<result    column="user_tel"    property="userTel" />
+		<result    column="user_name"    property="userName" />
+		<result    column="user_birth_date"    property="userBirthDate" />
+		<result    column="user_surplus_integral"    property="userSurplusIntegral" />
+		<result    column="user_use_integral"    property="userUseIntegral" />
+		<result    column="user_res_type"    property="userResType" />
+		<result    column="user_status"    property="userStatus" />
+		<result    column="user_sub_date"    property="userSubDate" />
+		<result    column="user_create_date"    property="userCreateDate" />
+		<result    column="user_identity"    property="userIdentity" />
+		<result    column="user_qrcode"    property="userQrcode" />
+		<result    column="user_is_flag"    property="userIsFlag" />
+		<result    column="user_income"    property="userIncome" />
+		<result    column="user_coupon"    property="userCoupon" />
+		<result    column="user_template_id"    property="userTemplateId" />
+		<result    column="user_dealers"    property="userDealers" />
+		<result    column="user_is_bought"    property="userIsBought" />
+	</resultMap>
+	<sql    id="Base_List" >
+		t.user_id,
+		t.user_openid,
+		t.user_head,
+		t.user_nickname,
+		t.user_addr,
+		t.user_sex,
+		t.user_integral,
+		t.user_account_num,
+		t.user_pwd,
+		t.user_tel,
+		t.user_name,
+		t.user_birth_date,
+		t.user_surplus_integral,
+		t.user_use_integral,
+		t.user_res_type,
+		t.user_status,
+		t.user_sub_date,
+		t.user_create_date,
+		t.user_identity,
+		t.user_qrcode,
+		t.user_is_flag,
+		t.user_income,
+		t.user_coupon,
+		t.user_template_id,
+		t.user_dealers,
+		t.user_is_bought
+	</sql>
+	<select id="getMemberList" resultMap="BaseResultMap" parameterType="Member" >
+		select
+		<include refid="Base_List" />
+		from tb_rst_member_user t
+		<where>
+			<if test="userId != null ">
+				AND t.user_id = #{userId}
+			</if >
+			<if test="userOpenid != null and userOpenid != ''">
+				AND t.user_openid = #{userOpenid}
+			</if >
+			<if test="userNickname != null and userNickname != ''">
+				AND t.user_nickname  like  CONCAT ('%',#{userNickname},'%')
+			</if >
+			<if test="userSex != null ">
+				AND t.user_sex = #{userSex}
+			</if >
+			<if test="userAccountNum != null and userAccountNum != ''">
+				AND t.user_account_num = #{userAccountNum}
+			</if >
+			<if test="userPwd != null and userPwd != ''">
+				AND t.user_pwd = #{userPwd}
+			</if >
+			<if test="userTel != null and userTel != ''">
+				AND t.user_tel  like  CONCAT ('%',#{userTel},'%')
+			</if >
+			<if test="userName != null and userName != ''">
+				AND t.user_name  like  CONCAT ('%',#{userName},'%')
+			</if >
+			<if test="userResType != null ">
+				AND t.user_res_type = #{userResType}
+			</if >
+			<if test="userStatus != null ">
+				AND t.user_status = #{userStatus}
+			</if >
+			<if test="userIdentity != null ">
+				AND t.user_identity = #{userIdentity}
+			</if >
+		</where>
+	</select>
+	<select id="getMemberById" resultMap="BaseResultMap" parameterType="Integer" >
+		select
+		<include refid="Base_List" />
+		from tb_rst_member_user t
+		where t.user_id= #{userId}
+	</select>
+
+	<!-- 	根据openid查询会员信息 -->
+	<select id="getMemberByUserOpenId" resultType="Member"
+			parameterType="String">
+		SELECT
+		<include refid="Base_List"/>
+		FROM TB_IAMBERRY_USER_USERINFO
+		WHERE user_openid = #{userOpenid}
+	</select>
+
+
+	<insert id="save" parameterType="Member" >
+		insert into
+		tb_rst_member_user
+		(
+		user_openid,
+		user_head,
+		user_nickname,
+		user_addr,
+		user_sex,
+		user_integral,
+		user_account_num,
+		user_pwd,
+		user_tel,
+		user_name,
+		user_birth_date,
+		user_surplus_integral,
+		user_use_integral,
+		user_res_type,
+		user_status,
+		user_sub_date,
+		user_identity,
+		user_qrcode,
+		user_is_flag,
+		user_income,
+		user_coupon,
+		user_template_id,
+		user_dealers,
+		user_is_bought
+		)
+		values
+		(
+		#{userOpenid},
+		#{userHead},
+		#{userNickname},
+		#{userAddr},
+		#{userSex},
+		#{userIntegral},
+		#{userAccountNum},
+		#{userPwd},
+		#{userTel},
+		#{userName},
+		#{userBirthDate},
+		#{userSurplusIntegral},
+		#{userUseIntegral},
+		#{userResType},
+		#{userStatus},
+		#{userSubDate},
+		#{userIdentity},
+		#{userQrcode},
+		#{userIsFlag},
+		#{userIncome},
+		#{userCoupon},
+		#{userTemplateId},
+		#{userDealers},
+		#{userIsBought}
+		)
+	</insert>
+	<update id="update" parameterType="Member" >
+		update
+		tb_rst_member_user
+		<set >
+			<if test="userOpenid != null and userOpenid != ''">
+				user_openid = #{userOpenid},
+			</if >
+			<if test="userHead != null and userHead != ''">
+				user_head = #{userHead},
+			</if >
+			<if test="userNickname != null and userNickname != ''">
+				user_nickname = #{userNickname},
+			</if >
+			<if test="userAddr != null and userAddr != ''">
+				user_addr = #{userAddr},
+			</if >
+			<if test="userSex != null ">
+				user_sex = #{userSex},
+			</if >
+			<if test="userIntegral != null ">
+				user_integral = #{userIntegral},
+			</if >
+			<if test="userAccountNum != null and userAccountNum != ''">
+				user_account_num = #{userAccountNum},
+			</if >
+			<if test="userPwd != null and userPwd != ''">
+				user_pwd = #{userPwd},
+			</if >
+			<if test="userTel != null and userTel != ''">
+				user_tel = #{userTel},
+			</if >
+			<if test="userName != null and userName != ''">
+				user_name = #{userName},
+			</if >
+			<if test="userBirthDate != null and userBirthDate != ''">
+				user_birth_date = #{userBirthDate},
+			</if >
+			<if test="userSurplusIntegral != null ">
+				user_surplus_integral = #{userSurplusIntegral},
+			</if >
+			<if test="userUseIntegral != null ">
+				user_use_integral = #{userUseIntegral},
+			</if >
+			<if test="userResType != null ">
+				user_res_type = #{userResType},
+			</if >
+			<if test="userStatus != null ">
+				user_status = #{userStatus},
+			</if >
+			<if test="userSubDate != null and userSubDate != ''">
+				user_sub_date = #{userSubDate},
+			</if >
+			<if test="userIdentity != null ">
+				user_identity = #{userIdentity},
+			</if >
+			<if test="userQrcode != null and userQrcode != ''">
+				user_qrcode = #{userQrcode},
+			</if >
+			<if test="userIsFlag != null ">
+				user_is_flag = #{userIsFlag},
+			</if >
+			<if test="userIncome != null ">
+				user_income = #{userIncome},
+			</if >
+			<if test="userCoupon != null ">
+				user_coupon = #{userCoupon},
+			</if >
+			<if test="userTemplateId != null ">
+				user_template_id = #{userTemplateId},
+			</if >
+			<if test="userDealers != null ">
+				user_dealers = #{userDealers},
+			</if >
+			<if test="userIsBought != null ">
+				user_is_bought = #{userIsBought}
+			</if >
+		</set >
+		where user_id= #{userId}
+	</update>
+	<delete id="delete" parameterType="Integer" >
+		delete FROM
+		tb_rst_member_user
+		where user_id=#{userId}
+	</delete>
+</mapper>

+ 6 - 0
watero-rst-web/pom.xml

@@ -12,6 +12,12 @@
 
     <dependencies>
 
+        <dependency>
+            <groupId>com.iamberry</groupId>
+            <artifactId>watero-common-core</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <!-- WEB 项目基本依赖 -->
         <dependency>
             <groupId>com.iamberry</groupId>

+ 97 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/wx/WechatBackHandler.java

@@ -0,0 +1,97 @@
+package com.iamberry.rst.controllers.wx;
+
+import com.iamberry.rst.faces.member.MemberService;
+import com.iamberry.wechat.core.entity.WechatUtils;
+import com.iamberry.wechat.core.entity.member.Member;
+import com.iamberry.wechat.tools.NameUtils;
+import com.iamberry.wechat.tools.WeixinUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @author 何秀刚
+ * Class Description: 微信授权handler
+ * Create Date:2016年4月19日
+ * Update Date:2016年4月19日
+ */
+@Controller
+public class WechatBackHandler {
+
+	private static Logger logger = LoggerFactory.getLogger(WechatBackHandler.class);
+	
+	@Autowired
+	private MemberService memberService;
+
+	public MemberService getMemberService() {
+		return memberService;
+	}
+
+	public void setMemberService(MemberService memberService) {
+		this.memberService = memberService;
+	}
+
+	/**
+	 * 微信授权功能
+	 * @param request
+	 * @param response
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping("/wechatBack")
+	public ModelAndView getOpenId(
+			@RequestParam(value = "callback", required = false) String callback,
+			HttpServletRequest request,
+			HttpServletResponse response) throws Exception {
+
+		logger.info("微信回调");
+
+		String callbackURL = NameUtils.getConfig("redirectUrl_index");
+		if (callback != null) {
+			callbackURL = "redirect:" + WechatUtils.getCallback(callback);
+		}
+		
+		ModelAndView mv = new ModelAndView(callbackURL);
+		// 获取微信code
+		String code = request.getParameter("code");
+		if (StringUtils.isEmpty(code)) { 
+			// 判断code是否为空
+			mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
+			return mv;
+		}
+		// 通过code get微信的openid
+		String[] str = WeixinUtil.getOpenId(code, NameUtils.getConfig("appId"), NameUtils.getConfig("appSecret"));
+		String openId = str[0];
+		if (StringUtils.isEmpty(openId)) {
+			mv.setViewName("redirect:" + WechatUtils.getOpenIdFunction(null));
+			return mv;
+		}
+		Member info = memberService.getMemberByUserOpenId(openId);
+		if (info == null) {
+			// 创建新的用户
+			info = new Member();
+			info.setUserOpenid(openId);
+			info.setUserSex(0);
+			info.setUserStatus(1);
+			int flag = memberService.save(info);
+			if (flag < 1) {
+				memberService.save(info);
+			}
+		}
+		info.setUserOpenid(openId);
+		// 提前获取session中的地址
+		WechatUtils.saveUserToSession(info, request, response);
+		// 获取成功后转向地址
+		mv.setViewName(callbackURL);
+		return mv;
+	}
+
+}

+ 109 - 0
watero-rst-web/src/main/java/com/iamberry/rst/filters/WechatFilter.java

@@ -0,0 +1,109 @@
+package com.iamberry.rst.filters;
+
+import com.iamberry.jwt.UserNotLoginException;
+import com.iamberry.wechat.core.entity.WechatUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 完成对微信请求中用户的登陆状态的处理,如果没有登陆,转发一次微信服务器
+ * @company	深圳爱贝源科技有限公司
+ * @website www.iamberry.com
+ * @author 	献
+ * @tel		18271840547
+ * @date	2016年12月2日
+ * @explain
+ */
+@WebFilter(value = { "/wechat/*","/pay/goOrderInfo" })
+public class WechatFilter implements Filter {
+
+	private static Logger logger = LoggerFactory.getLogger(WechatFilter.class);
+	
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response,
+						 FilterChain chain) throws IOException, ServletException {
+		// 权限拦截类
+		HttpServletRequest req = (HttpServletRequest) request;
+		HttpServletResponse resp = (HttpServletResponse) response;
+		try {
+			// 已经登录的用户处理逻辑
+			WechatUtils.getUserBySession(req);
+			chain.doFilter(req, resp);
+		} catch (UserNotLoginException e) {
+			// 未登录的用户处理逻辑
+			logger.info(e.getMessage() + " User Not Login!");
+			try {
+				forword(req, resp, chain);
+			} catch (Exception e1) {
+				logger.error("[致命错误 4003]" + e1.getMessage());
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+			logger.info("获取信息失败");
+		}
+	}
+	
+	/**
+	 * 处理没有登录的用户流程
+	 * @param req
+	 * @param resp
+	 * @param chain
+	 * @author 献
+	 * @throws Exception 
+	 * @Time   2016年11月24日
+	 */
+	public void forword(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) throws Exception {
+// 如果是扫描机器后面的二维码,那么转发到下层处理
+//		String ua = req.getHeader("user-agent").toLowerCase();
+//		if(ua.indexOf("micromessenger") < 0 && req.getRequestURL().indexOf("wechat/qrcode") > 0 ){
+//			chain.doFilter(req, resp);
+//			return;
+//		}
+		
+		// 如果不是扫描二维码,那么获取后转发微信服务器,完成授权。
+		String query = req.getQueryString();
+		String urlstr = new String(req.getRequestURI().toString().replace(req.getContextPath(), ""));
+		if (query != null) {
+			urlstr = urlstr + "?" + query;
+		}
+		String url = WechatUtils.getOpenIdFunction(urlstr);
+
+		// 判断请求,如果是来自Ajax,那么直接返回302跳转会导致前端报错,所以返回JSON格式数据,状态为200
+		String requestedWith = req.getHeader("x-requested-with");
+		String accept = req.getHeader("accept");
+		if ((requestedWith != null && StringUtils.isNotEmpty(requestedWith) && requestedWith.indexOf("XMLHttpRequest") != -1)
+				|| (accept != null && StringUtils.isNotEmpty(accept) && accept.indexOf("json") != -1)) {
+			// 客户端需要的是json数据
+			String redirectURL = req.getHeader("Referer");
+			resp.getWriter().write("{\"isRedirect\":true, \"redirectURL\":\"" + WechatUtils.getOpenIdFunction(redirectURL) + "\"}");
+			return;
+		}
+
+		// 客户端没有登录的请求不是来自于Ajax,可以执行跳转动作
+		resp.sendRedirect(url);
+	}
+
+	/**
+	 * 转发请求
+	 * @param req
+	 * @param resp
+	 * @param url
+	 * @throws ServletException
+	 * @throws IOException
+	 * @author 献
+	 * @Time   2016年12月2日
+	 */
+	public void setRequestDispatcherInfo(HttpServletRequest req, HttpServletResponse resp, String url) 
+			throws ServletException, IOException {resp.sendRedirect(url);}
+	@Override
+	public void init(FilterConfig fConfig) throws ServletException {}
+	@Override
+	public void destroy() {}
+}

+ 3 - 0
watero-rst-web/src/main/resources/platform.properties

@@ -106,3 +106,6 @@ scanningQrCode=https://w.iamberry.com/tooth/wechat/qr/
 #send from url
 #ReqURL=http://api.kdniao.cc/api/Eorderservice
 ReqURL=http://testapi.kdniao.cc:8081/api/EOrderService
+
+# wechat auth back url
+WECHAT_BACK_URL=http://test.iamberry.com/rst/wechatBack

+ 1 - 1
watero-rst-web/src/main/resources/watero-rst-ioc.xml

@@ -37,7 +37,7 @@
     <aop:aspectj-autoproxy proxy-target-class="true"/>
 
 	<!-- 开启注解启动定时器 -->
-    <task:annotation-driven/>
+    <!--<task:annotation-driven/>-->
 
 	<!-- DataSource -->
 	<import resource="classpath:watero-rst-db.xml"/>