From ce64642460c904be91bbff5f03bb8a14c35517e0 Mon Sep 17 00:00:00 2001 From: chenhao <852066789@qq.com> Date: Fri, 21 Mar 2025 14:51:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(demand):=20=E6=96=B0=E5=A2=9E=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E7=AE=A1=E7=90=86=E5=92=8C=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加需求管理相关实体类、Mapper、Service和Controller - 实现需求列表查询、详情查看、新增、编辑和删除功能 - 添加版本号管理相关实体类、Mapper、Service和Controller - 实现版本号列表查询、详情查看、新增、编辑和删除功能 - 新增版本号树形结构查询功能 - 更新工作日志实体类,增加需求Id等字段 - 修改定时任务白名单配置 --- .../demand/ProjectDemandController.java | 73 ++++++ .../version/ProjectVersionController.java | 78 ++++++ .../business/demand/domain/ProjectDemand.java | 107 +++++++++ .../demand/mapper/ProjectDemandMapper.java | 53 +++++ .../demand/service/IProjectDemandService.java | 57 +++++ .../impl/ProjectDemandServiceImpl.java | 111 +++++++++ .../version/domain/ProjectVersion.java | 52 ++++ .../version/mapper/ProjectVersionMapper.java | 49 ++++ .../service/IProjectVersionService.java | 50 ++++ .../impl/ProjectVersionServiceImpl.java | 136 +++++++++++ .../business/version/vo/VersionTreeVo.java | 31 +++ .../work/logger/domain/WorkLogger.java | 7 + .../logger/service/IWorkLoggerService.java | 2 +- .../service/impl/WorkLoggerServiceImpl.java | 9 +- .../ProjectDemand/ProjectDemandMapper.xml | 224 ++++++++++++++++++ .../ProjectVersion/ProjectVersionMapper.xml | 146 ++++++++++++ .../business/WorkLogger/WorkLoggerMapper.xml | 36 ++- .../pms/common/constant/Constants.java | 2 +- pms-quartz/pom.xml | 4 + .../unissense/pms/quartz/task/DemandTask.java | 30 +++ 20 files changed, 1241 insertions(+), 16 deletions(-) create mode 100644 pms-admin/src/main/java/tech/unissense/pms/web/controller/business/demand/ProjectDemandController.java create mode 100644 pms-admin/src/main/java/tech/unissense/pms/web/controller/business/version/ProjectVersionController.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/demand/domain/ProjectDemand.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/demand/mapper/ProjectDemandMapper.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/demand/service/IProjectDemandService.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/demand/service/impl/ProjectDemandServiceImpl.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/version/domain/ProjectVersion.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/version/mapper/ProjectVersionMapper.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/version/service/IProjectVersionService.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/version/service/impl/ProjectVersionServiceImpl.java create mode 100644 pms-business/src/main/java/tech/unissense/pms/business/version/vo/VersionTreeVo.java create mode 100644 pms-business/src/main/resources/mapper/business/ProjectDemand/ProjectDemandMapper.xml create mode 100644 pms-business/src/main/resources/mapper/business/ProjectVersion/ProjectVersionMapper.xml create mode 100644 pms-quartz/src/main/java/tech/unissense/pms/quartz/task/DemandTask.java diff --git a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/demand/ProjectDemandController.java b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/demand/ProjectDemandController.java new file mode 100644 index 0000000..f5df795 --- /dev/null +++ b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/demand/ProjectDemandController.java @@ -0,0 +1,73 @@ +package tech.unissense.pms.web.controller.business.demand; + +import io.swagger.annotations.Api; +import tech.unissense.pms.business.demand.domain.ProjectDemand; +import tech.unissense.pms.business.demand.service.IProjectDemandService; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.ApiOperation; + +import org.springframework.beans.factory.annotation.Autowired; +import tech.unissense.pms.common.core.controller.BaseController; +import tech.unissense.pms.common.core.domain.AjaxResult; +import tech.unissense.pms.common.core.page.TableDataInfo; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectDemand)表控制层 + * @Date 2025-03-20 14:53:19 + */ +@Api("需求管理") +@RestController +@RequestMapping("demand") + +public class ProjectDemandController extends BaseController { + + @Autowired + private IProjectDemandService projectDemandService; + + + @GetMapping("/list") + public TableDataInfo list(ProjectDemand projectDemand) { + startPage(); + List list = projectDemandService.queryAll(projectDemand); + return getDataTable(list); + } + + + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Integer id) { + return AjaxResult.success(projectDemandService.queryById(id)); + } + + + + @PostMapping("/insert") + public AjaxResult add(@RequestBody ProjectDemand projectDemand) { + return toAjax(projectDemandService.insert(projectDemand)); + } + + + @ApiOperation("编辑数据") + @PutMapping("/update") + public AjaxResult edit(@RequestBody ProjectDemand projectDemand) { + return toAjax(projectDemandService.update(projectDemand)); + } + + + @ApiOperation("删除数据") + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable("id") Integer id) { + return toAjax(projectDemandService.deleteById(id)); + } + + /** + * 通过主键批量删除 + */ + @ApiOperation(value = "批量删除") + @DeleteMapping("/remove/batch/{ids}") + public AjaxResult batchRemove(@PathVariable("ids") Integer[] ids) { + return AjaxResult.success(projectDemandService.batchRemove(ids)); + } +} diff --git a/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/version/ProjectVersionController.java b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/version/ProjectVersionController.java new file mode 100644 index 0000000..cf8f523 --- /dev/null +++ b/pms-admin/src/main/java/tech/unissense/pms/web/controller/business/version/ProjectVersionController.java @@ -0,0 +1,78 @@ +package tech.unissense.pms.web.controller.business.version; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import tech.unissense.pms.business.version.domain.ProjectVersion; +import tech.unissense.pms.business.version.service.IProjectVersionService; +import org.springframework.web.bind.annotation.*; + +import org.springframework.beans.factory.annotation.Autowired; +import tech.unissense.pms.common.core.controller.BaseController; +import tech.unissense.pms.common.core.domain.AjaxResult; +import tech.unissense.pms.common.core.page.TableDataInfo; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectVersion)表控制层 + * @Date 2025-03-20 14:58:03 + */ +@Api(tags = "版本号") +@RestController +@RequestMapping("projectVersion") + +public class ProjectVersionController extends BaseController { + + @Autowired + private IProjectVersionService projectVersionService; + + @ApiOperation("列表查询") + @GetMapping("/list") + public TableDataInfo list(ProjectVersion projectVersion) { + startPage(); + List list = projectVersionService.queryAll(projectVersion); + return getDataTable(list); + } + @ApiOperation("树形查询") + @GetMapping("/tree") + public AjaxResult tree(ProjectVersion projectVersion) { + return AjaxResult.success(projectVersionService.treeList(projectVersion)); + } + + @ApiOperation("根据ID查详情") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Integer id) { + return AjaxResult.success(projectVersionService.queryById(id)); + } + + + @ApiOperation("新增数据") + @PostMapping("/insert") + public AjaxResult add(@RequestBody ProjectVersion projectVersion) { + return toAjax(projectVersionService.insert(projectVersion)); + } + + + @ApiOperation("编辑数据") + @PutMapping("/update") + public AjaxResult edit(@RequestBody ProjectVersion projectVersion) { + return toAjax(projectVersionService.update(projectVersion)); + } + + + @ApiOperation("删除数据") + @DeleteMapping("/{id}") + public AjaxResult remove(@PathVariable("id") Integer id) { + return toAjax(projectVersionService.deleteById(id)); + } + + /** + * 通过主键批量删除 + */ + @ApiOperation(value = "批量删除") + @DeleteMapping("/remove/batch/{ids}") + public AjaxResult batchRemove(@PathVariable("ids") Integer[] ids) { + return AjaxResult.success(projectVersionService.batchRemove(ids)); + } +} diff --git a/pms-business/src/main/java/tech/unissense/pms/business/demand/domain/ProjectDemand.java b/pms-business/src/main/java/tech/unissense/pms/business/demand/domain/ProjectDemand.java new file mode 100644 index 0000000..d28ce44 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/demand/domain/ProjectDemand.java @@ -0,0 +1,107 @@ +package tech.unissense.pms.business.demand.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * (ProjectDemand)实体类 + * + * @author ch + * @since 2025-03-20 14:53:20 + */ +@Data +public class ProjectDemand implements Serializable { + + + private Integer id; + /** + * 标题 + */ + + private String title; + /** + * 版本id + */ + + private Integer versionId; + + /** + * 需求状态 0待排期 1:已计划 2:进行中 3:已完成 4:已关闭 + */ + + private String demandStatus; + /** + * 负责人 + */ + + private Integer responsiblePerson; + /** + * 预估工时 + */ + + private String estimatedWorkHours; + + + private Date createTime; + + + private Date endTime; + /** + * 优先级 + */ + private String priority; + private Integer projectId; + + private String versionNumber; + //负责人名称 + private String responsiblePersonName; + private List demandStatusList; + /** + * 需求状态 + */ + public enum DemandStatus + { + /** 0待排期 */ + + DPQ("0","待排期"), + /** 已计划 */ + YJH("1","已计划"), + /** 进行中 */ + JXZ("2","进行中"), + /** 已完成 */ + YWC("3","已完成"), + /** 已关闭 */ + YGB("4","已关闭"), + + ; + + private final String value; + private final String remark; + + DemandStatus(String value,String remark) + { + this.remark = remark; + this.value = value; + } + + public String value() + { + return this.value; + } + public static String getRemark(String value) + { + for (DemandStatus demandStatus : DemandStatus.values()) { + if (demandStatus.value.equals(value)){ + return demandStatus.remark; + } + } + return ""; + } + } +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/demand/mapper/ProjectDemandMapper.java b/pms-business/src/main/java/tech/unissense/pms/business/demand/mapper/ProjectDemandMapper.java new file mode 100644 index 0000000..969adf0 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/demand/mapper/ProjectDemandMapper.java @@ -0,0 +1,53 @@ +package tech.unissense.pms.business.demand.mapper; + +import tech.unissense.pms.business.demand.domain.ProjectDemand; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectDemand)表数据库访问层 + * @Date 2025-03-20 14:53:19 + */ +public interface ProjectDemandMapper { + + /** + * 通过实体作为筛选条件查询 + * + * @param projectDemand 实例对象 + * @return 对象列表 + */ + List queryAll(ProjectDemand projectDemand); + + /** + * 根据ID查详情 + */ + ProjectDemand queryById(Integer id); + + + /** + * 新增数据 + */ + int insert(ProjectDemand projectDemand); + + + /** + * 修改数据 + */ + int update(ProjectDemand projectDemand); + + /** + * 通过主键删除数据 + */ + int deleteById(Integer id); + + /** + * 通过id批量删除 + */ + int batchRemove(Integer[] ids); + + List listByVersionIdList(List versionIdList); + + void scheduleUpdateDemandStatus(); + +} diff --git a/pms-business/src/main/java/tech/unissense/pms/business/demand/service/IProjectDemandService.java b/pms-business/src/main/java/tech/unissense/pms/business/demand/service/IProjectDemandService.java new file mode 100644 index 0000000..d980f13 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/demand/service/IProjectDemandService.java @@ -0,0 +1,57 @@ +package tech.unissense.pms.business.demand.service; + +import tech.unissense.pms.business.demand.domain.ProjectDemand; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectDemand)表服务接口 + * @Date 2025-03-20 14:53:20 + */ +public interface IProjectDemandService { + + /** + * 通过实体作为筛选条件查询 + */ + List queryAll(ProjectDemand projectDemand); + + + /** + * 根据ID查详情 + */ + ProjectDemand queryById(Integer id); + + /** + * 新增数据 + */ + int insert(ProjectDemand projectDemand); + + /** + * 修改数据 + */ + int update(ProjectDemand projectDemand); + + /** + * 通过主键删除数据 + */ + int deleteById(Integer id); + + /** + * 通过id批量删除 + */ + int batchRemove(Integer[] ids); + + /** + * 根据versionId查询List + * + * @param versionIdList + * @return tech.unissense.pms.business.demand.domain.ProjectDemand + * @author ch + * @date 2025/03/20 15:24 + */ + List listByVersionIdList(List versionIdList); +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/demand/service/impl/ProjectDemandServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/demand/service/impl/ProjectDemandServiceImpl.java new file mode 100644 index 0000000..fcecb48 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/demand/service/impl/ProjectDemandServiceImpl.java @@ -0,0 +1,111 @@ +package tech.unissense.pms.business.demand.service.impl; + +import cn.hutool.core.date.DateUtil; +import org.springframework.cglib.core.Local; +import tech.unissense.pms.business.demand.domain.ProjectDemand; +import tech.unissense.pms.business.demand.mapper.ProjectDemandMapper; +import tech.unissense.pms.business.demand.service.IProjectDemandService; +import org.springframework.stereotype.Service; +import tech.unissense.pms.common.exception.ServiceException; +import tech.unissense.pms.common.utils.DateUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectDemand)表服务实现类 + * @Date 2025-03-20 14:53:20 + */ + +@Service +public class ProjectDemandServiceImpl implements IProjectDemandService { + + @Resource + private ProjectDemandMapper projectDemandMapper; + + + /** + * 查询列表数据 + * + * @param projectDemand 实例对象 + * @return 对象列表 + */ + @Override + public List queryAll(ProjectDemand projectDemand) { + List dataList = projectDemandMapper.queryAll(projectDemand); + return dataList; + } + + @Override + public ProjectDemand queryById(Integer id) { + return projectDemandMapper.queryById(id); + } + + + @Override + public int insert(ProjectDemand projectDemand) { + if (projectDemand.getEndTime() == null) { + //根据当前时间向上取整 + BigDecimal estimatedWorkHours = new BigDecimal(projectDemand.getEstimatedWorkHours()); + BigDecimal bigDecimal = estimatedWorkHours.setScale(0, RoundingMode.CEILING); + LocalDate createDate = projectDemand.getCreateTime() == null ? LocalDate.now() : + projectDemand.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + projectDemand.setEndTime(DateUtil.date(createDate.plusDays(bigDecimal.intValue()))); + } + return projectDemandMapper.insert(projectDemand); + } + + + /** + * 更改逻辑:1:已完成,已关闭状态发生变更必须校验结束时间在当前时间之后 2:定时任务修改状态为已完成 + * + * @param projectDemand + * @return int + * @author ch + * @date 2025/03/21 10:58 + */ + @Override + public int update(ProjectDemand projectDemand) { + ProjectDemand existDemand = this.queryById(projectDemand.getId()); + //已完成或已关闭状态 + boolean statusFlag = ProjectDemand.DemandStatus.YWC.value().equals(existDemand.getDemandStatus()) + || ProjectDemand.DemandStatus.YGB.value().equals(existDemand.getDemandStatus()); + // 当前状态发生变化,并且结束时间在当前时间之前 + boolean timeFlag = !existDemand.getDemandStatus().equals(projectDemand.getDemandStatus()) && DateUtils.getNowDate().before(projectDemand.getEndTime()); + if (statusFlag && timeFlag) { + throw new ServiceException("结束时间不能早于当前时间"); + } + + return projectDemandMapper.update(projectDemand); + } + + + @Override + public int deleteById(Integer id) { + return projectDemandMapper.deleteById(id); + } + + /** + * 通过id批量删除 + */ + @Override + public int batchRemove(Integer[] ids) { + return projectDemandMapper.batchRemove(ids); + } + + @Override + public List listByVersionIdList(List versionIdList) { + return projectDemandMapper.listByVersionIdList(versionIdList); + } + +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/version/domain/ProjectVersion.java b/pms-business/src/main/java/tech/unissense/pms/business/version/domain/ProjectVersion.java new file mode 100644 index 0000000..89d2097 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/version/domain/ProjectVersion.java @@ -0,0 +1,52 @@ +package tech.unissense.pms.business.version.domain; + +import lombok.Data; +import tech.unissense.pms.business.demand.domain.ProjectDemand; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * (ProjectVersion)实体类 + * + * @author ch + * @since 2025-03-20 14:58:03 + */ +@Data + +public class ProjectVersion implements Serializable { + + + private Integer id; + /** + * 项目id + */ + private Integer projectId; + /** + * 版本号 + */ + private String versionNumber; + /** + * 描述 + */ + + private String versionDesc; + /** + * 发布日期 + */ + + private Date releaseDate; + /** + * 创建时间 + */ + private Date createTime; + + private List demandList; + + private Integer userId; + private List demandStatusList; +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/version/mapper/ProjectVersionMapper.java b/pms-business/src/main/java/tech/unissense/pms/business/version/mapper/ProjectVersionMapper.java new file mode 100644 index 0000000..15d85e7 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/version/mapper/ProjectVersionMapper.java @@ -0,0 +1,49 @@ +package tech.unissense.pms.business.version.mapper; + +import tech.unissense.pms.business.version.domain.ProjectVersion; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectVersion)表数据库访问层 + * @Date 2025-03-20 14:58:03 + */ +public interface ProjectVersionMapper { + + /** + * 通过实体作为筛选条件查询 + * + * @param projectVersion 实例对象 + * @return 对象列表 + */ + List queryAll(ProjectVersion projectVersion); + + /** + * 根据ID查详情 + */ + ProjectVersion queryById(Integer id); + + + /** + * 新增数据 + */ + int insert(ProjectVersion projectVersion); + + + /** + * 修改数据 + */ + int update(ProjectVersion projectVersion); + + /** + * 通过主键删除数据 + */ + int deleteById(Integer id); + + /** + * 通过id批量删除 + */ + int batchRemove(Integer[] ids); + +} diff --git a/pms-business/src/main/java/tech/unissense/pms/business/version/service/IProjectVersionService.java b/pms-business/src/main/java/tech/unissense/pms/business/version/service/IProjectVersionService.java new file mode 100644 index 0000000..5486833 --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/version/service/IProjectVersionService.java @@ -0,0 +1,50 @@ +package tech.unissense.pms.business.version.service; + +import tech.unissense.pms.business.version.domain.ProjectVersion; +import tech.unissense.pms.business.version.vo.VersionTreeVo; + +import java.util.List; + +/** + * @Author ch + * @Desc (ProjectVersion)表服务接口 + * @Date 2025-03-20 14:58:03 + */ +public interface IProjectVersionService { + + /** + * 通过实体作为筛选条件查询 + */ + List queryAll(ProjectVersion projectVersion); + + + /** + * 根据ID查详情 + */ + ProjectVersion queryById(Integer id); + + /** + * 新增数据 + */ + int insert(ProjectVersion projectVersion); + + /** + * 修改数据 + */ + int update(ProjectVersion projectVersion); + + /** + * 通过主键删除数据 + */ + int deleteById(Integer id); + + /** + * 通过id批量删除 + */ + int batchRemove(Integer[] ids); + + List treeList(ProjectVersion projectVersion); +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/version/service/impl/ProjectVersionServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/version/service/impl/ProjectVersionServiceImpl.java new file mode 100644 index 0000000..2137abc --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/version/service/impl/ProjectVersionServiceImpl.java @@ -0,0 +1,136 @@ +package tech.unissense.pms.business.version.service.impl; + +import cn.hutool.core.collection.CollUtil; +import org.springframework.beans.factory.annotation.Autowired; +import tech.unissense.pms.business.demand.domain.ProjectDemand; +import tech.unissense.pms.business.demand.service.IProjectDemandService; +import tech.unissense.pms.business.version.domain.ProjectVersion; +import tech.unissense.pms.business.version.mapper.ProjectVersionMapper; +import tech.unissense.pms.business.version.service.IProjectVersionService; +import org.springframework.stereotype.Service; +import tech.unissense.pms.business.version.vo.VersionTreeVo; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Author ch + * @Desc (ProjectVersion)表服务实现类 + * @Date 2025-03-20 14:58:04 + */ + +@Service +public class ProjectVersionServiceImpl implements IProjectVersionService { + + @Resource + private ProjectVersionMapper projectVersionMapper; + + @Autowired + private IProjectDemandService demandService; + + /** + * 查询列表数据 + * + * @param projectVersion 实例对象 + * @return 对象列表 + */ + @Override + public List queryAll(ProjectVersion projectVersion) { + List dataList = projectVersionMapper.queryAll(projectVersion); + return dataList; + } + + @Override + public ProjectVersion queryById(Integer id) { + return projectVersionMapper.queryById(id); + } + + + @Override + public int insert(ProjectVersion projectVersion) { + return projectVersionMapper.insert(projectVersion); + } + + + @Override + public int update(ProjectVersion projectVersion) { + return projectVersionMapper.update(projectVersion); + } + + + @Override + public int deleteById(Integer id) { + return projectVersionMapper.deleteById(id); + } + + /** + * 通过id批量删除 + */ + @Override + public int batchRemove(Integer[] ids) { + return projectVersionMapper.batchRemove(ids); + } + + @Override + public List treeList(ProjectVersion projectVersion) { + // 获取当前项目下的所有版本信息 + List projectVersions = projectVersionMapper.queryAll(projectVersion); + + // 构建需求查询参数(根据项目ID) + ProjectDemand param = new ProjectDemand(); + param.setProjectId(projectVersion.getProjectId()); + if (projectVersion.getUserId() != null) { + param.setResponsiblePerson(projectVersion.getUserId()); + } + if (CollUtil.isNotEmpty(projectVersion.getDemandStatusList())) { + param.setDemandStatusList(projectVersion.getDemandStatusList()); + } + List allDemands = demandService.queryAll(param); + // 过滤出未关联版本的根需求(versionId为null的需求) + List rootDemands = allDemands.stream() + .filter(d -> d.getVersionId() == null) + .collect(Collectors.toList()); + // 将根需求转换为树节点(类型为1表示需求节点) + List versionTreeVoList = rootDemands.stream() + .sorted(Comparator.comparing(ProjectDemand::getCreateTime)) + .map(item -> { + VersionTreeVo node = new VersionTreeVo(); + node.setId(item.getId()); + node.setTitle(item.getTitle()); + node.setType("1"); + node.setChildrenList(Collections.emptyList()); + return node; + }).collect(Collectors.toList()); + + // 按版本ID分组需求(versionId不为null的需求) + // 用于快速查找每个版本关联的需求列表 + Map> versionIdMap = allDemands.stream().filter(item -> item.getVersionId() != null) + .collect(Collectors.groupingBy(ProjectDemand::getVersionId)); + + // 处理每个项目版本,构建版本节点 + for (ProjectVersion version : projectVersions) { + VersionTreeVo node = new VersionTreeVo(); + node.setId(version.getId()); + node.setTitle(version.getVersionNumber()); + node.setType("2"); + // 转换关联需求为子节点(类型1) + node.setChildrenList( + versionIdMap.getOrDefault(version.getId(), Collections.emptyList()) + .stream().map(item -> { + VersionTreeVo childNode = new VersionTreeVo(); + childNode.setId(item.getId()); + childNode.setTitle(item.getTitle()); + childNode.setType("1"); + return childNode; + }).collect(Collectors.toList()) + ); + versionTreeVoList.add(node); + } + return versionTreeVoList; + } + +} + + + diff --git a/pms-business/src/main/java/tech/unissense/pms/business/version/vo/VersionTreeVo.java b/pms-business/src/main/java/tech/unissense/pms/business/version/vo/VersionTreeVo.java new file mode 100644 index 0000000..1cd9aaa --- /dev/null +++ b/pms-business/src/main/java/tech/unissense/pms/business/version/vo/VersionTreeVo.java @@ -0,0 +1,31 @@ +package tech.unissense.pms.business.version.vo; + +import lombok.Data; + +import java.util.List; + +/** + * Copyright © 2025 紫光汇智信息技术有限公司 版权所有
+ * 官网地址: 紫光汇智信息技术有限公司 + * + * @ClassName VersionTreeVo + * @Description 需求管理中树结构 + * @Author ch (创建者) + * @Date 2025/3/21 9:23 + * @Version 1.0.0 + *

+ * 修改历史: + * 2025-03-21 - ch - 创建 + */ +@Data +public class VersionTreeVo { + + private Integer id; + //标题 + private String title; + //类型 0:版本 1:需求 + private String type; + //子节点 + private List childrenList; + +} diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java index 6014619..7ec29d8 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/domain/WorkLogger.java @@ -46,12 +46,19 @@ public class WorkLogger extends BaseEntity { * 0 -正常; 1-补填 */ private String state; + /** + * 需求Id + */ + private Integer demandId; private Date startDate; private Date endDate; private List projectIdList; private Integer examineId; + private String projectName; + private String title; + private String versionNumber; } diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java index 59ff7c2..c9f593d 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/IWorkLoggerService.java @@ -58,7 +58,7 @@ public interface IWorkLoggerService { */ boolean deleteById(Integer id); - WorkLogger getInfo(WorkLogger workLogger); + List getInfo(WorkLogger workLogger); List calendar(WorkLogger workLogger); diff --git a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java index 7a2e437..4d0377b 100644 --- a/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java +++ b/pms-business/src/main/java/tech/unissense/pms/business/work/logger/service/impl/WorkLoggerServiceImpl.java @@ -2,8 +2,10 @@ package tech.unissense.pms.business.work.logger.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import tech.unissense.pms.business.project.domain.Project; +import tech.unissense.pms.business.project.service.IProjectService; import tech.unissense.pms.business.work.logger.domain.WorkLogger; import tech.unissense.pms.business.work.logger.mapper.WorkLoggerMapper; import tech.unissense.pms.business.work.logger.service.IWorkLoggerService; @@ -31,6 +33,8 @@ import java.util.stream.Collectors; public class WorkLoggerServiceImpl implements IWorkLoggerService { @Resource private WorkLoggerMapper workLoggerMapper; + @Autowired + private IProjectService projectService; /** * 通过ID查询单条数据 @@ -92,10 +96,9 @@ public class WorkLoggerServiceImpl implements IWorkLoggerService { } @Override - public WorkLogger getInfo(WorkLogger workLogger) { + public List getInfo(WorkLogger workLogger) { List list = this.workLoggerMapper.list(workLogger); - - return CollUtil.isNotEmpty(list) ? list.get(0) : null; + return list; } @Override diff --git a/pms-business/src/main/resources/mapper/business/ProjectDemand/ProjectDemandMapper.xml b/pms-business/src/main/resources/mapper/business/ProjectDemand/ProjectDemandMapper.xml new file mode 100644 index 0000000..3fe14d0 --- /dev/null +++ b/pms-business/src/main/resources/mapper/business/ProjectDemand/ProjectDemandMapper.xml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + id, title, version_id, demand_status, responsible_person, estimated_work_hours, create_time, end_time, priority,project_id + + + + + + + + + + + + + + INSERT INTO pms_project_demand + + + title,/projectVersion/tree + + + version_id, + + + demand_status, + + + responsible_person, + + + estimated_work_hours, + + + create_time, + + + end_time, + + + priority, + + + project_id, + + + + + #{title}, + + + #{versionId}, + + + #{demandStatus}, + + + #{responsiblePerson}, + + + #{estimatedWorkHours}, + + + #{createTime}, + + + #{endTime}, + + + #{priority}, + + + #{projectId}, + + + + + + + UPDATE pms_project_demand + + + title = #{title}, + + + version_id = #{versionId}, + + + demand_status = #{demandStatus}, + + + responsible_person = #{responsiblePerson}, + + + estimated_work_hours = #{estimatedWorkHours}, + + + create_time = #{createTime}, + + + end_time = #{endTime}, + + + priority = #{priority}, + + + WHERE id = #{id} + + + update pms_project_demand + set demand_status = '3' + where end_time now() + + + + + DELETE + FROM pms_project_demand + WHERE id = #{id} + + + + + delete from pms_project_demand where id in + + #{id} + + + + + + + diff --git a/pms-business/src/main/resources/mapper/business/ProjectVersion/ProjectVersionMapper.xml b/pms-business/src/main/resources/mapper/business/ProjectVersion/ProjectVersionMapper.xml new file mode 100644 index 0000000..eced541 --- /dev/null +++ b/pms-business/src/main/resources/mapper/business/ProjectVersion/ProjectVersionMapper.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + id, project_id,version_number, version_desc, release_date,create_time + + + + + + + + + + + + + INSERT INTO pms_project_version + + + version_number, + + + project_id, + + + version_desc, + + + release_date, + + + create_time, + + + + + #{versionNumber}, + + + #{projectId}, + + + #{versionDesc}, + + + #{releaseDate}, + + + #{createTime}, + + + + + + + UPDATE pms_project_version + + + version_number = #{versionNumber}, + + + project_id= #{projectId}, + + + version_desc = #{versionDesc}, + + + release_date = #{releaseDate}, + + + WHERE id = #{id} + + + + + DELETE + FROM pms_project_version + WHERE id = #{id} + + + + + delete from pms_project_version where id in + + #{id} + + + + + + + diff --git a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml index 8b219ec..1406545 100644 --- a/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml +++ b/pms-business/src/main/resources/mapper/business/WorkLogger/WorkLoggerMapper.xml @@ -15,6 +15,7 @@ + select logger_id, @@ -27,7 +28,8 @@ create_by, update_by, update_time, - create_time + create_time, + demand_id from pms_work_logger @@ -42,7 +44,8 @@ create_by, update_by, update_time, - create_time + create_time, + demand_id from pms_work_logger where logger_id = #{loggerId} @@ -50,9 +53,15 @@ - - where project_id = #{projectId} + + + + project_id = #{projectId} + and logger_date between #{startDate} and #{endDate} and user_id=#{userId} +