LogJson.cs 12.1 KB
using System;
using System.Collections.Generic;

namespace Model
{
    /*
    public class LogJson
    {
        private bool update;
        private readonly log4net.ILog LOG;

        /// <summary>
        /// 小车名称
        /// </summary>
        public string AGVNum { private set; get; }
        /// <summary>
        /// 当前时间
        /// </summary>
        public DateTime? DateTime { private set; get; }
        /// <summary>
        /// 小车任务名称
        /// </summary>
        public string TaskName { private set; get; }
        /// <summary>
        /// 小车任务开始时间
        /// </summary>
        public DateTime? TaskStartTime { private set; get; }
        /// <summary>
        /// 小车任务结束时间
        /// </summary>
        public DateTime? TaskEndTime { private set; get; }
        /// <summary>
        /// 小车任务持续时间
        /// </summary>
        public int TaskTotalTime { private set; get; }
        /// <summary>
        /// 小车任务信息
        /// </summary>
        public string TaskInfo { private set; get; }

        /// <summary>
        /// 软件任务名称
        /// </summary>
        public string MissionName { private set; get; }
        /// <summary>
        /// 软件任务开始时间
        /// </summary>
        public DateTime? MissionStartTime { private set; get; }
        /// <summary>
        /// 软件任务结束时间
        /// </summary>
        public DateTime? MissionEndTime { private set; get; }
        /// <summary>
        /// 任务持续时间
        /// </summary>
        public int MissionTotalTime { private set; get; }
        /// <summary>
        /// 软件任务目的地
        /// </summary>
        public string MissionTarget { private set; get; }
        /// <summary>
        /// 软件任务信息
        /// </summary>
        public string MissionInfo { private set; get; }
        /// <summary>
        /// 软件任务步骤
        /// </summary>
        public string MissionStep { private set; get; }

        /// <summary>
        /// 错误信息
        /// </summary>
        public string ErrorMessage { private set; get; }
        /// <summary>
        /// 错误开始时间
        /// </summary>
        public DateTime? ErrorStartTime { private set; get; }
        /// <summary>
        /// 错误结束时间
        /// </summary>
        public DateTime? ErrorEndTime { private set; get; }
        /// <summary>
        /// 错误持续时间
        /// </summary>
        public int ErrorTotalTime { private set; get; }


        public LogJson(string agvName, string logName)
        {
            LOG = log4net.LogManager.GetLogger(logName);
            System.Reflection.PropertyInfo[] info = GetType().GetProperties();
            for (int i = 0; i < info.Length; i++)
            {
                if (info[i].PropertyType == typeof(string))
                    info[i].SetValue(this, "");
                else if (info[i].PropertyType == typeof(DateTime?))
                    info[i].SetValue(this, null);
                else if (info[i].PropertyType == typeof(int))
                    info[i].SetValue(this, 0);
            }
            AGVNum = agvName;
            update = true;
        }

        public void OutputLog()
        {
            if (!update) return;

            DateTime = System.DateTime.Now;
            System.Reflection.PropertyInfo[] info = GetType().GetProperties();
            string[] lines = new string[info.Length];
            for (int i = 0; i < info.Length; i++)
            {
                string value;
                if (info[i].PropertyType == typeof(DateTime?))
                    value = info[i].GetValue(this) == null ? "" : string.Format("{0:yyyy-MM-dd HH:mm:ss}", info[i].GetValue(this));
                else
                    value = info[i].GetValue(this).ToString();
                lines[i] = string.Format("\"{0}\":\"{1}\"", info[i].Name, value);
            }

            update = false;
            LOG.Info("{" + string.Join(",", lines) + "}");
        }


        public void SetTaskStart(string name)
        {
            TaskName = name;
            TaskStartTime = System.DateTime.Now;
            TaskEndTime = null;
            TaskTotalTime = 0;
            TaskInfo = "";

            ErrorMessage = "";
            ErrorStartTime = null;
            ErrorEndTime = null;
            ErrorTotalTime = 0;
            update = true;
        }

        public void SetTaskInfo(string s)
        {
            if (TaskInfo == s) return;
            TaskInfo = s;
            TaskEndTime = System.DateTime.Now;
            TaskTotalTime = (TaskEndTime - TaskStartTime).Value.Minutes;
            update = true;
        }

        public void SetTaskOver()
        {
            TaskInfo = "END";
            TaskEndTime = System.DateTime.Now;
            TaskTotalTime = (TaskEndTime - TaskStartTime).Value.Minutes;
            update = true;
        }


        public void SetMissionStart(string name, string target)
        {
            MissionName = name;
            MissionStartTime = System.DateTime.Now;
            MissionEndTime = null;
            MissionTotalTime = 0;
            MissionTarget = target;
            MissionInfo = "";
            MissionStep = "";

            ErrorMessage = "";
            ErrorStartTime = null;
            ErrorEndTime = null;
            ErrorTotalTime = 0;
            update = true;
        }

        public void SetMissionInfo(string s)
        {
            if (MissionInfo == s) return;
            MissionInfo = s;
            MissionEndTime = System.DateTime.Now;
            MissionTotalTime = (MissionEndTime - MissionStartTime).Value.Minutes;
            update = true;
        }

        public void SetMissionStep(string s)
        {
            if (MissionStep == s) return;
            MissionStep = s;
            MissionEndTime = System.DateTime.Now;
            MissionTotalTime = (MissionEndTime - MissionStartTime).Value.Minutes;
            update = true;
        }

        public void SetMissionOver()
        {
            MissionInfo = "END";
            MissionStep = "";
            MissionEndTime = System.DateTime.Now;
            MissionTotalTime = (MissionEndTime - MissionStartTime).Value.Minutes;
            update = true;
        }


        public void SetErrorStart(string s)
        {
            ErrorMessage = s;
            ErrorStartTime = System.DateTime.Now;
            ErrorEndTime = null;
            ErrorTotalTime = 0;
            update = true;
        }

        public void SetErrorOver()
        {
            ErrorMessage = "END";
            ErrorEndTime = System.DateTime.Now;
            ErrorTotalTime = (ErrorEndTime - ErrorStartTime).Value.Minutes;
            update = true;
        }

    }

    */


