当前位置:   article > 正文

SpringBoot+Vue+Element-UI实现家具商城系统_基于spring boot+mysql的家具销售电商平台系统设计与实现

基于spring boot+mysql的家具销售电商平台系统设计与实现

文末获取源码

开发语言:Java

框架:springboot

JDK版本:JDK1.8

服务器:tomcat7

数据库:mysql 5.7/8.0

数据库工具:Navicat11

开发软件:eclipse/myeclipse/idea

Maven包:Maven3.3.9

浏览器:谷歌浏览器

前言介绍 

社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的交易方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。

本文从管理员、用户的功能要求出发,家具商城系统中的功能模块主要是实现管理员;首页、个人中心、用户管理、家具类型管理、家具信息管理、系统管理、订单管理,用户:首页、个人中心。前台首页:首页、家具信息、公告信息、个人中心、后台管理、购物车。

经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与家具商城系统实现的实际需求相结合,讨论了Java开发家具商城系统的使用。

系统功能设计

软件的用户界面是最直接接触的对象,包括是否允许用户使用简单方便,请求的响应时间,主图像的整体质量,整体布局的质量。

家具销售电商平台的设计基于现有的网络平台,可以实现用户管理及数据信息管理,方便管理员对后台进行管理有详细的了解及统计分析,随时查看信息状态。 

系统功能设计是在系统开发和设计思想的总体任务的基础上完成的。该系统的主要任务是实现家具销售电商平台管理,使用户可以通过指令完成整个家具销售电商平台的操作。

从上面的描述中可以基本可以实现软件的功能:

1、开发实现家具销售电商平台的整个系统程序; 

2、管理员;首页、个人中心、用户管理、家具类型管理、家具信息管理、系统管理、订单管理等。

3、用户:首页、个人中心。

4、前台首页:首页、家具信息、公告信息、个人中心、后台管理、购物车等相应操作;

5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。

系统展示 

首页

家具信息

个人中心

购物车

管理员页面 

用户管理

家具类型管理

家具信息管理

系统管理

部分核心代码

