diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectFileInfoController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectFileInfoController.java new file mode 100644 index 0000000..2e49767 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectFileInfoController.java @@ -0,0 +1,105 @@ +package org.dromara.demo.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.demo.domain.vo.ProjectFileInfoVo; +import org.dromara.demo.domain.bo.ProjectFileInfoBo; +import org.dromara.demo.service.IProjectFileInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 项目文件信息 + * + * @author GJH + * @date 2025-08-19 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/project/fileInfo") +public class ProjectFileInfoController extends BaseController { + + private final IProjectFileInfoService projectFileInfoService; + + /** + * 查询项目文件信息列表 + */ + @SaCheckPermission("project:fileInfo:list") + @GetMapping("/list") + public TableDataInfo list(ProjectFileInfoBo bo, PageQuery pageQuery) { + return projectFileInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出项目文件信息列表 + */ + @SaCheckPermission("project:fileInfo:export") + @Log(title = "项目文件信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ProjectFileInfoBo bo, HttpServletResponse response) { + List list = projectFileInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "项目文件信息", ProjectFileInfoVo.class, response); + } + + /** + * 获取项目文件信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("project:fileInfo:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(projectFileInfoService.queryById(id)); + } + + /** + * 新增项目文件信息 + */ + @SaCheckPermission("project:fileInfo:add") + @Log(title = "项目文件信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ProjectFileInfoBo bo) { + return toAjax(projectFileInfoService.insertByBo(bo)); + } + + /** + * 修改项目文件信息 + */ + @SaCheckPermission("project:fileInfo:edit") + @Log(title = "项目文件信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ProjectFileInfoBo bo) { + return toAjax(projectFileInfoService.updateByBo(bo)); + } + + /** + * 删除项目文件信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("project:fileInfo:remove") + @Log(title = "项目文件信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(projectFileInfoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/DEAExample.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/DEAExample.java index 0446a86..f24faa9 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/DEAExample.java +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/DEAExample.java @@ -10,25 +10,27 @@ public class DEAExample { // 示例:3个DMU,2个投入指标,1个产出指标 // 投入矩阵: 每行代表一个DMU的投入 // 例如: 投入可以是员工数量和资金投入 + // 1 2 3 4 double[][] inputs = { - {2, 3}, // DMU 0的投入 - {3, 4}, // DMU 1的投入 - {1, 5}, // DMU 2的投入 - {2, 3}, // DMU 3的投入 - {3, 4}, // DMU 4的投入 - {1, 5} // DMU 5的投入 + {2,2,1,2,1,1}, // DMU 0的投入 + {3,2,5,4,4,1}, // DMU 0的投入 + {2,3,3,3,5,3}, // DMU 0的投入 + {5,4,1,2,2,1}, // DMU 0的投入 + {2,3,3,3,5,3}, // DMU 0的投入 + {5,4,1,2,2,1}, // DMU 0的投入 + + }; // 产出矩阵: 每行代表一个DMU的产出 // 例如: 产出可以是利润 double[][] outputs = { + {4}, // DMU 0的产出 + {3}, // DMU 0的产出 + {2}, // DMU 0的产出 + {3}, // DMU 0的产出 {5}, // DMU 0的产出 - {6}, // DMU 1的产出 - {4}, // DMU 2的产出 {5}, // DMU 0的产出 - {6}, // DMU 1的产出 - {4} // DMU 2的产出 - }; // 计算所有DMU的效率值 diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Attachment.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Attachment.java new file mode 100644 index 0000000..ae30e99 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/Attachment.java @@ -0,0 +1,15 @@ +package org.dromara.demo.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Attachment { + private String url; + private String name; + private String ossId; + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/AttachmentSerializer.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/AttachmentSerializer.java new file mode 100644 index 0000000..7cd74cf --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/AttachmentSerializer.java @@ -0,0 +1,89 @@ +package org.dromara.demo.domain; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.Arrays; +import java.util.List; + +public class AttachmentSerializer { + + private final ObjectMapper objectMapper = new ObjectMapper(); + + /** + * 将List序列化为JSON字符串。 + * + * @param attachment 包含附件信息的列表 + * @return 序列化后的JSON字符串 + */ + public String serializeAttachments(List attachment) { + try { + // 使用ObjectMapper将List转换为JSON字符串 + return objectMapper.writeValueAsString(attachment); + } catch (JsonProcessingException e) { + // 处理可能发生的异常 + e.printStackTrace(); + // 根据实际情况决定如何处理错误,这里简单地返回null + return null; + } + } + + /** + * 将JSON字符串反序列化为List。 + * + * @param attachmentJson JSON格式的字符串 + * @return 反序列化后的List + */ + public List deserializeAttachments(String attachmentJson) { + try { + // 使用ObjectMapper将JSON字符串转换回List + return objectMapper.readValue(attachmentJson, new TypeReference>() {}); + } catch (JsonProcessingException e) { + // 处理可能发生的异常 + e.printStackTrace(); + // 根据实际情况决定如何处理错误,这里简单地返回null + return null; + } + } + + // 测试方法 + public static void main(String[] args) { + AttachmentSerializer serializer = new AttachmentSerializer(); + + // 创建一些模拟数据 + List attachmentList = List.of( + new Attachment("http://example.com/file1.pdf", "File One", "ossId1"), + new Attachment("http://example.com/file2.docx", "File Two", "ossId2") + ); + + // 序列化 + String serialized = serializer.serializeAttachments(attachmentList); + System.out.println(serialized); // 输出序列化后的JSON字符串 + + // 反序列化 + List deserializedAttachments = serializer.deserializeAttachments(serialized); + System.out.println("Deserialized:"); + if (deserializedAttachments != null) { + for (Attachment attachment : deserializedAttachments) { + System.out.println("URL: " + attachment.getUrl() + ", Name: " + attachment.getName() + ", ossId: " + attachment.getOssId()); + } + } else { + System.out.println("Failed to deserialize the JSON string."); + } + + // 模拟前端传来的字符串数组 + String[] inputArray = {"A", "B", "C"}; + System.out.println("输入的数组:"+ Arrays.toString(inputArray)); + // 使用 String.join() 将数组元素用 "/" 连接 + String result = String.join("/", inputArray); + + // 输出结果 + System.out.println("存入数据库中的结果:"+result); // 输出: A/B/C + + // 使用 split 方法按 "/" 分割 + String[] oldInputArray = result.split("/"); + System.out.println("还原输入的数组:"+ Arrays.toString(oldInputArray)); + + } +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ProjectFileInfo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ProjectFileInfo.java new file mode 100644 index 0000000..14ba663 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ProjectFileInfo.java @@ -0,0 +1,162 @@ +package org.dromara.demo.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 项目文件信息对象 project_file_info + * + * @author GJH + * @date 2025-08-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("project_file_info") +public class ProjectFileInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private String id; + + /** + * 项目id + */ + private String projectId; + + /** + * 项目建议书 + */ + private String projectProposal; + + /** + * 可行性研究 + */ + private String feasibilityStudy; + + /** + * 初步设计 + */ + private String preliminaryDesign; + + /** + * 其他程序(项目前期立项) + */ + private String otherProcedure1; + + /** + * 招标文件 + */ + private String tenderDocument; + + /** + * 投标文件 + */ + private String bidDocument; + + /** + * 其他程序(联合体招投标) + */ + private String otherProcedure2; + + /** + * 工程开工 + */ + private String projectCommencement; + + /** + * 施工设计 + */ + private String constructionDesign; + + /** + * 资金来源 + */ + private String fundingSource; + + /** + * 进度管理 + */ + private String scheduleManagement; + + /** + * 成本管理 + */ + private String costManagement; + + /** + * 质量管理 + */ + private String qualityManagement; + + /** + * 合同管理 + */ + private String contractManagement; + + /** + * 技术管理 + */ + private String technicalManagement; + + /** + * 调试运行 + */ + private String commissioningOperation; + + /** + * 环保验收 + */ + private String environmentalAcceptance; + + /** + * 竣工验收 + */ + private String finalAcceptance; + + /** + * 工程结算 + */ + private String projectSettlement; + + /** + * 项目总结 + */ + private String projectSummary; + + /** + * 定期巡查 + */ + private String regularInspection; + + /** + * 管理模式 + */ + private String managementModel; + + /** + * 运行日志 + */ + private String operationLog; + + /** + * 当前状态 + */ + private Long status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/ProjectFileInfoBo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/ProjectFileInfoBo.java new file mode 100644 index 0000000..50b1383 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/ProjectFileInfoBo.java @@ -0,0 +1,180 @@ +package org.dromara.demo.domain.bo; + +import org.dromara.demo.domain.ProjectFileInfo; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 项目文件信息业务对象 project_file_info + * + * @author GJH + * @date 2025-08-19 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ProjectFileInfo.class, reverseConvertGenerate = false) +public class ProjectFileInfoBo extends BaseEntity { + + /** + * 主键 + */ + // @NotBlank(message = "主键不能为空", groups = { EditGroup.class }) + private String id; + + /** + * 项目id + */ + // @NotBlank(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectId; + + /** + * 项目建议书 + */ + // @NotBlank(message = "项目建议书不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectProposal; + + /** + * 可行性研究 + */ + // @NotBlank(message = "可行性研究不能为空", groups = { AddGroup.class, EditGroup.class }) + private String feasibilityStudy; + + /** + * 初步设计 + */ + // @NotBlank(message = "初步设计不能为空", groups = { AddGroup.class, EditGroup.class }) + private String preliminaryDesign; + + /** + * 其他程序(项目前期立项) + */ + // @NotBlank(message = "其他程序(项目前期立项)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String otherProcedure1; + + /** + * 招标文件 + */ + // @NotBlank(message = "招标文件不能为空", groups = { AddGroup.class, EditGroup.class }) + private String tenderDocument; + + /** + * 投标文件 + */ + // @NotBlank(message = "投标文件不能为空", groups = { AddGroup.class, EditGroup.class }) + private String bidDocument; + + /** + * 其他程序(联合体招投标) + */ + // @NotBlank(message = "其他程序(联合体招投标)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String otherProcedure2; + + /** + * 工程开工 + */ + // @NotBlank(message = "工程开工不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectCommencement; + + /** + * 施工设计 + */ + // @NotBlank(message = "施工设计不能为空", groups = { AddGroup.class, EditGroup.class }) + private String constructionDesign; + + /** + * 资金来源 + */ + // @NotBlank(message = "资金来源不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fundingSource; + + /** + * 进度管理 + */ + // @NotBlank(message = "进度管理不能为空", groups = { AddGroup.class, EditGroup.class }) + private String scheduleManagement; + + /** + * 成本管理 + */ + // @NotBlank(message = "成本管理不能为空", groups = { AddGroup.class, EditGroup.class }) + private String costManagement; + + /** + * 质量管理 + */ + // @NotBlank(message = "质量管理不能为空", groups = { AddGroup.class, EditGroup.class }) + private String qualityManagement; + + /** + * 合同管理 + */ + // @NotBlank(message = "合同管理不能为空", groups = { AddGroup.class, EditGroup.class }) + private String contractManagement; + + /** + * 技术管理 + */ + // @NotBlank(message = "技术管理不能为空", groups = { AddGroup.class, EditGroup.class }) + private String technicalManagement; + + /** + * 调试运行 + */ + // @NotBlank(message = "调试运行不能为空", groups = { AddGroup.class, EditGroup.class }) + private String commissioningOperation; + + /** + * 环保验收 + */ + // @NotBlank(message = "环保验收不能为空", groups = { AddGroup.class, EditGroup.class }) + private String environmentalAcceptance; + + /** + * 竣工验收 + */ + // @NotBlank(message = "竣工验收不能为空", groups = { AddGroup.class, EditGroup.class }) + private String finalAcceptance; + + /** + * 工程结算 + */ + // @NotBlank(message = "工程结算不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectSettlement; + + /** + * 项目总结 + */ + // @NotBlank(message = "项目总结不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectSummary; + + /** + * 定期巡查 + */ + // @NotBlank(message = "定期巡查不能为空", groups = { AddGroup.class, EditGroup.class }) + private String regularInspection; + + /** + * 管理模式 + */ + // @NotBlank(message = "管理模式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String managementModel; + + /** + * 运行日志 + */ + // @NotBlank(message = "运行日志不能为空", groups = { AddGroup.class, EditGroup.class }) + private String operationLog; + + /** + * 当前状态 + */ + // @NotNull(message = "当前状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long status; + + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ProjectFileInfoVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ProjectFileInfoVo.java new file mode 100644 index 0000000..14386e0 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/ProjectFileInfoVo.java @@ -0,0 +1,188 @@ +package org.dromara.demo.domain.vo; + +import org.dromara.demo.domain.ProjectFileInfo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 项目文件信息视图对象 project_file_info + * + * @author GJH + * @date 2025-08-19 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ProjectFileInfo.class) +public class ProjectFileInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private String id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private String projectId; + + /** + * 项目建议书 + */ + @ExcelProperty(value = "项目建议书") + private String projectProposal; + + /** + * 可行性研究 + */ + @ExcelProperty(value = "可行性研究") + private String feasibilityStudy; + + /** + * 初步设计 + */ + @ExcelProperty(value = "初步设计") + private String preliminaryDesign; + + /** + * 其他程序(项目前期立项) + */ + @ExcelProperty(value = "其他程序(项目前期立项)") + private String otherProcedure1; + + /** + * 招标文件 + */ + @ExcelProperty(value = "招标文件") + private String tenderDocument; + + /** + * 投标文件 + */ + @ExcelProperty(value = "投标文件") + private String bidDocument; + + /** + * 其他程序(联合体招投标) + */ + @ExcelProperty(value = "其他程序(联合体招投标)") + private String otherProcedure2; + + /** + * 工程开工 + */ + @ExcelProperty(value = "工程开工") + private String projectCommencement; + + /** + * 施工设计 + */ + @ExcelProperty(value = "施工设计") + private String constructionDesign; + + /** + * 资金来源 + */ + @ExcelProperty(value = "资金来源") + private String fundingSource; + + /** + * 进度管理 + */ + @ExcelProperty(value = "进度管理") + private String scheduleManagement; + + /** + * 成本管理 + */ + @ExcelProperty(value = "成本管理") + private String costManagement; + + /** + * 质量管理 + */ + @ExcelProperty(value = "质量管理") + private String qualityManagement; + + /** + * 合同管理 + */ + @ExcelProperty(value = "合同管理") + private String contractManagement; + + /** + * 技术管理 + */ + @ExcelProperty(value = "技术管理") + private String technicalManagement; + + /** + * 调试运行 + */ + @ExcelProperty(value = "调试运行") + private String commissioningOperation; + + /** + * 环保验收 + */ + @ExcelProperty(value = "环保验收") + private String environmentalAcceptance; + + /** + * 竣工验收 + */ + @ExcelProperty(value = "竣工验收") + private String finalAcceptance; + + /** + * 工程结算 + */ + @ExcelProperty(value = "工程结算") + private String projectSettlement; + + /** + * 项目总结 + */ + @ExcelProperty(value = "项目总结") + private String projectSummary; + + /** + * 定期巡查 + */ + @ExcelProperty(value = "定期巡查") + private String regularInspection; + + /** + * 管理模式 + */ + @ExcelProperty(value = "管理模式") + private String managementModel; + + /** + * 运行日志 + */ + @ExcelProperty(value = "运行日志") + private String operationLog; + + /** + * 当前状态 + */ + @ExcelProperty(value = "当前状态") + private Long status; + + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/ProjectFileInfoMapper.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/ProjectFileInfoMapper.java new file mode 100644 index 0000000..7d4ab6a --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/mapper/ProjectFileInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.demo.mapper; + +import org.dromara.demo.domain.ProjectFileInfo; +import org.dromara.demo.domain.vo.ProjectFileInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 项目文件信息Mapper接口 + * + * @author GJH + * @date 2025-08-19 + */ +public interface ProjectFileInfoMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectFileInfoService.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectFileInfoService.java new file mode 100644 index 0000000..3307e24 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectFileInfoService.java @@ -0,0 +1,68 @@ +package org.dromara.demo.service; + +import org.dromara.demo.domain.vo.ProjectFileInfoVo; +import org.dromara.demo.domain.bo.ProjectFileInfoBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 项目文件信息Service接口 + * + * @author GJH + * @date 2025-08-19 + */ +public interface IProjectFileInfoService { + + /** + * 查询项目文件信息 + * + * @param id 主键 + * @return 项目文件信息 + */ + ProjectFileInfoVo queryById(String id); + + /** + * 分页查询项目文件信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 项目文件信息分页列表 + */ + TableDataInfo queryPageList(ProjectFileInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的项目文件信息列表 + * + * @param bo 查询条件 + * @return 项目文件信息列表 + */ + List queryList(ProjectFileInfoBo bo); + + /** + * 新增项目文件信息 + * + * @param bo 项目文件信息 + * @return 是否新增成功 + */ + Boolean insertByBo(ProjectFileInfoBo bo); + + /** + * 修改项目文件信息 + * + * @param bo 项目文件信息 + * @return 是否修改成功 + */ + Boolean updateByBo(ProjectFileInfoBo bo); + + /** + * 校验并批量删除项目文件信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectFileInfoServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectFileInfoServiceImpl.java new file mode 100644 index 0000000..724b797 --- /dev/null +++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectFileInfoServiceImpl.java @@ -0,0 +1,153 @@ +package org.dromara.demo.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.demo.domain.bo.ProjectFileInfoBo; +import org.dromara.demo.domain.vo.ProjectFileInfoVo; +import org.dromara.demo.domain.ProjectFileInfo; +import org.dromara.demo.mapper.ProjectFileInfoMapper; +import org.dromara.demo.service.IProjectFileInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 项目文件信息Service业务层处理 + * + * @author GJH + * @date 2025-08-19 + */ +@RequiredArgsConstructor +@Service +public class ProjectFileInfoServiceImpl implements IProjectFileInfoService { + + private final ProjectFileInfoMapper baseMapper; + + /** + * 查询项目文件信息 + * + * @param id 主键 + * @return 项目文件信息 + */ + @Override + public ProjectFileInfoVo queryById(String id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询项目文件信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 项目文件信息分页列表 + */ + @Override + public TableDataInfo queryPageList(ProjectFileInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的项目文件信息列表 + * + * @param bo 查询条件 + * @return 项目文件信息列表 + */ + @Override + public List queryList(ProjectFileInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ProjectFileInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getProjectId()), ProjectFileInfo::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectProposal()), ProjectFileInfo::getProjectProposal, bo.getProjectProposal()); + lqw.eq(StringUtils.isNotBlank(bo.getFeasibilityStudy()), ProjectFileInfo::getFeasibilityStudy, bo.getFeasibilityStudy()); + lqw.eq(StringUtils.isNotBlank(bo.getPreliminaryDesign()), ProjectFileInfo::getPreliminaryDesign, bo.getPreliminaryDesign()); + lqw.eq(StringUtils.isNotBlank(bo.getOtherProcedure1()), ProjectFileInfo::getOtherProcedure1, bo.getOtherProcedure1()); + lqw.eq(StringUtils.isNotBlank(bo.getTenderDocument()), ProjectFileInfo::getTenderDocument, bo.getTenderDocument()); + lqw.eq(StringUtils.isNotBlank(bo.getBidDocument()), ProjectFileInfo::getBidDocument, bo.getBidDocument()); + lqw.eq(StringUtils.isNotBlank(bo.getOtherProcedure2()), ProjectFileInfo::getOtherProcedure2, bo.getOtherProcedure2()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectCommencement()), ProjectFileInfo::getProjectCommencement, bo.getProjectCommencement()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionDesign()), ProjectFileInfo::getConstructionDesign, bo.getConstructionDesign()); + lqw.eq(StringUtils.isNotBlank(bo.getFundingSource()), ProjectFileInfo::getFundingSource, bo.getFundingSource()); + lqw.eq(StringUtils.isNotBlank(bo.getScheduleManagement()), ProjectFileInfo::getScheduleManagement, bo.getScheduleManagement()); + lqw.eq(StringUtils.isNotBlank(bo.getCostManagement()), ProjectFileInfo::getCostManagement, bo.getCostManagement()); + lqw.eq(StringUtils.isNotBlank(bo.getQualityManagement()), ProjectFileInfo::getQualityManagement, bo.getQualityManagement()); + lqw.eq(StringUtils.isNotBlank(bo.getContractManagement()), ProjectFileInfo::getContractManagement, bo.getContractManagement()); + lqw.eq(StringUtils.isNotBlank(bo.getTechnicalManagement()), ProjectFileInfo::getTechnicalManagement, bo.getTechnicalManagement()); + lqw.eq(StringUtils.isNotBlank(bo.getCommissioningOperation()), ProjectFileInfo::getCommissioningOperation, bo.getCommissioningOperation()); + lqw.eq(StringUtils.isNotBlank(bo.getEnvironmentalAcceptance()), ProjectFileInfo::getEnvironmentalAcceptance, bo.getEnvironmentalAcceptance()); + lqw.eq(StringUtils.isNotBlank(bo.getFinalAcceptance()), ProjectFileInfo::getFinalAcceptance, bo.getFinalAcceptance()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectSettlement()), ProjectFileInfo::getProjectSettlement, bo.getProjectSettlement()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectSummary()), ProjectFileInfo::getProjectSummary, bo.getProjectSummary()); + lqw.eq(StringUtils.isNotBlank(bo.getRegularInspection()), ProjectFileInfo::getRegularInspection, bo.getRegularInspection()); + lqw.eq(StringUtils.isNotBlank(bo.getManagementModel()), ProjectFileInfo::getManagementModel, bo.getManagementModel()); + lqw.eq(StringUtils.isNotBlank(bo.getOperationLog()), ProjectFileInfo::getOperationLog, bo.getOperationLog()); + lqw.eq(bo.getStatus() != null, ProjectFileInfo::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增项目文件信息 + * + * @param bo 项目文件信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ProjectFileInfoBo bo) { + ProjectFileInfo add = MapstructUtils.convert(bo, ProjectFileInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改项目文件信息 + * + * @param bo 项目文件信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ProjectFileInfoBo bo) { + ProjectFileInfo update = MapstructUtils.convert(bo, ProjectFileInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ProjectFileInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除项目文件信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +}