4.2 课程数据模型查询接口 
静态化操作需要模型数据方可进行静态化,课程数据模型由课程管理服务提供,仅供课程静态化程序调用使用。 
4.2.1 接口定义 
1、响应结果类型

@Data
@ToString
@NoArgsConstructor
public class CourseView implements Serializable {
CourseBase courseBase;//基础信息
CourseMarket courseMarket;//课程营销
CoursePic coursePic;//课程图片
TeachplanNode TeachplanNode;//教学计划
}

2、请求类型
String:课程id
3、接口定义如下

@ApiOperation(
"
课程视图查询
"
)
public CourseView courseview(String id);

4.2.2 Dao 
需要对course_base、course_market、course_pic、teachplan等信息进行查询,新建课程营销的dao,其它dao已经存在不用再建。

public interface CourseMarketRepository extends JpaRepository<CourseMarket,String> {
}

4.2.3 Service

//课程视图查询[/size][/font]
[font=微软雅黑][size=3]public CourseView getCoruseView(String id) {
CourseView courseView = new CourseView();
//查询课程基本信息
Optional<CourseBase> optional =
courseBaseRepository
.findById(id);
if(optional.isPresent()){
CourseBase courseBase
=
optional.
get();
courseView.setCourseBase(courseBase);
}
//查询课程营销信息
Optional<CourseMarket> courseMarketOptional =
courseMarketRepository
.findById(id);
if(courseMarketOptional.isPresent()){
CourseMarket courseMarket
=
courseMarketOptional.
get();
courseView.setCourseMarket(courseMarket);
}
//查询课程图片信息
Optional<CoursePic> picOptional =
coursePicRepository
.findById(id);
if(picOptional.isPresent()){
CoursePic coursePic
=
picOptional.
get();
courseView.setCoursePic(picOptional.
get());
}
//查询课程计划信息
TeachplanNode teachplanNode
=
teachplanMapper.selectList(id);
courseView.setTeachplanNode(teachplanNode);
return courseView;
}

4.2.4 Controller

@Override[/size][/font]
[font=微软雅黑][size=3]@GetMapping(
"
/courseview/{id}
"
)
public CourseView courseview(@PathVariable(
"
id
"
) String id) {
return courseService.
getCoruseView(id);
}

4.2.5 测试 
使用swagger-ui或postman测试本接口。

4.3 课程信息模板设计 
在确定了静态化所需要的数据模型之后,就可以编写页面模板了,课程详情页面由多个静态化页面组成,所以我们需要创建多个页面模板,本章节创建课程详情页面的主模板,即课程信息模板。
4.3.1 模板内容 
完整的模板请参考“资料\课程详情页面模板\course.ftl“文件,下边列出模板中核心的内容:
课程基本信息:

<div class
=
"
banner
‐
left
"
>
<p class
=
"
tit
"
>${courseBase.name}</p>
<p class
=
"
pic
"
><span class
=
"
new
‐
pic
"
>特惠价格¥${courseMarket.
price}</span> <span
class
=
"
old
‐
pic
"
>原价¥${courseMarket.
price_old!}</span></p>
<p class
=
"
info
"
>
<a href=
"
[url]http://ucenter.xuecheng[/url]
.com/#/learning/${courseBase.id}/0
"
target
=
"
_blank
"
v
‐
if=
"
learnstatus
== 1
"
v
‐
cloak>马上学习</a>
<a href=
"
#
"
@click=
"
addopencourse
"
v
‐
if=
"
learnstatus
== 2
"
v
‐
cloak>立即报名</a>
<a href=
"
#
"
@click=
"
buy
"
v
‐
if=
"
learnstatus
==
3
"
v
‐
cloak>立即购买</a>
<span><em>难度等级</em>
<#if courseBase.
grade
==
'
200001
'
>
低级
<#elseif courseBase.
grade
==
'
200002
'
>
中级
<#elseif courseBase.
grade
==
'
200003
'
>
高级
</#if>
</span>
<span><em>课程时长</em><stat v
‐
text
=
"
course_stat.s601001
"
></stat>
</span>
<span><em>评分</em><stat v
‐
text
=
"
course_stat.s601002
"
></stat></span>
<span><em>授课模式</em>
<#if courseBase.studymodel==
'
201001
'
>
自由学习
<#elseif courseBase.studymodel==
'
201002
'
>
任务式学习
</#if>
</span>
</p>
</div>
<div class
=
"
banner
‐
rit
"
>
<#if coursePic.
pic??>
<p><img src
=
"
http://img
.xuecheng
.com/${coursePic.
pic}
"
alt
=
""
width=
"
270
"
height
=
"
156
"
>
</p>
<#else>
<p><img src
=
"
/static/img/widget
‐
video.
png
"
alt
=
""
width=
"
270
"
height
=
"
156
"
> </p>
</#if>
<p class
=
"
vid
‐
act
"
><span> <i class
=
"
i
‐
heart
"
></i>收藏 <stat v
‐
text
=
"
course_stat.s601003
"
></stat> </span> <span>分享 <i class
=
"
i
‐
weixin
"
></i><i class
=
"
i
‐
qq
"
>
</i></span></p>
</div>

