示例#1
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))
                {
                    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);
                }
            }
        }
示例#2
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;
                    }
                }
            }
        }