From 5af4d27532eb2fb54d73b4ec0f01a14431ef57b6 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Wed, 19 Nov 2025 16:45:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=99=84=E4=BB=B6=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/dev/api/DevFileApi.java | 2 + .../file/provider/DevFileApiProvider.java | 10 + nl-plugin/nl-plugin-pmm/pom.xml | 5 + .../project/controller/ProjectController.java | 15 +- .../entity/vo/ProjectAttachmentVo.java | 16 + .../project/service/ProjectService.java | 8 + .../service/impl/ProjectServiceImpl.java | 11 + .../controller/ProjectFileController.java | 21 +- .../projectfile/mapper/ProjectFileMapper.java | 4 + .../mapper/mapping/ProjectFileMapper.xml | 12 +- .../param/ProjectFileBindParam.java | 19 ++ .../service/ProjectFileService.java | 10 +- .../service/impl/ProjectFileServiceImpl.java | 24 +- nl-vue/src/api/pmm/projectApi.js | 4 + nl-vue/src/api/pmm/projectFileApi.js | 4 + .../views/pmm/project/request/description.vue | 276 +++++++++++++++++- .../pmm/project/request/fjUploadForm.vue | 156 ++++++++++ 17 files changed, 576 insertions(+), 21 deletions(-) create mode 100644 nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/entity/vo/ProjectAttachmentVo.java create mode 100644 nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/param/ProjectFileBindParam.java create mode 100644 nl-vue/src/views/pmm/project/request/fjUploadForm.vue diff --git a/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java index 9f98c8e..8c15cde 100644 --- a/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java +++ b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java @@ -110,4 +110,6 @@ public interface DevFileApi { * @date 2024/7/26 16:10 */ JSONObject getFileInfoById(String id); + + JSONObject getFileInfoByUrl(String fileAddress); } diff --git a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java index 7df5be5..aed5bbe 100644 --- a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java +++ b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java @@ -14,7 +14,9 @@ package org.nl.dev.modular.file.provider; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; +import org.nl.dev.modular.file.entity.DevFile; import org.nl.dev.modular.file.enums.DevFileEngineTypeEnum; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -81,4 +83,12 @@ public class DevFileApiProvider implements DevFileApi { .map(JSONUtil::parseObj) .orElse(new JSONObject()); } + + @Override + public JSONObject getFileInfoByUrl(String fileAddress) { + return Optional.ofNullable(devFileService.getOne(new LambdaQueryWrapper() + .eq(DevFile::getDownloadPath, fileAddress))) + .map(JSONUtil::parseObj) + .orElse(new JSONObject()); + } } diff --git a/nl-plugin/nl-plugin-pmm/pom.xml b/nl-plugin/nl-plugin-pmm/pom.xml index f76b4dd..1fbed12 100644 --- a/nl-plugin/nl-plugin-pmm/pom.xml +++ b/nl-plugin/nl-plugin-pmm/pom.xml @@ -31,6 +31,11 @@ org.nl nl-plugin-sys-api + + + org.nl + nl-plugin-dev-api + diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/controller/ProjectController.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/controller/ProjectController.java index 9916579..cbae087 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/controller/ProjectController.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/controller/ProjectController.java @@ -18,6 +18,7 @@ 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.common.pojo.SelectListItem; +import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo; import org.nl.pmm.modular.project.entity.vo.ProjectRequestVo; import org.nl.pmm.modular.project.entity.vo.ProjectVo; import org.nl.pmm.modular.project.param.*; @@ -130,12 +131,24 @@ public class ProjectController { */ @Operation(summary = "获取项目需求信息详情") // @SaCheckPermission("/pmm/project/request-detail") - @SaIgnore @GetMapping("/pmm/project/requestDetail") public CommonResult> requestDetail(@Valid ProjectIdParam projectIdParam) { return CommonResult.data(projectService.requestDetail(projectIdParam)); } + /** + * 获取项目附件 + * + * @author liyongde + * @date 2025/11/11 20:13 + */ + @Operation(summary = "获取项目需求信息详情") +// @SaCheckPermission("/pmm/project/request-detail") + @GetMapping("/pmm/project/getAttachment") + public CommonResult> getAttachment(@Valid ProjectIdParam projectIdParam) { + return CommonResult.data(projectService.getAttachment(projectIdParam)); + } + /** * 获取xx组用户 * diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/entity/vo/ProjectAttachmentVo.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/entity/vo/ProjectAttachmentVo.java new file mode 100644 index 0000000..c617b54 --- /dev/null +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/entity/vo/ProjectAttachmentVo.java @@ -0,0 +1,16 @@ +package org.nl.pmm.modular.project.entity.vo; + +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/11/19 + */ +@Data +public class ProjectAttachmentVo { + private String id; + private String name; + private String suffix; + private String downloadPath; + private String thumbnail; +} diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/ProjectService.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/ProjectService.java index 7eec5c4..6330e43 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/ProjectService.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/ProjectService.java @@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.pojo.SelectListItem; import org.nl.pmm.modular.project.entity.Project; +import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo; import org.nl.pmm.modular.project.entity.vo.ProjectRequestVo; import org.nl.pmm.modular.project.entity.vo.ProjectVo; import org.nl.pmm.modular.project.param.ProjectAddParam; @@ -92,4 +93,11 @@ public interface ProjectService extends IService { * @return */ List requestDetail(ProjectIdParam projectIdParam); + + /** + * 获取项目附件 + * @param projectIdParam + * @return + */ + List getAttachment(ProjectIdParam projectIdParam); } diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/impl/ProjectServiceImpl.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/impl/ProjectServiceImpl.java index abd7990..790ce9e 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/impl/ProjectServiceImpl.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/project/service/impl/ProjectServiceImpl.java @@ -22,8 +22,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import org.nl.common.pojo.SelectListItem; import org.nl.common.util.CommonTimeFormatUtil; +import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo; import org.nl.pmm.modular.project.entity.vo.ProjectRequestVo; import org.nl.pmm.modular.project.entity.vo.ProjectVo; +import org.nl.pmm.modular.projectfile.service.ProjectFileService; import org.nl.pmm.modular.projectstage.entity.ProjectStage; import org.nl.pmm.modular.projectstage.service.ProjectStageService; import org.nl.pmm.modular.stagedetail.entity.StageDetail; @@ -63,6 +65,8 @@ public class ProjectServiceImpl extends ServiceImpl impl private ProjectStageService projectStageService; @Resource private StageDetailService stageDetailService; + @Resource + private ProjectFileService projectFileService; @Override public Page page(ProjectPageParam projectPageParam) { @@ -176,4 +180,11 @@ public class ProjectServiceImpl extends ServiceImpl impl } return result; } + + @Override + public List getAttachment(ProjectIdParam projectIdParam) { + // 获取项目附件 + List files = projectFileService.getFileByProjectId(projectIdParam.getProjectId()); + return files; + } } diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/controller/ProjectFileController.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/controller/ProjectFileController.java index 356d3ee..cc86c59 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/controller/ProjectFileController.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/controller/ProjectFileController.java @@ -13,9 +13,11 @@ 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 org.nl.pmm.modular.projectfile.param.*; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -24,10 +26,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.projectfile.entity.ProjectFile; -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.service.ProjectFileService; import jakarta.annotation.Resource; @@ -107,6 +105,21 @@ public class ProjectFileController { projectFileService.delete(projectFileIdParamList); return CommonResult.ok(); } + /** + * 删除项目附件表 + * + * @author liyongde + * @date 2025/11/17 20:24 + */ + @Operation(summary = "保存项目附件表") + @CommonLog("保存项目附件表") + @SaIgnore +// @SaCheckPermission("/pmm/projectfile/bindProjectFile") + @PostMapping("/pmm/projectfile/bindProjectFile") + public CommonResult bindProjectFile(@RequestBody ProjectFileAddParam projectFileIdParam) { + projectFileService.bindProjectFile(projectFileIdParam); + return CommonResult.ok(); + } /** * 获取项目附件表详情 diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/ProjectFileMapper.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/ProjectFileMapper.java index 26b6e03..79ffa7d 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/ProjectFileMapper.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/ProjectFileMapper.java @@ -13,8 +13,11 @@ package org.nl.pmm.modular.projectfile.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo; import org.nl.pmm.modular.projectfile.entity.ProjectFile; +import java.util.List; + /** * 项目附件表Mapper接口 * @@ -22,4 +25,5 @@ import org.nl.pmm.modular.projectfile.entity.ProjectFile; * @date 2025/11/17 20:24 **/ public interface ProjectFileMapper extends BaseMapper { + List getFileByProjectId(String projectId); } diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/mapping/ProjectFileMapper.xml b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/mapping/ProjectFileMapper.xml index 464c9e6..b301e56 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/mapping/ProjectFileMapper.xml +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/mapper/mapping/ProjectFileMapper.xml @@ -2,4 +2,14 @@ - \ No newline at end of file + + diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/param/ProjectFileBindParam.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/param/ProjectFileBindParam.java new file mode 100644 index 0000000..8bd35ec --- /dev/null +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/param/ProjectFileBindParam.java @@ -0,0 +1,19 @@ +package org.nl.pmm.modular.projectfile.param; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * @Author: lyd + * @Date: 2025/11/19 + */ +@Data +public class ProjectFileBindParam { + /** 项目id */ + @Schema(description = "项目id") + private String projectId; + + /** 文件地址 */ + @Schema(description = "文件地址") + private String fileUrl; +} diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/ProjectFileService.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/ProjectFileService.java index c71488d..82c16e9 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/ProjectFileService.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/ProjectFileService.java @@ -14,11 +14,9 @@ package org.nl.pmm.modular.projectfile.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.pmm.modular.project.entity.vo.ProjectAttachmentVo; import org.nl.pmm.modular.projectfile.entity.ProjectFile; -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 java.util.List; @@ -77,4 +75,8 @@ public interface ProjectFileService extends IService { * @date 2025/11/17 20:24 **/ ProjectFile queryEntity(String id); + + List getFileByProjectId(String projectId); + + void bindProjectFile(ProjectFileAddParam param); } diff --git a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/impl/ProjectFileServiceImpl.java b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/impl/ProjectFileServiceImpl.java index 1ef2271..b7c31f8 100644 --- a/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/impl/ProjectFileServiceImpl.java +++ b/nl-plugin/nl-plugin-pmm/src/main/java/org/nl/pmm/modular/projectfile/service/impl/ProjectFileServiceImpl.java @@ -16,14 +16,16 @@ import cn.hutool.core.bean.BeanUtil; 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.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import jakarta.annotation.Resource; import org.nl.common.enums.CommonSortOrderEnum; import org.nl.common.exception.CommonException; import org.nl.common.page.CommonPageRequest; +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; @@ -31,6 +33,8 @@ 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.service.ProjectFileService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -43,6 +47,9 @@ import java.util.List; @Service public class ProjectFileServiceImpl extends ServiceImpl implements ProjectFileService { + @Resource + private DevFileApi devFileApi; + @Override public Page page(ProjectFilePageParam projectFilePageParam) { QueryWrapper queryWrapper = new QueryWrapper().checkSqlInjection(); @@ -91,4 +98,17 @@ public class ProjectFileServiceImpl extends ServiceImpl getFileByProjectId(String projectId) { + return this.baseMapper.getFileByProjectId(projectId); + } + + @Override + public void bindProjectFile(ProjectFileAddParam param) { + JSONObject file = devFileApi.getFileInfoByUrl(param.getFileAddress()); + param.setFileId(file.getStr("id")); + param.setFileAddress(file.getStr("downloadPath")); + add(param); + } } diff --git a/nl-vue/src/api/pmm/projectApi.js b/nl-vue/src/api/pmm/projectApi.js index 38edbe6..48f2390 100644 --- a/nl-vue/src/api/pmm/projectApi.js +++ b/nl-vue/src/api/pmm/projectApi.js @@ -29,6 +29,10 @@ export default { requestDetail(data) { return request('requestDetail', data, 'get') }, + // 获取项目附件信息 + getAttachment(data) { + return request('getAttachment', data, 'get') + }, // 获取用户信息详情 devUsers(data) { return request('dev-all-users', data, 'get') diff --git a/nl-vue/src/api/pmm/projectFileApi.js b/nl-vue/src/api/pmm/projectFileApi.js index 58bd3a3..aae4580 100644 --- a/nl-vue/src/api/pmm/projectFileApi.js +++ b/nl-vue/src/api/pmm/projectFileApi.js @@ -24,5 +24,9 @@ export default { // 获取项目附件表详情 projectFileDetail(data) { return request('detail', data, 'get') + }, + // 获取项目附件表详情 + bindProjectFile(data) { + return request('bindProjectFile', data, 'post') } } diff --git a/nl-vue/src/views/pmm/project/request/description.vue b/nl-vue/src/views/pmm/project/request/description.vue index bc6538c..9a0aa15 100644 --- a/nl-vue/src/views/pmm/project/request/description.vue +++ b/nl-vue/src/views/pmm/project/request/description.vue @@ -1,6 +1,8 @@ diff --git a/nl-vue/src/views/pmm/project/request/fjUploadForm.vue b/nl-vue/src/views/pmm/project/request/fjUploadForm.vue new file mode 100644 index 0000000..214fd12 --- /dev/null +++ b/nl-vue/src/views/pmm/project/request/fjUploadForm.vue @@ -0,0 +1,156 @@ + + +