课程计划:

<div class
=
"
content
"
>
<#if teachplanNode.children??>
<#list teachplanNode.children as firstNode>
<div class
=
"
item
"
>
<div class
=
"
title act
"
><i class
=
"
i
‐
chevron
‐
top
"
>
</i>${firstNode.
pname}</div>
<div class
=
"
about
"
>${firstNode.description!}</div>
<div class
=
"
drop
‐
down
"
style
=
"
height: ${firstNode.children?
size
*
50}px;
"
>
<ul class
=
"
list
‐
box
"
>
<#list firstNode.children as secondNode>
<li>${secondNode.
pname}</li>
</#list>
</ul>
</div>
</div>
</#list>
</#if>
</div>

页头: 
局部代码如下:

<body data
‐
spy
=
"
scroll
"
data
‐
target
=
"
#articleNavbar
"
data
‐
offset
=
"
150
"
>
<!
‐‐
页面头部
‐‐
>
<!
‐‐
#include virtual=
"
/include/header.html
"
‐‐
>

页尾: 
局部代码如下:

<!
‐‐
页面底部
‐‐
>
<!
‐‐
底部版权
‐‐
>
<!
‐‐
#include virtual=
"
/include/footer.html
"
‐‐
>

动态脚本文件:

<script>
//课程id
var courseId
=
"
template
"
</script>
<!
‐‐
#include virtual=
"
/include/course_detail_dynamic.html
"
‐‐
>

教师信息文件: 
从课程数据中获取课程所属的教师Id,这里由于教师信息管理功能没有开发我们使用固定的教师信息文件:

<div class
=
"
content
‐
com course
"
>
<div class
=
"
title
"
><span>课程制作</span></div>
<!
‐‐
#include virtual=
"
/teacher/teacher_info_template01.html
"
‐‐
>
</div>

教育机构文件: 
同教师信息一样,由于教育机构功能模块没有开发,这里我们使用固定的教育机构文件:

<div class
=
"
about
‐
teach
"
>
<!
‐‐
机构信息
‐‐
>
<!
‐‐
#include virtual=
"
/company/company_info_template.html
"
‐‐
>
</div>