家具信息

  1. @RestController
  2. @RequestMapping("/jiajuxinxi")
  3. public class JiajuxinxiController {
  4. @Autowired
  5. private JiajuxinxiService jiajuxinxiService;
  6. @Autowired
  7. private StoreupService storeupService;
  8. @Autowired
  9. private OrdersService ordersService;
  10. /**
  11. * 后端列表
  12. */
  13. @RequestMapping("/page")
  14. public R page(@RequestParam Map<String, Object> params,JiajuxinxiEntity jiajuxinxi,
  15. HttpServletRequest request){
  16. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  17. PageUtils page = jiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiajuxinxi), params), params));
  18. return R.ok().put("data", page);
  19. }
  20. /**
  21. * 前端列表
  22. */
  23. @IgnoreAuth
  24. @RequestMapping("/list")
  25. public R list(@RequestParam Map<String, Object> params,JiajuxinxiEntity jiajuxinxi,
  26. HttpServletRequest request){
  27. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  28. PageUtils page = jiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiajuxinxi), params), params));
  29. return R.ok().put("data", page);
  30. }
  31. /**
  32. * 列表
  33. */
  34. @RequestMapping("/lists")
  35. public R list( JiajuxinxiEntity jiajuxinxi){
  36. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  37. ew.allEq(MPUtil.allEQMapPre( jiajuxinxi, "jiajuxinxi"));
  38. return R.ok().put("data", jiajuxinxiService.selectListView(ew));
  39. }
  40. /**
  41. * 查询
  42. */
  43. @RequestMapping("/query")
  44. public R query(JiajuxinxiEntity jiajuxinxi){
  45. EntityWrapper< JiajuxinxiEntity> ew = new EntityWrapper< JiajuxinxiEntity>();
  46. ew.allEq(MPUtil.allEQMapPre( jiajuxinxi, "jiajuxinxi"));
  47. JiajuxinxiView jiajuxinxiView = jiajuxinxiService.selectView(ew);
  48. return R.ok("查询家具信息成功").put("data", jiajuxinxiView);
  49. }
  50. /**
  51. * 后端详情
  52. */
  53. @RequestMapping("/info/{id}")
  54. public R info(@PathVariable("id") Long id){
  55. JiajuxinxiEntity jiajuxinxi = jiajuxinxiService.selectById(id);
  56. jiajuxinxi.setClicknum(jiajuxinxi.getClicknum()+1);
  57. jiajuxinxi.setClicktime(new Date());
  58. jiajuxinxiService.updateById(jiajuxinxi);
  59. return R.ok().put("data", jiajuxinxi);
  60. }
  61. /**
  62. * 前端详情
  63. */
  64. @IgnoreAuth
  65. @RequestMapping("/detail/{id}")
  66. public R detail(@PathVariable("id") Long id){
  67. JiajuxinxiEntity jiajuxinxi = jiajuxinxiService.selectById(id);
  68. jiajuxinxi.setClicknum(jiajuxinxi.getClicknum()+1);
  69. jiajuxinxi.setClicktime(new Date());
  70. jiajuxinxiService.updateById(jiajuxinxi);
  71. return R.ok().put("data", jiajuxinxi);
  72. }
  73. /**
  74. * 后端保存
  75. */
  76. @RequestMapping("/save")
  77. public R save(@RequestBody JiajuxinxiEntity jiajuxinxi, HttpServletRequest request){
  78. jiajuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
  79. //ValidatorUtils.validateEntity(jiajuxinxi);
  80. jiajuxinxiService.insert(jiajuxinxi);
  81. return R.ok();
  82. }
  83. /**
  84. * 前端保存
  85. */
  86. @RequestMapping("/add")
  87. public R add(@RequestBody JiajuxinxiEntity jiajuxinxi, HttpServletRequest request){
  88. jiajuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
  89. //ValidatorUtils.validateEntity(jiajuxinxi);
  90. jiajuxinxiService.insert(jiajuxinxi);
  91. return R.ok();
  92. }
  93. /**
  94. * 修改
  95. */
  96. @RequestMapping("/update")
  97. public R update(@RequestBody JiajuxinxiEntity jiajuxinxi, HttpServletRequest request){
  98. //ValidatorUtils.validateEntity(jiajuxinxi);
  99. jiajuxinxiService.updateById(jiajuxinxi);//全部更新
  100. return R.ok();
  101. }
  102. /**
  103. * 删除
  104. */
  105. @RequestMapping("/delete")
  106. public R delete(@RequestBody Long[] ids){
  107. jiajuxinxiService.deleteBatchIds(Arrays.asList(ids));
  108. return R.ok();
  109. }
  110. /**
  111. * 提醒接口
  112. */
  113. @RequestMapping("/remind/{columnName}/{type}")
  114. public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
  115. @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
  116. map.put("column", columnName);
  117. map.put("type", type);
  118. if(type.equals("2")) {
  119. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  120. Calendar c = Calendar.getInstance();
  121. Date remindStartDate = null;
  122. Date remindEndDate = null;
  123. if(map.get("remindstart")!=null) {
  124. Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
  125. c.setTime(new Date());
  126. c.add(Calendar.DAY_OF_MONTH,remindStart);
  127. remindStartDate = c.getTime();
  128. map.put("remindstart", sdf.format(remindStartDate));
  129. }
  130. if(map.get("remindend")!=null) {
  131. Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
  132. c.setTime(new Date());
  133. c.add(Calendar.DAY_OF_MONTH,remindEnd);
  134. remindEndDate = c.getTime();
  135. map.put("remindend", sdf.format(remindEndDate));
  136. }
  137. }
  138. Wrapper<JiajuxinxiEntity> wrapper = new EntityWrapper<JiajuxinxiEntity>();
  139. if(map.get("remindstart")!=null) {
  140. wrapper.ge(columnName, map.get("remindstart"));
  141. }
  142. if(map.get("remindend")!=null) {
  143. wrapper.le(columnName, map.get("remindend"));
  144. }
  145. int count = jiajuxinxiService.selectCount(wrapper);
  146. return R.ok().put("count", count);
  147. }
  148. /**
  149. * 前端智能排序
  150. */
  151. @IgnoreAuth
  152. @RequestMapping("/autoSort")
  153. public R autoSort(@RequestParam Map<String, Object> params,JiajuxinxiEntity jiajuxinxi, HttpServletRequest request,String pre){
  154. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  155. Map<String, Object> newMap = new HashMap<String, Object>();
  156. Map<String, Object> param = new HashMap<String, Object>();
  157. Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
  158. while (it.hasNext()) {
  159. Map.Entry<String, Object> entry = it.next();
  160. String key = entry.getKey();
  161. String newKey = entry.getKey();
  162. if (pre.endsWith(".")) {
  163. newMap.put(pre + newKey, entry.getValue());
  164. } else if (StringUtils.isEmpty(pre)) {
  165. newMap.put(newKey, entry.getValue());
  166. } else {
  167. newMap.put(pre + "." + newKey, entry.getValue());
  168. }
  169. }
  170. params.put("sort", "clicknum");
  171. params.put("order", "desc");
  172. PageUtils page = jiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiajuxinxi), params), params));
  173. return R.ok().put("data", page);
  174. }
  175. /**
  176. * 协同算法(按用户购买推荐)
  177. */
  178. @RequestMapping("/autoSort2")
  179. public R autoSort2(@RequestParam Map<String, Object> params,JiajuxinxiEntity jiajuxinxi, HttpServletRequest request){
  180. String userId = request.getSession().getAttribute("userId").toString();
  181. String goodtypeColumn = "jiajuleixing";
  182. List<OrdersEntity> orders = ordersService.selectList(new EntityWrapper<OrdersEntity>().eq("userid", userId).eq("tablename", "jiajuxinxi").orderBy("addtime", false));
  183. List<String> goodtypes = new ArrayList<String>();
  184. Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
  185. List<JiajuxinxiEntity> jiajuxinxiList = new ArrayList<JiajuxinxiEntity>();
  186. //去重
  187. List<OrdersEntity> ordersDist = new ArrayList<OrdersEntity>();
  188. for(OrdersEntity o1 : orders) {
  189. boolean addFlag = true;
  190. for(OrdersEntity o2 : ordersDist) {
  191. if(o1.getGoodid()==o2.getGoodid() || o1.getGoodtype().equals(o2.getGoodtype())) {
  192. addFlag = false;
  193. break;
  194. }
  195. }
  196. if(addFlag) ordersDist.add(o1);
  197. }
  198. if(ordersDist!=null && ordersDist.size()>0) {
  199. for(OrdersEntity o : ordersDist) {
  200. jiajuxinxiList.addAll(jiajuxinxiService.selectList(new EntityWrapper<JiajuxinxiEntity>().eq(goodtypeColumn, o.getGoodtype())));
  201. }
  202. }
  203. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  204. params.put("sort", "id");
  205. params.put("order", "desc");
  206. PageUtils page = jiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiajuxinxi), params), params));
  207. List<JiajuxinxiEntity> pageList = (List<JiajuxinxiEntity>)page.getList();
  208. if(jiajuxinxiList.size()<limit) {
  209. int toAddNum = (limit-jiajuxinxiList.size())<=pageList.size()?(limit-jiajuxinxiList.size()):pageList.size();
  210. for(JiajuxinxiEntity o1 : pageList) {
  211. boolean addFlag = true;
  212. for(JiajuxinxiEntity o2 : jiajuxinxiList) {
  213. if(o1.getId().intValue()==o2.getId().intValue()) {
  214. addFlag = false;
  215. break;
  216. }
  217. }
  218. if(addFlag) {
  219. jiajuxinxiList.add(o1);
  220. if(--toAddNum==0) break;
  221. }
  222. }
  223. }
  224. page.setList(jiajuxinxiList);
  225. return R.ok().put("data", page);
  226. }
  227. }

