package com.ruoyi.system.domain; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.system.domain.enums.TaskStatus; import com.ruoyi.system.domain.enums.TaskType; /** * 任务管理对象 sys_task * * @author ruoyi * @date 2024-01-15 */ public class SysTask extends BaseEntity { private static final long serialVersionUID = 1L; /** 任务ID */ private Long taskId; /** 任务编号 */ @Excel(name = "任务编号") private String taskCode; /** 任务类型 */ @Excel(name = "任务类型", readConverterExp = "MAINTENANCE=维修保养,FUEL=加油任务,OTHER=其他") private String taskType; /** 任务状态 */ @Excel(name = "任务状态", readConverterExp = "PENDING=待开始,IN_PROGRESS=任务中,COMPLETED=已完成,CANCELLED=已取消") private String taskStatus; /** 任务描述 */ @Excel(name = "任务描述") private String taskDescription; /** 出发地址 */ @Excel(name = "出发地址") private String departureAddress; /** 目的地址 */ @Excel(name = "目的地址") private String destinationAddress; /** 计划开始时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date plannedStartTime; /** 计划结束时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date plannedEndTime; /** 实际开始时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date actualStartTime; /** 实际结束时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "实际结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date actualEndTime; /** 创建人ID */ @Excel(name = "创建人ID") private Long creatorId; /** 执行人ID */ @Excel(name = "执行人ID") private Long assigneeId; /** 归属部门ID */ @Excel(name = "归属部门ID") private Long deptId; /** 创建人姓名 */ @Excel(name = "创建人") private String creatorName; /** 执行人姓名 */ @Excel(name = "执行人") private String assigneeName; /** 部门名称 */ @Excel(name = "部门名称") private String deptName; /** 删除标志(0代表存在 2代表删除) */ private String delFlag; /** 关联车辆列表 */ private List assignedVehicles; /** 附件列表 */ private List attachments; /** 操作日志列表 */ private List operationLogs; public void setTaskId(Long taskId) { this.taskId = taskId; } public Long getTaskId() { return taskId; } public void setTaskCode(String taskCode) { this.taskCode = taskCode; } public String getTaskCode() { return taskCode; } public void setTaskType(String taskType) { this.taskType = taskType; } public String getTaskType() { return taskType; } public void setTaskStatus(String taskStatus) { this.taskStatus = taskStatus; } public String getTaskStatus() { return taskStatus; } public void setTaskDescription(String taskDescription) { this.taskDescription = taskDescription; } public String getTaskDescription() { return taskDescription; } public void setDepartureAddress(String departureAddress) { this.departureAddress = departureAddress; } public String getDepartureAddress() { return departureAddress; } public void setDestinationAddress(String destinationAddress) { this.destinationAddress = destinationAddress; } public String getDestinationAddress() { return destinationAddress; } public void setPlannedStartTime(Date plannedStartTime) { this.plannedStartTime = plannedStartTime; } public Date getPlannedStartTime() { return plannedStartTime; } public void setPlannedEndTime(Date plannedEndTime) { this.plannedEndTime = plannedEndTime; } public Date getPlannedEndTime() { return plannedEndTime; } public void setActualStartTime(Date actualStartTime) { this.actualStartTime = actualStartTime; } public Date getActualStartTime() { return actualStartTime; } public void setActualEndTime(Date actualEndTime) { this.actualEndTime = actualEndTime; } public Date getActualEndTime() { return actualEndTime; } public void setCreatorId(Long creatorId) { this.creatorId = creatorId; } public Long getCreatorId() { return creatorId; } public void setAssigneeId(Long assigneeId) { this.assigneeId = assigneeId; } public Long getAssigneeId() { return assigneeId; } public void setDeptId(Long deptId) { this.deptId = deptId; } public Long getDeptId() { return deptId; } public void setCreatorName(String creatorName) { this.creatorName = creatorName; } public String getCreatorName() { return creatorName; } public void setAssigneeName(String assigneeName) { this.assigneeName = assigneeName; } public String getAssigneeName() { return assigneeName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDeptName() { return deptName; } public void setDelFlag(String delFlag) { this.delFlag = delFlag; } public String getDelFlag() { return delFlag; } public void setAssignedVehicles(List assignedVehicles) { this.assignedVehicles = assignedVehicles; } public List getAssignedVehicles() { return assignedVehicles; } public void setAttachments(List attachments) { this.attachments = attachments; } public List getAttachments() { return attachments; } public void setOperationLogs(List operationLogs) { this.operationLogs = operationLogs; } public List getOperationLogs() { return operationLogs; } /** * 判断是否可以变更状态 */ public boolean canChangeStatus(TaskStatus newStatus) { TaskStatus currentStatus = TaskStatus.getByCode(this.taskStatus); if (currentStatus == null || newStatus == null) { return false; } // 状态流转规则 switch (currentStatus) { case PENDING: return newStatus == TaskStatus.IN_PROGRESS || newStatus == TaskStatus.CANCELLED; case IN_PROGRESS: return newStatus == TaskStatus.COMPLETED || newStatus == TaskStatus.CANCELLED || newStatus == TaskStatus.PENDING; case COMPLETED: case CANCELLED: return false; default: return false; } } /** * 判断是否超时 */ public boolean isOverdue() { if (plannedEndTime == null) { return false; } return new Date().after(plannedEndTime) && !TaskStatus.COMPLETED.getCode().equals(taskStatus); } /** * 获取任务持续时间(分钟) */ public long getDuration() { if (actualStartTime != null && actualEndTime != null) { return (actualEndTime.getTime() - actualStartTime.getTime()) / (1000 * 60); } return 0; } /** * 开始任务 */ public void start() { this.taskStatus = TaskStatus.IN_PROGRESS.getCode(); this.actualStartTime = new Date(); } /** * 完成任务 */ public void complete() { this.taskStatus = TaskStatus.COMPLETED.getCode(); this.actualEndTime = new Date(); } /** * 取消任务 */ public void cancel() { this.taskStatus = TaskStatus.CANCELLED.getCode(); } /** * 检查是否分配了指定车辆 */ public boolean hasVehicle(Long vehicleId) { if (assignedVehicles == null || vehicleId == null) { return false; } return assignedVehicles.stream().anyMatch(v -> vehicleId.equals(v.getVehicleId())); } @Override public String toString() { return "SysTask{" + "taskId=" + taskId + ", taskCode='" + taskCode + '\'' + ", taskType='" + taskType + '\'' + ", taskStatus='" + taskStatus + '\'' + ", taskDescription='" + taskDescription + '\'' + ", departureAddress='" + departureAddress + '\'' + ", destinationAddress='" + destinationAddress + '\'' + ", plannedStartTime=" + plannedStartTime + ", plannedEndTime=" + plannedEndTime + ", actualStartTime=" + actualStartTime + ", actualEndTime=" + actualEndTime + ", creatorId=" + creatorId + ", assigneeId=" + assigneeId + ", deptId=" + deptId + ", creatorName='" + creatorName + '\'' + ", assigneeName='" + assigneeName + '\'' + ", deptName='" + deptName + '\'' + '}'; } }