string TradingPagingQuery(string where, TcpMsg.TradingSortObject type, Int32 pageNum, Int32 itemCountPerPage, TcpMsg.SortingType sort)
        {
            string qry      = string.Empty;
            string orderby  = string.Empty;
            string sorttype = "asc";

            if (sort == TcpMsg.SortingType.Desc)
            {
                sorttype = "desc";
            }

            switch (type)
            {
            case TcpMsg.TradingSortObject.CardType:
                orderby = $"order by cardtype {sorttype}, tokenidx {sorttype}";
                break;

            case TcpMsg.TradingSortObject.Index:
                orderby = $"order by tokenidxnum {sorttype}";
                break;

            case TcpMsg.TradingSortObject.Grade:
                orderby = $"order by grade {sorttype}, cardid {sorttype}, tokenidx {sorttype}";
                break;

            case TcpMsg.TradingSortObject.RegDate:
                orderby = $"order by regDate {sorttype}, cardid {sorttype}, tokenidx {sorttype}";
                break;

            case TcpMsg.TradingSortObject.SalePrice:
                orderby = $"order by sale_price {sorttype}, cardid {sorttype}, tokenidx {sorttype}";
                break;

            default:
                return(qry);
            }

            string limit = $"limit {pageNum * itemCountPerPage}, {itemCountPerPage}";

            qry = $"select * from {Table.TblTrade.Name} where {where} {orderby} {limit};";

            return(qry);
        }
        public (Int32, Int32, List <Table.TblTrade>) GetTblTrade(Int16 jobType, Int32 cardId, Int32 tokenIdxMin, Int32 tokenIdxMax, TcpMsg.TradingSortObject obj, Int32 pageNum, Int32 itemCountPerPage, TcpMsg.SortingType sort)
        {
            var totalCount            = 0;
            List <Table.TblTrade> ret = null;

            using (IDbConnection conn = Database.GetDbConnection())
            {
                string where = string.Empty;
                if (jobType > 0)
                {
                    where = $"jobtype={jobType} and ";
                }

                if (cardId > 0)
                {
                    where += $"cardid={cardId} and ";
                }

                if (tokenIdxMin > 0 && tokenIdxMax > 0)
                {
                    where += $"tokenidxnum between {tokenIdxMin} and {tokenIdxMax} and ";
                }
                else if (tokenIdxMin < 0 && tokenIdxMax > 0)
                {
                    where += $"tokenidxnum <= {tokenIdxMax} and ";
                }
                else if (tokenIdxMin > 0 && tokenIdxMax < 0)
                {
                    where += $"tokenidxnum >= {tokenIdxMin} and ";
                }

                where += $"status={(Int32)TcpMsg.TradeStatus.Onsale} and regdate > (now() - interval {Define.EXPIRY_DATE} day)";

                string qry = $"select count(*) from {Table.TblTrade.Name} where {where};";
                totalCount = Dapper.SqlMapper.Query <int>(conn, qry).FirstOrDefault();

                if (totalCount > 0)
                {
                    if (totalCount < pageNum * itemCountPerPage)
                    {
                        pageNum = 0;
                    }

                    qry = TradingPagingQuery(where, obj, pageNum, itemCountPerPage, sort);
                    ret = Dapper.SqlMapper.Query <Table.TblTrade>(conn, qry).ToList();
                }
            }
            return(pageNum, totalCount, ret);
        }