协同算法(按用户购买推荐)

  1. @RequestMapping("/autoSort2")
  2. public R autoSort2(@RequestParam Map<String, Object> params,JiajuxinxiEntity jiajuxinxi, HttpServletRequest request){
  3. String userId = request.getSession().getAttribute("userId").toString();
  4. String goodtypeColumn = "jiajuleixing";
  5. List<OrdersEntity> orders = ordersService.selectList(new EntityWrapper<OrdersEntity>().eq("userid", userId).eq("tablename", "jiajuxinxi").orderBy("addtime", false));
  6. List<String> goodtypes = new ArrayList<String>();
  7. Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
  8. List<JiajuxinxiEntity> jiajuxinxiList = new ArrayList<JiajuxinxiEntity>();
  9. //去重
  10. List<OrdersEntity> ordersDist = new ArrayList<OrdersEntity>();
  11. for(OrdersEntity o1 : orders) {
  12. boolean addFlag = true;
  13. for(OrdersEntity o2 : ordersDist) {
  14. if(o1.getGoodid()==o2.getGoodid() || o1.getGoodtype().equals(o2.getGoodtype())) {
  15. addFlag = false;
  16. break;
  17. }
  18. }
  19. if(addFlag) ordersDist.add(o1);
  20. }
  21. if(ordersDist!=null && ordersDist.size()>0) {
  22. for(OrdersEntity o : ordersDist) {
  23. jiajuxinxiList.addAll(jiajuxinxiService.selectList(new EntityWrapper<JiajuxinxiEntity>().eq(goodtypeColumn, o.getGoodtype())));
  24. }
  25. }
  26. EntityWrapper<JiajuxinxiEntity> ew = new EntityWrapper<JiajuxinxiEntity>();
  27. params.put("sort", "id");
  28. params.put("order", "desc");
  29. PageUtils page = jiajuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiajuxinxi), params), params));
  30. List<JiajuxinxiEntity> pageList = (List<JiajuxinxiEntity>)page.getList();
  31. if(jiajuxinxiList.size()<limit) {
  32. int toAddNum = (limit-jiajuxinxiList.size())<=pageList.size()?(limit-jiajuxinxiList.size()):pageList.size();
  33. for(JiajuxinxiEntity o1 : pageList) {
  34. boolean addFlag = true;
  35. for(JiajuxinxiEntity o2 : jiajuxinxiList) {
  36. if(o1.getId().intValue()==o2.getId().intValue()) {
  37. addFlag = false;
  38. break;
  39. }
  40. }
  41. if(addFlag) {
  42. jiajuxinxiList.add(o1);
  43. if(--toAddNum==0) break;
  44. }
  45. }
  46. }
  47. page.setList(jiajuxinxiList);
  48. return R.ok().put("data", page);
  49. }
  50. }

