Пример #1
0
        public HttpResponseMessage GetDividendResult([FromBody] Dictionary <string, object> dic)
        {
            int           apiID      = Convert.ToInt32(dic["apiID"]);
            APIInputParam inputParam = CreateInputStr(apiID, new Dictionary <string, string>());
            ReturnData    result     = new ReturnData();

            try
            {
                DataTable     dt = bll.GetTsCode(dic["ts_code"].ToString()).Tables[0];
                TuShareResult apiResultInsert = new TuShareResult();
                apiResultInsert.data       = new TuShareResultData();
                apiResultInsert.data.items = new List <List <string> >();
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        HttpHelper hh = new HttpHelper();
                        inputParam.@params["ts_code"] = dr["ts_code"].ToString();
                        //postData.
                        TuShareResult apiResult = JSONUtil.ParseFromJson <TuShareResult>(hh.Post(apiUrl, inputParam.ToJson <APIInputParam>()));
                        if (apiResult.data == null)//API接口无返回数据
                        {
                            result.S = false;
                            result.M = "API接口无数据返回!";
                        }
                        else
                        {
                            if (apiResultInsert.data.items.Count > 3000)
                            {
                                //foreach (List<string> item in apiResult.data.items)
                                //{
                                //    apiResultInsert.data.items[0].AddRange(item);
                                //}
                                apiResultInsert.data.items.AddRange(apiResult.data.items);
                                result = bll.GetApiResult(apiResultInsert, apiID);
                                apiResultInsert.data.items = new List <List <string> >();
                            }
                            else
                            {
                                apiResultInsert.data.items.AddRange(apiResult.data.items);
                            }
                        }
                    }
                    if (apiResultInsert.data.items.Count > 0)
                    {
                        result = bll.GetApiResult(apiResultInsert, apiID);
                    }
                }
                else
                {
                    result.SetErrorMsg("找不到股票代码数据!");
                }
            }
            catch (Exception ex)
            {
                result.SetErrorMsg(ex.Message);
            }
            return(MyResponseMessage.SuccessJson(result));
        }
Пример #2
0
        public HttpResponseMessage GetDividendResultMultiple([FromBody] Dictionary <string, object> dic)
        {
            int           apiID      = Convert.ToInt32(dic["apiID"]);
            APIInputParam inputParam = CreateInputStr(apiID, new Dictionary <string, string>());
            ReturnData    result     = new ReturnData();

            try
            {
                DataTable     dt = bll.GetTsCode(dic["ts_code"].ToString()).Tables[0];
                TuShareResult apiResultInsert = new TuShareResult();
                apiResultInsert.data       = new TuShareResultData();
                apiResultInsert.data.items = new List <List <string> >();
                if (dt.Rows.Count > 0)
                {
                    int count      = dt.Rows.Count;
                    int thCount    = count % 2 == 0 ? 2 : 3;
                    int perThCount = count / 2;
                    for (int i = 1; i < thCount + 1; i++)
                    {
                        Dictionary <string, object> dicTh = new Dictionary <string, object>();
                        dicTh.Add("apiID", apiID);
                        DataTable dtNew = new DataTable();
                        dtNew = dt.Copy();
                        dtNew.Clear();
                        for (int j = perThCount * (i - 1); j < i * perThCount; j++)
                        {
                            dtNew.Rows.Add(dt.Rows[j].ItemArray);
                        }
                        dicTh.Add("dt", dtNew);
                        dicTh.Add("inputParam", inputParam);
                        Thread td = new Thread(new ParameterizedThreadStart(GetDividend));
                        td.Start(dicTh);
                    }
                }
                else
                {
                    result.SetErrorMsg("找不到股票代码数据!");
                }
            }
            catch (Exception ex)
            {
                result.SetErrorMsg(ex.Message);
            }
            return(MyResponseMessage.SuccessJson(result));
        }
