springboot项目 (枚举) 前台vue

	以下是配置文件内容

#服务器配置
server.port=93
server.servlet.context-path=/
#server.context-path=
#server.display-name=
#server.tomcat.uri-encoding=UTF-8
#包含某个文件配置
#spring.profiles.include=
#数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/fuxi2
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

#mybatis-plus增强工具配置
mybatis-plus.mapper-locations=classpath*:/mappers/**/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#枚举处理 不通的项目扫描的不通的枚举包
mybatis-plus.type-enums-package=com.chjx.syscourse.enums

#支持上传的配置
spring.servlet.multipart.enabled=true
#文件上传的大小
spring.servlet.multipart.max-file-size=2MB
#批量上传的最大请求大小
spring.servlet.multipart.max-request-size=10MB

#配置上传的路径地址
upload.path=D:/pic/
#配置访问的地址
upload.url=http://localhost:92/img/

	后台代码如下
控制层代码

@RestController
@RequestMapping("/course")
public class CourseController {

    private Logger logger = LoggerFactory.getLogger(CourseController.class);

    @Autowired
    private ICourseService iCourseService;

    @Autowired
    private ISectionService iSectionService;

    @RequestMapping("/list")
    public ResultApi list(Page page, Course course,String meiju,boolean sort){
        //定义查询条件
        QueryWrapper wrapper =new QueryWrapper();



        if(course!=null){
            //枚举处理
            if(meiju!=null && !"".equals(meiju)){
                if(meiju.equals("外语")){
                    course.setCategory(CategoryEnum.CATEGORY_TWO);
                }else if(meiju.equals("考研")){
                    course.setCategory(CategoryEnum.CATEGORY_THREE);
                }else if(meiju.equals("计算机")){
                    course.setCategory(CategoryEnum.CATEGORY_ONE);
                }
                wrapper.eq("category",course.getCategory());
            }
            //判断条件   !"".equals();
            if(course.getName()!=null && !"".equals(course.getName())){
                wrapper.like("name",course.getName());
            }
            //判断条件
            if(course.getSprice()!=null && course.getEprice()!=null){
                wrapper.between("sale",course.getSprice(),course.getEprice());
            }
            //判断条件
            if(course.getStime()!=null && course.getEtime()!=null){
                wrapper.between("starttime",course.getStime(),course.getEtime());
            }
        }


        System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@"+sort);
        //判断排序
        if(sort){
            wrapper.orderByAsc("sale");
        }else{
            wrapper.orderByDesc("sale");
        }


        //查询课程
        Page pageInfo = iCourseService.page(page, wrapper);
        return ResultApi.success(pageInfo);
    }


    @RequestMapping("/insert")
    public ResultApi insert(@RequestBody Course entity){
        return ResultApi.success(iCourseService.save(entity));
    }

    @RequestMapping("/cateogries")
    public ResultApi cateogries(){
        return ResultApi.success(CategoryEnum.values());
    }


    @RequestMapping("/upload")
    public ResultApi upload(MultipartFile file){
        try {
            //返回文件名称
            String upload = UploadUtil.upload(file);
            //拼接访问的路径地址
            return ResultApi.success("http://localhost:93/img/"+upload);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResultApi.error(null);
    }

    @RequestMapping("/deletes")
    @Transactional
    public ResultApi deletes(Integer ids[]){
        try {
            //先删除章节表
            for (Integer id : ids) {
                QueryWrapper queryWrapper = new QueryWrapper();
                queryWrapper.eq("cid", id);
                iSectionService.remove(queryWrapper);
            }
            //删除课程表
            iCourseService.removeByIds(Arrays.asList(ids));
            return  ResultApi.success(true);
        }catch (Exception ex){
            ex.printStackTrace();
        }

            return ResultApi.success(false);
    }
}

@RestController
@RequestMapping("/section")
public class SectionController {


    @Autowired
    private ISectionService iSectionService;

    @RequestMapping("/insert")
    public ResultApi insert(@RequestBody  Section entity){
        return ResultApi.success(iSectionService.save(entity));
    }

    @RequestMapping("/sections")
    public ResultApi getSectionByCid(Integer cid){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("cid",cid);
        return ResultApi.success(iSectionService.list(queryWrapper));
    }
}


枚举类中的代码(配置文件中要配置扫描枚举类)
@Getter
public enum CategoryEnum {

