Beispiel #1
0
 /// <summary>
 /// 定时执行消费机业务
 /// </summary>
 /// <param name="obj"></param>
 void tmEateryGather(object obj)
 {
     QueryDataRes query = new QueryDataRes("消费机管理");
     NameObjectList ps = new NameObjectList();
     DataTable tab = query.getTable("消费机管理", ps);
     if (null == tab || tab.Rows.Count < 1)
         return;
     myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 启动定时执行");
     CommiManager commimgr = CommiManager.GlobalManager;
     for (int i = 0; i < tab.Rows.Count; i++)
     {
         DataRow dr = tab.Rows[i];
         if (null == dr || DBNull.Value == dr["ID"] || DBNull.Value == dr["站址"])
             continue;
         string devid = Convert.ToString(dr["ID"]);
         int station = Convert.ToInt32(dr["站址"]);
         string devname = devname = Convert.ToString(dr["名称"]);
         myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 消费设备:" + Convert.ToString(dr["站址"]) + " " + devname);
         CommiTarget target = this.getTarget(dr);
         if (null == target) continue;
         DeviceEatery device = new DeviceEatery();
         target.setProtocol(Protocol.PTLEatery);
         device.IsPatrol = false;
         device.dtBeat = DateTime.Now;
         device.SetDevice(commimgr, target, devid, station);
         string msg = device.GatherData(true);
         string cardnum = basefun.valtag(msg, "{卡号}");
         myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 采集信息   0:" + msg);
         if ("0" == cardnum || "16777215" == cardnum)
         {
             if (device.IsEndReadDevice(-1))
                 continue;
         }
         int index = 1;
         while (!string.IsNullOrEmpty(cardnum))
         {
             msg = device.GatherData(false);
             myLog.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 采集信息" + Convert.ToString(index++).PadLeft(4, ' ') + ":" + msg);
             cardnum = basefun.valtag(msg, "{卡号}");
             if ("0" != cardnum && "16777215" != cardnum)
             {
                 if (device.IsEndReadDevice(-1))
                     break;
             }
         }
     }
 }
Beispiel #2
0
 private static void gatherData(object obj)
 {
     dtRunHdl = DateTime.Now;
     while (true)
     {
         hdlWh.Reset();
         for (int i = 0; i < 200; i++)
         {
             if (dvQueue.Count > 0)
             {
                 break;
             }
             dtRunHdl = DateTime.Now;
             hdlWh.WaitOne(20);
         }
         if (dvQueue.Count < 1)
         {
             dtRunHdl = DateTime.MinValue;
             break;
         }
         DeviceEatery eatery = null;
         Monitor.Enter(dvQueue);
         try { eatery = dvQueue.Dequeue(); }
         catch { }
         Monitor.PulseAll(dvQueue);
         Monitor.Exit(dvQueue);
         if (null == eatery)
         {
             continue;
         }
         //采集记录
         eatery.reChecking(0);
         CmdProtocol cmdP = new CmdProtocol(false);
         setTimeout(cmdP);
         cmdP.TimeFailLimit   = cmdP.TimeOut.Add(new TimeSpan(-10 * 10000));
         cmdP.TimeLimit       = TimeSpan.MaxValue;
         cmdP.TimeSendInv     = new TimeSpan(1, 0, 0);
         cmdP.ResponseHandle += new EventHandler <ResponseEventArgs>(eatery.execResponse);
         string tag = "@设备地址=" + Convert.ToString(eatery.station);
         NameValueCollection datainfo = new NameValueCollection();
         for (int i = 0; i < 200; i++)
         {
             string strcmd = i < 1 ? "取当前消费记录" : "取下一条消费记录";
             if ("补助机" == eatery.devName)
             {
                 strcmd = i < 1 ? "取当前补助记录" : "取下一条补助记录";
             }
             string msg = eatery.getResponse(eatery.commimgr, eatery.target, cmdP, strcmd, tag, eatery.waitTime);
             if (string.IsNullOrEmpty(msg))
             {
                 continue;
             }
             string cardnum = basefun.valtag(msg, "{卡号}");
             string suc     = basefun.valtag(msg, "Success");
             if ("true" != suc || "16777215" == cardnum || "0" == cardnum)
             {
                 eatery.commimgr.RemoveCommand(eatery.target, cmdP);
                 bool isend = basefun.valtag(msg, "{状态}").Contains("无新记录");
                 if (!isend)
                 {
                     isend = eatery.IsEndReadDevice(-1);
                 }
                 //记录错误时记入日志,继续下一条
                 if ("false" == suc)
                 {
                     datainfo["操作"] = "读取记录失败";
                     datainfo["报文"] = CommandBase.Parse(cmdP.ResponseData, true);
                     ServiceTool.LogMessage(msg, datainfo, EventLogEntryType.FailureAudit);
                 }
                 if (isend)
                 {
                     break;
                 }
             }
             eatery.writeRecord(msg);
         }
         eatery.commimgr.RemoveCommand(eatery.target, cmdP);
         eatery.reChecking(1);
     }
 }