private List <EntrustSecurity> ExecuteEntrustSecurity(DbCommand dbCommand)
        {
            List <EntrustSecurity> items = new List <EntrustSecurity>();
            var reader = _dbHelper.ExecuteReader(dbCommand);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    EntrustSecurity item = new EntrustSecurity();
                    item.RequestId        = (int)reader["RequestId"];
                    item.SubmitId         = (int)reader["SubmitId"];
                    item.CommandId        = (int)reader["CommandId"];
                    item.SecuCode         = (string)reader["SecuCode"];
                    item.SecuType         = (SecurityType)(int)reader["SecuType"];
                    item.EntrustAmount    = (int)reader["EntrustAmount"];
                    item.EntrustPrice     = (double)(decimal)reader["EntrustPrice"];
                    item.EntrustDirection = (EntrustDirection)reader["EntrustDirection"];
                    item.EntrustStatus    = (EntrustStatus)reader["EntrustStatus"];
                    item.EntrustPriceType = (EntrustPriceType)reader["EntrustPriceType"];
                    item.PriceType        = (PriceType)reader["PriceType"];
                    item.EntrustNo        = (int)reader["EntrustNo"];
                    item.BatchNo          = (int)reader["BatchNo"];
                    item.DealStatus       = (DealStatus)reader["DealStatus"];
                    item.TotalDealAmount  = (int)reader["TotalDealAmount"];
                    item.TotalDealBalance = (double)(decimal)reader["TotalDealBalance"];
                    item.TotalDealFee     = (double)(decimal)reader["TotalDealFee"];

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

                    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["EntrustFailCode"] != null && reader["EntrustFailCode"] != DBNull.Value)
                    {
                        item.EntrustFailCode = (int)reader["EntrustFailCode"];
                    }

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

                    items.Add(item);
                }
            }

            reader.Close();
            return(items);
        }
Beispiel #2
0
        public BLLResponse SubmitOne(Model.Database.EntrustCommand cmdItem, List <CancelRedoItem> cancelItems, CallerCallback callback)
        {
            //TODO: adjust the EntrustAmount
            List <EntrustSecurity> entrustItems = new List <EntrustSecurity>();
            DateTime now = DateTime.Now;

            //merge the same security in with the same commandId
            var uniqueSecuCodes = cancelItems.Select(p => p.SecuCode).Distinct().ToList();

            foreach (var secuCode in uniqueSecuCodes)
            {
                EntrustSecurity item = new EntrustSecurity
                {
                    CommandId   = cmdItem.CommandId,
                    SecuCode    = secuCode,
                    EntrustDate = now,
                };

                var originSecuItems = cancelItems.Where(p => p.SecuCode.Equals(secuCode)).ToList();
                if (originSecuItems != null && originSecuItems.Count > 0)
                {
                    item.SecuType         = originSecuItems[0].SecuType;
                    item.EntrustPrice     = originSecuItems[0].EntrustPrice;
                    item.EntrustDirection = originSecuItems[0].EDirection;
                    item.EntrustPriceType = originSecuItems[0].EEntrustPriceType;
                    item.PriceType        = originSecuItems[0].EPriceSetting;

                    item.EntrustAmount = originSecuItems.Sum(o => o.LeftAmount);

                    entrustItems.Add(item);
                }
            }

            return(SubmitSync(cmdItem, entrustItems, callback));
        }
        private BLLResponse GetResponse(int submitId, int commandId, List <UFXBasketWithdrawResponse> responseItems)
        {
            BLLResponse bllResponse = null;

            List <EntrustSecurity> successCancelSecuItems = new List <EntrustSecurity>();
            List <EntrustSecurity> failCancelSecuItems    = new List <EntrustSecurity>();
            int ret = -1;

            if (submitId > 0)
            {
                //TODO: check the withdraw status
                foreach (var responseItem in responseItems)
                {
                    var entrustItem = new EntrustSecurity
                    {
                        SubmitId  = submitId,
                        CommandId = commandId,
                        SecuCode  = responseItem.StockCode,
                        EntrustNo = responseItem.EntrustNo,
                    };

                    if (FailFlag.Equals(responseItem.SuccessFlag))
                    {
                        failCancelSecuItems.Add(entrustItem);
                    }
                    else
                    {
                        successCancelSecuItems.Add(entrustItem);
                    }
                }

                if (successCancelSecuItems.Count > 0)
                {
                    ret = _entrustCombineBLL.UpdateSecurityEntrustStatus(successCancelSecuItems, Model.EnumType.EntrustStatus.CancelSuccess);
                }

                if (failCancelSecuItems.Count > 0)
                {
                    ret = _entrustCombineBLL.UpdateSecurityEntrustStatus(successCancelSecuItems, Model.EnumType.EntrustStatus.CancelFail);
                }
            }

            //var successItems = responseItems.Where(p => SuccessFlag.Equals(p.SuccessFlag)).ToList();
            //var failItems = responseItems.Where(p => FailFlag.Equals(p.SuccessFlag)).ToList();
            if (successCancelSecuItems.Count == responseItems.Count)
            {
                bllResponse = new BLLResponse {
                    Code = Model.ConnectionCode.Success, Message = "Withdraw success!"
                };
            }
            else
            {
                bllResponse = new BLLResponse {
                    Code = Model.ConnectionCode.FailWithdraw, Message = "Withdraw failure!"
                };
            }

            return(bllResponse);
        }
