opt: 附件上传/删除

This commit is contained in:
2025-11-21 17:02:48 +08:00
parent 5af4d27532
commit 738deb04df
15 changed files with 376 additions and 36 deletions

View File

@@ -91,4 +91,9 @@ public class DevFileApiProvider implements DevFileApi {
.map(JSONUtil::parseObj)
.orElse(new JSONObject());
}
@Override
public void deleteById(String fileId) {
devFileService.removeById(fileId);
}
}

View File

@@ -15,29 +15,29 @@ package org.nl.pmm.modular.projectfile.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import org.nl.common.annotation.CommonLog;
import org.nl.common.pojo.CommonResult;
import org.nl.pmm.modular.projectfile.entity.ProjectFile;
import org.nl.pmm.modular.projectfile.param.*;
import org.nl.pmm.modular.projectfile.service.ProjectFileService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.nl.common.annotation.CommonLog;
import org.nl.common.pojo.CommonResult;
import org.nl.pmm.modular.projectfile.entity.ProjectFile;
import org.nl.pmm.modular.projectfile.service.ProjectFileService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import java.util.List;
/**
* 项目附件表控制器
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Tag(name = "项目附件表控制器")
@RestController
@@ -51,7 +51,7 @@ public class ProjectFileController {
* 获取项目附件表分页
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "获取项目附件表分页")
@SaCheckPermission("/pmm/projectfile/page")
@@ -64,7 +64,7 @@ public class ProjectFileController {
* 添加项目附件表
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "添加项目附件表")
@CommonLog("添加项目附件表")
@@ -79,7 +79,7 @@ public class ProjectFileController {
* 编辑项目附件表
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "编辑项目附件表")
@CommonLog("编辑项目附件表")
@@ -94,22 +94,23 @@ public class ProjectFileController {
* 删除项目附件表
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "删除项目附件表")
@CommonLog("删除项目附件表")
@SaCheckPermission("/pmm/projectfile/delete")
@PostMapping("/pmm/projectfile/delete")
public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
List<ProjectFileIdParam> projectFileIdParamList) {
List<ProjectFileIdParam> projectFileIdParamList) {
projectFileService.delete(projectFileIdParamList);
return CommonResult.ok();
}
/**
* 删除项目附件表
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "保存项目附件表")
@CommonLog("保存项目附件表")
@@ -125,7 +126,7 @@ public class ProjectFileController {
* 获取项目附件表详情
*
* @author liyongde
* @date 2025/11/17 20:24
* @date 2025/11/17 20:24
*/
@Operation(summary = "获取项目附件表详情")
@SaCheckPermission("/pmm/projectfile/detail")
@@ -133,4 +134,19 @@ public class ProjectFileController {
public CommonResult<ProjectFile> detail(@Valid ProjectFileIdParam projectFileIdParam) {
return CommonResult.data(projectFileService.detail(projectFileIdParam));
}
/**
* 删除项目附件表
*
* @author liyongde
* @date 2025/11/17 20:24
*/
@Operation(summary = "删除项目附件表")
@CommonLog("删除项目附件表")
@SaCheckPermission("/pmm/projectfile/delete-file")
@PostMapping("/pmm/projectfile/delete-file")
public CommonResult<String> deleteFile(@RequestBody ProjectFileParam param) {
projectFileService.deleteAttachment(param);
return CommonResult.ok();
}
}

View File

@@ -0,0 +1,12 @@
package org.nl.pmm.modular.projectfile.param;
import lombok.Data;
/**
* @Author: lyd
* @Date: 2025/11/21
*/
@Data
public class ProjectFileParam {
private String id;
}

View File

@@ -79,4 +79,6 @@ public interface ProjectFileService extends IService<ProjectFile> {
List<ProjectAttachmentVo> getFileByProjectId(String projectId);
void bindProjectFile(ProjectFileAddParam param);
void deleteAttachment(ProjectFileParam param);
}

View File

@@ -17,6 +17,7 @@ import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -28,10 +29,7 @@ import org.nl.dev.api.DevFileApi;
import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo;
import org.nl.pmm.modular.projectfile.entity.ProjectFile;
import org.nl.pmm.modular.projectfile.mapper.ProjectFileMapper;
import org.nl.pmm.modular.projectfile.param.ProjectFileAddParam;
import org.nl.pmm.modular.projectfile.param.ProjectFileEditParam;
import org.nl.pmm.modular.projectfile.param.ProjectFileIdParam;
import org.nl.pmm.modular.projectfile.param.ProjectFilePageParam;
import org.nl.pmm.modular.projectfile.param.*;
import org.nl.pmm.modular.projectfile.service.ProjectFileService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -111,4 +109,12 @@ public class ProjectFileServiceImpl extends ServiceImpl<ProjectFileMapper, Proje
param.setFileAddress(file.getStr("downloadPath"));
add(param);
}
@Override
public void deleteAttachment(ProjectFileParam param) {
// 删除文件
devFileApi.deleteById(param.getId());
// 删除附件表记录
remove(new LambdaQueryWrapper<ProjectFile>().eq(ProjectFile::getFileId, param.getId()));
}
}

View File

