1.去除无用依赖

2.项目任务组接口开发
3.项目任务接口开发
This commit is contained in:
cuizhibin 2025-06-27 15:16:07 +08:00
parent 7306aaccd2
commit 87af4928ee
45 changed files with 1702 additions and 456 deletions

View File

@ -78,19 +78,6 @@
<version>3.0.3</version>
</dependency>
<!-- 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.11</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- 阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
@ -103,12 +90,6 @@
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
@ -137,7 +118,7 @@
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.0</version>
<version>3.22.0</version>
</dependency>
<dependency>
@ -149,7 +130,7 @@
<dependency>
<groupId>com.drewnoakes</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.15.0</version>
<version>2.18.0</version>
</dependency>
<!-- mapstruct驱动包 -->
<dependency>
@ -168,12 +149,6 @@
<version>1.3.0-91</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.sip</groupId>
<artifactId>jain-sip-ri</artifactId>
<version>1.3.0-91</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -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不存在";
}

View File

@ -70,7 +70,11 @@ public class Result<T> implements Serializable {
}
public static <T> Result<T> error(String code, String msg) {
return new Result<T>(HttpStatus.INTERNAL_SERVER_ERROR, null, Integer.parseInt(code), msg);
return error(code, msg, null);
}
public static <T> Result<T> error(String code, String msg, T data) {
return new Result<T>(HttpStatus.INTERNAL_SERVER_ERROR, data, Integer.parseInt(code), msg);
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 {
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<ProjectTaskResp> taskList;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<String> attachFileIds;
@ApiModelProperty("备注")
private String remark;
}

View File

@ -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<AttachInfoEntity> attachList;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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<JSONObject> listAll(){
List<JSONObject> 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;
}
}

View File

@ -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<FileInfoEntity> {
List<FileInfoResp> queryBySelective(FileInfoListReq fileInfoReq);
public interface FileInfoMapper extends BaseMapper<AttachInfoEntity> {
}

View File

@ -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<ProjectTaskGroupEntity> {
List<ProjectTaskGroupResp> queryBySelective(ProjectTaskGroupListReq projectTaskGroupReq);
}

View File

@ -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<ProjectTaskEntity> {
List<ProjectTaskResp> queryBySelective(ProjectTaskListReq projectTaskReq);
List<ProjectTaskEntity> listAllParents(String taskId);
}

View File

@ -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<AttachInfoEntity> {
/**
* 功能描述查询附件信息列表
*
* @return {@link List }<{@link AttachInfoEntity }>
* @author huise23
* @date 2025/04/11 23:17
**/
List<AttachInfoEntity> listByBusinessIds(List<String> businessIds, String businessType);
/**
* 功能描述新增附件信息
*
* @param businessType 业务类型
* @author huise23
* @date 2025/04/11 23:17
**/
List<String> saveData(String businessType, MultipartFile[] files);
/**
* 功能描述删除附件信息
*
* @author huise23
* @date 2025/04/11 23:17
**/
void deleteByBusinessIds(List<String> businessIds, String businessType);
/**
* 功能描述更新附件关联的业务id
*
* @author huise23
* @date 2025/04/11 23:17
**/
void updateBusinessIdByAttachIds(String businessId, List<String> attachIds);
}

View File

@ -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<FileInfoEntity> {
/**
* 功能描述查询文件信息列表
*
* @param fileInfoReq 文件信息
* @return {@link List }<{@link FileInfoEntity }>
* @author huise23
* @date 2025/04/11 23:17
**/
List<FileInfoResp> 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);
}

View File

@ -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<ProjectTaskGroupEntity> {
/**
* 功能描述查询项目任务组信息列表
*
* @param projectTaskGroupReq 项目任务组信息
* @return {@link List }<{@link ProjectTaskGroupResp }>
* @author huise23
* @date 2025/06/25 17:21
**/
List<ProjectTaskGroupResp> 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);
}

View File

@ -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<ProjectTaskEntity> {
/**
* 功能描述查询项目任务信息列表
*
* @param projectTaskReq 项目任务信息
* @return {@link List }<{@link ProjectTaskResp }>
* @author huise23
* @date 2025/06/25 17:21
**/
List<ProjectTaskResp> 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);
}

View File