    CATEGORY_ONE(1,"计算机"),
    CATEGORY_TWO(2,"外语"),
    CATEGORY_THREE(3,"考研");

    @EnumValue
    private Integer id;
    @JsonValue
    private String name;

    private CategoryEnum(Integer id,String name){
        this.id=id;
        this.name=name;
    }

}
	实体类中的时间格式

    @TableField(exist = false)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date stime;
		前台代码  (使用elementUi)
<template>
	<div class="about">

		<el-row style="margin-bottom: 20px;">
			<el-col :span="24">
				<el-col :span="5">
					<el-button type="primary" @click="openInsert">添加课程</el-button>
				</el-col>
			</el-col>
		</el-row>

		<el-row>
			<el-col :span="24">

				<el-form :inline="true" :model="searhForm">
					<el-form-item label="课程名称">
						<el-input v-model="searhForm.name" placeholder="请输入课程名称"></el-input>
					</el-form-item>

					<el-form-item label="价格区间">
						<el-input v-model="searhForm.sprice" style="width: 40%;"></el-input><el-input v-model="searhForm.eprice" style="width: 40%;"></el-input>
					</el-form-item>

					<el-form-item label="上架时间区间">
						<el-date-picker v-model="sdatevalues" type="daterange" value-format="yyyy-MM-dd" start-placeholder="开始日期"
						 end-placeholder="结束日期">
						</el-date-picker>
					</el-form-item>

					<el-form-item label="课程分类">
						<el-select v-model="searhForm.category" placeholder="请选择课程分类" style="width: 100%;">
							<!--枚举添加的最终使用 {"reason":"数据操作成功","code":1001,"result":["计算机","外语","考研"]}-->
							<!--categories ["计算机","外语","考研"]-->
							<el-option v-for="item in categories" :label="item" :value="item">
							</el-option>
						</el-select>
					</el-form-item>

					<el-form-item>
						<el-button type="primary" @click="searchData">查询</el-button>
					</el-form-item>
				</el-form>


			</el-col>
		</el-row>

		<el-row>
			<el-col :span="24">
				<el-switch v-model="sort" active-color="#13ce66" inactive-color="#ff4949" active-text="价格升序" inactive-text="价格降序">
				</el-switch>
			</el-col>
		</el-row>



		<el-row style="margin-bottom: 20px;">
			<el-col :span="5" v-for="row in tableData" :offset="1">
				<el-card :body-style="{ padding: '0px' }">
					<img :src="row.img" class="image">
					<div style="padding: 14px;text-align: left;">
						<div>课程名称:{{row.name}}</div>
						<div>课程价格:{{row.sale}}</div>
						<div>课程分类:{{row.category}}</div>
						<div>上架时间:{{row.starttime}}</div>
						<div style="margin-top: 3px; margin-bottom: 3px;">
							<el-button type="primary" size="mini" @click="opensInsert(row)">添加章节</el-button>
						</div>
						<div style="margin-top: 3px; margin-bottom: 3px;">
							<el-button type="success" size="mini">修改课程</el-button>
						</div>
						<div style="margin-top: 3px; margin-bottom: 3px;">
							<el-button type="danger" size="mini" @click="deleteData(row)">删除课程</el-button>
						</div>

						<div style="margin-top: 3px; margin-bottom: 3px;">
							<el-button type="danger" size="mini" @click="detailcourse(row)">课程详细</el-button>
						</div>
					</div>
				</el-card>
			</el-col>
		</el-row>

		<el-row>
			<el-col :span="24" style="text-align: center;">
				<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current"
				 :page-sizes="pagesizes" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="total">
				</el-pagination>
			</el-col>
		</el-row>





		<!--课程添加操作-->
		<el-dialog title="添加课程" :visible.sync="adddialogVisible" width="60%" center>

			<el-form :model="addForm" :rules="addFormRules" ref="addForm" label-width="100px">
				<el-form-item label="课程名称" prop="name">
					<el-input v-model="addForm.name"></el-input>
				</el-form-item>

				<el-form-item label="课程封面">
					<el-upload class="avatar-uploader" action="http://localhost:93/course/upload" :show-file-list="false" :on-success="handleAvatarSuccess">
						<img v-if="imageUrl" :src="imageUrl" class="avatar">
						<i v-else class="el-icon-plus avatar-uploader-icon"></i>
					</el-upload>
				</el-form-item>

