Exemplo n.º 1
0
        public static void InsertCwgRecord(CUWUGUI cwg)
        {
            string insertsql = "INSERT INTO cd_cdb(data_time,cd_no,cdb_isNull,cdb_no,cdb_power,cdb_temp,cdb_is_in_power,cdb_use_cnt,cd_temp,cd_Adl,cd_5V,cd_12V,cd_status) VALUES "
                               + "('{0}',{1},{2},'{3}',{4},{5},{6},{7},{8},{9},{10},{11},{12})";
            string data_time       = DateTime.Now.ToString();
            string cd_no           = "0";
            string cdb_isNull      = "0";
            string cdb_no          = "00000000000000000000";
            string cdb_power       = "0";
            string cdb_temp        = "0";
            string cdb_is_in_power = "0";
            string cdb_use_cnt     = "0";
            string cd_temp         = "0";
            string cd_Adl          = "0";
            string cd_5V           = "0";
            string cd_12V          = "0";
            string cd_status       = "0";

            cd_no     = cwg.CWGID;
            cd_temp   = cwg.Temp.ToString();
            cd_12V    = cwg.V12.ToString();
            cd_5V     = cwg.V5.ToString();
            cd_Adl    = cwg.Adl.ToString();
            cd_status = cwg.errorflag.ToString();

            if (cwg.CWGStatus == CUWUGUISTATUS.None)
            {
                cdb_isNull = "1";
            }
            if (cwg.CWGStatus == CUWUGUISTATUS.SetingPower)
            {
                cdb_is_in_power = "1";
            }
            if (cwg.CDB != null)//
            {
                Chongdianbao cdb = cwg.CDB;
                cdb_no      = cdb.CDBNO;
                cdb_power   = cdb.PowerDeep.ToString();
                cdb_temp    = cdb.temp.ToString();
                cdb_use_cnt = cdb.UseCnt.ToString();
            }
            string sql = string.Format(insertsql, data_time, cd_no, cdb_isNull, cdb_no, cdb_power, cdb_temp, cdb_is_in_power, cdb_use_cnt, cd_temp, cd_Adl, cd_5V, cd_12V, cd_status);

            laidian.DbHelperSQL.ExecuteSql(sql);
        }
Exemplo n.º 2
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);
        }