コード例 #1
0
ファイル: api.ashx.cs プロジェクト: wwkkww1983/ice-grid
 public void Send(HttpContext context)
 {
     if (operaSocket.CONNECT_POOL.ContainsKey("002001"))
     {
         MechineUtil.sendErrorMsg("25", "4", "25", "1111");
     }
 }
コード例 #2
0
ファイル: api.ashx.cs プロジェクト: wwkkww1983/ice-grid
 public Boolean getMechineStatus(string jiqiid)
 {
     if (webSocket.CONNECT_POOL.ContainsKey(jiqiid))            //判断客户端是否在线
     {
         WebSocket destSocket = webSocket.CONNECT_POOL[jiqiid]; //目的客户端
         string    status     = RedisHelper.GetRedisModel <string>(jiqiid + "_gkjStatus");
         if (status == "10")
         {
             log("下位机脱机=" + jiqiid, "连接信息.txt");
             return(false);
         }
         if (destSocket != null && destSocket.State == WebSocketState.Open)
         {
             return(true);
         }
         else//连接关闭
         {
             log("出现异常移除机器mechineID=" + jiqiid, "连接信息.txt");
             MechineUtil.updateMechineStatus(jiqiid, "1");
             webSocket.CONNECT_POOL.Remove(jiqiid);
             return(false);
         }
     }
     return(false);
 }
コード例 #3
0
        private void minTimer_1_ElapsedT(object source, ElapsedEventArgs e)
        {
            if (DateTime.Now.ToString("HH:mm") == "00:02")//删除一些历史记录
            {
                //更新广告期限状态
                string sql = "update asm_videoAddMechine set zt=1 where ((tfType=1 and times>=tfcs) or (tfType=2 and GETDATE()>=valiDate)) and mechineID='" + id + "' ";
                Util.log("asm_videoAddMechine:sql=" + sql, id + "taskday.txt");
                DbHelperSQL.ExecuteSql(sql);
                RedisHelper.Remove(id + "_VideoAddMechine");
            }
            if (DateTime.Now.ToString("HH:mm") == "00:03")//清空订购料道信息
            {
                string sql = "update asm_ldInfo set ld_productNum=0 ,productID='' where type=1 and mechineID='" + id + "' ";
                Util.log("asm_ldInfo:sql=" + sql, id + "taskday.txt");
                DbHelperSQL.ExecuteSql(sql);
                RedisHelper.Remove(id + "_LDList");
            }
            if (DateTime.Now.ToString("HH:mm") == "00:10")//给安卓发命令让安卓打包日志
            {
                BlockModel msgmodel = new BlockModel();
                msgmodel.ID      = id;
                msgmodel.MsgId   = Util.GetTimeStamp();
                msgmodel.cmd     = "pack";
                msgmodel.SendMsg = "{\"packTime\":\"" + DateTime.Now.AddDays(-1).ToString("yyyyMMdd") + "\"}";
                Util.log("安卓日志打包:" + msgmodel.SendMsg, id + "taskday.txt");
                sendMessageToAndroid(msgmodel);
            }

            MechineUtil.readZTMechine2(id);
        }
コード例 #4
0
ファイル: api.ashx.cs プロジェクト: wwkkww1983/ice-grid
        public void SendLDError(HttpContext context)
        {
            try
            {
                string ldno      = context.Request["ldno"].ToString();
                string mechineID = context.Request["mechineID"].ToString();

                MechineUtil.sendErrorMsg(mechineID, "1", "", ldno);
            }
            catch {
            }
        }
