From 51e4fb4bd7cb6d0e8bb890b35097ccc71f847847 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 26 九月 2025 09:11:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/main/java/com/ruoyi/oA/controller/OaProjectController.java | 76 ++++
src/main/java/com/ruoyi/oA/controller/OaProjectPhaseController.java | 41 ++
src/main/java/com/ruoyi/oA/service/OaProjectPhaseService.java | 21 +
src/main/java/com/ruoyi/oA/service/impl/OaProjectServiceImpl.java | 69 ++++
src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseTaskServiceImpl.java | 33 ++
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java | 5
src/main/resources/mapper/oA/OaProjectPhaseMapper.xml | 27 +
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java | 3
src/main/java/com/ruoyi/oA/pojo/OaProject.java | 107 ++++++
src/main/java/com/ruoyi/oA/service/OaProjectPhaseTaskService.java | 17 +
src/main/java/com/ruoyi/oA/mapper/OaProjectMapper.java | 27 +
src/main/resources/mapper/oA/OaProjectMapper.xml | 32 ++
src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseTaskMapper.java | 18 +
src/main/java/com/ruoyi/oA/pojo/OaProjectPhase.java | 92 +++++
src/main/java/com/ruoyi/oA/pojo/OaProjectPhaseTask.java | 117 +++++++
src/main/java/com/ruoyi/oA/controller/OaProjectPhaseTaskController.java | 41 ++
src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseMapper.java | 18 +
src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseServiceImpl.java | 62 +++
src/main/java/com/ruoyi/oA/dto/OaProjectDto.java | 26 +
src/main/resources/mapper/oA/OaProjectPhaseTaskMapper.xml | 34 ++
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 1
src/main/java/com/ruoyi/oA/service/OaProjectService.java | 24 +
src/main/java/com/ruoyi/oA/dto/OaProjectPhaseDto.java | 12
23 files changed, 902 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/oA/controller/OaProjectController.java b/src/main/java/com/ruoyi/oA/controller/OaProjectController.java
new file mode 100644
index 0000000..8862fb5
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/controller/OaProjectController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.oA.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
+import com.ruoyi.oA.dto.OaProjectDto;
+import com.ruoyi.oA.pojo.OaProject;
+import com.ruoyi.oA.service.OaProjectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+
+@Api(tags = "oA椤圭洰绠$悊")
+@RestController
+@RequestMapping("/oA/project")
+public class OaProjectController {
+ @Autowired
+ private OaProjectService oaProjectService;
+
+ @ApiOperation("鑾峰彇椤圭洰鍒楄〃")
+ @GetMapping("/listPage")
+ public AjaxResult listPage(Page page, OaProjectDto oaProjectDto) {
+ IPage<OaProjectDto> listPage = oaProjectService.listPage(page, oaProjectDto);
+ return AjaxResult.success(listPage);
+ }
+ @ApiOperation("鑾峰彇椤圭洰鍒楄〃璇︽儏")
+ @GetMapping("/getList")
+ public AjaxResult getList(Page page, OaProjectDto oaProjectDto) {
+ IPage<OaProjectDto> listPage = oaProjectService.listPage(page, oaProjectDto);
+ HashMap<Object, Object> Map = new HashMap<>();
+ listPage.getRecords().forEach(item -> {
+ Map.put(item.getProjectId(), item);
+ });
+ return AjaxResult.success(Map);
+ }
+ @ApiOperation("澧炴坊椤圭洰")
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody OaProject oaProject) {
+ boolean save = oaProjectService.save(oaProject);
+ return AjaxResult.success(save);
+ }
+ @ApiOperation("鍒犻櫎椤圭洰")
+ @DeleteMapping("/delete/{id}")
+ public AjaxResult delete(@PathVariable Long id) {
+ boolean remove = oaProjectService.deleteById(id);
+ return AjaxResult.success(remove);
+ }
+ @ApiOperation("鏇存柊椤圭洰")
+ @PostMapping("/update")
+ public AjaxResult update(@RequestBody OaProject oaProject) {
+ boolean update = oaProjectService.updateById(oaProject);
+ return AjaxResult.success(update);
+ }
+// @ApiOperation("鏍规嵁ID鑾峰彇椤圭洰璇︽儏")
+// @GetMapping("/getById")
+// public AjaxResult getById(Long id) {
+// OaProject oaProject = oaProjectService.getById(id);
+// return AjaxResult.success(oaProject);
+// }
+ @ApiOperation("瀵煎嚭鎵�閫夐」鐩�")
+ @PostMapping("/export/{ids}")
+ public void export(HttpServletResponse response,@PathVariable("ids") List<Long> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ throw new IllegalArgumentException("瀵煎嚭椤圭洰鍒楄〃涓嶈兘涓虹┖");
+ }
+ oaProjectService.export(response, ids);
+ }
+
+}
diff --git a/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseController.java b/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseController.java
new file mode 100644
index 0000000..d857f52
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.oA.controller;
+
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.ruoyi.oA.service.OaProjectPhaseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "oA椤圭洰闃舵绠$悊")
+@RestController
+@RequestMapping("/oA/projectPhase")
+public class OaProjectPhaseController {
+ @Autowired
+ private OaProjectPhaseService oaProjectPhaseService;
+
+ @ApiOperation("鏂板椤圭洰闃舵")
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody OaProjectPhase oaProjectPhase) {
+ return AjaxResult.success(oaProjectPhaseService.save(oaProjectPhase));
+ }
+
+ @ApiOperation("鍒犻櫎椤圭洰闃舵")
+ @DeleteMapping("/delete/{phaseId}")
+ public AjaxResult delete(@PathVariable Integer phaseId) {
+ return AjaxResult.success(oaProjectPhaseService.deleteById(phaseId));
+ }
+
+ @ApiOperation("鏇存柊椤圭洰闃舵")
+ @PostMapping("/update")
+ public AjaxResult update(@RequestBody OaProjectPhase oaProjectPhase) {
+ return AjaxResult.success(oaProjectPhaseService.updateById(oaProjectPhase));
+ }
+
+ @ApiOperation("鏍规嵁椤圭洰id鏌ヨ椤圭洰闃舵鍒楄〃")
+ @GetMapping("/listByProjectId/{projectId}")
+ public AjaxResult listByProjectId(@PathVariable Integer projectId) {
+ return AjaxResult.success(oaProjectPhaseService.listByProjectId(projectId));
+ }
+}
diff --git a/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseTaskController.java b/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseTaskController.java
new file mode 100644
index 0000000..c0f7fc1
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/controller/OaProjectPhaseTaskController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.oA.controller;
+
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import com.ruoyi.oA.service.OaProjectPhaseTaskService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "oA椤圭洰闃舵浠诲姟绠$悊")
+@RestController
+@RequestMapping("/oA/projectPhaseTask")
+public class OaProjectPhaseTaskController {
+ @Autowired
+ private OaProjectPhaseTaskService oaProjectPhaseTaskService;
+
+ @ApiOperation("鏂板椤圭洰闃舵浠诲姟")
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody OaProjectPhaseTask oaProjectPhaseTask) {
+ return AjaxResult.success(oaProjectPhaseTaskService.save(oaProjectPhaseTask));
+ }
+
+ @ApiOperation("鏍规嵁椤圭洰闃舵id鏌ヨ椤圭洰闃舵浠诲姟鍒楄〃")
+ @GetMapping("/listByPhaseId/{phaseId}")
+ public AjaxResult listByPhaseId(@PathVariable Integer phaseId) {
+ return AjaxResult.success(oaProjectPhaseTaskService.listByPhaseId(phaseId));
+ }
+
+ @ApiOperation("鍒犻櫎椤圭洰闃舵浠诲姟")
+ @DeleteMapping("/delete/{taskId}")
+ public AjaxResult delete(@PathVariable Integer taskId) {
+ return AjaxResult.success(oaProjectPhaseTaskService.removeById(taskId));
+ }
+
+ @ApiOperation("鏇存柊椤圭洰闃舵浠诲姟")
+ @PostMapping("/update")
+ public AjaxResult update(@RequestBody OaProjectPhaseTask oaProjectPhaseTask) {
+ return AjaxResult.success(oaProjectPhaseTaskService.updateById(oaProjectPhaseTask));
+ }
+}
diff --git a/src/main/java/com/ruoyi/oA/dto/OaProjectDto.java b/src/main/java/com/ruoyi/oA/dto/OaProjectDto.java
new file mode 100644
index 0000000..0f90faf
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/dto/OaProjectDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.oA.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.oA.pojo.OaProject;
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OaProjectDto extends OaProject {
+ /**
+ * 璐熻矗浜哄悕绉�
+ */
+ @Excel(name = "璐熻矗浜哄悕绉�")
+ private String managerName;
+ /**
+ * 椤圭洰闃舵鍒楄〃
+ */
+ private List<OaProjectPhaseDto> oaProjectPhasesDto;
+// /**
+// * 椤圭洰闃舵浠诲姟鍒楄〃
+// */
+// private List<OaProjectPhaseTask> oaProjectPhaseTasks;
+}
diff --git a/src/main/java/com/ruoyi/oA/dto/OaProjectPhaseDto.java b/src/main/java/com/ruoyi/oA/dto/OaProjectPhaseDto.java
new file mode 100644
index 0000000..4ef163e
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/dto/OaProjectPhaseDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.oA.dto;
+
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OaProjectPhaseDto extends OaProjectPhase {
+ private List<OaProjectPhaseTask> oaProjectPhaseTasks;
+}
diff --git a/src/main/java/com/ruoyi/oA/mapper/OaProjectMapper.java b/src/main/java/com/ruoyi/oA/mapper/OaProjectMapper.java
new file mode 100644
index 0000000..2114cef
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/mapper/OaProjectMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.oA.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.oA.dto.OaProjectDto;
+import com.ruoyi.oA.pojo.OaProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project(OA绯荤粺-椤圭洰浠诲姟鍗忓悓-椤圭洰琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-09-24 09:18:46
+* @Entity com.ruoyi.oA.pojo.OaProject
+*/
+public interface OaProjectMapper extends BaseMapper<OaProject> {
+
+ IPage<OaProjectDto> listPage(Page page,@Param("req") OaProjectDto oaProjectDto);
+
+ List<OaProjectDto> selectByIds(List<Long> ids);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseMapper.java b/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseMapper.java
new file mode 100644
index 0000000..41f6ab0
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.oA.mapper;
+
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase(OA绯荤粺-椤圭洰闃舵琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-09-24 09:18:46
+* @Entity com.ruoyi.oA.pojo.OaProjectPhase
+*/
+public interface OaProjectPhaseMapper extends BaseMapper<OaProjectPhase> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseTaskMapper.java b/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseTaskMapper.java
new file mode 100644
index 0000000..b357c76
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseTaskMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.oA.mapper;
+
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase_task(OA绯荤粺-椤圭洰闃舵-浠诲姟琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-09-24 09:18:46
+* @Entity com.ruoyi.oA.pojo.OaProjectPhaseTask
+*/
+public interface OaProjectPhaseTaskMapper extends BaseMapper<OaProjectPhaseTask> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/oA/pojo/OaProject.java b/src/main/java/com/ruoyi/oA/pojo/OaProject.java
new file mode 100644
index 0000000..376f58f
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/pojo/OaProject.java
@@ -0,0 +1,107 @@
+package com.ruoyi.oA.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * OA绯荤粺-椤圭洰浠诲姟鍗忓悓-椤圭洰琛�
+ * @TableName oa_project
+ */
+@TableName(value ="oa_project")
+@Data
+public class OaProject implements Serializable {
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Integer projectId;
+
+ /**
+ * 椤圭洰鍚嶇О
+ */
+ @Excel(name = "椤圭洰鍚嶇О")
+ private String projectName;
+
+ /**
+ * 椤圭洰鎻忚堪
+ */
+ @Excel(name = "椤圭洰鎻忚堪")
+ private String description;
+
+ /**
+ * 寮�濮嬫椂闂�
+ */
+ @Excel(name = "寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate startDate;
+
+ /**
+ * 缁撴潫鏃堕棿
+ */
+ @Excel(name = "缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate endDate;
+
+ /**
+ * 鐘舵��
+ */
+ @Excel(name = "鐘舵��")
+ private String status;
+
+ /**
+ * 瀹屾垚搴�
+ */
+ @Excel(name = "瀹屾垚搴�")
+ private Integer completionRate;
+
+ /**
+ * 璐熻矗浜篿d
+ */
+ private Long managerId;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ /**
+ * 淇敼鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ /**
+ * 绉熸埛ID
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/oA/pojo/OaProjectPhase.java b/src/main/java/com/ruoyi/oA/pojo/OaProjectPhase.java
new file mode 100644
index 0000000..04326ed
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/pojo/OaProjectPhase.java
@@ -0,0 +1,92 @@
+package com.ruoyi.oA.pojo;
+
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * OA绯荤粺-椤圭洰闃舵琛�
+ * @TableName oa_project_phase
+ */
+@TableName(value ="oa_project_phase")
+@Data
+public class OaProjectPhase implements Serializable {
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Integer phaseId;
+
+ /**
+ * 椤圭洰闃舵鍚嶇О
+ */
+ private String phaseName;
+
+ /**
+ * oa_project琛╥d
+ */
+ private Integer oaProjectId;
+
+ /**
+ * 寮�濮嬫椂闂�
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate startDate;
+
+ /**
+ * 缁撴潫鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate endDate;
+
+ /**
+ * 鐘舵��
+ */
+ private String status;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ /**
+ * 淇敼鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ /**
+ * 绉熸埛ID
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/oA/pojo/OaProjectPhaseTask.java b/src/main/java/com/ruoyi/oA/pojo/OaProjectPhaseTask.java
new file mode 100644
index 0000000..8241ce5
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/pojo/OaProjectPhaseTask.java
@@ -0,0 +1,117 @@
+package com.ruoyi.oA.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * OA绯荤粺-椤圭洰闃舵-浠诲姟琛�
+ * @TableName oa_project_phase_task
+ */
+@TableName(value ="oa_project_phase_task")
+@Data
+public class OaProjectPhaseTask implements Serializable {
+ /**
+ *
+ */
+ @TableId(type = IdType.AUTO)
+ private Integer taskId;
+
+ /**
+ * 椤圭洰闃舵浠诲姟鍚嶇О
+ */
+ private String taskName;
+
+ /**
+ * oa_project_phase琛╥d
+ */
+ private Integer phaseId;
+
+ /**
+ * 寮�濮嬫椂闂�
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate startDate;
+
+ /**
+ * 缁撴潫鏃堕棿
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate endDate;
+
+ /**
+ * 鐩爣浠诲姟瀹屾垚鏃ユ湡
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDate targetDate;
+
+ /**
+ * 鐩爣鍊�
+ */
+ private Integer targetValue;
+
+ /**
+ * 褰撳墠鍊�
+ */
+ private Integer currentValue;
+
+ /**
+ * 鍗曚綅
+ */
+ private String unit;
+
+ /**
+ * 鐘舵��
+ */
+ private String status;
+
+ /**
+ * 瀹屾垚搴�
+ */
+ private Integer completionRate;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
+
+ /**
+ * 淇敼鐢ㄦ埛
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
+
+ /**
+ * 绉熸埛ID
+ */
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/oA/service/OaProjectPhaseService.java b/src/main/java/com/ruoyi/oA/service/OaProjectPhaseService.java
new file mode 100644
index 0000000..7914080
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/OaProjectPhaseService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.oA.service;
+
+import com.ruoyi.oA.dto.OaProjectPhaseDto;
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase(OA绯荤粺-椤圭洰闃舵琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-09-24 09:18:46
+*/
+public interface OaProjectPhaseService extends IService<OaProjectPhase> {
+
+ List<OaProjectPhaseDto> listByProjectId(Integer oaProjectId);
+
+ boolean deleteById(Integer phaseId);
+}
diff --git a/src/main/java/com/ruoyi/oA/service/OaProjectPhaseTaskService.java b/src/main/java/com/ruoyi/oA/service/OaProjectPhaseTaskService.java
new file mode 100644
index 0000000..225d12e
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/OaProjectPhaseTaskService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.oA.service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase_task(OA绯荤粺-椤圭洰闃舵-浠诲姟琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-09-24 09:18:46
+*/
+public interface OaProjectPhaseTaskService extends IService<OaProjectPhaseTask> {
+
+ List<OaProjectPhaseTask> listByPhaseId(Integer phaseId);
+}
diff --git a/src/main/java/com/ruoyi/oA/service/OaProjectService.java b/src/main/java/com/ruoyi/oA/service/OaProjectService.java
new file mode 100644
index 0000000..32ba593
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/OaProjectService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.oA.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.oA.dto.OaProjectDto;
+import com.ruoyi.oA.pojo.OaProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project(OA绯荤粺-椤圭洰浠诲姟鍗忓悓-椤圭洰琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-09-24 09:18:46
+*/
+public interface OaProjectService extends IService<OaProject> {
+
+ IPage<OaProjectDto> listPage(Page page, OaProjectDto oaProjectDto);
+
+ void export(HttpServletResponse response, List<Long> ids);
+
+ boolean deleteById(Long id);
+}
diff --git a/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseServiceImpl.java b/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseServiceImpl.java
new file mode 100644
index 0000000..b462f36
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseServiceImpl.java
@@ -0,0 +1,62 @@
+package com.ruoyi.oA.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.oA.dto.OaProjectPhaseDto;
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import com.ruoyi.oA.service.OaProjectPhaseService;
+import com.ruoyi.oA.mapper.OaProjectPhaseMapper;
+import com.ruoyi.oA.service.OaProjectPhaseTaskService;
+import lombok.val;
+import org.hibernate.validator.constraints.br.TituloEleitoral;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase(OA绯荤粺-椤圭洰闃舵琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-09-24 09:18:46
+*/
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class OaProjectPhaseServiceImpl extends ServiceImpl<OaProjectPhaseMapper, OaProjectPhase>
+ implements OaProjectPhaseService{
+ @Autowired
+ private OaProjectPhaseMapper oaProjectPhaseMapper;
+ @Autowired
+ private OaProjectPhaseTaskService oaProjectPhaseTaskService;
+
+ @Override
+ public List<OaProjectPhaseDto> listByProjectId(Integer oaProjectId) {
+ List<OaProjectPhase> oaProjectPhases = oaProjectPhaseMapper.selectList(new LambdaQueryWrapper<OaProjectPhase>()
+ .eq(OaProjectPhase::getOaProjectId, oaProjectId));
+ List<OaProjectPhaseDto> collect = oaProjectPhases.stream().map(oaProjectPhase -> {
+ OaProjectPhaseDto oaProjectPhaseDto = new OaProjectPhaseDto();
+ BeanUtils.copyProperties(oaProjectPhase, oaProjectPhaseDto);
+// List<OaProjectPhaseTask> oaProjectPhaseTasks = oaProjectPhaseTaskService.listByPhaseId(oaProjectPhaseDto.getPhaseId());
+ oaProjectPhaseDto.setOaProjectPhaseTasks(oaProjectPhaseTaskService.listByPhaseId(oaProjectPhaseDto.getPhaseId()));
+ return oaProjectPhaseDto;
+ }).collect(Collectors.toList());
+ return collect;
+ }
+
+ @Override
+ public boolean deleteById(Integer phaseId) {
+ // 鍏堝垹闄ら」鐩樁娈典笅鐨勪换鍔�
+ oaProjectPhaseTaskService.remove(new LambdaQueryWrapper<OaProjectPhaseTask>()
+ .eq(OaProjectPhaseTask::getPhaseId, phaseId));
+ return oaProjectPhaseMapper.deleteById(phaseId) > 0;
+ }
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseTaskServiceImpl.java b/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseTaskServiceImpl.java
new file mode 100644
index 0000000..625e8d8
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseTaskServiceImpl.java
@@ -0,0 +1,33 @@
+package com.ruoyi.oA.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.oA.pojo.OaProjectPhaseTask;
+import com.ruoyi.oA.service.OaProjectPhaseTaskService;
+import com.ruoyi.oA.mapper.OaProjectPhaseTaskMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project_phase_task(OA绯荤粺-椤圭洰闃舵-浠诲姟琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-09-24 09:18:46
+*/
+@Service
+public class OaProjectPhaseTaskServiceImpl extends ServiceImpl<OaProjectPhaseTaskMapper, OaProjectPhaseTask>
+ implements OaProjectPhaseTaskService{
+
+
+ @Override
+ public List<OaProjectPhaseTask> listByPhaseId(Integer phaseId) {
+ return baseMapper.selectList(new LambdaQueryWrapper<OaProjectPhaseTask>()
+ .eq(OaProjectPhaseTask::getPhaseId, phaseId));
+ }
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/oA/service/impl/OaProjectServiceImpl.java b/src/main/java/com/ruoyi/oA/service/impl/OaProjectServiceImpl.java
new file mode 100644
index 0000000..149c04f
--- /dev/null
+++ b/src/main/java/com/ruoyi/oA/service/impl/OaProjectServiceImpl.java
@@ -0,0 +1,69 @@
+package com.ruoyi.oA.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
+import com.ruoyi.oA.dto.OaProjectDto;
+import com.ruoyi.oA.pojo.OaProject;
+import com.ruoyi.oA.pojo.OaProjectPhase;
+import com.ruoyi.oA.service.OaProjectPhaseService;
+import com.ruoyi.oA.service.OaProjectService;
+import com.ruoyi.oA.mapper.OaProjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+* @author ywx
+* @description 閽堝琛ㄣ�恛a_project(OA绯荤粺-椤圭洰浠诲姟鍗忓悓-椤圭洰琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-09-24 09:18:45
+*/
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class OaProjectServiceImpl extends ServiceImpl<OaProjectMapper, OaProject>
+ implements OaProjectService{
+ @Autowired
+ private OaProjectMapper oaProjectMapper;
+ @Autowired
+ private OaProjectPhaseService oaProjectPhaseService;
+
+ @Override
+ public IPage<OaProjectDto> listPage(Page page, OaProjectDto oaProjectDto) {
+ IPage<OaProjectDto> iPage = oaProjectMapper.listPage(page, oaProjectDto);
+ // 椤圭洰闃舵鍒楄〃
+ for (OaProjectDto projectDto : iPage.getRecords()) {
+ projectDto.setOaProjectPhasesDto(oaProjectPhaseService.listByProjectId(projectDto.getProjectId()));
+ }
+ return iPage;
+ }
+
+ @Override
+ public void export(HttpServletResponse response, List<Long> ids) {
+ List<OaProjectDto> list = oaProjectMapper.selectByIds(ids);
+ ExcelUtil<OaProjectDto> util = new ExcelUtil<OaProjectDto>(OaProjectDto.class);
+ util.exportExcel(response, list , "椤圭洰鏁版嵁");
+ }
+
+ @Override
+ public boolean deleteById(Long id) {
+ // 鍏堝垹闄ら」鐩笅鐨勯樁娈�
+ List<OaProjectPhase> oaProjectPhases = oaProjectPhaseService.list(new LambdaQueryWrapper<OaProjectPhase>()
+ .eq(OaProjectPhase::getOaProjectId, id));
+ if (!oaProjectPhases.isEmpty()) {
+ oaProjectPhases.forEach(oaProjectPhase -> {
+ oaProjectPhaseService.deleteById(oaProjectPhase.getPhaseId());
+ });
+ }
+ return oaProjectMapper.deleteById(id) > 0;
+ }
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
index f2e214e..5d4810d 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -43,6 +43,11 @@
*/
@Excel(name = "寰呭嚭搴撴暟閲�")
private BigDecimal inboundNum0;
+ /**
+ * 鍑哄簱鏁伴噺
+ */
+ @Excel(name = "鍑哄簱鏁伴噺")
+ private BigDecimal totalInboundNum;
/**
* 鏈�浣庡簱瀛樻暟閲�
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 1e237f0..358f20b 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -431,7 +431,8 @@
BigDecimal totalInboundNum = collect1.stream()
.map(ProcurementRecordOut::getInboundNum)
.reduce(BigDecimal.ZERO, BigDecimal::add);
-
+ // 鍑哄簱鏁伴噺 = 鎬绘暟閲� - 寰呭嚭搴撴暟閲�
+ dto.setTotalInboundNum(totalInboundNum);
// 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
}
diff --git a/src/main/resources/mapper/oA/OaProjectMapper.xml b/src/main/resources/mapper/oA/OaProjectMapper.xml
new file mode 100644
index 0000000..c245a39
--- /dev/null
+++ b/src/main/resources/mapper/oA/OaProjectMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oA.mapper.OaProjectMapper">
+
+
+ <select id="listPage" resultType="com.ruoyi.oA.dto.OaProjectDto">
+ select op.*,su.nick_name as managerName from oa_project op
+ LEFT JOIN sys_user su ON op.manager_id=su.user_id
+ <where>
+ 1=1
+ <if test="req.projectName != null and req.projectName != ''">
+ and op.project_name like concat('%',#{req.projectName},'%')
+ </if>
+ <if test="req.managerName != null and req.managerName != ''">
+ and su.nick_name like concat('%',#{req.managerName},'%')
+ </if>
+ <if test="req.status != null and req.status != ''">
+ and op.status = #{req.status}
+ </if>
+ </where>
+ </select>
+ <select id="selectByIds" resultType="com.ruoyi.oA.dto.OaProjectDto">
+ select op.*,su.nick_name as managerName from oa_project op
+ LEFT JOIN sys_user su ON op.manager_id=su.user_id
+ where op.project_id in
+ <foreach collection="ids" item="id" open="(" close=")" separator=",">
+ #{id}
+ </foreach>
+ </select>
+</mapper>
diff --git a/src/main/resources/mapper/oA/OaProjectPhaseMapper.xml b/src/main/resources/mapper/oA/OaProjectPhaseMapper.xml
new file mode 100644
index 0000000..2f52fe9
--- /dev/null
+++ b/src/main/resources/mapper/oA/OaProjectPhaseMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oA.mapper.OaProjectPhaseMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.oA.pojo.OaProjectPhase">
+ <id property="phaseId" column="phase_id" jdbcType="INTEGER"/>
+ <result property="phaseName" column="phase_name" jdbcType="VARCHAR"/>
+ <result property="oaProjectId" column="oa_project_id" jdbcType="INTEGER"/>
+ <result property="startDate" column="start_date" jdbcType="TIMESTAMP"/>
+ <result property="endDate" column="end_date" jdbcType="TIMESTAMP"/>
+ <result property="status" column="status" jdbcType="VARCHAR"/>
+ <result property="createUser" column="create_user" jdbcType="BIGINT"/>
+ <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+ <result property="updateUser" column="update_user" jdbcType="BIGINT"/>
+ <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+ <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ phase_id,phase_name,oa_project_id,
+ start_date,end_date,status,
+ create_user,create_time,update_user,
+ update_time,tenant_id
+ </sql>
+</mapper>
diff --git a/src/main/resources/mapper/oA/OaProjectPhaseTaskMapper.xml b/src/main/resources/mapper/oA/OaProjectPhaseTaskMapper.xml
new file mode 100644
index 0000000..cc029d9
--- /dev/null
+++ b/src/main/resources/mapper/oA/OaProjectPhaseTaskMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.oA.mapper.OaProjectPhaseTaskMapper">
+
+ <resultMap id="BaseResultMap" type="com.ruoyi.oA.pojo.OaProjectPhaseTask">
+ <id property="taskId" column="task_id" jdbcType="INTEGER"/>
+ <result property="taskName" column="task_name" jdbcType="VARCHAR"/>
+ <result property="phaseId" column="phase_id" jdbcType="INTEGER"/>
+ <result property="startDate" column="start_date" jdbcType="TIMESTAMP"/>
+ <result property="endDate" column="end_date" jdbcType="TIMESTAMP"/>
+ <result property="targetDate" column="target_date" jdbcType="TIMESTAMP"/>
+ <result property="targetValue" column="target_value" jdbcType="INTEGER"/>
+ <result property="currentValue" column="current_value" jdbcType="INTEGER"/>
+ <result property="unit" column="unit" jdbcType="VARCHAR"/>
+ <result property="status" column="status" jdbcType="VARCHAR"/>
+ <result property="completionRate" column="completion_rate" jdbcType="INTEGER"/>
+ <result property="createUser" column="create_user" jdbcType="BIGINT"/>
+ <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+ <result property="updateUser" column="update_user" jdbcType="BIGINT"/>
+ <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+ <result property="tenantId" column="tenant_id" jdbcType="BIGINT"/>
+ </resultMap>
+
+ <sql id="Base_Column_List">
+ task_id,task_name,phase_id,
+ start_date,end_date,target_date,
+ target_value,current_value,unit,
+ status,completion_rate,create_user,
+ create_time,update_user,update_time,
+ tenant_id
+ </sql>
+</mapper>
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index e367bc8..26f13a8 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -98,6 +98,7 @@
t1.inbound_batches,
t1.inbound_num,
t1.inbound_num as inboundNum0,
+ t1.inbound_num as totalInboundNum,
t1.create_time,
t1.update_time,
t1.create_by
--
Gitblit v1.9.3