private OrderViewItem OrderMap(Order order)
        {
            var status = (OrderStatus)order.Status;

            var orderView = new OrderViewItem
            {
                Address   = order.Address,
                Brand     = order.Brand.Title,
                ClockType = order.ClockType.Title,
                Comments  = order.Comments,
                DeadLine  = order.DeadLine.Date,
                Delivery  = order.Delivery.Title,
                Id        = order.Id,
                Name      = $"{order.User.FirstName} {order.User.LastName}",
                Payment   = order.Payment.Title,
                Phone     = order.PhoneNumber,
                Status    = status.ToString(),
                ImagesUrl = new List <string>(),
                Cost      = order.Cost
            };

            foreach (var clockPhoto in order.ClockPhotos)
            {
                orderView.ImagesUrl.Add(clockPhoto.ImageUrl);
            }

            return(orderView);
        }
Beispiel #2
0
        /// <summary>
        /// 页面股票/期货委托信息更新
        /// 股票通过Entrust_query查询最新委托状态并更新
        /// 期货通过UpdateOrder 函数更新最新状态
        /// 该函数传入参数中的JsonString,是单只股票期货的状态,本地维护OrderList来保存之前交易的状态。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="JsonString"></param>
        public void updateOrderList(String name, OrderViewItem item)
        {
            try
            {
                if (item != null)
                {
                    if (!OrderLists.Keys.Contains(name))
                    {
                        List <OrderViewItem> ss = new List <OrderViewItem>();
                        ss.Add(item);
                        OrderLists.Add(name, ss);
                    }

                    List <OrderViewItem> orders = OrderLists[name];

                    OrderViewItem order = orders.Find(
                        delegate(OrderViewItem record)
                    {
                        return(record.OrderRef == item.OrderRef);
                    }
                        );

                    if (order == null)
                    {
                        OrderLists[name].Add(item);
                    }
                    else
                    {
                        order.MSG         = item.MSG;
                        order.VolumeTotal = item.VolumeTotal;
                    }

                    if (!UserConnectionRelation.ContainsKey(name))
                    {
                        return;
                    }

                    _context.Clients.Client(UserConnectionRelation[name]).updateOrderList(JsonConvert.SerializeObject(orders));
                }
                else
                {
                    if (!UserConnectionRelation.ContainsKey(name))
                    {
                        return;
                    }

                    if (!OrderLists.Keys.Contains(name))
                    {
                        List <OrderViewItem> ss = new List <OrderViewItem>();

                        OrderLists.Add(name, ss);
                    }

                    List <OrderViewItem> orders = OrderLists[name];
                    _context.Clients.Client(UserConnectionRelation[name]).updateOrderList(JsonConvert.SerializeObject(orders));
                }
            }
            catch (Exception ex) { DBAccessLayer.LogSysInfo("TradeMonitorHub-updateOrderList", ex.ToString()); GlobalErrorLog.LogInstance.LogEvent(ex.ToString()); }
        }
        public void UpdateOrder(OrderViewItem orderViewItem)
        {
            var order = _orderRepository.GetById(orderViewItem.Id);

            order.Comments = orderViewItem.Comments;
            order.DeadLine = orderViewItem.DeadLine;
            order.Address  = orderViewItem.Address;
            order.Cost     = orderViewItem.Cost;
            _orderRepository.Update(order);
        }
