public int Create(Model.UI.TradeInstance securityItem)
        {
            var dbCommand = _dbHelper.GetStoredProcCommand(SP_Create);

            _dbHelper.AddInParameter(dbCommand, "@InstanceCode", System.Data.DbType.String, securityItem.InstanceCode);
            _dbHelper.AddInParameter(dbCommand, "@PortfolioId", System.Data.DbType.Int32, securityItem.PortfolioId);
            _dbHelper.AddInParameter(dbCommand, "@MonitorUnitId", System.Data.DbType.Int32, securityItem.MonitorUnitId);
            _dbHelper.AddInParameter(dbCommand, "@TemplateId", System.Data.DbType.Int32, securityItem.TemplateId);
            _dbHelper.AddInParameter(dbCommand, "@StockDirection", System.Data.DbType.Int32, (int)securityItem.StockDirection);
            _dbHelper.AddInParameter(dbCommand, "@FuturesContract", System.Data.DbType.String, securityItem.FuturesContract);
            _dbHelper.AddInParameter(dbCommand, "@FuturesDirection", System.Data.DbType.Int32, (int)securityItem.FuturesDirection);
            _dbHelper.AddInParameter(dbCommand, "@OperationCopies", System.Data.DbType.Int32, securityItem.OperationCopies);
            _dbHelper.AddInParameter(dbCommand, "@StockPriceType", System.Data.DbType.Int32, (int)securityItem.StockPriceType);
            _dbHelper.AddInParameter(dbCommand, "@FuturesPriceType", System.Data.DbType.Int32, (int)securityItem.FuturesPriceType);
            _dbHelper.AddInParameter(dbCommand, "@Status", System.Data.DbType.Int32, (int)TradeInstanceStatus.Active);
            _dbHelper.AddInParameter(dbCommand, "@Owner", System.Data.DbType.Int32, (int)securityItem.Owner);
            _dbHelper.AddInParameter(dbCommand, "@CreatedDate", System.Data.DbType.DateTime, DateTime.Now);

            string notes = securityItem.Notes ?? string.Empty;

            _dbHelper.AddInParameter(dbCommand, "@Notes", System.Data.DbType.String, notes);

            _dbHelper.AddReturnParameter(dbCommand, "@return", System.Data.DbType.Int32);

            int ret = _dbHelper.ExecuteNonQuery(dbCommand);

            int instanceId = -1;

            if (ret > 0)
            {
                instanceId = (int)dbCommand.Parameters["@return"].Value;
            }

            return(instanceId);
        }
 public TradeInstance(TradeInstance instance)
 {
     InstanceId       = instance.InstanceId;
     InstanceCode     = instance.InstanceCode;
     MonitorUnitId    = instance.MonitorUnitId;
     TemplateId       = instance.TemplateId;
     StockDirection   = instance.StockDirection;
     FuturesContract  = instance.FuturesContract;
     FuturesDirection = instance.FuturesDirection;
     OperationCopies  = instance.OperationCopies;
     StockPriceType   = instance.StockPriceType;
     FuturesPriceType = instance.FuturesPriceType;
     Status           = instance.Status;
     Owner            = instance.Owner;
     CreatedDate      = instance.CreatedDate;
     ModifiedDate     = instance.ModifiedDate;
     Notes            = instance.Notes;
     MonitorUnitName  = instance.MonitorUnitName;
     TemplateName     = instance.TemplateName;
     PortfolioId      = instance.PortfolioId;
     PortfolioCode    = instance.PortfolioCode;
     PortfolioName    = instance.PortfolioName;
     AccountCode      = instance.AccountCode;
     AccountName      = instance.AccountName;
     AssetNo          = instance.AssetNo;
     AssetName        = instance.AssetName;
 }
Esempio n. 3
0
        public int Update(Model.UI.TradeInstance tradeInstance, List <TradeInstanceSecurity> modifiedSecuItems, List <TradeInstanceSecurity> cancelSecuItems)
        {
            int userId = LoginManager.Instance.GetUserId();

            if (_permissionManager.HasPermission(userId, tradeInstance.InstanceId, ResourceType.TradeInstance, PermissionMask.Edit))
            {
                return(_tradeinstancetrandao.Update(tradeInstance, modifiedSecuItems, cancelSecuItems));
            }
            else
            {
                return(-1);
            }
        }
