/// <summary>
        /// 命令执行函数
        /// </summary>
        /// <param name="Command">命令</param>
        /// <returns>执行结果</returns>
        public override BasisCommandResult Execute(BasisEventCommand Command)
        {
            BasisCommandResult  result   = new BasisCommandResult();
            LDMachine           terminal = (LDMachine)Command.Session;
            LaidianCommandModel cmd      = (LaidianCommandModel)Command.Content;

            if (cmd.MessageType == MessageType.HEARTBEAT)
            {
                /*----------------------
                 * 1、更新时间
                 * -----------------------*/
                terminal.ComLinkLastTime = DateTime.Now;
            }
            else
            {
                if (next == null)
                {
                    // log.Info("用户" + client.ApplicationID + "执行的ID为" + Command.EventCommandID + "的指令没有对应执行器.");
                    result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
                    result.Content    = null;
                    return(result);
                }
                else
                {
                    return(this.next.Execute(Command));
                }
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// 命令执行函数
        /// </summary>
        /// <param name="Command">命令</param>
        /// <returns>执行结果</returns>
        public override BasisCommandResult Execute(BasisEventCommand Command)
        {
            BasisCommandResult result = new BasisCommandResult();

            LDMachine terminal = (LDMachine)Command.Session;


            LaidianCommandModel cmd = (LaidianCommandModel)Command.Content;

            if (cmd.MessageType == MessageType.LAIDIAN_BUYLINE_REQ)
            {
                //cmd.Result = 0;
                int lineType = 0;

                /*----------------------
                 * 1、发送售线指令
                 * -----------------------*/
                //DN.cdport.SaleLine();
            }
            else
            {
                if (next == null)
                {
                    result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
                    result.Content    = null;
                    return(result);
                }
                else
                {
                    return(this.next.Execute(Command));
                }
            }
            return(result);
        }
Пример #3
0
        /// <summary>
        /// 仓道串口的回复数据处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Cdport_DongEvent(object sender, EventArgs e)
        {
            Com.newEventStr   eventFromCom    = (newEventStr)e;
            byte[]            data            = (byte[])eventFromCom.tys;
            BasisEventCommand serialportevent = new BasisEventCommand();

            serialportevent.Session        = this;
            serialportevent.EventCommandID = "serial";
            serialportevent.Content        = data;
            CdSerialportCmdExecutorchainheader.Execute(serialportevent);
        }
Пример #4
0
 public override BasisCommandResult Execute(BasisEventCommand Command)
 {
     if (next == null)
     {
         BasisCommandResult result = new BasisCommandResult();
         result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
         result.Content    = null;
         return(result);
     }
     else
     {
         return(next.Execute(Command));
     }
 }
Пример #5
0
 /// <summary>
 ///
 /// </summary>
 public void PoolTcpChannel()
 {
     while (true)
     {
         if (tcpchannel.taskMsg.Count > 0)
         {
             LaidianCommandModel data = tcpchannel.taskMsg.Dequeue();
             BasisEventCommand   cmd  = new BasisEventCommand();
             cmd.Content        = data;
             cmd.Session        = this;
             cmd.EventCommandID = "tcp";
             ServerTaskExecutorchainheader.Execute(cmd);
         }
     }
 }
Пример #6
0
 /// <summary>
 /// 云端命令处理
 /// </summary>
 public void ExecuteServerCmd()
 {
     while (bProcess)
     {
         try
         {
             if (terminal.tcpchannel.taskMsg.Count > 0)
             {
                 LaidianCommandModel model = (LaidianCommandModel)terminal.tcpchannel.taskMsg.Dequeue();
                 BasisEventCommand   cmd   = new BasisEventCommand();
                 cmd.Content        = model;
                 cmd.EventCommandID = "tcp";
                 cmd.Session        = terminal;
                 ServerTaskExecutorchainheader.Execute(cmd);
             }
             else
             {
                 Thread.Sleep(50);
             }
         }
         catch
         { }
     }
 }
Пример #7
0
        /// <summary>
        /// 命令执行函数
        /// </summary>
        /// <param name="Command">命令</param>
        /// <returns>执行结果</returns>
        public override BasisCommandResult Execute(BasisEventCommand Command)
        {
            BasisCommandResult result = new BasisCommandResult();
            //  Command.Session;
            LDMachine terminal = (LDMachine)Command.Session;

            byte[] data    = (byte[])Command.Content;
            string strcmds = COM_Cmd.byteToString(data);

            if (data[3] == 0x51)//查询仓道
            {
                string strStation = "";
                try
                {
                    strStation = ((int)data[1]).ToString("D2");
                }
                catch
                {
                }

                /*----------------------
                 * 1、更新仓道
                 * -----------------------*/
                //udplog.logs.Enqueue(DateTime.Now.ToString() + "回复" + strcmds);
                string cdbno = "";// s.Substring(14, 10);


                int alertflag = (int)data[15];
                int errocode  = data[16];//
                int alertcnt  = 0;
                //int.TryParse(((int)data[15]).ToString() + ((int)data[16]).ToString(), out alertcnt);//充电宝使用次数
                alertcnt = Convert.ToInt32(data[17].ToString("X2") + data[18].ToString("X2"), 16);
                int usecnt = 0;        //
                int cdtmp  = data[22]; //仓道温度
                if (data[21] == 1)
                {
                    cdtmp = -1 * cdtmp;
                }

                //int.TryParse(((int)data[23]).ToString() + ((int)data[24]).ToString(),out usecnt);//充电宝使用次数
                usecnt = Convert.ToInt32(data[23].ToString("X2") + data[24].ToString("X2"), 16);
                //int.TryParse(((char)data[12]).ToString() + ((char)data[13]).ToString(),out errocode);//机器错误码
                double temp = 0;
                double.TryParse(((int)data[25]).ToString() + ((int)data[26]).ToString(), out temp);

                double idl = 0;
                double.TryParse(((int)data[27]).ToString() + ((int)data[28]).ToString(), out idl);

                double Adl = 0;
                double.TryParse(Convert.ToInt32((data[29].ToString("X2") + data[30].ToString("X2")), 16).ToString(), out Adl);

                int MachineStatus = data[31];//机器码


                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation];//更新储物柜
                cuwugui.TestCnt   = 0;
                cuwugui.CommTime  = DateTime.Now;
                cuwugui.Adl       = Adl;
                cuwugui.AlartCnt  = alertcnt;
                cuwugui.UseCnt    = usecnt;
                cuwugui.alertflag = alertflag;
                cuwugui.errorflag = errocode;
                int    V12  = data[19];
                int    V5   = data[20];
                double DV12 = Math.Round(V12 * 11.5 / 15, 2);
                double DV5  = Math.Round((double)(V5 * 2 / 10), 2);

                cuwugui.V12  = DV12;
                cuwugui.V5   = DV5;
                cuwugui.Temp = cdtmp.ToString();
                if (errocode > 0)
                {
                    try
                    {
                        if (cuwugui.isReset == false && cuwugui.ResetCnt < 5 && cuwugui.ResetTime < DateTime.Now.AddMinutes(-2))
                        {
                            LoseCD lcd = new LoseCD();
                            lcd.ldate = DateTime.Now;
                            lcd.cdn   = byte.Parse(strStation);
                            terminal.NeedSendReBoot.Enqueue(lcd);
                            cuwugui.ResetCnt++;
                            cuwugui.isReset = true;
                        }
                    }
                    catch
                    { }
                }
                //if (data[data.Length - 3].ToString("D2") == "01")
                //{
                //    cuwugui.CWGStatus = CUWUGUISTATUS.SetingPower;

                //}
                //else
                //{
                //    cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                //}
                if (data[4] == 2 || data[4] == 0x82)//2—充电宝好
                {
                    // cuwugui.fHasCDB = true;
                    //if (cuwugui.LastLostTime<DateTime.Now.AddMinutes(-1))
                    cuwugui.HasLostCnt = 0;
                    if (data[4] == 0x82)
                    {
                        cuwugui.cdstatus = true;
                    }
                    else
                    {
                        cuwugui.cdstatus = false;
                    }
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;
                    try
                    {
                        string StrNo    = data[7].ToString("X2") + data[6].ToString("X2") + data[5].ToString("X2");
                        string StrYear  = data[8].ToString("X2");
                        string StrMonth = data[9].ToString("X2");
                        string StrDay   = data[10].ToString("X2");
                        cdbno = "00000000" + StrDay + StrMonth + StrYear + StrNo;
                    }
                    catch
                    {
                    }
                    if (cdbno != "00000000000000000000")
                    {
                        if (errocode == 0)
                        {
                            if (data[data.Length - 3].ToString("D2") == "01")
                            {
                                if (data[4] == 0x82)
                                {
                                    cuwugui.CWGStatus = CUWUGUISTATUS.SetingPower;
                                }

                                else
                                {
                                    cuwugui.CWGStatus = CUWUGUISTATUS.FullPower;
                                }
                            }
                            else
                            {
                                cuwugui.CWGStatus = CUWUGUISTATUS.None;
                            }
                            if (cuwugui.ResetTime < DateTime.Now.AddMinutes(-6))
                            {
                                cuwugui.ResetCnt = 0;
                            }
                        }
                        else
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                        }
                        cuwugui.HasLostCnt   = 0;
                        cuwugui.LastLostTime = DateTime.Now;
                        Chongdianbao cdb = new Chongdianbao();
                        cdb.CDBNO     = cdbno;
                        cdb.PowerDeep = idl;
                        cdb.temp      = temp;
                        cdb.UseCnt    = usecnt;
                        cuwugui.CDB   = cdb;
                        //udplog.logs.Enqueue(DateTime.Now.ToString() + "电量" + idl.ToString());
                    }
                    else
                    {
                        cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;
                        if (data[data.Length - 3].ToString("D2") == "01")
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.FullPower;
                        }
                        else
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.None;
                        }
                        if (cuwugui.LastLostTime < DateTime.Now.AddMinutes(-1))
                        {
                            cuwugui.HasLostCnt = 0;
                        }

                        Chongdianbao cdb = new Chongdianbao();
                        cdb.CDBNO = cdbno;

                        cdb.PowerDeep = idl;
                        cdb.temp      = temp;
                        cdb.UseCnt    = usecnt;
                        cuwugui.CDB   = cdb;
                        if (errocode == 0)//如果errocode>0了  前面已经加入了一次重启 ,就不需要再在这里重启了
                        {
                            try
                            {
                                if (cuwugui.isReset == false && cuwugui.ResetCnt < 5 && cuwugui.ResetTime < DateTime.Now.AddMinutes(-2))
                                {
                                    LoseCD lcd = new LoseCD();
                                    lcd.ldate = DateTime.Now;
                                    lcd.cdn   = byte.Parse(strStation);
                                    terminal.NeedSendReBoot.Enqueue(lcd);
                                    cuwugui.ResetCnt++;
                                    cuwugui.isReset = true;
                                }
                            }
                            catch
                            {
                            }
                        }
                        terminal.udplog.logs.Enqueue(DateTime.Now.ToString() + "充电宝编号错误" + idl.ToString());
                    }
                }
                else
                {
                    cuwugui.cdstatus = false;
                }

                if (data[4] == 1 || data[4] == 0x81 || data[4] == 4)//1-表示检测坏
                {
                    cuwugui.fHasCDB       = true;
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;



                    Chongdianbao cdb = new Chongdianbao();
                    try
                    {
                        string StrNo    = data[7].ToString("X2") + data[6].ToString("X2") + data[5].ToString("X2");
                        string StrYear  = data[8].ToString("X2");
                        string StrMonth = data[9].ToString("X2");
                        string StrDay   = data[10].ToString("X2");
                        cdbno = "00000000" + StrDay + StrMonth + StrYear + StrNo;
                    }
                    catch
                    {
                    }
                    //if(cdb.CDBNO =="")
                    cdb.CDBNO = cdbno;

                    cdb.PowerDeep = 0;
                    cdb.UseCnt    = usecnt;
                    cdb.temp      = 0;
                    cuwugui.CDB   = cdb;

                    cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                }

                if (data[4] == 0 || data[4] == 0x80)//0—表示空
                {
                    cuwugui.fHasCDB       = false;
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;

                    cuwugui.CWGStatus = CUWUGUISTATUS.None;
                    if (cuwugui.LastLostTime < DateTime.Now.AddMinutes(-1))//如果归还时间失败时间已经过去两分钟,则清空失败,重新开放仓口
                    {
                        cuwugui.HasLostCnt = 0;
                    }
                    cuwugui.CDB = null;
                    cuwugui.Cmd = null;
                    if (errocode == 0)
                    {
                        if (cuwugui.ResetTime < DateTime.Now.AddMinutes(-6))
                        {
                            cuwugui.ResetCnt = 0;
                        }
                    }
                }
                if (errocode != 0)
                {
                    cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                }
                terminal.Cuwuguis[strStation] = cuwugui;//将储物柜保存回去
                EventUI nui = new EventUI();
                nui.UIType = UIUpdateType.StatusUpdate;
                nui.huodao = strStation;
                nui.Msg    = strcmds;
                //事件通知界面更新
                terminal.fireEvent(nui);
            }
            else
            {
                if (next == null)
                {
                    // log.Info("用户" + client.ApplicationID + "执行的ID为" + Command.EventCommandID + "的指令没有对应执行器.");
                    result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
                    result.Content    = null;
                    return(result);
                }
                else
                {
                    return(this.next.Execute(Command));
                }
            }
            return(result);
        }
        /// <summary>
        /// 命令执行函数
        /// </summary>
        /// <param name="Command">命令</param>
        /// <returns>执行结果</returns>
        public override BasisCommandResult Execute(BasisEventCommand Command)
        {
            BasisCommandResult result = new BasisCommandResult();

            LDMachine terminal = (LDMachine)Command.Session;


            byte[] data       = (byte[])Command.Content;
            string strcmds    = COM_Cmd.byteToString(data);
            string strStation = "";

            try
            {
                strStation = ((int)data[1]).ToString("D2");
            }
            catch
            {
            }
            byte btype = data[3];

            if (btype == 'H' && data[2] == 0x04)//归还来电宝回复
            {
                //udplog.logs.Enqueue(DateTime.Now.ToString() + "请求归还出仓,回复" + strcmds);

                terminal.HuanEvent.Set();

                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation]; //更新储物柜
                cuwugui.JieLost = 0;
                terminal.Cuwuguis[strStation] = cuwugui;                  //将储物柜保存回去
                if (data[4] == 0x21)
                {
                    terminal.HuanEvent.Set(); //
                                              //StartEvent.Reset();
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.PutInting;
                    nui.huodao = strStation;
                    nui.Msg    = "设备已经准备好,请放入充电宝……";
                    terminal.fireEvent(nui);
                    terminal.oneorder.status = true;
                    tools.insertLog(strStation + "号仓已经准备好,请放入充电宝" + " " + strcmds, Logtype.H);
                }
                else
                {
                    terminal.BCEvent.Set();//归还出仓失败即可跳转下一个
                    terminal.oneorder.status  = false;
                    terminal.oneorder.iTryCnt = 3;
                    cuwugui.LastLostTime      = DateTime.Now;//记录
                    cuwugui.HasLostCnt       += 1;
                    if (terminal.oneorder.iTryCnt == 3)
                    {
                        terminal.StartEvent.Set();
                        // CUWUGUI cuwugui = (CUWUGUI)Cuwuguis[strStation];//更新储物柜
                        cuwugui.JieLost               = 0;
                        cuwugui.LastLostTime          = DateTime.Now; //记录
                        cuwugui.HasLostCnt           += 1;
                        terminal.Cuwuguis[strStation] = cuwugui;      //将储物柜保存回去
                        EventUI nui = new EventUI();
                        nui.UIType = UIUpdateType.PutIntFalse;
                        nui.Msg    = "归还充电宝失败";
                        nui.Flag   = false;
                        nui.huodao = strStation;
                        terminal.fireEvent(nui);
                        terminal.oneorder.status = true;
                    }
                    tools.insertLog(strStation + "号仓未能打开仓门" + " " + strcmds, Logtype.H);
                }
            }
            else if (btype == 'i')
            {
                if (data[4] == 0x21)
                {
                    // StartEvent.Reset();
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.PutInting_check;
                    nui.Msg    = "充电宝检测通过,请稍候";
                    terminal.fireEvent(nui);
                    terminal.oneorder.status = true;
                }
                tools.insertLog("正在检测充电宝" + " " + strcmds, Logtype.H);
            }
            if (btype == 'I')
            {
                //udplog.logs.Enqueue(DateTime.Now.ToString() + "回复,归还充电宝失败");


                if (data[4] == 0x20)
                {
                    if (terminal.onehuanaction.HasLostHuodao.Contains((int)data[1]))
                    {
                        terminal.onehuanaction.HasLostHuodao.Dequeue();
                    }
                }
                else
                {
                    terminal.BCEvent.Set();
                    terminal.oneorder.iTryCnt++;
                    CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation]; //更新储物柜
                    cuwugui.JieLost               = 0;
                    cuwugui.LastLostTime          = DateTime.Now;             //记录
                    cuwugui.HasLostCnt           += 1;
                    terminal.Cuwuguis[strStation] = cuwugui;                  //将储物柜保存回去
                                                                              //归还失败  则Lost次数加1
                                                                              //onehuanaction.ActionTime = DateTime.Now;
                                                                              //onehuanaction.CntPin();

                    //onehuanaction.HasLostHuodao.Enqueue(int.Parse(strStation));
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.PutIntFalse;
                    nui.huodao = strStation;
                    nui.Msg    = "充电宝放反或者充电宝故障,请电话联系客服";
                    terminal.fireEvent(nui);
                }
                terminal.StartEvent.Set();
                if (data[4] == 0x20)
                {
                    tools.insertLog(strStation + "号仓归还超时没放入充电宝" + " " + strcmds, Logtype.H);
                }
                else
                {
                    tools.insertLog(strStation + "号仓归还时充电宝放反或者充电宝故障" + " " + strcmds, Logtype.H);
                }
            }
            else if (btype == 'J')
            {
                terminal.BCEvent.Set();

                //udplog.logs.Enqueue(DateTime.Now.ToString() + "回复" + strcmds);
                terminal.StartEvent.Set();
                //归还成功  则清除失败次数
                terminal.onehuanaction.ActionStartTime = DateTime.Now;
                terminal.onehuanaction.HasLostHuodao.Clear();
                terminal.onehuanaction.firstHuodao = -1;
                //更新充电宝柜
                string  cdbno   = "";// s.Substring(14, 10);
                double  temp    = double.Parse(((int)data[25]).ToString() + ((int)data[26]).ToString());
                double  idl     = double.Parse(((int)data[27]).ToString() + ((int)data[28]).ToString());
                int     usecnt  = 0;                                      // int.Parse(((char)data[19]).ToString() + ((char)data[20]).ToString());
                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation]; //更新储物柜
                cuwugui.TestCnt   = 0;
                cuwugui.CommTime  = DateTime.Now;
                cuwugui.CWGStatus = CUWUGUISTATUS.SetingPower;


                if (data[4] == 2 || data[4] == 0x82)//2—充电宝好
                {
                    //清除掉
                    cuwugui.LastLostTime  = DateTime.Now;
                    cuwugui.HasLostCnt    = 0;//
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;


                    string StrNo = data[7].ToString("X2") + data[6].ToString("X2") + data[5].ToString("X2");
                    //Convert.ToInt32(data[7].ToString("X2") + data[6].ToString("X2") + data[5].ToString("X2"), 16).ToString("D8");
                    string StrYear  = data[8].ToString("X2");
                    string StrMonth = data[9].ToString("X2");
                    string StrDay   = data[10].ToString("X2");

                    cdbno = "00000000" + StrDay + StrMonth + StrYear + StrNo;
                    //StrNo + StrYear + StrMonth + StrDay + "000000";
                    if (cdbno != "00000000000000000000")
                    {
                        tools.insertLog(strStation + "号仓归还时充电宝放成功" + cdbno + " " + strcmds, Logtype.H);
                        if (idl == 4)
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.FullPower;
                        }
                        else
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.SetingPower;
                        }
                        Chongdianbao cdb = new Chongdianbao();
                        cdb.CDBNO                = cdbno;
                        cdb.PowerDeep            = idl;
                        cdb.UseCnt               = usecnt;
                        cuwugui.CDB              = cdb;
                        cdb.temp                 = temp;
                        terminal.oneorder.status = true;
                    }
                    else
                    {
                        //如果读取充电宝的编号错误,插入重启指令
                        try
                        {
                            if (cuwugui.isReset == false && cuwugui.ResetCnt < 5 && cuwugui.ResetTime < DateTime.Now.AddMinutes(-2))
                            {
                                LoseCD lcd = new LoseCD();
                                lcd.ldate = DateTime.Now;
                                lcd.cdn   = byte.Parse(strStation);
                                cuwugui.ResetCnt++;
                                cuwugui.isReset = true;
                                terminal.NeedSendReBoot.Enqueue(lcd);
                            }
                        }
                        catch
                        { }
                        terminal.oneorder.iTryCnt++;//= true;
                        cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                        tools.insertLog(strStation + "号仓归还充电宝编号错误" + " " + strcmds, Logtype.H);
                    }
                }
                if (data[4] == 1 || data[4] == 0x21)//1-表示检测坏
                {
                    terminal.oneorder.iTryCnt++;
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;
                    cuwugui.CWGStatus     = CUWUGUISTATUS.SetingPower;

                    cuwugui.LastLostTime = DateTime.Now;
                    cuwugui.HasLostCnt  += 1;//
                    for (int i = 5; i < 25; i++)
                    {
                        cdbno += data[i].ToString("D2");
                    }
                    if (cdbno != "00000000000000000000")
                    {
                        if (idl == 4)
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.FullPower;
                        }
                        else
                        {
                            cuwugui.CWGStatus = CUWUGUISTATUS.SetingPower;
                        }
                        Chongdianbao cdb = new Chongdianbao();
                        cdb.CDBNO     = cdbno;
                        cdb.PowerDeep = idl;
                        cdb.UseCnt    = usecnt;
                        cuwugui.CDB   = cdb;
                        cdb.temp      = temp;
                    }
                    else
                    {
                        cuwugui.CWGStatus = CUWUGUISTATUS.Error;
                    }
                }
                if (data[4] == 0)//0—表示空
                {
                    terminal.oneorder.iTryCnt++;
                    cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;

                    cuwugui.CWGStatus = CUWUGUISTATUS.None;
                    cuwugui.CDB       = null;
                    cuwugui.Cmd       = null;
                }

                terminal.Cuwuguis[strStation] = cuwugui;//将储物柜保存回去

                EventUI nui = new EventUI();
                nui.UIType = UIUpdateType.PutIntSuccess;
                nui.huodao = strStation;
                nui.Msg    = "充电宝归还成功";
                nui.Flag   = true;

                terminal.fireEvent(nui);
            }
            else
            {
                if (next == null)
                {
                    result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
                    result.Content    = null;
                    return(result);
                }
                else
                {
                    return(this.next.Execute(Command));
                }
            }
            return(result);
        }
