private int DataHandlerCallback(CallerToken token, DataParser dataParser)
        {
            int ret = -1;

            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            List <UFXMultipleHoldingResponse> responseItems = new List <UFXMultipleHoldingResponse>();

            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                responseItems = UFXDataSetHelper.ParseData <UFXMultipleHoldingResponse>(dataParser);

                var futures = responseItems.Where(p => p.MarketNo == "7").ToList();

                var validItems = responseItems.Where(p => p.CurrentAmount > 0).ToList();
            }
            else
            {
                ret = -1;
            }

            if (token.WaitEvent != null)
            {
                token.WaitEvent.Set();
            }

            return(ret);
        }
Пример #2
0
        private int WithdrawBasketCallback(CallerToken token, DataParser dataParser)
        {
            var errorResponse = T2ErrorHandler.Handle(dataParser);

            List <UFXBasketWithdrawResponse> responseItems = new List <UFXBasketWithdrawResponse>();

            var dataFieldMap = UFXDataBindingHelper.GetProperty <UFXBasketWithdrawResponse>();

            for (int i = 1, count = dataParser.DataSets.Count; i < count; i++)
            {
                var dataSet = dataParser.DataSets[i];
                foreach (var dataRow in dataSet.Rows)
                {
                    UFXBasketWithdrawResponse p = new UFXBasketWithdrawResponse();
                    UFXDataSetHelper.SetValue <UFXBasketWithdrawResponse>(ref p, dataRow.Columns, dataFieldMap);
                    responseItems.Add(p);
                }
            }

            List <EntrustSecurityItem> entrustSecuItems = new List <EntrustSecurityItem>();

            int ret = -1;

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

                        entrustSecuItems.Add(entrustItem);
                    }

                    ret = _entrustdao.UpdateSecurityEntrustStatus(entrustSecuItems, Model.EnumType.EntrustStatus.CancelSuccess);
                    ret = _entrustcmddao.UpdateEntrustCommandStatus(token.SubmitId, Model.EnumType.EntrustStatus.CancelSuccess);
                    ret = _tradecmddao.UpdateTargetNumBySubmitId(token.SubmitId, token.CommandId);
                }
            }

            if (token.Caller != null)
            {
                token.Caller(token, entrustSecuItems, errorResponse);
            }

            if (token.WaitEvent != null)
            {
                token.WaitEvent.Set();
            }

            return(ret);
        }
Пример #3
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);
        }
Пример #4
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);
        }
Пример #5
0
        private int DataHandlerCallback(CallerToken token, DataParser dataParser)
        {
            int ret = -1;

            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            List <UFXHoldingResponse> responseItems = new List <UFXHoldingResponse>();

            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                responseItems = UFXDataSetHelper.ParseData <UFXHoldingResponse>(dataParser);

                var futures = responseItems.Where(p => p.MarketNo == "7").ToList();

                var validItems = responseItems.Where(p => p.CurrentAmount > 0).ToList();

                if (validItems != null && validItems.Count > 0 &&
                    token.OutArgs != null && token.OutArgs is List <UFXHoldingResponse> )
                {
                    ((List <UFXHoldingResponse>)token.OutArgs).AddRange(validItems);
                }
            }
            else
            {
                ret = -1;
            }

            if (token.Caller != null)
            {
                token.Caller(token, null, errorResponse);
            }

            if (token.WaitEvent != null)
            {
                token.WaitEvent.Set();
            }

            return(ret);
        }
