当前位置:   article > 正文

前后端分离|基于Springboot+Vue校园闲置物品交易系统设计与实现_基于java springboot和vue校园二手交易商城

基于java springboot和vue校园二手交易商城

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-SC-063

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:Springboot+Vue

二,项目简介

校园闲置物品交易系统可以对校园闲置物品交易系统信息进行集中管理,可以真正避免传统管理的缺陷。校园闲置物品交易系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,校园闲置物品交易系统都可以轻松应对。所以,校园闲置物品交易系统的运用是让校园闲置物品交易系统信息管理升级的最好方式。它可以实现信息处理的便利化要求,还可以规范信息处理的流程,让事务处理成为管理人员手中的一件简单事,而不是之前手工处理时的困难事。尽管校园闲置物品交易系统具备较完善的功能,但是也需要管理人员利用闲暇时间提升自身素质以及个人能力,在操作校园闲置物品交易系统时可以最大化运用校园闲置物品交易系统提供的功能,让系统在满足高效率处理数据的同时,也能始终稳定运行,还可以确保数据的可靠性与数据处理的质量。

系统实现的主要功能:

三,系统展示

3.1用户信息管理

如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,

还进行了对用户名称的模糊查询的条件

图3.1 用户信息管理页面

3.2闲置物品管理

如图3.2显示的就是闲置物品管理页面,此页面提供给管理员的功能有:查看已发布的闲置物品数据,修改闲置物品,闲置物品作废,即可删除,还进行了对闲置物品名称的模糊查询 闲置物品信息的类型查询等等一些条件。

图3.2 闲置物品管理页面

3.3资讯类型管理

如图3.3显示的就是资讯类型管理页面,此页面提供给管理员的功能有:根据资讯类型进行条件查询,还可以对资讯类型进行新增、修改、查询操作等等。

图3.3 资讯类型管理页面

3.4资讯信息管理

如图5.4显示的就是资讯信息管理页面,此页面提供给管理员的功能有:根据资讯信息进行新增、修改、查询操作等等。

图3.4 资讯信息管理页面

