Esempio n. 1
0
        //更新订单状态
        public async Task FutureOrderUpdate(Initials Init)
        {
            int interval = int.Parse(Funs.CONFIG.interval);

            void LongTask()
            {
                FutureentrustQry_Input objFutureentrustQry_Input;

                foreach (RequestClass order in MQServer.AlivedOrder.GetConsumingEnumerable())
                {
                    try
                    {
                        string userKey = order.queue_name.Replace(Funs.CONFIG.ReplyName, "");
                        //if (Initials.UserDicts[userKey].token != null)
                        //{
                        if (order.entrust_no != "0")
                        {
                            objFutureentrustQry_Input = new FutureentrustQry_Input();
                            objFutureentrustQry_Input.in_user_token   = Funs.CONFIG.token;
                            objFutureentrustQry_Input.in_asset_no     = Initials.UserDicts[userKey].asset_no;
                            objFutureentrustQry_Input.in_account_code = Initials.UserDicts[userKey].account_code;
                            objFutureentrustQry_Input.in_combi_no     = Initials.UserDicts[userKey].combi_no;
                            objFutureentrustQry_Input.in_entrust_no   = order.entrust_no;

                            List <FutureentrustQry_Output> ordersQueues = Init.hsPack.Fun32003_FutureentrustQry(objFutureentrustQry_Input);
                            FutureentrustQry_Output        orderTemp    = ordersQueues[0];
                            if (orderTemp.out_stock_code != null)
                            {
                                // 状态发生变化
                                if (orderTemp.out_entrust_state != order.orderState)
                                {
                                    order.error_info   = orderTemp.out_error_info + orderTemp.out_withdraw_cause;
                                    order.entrust_no   = orderTemp.out_entrust_no;
                                    order.orderState   = orderTemp.out_entrust_state;
                                    order.deal_amount  = orderTemp.out_deal_amount;
                                    order.deal_balance = orderTemp.out_deal_balance;
                                    order.deal_price   = orderTemp.out_deal_price;

                                    // 发布变化状态
                                    PublishMsg(order, channel, Init);
                                }
                                else if (orderTemp.out_entrust_state == "6" && orderTemp.out_deal_amount != order.deal_amount)
                                {
                                    // 部分成交
                                    order.error_info   = orderTemp.out_error_info + orderTemp.out_withdraw_cause;
                                    order.entrust_no   = orderTemp.out_entrust_no;
                                    order.orderState   = orderTemp.out_entrust_state;
                                    order.deal_amount  = orderTemp.out_deal_amount;
                                    order.deal_balance = orderTemp.out_deal_balance;
                                    order.deal_price   = orderTemp.out_deal_price;

                                    // 发布变化状态
                                    PublishMsg(order, channel, Init);
                                }


                                bool IsFinished = FinishedState.Contains(orderTemp.out_entrust_state);

                                // 订单生命周期未结束,添加回队列
                                if (!IsFinished)
                                {
                                    MQServer.AlivedOrder.Add(order);
                                }
                            }
                            else
                            {
                                // 没查询到数据,将该条数据添加回队列
                                MQServer.AlivedOrder.Add(order);
                            }
                        }

                        //}
                        //else
                        //{
                        //    order.error_info = "O32密码错误";
                        //    MQServer.AlivedOrder.Add(order);
                        //    //PublishMsg(order, channel, Init);
                        //}

                        Thread.Sleep(100);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                        Thread.Sleep(interval);
                    }
                }
            }

            await Task.Factory.StartNew(() => LongTask(), TaskCreationOptions.LongRunning);
        }
Esempio n. 2
0
        /// <summary>
        /// 心跳、成交、委托流水读取线程
        /// </summary>
        /// <param name="Init"></param>
        /// <returns></returns>
        public async static Task AsyHSWorker(Initials Init)
        {
            string account_code = ConfigurationManager.AppSettings["account_code"];
            string asset_no     = ConfigurationManager.AppSettings["asset_no"];
            int    interval     = int.Parse(ConfigurationManager.AppSettings["interval"]);

            void LongTask()
            {
                while (true)
                {
                    try
                    {
                        // 发送心跳
                        Init.hsPack.Fun10000_heartBeat(Init.logOut.out_user_token);

                        // 查询持仓
                        FuturepositionQry_Input objFuturepositionQry_Input = new FuturepositionQry_Input();
                        objFuturepositionQry_Input.in_user_token   = Init.logOut.out_user_token;
                        objFuturepositionQry_Input.in_asset_no     = asset_no;
                        objFuturepositionQry_Input.in_account_code = account_code;
                        //objFuturepositionQry_Input.in_position_str = "0";

                        List <FuturepositionQry_Output> pos = Init.hsPack.Fun31003_FuturepositionQry(objFuturepositionQry_Input);

                        if (pos.Count > 0)
                        {
                            if (pos[0].out_stock_code != null)
                            {
                                positionsQueues = new ConcurrentBag <FuturepositionQry_Output>(pos);
                            }
                        }
                        //positionsQueues
                        // 查询成交
                        FuturedealQry_Input objFuturedealQry_Input = new FuturedealQry_Input();
                        objFuturedealQry_Input.in_user_token   = Init.logOut.out_user_token;
                        objFuturedealQry_Input.in_asset_no     = asset_no;
                        objFuturedealQry_Input.in_account_code = account_code;
                        objFuturedealQry_Input.in_position_str = "0";

                        List <FuturedealQry_Output> deals = Init.hsPack.Fun33003_FuturedealQry(objFuturedealQry_Input);

                        // 查询委托
                        FutureentrustQry_Input objFutureentrustQry_Input = new FutureentrustQry_Input();

                        objFutureentrustQry_Input.in_user_token   = Init.logOut.out_user_token;
                        objFutureentrustQry_Input.in_asset_no     = asset_no;
                        objFutureentrustQry_Input.in_account_code = account_code;
                        List <FutureentrustQry_Output> orders = Init.hsPack.Fun32003_FutureentrustQry(objFutureentrustQry_Input);
                        if (orders.Count > 0)
                        {
                            if (orders[0].out_stock_code != null)
                            {
                                ordersQueues = new ConcurrentBag <FutureentrustQry_Output>(orders);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                    finally
                    {
                        Thread.Sleep(interval);
                    }
                }
            }

            await Task.Factory.StartNew(() => LongTask(), TaskCreationOptions.LongRunning);
        }