package com.yuanlrc.campus_market.controller.home;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yuanlrc.campus_market.bean.CodeMsg;
import com.yuanlrc.campus_market.bean.Result;
import com.yuanlrc.campus_market.constant.SessionConstant;
import com.yuanlrc.campus_market.entity.common.Comment;
import com.yuanlrc.campus_market.entity.common.Goods;
import com.yuanlrc.campus_market.entity.common.ReportGoods;
import com.yuanlrc.campus_market.entity.common.Student;
import com.yuanlrc.campus_market.entity.common.WantedGoods;
import com.yuanlrc.campus_market.service.common.CommentService;
import com.yuanlrc.campus_market.service.common.GoodsCategoryService;
import com.yuanlrc.campus_market.service.common.GoodsService;
import com.yuanlrc.campus_market.service.common.ReportGoodsService;
import com.yuanlrc.campus_market.service.common.StudentService;
import com.yuanlrc.campus_market.service.common.WantedGoodsService;
import com.yuanlrc.campus_market.util.SessionUtil;
import com.yuanlrc.campus_market.util.ValidateEntityUtil;
/**
* 学生中心控制器
* @author Administrator
*
*/
@RequestMapping("/home/student")
@Controller
public class HomeStudentController {
@Autowired
private GoodsCategoryService goodsCategoryService;
@Autowired
private StudentService studentService;
@Autowired
private GoodsService goodsService;
@Autowired
private WantedGoodsService wantedGoodsService;
@Autowired
private ReportGoodsService reportGoodsService;
@Autowired
private CommentService commentService;
/**
* 学生登录主页
* @param model
* @return
*/
@RequestMapping(value="/index",method=RequestMethod.GET)
public String index(Model model){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
model.addAttribute("goodsList", goodsService.findByStudent(loginedStudent));
model.addAttribute("wantedGoodsList", wantedGoodsService.findByStudent(loginedStudent));
model.addAttribute("reportGoodsList", reportGoodsService.findByStudent(loginedStudent));
return "home/student/index";
}
/**
* 修改个人信息提交表单
* @param student
* @return
*/
@RequestMapping(value="/edit_info",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> editInfo(Student student){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
loginedStudent.setAcademy(student.getAcademy());
loginedStudent.setGrade(student.getGrade());
loginedStudent.setMobile(student.getMobile());
loginedStudent.setNickname(student.getNickname());
loginedStudent.setQq(student.getQq());
loginedStudent.setSchool(student.getSchool());
if(studentService.save(loginedStudent) == null){
return Result.error(CodeMsg.HOME_STUDENT_EDITINFO_ERROR);
}
SessionUtil.set(SessionConstant.SESSION_STUDENT_LOGIN_KEY,loginedStudent);
return Result.success(true);
}
/**
* 保存用户头像
* @param headPic
* @return
*/
@RequestMapping(value="/update_head_pic",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> updateHeadPic(@RequestParam(name="headPic",required=true)String headPic){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
loginedStudent.setHeadPic(headPic);;
if(studentService.save(loginedStudent) == null){
return Result.error(CodeMsg.HOME_STUDENT_EDITINFO_ERROR);
}
SessionUtil.set(SessionConstant.SESSION_STUDENT_LOGIN_KEY,loginedStudent);
return Result.success(true);
}
/**
* 物品发布页面
* @param model
* @return
*/
@RequestMapping(value="/publish",method=RequestMethod.GET)
public String publish(Model model){
return "home/student/publish";
}
/**
* 商品发布表单提交
* @param goods
* @return
*/
@RequestMapping(value="/publish",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> publish(Goods goods){
CodeMsg validate = ValidateEntityUtil.validate(goods);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(goods.getGoodsCategory() == null || goods.getGoodsCategory().getId() == null || goods.getGoodsCategory().getId().longValue() == -1){
return Result.error(CodeMsg.HOME_STUDENT_PUBLISH_CATEGORY_EMPTY);
}
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
goods.setStudent(loginedStudent);
if(goodsService.save(goods) == null){
return Result.error(CodeMsg.HOME_STUDENT_PUBLISH_ERROR);
}
return Result.success(true);
}
/**
* 物品编辑页面
* @param id
* @param model
* @return
*/
@RequestMapping(value="/edit_goods",method=RequestMethod.GET)
public String publish(@RequestParam(name="id",required=true)Long id,Model model){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
Goods goods = goodsService.find(id, loginedStudent.getId());
if(goods == null){
model.addAttribute("msg", "物品不存在!");
return "error/runtime_error";
}
model.addAttribute("goods", goods);
return "home/student/edit_goods";
}
/**
* 物品编辑表单提交
* @param goods
* @return
*/
@RequestMapping(value="/edit_goods",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> editGoods(Goods goods){
CodeMsg validate = ValidateEntityUtil.validate(goods);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
if(goods.getGoodsCategory() == null || goods.getGoodsCategory().getId() == null || goods.getGoodsCategory().getId().longValue() == -1){
return Result.error(CodeMsg.HOME_STUDENT_PUBLISH_CATEGORY_EMPTY);
}
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
Goods existGoods = goodsService.find(goods.getId(), loginedStudent.getId());
if(existGoods == null){
return Result.error(CodeMsg.HOME_STUDENT_GOODS_NO_EXIST);
}
existGoods.setBuyPrice(goods.getBuyPrice());
existGoods.setContent(goods.getContent());
existGoods.setGoodsCategory(goods.getGoodsCategory());
existGoods.setName(goods.getName());
existGoods.setPhoto(goods.getPhoto());
existGoods.setSellPrice(goods.getSellPrice());
if(goodsService.save(existGoods) == null){
return Result.error(CodeMsg.HOME_STUDENT_GOODS_EDIT_ERROR);
}
return Result.success(true);
}
/**
* 用户设置是否擦亮物品
* @param id
* @param flag
* @return
*/
@RequestMapping(value="/update_flag",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> updateFlag(@RequestParam(name="id",required=true)Long id,
@RequestParam(name="flag",required=true,defaultValue="0")Integer flag){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
Goods existGoods = goodsService.find(id, loginedStudent.getId());
if(existGoods == null){
return Result.error(CodeMsg.HOME_STUDENT_GOODS_NO_EXIST);
}
existGoods.setFlag(flag);
if(goodsService.save(existGoods) == null){
return Result.error(CodeMsg.HOME_STUDENT_GOODS_EDIT_ERROR);
}
return Result.success(true);
}
/**
* 修改物品状态
* @param id
* @param status
* @return
*/
@RequestMapping(value="/update_status",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> updateStatus(@RequestParam(name="id",required=true)Long id,
@RequestParam(name="status",required=true,defaultValue="2")Integer status){
Student loginedStudent = (Student)SessionUtil.get(SessionConstant.SESSION_STUDENT_LOGIN_KEY);
Goods existGoods = goodsService.find(id, loginedStudent.getId())
基于springboot的校园二手交易系统.zip
需积分: 0 22 浏览量
更新于2023-10-09
收藏 30.54MB ZIP 举报
《基于SpringBoot的校园二手交易系统详解》
在数字化时代,高校内的二手交易需求日益增长,而基于SpringBoot开发的校园二手交易系统为满足这一需求提供了便利。SpringBoot以其便捷的初始化、自动化配置以及强大的微服务支持,成为了构建此类系统的首选框架。本文将深入探讨如何利用SpringBoot来构建一个高效、安全、易用的校园二手交易系统。
一、SpringBoot概述
SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它预设了大量默认配置,开发者无需编写大量的XML配置文件,只需关注业务逻辑,大大提高了开发效率。
二、系统架构设计
1. 技术选型:使用SpringBoot作为核心框架,搭配MyBatis作为持久层框架,Redis用于缓存,MySQL作为数据库存储,JWT(JSON Web Tokens)处理用户认证,Elasticsearch进行商品搜索,Docker进行容器化部署。
2. 微服务拆分:将系统分为用户服务、商品服务、订单服务、支付服务等多个微服务,每个服务独立部署,提高系统可扩展性和稳定性。
3. 前端技术:采用React或Vue等现代前端框架,实现响应式布局,提升用户体验。
三、功能模块实现
1. 用户模块:包括用户注册、登录、个人信息管理。使用JWT进行身份验证,确保用户数据的安全性。
2. 商品模块:支持商品发布、查询、收藏、评价等功能。商品信息存储在MySQL数据库,通过Elasticsearch提供快速的全文检索功能。
3. 交易模块:实现订单创建、支付、发货、确认收货等流程。集成第三方支付接口,如支付宝、微信支付,确保交易的顺利完成。
4. 安全模块:采用HTTPS协议保障数据传输安全,结合Spring Security进行权限控制,防止非法访问。
5. 消息通知:通过RabbitMQ或Kafka实现消息队列,实现实时的消息推送,如订单状态变更、评论通知等。
四、开发流程
1. 初始化项目:使用Spring Initializr创建项目,选择需要的依赖,如Spring Web、MyBatis、Security等。
2. 数据库设计:设计符合业务需求的数据库模型,编写SQL脚本。
3. 编写API接口:定义RESTful API,实现前后端交互。
4. 配置自动化部署:利用Jenkins或GitLab CI/CD实现持续集成与持续部署。
5. 测试与优化:进行单元测试、接口测试,确保系统稳定运行。对性能瓶颈进行优化,如数据库索引优化、缓存策略调整等。
五、运维监控
1. 日志收集:使用Logstash收集日志,通过Elasticsearch存储,Kibana展示,实现日志可视化分析。
2. 应用监控:集成Prometheus和Grafana,监控系统性能指标,如CPU使用率、内存占用、请求延迟等。
3. 异常告警:设置告警规则,当系统出现异常时,通过邮件、短信等方式通知运维人员。
通过以上步骤,我们可以构建一个基于SpringBoot的校园二手交易系统,为学生提供方便快捷的交易环境,同时也能为开发者提供一个良好的学习和实践平台,充分展示了SpringBoot在实际项目中的强大功能和高效性。
一只会写程序的猫
- 粉丝: 1w+
- 资源: 866
最新资源
- 机器学习逻辑回归完成员工离职预测
- W25Q64-FLASH
- 基于SpringBoot框架的餐饮商家管理系统设计源码
- 基于C#编程的Minecraft简易材质包生成器设计源码
- 基于深度学习技术的Vue框架在线学生成绩与学业发展分析系统设计源码
- 基于OneOS操作系统的SMx加密算法组件设计源码
- 基于Html语言的LinysBrowser_NEXT鸿蒙浏览器设计源码
- Comsol光子晶体微腔及其傅里叶变分析 包含comsol和fdtd模型,以及matlab代码等
- 基于微信公众号的在线培训平台录播直播系统设计源码
- 物联网智能开关平台服务端硬件端、安卓端和前端源码 源代码 程序 智能开关平台,包含服务端、硬件端、安卓端和前端 关键词:智能家居、物联网开关、远程开关、红外线遥控开关、WIFI继电器、MQTT协议、
- 基于Java、Vue的开放式一物一码溯源防伪系统设计源码
- 潮汐发电,永磁同步发电机,变速运行,采用MTPA控制,独特的弱磁曲线,提高起始转矩,调速范围宽 同时附赠id=0控制永磁同步电机控制 波形理想
- 基于C语言的violin调式转换练琴设计源码
- 基于Vue框架的掌上医院uniapp设计源码
- 基于Vue.js框架的3D翻转效果会员卡/粉丝卡设计源码,包含反光特效与响应式布局
- 图像分割语义分割unet、 deeplab3、FCN、Resnet网络等 基于pytorch框架制作 全套项目,包含网络模型,训练代码,预测代码,直接下载数据集就能跑,拿上就能用,简单又省事