【计算机毕业设计】基于微信小程序的电影院票务系统

一、开发环境

开发语言:Java
框架:SSM
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

安卓框架:uniapp
安卓开发软件:HBuilder X、微信开发者工具
开发模式:混合开发

运行后台路径:localhost:8080/项目名称/admin/dist/index.html

管理员账号:abo
管理员密码:abo
2.1 MYSQL数据库
本课题所开发的应用程序在数据操作方面是不可预知的,是经常变动的,没有办法直接把数据写在文档里,这样不仅仅不安全,也不能实现应用程序的功能。如果要能实现应用程序所需要的数据存储功能,就避免不了要进行专业数据库存储软件的选择。基本上应用程序实现的功能不算太复杂,市面上任何一个关系型数据库软件都可以实现。参考自己的学习进度和操作习惯来讲,Oracle数据库是适合的,但是所需要的的安装软件很大,并且有好多不需要的功能都是开启的状态,十分消耗电脑资源,所以没有选择Oracle数据库,而SQL Server数据库虽然学过,但是安装的时候因为电脑上可能有其他的软件存在,经常性的出问题,而安装问题不好解决就需要重新安装操作系统,这样对已经存在的软件来讲又是一种时间上的浪费。只有MySQL数据库,安装包小,安装速度快,操作简单,哪怕安装出问题也好解决,不用重装操作系统,也不影响电脑上运行的其他软件,消耗资源也少,最重要的是在功能方面完全的符合设计需要,所以最后选择了MySQL数据库作为应用软件开发需要的数据库。
2.2 Java语言
Java语言发展有25年多了,在互联网行业经过这么多年的发展,还依然在市场的占有率上有半壁江山,依然受到很多程序员的喜爱,好多从业人员进行学习,随着互联网从业人员的增加,并没有降低Java语言的江湖地位,算是一个常青藤。Java语言学习很简单,当然这是针对于前辈C++来讲的,C++语言相当的强悍。Java取消了很多C++特征,比如go to这些语句,还有取消了主文件,让所有的文件都是类,类里都是数组和各种对象,还让Java自己处理各种对象的引用和回收,让开发人员只需要创建对象,使用对象,编辑代码逻辑,不需要关注性能方面,让数据的各种存储交给Java自己处理,可以花更多的时间研究应用程序之间的关系,让开发变得更专注,就像赛车的驾驶员一样,只需要了解各种车辆的性能,并且进行操作,不需要研究轱辘如何制造,这样让程序开发更加的细化。
2.3 微信小程序技术
小程序并非凭空冒出来的一个概念。当微信中的 微信小程序View 逐渐成为移动 微信小程序 的一个重要入口时,微信就有相关的 JS API 了。
实际上,微信官方是没有对外暴露过如此调用的,此类 API 最初是提供给腾讯内部一些业务使用,很多外部开发者发现了之后,依葫芦画瓢地使用了,逐渐成为微信中网页的事实标准。2015年初,微信发布了一整套网页开发工具包,称之为 JS-SDK,开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API。给所有的 微信小程序 开发者打开了一扇全新的窗户,让所有开发者都可以使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情。
JS-SDK是对之前的 WeixinJSBrige 的一个包装,以及新能力的释放,并且由对内开放转为了对所有开发者开放,在很短的时间内获得了极大的关注。从数据监控来看,绝大部分在微信内传播的移动网页都使用到了相关的接口。
​JS-SDK 解决了移动网页能力不足的问题,通过暴露微信的接口使得 微信小程序 开发者能够拥有更多的能力,然而在更多的能力之外,JS-SDK 的模式并没有解决使用移动网页遇到的体验不良的问题。用户在访问网页的时候,在浏览器开始显示之前都会有一个的白屏过程,在移动端,受限于设备性能和网络速度,白屏会更加明显。我们团队把很多技术精力放置在如何帮助平台上的微信小程序开发者解决这个问题。因此我们设计了一个 JS-SDK 的增强版本,其中有一个重要的功能,称之为“微信 微信小程序 资源离线存储”
​这个设计有点类似 HTML5 的 Application Cache,但在设计上规避了一些 Application Cache的不足。
​在内部测试中,我们发现 离线存储 能够解决一些问题,但对于一些复杂的页面依然会有白屏问题,例如页面加载了大量的 CSS 或者是 JavaScript 文件。​除了白屏,影响 微信小程序 体验的问题还有缺少操作的反馈,主要表现在两个方面:页面切换的生硬和点击的迟滞感。
​微信面临的问题是如何设计一个比较好的系统,使得所有开发者在微信中都能获得比较好的体验。这个问题是之前的 JS-SDK 所处理不了的,需要一个全新的系统来完成,它需要使得所有的开发者都能做到:
快速的加载
更强大的能力
原生的体验
易用且安全的微信数据开放
高效和简单的开发

