yaowanxin
2025-09-24 a95ea84bcb75d7132a3c7333c2c5252be29a3f0d
OA系统-项目任务协同。项目,项目阶段,项目阶段任务
已添加20个文件
894 ■■■■■ 文件已修改
src/main/java/com/ruoyi/oA/controller/OaProjectController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/controller/OaProjectPhaseController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/controller/OaProjectPhaseTaskController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/dto/OaProjectDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/dto/OaProjectPhaseDto.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/mapper/OaProjectMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/mapper/OaProjectPhaseTaskMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/pojo/OaProject.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/pojo/OaProjectPhase.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/pojo/OaProjectPhaseTask.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/OaProjectPhaseService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/OaProjectPhaseTaskService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/OaProjectService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/impl/OaProjectPhaseTaskServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/oA/service/impl/OaProjectServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/oA/OaProjectMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/oA/OaProjectPhaseMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/oA/OaProjectPhaseTaskMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
}
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));
    }
}
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));
    }
}
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;
}
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;
}
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 é’ˆå¯¹è¡¨ã€oa_project(OA系统-项目任务协同-项目表)】的数据库操作Mapper
* @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);
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase(OA系统-项目阶段表)】的数据库操作Mapper
* @createDate 2025-09-24 09:18:46
* @Entity com.ruoyi.oA.pojo.OaProjectPhase
*/
public interface OaProjectPhaseMapper extends BaseMapper<OaProjectPhase> {
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase_task(OA系统-项目阶段-任务表)】的数据库操作Mapper
* @createDate 2025-09-24 09:18:46
* @Entity com.ruoyi.oA.pojo.OaProjectPhaseTask
*/
public interface OaProjectPhaseTaskMapper extends BaseMapper<OaProjectPhaseTask> {
}
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;
    /**
     * è´Ÿè´£äººid
     */
    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;
}
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表id
     */
    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;
}
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表id
     */
    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;
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase(OA系统-项目阶段表)】的数据库操作Service
* @createDate 2025-09-24 09:18:46
*/
public interface OaProjectPhaseService extends IService<OaProjectPhase> {
    List<OaProjectPhaseDto> listByProjectId(Integer oaProjectId);
    boolean deleteById(Integer phaseId);
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase_task(OA系统-项目阶段-任务表)】的数据库操作Service
* @createDate 2025-09-24 09:18:46
*/
public interface OaProjectPhaseTaskService extends IService<OaProjectPhaseTask> {
    List<OaProjectPhaseTask> listByPhaseId(Integer phaseId);
}
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 é’ˆå¯¹è¡¨ã€oa_project(OA系统-项目任务协同-项目表)】的数据库操作Service
* @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);
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase(OA系统-项目阶段表)】的数据库操作Service实现
* @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;
    }
}
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 é’ˆå¯¹è¡¨ã€oa_project_phase_task(OA系统-项目阶段-任务表)】的数据库操作Service实现
* @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));
    }
}
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 é’ˆå¯¹è¡¨ã€oa_project(OA系统-项目任务协同-项目表)】的数据库操作Service实现
* @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;
    }
}
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>
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>
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>