Esempio n. 4
0
        public int UpdateTradeInstance(Model.UI.TradeInstance tradeInstance)
        {
            int userId = LoginManager.Instance.GetUserId();

            if (_permissionManager.HasPermission(userId, tradeInstance.InstanceId, ResourceType.TradeInstance, PermissionMask.Edit))
            {
                return(_tradeinstancedao.Update(tradeInstance));
            }
            else
            {
                return(-1);
            }
        }
Esempio n. 5
0
        public int Update(Model.UI.TradeInstance tradeInstance, List <ClosePositionSecurityItem> secuItems)
        {
            int userId = LoginManager.Instance.GetUserId();

            if (_permissionManager.HasPermission(userId, tradeInstance.InstanceId, ResourceType.TradeInstance, PermissionMask.Edit))
            {
                var tradeinstSecus = GetTradingInstanceSecurities(tradeInstance.InstanceId, secuItems);
                return(_tradeinstancetrandao.Update(tradeInstance, tradeinstSecus));
            }
            else
            {
                return(-1);
            }
        }
        public Model.UI.TradeInstance ParseData(DbDataReader reader)
        {
            Model.UI.TradeInstance item = new Model.UI.TradeInstance();

            item.InstanceId       = (int)reader["InstanceId"];
            item.InstanceCode     = (string)reader["InstanceCode"];
            item.StockDirection   = (EntrustDirection)(int)reader["StockDirection"];
            item.FuturesContract  = (string)reader["FuturesContract"];
            item.FuturesDirection = (EntrustDirection)(int)reader["FuturesDirection"];
            item.OperationCopies  = (int)reader["OperationCopies"];
            item.StockPriceType   = (StockPriceType)reader["StockPriceType"];
            item.FuturesPriceType = (FuturesPriceType)reader["FuturesPriceType"];
            item.Status           = (TradeInstanceStatus)reader["Status"];
            item.Owner            = (int)reader["Owner"];
            item.MonitorUnitId    = (int)reader["MonitorUnitId"];
            item.MonitorUnitName  = (string)reader["MonitorUnitName"];
            item.TemplateId       = (int)reader["TemplateId"];
            if (reader["TemplateName"] != null && reader["TemplateName"] != DBNull.Value)
            {
                item.TemplateName = (string)reader["TemplateName"];
            }
            item.PortfolioId   = (int)reader["PortfolioId"];
            item.PortfolioCode = (string)reader["PortfolioCode"];
            item.PortfolioName = (string)reader["PortfolioName"];
            item.AccountCode   = (string)reader["AccountCode"];
            item.AccountName   = (string)reader["AccountName"];
            item.AssetNo       = (string)reader["AssetNo"];
            item.AssetName     = (string)reader["AssetName"];

            if (reader["CreatedDate"] != null && reader["CreatedDate"] != DBNull.Value)
            {
                item.CreatedDate = (DateTime)reader["CreatedDate"];
            }

            if (reader["ModifiedDate"] != null && reader["ModifiedDate"] != DBNull.Value)
            {
                item.ModifiedDate = (DateTime)reader["ModifiedDate"];
            }

            if (reader["Notes"] != null && reader["Notes"] != DBNull.Value)
            {
                item.Notes = (string)reader["Notes"];
            }

            return(item);
        }
        public int Update(Model.UI.TradeInstance securityItem)
        {
            var dbCommand = _dbHelper.GetStoredProcCommand(SP_Modify);

            _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.Int32, securityItem.InstanceId);
            _dbHelper.AddInParameter(dbCommand, "@InstanceCode", System.Data.DbType.String, securityItem.InstanceCode);
            _dbHelper.AddInParameter(dbCommand, "@MonitorUnitId", System.Data.DbType.Int32, securityItem.MonitorUnitId);
            _dbHelper.AddInParameter(dbCommand, "@TemplateId", System.Data.DbType.Int32, securityItem.TemplateId);
            _dbHelper.AddInParameter(dbCommand, "@ModifiedDate", System.Data.DbType.DateTime, DateTime.Now);

            string notes = securityItem.Notes ?? string.Empty;

            _dbHelper.AddInParameter(dbCommand, "@Notes", System.Data.DbType.String, notes);

            int ret = _dbHelper.ExecuteNonQuery(dbCommand);

            return(ret);
        }
