chenxz 7 年之前
父节点
当前提交
bd77cad33c

+ 1 - 1
mooctest-user-server/pom.xml

@@ -24,7 +24,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.17</version>
+            <version>1.0.20</version>
         </dependency>
         <dependency>
             <groupId>org.mybatis.spring.boot</groupId>

+ 54 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/configure/WechatConfiguration.java

@@ -0,0 +1,54 @@
+package cn.iselab.mooctest.user.configure;
+
+import cn.iselab.mooctest.user.data.Token;
+import cn.iselab.mooctest.user.util.WechatUtil;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.Hashtable;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午4:35 2018/4/2
+ * @Modified By:
+ */
+@ConfigurationProperties(prefix="wechat")
+@Scope(value = "prototype")
+@Component
+public class WechatConfiguration {
+
+    private String appId;
+
+    private String appSecret;
+
+    private Token token;
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+    public Token getToken(String code) {
+        if (appId != null && appSecret != null) {
+            token = WechatUtil.getToken(appId, appSecret, code);
+        }
+        return token;
+    }
+
+    public void setToken(Token token) {
+        this.token = token;
+    }
+}

+ 15 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/WechatUserConstants.java

@@ -0,0 +1,15 @@
+package cn.iselab.mooctest.user.constants;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午10:55 2018/4/17
+ * @Modified By:
+ */
+public class WechatUserConstants {
+
+
+    public final static int NEW=0;
+
+    public final static int OLD=1;
+}

+ 2 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserMapper.java

@@ -2,6 +2,7 @@ package cn.iselab.mooctest.user.mapper;
 
 import cn.iselab.mooctest.user.model.User;
 import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
