From a0801ab3f16bd3d967c220c5925ad02673ce1baa Mon Sep 17 00:00:00 2001 From: 彭雪彬 <1724387007@qq.com> Date: Tue, 15 Jul 2025 15:24:16 +0800 Subject: [PATCH] 骑手微信登录 --- oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java | 4 ++ oying-system/src/main/resources/config/application-dev.yml | 4 ++ oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java | 5 ++ oying-system/src/main/java/com/oying/modules/system/domain/User.java | 4 ++ oying-system/src/main/java/com/oying/modules/system/service/UserService.java | 3 + oying-system/src/main/resources/config/application-prod.yml | 4 ++ oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java | 3 + oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java | 68 ++++++++++++++++++++++++++++++++++ oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java | 8 ++++ oying-system/src/main/resources/mapper/system/UserMapper.xml | 11 +++++ 10 files changed, 113 insertions(+), 1 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java b/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java index cd8eb34..23fb1a7 100644 --- a/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java +++ b/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java @@ -12,6 +12,10 @@ private String appId; // APP密钥 private String appSecret; + // 骑手小程序APPID + private String riderAppId; + // 骑手小程序密钥 + private String riderAppSecret; // 跳转小程序类型 private String miniProgramState; /*access_token的KEY*/ diff --git a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java index 4141c9b..67ef05d 100644 --- a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java +++ b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java @@ -224,6 +224,74 @@ user1.setRoles(roles); } + @Log("骑手小程序:微信授权登录") + @ApiOperation("骑手小程序:微信授权登录") + @AnonymousPostMapping(value = "/rider/login/weixin") + public ResponseEntity<Object> riderLoginWeixin(@Validated @RequestBody AuthUserWeixinDto authUser, HttpServletRequest request) throws Exception { + JSONObject jsonObject; + switch (authUser.getType()) { + case OLD: + jsonObject = weiXinService.code2SessionRider(authUser.getCode()); + String openid = jsonObject.getString("openid"); + User userDto = userService.findByRiderOpenId(openid); + if (userDto == null) { + return ResponseEntity.ok(R.success(openid)); + } + authUser.setUsername(userDto.getUsername()); + break; + case NEW: + jsonObject = weiXinService.getPhoneNumber(authUser.getCode()); + String phone = jsonObject.getJSONObject("phone_info").getString("purePhoneNumber"); + User user1 = userService.findByName(phone); + if (user1 == null) { + //创建用户 + User user = new User(); + user.setUsername(phone); + user.setNickName("OYING-" + phone); + user.setUserType(ConstantsKey.RIDER); + user.setPhone(phone); + user.setGender("男"); + user.setEnabled(true); + getRole(user); + user.setPassword(passwordEncoder.encode(phone.substring(phone.length() - 6))); + user.setOpenid(authUser.getUsername()); + userService.create(user); + } else { + if (user1.getUserType().equals(ConstantsKey.RIDER)) { + if (user1.getRoles() == null) { + getRole(user1); + } + } + user1.setOpenid(authUser.getUsername()); + userService.update(user1); + } + authUser.setUsername(phone); + break; + default: + throw new BadRequestException("登录类型错误"); + + } + // 获取用户信息 + JwtUserDto jwtUser = userDetailsService.loadUserByUsername(authUser.getUsername()); + Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities()); + SecurityContextHolder.getContext().setAuthentication(authentication); + // 生成令牌 + String token = tokenProvider.createToken(jwtUser); + // 返回 token 与 用户信息 + Map<String, Object> authInfo = new HashMap<String, Object>(2) {{ + put("token", properties.getTokenStartWith() + token); + put("user", jwtUser); + }}; + if (loginProperties.isSingleLogin()) { + // 踢掉之前已经登录的token + onlineUserService.kickOutForUsername(authUser.getUsername()); + } + // 保存在线信息 + onlineUserService.save(jwtUser, token, request); + // 返回登录信息 + return ResponseEntity.ok(R.success(authInfo)); + } + @ApiOperation("临时授权") @AnonymousGetMapping(value = "/token") public ResponseEntity<Object> loginTest(@RequestParam String username, HttpServletRequest request) { diff --git a/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java b/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java index 0c3efe8..4281552 100644 --- a/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java +++ b/oying-system/src/main/java/com/oying/modules/security/service/WeiXinService.java @@ -72,6 +72,14 @@ return JSONObject.parseObject(HttpRequest.exchangeString(HttpMethod.GET, url, null)); } + public JSONObject code2SessionRider(String js_code) { + String url = weiXinProperties.getCode2Session(); + url = url.replace("{appid}", weiXinProperties.getRiderAppId()) + .replace("{secret}", weiXinProperties.getRiderAppSecret()) + .replace("{js_code}", js_code); + return JSONObject.parseObject(HttpRequest.exchangeString(HttpMethod.GET, url, null)); + } + /** * POST 获取手机号 该接口用于将code换取用户手机号。 说明,每个code只能使用一次,code的有效期为5min。 * diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/User.java b/oying-system/src/main/java/com/oying/modules/system/domain/User.java index a35686a..7199747 100644 --- a/oying-system/src/main/java/com/oying/modules/system/domain/User.java +++ b/oying-system/src/main/java/com/oying/modules/system/domain/User.java @@ -77,6 +77,10 @@ @ApiModelProperty(value = "最后修改密码的时间", hidden = true) private Date pwdResetTime; + @ApiModelProperty(value = "骑手openid") + private String riderOpenId; + + @Override public boolean equals(Object o) { if (this == o) { diff --git a/oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java b/oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java index 928ffcc..e978d5a 100644 --- a/oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java +++ b/oying-system/src/main/java/com/oying/modules/system/mapper/UserMapper.java @@ -29,6 +29,8 @@ User findByOpenid(@Param("openid") String openid); + User findByRiderOpenId(@Param("riderOpenId") String riderOpenId); + User findByEmail(@Param("email") String email); User findByPhone(@Param("phone") String phone); @@ -48,4 +50,5 @@ int countByRoles(@Param("roleIds") Set<Long> roleIds); void resetPwd(@Param("userIds") Set<Long> userIds, @Param("pwd") String pwd); + } diff --git a/oying-system/src/main/java/com/oying/modules/system/service/UserService.java b/oying-system/src/main/java/com/oying/modules/system/service/UserService.java index 20807ba..6ef8470 100644 --- a/oying-system/src/main/java/com/oying/modules/system/service/UserService.java +++ b/oying-system/src/main/java/com/oying/modules/system/service/UserService.java @@ -55,6 +55,8 @@ User findByOpenid(String openId); + User findByRiderOpenId(String riderOpenId); + /** * 根据用户名查询 * @param userName / @@ -120,4 +122,5 @@ * @param pwd 密码 */ void resetPwd(Set<Long> ids, String pwd); + } diff --git a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java index 46b0cad..615e03e 100644 --- a/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/system/service/impl/UserServiceImpl.java @@ -174,6 +174,11 @@ } @Override + public User findByRiderOpenId(String riderOpenId) { + return userMapper.findByRiderOpenId(riderOpenId); + } + + @Override public User getLoginData(String userName) { return userMapper.findByUsername(userName); } diff --git a/oying-system/src/main/resources/config/application-dev.yml b/oying-system/src/main/resources/config/application-dev.yml index 36ab729..e293ada 100644 --- a/oying-system/src/main/resources/config/application-dev.yml +++ b/oying-system/src/main/resources/config/application-dev.yml @@ -132,6 +132,10 @@ app-id: wx2273296a5569cbad # AppSecret app-secret: 4526d72d885be322b17d0694cd6d03f1 + # riderAppId + rider-app-id: wx2273296a5569cbad + # riderAppSecret + rider-app-secret: 4526d72d885be322b17d0694cd6d03f1 # 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版 mini-program-state: trial # access_token的KEY diff --git a/oying-system/src/main/resources/config/application-prod.yml b/oying-system/src/main/resources/config/application-prod.yml index 02030c1..5818528 100644 --- a/oying-system/src/main/resources/config/application-prod.yml +++ b/oying-system/src/main/resources/config/application-prod.yml @@ -143,6 +143,10 @@ app-id: wx2273296a5569cbad # AppSecret app-secret: 4526d72d885be322b17d0694cd6d03f1 + # riderAppId + rider-app-id: wx2273296a5569cbad + # riderAppSecret + rider-app-secret: 4526d72d885be322b17d0694cd6d03f1 # 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版 mini-program-state: trial # access_token的KEY diff --git a/oying-system/src/main/resources/mapper/system/UserMapper.xml b/oying-system/src/main/resources/mapper/system/UserMapper.xml index b877335..c6a3a84 100644 --- a/oying-system/src/main/resources/mapper/system/UserMapper.xml +++ b/oying-system/src/main/resources/mapper/system/UserMapper.xml @@ -6,6 +6,7 @@ <result column="user_username" property="username"/> <result column="user_user_type" property="userType"/> <result column="user_openid" property="openid"/> + <result column="user_rider_open_id" property="riderOpenId"/> <result column="user_nick_name" property="nickName"/> <result column="user_email" property="email"/> <result column="user_phone" property="phone"/> @@ -30,7 +31,7 @@ <sql id="Base_Column_List"> u.user_id as user_user_id, u.username as user_username, - u.user_type as user_user_type,u.openid as user_openid, + u.user_type as user_user_type,u.openid as user_openid,u.rider_open_id as user_rider_open_id, u.nick_name as user_nick_name, u.email as user_email, u.phone as user_phone, u.gender as user_gender, u.avatar_name as user_avatar_name, u.avatar_path as user_avatar_path, u.enabled as user_enabled, u.pwd_reset_time as user_pwd_reset_time, u.create_by as user_create_by, @@ -108,6 +109,14 @@ where u.openid = #{openid} </select> + <select id="findByRiderOpenId" resultMap="BaseResultMap"> + select + u.password user_password, u.is_admin user_is_admin, + <include refid="Base_Column_List"/> + from sys_user u + where u.rider_open_id = #{riderOpenId} + </select> + <select id="findByEmail" resultType="com.oying.modules.system.domain.User"> select user_id as id, username from sys_user where email = #{email} -- Gitblit v1.9.3