ZhiYeJianKang_PeiXun/Song.Site/Mobile/QuesPager.ashx.cs
2025-02-20 15:41:53 +08:00

117 lines
5.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}