Пример #9
0
 /// <summary>
 /// Web服务器模块或Socket监听程序请求服务器执行一个指令
 /// </summary>
 /// <param name="EventCommand">需要执行的命令</param>
 /// <returns></returns>
 public abstract BasisCommandResult ExecClientCommand(BasisEventCommand Command);
Пример #10
0
 /// <summary>
 /// Web服务器模块或Socket监听程序向服务器发送一个事件
 /// </summary>
 /// <param name="Event">发送到服务器的事件</param>
 public abstract void FireClientEvent(BasisEventCommand Event);
Пример #11
0
 /// <summary>
 /// 抽象方法,在该方法体中实现对特定命令的处理。同时该方法内部还应该判断是否是执行器链尾,如果是链尾且命令不属于自己执行,
 /// 应该返回BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor类型的结果.
 /// </summary>
 /// <param name="Command">需要执行的命令</param>
 /// <returns>处理结果对象</returns>
 public abstract BasisCommandResult Execute(BasisEventCommand Command);
        /// <summary>
        /// 命令执行函数
        /// </summary>
        /// <param name="Command">命令</param>
        /// <returns>执行结果</returns>
        public override BasisCommandResult Execute(BasisEventCommand Command)
        {
            BasisCommandResult result = new BasisCommandResult();

            //  Command.Session;
            LDMachine terminal = (LDMachine)Command.Session;

            byte[] data       = (byte[])Command.Content;
            byte   btype      = data[3];
            string strcmds    = COM_Cmd.byteToString(data);
            string strStation = "";

            try
            {
                strStation = ((int)data[1]).ToString("D2");
            }
            catch
            {
            }
            if (btype == 'D')//取来电宝后,设备回复发送指令后回复的第一个数据,字母'O'
            {
                //udplog.logs.Enqueue(DateTime.Now.ToString() + "回复" + strcmds);

                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation];
                cuwugui.HasLostCnt = 0;
                if (data[4] == 0x21)
                {
                    //udplog.logs.Enqueue(DateTime.Now.ToString() + ":请求租借出仓D");
                    tools.insertLog(strStation + "号仓 准备租借出仓" + strcmds, Logtype.J);
                    terminal.JEvent.Set();
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.ChuHuoING;
                    nui.huodao = strStation;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoING;
                    if (terminal.ServerWork != null)
                    {
                        nui.Msg = terminal.ServerWork.userNikeName + "," + terminal.ServerWork.userHeadPic;
                    }
                    //事件通知界面更新
                    terminal.fireEvent(nui);
                }
                else
                {
                    terminal.BCEvent.Set();
                    //udplog.logs.Enqueue(DateTime.Now.ToString() + ":请求租借出仓失败");
                    //tools.insertLog(strStation + "号仓 租借出仓失败" + strcmds, Logtype.J);
                    terminal.oneorder.status    = false;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoL;
                    terminal.oneorder.iTryCnt   = 3;
                    if (terminal.oneorder.iTryCnt == 3)
                    {
                        EventUI nui = new EventUI();
                        nui.huodao = strStation;
                        nui.UIType = UIUpdateType.ChuHuoL;
                        nui.Msg    = "出货失败";
                        nui.Flag   = false;
                        //CUWUGUI cuwugui = (CUWUGUI)Cuwuguis[strStation];//更新储物柜
                        cuwugui.JieLost++;
                        cuwugui.JieLostTime = DateTime.Now;
                        cuwugui.CommTime    = DateTime.Now;

                        cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;

                        //cuwugui.JieLost++;
                        //cuwugui.LastLostTime = DateTime.Now;
                        terminal.Cuwuguis[strStation] = cuwugui;//将储物柜保存回去
                        //回复云端任务执行状态
                        ReponseWorkEvent evn = new ReponseWorkEvent();

                        evn.workNo     = terminal.oneorder.OrderNo;
                        evn.CDB        = cuwugui.CDB.CDBNO;
                        evn.huodao     = int.Parse(strStation);
                        evn.workstatus = false;
                        terminal.SendNetEvents.Enqueue(evn);
                        //事件通知界面更新
                        terminal.fireEvent(nui);
                        terminal.StartEvent.Set();
                    }
                }
                //正在处理云端的任务,更新界面的状态,其他的查询任务暂停。
            }
            else if (btype == 'E')//字母S,当下位机执行完任务后返回执行的状态,上位机需要答复下位机,即通知下位机已经收到;
            {
                // udplog.logs.Enqueue(DateTime.Now.ToString() + "回复" + strcmds);
                int     flag    = data[4];
                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation];//更新储物柜

                if (flag == 1 || flag == 0x21)
                {
                    try
                    {
                        if (terminal.Test_Mode == 1)
                        {
                            cuwugui.AutoTestSuccessCnt++;
                        }
                    }
                    catch
                    { }
                    // ResponseWorkStatus();
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.ChuHuoWait;
                    nui.huodao = strStation;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoWait;
                    nui.Msg = "出货完成,等待取走";
                    //事件通知界面更新
                    terminal.fireEvent(nui);

                    //回复云端任务执行状态
                    ReponseWorkEvent evn = new ReponseWorkEvent();
                    evn.CDB        = cuwugui.CDB.CDBNO;
                    evn.huodao     = int.Parse(strStation);
                    evn.workNo     = terminal.oneorder.OrderNo;
                    evn.workstatus = true;

                    if (terminal.cflag == 0)
                    {
                        terminal.SendNetEvents.Enqueue(evn);
                    }
                    cuwugui.CDB = null;

                    cuwugui.HasLostCnt = 0;

                    terminal.Cuwuguis[strStation] = cuwugui;
                    //XmlOperatorOrder xmlorder = new XmlOperatorOrder();
                    //xmlorder.orderno = oneorder.OrderNo;
                    //xmlorder.datatime = DateTime.Now.ToString();
                    //xmlorder.cdbno = "00000000000000000000";
                    //xmlorder.cmno = strStation;
                    //xmlorder.status = "0E1";
                    //xmlorder.Add();
                    //udplog.logs.Enqueue(DateTime.Now.ToString() + ":请求租借等待出货E1");
                    //tools.insertLog(strStation + "号仓租借出仓等待取走" + strcmds, Logtype.J);
                }
                else
                {
                    //udplog.logs.Enqueue(DateTime.Now.ToString() + ":请求租借出货失败E0");
                    terminal.oneorder.status    = false;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoL;
                    terminal.oneorder.iTryCnt   = 3;

                    if (terminal.oneorder.iTryCnt == 3)
                    {
                        //BCEvent.Set();

                        // lock (Cuwuguis)
                        {
                            cuwugui.JieLost++;
                            cuwugui.JieLostTime = DateTime.Now;
                            cuwugui.CommTime    = DateTime.Now;

                            cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;

                            //cuwugui.JieLost++;
                            //cuwugui.LastLostTime = DateTime.Now;
                            terminal.Cuwuguis[strStation] = cuwugui;//将储物柜保存回去
                        }
                        EventUI nui = new EventUI();
                        nui.UIType = UIUpdateType.ChuHuoL;
                        nui.huodao = strStation;
                        nui.Msg    = "出货失败";
                        nui.Flag   = false;
                        //回复云端任务执行状态
                        ReponseWorkEvent evn = new ReponseWorkEvent();
                        evn.workNo         = terminal.oneorder.OrderNo;
                        evn.CDB            = terminal.ServerWork.CDBNO;// cuwugui.CDB.CDBNO;
                        evn.huodao         = int.Parse(strStation);
                        evn.workstatus     = true;
                        terminal.jieResult = -5;
                        if (terminal.cflag == 0)
                        {
                            terminal.SendNetEvents.Enqueue(evn);
                            try
                            {
                                //XmlOperatorOrder xmlorder = new XmlOperatorOrder();
                                //xmlorder.orderno = oneorder.OrderNo;
                                //xmlorder.datatime = DateTime.Now.ToString();
                                //xmlorder.cdbno = cuwugui.CDB.CDBNO;
                                //xmlorder.cmno = strStation;
                                //xmlorder.status = "1";
                                //xmlorder.datatime = DateTime.Now.ToString();
                                //xmlorder.Modify();
                            }
                            catch
                            {
                            }
                        }
                        //事件通知界面更新
                        terminal.fireEvent(nui);
                        tools.insertLog(strStation + "号仓租借出仓失败" + strcmds, Logtype.J);
                        //Thread.Sleep(3000);
                        //StartEvent.Set();
                    }
                }
            }
            else if (data[3] == 'F')//字母S,当下位机执行完任务后返回执行的状态,上位机需要答复下位机,即通知下位机已经收到;
            {
                //terminal.jieMonitor.Stop();
                terminal.BCEvent.Set();
                terminal.udplog.logs.Enqueue(DateTime.Now.ToString() + "回复" + strcmds);
                int     flag    = data[4];
                CUWUGUI cuwugui = (CUWUGUI)terminal.Cuwuguis[strStation];//更新储物柜
                cuwugui.LastLostTime = DateTime.Now;
                cuwugui.HasLostCnt   = 0;
                if (flag == 1 || flag == 0x21)
                {
                    terminal.udplog.logs.Enqueue(strStation + "借出完成");
                    terminal.jieResult = 1;
                    EventUI nui = new EventUI();
                    nui.huodao = strStation;
                    nui.UIType = UIUpdateType.ChuHuoF;
                    nui.Msg    = "出货完成";
                    //回复云端任务执行状态


                    //事件通知界面更新
                    terminal.fireEvent(nui);


                    //完成出货,更新储物柜状态和
                    //ReponseWorkEvent evn = new ReponseWorkEvent();
                    //evn.workNo = oneorder.OrderNo;

                    //evn.workstatus = true;
                    ////lock (Cuwuguis)
                    ////{

                    //evn.workNo = oneorder.OrderNo;
                    //evn.CDB = cuwugui.CDB.CDBNO;
                    //cuwugui.CommTime = DateTime.Now;
                    //cuwugui.CWGStatus = CUWUGUISTATUS.None;
                    //cuwugui.CWGCommStatus = CWGCOMMSTATUS.OK;
                    //cuwugui.JieLost = 0;

                    //cuwugui.CDB = null;
                    //cuwugui.Cmd = null;
                    //Cuwuguis[strStation] = cuwugui;//将储物柜保存回去
                    ////}
                    terminal.oneorder.status    = true;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoF;
                    tools.insertLog(DateTime.Now.ToString() + " " + strStation + "号仓借出完成" + strcmds, Logtype.J);
                    Thread.Sleep(1000);
                    terminal.StartEvent.Set();
                    //evn.workstatus = true;
                    //if (cflag == 0)
                    //{

                    //    //SendNetEvents.Enqueue(evn);
                    //}
                    // ResponseWorkStatus();
                }
                else
                {
                    terminal.jieResult = -5;
                    terminal.udplog.logs.Enqueue(DateTime.Now.ToString() + ":请求租借出货完成F0,未取走");
                    EventUI nui = new EventUI();
                    nui.UIType = UIUpdateType.ChuHuoL;
                    nui.Msg    = "出货失败";
                    nui.Flag   = false;
                    nui.huodao = strStation;
                    //事件通知界面更新
                    terminal.fireEvent(nui);
                    terminal.oneorder.status    = true;
                    terminal.oneorder.nowstatus = UIUpdateType.ChuHuoL;
                    terminal.oneorder.iTryCnt   = 3;
                    cuwugui.CommTime            = DateTime.Now;
                    cuwugui.CWGStatus           = CUWUGUISTATUS.None;
                    cuwugui.CWGCommStatus       = CWGCOMMSTATUS.OK;
                    cuwugui.JieLost             = 0;

                    //cuwugui.CDB = null;
                    cuwugui.Cmd = null;
                    //if(Test_Mode==0)//如果是测试模式 则不需保存
                    terminal.Cuwuguis[strStation] = cuwugui;//将储物柜保存回去

                    tools.insertLog(strStation + "号仓借出未取走" + strcmds, Logtype.J);
                    Thread.Sleep(3000);
                    terminal.StartEvent.Set();
                }
            }
            else
            {
                if (next == null)
                {
                    // log.Info("用户" + client.ApplicationID + "执行的ID为" + Command.EventCommandID + "的指令没有对应执行器.");
                    result.ResultType = BasisCommandResult.CommandResultTypeEnum.NoRespnoseExecutor;
                    result.Content    = null;
                    return(result);
                }
                else
                {
                    return(this.next.Execute(Command));
                }
            }
            return(result);
        }