From d0370300bea251cae36918404217c91189a771ba Mon Sep 17 00:00:00 2001 From: wangqing Date: Tue, 23 Mar 2021 18:49:20 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9B=20=20=E5=9B=9E=E6=94=B6=E7=AB=99?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20=20=E5=81=9C=E6=AD=A2=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/tduck.sql | 1 + .../web/controller/UserProjectController.java | 74 +++++++++++++++++-- .../tduck/cloud/common/entity/BaseEntity.java | 4 +- .../project/entity/UserProjectEntity.java | 3 + .../project/vo/ExportProjectResultVO.java | 2 +- .../cloud/project/vo/RecycleProjectVO.java | 37 ++++++++++ 6 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java diff --git a/doc/tduck.sql b/doc/tduck.sql index 3a50e8a..525df3c 100644 --- a/doc/tduck.sql +++ b/doc/tduck.sql @@ -142,6 +142,7 @@ CREATE TABLE `pr_user_project` ( `user_id` bigint(20) NOT NULL COMMENT '用户ID', `type` tinyint(2) NULL DEFAULT NULL COMMENT '项目类型', `status` tinyint(2) NOT NULL DEFAULT 0 COMMENT '状态', + `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除', `update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '更新时间', `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, diff --git a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java index db25840..f2fe34d 100644 --- a/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java +++ b/tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserProjectController.java @@ -2,12 +2,11 @@ package com.tduck.cloud.api.web.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.collect.Lists; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Sets; import com.tduck.cloud.api.annotation.Login; import com.tduck.cloud.api.util.HttpUtils; @@ -29,6 +28,7 @@ import com.tduck.cloud.project.request.SortProjectItemRequest; import com.tduck.cloud.project.service.*; import com.tduck.cloud.project.util.SortUtils; import com.tduck.cloud.project.vo.OperateProjectItemVO; +import com.tduck.cloud.project.vo.RecycleProjectVO; import com.tduck.cloud.project.vo.UserProjectDetailVO; import com.tduck.cloud.project.vo.UserProjectThemeVo; import com.tduck.cloud.wx.mp.constant.WxMpRedisKeyConstants; @@ -60,6 +60,7 @@ public class UserProjectController { private final UserProjectService projectService; private final UserProjectItemService projectItemService; + private final UserProjectResultService projectResultService; private final SortUtils sortUtils; private final UserProjectThemeService userProjectThemeService; private final UserProjectSettingService userProjectSettingService; @@ -141,6 +142,7 @@ public class UserProjectController { public Result queryMyProjects(@RequestAttribute Long userId, QueryProjectRequest.Page request) { return Result.success(projectService.page(request.toMybatisPage(), Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getDeleted, false) .eq(ObjectUtil.isNotNull(request.getStatus()), UserProjectEntity::getStatus, request.getStatus()) .like(StrUtil.isNotBlank(request.getName()), UserProjectEntity::getName, request.getName()) .le(ObjectUtil.isNotNull(request.getEndDateTime()), UserProjectEntity::getUpdateTime, request.getEndDateTime()) @@ -198,7 +200,11 @@ public class UserProjectController { @Login @PostMapping("/user/project/delete") public Result deleteProject(@RequestBody UserProjectEntity request) { - boolean del = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); + boolean del = projectService.update( + new UserProjectEntity() {{ + setDeleted(Boolean.TRUE); + }}, + Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); return Result.success(del); } @@ -435,9 +441,8 @@ public class UserProjectController { * * @return */ - @GetMapping("/setting/status1") + @GetMapping("/user/project/setting-status") public Result querySettingStatus(@RequestParam String projectKey, HttpServletRequest request) { - log.info("aaaaa"); return userProjectSettingService.getUserProjectSettingStatus(projectKey, HttpUtils.getIpAddr(request)); } @@ -468,7 +473,6 @@ public class UserProjectController { return Result.success(); } - /** * 获取项目微信通知用户 * @@ -487,4 +491,62 @@ public class UserProjectController { return Result.success(wxMpUserService.listWxMpUserByOpenId(subNotifyUsers) .stream().map(item -> new WxMpUserVO(item.getNickname(), item.getHeadImgUrl(), item.getOpenId())).collect(Collectors.toList())); } + + /** + * 回收站项目分页 + * + * @return + */ + @Login + @GetMapping("/user/project/recycle/page") + public Result queryRecycleProjects(@RequestAttribute Long userId, QueryProjectRequest.Page request) { + Page page = projectService.page(request.toMybatisPage(), + Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getDeleted, true) + .orderByDesc(BaseEntity::getUpdateTime)); + List records = page.getRecords(); + List projectVOList = records.stream().map(item -> { + int count = projectResultService.count(Wrappers.lambdaQuery().eq(UserProjectResultEntity::getProjectKey, item.getKey())); + return new RecycleProjectVO(item.getKey(), count, item.getName(), item.getCreateTime(), item.getUpdateTime()); + }).collect(Collectors.toList()); + page.setRecords(projectVOList); + return Result.success(page); + } + + /** + * 从回收站中恢复项目 + * + * @return + */ + @Login + @PostMapping("/user/project/recycle/restore") + public Result restoreRecycleProject(@RequestBody UserProjectEntity request) { + boolean flag = projectService.update( + new UserProjectEntity() {{ + setDeleted(Boolean.FALSE); + }}, + Wrappers.lambdaQuery().eq(UserProjectEntity::getKey, request.getKey())); + return Result.success(flag); + } + + /** + * 从回收站中删除项目 + * + * @return + */ + @Login + @PostMapping("/user/project/recycle/delete") + public Result deleteRecycleProject(@RequestAttribute Long userId,@RequestBody UserProjectEntity projectEntity) { + boolean remove = projectService.remove(Wrappers.lambdaQuery().eq(UserProjectEntity::getUserId, userId) + .eq(UserProjectEntity::getKey, projectEntity.getKey())); + if (remove) { + userProjectThemeService.remove(Wrappers.lambdaQuery() + .eq(UserProjectThemeEntity::getProjectKey, projectEntity.getKey())); + userProjectSettingService.remove(Wrappers.lambdaQuery() + .eq(UserProjectSettingEntity::getProjectKey, projectEntity.getKey())); + } + return Result.success(remove); + } + + } \ No newline at end of file diff --git a/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java b/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java index d57ceb4..c789cdf 100644 --- a/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java +++ b/tduck-common/src/main/java/com/tduck/cloud/common/entity/BaseEntity.java @@ -28,13 +28,13 @@ public class BaseEntity extends Model { **/ @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime createTime; + protected LocalDateTime createTime; /** * 更新时间 **/ @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN) - private LocalDateTime updateTime; + protected LocalDateTime updateTime; } diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java index c14bb74..0e66fa7 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/entity/UserProjectEntity.java @@ -71,5 +71,8 @@ public class UserProjectEntity extends BaseEntity { */ private Integer type; + @TableField(value = "is_deleted") + private Boolean deleted; + } \ No newline at end of file diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java index 17e8039..3d5fd4a 100644 --- a/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/ExportProjectResultVO.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.Map; /** - * @author : wangqing + * @author : smalljop * @description : 导出excel result * @create : 2021/03/18 16:18 **/ diff --git a/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java b/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java new file mode 100644 index 0000000..803c452 --- /dev/null +++ b/tduck-project/src/main/java/com/tduck/cloud/project/vo/RecycleProjectVO.java @@ -0,0 +1,37 @@ +package com.tduck.cloud.project.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.tduck.cloud.common.entity.BaseEntity; +import com.tduck.cloud.project.entity.UserProjectEntity; +import com.tduck.cloud.project.entity.enums.ProjectSourceTypeEnum; +import com.tduck.cloud.project.entity.enums.ProjectStatusEnum; +import lombok.AllArgsConstructor; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.time.LocalDateTime; + +/** + * @author : smalljop + * @description : 回收站项目 + * @create : 2021/03/23 17:13 + **/ +@Data +@AllArgsConstructor +public class RecycleProjectVO extends BaseEntity { + private String key; + /*** + * 收集数量 + */ + private Integer resultCount; + + private String name; + + public RecycleProjectVO(String key, int resultCount, String name, LocalDateTime createTime, LocalDateTime updateTime) { + this.key = key; + this.resultCount = resultCount; + this.name = name; + this.createTime = createTime; + this.updateTime = updateTime; + } +}