四,核心代码展示

  1. package com.controller;
  2. import java.io.File;
  3. import java.math.BigDecimal;
  4. import java.net.URL;
  5. import java.text.SimpleDateFormat;
  6. import com.alibaba.fastjson.JSONObject;
  7. import java.util.*;
  8. import org.springframework.beans.BeanUtils;
  9. import javax.servlet.http.HttpServletRequest;
  10. import org.springframework.web.context.ContextLoader;
  11. import javax.servlet.ServletContext;
  12. import com.service.TokenService;
  13. import com.utils.*;
  14. import java.lang.reflect.InvocationTargetException;
  15. import com.service.DictionaryService;
  16. import org.apache.commons.lang3.StringUtils;
  17. import com.annotation.IgnoreAuth;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Controller;
  22. import org.springframework.web.bind.annotation.*;
  23. import com.baomidou.mybatisplus.mapper.EntityWrapper;
  24. import com.baomidou.mybatisplus.mapper.Wrapper;
  25. import com.entity.*;
  26. import com.entity.view.*;
  27. import com.service.*;
  28. import com.utils.PageUtils;
  29. import com.utils.R;
  30. import com.alibaba.fastjson.*;
  31. /**
  32. * 商家
  33. * 后端接口
  34. * @author
  35. * @email
  36. */
  37. @RestController
  38. @Controller
  39. @RequestMapping("/shangjia")
  40. public class ShangjiaController {
  41. private static final Logger logger = LoggerFactory.getLogger(ShangjiaController.class);
  42. private static final String TABLE_NAME = "shangjia";
  43. @Autowired
  44. private ShangjiaService shangjiaService;
  45. @Autowired
  46. private TokenService tokenService;
  47. @Autowired
  48. private DictionaryService dictionaryService;
  49. //级联表非注册的service
  50. //注册表service
  51. @Autowired
  52. private YonghuService yonghuService;
  53. /**
  54. * 后端列表
  55. */
  56. @RequestMapping("/page")
  57. public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
  58. logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  59. String role = String.valueOf(request.getSession().getAttribute("role"));
  60. if(false)
  61. return R.error(511,"永不会进入");
  62. else if("用户".equals(role))
  63. params.put("yonghuId",request.getSession().getAttribute("userId"));
  64. else if("商家".equals(role))
  65. params.put("shangjiaId",request.getSession().getAttribute("userId"));
  66. params.put("shangjiaDeleteStart",1);params.put("shangjiaDeleteEnd",1);
  67. CommonUtil.checkMap(params);
  68. PageUtils page = shangjiaService.queryPage(params);
  69. //字典表数据转换
  70. List<ShangjiaView> list =(List<ShangjiaView>)page.getList();
  71. for(ShangjiaView c:list){
  72. //修改对应字典表字段
  73. dictionaryService.dictionaryConvert(c, request);
  74. }
  75. return R.ok().put("data", page);
  76. }
  77. /**
  78. * 后端详情
  79. */
  80. @RequestMapping("/info/{id}")
  81. public R info(@PathVariable("id") Long id, HttpServletRequest request){
  82. logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  83. ShangjiaEntity shangjia = shangjiaService.selectById(id);
  84. if(shangjia !=null){
  85. //entity转view
  86. ShangjiaView view = new ShangjiaView();
  87. BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
  88. //修改对应字典表字段
  89. dictionaryService.dictionaryConvert(view, request);
  90. return R.ok().put("data", view);
  91. }else {
  92. return R.error(511,"查不到数据");
  93. }
  94. }
  95. /**
  96. * 后端保存
  97. */
  98. @RequestMapping("/save")
  99. public R save(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
  100. logger.debug("save方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
  101. String role = String.valueOf(request.getSession().getAttribute("role"));
  102. if(false)
  103. return R.error(511,"永远不会进入");
  104. Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
  105. .eq("username", shangjia.getUsername())
  106. .or()
  107. .eq("shangjia_phone", shangjia.getShangjiaPhone())
  108. .andNew()
  109. .eq("shangjia_delete", 1)
  110. ;
  111. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  112. ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
  113. if(shangjiaEntity==null){
  114. shangjia.setShangjiaDelete(1);
  115. shangjia.setCreateTime(new Date());
  116. shangjia.setPassword("123456");
  117. shangjiaService.insert(shangjia);
  118. return R.ok();
  119. }else {
  120. return R.error(511,"账户或者联系方式已经被使用");
  121. }
  122. }
  123. /**
  124. * 后端修改
  125. */
  126. @RequestMapping("/update")
  127. public R update(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
  128. logger.debug("update方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
  129. ShangjiaEntity oldShangjiaEntity = shangjiaService.selectById(shangjia.getId());//查询原先数据
  130. String role = String.valueOf(request.getSession().getAttribute("role"));
  131. // if(false)
  132. // return R.error(511,"永远不会进入");
  133. //根据字段查询是否有相同数据
  134. Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
  135. .notIn("id",shangjia.getId())
  136. .andNew()
  137. .eq("username", shangjia.getUsername())
  138. .or()
  139. .eq("shangjia_phone", shangjia.getShangjiaPhone())
  140. .andNew()
  141. .eq("shangjia_delete", 1)
  142. ;
  143. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  144. ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
  145. if("".equals(shangjia.getShangjiaPhoto()) || "null".equals(shangjia.getShangjiaPhoto())){
  146. shangjia.setShangjiaPhoto(null);
  147. }
  148. if(shangjiaEntity==null){
  149. shangjiaService.updateById(shangjia);//根据id更新
  150. return R.ok();
  151. }else {
  152. return R.error(511,"账户或者联系方式已经被使用");
  153. }
  154. }
  155. /**
  156. * 删除
  157. */
  158. @RequestMapping("/delete")
  159. public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
  160. logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
  161. List<ShangjiaEntity> oldShangjiaList =shangjiaService.selectBatchIds(Arrays.asList(ids));//要删除的数据
  162. ArrayList<ShangjiaEntity> list = new ArrayList<>();
  163. for(Integer id:ids){
  164. ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
  165. shangjiaEntity.setId(id);
  166. shangjiaEntity.setShangjiaDelete(2);
  167. list.add(shangjiaEntity);
  168. }
  169. if(list != null && list.size() >0){
  170. shangjiaService.updateBatchById(list);
  171. }
  172. return R.ok();
  173. }
  174. /**
  175. * 批量上传
  176. */
  177. @RequestMapping("/batchInsert")
  178. public R save( String fileName, HttpServletRequest request){
  179. logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
  180. Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
  181. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  182. try {
  183. List<ShangjiaEntity> shangjiaList = new ArrayList<>();//上传的东西
  184. Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
  185. Date date = new Date();
  186. int lastIndexOf = fileName.lastIndexOf(".");
  187. if(lastIndexOf == -1){
  188. return R.error(511,"该文件没有后缀");
  189. }else{
  190. String suffix = fileName.substring(lastIndexOf);
  191. if(!".xls".equals(suffix)){
  192. return R.error(511,"只支持后缀为xls的excel文件");
  193. }else{
  194. URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
  195. File file = new File(resource.getFile());
  196. if(!file.exists()){
  197. return R.error(511,"找不到上传文件,请联系管理员");
  198. }else{
  199. List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
  200. dataList.remove(0);//删除第一行,因为第一行是提示
  201. for(List<String> data:dataList){
  202. //循环
  203. ShangjiaEntity shangjiaEntity = new ShangjiaEntity();
  204. // shangjiaEntity.setUsername(data.get(0)); //账户 要改的
  205. // //shangjiaEntity.setPassword("123456");//密码
  206. // shangjiaEntity.setShangjiaName(data.get(0)); //商家名称 要改的
  207. // shangjiaEntity.setShangjiaPhone(data.get(0)); //联系方式 要改的
  208. // shangjiaEntity.setShangjiaEmail(data.get(0)); //邮箱 要改的
  209. // shangjiaEntity.setShangjiaPhoto("");//详情和图片
  210. // shangjiaEntity.setShangjiaXingjiTypes(Integer.valueOf(data.get(0))); //商家信用类型 要改的
  211. // shangjiaEntity.setNewMoney(data.get(0)); //现有余额 要改的
  212. // shangjiaEntity.setShangjiaContent("");//详情和图片
  213. // shangjiaEntity.setShangjiaDelete(1);//逻辑删除字段
  214. // shangjiaEntity.setCreateTime(date);//时间
  215. shangjiaList.add(shangjiaEntity);
  216. //把要查询是否重复的字段放入map中
  217. //账户
  218. if(seachFields.containsKey("username")){
  219. List<String> username = seachFields.get("username");
  220. username.add(data.get(0));//要改的
  221. }else{
  222. List<String> username = new ArrayList<>();
  223. username.add(data.get(0));//要改的
  224. seachFields.put("username",username);
  225. }
  226. //联系方式
  227. if(seachFields.containsKey("shangjiaPhone")){
  228. List<String> shangjiaPhone = seachFields.get("shangjiaPhone");
  229. shangjiaPhone.add(data.get(0));//要改的
  230. }else{
  231. List<String> shangjiaPhone = new ArrayList<>();
  232. shangjiaPhone.add(data.get(0));//要改的
  233. seachFields.put("shangjiaPhone",shangjiaPhone);
  234. }
  235. }
  236. //查询是否重复
  237. //账户
  238. List<ShangjiaEntity> shangjiaEntities_username = shangjiaService.selectList(new EntityWrapper<ShangjiaEntity>().in("username", seachFields.get("username")).eq("shangjia_delete", 1));
  239. if(shangjiaEntities_username.size() >0 ){
  240. ArrayList<String> repeatFields = new ArrayList<>();
  241. for(ShangjiaEntity s:shangjiaEntities_username){
  242. repeatFields.add(s.getUsername());
  243. }
  244. return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
  245. }
  246. //联系方式
  247. List<ShangjiaEntity> shangjiaEntities_shangjiaPhone = shangjiaService.selectList(new EntityWrapper<ShangjiaEntity>().in("shangjia_phone", seachFields.get("shangjiaPhone")).eq("shangjia_delete", 1));
  248. if(shangjiaEntities_shangjiaPhone.size() >0 ){
  249. ArrayList<String> repeatFields = new ArrayList<>();
  250. for(ShangjiaEntity s:shangjiaEntities_shangjiaPhone){
  251. repeatFields.add(s.getShangjiaPhone());
  252. }
  253. return R.error(511,"数据库的该表中的 [联系方式] 字段已经存在 存在数据为:"+repeatFields.toString());
  254. }
  255. shangjiaService.insertBatch(shangjiaList);
  256. return R.ok();
  257. }
  258. }
  259. }
  260. }catch (Exception e){
  261. e.printStackTrace();
  262. return R.error(511,"批量插入数据异常,请联系管理员");
  263. }
  264. }
  265. /**
  266. * 登录
  267. */
  268. @IgnoreAuth
  269. @RequestMapping(value = "/login")
  270. public R login(String username, String password, String captcha, HttpServletRequest request) {
  271. ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
  272. if(shangjia==null || !shangjia.getPassword().equals(password))
  273. return R.error("账号或密码不正确");
  274. else if(shangjia.getShangjiaDelete() != 1)
  275. return R.error("账户已被删除");
  276. String token = tokenService.generateToken(shangjia.getId(),username, "shangjia", "商家");
  277. R r = R.ok();
  278. r.put("token", token);
  279. r.put("role","商家");
  280. r.put("username",shangjia.getShangjiaName());
  281. r.put("tableName","shangjia");
  282. r.put("userId",shangjia.getId());
  283. return r;
  284. }
  285. /**
  286. * 注册
  287. */
  288. @IgnoreAuth
  289. @PostMapping(value = "/register")
  290. public R register(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request) {
  291. // ValidatorUtils.validateEntity(user);
  292. Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
  293. .eq("username", shangjia.getUsername())
  294. .or()
  295. .eq("shangjia_phone", shangjia.getShangjiaPhone())
  296. .andNew()
  297. .eq("shangjia_delete", 1)
  298. ;
  299. ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
  300. if(shangjiaEntity != null)
  301. return R.error("账户或者联系方式已经被使用");
  302. shangjia.setShangjiaXingjiTypes(1);
  303. shangjia.setNewMoney(0.0);
  304. shangjia.setShangjiaDelete(1);
  305. shangjia.setCreateTime(new Date());
  306. shangjiaService.insert(shangjia);
  307. return R.ok();
  308. }
  309. /**
  310. * 重置密码
  311. */
  312. @GetMapping(value = "/resetPassword")
  313. public R resetPassword(Integer id, HttpServletRequest request) {
  314. ShangjiaEntity shangjia = shangjiaService.selectById(id);
  315. shangjia.setPassword("123456");
  316. shangjiaService.updateById(shangjia);
  317. return R.ok();
  318. }
  319. /**
  320. * 忘记密码
  321. */
  322. @IgnoreAuth
  323. @RequestMapping(value = "/resetPass")
  324. public R resetPass(String username, HttpServletRequest request) {
  325. ShangjiaEntity shangjia = shangjiaService.selectOne(new EntityWrapper<ShangjiaEntity>().eq("username", username));
  326. if(shangjia!=null){
  327. shangjia.setPassword("123456");
  328. boolean b = shangjiaService.updateById(shangjia);
  329. if(!b){
  330. return R.error();
  331. }
  332. return R.ok();
  333. }else{
  334. return R.error("账号不存在");
  335. }
  336. }
  337. /**
  338. * 获取用户的session用户信息
  339. */
  340. @RequestMapping("/session")
  341. public R getCurrShangjia(HttpServletRequest request){
  342. Integer id = (Integer)request.getSession().getAttribute("userId");
  343. ShangjiaEntity shangjia = shangjiaService.selectById(id);
  344. if(shangjia !=null){
  345. //entity转view
  346. ShangjiaView view = new ShangjiaView();
  347. BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
  348. //修改对应字典表字段
  349. dictionaryService.dictionaryConvert(view, request);
  350. return R.ok().put("data", view);
  351. }else {
  352. return R.error(511,"查不到数据");
  353. }
  354. }
  355. /**
  356. * 退出
  357. */
  358. @GetMapping(value = "logout")
  359. public R logout(HttpServletRequest request) {
  360. request.getSession().invalidate();
  361. return R.ok("退出成功");
  362. }
  363. /**
  364. * 前端列表
  365. */
  366. @IgnoreAuth
  367. @RequestMapping("/list")
  368. public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
  369. logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  370. CommonUtil.checkMap(params);
  371. PageUtils page = shangjiaService.queryPage(params);
  372. //字典表数据转换
  373. List<ShangjiaView> list =(List<ShangjiaView>)page.getList();
  374. for(ShangjiaView c:list)
  375. dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
  376. return R.ok().put("data", page);
  377. }
  378. /**
  379. * 前端详情
  380. */
  381. @RequestMapping("/detail/{id}")
  382. public R detail(@PathVariable("id") Long id, HttpServletRequest request){
  383. logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  384. ShangjiaEntity shangjia = shangjiaService.selectById(id);
  385. if(shangjia !=null){
  386. //entity转view
  387. ShangjiaView view = new ShangjiaView();
  388. BeanUtils.copyProperties( shangjia , view );//把实体数据重构到view中
  389. //修改对应字典表字段
  390. dictionaryService.dictionaryConvert(view, request);
  391. return R.ok().put("data", view);
  392. }else {
  393. return R.error(511,"查不到数据");
  394. }
  395. }
  396. /**
  397. * 前端保存
  398. */
  399. @RequestMapping("/add")
  400. public R add(@RequestBody ShangjiaEntity shangjia, HttpServletRequest request){
  401. logger.debug("add方法:,,Controller:{},,shangjia:{}",this.getClass().getName(),shangjia.toString());
  402. Wrapper<ShangjiaEntity> queryWrapper = new EntityWrapper<ShangjiaEntity>()
  403. .eq("username", shangjia.getUsername())
  404. .or()
  405. .eq("shangjia_phone", shangjia.getShangjiaPhone())
  406. .andNew()
  407. .eq("shangjia_delete", 1)
  408. ;
  409. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  410. ShangjiaEntity shangjiaEntity = shangjiaService.selectOne(queryWrapper);
  411. if(shangjiaEntity==null){
  412. shangjia.setShangjiaDelete(1);
  413. shangjia.setCreateTime(new Date());
  414. shangjia.setPassword("123456");
  415. shangjiaService.insert(shangjia);
  416. return R.ok();
  417. }else {
  418. return R.error(511,"账户或者联系方式已经被使用");
  419. }
  420. }
  421. }

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/436390
推荐阅读
相关标签
  

闽ICP备14008679号