2.4 SpringBoot框架
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个基于Spring框架的应用,它是Spring对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于Spring生态圈的应用。
那Spring Boot有何魔法?自动配置、起步依赖、Actuator、命令行界面(CLI) 是Spring Boot最重要的4大核心特性,其中CLI是Spring Boot的可选特性,虽然它功能强大,但也引入了一套不太常规的开发模型,因而这个系列的文章仅关注其它3种特性。如文章标题,本文是这个系列的第一部分,将为你打开Spring Boot的大门,重点为你剖析其启动流程以及自动配置实现原理。要掌握这部分核心内容,理解一些Spring框架的基础知识,将会让你事半功倍。
可以把Spring IoC容器比作一间餐馆,当你来到餐馆,通常会直接招呼服务员:点菜!至于菜的原料是什么?如何用原料把菜做出来?可能你根本就不关心。IoC容器也是一样,你只需要告诉它需要某个bean,它就把对应的实例(instance)扔给你,至于这个bean是否依赖其他组件,怎样完成它的初始化,根本就不需要你关心。
作为餐馆,想要做出菜肴,得知道菜的原料和菜谱,同样地,IoC容器想要管理各个业务对象以及它们之间的依赖关系,需要通过某种途径来记录和管理这些信息。 BeanDefinition对象就承担了这个责任:容器中的每一个bean都会有一个对应的BeanDefinition实例,该实例负责保存bean对象的所有必要信息,包括bean对象的class类型、是否是抽象类、构造方法和参数、其它属性等等。当客户端向容器请求相应对象时,容器就会通过这些信息为客户端返回一个完整可用的bean实例。

