Ejemplo n.º 1
0
        private int CheckReporting(string p_invoicerId, int p_noIssuing, string p_where, PgDatParameters p_dbps)
        {
            int _noReporting = 0;

            lock (SyncEngine)
                _noReporting = CheckReEnter(p_invoicerId, p_where, p_dbps);

            if (_noReporting > 0)
            {
                ReportArgs _args = new ReportArgs()
                {
                    invoicerId  = p_invoicerId,
                    noIssuing   = p_noIssuing,
                    noReporting = _noReporting,
                    where       = p_where,
                    dbps        = p_dbps
                };

                // Do not use using statement
                ThreadPoolWait _doneEvent = new ThreadPoolWait();
                _doneEvent.QueueUserWorkItem(DoReporting, _args);

                if (Environment.UserInteractive == true)
                {
                    _doneEvent.WaitOne();
                }
            }

            return(_noReporting);
        }
    public override ReportVM Build(ReportArgs args)
    {
        /* Some code to get roles here */
        if (**validation code fails * *)
        {
            return new TInvalidModel
                   {
                   }
        }

        return(new TModel
        {
            FeedbackModel = FeedbackBuilder.Build(inputGrid.Report.Id),
        });
    }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            TdxHqData  th   = TdxHqData.Instance;
            ReportArgs rags = th.Connect("121.14.110.200", 443);

            if (rags.Succeeded)
            {
                Console.WriteLine("succeeded.");
                List <string> symbols = new List <string>();
                symbols.Add("SZSE.000001");
                symbols.Add("SZSE.000070");
                symbols.Add("SHSE.603078");
                symbols.Add("SHSE.600000");
                rags = th.GetQuotes(symbols);
                if (rags.Succeeded)
                {
                    List <GMSDK.Tick> ticks        = (List <GMSDK.Tick>)rags.Result;
                    DateTime          startTimeUTC = DateTime.Now.Date;

                    foreach (GMSDK.Tick tick in ticks)
                    {
                        string symbol = tick.exchange + '.' + tick.sec_id;
                        double t      = tick.utc_time;

                        DateTime time = new DateTime(2017, 4, 28).AddSeconds(t / 100);

                        Console.WriteLine("symbol:{0},price:{1},volume:{2},time:{3},tt:{4}",
                                          symbol, tick.last_price,
                                          tick.last_volume, time, t);
                    }
                }
                else
                {
                    Console.WriteLine("wrong:" + rags.ErrorInfo);
                }
            }
            else
            {
                Console.WriteLine("wrong:" + rags.ErrorInfo);
            }
            Console.ReadLine();
        }
Ejemplo n.º 4
0
        private async Task <IActionResult> DoReport(ReportArgs args)
        {
            var t = await Db.GetTopic(args.Topic);

            if (t == null)
            {
                return(new NotFoundResult());
            }
            else if (!t.WriteToken.Equals(args.WriteToken, StringComparison.OrdinalIgnoreCase))
            {
                return(StatusCode(403));
            }

            if (Timeouts.IsTimedOut(t.TopicId))
            {
                return(StatusCode(StatusCodes.Status429TooManyRequests));
            }

            await Herald.PublishMessage(t, args.Message);

            Timeouts.ApplyCost(t.TopicId, Config.ReportCost);

            return(new OkResult());
        }
