基于SpringBoot的美食分享平臺-038

一、項目技術棧

Java開發工具:JDK1.8
后端框架:SpringBoot
前端:采用HTML和Vue相結合開發
數據庫:MySQL5.7和Navicat管理工具結合
服務器:Tomcat8.5
開發軟件:IDEA / Eclipse
是否Maven項目:是

二、功能介紹

三、項目視頻

基于SpringBoot的美食分享平臺-038

四、功能截圖
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

五、代碼實現
賬戶信息

package com.example.controller;import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.Account;
import com.example.entity.AuthorityInfo;
import com.example.exception.CustomException;
import com.example.entity.AdminInfo;
import com.example.entity.UserInfo;import com.example.service.AdminInfoService;
import com.example.service.UserInfoService;import org.springframework.web.bind.annotation.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import cn.hutool.json.JSONUtil;import java.util.*;
import java.util.stream.Collectors;@RestController
public class AccountController {@Value("${authority.info}")private String authorityStr;@Resourceprivate AdminInfoService adminInfoService;@Resourceprivate UserInfoService userInfoService;@PostMapping("/login")public Result<Account> login(@RequestBody Account account, HttpServletRequest request) {if (StrUtil.isBlank(account.getName()) || StrUtil.isBlank(account.getPassword()) || account.getLevel() == null) {throw new CustomException(ResultCode.PARAM_LOST_ERROR);}Integer level = account.getLevel();Account login = new Account();if (1 == level) {login = adminInfoService.login(account.getName(), account.getPassword());}if (2 == level) {login = userInfoService.login(account.getName(), account.getPassword());}request.getSession().setAttribute("user", login);return Result.success(login);}@PostMapping("/register")public Result<Account> register(@RequestBody Account account) {Integer level = account.getLevel();Account login = new Account();if (1 == level) {AdminInfo info = new AdminInfo();BeanUtils.copyProperties(account, info);login = adminInfoService.add(info);}if (2 == level) {UserInfo info = new UserInfo();BeanUtils.copyProperties(account, info);login = userInfoService.add(info);}return Result.success(login);}@GetMapping("/logout")public Result logout(HttpServletRequest request) {request.getSession().setAttribute("user", null);return Result.success();}@GetMapping("/auth")public Result getAuth(HttpServletRequest request) {Object user = request.getSession().getAttribute("user");if(user == null) {return Result.error("401", "未登錄");}return Result.success(user);}@GetMapping("/getAccountInfo")public Result<Object> getAccountInfo(HttpServletRequest request) {Account account = (Account) request.getSession().getAttribute("user");if (account == null) {return Result.success(new Object());}Integer level = account.getLevel();if (1 == level) {return Result.success(adminInfoService.findById(account.getId()));}if (2 == level) {return Result.success(userInfoService.findById(account.getId()));}return Result.success(new Object());}@GetMapping("/getSession")public Result<Map<String, String>> getSession(HttpServletRequest request) {Account account = (Account) request.getSession().getAttribute("user");if (account == null) {return Result.success(new HashMap<>(1));}Map<String, String> map = new HashMap<>(1);map.put("username", account.getName());return Result.success(map);}@GetMapping("/getAuthority")public Result<List<AuthorityInfo>> getAuthorityInfo() {List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);return Result.success(authorityInfoList);}/*** 獲取當前用戶所能看到的模塊信息* @param request* @return*/@GetMapping("/authority")public Result<List<Integer>> getAuthorityInfo(HttpServletRequest request) {Account user = (Account) request.getSession().getAttribute("user");if (user == null) {return Result.success(new ArrayList<>());}JSONArray objects = JSONUtil.parseArray(authorityStr);for (Object object : objects) {JSONObject jsonObject = (JSONObject) object;if (user.getLevel().equals(jsonObject.getInt("level"))) {JSONArray array = JSONUtil.parseArray(jsonObject.getStr("models"));List<Integer> modelIdList = array.stream().map((o -> {JSONObject obj = (JSONObject) o;return obj.getInt("modelId");})).collect(Collectors.toList());return Result.success(modelIdList);}}return Result.success(new ArrayList<>());}@GetMapping("/permission/{modelId}")public Result<List<Integer>> getPermission(@PathVariable Integer modelId, HttpServletRequest request) {List<AuthorityInfo> authorityInfoList = JSONUtil.toList(JSONUtil.parseArray(authorityStr), AuthorityInfo.class);Account user = (Account) request.getSession().getAttribute("user");if (user == null) {return Result.success(new ArrayList<>());}Optional<AuthorityInfo> optional = authorityInfoList.stream().filter(x -> x.getLevel().equals(user.getLevel())).findFirst();if (optional.isPresent()) {Optional<AuthorityInfo.Model> firstOption = optional.get().getModels().stream().filter(x -> x.getModelId().equals(modelId)).findFirst();if (firstOption.isPresent()) {List<Integer> info = firstOption.get().getOperation();return Result.success(info);}}return Result.success(new ArrayList<>());}@PutMapping("/updatePassword")public Result updatePassword(@RequestBody Account info, HttpServletRequest request) {Account account = (Account) request.getSession().getAttribute("user");if (account == null) {return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);}String oldPassword = SecureUtil.md5(info.getPassword());if (!oldPassword.equals(account.getPassword())) {return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);}info.setPassword(SecureUtil.md5(info.getNewPassword()));Integer level = account.getLevel();if (1 == level) {AdminInfo adminInfo = new AdminInfo();BeanUtils.copyProperties(info, adminInfo);adminInfoService.update(adminInfo);}if (2 == level) {UserInfo userInfo = new UserInfo();BeanUtils.copyProperties(info, userInfo);userInfoService.update(userInfo);}info.setLevel(level);info.setName(account.getName());// 清空session,讓用戶重新登錄request.getSession().setAttribute("user", null);return Result.success();}@PostMapping("/resetPassword")public Result resetPassword(@RequestBody Account account) {Integer level = account.getLevel();if (1 == level) {AdminInfo info = adminInfoService.findByUserName(account.getName());if (info == null) {return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);}info.setPassword(SecureUtil.md5("123456"));adminInfoService.update(info);}if (2 == level) {UserInfo info = userInfoService.findByUserName(account.getName());if (info == null) {return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);}info.setPassword(SecureUtil.md5("123456"));userInfoService.update(info);}return Result.success();}
}