@@ -14,7 +15,7 @@ import java.util.List;
 public interface UserMapper {
 
     @Select("SELECT * FROM user WHERE id = #{id}")
-    User findById(Long id);
+    User findById(@Param("id")Long id);
 
     @Select("SELECT * FROM user WHERE email = #{email}")
     User findByEmail(String email);

+ 31 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/UserWechatMapper.java

@@ -0,0 +1,31 @@
+package cn.iselab.mooctest.user.mapper;
+
+import cn.iselab.mooctest.user.model.UserWechat;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:01 2018/4/17
+ * @Modified By:
+ */
+@Mapper
+public interface UserWechatMapper {
+
+    @Select("select * from user_wechat where user_id=#{userId}")
+    UserWechat findByUserId(Long userId);
+
+    @Select("select * from user_wechat where open_id=#{openId}")
+    UserWechat findByOpenId(String openId);
+
+    @Select("select * from user_wechat where union_id=#{unionId}")
+    UserWechat findByUnionId(String unionId);
+
+    @Insert("insert into user_wechat(user_id,union_id,open_id,is_delete) values (#{userId},#{unionId},#{openId},#{isDelete})")
+    void save(UserWechat wechat);
+
+    @Insert("update user_wechat set is_delete=#{isDelete}")
+    void update(UserWechat wechat);
+}

+ 23 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/UserWechat.java

@@ -0,0 +1,23 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午10:56 2018/4/17
+ * @Modified By:
+ */
+@Data
+public class UserWechat {
+
+    private long id;
+
+    private long userId;
+
+    private String unionId;
+
+    private String openId;
+
+    private boolean isDelete;
+}

+ 31 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/rpc/WechatRPC.java

@@ -0,0 +1,31 @@
+package cn.iselab.mooctest.user.rpc;
+
+import cn.iselab.mooctest.rpc.user.api.WechatService;
+import cn.iselab.mooctest.rpc.user.data.UserDTO;
+import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
+import cn.iselab.mooctest.user.web.logic.WechatLogic;
+import com.alibaba.dubbo.config.annotation.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午3:26 2018/4/17
+ * @Modified By:
+ */
+@Service(version = "1.0.0")
+public class WechatRPC implements WechatService {
+
+    @Autowired
+    WechatLogic wechatLogic;
+
+    @Override
+    public UserWechatDTO loginByCode(String code){
+        return wechatLogic.getUserByCode(code);
+    }
+
+    @Override
+    public UserDTO setUserWechat(UserWechatDTO dto){
+        return wechatLogic.setUserWechat(dto);
+    }
+}

+ 22 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/WechatService.java

@@ -0,0 +1,22 @@
+package cn.iselab.mooctest.user.service;
+
+import cn.iselab.mooctest.user.model.UserWechat;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:15 2018/4/17
+ * @Modified By:
+ */
+public interface WechatService {
+
+    UserWechat findByOpenId(String openId);
+
+    UserWechat findByUnionId(String unionId);
+
+    UserWechat findByUserId(Long userId);
+
+    void save(UserWechat wechat);
+
+    void update(UserWechat wechat);
+}

+ 45 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/WechatServiceImpl.java

@@ -0,0 +1,45 @@
+package cn.iselab.mooctest.user.service.impl;
+
+import cn.iselab.mooctest.user.mapper.UserWechatMapper;
+import cn.iselab.mooctest.user.model.UserWechat;
+import cn.iselab.mooctest.user.service.WechatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:15 2018/4/17
+ * @Modified By:
+ */
+@Service
+public class WechatServiceImpl implements WechatService {
+
+    @Autowired
+    UserWechatMapper wechatMapper;
+
+    @Override
+    public UserWechat findByOpenId(String openId){
+        return wechatMapper.findByOpenId(openId);
+    }
+
+    @Override
+    public UserWechat findByUnionId(String unionId){
+        return wechatMapper.findByUnionId(unionId);
+    }
+
+    @Override
+    public UserWechat findByUserId(Long userId){
+        return wechatMapper.findByUserId(userId);
+    }
+
+    @Override
+    public void save(UserWechat wechat){
+        wechatMapper.save(wechat);
+    }
+
+    @Override
+    public void update(UserWechat wechat){
+        wechatMapper.update(wechat);
+    }
+}

+ 6 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/WechatUtil.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.user.util;
 
+import cn.iselab.mooctest.rpc.user.data.WechatUserInfoDTO;
 import cn.iselab.mooctest.user.data.Token;
 import cn.iselab.mooctest.user.data.UserInfo;
 import com.google.gson.Gson;
@@ -49,7 +50,7 @@ public class WechatUtil {
 
 
 
-    public static UserInfo getWxUser(String accessToken, String openid){
+    public static WechatUserInfoDTO getWxUser(String accessToken, String openid){
         Gson gson=new Gson();
         String result="";
         try {
@@ -58,7 +59,10 @@ public class WechatUtil {
         }catch (Exception e){
             LOG.error("获取token失败:"+e.getMessage());
         }
-        UserInfo userInfo=gson.fromJson(result,UserInfo.class);
+        WechatUserInfoDTO userInfo=gson.fromJson(result,WechatUserInfoDTO.class);
+        System.out.println("openId:"+userInfo.getOpenid());
+        System.out.println("unionId:"+userInfo.getUnionid());
+        System.out.println("nickname:"+userInfo.getNickname());
         return userInfo;
     }
 }

+ 2 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java

@@ -3,6 +3,7 @@ package cn.iselab.mooctest.user.web.logic;
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author sean
@@ -27,4 +28,5 @@ public interface UserLogic {
     List<UserDTO> getUserByFuzzyEmail(UserDTO userDTO);
 
     List<UserDTO> getUserByFuzzyNameOrEmail(UserDTO userDTO);
+
 }

+ 18 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/WechatLogic.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.user.web.logic;
+
+import cn.iselab.mooctest.rpc.user.data.UserDTO;
+import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
+
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:11 2018/4/17
+ * @Modified By:
+ */
+public interface WechatLogic {
+
+    UserWechatDTO getUserByCode(String code);
+
+    UserDTO setUserWechat(UserWechatDTO dto);
+}

+ 1 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -14,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.sql.Timestamp;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author sean

+ 85 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/WechatLogicImpl.java

@@ -0,0 +1,85 @@
+package cn.iselab.mooctest.user.web.logic.impl;
+
+import cn.iselab.mooctest.rpc.user.data.UserDTO;
+import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
+import cn.iselab.mooctest.rpc.user.data.WechatUserInfoDTO;
+import cn.iselab.mooctest.user.configure.WechatConfiguration;
+import cn.iselab.mooctest.user.constants.WechatUserConstants;
+import cn.iselab.mooctest.user.data.Token;
+import cn.iselab.mooctest.user.data.UserInfo;
+import cn.iselab.mooctest.user.model.User;
+import cn.iselab.mooctest.user.model.UserWechat;
+import cn.iselab.mooctest.user.service.UserService;
+import cn.iselab.mooctest.user.service.WechatService;
+import cn.iselab.mooctest.user.util.WechatUtil;
+import cn.iselab.mooctest.user.web.logic.UserLogic;
+import cn.iselab.mooctest.user.web.logic.WechatLogic;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:11 2018/4/17
+ * @Modified By:
+ */
+@Service
+public class WechatLogicImpl implements WechatLogic {
+
+    @Autowired
+    WechatConfiguration wechatConfiguration;
+
+    @Autowired
+    UserService userService;
+
+    @Autowired
+    WechatService wechatService;
+
+    @Autowired
+    UserLogic userLogic;
+
+    @Override
+    public UserWechatDTO getUserByCode(String code){
+        UserWechatDTO dto=new UserWechatDTO();
+        Token token=wechatConfiguration.getToken(code);
+        WechatUserInfoDTO userInfo= WechatUtil.getWxUser(token.getAccessToken(),token.getOpenId());
+        UserWechat wechat=wechatService.findByUnionId(userInfo.getUnionid());
+        if (wechat != null && !wechat.isDelete()) {
+            UserDTO userDTO=userLogic.getUserById(wechat.getUserId());
+            dto.setUser(userDTO);
+            dto.setType(UserWechatDTO.OLD);
+            return dto;
+        }else {
+            dto.setUserInfo(userInfo);
+            dto.setType(UserWechatDTO.NEW);
+            return dto;
+        }
+    }
+
+    @Override
+    public UserDTO setUserWechat(UserWechatDTO dto){
+        UserDTO userDTO=dto.getUser();
+        WechatUserInfoDTO userInfoDTO=dto.getUserInfo();
+        UserWechat wechat=wechatService.findByUserId(userDTO.getId());
+        if (wechat != null) {
+            if(wechat.isDelete()){
+                wechat.setDelete(false);
+                wechatService.update(wechat);
+                return userDTO;
+            }else {
+                return userDTO;
+            }
+        }else {
+            wechat=new UserWechat();
+            wechat.setUserId(userDTO.getId());
+            wechat.setUnionId(userInfoDTO.getUnionid());
+            wechat.setOpenId(userInfoDTO.getOpenid());
+            wechat.setDelete(false);
+            wechatService.save(wechat);
+            return userDTO;
+        }
+    }
+}

+ 5 - 1
mooctest-user-server/src/main/resources/application.yaml

@@ -21,6 +21,10 @@ spring:
     # The SQL dialect makes Hibernate generate better SQL for the chosen database
     properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
 
+wechat:
+    appId: wx60f06d61f21804be
+    appSecret: f84db4dc62377926624093b49ac3be1f
+
 ---
 # 开发环境
 spring:
@@ -29,7 +33,7 @@ spring:
         driverClassName: com.mysql.jdbc.Driver
         url: jdbc:mysql://127.0.0.1:3306/mooctest_user?useUnicode=yes&characterEncoding=UTF-8
         username: root
-        password: zhangxin
+        password: cxz6518
 
     dubbo:
         application.name: user-service-provider