Пример #6
0
        private int QueryDataHandler(CallerToken token, DataParser dataParser)
        {
            List <UFXQueryFuturesEntrustResponse> responseItems = new List <UFXQueryFuturesEntrustResponse>();
            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.ErrorResponse = errorResponse;

            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                responseItems = UFXDataSetHelper.ParseData <UFXQueryFuturesEntrustResponse>(dataParser);
            }

            try
            {
                if (token.Caller != null)
                {
                    var entrustFlowItems = GetFlowItems(token, responseItems);

                    if (token.OutArgs != null &&
                        token.OutArgs is List <EntrustFlowItem> &&
                        entrustFlowItems != null &&
                        entrustFlowItems.Count > 0
                        )
                    {
                        ((List <EntrustFlowItem>)token.OutArgs).AddRange(entrustFlowItems);
                    }

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

            return(responseItems.Count());
        }
Пример #7
0
        private List <EntrustFlowItem> GetFlowItems(CallerToken token, List <UFXQueryFuturesEntrustResponse> responseItems)
        {
            var entrustFlowItems = new List <EntrustFlowItem>();

            if (responseItems == null || responseItems.Count == 0)
            {
                return(entrustFlowItems);
            }

            Portfolio portfolio     = (Portfolio)token.InArgs;
            string    portfolioCode = string.Empty;
            string    portfolioName = string.Empty;
            string    fundCode      = string.Empty;
            string    fundName      = string.Empty;

            if (portfolio != null)
            {
                portfolioCode = portfolio.PortfolioNo;
                portfolioName = portfolio.PortfolioName;
                fundCode      = portfolio.FundCode;
                fundName      = portfolio.FundName;
            }

            Dictionary <int, Model.UI.TradeInstance> cmdInstMap = new Dictionary <int, Model.UI.TradeInstance>();

            foreach (var responseItem in responseItems)
            {
                int commandId = 0;
                int submitId = 0;
                int requestId = 0;
                int temp1, temp2, temp3;
                if (EntrustRequestHelper.TryParseThirdReff(responseItem.ThirdReff, out temp1, out temp2, out temp3))
                {
                    commandId = temp1;
                    submitId  = temp2;
                    requestId = temp3;
                }

                int    instanceId   = 0;
                string instanceCode = string.Empty;
                if (!cmdInstMap.ContainsKey(commandId))
                {
                    var tradeInstance = _tradeCommandBLL.GetTradeInstance(commandId);
                    if (tradeInstance != null)
                    {
                        instanceId   = tradeInstance.InstanceId;
                        instanceCode = tradeInstance.InstanceCode;
                        cmdInstMap.Add(commandId, tradeInstance);
                    }
                }
                else
                {
                    instanceId   = cmdInstMap[commandId].InstanceId;
                    instanceCode = cmdInstMap[commandId].InstanceCode;
                }

                var entrustDirection        = UFXTypeConverter.GetEntrustDirection(responseItem.EntrustDirection);
                var futuresDirection        = UFXTypeConverter.GetFuturesDirection(responseItem.FuturesDirection);
                EntrustDirection eDirection = EntrustDirectionConverter.GetFuturesEntrustDirection(entrustDirection, futuresDirection);

                EntrustFlowItem efItem = new EntrustFlowItem
                {
                    CommandNo = token.CommandId,
                    SubmitId  = token.SubmitId,
                    //Market = responseItem.MarketNo,
                    SecuCode = responseItem.StockCode,
                    //EntrustDirection = responseItem.EntrustDirection,
                    EEntrustPriceType = EntrustPriceTypeConverter.GetPriceType(responseItem.PriceType),
                    EntrustPrice      = responseItem.EntrustPrice,
                    EntrustAmount     = responseItem.EntrustAmount,
                    //EntrustStatus = responseItem.EntrustState,
                    DealAmount     = responseItem.DealAmount,
                    DealMoney      = responseItem.DealBalance,
                    DealTimes      = responseItem.DealTimes,
                    DEntrustDate   = DateUtil.GetDateTimeFromInt(responseItem.EntrustDate, responseItem.EntrustTime),
                    EntrustBatchNo = responseItem.BatchNo,
                    EntrustNo      = responseItem.EntrustNo,
                    DeclareSeat    = responseItem.ReportSeat,
                    DeclareNo      = Convert.ToInt32(responseItem.ReportNo),
                    RequestId      = responseItem.ExtSystemId,
                    FundCode       = responseItem.AccountCode,
                    FundName       = fundName,
                    PortfolioCode  = portfolioCode,
                    PortfolioName  = portfolioName,
                    EDirection     = eDirection,
                    //EEntrustDirection = UFXTypeConverter.GetEntrustDirection(responseItem.EntrustDirection),
                    EMarketCode   = UFXTypeConverter.GetMarketCode(responseItem.MarketNo),
                    EEntrustState = UFXTypeConverter.GetEntrustState(responseItem.EntrustState),
                    WithdrawCause = responseItem.WithdrawCause,
                    InstanceId    = instanceId,
                    InstanceNo    = instanceCode,
                };

                if (responseItem.FirstDealTime > 0)
                {
                    efItem.DFirstDealDate = DateUtil.GetDateTimeFromInt(responseItem.EntrustDate, responseItem.FirstDealTime);
                }

                efItem.ExchangeCode = UFXTypeConverter.GetMarketCode(efItem.EMarketCode);
                efItem.CommandNo    = commandId;
                efItem.SubmitId     = submitId;
                efItem.RequestId    = requestId;

                entrustFlowItems.Add(efItem);
            }

            return(entrustFlowItems);
        }
        private List <DealFlowItem> GetDealItems(CallerToken token, List <UFXQueryDealResponse> responseItems)
        {
            List <DealFlowItem> dealItems = new List <DealFlowItem>();

            if (responseItems == null || responseItems.Count == 0)
            {
                return(dealItems);
            }

            Portfolio portfolio     = (Portfolio)token.InArgs;
            string    portfolioCode = string.Empty;
            string    portfolioName = string.Empty;
            string    fundCode      = string.Empty;
            string    fundName      = string.Empty;

            if (portfolio != null)
            {
                portfolioCode = portfolio.PortfolioNo;
                portfolioName = portfolio.PortfolioName;
                fundCode      = portfolio.FundCode;
                fundName      = portfolio.FundName;
            }

            Dictionary <int, Model.UI.TradeInstance> cmdInstMap = new Dictionary <int, Model.UI.TradeInstance>();

            foreach (var responseItem in responseItems)
            {
                int commandId = 0;
                int submitId = 0;
                int requestId = 0;
                int temp1, temp2, temp3;
                if (EntrustRequestHelper.TryParseThirdReff(responseItem.ThirdReff, out temp1, out temp2, out temp3))
                {
                    commandId = temp1;
                    submitId  = temp2;
                    requestId = temp3;
                }

                int    instanceId   = 0;
                string instanceCode = string.Empty;
                if (!cmdInstMap.ContainsKey(commandId))
                {
                    var tradeInstance = _tradeCommandBLL.GetTradeInstance(commandId);
                    if (tradeInstance != null)
                    {
                        instanceId   = tradeInstance.InstanceId;
                        instanceCode = tradeInstance.InstanceCode;
                        cmdInstMap.Add(commandId, tradeInstance);
                    }
                }
                else
                {
                    instanceId   = cmdInstMap[commandId].InstanceId;
                    instanceCode = cmdInstMap[commandId].InstanceCode;
                }

                var marketCode       = UFXTypeConverter.GetMarketCode(responseItem.MarketNo);
                var entrustDirection = UFXTypeConverter.GetEntrustDirection(responseItem.EntrustDirection);

                DealFlowItem efItem = new DealFlowItem
                {
                    CommandNo       = commandId,
                    SecuCode        = responseItem.StockCode,
                    FundNo          = responseItem.AccountCode,
                    FundName        = fundName,
                    PortfolioCode   = responseItem.CombiNo,
                    PortfolioName   = portfolioName,
                    EDirection      = EntrustDirectionConverter.GetSecurityEntrustDirection(entrustDirection),
                    DealPrice       = responseItem.DealPrice,
                    DealAmount      = responseItem.DealAmount,
                    DealMoney       = responseItem.DealBalance,
                    DealTime        = string.Format("{0}", responseItem.DealTime),
                    ShareHolderCode = responseItem.StockHolderId,
                    EntrustNo       = string.Format("{0}", responseItem.EntrustNo),
                    DealNo          = string.Format("{0}", responseItem.DealNo),
                    ExchangeCode    = UFXTypeConverter.GetMarketCode(marketCode),
                    InstanceId      = instanceId.ToString(),
                    InstanceNo      = instanceCode,
                };

                dealItems.Add(efItem);
            }

            return(dealItems);
        }
Пример #9
0
        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);
        }