@@ -16,6 +16,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import org.nl.pmm.modular.projectstage.param.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -24,10 +25,6 @@ import org.springframework.web.bind.annotation.RestController;
import org.nl.common.annotation.CommonLog;
import org.nl.common.pojo.CommonResult;
import org.nl.pmm.modular.projectstage.entity.ProjectStage;
import org.nl.pmm.modular.projectstage.param.ProjectStageAddParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageEditParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageIdParam;
import org.nl.pmm.modular.projectstage.param.ProjectStagePageParam;
import org.nl.pmm.modular.projectstage.service.ProjectStageService;
import jakarta.annotation.Resource;
@@ -91,6 +88,20 @@ public class ProjectStageController {
projectStageService.edit(projectStageEditParam);
return CommonResult.ok();
}
/**
* 编辑项目阶段
*
* @author liyongde
* @date 2025/11/17 20:32
*/
@Operation(summary = "编辑项目阶段")
@CommonLog("编辑项目阶段")
// @SaCheckPermission("/pmm/projectstage/batch-edit")
@PostMapping("/pmm/projectstage/batch-edit")
public CommonResult<String> batchEdit(@RequestBody @Valid List<ProjectStageAddBatchParam> param) {
projectStageService.batchEdit(param);
return CommonResult.ok();
}
/**
* 删除项目阶段

View File

@@ -0,0 +1,31 @@
package org.nl.pmm.modular.projectstage.param;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @Author: lyd
* @Date: 2025/11/19
*/
@Data
public class ProjectStageAddBatchParam {
/** 阶段名称 */
@Schema(description = "阶段名称")
private String stageName;
/** 阶段序号 */
@Schema(description = "阶段序号")
private String stageSeq;
/** 项目id */
@Schema(description = "项目id")
private String projectId;
/** 阶段id */
@Schema(description = "阶段id")
private String stageId;
/** 是否删除 */
@Schema(description = "是否删除")
private Boolean isDeleted;
}

View File

@@ -15,10 +15,7 @@ package org.nl.pmm.modular.projectstage.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.pmm.modular.projectstage.entity.ProjectStage;
import org.nl.pmm.modular.projectstage.param.ProjectStageAddParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageEditParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageIdParam;
import org.nl.pmm.modular.projectstage.param.ProjectStagePageParam;
import org.nl.pmm.modular.projectstage.param.*;
import java.util.List;
@@ -84,4 +81,6 @@ public interface ProjectStageService extends IService<ProjectStage> {
* @return
*/
List<ProjectStage> getByProjectId(String projectId);
void batchEdit(List<ProjectStageAddBatchParam> param);
}

View File

@@ -20,6 +20,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.nl.pmm.modular.projectstage.param.*;
import org.nl.pmm.modular.stagedetail.entity.StageDetail;
import org.nl.pmm.modular.stagedetail.service.StageDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.nl.common.enums.CommonSortOrderEnum;
@@ -27,13 +31,12 @@ import org.nl.common.exception.CommonException;
import org.nl.common.page.CommonPageRequest;
import org.nl.pmm.modular.projectstage.entity.ProjectStage;
import org.nl.pmm.modular.projectstage.mapper.ProjectStageMapper;
import org.nl.pmm.modular.projectstage.param.ProjectStageAddParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageEditParam;
import org.nl.pmm.modular.projectstage.param.ProjectStageIdParam;
import org.nl.pmm.modular.projectstage.param.ProjectStagePageParam;
import org.nl.pmm.modular.projectstage.service.ProjectStageService;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 项目阶段Service接口实现类
@@ -44,6 +47,9 @@ import java.util.List;
@Service
public class ProjectStageServiceImpl extends ServiceImpl<ProjectStageMapper, ProjectStage> implements ProjectStageService {
@Resource
private StageDetailService stageDetailService;
@Override
public Page<ProjectStage> page(ProjectStagePageParam projectStagePageParam) {
QueryWrapper<ProjectStage> queryWrapper = new QueryWrapper<ProjectStage>().checkSqlInjection();
@@ -100,4 +106,31 @@ public class ProjectStageServiceImpl extends ServiceImpl<ProjectStageMapper, Pro
.orderByAsc(ProjectStage::getStageSeq);
return list(lambdaQueryWrapper);
}
@Override
public void batchEdit(List<ProjectStageAddBatchParam> param) {
// 获取新增的 / 修改的
List<ProjectStageAddBatchParam> addItems = param.stream().filter(p ->
(ObjectUtil.isEmpty(p.getStageId()) && !p.getIsDeleted())
|| (ObjectUtil.isNotEmpty(p.getStageId()) && !p.getIsDeleted())).toList();
if (addItems.size() > 0) {
List<ProjectStage> projectStageList = new ArrayList<>();
for (ProjectStageAddBatchParam addItem : addItems) {
ProjectStage projectStage = BeanUtil.toBean(addItem, ProjectStage.class);
projectStageList.add(projectStage);
}
saveOrUpdateBatch(projectStageList);
}
// 获取删除的
List<ProjectStageAddBatchParam> deletedItems = param.stream().filter(p -> ObjectUtil.isNotEmpty(p.getStageId()) && p.getIsDeleted()).toList();
if (deletedItems.size() > 0) {
List<String> ids = new ArrayList<>();
for (ProjectStageAddBatchParam deletedItem : deletedItems) {
ids.add(deletedItem.getStageId());
}
// 删除明细
stageDetailService.remove(new LambdaQueryWrapper<StageDetail>().in(StageDetail::getStageId, ids));
removeBatchByIds(ids);
}
}
}