From fdb64b1dcc6a6a62958816a71b6e501d9b352778 Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Sat, 12 Jul 2025 13:57:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=EF=BC=9A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fuyuanshen/app/model/AppSmsLoginBody.java | 1 + .../mp/controller/MPAuthController.java | 102 +++++++++++ .../mp/controller/MPController.java | 37 ++++ .../fuyuanshen/mp/domian/dto/AuthUserDto.java | 46 +++++ .../com/fuyuanshen/mp/mapper/MPMapper.java | 8 + .../fuyuanshen/mp/service/MPAuthService.java | 164 ++++++++++++++++++ .../com/fuyuanshen/mp/service/MPService.java | 26 +++ .../mp/service/impl/MPAuthServiceImpl.java | 12 ++ .../mp/service/impl/MPServiceImpl.java | 43 +++++ .../web/controller/AuthController.java | 2 + .../common/core/enums/UserType.java | 8 +- .../app/controller/mp/MPController.java | 75 ++++++++ .../fuyuanshen/equipment/domain/UserApp.java | 6 + .../equipment/enums/AppUserTypeEnum.java | 38 ++++ .../equipment/service/AppUserService.java | 19 ++ .../equipment/service/DeviceService.java | 7 + .../service/impl/DeviceServiceImpl.java | 20 +++ .../service/impl/UserAppServiceImpl.java | 41 ++++- 18 files changed, 652 insertions(+), 3 deletions(-) create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPAuthController.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPController.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/domian/dto/AuthUserDto.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/mapper/MPMapper.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/service/MPAuthService.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/service/MPService.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPAuthServiceImpl.java create mode 100644 fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPServiceImpl.java create mode 100644 fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/mp/MPController.java create mode 100644 fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/AppUserTypeEnum.java diff --git a/fys-admin/src/main/java/com/fuyuanshen/app/model/AppSmsLoginBody.java b/fys-admin/src/main/java/com/fuyuanshen/app/model/AppSmsLoginBody.java index 3c20512..ba91fe5 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/app/model/AppSmsLoginBody.java +++ b/fys-admin/src/main/java/com/fuyuanshen/app/model/AppSmsLoginBody.java @@ -22,4 +22,5 @@ public class AppSmsLoginBody { */ @NotBlank(message = "租户ID不能为空") private String tenantId; + } diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPAuthController.java b/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPAuthController.java new file mode 100644 index 0000000..cec5b4a --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPAuthController.java @@ -0,0 +1,102 @@ +package com.fuyuanshen.mp.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import cn.dev33.satoken.exception.NotLoginException; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.fuyuanshen.app.model.AppSmsLoginBody; +import com.fuyuanshen.app.service.AppLoginService; +import com.fuyuanshen.common.core.constant.SystemConstants; +import com.fuyuanshen.common.core.domain.R; +import com.fuyuanshen.common.core.domain.model.AppLoginUser; +import com.fuyuanshen.common.core.domain.model.LoginUser; +import com.fuyuanshen.common.core.domain.model.RegisterBody; +import com.fuyuanshen.common.core.domain.model.SmsLoginBody; +import com.fuyuanshen.common.core.utils.*; +import com.fuyuanshen.common.encrypt.annotation.ApiEncrypt; +import com.fuyuanshen.common.json.utils.JsonUtils; +import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.common.tenant.helper.TenantHelper; +import com.fuyuanshen.equipment.domain.UserApp; +import com.fuyuanshen.equipment.enums.AppUserTypeEnum; +import com.fuyuanshen.mp.domian.dto.AuthUserDto; +import com.fuyuanshen.mp.service.MPAuthService; +import com.fuyuanshen.mp.service.MPService; +import com.fuyuanshen.system.domain.bo.SysTenantBo; +import com.fuyuanshen.system.domain.vo.SysClientVo; +import com.fuyuanshen.system.domain.vo.SysTenantVo; +import com.fuyuanshen.system.domain.vo.SysUserVo; +import com.fuyuanshen.system.service.ISysClientService; +import com.fuyuanshen.system.service.ISysConfigService; +import com.fuyuanshen.system.service.ISysTenantService; +import com.fuyuanshen.web.domain.vo.LoginTenantVo; +import com.fuyuanshen.web.domain.vo.LoginVo; +import com.fuyuanshen.web.domain.vo.TenantListVo; +import com.fuyuanshen.web.service.IAuthStrategy; +import com.fuyuanshen.web.service.SysRegisterService; +import io.swagger.v3.oas.annotations.Operation; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.sms4j.api.SmsBlend; +import org.dromara.sms4j.api.entity.SmsResponse; +import org.dromara.sms4j.core.factory.SmsFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * APP认证 + * + * @author Lion Li + */ +@Slf4j +@SaIgnore +@RequiredArgsConstructor +@RestController +@RequestMapping("/mp") +public class MPAuthController { + + private final AppLoginService loginService; + private final SysRegisterService registerService; + private final ISysConfigService configService; + private final ISysTenantService tenantService; + private final ISysClientService clientService; + private final MPAuthService mpAuthService; + private final MPService mpService; + + + @Operation(summary = "小程序登录授权") + @PostMapping(value = "/login") + public ResponseEntity login(@RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception { + + Long phoneNumber = authUser.getPhoneNumber(); + // 判断小程序用户是否存在,不存在创建 + UserApp mpUser = mpService.getMpUser(phoneNumber); + if (mpUser == null) { + RegisterBody registerBody = new RegisterBody(); + registerBody.setUsername(phoneNumber.toString()); + registerBody.setUserType(AppUserTypeEnum.XCX_USER.getCode()); + registerBody.setTenantId("894078"); + registerBody.setPassword("123456"); + mpAuthService.register(registerBody); + } + + // 去登录 + SysClientVo client = clientService.queryByClientId("ca839698e245d60aa2f0e59bd52b34f8"); + UserApp user = mpService.loadUserByUsername(phoneNumber.toString()); + LoginUser loginUser = mpAuthService.buildLoginUser(user); + LoginVo login = mpAuthService.login(loginUser, client); + + // 返回登录信息 + return ResponseEntity.ok(login); + } + + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPController.java b/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPController.java new file mode 100644 index 0000000..72af861 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/controller/MPController.java @@ -0,0 +1,37 @@ +package com.fuyuanshen.mp.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.fuyuanshen.common.core.domain.ResponseVO; +import com.fuyuanshen.equipment.service.DeviceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author: 默苍璃 + * @date: 2025-07-1208:36 + */ +@Slf4j +@RestController +@RequestMapping("/mp") +@RequiredArgsConstructor +@Tag(name = "小程序:相关接口") +@SaIgnore +public class MPController { + + private final DeviceService deviceService; + + + @GetMapping("/queryDevice") + @Operation(summary = "检查是否存在设备MAC号") + public ResponseVO queryDevice(@Parameter(name = "设备mac值") String mac) { + return ResponseVO.success(deviceService.queryDevice(mac)); + } + + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/domian/dto/AuthUserDto.java b/fys-admin/src/main/java/com/fuyuanshen/mp/domian/dto/AuthUserDto.java new file mode 100644 index 0000000..4737192 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/domian/dto/AuthUserDto.java @@ -0,0 +1,46 @@ +/* + * Copyright 2019-2025 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.fuyuanshen.mp.domian.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + + +/** + * @author Zheng Jie + * @date 2018-11-30 + */ +@Getter +@Setter +public class AuthUserDto { + + @Schema(name = "用户名") + private String username; + + @Schema(name = "手机号(APP/小程序 登录)") + private Long phoneNumber; + + @Schema(name = "密码") + private String password; + + @Schema(name = "验证码") + private String code; + + @Schema(name = "验证码的key") + private String uuid = ""; + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/mapper/MPMapper.java b/fys-admin/src/main/java/com/fuyuanshen/mp/mapper/MPMapper.java new file mode 100644 index 0000000..f9b698f --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/mapper/MPMapper.java @@ -0,0 +1,8 @@ +package com.fuyuanshen.mp.mapper; + +/** + * @author: 默苍璃 + * @date: 2025-07-1210:16 + */ +public interface MPMapper { +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPAuthService.java b/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPAuthService.java new file mode 100644 index 0000000..7ab05c3 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPAuthService.java @@ -0,0 +1,164 @@ +package com.fuyuanshen.mp.service; + +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.stp.parameter.SaLoginParameter; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Opt; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.crypto.digest.BCrypt; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import com.fuyuanshen.app.domain.vo.AppUserVo; +import com.fuyuanshen.app.service.IAppRoleService; +import com.fuyuanshen.common.core.constant.Constants; +import com.fuyuanshen.common.core.constant.SystemConstants; +import com.fuyuanshen.common.core.constant.TenantConstants; +import com.fuyuanshen.common.core.domain.dto.PostDTO; +import com.fuyuanshen.common.core.domain.dto.RoleDTO; +import com.fuyuanshen.common.core.domain.model.AppLoginUser; +import com.fuyuanshen.common.core.domain.model.LoginUser; +import com.fuyuanshen.common.core.domain.model.PasswordLoginBody; +import com.fuyuanshen.common.core.domain.model.RegisterBody; +import com.fuyuanshen.common.core.enums.LoginType; +import com.fuyuanshen.common.core.enums.UserType; +import com.fuyuanshen.common.core.exception.user.UserException; +import com.fuyuanshen.common.core.utils.*; +import com.fuyuanshen.common.json.utils.JsonUtils; +import com.fuyuanshen.common.log.event.LogininforEvent; +import com.fuyuanshen.common.redis.utils.RedisUtils; +import com.fuyuanshen.common.satoken.utils.AppLoginHelper; +import com.fuyuanshen.common.satoken.utils.LoginHelper; +import com.fuyuanshen.common.tenant.exception.TenantException; +import com.fuyuanshen.common.tenant.helper.TenantHelper; +import com.fuyuanshen.equipment.domain.Device; +import com.fuyuanshen.equipment.domain.UserApp; +import com.fuyuanshen.equipment.service.AppUserService; +import com.fuyuanshen.system.domain.SysUser; +import com.fuyuanshen.system.domain.bo.SysUserBo; +import com.fuyuanshen.system.domain.vo.*; +import com.fuyuanshen.system.service.ISysTenantService; +import com.fuyuanshen.system.service.ISysUserService; +import com.fuyuanshen.web.domain.vo.LoginVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.util.*; +import java.util.function.Supplier; + +/** + * 登录校验方法 + * + * @author Lion Li + */ + +@RequiredArgsConstructor +@Slf4j +@Service +public class MPAuthService { + + private final ISysUserService userService; + private final AppUserService appUserService; + + /** + * 小程序注册 + */ + public void register(RegisterBody registerBody) { + String tenantId = registerBody.getTenantId(); + String username = registerBody.getUsername(); + String password = registerBody.getPassword(); + // 校验用户类型是否存在 + String userType = UserType.getUserType(registerBody.getUserType()).getUserType(); + + UserApp sysUser = new UserApp(); + sysUser.setUserName(username); + sysUser.setNickName(username); + sysUser.setPhonenumber(username); + sysUser.setTenantId(tenantId); + sysUser.setUserType(registerBody.getUserType()); + sysUser.setPassword(BCrypt.hashpw(password)); + sysUser.setUserType(userType); + + appUserService.saveMpUser(sysUser); + + } + + + /** + * 记录登录信息 + * + * @param tenantId 租户ID + * @param username 用户名 + * @param status 状态 + * @param message 消息内容 + * @return + */ + private void recordLogininfor(String tenantId, String username, String status, String message) { + LogininforEvent logininforEvent = new LogininforEvent(); + logininforEvent.setTenantId(tenantId); + logininforEvent.setUsername(username); + logininforEvent.setStatus(status); + logininforEvent.setMessage(message); + logininforEvent.setRequest(ServletUtils.getRequest()); + // com.fuyuanshen.web.listener.UserActionListener + SpringUtils.context().publishEvent(logininforEvent); + } + + + public LoginVo login(LoginUser loginUser, SysClientVo client) { + loginUser.setClientKey(client.getClientKey()); + loginUser.setDeviceType(client.getDeviceType()); + SaLoginParameter model = new SaLoginParameter(); + model.setDeviceType(client.getDeviceType()); + // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置 + // 例如: 后台用户30分钟过期 app用户1天过期 + model.setTimeout(client.getTimeout()); + model.setActiveTimeout(client.getActiveTimeout()); + model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId()); + // 生成token + LoginHelper.login(loginUser, model); + + LoginVo loginVo = new LoginVo(); + loginVo.setAccessToken(StpUtil.getTokenValue()); + loginVo.setExpireIn(StpUtil.getTokenTimeout()); + loginVo.setClientId(client.getClientId()); + return loginVo; + } + + /** + * 构建登录用户 + */ + public LoginUser buildLoginUser(UserApp user) { + LoginUser loginUser = new LoginUser(); + Long userId = user.getUserId(); + loginUser.setTenantId(user.getTenantId()); + loginUser.setUserId(userId); + loginUser.setDeptId(user.getDeptId()); + loginUser.setUsername(user.getUserName()); + loginUser.setNickname(user.getNickName()); + loginUser.setUserType(user.getUserType()); + // 用户级别 + // loginUser.setUserLevel(user.getUserLevel()); + // pid + // loginUser.setPid(user.getPid()); + + // loginUser.setMenuPermission(permissionService.getMenuPermission(userId)); + // loginUser.setRolePermission(permissionService.getRolePermission(userId)); + // if (ObjectUtil.isNotNull(user.getDeptId())) { + // Opt deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById); + // loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY)); + // loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY)); + // } + // List roles = roleService.selectRolesByUserId(userId); + // // List posts = postService.selectPostsByUserId(userId); + // loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); + // loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class)); + return loginUser; + } + + + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPService.java b/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPService.java new file mode 100644 index 0000000..720720f --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/service/MPService.java @@ -0,0 +1,26 @@ +package com.fuyuanshen.mp.service; + +import com.fuyuanshen.equipment.domain.UserApp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 登录校验方法 + * + * @author Lion Li + */ + + +public interface MPService { + + + /** + * 获取小程序用户信息 + * + * @param phoneNumber 手机号 + */ + UserApp getMpUser(Long phoneNumber); + + UserApp loadUserByUsername(String username); +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPAuthServiceImpl.java b/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPAuthServiceImpl.java new file mode 100644 index 0000000..11a05e7 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPAuthServiceImpl.java @@ -0,0 +1,12 @@ +package com.fuyuanshen.mp.service.impl; + +/** + * 登录校验方法 + * + * @author Lion Li + */ + +public class MPAuthServiceImpl { + + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPServiceImpl.java b/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPServiceImpl.java new file mode 100644 index 0000000..0506314 --- /dev/null +++ b/fys-admin/src/main/java/com/fuyuanshen/mp/service/impl/MPServiceImpl.java @@ -0,0 +1,43 @@ +package com.fuyuanshen.mp.service.impl; + +import com.fuyuanshen.equipment.domain.UserApp; +import com.fuyuanshen.equipment.mapper.UserAppMapper; +import com.fuyuanshen.equipment.service.AppUserService; +import com.fuyuanshen.mp.service.MPService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 登录校验方法 + * + * @author Lion Li + */ + +@Slf4j +@Service +@RequiredArgsConstructor +public class MPServiceImpl implements MPService { + + + private final AppUserService appUserService; + + + + /** + * 获取小程序用户信息 + * + * @param phoneNumber 手机号 + */ + @Override + public UserApp getMpUser(Long phoneNumber) { + return appUserService.getMpUser(phoneNumber); + } + + @Override + public UserApp loadUserByUsername(String username) { + return appUserService.loadUserByUsername(username); + } + + +} diff --git a/fys-admin/src/main/java/com/fuyuanshen/web/controller/AuthController.java b/fys-admin/src/main/java/com/fuyuanshen/web/controller/AuthController.java index 382a20c..dee5b53 100644 --- a/fys-admin/src/main/java/com/fuyuanshen/web/controller/AuthController.java +++ b/fys-admin/src/main/java/com/fuyuanshen/web/controller/AuthController.java @@ -111,6 +111,7 @@ public class AuthController { return R.ok(loginVo); } + /** * 获取跳转URL * @@ -133,6 +134,7 @@ public class AuthController { return R.ok("操作成功", authorizeUrl); } + /** * 前端回调绑定授权(需要token) * diff --git a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/enums/UserType.java b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/enums/UserType.java index bb93e36..e8f18d6 100644 --- a/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/enums/UserType.java +++ b/fys-common/fys-common-core/src/main/java/com/fuyuanshen/common/core/enums/UserType.java @@ -21,7 +21,13 @@ public enum UserType { /** * 移动客户端用户 */ - APP_USER("app_user"); + APP_USER("app_user"), + + /** + * 小程序 用户 + */ + XCX_USER("xcx_user"); + /** * 用户类型标识(用于 token、权限识别等) diff --git a/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/mp/MPController.java b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/mp/MPController.java new file mode 100644 index 0000000..be65c38 --- /dev/null +++ b/fys-modules/fys-app/src/main/java/com/fuyuanshen/app/controller/mp/MPController.java @@ -0,0 +1,75 @@ +// package com.fuyuanshen.app.controller.mp; +// +// import io.swagger.v3.oas.annotations.tags.Tag; +// import lombok.RequiredArgsConstructor; +// import lombok.extern.slf4j.Slf4j; +// import org.springframework.http.ResponseEntity; +// import org.springframework.web.bind.annotation.GetMapping; +// import org.springframework.web.bind.annotation.RequestBody; +// import org.springframework.web.bind.annotation.RequestMapping; +// import org.springframework.web.bind.annotation.RestController; +// +// import java.util.ArrayList; +// import java.util.HashMap; +// import java.util.List; +// import java.util.Map; +// +// /** +// * @author: 默苍璃 +// * @date: 2025-06-2313:56 +// */ +// @Slf4j +// @RestController +// @RequestMapping("/mp") +// @RequiredArgsConstructor +// @Tag(name = "小程序:相关接口") +// public class MPController { +// // +// // private final TokenProvider tokenProvider; +// // private final SecurityProperties properties; +// // private final OnlineUserService onlineUserService; +// // private final DeviceService deviceService; +// // private final MPService mpService; +// // +// // @Log("小程序用户登录") +// // @ApiOperation("小程序登录授权") +// // @AnonymousPostMapping(value = "/login") +// // public ResponseEntity login(@RequestBody AuthUserDto authUser, HttpServletRequest request) throws Exception { +// // +// // // 获取用户信息 +// // User user = new User(); +// // user.setUsername("MP"); +// // user.setPassword("MP"); +// // AuthorityDto authorityDto = new AuthorityDto(); +// // authorityDto.setAuthority("MP"); +// // List authorityDtos = new ArrayList<>(); +// // authorityDtos.add(authorityDto); +// // user.setPhone(authUser.getPhoneNumber()); +// // JwtUserDto jwtUser = new JwtUserDto(null, user, null, authorityDtos); +// // +// // Authentication authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, authorityDtos); +// // SecurityContextHolder.getContext().setAuthentication(authentication); +// // // 生成令牌 +// // String token = tokenProvider.createToken(jwtUser); +// // // 返回 token 与 用户信息 +// // Map authInfo = new HashMap(2) {{ +// // put("token", properties.getTokenStartWith() + token); +// // put("user", jwtUser); +// // }}; +// // +// // // 保存在线信息 +// // onlineUserService.save(jwtUser, token, request); +// // +// // // 返回登录信息 +// // return ResponseEntity.ok(authInfo); +// // } +// // +// // +// // @GetMapping("/queryDevice") +// // @ApiOperation("是否存在设备MAC号") +// // public ResponseVO queryDevice(@ApiParam("设备mac值") String mac) { +// // return ResponseVO.success(mpService.queryDevice(mac)); +// // } +// +// +// } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java index 64679ac..4915c34 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/domain/UserApp.java @@ -30,6 +30,11 @@ public class UserApp extends TenantEntity { @TableId(value = "user_id") private Long userId; + /** + * 部门ID + */ + private Long deptId; + /** * 用户账号 */ @@ -42,6 +47,7 @@ public class UserApp extends TenantEntity { /** * 用户类型(app_user系统用户) + * 用户类型(app_user手机端,xcx_user小程序) */ private String userType; diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/AppUserTypeEnum.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/AppUserTypeEnum.java new file mode 100644 index 0000000..14001aa --- /dev/null +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/enums/AppUserTypeEnum.java @@ -0,0 +1,38 @@ +package com.fuyuanshen.equipment.enums; + +/** + * 用户类型枚举 + * + * @author: 默苍璃 + * @date: 2025-07-1210:31 + */ +public enum AppUserTypeEnum { + + APP_USER("app_user", "系统用户"), + XCX_USER("xcx_user", "小程序用户"); + + private final String code; + private final String description; + + AppUserTypeEnum(String code, String description) { + this.code = code; + this.description = description; + } + + public String getCode() { + return code; + } + + public String getDescription() { + return description; + } + + @Override + public String toString() { + return "UserType{" + + "code='" + code + '\'' + + ", description='" + description + '\'' + + '}'; + } + +} diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java index c5efd02..949a7a4 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/AppUserService.java @@ -2,6 +2,7 @@ package com.fuyuanshen.equipment.service; import com.fuyuanshen.common.mybatis.core.page.PageQuery; import com.fuyuanshen.common.mybatis.core.page.TableDataInfo; +import com.fuyuanshen.equipment.domain.UserApp; import com.fuyuanshen.equipment.domain.bo.UserAppBo; import java.util.Collection; @@ -23,5 +24,23 @@ public interface AppUserService { */ Boolean updateByBo(UserAppBo bo); + /** + * 查询小程序用户信息 + * + * @param phoneNumber + * @return + */ + UserApp getMpUser(Long phoneNumber); + + UserApp loadUserByUsername(String username); + + /** + * 新增小程序用户信息 + * + * @param userApp + * @return + */ + void saveMpUser(UserApp userApp); + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java index dadf2fb..948d00f 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/DeviceService.java @@ -91,4 +91,11 @@ public interface DeviceService extends IService { int unBindDevice(Long id); + /** + * 检查设备MAC值是否存在 + * + * @param mac + * @return + */ + Boolean queryDevice(String mac); } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java index 61799d5..a648680 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/DeviceServiceImpl.java @@ -568,4 +568,24 @@ public class DeviceServiceImpl extends ServiceImpl impleme return baseMapper.update(null, deviceUpdateWrapper); } + + + /** + * 查询设备MAC号 + * + * @param mac + * @return + */ + @Override + public Boolean queryDevice(String mac) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("device_mac", mac); + List deviceList = deviceMapper.selectList(wrapper); + if (CollectionUtil.isNotEmpty(deviceList)) { + return true; + } + return false; + } + + } diff --git a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java index 59a6e27..e552cf8 100644 --- a/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java +++ b/fys-modules/fys-equipment/src/main/java/com/fuyuanshen/equipment/service/impl/UserAppServiceImpl.java @@ -1,8 +1,10 @@ package com.fuyuanshen.equipment.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fuyuanshen.common.core.utils.MapstructUtils; import com.fuyuanshen.equipment.domain.UserApp; import com.fuyuanshen.equipment.domain.bo.UserAppBo; +import com.fuyuanshen.equipment.enums.AppUserTypeEnum; import com.fuyuanshen.equipment.mapper.UserAppMapper; import com.fuyuanshen.equipment.service.AppUserService; import lombok.RequiredArgsConstructor; @@ -22,7 +24,7 @@ import java.util.Collection; @Service public class UserAppServiceImpl implements AppUserService { - private final UserAppMapper baseMapper; + private final UserAppMapper userAppMapper; /** @@ -34,7 +36,42 @@ public class UserAppServiceImpl implements AppUserService { @Override public Boolean updateByBo(UserAppBo bo) { UserApp update = MapstructUtils.convert(bo, UserApp.class); - return baseMapper.updateById(update) > 0; + return userAppMapper.updateById(update) > 0; + } + + + /** + * 查询小程序用户信息 + * + * @param phoneNumber + * @return + */ + @Override + public UserApp getMpUser(Long phoneNumber) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("phonenumber", phoneNumber); + queryWrapper.eq("user_type", AppUserTypeEnum.XCX_USER.getCode()); + return userAppMapper.selectOne(queryWrapper); + } + + @Override + public UserApp loadUserByUsername(String username) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_name", username); + queryWrapper.eq("user_type", AppUserTypeEnum.XCX_USER.getCode()); + return userAppMapper.selectOne(queryWrapper); + } + + + /** + * 新增小程序用户信息 + * + * @param userApp + * @return + */ + @Override + public void saveMpUser(UserApp userApp) { + userAppMapper.insert(userApp); }