Пример #10
0
        private int EntrustBasketCallback(CallerToken token, DataParser dataParser)
        {
            int ret = -1;
            List <EntrustSecurityItem> entrustSecuItems = new List <EntrustSecurityItem>();

            var errorResponse = T2ErrorHandler.Handle(dataParser);

            token.OutArgs = errorResponse;
            if (T2ErrorHandler.Success(errorResponse.ErrorCode))
            {
                List <UFXBasketEntrustResponse> responseItems = new List <UFXBasketEntrustResponse>();
                var dataFieldMap = UFXDataBindingHelper.GetProperty <UFXBasketEntrustResponse>();
                for (int i = 1, count = dataParser.DataSets.Count; i < count; i++)
                {
                    var dataSet = dataParser.DataSets[i];
                    foreach (var dataRow in dataSet.Rows)
                    {
                        UFXBasketEntrustResponse p = new UFXBasketEntrustResponse();
                        UFXDataSetHelper.SetValue <UFXBasketEntrustResponse>(ref p, dataRow.Columns, dataFieldMap);
                        responseItems.Add(p);
                    }
                }

                foreach (var responseItem in responseItems)
                {
                    var entrustItem = new EntrustSecurityItem
                    {
                        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 = _entrustdao.UpdateSecurityEntrustResponseByRequestId(entrustSecuItems);

                if (token.InArgs != null && token.InArgs is EntrustCommandItem)
                {
                    var cmdItem = token.InArgs as EntrustCommandItem;

                    ret = _tradecmddao.UpdateTargetNum(cmdItem.CommandId, cmdItem.Copies);
                }

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

                    ret = _entrustcmddao.UpdateEntrustCommandBatchNo(token.SubmitId, batchNo, Model.EnumType.EntrustStatus.Completed, errorResponse.ErrorCode, errorResponse.ErrorMessage);
                }
                else
                {
                    //TODO:
                    string msg = string.Format("The SubmitId [{0}] was split into several batch no", token.SubmitId);
                    logger.Warn(msg);
                }
            }
            else
            {
                ret = -1;
            }

            if (token.Caller != null)
            {
                token.Caller(token, entrustSecuItems, errorResponse);
            }

            if (token.WaitEvent != null)
            {
                token.WaitEvent.Set();
            }

            return(ret);
        }