| New file | 
|  |  |  | 
|---|
|  |  |  | 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("缺少登录参数"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | log.info(code); | 
|---|
|  |  |  | 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){ | 
|---|
|  |  |  | Long userId = this.getUserId(); | 
|---|
|  |  |  | boolean empty2 = ObjectUtils.isEmpty(userId); | 
|---|
|  |  |  | if (empty2) { | 
|---|
|  |  |  | throw new UnAuthenticationException(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WxMaUserInfo wxUserInfo = loginRequest.getUserInfo(); | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|