Beispiel #4
0
        private int WithdrawDataHandler(CallerToken token, DataParser dataParser)
        {
            List <UFXBasketWithdrawResponse> responseItems = new List <UFXBasketWithdrawResponse>();

            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            //Verify the dataParser before reading the data.
            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                responseItems = UFXDataSetHelper.ParseData <UFXBasketWithdrawResponse>(dataParser);
            }

            int ret = -1;
            List <EntrustSecurity> entrustSecuItems = new List <EntrustSecurity>();

            if (token.SubmitId > 0)
            {
                //TODO: check the withdraw status
                foreach (var responseItem in responseItems)
                {
                    var entrustItem = new EntrustSecurity
                    {
                        SubmitId  = token.SubmitId,
                        CommandId = token.CommandId,
                        SecuCode  = responseItem.StockCode,
                        EntrustNo = responseItem.EntrustNo,
                    };

                    entrustSecuItems.Add(entrustItem);
                }

                if (entrustSecuItems.Count > 0)
                {
                    ret = _entrustCombineBLL.UpdateSecurityEntrustStatus(entrustSecuItems, Model.EnumType.EntrustStatus.CancelSuccess);
                }
            }

            try
            {
                if (token.Caller != null)
                {
                    token.Caller(token, entrustSecuItems, errorResponse);
                }
            }
            finally
            {
                if (token.WaitEvent != null)
                {
                    token.WaitEvent.Set();
                }
            }

            return(ret);
        }
        private EntrustSecurity Convert(UFXEntrustCompletedResponse responseItem)
        {
            var entrustItem = new EntrustSecurity
            {
                RequestId = responseItem.ExtSystemId,
                SecuCode  = responseItem.StockCode,
                EntrustNo = responseItem.EntrustNo,
                BatchNo   = responseItem.BatchNo,
            };

            return(entrustItem);
        }
Beispiel #6
0
        private int WithdrawDataHandler(CallerToken token, DataParser dataParser)
        {
            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            List <UFXBasketWithdrawResponse> responseItems = UFXDataSetHelper.ParseData <UFXBasketWithdrawResponse>(dataParser);

            //TODO: It needs to verify the response data. Only the can set cancel successfully in those without no error.
            int ret = -1;
            List <EntrustSecurity> entrustSecuItems = new List <EntrustSecurity>();

            if (token.SubmitId > 0)
            {
                foreach (var responseItem in responseItems)
                {
                    var entrustItem = new EntrustSecurity
                    {
                        SubmitId  = token.SubmitId,
                        CommandId = token.CommandId,
                        SecuCode  = responseItem.StockCode,
                        EntrustNo = responseItem.EntrustNo,
                    };

                    entrustSecuItems.Add(entrustItem);
                }

                if (entrustSecuItems.Count > 0)
                {
                    ret = _entrustCombineBLL.UpdateSecurityEntrustStatus(entrustSecuItems, Model.EnumType.EntrustStatus.CancelSuccess);
                    ret = _entrustCommandBLL.UpdateEntrustCommandStatus(token.SubmitId, Model.EnumType.EntrustStatus.CancelSuccess);
                }
            }

            try
            {
                if (token.Caller != null)
                {
                    token.Caller(token, entrustSecuItems, errorResponse);
                }
            }
            finally
            {
                if (token.WaitEvent != null)
                {
                    token.WaitEvent.Set();
                }
            }

            return(ret);
        }