				<el-form-item label="课程分类">
					<el-select v-model="addForm.category" placeholder="请选择课程分类" style="width: 100%;">
						<!--枚举添加的最终使用 {"reason":"数据操作成功","code":1001,"result":["计算机","外语","考研"]}-->
						<!--categories ["计算机","外语","考研"]-->
						<el-option v-for="item in categories" :label="item" :value="item">
						</el-option>
					</el-select>
				</el-form-item>


				<el-form-item label="课程日期">
					<el-date-picker v-model="datevalues" type="daterange" value-format="yyyy-MM-dd" start-placeholder="课程开始日期"
					 end-placeholder="课程结束日期">
					</el-date-picker>
				</el-form-item>

				<el-form-item label="课程标价" prop="price">
					<el-input type="number" v-model="addForm.price"></el-input>
				</el-form-item>

				<el-form-item label="课程销售价格" prop="sale">
					<el-input type="number" v-model="addForm.sale"></el-input>
				</el-form-item>


				<el-form-item label="课程介绍" prop="remark">
					<el-input type="textarea" v-model="addForm.remark"></el-input>
				</el-form-item>
				<el-form-item>
					<el-button type="primary" @click="addData('addForm')">立即创建</el-button>
					<el-button @click="resetForm('addForm')">重置</el-button>
				</el-form-item>
			</el-form>
		</el-dialog>


		<!--课程添加操作-->
		<el-dialog title="添加章节" :visible.sync="addsdialogVisible" width="60%" center>

			<el-form :model="addsForm" label-width="100px">
				<el-form-item label="章节名称" prop="name">
					<el-input v-model="addsForm.name"></el-input>
				</el-form-item>

				<el-form-item>
					<el-button type="primary" @click="addsData('addsForm')">添加章节</el-button>
					<el-button @click="resetForm('addsForm')">重置</el-button>
				</el-form-item>
			</el-form>
		</el-dialog>
		
		
		<!--/课程详细///-->
		<el-dialog title="课程详细" :visible.sync="coursedetaildialogVisible" width="60%" center>
		   <div>
			   {{this.detailcoursedata.name}}
		   </div>
			
			<div v-for="section in sections">
				{{section.name}}
			</div>
			
			<div>
				<el-button @click="coursedetaildialogVisible= false">关闭</el-button>
			</div>
		</el-dialog>

	</div>
</template>
	前台js代码
<script>
	export default {
		data() {

			//自定义价格校验
			var checkSale = (rule, value, callback) => {
				//转换float类型
				if (value > parseFloat(this.addForm.price)) {
					callback(new Error('销售价格应该小于标价格!'));
				} else {
					callback();
				}
			}

			return {
				addsdialogVisible: false,
				addsForm: {
					name: '',
					cid: 0,
				},
				sort: false,
				sdatevalues: '',
				searhForm: {
					name: '',
					sprice: '',
					eprice: '',
					stime: '',
					etime: '',
					category: ''
				},
				current: 1,
				pagesize: 4,
				pagesizes: [4, 8, 12],
				total: 0,
				tableData: [],
				adddialogVisible: false,
				addForm: {
					category: '',
					name: '',
					remark: '',
					img: '',
					starttime: '',
					endtime: '',
					price: 0,
					sale: 0
				},
				addFormRules: {
					sale: [{
						validator: checkSale,
						trigger: 'blur'
					}],
				},
				categories: [],
				imageUrl: '',
				datevalues: '',
				detailcoursedata:{
					
				},
				coursedetaildialogVisible:false,
				sections:[]
			};
		},
		created: function() {
			this.initCategories();
			this.initData();
		},
		methods: {
			deleteData(row){
				 this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
				          confirmButtonText: '确定',
				          cancelButtonText: '取消',
				          type: 'warning'
				        }).then(() => {
							
							this.axios.get('http://localhost:93/course/deletes',{params:{ids:row.id}}).then((res)=>{
								
								if(res.data.result){
									this.$message({
									  type: 'success',
									  message: '删除成功!'
									});
									
									this.initData();
								}
							});
							
						
				        }).catch(() => {
				          this.$message({
				            type: 'info',
				            message: '已取消删除'
				          });          
				        });
			},
			detailcourse(row){
				Object.assign(this.detailcoursedata,row);
				
				this.axios.get('http://localhost:93/section/sections',{params:{cid:row.id}}).then((res)=>{
					this.sections=res.data.result;
					console.log(this.sections);
				});
				
				this.coursedetaildialogVisible=true;
			},
			addsData() {
				//发送添加请求处理 post 请求
				this.axios.post('http://localhost:93/section/insert', this.addsForm).then((res) => {
					if (res.data.result) {
						this.$message({
							message: '恭喜你,成功添加数据',
							type: 'success'
						});
						this.addsdialogVisible = false;
					} else {
						this.$message({
							message: '添加失败消息',
							type: 'warning'
						});
					}
				});
			},
			opensInsert(row) {
				this.addsForm.cid = row.id;
				this.addsdialogVisible = true;
			},
			searchData() {
				this.current = 1;
				this.initData();
			},
			handleSizeChange(val) {
				this.pagesize = val;
				this.initData();
			},
			handleCurrentChange(val) {
				this.current = val;
				this.initData();
			},