Esempio n. 8
0
        public int Create(Model.UI.TradeInstance tradeInstance, List <OpenPositionSecurityItem> secuItems)
        {
            var tradeinstSecus = GetTradingInstanceSecurities(tradeInstance.InstanceId, secuItems);
            int ret            = _tradeinstancetrandao.Create(tradeInstance, tradeinstSecus);

            if (ret > 0)
            {
                int userId = LoginManager.Instance.GetUserId();
                var perms  = _permissionManager.GetOwnerPermission();
                _permissionManager.GrantPermission(userId, tradeInstance.InstanceId, ResourceType.TradeInstance, perms);

                return(tradeInstance.InstanceId);
            }
            else
            {
                return(-1);
            }
        }
        public Model.UI.TradeInstance GetCombine(int instanceId)
        {
            var dbCommand = _dbHelper.GetStoredProcCommand(SP_GetCombine);

            _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.Int32, instanceId);

            Model.UI.TradeInstance item = new Model.UI.TradeInstance();
            var reader = _dbHelper.ExecuteReader(dbCommand);

            if (reader.HasRows && reader.Read())
            {
                item = ParseData(reader);
            }

            reader.Close();
            _dbHelper.Close(dbCommand);

            return(item);
        }
Esempio n. 10
0
        public int Update(Model.UI.TradeInstance securityItem)
        {
            var dbCommand = _dbHelper.GetStoredProcCommand(SP_Modify);

            _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.Int32, securityItem.InstanceId);
            _dbHelper.AddInParameter(dbCommand, "@InstanceCode", System.Data.DbType.String, securityItem.InstanceCode);
            _dbHelper.AddInParameter(dbCommand, "@MonitorUnitId", System.Data.DbType.Int32, securityItem.MonitorUnitId);
            _dbHelper.AddInParameter(dbCommand, "@StockDirection", System.Data.DbType.Int32, (int)securityItem.StockDirection);
            _dbHelper.AddInParameter(dbCommand, "@FuturesContract", System.Data.DbType.String, securityItem.FuturesContract);
            _dbHelper.AddInParameter(dbCommand, "@FuturesDirection", System.Data.DbType.Int32, (int)securityItem.FuturesDirection);
            _dbHelper.AddInParameter(dbCommand, "@OperationCopies", System.Data.DbType.Int32, securityItem.OperationCopies);
            _dbHelper.AddInParameter(dbCommand, "@StockPriceType", System.Data.DbType.Int32, (int)securityItem.StockPriceType);
            _dbHelper.AddInParameter(dbCommand, "@FuturesPriceType", System.Data.DbType.Int32, (int)securityItem.FuturesPriceType);
            _dbHelper.AddInParameter(dbCommand, "@Status", System.Data.DbType.Int32, (int)securityItem.Status);
            _dbHelper.AddInParameter(dbCommand, "@Owner", System.Data.DbType.Int32, (int)securityItem.Owner);
            _dbHelper.AddInParameter(dbCommand, "@ModifiedDate", System.Data.DbType.DateTime, DateTime.Now);

            int ret = _dbHelper.ExecuteNonQuery(dbCommand);

            return(ret);
        }
        public List <Model.UI.TradeInstance> GetCombineAll()
        {
            var dbCommand = _dbHelper.GetStoredProcCommand(SP_GetCombine);

            List <Model.UI.TradeInstance> items = new List <Model.UI.TradeInstance>();
            var reader = _dbHelper.ExecuteReader(dbCommand);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    Model.UI.TradeInstance item = ParseData(reader);

                    items.Add(item);
                }
            }

            reader.Close();
            _dbHelper.Close(dbCommand);

            return(items);
        }
