课程管理(简略版)

一、流程
本项目为教学机构提 供课程管理功能,教学机构可以添加属于自己的课程,供学生在线学习。
课程管理包括如下功能需求:
1、分类管理
2、新增课程
3、修改课程
4、预览课程
5、发布课程
用户的操作流程如下:
1、进入我的课程;
在这里插入图片描述
2、点击“添加课程”,进入添加课程界面;
在这里插入图片描述
3、输入课程基本信息,点击提交;
4、课程基本信息提交成功,自动进入“管理课程”界面,点击“管理课程”也可以进入“管理课程”界面;
5、编辑图片
上传课程图片。
在这里插入图片描述
6、编辑课程营销信息
营销信息主要是设置课程的收费方式及价格。
在这里插入图片描述
7、编辑课程计划
在这里插入图片描述
添加课程计划:
在这里插入图片描述

二、实现

  1. 创建数据库
    课程管理使用MySQL数据库,创建课程管理数据库:xc_course。
    在这里插入图片描述
    课程信息内容繁多,将课程信息分类保存在如下表中:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2)课程计划
课程计划查询是将某个课程的课程计划内容完整的显示出来,如下图所示:
在这里插入图片描述
左侧显示的就是课程计划,课程计划是一个树型结构,方便扩展课程计划的级别。
在上边页面中,点击“添加课程计划”即可对课程计划进行添加操作。
点击修改可对某个章节内容进行修改。
点击删除可删除某个章节。

课程计划查询:
课程计划为树型结构,由树根(课程)和树枝(章节)组成,为了保证系统的可扩展性,在系统设计时将课程计划设置为树型结构。

@Data 
@ToString
@Entity 
@Table(name="teachplan") 
@GenericGenerator(name = "jpa‐uuid", strategy = "uuid") 
public class Teachplan implements Serializable { 
	private static final long serialVersionUID =916357110051689485L; 
	@Id 
	@GeneratedValue(generator = "jpa‐uuid") 
	@Column(length = 32) 
	private String id; 
	private String pname; 
	private String parentid; 
	private String grade; 
	private String ptype; 
	private String description; 
	private String courseid; 
	private String status; 
	private Integer orderby; 
	private Double timelength; 
	private String trylearn; 
}
@Data 
@ToString 
public class TeachplanNode extends Teachplan { 
	List<TeachplanNode> children; 
}

课程计划是树型结构,相应的Mapper文件如下:

<resultMap type="com.xuecheng.framework.domain.course.ext.TeachplanNode" id="teachplanMap" > 
	<id property="id" column="one_id"/> 
	<result property="pname" column="one_name"/> 

	<collection property="children" ofType="com.xuecheng.framework.domain.course.ext.TeachplanNode"> 
		<id property="id" column="two_id"/> 
		<result property="pname" column="two_name"/> 
		<collection property="children" ofType="com.xuecheng.framework.domain.course.ext.TeachplanNode"> 
			<id property="id" column="three_id"/> 
			<result property="pname" column="three_name"/> 
		</collection> 
	</collection> 
</resultMap> 

<select id="selectList" resultMap="teachplanMap" parameterType="java.lang.String" > 
	SELECT 
		a.id one_id, 
		a.pname one_name, 
		b.id two_id, 
		b.pname two_name, 
		c.id three_id, 
		c.pname three_name 
	FROM
		teachplan a LEFT JOIN teachplan b 
			ON a.id = b.parentid 
		LEFT JOIN teachplan c 
			ON b.id = c.parentid 
	WHERE a.parentid = '0' 
	<if test="_parameter!=null and _parameter!=''"> 
		and a.courseid=#{courseId} 
	</if> 
	ORDER BY a.orderby, b.orderby, c.orderby 
</select>

课程计划添加:代码略。

3)数据字典
在新增课程界面需要选择课程等级、课程状态等,这些信息统一采用数据字典管理的方式。 本项目对一些业务的分类配置信息,比如:课程等级、课程状态、用户类型、用户状态等进行统一管理,通过在数据库创建数据字典表来维护这些分类信息。
数据字典对系统的业务分类进行统一管理,并且也可以解决硬编码问题,比如添加课程时选择课程等级,下拉框中的课程等级信息如果在页面硬编码将造成不易修改维护的问题,所以从数据字典表中获取,如果要修改名称则在数据字典修改即可,提高系统的可维护性。
在mongodb中创建数据字典表sys_dictionary
在这里插入图片描述
一个字典信息如下:

{
	"_id" : ObjectId("5a7e8d2dd019f15418fa2b71"), 
	"d_name" : "课程等级", 
	"d_type" : "200", 
	"d_value" : [ 
		{ 
			"sd_name" : "低级", 
			"sd_id" : "200001", 
			"sd_status" : "1" 
		},
		{ 
			"sd_name" : "中级", 
			"sd_id" : "200002", 
			"sd_status" : "1" 
		},
		{ 
			"sd_name" : "高级", 
			"sd_id" : "200003", 
			"sd_status" : "1" 
		} 
	]
}