    public class LogJson
    {
        private bool updateOutputLog;
        private bool updateError;
        private DateTime stepTime;
        private DateTime errorTime;
        private readonly log4net.ILog LOG;

        /// <summary>
        /// 小车名称
        /// </summary>
        public string AGVNum { private set; get; }
        /// <summary>
        /// 任务开始时间
        /// </summary>
        public DateTime DateTime { private set; get; }
        /// <summary>
        /// step结束时间
        /// </summary>
        public DateTime EndDateTime { private set; get; }
        /// <summary>
        /// 软件任务名称
        /// </summary>
        public string TaskName { private set; get; }
        /// <summary>
        /// 任务信息
        /// </summary>
        public string MissionInfo { private set; get; }
        /// <summary>
        /// 软件任务目的地
        /// </summary>
        public string TargetPlace { private set; get; }
        /// <summary>
        /// 类型
        /// </summary>
        public string Type { private set; get; }



        /// <summary>
        /// step步骤(Type = Task)
        /// </summary>
        public string TaskStep { private set; get; }

        /// <summary>
        /// step运行时间(Type = Task)
        /// </summary>
        public int TaskRunTime { private set; get; }

        /// <summary>
        /// 错误信息(Type = Error)
        /// </summary>
        public string ErrorMsg { private set; get; }

        /// <summary>
        /// 错误持续时间(Type = Error)
        /// </summary>
        public int ErrorLastTime { private set; get; }

        /// <summary>
        /// 任务名称(Type = Error)
        /// </summary>
        public string AGVMissionName { private set; get; }




        public LogJson(string agvName, string logName)
        {
            LOG = log4net.LogManager.GetLogger(logName);
            System.Reflection.PropertyInfo[] info = GetType().GetProperties();
            for (int i = 0; i < info.Length; i++)
            {
                if (info[i].PropertyType == typeof(string))
                    info[i].SetValue(this, "");
                else if (info[i].PropertyType == typeof(DateTime?))
                    info[i].SetValue(this, null);
                else if (info[i].PropertyType == typeof(int))
                    info[i].SetValue(this, 0);
            }
            AGVNum = agvName;
            updateOutputLog = false;
        }

        public void OutputLog()
        {
            if (!updateOutputLog) return;

            List<string> lines = new();
            lines.Add(string.Format("\"AGVNum\":\"{0}\"", AGVNum));
            lines.Add(DateTime == null ? "\"DateTime\":\"\"" : string.Format("\"DateTime\":\"{0:yyyy-MM-dd HH:mm:ss}\"", DateTime));
            lines.Add(EndDateTime == null ? "\"EndDateTime\":\"\"" : string.Format("\"EndDateTime\":\"{0:yyyy-MM-dd HH:mm:ss}\"", EndDateTime));
            lines.Add(string.Format("\"TaskName\":\"{0}\"", TaskName));
            lines.Add(string.Format("\"MissionInfo\":\"{0}\"", MissionInfo));
            lines.Add(string.Format("\"TargetPlace\":\"{0}\"", TargetPlace));
            lines.Add(string.Format("\"Type\":\"{0}\"", Type));

            if (Type == "Task")
            {
                lines.Add(string.Format("\"TaskStep\":\"{0}\"", TaskStep));
                lines.Add(string.Format("\"TaskRunTime\":\"{0}\"", TaskRunTime));
            }

            if (Type == "Error")
            {
                lines.Add(string.Format("\"ErrorMsg\":\"{0}\"", ErrorMsg));
                lines.Add(string.Format("\"ErrorLastTime\":\"{0}\"", ErrorLastTime));
                lines.Add(string.Format("\"AGVMissionName\":\"{0}\"", AGVMissionName));
            }

            updateOutputLog = false;
            LOG.Info("{" + string.Join(",", lines) + "}");
        }

        public void SetMissionStart(string name, string target)
        {
            DateTime = DateTime.Now;
            TaskName = name;
            MissionInfo = "";
            TargetPlace = target;
            Type = "Task";
            TaskStep = "";
            TaskRunTime = 0;
            ErrorMsg = "";
            ErrorLastTime = 0;
            AGVMissionName = "";

            stepTime = DateTime.Now;
            //updateOutputLog = true;
        }

        public void SetMissionStep(string info, string step)
        {
            if (TaskStep == step) return;

            MissionInfo = info;
            TaskStep = step;
            EndDateTime = DateTime.Now;
            TaskRunTime = (EndDateTime - stepTime).Minutes;
            stepTime = DateTime.Now;
            updateOutputLog = true;
        }

        public void SetErrorStart(string name, string err)
        {
            ErrorMsg = err;
            if (AGVMissionName == name) return;
            AGVMissionName = name;

            errorTime = DateTime.Now;
            ErrorLastTime = 0;
            updateError = true;
        }

        public void SetErrorOver()
        {
            if (!updateError) return;
            Type = "Error";
            EndDateTime = DateTime.Now;
            ErrorLastTime = (EndDateTime - errorTime).Minutes;
            updateError = false;
            updateOutputLog = true;
            OutputLog();

            Type = "Task";
            ErrorMsg = "";
            ErrorLastTime = 0;
            AGVMissionName = "";
        }


    }

}