2.5 B/S架构
B/S架构是软件行业针对C/S架构来进行区分的,用来描述浏览器与服务器之间的一种架构模式。一般选择B/S架构最主要的原因就是方便维护,当程序开发的时候,可以在本地进行测试,一般的集成开发环境都自带的有开发和一键部署,本地浏览器可以及时的看到效果,测试人员有专门的服务器,只需要部署上去即可,如果中间有问题都可以进行整改的。应用程序升级,只需要后台维护代码即可,客户方面还是用之前的浏览器进行访问,所以客户端方面是很方便的。现在市面上基本上所有的操作系统平台只要是有视窗模式的,除了命令行操作界面的窗口之外,在视窗模式都是可以安装浏览器的,所以任何带视窗模式的电脑操作系统自带的浏览器或者是其他厂家的浏览器,或者是移动端的浏览器,都可以进行访问服务器的。访问服务器占用客户端资源是很少,而且不容易出错,哪怕客户端这边出现大的问题,只需要重装系统然后再安装上浏览器即可。在程序功能和客户体验上面,选择B/S架构进行应用程序开发,是很适合当今社会的主流发展趋势的。
2.6 Tomcat 介绍
刚开始学习Java语言的时候,是不知道还有Tomcat这些东西的,各种语法各种输出在控制台进行输出结果,当Java网站开发的时候就不可避免的学习到了Tomcat服务器。Tomcat准确的来讲不算是服务器,可以说是微信小程序引擎或者一个容器,这些都是学术上或者原理上都比较贴切的,但是实际工作中Tomcat就是作为一个微信小程序服务器来用的,因为可以实现网站的发布和运行。因为工作原理的原因,Tomcat一般作为中小型企业和并发量并不突出的一种轻量级的服务器存在的,比如某些行业的应用系统,本身客户端就不多,需要的连接也不多,一般都用Tomcat的。Tomcat里面可以配置多个网站,配置文件后缀是config的文档,类似于XML的结构,比较清晰明了。每当Java发布新的版本的时候,Tomcat也会为了匹配Java的版本进行升级,目前Tomcat版本已经到版本10了。Tomcat标识是一只有点发黄的小猫咪,当Tomcat配置成功一般测试的时候能看到这个小猫咪就算是成功的,才能进行下一步的配置。Tomcat服务器在Java网站开发中还是挺合适的。
2.7 HTML简介
HTML是超文本标记语言,都是用各种声明以及对称性的的特殊符号作为标记,用以浏览器解析。HTML还有一些基本标签,比如根元素标签就是,而文档元数据一般都写在了标签里面,标题就是浏览器左上角的显示的网页内容,用的是标签描述,里是很重要的,描述的是浏览器显示的可见内容,如果想要在浏览器上面显示一些数据,那么肯定是要写在标签里面的。关于定义标题或者换行以及段落,都有对应的标签。基本上各个浏览器都支持调试模式,一般都是用到了键盘上面用F12就可以看到标签形式的代码。<br/> HTML作为一种超文本标记语言,是目前学习网站必须学习的第一门语言,要熟悉里面很多种标记,这种标记就是网页专属标记,只有这样浏览器才能解析相关信息。HTML里面包含了整整一套的标签,各种标签都有自己的功能,并且可以循环嵌套这些标签,比如一个表格里套着两个小小的表格。HTML一般文件名称的后缀都是html作为后缀,文档一般叫做微信小程序页面,里面的描述性标记语法被称为代码。

二、系统功能效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、核心代码

- MySQL dump 10.13  Distrib 5.7.31, for Linux (x86_64)
--
-- Host: localhost    Database: ssm3v709
-- ------------------------------------------------------
-- Server version	5.7.31

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `ssm3v709`
--

/*!40000 DROP DATABASE IF EXISTS `ssm3v709`*/;

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `ssm3v709` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `ssm3v709`;

--
-- Table structure for table `chat`
--

DROP TABLE IF EXISTS `chat`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `chat` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `adminid` bigint(20) DEFAULT NULL COMMENT '管理员id',
  `ask` longtext COMMENT '提问',
  `reply` longtext COMMENT '回复',
  `isreply` int(11) DEFAULT NULL COMMENT '是否回复',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1651332058362 DEFAULT CHARSET=utf8 COMMENT='在线咨询';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `chat`
--