字段说明如下:
d_name:字典名称
d_type:字典分类
d_value:字典数据
sd_name:项目名称
sd_id:项目id
sd_status:项目状态(1:可用,0不可用)

4)课程管理
课程分类表category的结构如下:
在这里插入图片描述
课程分类查询,新增课程,课程信息修改
课程添加成功进入课程管理页面,通过课程管理页面修改课程的基本信息、编辑课程图片、编辑课程营销信息等。
课程管理页面的结构如下:
在这里插入图片描述

5)课程图片管理
上传图片
在这里插入图片描述
在这里插入图片描述
执行流程如下:
1、管理员进入教学管理前端,点击上传图片
2、图片上传至文件系统服务,文件系统请求fastDFS上传文件
3、文件系统将文件入库,存储到文件系统服务数据库中。
4、文件系统服务向前端返回文件上传结果,如果成功则包括文件的Url路径。
5、课程管理前端请求课程管理进行保存课程图片信息到课程数据库。
6、课程管理服务将课程图片保存在课程数据库。

创建文件系统服务工程
application.yml

server: 
	port: 22100 
spring: 
	application: 
		name: xc‐service‐base‐filesystem 
	#mongo配置 
	data: 
		mongodb: 
			database: xc_fs 
			uri: mongodb://root:123@127.0.0.1:27017 
	#SpringMVC上传文件配置 
	servlet: 
		multipart: 
			#默认支持文件上传. 
			enabled: true 
			#支持文件写入磁盘.
			file‐size‐threshold: 0 
			# 上传文件的临时目录 
			location: 
			# 最大支持文件大小 
			max‐file‐size: 1MB 
			# 最大支持请求大小 
			max‐request‐size: 30MB 
xuecheng: 
	fastdfs: 
		connect_timeout_in_seconds: 5 
		network_timeout_in_seconds: 30 
		charset: UTF‐8 
		tracker_servers: 192.168.101.64:22122

系统的文件信息(图片、文档等小文件的信息)在mongodb中存储,在mongodb创建数据库xc_fs(文件系统数据库),并创建集合 filesystem。下边是文件信息的模型类。

@Data 
@ToString 
@Document(collection = "filesystem") 
public class FileSystem { 
	@Id 
	private String fileId; 
	//文件请求路径 
	private String filePath; 
	//文件大小 
	private long fileSize; 
	//文件名称 
	private String fileName; 
	//文件类型 
	private String fileType; 
	//图片宽度 
	private int fileWidth; 
	//图片高度 
	private int fileHeight; 
	//用户id,用于授权暂时不用 
	private String userId; 
	//业务key 
	private String businesskey; 
	//业务标签 
	private String filetag; 
	//文件元信息 
	private Map metadata; 
}

说明:
fileId:fastDFS返回的文件ID。
filePath:请求fastDFS浏览文件URL。
filetag:文件标签,由于文件系统服务是公共服务,文件系统服务会为使用文件系统服务的子系统分配文件标签, 用于标识此文件来自哪个系统。
businesskey:文件系统服务为其它子系统提供的一个业务标识字段,各子系统根据自己的需求去使用,比如:课 程管理会在此字段中存储课程id用于标识该图片属于哪个课程。
metadata:文件相关的元信息。

上传图片Controller

@RestController 
@RequestMapping("/filesystem") 
public class FileSystemController implements FileSystemControllerApi { 
	@Autowired 
	FileSystemService fileSystemService; 
	@Override 
	@PostMapping("/upload") 
	public UploadFileResult upload(@RequestParam("file") MultipartFile file, @RequestParam(value = "filetag", required = true) String filetag, @RequestParam(value = "businesskey", required = false) String businesskey, @RequestParam(value = "metedata", required = false) String metadata) { 
		return fileSystemService.upload(file,filetag,businesskey,metadata); 
	} 
}

图片上传到文件系统后,其它子系统如果想使用图片可以引用图片的地址,课程管理模块使用图片的方式是将图片地址保存到课程数据库中。
在这里插入图片描述
课程管理服务通过查询course_pic表数据则查询到某课程的图片信息。

图片查询
课程图片删除 课程图片上传成功后,可以重新上传,方法是先删除现有图片再上传新图片。 注意:此删除只删除课程数据库的课程图片信息,不去删除文件数据库的文件信息及文件系统服务器上的文件,由于课程图片来源于该用户的文件库,所以此图片可能存在多个地方共用的情况,所以要删除文件系统中的文件需要到图片库由用户确认后再删除。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值