Пример #3
0
        /// <summary>
        /// 创建接口参数
        /// </summary>
        /// <param name="apiID">接口ID</param>
        /// <param name="dicInput">传入参数及值</param>
        /// <returns></returns>
        public APIInputParam CreateInputStr(int apiID, Dictionary <string, string> dicInput)
        {
            APIInputParam input = new APIInputParam();

            input.token   = apiToken;          //设置Token
            input.@params = new Dictionary <string, string>();
            DataSet ds = bll.GetDetail(apiID); //获取api接口信息

            if (ds.Tables.Count > 0)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    input.api_name = ds.Tables[0].Rows[0]["ApiName"].ToString();
                }
                if (ds.Tables[1].Rows.Count > 0)
                {
                    if (dicInput.Count > 0)                                      //前端传参
                    {
                        foreach (KeyValuePair <string, string> item in dicInput) //校验前端传入的输入参数是否全部存在
                        {
                            if (!ds.Tables[1].Columns.Contains(item.Key))
                            {
                                throw new Exception("接口不存在" + item.Key + "输入参数,请核对接口输入参数信息!");
                            }
                        }
                        foreach (DataRow dr in ds.Tables[1].Rows)//设置传入参数及其值
                        {
                            if (dicInput.Keys.Contains(dr["ParamName"].ToString()))
                            {
                                [email protected](dr["ParamName"].ToString(), dicInput[dr["ParamName"].ToString()]);
                            }
                            else
                            {
                                [email protected](dr["ParamName"].ToString(), "");
                            }
                        }
                    }
                    else//无前端传参
                    {
                        foreach (DataRow dr in ds.Tables[1].Rows)
                        {
                            [email protected](dr["ParamName"].ToString(), "");
                        }
                    }
                }
                else
                {
                    throw new Exception("未找到API接口的输入参数信息");
                }
                //设置输出fields
                if (ds.Tables[2].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables[2].Rows)
                    {
                        input.fields += dr["ParamName"].ToString() + ",";
                    }
                    input.fields = input.fields.TrimEnd(',');
                }
                else
                {
                    throw new Exception("未找到API接口的输出参数信息");
                }
            }
            return(input);
        }
Пример #4
0
        public void GetDividend(object obj)
        {
            Dictionary <string, object> dic = (Dictionary <string, object>)obj;
            int           apiID             = (int)dic["apiID"];
            APIInputParam inputParam        = (APIInputParam)dic["inputParam"];
            DataTable     dt = (DataTable)dic["dt"];
            TuShareResult apiResultInsert = new TuShareResult();

            apiResultInsert.data       = new TuShareResultData();
            apiResultInsert.data.items = new List <List <string> >();
            int index = 1;
            int min   = DateTime.Now.Minute;
            int sec   = DateTime.Now.Second;

            foreach (DataRow dr in dt.Rows)
            {
                if (index % 60 == 0)
                {
                    int min2 = DateTime.Now.Minute;
                    int sec2 = DateTime.Now.Second;

                    if (min2 - min == 1)
                    {
                        if (60 - sec + sec2 < 60)
                        {
                            Thread.Sleep((Math.Abs(sec2 - sec)) * 1000);
                        }
                    }
                    else if (min2 - min == 0)
                    {
                        Thread.Sleep(Math.Abs(60 - sec2 + sec) * 1000);
                    }
                    min = min2;
                    sec = sec2;
                }
                index += 1;
                HttpHelper hh = new HttpHelper();
                inputParam.@params["ts_code"] = dr["ts_code"].ToString();
                //postData.
                TuShareResult apiResult;
                string        inputStr = "";
                lock (this)
                {
                    inputStr = inputParam.ToJson <APIInputParam>();
                }
                string responStr = hh.Post(apiUrl, inputStr);
                apiResult = JSONUtil.ParseFromJson <TuShareResult>(responStr);
                if (apiResult.data != null)//API接口无返回数据
                {
                    if (apiResultInsert.data.items.Count > 3000)
                    {
                        apiResultInsert.data.items.AddRange(apiResult.data.items);
                        bll.GetApiResult(apiResultInsert, apiID);
                        apiResultInsert.data.items = new List <List <string> >();
                    }
                    else
                    {
                        apiResultInsert.data.items.AddRange(apiResult.data.items);
                    }
                }
            }
            if (apiResultInsert.data.items.Count > 0)
            {
                bll.GetApiResult(apiResultInsert, apiID);
            }
        }