@ -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<FileInfoMapper, AttachInfoEntity> implements AttachInfoService {
/**
* 功能描述查询附件信息列表
*
* @param businessIds 业务ids
* @param businessType 业务类型
* @return {@link List }<{@link AttachInfoEntity }>
* @author huise23
* @date 2025/04/11 23:17
**/
@Override
public List<AttachInfoEntity> listByBusinessIds(List<String> 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<String> 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<AttachInfoEntity> 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<String> 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<String> attachIds) {
if (CollUtil.isEmpty(attachIds)) {
return;
}
lambdaUpdate().in(AttachInfoEntity::getAttachId, attachIds).set(AttachInfoEntity::getBusinessId, businessId).update();
}
}

View File

@ -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<FileInfoMapper, FileInfoEntity> implements FileInfoService {
/**
* 功能描述查询文件信息列表
*
* @param fileInfoReq 文件信息信息
* @return {@link List }<{@link FileInfoResp }>
* @author huise23
* @date 2025/04/11 23:17
**/
@Override
public List<FileInfoResp> selectList(FileInfoListReq fileInfoReq) {
PageUtil.startPage();
List<FileInfoResp> 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<FileInfoResp> 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);
}
}

View File

@ -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<ProjectTaskGroupMapper, ProjectTaskGroupEntity> implements ProjectTaskGroupService {
private final ProjectTaskService projectTaskService;
/**
* 功能描述查询项目任务组信息列表
*
* @param projectTaskGroupReq 项目任务组信息信息
* @return {@link List }<{@link ProjectTaskGroupResp }>
* @author huise23
* @date 2025/06/25 17:21
**/
@Override
public List<ProjectTaskGroupResp> selectList(ProjectTaskGroupListReq projectTaskGroupReq) {
PageUtil.startPage();
List<ProjectTaskGroupResp> projectTaskGroupList= this.baseMapper.queryBySelective(projectTaskGroupReq);
ProjectTaskListReq listReq = new ProjectTaskListReq();
listReq.setTaskNameOrMainUser(projectTaskGroupReq.getKeyword());
Map<String, List<ProjectTaskResp>> 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);
}
}

View File

@ -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<ProjectTaskMapper, ProjectTaskEntity> 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<ProjectTaskResp> selectList(ProjectTaskListReq projectTaskReq) {
PageUtil.startPage();
List<ProjectTaskResp> projectTaskList = this.baseMapper.queryBySelective(projectTaskReq);
Map<String, List<AttachInfoEntity>> 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<ProjectTaskResp> 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<String, ProjectTaskEntity> 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<String> 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<ProjectTaskEntity> 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<ProjectTaskEntity> 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<ProjectTaskEntity> 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);
}
}