Esempio n. 12
0
        public int Create(Model.UI.TradeInstance tradeInstance, List <TradeInstanceSecurity> tradeSecuItems)
        {
            var dbCommand = _dbHelper.GetCommand();

            _dbHelper.Open(dbCommand);

            //use transaction to execute
            DbTransaction transaction = dbCommand.Connection.BeginTransaction();

            dbCommand.Transaction = transaction;
            dbCommand.CommandType = System.Data.CommandType.StoredProcedure;
            int ret = -1;

            try
            {
                //delete all old one
                dbCommand.CommandText = SP_CreateTradeInstance;

                _dbHelper.AddInParameter(dbCommand, "@InstanceCode", System.Data.DbType.String, tradeInstance.InstanceCode);
                _dbHelper.AddInParameter(dbCommand, "@PortfolioId", System.Data.DbType.String, tradeInstance.PortfolioId);
                _dbHelper.AddInParameter(dbCommand, "@MonitorUnitId", System.Data.DbType.Int32, tradeInstance.MonitorUnitId);
                _dbHelper.AddInParameter(dbCommand, "@TemplateId", System.Data.DbType.Int32, tradeInstance.TemplateId);
                _dbHelper.AddInParameter(dbCommand, "@StockDirection", System.Data.DbType.Int32, (int)tradeInstance.StockDirection);
                _dbHelper.AddInParameter(dbCommand, "@FuturesContract", System.Data.DbType.String, tradeInstance.FuturesContract);
                _dbHelper.AddInParameter(dbCommand, "@FuturesDirection", System.Data.DbType.Int32, (int)tradeInstance.FuturesDirection);
                _dbHelper.AddInParameter(dbCommand, "@OperationCopies", System.Data.DbType.Int32, tradeInstance.OperationCopies);
                _dbHelper.AddInParameter(dbCommand, "@StockPriceType", System.Data.DbType.Int32, (int)tradeInstance.StockPriceType);
                _dbHelper.AddInParameter(dbCommand, "@FuturesPriceType", System.Data.DbType.Int32, (int)tradeInstance.FuturesPriceType);
                _dbHelper.AddInParameter(dbCommand, "@Status", System.Data.DbType.Int32, (int)TradeInstanceStatus.Active);
                _dbHelper.AddInParameter(dbCommand, "@Owner", System.Data.DbType.Int32, (int)tradeInstance.Owner);
                _dbHelper.AddInParameter(dbCommand, "@CreatedDate", System.Data.DbType.DateTime, DateTime.Now);

                string notes = tradeInstance.Notes ?? string.Empty;
                _dbHelper.AddInParameter(dbCommand, "@Notes", System.Data.DbType.String, notes);

                _dbHelper.AddReturnParameter(dbCommand, "@return", System.Data.DbType.Int32);

                ret = dbCommand.ExecuteNonQuery();
                int instanceId = -1;
                if (ret > 0)
                {
                    instanceId = (int)dbCommand.Parameters["@return"].Value;
                    tradeInstance.InstanceId = instanceId;

                    foreach (var tradeSecuItem in tradeSecuItems)
                    {
                        dbCommand.Parameters.Clear();
                        dbCommand.CommandText = SP_CreateTradeInstanceSecurity;

                        _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.Int32, instanceId);
                        _dbHelper.AddInParameter(dbCommand, "@SecuCode", System.Data.DbType.String, tradeSecuItem.SecuCode);
                        _dbHelper.AddInParameter(dbCommand, "@SecuType", System.Data.DbType.Int32, (int)tradeSecuItem.SecuType);
                        _dbHelper.AddInParameter(dbCommand, "@PositionType", System.Data.DbType.Int32, (int)tradeSecuItem.PositionType);
                        _dbHelper.AddInParameter(dbCommand, "@InstructionPreBuy", System.Data.DbType.Int32, tradeSecuItem.InstructionPreBuy);
                        _dbHelper.AddInParameter(dbCommand, "@InstructionPreSell", System.Data.DbType.Int32, tradeSecuItem.InstructionPreSell);

                        _dbHelper.AddOutParameter(dbCommand, "@RowId", System.Data.DbType.String, 20);

                        ret = dbCommand.ExecuteNonQuery();

                        string rowId = string.Empty;
                        if (ret > 0)
                        {
                            rowId = (string)dbCommand.Parameters["@RowId"].Value;
                        }
                    }
                }

                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                //TODO: add log
                logger.Error(ex);
                ret = -1;
                throw;
            }
            finally
            {
                _dbHelper.Close(dbCommand);
                transaction.Dispose();
            }

            return(ret);
        }