上传文件

  1. @RestController
  2. @RequestMapping("file")
  3. @SuppressWarnings({"unchecked","rawtypes"})
  4. public class FileController{
  5. @Autowired
  6. private ConfigService configService;
  7. /**
  8. * 上传文件
  9. */
  10. @RequestMapping("/upload")
  11. public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
  12. if (file.isEmpty()) {
  13. throw new EIException("上传文件不能为空");
  14. }
  15. String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
  16. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
  17. if(!path.exists()) {
  18. path = new File("");
  19. }
  20. File upload = new File(path.getAbsolutePath(),"/upload/");
  21. if(!upload.exists()) {
  22. upload.mkdirs();
  23. }
  24. String fileName = new Date().getTime()+"."+fileExt;
  25. File dest = new File(upload.getAbsolutePath()+"/"+fileName);
  26. file.transferTo(dest);
  27. /**
  28. * 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
  29. * 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
  30. * 并且项目路径不能存在中文、空格等特殊字符
  31. */
  32. // FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
  33. if(StringUtils.isNotBlank(type) && type.equals("1")) {
  34. ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
  35. if(configEntity==null) {
  36. configEntity = new ConfigEntity();
  37. configEntity.setName("faceFile");
  38. configEntity.setValue(fileName);
  39. } else {
  40. configEntity.setValue(fileName);
  41. }
  42. configService.insertOrUpdate(configEntity);
  43. }
  44. return R.ok().put("file", fileName);
  45. }
  46. /**
  47. * 下载文件
  48. */
  49. @IgnoreAuth
  50. @RequestMapping("/download")
  51. public ResponseEntity<byte[]> download(@RequestParam String fileName) {
  52. try {
  53. File path = new File(ResourceUtils.getURL("classpath:static").getPath());
  54. if(!path.exists()) {
  55. path = new File("");
  56. }
  57. File upload = new File(path.getAbsolutePath(),"/upload/");
  58. if(!upload.exists()) {
  59. upload.mkdirs();
  60. }
  61. File file = new File(upload.getAbsolutePath()+"/"+fileName);
  62. if(file.exists()){
  63. /*if(!fileService.canRead(file, SessionManager.getSessionUser())){
  64. getResponse().sendError(403);
  65. }*/
  66. HttpHeaders headers = new HttpHeaders();
  67. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
  68. headers.setContentDispositionFormData("attachment", fileName);
  69. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
  70. }
  71. } catch (IOException e) {
  72. e.printStackTrace();
  73. }
  74. return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
  75. }
  76. }

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

闽ICP备14008679号