LOCK TABLES `chat` WRITE;
/*!40000 ALTER TABLE `chat` DISABLE KEYS */;
INSERT INTO `chat` VALUES (51,'2022-04-30 15:11:40',1,1,'提问1','回复1',0),(52,'2022-04-30 15:11:40',2,2,'提问2','回复2',2),(53,'2022-04-30 15:11:40',3,3,'提问3','回复3',3),(54,'2022-04-30 15:11:40',4,4,'提问4','回复4',4),(55,'2022-04-30 15:11:40',5,5,'提问5','回复5',5),(56,'2022-04-30 15:11:40',6,6,'提问6','回复6',6),(1651331856114,'2022-04-30 15:17:36',1,1,NULL,'电饭锅发的',NULL),(1651332002502,'2022-04-30 15:20:02',1651331942243,NULL,'打算发送到发送到发多少',NULL,0),(1651332058361,'2022-04-30 15:20:58',1651331942243,1,NULL,'电饭锅地方固定',NULL);
/*!40000 ALTER TABLE `chat` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `config`
--

DROP TABLE IF EXISTS `config`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `config` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) NOT NULL COMMENT '配置参数名称',
  `value` varchar(100) DEFAULT NULL COMMENT '配置参数值',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='配置文件';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `config`
--

LOCK TABLES `config` WRITE;
/*!40000 ALTER TABLE `config` DISABLE KEYS */;
INSERT INTO `config` VALUES (1,'picture1','upload/1651331864060.jpg'),(2,'picture2','upload/picture2.jpg'),(3,'picture3','upload/picture3.jpg');
/*!40000 ALTER TABLE `config` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `dianyingfenlei`
--

DROP TABLE IF EXISTS `dianyingfenlei`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dianyingfenlei` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `dianyingfenlei` varchar(200) DEFAULT NULL COMMENT '电影分类',
  PRIMARY KEY (`id`),
  UNIQUE KEY `dianyingfenlei` (`dianyingfenlei`)
) ENGINE=InnoDB AUTO_INCREMENT=1651331777347 DEFAULT CHARSET=utf8 COMMENT='电影分类';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `dianyingfenlei`
--

LOCK TABLES `dianyingfenlei` WRITE;
/*!40000 ALTER TABLE `dianyingfenlei` DISABLE KEYS */;
INSERT INTO `dianyingfenlei` VALUES (21,'2022-04-30 15:11:40','动漫'),(22,'2022-04-30 15:11:40','电影分类2'),(23,'2022-04-30 15:11:40','电影分类3'),(24,'2022-04-30 15:11:40','电影分类4'),(25,'2022-04-30 15:11:40','电影分类5'),(26,'2022-04-30 15:11:40','电影分类6'),(1651331777346,'2022-04-30 15:16:17','武侠');
/*!40000 ALTER TABLE `dianyingfenlei` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `dianyingxinxi`
--

DROP TABLE IF EXISTS `dianyingxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dianyingxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `dianyingmingcheng` varchar(200) NOT NULL COMMENT '电影名称',
  `dianyingfenlei` varchar(200) DEFAULT NULL COMMENT '电影分类',
  `dianyinghaibao` varchar(200) DEFAULT NULL COMMENT '电影海报',
  `dianyingpianduan` varchar(200) DEFAULT NULL COMMENT '电影片段',
  `daoyan` varchar(200) DEFAULT NULL COMMENT '导演',
  `yanyuan` varchar(200) DEFAULT NULL COMMENT '演员',
  `shangyingriqi` date DEFAULT NULL COMMENT '上映日期',
  `fangyingchangci` varchar(200) DEFAULT NULL COMMENT '放映场次',
  `fangyingshijian` varchar(200) DEFAULT NULL COMMENT '放映时间',
  `fangyingting` varchar(200) DEFAULT NULL COMMENT '放映厅',
  `yingyuanmingcheng` varchar(200) DEFAULT NULL COMMENT '影院名称',
  `yingyuandizhi` varchar(200) DEFAULT NULL COMMENT '影院地址',
  `dianyingjieshao` longtext COMMENT '电影介绍',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  `price` float DEFAULT NULL COMMENT '价格',
  `number` int(11) DEFAULT NULL COMMENT '座位总数',
  `selected` longtext COMMENT '已选座位[用,号隔开]',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1651331816370 DEFAULT CHARSET=utf8 COMMENT='电影信息';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `dianyingxinxi`
--

LOCK TABLES `dianyingxinxi` WRITE;
/*!40000 ALTER TABLE `dianyingxinxi` DISABLE KEYS */;
INSERT INTO `dianyingxinxi` VALUES (31,'2022-04-30 15:11:40','电影名称1','动漫','upload/dianyingxinxi_dianyinghaibao1.jpg','','导演1','演员1','2022-04-30','放映场次1','放映时间1','1号厅','影院名称1','影院地址1','<p>电影介绍1</p>','2022-04-30 23:16:20',2,99.9,20,'1,3,5,7,9'),(32,'2022-04-30 15:11:40','电影名称2','电影分类2','upload/dianyingxinxi_dianyinghaibao2.jpg','','导演2','演员2','2022-04-30','放映场次2','放映时间2','1号厅','影院名称2','影院地址2','电影介绍2','2022-04-30 23:11:40',2,99.9,20,'1,3,5,7,9'),(33,'2022-04-30 15:11:40','电影名称3','电影分类3','upload/dianyingxinxi_dianyinghaibao3.jpg','','导演3','演员3','2022-04-30','放映场次3','放映时间3','1号厅','影院名称3','影院地址3','电影介绍3','2022-04-30 23:21:11',7,99.9,20,'1,3,5,7,9,15'),(34,'2022-04-30 15:11:40','电影名称4','电影分类4','upload/dianyingxinxi_dianyinghaibao4.jpg','','导演4','演员4','2022-04-30','放映场次4','放映时间4','1号厅','影院名称4','影院地址4','电影介绍4','2022-04-30 23:11:40',4,99.9,20,'1,3,5,7,9'),(35,'2022-04-30 15:11:40','电影名称5','电影分类5','upload/dianyingxinxi_dianyinghaibao5.jpg','','导演5','演员5','2022-04-30','放映场次5','放映时间5','1号厅','影院名称5','影院地址5','电影介绍5','2022-04-30 23:11:40',5,99.9,20,'1,3,5,7,9'),(36,'2022-04-30 15:11:40','电影名称6','电影分类6','upload/dianyingxinxi_dianyinghaibao6.jpg','','导演6','演员6','2022-04-30','放映场次6','放映时间6','1号厅','影院名称6','影院地址6','电影介绍6','2022-04-30 23:16:59',7,99.9,20,'1,3,5,7,9'),(1651331816369,'2022-04-30 15:16:56','龙珠','动漫','upload/1651331792850.jpg','upload/1651331798210.mp4','时代发生','水电费时代','2022-04-30','时代发多少','时代发多少','3号厅','时代发多少','水电费时代','<p>电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少电商发多少发多少发多少</p><p><img src=\"http://localhost:8080/ssm3v709/upload/1651331815437.jpg\"></p>','2022-04-30 23:20:40',5,222,33,'1,3,5,7,9,14,17');
/*!40000 ALTER TABLE `dianyingxinxi` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `discussdianyingxinxi`
--

DROP TABLE IF EXISTS `discussdianyingxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `discussdianyingxinxi` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `refid` bigint(20) NOT NULL COMMENT '关联表id',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `nickname` varchar(200) DEFAULT NULL COMMENT '用户名',
  `content` longtext NOT NULL COMMENT '评论内容',
  `reply` longtext COMMENT '回复内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1651332036264 DEFAULT CHARSET=utf8 COMMENT='电影信息评论表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `discussdianyingxinxi`
--

LOCK TABLES `discussdianyingxinxi` WRITE;
/*!40000 ALTER TABLE `discussdianyingxinxi` DISABLE KEYS */;
INSERT INTO `discussdianyingxinxi` VALUES (81,'2022-04-30 15:11:40',1,1,'用户名1','评论内容1','回复内容1'),(82,'2022-04-30 15:11:40',2,2,'用户名2','评论内容2','回复内容2'),(83,'2022-04-30 15:11:40',3,3,'用户名3','评论内容3','回复内容3'),(84,'2022-04-30 15:11:40',4,4,'用户名4','评论内容4','回复内容4'),(85,'2022-04-30 15:11:40',5,5,'用户名5','评论内容5','回复内容5'),(86,'2022-04-30 15:11:40',6,6,'用户名6','评论内容6','回复内容6'),(1651331904135,'2022-04-30 15:18:23',33,11,'账号1','按时打算','电商发多少3333'),(1651332036263,'2022-04-30 15:20:36',1651331816369,1651331942243,'11','时代发多少发多少发送到333','');
/*!40000 ALTER TABLE `discussdianyingxinxi` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `orders`
--

DROP TABLE IF EXISTS `orders`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `orders` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `orderid` varchar(200) NOT NULL COMMENT '订单编号',
  `tablename` varchar(200) DEFAULT 'dianyingxinxi' COMMENT '商品表名',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `goodid` bigint(20) NOT NULL COMMENT '商品id',
  `goodname` varchar(200) DEFAULT NULL COMMENT '商品名称',
  `picture` varchar(200) DEFAULT NULL COMMENT '商品图片',
  `buynumber` int(11) NOT NULL COMMENT '购买数量',
  `price` float NOT NULL DEFAULT '0' COMMENT '价格',
  `discountprice` float DEFAULT '0' COMMENT '折扣价格',
  `total` float NOT NULL DEFAULT '0' COMMENT '总价格',
  `discounttotal` float DEFAULT '0' COMMENT '折扣总价格',
  `type` int(11) DEFAULT '1' COMMENT '支付类型',
  `status` varchar(200) DEFAULT NULL COMMENT '状态',
  `address` varchar(200) DEFAULT NULL COMMENT '地址',
  `tel` varchar(200) DEFAULT NULL COMMENT '电话',
  `consignee` varchar(200) DEFAULT NULL COMMENT '收货人',
  `logistics` longtext COMMENT '物流',
  PRIMARY KEY (`id`),
  UNIQUE KEY `orderid` (`orderid`)
) ENGINE=InnoDB AUTO_INCREMENT=1651332020988 DEFAULT CHARSET=utf8 COMMENT='订单';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `orders`
--

LOCK TABLES `orders` WRITE;
/*!40000 ALTER TABLE `orders` DISABLE KEYS */;
INSERT INTO `orders` VALUES (1651331887448,'2022-04-30 15:18:06','20224302318711126968','dianyingxinxi',11,33,'电影名称3','upload/dianyingxinxi_dianyinghaibao3.jpg',1,99.9,99.9,99.9,99.9,1,'已完成','15',NULL,NULL,NULL),(1651332020987,'2022-04-30 15:20:20','20224302320212025784','dianyingxinxi',1651331942243,1651331816369,'龙珠','upload/1651331792850.jpg',2,222,222,444,444,1,'已完成','14,17',NULL,NULL,NULL);
/*!40000 ALTER TABLE `orders` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `storeup`
--

DROP TABLE IF EXISTS `storeup`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `storeup` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `refid` bigint(20) DEFAULT NULL COMMENT '收藏id',
  `tablename` varchar(200) DEFAULT NULL COMMENT '表名',
  `name` varchar(200) NOT NULL COMMENT '收藏名称',
  `picture` varchar(200) NOT NULL COMMENT '收藏图片',
  `type` varchar(200) DEFAULT '1' COMMENT '类型(1:收藏,21:赞,22:踩)',
  `inteltype` varchar(200) DEFAULT NULL COMMENT '推荐类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1651331985393 DEFAULT CHARSET=utf8 COMMENT='收藏表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `storeup`
--

LOCK TABLES `storeup` WRITE;
/*!40000 ALTER TABLE `storeup` DISABLE KEYS */;
INSERT INTO `storeup` VALUES (1651331975942,'2022-04-30 15:19:35',1651331942243,1651331816369,'dianyingxinxi','龙珠','upload/1651331792850.jpg','1',NULL),(1651331985392,'2022-04-30 15:19:44',1651331942243,1651331843126,'zuixinzixun','佛挡杀佛','upload/1651331837241.jpg','1',NULL);
/*!40000 ALTER TABLE `storeup` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `token`
--

DROP TABLE IF EXISTS `token`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `token` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `userid` bigint(20) NOT NULL COMMENT '用户id',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `tablename` varchar(100) DEFAULT NULL COMMENT '表名',
  `role` varchar(100) DEFAULT NULL COMMENT '角色',
  `token` varchar(200) NOT NULL COMMENT '密码',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  `expiratedtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '过期时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='token表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `token`
--

LOCK TABLES `token` WRITE;
/*!40000 ALTER TABLE `token` DISABLE KEYS */;
INSERT INTO `token` VALUES (1,11,'账号1','yonghu','用户','vponopxqpw1laqrsdgmnlp49ahgqyjua','2022-04-30 15:14:21','2022-04-30 16:14:22'),(2,1,'abo','users','管理员','boo8e0gdrfvj6i0d6mhjrs0v28e2dsut','2022-04-30 15:15:59','2022-04-30 16:20:49'),(3,1651331942243,'11','yonghu','用户','3udufz96xiv44c1oh3i2jy68twarvtft','2022-04-30 15:19:06','2022-04-30 16:19:07');
/*!40000 ALTER TABLE `token` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(100) NOT NULL COMMENT '用户名',
  `password` varchar(100) NOT NULL COMMENT '密码',
  `role` varchar(100) DEFAULT '管理员' COMMENT '角色',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'abo','abo','管理员','2022-04-30 15:11:40');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `yonghu`
--

DROP TABLE IF EXISTS `yonghu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `yonghu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `zhanghao` varchar(200) NOT NULL COMMENT '账号',
  `mima` varchar(200) NOT NULL COMMENT '密码',
  `xingming` varchar(200) NOT NULL COMMENT '姓名',
  `nianling` int(11) DEFAULT NULL COMMENT '年龄',
  `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
  `shouji` varchar(200) DEFAULT NULL COMMENT '手机',
  `zhaopian` varchar(200) DEFAULT NULL COMMENT '照片',
  `money` float DEFAULT '0' COMMENT '余额',
  PRIMARY KEY (`id`),
  UNIQUE KEY `zhanghao` (`zhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=1651331942244 DEFAULT CHARSET=utf8 COMMENT='用户';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `yonghu`
--

LOCK TABLES `yonghu` WRITE;
/*!40000 ALTER TABLE `yonghu` DISABLE KEYS */;
INSERT INTO `yonghu` VALUES (11,'2022-04-30 15:11:40','账号1','123456','姓名1',1,'男','13823888881','upload/yonghu_zhaopian1.jpg',0.1),(12,'2022-04-30 15:11:40','账号2','123456','姓名2',2,'男','13823888882','upload/yonghu_zhaopian2.jpg',100),(13,'2022-04-30 15:11:40','账号3','123456','姓名3',3,'男','13823888883','upload/yonghu_zhaopian3.jpg',100),(14,'2022-04-30 15:11:40','账号4','123456','姓名4',4,'男','13823888884','upload/yonghu_zhaopian4.jpg',100),(15,'2022-04-30 15:11:40','账号5','123456','姓名5',5,'男','13823888885','upload/yonghu_zhaopian5.jpg',100),(16,'2022-04-30 15:11:40','账号6','123456','姓名6',6,'男','13823888886','upload/yonghu_zhaopian6.jpg',100),(1651331942243,'2022-04-30 15:19:02','11','11','发给',11,'女','11122223333','upload/1651331991896.jpg',111777);
/*!40000 ALTER TABLE `yonghu` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `zuixinzixun`
--

DROP TABLE IF EXISTS `zuixinzixun`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zuixinzixun` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `biaoti` varchar(200) NOT NULL COMMENT '标题',
  `zixunleixing` varchar(200) DEFAULT NULL COMMENT '资讯类型',
  `fabushijian` date DEFAULT NULL COMMENT '发布时间',
  `fengmian` varchar(200) DEFAULT NULL COMMENT '封面',
  `neirong` longtext COMMENT '内容',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1651331843127 DEFAULT CHARSET=utf8 COMMENT='最新资讯';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `zuixinzixun`
--

LOCK TABLES `zuixinzixun` WRITE;
/*!40000 ALTER TABLE `zuixinzixun` DISABLE KEYS */;
INSERT INTO `zuixinzixun` VALUES (41,'2022-04-30 15:11:40','标题1','资讯类型1','2022-04-30','upload/zuixinzixun_fengmian1.jpg','内容1','2022-04-30 23:11:40',1),(42,'2022-04-30 15:11:40','标题2','资讯类型2','2022-04-30','upload/zuixinzixun_fengmian2.jpg','内容2','2022-04-30 23:11:40',2),(43,'2022-04-30 15:11:40','标题3','资讯类型3','2022-04-30','upload/zuixinzixun_fengmian3.jpg','内容3','2022-04-30 23:11:40',3),(44,'2022-04-30 15:11:40','标题4','资讯类型4','2022-04-30','upload/zuixinzixun_fengmian4.jpg','内容4','2022-04-30 23:19:21',6),(45,'2022-04-30 15:11:40','标题5','资讯类型5','2022-04-30','upload/zuixinzixun_fengmian5.jpg','内容5','2022-04-30 23:11:40',5),(46,'2022-04-30 15:11:40','标题6','资讯类型6','2022-04-30','upload/zuixinzixun_fengmian6.jpg','内容6','2022-04-30 23:11:40',6),(1651331843126,'2022-04-30 15:17:22','佛挡杀佛',' 时代发送到','2022-04-30','upload/1651331837241.jpg','<p>的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代的份上发多少发送到发送到发送到时代</p>','2022-04-30 23:20:25',3);
/*!40000 ALTER TABLE `zuixinzixun` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2022-05-03 20:48:18

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.DianyingxinxiEntity;
import com.entity.view.DianyingxinxiView;

import com.service.DianyingxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import com.service.StoreupService;
import com.entity.StoreupEntity;

/**
 * 电影信息
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-30 23:11:21
 */