			initData() {
				//对于日期处理一下
				if (this.sdatevalues instanceof Array && this.sdatevalues.length > 0) {
					//开始日期
					this.searhForm.stime = this.sdatevalues[0];
					//结束日期
					this.searhForm.etime = this.sdatevalues[1];
				}


				this.axios.get('http://localhost:93/course/list', {
					params: {
						current: this.current,
						size: this.pagesize,
						name: this.searhForm.name,
						sprice: this.searhForm.sprice,
						eprice: this.searhForm.eprice,
						stime: this.searhForm.stime,
						etime: this.searhForm.etime,
						meiju: this.searhForm.category,
						sort: this.sort
					}
				}).then((res) => {
					//固定数据
					this.tableData = res.data.result.records;
					this.total = res.data.result.total;
				});

			},
			//图片上传成功的事件
			handleAvatarSuccess(res, file) {
				this.imageUrl = URL.createObjectURL(file.raw);
				if (this.adddialogVisible) {
					//直接用res.result接收
					this.addForm.img = res.result;
				}
			},
			//初始化枚举
			initCategories() {
				this.axios.get('http://localhost:93/course/cateogries').then((res) => {
					this.categories = res.data.result;
				});
			},
			//打开添加的对话框
			openInsert() {
				this.adddialogVisible = true;
			},
			//添加处理事件
			addData(formName) {
				this.$refs[formName].validate((valid) => {
					if (valid) {

						//对于日期处理一下
						if (this.datevalues instanceof Array && this.datevalues.length > 0) {
							//开始日期
							this.addForm.starttime = this.datevalues[0];
							//结束日期
							this.addForm.endtime = this.datevalues[1];
						}

						//发送添加请求处理 post 请求
						this.axios.post('http://localhost:93/course/insert', this.addForm).then((res) => {

						});

					} else {
						console.log('error submit!!');
						return false;
					}
				});
			},
			resetForm(formName) {
				this.$refs[formName].resetFields();
			}
		}
	};
</script>
	前台style样式
<style>
	.image {
		width: 100%;
		display: block;
	}

	.avatar-uploader .el-upload {
		border: 1px dashed #d9d9d9;
		border-radius: 6px;
		cursor: pointer;
		position: relative;
		overflow: hidden;
	}

	.avatar-uploader .el-upload:hover {
		border-color: #409EFF;
	}

	.avatar-uploader-icon {
		font-size: 28px;
		color: #8c939d;
		width: 100px;
		height: 100px;
		line-height: 100px;
		text-align: center;
	}

	.avatar {
		width: 100px;
		height: 100px;
		display: block;
	}
</style>

查询sql语句
	-- 按照分类分组 求出 平均值
select category,SUM(price) sumtotal,avg(price) avgprice from course GROUP BY category;


select category,SUM(price) sumtotal,avg(price) avgprice from course GROUP BY category having sumtotal>300



-- 按照计算销售出的去 价格

select *,sale*nums as saleTotal  from course order by category asc;


select sum(sale*nums)as saleTotal  from course where category =1;

select sum(sale*nums)as saleTotal  from course where category =2;

select sum(sale*nums)as saleTotal  from course where category =3;


select sum(sale*nums) as saleTotal from course;

#按照分类统计每个分类中销售的总价格,进行排序,取出前2名
select * from (select category ,sum(sale*nums)as saleTotal  from course  GROUP BY category) t order by saleTotal limit 2;

#按照课程的销售量排名,取出前三名
select * from course order by nums desc limit 3;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值