Esempio n. 13
0
        public int Update(Model.UI.TradeInstance tradeInstance, List <TradeInstanceSecurity> tradeSecuItems)
        {
            var dbCommand = _dbHelper.GetCommand();

            _dbHelper.Open(dbCommand);

            //use transaction to execute
            DbTransaction transaction = dbCommand.Connection.BeginTransaction();

            dbCommand.Transaction = transaction;
            dbCommand.CommandType = System.Data.CommandType.StoredProcedure;
            int ret = -1;

            try
            {
                //delete all old one
                dbCommand.CommandText = SP_ModifyTradeInstance;

                //The @PortfolioId MUST not been modified
                _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.String, tradeInstance.InstanceId);
                _dbHelper.AddInParameter(dbCommand, "@InstanceCode", System.Data.DbType.String, tradeInstance.InstanceCode);
                _dbHelper.AddInParameter(dbCommand, "@MonitorUnitId", System.Data.DbType.Int32, tradeInstance.MonitorUnitId);
                _dbHelper.AddInParameter(dbCommand, "@TemplateId", System.Data.DbType.Int32, tradeInstance.TemplateId);
                _dbHelper.AddInParameter(dbCommand, "@ModifiedDate", System.Data.DbType.DateTime, DateTime.Now);

                string notes = tradeInstance.Notes ?? string.Empty;
                _dbHelper.AddInParameter(dbCommand, "@Notes", System.Data.DbType.String, notes);
                _dbHelper.AddInParameter(dbCommand, "@FuturesContract", System.Data.DbType.String, tradeInstance.FuturesContract);
                _dbHelper.AddInParameter(dbCommand, "@FuturesDirection", System.Data.DbType.Int32, (int)tradeInstance.FuturesDirection);

                ret = dbCommand.ExecuteNonQuery();
                if (ret > 0)
                {
                    //TODO: FIXED if there is not secuitem, it will be error.
                    foreach (var tradeSecuItem in tradeSecuItems)
                    {
                        dbCommand.Parameters.Clear();
                        dbCommand.CommandText = SP_ModifyTradeInstanceSecurityInsertOrUpdate;

                        _dbHelper.AddInParameter(dbCommand, "@InstanceId", System.Data.DbType.Int32, tradeInstance.InstanceId);
                        _dbHelper.AddInParameter(dbCommand, "@SecuCode", System.Data.DbType.String, tradeSecuItem.SecuCode);
                        _dbHelper.AddInParameter(dbCommand, "@SecuType", System.Data.DbType.Int32, (int)tradeSecuItem.SecuType);
                        _dbHelper.AddInParameter(dbCommand, "@PositionType", System.Data.DbType.Int32, (int)tradeSecuItem.PositionType);
                        _dbHelper.AddInParameter(dbCommand, "@InstructionPreBuy", System.Data.DbType.Int32, tradeSecuItem.InstructionPreBuy);
                        _dbHelper.AddInParameter(dbCommand, "@InstructionPreSell", System.Data.DbType.Int32, tradeSecuItem.InstructionPreSell);

                        _dbHelper.AddOutParameter(dbCommand, "@RowId", System.Data.DbType.String, 20);

                        ret = dbCommand.ExecuteNonQuery();

                        string rowId = string.Empty;
                        if (ret > 0)
                        {
                            rowId = (string)dbCommand.Parameters["@RowId"].Value;
                        }
                    }
                }

                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                //TODO: add log
                logger.Error(ex);
                ret = -1;
                throw;
            }
            finally
            {
                _dbHelper.Close(dbCommand);
                transaction.Dispose();
            }

            return(ret);
        }
