diff --git a/build.gradle b/build.gradle index 2079785..7ef5806 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,8 @@ dependencies { implementation 'com.baomidou:mybatis-plus-generator' // 代码生成器 implementation("com.baomidou:mybatis-plus-jsqlparser") // SQL 解析器 implementation 'cn.dev33:sa-token-spring-boot-starter:1.44.0' // 权限认证 + implementation 'cn.dev33:sa-token-redis-template:1.44.0' // Sa-Token 整合 RedisTemplate + implementation 'org.apache.commons:commons-pool2' // 提供 Redis 连接池 implementation 'com.alibaba:druid-spring-boot-starter:1.2.27' // 数据库连接池 implementation 'org.lionsoul:ip2region:2.7.0' // IP 归属地 implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' // mongodb @@ -43,7 +45,12 @@ dependencies { annotationProcessor 'org.projectlombok:lombok' // Lombok 注解处理 testImplementation 'org.springframework.boot:spring-boot-starter-test' // 测试框架 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // thymeleaf模版引擎 - implementation 'com.aliyun.oss:aliyun-sdk-oss:3.18.1' // OSS SDK + implementation 'com.aliyun.oss:aliyun-sdk-oss:3.18.3' // OSS SDK + implementation 'cn.hutool:hutool-all:5.8.40' // hutool工具包 + implementation 'io.springfox:springfox-swagger2:2.10.5' + implementation 'com.github.xiaoymin:knife4j-openapi2-spring-boot-starter:4.4.0' + + } tasks.named('test') { diff --git a/src/main/java/com/corewing/app/common/enums/CommonDeleteFlagEnum.java b/src/main/java/com/corewing/app/common/enums/CommonDeleteFlagEnum.java new file mode 100644 index 0000000..7d5a026 --- /dev/null +++ b/src/main/java/com/corewing/app/common/enums/CommonDeleteFlagEnum.java @@ -0,0 +1,19 @@ +package com.corewing.app.common.enums; + +import lombok.Getter; + +/** + * 通用删除标志枚举 + * + * @author xuyuxiang + * @date 2021/10/11 14:02 + **/ +@Getter +public enum CommonDeleteFlagEnum { + + /** 未删除 */ + NOT_DELETE, + + /** 已删除 */ + DELETED +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryListRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryListRequest.java new file mode 100644 index 0000000..65fd45b --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryListRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelCategoryListRequest { + + @ApiModelProperty(value = "搜索参数(分类名称)") + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryPageRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryPageRequest.java new file mode 100644 index 0000000..a96022a --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelCategoryPageRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelCategoryPageRequest { + + @ApiModelProperty(value = "搜索参数(分类名称)") + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelCreateRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelCreateRequest.java new file mode 100644 index 0000000..40bfecb --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelCreateRequest.java @@ -0,0 +1,37 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class ModelCreateRequest { + + @ApiModelProperty(value = "模型标题", required = true) + @NotBlank(message = "模型标题不能为空") + private String title; + + @ApiModelProperty(value = "模型描述", required = true) + @NotBlank(message = "模型描述不能为空") + private String description; + + @ApiModelProperty(value = "模型分类id", required = true) + @NotBlank(message = "模型分类id不能为空") + private String categoryId; + + @ApiModelProperty(value = "模型封面", required = true) + @NotBlank(message = "模型封面不能为空") + private String coverImage; + + @ApiModelProperty(value = "备注", required = false) + private String remark; + + @ApiModelProperty("模型文件") + @NotNull(message = "模型文件不能为空") + private List files; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogListRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogListRequest.java new file mode 100644 index 0000000..098ab91 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogListRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelDownloadLogListRequest { + + @ApiModelProperty(value = "模型标题", required = false) + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogPageRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogPageRequest.java new file mode 100644 index 0000000..d62d3d1 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadLogPageRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelDownloadLogPageRequest { + + @ApiModelProperty(value = "模型标题", required = false) + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadRequest.java new file mode 100644 index 0000000..0d339a7 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelDownloadRequest.java @@ -0,0 +1,15 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ModelDownloadRequest { + + @ApiModelProperty(value = "模型id", required = true) + @NotBlank(message = "模型id不能为空") + private String modelId; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteListRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteListRequest.java new file mode 100644 index 0000000..4d51edf --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteListRequest.java @@ -0,0 +1,14 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ModelFavoriteListRequest { + + @ApiModelProperty(value = "模型标题", required = false) + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelFavoritePageRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoritePageRequest.java new file mode 100644 index 0000000..0cd3691 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoritePageRequest.java @@ -0,0 +1,12 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelFavoritePageRequest { + + @ApiModelProperty(value = "模型标题", required = false) + private String searchKey; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteRequest.java new file mode 100644 index 0000000..b4c4f8c --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelFavoriteRequest.java @@ -0,0 +1,15 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ModelFavoriteRequest { + + @ApiModelProperty(value = "模型id", required = true) + @NotBlank(message = "模型id不能为空") + private String modelId; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelIdRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelIdRequest.java new file mode 100644 index 0000000..41ff3b6 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelIdRequest.java @@ -0,0 +1,15 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ModelIdRequest { + + @ApiModelProperty(value = "模型id", required = true) + @NotBlank(message = "模型Id不能为空") + private String modelId; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelLikeRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelLikeRequest.java new file mode 100644 index 0000000..ac93933 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelLikeRequest.java @@ -0,0 +1,15 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +public class ModelLikeRequest { + + @ApiModelProperty(value = "模型id", required = true) + @NotBlank(message = "模型id不能为空") + private String modelId; + +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelListRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelListRequest.java new file mode 100644 index 0000000..42b95b1 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelListRequest.java @@ -0,0 +1,23 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelListRequest { + + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty(value = "搜索参数(模型标题)") + private String searchKey; + + @ApiModelProperty(value = "模型状态(1正常 0下架 2审核中)") + private String status; + + @ApiModelProperty(value = "模型公布状态(1公开 0私有)") + private String isPublic; + + @ApiModelProperty(value = "分类id") + private String categoryId; +} diff --git a/src/main/java/com/corewing/app/dto/AppModel/ModelPageRequest.java b/src/main/java/com/corewing/app/dto/AppModel/ModelPageRequest.java new file mode 100644 index 0000000..646bd62 --- /dev/null +++ b/src/main/java/com/corewing/app/dto/AppModel/ModelPageRequest.java @@ -0,0 +1,24 @@ +package com.corewing.app.dto.AppModel; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ModelPageRequest { + + @ApiModelProperty(value = "用户id") + private Long userId; + + @ApiModelProperty(value = "搜索参数(模型标题)") + private String searchKey; + + @ApiModelProperty(value = "模型状态(1正常 0下架 2审核中)") + private String status; + + @ApiModelProperty(value = "模型公布状态(1公开 0私有)") + private String isPublic; + + @ApiModelProperty(value = "分类id") + private String categoryId; + +} diff --git a/src/main/java/com/corewing/app/dto/ModelPageRequest.java b/src/main/java/com/corewing/app/dto/ModelPageRequest.java deleted file mode 100644 index eb9b46b..0000000 --- a/src/main/java/com/corewing/app/dto/ModelPageRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.corewing.app.dto; - -import lombok.Data; - -@Data -public class ModelPageRequest { - - private Long userId; - - private String searchKey; - - private String status; - -} diff --git a/src/main/java/com/corewing/app/entity/AppModel.java b/src/main/java/com/corewing/app/entity/AppModel.java index c047628..3181a1b 100644 --- a/src/main/java/com/corewing/app/entity/AppModel.java +++ b/src/main/java/com/corewing/app/entity/AppModel.java @@ -1,5 +1,6 @@ package com.corewing.app.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -7,6 +8,8 @@ import com.corewing.app.common.base.CommonEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.util.List; + @EqualsAndHashCode(callSuper = true) @Data @TableName("app_model") @@ -40,7 +43,13 @@ public class AppModel extends CommonEntity { private String extJson; @TableField(exist = false) - private AppModelFile modelFile; + private List modelFile; + + /** + * 分类名称 + */ + @TableField(exist = false) + private String categoryTitle; } diff --git a/src/main/java/com/corewing/app/entity/AppModelCategory.java b/src/main/java/com/corewing/app/entity/AppModelCategory.java index 3de9481..380e414 100644 --- a/src/main/java/com/corewing/app/entity/AppModelCategory.java +++ b/src/main/java/com/corewing/app/entity/AppModelCategory.java @@ -1,5 +1,6 @@ package com.corewing.app.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.corewing.app.common.base.CommonEntity; diff --git a/src/main/java/com/corewing/app/entity/AppModelDownloadLog.java b/src/main/java/com/corewing/app/entity/AppModelDownloadLog.java index c8277b2..480e203 100644 --- a/src/main/java/com/corewing/app/entity/AppModelDownloadLog.java +++ b/src/main/java/com/corewing/app/entity/AppModelDownloadLog.java @@ -1,5 +1,6 @@ package com.corewing.app.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.corewing.app.common.base.CommonEntity; diff --git a/src/main/java/com/corewing/app/entity/AppModelFavorite.java b/src/main/java/com/corewing/app/entity/AppModelFavorite.java index b08734b..b537828 100644 --- a/src/main/java/com/corewing/app/entity/AppModelFavorite.java +++ b/src/main/java/com/corewing/app/entity/AppModelFavorite.java @@ -1,5 +1,6 @@ package com.corewing.app.entity; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.corewing.app.common.base.CommonEntity; @@ -14,7 +15,7 @@ public class AppModelFavorite extends CommonEntity { @TableId private Long id; - private String userId; + private Long userId; private String modelId; diff --git a/src/main/java/com/corewing/app/handler/CustomMetaObjectHandler.java b/src/main/java/com/corewing/app/handler/CustomMetaObjectHandler.java new file mode 100644 index 0000000..3925b2a --- /dev/null +++ b/src/main/java/com/corewing/app/handler/CustomMetaObjectHandler.java @@ -0,0 +1,92 @@ +package com.corewing.app.handler; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.util.EnumUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.corewing.app.common.enums.CommonDeleteFlagEnum; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.ReflectionException; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.util.Date; + +/** + * MyBatis-Plus 自动填充处理器 + * 用于自动填充创建时间和更新时间 + */ +@Component +public class CustomMetaObjectHandler implements MetaObjectHandler { + + /** 删除标志 */ + private static final String DELETE_FLAG = "deleteFlag"; + + /** 创建人 */ + private static final String CREATE_USER = "createUser"; + + /** 创建时间 */ + private static final String CREATE_TIME = "createTime"; + + /** 更新人 */ + private static final String UPDATE_USER = "updateUser"; + + /** 更新时间 */ + private static final String UPDATE_TIME = "updateTime"; + + @Override + public void insertFill(MetaObject metaObject) { + try { + //为空则设置deleteFlag + Object deleteFlag = metaObject.getValue(DELETE_FLAG); + if (ObjectUtil.isNull(deleteFlag)) { + setFieldValByName(DELETE_FLAG, EnumUtil.toString(CommonDeleteFlagEnum.NOT_DELETE), metaObject); + } + } catch (ReflectionException ignored) { } + try { + //为空则设置createUser + Object createUser = metaObject.getValue(CREATE_USER); + if (ObjectUtil.isNull(createUser)) { + setFieldValByName(CREATE_USER, this.getUserId(), metaObject); + } + } catch (ReflectionException ignored) { } + try { + //为空则设置createTime + Object createTime = metaObject.getValue(CREATE_TIME); + if (ObjectUtil.isNull(createTime)) { + setFieldValByName(CREATE_TIME, DateTime.now(), metaObject); + } + } catch (ReflectionException ignored) { } + } + + @Override + public void updateFill(MetaObject metaObject) { + try { + //设置updateUser + setFieldValByName(UPDATE_USER, this.getUserId(), metaObject); + } catch (ReflectionException ignored) { + } + try { + //设置updateTime + setFieldValByName(UPDATE_TIME, DateTime.now(), metaObject); + } catch (ReflectionException ignored) { + } + } + + /** + * 获取用户id + */ + private String getUserId() { + try { + String loginId = StpUtil.getLoginIdAsString(); + if (ObjectUtil.isNotEmpty(loginId)) { + return loginId; + } else { + return "-1"; + } + } catch (Exception e) { + return "-1"; + } + } +} diff --git a/src/main/java/com/corewing/app/handler/MyMetaObjectHandler.java b/src/main/java/com/corewing/app/handler/MyMetaObjectHandler.java deleted file mode 100644 index ab0bfd7..0000000 --- a/src/main/java/com/corewing/app/handler/MyMetaObjectHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.corewing.app.handler; - -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import org.apache.ibatis.reflection.MetaObject; -import org.springframework.stereotype.Component; - -import java.time.LocalDateTime; - -/** - * MyBatis-Plus 自动填充处理器 - * 用于自动填充创建时间和更新时间 - */ -@Component -public class MyMetaObjectHandler implements MetaObjectHandler { - - /** - * 插入时的填充策略 - */ - @Override - public void insertFill(MetaObject metaObject) { - // 自动填充创建时间 - this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); - // 自动填充更新时间 - this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); - } - - /** - * 更新时的填充策略 - */ - @Override - public void updateFill(MetaObject metaObject) { - // 自动填充更新时间 - this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); - } -} diff --git a/src/main/java/com/corewing/app/mapper/AppModelCategoryMapper.java b/src/main/java/com/corewing/app/mapper/AppModelCategoryMapper.java new file mode 100644 index 0000000..7252d95 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppModelCategoryMapper.java @@ -0,0 +1,19 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.corewing.app.dto.AppModel.ModelCategoryListRequest; +import com.corewing.app.dto.AppModel.ModelCategoryPageRequest; +import com.corewing.app.entity.AppModelCategory; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AppModelCategoryMapper extends BaseMapper { + Page page(Page page, @Param("modelCategoryPageRequest") ModelCategoryPageRequest modelCategoryPageRequest); + + List list(@Param("modelCategoryListRequest") ModelCategoryListRequest modelCategoryListRequest); + +} diff --git a/src/main/java/com/corewing/app/mapper/AppModelDownloadLogMapper.java b/src/main/java/com/corewing/app/mapper/AppModelDownloadLogMapper.java new file mode 100644 index 0000000..3536448 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppModelDownloadLogMapper.java @@ -0,0 +1,9 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.corewing.app.entity.AppModelDownloadLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AppModelDownloadLogMapper extends BaseMapper { +} diff --git a/src/main/java/com/corewing/app/mapper/AppModelFavoriteMapper.java b/src/main/java/com/corewing/app/mapper/AppModelFavoriteMapper.java new file mode 100644 index 0000000..165a7f4 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppModelFavoriteMapper.java @@ -0,0 +1,9 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.corewing.app.entity.AppModelFavorite; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AppModelFavoriteMapper extends BaseMapper { +} diff --git a/src/main/java/com/corewing/app/mapper/AppModelFileMapper.java b/src/main/java/com/corewing/app/mapper/AppModelFileMapper.java new file mode 100644 index 0000000..c7fb8d1 --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppModelFileMapper.java @@ -0,0 +1,9 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.corewing.app.entity.AppModelFile; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AppModelFileMapper extends BaseMapper { +} diff --git a/src/main/java/com/corewing/app/mapper/AppModelMapper.java b/src/main/java/com/corewing/app/mapper/AppModelMapper.java new file mode 100644 index 0000000..aa3cb4d --- /dev/null +++ b/src/main/java/com/corewing/app/mapper/AppModelMapper.java @@ -0,0 +1,28 @@ +package com.corewing.app.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.corewing.app.dto.AppModel.*; +import com.corewing.app.entity.AppModel; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface AppModelMapper extends BaseMapper { + + Page page(Page page, @Param("modelPageRequest") ModelPageRequest modelPageRequest); + + List list(@Param("modelPageRequest") ModelListRequest modelListRequest); + + AppModel getModelById(@Param("modelId") String modelId); + + List favoriteList(@Param("userId") Long userId, @Param("modelFavoriteListRequest") ModelFavoriteListRequest modelFavoriteListRequest); + + Page favoritePage(Page page, @Param("userId") Long userId, @Param("modelFavoritePageRequest") ModelFavoritePageRequest modelFavoritePageRequest); + + List downloadLogList(@Param("userId") Long userId, @Param("modelDownloadLogListRequest") ModelDownloadLogListRequest modelDownloadLogListRequest); + + Page downloadLogPage(Page page, @Param("userId") Long userId, @Param("modelDownloadLogPageRequest") ModelDownloadLogPageRequest modelDownloadLogPageRequest); +} diff --git a/src/main/java/com/corewing/app/modules/app/AppContactMsgController.java b/src/main/java/com/corewing/app/modules/app/AppContactMsgController.java index 1575998..5d686ec 100644 --- a/src/main/java/com/corewing/app/modules/app/AppContactMsgController.java +++ b/src/main/java/com/corewing/app/modules/app/AppContactMsgController.java @@ -3,6 +3,8 @@ package com.corewing.app.modules.app; import com.corewing.app.common.Result; import com.corewing.app.entity.ContactMsg; import com.corewing.app.service.ContactMsgService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -10,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +@Api(tags = "官网反馈消息接口") @RestController @RequestMapping("/contactMsg") public class AppContactMsgController { @@ -17,6 +20,7 @@ public class AppContactMsgController { @Resource private ContactMsgService contactMsgService; + @ApiOperation("消息保存接口") @PostMapping("/save") public Result save(@RequestBody ContactMsg contactMsg) { return Result.isBool(contactMsgService.save(contactMsg)); diff --git a/src/main/java/com/corewing/app/modules/app/AppFeedbackController.java b/src/main/java/com/corewing/app/modules/app/AppFeedbackController.java index 8815db5..52a0a7b 100644 --- a/src/main/java/com/corewing/app/modules/app/AppFeedbackController.java +++ b/src/main/java/com/corewing/app/modules/app/AppFeedbackController.java @@ -11,6 +11,8 @@ import com.corewing.app.util.DingTalkUtil; import com.corewing.app.util.I18nUtil; import com.corewing.app.util.Ip2RegionUtil; import com.corewing.app.util.IpUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -21,6 +23,7 @@ import java.util.List; /** * 问题反馈 Controller */ +@Api(tags = "问题反馈接口") @RestController @RequestMapping("/feedback") public class AppFeedbackController { @@ -38,6 +41,7 @@ public class AppFeedbackController { /** * 创建反馈(支持匿名提交) */ + @ApiOperation("创建反馈") @PostMapping public Result create(@RequestBody FeedbackRequest request, HttpServletRequest httpRequest) { try { @@ -75,6 +79,7 @@ public class AppFeedbackController { /** * 查询当前用户的反馈列表 */ + @ApiOperation("查询当前用户的反馈列表") @GetMapping("/my") public Result> getMyFeedbackList() { try { @@ -90,6 +95,7 @@ public class AppFeedbackController { /** * 根据ID查询反馈详情 */ + @ApiOperation("根据id查询反馈详情") @GetMapping("/{id}") public Result getById(@PathVariable Long id) { try { @@ -112,6 +118,7 @@ public class AppFeedbackController { * @param feedbackType 问题类型(可选) * @param status 状态(可选) */ + @ApiOperation("分页查询反馈列表") @GetMapping("/page") public Result> getPageList( @RequestParam(defaultValue = "1") Long current, @@ -131,6 +138,7 @@ public class AppFeedbackController { /** * 更新反馈状态 */ + @ApiOperation("更新反馈状态") @PutMapping("/{id}/status") public Result updateStatus(@PathVariable Long id, @RequestParam Integer status) { try { @@ -147,6 +155,7 @@ public class AppFeedbackController { /** * 删除反馈 */ + @ApiOperation("删除反馈") @DeleteMapping("/{id}") public Result delete(@PathVariable Long id) { try { @@ -163,6 +172,7 @@ public class AppFeedbackController { /** * 测试钉钉推送 */ + @ApiOperation("测试钉钉推送") @GetMapping("/test-dingtalk") public Result testDingTalk() { try { @@ -184,6 +194,7 @@ public class AppFeedbackController { /** * 发送反馈信息到钉钉 */ + @ApiOperation("发送反馈信息到钉钉") private void sendFeedbackToDingTalk(Feedback feedback, String submitIp, String submitRegion) { try { String title = I18nUtil.getMessage("dingtalk.feedback.title"); diff --git a/src/main/java/com/corewing/app/modules/app/AppFeedbackLogController.java b/src/main/java/com/corewing/app/modules/app/AppFeedbackLogController.java index 0abe930..006d2ff 100644 --- a/src/main/java/com/corewing/app/modules/app/AppFeedbackLogController.java +++ b/src/main/java/com/corewing/app/modules/app/AppFeedbackLogController.java @@ -3,6 +3,8 @@ package com.corewing.app.modules.app; import com.corewing.app.common.Result; import com.corewing.app.entity.FeedbackLog; import com.corewing.app.service.FeedbackLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -13,6 +15,7 @@ import javax.annotation.Resource; /** * 上传日志接口控制器 */ +@Api(tags = "反馈日志接口") @RestController @RequestMapping("/feedback_log") public class AppFeedbackLogController { @@ -25,6 +28,7 @@ public class AppFeedbackLogController { * @param feedbackLog * @return */ + @ApiOperation("上传日志") @PostMapping("/uploadFeedbackLog") public Result uploadFeedbackLog(MultipartFile file, FeedbackLog feedbackLog) { return Result.isBool(feedbackLogService.uploadFeedbackLog(file, feedbackLog)); diff --git a/src/main/java/com/corewing/app/modules/app/AppFirmwareController.java b/src/main/java/com/corewing/app/modules/app/AppFirmwareController.java index 2631ab4..7c0f7fd 100644 --- a/src/main/java/com/corewing/app/modules/app/AppFirmwareController.java +++ b/src/main/java/com/corewing/app/modules/app/AppFirmwareController.java @@ -7,12 +7,15 @@ import com.corewing.app.common.Result; import com.corewing.app.entity.Firmware; import com.corewing.app.service.FirmwareService; import com.corewing.app.util.I18nUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; /** * 固件 Controller */ +@Api(tags = "固件接口") @RestController @RequestMapping("/firmware") public class AppFirmwareController { @@ -26,6 +29,7 @@ public class AppFirmwareController { /** * 根据ID查询固件 */ + @ApiOperation("根据id查询固件") @GetMapping("/{id}") public Result getById(@PathVariable Long id) { Firmware firmware = firmwareService.getById(id); @@ -43,6 +47,7 @@ public class AppFirmwareController { * @param firmwareName 固件名称(可选) * @param firmwareType 固件类型(可选) */ + @ApiOperation("分页查询固件列表") @GetMapping("/page") public Result> page( @RequestParam(defaultValue = "1") Long current, @@ -73,6 +78,7 @@ public class AppFirmwareController { /** * 查询所有固件 */ + @ApiOperation("查询所有固件集合") @GetMapping("/list") public Result> list() { java.util.List list = firmwareService.list(); @@ -84,6 +90,7 @@ public class AppFirmwareController { * * @param firmwareType 固件类型 */ + @ApiOperation("根据类型查询固件版本") @GetMapping("/type/{firmwareType}") public Result> listByType(@PathVariable Integer firmwareType) { if (firmwareType == null) { diff --git a/src/main/java/com/corewing/app/modules/app/AppModelController.java b/src/main/java/com/corewing/app/modules/app/AppModelController.java index e9c68c7..945961e 100644 --- a/src/main/java/com/corewing/app/modules/app/AppModelController.java +++ b/src/main/java/com/corewing/app/modules/app/AppModelController.java @@ -1,27 +1,222 @@ package com.corewing.app.modules.app; +import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.corewing.app.common.Result; -import com.corewing.app.dto.ModelPageRequest; +import com.corewing.app.dto.AppModel.*; import com.corewing.app.entity.AppModel; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.corewing.app.entity.AppModelCategory; +import com.corewing.app.service.AppModelCategoryService; +import com.corewing.app.service.AppModelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; /** * 模型 */ @RestController @RequestMapping("/model") +@Validated +@Api(tags = "模型接口") public class AppModelController { + @Resource + private AppModelService appModelService; + + @Resource + private AppModelCategoryService appModelCategoryService; + /** - * 获取模型集合 + * 获取模型分页 * @param modelPageRequest * @return */ + @ApiOperation("模型数据分页") + @GetMapping("/page") public Result> page(ModelPageRequest modelPageRequest) { - return Result.success(); + return Result.success(appModelService.page(modelPageRequest)); + } + + /** + * 获取模型集合 + * @param modelListRequest + * @return + */ + @ApiOperation("模型数据集合") + @GetMapping("/list") + public Result> list(ModelListRequest modelListRequest) { + return Result.success(appModelService.list(modelListRequest)); } + /** + * 获取模型分类分页 + * @param modelCategoryPageRequest + * @return + */ + @ApiOperation("模型分类数据分页") + @GetMapping("/category/page") + public Result> categoryPage(ModelCategoryPageRequest modelCategoryPageRequest) { + return Result.success(appModelCategoryService.page(modelCategoryPageRequest)); + } + + /** + * 获取模型分类集合 + * @param modelCategoryListRequest + * @return + */ + @ApiOperation("模型分类数据集合") + @GetMapping("/category/list") + public Result> categoryList(ModelCategoryListRequest modelCategoryListRequest) { + return Result.success(appModelCategoryService.list(modelCategoryListRequest)); + } + + /** + * 获取模型分类树形集合 + * @param modelCategoryListRequest + * @return + */ + @ApiOperation("模型分类树形集合") + @GetMapping("/category/tree") + public Result>> categoryTree(ModelCategoryListRequest modelCategoryListRequest) { + return Result.success(appModelCategoryService.tree(modelCategoryListRequest)); + } + + /** + * 模型收藏 + * @param modelFavoriteRequest + * @return + */ + @ApiOperation("收藏模型") + @PostMapping("/favorite") + public Result favorite(@RequestBody @Valid ModelFavoriteRequest modelFavoriteRequest) { + return Result.isBool(appModelService.favorite(modelFavoriteRequest)); + } + + /** + * 增加模型下载记录 + * @param modelDownloadRequest + * @return + */ + @ApiOperation("增加模型下载记录") + @PostMapping("/download") + public Result download(@RequestBody @Valid ModelDownloadRequest modelDownloadRequest) { + return Result.isBool(appModelService.download(modelDownloadRequest)); + } + + /** + * 点赞模型 + * @param modelLikeRequest + * @return + */ + @ApiOperation("点赞模型") + @PostMapping("/like") + public Result like(@RequestBody @Valid ModelLikeRequest modelLikeRequest) { + return Result.isBool(appModelService.like(modelLikeRequest)); + } + + /** + * 模型详情 + * @return + */ + @ApiOperation("模型详情") + @GetMapping("/detail/{modelId}") + public Result detail(@PathVariable String modelId) { + return Result.success(appModelService.detail(modelId)); + } + + /** + * 创建模型 + * @param modelCreateRequest + * @return + */ + @ApiOperation("创建模型") + @PostMapping("/create") + public Result create(@Valid ModelCreateRequest modelCreateRequest) { + return Result.isBool(appModelService.create(modelCreateRequest)); + } + + /** + * 提交模型审核 + * @param modelIdRequest + * @return + */ + @ApiOperation("提交模型审核") + @PostMapping("/audit") + public Result audit(@RequestBody @Valid ModelIdRequest modelIdRequest) { + return Result.isBool(appModelService.audit(modelIdRequest)); + } + + /** + * 获取收藏列表 + * @param modelFavoriteListRequest + * @return + */ + @ApiOperation("收藏模型列表") + @GetMapping("/favorite/list") + public Result> favoriteList(ModelFavoriteListRequest modelFavoriteListRequest) { + return Result.success(appModelService.favoriteList(modelFavoriteListRequest)); + } + + /** + * 获取收藏分页列表 + * @param modelFavoritePageRequest + * @return + */ + @ApiOperation("收藏模型分页列表") + @GetMapping("/favorite/page") + public Result> favoritePage(ModelFavoritePageRequest modelFavoritePageRequest) { + return Result.success(appModelService.favoritePage(modelFavoritePageRequest)); + } + + /** + * 模型下架 + * @param modelIdRequest + * @return + */ + @ApiOperation("模型下架") + @PostMapping("/delisted") + public Result delisted(@RequestBody @Valid ModelIdRequest modelIdRequest) { + return Result.isBool(appModelService.delisted(modelIdRequest)); + } + + + /** + * 模型下载记录列表 + * @param modelDownloadLogListRequest + * @return + */ + @ApiOperation("模型下载记录列表") + @GetMapping("/download_log/list") + public Result> downloadLogList(ModelDownloadLogListRequest modelDownloadLogListRequest) { + return Result.success(appModelService.downloadLogList(modelDownloadLogListRequest)); + } + + /** + * 模型下载记录分页列表 + * @param modelDownloadLogPageRequest + * @return + */ + @ApiOperation("模型下载记录分页列表") + @GetMapping("/download_log/page") + public Result> downloadLogPage(ModelDownloadLogPageRequest modelDownloadLogPageRequest) { + return Result.success(appModelService.downloadLogPage(modelDownloadLogPageRequest)); + } + + /** + * 删除模型 + * @return + */ + @ApiOperation("删除模型") + @DeleteMapping("/delete/{id}") + public Result delete(@PathVariable String id) { + return Result.isBool(appModelService.delete(id)); + } + } diff --git a/src/main/java/com/corewing/app/modules/app/AppParamsCenterController.java b/src/main/java/com/corewing/app/modules/app/AppParamsCenterController.java index 8be3e1f..33272bb 100644 --- a/src/main/java/com/corewing/app/modules/app/AppParamsCenterController.java +++ b/src/main/java/com/corewing/app/modules/app/AppParamsCenterController.java @@ -10,6 +10,8 @@ import com.corewing.app.entity.ParamsCenter; import com.corewing.app.service.ParamsCenterService; import com.corewing.app.util.I18nUtil; import com.corewing.app.vo.ParamsCenterVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -18,6 +20,7 @@ import java.util.List; /** * 参数配置中心 Controller */ +@Api(tags = "参数配置中心接口") @RestController @RequestMapping("/params") public class AppParamsCenterController { @@ -31,6 +34,7 @@ public class AppParamsCenterController { /** * 创建参数配置 */ + @ApiOperation("创建参数配置接口") @PostMapping public Result create(@Valid @RequestBody CreateParamRequest request) { try { @@ -60,6 +64,7 @@ public class AppParamsCenterController { /** * 更新参数配置 */ + @ApiOperation("更新参数配置接口") @PutMapping public Result update(@Valid @RequestBody UpdateParamRequest request) { try { @@ -97,6 +102,7 @@ public class AppParamsCenterController { /** * 删除参数配置 */ + @ApiOperation("根据id删除参数配置") @DeleteMapping("/{id}") public Result delete(@PathVariable Long id) { try { @@ -124,6 +130,7 @@ public class AppParamsCenterController { /** * 根据ID查询参数配置 */ + @ApiOperation("根据id查询参数配置") @GetMapping("/{id}") public Result getById(@PathVariable Long id) { try { @@ -146,6 +153,7 @@ public class AppParamsCenterController { /** * 查询所有公共参数列表(公开接口,支持飞控型号过滤) */ + @ApiOperation("获取所有公共参数集合") @GetMapping("/all/list") public Result> listAll(@RequestParam(required = false) String fcModel) { try { @@ -159,6 +167,7 @@ public class AppParamsCenterController { /** * 查询当前用户的参数列表(支持飞控型号过滤) */ + @ApiOperation("获取当前用户的参数列表") @GetMapping("/my/list") public Result> listMy(@RequestParam(required = false) String fcModel) { try { @@ -173,6 +182,7 @@ public class AppParamsCenterController { /** * 分页查询所有参数列表(公开接口,支持飞控型号过滤) */ + @ApiOperation("分页查询所有公共参数集合") @GetMapping("/all/page") public Result> pageAll( @RequestParam(defaultValue = "1") Long current, @@ -190,6 +200,7 @@ public class AppParamsCenterController { /** * 分页查询当前用户的参数列表(支持飞控型号过滤) */ + @ApiOperation("分页查询当前用户参数列表") @GetMapping("/my/page") public Result> pageMy( @RequestParam(defaultValue = "1") Long current, @@ -208,6 +219,7 @@ public class AppParamsCenterController { /** * 增加下载次数 */ + @ApiOperation("增加参数中心下载次数") @PostMapping("/{id}/download") public Result incrementDownloadCount(@PathVariable Long id) { try { @@ -236,6 +248,7 @@ public class AppParamsCenterController { * @param id * @return */ + @ApiOperation("发布公共参数提交审核") @GetMapping("/review/{id}") public Result review(@PathVariable Long id) { try { diff --git a/src/main/java/com/corewing/app/modules/app/AppPrivacyPolicyController.java b/src/main/java/com/corewing/app/modules/app/AppPrivacyPolicyController.java index b1e2b9a..1ec36e3 100644 --- a/src/main/java/com/corewing/app/modules/app/AppPrivacyPolicyController.java +++ b/src/main/java/com/corewing/app/modules/app/AppPrivacyPolicyController.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.corewing.app.common.Result; import com.corewing.app.entity.PrivacyPolicy; import com.corewing.app.service.PrivacyPolicyService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; @@ -17,6 +19,7 @@ import java.util.List; /** * 隐私政策与协议 */ +@Api(tags = "隐私政策与协议") @Controller @RequestMapping("/privacy_policy") public class AppPrivacyPolicyController { @@ -28,6 +31,7 @@ public class AppPrivacyPolicyController { * 隐私政策列表 * @return */ + @ApiOperation("隐私政策列表") @GetMapping("/view_list/{lang}") public String viewList(@PathVariable String lang, ModelMap modelMap) { List list = privacyPolicyService.list(); @@ -42,6 +46,7 @@ public class AppPrivacyPolicyController { * @param category * @return */ + @ApiOperation("根据类型获取集合数据") @GetMapping("/getListByCategory/{category}") @ResponseBody public Result getListByCategory(@PathVariable Integer category) { diff --git a/src/main/java/com/corewing/app/modules/app/AppReplaySessionController.java b/src/main/java/com/corewing/app/modules/app/AppReplaySessionController.java index 455aace..dc943d3 100644 --- a/src/main/java/com/corewing/app/modules/app/AppReplaySessionController.java +++ b/src/main/java/com/corewing/app/modules/app/AppReplaySessionController.java @@ -5,11 +5,14 @@ import com.corewing.app.common.Result; import com.corewing.app.dto.uploadReplaySessionRequest; import com.corewing.app.entity.ReplaySession; import com.corewing.app.service.ReplaySessionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; +@Api(tags = "飞行记录接口") @RestController @RequestMapping("/replay-session") public class AppReplaySessionController { @@ -21,6 +24,7 @@ public class AppReplaySessionController { * 获取飞行记录 * @return */ + @ApiOperation("获取当前用户飞行记录") @GetMapping("/getReplayList") public Result> getReplayList() { return Result.success(replaySessionService.getReplayList(StpUtil.getLoginId())); @@ -31,6 +35,7 @@ public class AppReplaySessionController { * @param uploadReplaySessionRequests * @return */ + @ApiOperation("上传飞行记录") @PostMapping("/uploadReplaySession") public Result uploadReplaySession(@RequestBody List uploadReplaySessionRequests) { return Result.isBool(replaySessionService.uploadReplaySession(uploadReplaySessionRequests)); @@ -41,6 +46,7 @@ public class AppReplaySessionController { * @param syncId * @return */ + @ApiOperation("根据同步id删除飞行记录") @DeleteMapping("/deleteReplaySession/{syncId}") public Result deleteReplaySession(@PathVariable String syncId) { return Result.isBool(replaySessionService.deleteReplaySession(syncId)); diff --git a/src/main/java/com/corewing/app/modules/app/AppTutorialController.java b/src/main/java/com/corewing/app/modules/app/AppTutorialController.java index 785a984..dee648d 100644 --- a/src/main/java/com/corewing/app/modules/app/AppTutorialController.java +++ b/src/main/java/com/corewing/app/modules/app/AppTutorialController.java @@ -9,6 +9,8 @@ import com.corewing.app.entity.TutorialCategory; import com.corewing.app.service.TutorialCategoryService; import com.corewing.app.service.TutorialService; import com.corewing.app.util.I18nUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -19,6 +21,7 @@ import java.util.List; /** * 教程接口 */ +@Api(tags = "教程接口") @RequestMapping("/tutorial") @Controller @Slf4j @@ -38,6 +41,7 @@ public class AppTutorialController { * @param model 数据模型 * @return 详情页 */ + @ApiOperation("跳转到界面查看教程详情") @GetMapping("/viewDetail/{tutorialId}") public String viewDetail(@PathVariable Long tutorialId, ModelMap model) { Tutorial tutorial = tutorialService.getById(tutorialId); @@ -51,6 +55,7 @@ public class AppTutorialController { * @param tutorialId 教程id * @return */ + @ApiOperation("添加查看次数") @GetMapping("/addViewCount") @ResponseBody public Result addViewCount(@RequestParam Long tutorialId) { @@ -69,6 +74,7 @@ public class AppTutorialController { * @param firstStatus 置首状态(选填) * */ + @ApiOperation("分类查询集合") @GetMapping("/category") @ResponseBody public Result> category( @@ -91,6 +97,7 @@ public class AppTutorialController { * @param tutorialTitle 教程标题(选填) * */ + @ApiOperation("分页查询教程列表") @GetMapping("/page") @ResponseBody public Result> getPageList( diff --git a/src/main/java/com/corewing/app/modules/app/AppUserController.java b/src/main/java/com/corewing/app/modules/app/AppUserController.java index 3603188..a7b7369 100755 --- a/src/main/java/com/corewing/app/modules/app/AppUserController.java +++ b/src/main/java/com/corewing/app/modules/app/AppUserController.java @@ -8,6 +8,8 @@ import com.corewing.app.service.UserService; import com.corewing.app.service.VerifyCodeService; import com.corewing.app.util.I18nUtil; import com.corewing.app.util.IpUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -18,6 +20,7 @@ import java.util.Map; /** * 应用用户 Controller */ +@Api(tags = "用户接口") @RestController @RequestMapping("/user") public class AppUserController { @@ -33,6 +36,7 @@ public class AppUserController { /** * 发送验证码 */ + @ApiOperation("发送验证码接口") @PostMapping("/sendCode") public Result sendCode(@RequestBody SendCodeRequest request) { try { @@ -49,6 +53,7 @@ public class AppUserController { /** * 用户登录(支持用户名/邮箱/手机号) */ + @ApiOperation("用户登录接口") @PostMapping("/login") public Result> login(@RequestBody LoginRequest request, HttpServletRequest httpRequest) { try { @@ -73,6 +78,7 @@ public class AppUserController { /** * 用户注册(需要验证码) */ + @ApiOperation("用户注册接口") @PostMapping("/register") public Result register(@RequestBody RegisterRequest request, HttpServletRequest httpRequest) { try { @@ -95,6 +101,7 @@ public class AppUserController { /** * 用户登出 */ + @ApiOperation("用户登出接口") @PostMapping("/logout") public Result logout() { StpUtil.logout(); @@ -104,6 +111,7 @@ public class AppUserController { /** * 获取当前登录用户信息 */ + @ApiOperation("获取当前登录用户信息") @GetMapping("/info") public Result getUserInfo() { Long userId = StpUtil.getLoginIdAsLong(); @@ -116,6 +124,7 @@ public class AppUserController { /** * 根据ID查询用户 */ + @ApiOperation("根据id查询用户") @GetMapping("/{id}") public Result getById(@PathVariable Long id) { User user = userService.getById(id); @@ -130,6 +139,7 @@ public class AppUserController { /** * 更新用户信息 */ + @ApiOperation("更新用户信息") @PutMapping("/update") public Result update(@RequestBody User user) { Long userId = StpUtil.getLoginIdAsLong(); @@ -146,6 +156,7 @@ public class AppUserController { /** * 修改密码 */ + @ApiOperation("用户修改密码") @PutMapping("/password") public Result updatePassword(@RequestBody UpdatePasswordRequest request) { try { @@ -178,6 +189,7 @@ public class AppUserController { * @param request * @return */ + @ApiOperation("忘记密码") @PutMapping("/forgetPassword") public Result forgetPassword(@RequestBody ForgetPasswordRequest request) { return Result.isBool(userService.forgetPassword(request)); @@ -187,6 +199,7 @@ public class AppUserController { * 验证码登录 * @return */ + @ApiOperation("验证码登录") @PostMapping("/codeLogin") public Result> codeLogin(@RequestBody CodeLoginRequest codeLoginRequest, HttpServletRequest request) { @@ -208,6 +221,7 @@ public class AppUserController { * @param logoffRequest * @return */ + @ApiOperation("注销用户") @DeleteMapping("/delete") public Result logoff(@RequestBody @Valid LogoffRequest logoffRequest) { return Result.isBool(userService.logoff(logoffRequest)); @@ -217,6 +231,7 @@ public class AppUserController { * 注销发送验证码 * @return */ + @ApiOperation("发送注销验证码") @PostMapping("/delete/sendCode") public Result> deleteSendCode() { return userService.deleteSendCode(); diff --git a/src/main/java/com/corewing/app/modules/app/AppVersionController.java b/src/main/java/com/corewing/app/modules/app/AppVersionController.java index 5c4b0d0..249b467 100644 --- a/src/main/java/com/corewing/app/modules/app/AppVersionController.java +++ b/src/main/java/com/corewing/app/modules/app/AppVersionController.java @@ -4,6 +4,8 @@ import com.corewing.app.common.Result; import com.corewing.app.dto.CheckVersionRequest; import com.corewing.app.entity.AppVersion; import com.corewing.app.service.AppVersionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -13,6 +15,7 @@ import javax.annotation.Resource; /** * app升级校验接口 */ +@Api(tags = "APP版本接口") @RestController @RequestMapping("/app_version") public class AppVersionController { @@ -25,6 +28,7 @@ public class AppVersionController { * @param checkVersionRequest * @return */ + @ApiOperation("校验是否有新版本") @GetMapping("/checkUpdate") public Result checkUpdate(CheckVersionRequest checkVersionRequest) { AppVersion version = appVersionService.getNewAppVersion(checkVersionRequest); diff --git a/src/main/java/com/corewing/app/service/AppModelCategoryService.java b/src/main/java/com/corewing/app/service/AppModelCategoryService.java new file mode 100644 index 0000000..9f2c226 --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppModelCategoryService.java @@ -0,0 +1,23 @@ +package com.corewing.app.service; + +import cn.hutool.core.lang.tree.Tree; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.dto.AppModel.ModelCategoryListRequest; +import com.corewing.app.dto.AppModel.ModelCategoryPageRequest; +import com.corewing.app.dto.AppModel.ModelDownloadRequest; +import com.corewing.app.dto.AppModel.ModelFavoriteRequest; +import com.corewing.app.entity.AppModelCategory; + +import javax.validation.Valid; +import java.util.List; + +public interface AppModelCategoryService extends IService { + + Page page(ModelCategoryPageRequest modelCategoryPageRequest); + + List list(ModelCategoryListRequest modelCategoryListRequest); + + List> tree(ModelCategoryListRequest modelCategoryListRequest); + +} diff --git a/src/main/java/com/corewing/app/service/AppModelDownloadLogService.java b/src/main/java/com/corewing/app/service/AppModelDownloadLogService.java new file mode 100644 index 0000000..824f5f4 --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppModelDownloadLogService.java @@ -0,0 +1,8 @@ +package com.corewing.app.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.entity.AppModelDownloadLog; + +public interface AppModelDownloadLogService extends IService { + +} diff --git a/src/main/java/com/corewing/app/service/AppModelFavoriteService.java b/src/main/java/com/corewing/app/service/AppModelFavoriteService.java new file mode 100644 index 0000000..99bd898 --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppModelFavoriteService.java @@ -0,0 +1,7 @@ +package com.corewing.app.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.entity.AppModelFavorite; + +public interface AppModelFavoriteService extends IService { +} diff --git a/src/main/java/com/corewing/app/service/AppModelFileService.java b/src/main/java/com/corewing/app/service/AppModelFileService.java new file mode 100644 index 0000000..1ef6784 --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppModelFileService.java @@ -0,0 +1,7 @@ +package com.corewing.app.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.entity.AppModelFile; + +public interface AppModelFileService extends IService { +} diff --git a/src/main/java/com/corewing/app/service/AppModelService.java b/src/main/java/com/corewing/app/service/AppModelService.java new file mode 100644 index 0000000..e1dc8a8 --- /dev/null +++ b/src/main/java/com/corewing/app/service/AppModelService.java @@ -0,0 +1,39 @@ +package com.corewing.app.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.corewing.app.dto.AppModel.*; +import com.corewing.app.entity.AppModel; + +import java.util.List; + +public interface AppModelService extends IService { + + Page page(ModelPageRequest modelPageRequest); + + List list(ModelListRequest modelListRequest); + + boolean like(ModelLikeRequest modelLikeRequest); + + boolean favorite(ModelFavoriteRequest modelFavoriteRequest); + + boolean download(ModelDownloadRequest modelDownloadRequest); + + AppModel detail(String modelId); + + boolean create(ModelCreateRequest modelCreateRequest); + + boolean audit(ModelIdRequest modelIdRequest); + + List favoriteList(ModelFavoriteListRequest modelFavoriteListRequest); + + Page favoritePage(ModelFavoritePageRequest modelFavoritePageRequest); + + boolean delisted(ModelIdRequest modelIdRequest); + + List downloadLogList(ModelDownloadLogListRequest modelDownloadLogListRequest); + + Page downloadLogPage(ModelDownloadLogPageRequest modelDownloadLogPageRequest); + + boolean delete(String id); +} diff --git a/src/main/java/com/corewing/app/service/impl/AppModelCategoryServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppModelCategoryServiceImpl.java new file mode 100644 index 0000000..db4de9e --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppModelCategoryServiceImpl.java @@ -0,0 +1,103 @@ +package com.corewing.app.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.common.page.PageContext; +import com.corewing.app.dto.AppModel.ModelCategoryListRequest; +import com.corewing.app.dto.AppModel.ModelCategoryPageRequest; +import com.corewing.app.dto.AppModel.ModelDownloadRequest; +import com.corewing.app.dto.AppModel.ModelFavoriteRequest; +import com.corewing.app.entity.AppModel; +import com.corewing.app.entity.AppModelCategory; +import com.corewing.app.entity.AppModelDownloadLog; +import com.corewing.app.entity.AppModelFavorite; +import com.corewing.app.handler.GlobalExceptionHandler; +import com.corewing.app.mapper.AppModelCategoryMapper; +import com.corewing.app.service.AppModelCategoryService; +import com.corewing.app.service.AppModelDownloadLogService; +import com.corewing.app.service.AppModelFavoriteService; +import com.corewing.app.service.AppModelService; +import com.corewing.app.util.CommonServletUtil; +import com.corewing.app.util.IpUtil; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +@Service +public class AppModelCategoryServiceImpl extends ServiceImpl implements AppModelCategoryService { + + @Resource + private AppModelCategoryMapper appModelCategoryMapper; + + @Override + public Page page(ModelCategoryPageRequest modelCategoryPageRequest) { + Page page = PageContext.getPage(AppModelCategory.class); + return appModelCategoryMapper.page(page, modelCategoryPageRequest); + } + + @Override + public List list(ModelCategoryListRequest modelCategoryListRequest) { + return appModelCategoryMapper.list(modelCategoryListRequest); + } + + @Override + public List> tree(ModelCategoryListRequest modelCategoryListRequest) { + List resourceList = appModelCategoryMapper.list(modelCategoryListRequest); + + // 填充上层的父级菜单 + this.fillParentCategoryInfo(resourceList); + + List> treeNodeList = resourceList.stream().map(modelCategory -> + new TreeNode<>(modelCategory.getId(), modelCategory.getParentId(), + modelCategory.getName(), modelCategory.getSortCode()).setExtra(JSONUtil.parseObj(modelCategory))) + .collect(Collectors.toList()); + return TreeUtil.build(treeNodeList, "0"); + } + + + private void fillParentCategoryInfo(List categoryList) { + if(CollUtil.isNotEmpty(categoryList)){ + List parentModelCategoryList = categoryList.stream().filter(distinctByKey(AppModelCategory::getParentId)).collect(Collectors.toList()); + + List parentIds = null; + if(CollUtil.isNotEmpty(parentModelCategoryList)){ + parentIds = CollUtil.newArrayList(); + for(AppModelCategory parentCategory : categoryList){ + if(!StrUtil.equals(parentCategory.getParentId(),"0")){ + parentIds.add(parentCategory.getParentId()); + } + } + } + if(CollUtil.isNotEmpty(parentIds)){ + LambdaQueryWrapper parentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>(); + parentCategoryLambdaQueryWrapper.in(AppModelCategory::getId,parentIds); + List parentCategoryList = this.list(parentCategoryLambdaQueryWrapper); + if(CollUtil.isNotEmpty(parentCategoryList)){ + this.fillParentCategoryInfo(parentCategoryList); + categoryList.addAll(parentCategoryList); + } + } + } + } + + private static Predicate distinctByKey(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } +} diff --git a/src/main/java/com/corewing/app/service/impl/AppModelDownloadLogServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppModelDownloadLogServiceImpl.java new file mode 100644 index 0000000..0c6f615 --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppModelDownloadLogServiceImpl.java @@ -0,0 +1,11 @@ +package com.corewing.app.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.entity.AppModelDownloadLog; +import com.corewing.app.mapper.AppModelDownloadLogMapper; +import com.corewing.app.service.AppModelDownloadLogService; +import org.springframework.stereotype.Service; + +@Service +public class AppModelDownloadLogServiceImpl extends ServiceImpl implements AppModelDownloadLogService { +} diff --git a/src/main/java/com/corewing/app/service/impl/AppModelFavoriteServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppModelFavoriteServiceImpl.java new file mode 100644 index 0000000..09e231c --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppModelFavoriteServiceImpl.java @@ -0,0 +1,11 @@ +package com.corewing.app.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.entity.AppModelFavorite; +import com.corewing.app.mapper.AppModelFavoriteMapper; +import com.corewing.app.service.AppModelFavoriteService; +import org.springframework.stereotype.Service; + +@Service +public class AppModelFavoriteServiceImpl extends ServiceImpl implements AppModelFavoriteService { +} diff --git a/src/main/java/com/corewing/app/service/impl/AppModelFileServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppModelFileServiceImpl.java new file mode 100644 index 0000000..c12f924 --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppModelFileServiceImpl.java @@ -0,0 +1,11 @@ +package com.corewing.app.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.entity.AppModelFile; +import com.corewing.app.mapper.AppModelFileMapper; +import com.corewing.app.service.AppModelFileService; +import org.springframework.stereotype.Service; + +@Service +public class AppModelFileServiceImpl extends ServiceImpl implements AppModelFileService { +} diff --git a/src/main/java/com/corewing/app/service/impl/AppModelServiceImpl.java b/src/main/java/com/corewing/app/service/impl/AppModelServiceImpl.java new file mode 100644 index 0000000..67fed4c --- /dev/null +++ b/src/main/java/com/corewing/app/service/impl/AppModelServiceImpl.java @@ -0,0 +1,238 @@ +package com.corewing.app.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.corewing.app.common.base.BaseEntity; +import com.corewing.app.common.enums.CommonDeleteFlagEnum; +import com.corewing.app.common.page.PageContext; +import com.corewing.app.dto.AppModel.*; +import com.corewing.app.entity.*; +import com.corewing.app.mapper.AppModelMapper; +import com.corewing.app.service.AppModelDownloadLogService; +import com.corewing.app.service.AppModelFavoriteService; +import com.corewing.app.service.AppModelFileService; +import com.corewing.app.service.AppModelService; +import com.corewing.app.util.CommonServletUtil; +import com.corewing.app.util.IpUtil; +import com.corewing.app.util.OSSUploadUtil; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.List; + +@Service +public class AppModelServiceImpl extends ServiceImpl implements AppModelService { + + @Resource + private AppModelMapper appModelMapper; + + @Resource + private AppModelFavoriteService modelFavoriteService; + + @Resource + private AppModelDownloadLogService modelDownloadLogService; + + @Resource + private AppModelFileService modelFileService; + + @Override + public Page page(ModelPageRequest modelPageRequest) { + Page page = PageContext.getPage(AppModel.class); + return appModelMapper.page(page, modelPageRequest); + } + + @Override + public List list(ModelListRequest modelListRequest) { + return appModelMapper.list(modelListRequest); + } + + @Override + public boolean like(ModelLikeRequest modelLikeRequest) { + AppModel appModel = this.getById(modelLikeRequest.getModelId()); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AppModel::getId, appModel.getId()); + updateWrapper.set(AppModel::getLikeCount, appModel.getLikeCount() + 1); + return this.update(updateWrapper); + } + + @Override + public boolean favorite(ModelFavoriteRequest modelFavoriteRequest) { + + // 校验是否已经收藏了 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModelFavorite::getModelId, modelFavoriteRequest.getModelId()); + if(modelFavoriteService.count(queryWrapper) > 0) { + throw new RuntimeException("已经收藏了"); + } + + AppModel appModel = this.getById(modelFavoriteRequest.getModelId()); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AppModel::getId, appModel.getId()); + updateWrapper.set(AppModel::getFavoriteCount, appModel.getFavoriteCount() + 1); + this.update(updateWrapper); + + AppModelFavorite modelFavorite = new AppModelFavorite(); + modelFavorite.setModelId(appModel.getId()); + modelFavorite.setUserId(Long.valueOf(StpUtil.getLoginId().toString())); + + return modelFavoriteService.save(modelFavorite); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean download(ModelDownloadRequest modelDownloadRequest) { + AppModel appModel = this.getById(modelDownloadRequest.getModelId()); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AppModel::getId, appModel.getId()); + updateWrapper.set(AppModel::getDownloadCount, appModel.getDownloadCount() + 1); + this.update(updateWrapper); + + AppModelDownloadLog log = new AppModelDownloadLog(); + log.setModelId(appModel.getId()); + log.setUserId(Long.valueOf(StpUtil.getLoginId().toString())); + log.setIpAddress(IpUtil.getClientIp(CommonServletUtil.getRequest())); + + return modelDownloadLogService.save(log); + } + + @Override + public AppModel detail(String modelId) { + AppModel appModel = appModelMapper.getModelById(modelId); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModelFile::getModelId, modelId); + List list = modelFileService.list(queryWrapper); + if(list != null) { + appModel.setModelFile(list); + } + return appModel; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean create(ModelCreateRequest modelCreateRequest) { + + // 模型标题校验 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModel::getTitle, modelCreateRequest.getTitle()); + if(count(queryWrapper) > 0) { + throw new RuntimeException("模型标题已存在"); + } + + AppModel appModel = BeanUtil.toBean(modelCreateRequest, AppModel.class); + appModel.setIsPublic("0"); + appModel.setStatus("1"); + appModel.setUserId(Long.valueOf(StpUtil.getLoginId().toString())); + this.save(appModel); + + // 上传文件 + modelCreateRequest.getFiles().forEach(item -> { + try { + String downloadUrl = OSSUploadUtil.uploadFile(item.getInputStream(), "customModel/" + item.getOriginalFilename()); + AppModelFile modelFile = new AppModelFile(); + modelFile.setFileName(item.getOriginalFilename()); + modelFile.setFileUrl(downloadUrl); + modelFile.setFileSize(item.getSize()); + modelFile.setFileType(item.getContentType()); + modelFile.setModelId(appModel.getId()); + modelFileService.save(modelFile); + + } catch (IOException e) { + throw new RuntimeException("创建模型失败"); + } + }); + return true; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public boolean audit(ModelIdRequest modelIdRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModel::getId, modelIdRequest.getModelId()); + queryWrapper.eq(AppModel::getUserId, StpUtil.getLoginId().toString()); + AppModel appModel = this.getOne(queryWrapper); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AppModel::getId, appModel.getId()); + updateWrapper.set(AppModel::getStatus, "2"); + return this.update(updateWrapper); + } + + @Override + public List favoriteList(ModelFavoriteListRequest modelFavoriteListRequest) { + return appModelMapper.favoriteList(Long.valueOf(StpUtil.getLoginId().toString()), modelFavoriteListRequest); + } + + @Override + public Page favoritePage(ModelFavoritePageRequest modelFavoritePageRequest) { + Page page = PageContext.getPage(AppModel.class); + return appModelMapper.favoritePage(page, Long.valueOf(StpUtil.getLoginId().toString()), modelFavoritePageRequest); + } + + @Override + public boolean delisted(ModelIdRequest modelIdRequest) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModel::getId, modelIdRequest.getModelId()); + queryWrapper.eq(AppModel::getUserId, StpUtil.getLoginId().toString()); + AppModel appModel = this.getOne(queryWrapper); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + // 下架模型后,强制将公开状态转私有,模型状态转为下架 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(AppModel::getId, appModel.getId()); + updateWrapper.set(AppModel::getStatus, "0"); + updateWrapper.set(AppModel::getIsPublic, "0"); + return this.update(updateWrapper); + } + + @Override + public List downloadLogList(ModelDownloadLogListRequest modelDownloadLogListRequest) { + return appModelMapper.downloadLogList(Long.valueOf(StpUtil.getLoginId().toString()), modelDownloadLogListRequest); + } + + @Override + public Page downloadLogPage(ModelDownloadLogPageRequest modelDownloadLogPageRequest) { + Page page = PageContext.getPage(AppModel.class); + return appModelMapper.downloadLogPage(page, Long.valueOf(StpUtil.getLoginId().toString()), modelDownloadLogPageRequest); + } + + @Override + public boolean delete(String id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(AppModel::getId, id); + queryWrapper.eq(AppModel::getUserId, StpUtil.getLoginId().toString()); + AppModel appModel = this.getOne(queryWrapper); + if(appModel == null) { + throw new RuntimeException("该模型不存在"); + } + return this.removeById(appModel.getId()); + } + + +} diff --git a/src/main/java/com/corewing/app/util/CommonServletUtil.java b/src/main/java/com/corewing/app/util/CommonServletUtil.java new file mode 100644 index 0000000..2a6137c --- /dev/null +++ b/src/main/java/com/corewing/app/util/CommonServletUtil.java @@ -0,0 +1,83 @@ +package com.corewing.app.util; + +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * HttpServlet工具类,获取当前request和response + */ +@Slf4j +public class CommonServletUtil { + + /** + * 从请求中中获取参数 + * + * @author xuyuxiang + * @date 2021/10/14 10:44 + **/ + public static String getParamFromRequest(String paramName) { + HttpServletRequest request = getRequest(); + + // 1. 尝试从请求体里面读取 + String paramValue = request.getParameter(paramName); + + // 2. 尝试从header里读取 + if (ObjectUtil.isEmpty(paramValue)) { + paramValue = request.getHeader(paramName); + } + // 3. 尝试从cookie里读取 + if (ObjectUtil.isEmpty(paramValue)) { + Cookie[] cookies = request.getCookies(); + if(ObjectUtil.isNotEmpty(cookies)) { + for (Cookie cookie : cookies) { + String cookieName = cookie.getName(); + if (cookieName.equals(paramName)) { + return cookie.getValue(); + } + } + } + } + // 4. 返回 + return paramValue; + } + + public static HttpServletRequest getRequest() { + ServletRequestAttributes servletRequestAttributes; + try { + servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + } catch (Exception e) { + log.error(">>> 非Web上下文无法获取Request:", e); + throw new RuntimeException("非Web上下文无法获取Request"); + } + if (servletRequestAttributes == null) { + throw new RuntimeException("非Web上下文无法获取Request"); + } else { + return servletRequestAttributes.getRequest(); + } + } + + public static HttpServletResponse getResponse() { + ServletRequestAttributes servletRequestAttributes; + try { + servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + } catch (Exception e) { + log.error(">>> 非Web上下文无法获取Response:", e); + throw new RuntimeException("非Web上下文无法获取Response"); + } + if (servletRequestAttributes == null) { + throw new RuntimeException("非Web上下文无法获取Response"); + } else { + return servletRequestAttributes.getResponse(); + } + } + + public static boolean isWeb() { + return RequestContextHolder.getRequestAttributes() != null; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9424d99..3a1fc1e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -36,8 +36,15 @@ mybatis-plus.mapper-locations=classpath*:/mapper/**/*.xml mybatis-plus.type-aliases-package=com.corewing.app.entity mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl -mybatis-plus.global-config.db-config.id-type=AUTO +mybatis-plus.global-config.db-config.id-type=ASSIGN_ID mybatis-plus.global-config.db-config.table-prefix= +# ========== 逻辑删除核心配置 ========== +# 1. 自定义逻辑删除字段名(替换为你的字段,如 is_delete、del_flag 等) +mybatis-plus.global-config.db-config.logic-delete-field=del_flag +# 2. 逻辑未删除值(替换为你的业务未删除值,如 0、false、N 等) +mybatis-plus.global-config.db-config.logic-not-delete-value=NOT_DELETE +# 3. 逻辑已删除值(替换为你的业务已删除值,如 1、true、Y 等) +mybatis-plus.global-config.db-config.logic-delete-value=DELETE # Redis 配置 spring.redis.host=localhost @@ -95,3 +102,41 @@ spring.mail.properties.mail.smtp.socketFactory.fallback=false dingtalk.webhook=https://oapi.dingtalk.com/robot/send?access_token=7eed4b3483303c9ec71ef37a08c347bb597fd4c64211a96a8f55f72405ff6444 # 如果使用加签安全设置,请填写密钥(secret) dingtalk.secret=SEC0f2b835f28139905e3c0b5be979b215df1735f1154f36514aafbae8708014148 + + + +# ===================== Knife4j 核心增强配置 ===================== +# 启用Knife4j增强模式 +knife4j.enable=true +knife4j.setting.language=zh_cn +knife4j.basic.enable=true +knife4j.basic.username=corewing +knife4j.basic.password=Aaa123.. +# ===================== Knife4j OpenAPI 全局文档配置 ===================== +# 文档标题 +knife4j.openapi.title=CoreWing APP API +# 文档描述(支持Markdown,换行用\n,特殊符号保留) + +knife4j.openapi.description= +# 作者邮箱 +knife4j.openapi.email= +# 联系人 +knife4j.openapi.concat= +# 文档官网地址 +knife4j.openapi.url= +# 文档版本 +knife4j.openapi.version=v1.0 +# 许可证 +knife4j.openapi.license= + + + +# ===================== Knife4j 分组配置 ===================== +# 分组名称 +knife4j.openapi.group.test1.group-name=APP接口 +# 接口扫描规则:package(按包扫描)、path(按路径匹配)、api(按注解匹配) +knife4j.openapi.group.test1.api-rule=package +# 按包扫描的资源(数组,用[索引]标识多个包) +knife4j.openapi.group.test1.api-rule-resources[0]=com.corewing.app.modules.app +# 若有多个包,继续添加索引 +# knife4j.openapi.group.test1.api-rule-resources[1]=com.knife4j.demo.new4 diff --git a/src/main/resources/mapper/AppModelCategoryMapper.xml b/src/main/resources/mapper/AppModelCategoryMapper.xml new file mode 100644 index 0000000..c95b177 --- /dev/null +++ b/src/main/resources/mapper/AppModelCategoryMapper.xml @@ -0,0 +1,31 @@ + + + + + + + + select mc.* + from app_model_category mc + + + + + + + + diff --git a/src/main/resources/mapper/AppModelMapper.xml b/src/main/resources/mapper/AppModelMapper.xml new file mode 100644 index 0000000..529f0ed --- /dev/null +++ b/src/main/resources/mapper/AppModelMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + select m.*,mc.name as categoryTitle + from app_model m + left join app_model_category mc on m.category_id = mc.id + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/static/favicon.ico b/src/main/resources/static/favicon.ico new file mode 100755 index 0000000..127e754 Binary files /dev/null and b/src/main/resources/static/favicon.ico differ