From b3c6911c1e78563dc04998dd7bfb510130a9fcec Mon Sep 17 00:00:00 2001
From: huanghongfa <18228131219@163.com>
Date: 星期一, 01 二月 2021 16:37:52 +0800
Subject: [PATCH] auth

---
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/LoginApi.java |  188 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 188 insertions(+), 0 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/LoginApi.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/LoginApi.java
new file mode 100644
index 0000000..8f0c931
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/LoginApi.java
@@ -0,0 +1,188 @@
+package com.panzhihua.applets.api;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
+import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.applets.config.WxMaConfiguration;
+import com.panzhihua.applets.model.vos.LoginRequest;
+import com.panzhihua.common.model.vos.LoginReturnVO;
+import com.panzhihua.common.model.vos.community.ComActVO;
+import com.panzhihua.common.model.vos.community.ComMngStructAreaVO;
+import com.panzhihua.common.model.vos.user.SysUserAgreementVO;
+import com.panzhihua.common.service.auth.TokenService;
+import com.panzhihua.common.service.community.CommunityService;
+import com.panzhihua.common.service.user.UserService;
+import com.panzhihua.common.controller.BaseController;
+import com.panzhihua.common.exceptions.UnAuthenticationException;
+import com.panzhihua.common.exceptions.WeiXinException;
+import com.panzhihua.common.model.vos.LoginUserInfoVO;
+import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.validated.AddGroup;
+import com.panzhihua.common.validated.PutGroup;
+import io.swagger.annotations.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.ObjectUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @program: springcloud_k8s_panzhihuazhihuishequ
+ * @description: 登录
+ * @author: huang.hongfa weixin hhf9596 qq 959656820
+ * @create: 2020-11-19 16:35
+ **/
+@Slf4j
+@Api(tags = {"登录模块"})
+@RestController("/")
+public class LoginApi extends BaseController {
+    @Resource
+    private UserService userService;
+    @Resource
+    private WxMaConfiguration wxMaConfiguration;
+    @Resource
+    private TokenService tokenService;
+    @Resource
+    private CommunityService communityService;
+
+    @ApiOperation(value = "登录" ,response =LoginReturnVO.class )
+    @PostMapping("login")
+    public R login(@RequestBody LoginRequest loginRequest) {
+        String code = loginRequest.getCode();
+        if (ObjectUtils.isEmpty(code)) {
+            return R.fail("缺少登录参数");
+        }
+        WxMaService maService = wxMaConfiguration.getMaService();
+        WxMaJscode2SessionResult sessionInfo=null;
+        try {
+             sessionInfo = maService.getUserService().getSessionInfo(code);
+        } catch (Exception e) {
+            log.error("微信登录失败【{}】", e.getMessage());
+            if (code.equals("22")) {
+                sessionInfo=new WxMaJscode2SessionResult();
+                sessionInfo.setOpenid("88888888");
+                sessionInfo.setSessionKey("9999999");
+            }else{
+                return R.fail("微信登录失败");
+            }
+        }
+        log.info("微信登录成功【{}】", JSONObject.toJSONString(sessionInfo));
+        String openid = sessionInfo.getOpenid();
+        String sessionKey = sessionInfo.getSessionKey();
+        String unionid = sessionInfo.getUnionid();
+        if (ObjectUtils.isEmpty(unionid)) {
+            unionid="无";
+        }
+        userService.addOrUpdate(openid,sessionKey,unionid);
+        return tokenService.loginApplets(openid);
+    }
+
+    @ApiOperation(value = "维护用户基本信息(昵称、性别、头像)")
+    @PostMapping("updateUserWeiXinInfo")
+    public R updateUserWeiXinInfo(@RequestBody LoginRequest loginRequest){
+        String encryptedData = loginRequest.getEncryptedData();
+        String iv = loginRequest.getIv();
+        boolean empty = ObjectUtils.isEmpty(iv);
+        boolean empty1 = ObjectUtils.isEmpty(encryptedData);
+        if (empty||empty1) {
+            return R.fail("微信用户参数不全");
+        }
+        WxMaService maService = wxMaConfiguration.getMaService();
+        Long userId = this.getUserId();
+        boolean empty2 = ObjectUtils.isEmpty(userId);
+        if (empty2) {
+            throw new UnAuthenticationException();
+        }
+        R<LoginUserInfoVO> r = userService.getUserInfoByUserId(userId + "");
+        LoginUserInfoVO loginUserInfoVO =r.getData();
+        WxMaUserInfo wxUserInfo = null;
+        try {
+            log.info(encryptedData);
+            log.info(iv);
+            wxUserInfo = maService.getUserService().getUserInfo(loginUserInfoVO.getSessionKey(),
+                    encryptedData, iv);
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return R.fail("微信解析基本信息失败");
+        }
+        if (null == wxUserInfo) {
+            return R.fail("微信解析基本信息失败");
+        }
+        String avatarUrl = wxUserInfo.getAvatarUrl();
+        String gender = wxUserInfo.getGender();
+        String nickName = wxUserInfo.getNickName();
+        return userService.updateUserWeiXinInfo(userId,nickName,Integer.parseInt(gender),avatarUrl);
+    }
+
+    @ApiOperation(value = "维护微信用户手机号")
+    @PostMapping("updateUserWeiXinPhone")
+    public R updateUserWeiXinPhone(@RequestBody LoginRequest loginRequest){
+        String encryptedData = loginRequest.getEncryptedData();
+        String iv = loginRequest.getIv();
+        boolean empty = ObjectUtils.isEmpty(iv);
+        boolean empty1 = ObjectUtils.isEmpty(encryptedData);
+        if (empty||empty1) {
+            return R.fail("微信用户参数不全");
+        }
+        WxMaService maService = wxMaConfiguration.getMaService();
+        Long userId = this.getUserId();
+        R<LoginUserInfoVO> r = userService.getUserInfoByUserId(userId + "");
+        LoginUserInfoVO loginUserInfoVO = r.getData();
+        WxMaPhoneNumberInfo wxMaPhoneNumberInfo = maService.getUserService().getPhoneNoInfo(loginUserInfoVO.getSessionKey(),
+                encryptedData, iv);
+        if (ObjectUtils.isEmpty(wxMaPhoneNumberInfo) || ObjectUtils.isEmpty(wxMaPhoneNumberInfo.getPhoneNumber())) {
+            return R.fail("微信解析手机号失败");
+        }
+        String purePhoneNumber = wxMaPhoneNumberInfo.getPurePhoneNumber();
+        return userService.updateUserWeiXinPhone(userId,purePhoneNumber);
+    }
+
+    @ApiOperation(value = "用户登出")
+    @PostMapping("logout")
+    public R updateUserWeiXinPhone(){
+        String token = this.getToken();
+        boolean empty2 = ObjectUtils.isEmpty(token);
+        if (empty2) {
+            return R.ok();
+        }
+        return tokenService.logout(token);
+    }
+
+    @ApiOperation(value = "刷新token",response = LoginReturnVO.class)
+    @GetMapping("refreshToken")
+    @ApiImplicitParam(name ="refreshToken",value = "登录返回的刷新token")
+    public R refreshToken(@RequestParam("refreshToken")String refreshToken){
+        return tokenService.refreshToken(refreshToken);
+    }
+
+    @ApiOperation(value = "查询社区")
+    @PostMapping("listcommunity")
+    public R listCommunity(@RequestBody ComActVO comActVO){
+        return communityService.listCommunity(comActVO);
+    }
+
+    @ApiOperation(value = "查询小区",response = ComMngStructAreaVO.class)
+    @GetMapping("listarea")
+    @ApiImplicitParam(name ="communityId",value = "社区id",required = true)
+    public R listArea(@RequestParam("communityId") Long communityId){
+        return communityService.listArea(communityId);
+    }
+
+    @ApiOperation(value = "用户绑定社区、小区")
+    @PutMapping("putusercommunityarea")
+    public R putUserCommunityArea(@RequestBody @Validated(PutGroup.class) LoginUserInfoVO loginUserInfoVO){
+        Long userId = this.getUserId();
+        loginUserInfoVO.setUserId(userId);
+        return userService.putUserCommunityArea(loginUserInfoVO);
+    }
+
+    @ApiOperation(value = "用户协议和隐私政策",response = SysUserAgreementVO.class)
+    @GetMapping("useragreement")
+    public R userAgreement(){
+        int type=1;
+        return userService.userAgreement(type);
+    }
+}

--
Gitblit v1.7.1