Beispiel #4
0
        private void threadproc()
        {
            while (true)
            {

                Thread.Sleep(1);

                if ((DateTime.Now - GlobalHeartBeat.GetGlobalTime()).TotalMinutes > 5)
                {
                    log.LogEvent("由于供血不足,委托查询线程即将退出。");
                    break;
                }

                //单次循环最多查询100个交易的委托情况
                int maxCount = 100;

                if (!_classTradeStock.getConnectStatus())
                {
                    _classTradeStock.Init(login, ErrorMsg);
                }

                if (lastmessagetime.Second != DateTime.Now.Second)
                {
                    KeyValuePair<string, object> message1 = new KeyValuePair<string, object>("THREAD_ENTRUST_WORKER", (object)(DateTime.Now));
                    queue_system_status.GetQueue().Enqueue((object)message1);
                    lastmessagetime = DateTime.Now;
                }


                while (maxCount > 0 && queue_query_entrust.GetQueueNumber() > 0)
                {
                    maxCount--;

                    //获取新委托
                    QueryEntrustOrderStruct_M item = (QueryEntrustOrderStruct_M)queue_query_entrust.GetQueue().Dequeue();
                    string err = string.Empty;

                    //查询委托及获取实例
                    managedEntrustreturnstruct ret = new managedEntrustreturnstruct();

                    //ordersysid 首字母 为 'T'  是测试交易
                     if (item.OrderSysID.Length > 0 && item.OrderSysID[0] == 'T')
                     {
                         var temps = test.QueryEntrust(item);
                         ret = temps;
                     }
                     else
                     {
                         var temps = _classTradeStock.QueryEntrust(item, err);
                         if (temps.Length == 0) continue;

                         ret = temps.ToList()[0];
                     }

                    
                   

                    if (ret == null) continue;

                    String USERNAME = UserRequestMap.GetInstance()[item.OrderRef];

                    if (ret == null) continue;


                    OrderViewItem order = new OrderViewItem(
                        item.OrderRef.ToString(),
                        ret.cOrderSysID,
                        ret.cSecurity_code,
                        item.Direction.ToString(),
                        "NA",
                        ret.nVolumeTotalOriginal.ToString(),
                        ret.nVolumeTotal.ToString(),
                        item.OrderPrice.ToString(),
                        GetStatusWord(ret.cOrderStatus),
                        ret.cInsertTime);

                    String JSONString = JsonConvert.SerializeObject(order);
                    TradeMonitor.Instance.updateOrderList(USERNAME, JSONString);


                    //目前仅考虑 1对1 返回的情况,不考虑出现1对多 ,类似基金交易的情况
                    //将委托变动返回更新数据库
                    if (DBAccessLayer.DBEnable == true)
                    {
                        //更新数据,记录入数据库
                        ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.UpdateERRecord), (object)(ret));

                        //此处判断,相应代码的委托是否完成
                        //此处逻辑需要待返回报文内容确认后修改
                        //测试使用
                        if ((ret.cOrderStatus.ToString() != ((int)(EntrustStatus.Dealed)).ToString()) && (!(ret.cOrderStatus.ToString() == ((int)EntrustStatus.Canceled).ToString() && ret.nVolumeTotal == 0)))
                        {
                            queue_query_entrust.GetQueue().Enqueue((object)item);
                            continue;
                        }


                        //委托已经完成,进入成交状态查询
                        managedBargainreturnstruct bargin = new managedBargainreturnstruct();
                        if (item.OrderSysID.Length > 0 && item.OrderSysID[0] == 'T')
                        {
                            bargin = test.QueryTrader(item);

                        }
                        else
                        {
                            var retbargin = _classTradeStock.QueryTrader(item, err).ToList();
                            //将查询信息记录成交表
                            if (retbargin.Count > 0)
                            {
                                bargin = retbargin.ToList()[0];
                            }
                        }

                        bargin.strategyId = item.StrategyId;
                        bargin.direction = item.Direction;

                        ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.CreateDLRecord), (object)bargin);

                        //更新持仓列表
                        //ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.UpdateCCRecords), (object)bargin);

                    }
                }

            }
        }