@RestController
@RequestMapping("/dianyingxinxi")
public class DianyingxinxiController {
    @Autowired
    private DianyingxinxiService dianyingxinxiService;


    @Autowired
    private StoreupService storeupService;

    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, 
		HttpServletRequest request){

        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, 
		HttpServletRequest request){
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DianyingxinxiEntity dianyingxinxi){
       	EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( dianyingxinxi, "dianyingxinxi")); 
        return R.ok().put("data", dianyingxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DianyingxinxiEntity dianyingxinxi){
        EntityWrapper< DianyingxinxiEntity> ew = new EntityWrapper< DianyingxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( dianyingxinxi, "dianyingxinxi")); 
		DianyingxinxiView dianyingxinxiView =  dianyingxinxiService.selectView(ew);
		return R.ok("查询电影信息成功").put("data", dianyingxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DianyingxinxiEntity dianyingxinxi = dianyingxinxiService.selectById(id);
		dianyingxinxi.setClicknum(dianyingxinxi.getClicknum()+1);
		dianyingxinxi.setClicktime(new Date());
		dianyingxinxiService.updateById(dianyingxinxi);
        return R.ok().put("data", dianyingxinxi);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DianyingxinxiEntity dianyingxinxi = dianyingxinxiService.selectById(id);
		dianyingxinxi.setClicknum(dianyingxinxi.getClicknum()+1);
		dianyingxinxi.setClicktime(new Date());
		dianyingxinxiService.updateById(dianyingxinxi);
        return R.ok().put("data", dianyingxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
    	dianyingxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dianyingxinxi);

        dianyingxinxiService.insert(dianyingxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
    	dianyingxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dianyingxinxi);

        dianyingxinxiService.insert(dianyingxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(dianyingxinxi);
        dianyingxinxiService.updateById(dianyingxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        dianyingxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<DianyingxinxiEntity> wrapper = new EntityWrapper<DianyingxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = dianyingxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, HttpServletRequest request,String pre){
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        
        params.put("order", "desc");
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        return R.ok().put("data", page);
    }







}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA编码选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值