View File

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dite.znpt.mapper.FileInfoMapper">
<sql id="Base_Column_List">
a.file_id, a.business_id, a.minio_path, a.business_type
</sql>
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.FileInfoResp">
select
<include refid="Base_Column_List"/>
from file_info a
<where>
<if test="keyword != null and keyword != ''">
# and (a.TODO like concat('%', #{keyword,jdbcType=VARCHAR}, '%') or a.TODO like concat('%', #{keyword,jdbcType=VARCHAR}, '%'))
</if>
<if test="fileId != null">
and a.file_id = #{fileId}
</if>
<if test="businessId != null and businessId != ''">
and a.business_id like concat ('%', #{businessId}, '%')
</if>
<if test="minioPath != null and minioPath != ''">
and a.minio_path like concat ('%', #{minioPath}, '%')
</if>
<if test="businessType != null and businessType != ''">
and a.business_type like concat ('%', #{businessType}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -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 @@
<if test="status != null and status != ''">
AND prj.status = #{status}
</if>
<if test="createDateBegin != null and createDateBegin !='' and createDateEnd != null and createDateEnd != '' ">
AND prj.create_time BETWEEN #{createDateBegin} AND #{createDateEnd}
<if test="startDate != null">
and prj.start_date &gt;= #{startDate}
</if>
<if test="endDate != null">
and prj.end_date &lt;= #{endDate}
</if>
</where>
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
</select>
</mapper>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dite.znpt.mapper.ProjectTaskGroupMapper">
<sql id="Base_Column_List">
a.group_id, a.group_name, a.update_by, a.create_time,
a.create_by, a.update_time
</sql>
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskGroupResp">
select
<include refid="Base_Column_List"/>
from project_task_group a
<where>
<if test="groupId != null and groupId != ''">
and a.group_id like concat ('%', #{groupId}, '%')
</if>
<if test="groupName != null and groupName != ''">
and a.group_name like concat ('%', #{groupName}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dite.znpt.mapper.ProjectTaskMapper">
<sql id="Base_Column_List">
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
</sql>
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskResp">
select
<include refid="Base_Column_List"/>
from project_task a
left join user u on a.main_user_id=u.user_id
<where>
<if test="keyword != null and keyword != ''">
and (a.task_name like concat('%', #{keyword,jdbcType=VARCHAR}, '%') or a.task_code like concat('%', #{keyword,jdbcType=VARCHAR}, '%'))
</if>
<if test="taskId != null and taskId != ''">
and a.task_id like concat ('%', #{taskId}, '%')
</if>
<if test="taskGroupId != null and taskGroupId != ''">
and a.task_group_id like concat ('%', #{taskGroupId}, '%')
</if>
<if test="taskName != null and taskName != ''">
and a.task_name like concat ('%', #{taskName}, '%')
</if>
<if test="taskCode != null and taskCode != ''">
and a.task_code like concat ('%', #{taskCode}, '%')
</if>
<if test="mainUserId != null and mainUserId != ''">
and a.main_user_id like concat ('%', #{mainUserId}, '%')
</if>
<if test="userIds != null and userIds != ''">
and a.user_ids like concat ('%', #{userIds}, '%')
</if>
<if test="planStartDate != null">
and a.plan_start_date = #{planStartDate}
</if>
<if test="planEndDate != null">
and a.plan_end_date = #{planEndDate}
</if>
<if test="actualStartDate != null">
and a.actual_start_date = #{actualStartDate}
</if>
<if test="actualEndDate != null">
and a.actual_end_date = #{actualEndDate}
</if>
<if test="status != null">
and a.status = #{status}
</if>
<if test="overdueStatus != null">
and a.overdue_status = #{overdueStatus}
</if>
<if test="taskNameOrMainUser != null and taskNameOrMainUser != ''">
and (a.task_name like concat ('%', #{taskNameOrMainUser}, '%') or u.name like concat ('%', #{taskNameOrMainUser}, '%') )
</if>
</where>
</select>
<select id="listAllParents" resultType="com.dite.znpt.domain.entity.ProjectTaskEntity">
WITH RECURSIVE task_tree AS (
SELECT *
FROM project_task pt
WHERE task_id = #{taskId} -- 起始父级任务ID
UNION ALL
SELECT t.*
FROM project_task t
INNER JOIN task_tree tt ON t.task_id = tt.parent_task_id
) select * from task_tree
</select>
</mapper>

View File

@ -31,7 +31,7 @@
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.22</version>
<version>5.8.24</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -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<String> 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<List<String>> add(@RequestParam("businessType") String businessType, @RequestParam("files") MultipartFile[] files) {
return Result.ok(attachInfoService.saveData(businessType, files));
}
}

View File

@ -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<FileInfoResp> list(FileInfoListReq fileInfoReq) {
return PageResult.ok(fileInfoService.selectList(fileInfoReq));
}
@ApiOperation(value = "根据文件信息Id获取详细信息", httpMethod = "GET")
@GetMapping("/{fileId}")
public Result<FileInfoResp> getInfo(@PathVariable Long fileId) {
return Result.ok(fileInfoService.selectById(fileId));
}
@ApiOperation(value = "新增文件信息", httpMethod = "POST")
@PostMapping
public Result<Object> add(@RequestBody FileInfoEntity fileInfo) {
fileInfoService.saveData(fileInfo);
return Result.ok();
}
@ApiOperation(value = "修改文件信息", httpMethod = "PUT")
@PutMapping
public Result<Object> edit(@RequestBody FileInfoEntity fileInfo) {
fileInfoService.updateData(fileInfo);
return Result.ok();
}
@ApiOperation(value = "删除文件信息", httpMethod = "DELETE")
@DeleteMapping("/{fileId}")
public Result<Object> remove(@PathVariable Long fileId) {
fileInfoService.deleteById(fileId);
return Result.ok();
}
@ApiOperation(value = "导出文件信息", httpMethod = "GET")
@GetMapping("/export")
@ResponseExcel(name = "文件信息")
public List<FileInfoResp> export(FileInfoListReq fileInfoReq) {
return fileInfoService.selectList(fileInfoReq);
}
@ApiOperation(value = "导入文件信息", httpMethod = "POST")
@PostMapping("/import")
public Result<Object> importData(@RequestExcel List<FileInfoEntity> dataList, BindingResult bindingResult) {
// JSR 303 校验通用校验获取失败的数据
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
if (errorMessageList != null && !errorMessageList.isEmpty()) {
return Result.error(Constants.SERVICE_EXCEPTION, "导入失败");
}
return Result.okM("导入"+dataList.size()+"条数据");
}
}

View File

@ -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<ProjectTaskResp> list(ProjectTaskListReq projectTaskReq) {
return PageResult.ok(projectTaskService.selectList(projectTaskReq));
}
@ApiOperation(value = "根据项目任务信息Id获取详细信息", httpMethod = "GET")
@GetMapping("/{taskId}")
public Result<ProjectTaskResp> getInfo(@PathVariable String taskId) {
return Result.ok(projectTaskService.selectById(taskId));
}
@ApiOperation(value = "新增项目任务信息", httpMethod = "POST")
@PostMapping
public Result<Object> add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskReq projectTaskReq) {
projectTaskService.saveData(projectTaskReq);
return Result.ok();
}
@ApiOperation(value = "修改项目任务信息", httpMethod = "PUT")
@PutMapping
public Result<Object> edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskReq projectTaskReq) {
projectTaskService.updateData(projectTaskReq);
return Result.ok();
}
@ApiOperation(value = "删除项目任务信息", httpMethod = "DELETE")
@DeleteMapping("/{taskId}")
public Result<Object> remove(@PathVariable String taskId) {
projectTaskService.deleteById(taskId);
return Result.ok();
}
@ApiOperation(value = "导出项目任务信息", httpMethod = "GET")
@GetMapping("/export")
@ResponseExcel(name = "项目任务信息")
public List<ProjectTaskResp> export(ProjectTaskListReq projectTaskReq) {
projectTaskReq.setIsExport(true);
return projectTaskService.selectList(projectTaskReq);
}
@ApiOperation(value = "导入项目任务信息", httpMethod = "POST")
@PostMapping("/import")
public Result<Object> importData(@RequestExcel List<ProjectTaskImportReq> dataList, BindingResult bindingResult) {
// JSR 303 校验通用校验获取失败的数据
List<ErrorMessage> errorMessageList = (List<ErrorMessage>) 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<Object> startTask(@RequestBody ProjectTaskStartReq taskStartReq) {
projectTaskService.startTask(taskStartReq);
return Result.ok();
}
@ApiOperation(value = "结束任务/任务组结束任务", httpMethod = "PUT")
@PutMapping("/endTask")
public Result<Object> endTask(@RequestBody ProjectTaskStartReq taskStartReq) {
projectTaskService.endTask(taskStartReq);
return Result.ok();
}
}

View File

@ -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<ProjectTaskGroupResp> list(ProjectTaskGroupListReq projectTaskGroupReq) {
return PageResult.ok(projectTaskGroupService.selectList(projectTaskGroupReq));
}
@ApiOperation(value = "新增项目任务组信息", httpMethod = "POST")
@PostMapping
public Result<Object> add(@Validated(ValidationGroup.Insert.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) {
projectTaskGroupService.saveData(projectTaskGroupReq);
return Result.ok();
}
@ApiOperation(value = "修改项目任务组信息", httpMethod = "PUT")
@PutMapping
public Result<Object> edit(@Validated(ValidationGroup.Update.class) @RequestBody ProjectTaskGroupReq projectTaskGroupReq) {
projectTaskGroupService.updateData(projectTaskGroupReq);
return Result.ok();
}
@ApiOperation(value = "删除项目任务组信息", httpMethod = "DELETE")
@DeleteMapping("/{groupId}")
public Result<Object> remove(@PathVariable String groupId) {
projectTaskGroupService.deleteById(groupId);
return Result.ok();
}
}