using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Song.Entities;
namespace Song.ServiceInterfaces
{
///
/// 课程管理
///
public interface ICourse : WeiSha.Common.IBusinessInterface
{
#region 课程管理
///
/// 添加课程
///
/// 业务实体
void CourseAdd(Course entity);
///
/// 批量添加课程,可用于导入时
///
/// 机构id
/// 专业id
/// 名称,可以是用逗号分隔的多个名称
///
Course CourseBatchAdd(int orgid, int sbjid, string names);
///
/// 是否已经存在课程
///
/// 机构id
/// 专业id
/// 上级id
///
///
Course CourseIsExist(int orgid, int sbjid, int pid, string name);
///
/// 修改课程
///
/// 业务实体
void CourseSave(Course entity);
///
/// 是否为直播课
///
///
///
bool IsLiveCourse(int couid);
///
/// 是否为直播课
///
///
/// 校验,如果为true,则检索课程下所有章节,有直播章节,则课程为直播课程
///
bool IsLiveCourse(int couid, bool check);
///
/// 增加课程浏览数
///
///
///
int CourseViewNum(Course entity, int num);
///
/// 增加课程浏览数
///
///
///
///
int CourseViewNum(int couid, int num);
///
/// 删除课程
///
/// 业务实体
void CourseDelete(Course entity);
///
/// 删除,按主键ID;
///
/// 实体的主键
void CourseDelete(int identify);
///
/// 获取单一实体对象,按主键ID;
///
/// 实体的主键
///
Course CourseSingle(int identify);
///
/// 获取课程名称,如果为多级,则带上父级名称
///
///
///
string CourseName(int identify);
///
/// 获取所有课程
///
/// 所在机构id
/// 教师id
///
///
List CourseAll(int orgid, int sbjid, int thid, bool? isUse);
///
/// 某个课程的学习人数
///
/// 课程id
/// 是否取全部值,如果为false,则仅取当前正在学习的
///
int CourseStudentSum(int couid, bool? isAll);
///
/// 清除课程的内容
///
///
void CourseClear(int identify);
///
/// 获取指定个数的课程列表
///
/// 所在机构id
/// 专业id,等于0取所有
/// 教师id
/// 上级课程ID
///
/// 取多少条记录,如果小于等于0,则取所有
///
List CourseCount(int orgid, int sbjid, int thid, int pid, string sear, bool? isUse, int count);
List CourseCount(int orgid, int sbjid, string sear, bool? isUse, int count);
///
/// 获取指定个数的课程列表
///
/// 机构id
/// 专业id
/// 教师id
/// 是否有直播课
///
///
///
///
List CourseCount(int orgid, int sbjid, int thid, bool? islive, string sear, bool? isUse, int count);
///
/// 获取指定个数的课程列表
///
/// 所在机构id
/// 专业id,等于0取所有
///
///
/// 排序方式,def:默认,先推荐,然后按访问量倒序;flux:按访问量倒序;tax:按自定义排序要求;new:按创建时间,最新发布在前面;rec:按推荐,先推荐,然后按tax排序
///
///
List CourseCount(int orgid, int sbjid, string sear, bool? isUse, string order, int count);
///
/// 课程数量
///
/// 机构id
/// 专业id
/// 教师id
///
int CourseOfCount(int orgid, int sbjid, int thid);
///
/// 当前课程下是否有子级
///
///
///
///
///
bool CourseIsChildren(int orgid, int couid, bool? isUse);
///
/// 分页获取
///
///
///
///
///
///
///
///
///
List CoursePager(int orgid, int thid, bool? isUse, string searTxt, int size, int index, out int countSum);
///
/// 查询我相关的课程
///
///
///
///
///
///
///
///
///
List CoursePager(int orgid, int sbjid, string searTxt, string order, int size, int index, out int countSum);
///
/// 分页获取
///
///
///
///
///
///
/// 排序方式,默认null按排序顺序,flux流量最大优先
///
///
///
///
List CoursePager(int orgid, int sbjid, int thid, bool? isUse, string searTxt, string order, int size, int index, out int countSum);
///
/// 分页获取
///
///
/// 专业id,多个id用逗号分隔
///
///
/// 排序方式,def:默认,先推荐,然后按访问量倒序;flux:按访问量倒序;tax:按自定义排序要求;new:按创建时间,最新发布在前面;rec:按推荐,先推荐,然后按tax排序
///
///
///
///
List CoursePager(int orgid, string sbjid, bool? isUse, string searTxt, string order, int size, int index, out int countSum);
///
/// 分页获取
///
///
///
///
/// 是否是直播课
///
///
///
///
///
///
List CoursePager(int orgid, string sbjid, bool? isUse, bool? isLive, string searTxt, string order, int size, int index, out int countSum);
///
/// 将当前项目向上移动;仅在当前对象的同层移动,即同一父节点下的对象这前移动;
///
///
/// 如果已经处于顶端,则返回false;移动成功,返回true
bool CourseUp(int id);
///
/// 将当前项目向下移动;仅在当前对象的同层移动,即同一父节点下的对象这前移动;
///
///
/// 如果已经处于顶端,则返回false;移动成功,返回true
bool CourseDown(int id);
#endregion
#region 课程购买
///
/// 购买课程
///
/// 学生与课程的关联对象
Student_Course Buy(Student_Course stc);
///
/// 购买课程
///
/// 学员id
/// 课程id
/// 价格项
///
Student_Course Buy(int stid, int couid, Song.Entities.CoursePrice price);
///
/// 免费学习
///
/// 学习ID
/// 课程ID
///
Student_Course FreeStudy(int stid, int couid);
///
/// 免费学习
///
/// 学习ID
/// 课程ID
/// 免费时效的开始时间,如果为空,则不记录开始时间
/// 免费时效的结束时间
///
Student_Course FreeStudy(int stid, int couid, DateTime? start, DateTime end);
///
/// 学员是否购买了该课程
///
/// 课程id
/// 学员Id
/// 0不管是否过期,1必须是购买时效内的,2必须是购买时效外的
/// 返回课程
Course IsBuyCourse(int couid, int stid, int state);
///
/// 学员是否购买了该课程
///
/// 课程id
/// 学员id
///
bool IsBuy(int couid, int stid);
///
/// 课程试用,默认试用一百年
///
/// 学员id
/// 课程id
Student_Course Tryout(int stid, int couid);
///
/// 是否试用该课程
///
///
///
///
bool IsTryout(int couid, int stid);
///
/// 直接学习该课程
///
/// 课程id
/// 学员id
/// 如果是免费或限时免费、或试学的课程,可以学习并返回true,不可学习返回false
bool Study(int couid, int stid);
///
/// 学生购买课程的记录项
///
/// 学员Id
/// 课程id
///
Student_Course StudentCourse(int stid, int couid);
///
/// 取消课程学习,直接删除购买记录
///
///
///
void DelteCourseBuy(int stid, int couid);
///
/// 学员购买的该课程
///
/// 学员Id
/// 用于检索的字符
/// 0不管是否过期,1必须是购买时效内的,2必须是购买时效外的
/// 是否试用,为null时取所有
/// 取多少条
///
List CourseForStudent(int stid, string sear, int state, bool? istry, int count);
#endregion
#region 课程关联管理(与学生或教师)
///
/// 获取选学人数最多的课程列表,从多到少
///
/// 机构Id
/// 专业id
/// 取多少条
///
DataSet CourseHot(int orgid, int sbjid, int count);
///
/// 某个学生是否正在学习某个课程
///
///
///
///
bool StudyIsCourse(int stid, int couid);
///
/// 购买
///
/// 学生Id
/// 课程id
///
void CourseBuy(int stid, int couid, float money, DateTime startTime, DateTime endTime);
///
/// 获取某个教师关联的课程
///
///
///
///
List Course4Teacher(int thid, int count);
///
/// 学习某个课程的学员
///
///
///
///
///
///
///
///
Accounts[] Student4Course(int couid, string stname, string stmobi, int size, int index, out int countSum);
#endregion
#region 价格管理
///
/// 添加价格记录
///
/// 业务实体
void PriceAdd(CoursePrice entity);
///
/// 修改价格记录
///
/// 业务实体
void PriceSave(CoursePrice entity);
///
/// 删除价格记录
///
/// 业务实体
void PriceDelete(CoursePrice entity);
///
/// 删除,按主键ID;
///
/// 实体的主键
void PriceDelete(int identify);
///
/// 删除,按全局唯一标识
///
///
void PriceDelete(string uid);
///
/// 将产品价格写入到课程所在的表,取第一条价格
///
/// 课程UID
void PriceSetCourse(string uid);
///
/// 获取单一实体对象,按主键ID;
///
/// 实体的主键
///
CoursePrice PriceSingle(int identify);
///
/// 获取价格记录
///
///
///
///
///
///
CoursePrice[] PriceCount(int couid, string uid, bool? isUse, int count);
///
/// 将当前项目向上移动;仅在当前对象的同层移动,即同一父节点下的对象这前移动;
///
///
/// 如果已经处于顶端,则返回false;移动成功,返回true
bool PriceUp(int id);
///
/// 将当前项目向下移动;仅在当前对象的同层移动,即同一父节点下的对象这前移动;
///
///
/// 如果已经处于顶端,则返回false;移动成功,返回true
bool PriceDown(int id);
#endregion
}
}