Beispiel #7
0
        private CancelRedoItem Convert(EntrustSecurity p, Model.Database.TradeCommand tradeCommand)
        {
            CancelRedoItem cancelRedoItem = new CancelRedoItem
            {
                Selection        = true,
                CommandId        = tradeCommand.CommandId,
                EDirection       = p.EntrustDirection,
                EntrustPrice     = p.EntrustPrice,
                SecuCode         = p.SecuCode,
                SecuType         = p.SecuType,
                EntrustNo        = p.EntrustNo,
                ECommandPrice    = p.PriceType,
                ReportPrice      = p.EntrustPrice,
                EOriginPriceType = p.EntrustPriceType,
                LeftAmount       = p.EntrustAmount - p.TotalDealAmount,
                ReportAmount     = p.EntrustAmount,
                DealAmount       = p.TotalDealAmount,
                EntrustDate      = p.EntrustDate,
                SubmitId         = p.SubmitId,
                EntrustBatchNo   = p.BatchNo,
                PortfolioName    = tradeCommand.PortfolioName,
                FundName         = tradeCommand.AccountName,
            };

            cancelRedoItem.EntrustAmount = cancelRedoItem.LeftAmount;
            if (cancelRedoItem.SecuType == Model.SecurityInfo.SecurityType.Stock && cancelRedoItem.EDirection == EntrustDirection.BuySpot)
            {
                if (cancelRedoItem.LeftAmount % 100 > 0)
                {
                    cancelRedoItem.EntrustAmount = AmountRoundUtil.Round(cancelRedoItem.LeftAmount);
                }
            }

            var secuInfo = SecurityInfoManager.Instance.Get(p.SecuCode, p.SecuType);

            if (secuInfo != null)
            {
                cancelRedoItem.SecuName     = secuInfo.SecuName;
                cancelRedoItem.ExchangeCode = secuInfo.ExchangeCode;
            }
            else
            {
                cancelRedoItem.ExchangeCode = SecurityItemHelper.GetExchangeCode(p.SecuCode, p.SecuType);
            }

            return(cancelRedoItem);
        }
Beispiel #8
0
        private EntrustSecurity ConvertBack(CancelSecurityItem cancelItem)
        {
            var entrustItem = new EntrustSecurity
            {
                CommandId        = cancelItem.CommandId,
                SubmitId         = cancelItem.SubmitId,
                SecuCode         = cancelItem.SecuCode,
                SecuType         = cancelItem.SecuType,
                EntrustNo        = cancelItem.EntrustNo,
                BatchNo          = cancelItem.EntrustBatchNo,
                PriceType        = cancelItem.ECommandPrice,
                EntrustPriceType = cancelItem.EOriginPriceType,
                EntrustDirection = cancelItem.EDirection,
                EntrustAmount    = cancelItem.ReportAmount,
                DealTimes        = cancelItem.DealTimes,
                EntrustPrice     = cancelItem.ReportPrice,
            };

            return(entrustItem);
        }
        private int EntrustDataHandler(CallerToken token, DataParser dataParser)
        {
            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            List <UFXBasketEntrustResponse> responseItems = UFXDataSetHelper.ParseData <UFXBasketEntrustResponse>(dataParser);

            int ret = -1;
            List <EntrustSecurity> entrustSecuItems = new List <EntrustSecurity>();

            foreach (var responseItem in responseItems)
            {
                var entrustItem = new EntrustSecurity
                {
                    SubmitId         = token.SubmitId,
                    RequestId        = responseItem.ExtSystemId,
                    SecuCode         = responseItem.StockCode,
                    EntrustNo        = responseItem.EntrustNo,
                    BatchNo          = responseItem.BatchNo,
                    EntrustFailCode  = responseItem.EntrustFailCode,
                    EntrustFailCause = responseItem.FailCause,
                };

                entrustSecuItems.Add(entrustItem);
            }

            ret = _entrustCombineBLL.UpdateSecurityEntrustResponseByRequestId(entrustSecuItems);

            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                int batchNo  = 0;
                var batchNos = responseItems.Select(p => p.BatchNo).Distinct().ToList();
                if (batchNos.Count == 1)
                {
                    batchNo = batchNos[0];
                }

                ret = _entrustCommandBLL.UpdateEntrustCommandBatchNo(token.SubmitId, batchNo, Model.EnumType.EntrustStatus.Completed, errorResponse.ErrorCode, errorResponse.ErrorMessage);
            }
            else
            {
                ret = _entrustCommandBLL.UpdateEntrustCommandBatchNo(token.SubmitId, 0, Model.EnumType.EntrustStatus.EntrustFailed, errorResponse.ErrorCode, errorResponse.ErrorMessage);

                //TODO:
                string msg = string.Format("The SubmitId [{0}] fail to entrust. ErrorCode: {1}, ErrorMessage: {2}, MessageDetail: {3}", token.SubmitId, errorResponse.ErrorCode, errorResponse.ErrorMessage, errorResponse.MessageDetail);
                logger.Error(msg);
            }

            try
            {
                if (token.Caller != null)
                {
                    token.Caller(token, entrustSecuItems, errorResponse);
                }
            }
            finally
            {
                if (token.WaitEvent != null)
                {
                    token.WaitEvent.Set();
                }
            }

            return(ret);
        }