|
|
преди 5 години | |
|---|---|---|
| .mvn | преди 5 години | |
| sql | преди 5 години | |
| src | преди 5 години | |
| .gitignore | преди 5 години | |
| API Doc.md | преди 5 години | |
| Dockerfile | преди 5 години | |
| Iteration2.md | преди 5 години | |
| README.md | преди 5 години | |
| courselearning.log | преди 5 години | |
| mvnw | преди 5 години | |
| mvnw.cmd | преди 5 години | |
| pom.xml | преди 5 години | |
| settings.xml | преди 5 години |
这是 courselearning 后端项目,使用了MySQL数据库。
本项目默认使用的 MySQL 用户为 root 密码为 123456
相关配置可参考文件 /src/main/resouces/application.yml
spring.datasource字段 请根据实际情况进行调整
项目部署前:
请使用 /sql/courselearning.sql 内的脚本初始化数据库和表 (可以直接打开MySQL命令行界面,在登录用户后,将 courselearning.sql 文件拷贝到命令行后按下回车)
application.yml 文件中的
web.file-upload-path字段为自定义的用于上传文件的目录路径,请根据实际情况进行调整 (建议部署前先创建目录专门用于存放上传的文件)
本地热部署:可以使用 IntelliJ IDEA 打开本项目,然后点击 Run 'CourseLearningApplication' 。
服务器部署:首先配置好服务器环境(JDK1.8 + MySQL),使用 maven 打包命令生成 jar 包,通过 shell 命令运行。
项目中使用了 com.github.pagehelper 分页插件,其中 PageInfo 重要的属性如下所示:
public class PageInfo<T> {
// 当前页码(无论请求中传入的页码数有多大,在返回结果中,pageNum 都是不超过总页数的)
private int pageNum;
// 每页包含的最大记录数
private int pageSize;
// 当前页包含的记录数
private int size;
// 总记录数
private long total;
// 总页数
private int pages;
// 结果集
private List<T> list;
...
}
SpringBoot 的配置文件可参考 /src/main/resouces/application.yml 以及 代码部分 /src/main/java/cn.seecoder.courselearning/config/*,请根据实际情况调整。
目前所有 controller 暴露的 API 都需要添加 /api 前缀才能正常访问,可参考 cn.seecoder.courselearning/config/WebResourceConfig 中
configurePathMatch方法
/src/main/resouces/static 目录下存储了部分课程的图片文件,建议可以将static目录内的图片文件全部拷贝至服务器上传文件的目录(在application.yml定义的)。
/sql/courselearning.sql 存储了项目初始化需要的sql文件(包含了用于展示的部分数据),初次使用时,可将该文件内的所有sql语句在mysql命令行内执行后初始化数据库。
现需要增加点赞功能,用户可以给课程点赞,也可以取消点赞,每个用户对每个课程只能点赞一次。
你需要从上到下实现点赞和取消点赞的逻辑,从Controller层到底层的数据层。
现需要你实现优惠券的按用户点赞某课程来分发优惠券的策略,你可以考虑如下场景:
你需要实现的方法在CourseLikeDeliverStrategy,它实现了CouponDeliverStrategy接口,用来判断是否能把优惠券发放给该用户,其中extra为发放的依据。 如:需要实现用户只要点赞了某个课程A,那就发放优惠券给课程B,那么实现中显然需要课程A的id和课程B的id,那么这里就由extra传入相关的数据。
Tips:
在实现代码的过程中,某学生发现代码中存在循环依赖的情况,即CourseOrderService依赖了CourseService和CouponService,且 CourseService和CouponService也依赖了CourseOrderService,该学生为了消除依赖,将CourseService和CouponService用到的方法抽离到了QueryOrderService接口, 使得CourseService和CouponService并不直接依赖CourseOrderService,而是依赖QueryOrderService来消除循环依赖,但是相关的实现代码他没有完成,请你帮他完成这些代码。
代码中的某些类对应的包似乎有些不正确,请你将这些类归类到对应的包。这里需要归类的是位于controller大包下的类。
Tips
发放优惠券需指定数量。
网站管理员可以查看现有可以进行发放的优惠券。
可发放优惠券指优惠券的结束时间在当前时间之后的优惠券。
网站管理员可以选择某个现有的优惠券进行发放,发放用户策略见上述第四点。
发放的优惠券需选择发放的数量以及是否发放给重复用户(即已经拥有该优惠券的用户是否需要再发放)
用户可以查看某个订单可以使用的优惠券
某个订单某种类型的优惠券最多只能使用一张。
用户可以选择订单的某个可用的优惠券进行使用。
使用时系统计算订单目前已使用的优惠券使用顺序的最优策略,并给出最优价格。
如果订单已经使用过该类型的优惠券,则无法使用。
用户可以选择订单已经使用的某个优惠券取消在该订单的使用。
取消使用时系统计算订单目前已使用的优惠券使用顺序的最优策略,并给出最优价格。
订单结算后优惠券用户的自动扣除。