Ejemplo n.º 5
0
        private void DoReporting(object p_args)
        {
            ReportArgs _args = (ReportArgs)p_args;

            _args.noIssuing   = _args.noReporting;
            _args.noReporting = 0;

            try
            {
                int _toprow = 100;

                int _chunkCount = _args.noIssuing / _toprow + 1;
                if (_chunkCount > UAppHelper.NoThreadOfReporter)
                {
                    _chunkCount = UAppHelper.NoThreadOfReporter;
                }

                string _issueid = "";

                var _sqlstr
                    = "SELECT a.issueId, a.document, a.rvalue "
                      + "  FROM TB_eTAX_ISSUING a INNER JOIN TB_eTAX_INVOICE b "
                      + "    ON a.issueId=b.issueId "
                      + " WHERE a.isNTSSending=@isNTSSendingX "
                      + "   AND ( "
                      + "         (RIGHT(b.typeCode, 2) IN ('01', '02', '04') AND b.invoicerId=@invoicerId) "
                      + "         OR "
                      + "         (RIGHT(b.typeCode, 2) IN ('03', '05') AND b.brokerId=@invoicerId) "
                      + "       ) "
                      + "   AND a.issueId > @issueId "
                      + _args.where
                      + " ORDER BY a.issueId"
                      + " LIMIT " + _toprow;
                {
                    _args.dbps.Add("@isNTSSendingX", NpgsqlDbType.Varchar, "X");
                    _args.dbps.Add("@invoicerId", NpgsqlDbType.Varchar, _args.invoicerId);
                }

                //if (LogCommands == true)
                //    ELogger.SNG.WriteLog(String.Format("begin: invoicerId->'{0}', noIssuing->{1}", _args.invoicerId, _args.noIssuing));

                // 만약 InsertDeltaSet을 처리하는 중에 오류가 발생하면 무한 loop를 발생 하게 되므로,
                // 'X'로 marking한 레코드의 총 갯수를 감소하여 '0'보다 큰 경우에만 반복한다.
                while (_args.noIssuing > 0)
                {
                    int _rowsCount = 0;

                    IssuingTbl.Clear();
                    ResponseTbl.Clear();

                    var _doneEvents = new ThreadPoolWait[_chunkCount];
                    for (int i = 0; i < _chunkCount; i++)
                    {
                        _args.dbps.Add("@issueId", NpgsqlDbType.Varchar, _issueid);       // 100건 까지를 한 묶음으로 전송하기 위해 기준이 되는 승인번호

                        var _workingSet = LSQLHelper.SelectDataSet(UAppHelper.ConnectionString, _sqlstr, _args.dbps);
                        if (LSQLHelper.IsNullOrEmpty(_workingSet) == true)
                        {
                            break;
                        }

                        var _rows = _workingSet.Tables[0].Rows;
                        _issueid = Convert.ToString(_rows[_rows.Count - 1]["issueId"]); // 다음 100건의 기준 (>) 승인번호

                        _doneEvents[i] = new ThreadPoolWait();

                        Updater _worker = new Updater(IssuingTbl, ResponseTbl);
                        _doneEvents[i].QueueUserWorkItem(_worker.ReporterCallback, _rows);

                        if (Environment.UserInteractive == true)
                        {
                            _doneEvents[i].WaitOne();
                        }

                        _rowsCount += _rows.Count;
                    }

                    ThreadPoolWait.WaitForAll(_doneEvents);

                    // 처리된 레코드가 한개 이하 인 경우는 종료한다. (문제가 있는 경우로 보여 짐)
                    if (_rowsCount < 1)
                    {
                        break;
                    }

                    //if (LogCommands == true)
                    //    ELogger.SNG.WriteLog(String.Format("loop: invoicerId->'{0}', noIssuing->{1}, noReporting->{2}", _args.invoicerId, _args.noIssuing, _rowsCount));

                    _args.noIssuing   -= _rowsCount;
                    _args.noReporting += IssuingTbl.Rows.Count;

                    LDltaHelper.InsertDeltaSet(UAppHelper.ConnectionString, ResponseSet);
                }
            }
            catch (ReporterException ex)
            {
                ELogger.SNG.WriteLog(ex);
            }
            catch (Exception ex)
            {
                ELogger.SNG.WriteLog(ex);
            }
            finally
            {
                if (LogCommands == true)
                {
                    ELogger.SNG.WriteLog(String.Format("end: invoicerId->'{0}', noIssuing->{1}, noReporting->{2}", _args.invoicerId, _args.noIssuing, _args.noReporting));
                }

                int _noClearing = ClearXFlag(_args.invoicerId);
                if (_noClearing > 0)
                {
                    if (LogCommands == true)
                    {
                        ELogger.SNG.WriteLog(String.Format("clearX: invoicerId->'{0}', noClear->{1}", _args.invoicerId, _noClearing));
                    }
                }
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Generates a report to the output stream.
 /// </summary>
 public abstract void Generate(ReportArgs args, Stream outStream);
Ejemplo n.º 7
0
        static void Main(string[] args)
        {
            //DLL是32位的,因此必须把C#工程生成的目标平台从Any CPU改为X86,才能调用DLL;
            //必须把Trade.dll等4个DLL复制到Debug和Release工程目录下;
            //无论用什么语言编程,都必须仔细阅读VC版内的关于DLL导出函数的功能和参数含义说明,不仔细阅读完就提出问题者因时间精力所限,恕不解答。

            //StringBuilder ErrInfo = new StringBuilder(256);
            //StringBuilder Result = new StringBuilder(1024 * 1024);



            //OpenTdx();//打开通达信

            ////登录
            //int ClientID = Logon("210.21.122.241", 80, "8.20", 0, "210100014580", "20615111", "328077", string.Empty, ErrInfo);

            ////登录第二个帐号
            ////int ClientID2 = Logon("111.111.111.111", 7708, "4.20", 0, "5555555555", "1111", "555", string.Empty, ErrInfo);



            //if (ClientID == -1)
            //{
            //    Console.WriteLine(ErrInfo);
            //    return;
            //}

            //SendOrder(ClientID, 0, 0, "", "601558", 2.1f, 100, Result, ErrInfo);//下单
            //SendOrder(ClientID, 0, 0, "0142996817", "000987", 2.5f, 100, Result, ErrInfo);//第二个帐号,下单
            //Console.WriteLine(ErrInfo);
            //Console.WriteLine("下单结果: {0}", Result);
            //Console.ReadLine();

            //GetQuote(ClientID, "601988", Result, ErrInfo);//查询五档报价
            // if (ErrInfo.ToString() != string.Empty)
            // {
            //     Console.WriteLine(ErrInfo.ToString());
            //     return;
            // }
            // Console.WriteLine("行情结果: {0}", Result);

            //CancelOrder(ClientID, "", "7258", Result, ErrInfo);
            //Console.WriteLine(ErrInfo);
            //Console.WriteLine("撤单结果: {0}", Result);


            //QueryData(ClientID, 0, Result, ErrInfo);//查询资金
            //if (ErrInfo.ToString() != string.Empty)
            //{
            //    Console.WriteLine(ErrInfo.ToString());
            //    Console.ReadLine();
            //    return;
            //}
            //Console.WriteLine("查询资金结果: {0}", Result);
            //QueryData(ClientID, 1, Result, ErrInfo);//查询股份
            //if (ErrInfo.ToString() != string.Empty)
            //{
            //    Console.WriteLine(ErrInfo.ToString());
            //    Console.ReadLine();
            //    return;
            //}
            //Console.WriteLine("查询股份结果: {0}", Result);
            //QueryData(ClientID, 2, Result, ErrInfo);//查询当日委托
            //if (ErrInfo.ToString() != string.Empty)
            //{
            //    Console.WriteLine(ErrInfo.ToString());
            //    Console.ReadLine();
            //    return;
            //}
            //Console.WriteLine("查询委托结果: {0}", Result);
            ///*List<string[]> records = new List<string[]>();
            //string text = Result.ToString();
            //string[] lines = text.Split('\n');
            //foreach (string aline in lines)
            //{
            //    string[] fields = aline.Split(new char[] { ' ', '\t' });
            //    records.Add(fields);
            //}
            //Console.WriteLine("code={0},marketID={1}", records[1][0], records[1][2]);
            //Console.WriteLine("code={0},marketID={1}", records[2][0], records[2][2]);
            ///*
            //            //批量查询多个证券的五档报价
            //            string[] Zqdm = new string[] { "600030", "600031" };
            //            string[] Results = new string[Zqdm.Length];
            //            string[] ErrInfos = new string[Zqdm.Length];

            //            IntPtr[] ResultPtr = new IntPtr[Zqdm.Length];
            //            IntPtr[] ErrInfoPtr = new IntPtr[Zqdm.Length];

            //            for (int i = 0; i < Zqdm.Length; i++)
            //            {
            //                ResultPtr[i] = Marshal.AllocHGlobal(1024 * 1024);
            //                ErrInfoPtr[i] = Marshal.AllocHGlobal(256);
            //            }



            //            GetQuotes(ClientID, Zqdm, Zqdm.Length, ResultPtr, ErrInfoPtr);

            //            for (int i = 0; i < Zqdm.Length; i++)
            //            {
            //                Results[i] = Marshal.PtrToStringAnsi(ResultPtr[i]);
            //                ErrInfos[i] = Marshal.PtrToStringAnsi(ErrInfoPtr[i]);

            //                Marshal.FreeHGlobal(ResultPtr[i]);
            //                Marshal.FreeHGlobal(ErrInfoPtr[i]);
            //            }*/



            //Logoff(ClientID);//注销
            //CloseTdx();//关闭通达信
            TDXTrader  trader = TDXTrader.Instance;
            ReportArgs ra     = trader.Logon("183.62.246.154", 7708, "8.20", 0, "210100014580", "20615111", "328077");

            if (ra.Succeeded)
            {
                Console.WriteLine("登录成功");
                ra = trader.QueryFund();
                if (ra.Succeeded)
                {
                    if (ra.Result != null)
                    {
                        Console.WriteLine(((FundRecord)(ra.Result)).TotalAsserts);
                    }
                }
                else
                {
                    Console.WriteLine(ra.ErrorInfo);
                }
                ra = trader.QueryPositions();
                if (ra.Succeeded)
                {
                    if (ra.Result != null)
                    {
                        List <PositionRecord> poss = (List <PositionRecord>)ra.Result;
                        foreach (PositionRecord p in poss)
                        {
                            Console.WriteLine(p.SecurityID);
                        }
                    }
                }
                else
                {
                    Console.WriteLine(ra.ErrorInfo);
                }
                //ra = trader.SendOrder(OrderSide.Buy, OrderType.Limit, "601558", (float)2.01, 100);
                //ra = trader.CancelOrder("78");
                //if (ra.Succeeded)
                //{
                //    if (ra.Result != null)
                //    {
                //        string orderID = ra.Result.ToString();
                //        Console.WriteLine("委托编号:{0}", orderID);
                //    }

                //}
                //else
                //{
                //    Console.WriteLine(ra.ErrorInfo);
                //}
                ra = trader.QueryOrders();
                if (ra.Succeeded)
                {
                    List <OrderRecord> orders = (List <OrderRecord>)ra.Result;
                    foreach (OrderRecord order in orders)
                    {
                        Console.WriteLine("订单ID:{0},订单状态:{1}", order.InnerOrderID, order.OrderStatus);
                    }
                }
                else
                {
                    Console.WriteLine(ra.ErrorInfo);
                }
            }
            else
            {
                Console.WriteLine(ra.ErrorInfo);
            }
            Console.ReadLine();
            //trader.Logoff();
        }
Ejemplo n.º 8
0
        private Point SignToXy(string sign, ReportArgs args)
        {
            Point pt;

            switch (sign)
            {
            case "P": pt = new Point(0 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "p": pt = new Point(0 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "L": pt = new Point(1 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "l": pt = new Point(1 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "N": pt = new Point(2 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "n": pt = new Point(2 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "S": pt = new Point(3 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "s": pt = new Point(3 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "G": pt = new Point(4 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "g": pt = new Point(4 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "K": pt = new Point(5 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "k": pt = new Point(5 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "R": pt = new Point(6 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "r": pt = new Point(6 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "B": pt = new Point(7 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "b": pt = new Point(7 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "+P": pt = new Point(8 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "+p": pt = new Point(8 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "+L": pt = new Point(9 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "+l": pt = new Point(9 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "+S": pt = new Point(10 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "+s": pt = new Point(10 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "+R": pt = new Point(11 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "+r": pt = new Point(11 * args.Env.KmW, 1 * args.Env.KmH); break;

            case "+B": pt = new Point(12 * args.Env.KmW, 0 * args.Env.KmH); break;

            case "+b": pt = new Point(12 * args.Env.KmW, 1 * args.Env.KmH); break;

            default: pt = Point.Empty; break;
            }

            return(pt);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 局面を描きます。
        /// </summary>
        public void Paint(Graphics g, ReportArgs args)
        {
            var positionPngDataDirectory = this.EngineConf.GetResourceFullPath("PositionPngDataDirectory");

            // 8×8 の将棋盤
            int bOx = args.Env.KmW + 2 * args.Env.SjW; // 将棋盤の左辺
            int bOy = 0;
            {
                // 縦線
                for (int col = 0; col < 10; col++)
                {
                    g.DrawLine(Pens.Black, col * args.Env.KmW + bOx, 0 + bOy, col * args.Env.KmW + bOx, 180 + bOy);
                }

                // 横線
                for (int row = 0; row < 10; row++)
                {
                    g.DrawLine(Pens.Black, 0 + bOx, row * args.Env.KmH + bOy, 180 + bOx, row * args.Env.KmH + bOy);
                }
            }

            // 盤上の駒
            {
                for (int suji = 1; suji < 10; suji++)
                {
                    for (int dan = 1; dan < 10; dan++)
                    {
                        string sign = args.Ro_Kyokumen1.Ban[suji][dan];
                        if ("" != sign)
                        {
                            Point pt = this.SignToXy(sign, args);
                            g.DrawImage(Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.KmFile)),
                                        new Rectangle((9 - suji) * args.Env.KmW + bOx, (dan - 1) * args.Env.KmH + bOy, args.Env.KmW, args.Env.KmH), //dst
                                        new Rectangle(pt.X, pt.Y, args.Env.KmW, args.Env.KmH),                                                      //src
                                        GraphicsUnit.Pixel
                                        );
                        }
                    }
                }
            }

            // 後手の持駒 (飛,角,金,銀,桂,香,歩)
            {
                string[] signs = new string[] { "r", "b", "g", "s", "n", "l", "p" };
                int      ox    = 0;
                int      oy    = 0;
                for (int moti = 0; moti < 7; moti++)
                {
                    Point pt = this.SignToXy(signs[moti], args);
                    // 枚数
                    int maisu = args.Ro_Kyokumen1.MotiP2[moti];
                    if (0 < maisu)
                    {
                        //駒
                        g.DrawImage(
                            Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.KmFile)),
                            new Rectangle(ox, (signs.Length - moti - 1) * args.Env.KmH + oy, args.Env.KmW, args.Env.KmH), //dst
                            new Rectangle(pt.X, pt.Y, args.Env.KmW, args.Env.KmH),                                        //src
                            GraphicsUnit.Pixel
                            );

                        // 1桁目が先
                        {
                            int ichi = maisu % 10;
                            g.DrawImage(Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.SjFile)),
                                        new Rectangle(ox + args.Env.KmW, (signs.Length - moti - 1) * args.Env.KmH + (args.Env.KmH - args.Env.SjH) + oy, args.Env.SjW, args.Env.SjH), //dst
                                        new Rectangle(ichi * args.Env.SjW, args.Env.SjH, args.Env.SjW, args.Env.SjH),                                                                //src
                                        GraphicsUnit.Pixel
                                        );                                                                                                                                           // 一の位
                        }

                        // 2桁目が後
                        {
                            int ju = maisu / 10;
                            if (ju < 1)
                            {
                                ju = -1;//空桁
                            }
                            g.DrawImage(
                                Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.SjFile)),
                                new Rectangle(ox + args.Env.KmW + args.Env.SjW, (signs.Length - moti - 1) * args.Env.KmH + (args.Env.KmH - args.Env.SjH) + oy, args.Env.SjW, args.Env.SjH), //dst
                                new Rectangle(ju * args.Env.SjW, 0, args.Env.SjW, args.Env.SjH),                                                                                            //src
                                GraphicsUnit.Pixel
                                );                                                                                                                                                          // 十の位
                        }
                    }
                }
            }

            // 先手の持駒 (飛,角,金,銀,桂,香,歩)
            {
                string[] signs = new string[] { "R", "B", "G", "S", "N", "L", "P" };
                int      ox    = (args.Env.KmW + 2 * args.Env.SjW) + 9 * args.Env.KmW + BN_BRD_R_W;
                int      oy    = (9 * args.Env.KmW + BN_BRD_B_W) - 7 * args.Env.KmH;
                for (int moti = 0; moti < 7; moti++)
                {
                    Point pt = this.SignToXy(signs[moti], args);

                    // 枚数
                    int maisu = args.Ro_Kyokumen1.MotiP1[moti];
                    if (0 < maisu)
                    {
                        g.DrawImage(Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.KmFile)),
                                    new Rectangle(ox, moti * args.Env.KmH + oy, args.Env.KmW, args.Env.KmH), //dst
                                    new Rectangle(pt.X, pt.Y, args.Env.KmW, args.Env.KmH),                   //src
                                    GraphicsUnit.Pixel
                                    );                                                                       //駒

                        // 十の位が先
                        {
                            int ju = maisu / 10;
                            if (ju < 1)
                            {
                                ju = -1;//空桁
                            }
                            g.DrawImage(Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.SjFile)),
                                        new Rectangle(ox + args.Env.KmW, moti * args.Env.KmH + (args.Env.KmH - args.Env.SjH) + oy, args.Env.SjW, args.Env.SjH), //dst
                                        new Rectangle(ju * args.Env.SjW, 0, args.Env.SjW, args.Env.SjH),                                                        //src
                                        GraphicsUnit.Pixel
                                        );                                                                                                                      // 十の位
                        }

                        // 一の位が後
                        {
                            int ichi = maisu % 10;
                            g.DrawImage(Image.FromFile(Path.Combine(positionPngDataDirectory, args.Env.SjFile)),
                                        new Rectangle(ox + args.Env.KmW + args.Env.SjW, moti * args.Env.KmH + (args.Env.KmH - args.Env.SjH) + oy, args.Env.SjW, args.Env.SjH), //dst
                                        new Rectangle(ichi * args.Env.SjW, 0, args.Env.SjW, args.Env.SjH),                                                                     //src
                                        GraphicsUnit.Pixel
                                        );                                                                                                                                     // 一の位
                        }
                    }
                }
            }
        }