コード例 #5
0
        //发送不需要等待返回值的命令
        public static void sendMessageToAndroid(BlockModel msgmodel)
        {
            if (webSocket.CONNECT_POOL.ContainsKey(msgmodel.ID))            //判断客户端是否在线
            {
                WebSocket destSocket = webSocket.CONNECT_POOL[msgmodel.ID]; //目的客户端


                if (destSocket != null && destSocket.State == WebSocketState.Open)
                {
                    destSocket.SendAsync(sendmsg(JsonConvert.SerializeObject(msgmodel)), WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else//连接关闭
                {
                    MechineUtil.updateMechineStatus(msgmodel.ID, "1");
                    webSocket.CONNECT_POOL.Remove(msgmodel.ID);
                }
            }
            else
            {
            }
        }
コード例 #6
0
ファイル: api.ashx.cs プロジェクト: wwkkww1983/ice-grid
        public static async System.Threading.Tasks.Task sendorderAsync(string jiqiid, string text)
        {
            log("mechineID=" + jiqiid + ";内容=" + text, "给客户端发消息.txt");
            if (webSocket.CONNECT_POOL.ContainsKey(jiqiid))            //判断客户端是否在线
            {
                WebSocket destSocket = webSocket.CONNECT_POOL[jiqiid]; //目的客户端


                if (destSocket != null && destSocket.State == WebSocketState.Open)
                {
                    await destSocket.SendAsync(sendmsg(text), WebSocketMessageType.Text, true, CancellationToken.None);
                }
                else //连接关闭
                {
                    log("出现异常移除机器mechineID=" + jiqiid, "连接信息.txt");
                    MechineUtil.updateMechineStatus(jiqiid, "1");
                    webSocket.CONNECT_POOL.Remove(jiqiid);
                }
            }
            else
            {
            }
        }
コード例 #7
0
        //根据超时 时间 发送短信给 操作员和公司负责人
        private void sendNetOKStatusMsg(string time)
        {
            MechineUtil.updateMechineStatus(id, "0");
            DataTable da = getJiQiDetail();

            if (da != null && da.Rows.Count > 0)
            {
                string operaID   = da.Rows[0]["dls"].ToString();
                string companyID = da.Rows[0]["companyID"].ToString();

                string companyPhone = getCompanyPhone(companyID);
                string operaPhone   = getOperaPhone(operaID);
                if (!string.IsNullOrEmpty(companyPhone))
                {
                    Util.log(id + "time:{" + time + "},发送重连成功短信", id + "jiQiOutTime.txt");
                    OperUtil.sendMessage2(companyPhone, name, ((int)(int.Parse(time) / 60)).ToString());
                }
                if (!string.IsNullOrEmpty(operaPhone))
                {
                    Util.log(id + "time:{" + time + "},发送重连成功短信", id + "jiQiOutTime.txt");
                    OperUtil.sendMessage2(operaPhone, name, ((int)(int.Parse(time) / 60)).ToString());
                }
            }
        }
コード例 #8
0
ファイル: webSocket.ashx.cs プロジェクト: wwkkww1983/ice-grid
        private async Task ProcessChat(AspNetWebSocketContext context)
        {
            Util.log("ProcessChat", "测试socket.txt");
            WebSocket socket    = context.WebSocket;
            string    msg       = string.Empty;
            string    mechineID = context.QueryString["mechineID"].ToString();

            StringBuilder sb = new StringBuilder();

            try
            {
                //第一次open时,添加到连接池中

                //第一次open时,添加到连接池中
                if (!CONNECT_POOL.ContainsKey(mechineID))
                {
                    log("添加机器mechineID=" + mechineID, "连接信息.txt");
                    MechineUtil.updateMechineStatus(mechineID, "0");
                    CONNECT_POOL.Add(mechineID, socket);//不存在,添加
                }
                else
                {
                    if (socket != CONNECT_POOL[mechineID])//当前对象不一致,更新
                    {
                        CONNECT_POOL[mechineID] = socket;
                    }
                }
                while (true)
                {
                    ArraySegment <byte>    buffer3 = new ArraySegment <byte>(new byte[2048]);
                    WebSocketReceiveResult result2 = await socket.ReceiveAsync(buffer3, CancellationToken.None);

                    try
                    {
                        sb.Clear();
                        #region 关闭Socket处理,删除连接池
                        if (socket.State != WebSocketState.Open)//连接关闭
                        {
                            if (CONNECT_POOL.ContainsKey(mechineID))
                            {
                                log("移除机器mechineID=" + mechineID, "连接信息.txt");
                                MechineUtil.updateMechineStatus(mechineID, "1");
                                CONNECT_POOL.Remove(mechineID);//删除连接池
                            }
                            break;
                        }

                        if (!CONNECT_POOL.ContainsKey(mechineID))
                        {
                            log("发消息添加机器mechineID=" + mechineID, "连接信息.txt");
                            MechineUtil.updateMechineStatus(mechineID, "0");
                            CONNECT_POOL.Add(mechineID, socket);//不存在,添加
                        }
                        else
                        {
                            if (socket != CONNECT_POOL[mechineID])//当前对象不一致,更新
                            {
                                CONNECT_POOL[mechineID] = socket;
                            }
                        }

                        #endregion
                        string userMsg = Encoding.UTF8.GetString(buffer3.Array, 0, result2.Count);//发送过来的消息


                        if (string.IsNullOrEmpty(userMsg))
                        {
                            return;
                        }
                        if (mechineID == "68" || mechineID == "69")
                        {
                            string mechineInfo = RedisUtil.getMechine(mechineID);
                            JArray jay         = RedisUtil.DeserializeObject(mechineInfo);

                            jay[0]["lastReqTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                            RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));



                            JObject jo         = JObject.Parse(userMsg);
                            string  cmd        = jo["cmd"].ToString();
                            string  mechine_ID = jo["mechineID"].ToString();
                            JObject samtypejo  = JObject.Parse(jo["samtype"].ToString());

                            if (cmd == "video")
                            {
                                Util.log(userMsg, mechineID + "_视频播放记录.txt");
                                string videoID = jo["videoID"].ToString();
                                //{"cmd":"video","mechineID":"51","videoID":"175","times":1,"time":"2019-08-06 00:00:05"}
                                //到redis用video+mechineID获取该机器的今日播放数据
                                //不存在就创建今日播放数据

                                //取出播放记录的视频ID,到redis今日播放数据里面取播放量,不存在,则增加该视频ID到redis记录里,存在则数据加1,更新redis
                                //播放数据的日期是一小时前更新播放数据到数据库并且清除该redis
                                //用这个类似写法写 await socket.SendAsync(sendmsg(msg), WebSocketMessageType.Text, true, CancellationToken.None);
                                await Util.playCount(mechineID, videoID);
                            }
                            //新增调试
                            //////////////////////////////////////////////////////////////////////////////////////
                            //eventWait是发送消息后的“等待”集合,客户端发来消息后首先看是否有正在等待此客户端发的此消息的线程在跑,有则取出来
                            if (BlockService.eventWait.ContainsKey(mechine_ID))
                            {
                                Dictionary <string, EventWaitHandle> callMap = BlockService.eventWait[mechine_ID];
                                if (callMap != null && callMap.ContainsKey(jo["MsgId"].ToString()))
                                {
                                    //在此处已经取出等待线程
                                    EventWaitHandle callBack = callMap[jo["MsgId"].ToString()];

                                    //将此次传回来的消息存到集合中
                                    //首先判断将此次传回来的消息是否已经存在,存在更新掉,不存在创建
                                    if (BlockService.msgList.ContainsKey(mechine_ID))
                                    {
                                        BlockService.msgList[mechine_ID].Add(jo["MsgId"].ToString(), jo["samtype"].ToString());
                                    }
                                    else
                                    {
                                        Dictionary <string, string> msginfo = new Dictionary <string, string>();
                                        msginfo.Add(jo["MsgId"].ToString(), jo["samtype"].ToString());
                                        BlockService.msgList.Add(mechine_ID, msginfo);
                                    }

                                    //放开此消息的等待方法
                                    callBack.Set();

                                    //在等待集合中移除此等待
                                    callMap.Remove(jo["MsgId"].ToString());
                                }
                            }

                            if (cmd == "heartbeat")
                            {
                                //JObject samtypejo = JObject.Parse(jo["samtype"].ToString());
                                Util.log("samtype.ToString()" + jo["samtype"].ToString(), mechine_ID + "heartbeat.txt");
                                //安卓产品序列号1
                                if (jay[0]["priceSwitch"].ToString() != samtypejo["priceSwitch"].ToString())
                                {
                                    Util.log("安卓产品序列号1" + jay[0]["priceSwitch"].ToString() + ";" + samtypejo["priceSwitch"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["priceSwitch"] = samtypejo["priceSwitch"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                }
                                //安卓产品序列号2
                                if (jay[0]["androidProductNo"].ToString() != samtypejo["productListNo"].ToString())
                                {
                                    Util.log("安卓产品序列号2" + jay[0]["androidProductNo"].ToString() + ";" + samtypejo["productListNo"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["androidProductNo"] = samtypejo["productListNo"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                }
                                //安卓产品类型号
                                if (jay[0]["productTypeNo"].ToString() != samtypejo["productTypeNo"].ToString())
                                {
                                    Util.log("安卓产品类型号" + jay[0]["productTypeNo"].ToString() + ";" + samtypejo["productTypeNo"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["productTypeNo"] = samtypejo["productTypeNo"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                }
                                //安卓视频号
                                if (jay[0]["videoListNo"].ToString() != samtypejo["videoListNo"].ToString())
                                {
                                    Util.log("安卓视频号" + jay[0]["videoListNo"].ToString() + ";" + samtypejo["videoListNo"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["videoListNo"] = samtypejo["videoListNo"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                }

                                //以下是数据库真实存在字段的,需要更新数据库
                                //安卓版本号
                                if (jay[0]["softversion"].ToString() != samtypejo["version"].ToString())
                                {
                                    Util.log("安卓版本号softversion" + jay[0]["softversion"].ToString() + ";" + samtypejo["version"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["softversion"] = samtypejo["version"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                    string sql = "update asm_mechine set softversion='" + jay[0]["softversion"].ToString() + "'  where id='" + mechine_ID + "'";
                                    int    a   = DbHelperSQL.ExecuteSql(sql);
                                }
                                //安卓版本序号
                                if (jay[0]["verCode"].ToString() != samtypejo["vercode"].ToString())
                                {
                                    Util.log("verCode" + jay[0]["verCode"].ToString() + ";" + samtypejo["vercode"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["verCode"] = samtypejo["vercode"].ToString();
                                    if (jay[0]["verCode"].ToString() == jay[0]["newVerCode"].ToString())
                                    {
                                        jay[0]["updateSoftStatus"] = "0";
                                    }

                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                    string sql = "update asm_mechine set verCode='" + jay[0]["verCode"].ToString() + "'  where id='" + mechine_ID + "'";
                                    int    a   = DbHelperSQL.ExecuteSql(sql);
                                }
                                //工控机状态
                                if (jay[0]["gkjStatus"].ToString() != samtypejo["gkjStatus"].ToString())
                                {
                                    Util.log("gkjStatus" + jay[0]["gkjStatus"].ToString() + ";" + samtypejo["gkjStatus"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["gkjStatus"] = samtypejo["gkjStatus"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));

                                    string sql = "update asm_mechine set gkjStatus='" + jay[0]["gkjStatus"].ToString() + "'  where id='" + mechine_ID + "'";
                                    int    a   = DbHelperSQL.ExecuteSql(sql);
                                }

                                //安卓信号类型
                                if (jay[0]["netWorkType"].ToString() != samtypejo["netWorkType"].ToString())
                                {
                                    Util.log("安卓信号类型" + jay[0]["netWorkType"].ToString() + ";" + samtypejo["netWorkType"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["netWorkType"] = samtypejo["netWorkType"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                    string sql = "update asm_mechine set netWorkType='" + jay[0]["netWorkType"].ToString() + "'  where id='" + mechine_ID + "'";
                                    int    a   = DbHelperSQL.ExecuteSql(sql);
                                }
                                //安卓信号等级
                                if (jay[0]["netLevel"].ToString() != samtypejo["netLevel"].ToString())
                                {
                                    Util.log("安卓信号等级" + jay[0]["netLevel"].ToString() + ";" + samtypejo["netLevel"].ToString(), mechine_ID + "heartbeat.txt");
                                    jay[0]["netLevel"] = samtypejo["netLevel"].ToString();
                                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                                    string sql = "update asm_mechine set netLevel='" + jay[0]["netLevel"].ToString() + "'  where id='" + mechine_ID + "'";
                                    int    a   = DbHelperSQL.ExecuteSql(sql);
                                }
                                //取货门时长(秒)
                                //轮询时间差(分钟)
                                try
                                {
                                    //处理机器长时间没有正常工作的异常
                                    await Util.samtypeNew(mechine_ID, jo["samtype"].ToString(), mechineInfo);
                                }
                                catch (Exception e)
                                {
                                    log("ceshikaishi=" + e.ToString(), "_" + mechine_ID + "_心跳.txt");
                                    throw;
                                }
                            }

                            if (cmd == "ch")
                            {
                                JObject sendMsgjo  = JObject.Parse(jo["SendMsg"].ToString());
                                string  samtypecmd = samtypejo["cmd"].ToString();

                                //说明接受到出货指令
                                if (samtypecmd == "chReceive")
                                {
                                    Util.log("chReceive:" + sendMsgjo["billno"].ToString(), mechineID + "ch流程.txt");
                                    string  mechineChInfoString = RedisUtil.getMechineChString(mechineID);             //出货信息缓存
                                    JObject mechineIDCHObj      = JObject.Parse(mechineChInfoString);
                                    string  chInfo = mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()].ToString(); //出货信息缓存
                                    JObject chjay  = JObject.Parse(chInfo);
                                    if (chjay != null)
                                    {
                                        chjay["CHStatus"] = "chReceive";
                                        mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()] = chjay.ToString();
                                        RedisHelper.SetRedisModel <string>("CH" + mechineID, mechineIDCHObj.ToString());  //出货信息缓存
                                    }
                                }
                                //说明进入轮询
                                if (samtypecmd == "chForeach")
                                {
                                    Util.log("chForeach:" + sendMsgjo["billno"].ToString(), mechineID + "ch流程.txt");
                                    string  mechineChInfoString = RedisUtil.getMechineChString(mechineID);             //出货信息缓存
                                    JObject mechineIDCHObj      = JObject.Parse(mechineChInfoString);
                                    string  chInfo = mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()].ToString(); //出货信息缓存
                                    JObject chjay  = JObject.Parse(chInfo);
                                    if (chjay != null)
                                    {
                                        chjay["CHStatus"] = "chForeach";
                                        mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()] = chjay.ToString();

                                        RedisHelper.SetRedisModel <string>("CH" + mechineID, mechineIDCHObj.ToString());  //出货信息缓存
                                    }
                                }
                                //交易忙
                                if (samtypecmd == "chBusy")
                                {
                                    string  mechineChInfoString = RedisUtil.getMechineChString(mechineID);             //出货信息缓存
                                    JObject mechineIDCHObj      = JObject.Parse(mechineChInfoString);
                                    string  chInfo = mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()].ToString(); //出货信息缓存
                                    JObject chjay  = JObject.Parse(chInfo);
                                    if (chjay != null)
                                    {
                                        chjay["CHStatus"] = "chBusy";
                                        mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()] = chjay.ToString();

                                        RedisHelper.SetRedisModel <string>("CH" + mechineID, mechineIDCHObj.ToString());  //出货信息缓存
                                    }
                                }
                                //正在出货
                                if (samtypecmd == "chAlways")
                                {
                                    string  mechineChInfoString = RedisUtil.getMechineChString(mechineID);;            //出货信息缓存
                                    JObject mechineIDCHObj      = JObject.Parse(mechineChInfoString);
                                    string  chInfo = mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()].ToString(); //出货信息缓存
                                    JObject chjay  = JObject.Parse(chInfo);
                                    if (chjay != null)
                                    {
                                        chjay["CHStatus"] = "chAlways";
                                        mechineIDCHObj["CH" + sendMsgjo["billno"].ToString()] = chjay.ToString();

                                        RedisHelper.SetRedisModel <string>("CH" + mechineID, mechineIDCHObj.ToString());  //出货信息缓存
                                    }
                                }
                                //出货成功
                                if (samtypecmd == "chSuccess")
                                {
                                    if (!string.IsNullOrEmpty(sendMsgjo["billno"].ToString()))
                                    {
                                        /////
                                        string sql = "update asm_pay_info set chzt=1  where trxid='" + sendMsgjo["billno"].ToString() + "'";
                                        Util.log("chSuccess:sql;" + sql, mechineID + "ch流程.txt");
                                        int a = DbHelperSQL.ExecuteSql(sql);
                                    }

                                    /////

                                    string upSellRecord = samtypejo["upSellRecord"].ToString();
                                    Util.log("chSuccess:" + sendMsgjo["billno"].ToString() + "; " + upSellRecord, mechineID + "ch流程.txt");
                                    MechineUtil.uploadSellDetail(upSellRecord);

                                    //需要处理相关产品的信息redis更新


                                    //成功方法
                                    //
                                }
                                //出货失败
                                if (samtypecmd == "chFail")
                                {
                                    string upSellRecord = samtypejo["upSellRecord"].ToString();
                                    Util.log("chFail:" + sendMsgjo["billno"].ToString() + "; " + upSellRecord, mechineID + "ch流程.txt");
                                    MechineUtil.uploadSellDetail(upSellRecord);

                                    //需要处理相关产品的信息redis更新


                                    //
                                }
                            }
                            if (cmd == "startNeed")
                            {
                                Util.log("收到startNeed", "startNeed.txt");
                                JiQi.updateProductType(mechineID);
                                JiQi.updateProductView(mechineID);
                                JiQi.updategetVideoList(mechineID);
                                Util.log("startNeed结束", "startNeed.txt");
                            }
                            if (cmd == "updateSoft")
                            {
                                jay[0]["updateSoftStatus"] = samtypejo["updateSoftStatus"].ToString();
                                string sqlUpdate = "update asm_mechine set updateSoftStatus=" + samtypejo["updateSoftStatus"].ToString() + " where id='" + mechineID + "'";
                                Util.log("updateSoftStatus.ToString()" + samtypejo["updateSoftStatus"].ToString() + ";" + sqlUpdate, mechineID + "updateSoftStatus.txt");
                                DbHelperSQL.ExecuteSql(sqlUpdate);
                                RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", JsonConvert.SerializeObject(jay));
                            }
                        }
                        else
                        {
                            Util.log(userMsg, "测试socket.txt");
                            JObject jo         = JObject.Parse(userMsg);
                            string  cmd        = jo["cmd"].ToString();
                            string  mechine_ID = jo["mechineID"].ToString();
                            Util.log("jo" + jo.ToString(), "测试socket.txt");



                            try
                            {
                                //处理机器长时间没有正常工作的异常
                                await Util.samtype(mechine_ID, jo["samtype"].ToString());
                            }
                            catch (Exception e)
                            {
                                log("ceshikaishi=" + e.ToString(), "_" + mechine_ID + "_心跳.txt");
                                throw;
                            }



                            if (cmd != "memory")
                            {
                                log("IP:" + context.UserHostAddress + ";userMsg=" + userMsg, "_" + mechineID + "_所有指令.txt");
                            }
                            if (cmd == "app.heartbeat")
                            {
                                sb.Append(GetJson("cmd", "app.heartbeat"));
                                sb.Append(GetJson("msg", "心跳"));
                                msg = ReturnJson(context, sb);
                                log("userMsg=" + userMsg, "_" + mechine_ID + "_心跳.txt");
                                try
                                {
                                    string GKJStatus = jo["GKJStatus"].ToString();
                                    string status    = RedisHelper.GetRedisModel <string>(mechineID + "_gkjStatus");
                                    if (int.Parse(GKJStatus) >= 10)
                                    {
                                        if (status != "10")
                                        {
                                            RedisHelper.SetRedisModel <string>(mechineID + "_gkjStatus", "10", new TimeSpan(12, 0, 0));
                                            //机器下位脱机
                                            log("机器下位脱机=脱机", "_" + mechine_ID + "_心跳.txt");
                                        }
                                    }
                                    else
                                    {
                                        if (status != "0")
                                        {
                                            RedisHelper.SetRedisModel <string>(mechineID + "_gkjStatus", "0", new TimeSpan(12, 0, 0));
                                            //机器下位脱机
                                            log("机器下位脱机=重连", "_" + mechine_ID + "_心跳.txt");
                                        }
                                    }
                                }
                                catch
                                {
                                }
                            }
                            if (cmd == "lx")
                            {
                                log("userMsg=" + userMsg, "_" + mechineID + "_指令.txt");
                            }
                            if (cmd == "all")
                            {
                                log("userMsg=" + userMsg, "_" + mechineID + "_app端接收的指令.txt");
                            }
                            if (cmd == "video")
                            {
                                string videoID = jo["videoID"].ToString();
                                //{"cmd":"video","mechineID":"51","videoID":"175","times":1,"time":"2019-08-06 00:00:05"}
                                //到redis用video+mechineID获取该机器的今日播放数据
                                //不存在就创建今日播放数据

                                //取出播放记录的视频ID,到redis今日播放数据里面取播放量,不存在,则增加该视频ID到redis记录里,存在则数据加1,更新redis
                                //播放数据的日期是一小时前更新播放数据到数据库并且清除该redis
                                //用这个类似写法写 await socket.SendAsync(sendmsg(msg), WebSocketMessageType.Text, true, CancellationToken.None);
                                await Util.playCount(mechineID, videoID);

                                logVideo(userMsg, mechineID + "_视频播放记录.txt");
                            }
                            if (cmd == "tem")
                            {
                                try
                                {
                                    logVideo(userMsg, mechineID + "_温度记录.txt");
                                    string temperature = jo["value"].ToString();
                                    if (double.Parse(temperature) > 10)
                                    {
                                        MechineUtil.AddTemBrokenRecord(mechineID, temperature);
                                    }
                                }
                                catch
                                {
                                }
                            }
                            if (cmd == "log")
                            {
                                log("userMsg=" + userMsg, "_" + mechineID + "_log.txt");
                            }
                            if (cmd == "record")//上传操作日志
                            {
                                log("userMsg=" + userMsg, "_" + mechineID + "record.txt");
                                try
                                {
                                    //{"cmd":"record","companyID":"14","mechineID":"25","indexCount":5,"smCount":1,"productCount":2,"endCount":0,"productStr":"283,290","version":"1.0.2"}
                                    string companyID    = jo["companyID"].ToString();
                                    string indexCount   = jo["indexCount"].ToString();   //首页次数
                                    string smCount      = jo["smCount"].ToString();      //扫码页面次数
                                    string productCount = jo["productCount"].ToString(); //支付页面次数
                                    string endCount     = jo["endCount"].ToString();     //支付完成
                                    string productStr   = jo["productStr"].ToString();   //选择的产品ID
                                    string billno       = jo["billno"].ToString();       //零售时候传
                                    string type         = jo["type"].ToString();         //1 订购2零售
                                    string memberID     = jo["memberID"].ToString();     //订购时传
                                    string memberStr    = "";
                                    if (type == "2")
                                    {
                                        string    sql1 = "select acct from  asm_pay_info  where trxid='" + billno + "'";
                                        DataTable d1   = DbHelperSQL.Query(sql1).Tables[0];
                                        if (d1.Rows.Count > 0)
                                        {
                                            string    sqlp = "select id from asm_member where openID ='" + d1.Rows[0]["acct"].ToString() + "'";
                                            DataTable dp   = DbHelperSQL.Query(sqlp).Tables[0];
                                            if (dp.Rows.Count > 0)
                                            {
                                                memberID = dp.Rows[0]["id"].ToString();
                                            }
                                            else
                                            {
                                                memberStr = d1.Rows[0]["acct"].ToString();
                                            }
                                        }
                                    }
                                    if (!string.IsNullOrEmpty(productStr))
                                    {
                                        string    sqlp = "SELECT STUFF((SELECT ','+proName FROM  asm_product  where productID in(" + productStr + ") for xml path('')),1,1,'') proName";
                                        DataTable dp   = DbHelperSQL.Query(sqlp).Tables[0];
                                        if (dp.Rows.Count > 0)
                                        {
                                            productStr = dp.Rows[0]["proName"].ToString();
                                        }
                                    }


                                    string sql = "insert into asm_mechineRecord(companyID,mechineID,indexCount,smCount,productCount,endCount,productStr,timeStr,memberStr,type,memberID)"
                                                 + " values(" + companyID + "," + mechineID + "," + indexCount + "," + smCount + "," + productCount + "," + endCount + ",'" + productStr + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + memberStr + "','" + type + "','" + memberID + "')";
                                    log("sql=" + sql, "_" + mechineID + "record.txt");

                                    DbHelperSQL.ExecuteSql(sql);
                                }
                                catch
                                {
                                }
                            }
                            if (cmd == "chBillno")
                            {
                                string billno = jo["billno"].ToString();
                                log("billno=" + billno, "_" + mechineID + "LSCH.txt");
                                RedisHelper.SetRedisModel <string>("CH" + billno, null, new TimeSpan(0, 0, 0));
                            }
                            if (cmd == "chforeach")
                            {
                                string content = jo["content"].ToString();
                                log("content=" + content, "_" + mechineID + "chforeach.txt");
                            }
                            if (cmd == "upSellRecordList")
                            {
                                string recordList = jo["recordList"].ToString();
                                log("recordList=" + recordList, "_" + mechineID + "upSellRecordList.txt");
                            }
                            if (cmd == "memory")
                            {
                                log("userMsg=" + userMsg, "_" + mechineID + "_memory.txt");
                            }
                            await socket.SendAsync(sendmsg(msg), WebSocketMessageType.Text, true, CancellationToken.None);

                            //获取机器状态
                        }



                        ////////////////////////////////////////////////////////////////////////////////////////
                    }
                    catch (Exception ex)
                    {
                        log("_异常=" + ex.Message, mechineID + "_异常.txt");
                    }
                }
            }
            catch (Exception ex)
            {
                log("2userMsg=" + ex.Message, mechineID + "_异常.txt");
                //整体异常处理
                if (CONNECT_POOL.ContainsKey(mechineID))
                {
                    log("出现异常移除机器mechineID=" + mechineID, "连接信息.txt");
                    MechineUtil.updateMechineStatus(mechineID, "1");
                    CONNECT_POOL.Remove(mechineID);
                }
            }
        }
コード例 #9
0
ファイル: Util.cs プロジェクト: wwkkww1983/ice-grid
        /// <summary>
        /// 处理下位机长时间没有工作的异常警告
        /// </summary>
        /// <param name="mechineID">机器编号</param>
        /// <param name="samtypeString">下位机传回的json 数据</param>
        /// <returns></returns>
        public static async Task samtypeNew(string mechineID, string samtypeString, string mechineString)

        {
            try
            {
                JObject samtype = JObject.Parse(samtypeString);

                JArray jay = RedisUtil.DeserializeObject(mechineString);

                bool bs = false;
                //现在的
                int lastLXTime = int.Parse(samtype["lastLXTime"].ToString());
                //之前的
                int mech_lastLXTime = int.Parse(jay[0]["lastLXTime"].ToString());
                Util.log("lastLXTime" + lastLXTime + ";" + mech_lastLXTime, mechineID + "heartbeat.txt");
                if (lastLXTime > mech_lastLXTime)
                {
                    bs = true;
                    //长时间没连接上下位机
                    jay[0]["lastLXTime"] = lastLXTime;

                    string msg = "机器下位机连接发生异常:" + int.Parse(samtype["lastLXTime"].ToString()) + "分钟请及时处理";
                    MechineUtil.updateMechineStatus(mechineID, "5", "1", msg);
                    MechineUtil.sendErrorMsg(mechineID, "5", msg, "");//推送错误给管理员
                }
                if (mech_lastLXTime > 0 && lastLXTime == 0)
                {
                    bs = true;
                    jay[0]["lastLXTime"] = 0;
                    string msg = "机器下位机已重新连接!";
                    MechineUtil.updateMechineStatus(mechineID, "5", "0", msg);
                }
                int openDoorTime      = int.Parse(samtype["openDoorTime"].ToString());
                int mech_openDoorTime = int.Parse(jay[0]["openDoorTime"].ToString());
                Util.log("openDoorTime" + openDoorTime + ";" + mech_openDoorTime, mechineID + "heartbeat.txt");
                if (openDoorTime > mech_openDoorTime && (openDoorTime / (60 * 5) > 1))
                {
                    bs = true;

                    jay[0]["openDoorTime"] = openDoorTime;

                    string msg = "出货门异常:" + (int)(openDoorTime / 60) + "分钟请及时处理";
                    log("AA4:" + msg, "samtype_" + mechineID + "_所有指令.txt");

                    MechineUtil.updateMechineStatus(mechineID, "6", "1", msg);
                    MechineUtil.sendErrorMsg(mechineID, "6", msg, "");
                }
                if (mech_openDoorTime > 0 && openDoorTime == 0)
                {
                    bs = true;
                    jay[0]["openDoorTime"] = 0;
                    string msg = "出货门已关闭!";
                    MechineUtil.updateMechineStatus(mechineID, "6", "0", msg);
                }


                if (bs)
                {//发生更改 更新 Redis
                    Util.log("jay.ToString()" + jay.ToString(), mechineID + "heartbeat.txt");
                    RedisHelper.SetRedisModel <string>(mechineID + "_mechineInfoSet", jay.ToString());
                }
            }
            catch (Exception e)
            {
                log("AA7:" + e.ToString(), "samtype_" + mechineID + "_所有指令.txt");
            }
        }
コード例 #10
0
ファイル: Util.cs プロジェクト: wwkkww1983/ice-grid
        /// <summary>
        /// 处理下位机长时间没有工作的异常警告
        /// </summary>
        /// <param name="mechineID">机器编号</param>
        /// <param name="samtypeString">下位机传回的json 数据</param>
        /// <returns></returns>
        public static async Task samtype(string mechineID, string samtypeString)

        {
            try
            {
                log("AA1:" + samtypeString, "samtype_" + mechineID + "_所有指令.txt");
                JObject samtype = JObject.Parse(samtypeString);


                string Rsamtype = RedisHelper.GetRedisModel <string>(mechineID + "_samtype");
                log("AA2:" + Rsamtype, "samtype_" + mechineID + "_所有指令.txt");

                if (!string.IsNullOrEmpty(Rsamtype))
                {
                    log("AASSS:", "samtype_" + mechineID + "_所有指令.txt");
                    bool bs = false;
                    //Redis里面有数据
                    JObject Redisjson = JObject.Parse(Rsamtype);
                    Redisjson["samtype"] = samtypeString;
                    int t1      = int.Parse(samtype["t1"].ToString());
                    int mech_C1 = int.Parse(Redisjson["mech_C1"].ToString());
                    if (t1 > mech_C1)
                    {
                        bs = true;
                        //长时间没连接上下位机
                        Redisjson["mech_C1"] = t1;

                        string msg = "机器下位机连接发生异常:" + int.Parse(samtype["t1"].ToString()) + "分钟请及时处理";
                        log("AA3:" + msg, "samtype_" + mechineID + "_所有指令.txt");
                        MechineUtil.sendErrorMsg(mechineID, "5", msg, "");//推送错误给管理员
                    }
                    if (mech_C1 > 0 && t1 == 0)
                    {
                        bs = true;
                        Redisjson["mech_C1"] = 0;
                    }
                    int t4      = int.Parse(samtype["t4"].ToString());
                    int t5      = int.Parse(samtype["t5"].ToString()) / 5;
                    int mech_C2 = int.Parse(Redisjson["mech_C2"].ToString());
                    if (t1 == 0 && t4 > 0 && t5 > mech_C2 && mech_C2 == 0)
                    {
                        bs = true;
                        Redisjson["mech_C2"] = t5;
                        string msg = "出货门异常:" + int.Parse(samtype["t5"].ToString()) + "分钟请及时处理";
                        log("AA4:" + msg, "samtype_" + mechineID + "_所有指令.txt");

                        MechineUtil.sendErrorMsg(mechineID, "6", msg, "");
                    }
                    if (mech_C2 > 0 && t4 == 0)
                    {
                        bs = true;
                        Redisjson["mech_C2"] = 0;
                    }

                    if (bs)
                    {//发生更改 更新 Redis
                        log("AA5:" + Redisjson.ToString(), "samtype_" + mechineID + "_所有指令.txt");
                        RedisHelper.SetRedisModel <string>(mechineID + "_samtype", Redisjson.ToString(), new TimeSpan(12, 0, 0));
                    }
                }
                else
                {//"samtype":"{\"TEXT\":\"Video_的一些状态\",\"t1\":0,\"t2\":4,\"t3\":1,\"t4\":0,\"t5\":0}
                    log("AASBB:", "samtype_" + mechineID + "_所有指令.txt");
                    JObject Redisjson = new JObject();


                    Redisjson.Add("samtype", samtypeString); //
                    Redisjson.Add("mech_C1", 0);             //Video_连接不到下位机发送次数
                    Redisjson.Add("mech_C2", 0);             //Video_不复位发送短信次数
                    log("AA6:" + Redisjson.ToString(), "samtype_" + mechineID + "_所有指令.txt");
                    RedisHelper.SetRedisModel <string>(mechineID + "_samtype", Redisjson.ToString(), new TimeSpan(12, 0, 0));
                }
            }
            catch (Exception e)
            {
                log("AA7:" + e.ToString(), "samtype_" + mechineID + "_所有指令.txt");
            }
        }
コード例 #11
0
ファイル: BlockService.cs プロジェクト: wwkkww1983/ice-grid
        public BlockModel getMsg()
        {
            if (webSocket.CONNECT_POOL.ContainsKey(blockModel.ID))            //判断客户端是否在线
            {
                WebSocket destSocket = webSocket.CONNECT_POOL[blockModel.ID]; //目的客户端


                if (destSocket != null && destSocket.State == WebSocketState.Open)
                {
                    //创建此调用的等待
                    EventWaitHandle _waitHandle = new AutoResetEvent(false);



                    if (eventWait.ContainsKey(blockModel.ID))
                    {
                        eventWait[blockModel.ID].Add(blockModel.MsgId.ToString(), _waitHandle);
                    }
                    else
                    {
                        Dictionary <string, EventWaitHandle> dictionary = new Dictionary <string, EventWaitHandle>();
                        dictionary.Add(blockModel.MsgId.ToString(), _waitHandle);
                        eventWait.Add(blockModel.ID, dictionary);
                    }

                    destSocket.SendAsync(sendmsg(JsonConvert.SerializeObject(blockModel)), WebSocketMessageType.Text, true, CancellationToken.None);

                    Task.Run(() =>
                    {
                        Thread.Sleep(10000);

                        if (eventWait.ContainsKey(blockModel.ID))
                        {
                            Dictionary <string, EventWaitHandle> callMap = eventWait[blockModel.ID];
                            if (callMap.ContainsKey(blockModel.MsgId.ToString()))
                            {
                                EventWaitHandle callBack = callMap[blockModel.MsgId.ToString()];

                                blockModel.Status = 1;
                                callMap.Remove(blockModel.MsgId.ToString());
                                //此处是放开 _waitHandle.WaitOne();等待,继续向下执行,所以此处没有返回值,返回值在最后
                                callBack.Set();
                            }
                        }
                    });
                    _waitHandle.WaitOne();

                    if (msgList.ContainsKey(blockModel.ID))
                    {
                        if (msgList[blockModel.ID].ContainsKey(blockModel.MsgId.ToString()))
                        {
                            blockModel.Status  = 0;
                            blockModel.samtype = msgList[blockModel.ID][blockModel.MsgId.ToString()];
                            msgList[blockModel.ID].Remove(blockModel.MsgId.ToString());
                            //此处是怕因为等待删除和消息新增之间出现问题导致的一些消息没有删除而一直存在消息记录里导致出现垃圾信息影响效率
                            if (msgList[blockModel.ID].Count >= 100)
                            {
                                Util.log(msgList[blockModel.ID].ToString(), blockModel.ID + "blockModelMsg.txt");
                                msgList.Remove(blockModel.ID);
                            }
                        }
                    }
                }
                else//连接关闭
                {
                    MechineUtil.updateMechineStatus(blockModel.ID, "1");
                    webSocket.CONNECT_POOL.Remove(blockModel.ID);
                    blockModel.Status = 1;
                }
            }
            else
            {
            }

            return(blockModel);
        }
コード例 #12
0
        //循环遍历缓存中的出货信息数据,超时的走失败流程
        private void outTimeChFail()
        {
            string mechineIDCHString = RedisUtil.getMechineChString(id);  //出货指令缓存

            JObject mechineIDCHObj = JObject.Parse(mechineIDCHString);

            Util.log("mechineIDCHObj=" + mechineIDCHObj.ToString(), id + "outTimeChFail.txt");
            IEnumerable <JProperty> properties = mechineIDCHObj.Properties();

            foreach (JProperty item in properties)
            {
                string key   = item.Name;
                string value = item.Value.ToString();
                Util.log("key:value=" + key + ":" + value, id + "outTimeChFail.txt");
                JObject chObject = JObject.Parse(value);

                DateTime createTime = DateTime.ParseExact(chObject["createTime"].ToString(), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture);

                TimeSpan difTime = DateTime.Now - createTime;//结束时间减去开始的时间
                Util.log("difTimeSeconds=" + difTime.TotalSeconds, id + "outTimeChFail.txt");
                if (difTime.TotalSeconds > 60 * 30)
                {
                    string ldNO      = chObject["ldNO"].ToString();
                    string bill      = chObject["billno"].ToString();
                    string payType   = chObject["payType"].ToString();
                    string productID = chObject["productID"].ToString();
                    string money     = chObject["money"].ToString();
                    string type      = chObject["type"].ToString();
                    string sql       = "select trxid,m.id from  asm_pay_info a left join asm_member m on a.unionID=m.unionID where  a.statu=1 and trxid='" + bill + "'";
                    Util.log("sql=" + sql, id + "outTimeChFail.txt");
                    DataTable dt = DbHelperSQL.Query(sql).Tables[0];
                    if (dt.Rows.Count > 0)
                    {
                        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
                        long            t         = (DateTime.Now.Ticks - startTime.Ticks) / 10000; //除10000调整为13位
                        Hashtable       ht        = new Hashtable();
                        ht.Add("payType", payType);
                        ht.Add("productID", productID);
                        ht.Add("orderTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                        ht.Add("num", 1);
                        ht.Add("totalMoney", money);
                        ht.Add("proLD", ldNO);
                        ht.Add("type", type);
                        ht.Add("orderNO", t);
                        ht.Add("bz", "出货失败");
                        ht.Add("code", "");
                        ht.Add("billno", bill);
                        ht.Add("mechineID", id);
                        ht.Add("memberID", dt.Rows[0]["id"].ToString());
                        Hashtable ht1 = new Hashtable();
                        Util.log("uploadSellDetail=" + Util.HashtableToWxJson(ht), id + "outTimeChFail.txt");
                        MechineUtil.uploadSellDetail("[" + Util.HashtableToWxJson(ht) + "]");
                        //ht1.Add("recordList", "[" + Util.HashtableToWxJson(ht) + "]");
                        //XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://nq.bingoseller.com/api/mechineService.asmx", "upSellRecord", ht1);
                        //string result = xx.OuterXml;
                        //log("bill:" + bill + ";result=" + result + ";HT:" + ht.ToString(), "LSCH.txt");
                        //return;
                    }
                }
            }
        }
コード例 #13
0
        private async Task ProcessChat(AspNetWebSocketContext context)
        {
            Util.log("ProcessChat", "测试socket.txt");
            WebSocket socket    = context.WebSocket;
            string    msg       = string.Empty;
            string    mechineID = context.QueryString["mechineID"].ToString();

            StringBuilder sb = new StringBuilder();

            try
            {
                //第一次open时,添加到连接池中

                //第一次open时,添加到连接池中
                if (!CONNECT_POOL.ContainsKey(mechineID))
                {
                    Util.log("第一次", "测试socket.txt");
                    log("添加机器mechineID=" + mechineID, "连接信息.txt");
                    MechineUtil.updateMechineStatus(mechineID, "0");
                    CONNECT_POOL.Add(mechineID, socket);//不存在,添加
                }
                else
                {
                    if (socket != CONNECT_POOL[mechineID])//当前对象不一致,更新
                    {
                        CONNECT_POOL[mechineID] = socket;
                    }
                }
                while (true)
                {
                    Util.log("循环", "测试socket.txt");
                    ArraySegment <byte>    buffer3 = new ArraySegment <byte>(new byte[2048]);
                    WebSocketReceiveResult result2 = await socket.ReceiveAsync(buffer3, CancellationToken.None);

                    try
                    {
                        Util.log("循环1", "测试socket.txt");
                        sb.Clear();
                        #region 关闭Socket处理,删除连接池
                        if (socket.State != WebSocketState.Open)//连接关闭
                        {
                            if (CONNECT_POOL.ContainsKey(mechineID))
                            {
                                log("移除机器mechineID=" + mechineID, "连接信息.txt");
                                MechineUtil.updateMechineStatus(mechineID, "1");
                                CONNECT_POOL.Remove(mechineID);//删除连接池
                            }
                            break;
                        }
                        Util.log("循环2", "测试socket.txt");
                        if (!CONNECT_POOL.ContainsKey(mechineID))
                        {
                            Util.log("循环2.1", "测试socket.txt");
                            log("发消息添加机器mechineID=" + mechineID, "连接信息.txt");
                            MechineUtil.updateMechineStatus(mechineID, "0");
                            CONNECT_POOL.Add(mechineID, socket);//不存在,添加
                            Util.log("循环2.2", "测试socket.txt");
                        }
                        else
                        {
                            if (socket != CONNECT_POOL[mechineID])//当前对象不一致,更新
                            {
                                Util.log("循环2.3", "测试socket.txt");
                                CONNECT_POOL[mechineID] = socket;
                            }
                        }
                        Util.log("循环3", "测试socket.txt");
                        #endregion
                        string userMsg = Encoding.UTF8.GetString(buffer3.Array, 0, result2.Count);//发送过来的消息
                        Util.log("循环4", "测试socket.txt");

                        if (string.IsNullOrEmpty(userMsg))
                        {
                            return;
                        }
                        Util.log(userMsg, "测试socket.txt");
                        JObject jo         = JObject.Parse(userMsg);
                        string  cmd        = jo["cmd"].ToString();
                        string  mechine_ID = jo["mechineID"].ToString();
                        Util.log("jo" + jo.ToString(), "测试socket.txt");

                        //新增调试
                        //////////////////////////////////////////////////////////////////////////////////////
                        //eventWait是发送消息后的“等待”集合,客户端发来消息后首先看是否有正在等待此客户端发的此消息的线程在跑,有则取出来
                        //if (BlockService.eventWait.ContainsKey(mechine_ID))
                        //{
                        //    Dictionary<string, EventWaitHandle> callMap = BlockService.eventWait[mechine_ID];


                        //    if (callMap.ContainsKey(jo["msgid"].ToString()))
                        //    {
                        //        //在此处已经取出等待线程
                        //        EventWaitHandle callBack = callMap[jo["msgid"].ToString()];

                        //        Util.log("callBack" + callBack.ToString(), "测试socket.txt");
                        //        //将此次传回来的消息存到集合中
                        //        //首先判断将此次传回来的消息是否已经存在,存在更新掉,不存在创建
                        //        if (BlockService.msgList.ContainsKey(mechine_ID))
                        //        {

                        //            BlockService.msgList[mechine_ID].Add(jo["msgid"].ToString(), jo["cmd"].ToString());


                        //        }
                        //        else
                        //        {

                        //            Dictionary<string, string> msginfo = new Dictionary<string, string>();
                        //            msginfo.Add(jo["msgid"].ToString(), jo["cmd"].ToString());
                        //            BlockService.msgList.Add(mechine_ID, msginfo);

                        //        }
                        //        //放开此消息的等待方法
                        //        callBack.Set();
                        //        //在等待集合中移除此等待
                        //        callMap.Remove(jo["msgid"].ToString());

                        //    }
                        //}



                        ////////////////////////////////////////////////////////////////////////////////////////


                        try
                        {
                            //log("ceshikaishi=" , "_" + mechine_ID + "_心跳.txt");
                            //MsgDTO msgDTO = new MsgDTO();
                            //msgDTO.Createtime = Util.GetTimeStamp();
                            //msgDTO.Statusvalue = jo["samtype"].ToString();
                            //log("ceshikaishi=" + jo["samtype"].ToString(), "_" + mechine_ID + "_心跳.txt");
                            //string msgString = JsonConvert.SerializeObject(msgDTO);
                            //log("ceshikaishi=" + msgString, "_" + mechine_ID + "_心跳.txt");
                            //RedisHelper.SetRedisModel<string>(mechineID + "tem", msgString, new TimeSpan(12, 0, 0));
                            //log("ceshijieshu=", "_" + mechine_ID + "_心跳.txt");
                            //处理机器长时间没有正常工作的异常
                            await Util.samtype(mechine_ID, jo["samtype"].ToString());
                        }
                        catch (Exception e)
                        {
                            log("ceshikaishi=" + e.ToString(), "_" + mechine_ID + "_心跳.txt");
                            throw;
                        }



                        if (cmd != "memory")
                        {
                            log("IP:" + context.UserHostAddress + ";userMsg=" + userMsg, "_" + mechineID + "_所有指令.txt");
                        }
                        if (cmd == "app.heartbeat")
                        {
                            sb.Append(GetJson("cmd", "app.heartbeat"));
                            sb.Append(GetJson("msg", "心跳"));
                            msg = ReturnJson(context, sb);
                            log("userMsg=" + userMsg, "_" + mechine_ID + "_心跳.txt");
                            try
                            {
                                string GKJStatus = jo["GKJStatus"].ToString();
                                string status    = RedisHelper.GetRedisModel <string>(mechineID + "_gkjStatus");
                                if (int.Parse(GKJStatus) >= 10)
                                {
                                    if (status != "10")
                                    {
                                        RedisHelper.SetRedisModel <string>(mechineID + "_gkjStatus", "10", new TimeSpan(12, 0, 0));
                                        //机器下位脱机
                                        log("机器下位脱机=脱机", "_" + mechine_ID + "_心跳.txt");
                                    }
                                }
                                else
                                {
                                    if (status != "0")
                                    {
                                        RedisHelper.SetRedisModel <string>(mechineID + "_gkjStatus", "0", new TimeSpan(12, 0, 0));
                                        //机器下位脱机
                                        log("机器下位脱机=重连", "_" + mechine_ID + "_心跳.txt");
                                    }
                                }
                            }
                            catch
                            {
                            }
                        }
                        if (cmd == "lx")
                        {
                            log("userMsg=" + userMsg, "_" + mechineID + "_指令.txt");
                        }
                        if (cmd == "all")
                        {
                            log("userMsg=" + userMsg, "_" + mechineID + "_app端接收的指令.txt");
                        }
                        if (cmd == "video")
                        {
                            string videoID = jo["videoID"].ToString();
                            //{"cmd":"video","mechineID":"51","videoID":"175","times":1,"time":"2019-08-06 00:00:05"}
                            //到redis用video+mechineID获取该机器的今日播放数据
                            //不存在就创建今日播放数据

                            //取出播放记录的视频ID,到redis今日播放数据里面取播放量,不存在,则增加该视频ID到redis记录里,存在则数据加1,更新redis
                            //播放数据的日期是一小时前更新播放数据到数据库并且清除该redis
                            //用这个类似写法写 await socket.SendAsync(sendmsg(msg), WebSocketMessageType.Text, true, CancellationToken.None);
                            await Util.playCount(mechineID, videoID);

                            logVideo(userMsg, mechineID + "_视频播放记录.txt");
                        }
                        if (cmd == "tem")
                        {
                            try
                            {
                                logVideo(userMsg, mechineID + "_温度记录.txt");
                                string temperature = jo["value"].ToString();
                                if (double.Parse(temperature) > 10)
                                {
                                    MechineUtil.AddTemBrokenRecord(mechineID, temperature);
                                }
                            }
                            catch
                            {
                            }
                        }
                        if (cmd == "log")
                        {
                            log("userMsg=" + userMsg, "_" + mechineID + "_log.txt");
                        }
                        if (cmd == "record")//上传操作日志
                        {
                            log("userMsg=" + userMsg, "_" + mechineID + "record.txt");
                            try
                            {
                                //{"cmd":"record","companyID":"14","mechineID":"25","indexCount":5,"smCount":1,"productCount":2,"endCount":0,"productStr":"283,290","version":"1.0.2"}
                                string companyID    = jo["companyID"].ToString();
                                string indexCount   = jo["indexCount"].ToString();   //首页次数
                                string smCount      = jo["smCount"].ToString();      //扫码页面次数
                                string productCount = jo["productCount"].ToString(); //支付页面次数
                                string endCount     = jo["endCount"].ToString();     //支付完成
                                string productStr   = jo["productStr"].ToString();   //选择的产品ID
                                string billno       = jo["billno"].ToString();       //零售时候传
                                string type         = jo["type"].ToString();         //1 订购2零售
                                string memberID     = jo["memberID"].ToString();     //订购时传
                                string memberStr    = "";
                                if (type == "2")
                                {
                                    string    sql1 = "select acct from  asm_pay_info  where trxid='" + billno + "'";
                                    DataTable d1   = DbHelperSQL.Query(sql1).Tables[0];
                                    if (d1.Rows.Count > 0)
                                    {
                                        string    sqlp = "select id from asm_member where openID ='" + d1.Rows[0]["acct"].ToString() + "'";
                                        DataTable dp   = DbHelperSQL.Query(sqlp).Tables[0];
                                        if (dp.Rows.Count > 0)
                                        {
                                            memberID = dp.Rows[0]["id"].ToString();
                                        }
                                        else
                                        {
                                            memberStr = d1.Rows[0]["acct"].ToString();
                                        }
                                    }
                                }
                                if (!string.IsNullOrEmpty(productStr))
                                {
                                    string    sqlp = "SELECT STUFF((SELECT ','+proName FROM  asm_product  where productID in(" + productStr + ") for xml path('')),1,1,'') proName";
                                    DataTable dp   = DbHelperSQL.Query(sqlp).Tables[0];
                                    if (dp.Rows.Count > 0)
                                    {
                                        productStr = dp.Rows[0]["proName"].ToString();
                                    }
                                }


                                string sql = "insert into asm_mechineRecord(companyID,mechineID,indexCount,smCount,productCount,endCount,productStr,timeStr,memberStr,type,memberID)"
                                             + " values(" + companyID + "," + mechineID + "," + indexCount + "," + smCount + "," + productCount + "," + endCount + ",'" + productStr + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + memberStr + "','" + type + "','" + memberID + "')";
                                log("sql=" + sql, "_" + mechineID + "record.txt");
                                DbHelperSQL.ExecuteSql(sql);
                            }
                            catch
                            {
                            }
                        }
                        if (cmd == "chBillno")
                        {
                            string billno = jo["billno"].ToString();
                            log("billno=" + billno, "_" + mechineID + "LSCH.txt");
                            RedisHelper.SetRedisModel <string>("CH" + billno, null, new TimeSpan(0, 0, 0));
                        }
                        if (cmd == "chforeach")
                        {
                            string content = jo["content"].ToString();
                            log("content=" + content, "_" + mechineID + "chforeach.txt");
                        }
                        if (cmd == "upSellRecordList")
                        {
                            string recordList = jo["recordList"].ToString();
                            log("recordList=" + recordList, "_" + mechineID + "upSellRecordList.txt");
                        }
                        if (cmd == "memory")
                        {
                            log("userMsg=" + userMsg, "_" + mechineID + "_memory.txt");
                        }
                        await socket.SendAsync(sendmsg(msg), WebSocketMessageType.Text, true, CancellationToken.None);

                        //获取机器状态
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                log("2userMsg=" + ex.Message, "_异常.txt");
                //整体异常处理
                if (CONNECT_POOL.ContainsKey(mechineID))
                {
                    log("出现异常移除机器mechineID=" + mechineID, "连接信息.txt");
                    MechineUtil.updateMechineStatus(mechineID, "1");
                    CONNECT_POOL.Remove(mechineID);
                }
            }
        }