Exemplo n.º 1
0
        // 定时任务执行方法
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                log.Info("定时任务执行开始!!!!");

                // 通过Grpc获取站点数据
                string jsonStrData = StationControlService.GetStationJsonData();

                // 自动提醒开工单
                ResultObj resultObj = jobService.AutoRemindToWork(jsonStrData);
                // 如果可开工单了,则推送提醒消息
                if (resultObj.IsSuccess)
                {
                    // 开工单消息推送
                    _hub.Clients.All.SendAsync("ReceiveMessage", "开工单消息推送", resultObj.KeyInfo + "\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                }
                // 推送提醒开工单过程日志
                _hub.Clients.All.SendAsync("ReceiveLogRemindToWork", "开工单处理日志推送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n" + resultObj.Msg);

                log.Info("定时任务执行结束!!!!");
            }));
        }
Exemplo n.º 2
0
        // 定时任务执行方法
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                log.Info("定时任务执行开始!!!!");

                // 通过Grpc获取站点数据
                string jsonStrData = StationControlService.GetStationJsonData();

                // 接收二维码信息,发送工单信息给grpc服务器
                ResultObj resultObj = jobService.AutoOperQrCode(jsonStrData);

                // 如果修改了工单状态,则推送消息
                if (resultObj.IsSuccess)
                {
                    // 推送处理二维码消息
                    _hub.Clients.All.SendAsync("ReceiveMessage", "二维码信息处理成功!", "");
                }
                // 推送处理二维码信息过程日志
                _hub.Clients.All.SendAsync("ReceiveLogOperQrCode", "二维码信息处理日志推送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n" + resultObj.Msg);

                log.Info("定时任务执行结束!!!!");
            }));
        }