Esempio n. 14
0
        public int Transfer(Model.UI.TradeInstance dest, Model.UI.TradeInstance src, List <SourceHoldingItem> transferItems)
        {
            List <TradeInstanceSecurity>       srcNewItems  = new List <TradeInstanceSecurity>();
            List <TradeInstanceSecurity>       destNewItems = new List <TradeInstanceSecurity>();
            List <TradeInstanceAdjustmentItem> adjustItems  = new List <TradeInstanceAdjustmentItem>();

            //获取src中所有的持仓
            var srcItems = Get(src.InstanceId);

            //获取dest中所有的持仓
            var destItems = Get(dest.InstanceId);

            //对于src,减去划转部分
            //对于dest,加入划转部分
            foreach (var transferItem in transferItems)
            {
                //对源实例中的证券进行更新
                TradeInstanceSecurity srcOutItem = new TradeInstanceSecurity
                {
                    SecuCode   = transferItem.SecuCode,
                    SecuType   = transferItem.SecuType,
                    InstanceId = src.InstanceId,
                };

                var srcOldItem = srcItems.Find(p => p.SecuCode.Equals(transferItem.SecuCode) && p.SecuType == transferItem.SecuType);
                if (srcOldItem != null)
                {
                    srcOutItem.PositionAmount = srcOldItem.PositionAmount - transferItem.TransferedAmount;
                    srcOutItem.PositionType   = srcOldItem.PositionType;
                    srcOutItem.SellToday      = srcOldItem.SellToday;
                    srcOutItem.SellBalance    = srcOldItem.SellBalance;
                    srcOutItem.DealFee        = srcOldItem.DealFee;
                }
                else
                {
                    //TODO:
                }

                srcNewItems.Add(srcOutItem);

                //对目标实例中的证券进行更新
                TradeInstanceSecurity destInItem = new TradeInstanceSecurity
                {
                    SecuCode     = transferItem.SecuCode,
                    SecuType     = transferItem.SecuType,
                    PositionType = transferItem.PositionType,
                    InstanceId   = dest.InstanceId,
                };

                var destOldItem = destItems.Find(p => p.SecuCode.Equals(transferItem.SecuCode) && p.SecuType == transferItem.SecuType);
                if (destOldItem != null)
                {
                    destInItem.PositionAmount = destOldItem.PositionAmount + transferItem.TransferedAmount;
                    destInItem.PositionType   = destOldItem.PositionType;
                    destInItem.SellToday      = destOldItem.SellToday;
                    destInItem.SellBalance    = destOldItem.SellBalance;
                    destInItem.DealFee        = destOldItem.DealFee;
                }
                else
                {
                    destInItem.PositionAmount = transferItem.TransferedAmount;
                    //TODO:
                    if (transferItem.SecuType == Model.SecurityInfo.SecurityType.Stock)
                    {
                        destInItem.PositionType = PositionType.SpotLong;
                    }
                    else if (transferItem.SecuType == Model.SecurityInfo.SecurityType.Futures)
                    {
                        destInItem.PositionType = PositionType.FuturesShort;
                    }
                }

                destNewItems.Add(destInItem);

                //对调整做记录
                TradeInstanceAdjustmentItem adjustItem = new TradeInstanceAdjustmentItem
                {
                    SourceInstanceId         = src.InstanceId,
                    SourcePortfolioCode      = src.PortfolioCode,
                    DestinationInstanceId    = dest.InstanceId,
                    DestinationPortfolioCode = dest.PortfolioCode,
                    SecuCode     = transferItem.SecuCode,
                    SecuType     = transferItem.SecuType,
                    PositionType = PositionType.SpotLong,
                    Price        = transferItem.TransferedPrice,
                    Amount       = transferItem.TransferedAmount,
                    AdjustType   = AdjustmentType.Transfer,
                };

                adjustItems.Add(adjustItem);
            }

            int        result = -1;
            List <int> idList = _tradeInstanceAdjustBLL.CreateTran(adjustItems);

            if (idList.Count > 0 && idList.Count == adjustItems.Count)
            {
                //更新数据库,指向要更新变化部分即可,通过提交事务
                result = _tradeinstsecudao.Transfer(destNewItems, srcNewItems);
            }

            return(result);
        }
