From 87af4928eed7aa6f43caab6ef0a3d8f49b9ec5ca Mon Sep 17 00:00:00 2001 From: cuizhibin Date: Fri, 27 Jun 2025 15:16:07 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=8E=BB=E9=99=A4=E6=97=A0=E7=94=A8=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=202.=E9=A1=B9=E7=9B=AE=E4=BB=BB=E5=8A=A1=E7=BB=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91=203.=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/pom.xml | 29 +- .../java/com/dite/znpt/constant/Message.java | 5 + .../java/com/dite/znpt/domain/Result.java | 6 +- .../znpt/domain/entity/AttachInfoEntity.java | 46 +++ .../znpt/domain/entity/FileInfoEntity.java | 46 --- .../znpt/domain/entity/ProjectEntity.java | 17 ++ .../znpt/domain/entity/ProjectTaskEntity.java | 85 ++++++ .../domain/entity/ProjectTaskGroupEntity.java | 37 +++ .../dite/znpt/domain/vo/AttachInfoReq.java | 36 +++ .../dite/znpt/domain/vo/FileInfoListReq.java | 36 --- .../com/dite/znpt/domain/vo/FileInfoResp.java | 18 -- .../dite/znpt/domain/vo/ProjectListReq.java | 10 +- .../dite/znpt/domain/vo/ProjectListResp.java | 8 +- .../com/dite/znpt/domain/vo/ProjectReq.java | 32 +-- .../com/dite/znpt/domain/vo/ProjectResp.java | 5 +- .../domain/vo/ProjectTaskGroupListReq.java | 33 +++ .../znpt/domain/vo/ProjectTaskGroupReq.java | 38 +++ .../znpt/domain/vo/ProjectTaskGroupResp.java | 25 ++ .../znpt/domain/vo/ProjectTaskImportReq.java | 71 +++++ .../znpt/domain/vo/ProjectTaskListReq.java | 69 +++++ .../dite/znpt/domain/vo/ProjectTaskReq.java | 84 ++++++ .../dite/znpt/domain/vo/ProjectTaskResp.java | 27 ++ .../znpt/domain/vo/ProjectTaskStartReq.java | 37 +++ .../com/dite/znpt/enums/FilePathEnum.java | 1 + .../dite/znpt/enums/ProjectTaskStateEnum.java | 48 ++++ .../com/dite/znpt/mapper/FileInfoMapper.java | 12 +- .../znpt/mapper/ProjectTaskGroupMapper.java | 19 ++ .../dite/znpt/mapper/ProjectTaskMapper.java | 21 ++ .../dite/znpt/service/AttachInfoService.java | 50 ++++ .../dite/znpt/service/FileInfoService.java | 64 ----- .../znpt/service/ProjectTaskGroupService.java | 55 ++++ .../dite/znpt/service/ProjectTaskService.java | 93 ++++++ .../service/impl/AttachInfoServiceImpl.java | 105 +++++++ .../service/impl/FileInfoServiceImpl.java | 99 ------- .../impl/ProjectTaskGroupServiceImpl.java | 95 +++++++ .../service/impl/ProjectTaskServiceImpl.java | 265 ++++++++++++++++++ .../main/resources/mapper/FileInfoMapper.xml | 32 --- .../main/resources/mapper/ProjectMapper.xml | 11 +- .../mapper/ProjectTaskGroupMapper.xml | 24 ++ .../resources/mapper/ProjectTaskMapper.xml | 77 +++++ pom.xml | 2 +- .../web/controller/AttachInfoController.java | 37 +++ .../web/controller/FileInfoController.java | 84 ------ .../web/controller/ProjectTaskController.java | 101 +++++++ .../ProjectTaskGroupController.java | 63 +++++ 45 files changed, 1702 insertions(+), 456 deletions(-) create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java delete mode 100644 core/src/main/java/com/dite/znpt/domain/entity/FileInfoEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java delete mode 100644 core/src/main/java/com/dite/znpt/domain/vo/FileInfoListReq.java delete mode 100644 core/src/main/java/com/dite/znpt/domain/vo/FileInfoResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java create mode 100644 core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java create mode 100644 core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java create mode 100644 core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java create mode 100644 core/src/main/java/com/dite/znpt/service/AttachInfoService.java delete mode 100644 core/src/main/java/com/dite/znpt/service/FileInfoService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java create mode 100644 core/src/main/java/com/dite/znpt/service/ProjectTaskService.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java delete mode 100644 core/src/main/java/com/dite/znpt/service/impl/FileInfoServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java create mode 100644 core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java delete mode 100644 core/src/main/resources/mapper/FileInfoMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectTaskGroupMapper.xml create mode 100644 core/src/main/resources/mapper/ProjectTaskMapper.xml create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java delete mode 100644 web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java diff --git a/core/pom.xml b/core/pom.xml index a5536ed..b90f9ba 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -78,19 +78,6 @@ 3.0.3 - - - com.baomidou - mybatis-plus-generator - 3.5.11 - - - - org.apache.velocity - velocity-engine-core - 2.3 - - com.alibaba @@ -103,12 +90,6 @@ spring-jdbc - - - org.freemarker - freemarker - - org.springframework spring-tx @@ -137,7 +118,7 @@ org.redisson redisson - 3.16.0 + 3.22.0 @@ -149,7 +130,7 @@ com.drewnoakes metadata-extractor - 2.15.0 + 2.18.0 @@ -168,12 +149,6 @@ 1.3.0-91 compile - - javax.sip - jain-sip-ri - 1.3.0-91 - compile - diff --git a/core/src/main/java/com/dite/znpt/constant/Message.java b/core/src/main/java/com/dite/znpt/constant/Message.java index c12a266..9ac0cda 100644 --- a/core/src/main/java/com/dite/znpt/constant/Message.java +++ b/core/src/main/java/com/dite/znpt/constant/Message.java @@ -39,4 +39,9 @@ public class Message implements Serializable { public static final String CERTIFICATION_TYPE_ILLEGAL = "证书类型不合法"; public static final String CERTIFICATION_CODE_EXIST = "证书编码已存在"; public static final String CERTIFICATION_ID_NOT_EXIST = "证书id不存在"; + public static final String TASK_ID_GROUP_ID_ALL_EMPTY = "任务id和任务组id不可同时为空"; + public static final String TASK_STATUS_NOT_PENDING = "任务状态不是未开始"; + public static final String TASK_STATUS_NOT_IN_PROGRESS = "任务状态不是进行中"; + public static final String TASK_IN_CYCLE = "父级任务存在循环依赖:"; + public static final String TASK_GROUP_ID_NOT_EXIST = "任务组id不存在"; } diff --git a/core/src/main/java/com/dite/znpt/domain/Result.java b/core/src/main/java/com/dite/znpt/domain/Result.java index f893e22..9228b34 100644 --- a/core/src/main/java/com/dite/znpt/domain/Result.java +++ b/core/src/main/java/com/dite/znpt/domain/Result.java @@ -70,7 +70,11 @@ public class Result implements Serializable { } public static Result error(String code, String msg) { - return new Result(HttpStatus.INTERNAL_SERVER_ERROR, null, Integer.parseInt(code), msg); + return error(code, msg, null); + } + + public static Result error(String code, String msg, T data) { + return new Result(HttpStatus.INTERNAL_SERVER_ERROR, data, Integer.parseInt(code), msg); } } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java new file mode 100644 index 0000000..38abca2 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/AttachInfoEntity.java @@ -0,0 +1,46 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; + +/** + * @author huise23 + * @date 2025/06/27 10:10 + * @Description: 附件信息表实体类 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@TableName("attach_info") +@ApiModel(value="AttachInfoEntity对象", description="附件信息表") +public class AttachInfoEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -70522903124405433L; + + @ApiModelProperty("附件id") + @TableId(value = "attach_id", type = IdType.ASSIGN_ID) + private String attachId; + + @ApiModelProperty("业务id") + @TableField("business_id") + private String businessId; + + @ApiModelProperty("附件路径") + @TableField("attach_path") + private String attachPath; + + @ApiModelProperty("业务类型,字典attach_business_type") + @TableField("business_type") + private String businessType; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/FileInfoEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/FileInfoEntity.java deleted file mode 100644 index fb1aa27..0000000 --- a/core/src/main/java/com/dite/znpt/domain/entity/FileInfoEntity.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.dite.znpt.domain.entity; - -import java.io.Serializable; - -import com.baomidou.mybatisplus.annotation.*; -import com.dite.znpt.domain.AuditableEntity; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - * @Description: 文件信息表实体类 - */ -@Data -@EqualsAndHashCode(callSuper = false) -@TableName("file_info") -@ApiModel(value="FileInfoEntity对象", description="文件信息表") -public class FileInfoEntity extends AuditableEntity implements Serializable { - - private static final long serialVersionUID = -14287111699285655L; - - @ExcelProperty("文件id") - @ApiModelProperty("文件id") - @TableId(value = "file_id", type = IdType.ASSIGN_UUID) - private Long fileId; - - @ExcelProperty("业务id") - @ApiModelProperty("业务id") - @TableField("business_id") - private String businessId; - - @ExcelProperty("minio相对路径") - @ApiModelProperty("minio相对路径") - @TableField("minio_path") - private String minioPath; - - @ExcelProperty("业务类型,字典file_business_type") - @ApiModelProperty("业务类型,字典file_business_type") - @TableField("business_type") - private String businessType; -} - diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java index b92e0bf..df8ec34 100644 --- a/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectEntity.java @@ -1,9 +1,12 @@ package com.dite.znpt.domain.entity; import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import com.dite.znpt.domain.AuditableEntity; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -105,23 +108,28 @@ public class ProjectEntity extends AuditableEntity implements Serializable { @ApiModelProperty("技术方案图片,多个用逗号隔开") @JsonIgnore @TableField("technical_image") + @Deprecated private String technicalImage; @ApiModelProperty("技术方案内容") @TableField("technical_content") + @Deprecated private String technicalContent; @ApiModelProperty("安全措施图片,多个用逗号隔开") @JsonIgnore @TableField("safety_image") + @Deprecated private String safetyImage; @ApiModelProperty("安全措施内容") @TableField("safety_content") + @Deprecated private String safetyContent; @ApiModelProperty("交底内容") @TableField("disclose_content") + @Deprecated private String discloseContent; @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") @@ -130,14 +138,23 @@ public class ProjectEntity extends AuditableEntity implements Serializable { @ApiModelProperty("项目工作类型 可能有多项,逗号分隔") @TableField("work_type") + @Deprecated private String workType; @ApiModelProperty("项目工作岗位 可能有多项,json对象保存") @TableField("job") + @Deprecated private String job; @ApiModelProperty(value = "项目安全风险点", example = "1", notes = "项目安全风险点 可能有多项,逗号分隔") @TableField("safety_risk_point") + @Deprecated private String safetyRiskPoint; + + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; + + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; } diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java new file mode 100644 index 0000000..3c3560d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskEntity.java @@ -0,0 +1,85 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task") +@ApiModel(value="ProjectTaskEntity对象", description="项目任务信息表") +public class ProjectTaskEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 445818156838153502L; + + @ApiModelProperty("任务id") + @TableId(value = "task_id", type = IdType.ASSIGN_ID) + private String taskId; + + @ApiModelProperty("上级任务id") + @TableField("parent_task_id") + private String parentTaskId; + + @ApiModelProperty("任务组id") + @TableField("task_group_id") + private String taskGroupId; + + @ApiModelProperty("项目任务名称") + @TableField("task_name") + private String taskName; + + @ApiModelProperty("项目任务编号") + @TableField("task_code") + private String taskCode; + + @ApiModelProperty("任务负责人id") + @TableField("main_user_id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + @TableField("user_ids") + private String userIds; + + @ApiModelProperty("计划开始时间") + @TableField("plan_start_date") + private LocalDate planStartDate; + + @ApiModelProperty("计划结束时间") + @TableField("plan_end_date") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + @TableField("actual_start_date") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + @TableField("actual_end_date") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + @TableField("status") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + @TableField("overdue_status") + private Integer overdueStatus; + + @ApiModelProperty("备注") + @TableField("remark") + private String remark; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java new file mode 100644 index 0000000..15f38a0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/entity/ProjectTaskGroupEntity.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.entity; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.domain.AuditableEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * @author huise23 + * @date 2025/06/24 17:06 + * @Description: 项目任务组信息表实体类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task_group") +@ApiModel(value="ProjectTaskGroupEntity对象", description="项目任务组信息表") +public class ProjectTaskGroupEntity extends AuditableEntity implements Serializable { + + @Serial + private static final long serialVersionUID = -86904406809616523L; + + @ApiModelProperty("id") + @TableId(value = "group_id", type = IdType.ASSIGN_ID) + private String groupId; + + @ApiModelProperty("项目任务组名") + @TableField("group_name") + private String groupName; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java new file mode 100644 index 0000000..026d7e0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/AttachInfoReq.java @@ -0,0 +1,36 @@ +package com.dite.znpt.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author huise23 + * @date 2025/06/25 21:59 + * @Description: 附件信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="AttachInfo请求对象", description="附件信息表") +public class AttachInfoReq implements Serializable { + + @Serial + private static final long serialVersionUID = -59837569061686176L; + + @ApiModelProperty("附件id") + private Long attachId; + + @ApiModelProperty("业务id") + private String businessId; + + @ApiModelProperty("请求路径") + private String attachPath; + + @ApiModelProperty("业务类型,字典attach_business_type") + private String businessType; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/FileInfoListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/FileInfoListReq.java deleted file mode 100644 index eef330e..0000000 --- a/core/src/main/java/com/dite/znpt/domain/vo/FileInfoListReq.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dite.znpt.domain.vo; - -import java.io.Serializable; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - * @Description: 文件信息请求实体 - */ -@Data -@ApiModel("文件信息列表请求实体") -public class FileInfoListReq implements Serializable { - - private static final long serialVersionUID = 574018420246881535L; - - @ApiModelProperty("查询关键字") - private String keyword; - - @ApiModelProperty("文件信息Id") - private Long fileId; - - @ApiModelProperty("业务id") - private String businessId; - - @ApiModelProperty("minio相对路径") - private String minioPath; - - @ApiModelProperty("业务类型,字典file_business_type") - private String businessType; - -} - diff --git a/core/src/main/java/com/dite/znpt/domain/vo/FileInfoResp.java b/core/src/main/java/com/dite/znpt/domain/vo/FileInfoResp.java deleted file mode 100644 index b01b426..0000000 --- a/core/src/main/java/com/dite/znpt/domain/vo/FileInfoResp.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.dite.znpt.domain.vo; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; -import com.dite.znpt.domain.entity.FileInfoEntity; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - * @Description: 文件信息响应实体 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@ApiModel("文件信息响应实体") -public class FileInfoResp extends FileInfoEntity { -} - diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java index 46ad94b..42f55e5 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListReq.java @@ -35,13 +35,11 @@ public class ProjectListReq implements Serializable { @ApiModelProperty("项目状态,枚举:ProjectStatusEnum") private String status; - @JsonFormat(pattern = "yyyy-MM-dd") - @ApiModelProperty("创建日期-起") - private String createDateBegin; + @ApiModelProperty("项目开始日期") + private LocalDate startDate; - @JsonFormat(pattern = "yyyy-MM-dd") - @ApiModelProperty("创建日期-讫") - private String createDateEnd; + @ApiModelProperty("项目结束日期") + private LocalDate endDate; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java index d311d2d..d2db815 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectListResp.java @@ -11,6 +11,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; import java.time.LocalDateTime; /** @@ -81,8 +82,9 @@ public class ProjectListResp implements Serializable { @ApiModelProperty("施工人员") private String constructorName; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ApiModelProperty("创建时间") - private LocalDateTime createTime; + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java index 161c6c5..b36e673 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectReq.java @@ -1,5 +1,6 @@ package com.dite.znpt.domain.vo; +import com.alibaba.excel.annotation.ExcelProperty; import com.dite.znpt.util.ValidationGroup; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -9,6 +10,7 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; /** * @Author: gaoxiong @@ -22,6 +24,10 @@ public class ProjectReq implements Serializable { @Serial private static final long serialVersionUID = 740685592879189406L; + @NotBlank(groups = {ValidationGroup.Update.class}, message = "项目id不能为空") + @ApiModelProperty("项目id") + private String projectId; + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目名称不能为空") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 50, message = "项目名称长度不能超过50字符") @ApiModelProperty("项目名称") @@ -88,30 +94,12 @@ public class ProjectReq implements Serializable { @ApiModelProperty("施工组长id") private String constructionTeamLeaderId; - @ApiModelProperty(value = "技术方案图片", notes = "多项英文逗号隔开") - private String technicalImage; - - @ApiModelProperty("技术方案内容") - private String technicalContent; - - @ApiModelProperty(value = "安全措施图片", notes = "多项英文逗号隔开") - private String safetyImage; - - @ApiModelProperty("安全措施内容") - private String safetyContent; - - @ApiModelProperty("交底内容") - private String discloseContent; - @ApiModelProperty("状态:0待施工,1施工中,2已完工,3已审核,4已验收") private int status; - @ApiModelProperty(value = "项目工作类型", notes = "多项英文逗号隔开") - private String workType; + @ApiModelProperty(value = "开始时间") + private LocalDate startDate; - @ApiModelProperty(value = "项目工作岗位", notes = "多项英文逗号隔开,json对象保存") - private String job; - - @ApiModelProperty(value = "项目安全风险点", notes = "多项英文逗号隔开") - private String safetyRiskPoint; + @ApiModelProperty(value = "结束时间") + private LocalDate endDate; } diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java index 4d438cf..826a0f5 100644 --- a/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectResp.java @@ -13,6 +13,7 @@ import com.dite.znpt.domain.entity.ProjectEntity; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDate; /** * @author huise23 @@ -26,10 +27,6 @@ public class ProjectResp extends ProjectReq implements Serializable { @Serial private static final long serialVersionUID = -1883901559600186726L; - @ExcelProperty("项目id") - @ApiModelProperty("项目id") - private String projectId; - @ApiModelProperty("施工人员") private String constructorName; diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java new file mode 100644 index 0000000..26d9076 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupListReq.java @@ -0,0 +1,33 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/24 17:06 + * @Description: 项目任务组信息请求实体 + */ +@Data +@ApiModel("项目任务组信息列表请求实体") +public class ProjectTaskGroupListReq implements Serializable { + + @Serial + private static final long serialVersionUID = -99072074587210624L; + + @ApiModelProperty("项目任务组信息Id") + private String groupId; + + @ApiModelProperty("项目任务组名") + private String groupName; + + @ApiModelProperty("任务名称/负责人") + private String keyword; + +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java new file mode 100644 index 0000000..6d91415 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupReq.java @@ -0,0 +1,38 @@ +package com.dite.znpt.domain.vo; + +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + * @Description: 项目任务组信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("project_task_group") +@ApiModel(value="ProjectTaskGroup请求对象", description="项目任务组信息表") +public class ProjectTaskGroupReq implements Serializable { + + @Serial + private static final long serialVersionUID = -57817993612481804L; + + @ApiModelProperty("id") + private String groupId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务组名不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务组名长度不能超过100字符") + @ApiModelProperty("项目任务组名") + private String groupName; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java new file mode 100644 index 0000000..14027da --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskGroupResp.java @@ -0,0 +1,25 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDateTime; +import java.util.List; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务组信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目任务组信息响应实体") +public class ProjectTaskGroupResp extends ProjectTaskGroupEntity { + + @ApiModelProperty("任务列表") + private List taskList; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java new file mode 100644 index 0000000..c2b6103 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskImportReq.java @@ -0,0 +1,71 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.alibaba.excel.annotation.ExcelProperty; + +import com.dite.znpt.util.ValidationGroup; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +/** + * @author huise23 + * @date 2025/06/27 14:21 + * @Description: 项目任务信息表导入请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask导入请求对象", description="项目任务信息表") +public class ProjectTaskImportReq implements Serializable { + + @Serial + private static final long serialVersionUID = -86440098932860558L; + + + @ExcelProperty(value = "上级任务名称") + private String parentTaskName; + + @ExcelProperty(value = "任务组名称(不能为空,长度32以内)") + private String taskGroupName; + + @ExcelProperty(value = "项目任务名称(不能为空,长度100以内)") + private String taskName; + + @ExcelProperty(value = "项目任务编号(不能为空,长度100以内)") + private String taskCode; + + @ExcelProperty(value = "任务负责人名称(不能为空,长度100以内)") + private String mainUserName; + + @ExcelProperty(value = "任务参与人名称,逗号分隔") + private String userName; + + @ExcelProperty(value = "计划开始时间(不能为空)") + private LocalDate planStartDate; + + @ExcelProperty(value = "计划结束时间(不能为空)") + private LocalDate planEndDate; + + @ExcelProperty(value = "实际开始时间") + private LocalDate actualStartDate; + + @ExcelProperty(value = "实际结束时间") + private LocalDate actualEndDate; + + @ExcelProperty(value = "任务状态,0未开始,1进行中,2已结束") + private Integer status; + + @ExcelProperty(value = "是否逾期,默认未逾期") + private Integer overdueStatus; + + @ExcelProperty(value = "备注") + private String remark; +} diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java new file mode 100644 index 0000000..ecca3b6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskListReq.java @@ -0,0 +1,69 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.io.Serial; +import java.io.Serializable; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author huise23 + * @date 2025/06/25 17:31 + * @Description: 项目任务信息请求实体 + */ +@Data +@ApiModel("项目任务信息列表请求实体") +public class ProjectTaskListReq implements Serializable { + + @Serial + private static final long serialVersionUID = 971346092554199471L; + + @ApiModelProperty("查询关键字") + private String keyword; + + @ApiModelProperty("项目任务信息Id") + private String taskId; + + @ApiModelProperty("任务组id") + private String taskGroupId; + + @ApiModelProperty("项目任务名称") + private String taskName; + + @ApiModelProperty("项目任务编号") + private String taskCode; + + @ApiModelProperty("任务负责人id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + private String userIds; + + @ApiModelProperty("计划开始时间") + private LocalDate planStartDate; + + @ApiModelProperty("计划结束时间") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + private Integer overdueStatus; + + @ApiModelProperty("任务名称/负责人名称") + private String taskNameOrMainUser; + + @ApiModelProperty(value = "导出?", hidden = true) + private Boolean isExport; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java new file mode 100644 index 0000000..14d6b97 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskReq.java @@ -0,0 +1,84 @@ +package com.dite.znpt.domain.vo; + +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask请求对象", description="项目任务信息表") +public class ProjectTaskReq implements Serializable { + + @Serial + private static final long serialVersionUID = 899180318567127648L; + + @ApiModelProperty("任务id") + private String taskId; + + @ApiModelProperty("上级任务id") + private String parentTaskId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "任务组id不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 32, message = "任务组id长度不能超过32字符") + @ApiModelProperty("任务组id") + private String taskGroupId; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务名称不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务名称长度不能超过100字符") + @ApiModelProperty("项目任务名称") + private String taskName; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目任务编号不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务编号长度不能超过100字符") + @ApiModelProperty("项目任务编号") + private String taskCode; + + @NotBlank(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "任务负责人id不能为空") + @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "任务负责人id长度不能超过100字符") + @ApiModelProperty("任务负责人id") + private String mainUserId; + + @ApiModelProperty("任务参与人id,逗号分隔") + private String userIds; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "计划开始时间不能为空") + @ApiModelProperty("计划开始时间") + private LocalDate planStartDate; + + @NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "计划结束时间不能为空") + @ApiModelProperty("计划结束时间") + private LocalDate planEndDate; + + @ApiModelProperty("实际开始时间") + private LocalDate actualStartDate; + + @ApiModelProperty("实际结束时间") + private LocalDate actualEndDate; + + @ApiModelProperty("任务状态,0未开始,1进行中,2已结束") + private Integer status; + + @ApiModelProperty("是否逾期,默认未逾期") + private Integer overdueStatus; + + @ApiModelProperty("附件列表") + private List attachFileIds; + + @ApiModelProperty("备注") + private String remark; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java new file mode 100644 index 0000000..605b3c6 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskResp.java @@ -0,0 +1,27 @@ +package com.dite.znpt.domain.vo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import com.dite.znpt.domain.entity.AttachInfoEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.dite.znpt.domain.entity.ProjectTaskEntity; + +/** + * @author huise23 + * @date 2025/06/25 21:48 + * @Description: 项目任务信息响应实体 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("项目任务信息响应实体") +public class ProjectTaskResp extends ProjectTaskEntity { + + @ApiModelProperty("附件列表") + private List attachList; +} + diff --git a/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java new file mode 100644 index 0000000..8642ffb --- /dev/null +++ b/core/src/main/java/com/dite/znpt/domain/vo/ProjectTaskStartReq.java @@ -0,0 +1,37 @@ +package com.dite.znpt.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.dite.znpt.util.ValidationGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + +/** + * @author huise23 + * @date 2025/06/25 17:31 + * @Description: 项目任务信息表请求类 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="ProjectTask开始/结束任务请求对象", description="项目任务信息表") +public class ProjectTaskStartReq implements Serializable { + + @Serial + private static final long serialVersionUID = 862660085007390976L; + + @ApiModelProperty("任务id") + private String taskId; + + @ApiModelProperty("任务组id") + private String taskGroupId; +} + diff --git a/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java b/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java index 6b7e3f7..894351e 100644 --- a/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java +++ b/core/src/main/java/com/dite/znpt/enums/FilePathEnum.java @@ -14,6 +14,7 @@ public enum FilePathEnum { IMAGE_TEMP("/static/image/temp/", "image-temp"), VIDEO("/static/video/", "video"), AUDIO("/static/audio/", "audio"), + ATTACH("/static/attach/", "attach"), ; @Getter diff --git a/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java b/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java new file mode 100644 index 0000000..5ccebb9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/enums/ProjectTaskStateEnum.java @@ -0,0 +1,48 @@ +package com.dite.znpt.enums; + +import cn.hutool.json.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: gaoxiong + * @Date: 2025/4/29 21:32 + * @Description: + */ +@Getter +@AllArgsConstructor +public enum ProjectTaskStateEnum { + PENDING(0, "未开始"), + IN_PROGRESS(1, "进行中"), + COMPLETED(2, "已完工"); + + private final int code; + private final String desc; + + public static ProjectTaskStateEnum getByCode(int code){ + for (ProjectTaskStateEnum e : ProjectTaskStateEnum.values() ) { + if(e.code == code){ + return e; + } + } + return null; + } + + public static String getDescByCode(int code){ + ProjectTaskStateEnum e = getByCode(code); + return null == e ? null : e.desc; + } + + public static List listAll(){ + List list = new ArrayList<>(ProjectTaskStateEnum.values().length); + for (ProjectTaskStateEnum e : ProjectTaskStateEnum.values() ) { + JSONObject jsonObject = new JSONObject(); + jsonObject.set(String.valueOf(e.code), e.desc); + list.add(jsonObject); + } + return list; + } +} diff --git a/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java b/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java index a286ad5..11947b7 100644 --- a/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java +++ b/core/src/main/java/com/dite/znpt/mapper/FileInfoMapper.java @@ -1,19 +1,13 @@ package com.dite.znpt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.dite.znpt.domain.entity.FileInfoEntity; -import com.dite.znpt.domain.vo.FileInfoListReq; -import com.dite.znpt.domain.vo.FileInfoResp; -import org.apache.ibatis.annotations.Param; - -import java.util.List; +import com.dite.znpt.domain.entity.AttachInfoEntity; /** * @author huise23 * @date 2025/04/11 23:17 - * @Description: 文件信息表数据库访问层 + * @Description: 附件信息表数据库访问层 */ -public interface FileInfoMapper extends BaseMapper { - List queryBySelective(FileInfoListReq fileInfoReq); +public interface FileInfoMapper extends BaseMapper { } diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java new file mode 100644 index 0000000..21b78e0 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskGroupMapper.java @@ -0,0 +1,19 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务组信息表数据库访问层 + */ +public interface ProjectTaskGroupMapper extends BaseMapper { + List queryBySelective(ProjectTaskGroupListReq projectTaskGroupReq); +} + diff --git a/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java new file mode 100644 index 0000000..afb1d09 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/mapper/ProjectTaskMapper.java @@ -0,0 +1,21 @@ +package com.dite.znpt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/24 16:44 + * @Description: 项目任务信息表数据库访问层 + */ +public interface ProjectTaskMapper extends BaseMapper { + List queryBySelective(ProjectTaskListReq projectTaskReq); + + List listAllParents(String taskId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/AttachInfoService.java b/core/src/main/java/com/dite/znpt/service/AttachInfoService.java new file mode 100644 index 0000000..c24dd80 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/AttachInfoService.java @@ -0,0 +1,50 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 附件信息表服务接口 + */ +public interface AttachInfoService extends IService { + + /** + * 功能描述:查询附件信息列表 + * + * @return {@link List }<{@link AttachInfoEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List listByBusinessIds(List businessIds, String businessType); + + /** + * 功能描述:新增附件信息 + * + * @param businessType 业务类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + List saveData(String businessType, MultipartFile[] files); + + /** + * 功能描述:删除附件信息 + * + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void deleteByBusinessIds(List businessIds, String businessType); + + /** + * 功能描述:更新附件关联的业务id + * + * @author huise23 + * @date 2025/04/11 23:17 + **/ + void updateBusinessIdByAttachIds(String businessId, List attachIds); +} + diff --git a/core/src/main/java/com/dite/znpt/service/FileInfoService.java b/core/src/main/java/com/dite/znpt/service/FileInfoService.java deleted file mode 100644 index 469bc27..0000000 --- a/core/src/main/java/com/dite/znpt/service/FileInfoService.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.dite.znpt.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.dite.znpt.domain.entity.FileInfoEntity; -import com.dite.znpt.domain.vo.FileInfoListReq; -import com.dite.znpt.domain.vo.FileInfoResp; - -import java.util.List; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - * @Description: 文件信息表服务接口 - */ -public interface FileInfoService extends IService { - - /** - * 功能描述:查询文件信息列表 - * - * @param fileInfoReq 文件信息 - * @return {@link List }<{@link FileInfoEntity }> - * @author huise23 - * @date 2025/04/11 23:17 - **/ - List selectList(FileInfoListReq fileInfoReq); - - /** - * 功能描述:查询单条文件信息 - * - * @param fileId 文件信息Id - * @return {@link FileInfoResp } - * @author huise23 - * @date 2025/04/11 23:17 - **/ - FileInfoResp selectById(Long fileId); - - /** - * 功能描述:新增文件信息 - * - * @param fileInfo 文件信息 - * @author huise23 - * @date 2025/04/11 23:17 - **/ - void saveData(FileInfoEntity fileInfo); - - /** - * 功能描述:更新文件信息 - * - * @param fileInfo 文件信息 - * @author huise23 - * @date 2025/04/11 23:17 - **/ - void updateData(FileInfoEntity fileInfo); - - /** - * 功能描述:删除文件信息 - * - * @param fileId 文件信息Id - * @author huise23 - * @date 2025/04/11 23:17 - **/ - void deleteById(Long fileId); -} - diff --git a/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java b/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java new file mode 100644 index 0000000..dd7bd2d --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectTaskGroupService.java @@ -0,0 +1,55 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import com.dite.znpt.domain.vo.ProjectTaskGroupReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务组信息表服务接口 + */ +public interface ProjectTaskGroupService extends IService { + + /** + * 功能描述:查询项目任务组信息列表 + * + * @param projectTaskGroupReq 项目任务组信息 + * @return {@link List }<{@link ProjectTaskGroupResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + List selectList(ProjectTaskGroupListReq projectTaskGroupReq); + + /** + * 功能描述:新增项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void saveData(ProjectTaskGroupReq projectTaskGroupReq); + + /** + * 功能描述:更新项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void updateData(ProjectTaskGroupReq projectTaskGroupReq); + + /** + * 功能描述:删除项目任务组信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteById(String groupId); +} + diff --git a/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java b/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java new file mode 100644 index 0000000..a142201 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/ProjectTaskService.java @@ -0,0 +1,93 @@ +package com.dite.znpt.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import com.dite.znpt.domain.vo.ProjectTaskReq; +import com.dite.znpt.domain.vo.ProjectTaskStartReq; + +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务信息表服务接口 + */ +public interface ProjectTaskService extends IService { + + /** + * 功能描述:查询项目任务信息列表 + * + * @param projectTaskReq 项目任务信息 + * @return {@link List }<{@link ProjectTaskResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + List selectList(ProjectTaskListReq projectTaskReq); + + /** + * 功能描述:查询单条项目任务信息 + * + * @param taskId 项目任务信息Id + * @return {@link ProjectTaskResp } + * @author huise23 + * @date 2025/06/25 17:21 + **/ + ProjectTaskResp selectById(String taskId); + + /** + * 功能描述:新增项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void saveData(ProjectTaskReq projectTaskReq); + + /** + * 功能描述:更新项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void updateData(ProjectTaskReq projectTaskReq); + + /** + * 功能描述:删除项目任务信息 + * + * @param taskId 项目任务信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteById(String taskId); + + /** + * 功能描述:删除项目任务信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + void deleteByGroupId(String groupId); + + /** + * 功能描述:开始任务/任务组开始任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + void startTask(ProjectTaskStartReq taskStartReq); + + /** + * 功能描述:结束任务/任务组结束任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + void endTask(ProjectTaskStartReq taskStartReq); +} + diff --git a/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java new file mode 100644 index 0000000..9b1db77 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AttachInfoServiceImpl.java @@ -0,0 +1,105 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.enums.FilePathEnum; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.mapper.FileInfoMapper; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + * @Description: 附件信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class AttachInfoServiceImpl extends ServiceImpl implements AttachInfoService { + + /** + * 功能描述:查询附件信息列表 + * + * @param businessIds 业务ids + * @param businessType 业务类型 + * @return {@link List }<{@link AttachInfoEntity }> + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public List listByBusinessIds(List businessIds, String businessType) { + return lambdaQuery().in(AttachInfoEntity::getBusinessId, businessIds) + .eq(StrUtil.isNotEmpty(businessType), AttachInfoEntity::getBusinessType, businessType) + .list(); + } + + /** + * 功能描述:保存数据 + * + * @param businessType 业务类型 + * @return {@link AttachInfoEntity } + * @author cuizhibin + * @date 2025/06/26 08:53 + **/ + @Override + public List saveData(String businessType, MultipartFile[] files) { + String temPathPrefix = FilePathEnum.ATTACH.getFileAbsolutePath().concat(DateUtil.today()).concat(FileUtil.FILE_SEPARATOR); + if (!FileUtil.exist(temPathPrefix)) { + FileUtil.mkdir(temPathPrefix); + } + List list = new ArrayList<>(); + for (MultipartFile file : files) { + if (!file.isEmpty()) { + try { + String path = temPathPrefix + file.getOriginalFilename(); + FileUtil.writeBytes(file.getBytes(),path); + list.add(AttachInfoEntity.builder().businessType(businessType).attachPath(path).build()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + baseMapper.insert(list); + return list.stream().map(AttachInfoEntity::getAttachId).collect(Collectors.toList()); + } + + /** + * 功能描述:删除附件信息 + * + * @param businessIds 业务id + * @param businessType 业务类型 + * @author huise23 + * @date 2025/04/11 23:17 + **/ + @Override + public void deleteByBusinessIds(List businessIds, String businessType) { + lambdaUpdate().in(AttachInfoEntity::getBusinessId, businessIds) + .eq(StrUtil.isNotEmpty(businessType), AttachInfoEntity::getBusinessType, businessType).remove(); + } + + /** + * 功能描述:更新附件关联的业务id + * + * @param businessId + * @param attachIds + * @author huise23 + * @date 2025/04/11 23:17 + */ + @Override + public void updateBusinessIdByAttachIds(String businessId, List attachIds) { + if (CollUtil.isEmpty(attachIds)) { + return; + } + lambdaUpdate().in(AttachInfoEntity::getAttachId, attachIds).set(AttachInfoEntity::getBusinessId, businessId).update(); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/FileInfoServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/FileInfoServiceImpl.java deleted file mode 100644 index 975b43f..0000000 --- a/core/src/main/java/com/dite/znpt/service/impl/FileInfoServiceImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.dite.znpt.service.impl; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.dite.znpt.domain.entity.FileInfoEntity; -import com.dite.znpt.domain.vo.FileInfoListReq; -import com.dite.znpt.domain.vo.FileInfoResp; -import com.dite.znpt.service.FileInfoService; -import com.dite.znpt.mapper.FileInfoMapper; -import org.springframework.stereotype.Service; -import cn.hutool.core.collection.CollUtil; -import lombok.RequiredArgsConstructor; -import com.dite.znpt.util.PageUtil; - -import java.util.List; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - * @Description: 文件信息表服务实现类 - */ -@Service -@RequiredArgsConstructor -public class FileInfoServiceImpl extends ServiceImpl implements FileInfoService { - - /** - * 功能描述:查询文件信息列表 - * - * @param fileInfoReq 文件信息信息 - * @return {@link List }<{@link FileInfoResp }> - * @author huise23 - * @date 2025/04/11 23:17 - **/ - @Override - public List selectList(FileInfoListReq fileInfoReq) { - PageUtil.startPage(); - List fileInfoList= this.baseMapper.queryBySelective(fileInfoReq); - fileInfoList.forEach(resp -> { - - }); - return fileInfoList; - } - - /** - * 功能描述:查询单条文件信息 - * - * @param fileId 文件信息Id - * @return {@link FileInfoResp } - * @author huise23 - * @date 2025/04/11 23:17 - **/ - @Override - public FileInfoResp selectById(Long fileId) { - FileInfoListReq fileInfoReq = new FileInfoListReq(); - fileInfoReq.setFileId(fileId); - - List list = selectList(fileInfoReq); - return CollUtil.isNotEmpty(list) ? CollUtil.getFirst(list) : new FileInfoResp(); - } - - /** - * 功能描述:新增文件信息 - * - * @param fileInfo 文件信息 - * @author huise23 - * @date 2025/04/11 23:17 - **/ - @Override - public void saveData(FileInfoEntity fileInfo) { -// todo 校验 - save(fileInfo); - } - - /** - * 功能描述:更新文件信息 - * - * @param fileInfo 文件信息 - * @author huise23 - * @date 2025/04/11 23:17 - **/ - @Override - public void updateData(FileInfoEntity fileInfo) { -// todo 校验 - updateById(fileInfo); - } - - /** - * 功能描述:删除文件信息 - * - * @param fileId 文件信息Id - * @author huise23 - * @date 2025/04/11 23:17 - **/ - @Override - public void deleteById(Long fileId) { -// todo 校验 - removeById(fileId); - } - -} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java new file mode 100644 index 0000000..516a9e3 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskGroupServiceImpl.java @@ -0,0 +1,95 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ProjectTaskGroupService; +import com.dite.znpt.mapper.ProjectTaskGroupMapper; +import com.dite.znpt.service.ProjectTaskService; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务组信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectTaskGroupServiceImpl extends ServiceImpl implements ProjectTaskGroupService { + + private final ProjectTaskService projectTaskService; + + /** + * 功能描述:查询项目任务组信息列表 + * + * @param projectTaskGroupReq 项目任务组信息信息 + * @return {@link List }<{@link ProjectTaskGroupResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public List selectList(ProjectTaskGroupListReq projectTaskGroupReq) { + PageUtil.startPage(); + List projectTaskGroupList= this.baseMapper.queryBySelective(projectTaskGroupReq); + ProjectTaskListReq listReq = new ProjectTaskListReq(); + listReq.setTaskNameOrMainUser(projectTaskGroupReq.getKeyword()); + Map> taskMap = projectTaskService.selectList(listReq).stream().collect(Collectors.groupingBy(ProjectTaskResp::getTaskGroupId)); + projectTaskGroupList.forEach(resp -> { + resp.setTaskList(taskMap.get(resp.getGroupId())); + }); + return projectTaskGroupList; + } + + /** + * 功能描述:新增项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void saveData(ProjectTaskGroupReq projectTaskGroupReq) { +// todo 校验 + ProjectTaskGroupEntity entity = BeanUtil.copyProperties(projectTaskGroupReq, ProjectTaskGroupEntity.class); + save(entity); + } + + /** + * 功能描述:更新项目任务组信息 + * + * @param projectTaskGroupReq 项目任务组信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void updateData(ProjectTaskGroupReq projectTaskGroupReq) { +// todo 校验 + ProjectTaskGroupEntity entity = BeanUtil.copyProperties(projectTaskGroupReq, ProjectTaskGroupEntity.class); + updateById(entity); + } + + /** + * 功能描述:删除项目任务组信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteById(String groupId) { +// todo 校验 + removeById(groupId); + projectTaskService.deleteByGroupId(groupId); + } + +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java new file mode 100644 index 0000000..b5c31a9 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/ProjectTaskServiceImpl.java @@ -0,0 +1,265 @@ +package com.dite.znpt.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.text.StrBuilder; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dite.znpt.constant.Message; +import com.dite.znpt.domain.entity.AttachInfoEntity; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.ProjectTaskListReq; +import com.dite.znpt.domain.vo.ProjectTaskResp; +import com.dite.znpt.domain.vo.ProjectTaskReq; +import com.dite.znpt.domain.vo.ProjectTaskStartReq; +import com.dite.znpt.enums.ProjectTaskStateEnum; +import com.dite.znpt.exception.ServiceException; +import com.dite.znpt.mapper.ProjectTaskGroupMapper; +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.service.ProjectTaskService; +import com.dite.znpt.mapper.ProjectTaskMapper; +import org.springframework.stereotype.Service; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import com.dite.znpt.util.PageUtil; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author huise23 + * @date 2025/06/25 17:21 + * @Description: 项目任务信息表服务实现类 + */ +@Service +@RequiredArgsConstructor +public class ProjectTaskServiceImpl extends ServiceImpl implements ProjectTaskService { + + private final AttachInfoService attachInfoService; + private final ProjectTaskGroupMapper projectTaskGroupMapper; + + /** + * 功能描述:查询项目任务信息列表 + * + * @param projectTaskReq 项目任务信息信息 + * @return {@link List }<{@link ProjectTaskResp }> + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public List selectList(ProjectTaskListReq projectTaskReq) { + PageUtil.startPage(); + List projectTaskList = this.baseMapper.queryBySelective(projectTaskReq); + Map> attachMap; + if (!BooleanUtil.isTrue(projectTaskReq.getIsExport())) { + attachMap = attachInfoService.listByBusinessIds(projectTaskList.stream().map(ProjectTaskResp::getTaskId).collect(Collectors.toList()), null) + .stream().collect(Collectors.groupingBy(AttachInfoEntity::getBusinessId)); + } else { + attachMap = new HashMap<>(); + } + projectTaskList.forEach(resp -> { + resp.setAttachList(attachMap.get(resp.getTaskId())); + }); + return projectTaskList; + } + + /** + * 功能描述:查询单条项目任务信息 + * + * @param taskId 项目任务信息Id + * @return {@link ProjectTaskResp } + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public ProjectTaskResp selectById(String taskId) { + ProjectTaskListReq projectTaskReq = new ProjectTaskListReq(); + projectTaskReq.setTaskId(taskId); + + List list = selectList(projectTaskReq); + return list.isEmpty() ? CollUtil.getFirst(list) : new ProjectTaskResp(); + } + + /** + * 功能描述:新增项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveData(ProjectTaskReq projectTaskReq) { + ProjectTaskEntity entity = BeanUtil.copyProperties(projectTaskReq, ProjectTaskEntity.class); + checkTask(projectTaskReq); + save(entity); + attachInfoService.updateBusinessIdByAttachIds(entity.getTaskId(), projectTaskReq.getAttachFileIds()); + } + + /** + * 功能描述:更新项目任务信息 + * + * @param projectTaskReq 项目任务信息 + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateData(ProjectTaskReq projectTaskReq) { + ProjectTaskEntity entity = BeanUtil.copyProperties(projectTaskReq, ProjectTaskEntity.class); + checkTask(projectTaskReq); + updateById(entity); + attachInfoService.updateBusinessIdByAttachIds(projectTaskReq.getTaskId(), projectTaskReq.getAttachFileIds()); + } + + /** + * 功能描述:检查任务 + * + * @param taskReq 任务请求类 + * @author cuizhibin + * @date 2025/06/27 10:53 + **/ + private void checkTask(ProjectTaskReq taskReq) { + if (Objects.isNull(projectTaskGroupMapper.selectById(taskReq.getTaskGroupId()))) { + throw new ServiceException(Message.TASK_GROUP_ID_NOT_EXIST); + } + if (StrUtil.isEmpty(taskReq.getParentTaskId())) { + return; + } + Map taskMap = baseMapper.listAllParents(taskReq.getParentTaskId()).stream().collect(Collectors.toMap(ProjectTaskEntity::getTaskId, Function.identity())); +// 判断是否有循环父级 + if (StrUtil.isNotEmpty(taskReq.getTaskId())) { + if (taskMap.containsKey(taskReq.getTaskId())) { + String parentTaskId = taskReq.getParentTaskId(); + List strList = ListUtil.toList(taskReq.getTaskName()); + do { + ProjectTaskEntity task = taskMap.get(parentTaskId); + parentTaskId = task.getParentTaskId(); + if (StrUtil.isEmpty(parentTaskId)) { + break; + } + strList.add(task.getTaskName()); + } while (StrUtil.isNotEmpty(parentTaskId)); + throw new ServiceException(Message.TASK_IN_CYCLE + CollUtil.join(strList, "--")); + } + } +// 更新父级任务的计划起始/结束时间 + String parentTaskId = taskReq.getParentTaskId(); + LocalDate planStartDate = taskReq.getPlanStartDate(); + LocalDate planEndDate = taskReq.getPlanEndDate(); + Set updateTaskSet = new HashSet<>(); + do { + ProjectTaskEntity task = taskMap.get(parentTaskId); + parentTaskId = task.getParentTaskId(); + if (task.getPlanStartDate().isAfter(planStartDate)) { + task.setPlanStartDate(planStartDate); + updateTaskSet.add(task); + } else { + planStartDate = task.getPlanStartDate(); + } + if (task.getPlanEndDate().isBefore(planEndDate)) { + task.setPlanEndDate(planEndDate); + updateTaskSet.add(task); + } else { + planEndDate = task.getPlanEndDate(); + } + } while (StrUtil.isNotEmpty(parentTaskId)); + baseMapper.updateById(updateTaskSet); + } + + /** + * 功能描述:删除项目任务信息 + * + * @param taskId 项目任务信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void deleteById(String taskId) { + removeById(taskId); + } + + /** + * 功能描述:删除项目任务信息 + * + * @param groupId 项目任务组信息Id + * @author huise23 + * @date 2025/06/25 17:21 + **/ + @Override + public void deleteByGroupId(String groupId) { + lambdaUpdate().eq(ProjectTaskEntity::getTaskGroupId, groupId).remove(); + } + + /** + * 功能描述:开始任务/任务组开始任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void startTask(ProjectTaskStartReq taskStartReq) { + if (StrUtil.isBlank(taskStartReq.getTaskId()) && StrUtil.isBlank(taskStartReq.getTaskGroupId())) { + throw new ServiceException(Message.TASK_ID_GROUP_ID_ALL_EMPTY); + } + List list; + if (StrUtil.isNotBlank(taskStartReq.getTaskGroupId())) { + list = lambdaQuery().eq(ProjectTaskEntity::getTaskGroupId, taskStartReq.getTaskGroupId()) + .eq(ProjectTaskEntity::getStatus, ProjectTaskStateEnum.PENDING.getCode()) + .list(); + if (CollUtil.isEmpty(list)) { + return; + } + } else { + list = List.of(getById(taskStartReq.getTaskId())); + if (!list.get(0).getStatus().equals(ProjectTaskStateEnum.PENDING.getCode())) { + throw new ServiceException(Message.TASK_STATUS_NOT_PENDING); + } + } + list.forEach(entity -> { + entity.setStatus(ProjectTaskStateEnum.IN_PROGRESS.getCode()); + entity.setActualStartDate(LocalDate.now()); + }); + baseMapper.updateById(list); + } + + /** + * 功能描述:结束任务/任务组结束任务 + * + * @param taskStartReq 任务启动请求类 + * @author cuizhibin + * @date 2025/06/25 21:16 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void endTask(ProjectTaskStartReq taskStartReq) { + if (StrUtil.isBlank(taskStartReq.getTaskId()) && StrUtil.isBlank(taskStartReq.getTaskGroupId())) { + throw new ServiceException(Message.TASK_ID_GROUP_ID_ALL_EMPTY); + } + List list; + if (StrUtil.isNotBlank(taskStartReq.getTaskGroupId())) { + list = lambdaQuery().eq(ProjectTaskEntity::getTaskGroupId, taskStartReq.getTaskGroupId()) + .eq(ProjectTaskEntity::getStatus, ProjectTaskStateEnum.IN_PROGRESS.getCode()) + .list(); + if (CollUtil.isEmpty(list)) { + return; + } + } else { + list = List.of(getById(taskStartReq.getTaskId())); + if (!list.get(0).getStatus().equals(ProjectTaskStateEnum.IN_PROGRESS.getCode())) { + throw new ServiceException(Message.TASK_STATUS_NOT_IN_PROGRESS); + } + } + list.forEach(entity -> { + entity.setStatus(ProjectTaskStateEnum.COMPLETED.getCode()); + entity.setActualStartDate(LocalDate.now()); + }); + baseMapper.updateById(list); + } +} diff --git a/core/src/main/resources/mapper/FileInfoMapper.xml b/core/src/main/resources/mapper/FileInfoMapper.xml deleted file mode 100644 index 64585d3..0000000 --- a/core/src/main/resources/mapper/FileInfoMapper.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - a.file_id, a.business_id, a.minio_path, a.business_type - - - - - diff --git a/core/src/main/resources/mapper/ProjectMapper.xml b/core/src/main/resources/mapper/ProjectMapper.xml index 20c1dbb..181fd5a 100644 --- a/core/src/main/resources/mapper/ProjectMapper.xml +++ b/core/src/main/resources/mapper/ProjectMapper.xml @@ -5,7 +5,7 @@ SELECT prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit, prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name AS project_manager_name, prj.constructor_ids, - GROUP_CONCAT(DISTINCT con.name) AS constructor_name, prj.create_time + GROUP_CONCAT(DISTINCT con.name) AS constructor_name, prj.start_date, prj.end_date FROM project prj LEFT JOIN user pm ON pm.user_id = prj.project_manager_id LEFT JOIN user con ON FIND_IN_SET(con.user_id,prj.constructor_ids) > 0 AND con.del_flag = '0' @@ -25,13 +25,16 @@ AND prj.status = #{status} - - AND prj.create_time BETWEEN #{createDateBegin} AND #{createDateEnd} + + and prj.start_date >= #{startDate} + + + and prj.end_date <= #{endDate} GROUP BY prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit, prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name, prj.constructor_ids, - prj.create_time + prj.start_date, prj.end_date diff --git a/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml b/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml new file mode 100644 index 0000000..e47a1b9 --- /dev/null +++ b/core/src/main/resources/mapper/ProjectTaskGroupMapper.xml @@ -0,0 +1,24 @@ + + + + + + a.group_id, a.group_name, a.update_by, a.create_time, + a.create_by, a.update_time + + + + + diff --git a/core/src/main/resources/mapper/ProjectTaskMapper.xml b/core/src/main/resources/mapper/ProjectTaskMapper.xml new file mode 100644 index 0000000..a53848b --- /dev/null +++ b/core/src/main/resources/mapper/ProjectTaskMapper.xml @@ -0,0 +1,77 @@ + + + + + + a.task_id, a.task_group_id, a.task_name, a.task_code, + a.main_user_id, a.user_ids, a.plan_start_date, a.plan_end_date, + a.actual_start_date, a.actual_end_date, a.status, a.overdue_status, + a.update_by, a.create_time, a.create_by, a.update_time + + + + + + + diff --git a/pom.xml b/pom.xml index 0f34b69..fc41a56 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ cn.hutool hutool-all - 5.8.22 + 5.8.24 diff --git a/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java new file mode 100644 index 0000000..bf01aa2 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AttachInfoController.java @@ -0,0 +1,37 @@ +package com.dite.znpt.web.controller; + +import com.dite.znpt.service.AttachInfoService; +import com.dite.znpt.domain.Result; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/04/11 23:17 + */ +@Api(tags = "附件信息") +@RestController +@RequestMapping("/attach-info") +public class AttachInfoController { + @Resource + private AttachInfoService attachInfoService; + + @ApiOperation(value = "新增附件信息", httpMethod = "POST") + @PostMapping + public Result add(@RequestParam("businessType") String businessType, @RequestParam("file") MultipartFile file) { + return Result.ok(attachInfoService.saveData(businessType, new MultipartFile[]{file}).get(0)); + } + + @ApiOperation(value = "批量新增附件信息", httpMethod = "POST") + @PostMapping("/batch") + public Result> add(@RequestParam("businessType") String businessType, @RequestParam("files") MultipartFile[] files) { + return Result.ok(attachInfoService.saveData(businessType, files)); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java b/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java deleted file mode 100644 index 68666a5..0000000 --- a/web/src/main/java/com/dite/znpt/web/controller/FileInfoController.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.dite.znpt.web.controller; - - -import com.dite.znpt.constant.Constants; -import com.dite.znpt.domain.vo.FileInfoListReq; -import com.dite.znpt.domain.vo.FileInfoResp; -import com.dite.znpt.domain.entity.FileInfoEntity; -import com.dite.znpt.service.FileInfoService; -import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.PageResult; -import com.pig4cloud.plugin.excel.annotation.RequestExcel; -import com.pig4cloud.plugin.excel.annotation.ResponseExcel; -import com.pig4cloud.plugin.excel.vo.ErrorMessage; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import java.util.List; - -/** - * @author huise23 - * @date 2025/04/11 23:17 - */ -@Api(tags = "文件信息") -@RestController -@RequestMapping("/file-info") -public class FileInfoController { - @Resource - private FileInfoService fileInfoService; - - @ApiOperation(value = "获取文件信息列表", httpMethod = "GET") - @GetMapping("/list") - public PageResult list(FileInfoListReq fileInfoReq) { - return PageResult.ok(fileInfoService.selectList(fileInfoReq)); - } - - @ApiOperation(value = "根据文件信息Id获取详细信息", httpMethod = "GET") - @GetMapping("/{fileId}") - public Result getInfo(@PathVariable Long fileId) { - return Result.ok(fileInfoService.selectById(fileId)); - } - - @ApiOperation(value = "新增文件信息", httpMethod = "POST") - @PostMapping - public Result add(@RequestBody FileInfoEntity fileInfo) { - fileInfoService.saveData(fileInfo); - return Result.ok(); - } - - @ApiOperation(value = "修改文件信息", httpMethod = "PUT") - @PutMapping - public Result edit(@RequestBody FileInfoEntity fileInfo) { - fileInfoService.updateData(fileInfo); - return Result.ok(); - } - - @ApiOperation(value = "删除文件信息", httpMethod = "DELETE") - @DeleteMapping("/{fileId}") - public Result remove(@PathVariable Long fileId) { - fileInfoService.deleteById(fileId); - return Result.ok(); - } - - @ApiOperation(value = "导出文件信息", httpMethod = "GET") - @GetMapping("/export") - @ResponseExcel(name = "文件信息") - public List export(FileInfoListReq fileInfoReq) { - return fileInfoService.selectList(fileInfoReq); - } - - @ApiOperation(value = "导入文件信息", httpMethod = "POST") - @PostMapping("/import") - public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { - // JSR 303 校验通用校验获取失败的数据 - List errorMessageList = (List) bindingResult.getTarget(); - if (errorMessageList != null && !errorMessageList.isEmpty()) { - return Result.error(Constants.SERVICE_EXCEPTION, "导入失败"); - } - return Result.okM("导入"+dataList.size()+"条数据"); - } -} - diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java new file mode 100644 index 0000000..cbf1788 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskController.java @@ -0,0 +1,101 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ProjectTaskEntity; +import com.dite.znpt.domain.vo.*; +import com.dite.znpt.service.ProjectTaskService; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + */ +@Api(tags = "项目任务信息") +@RestController +@RequestMapping("/project-task") +public class ProjectTaskController { + @Resource + private ProjectTaskService projectTaskService; + + @ApiOperation(value = "获取项目任务信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ProjectTaskListReq projectTaskReq) { + return PageResult.ok(projectTaskService.selectList(projectTaskReq)); + } + + @ApiOperation(value = "根据项目任务信息Id获取详细信息", httpMethod = "GET") + @GetMapping("/{taskId}") + public Result getInfo(@PathVariable String taskId) { + return Result.ok(projectTaskService.selectById(taskId)); + } + + @ApiOperation(value = "新增项目任务信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskReq projectTaskReq) { + projectTaskService.saveData(projectTaskReq); + return Result.ok(); + } + + @ApiOperation(value = "修改项目任务信息", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskReq projectTaskReq) { + projectTaskService.updateData(projectTaskReq); + return Result.ok(); + } + + @ApiOperation(value = "删除项目任务信息", httpMethod = "DELETE") + @DeleteMapping("/{taskId}") + public Result remove(@PathVariable String taskId) { + projectTaskService.deleteById(taskId); + return Result.ok(); + } + + @ApiOperation(value = "导出项目任务信息", httpMethod = "GET") + @GetMapping("/export") + @ResponseExcel(name = "项目任务信息") + public List export(ProjectTaskListReq projectTaskReq) { + projectTaskReq.setIsExport(true); + return projectTaskService.selectList(projectTaskReq); + } + + @ApiOperation(value = "导入项目任务信息", httpMethod = "POST") + @PostMapping("/import") + public Result importData(@RequestExcel List dataList, BindingResult bindingResult) { + // JSR 303 校验通用校验获取失败的数据 + List errorMessageList = (List) bindingResult.getTarget(); + if (errorMessageList != null && !errorMessageList.isEmpty()) { + return Result.error(Constants.SERVICE_EXCEPTION, "导入失败", errorMessageList); + } + return Result.okM("导入"+dataList.size()+"条数据"); + } + + @ApiOperation(value = "开始任务/任务组开始任务", httpMethod = "PUT") + @PutMapping("/startTask") + public Result startTask(@RequestBody ProjectTaskStartReq taskStartReq) { + projectTaskService.startTask(taskStartReq); + return Result.ok(); + } + + @ApiOperation(value = "结束任务/任务组结束任务", httpMethod = "PUT") + @PutMapping("/endTask") + public Result endTask(@RequestBody ProjectTaskStartReq taskStartReq) { + projectTaskService.endTask(taskStartReq); + return Result.ok(); + } + +} + diff --git a/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java new file mode 100644 index 0000000..3ba0c1b --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/ProjectTaskGroupController.java @@ -0,0 +1,63 @@ +package com.dite.znpt.web.controller; + + +import com.dite.znpt.constant.Constants; +import com.dite.znpt.domain.PageResult; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.ProjectTaskGroupEntity; +import com.dite.znpt.domain.vo.ProjectTaskGroupListReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupReq; +import com.dite.znpt.domain.vo.ProjectTaskGroupResp; +import com.dite.znpt.service.ProjectTaskGroupService; +import com.dite.znpt.util.ValidationGroup; +import com.pig4cloud.plugin.excel.annotation.RequestExcel; +import com.pig4cloud.plugin.excel.annotation.ResponseExcel; +import com.pig4cloud.plugin.excel.vo.ErrorMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author huise23 + * @date 2025/06/25 17:18 + */ +@Api(tags = "项目任务组信息") +@RestController +@RequestMapping("/project-task-group") +public class ProjectTaskGroupController { + @Resource + private ProjectTaskGroupService projectTaskGroupService; + + @ApiOperation(value = "获取项目任务组信息列表", httpMethod = "GET") + @GetMapping("/list") + public PageResult list(ProjectTaskGroupListReq projectTaskGroupReq) { + return PageResult.ok(projectTaskGroupService.selectList(projectTaskGroupReq)); + } + + @ApiOperation(value = "新增项目任务组信息", httpMethod = "POST") + @PostMapping + public Result add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) { + projectTaskGroupService.saveData(projectTaskGroupReq); + return Result.ok(); + } + + @ApiOperation(value = "修改项目任务组信息", httpMethod = "PUT") + @PutMapping + public Result edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) { + projectTaskGroupService.updateData(projectTaskGroupReq); + return Result.ok(); + } + + @ApiOperation(value = "删除项目任务组信息", httpMethod = "DELETE") + @DeleteMapping("/{groupId}") + public Result remove(@PathVariable String groupId) { + projectTaskGroupService.deleteById(groupId); + return Result.ok(); + } +} +