Exemplo n.º 3
0
        // 定时任务执行方法
        public Task Execute(IJobExecutionContext context)
        {
            return(Task.Run(() =>
            {
                log.Info("定时任务执行开始!!!!");

                // 通过Grpc获取站点数据
                string jsonStrData = StationControlService.GetStationJsonData();

                // 执行自动处理工单的方法
                ResultObj resultObj = jobService.AutoOperWorkTicket(jsonStrData);

                // 如果修改了工单状态,则推送消息
                if (resultObj.IsSuccess)
                {
                    // 推送工单处理消息
                    _hub.Clients.All.SendAsync("ReceiveMessage", "自动处理工单消息推送", "工单" + resultObj.KeyInfo + "拉油完成。" + "\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                }
                // 推送工单处理过程日志
                _hub.Clients.All.SendAsync("ReceiveLogOperWorkTicket", "自动处理工单日志推送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n" + resultObj.Msg);

                log.Info("定时任务执行结束!!!!");
            }));
        }
Exemplo n.º 4
0
        // 自动提醒开工单
        public ResultObj AutoRemindToWork(string jsonStrData)
        {
            ResultObj resultObj = new ResultObj();
            string    msg       = "";
            string    tempStr;

            try
            {
                // 序列化为JObject
                JObject jObject = JsonConvert.DeserializeObject <JObject>(jsonStrData);
                if (jObject == null)
                {
                    tempStr = "序列化对象为空:" + jsonStrData;
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 解析1号罐数据
                JObject jObjectLT101 = jObject.Value <JObject>("LT101");
                if (jObjectLT101 == null)
                {
                    tempStr = "序列化1号罐数据为空:" + jObject.Value <string>("LT101");
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                // 1号罐液位值
                float engValueLT101 = jObjectLT101.Value <float>("EngValue");
                tempStr = "1号罐液位值为:" + engValueLT101;
                log.Info(tempStr);
                msg += tempStr + "\n";

                // 解析2号罐数据
                JObject jObjectLT102 = jObject.Value <JObject>("LT102");
                if (jObjectLT101 == null)
                {
                    tempStr = "序列化2号罐数据为空:" + jObject.Value <string>("LT102");
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 2号罐液位值
                float engValueLT102 = jObjectLT102.Value <float>("EngValue");
                tempStr = "2号罐液位值为:" + engValueLT102;
                log.Info(tempStr);
                msg += tempStr + "\n";

                // 获取拉油液位值
                string  stationConfigJsonData = StationControlService.GetStationConfigJsonData();
                JObject jObjectstationConfig  = JsonConvert.DeserializeObject <JObject>(stationConfigJsonData);
                if (jObjectstationConfig == null)
                {
                    tempStr = "序列化系统参数为空:" + stationConfigJsonData;
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                float levelReadyForWork = jObjectstationConfig.Value <float>("levelReadyForWork");
                tempStr = "levelReadyForWork的值为:" + levelReadyForWork;
                log.Info(tempStr);
                msg += tempStr + "\n";

                if (levelReadyForWork < engValueLT101 && levelReadyForWork < engValueLT102)
                {
                    tempStr = "1号罐和1号罐液位已达拉油液位值,可以开工单了。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = true;
                    resultObj.KeyInfo   = tempStr;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                else if (levelReadyForWork < engValueLT101)
                {
                    tempStr = "1号罐液位已达拉油液位值,可以开工单了。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = true;
                    resultObj.KeyInfo   = tempStr;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                else if (levelReadyForWork < engValueLT102)
                {
                    tempStr = "2号罐液位已达拉油液位值,可以开工单了。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = true;
                    resultObj.KeyInfo   = tempStr;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                else
                {
                    tempStr = "罐液位未达拉油液位值。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
            }
            catch (Exception e)
            {
                tempStr = "自动提醒开工单发生异常:" + e.Message;
                log.Info(tempStr);
                msg += tempStr + "\n";
                resultObj.IsSuccess = false;
                resultObj.Msg       = msg;
                return(resultObj);
            }
        }
Exemplo n.º 5
0
        // 自动处理工单方法
        public ResultObj AutoOperWorkTicket(string jsonStrData)
        {
            ResultObj resultObj = new ResultObj();
            string    msg       = "";
            string    tempStr;

            try
            {
                // 序列化为JObject
                JObject jObject = JsonConvert.DeserializeObject <JObject>(jsonStrData);
                if (jObject == null)
                {
                    tempStr = "序列化对象为空:" + jsonStrData;
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 解析工单数据
                JObject jObjectWork = jObject.Value <JObject>("System");
                if (jObjectWork == null)
                {
                    tempStr = "序列化工单数据为空:" + jObject.Value <string>("System");
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 拉油完成后,此变量会置1,需将拉油相关信息,如拉油时长、拉液量等保存后,清除此位
                int AckTaskComplete = jObjectWork.Value <int>("AckTaskComplete");
                tempStr = "AckTaskComplete的值为:" + AckTaskComplete;
                log.Info(tempStr);
                msg += tempStr + "\n";
                if (AckTaskComplete == 1)
                {
                    TimeSpan interval;

                    // 实际开始拉油时间
                    DateTime StartLoadingTime = jObjectWork.Value <DateTime>("StartLoadingTime");
                    interval = DateTime.Now - StartLoadingTime;
                    // 计算开始拉油时间和当前时间的时间差(天)
                    if (interval.TotalDays > 1 || interval.TotalDays < 0)
                    {
                        tempStr = "实际开始拉油时间StartLoadingTime不合理:" + StartLoadingTime;
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 实际结束拉油时间
                    DateTime StopLoadingTime = jObjectWork.Value <DateTime>("StopLoadingTime");
                    interval = DateTime.Now - StopLoadingTime;
                    // 计算结束拉油时间和当前时间的时间差(天)
                    if (interval.TotalDays > 1 || interval.TotalDays < 0)
                    {
                        tempStr = "实际结束拉油时间StopLoadingTime不合理:" + StopLoadingTime;
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 开始时间和结束时间差计算(天)
                    interval = StopLoadingTime - StartLoadingTime;
                    if (interval.TotalDays > 1 || interval.TotalDays < 0)
                    {
                        tempStr = "实际开始拉油时间StartLoadingTime:" + StartLoadingTime + ",实际结束拉油时间StopLoadingTime:" + StopLoadingTime + "时间顺序不合理";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 实际拉液量
                    float OilLoaded = jObjectWork.Value <float>("OilLoaded");
                    if (OilLoaded <= 0)
                    {
                        tempStr = "实际拉液量不合理:" + OilLoaded;
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 接收到的二维码
                    string QrCode = jObjectWork.Value <string>("QrCode");
                    tempStr = "QrCode为:" + QrCode;
                    log.Info(tempStr);
                    msg += tempStr + "\n";

                    // 判断是否是工单二维码
                    if (QRCodeEncoder.IsWorkTicket(QrCode) == false)
                    {
                        tempStr = "工单二维码解析不正确:" + QrCode;
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }
                    string SerialNumber = QrCode.Split(":")[1];
                    tempStr = "解析出的工单编号为:" + SerialNumber;
                    log.Info(tempStr);
                    msg += tempStr + "\n";

                    // 根据工单编号和工单状态查询工单
                    DbContextOptions <H4WebContext>        dbContextOption        = new DbContextOptions <H4WebContext>();
                    DbContextOptionsBuilder <H4WebContext> dbContextOptionBuilder = new DbContextOptionsBuilder <H4WebContext>(dbContextOption);
                    H4WebContext _context = new H4WebContext(dbContextOptionBuilder.UseNpgsql(_configuration.GetConnectionString("PostgreSql")).Options);
                    var          obj      = _context.WorkTicket.Where(p => p.SerialNumber.Equals(SerialNumber) && p.Status.Equals(WorkTicketStatus.待拉油.ToString())).FirstOrDefault();
                    if (obj == null)
                    {
                        tempStr = "满足条件的工单不存在(工单编号" + SerialNumber + ",状态待拉油)";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 如果工单存在则修改工单
                    obj.LoadingActualBeginTime = StartLoadingTime;
                    obj.LoadingActualEndTime   = StopLoadingTime;
                    obj.OilLoaded = OilLoaded;
                    obj.OilLoader = obj.DriverPhone;

                    obj.Status      = WorkTicketStatus.待卸油.ToString();
                    obj.Description = obj.Description + "\n【拉油】操作人:" + obj.DriverPhone + ",时间:" + DateTime.Now;

                    obj.LastUpdateTime = DateTime.Now;
                    obj.LastUpdateUser = obj.DriverPhone;

                    _context.WorkTicket.Update(obj);
                    _context.SaveChanges();

                    // 通过Grpc修改参数
                    SystemPara systemPara = new SystemPara();
                    systemPara.ParaName  = "AckTaskComplete";
                    systemPara.ParaValue = "0";
                    // 拉油完成后,此变量会置1,需将拉油相关信息,如拉油时长、拉液量等保存后,清除此位
                    ResultObj setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数AckTaskComplete失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    tempStr = "自动处理工单成功。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = true;
                    resultObj.KeyInfo   = obj.SerialNumber;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                else
                {
                    tempStr = "不用处理工单。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
            }
            catch (Exception e)
            {
                tempStr = "自动处理工单发生异常:" + e.Message;
                log.Info(tempStr);
                msg += tempStr + "\n";
                resultObj.IsSuccess = false;
                resultObj.Msg       = msg;
                return(resultObj);
            }
        }
Exemplo n.º 6
0
        // 自动处理二维码信息
        public ResultObj AutoOperQrCode(string jsonStrData)
        {
            ResultObj resultObj = new ResultObj();
            string    msg       = "";
            string    tempStr;

            try
            {
                // 序列化为JObject
                JObject jObject = JsonConvert.DeserializeObject <JObject>(jsonStrData);
                if (jObject == null)
                {
                    tempStr = "序列化对象为空:" + jsonStrData;
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 解析工单数据
                JObject jObjectWork = jObject.Value <JObject>("System");
                if (jObjectWork == null)
                {
                    tempStr = "序列化工单数据为空:" + jObject.Value <string>("System");
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }

                // 接收到新的二维码,Web后台需在拿到二维码字符串后,清除此位
                int RecvNewQrCode = jObjectWork.Value <int>("RecvNewQrCode");
                tempStr = "RecvNewQrCode:" + RecvNewQrCode;
                log.Info(tempStr);
                msg += tempStr + "\n";
                if (RecvNewQrCode == 1)
                {
                    // 接收到的二维码
                    string QrCode = jObjectWork.Value <string>("QrCode");
                    tempStr = "QrCode为:" + QrCode;
                    log.Info(tempStr);
                    msg += tempStr + "\n";

                    // 获取操作等级
                    int operationLevel = QRCodeEncoder.GetOperationLevel(QrCode);
                    // 通过Grpc修改参数
                    SystemPara systemPara = new SystemPara();
                    systemPara.ParaName  = "OperationLevel";
                    systemPara.ParaValue = operationLevel.ToString();
                    // 操作等级,需由Web后台根据识别二维码的结果后设置此变量,0无 1拉油工单 2操作员 3管理员
                    ResultObj setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数OperationLevel失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 判断是否是工单二维码
                    if (QRCodeEncoder.IsWorkTicket(QrCode) == false)
                    {
                        tempStr = "工单二维码解析不正确:" + QrCode;
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }
                    string SerialNumber = QrCode.Split(":")[1];
                    tempStr = "解析出的工单编号为:" + SerialNumber;
                    log.Info(tempStr);
                    msg += tempStr + "\n";

                    // 根据工单编号和工单状态查询工单
                    DbContextOptions <H4WebContext>        dbContextOption        = new DbContextOptions <H4WebContext>();
                    DbContextOptionsBuilder <H4WebContext> dbContextOptionBuilder = new DbContextOptionsBuilder <H4WebContext>(dbContextOption);
                    H4WebContext _context = new H4WebContext(dbContextOptionBuilder.UseNpgsql(_configuration.GetConnectionString("PostgreSql")).Options);
                    var          obj      = _context.WorkTicket.Where(p => p.SerialNumber.Equals(SerialNumber) && p.Status.Equals(WorkTicketStatus.待拉油.ToString())).FirstOrDefault();
                    if (obj == null)
                    {
                        tempStr = "满足条件的工单不存在(工单编号" + SerialNumber + ",状态待拉油)";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara           = new SystemPara();
                    systemPara.ParaName  = "WorkTicketInfo";
                    systemPara.ParaValue = JsonConvert.SerializeObject(obj);
                    // Web后台将工单信息写入PLC,此字符串,0~49位为工单编号,50~59为司机姓名,60~69为车牌号,70~90为联系方式
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数WorkTicketInfo失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara.ParaName  = "WorkTicketDateTime";
                    systemPara.ParaValue = obj.LoadingBeginTime.ToString();
                    // 工单上的拉油时间
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数WorkTicketDateTime失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara.ParaName  = "TankSelect";
                    systemPara.ParaValue = obj.OilPot.Equals("1#罐") ? "1" : "2";
                    // 工单上的拉油时间
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数TankSelect失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara.ParaName  = "MaxOilCanLoad";
                    systemPara.ParaValue = obj.OilLoadedMax.ToString();
                    // 工单上的最大拉液量
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数MaxOilCanLoad失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara.ParaName  = "SendWorkTicket";
                    systemPara.ParaValue = "1";
                    // 如识别到二维码为工单信息后,将工单信息给PLC,置此位为1,由PLC侧清除此痊
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数SendWorkTicket失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    // 通过Grpc修改参数
                    systemPara.ParaName  = "RecvNewQrCode";
                    systemPara.ParaValue = "0";
                    // 接收到新的二维码,Web后台需在拿到二维码字符串后,清除此位
                    setParamsResult = StationControlService.SetSystemSettingSingleParaService(systemPara);
                    if (setParamsResult.IsSuccess == false)
                    {
                        tempStr = "修改参数RecvNewQrCode失败!";
                        log.Info(tempStr);
                        msg += tempStr + "\n";
                        resultObj.IsSuccess = false;
                        resultObj.Msg       = msg;
                        return(resultObj);
                    }

                    tempStr = "自动处理二维码信息完成。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = true;
                    resultObj.KeyInfo   = obj.SerialNumber;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
                else
                {
                    tempStr = "没有新的二维码信息。";
                    log.Info(tempStr);
                    msg += tempStr + "\n";
                    resultObj.IsSuccess = false;
                    resultObj.Msg       = msg;
                    return(resultObj);
                }
            }
            catch (Exception e)
            {
                tempStr = "自动处理二维码发生异常:" + e.Message;
                log.Info(tempStr);
                msg += tempStr + "\n";
                resultObj.IsSuccess = false;
                resultObj.Msg       = msg;
                return(resultObj);
            }
        }