学成在线 第9天 讲义-课程预览 Eureka Feign 六相关推荐

  1. 学成在线 第9天 讲义-课程预览 Eureka Feign Ribbon

    1Eureka注册中心 1.1需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息. 为什么 要用注册中心? 1 ...

  2. 学成在线 第9天 讲义-课程预览 Eureka Feign 五

    3.3 课程预览技术方案  根据要求:课程详情页面采用静态化技术生成Html页面,课程预览的效果要与最终静态化的Html页面内容一致. 所以,课程预览功能也采用静态化技术生成Html页面,课程预览使用 ...

  3. 学成在线 第9天 讲义-课程预览 Eureka Feign 四

    2.2 Feign  2.2.1 Feign介绍  Feign是Netflflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Cloud引入Feig ...

  4. 学成在线 第7天 讲义-课程管理实战

    1我的课程 1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 上边的查询要实现分页.会存在多表关联查询,所以建议使用mybatis实现我的 ...

  5. 存入json文件_学成在线第8-2天讲义-课程图片管理 分布式文件系统 上传图片开发...

    上传图片开发 1.1.1需求分析 在很多系统都有上传图片/上传文件的需求,比如:上传课程图片.上传课程资料.上传用户头像等,为了提供系 统的可重用性专门设立文件系统服务承担图片/文件的管理,文件系统服 ...

  6. 学成在线-第16天-讲义- Spring Security Oauth2 JWT RSA加解密

    学成在线-第16天-讲义- Spring Security Oauth2 JWT 1 用户认证需求分析 1.1 用户认证与授权 ​ 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进 ...

  7. 学成在线-第13天-讲义-在线学习 HLS

    1在线学习需求分析 1.1需求描述 学成在线作为在线教育网站,提供多种学习形式,包括:录播.直播.图文.社群等,学生登录进入学习中心即可 在线学习,本章节将开发录播课程的在线学习功能,需求如下: 1. ...

  8. 学成在线-第19天-讲义-分布式事务

    1订单与选课需求分析 1.1订单支付流程 学成在线的课程分为免费和收费两种.对于收费课程,用户需提交订单并完成支付方可在线学习. 提交订单及支付流程如下: 1.用户提交订单需要先登录系统 2.提交订单 ...

  9. 学成在线 第4天 讲义-页面静态化 页面预览

    1页面静态化需求 1.为什么要进行页面管理? 本项目cms系统的功能就是根据运营需要,对门户等子系统的部分页面进行管理,从而实现快速根据用户需求修改 页面内容并上线的需求. 2.如何修改页面的内容? ...

最新文章

  1. R语言使用car包的scatter3d函数可视化可以交互旋转的3D散点图(Spinning 3D scatter plot by the scatter3d() function of car)
  2. 神经网络?决策树?都做不到!谁能解决可解释性AI?
  3. vertica导出导入数据
  4. 注入eval,Function等系统函数,截获动态代码
  5. 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
  6. 阿里HBase高可用8年抗战回忆录
  7. 数据挖掘概念与技术_第三版_课后习题
  8. java sort 字符串_java字符串怎么排序
  9. CrossApp简介
  10. 全球及中国阻力带行业市场前瞻及投资竞争力分析报告2022-2027年
  11. nRF53832开发环境搭建
  12. ECC RDIMM 服务器内存条简介
  13. 无需排队!NewBing已向全球个人开放,教程一篇就够了
  14. PostgreSQL嵌套事务提交流程研究
  15. IRT和DINA模型学习总结
  16. Ueeshop:外贸网站推广优化方法和注意事项
  17. git安装问题解决方案
  18. 非接环境(PPSE)和接触环境(PSE)的FCI有什么区别
  19. 二分答案——路标设置(洛谷 P3853)
  20. 【实战练习】汽油辛烷值优化建模(三)(问题一关于插值方法的补充)

热门文章

  1. Dubbo剖析-Netty粘包与半包问题(一)
  2. 织梦php模板安装教程,[教程] DEDECMS织梦模板安装/更换教程大全
  3. Spring Cloud——负载均衡Ribbon
  4. MySQL查询第一条记录和最后一条记录
  5. C语言 打印空心菱形
  6. UESTC 1646 穷且益坚, 不坠青云之志。 差分约束、Fellman-ford
  7. 名编辑电子杂志大师教程 | 导入主题/安装主题
  8. FMC150-两路250Msps AD、两路500Msps DA FMC子卡模块解决方案
  9. 【HDOJ】1006 Tick and Tick_天涯浪子_新浪博客
  10. 【读文献】3D Infomax 小分子预训练模型