diff --git a/.gitignore b/.gitignore index 18f34bde..da60ae44 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ docker/*/data/ docker/minio/config docker/xxljob/logs application-youlai.yml +/uploadFile/ diff --git a/src/main/java/com/youlai/boot/app/packages/component/ApkMetaParser.java b/src/main/java/com/youlai/boot/app/packages/component/ApkMetaParser.java index a3c9dc91..651e3ea4 100644 --- a/src/main/java/com/youlai/boot/app/packages/component/ApkMetaParser.java +++ b/src/main/java/com/youlai/boot/app/packages/component/ApkMetaParser.java @@ -935,6 +935,10 @@ public class ApkMetaParser { if (!Objects.equals(target.getTargetSdk(), source.getTargetSdk())) { target.setTargetSdk(source.getTargetSdk()); } + if (target.getIconBytes() == null) { + target.setIconBytes(source.getIconBytes()); + target.setIconPath(source.getIconPath()); + } } private static boolean isNotEmpty(List list) { diff --git a/src/main/java/com/youlai/boot/app/controller/AppFileController.java b/src/main/java/com/youlai/boot/client/controller/ClientFileController.java similarity index 79% rename from src/main/java/com/youlai/boot/app/controller/AppFileController.java rename to src/main/java/com/youlai/boot/client/controller/ClientFileController.java index 7170d2d1..4b4ac042 100644 --- a/src/main/java/com/youlai/boot/app/controller/AppFileController.java +++ b/src/main/java/com/youlai/boot/client/controller/ClientFileController.java @@ -1,7 +1,7 @@ -package com.youlai.boot.app.controller; +package com.youlai.boot.client.controller; -import com.youlai.boot.app.model.vo.AppFileInfo; -import com.youlai.boot.app.service.AppFileService; +import com.youlai.boot.client.model.vo.ClientFileInfo; +import com.youlai.boot.client.service.ClientFileService; import com.youlai.boot.common.result.Result; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -22,15 +22,15 @@ import org.springframework.web.multipart.MultipartFile; */ @Tag(name = "10.文件接口") @RestController -@RequestMapping("/api/v1/app/files") +@RequestMapping("/api/v1/client/files") @RequiredArgsConstructor -public class AppFileController { +public class ClientFileController { - private final AppFileService fileService; + private final ClientFileService fileService; @PostMapping @Operation(summary = "文件上传") - public Result uploadFile( + public Result uploadFile( @Parameter( name = "file", description = "表单文件对象", @@ -41,7 +41,7 @@ public class AppFileController { @RequestPart(value = "file") MultipartFile file ) { Assert.isTrue(!file.isEmpty(), "上传文件不能为空文件"); - AppFileInfo fileInfo = fileService.uploadFile(file); + ClientFileInfo fileInfo = fileService.uploadFile(file); return Result.success(fileInfo); } diff --git a/src/main/java/com/youlai/boot/app/model/entity/AppUser.java b/src/main/java/com/youlai/boot/client/model/entity/ClientUser.java similarity index 90% rename from src/main/java/com/youlai/boot/app/model/entity/AppUser.java rename to src/main/java/com/youlai/boot/client/model/entity/ClientUser.java index 88c6ebaa..c47cec8f 100644 --- a/src/main/java/com/youlai/boot/app/model/entity/AppUser.java +++ b/src/main/java/com/youlai/boot/client/model/entity/ClientUser.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.model.entity; +package com.youlai.boot.client.model.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.youlai.boot.common.base.BaseEntity; @@ -11,7 +11,7 @@ import lombok.Setter; @TableName("app_user") @Getter @Setter -public class AppUser extends BaseEntity { +public class ClientUser extends BaseEntity { /** * 用户名 */ diff --git a/src/main/java/com/youlai/boot/app/model/form/AppUserForm.java b/src/main/java/com/youlai/boot/client/model/form/ClientUserForm.java similarity index 95% rename from src/main/java/com/youlai/boot/app/model/form/AppUserForm.java rename to src/main/java/com/youlai/boot/client/model/form/ClientUserForm.java index 1d16b16a..bceba471 100644 --- a/src/main/java/com/youlai/boot/app/model/form/AppUserForm.java +++ b/src/main/java/com/youlai/boot/client/model/form/ClientUserForm.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.model.form; +package com.youlai.boot.client.model.form; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -17,7 +17,7 @@ import java.util.List; */ @Schema(description = "用户表单对象") @Data -public class AppUserForm { +public class ClientUserForm { @Schema(description="用户ID") private Long id; diff --git a/src/main/java/com/youlai/boot/app/model/vo/AppFileInfo.java b/src/main/java/com/youlai/boot/client/model/vo/ClientFileInfo.java similarity index 81% rename from src/main/java/com/youlai/boot/app/model/vo/AppFileInfo.java rename to src/main/java/com/youlai/boot/client/model/vo/ClientFileInfo.java index b0114d15..f1b4849c 100644 --- a/src/main/java/com/youlai/boot/app/model/vo/AppFileInfo.java +++ b/src/main/java/com/youlai/boot/client/model/vo/ClientFileInfo.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.model.vo; +package com.youlai.boot.client.model.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -12,7 +12,7 @@ import lombok.Data; */ @Schema(description = "文件对象") @Data -public class AppFileInfo { +public class ClientFileInfo { @Schema(description = "文件名称") private String name; diff --git a/src/main/java/com/youlai/boot/app/service/AppFileService.java b/src/main/java/com/youlai/boot/client/service/ClientFileService.java similarity index 68% rename from src/main/java/com/youlai/boot/app/service/AppFileService.java rename to src/main/java/com/youlai/boot/client/service/ClientFileService.java index 221b9b8e..46740e08 100644 --- a/src/main/java/com/youlai/boot/app/service/AppFileService.java +++ b/src/main/java/com/youlai/boot/client/service/ClientFileService.java @@ -1,6 +1,6 @@ -package com.youlai.boot.app.service; +package com.youlai.boot.client.service; -import com.youlai.boot.app.model.vo.AppFileInfo; +import com.youlai.boot.client.model.vo.ClientFileInfo; import org.springframework.web.multipart.MultipartFile; /** @@ -9,14 +9,14 @@ import org.springframework.web.multipart.MultipartFile; * @author haoxr * @since 2022/11/19 */ -public interface AppFileService { +public interface ClientFileService { /** * 上传文件 * @param file 表单文件对象 * @return 文件信息 */ - AppFileInfo uploadFile(MultipartFile file); + ClientFileInfo uploadFile(MultipartFile file); /** * 删除文件 diff --git a/src/main/java/com/youlai/boot/app/service/AppUserService.java b/src/main/java/com/youlai/boot/client/service/ClientUserService.java similarity index 90% rename from src/main/java/com/youlai/boot/app/service/AppUserService.java rename to src/main/java/com/youlai/boot/client/service/ClientUserService.java index f56853e4..9f6575c5 100644 --- a/src/main/java/com/youlai/boot/app/service/AppUserService.java +++ b/src/main/java/com/youlai/boot/client/service/ClientUserService.java @@ -1,12 +1,11 @@ -package com.youlai.boot.app.service; +package com.youlai.boot.client.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.youlai.boot.app.model.entity.AppUser; -import com.youlai.boot.app.model.form.AppUserForm; +import com.youlai.boot.client.model.entity.ClientUser; +import com.youlai.boot.client.model.form.ClientUserForm; import com.youlai.boot.common.model.Option; import com.youlai.boot.framework.security.model.SecurityUser; -import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.form.*; import com.youlai.boot.system.model.query.UserQuery; import com.youlai.boot.system.model.vo.CurrentUserVO; @@ -22,7 +21,7 @@ import java.util.List; * @author Ray.Hao * @since 2022/1/14 */ -public interface AppUserService extends IService { +public interface ClientUserService extends IService { /** * 用户分页列表 @@ -35,9 +34,9 @@ public interface AppUserService extends IService { * 获取用户表单数据 * * @param userId 用户ID - * @return {@link AppUserForm} 用户表单数据 + * @return {@link ClientUserForm} 用户表单数据 */ - AppUserForm getUserFormData(Long userId); + ClientUserForm getUserFormData(Long userId); /** @@ -46,7 +45,7 @@ public interface AppUserService extends IService { * @param userForm 用户表单对象 * @return {@link Boolean} 是否新增成功 */ - boolean saveUser(AppUserForm userForm); + boolean saveUser(ClientUserForm userForm); /** * 修改用户 @@ -55,7 +54,7 @@ public interface AppUserService extends IService { * @param userForm 用户表单对象 * @return {@link Boolean} 是否修改成功 */ - boolean updateUser(Long userId, AppUserForm userForm); + boolean updateUser(Long userId, ClientUserForm userForm); /** diff --git a/src/main/java/com/youlai/boot/app/service/impl/LocalAppFileService.java b/src/main/java/com/youlai/boot/client/service/impl/ClientClientFileService.java similarity index 85% rename from src/main/java/com/youlai/boot/app/service/impl/LocalAppFileService.java rename to src/main/java/com/youlai/boot/client/service/impl/ClientClientFileService.java index 3ab1442f..f03bc814 100644 --- a/src/main/java/com/youlai/boot/app/service/impl/LocalAppFileService.java +++ b/src/main/java/com/youlai/boot/client/service/impl/ClientClientFileService.java @@ -1,17 +1,15 @@ -package com.youlai.boot.app.service.impl; +package com.youlai.boot.client.service.impl; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; -import com.youlai.boot.app.model.vo.AppFileInfo; -import com.youlai.boot.app.service.AppFileService; +import com.youlai.boot.client.model.vo.ClientFileInfo; +import com.youlai.boot.client.service.ClientFileService; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; @@ -31,7 +29,7 @@ import java.time.LocalDateTime; //@ConditionalOnProperty(value = "oss.type", havingValue = "local") //@ConfigurationProperties(prefix = "oss.local") @RequiredArgsConstructor -public class LocalAppFileService implements AppFileService { +public class ClientClientFileService implements ClientFileService { @Value("${file-storage.local.path}") private String storagePath; @@ -43,7 +41,7 @@ public class LocalAppFileService implements AppFileService { * @return 文件信息 */ @Override - public AppFileInfo uploadFile(MultipartFile file) { + public ClientFileInfo uploadFile(MultipartFile file) { // 获取文件名 String originalFilename = file.getOriginalFilename(); // 获取文件后缀 @@ -63,7 +61,7 @@ public class LocalAppFileService implements AppFileService { } // 获取文件访问路径,因为这里是本地存储,所以直接返回文件的相对路径,需要前端自行处理访问前缀 String fileUrl = File.separator + folder + File.separator + fileName; - AppFileInfo fileInfo = new AppFileInfo(); + ClientFileInfo fileInfo = new ClientFileInfo(); fileInfo.setName(originalFilename); fileInfo.setUrl(fileUrl); return fileInfo; diff --git a/src/main/java/com/youlai/boot/app/service/impl/AppUserServiceImpl.java b/src/main/java/com/youlai/boot/client/service/impl/ClientUserServiceImpl.java similarity index 82% rename from src/main/java/com/youlai/boot/app/service/impl/AppUserServiceImpl.java rename to src/main/java/com/youlai/boot/client/service/impl/ClientUserServiceImpl.java index 920ab309..b62b3c98 100644 --- a/src/main/java/com/youlai/boot/app/service/impl/AppUserServiceImpl.java +++ b/src/main/java/com/youlai/boot/client/service/impl/ClientUserServiceImpl.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.service.impl; +package com.youlai.boot.client.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; @@ -8,11 +8,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.boot.app.converter.AppUserConverter; -import com.youlai.boot.app.mapper.AppUserMapper; -import com.youlai.boot.app.model.entity.AppUser; -import com.youlai.boot.app.model.form.AppUserForm; -import com.youlai.boot.app.service.AppUserService; +import com.youlai.boot.open.converter.ClientUserConverter; +import com.youlai.boot.open.mapper.ClientUserMapper; +import com.youlai.boot.client.model.entity.ClientUser; +import com.youlai.boot.client.model.form.ClientUserForm; +import com.youlai.boot.client.service.ClientUserService; import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.SystemConstants; import com.youlai.boot.common.exception.BusinessException; @@ -24,10 +24,7 @@ import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.support.mail.EmailService; import com.youlai.boot.support.sms.SmsService; import com.youlai.boot.support.sms.SmsTypeEnum; -import com.youlai.boot.system.converter.UserConverter; import com.youlai.boot.system.enums.DictCodeEnum; -import com.youlai.boot.system.mapper.UserMapper; -import com.youlai.boot.system.model.entity.Dept; import com.youlai.boot.system.model.entity.DictItem; import com.youlai.boot.system.model.entity.Role; import com.youlai.boot.system.model.form.*; @@ -55,7 +52,7 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Slf4j -public class AppUserServiceImpl extends ServiceImpl implements AppUserService { +public class ClientUserServiceImpl extends ServiceImpl implements ClientUserService { private final PasswordEncoder passwordEncoder; @@ -77,7 +74,7 @@ public class AppUserServiceImpl extends ServiceImpl impl private final DictItemService dictItemService; - private final AppUserConverter userConverter; + private final ClientUserConverter userConverter; /** @@ -105,10 +102,10 @@ public class AppUserServiceImpl extends ServiceImpl impl * 获取用户表单数据 * * @param userId 用户ID - * @return {@link AppUserForm} 用户表单数据 + * @return {@link ClientUserForm} 用户表单数据 */ @Override - public AppUserForm getUserFormData(Long userId) { + public ClientUserForm getUserFormData(Long userId) { return this.baseMapper.getUserFormData(userId); } @@ -120,16 +117,16 @@ public class AppUserServiceImpl extends ServiceImpl impl */ @Override @Transactional(rollbackFor = Exception.class) - public boolean saveUser(AppUserForm userForm) { + public boolean saveUser(ClientUserForm userForm) { String username = userForm.getUsername(); // 实体转换 form->entity - AppUser entity = userConverter.toEntity(userForm); + ClientUser entity = userConverter.toEntity(userForm); // 检查用户名是否已存在 - long count = this.count(new LambdaQueryWrapper() - .eq(AppUser::getUsername, username)); + long count = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getUsername, username)); Assert.isTrue(count == 0, "用户名已存在"); // 设置默认加密密码 @@ -156,23 +153,23 @@ public class AppUserServiceImpl extends ServiceImpl impl */ @Override @Transactional(rollbackFor = Exception.class) - public boolean updateUser(Long userId, AppUserForm userForm) { + public boolean updateUser(Long userId, ClientUserForm userForm) { String username = userForm.getUsername(); // 获取原用户信息 - AppUser oldUser = this.getById(userId); + ClientUser oldUser = this.getById(userId); Assert.notNull(oldUser, "用户不存在"); // 检查用户名是否已存在(排除当前用户) - long count = this.count(new LambdaQueryWrapper() - .eq(AppUser::getUsername, username) - .ne(AppUser::getId, userId) + long count = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getUsername, username) + .ne(ClientUser::getId, userId) ); Assert.isTrue(count == 0, "用户名已存在"); // form -> entity - AppUser entity = userConverter.toEntity(userForm); + ClientUser entity = userConverter.toEntity(userForm); // entity.setUpdateBy(SecurityUtils.getUserId()); // 修改用户 @@ -293,14 +290,14 @@ public class AppUserServiceImpl extends ServiceImpl impl String username = SecurityUtils.getUsername(); // 获取登录用户基础信息 - AppUser user = this.getOne(new LambdaQueryWrapper() - .eq(AppUser::getUsername, username) + ClientUser user = this.getOne(new LambdaQueryWrapper() + .eq(ClientUser::getUsername, username) .select( - AppUser::getId, - AppUser::getUsername, - AppUser::getNickname, - AppUser::getAvatar, - AppUser::getGender + ClientUser::getId, + ClientUser::getUsername, + ClientUser::getNickname, + ClientUser::getAvatar, + ClientUser::getGender // AppUser::getDeptId ) ); @@ -367,11 +364,11 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new BusinessException("请修改至少一个字段"); } - return this.update(new LambdaUpdateWrapper() - .eq(AppUser::getId, userId) - .set(formData.getNickname() != null, AppUser::getNickname, formData.getNickname()) - .set(formData.getAvatar() != null, AppUser::getAvatar, formData.getAvatar()) - .set(formData.getGender() != null, AppUser::getGender, formData.getGender()) + return this.update(new LambdaUpdateWrapper() + .eq(ClientUser::getId, userId) + .set(formData.getNickname() != null, ClientUser::getNickname, formData.getNickname()) + .set(formData.getAvatar() != null, ClientUser::getAvatar, formData.getAvatar()) + .set(formData.getGender() != null, ClientUser::getGender, formData.getGender()) ); } @@ -385,7 +382,7 @@ public class AppUserServiceImpl extends ServiceImpl impl @Override public boolean changeUserPassword(Long userId, PasswordUpdateForm data) { - AppUser user = this.getById(userId); + ClientUser user = this.getById(userId); if (user == null) { throw new BusinessException("用户不存在"); } @@ -407,9 +404,9 @@ public class AppUserServiceImpl extends ServiceImpl impl } String newPassword = data.getNewPassword(); - boolean result = this.update(new LambdaUpdateWrapper() - .eq(AppUser::getId, userId) - .set(AppUser::getPassword, passwordEncoder.encode(newPassword)) + boolean result = this.update(new LambdaUpdateWrapper() + .eq(ClientUser::getId, userId) + .set(ClientUser::getPassword, passwordEncoder.encode(newPassword)) ); if (result) { @@ -428,9 +425,9 @@ public class AppUserServiceImpl extends ServiceImpl impl */ @Override public boolean resetUserPassword(Long userId, String password) { - boolean result = this.update(new LambdaUpdateWrapper() - .eq(AppUser::getId, userId) - .set(AppUser::getPassword, passwordEncoder.encode(password)) + boolean result = this.update(new LambdaUpdateWrapper() + .eq(ClientUser::getId, userId) + .set(ClientUser::getPassword, passwordEncoder.encode(password)) ); if (result) { // 管理员重置用户密码后,使该用户的所有会话失效 @@ -449,9 +446,9 @@ public class AppUserServiceImpl extends ServiceImpl impl public boolean sendMobileCode(String mobile) { Long currentUserId = SecurityUtils.getUserId(); - long mobileCount = this.count(new LambdaQueryWrapper() - .eq(AppUser::getMobile, mobile) - .ne(AppUser::getId, currentUserId) + long mobileCount = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getMobile, mobile) + .ne(ClientUser::getId, currentUserId) ); if (mobileCount > 0) { throw new BusinessException("手机号已被其他账号绑定"); @@ -482,7 +479,7 @@ public class AppUserServiceImpl extends ServiceImpl impl public boolean bindOrChangeMobile(MobileUpdateForm form) { Long currentUserId = SecurityUtils.getUserId(); - AppUser currentUser = this.getById(currentUserId); + ClientUser currentUser = this.getById(currentUserId); if (currentUser == null) { throw new BusinessException("用户不存在"); @@ -507,9 +504,9 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new BusinessException("验证码错误"); } - long mobileCount = this.count(new LambdaQueryWrapper() - .eq(AppUser::getMobile, mobile) - .ne(AppUser::getId, currentUserId) + long mobileCount = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getMobile, mobile) + .ne(ClientUser::getId, currentUserId) ); if (mobileCount > 0) { throw new BusinessException("手机号已被其他账号绑定"); @@ -519,9 +516,9 @@ public class AppUserServiceImpl extends ServiceImpl impl // 更新手机号码 return this.update( - new LambdaUpdateWrapper() - .eq(AppUser::getId, currentUserId) - .set(AppUser::getMobile, mobile) + new LambdaUpdateWrapper() + .eq(ClientUser::getId, currentUserId) + .set(ClientUser::getMobile, mobile) ); } @@ -534,9 +531,9 @@ public class AppUserServiceImpl extends ServiceImpl impl public void sendEmailCode(String email) { Long currentUserId = SecurityUtils.getUserId(); - long emailCount = this.count(new LambdaQueryWrapper() - .eq(AppUser::getEmail, email) - .ne(AppUser::getId, currentUserId) + long emailCount = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getEmail, email) + .ne(ClientUser::getId, currentUserId) ); if (emailCount > 0) { throw new BusinessException("邮箱已被其他账号绑定"); @@ -563,7 +560,7 @@ public class AppUserServiceImpl extends ServiceImpl impl Long currentUserId = SecurityUtils.getUserId(); - AppUser currentUser = this.getById(currentUserId); + ClientUser currentUser = this.getById(currentUserId); if (currentUser == null) { throw new BusinessException("用户不存在"); } @@ -588,9 +585,9 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new BusinessException("验证码错误"); } - long emailCount = this.count(new LambdaQueryWrapper() - .eq(AppUser::getEmail, email) - .ne(AppUser::getId, currentUserId) + long emailCount = this.count(new LambdaQueryWrapper() + .eq(ClientUser::getEmail, email) + .ne(ClientUser::getId, currentUserId) ); if (emailCount > 0) { throw new BusinessException("邮箱已被其他账号绑定"); @@ -600,9 +597,9 @@ public class AppUserServiceImpl extends ServiceImpl impl // 更新邮箱地址 return this.update( - new LambdaUpdateWrapper() - .eq(AppUser::getId, currentUserId) - .set(AppUser::getEmail, email) + new LambdaUpdateWrapper() + .eq(ClientUser::getId, currentUserId) + .set(ClientUser::getEmail, email) ); } @@ -616,7 +613,7 @@ public class AppUserServiceImpl extends ServiceImpl impl public boolean unbindMobile(PasswordVerifyForm form) { Long currentUserId = SecurityUtils.getUserId(); - AppUser currentUser = this.getById(currentUserId); + ClientUser currentUser = this.getById(currentUserId); if (currentUser == null) { throw new BusinessException("用户不存在"); @@ -630,9 +627,9 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new BusinessException("当前密码错误"); } - return this.update(new LambdaUpdateWrapper() - .eq(AppUser::getId, currentUserId) - .set(AppUser::getMobile, null) + return this.update(new LambdaUpdateWrapper() + .eq(ClientUser::getId, currentUserId) + .set(ClientUser::getMobile, null) ); } @@ -646,7 +643,7 @@ public class AppUserServiceImpl extends ServiceImpl impl public boolean unbindEmail(PasswordVerifyForm form) { Long currentUserId = SecurityUtils.getUserId(); - AppUser currentUser = this.getById(currentUserId); + ClientUser currentUser = this.getById(currentUserId); if (currentUser == null) { throw new BusinessException("用户不存在"); @@ -660,9 +657,9 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new BusinessException("当前密码错误"); } - return this.update(new LambdaUpdateWrapper() - .eq(AppUser::getId, currentUserId) - .set(AppUser::getEmail, null) + return this.update(new LambdaUpdateWrapper() + .eq(ClientUser::getId, currentUserId) + .set(ClientUser::getEmail, null) ); } diff --git a/src/main/java/com/youlai/boot/common/config/FilePath.java b/src/main/java/com/youlai/boot/common/config/FilePath.java index 8c356222..212e364f 100644 --- a/src/main/java/com/youlai/boot/common/config/FilePath.java +++ b/src/main/java/com/youlai/boot/common/config/FilePath.java @@ -6,8 +6,12 @@ import org.slf4j.LoggerFactory; import java.io.File; public class FilePath { + + /** + * 有可能部署在docker中,所以需要使用绝对路径 + */ // @Value("${file.upload-dir-unix}") - private static final String unixUploadDir = "/tmp/ttstd/uploads" ; + private static final String unixUploadDir = "/home/tt/ttstd/uploads" ; // @Value("${file.upload-dir-windows}") private static final String windowsUploadDir = "uploadFile"; @@ -25,12 +29,12 @@ public class FilePath { public static String getRootPath() { String osName = System.getProperty("os.name"); logger.info("osName: {}", osName); + String projectPath = System.getProperty("user.dir"); + logger.info("projectPath: {}", projectPath); if (osName.contains("Windows")) { - String projectPath = System.getProperty("user.dir"); - logger.info("projectPath: {}", projectPath); return projectPath + File.separator + windowsUploadDir; } else { - return unixUploadDir; + return projectPath + File.separator + windowsUploadDir; } } diff --git a/src/main/java/com/youlai/boot/config/SecurityConfig.java b/src/main/java/com/youlai/boot/config/SecurityConfig.java index e372460f..7283d818 100644 --- a/src/main/java/com/youlai/boot/config/SecurityConfig.java +++ b/src/main/java/com/youlai/boot/config/SecurityConfig.java @@ -71,7 +71,7 @@ public class SecurityConfig { // 移动设备专用接口路径(需要设备签名验证,但不需要用户登录) requestMatcherRegistry.requestMatchers("/api/v1/sn/**").permitAll(); - requestMatcherRegistry.requestMatchers("/api/v1/app/**").permitAll(); + requestMatcherRegistry.requestMatchers("/api/v1/open/**").permitAll(); // 其他所有请求需登录后访问 requestMatcherRegistry.anyRequest().authenticated(); } diff --git a/src/main/java/com/youlai/boot/app/controller/AppAuthController.java b/src/main/java/com/youlai/boot/open/controller/OpenAuthController.java similarity index 71% rename from src/main/java/com/youlai/boot/app/controller/AppAuthController.java rename to src/main/java/com/youlai/boot/open/controller/OpenAuthController.java index 317a8aa0..f69067ce 100644 --- a/src/main/java/com/youlai/boot/app/controller/AppAuthController.java +++ b/src/main/java/com/youlai/boot/open/controller/OpenAuthController.java @@ -1,8 +1,8 @@ -package com.youlai.boot.app.controller; +package com.youlai.boot.open.controller; -import com.youlai.boot.app.model.req.MobileLoginReq; -import com.youlai.boot.app.model.req.MobileRegisterReq; -import com.youlai.boot.app.service.AppAuthService; +import com.youlai.boot.open.model.req.OpenLoginReq; +import com.youlai.boot.open.model.req.OpenRegisterReq; +import com.youlai.boot.open.service.OpenAuthService; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; @@ -22,19 +22,19 @@ import org.springframework.web.bind.annotation.*; */ @Tag(name = "01.认证中心") @RestController -@RequestMapping("/api/v1/app/auth/") +@RequestMapping("/api/v1/open/auth/") @RequiredArgsConstructor @Slf4j -public class AppAuthController { +public class OpenAuthController { - private final AppAuthService appAuthService; + private final OpenAuthService openAuthService; @Operation(summary = "手机号注册") @PostMapping("/register/mobile") @Log(module = LogModuleEnum.LOGIN, value = ActionTypeEnum.REGISTER) - public Result registerByMobile(@RequestBody @Valid MobileRegisterReq request) { - AuthenticationToken authenticationToken = appAuthService.registerByMobile( + public Result registerByMobile(@RequestBody @Valid OpenRegisterReq request) { + AuthenticationToken authenticationToken = openAuthService.registerByMobile( request.getMobile(), request.getCode(), request.getPassword(), @@ -48,14 +48,14 @@ public class AppAuthController { public Result sendRegisterSmsCode( @Parameter(description = "手机号", example = "18888888888") @RequestParam String mobile ) { - return Result.judge(appAuthService.sendRegisterSmsCode(mobile)); + return Result.judge(openAuthService.sendRegisterSmsCode(mobile)); } @Operation(summary = "手机号验证码登录") @PostMapping("/login/mobile") @Log(module = LogModuleEnum.LOGIN, value = ActionTypeEnum.LOGIN) - public Result loginByMobile(@RequestBody @Valid MobileLoginReq request) { - AuthenticationToken authenticationToken = appAuthService.loginBySms(request.getMobile(), request.getCode()); + public Result loginByMobile(@RequestBody @Valid OpenLoginReq request) { + AuthenticationToken authenticationToken = openAuthService.loginBySms(request.getMobile(), request.getCode()); return Result.success(authenticationToken); } diff --git a/src/main/java/com/youlai/boot/app/converter/AppUserConverter.java b/src/main/java/com/youlai/boot/open/converter/ClientUserConverter.java similarity index 58% rename from src/main/java/com/youlai/boot/app/converter/AppUserConverter.java rename to src/main/java/com/youlai/boot/open/converter/ClientUserConverter.java index 457e0501..0d17109c 100644 --- a/src/main/java/com/youlai/boot/app/converter/AppUserConverter.java +++ b/src/main/java/com/youlai/boot/open/converter/ClientUserConverter.java @@ -1,9 +1,8 @@ -package com.youlai.boot.app.converter; +package com.youlai.boot.open.converter; -import com.youlai.boot.app.model.entity.AppUser; -import com.youlai.boot.app.model.form.AppUserForm; +import com.youlai.boot.client.model.entity.ClientUser; +import com.youlai.boot.client.model.form.ClientUserForm; import com.youlai.boot.common.model.Option; -import com.youlai.boot.system.model.entity.SysUser; import com.youlai.boot.system.model.form.UserImportForm; import com.youlai.boot.system.model.form.UserProfileForm; import com.youlai.boot.system.model.vo.CurrentUserVO; @@ -21,27 +20,27 @@ import java.util.List; * @since 2022/6/8 */ @Mapper(componentModel = "spring") -public interface AppUserConverter { +public interface ClientUserConverter { - AppUserForm toForm(AppUser entity); + ClientUserForm toForm(ClientUser entity); @InheritInverseConfiguration(name = "toForm") - AppUser toEntity(AppUserForm entity); + ClientUser toEntity(ClientUserForm entity); @Mappings({ @Mapping(target = "userId", source = "id") }) - CurrentUserVO toCurrentUserVo(AppUser entity); + CurrentUserVO toCurrentUserVo(ClientUser entity); - AppUser toEntity(UserImportForm vo); + ClientUser toEntity(UserImportForm vo); - AppUser toEntity(UserProfileForm formData); + ClientUser toEntity(UserProfileForm formData); @Mappings({ @Mapping(target = "label", source = "nickname"), @Mapping(target = "value", source = "id") }) - Option toOption(AppUser entity); + Option toOption(ClientUser entity); - List> toOptions(List list); + List> toOptions(List list); } diff --git a/src/main/java/com/youlai/boot/app/mapper/AppUserMapper.java b/src/main/java/com/youlai/boot/open/mapper/ClientUserMapper.java similarity index 88% rename from src/main/java/com/youlai/boot/app/mapper/AppUserMapper.java rename to src/main/java/com/youlai/boot/open/mapper/ClientUserMapper.java index 07a8aa79..1bec2aa9 100644 --- a/src/main/java/com/youlai/boot/app/mapper/AppUserMapper.java +++ b/src/main/java/com/youlai/boot/open/mapper/ClientUserMapper.java @@ -1,9 +1,9 @@ -package com.youlai.boot.app.mapper; +package com.youlai.boot.open.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.youlai.boot.app.model.entity.AppUser; -import com.youlai.boot.app.model.form.AppUserForm; +import com.youlai.boot.client.model.entity.ClientUser; +import com.youlai.boot.client.model.form.ClientUserForm; import com.youlai.boot.common.annotation.DataPermission; import com.youlai.boot.framework.security.model.SecurityUser; import com.youlai.boot.system.model.query.UserQuery; @@ -20,7 +20,7 @@ import java.util.List; * */ @Mapper -public interface AppUserMapper extends BaseMapper { +public interface ClientUserMapper extends BaseMapper { /** * 获取用户分页列表 @@ -38,7 +38,7 @@ public interface AppUserMapper extends BaseMapper { * @param userId 用户ID * @return 用户表单详情 */ - AppUserForm getUserFormData(Long userId); + ClientUserForm getUserFormData(Long userId); /** * 根据用户名获取认证信息 diff --git a/src/main/java/com/youlai/boot/app/model/req/MobileLoginReq.java b/src/main/java/com/youlai/boot/open/model/req/OpenLoginReq.java similarity index 91% rename from src/main/java/com/youlai/boot/app/model/req/MobileLoginReq.java rename to src/main/java/com/youlai/boot/open/model/req/OpenLoginReq.java index 6fefa762..93be67d7 100644 --- a/src/main/java/com/youlai/boot/app/model/req/MobileLoginReq.java +++ b/src/main/java/com/youlai/boot/open/model/req/OpenLoginReq.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.model.req; +package com.youlai.boot.open.model.req; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -11,7 +11,7 @@ import lombok.Data; */ @Schema(description = "手机号登录请求参数") @Data -public class MobileLoginReq { +public class OpenLoginReq { @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18888888888") @NotBlank(message = "手机号不能为空") diff --git a/src/main/java/com/youlai/boot/app/model/req/MobileRegisterReq.java b/src/main/java/com/youlai/boot/open/model/req/OpenRegisterReq.java similarity index 93% rename from src/main/java/com/youlai/boot/app/model/req/MobileRegisterReq.java rename to src/main/java/com/youlai/boot/open/model/req/OpenRegisterReq.java index 388e431d..b8495e76 100644 --- a/src/main/java/com/youlai/boot/app/model/req/MobileRegisterReq.java +++ b/src/main/java/com/youlai/boot/open/model/req/OpenRegisterReq.java @@ -1,4 +1,4 @@ -package com.youlai.boot.app.model.req; +package com.youlai.boot.open.model.req; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -12,7 +12,7 @@ import jakarta.validation.constraints.Pattern; */ @Schema(description = "手机号注册请求参数") @Data -public class MobileRegisterReq { +public class OpenRegisterReq { @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18888888888") @NotBlank(message = "手机号不能为空") diff --git a/src/main/java/com/youlai/boot/app/service/AppAuthService.java b/src/main/java/com/youlai/boot/open/service/OpenAuthService.java similarity index 95% rename from src/main/java/com/youlai/boot/app/service/AppAuthService.java rename to src/main/java/com/youlai/boot/open/service/OpenAuthService.java index 294b2f32..9ff9f493 100644 --- a/src/main/java/com/youlai/boot/app/service/AppAuthService.java +++ b/src/main/java/com/youlai/boot/open/service/OpenAuthService.java @@ -1,9 +1,9 @@ -package com.youlai.boot.app.service; +package com.youlai.boot.open.service; import com.youlai.boot.auth.model.resp.CaptchaInfo; import com.youlai.boot.framework.security.model.AuthenticationToken; -public interface AppAuthService { +public interface OpenAuthService { /** * 获取验证码 diff --git a/src/main/java/com/youlai/boot/app/service/impl/AppAuthServiceImpl.java b/src/main/java/com/youlai/boot/open/service/impl/OpenAuthServiceImpl.java similarity index 90% rename from src/main/java/com/youlai/boot/app/service/impl/AppAuthServiceImpl.java rename to src/main/java/com/youlai/boot/open/service/impl/OpenAuthServiceImpl.java index 57d7953e..e23d38ba 100644 --- a/src/main/java/com/youlai/boot/app/service/impl/AppAuthServiceImpl.java +++ b/src/main/java/com/youlai/boot/open/service/impl/OpenAuthServiceImpl.java @@ -1,9 +1,9 @@ -package com.youlai.boot.app.service.impl; +package com.youlai.boot.open.service.impl; import cn.hutool.core.util.StrUtil; -import com.youlai.boot.app.model.entity.AppUser; -import com.youlai.boot.app.service.AppAuthService; -import com.youlai.boot.app.service.AppUserService; +import com.youlai.boot.client.model.entity.ClientUser; +import com.youlai.boot.open.service.OpenAuthService; +import com.youlai.boot.client.service.ClientUserService; import com.youlai.boot.auth.model.resp.CaptchaInfo; import com.youlai.boot.auth.service.CaptchaService; import com.youlai.boot.common.constant.RedisConstants; @@ -15,7 +15,6 @@ import com.youlai.boot.support.sms.SmsService; import com.youlai.boot.support.sms.SmsTypeEnum; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -38,14 +37,14 @@ import java.util.concurrent.TimeUnit; @Service @RequiredArgsConstructor @Slf4j -public class AppAuthServiceImpl implements AppAuthService { +public class OpenAuthServiceImpl implements OpenAuthService { private final AuthenticationManager authenticationManager; private final TokenManager tokenManager; private final SmsService smsService; private final RedisTemplate redisTemplate; private final CaptchaService captchaService; - private final AppUserService userService; + private final ClientUserService userService; private final PasswordEncoder passwordEncoder; @@ -62,8 +61,8 @@ public class AppAuthServiceImpl implements AppAuthService { @Override public boolean sendRegisterSmsCode(String mobile) { // 检查手机号是否已注册 - long count = userService.count(new LambdaQueryWrapper() - .eq(AppUser::getMobile, mobile)); + long count = userService.count(new LambdaQueryWrapper() + .eq(ClientUser::getMobile, mobile)); if (count > 0) { throw new BusinessException("该手机号已被注册"); } @@ -109,12 +108,12 @@ public class AppAuthServiceImpl implements AppAuthService { } // 2. 检查手机号是否已注册 - long count = userService.count(new LambdaQueryWrapper() - .eq(AppUser::getMobile, mobile)); + long count = userService.count(new LambdaQueryWrapper() + .eq(ClientUser::getMobile, mobile)); Assert.isTrue(count == 0, "该手机号已被注册"); // 3. 创建新用户 - AppUser user = new AppUser(); + ClientUser user = new ClientUser(); user.setUsername(mobile); // 使用手机号作为用户名 user.setMobile(mobile); user.setPassword(passwordEncoder.encode(password)); diff --git a/src/main/java/com/youlai/boot/support/mqtt/MqttMessageHandler.java b/src/main/java/com/youlai/boot/support/mqtt/MqttMessageHandler.java index b9bc5905..675653d8 100644 --- a/src/main/java/com/youlai/boot/support/mqtt/MqttMessageHandler.java +++ b/src/main/java/com/youlai/boot/support/mqtt/MqttMessageHandler.java @@ -41,7 +41,7 @@ public class MqttMessageHandler { * @param payload 消息内容(UTF-8 字符串) */ public void handleMessage(String topic, String payload) { - log.info("收到 MQTT 消息, topic={}, payload={}", topic, payload); + log.debug("收到 MQTT 消息, topic={}, payload={}", topic, payload); // 根据业务需要,按主题分发处理 String statusTopic = mqttProperties.getStatusTopic(); @@ -59,7 +59,7 @@ public class MqttMessageHandler { * 其中 screenOn 为可选字段,表示设备亮屏(亮屏=屏幕点亮)状态。 */ private void handleDeviceStatus(String payload) { - log.info("处理设备状态上报: {}", payload); + log.debug("处理设备状态上报: {}", payload); if (StrUtil.isBlank(payload)) { return; }