Beispiel #5
0
        private void threadproc()
        {
            while (true)
            {
                Thread.Sleep(1);

                if ((DateTime.Now - GlobalHeartBeat.GetGlobalTime()).TotalMinutes > 5)
                {
                    log.LogEvent("由于供血不足,委托查询线程即将退出。");
                    break;
                }

                //单次循环最多查询100个交易的委托情况
                int maxCount = 100;

                if (!_classTradeStock.getConnectStatus())
                {
                    _classTradeStock.Init(login, ErrorMsg);
                }

                if (lastmessagetime.Second != DateTime.Now.Second)
                {
                    KeyValuePair <string, object> message1 = new KeyValuePair <string, object>("THREAD_ENTRUST_WORKER", (object)(DateTime.Now));
                    queue_system_status.GetQueue().Enqueue((object)message1);
                    lastmessagetime = DateTime.Now;
                }


                while (maxCount > 0 && queue_query_entrust.GetQueueNumber() > 0)
                {
                    maxCount--;

                    //获取新委托
                    QueryEntrustOrderStruct_M item = (QueryEntrustOrderStruct_M)queue_query_entrust.GetQueue().Dequeue();
                    string err = string.Empty;

                    //查询委托及获取实例
                    managedEntrustreturnstruct ret = new managedEntrustreturnstruct();

                    //ordersysid 首字母 为 'T'  是测试交易
                    if (item.OrderSysID.Length > 0 && item.OrderSysID[0] == 'T')
                    {
                        var temps = test.QueryEntrust(item);
                        ret = temps;
                    }
                    else
                    {
                        var temps = _classTradeStock.QueryEntrust(item, err);
                        if (temps.Length == 0)
                        {
                            continue;
                        }

                        ret = temps.ToList()[0];
                    }

                    if (ret == null)
                    {
                        continue;
                    }


                    OrderViewItem order = new OrderViewItem(
                        item.OrderRef.ToString(),
                        ret.cOrderSysID,
                        ret.cSecurity_code,
                        item.Direction.ToString(),
                        "NA",
                        ret.nVolumeTotalOriginal.ToString(),
                        ret.nVolumeTotal.ToString(),
                        item.OrderPrice.ToString(),
                        GetStatusWord(ret.cOrderStatus),
                        ret.cInsertTime);


                    if (!UserRequestMap.GetInstance().Keys.Contains(item.OrderRef))
                    {
                        UserRequestMap.GetInstance().AddOrUpdate(item.OrderRef, item.User, (key, oldValue) => oldValue = item.User);
                    }

                    String USERNAME = UserRequestMap.GetInstance()[item.OrderRef];
                    TradeMonitor.Instance.updateOrderList(USERNAME, order);


                    //目前仅考虑 1对1 返回的情况,不考虑出现1对多 ,类似基金交易的情况
                    //将委托变动返回更新数据库
                    if (DBAccessLayer.DBEnable == true)
                    {
                        //更新数据,记录入数据库
                        ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.UpdateERRecord), (object)(ret));

                        //修改委托缓存数据
                        EntrustRecord.ModifyEntrustPosition(item.OrderRef, Convert.ToInt32(ret.frozen_amount), Convert.ToDouble(ret.frozen_money));

                        //此处判断,相应代码的委托是否完成
                        //此处逻辑需要待返回报文内容确认后修改
                        //测试使用
                        if ((ret.cOrderStatus.ToString() != ((int)(EntrustStatus.Dealed)).ToString()) && (!(ret.cOrderStatus.ToString() == ((int)EntrustStatus.Canceled).ToString() && ret.nVolumeTotal == 0)))
                        {
                            queue_query_entrust.GetQueue().Enqueue((object)item);
                            continue;
                        }



                        //委托已经完成,进入成交状态查询
                        managedBargainreturnstruct bargin = new managedBargainreturnstruct();
                        if (item.OrderSysID.Length > 0 && item.OrderSysID[0] == 'T')
                        {
                            bargin = test.QueryTrader(item);
                        }
                        else
                        {
                            var retbargin = _classTradeStock.QueryTrader(item, err).ToList();
                            //将查询信息记录成交表
                            if (retbargin.Count > 0)
                            {
                                bargin = retbargin.ToList()[0];
                            }
                        }

                        bargin.strategyId = item.StrategyId;
                        bargin.direction  = item.Direction;
                        bargin.User       = USERNAME;
                        bargin.OrderType  = Convert.ToSByte("49");

                        if (ret.cOrderStatus.ToString() == ((int)(EntrustStatus.Dealed)).ToString())
                        {
                            bargin.OrderMark = Deal_Status.DEAL;
                        }
                        else if (ret.cOrderStatus.ToString() == ((int)EntrustStatus.Canceled).ToString())
                        {
                            bargin.OrderMark = Deal_Status.CANCELED;
                        }
                        else if (ret.nVolumeTotal == 0)
                        {
                            bargin.OrderMark = Deal_Status.PARTIALDEAL;
                        }


                        ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.CreateDLRecord), (object)bargin);

                        EntrustRecord.DeleteEntrustRecord(item.OrderRef);

                        ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.DeleteERRecord), (object)(item.OrderRef));

                        //更新持仓列表

                        if (ret.nVolumeTraded != 0)
                        {
                            //需要修改数据
                            //仅存在成交记录时才更改持仓
                            ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.UpdateCCRecords), (object)bargin);
                        }
                    }
                }
            }
        }
 public ActionResult Edit(OrderViewItem orderViewItem)
 {
     _orderService.UpdateOrder(orderViewItem);
     return(RedirectToAction("Details", new { orderViewItem.Id }));
 }
Beispiel #7
0
 private void UpdateListView(ListView view, ExecutionReport rpt, OrderInfo ord)
 {
     try
     {
         string key = null;
         NewOrderSingle order = ord.Order;
         char exec = rpt.getExecType().getValue();
         if (exec == ExecType.PENDING_CANCEL || exec == ExecType.CANCELED || exec == ExecType.PENDING_REPLACE || exec == ExecType.REPLACE)
         {
             if (rpt.isSetOrigClOrdID())//�Ӵ��̶�ȡ�����ָ��û�б���origclordid
             {
                 key = rpt.getOrigClOrdID().getValue();
             }
             else
             {
                 key = rpt.getClOrdID().getValue();
             }
         }
         else
         {
             key = rpt.getClOrdID().getValue();
         }
         OrderViewItem item = (OrderViewItem)view.Items[key];
         if (item == null)
         {
             if (view.Name == "listView1")
             {
                 OrderViewItem item1 = new OrderViewItem(order);
                 view.Items.Insert(0, item1);
                 item1.UpdateValues(order, rpt);
             }
         }
         else
         {
             if (view.Name == "listView1")
             {
                 item.UpdateValues(order, rpt);
             }
         }
     }
     catch (IncorrectDataFormat e)
     {
         Console.WriteLine(e.TargetSite);
     }
 }