package tech.powerjob.server.web.response; import com.alibaba.fastjson.JSONObject; import tech.powerjob.common.OmsConstant; import tech.powerjob.common.model.PEWorkflowDAG; import tech.powerjob.server.persistence.remote.model.WorkflowInstanceInfoDO; import lombok.Data; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.BeanUtils; /** * 工作流实例视图层展示对象 * * @author tjq * @since 2020/5/31 */ @Data public class WorkflowInstanceInfoVO { /** * workflowInstanceId(任务实例表都使用单独的ID作为主键以支持潜在的分表需求) */ private String wfInstanceId; private String workflowId; /** * 工作流名称,通过 workflowId 查询获取 */ private String workflowName; /** * workflow 状态(WorkflowInstanceStatus) */ private Integer status; /** * 工作流启动参数 */ private String wfInitParams; /** * 工作流上下文 */ private String wfContext; private PEWorkflowDAG pEWorkflowDAG; private String result; /** * 预计触发时间 */ private String expectedTriggerTime; /** * 实际触发时间(需要格式化为人看得懂的时间) */ private String actualTriggerTime; /** * 结束时间(同理,需要格式化) */ private String finishedTime; public static WorkflowInstanceInfoVO from(WorkflowInstanceInfoDO wfInstanceDO, String workflowName) { WorkflowInstanceInfoVO vo = new WorkflowInstanceInfoVO(); BeanUtils.copyProperties(wfInstanceDO, vo); vo.setWorkflowName(workflowName); vo.setPEWorkflowDAG(JSONObject.parseObject(wfInstanceDO.getDag(), PEWorkflowDAG.class)); // JS精度丢失问题 vo.setWfInstanceId(String.valueOf(wfInstanceDO.getWfInstanceId())); vo.setWorkflowId(String.valueOf(wfInstanceDO.getWorkflowId())); // 格式化时间 if (wfInstanceDO.getExpectedTriggerTime() != null) { vo.setExpectedTriggerTime(DateFormatUtils.format(wfInstanceDO.getExpectedTriggerTime(), OmsConstant.TIME_PATTERN)); } vo.setActualTriggerTime(DateFormatUtils.format(wfInstanceDO.getActualTriggerTime(), OmsConstant.TIME_PATTERN)); if (wfInstanceDO.getFinishedTime() == null) { vo.setFinishedTime(OmsConstant.NONE); }else { vo.setFinishedTime(DateFormatUtils.format(wfInstanceDO.getFinishedTime(), OmsConstant.TIME_PATTERN)); } return vo; } }