Esempio n. 15
0
 public int Create(Model.UI.TradeInstance tradeInstance, List <TradeInstanceSecurity> tradeSecuItems)
 {
     return(_archivetradeinstancetransactiondao.Create(tradeInstance, tradeSecuItems));
 }
        /// <summary>
        /// Submit a new the TradeCommand to open the position. It will create a new row in the tradecommand table.
        /// It will check whether the tradeinstance is existed and it will create a new tradeinstance if there is no one.
        /// </summary>
        /// <param name="openItem">An object of OpenPositionItem contains some basic information, such as portfolio,
        /// monitor, instancecode, entrust direction.
        /// </param>
        /// <param name="secuItems">A list of detailed securities will be entrusted.</param>
        /// <param name="startDate">The trade command start date and time.</param>
        /// <param name="endDate">The trade command end date and time.</param>
        /// <returns>An integer value to indicate whether it is successful or fail. A positive value means success.
        /// Otherwise failure.</returns>
        public int SubmitOpenPosition(OpenPositionItem openItem, List <OpenPositionSecurityItem> secuItems, DateTime startDate, DateTime endDate)
        {
            int    instanceId   = -1;
            string instanceCode = openItem.InstanceCode;
            var    instance     = _tradeInstanceBLL.GetInstance(instanceCode);

            if (instance != null && !string.IsNullOrEmpty(instance.InstanceCode) && instance.InstanceCode.Equals(instanceCode))
            {
                instanceId = instance.InstanceId;
                instance.OperationCopies += openItem.Copies;
                _tradeInstanceBLL.Update(instance, secuItems);
            }
            else
            {
                Model.UI.TradeInstance tradeInstance = new Model.UI.TradeInstance
                {
                    InstanceCode     = instanceCode,
                    PortfolioId      = openItem.PortfolioId,
                    MonitorUnitId    = openItem.MonitorId,
                    TemplateId       = openItem.TemplateId,
                    StockDirection   = EntrustDirection.BuySpot,
                    FuturesContract  = openItem.FuturesContract,
                    FuturesDirection = EntrustDirection.SellOpen,
                    OperationCopies  = openItem.Copies,
                    StockPriceType   = StockPriceType.NoLimit,
                    FuturesPriceType = FuturesPriceType.NoLimit,
                    Status           = TradeInstanceStatus.Active,
                };

                tradeInstance.Owner = LoginManager.Instance.GetUserId();
                instanceId          = _tradeInstanceBLL.Create(tradeInstance, secuItems);
            }

            int ret = -1;

            if (instanceId > 0)
            {
                //success! Will send generate TradingCommand
                Model.Database.TradeCommand cmdItem = new Model.Database.TradeCommand
                {
                    InstanceId        = instanceId,
                    ECommandType      = CommandType.Arbitrage,
                    EExecuteType      = ExecuteType.OpenPosition,
                    CommandNum        = openItem.Copies,
                    EStockDirection   = EntrustDirection.BuySpot,
                    EFuturesDirection = EntrustDirection.SellOpen,
                    EEntrustStatus    = EntrustStatus.NoExecuted,
                    EDealStatus       = DealStatus.NoDeal,
                    ModifiedTimes     = 1,
                    DStartDate        = startDate,
                    DEndDate          = endDate,
                    Notes             = openItem.Notes,
                };

                var cmdSecuItems = GetSelectCommandSecurities(openItem.MonitorId, -1, secuItems);

                ret = SubmitInternal(cmdItem, cmdSecuItems);
            }
            else
            {
                //TODO: error message
            }

            return(ret);
        }