日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

顾客点餐系统-----后端代码编写(基于SSM)

發布時間:2023/12/8 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顾客点餐系统-----后端代码编写(基于SSM) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

restful風格設計API的特點:

1)使用JSON來進行傳遞數據

2)使用不同的HTTP方法來進行描述不同的操作

3)使用HTTP狀態碼來進行表示返回結果是否正確

4)使用路徑表示要進行操作的資源是什么

1)創建一個SpringBoot項目

2)編寫對應的配置文件,數據庫的配置文件

3)編寫對應的SQL語句:

當時我們工大有一家店叫做吉祥餛沌,老板還是使用手工記賬的方式來進行記賬,我就和老板商量了一下要做一個點餐系統出來

drop database if exists OrderDish; create database if not exists OrderDish; use OrderDish; drop table if exists User; create table User( userID int primary key auto_increment, userName varchar(50), passWord varchar(100), isAdmin int default 0 ); drop table if exists Dish; create table Dish( dishID int primary key auto_increment, dishName varchar(50), dishMoney int ); drop table if exists Order_User; create table Order_User( orderID int primary key auto_increment, userID int, isDown int, orderTime timeStamp, foreign key Order_User(userID) references User(userID) ); drop table if exists Order_Dish; create table order_Dish( orderID int, dishID int, foreign key(orderID) references Order_User(orderID), foreign key(dishID) references Dish(dishID) );

4)創建對應的實體類

@Data public class Dish {private int dishID;private String dishName;private String dishMoney; }@Data public class Order {private int orderID;private int userID;private List<Integer> dishList;private int isDown;private Timestamp timestamp; }@Data public class User {private int userID;private String userName;private String passWord;private int isAdmin; }

約定前后端交互的接口:

1){}表示一個JSON對象,他是一個鍵值對結構,里面包含了若干個鍵值對,鍵值對之間使用,進行分割,鍵和值之間使用:來進行分割,這里面的鍵必須是字符串

2.[]用來表示一個數組,里面包含了若干個元素,每一個元素可以是整數,字符串,或者是JSON對象

我們在這里面要用到11個API,需要約定前后端的接口;

1)用戶管理:注冊,登錄,檢測登陸狀態,注銷

2)菜品管理:新增菜品,查看菜品,刪除菜品

3)訂單管理:新增訂單(用戶在這里面點菜),查看指定訂單,查看所有訂單,修改狀態?

1)實現注冊功能:

約定前后端交互的接口: POST /resigter HTTP/1.1 contentType:application/json;{"userName":"李佳偉","passWord":"778896","isAdmin":"0" }注冊成功的時候: {"data": 1,"message": "注冊成功" } 注冊失敗的時候: {"data": -1,"message": "當前前段傳遞的用戶名重復" }

?2)后端代碼:

@RestController @RequestMapping("/Java100") public class XMLController {@AutowiredXMLMapper mapper;Logger logger= LoggerFactory.getLogger(XMLController.class);@RequestMapping("/resigter")public HashMap<String,Object> AddUser(@RequestBody User RequestUser){ //1.進行前端校驗參數String username=RequestUser.getUserName();System.out.println(username);String password=RequestUser.getPassWord();System.out.println(password);HashMap<String,Object> result=new HashMap<>();int data=0;String message="";if(username==null||username.equals("")||password==null||password.equals("")){data=0;message="當前前端傳遞的用戶名和密碼有一個為空";}else { //2.進行判斷用戶名是否重復User user = mapper.selectUserByUserName(username);if (user!=null){data=-1;message="當前前段傳遞的用戶名重復";}else { //3.進行密碼加密操作;String finalPassword = encrypt.AddPassword(password); //4將加密之后的密碼和用戶名傳入到數據庫里面RequestUser.setPassWord(finalPassword);int len = mapper.addUser(RequestUser);if (len == 1) {message = "注冊成功";data = 1;} else {message = "注冊失敗";data = -1;}}}result.put("data",data);result.put("message",message);return result;} }

2)實現登陸功能:必須只有管理員才可以進行登錄,這個是在后端根據用戶名來進行查詢的;

進行密碼加密操作:

public class encrypt {public static String AddPassword(String password){//進行參數校驗if(!StringUtils.hasLength(password)){return "";}//1.先得到鹽值String salt= IdUtil.simpleUUID();//2.對密碼進行加密String finalPassWord= SecureUtil.md5(salt+password);//3.進行最終密碼拼裝return salt+"@"+finalPassWord;}public static boolean SubPassword(String password,String finalPassword){String[] strings=finalPassword.split("@");System.out.println(finalPassword);String salt=strings[0];String extPassWord=strings[1];String linPassword=SecureUtil.md5(salt+password);System.out.println(linPassword);if(linPassword.equals(extPassWord)) return true;return false;} }

進行登錄操作:

@RequestMapping("/login")public HashMap<String,Object> login(@RequestBody User user, HttpServletRequest req){//1.進行用戶名和密碼的校驗String username=user.getUserName();String password=user.getPassWord();int data=-1;String message="";//2.進行密碼解迷和判斷當前是否是管理員User loginUser= mapper.selectUserByUserName(username);if(loginUser==null||loginUser.equals("")){data=-1;message="當前沒有這個用戶";}else{//判斷當前是不是管理員if(loginUser.getIsAdmin()==0){data=-1;message="您不是管理員";}else{//進行密碼解密操作boolean flag=encrypt.SubPassword(user.getPassWord(),loginUser.getPassWord());if(flag==true){data=1;message="登陸成功";HttpSession httpSession=req.getSession(true);httpSession.setAttribute("user",loginUser);}else{data=-1;message="登陸失敗";}}}HashMap<String,Object> result=new HashMap<>();result.put("data",data);result.put("message",message);return result;}}

3)監測登錄狀態(通過攔截器已經進行實現)

4)實現注銷功能:

@RequestMapping("/logout")public void logout(HttpServletRequest req){//1.進行注銷HttpSession httpSession=req.getSession(false);//2.刪除session對象httpSession.removeAttribute("user");}

5)新增菜品:只有管理員才可以進行新增菜品,普通用戶不可以進行新增菜品

約定前后端交互的接口:

前端傳遞: {"dishMoney":"90","dishName":"紅燒茄子" } 后端接收: {"data": 1,"message": "新增菜品成功" }

6)菜品管理:刪除菜品:還是只有管理員才可以進行刪除菜品,普通用戶不可以進行刪除菜品

前端:POST 127.0.0.1:8080/Java100/deleteDish?dishID=1 HTTP/1.1刪除成功的時候: {"data": 1,"message": "刪除菜品成功" } 刪除失敗的時候: {"data": -1,"message": "刪除菜品失敗" } @RequestMapping("/deleteDish")public HashMap<String,Object> deleteDish(Integer dishID,HttpServletRequest req){//1.進行前端參數校驗int data=-1;String message="";if(dishID==null||dishID.equals("")){data=-1;message="當前前段傳遞的message為空";}else{//判斷當前登錄的人是否是管理員HttpSession httpSession=req.getSession(false);User user= (User) httpSession.getAttribute("user");if(user.getIsAdmin()==0){data=-1;message="您當前不是管理員,無法進行刪除菜品操作";}else{int len= mapper.deleteDish(dishID);if(len==1){data=1;message="刪除菜品成功";}else {data = -1;message = "刪除菜品失敗";}}}HashMap<String,Object> hashMap=new HashMap<>();hashMap.put("data",data);hashMap.put("message",message);return hashMap;}

7)查看菜品:普通用戶和管理員都可以查看所有菜品

約定前后端交互的接口:

GET 127.0.0.1:8080/Java100/getAllDish HTTP/1.1 [{"dishID": 2,"dishName": "紅燒茄子","dishMoney": "90"},{"dishID": 3,"dishName": "紅燒里脊","dishMoney": "100"} ] @RequestMapping("/getAllDish")public List<Dish> GetAllDish(){return mapper.SelectAllDish();}

之前用戶表和菜品表的所有XML:

<!--下面是針對用戶來進行操作的--><insert id="addUser">insert into User values(null,#{userName},#{passWord},#{isAdmin});</insert><select id="selectUserByUserName" resultType="com.example.demo.Model.User">select * from User where userName=#{userName};</select><select id="SelectByUserID" resultType="com.example.demo.Model.User">select * from User where userID=#{userID}</select> <!--下面是根據菜品來進行操作的--><insert id="addDish">insert into Dish values(null,#{dishName},#{dishMoney});</insert><delete id="deleteDish">delete from Dish where dishID=#{dishID}</delete><select id="SelectAllDish" resultType="com.example.demo.Model.Dish">select * from Dish</select><select id="SelectOne" resultType="com.example.demo.Model.Dish">select * from Dish where dishID=#{dishID}</select><update id="UpdateDish">update set dishMoney=#{dishMoney} where dishID=#{dishID}</update>

8)新增訂單:

約定前后端交互的接口: 前端用戶是要進行點菜的,肯定要進行選中菜品,所以前端給后端傳遞過來的肯定是一大堆的菜品ID 我們的后端要根據這些菜品ID生成一個訂單 前段傳遞的參數: {"list":"2,3,4,5" }{"data": 1,"message": "訂單插入成功" }

?后端代碼:

@RequestMapping("/addOrder")@Transactionalpublic HashMap<String,Object> addOrder(@RequestBody HashMap<String,String> hashMap,HttpServletRequest req){ //將前端傳遞的字符串轉化成JSON數組List<Integer> dishIDList=new ArrayList<>();String list=hashMap.get("list");System.out.println(list);String[] strings=list.split(",");for(String string:strings){dishIDList.add(Integer.parseInt(string));}//1.先進行插入訂單用戶表,拿到生成的訂單IDHttpSession httpSession=req.getSession(false);User loginUser= (User) httpSession.getAttribute("user");Order order=new Order();order.setDishList(dishIDList);order.setIsDown(0);order.setTimeStamp(new Timestamp(System.currentTimeMillis()));order.setUserID(loginUser.getUserID());mapper.addOrderUser(order);//2.再繼續進行插入訂單-菜品表//我們在這里面要進行循環插入,因為有多個菜品mapper.addOrderDish(dishIDList,order.getOrderID());int data=1;String message="訂單插入成功";HashMap<String,Object> result=new HashMap<>();result.put("data",data);result.put("message",message);return result;}

對應的XML的代碼:

<!--下面是根據訂單表來進行操作的--><!--1.下面這個是新增訂單--><!--進行插入要有訂單用戶表,這里面可以返回主鍵--><insert id="addOrderUser" useGeneratedKeys="true" keyProperty="orderID" keyColumn="orderID">insert into order_user values(null,#{userID},#{timeStamp});</insert><!--下面是插入要有訂單菜品表--><insert id="addOrderDish" >insert into order_dish<foreach collection="list" item="dishID" separator="," open="values" >(#{orderID},#{dishID})</foreach></insert>

9)查看訂單(管理員可以查看所有訂單,用戶可以查看指定用戶的訂單)但是從這方面來說無論是管理員和用戶,看到的都是多個訂單)

我們在這里面查詢訂單,只是看一下訂單的大致信息,比如說訂單下單時間,訂單的是否完成狀態,訂單的ID,訂單的UserID

約定前后端交互的接口:

GET 127.0.0.1:8080/Java100/SelectAllOrder HTTP/1.1響應: [{"orderID": 7,"userID": 1,"dishList": null,"isDown": 0,"timeStamp": null},{"orderID": 8,"userID": 1,"dishList": null,"isDown": 0,"timeStamp": null} ]

//1)如果是管理員,那么可以看到所有用戶的訂單 //2)如果是普通用戶,那么只能看到自己的訂單 //3)我們可以根據HttpSession中的User對象,也就是里面的isAdmin來進行判斷@RequestMapping("/SelectAllOrder")public List<Order> SelectAllOrder(HttpServletRequest req){//1.進行判斷當前用戶是管理員,還是普通用戶,因為最終返回的肯定是一個訂單列表HttpSession httpSession=req.getSession(false);User user= (User) httpSession.getAttribute("user");List<Order> list=null;if(user.getIsAdmin()==0){list= mapper.SelectAllOrder();}else{list=mapper.SelectOneAllOrder(user.getUserID());}//2.返回數據return list;}

10)查看指定訂單詳情:我們之前給用戶顯示的是一個一個的訂單列表,當我們想看某一個訂單的時候,就會給后端傳遞一個訂單ID

