ZhiYeJianKang_PeiXun/Song.Site/Mobile/QuesPager.ashx.cs

117 lines
5.0 KiB
C#
Raw Permalink Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WeiSha.Common;
using Song.ServiceInterfaces;
using VTemplate.Engine;
namespace Song.Site.Mobile
{
/// <summary>
/// 试题练习的分页导航
/// </summary>
public class QuesPager : BasePage
{
//章节id,课程id
protected int olid = WeiSha.Common.Request.QueryString["olid"].Int32 ?? 0;
protected int couid = WeiSha.Common.Request.QueryString["couid"].Int32 ?? 0;
//每页多少条
int pagerSize = WeiSha.Common.Request.QueryString["size"].Int32 ?? 100;
//不分页的最大值,例如小于200时不分页
int noPager = WeiSha.Common.Request.QueryString["onpager"].Int32 ?? 200;
//要跳转的页
string url = WeiSha.Common.Request.QueryString["url"].String;
protected override void InitPageTemplate(HttpContext context)
{
if (!Extend.LoginState.Accounts.IsLogin)
this.Response.Redirect("login.ashx");
this.Document.SetValue("url", url);
this.Document.SetValue("couid", couid);
//当前章节
Song.Entities.Outline outline = Business.Do<IOutline>().OutlineSingle(olid);
this.Document.SetValue("outline", outline);
if (outline != null) couid = outline.Cou_ID;
//当前课程
Song.Entities.Course course = Business.Do<ICourse>().CourseSingle(couid);
if (course == null) return;
this.Document.SetValue("course", course);
//是否购买该课程
Song.Entities.Course couBuy = Business.Do<ICourse>().IsBuyCourse(couid, Extend.LoginState.Accounts.CurrentUser.Ac_ID, 1);
bool isBuy = couBuy != null;
//是否购买,如果免费也算已经购买
this.Document.SetValue("isBuy", isBuy || course.Cou_IsFree);
if (couBuy == null) couBuy = course;
this.Document.SetValue("couBuy", couBuy);
int sumCount = isBuy || course.Cou_IsFree ? Business.Do<IQuestions>().QuesOfCount(-1, -1, couid, olid, -1, true) : course.Cou_TryNum;
this.Document.SetValue("sumCount", sumCount);
//分页计算
List<TrainingPager_Item> list = TrainingPager_Item.Pager(sumCount, pagerSize, noPager);
if (list.Count <= 1)
{
this.Response.Redirect(string.Format(url + "?olid={0}&couid={1}&size={2}", olid, couid, list.Last<TrainingPager_Item>().Size));
}
this.Document.SetValue("list", list);
this.Document.SetValue("size", pagerSize);
}
}
/// <summary>
/// 分页项
/// </summary>
public class TrainingPager_Item
{
public int Start { get; set; } //当前项的起始索引
public int End { get; set; } //当前项的末尾索引
public int Size { get; set; } //当前项取多少记录
public int Index { get; set; } //当前页码
public int Sumcount { get; set; } //总记录数
/// <summary>
/// 实现分页
/// </summary>
/// <param name="sumcount">用于分页的总记录数</param>
/// <param name="size">每页多少条</param>
/// <param name="nopager">多少条以内不用分页例如size为100但是nopager设置200以后就不必分页了都算一页</param>
/// <returns></returns>
public static List<TrainingPager_Item> Pager(int sumcount, int size, int nopager)
{
List<TrainingPager_Item> list = new List<TrainingPager_Item>();
//1.如果总计录数小于不要求页的数值,不需要分页
//2.如果总记录数小于或等于分页数的1.5倍,则不分页
if (sumcount <= nopager || sumcount <= size * 1.5)
{
list.Add(new TrainingPager_Item()
{
Start = 1,
End = sumcount,
Size = sumcount,
Index=1,
Sumcount=sumcount
});
return list;
}
//如果需要分页
//总页数
int sumPager = sumcount % size == 0 ? sumcount / size : sumcount / size + 1;
for (int i = 0; i < sumPager; i++)
{
list.Add(new TrainingPager_Item()
{
Start = i * size + 1,
End = (i+1) * size,
Size = size,
Sumcount = sumcount
});
}
//如果最后一页题量较少,合并到前一个内容去
if (sumPager > 2 && (sumcount % size != 0 && sumcount % size < size / 2))
{
list.RemoveAt(list.Count - 1);
list.Last<TrainingPager_Item>().End = list.Last<TrainingPager_Item>().End + sumcount % size;
list.Last<TrainingPager_Item>().Size = size + sumcount % size;
}
return list;
}
}
}