留言信息

package com.example.controller;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.MessageInfo;
import com.example.service.*;
import com.example.vo.MessageInfoVo;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@RestController
@RequestMapping(value = "/messageInfo")
public class MessageInfoController {@Resourceprivate MessageInfoService messageInfoService;@PostMappingpublic Result<MessageInfo> add(@RequestBody MessageInfoVo messageInfo) {messageInfoService.add(messageInfo);return Result.success(messageInfo);}@DeleteMapping("/{id}")public Result delete(@PathVariable Long id) {messageInfoService.delete(id);return Result.success();}@PutMappingpublic Result update(@RequestBody MessageInfoVo messageInfo) {messageInfoService.update(messageInfo);return Result.success();}@GetMapping("/{id}")public Result<MessageInfo> detail(@PathVariable Long id) {MessageInfo messageInfo = messageInfoService.findById(id);return Result.success(messageInfo);}@GetMappingpublic Result<List<MessageInfoVo>> all() {return Result.success(messageInfoService.findAll());}@GetMapping("/page/{name}")public Result<PageInfo<MessageInfoVo>> page(@PathVariable String name,@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize,HttpServletRequest request) {return Result.success(messageInfoService.findPage(name, pageNum, pageSize, request));}/*** 批量通過excel添加信息* @param file excel文件* @throws IOException*/@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException {List<MessageInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(MessageInfo.class);if (!CollectionUtil.isEmpty(infoList)) {// 處理一下空數據List<MessageInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getName())).collect(Collectors.toList());for (MessageInfo info : resultList) {messageInfoService.add(info);}}return Result.success();}@GetMapping("/getExcelModel")public void getExcelModel(HttpServletResponse response) throws IOException {// 1. 生成excelMap<String, Object> row = new LinkedHashMap<>();row.put("name", "小李");row.put("content", "來了");row.put("time", "TIME");List<Map<String, Object>> list = CollUtil.newArrayList(row);// 2. 寫excelExcelWriter writer = ExcelUtil.getWriter(true);writer.write(list, true);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition","attachment;filename=messageInfoModel.xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);writer.close();IoUtil.close(System.out);}
}

公告信息

package com.example.controller;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.NewsInfo;
import com.example.service.*;
import com.example.vo.NewsInfoVo;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;@RestController
@RequestMapping(value = "/newsInfo")
public class NewsInfoController {@Resourceprivate NewsInfoService newsInfoService;@PostMappingpublic Result<NewsInfo> add(@RequestBody NewsInfoVo newsInfo) {newsInfoService.add(newsInfo);return Result.success(newsInfo);}@DeleteMapping("/{id}")public Result delete(@PathVariable Long id) {newsInfoService.delete(id);return Result.success();}@PutMappingpublic Result update(@RequestBody NewsInfoVo newsInfo) {newsInfoService.update(newsInfo);return Result.success();}@GetMapping("/{id}")public Result<NewsInfo> detail(@PathVariable Long id) {NewsInfo newsInfo = newsInfoService.findById(id);return Result.success(newsInfo);}@GetMappingpublic Result<List<NewsInfoVo>> all() {return Result.success(newsInfoService.findAll());}@GetMapping("/page/{name}")public Result<PageInfo<NewsInfoVo>> page(@PathVariable String name,@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize,HttpServletRequest request) {return Result.success(newsInfoService.findPage(name, pageNum, pageSize, request));}/*** 批量通過excel添加信息* @param file excel文件* @throws IOException*/@PostMapping("/upload")public Result upload(MultipartFile file) throws IOException {List<NewsInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(NewsInfo.class);if (!CollectionUtil.isEmpty(infoList)) {// 處理一下空數據List<NewsInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getName())).collect(Collectors.toList());for (NewsInfo info : resultList) {newsInfoService.add(info);}}return Result.success();}@GetMapping("/getExcelModel")public void getExcelModel(HttpServletResponse response) throws IOException {// 1. 生成excelMap<String, Object> row = new LinkedHashMap<>();row.put("name", "");row.put("content", "");List<Map<String, Object>> list = CollUtil.newArrayList(row);// 2. 寫excelExcelWriter writer = ExcelUtil.getWriter(true);writer.write(list, true);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");response.setHeader("Content-Disposition","attachment;filename=newsInfoModel.xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);writer.close();IoUtil.close(System.out);}
}

HadesTYT 上萬套源碼,每日分享源碼,謝謝你的關注和喜歡,需要可以聯系主頁信息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85166.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C++第三方包安裝】Windows與Linux安裝配置redis-plus-plus指南

前言 下面主要是對于兩種環境安裝、配置、使用C的第三方包&#xff08;redis&#xff09;&#xff0c;對于其他的第三方庫&#xff0c;也可以使用類似的方法進行類比安裝。 且大多數的第三方庫都可以利用工具一鍵安裝或手動編譯安裝。 Windows 要在Windows系統上快速安裝和使…

springboot入門之路(二)

系列文章目錄 springboot入門之路&#xff08;一&#xff09;連續的學習漸進之路。閱讀點擊&#xff1a;springboot入門之路(一) 文章目錄 系列文章目錄3.springboot配置及注意事項3.1繼承starter parent3.2使用沒有父POM的Spring Boot3.3配置java的編譯的版本3.4使用"de…

【開源解析】基于Python+Qt打造智能應用時長統計工具 - 你的數字生活分析師

&#x1f4ca; 【開源解析】基于PythonQt打造智能應用時長統計工具 - 你的數字生活分析師 &#x1f308; 個人主頁&#xff1a;創客白澤 - CSDN博客 &#x1f525; 系列專欄&#xff1a;&#x1f40d;《Python開源項目實戰》 &#x1f4a1; 熱愛不止于代碼&#xff0c;熱情源自…

PHP語法基礎篇(三):類型轉換與常量

"在完成PHP輸出函數和字符串操作的學習后&#xff0c;本篇筆記將記錄 類型轉換和 常量應用的學習過程。作為語法基礎篇的第三部分&#xff0c;將重點關注&#xff1a; 類型轉換數學函數常量定義&#xff1a;define() 與const 的使用差異魔術常量應用&#xff1a;__LINE__ …

Linux lsof 命令詳解+實例

&#x1f468;?&#x1f393;博主簡介 &#x1f3c5;CSDN博客專家 ??&#x1f3c5;云計算領域優質創作者 ??&#x1f3c5;華為云開發者社區專家博主 ??&#x1f3c5;阿里云開發者社區專家博主 &#x1f48a;交流社區&#xff1a;運維交流社區 歡迎大家的加入&#xff01…

【Cobalt Strike手冊】客戶端界面功能

工具欄 頂部的工具欄提供了快速訪問的功能&#xff0c;這些圖片的功能從左到右功能以此如下表 創建新的連接斷開當前的TeamServerListeners監聽器列表以圖形化展示表格形式展示表格展示目標管理Web服務查看獲取到的認證信息查看下載的文件查看鍵盤記錄查看截屏記錄 圖形化會話…

FastAPI本地文檔的定制技巧

磨刀不誤砍柴工&#xff0c;一份清晰的API文檔能讓前后端協作效率翻倍——源滾滾如是說 在前后端分離開發的今天&#xff0c;接口文檔的質量直接決定了團隊協作的效率。作為Python領域最受矚目的現代Web框架&#xff0c;FastAPI最大的亮點之一是其自動化交互式文檔功能。但很多…

Python 標準庫概覽

Python 標準庫非常龐大,所提供的組件涉及范圍十分廣泛,使用標準庫我們可以讓您輕松地完成各種任務。 以下是一些 Python3 標準庫中的模塊: os 模塊:os 模塊提供了許多與操作系統交互的函數,例如創建、移動和刪除文件和目錄,以及訪問環境變量等。 sys 模塊:sys 模塊提供…

AI大模型:(二)4.1 文生圖(Text-to-Image)模型發展史

目錄 1.介紹 2.發展歷史 2.1.早期探索階段(1980-2014 年) 2.1.1.卷積神經網絡(CNN) 2.1.2.生成對抗網絡(GAN)的提出 2.2.GAN主導時代(2015-2018 年) 2.2.1.高分辨率GAN的突破 2.2.2.文本-圖像對齊的改進 2.3. Diffusion革命(2021–2022) 2.3.1.擴散模型(D…

vue3實現輪播渲染多張圖每張進行放大縮小拖拽功能互不影響

vue3實現輪播渲染多張圖每張進行放大縮小拖拽功能互不影響 1.以vue3中el-carousel輪播插件為例 <div class"pic_view"><el-carousel height"100vh" :autoplay"false" ref"carouselRef" change"handleCarouselChange&qu…

traceroute 使用說明

1、概述 Traceroute&#xff08;Windows 系統中為 tracert&#xff09;是一種網絡診斷工具&#xff0c;用于跟蹤數據包從本地設備到目標主機的傳輸路徑&#xff0c;并顯示沿途經過的每一跳&#xff08;路由器&#xff09;的延遲和 IP 地址。它通過發送不同 TTL&#xff08;生存…

用idea操作git緩存區回退、本地庫回退、遠程庫回退

前言 使用idea軟件操作git非常人性化和方便。 但是如果我的代碼使用git提交之后,我想回到以前的版本,此時需要進行git的版本回退。 提交代碼分為提交到緩存區、本地庫、遠程庫這3個過程。 下面我將介紹每個階段的提交對應的回退方法。 本篇文章是掌握git和使用idea操作git…

webpack+vite前端構建工具 - 3webpack處理js

3 webpack處理js webpack的核心——處理js文件&#xff0c;將模塊化的代碼打包。具體操作如下 es6轉化&#xff08;為兼容老瀏覽器&#xff0c;將es6轉化為es5&#xff09; babel-loader 代碼規范&#xff08;例如空格&#xff0c;縮進等代碼風格規范&#xff09; eslint 代碼…

Nginx轉發中相對路徑資源302問題的分析與解決

Nginx轉發中相對路徑資源302問題的分析與解決 典型案例&#xff1a;后端頁面引入./test.css的302問題 問題場景 假設我們有一個后端服務&#xff0c;其頁面中通過相對路徑引入了CSS文件&#xff1a; <!-- 后端頁面代碼 --> <link rel"stylesheet" href&…

Vue3 + TypeScript合并兩個列表到目標列表,并且進行排序,數組合并、集合合并、列表合并、list合并

在Vue 3 TypeScript中合并并排序兩個列表&#xff0c;可以通過以下步驟實現&#xff1a; 解決方案代碼 vue 復制 下載 <script setup lang"ts"> import { ref, computed } from vue;// 定義列表項類型 interface ListItem {id: number;name: string;valu…

Python-教程

1 需求 2 接口 3 示例 4 參考資料 Python 教程 — Python 3.13.5 文檔

Excel數據導出小記

文章目錄 前言一、DataTable >EXCEL二、DBReader >Excel &#xff08;NPOI&#xff09;三、分頁查詢 DbReader>Excel (MiniExcel)總結&#xff1a; 前言 最近經歷了一次數據量比較大的導出&#xff0c;也做了各種優化嘗試&#xff0c;這里稍記錄一下 一、DataTable …

深入理解鏈表數據結構:從Java LinkedList到自定義實現

引言 鏈表作為基礎數據結構之一&#xff0c;在Java集合框架中以LinkedList的形式提供。本文將深入分析Java原生LinkedList的實現機制&#xff0c;并介紹我自定義實現的MyLinkedList&#xff0c;最后對比兩者的設計差異與實現特點。 Java原生LinkedList解析 基本結構 Java的…

【深度學習】卷積神經網絡(CNN):計算機視覺的革命性引擎

卷積神經網絡&#xff08;CNN&#xff09;&#xff1a;計算機視覺的革命性引擎 一、算法背景&#xff1a;視覺智能的進化之路1.1 傳統視覺處理的困境1.2 神經科學的啟示 二、算法理論&#xff1a;CNN的核心架構2.1 基礎組成單元卷積層&#xff1a;特征提取引擎池化層&#xff1…

使用@SpringJUnitConfig注解開發遇到的空指針問題

Spring測試中的版本陷阱&#xff1a;SpringJUnitConfig與JUnit版本兼容性深度解析 一個看似簡單的空指針異常&#xff0c;背后可能隱藏著JUnit版本不匹配的“幽靈”。 一、SpringJUnitConfig&#xff1a;Spring與JUnit 5的橋梁 SpringJUnitConfig是Spring TestContext框架為**…