約定前后端交互的接口: GET 127.0.0.1:8080/Java100/GetDetailOrder?orderID=7 HTTP/1.1返回響應: {"data": 1,"returnResult": [{"dishID": 2,"dishName": "紅燒茄子","dishMoney": "90"},{"dishID": 3,"dishName": "紅燒里脊","dishMoney": "100"},{"dishID": 4,"dishName": "紅燒牛肉","dishMoney": "700"},{"dishID": 5,"dishName": "牛肉干","dishMoney": "70"}],"message": "當前用戶查詢所有訂單成功" } @RequestMapping("/GetDetailOrder")public HashMap<String,Object> GetDetailOrder(Integer orderID){//1.進行前端參數校驗HashMap<String, Object> result = new HashMap<>();int data=-1;String message="";List<Integer> list=null;List<Dish> dishList=null;if(orderID==null||orderID.equals("")){data=-1;}else {//2.進行數據庫查詢//2.1先根據orderID來進行查詢到所有的菜品信息list = mapper.SelectAllDishIDs(orderID);//2.2再根據里面所有的dishID查詢所有的DishdishList = mapper.SelectAllDishByDishIDTwo(list);//3.統一返回數據封裝結果data=1;message="當前用戶查詢所有訂單成功";}result.put("data",data);result.put("message",message);result.put("returnResult",dishList);return result;} }

11)修改訂單狀態:我們在這里面約定只有管理員才可以進行修改訂單狀態

約定前后端交互的接口:我們要給后端傳遞一個orderID和isDone,后端根據這個來進行修改

前端:GET /UpdateState?orderID=1?isDone=1 響應: {"OK":1,"message":"修改訂單狀態成功" } @RequestMapping("/UpdateState")public HashMap<String,Object> UpdateState(@RequestBody HashMap<String,Integer> hashMap,HttpServletRequest req){//1.先進行獲取到前端的參數并進行校驗int data=1;String message="";HashMap<String,Object> result=new HashMap<>();Integer isDone=hashMap.get("isDone");Integer orderID=hashMap.get("orderID");if(isDone==null||isDone.equals("")||orderID==null||orderID.equals("")){data=-1;message="前端傳低參數有問題";}else {//2.判斷當前登錄的人是不是管理員HttpSession httpSession = req.getSession(false);User user = (User) httpSession.getAttribute("user");if (user.getIsAdmin() == 0) {data = -1;message = "您當前并不是管理員請進行登錄";} else {int len = mapper.UpdateState(isDone, orderID);if (len == 1) {data = 1;message = "修改成功";} else {data = -1;message = "修改失敗";}}}result.put("data",data);result.put("message",message);return result;} }

總結

以上是生活随笔為你收集整理的顾客点餐系统-----后端代码编写(基于SSM)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。