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;
|
|
/** 出发地经度 */
|
@Excel(name = "出发地经度")
|
private java.math.BigDecimal departureLongitude;
|
|
/** 出发地纬度 */
|
@Excel(name = "出发地纬度")
|
private java.math.BigDecimal departureLatitude;
|
|
/** 目的地经度 */
|
@Excel(name = "目的地经度")
|
private java.math.BigDecimal destinationLongitude;
|
|
/** 目的地纬度 */
|
@Excel(name = "目的地纬度")
|
private java.math.BigDecimal destinationLatitude;
|
|
/** 预计公里数 */
|
@Excel(name = "预计公里数")
|
private java.math.BigDecimal estimatedDistance;
|
|
/** 计划开始时间 */
|
@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<SysTaskVehicle> assignedVehicles;
|
|
/** 附件列表 */
|
private List<SysTaskAttachment> attachments;
|
|
/** 操作日志列表 */
|
private List<SysTaskLog> 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 setDepartureLongitude(java.math.BigDecimal departureLongitude) {
|
this.departureLongitude = departureLongitude;
|
}
|
|
public java.math.BigDecimal getDepartureLongitude() {
|
return departureLongitude;
|
}
|
|
public void setDepartureLatitude(java.math.BigDecimal departureLatitude) {
|
this.departureLatitude = departureLatitude;
|
}
|
|
public java.math.BigDecimal getDepartureLatitude() {
|
return departureLatitude;
|
}
|
|
public void setDestinationLongitude(java.math.BigDecimal destinationLongitude) {
|
this.destinationLongitude = destinationLongitude;
|
}
|
|
public java.math.BigDecimal getDestinationLongitude() {
|
return destinationLongitude;
|
}
|
|
public void setDestinationLatitude(java.math.BigDecimal destinationLatitude) {
|
this.destinationLatitude = destinationLatitude;
|
}
|
|
public java.math.BigDecimal getDestinationLatitude() {
|
return destinationLatitude;
|
}
|
|
public void setEstimatedDistance(java.math.BigDecimal estimatedDistance) {
|
this.estimatedDistance = estimatedDistance;
|
}
|
|
public java.math.BigDecimal getEstimatedDistance() {
|
return estimatedDistance;
|
}
|
|
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<SysTaskVehicle> assignedVehicles) {
|
this.assignedVehicles = assignedVehicles;
|
}
|
|
public List<SysTaskVehicle> getAssignedVehicles() {
|
return assignedVehicles;
|
}
|
|
public void setAttachments(List<SysTaskAttachment> attachments) {
|
this.attachments = attachments;
|
}
|
|
public List<SysTaskAttachment> getAttachments() {
|
return attachments;
|
}
|
|
public void setOperationLogs(List<SysTaskLog> operationLogs) {
|
this.operationLogs = operationLogs;
|
}
|
|
public List<SysTaskLog> 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 + '\'' +
|
'}';
|
}
|
}
|