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