基于JAVA超市自助购物系统的设计与实现
一、設(shè)計(jì)需求
基于RFID的自動(dòng)識(shí)別技術(shù),通過無線射頻方式實(shí)時(shí)獲得磁卡對(duì)超市物品的電子標(biāo)簽進(jìn)行讀取,然后將數(shù)據(jù)通過網(wǎng)絡(luò)傳輸至服務(wù)器,在應(yīng)用層開發(fā)一個(gè)管理系統(tǒng),對(duì)超市物品信息、店內(nèi)消費(fèi)等各種行為進(jìn)行管理和顯示。系統(tǒng)需有登錄注冊(cè)功能,商品的信息管理,付款等功能。
擬解決的主要問題:
(1)使用RFID自動(dòng)識(shí)別技術(shù),對(duì)超市商品信息進(jìn)行讀取
(2) 將接受到的數(shù)據(jù)傳輸給服務(wù)器
(3)在應(yīng)用層管理系統(tǒng)中對(duì)信息進(jìn)行管理
(4) 管理員對(duì)整個(gè)后臺(tái)系統(tǒng)的商品進(jìn)行管理
二、設(shè)計(jì)需求總結(jié)
整個(gè)系統(tǒng)的設(shè)計(jì):?
(1). (管理員操作)超市每上架一個(gè)新產(chǎn)品時(shí),就在軟件端進(jìn)行入庫注冊(cè)、注冊(cè)時(shí)填入商品的名稱、編號(hào)(可以使用UUID動(dòng)態(tài)生成)、數(shù)量、價(jià)格、圖片、數(shù)據(jù)都保存在軟件端的數(shù)據(jù)庫里。
(2). (管理員操作)開卡-入庫:? 上架的新產(chǎn)品入庫注冊(cè)之后,需要為這個(gè)產(chǎn)品辦理一張電子標(biāo)簽卡,這個(gè)卡里存放著產(chǎn)品的編號(hào);這個(gè)卡就放在產(chǎn)品貨架上(與產(chǎn)品對(duì)應(yīng)),如果后面這個(gè)產(chǎn)品的信息如果查詢,就讀取電子標(biāo)簽里的編號(hào),到數(shù)據(jù)庫里查詢。
(3). (管理員操作)開卡和查詢的數(shù)據(jù)傳輸:? 設(shè)備端與軟件端采用 TCP網(wǎng)絡(luò)方式進(jìn)行通信;設(shè)備端當(dāng)做TCP客戶端,軟件端當(dāng)做TCP服務(wù)器;當(dāng)設(shè)備端查詢產(chǎn)品的電子標(biāo)簽時(shí),設(shè)備端讀取編號(hào)之后,會(huì)通過約定的數(shù)據(jù)格式通過網(wǎng)絡(luò)傳遞給軟件端。 當(dāng)軟件端開卡注冊(cè)時(shí),也會(huì)用約定好的數(shù)據(jù)格式傳遞給設(shè)備端,如果設(shè)備端收到數(shù)據(jù),開發(fā)板上的LED會(huì)點(diǎn)亮;這時(shí)把IC拿到RC522射頻模塊上刷一下即可;如果成功寫入LED燈就會(huì)關(guān)閉。
(4). 軟件端的設(shè)計(jì):
有注冊(cè)界面、登錄界面;
主界面上顯示店內(nèi)有所有登記入庫的商品信息,每個(gè)產(chǎn)品有圖片進(jìn)行顯示、圖片下面就顯示產(chǎn)品的數(shù)量與價(jià)格;
管理員界面: 可以進(jìn)行商品添加、設(shè)計(jì)價(jià)格、修改信息等。
查詢頁面: 輸入產(chǎn)品的信息,可以查詢產(chǎn)品的所有詳細(xì)信息。
顧客可以選擇購買的商品進(jìn)行,然后點(diǎn)擊支付。
軟件端與硬件端的數(shù)據(jù)格式: ?
(1). 開卡注冊(cè)數(shù)據(jù)格式-字符串(軟件--->設(shè)備):? register:86382684638434
(2). 設(shè)備查詢上傳的數(shù)據(jù)格式-字符串(設(shè)備--->軟件): query: 86382684638434
商品的編號(hào)限制在16個(gè)字節(jié)內(nèi)。
???這里的設(shè)備硬件部分采用STM32最小系統(tǒng)板當(dāng)做刷卡器,完成對(duì)IC卡讀寫,如果不需要STM32也可以替換成其他掃碼槍之類的都可以的:
?完整資料下載地址:?https://download.csdn.net/download/xiaolong1126626497/20687551
三、相關(guān)硬件
3.1 STM32F103最小系統(tǒng)板
STM32F系列屬于中低端的32位ARM微控制器,該系列芯片是意法半導(dǎo)體(ST)公司出品,其內(nèi)核是Cortex-M3。
該系列芯片按片內(nèi)Flash的大小可分為三大類:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。
芯片集成定時(shí)器Timer,CAN,ADC,SPI,I2C,USB,UART等多種外設(shè)功能。
3.2 ESP8266串口WIFI
?
ESP8266 系列模組集成 Wi-Fi 芯片 ESP8266,設(shè)計(jì)緊湊、集成度高、RF 性能突出。通過 SRRC, FCC, CE 等多國無線電認(rèn)證,適用于各類物聯(lián)網(wǎng)應(yīng)用場(chǎng)景。
性能卓越
ESP8266EX 芯片內(nèi)置超低功耗 Tensilica L106 32 位 RISC 處理器,CPU 時(shí)鐘速度最?可達(dá) 160 MHz,?持實(shí)時(shí)操作系統(tǒng) (RTOS) 和 Wi-Fi 協(xié)議棧,可將?達(dá) 80% 的處理能?應(yīng)用于編程和開發(fā)。
高度集成
ESP8266 芯片高度集成天線開關(guān)、射頻巴倫、功率放大器、低噪聲接收放大器、濾波器等射頻模塊。模組尺寸小巧,尤其適用于空間受限的產(chǎn)品設(shè)計(jì)。
認(rèn)證齊全
RF 認(rèn)證:SRRC、FCC、CE-RED、KCC、TELEC/MIC、IC 和 NCC 認(rèn)證;
環(huán)保認(rèn)證:RoHS、REACH;
可靠性認(rèn)證:HTOL、HTSL、μHAST、TCT、ESD。
豐富的產(chǎn)品應(yīng)用
ESP8266 模組既可以通過 ESP-AT 指令固件,為外部主機(jī) MCU 提供 Wi-Fi 連接功能;也可以作為獨(dú)立 Wi-Fi MCU 運(yùn)行,用戶通過基于 RTOS 的 SDK 開發(fā)帶 Wi-Fi 連接功能的產(chǎn)品。用戶可以輕松實(shí)現(xiàn)開箱即用的云連接、低功耗運(yùn)行模式,以及包括 WPA3 在內(nèi)的 Wi-Fi 安全支持等功能。
3.3 RC522無線射頻模塊
?
MF RC522 是應(yīng)用于13.56MHz 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對(duì)“三表”應(yīng)用推出的一款低 電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜式手持設(shè)備研發(fā)的較好選擇。
概述
MFRC522 是應(yīng)用于13.56MHz 非接觸式通信中高集成度讀寫卡系列芯片中的一員。是NXP 公司針對(duì)“三表”應(yīng)用推出的一款低 電壓、低成本、體積小的非接觸式讀寫卡芯片,是智能儀表和便攜 式手持設(shè)備研發(fā)的較好選擇。
MF RC522 利用了先進(jìn)的調(diào)制和解調(diào)概念,完全集成了在13.56MHz 下所有類型的被動(dòng)非接觸式通信方式和協(xié)議。支持 ISO14443A 的多層應(yīng)用。其內(nèi)部發(fā)送器部分可驅(qū)動(dòng)讀寫器天線與ISO 14443A/MIFARE卡和應(yīng)答機(jī)的通信,無需其它的電路。接收器部分提供一個(gè)堅(jiān)固而有效的解調(diào)和解碼電路,用于處理ISO14443A 兼容的應(yīng)答器信號(hào)。數(shù)字部分處理ISO14443A 幀和錯(cuò)誤檢測(cè)(奇偶 &CRC)。此外,它還支持快速CRYPTO1 加密算法,用于驗(yàn)證MIFARE 系列產(chǎn)品。MFRC522 支持MIFARE?更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424kbit/s。
作為13.56MHz 高集成度讀寫卡系列芯片家族的新成員,MF RC522 與MF RC500和 MF RC530 有不少相似之處,同時(shí)也具備諸多特點(diǎn)和差異。它與主機(jī)間的通信采用連線較少的串行通信,且可根據(jù)不同的用戶需求,選取SPI、I2C 或串行UART(類似RS232)模式之一,有利于減少連線,縮小PCB 板體積,降低成本。
特性
◆高集成度的調(diào)制解調(diào)電路;
◆采用少量外部器件,即可將輸出驅(qū)動(dòng)級(jí)接至天線;
◆支持 ISO/IEC 14443 TypeA 和MIFARE®通信協(xié)議;
◆ 讀寫器模式中與 ISO 14443A/MIFARE®的通信距離高達(dá)50mm,取決于天線的長度和調(diào)諧。
◆支持 ISO 14443 212kbit/s 和424kbit/s 的更高傳輸速率的通信。
◆支持 MIFARE® Classic 加密;
◆支持的主機(jī)接口:
-10Mbit/s 的SPI 接口
-I2C 接口,快速模式的速率為400kbit/s,高速模式的速率為3400kbit/s
-串行UART,傳輸速率高達(dá)1228.8kbit/s,幀取決于RS232 接口,電壓電平取決于提供的管腳電壓
◆64 字節(jié)的發(fā)送和接收FIFO 緩沖區(qū);
◆靈活的中斷模式;
◆可編程定時(shí)器。
◆具備硬件掉電、軟件掉電和發(fā)送器掉電 3 種節(jié)電模式,前兩種模式雷同于MFRC500 和 CL RC400,其特有的“發(fā)送器掉電”則可關(guān)閉內(nèi)部天線驅(qū)動(dòng)器,即關(guān)閉RF 場(chǎng);
◆內(nèi)置溫度傳感器,以便在芯片溫度過高時(shí)自動(dòng)停止 RF 發(fā)射;
◆采用相互獨(dú)立的多組電源供電,以避免模塊間的相互干擾,提高工作的穩(wěn)定性;
◆具備 CRC 和奇偶校驗(yàn)功能,CRC 協(xié)處理器的16 位長CRC 計(jì)算多項(xiàng)式固定為:x16+x12+x5+1,符合ISO/1EC14443 和CCTITT 協(xié)議;
◆內(nèi)部振蕩器,連接 27.12MHz 的晶體;
◆2.5~3.3V 的低電壓低功耗設(shè)計(jì);
◆工作溫度范圍-30~+85℃;
◆5mm×5mm×0.85mm 的超小體積。
應(yīng)用場(chǎng)合
MF RC522 適用于各種基于ISO/IEC 14443A 標(biāo)準(zhǔn)并且要求低成本、小尺寸、高性能以及單電源的非接觸式通信的應(yīng)用場(chǎng)合。
▲三表;
▲板上單元;
▲公共交通終端;
▲便攜式手持設(shè)備;
▲非接觸式公用電話。
3.4 IC卡
?
IC卡 (Integrated Circuit Card,集成電路卡),也稱智能卡(Smart card)、智慧卡(Intelligent card)、微電路卡(Microcircuit card)或微芯片卡等。它是將一個(gè)微電子芯片嵌入符合ISO 7816標(biāo)準(zhǔn)的卡基中,做成卡片形式。IC卡與讀寫器之間的通訊方式可以是接觸式,也可以是非接觸式。由于IC卡具有體積小便于攜帶、存儲(chǔ)容量大、可靠性高、使用壽命長、保密性強(qiáng)安全性高等特點(diǎn),IC卡的概念是在20世紀(jì)70年代初提出來的,法國的布爾公司于1976年首先創(chuàng)造出了IC卡產(chǎn)品,并將這項(xiàng)技術(shù)應(yīng)用于金融、交通、醫(yī)療、身份證明等行業(yè),它將微電子技術(shù)和計(jì)算機(jī)技術(shù)結(jié)合在一起,提高了人們工作、生活的現(xiàn)代化程度。
產(chǎn)品原理
IC卡是集成電路卡,IC卡芯片具有寫入數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的能力,可對(duì)IC卡存儲(chǔ)器中的內(nèi)容進(jìn)行判定。在卡上封裝有符合ISO標(biāo)準(zhǔn)的芯片,有6~8個(gè)觸點(diǎn)和外部設(shè)備進(jìn)行通信,在IC卡上可以有彩色圖案和說明性文字按ISO標(biāo)準(zhǔn),IC卡的部分觸點(diǎn)及其定義為:VCC:IC卡工作電源;GND:接地;VPP:存儲(chǔ)器編程電源;CLK:有關(guān)信號(hào)的定時(shí)與同步;I/O:卡中串行數(shù)據(jù)的輸入與輸出;RST:復(fù)位信號(hào)。當(dāng)IC卡插入IC卡讀卡器后,各接點(diǎn)對(duì)應(yīng)接通,IC卡上的超大規(guī)模集成電路就開始工作。
IC卡種類
根據(jù)卡中所鑲嵌集成電路的不同,IC卡可分為存儲(chǔ)卡、非接觸式IC卡、光卡、非接觸式智能IC卡、智能卡 。
存儲(chǔ)卡
存儲(chǔ)卡,也稱記憶卡(Memory Card),卡內(nèi)有具有存儲(chǔ)功能的集成電路存儲(chǔ)器,還有數(shù)據(jù)存儲(chǔ)器(EEPROM)、工作存儲(chǔ)器(RAM)或程序存儲(chǔ)器(EPROM)。存儲(chǔ)卡使用半導(dǎo)體存儲(chǔ)器。存儲(chǔ)器中所有存儲(chǔ)單元的總和稱為存儲(chǔ)容量,存儲(chǔ)卡的最大容量目前為512 KB。存儲(chǔ)卡讀出/寫入一個(gè)字的時(shí)間稱作讀/寫時(shí)間,讀寫器在接收地址和讀命令時(shí),即可將卡中的內(nèi)容讀出,讀出時(shí)間約為幾微秒,讀寫器在送來地址、要寫數(shù)據(jù)和寫命令時(shí),即可進(jìn)行寫入,寫入一個(gè)數(shù)據(jù)的時(shí)間比讀出一個(gè)數(shù)據(jù)的時(shí)間長得多,一般需要5~10 ms。
非接觸式IC卡
非接觸式IC卡又稱射頻卡,是近幾年發(fā)展起來的一項(xiàng)新技術(shù),它將射頻識(shí)別技術(shù)和IC卡技術(shù)結(jié)合在一起,解決了無源(卡中無電源)和免接觸的技術(shù)問題。
非接觸式IC卡與接觸式IC卡相比有以下特點(diǎn):
(1)可靠性高。由于讀寫之間無機(jī)械接觸,避免了由于接觸讀寫而產(chǎn)生的各種故障;且非接觸式IC卡表面無裸露的芯片,無芯片脫落、靜電擊穿、彎曲損害等后顧之憂 。
(2)操作方便。無接觸通信使讀寫器在10 cm的范圍內(nèi)就可以對(duì)卡片進(jìn)行操作,且非接觸式IC卡在使用時(shí)無方向性,卡片可以以任意方向掠過讀寫器表面完成操作,既方便又提高了速度 。
(3)防沖突。非接觸式IC卡中有快速防沖突機(jī)制,能防止卡片之間出現(xiàn)數(shù)據(jù)干擾,讀寫器可以“同時(shí)”處理多張非接觸式IC卡 。
(4)可以適應(yīng)多種應(yīng)用。非接觸式Ic卡存儲(chǔ)器結(jié)構(gòu)的特點(diǎn)使其適于一卡多用,可以根據(jù)不同的應(yīng)用設(shè)定不同的密碼和訪問條件 。
(5)加密性能好。非接觸式IC卡的序號(hào)是唯一的,在出廠前已固化,其與讀寫器之間有雙向驗(yàn)證機(jī)制;非接觸式IC卡在處理前要與讀寫器進(jìn)行3次相互認(rèn)證。
四、硬件設(shè)備成品效果圖
?
?
?程序需要修改的地方:
?
?五、硬件設(shè)備端代碼
?
#include "stm32f10x.h" #include "led.h" #include "delay.h" #include "key.h" #include "usart.h" #include <string.h> #include "timer.h" #include "esp8266.h" #include "RFID_RC522.h"/* 相關(guān)的硬件連接引腳說明: LED----PC13 KEY----PA0 ESPB266---PB10(TX)(ESP8266-RX) 和PB11(RX)(ESP8266-TX) RC522射頻模塊外部的接口: *1--SDA <----->PB5--片選腳 *2--SCK <----->PB4--時(shí)鐘線 *3--MOSI<----->PA12--輸出 *4--MISO<----->PA11--輸入 *5--懸空 *6--GND <----->GND *7--RST <----->PA8--復(fù)位腳 *8--VCC <----->VCC *///u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff}; //卡密碼-初始密碼--白卡的出廠密碼-- //u8 MIMA_1[16]={88,88,88,88,88,88,0xff,0x07,0x80,0x29,88,88,88,88,88,88}; //扇區(qū)1的密碼 格式(A密碼 控制位 B密碼 ) //u8 MIMA_2[16]={88,88,88,88,88,88};//扇區(qū)1的A密碼 unsigned char SN[4]={88,88,88,88}; //默認(rèn)卡號(hào)char SendBuff[10];/* 函數(shù)功能: 打印卡號(hào) */ void print_info(unsigned char *p,int cnt) {int i;for(i=0;i<cnt;i++){printf("0x%X ",p[i]);}printf("\r\n"); }/* 函數(shù)功能: 讀卡號(hào)--電子標(biāo)簽的卡號(hào) 返回值: 1成功 0失敗 */ int ReadCardNumber(void) {unsigned char CT[2];//卡類型u8 status=1;status=RC522_PcdRequest(PICC_REQIDL ,CT);//(尋卡模式,卡類型),成功返回0if(status==MI_OK)//尋卡成功{status=MI_ERR;status=RC522_PcdAnticoll(SN); //防沖撞,成功返回0,SN是讀到卡號(hào)的地址printf("卡類型:");print_info(CT,2);//打印類型printf("卡號(hào):");print_info(SN,4);//打印卡號(hào) return 1;}return 0; }/* 函數(shù)功能: 主函數(shù) */ int main() {u32 cnt=0;u8 key;LED_Init();KEY_Init();USART1_Init(115200);TIMER1_Init(72,20000); //超時(shí)時(shí)間20msUSART3_Init(115200);//串口-WIFITIMER3_Init(72,20000); //超時(shí)時(shí)間20msRC522_Init(); //RC522USART1_Printf("正在初始化WIFI請(qǐng)稍等.\n");if(ESP8266_Init()){USART1_Printf("ESP8266硬件檢測(cè)錯(cuò)誤.\n"); }else{USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode("CMCC-Cqvn","99pu58cb","192.168.1.6",8080,0));}while(1){ cnt++;delay_ms(10);if(cnt>=20){cnt=0;LED1=!LED1;}//接收服務(wù)器下發(fā)的數(shù)據(jù)if(USART3_RX_FLAG){USART3_RX_BUFFER[USART3_RX_CNT]='\0';USART1_Printf("%s",USART3_RX_BUFFER);USART3_RX_CNT=0;USART3_RX_FLAG=0;}//讀取卡號(hào)if(ReadCardNumber()){sprintf(SendBuff,"%x%x%x%x\r\n",SN[0],SN[1],SN[2],SN[3]);ESP8266_ClientSendData((u8*)SendBuff,strlen(SendBuff)); }//查看連接狀態(tài)key=KEY_Scan(0);if(key) //發(fā)送AT{USARTx_StringSend(USART3,"AT+CIPSTATUS\r\n"); //查看狀態(tài)信息}} }六、JAVA端效果圖
完整資料下載地址:?https://download.csdn.net/download/xiaolong1126626497/20687551
?配套資料齊全,視頻講解代碼,部署環(huán)境。
?
?
?
?七、JAVA端的代碼
?
package com.controller;import java.io.IOException;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import com.common.bean.MySessionContext; import com.common.bean.ResultData; import com.common.bean.WebSocketProductHolder; import com.entity.Product; import com.mapper.ProductMapper;@RestController() @RequestMapping("/product") public class ProductController {@Autowiredprivate ProductMapper pm;@PostMapping("update.action")ResultData update(String token,@RequestBody Product update) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}pm.update( update );return ResultData.success();}@PostMapping("byid.action")ResultData getById(String token,@RequestBody Product query) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}return ResultData.success().setData( pm.getById( query.getId() ) );}@PostMapping("delete.action")ResultData deletePro(String token,@RequestBody Product delpro) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}pm.deletePro( delpro );return ResultData.success();}@PostMapping("query.action")ResultData query(String token,@RequestBody Product query) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}return ResultData.success().setData( pm.query( query ) );}@PostMapping("all.action")ResultData getAll(String token) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}return ResultData.success().setData( pm.getAll() );}@PostMapping("add.action")ResultData addUser(String token,@RequestBody Product pro) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}pm.add( pro );try {//把商品的編號(hào)通過TCP長連接傳給STM32,寫入rfid卡。WebSocketProductHolder.register(pro.getId()+"");} catch (IOException e) {System.out.println("注冊(cè)失敗!");}return ResultData.success();}} package com.controller;import java.io.File; import java.io.IOException; import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;@RestController @RequestMapping("/upload") public class UpLoadController {@PostMapping("/uploadImg")public String uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest rq){//獲取上傳文件名,包含后綴String originalFilename = file.getOriginalFilename();//獲取后綴String substring = originalFilename.substring(originalFilename.lastIndexOf("."));//保存的文件名String dFileName = UUID.randomUUID()+substring;//保存路徑//springboot 默認(rèn)情況下只能加載 resource文件夾下靜態(tài)資源文件String path = "D:\\uploadimg\\";//生成保存文件File uploadFile = new File(path+dFileName);System.out.println(uploadFile);//將上傳文件保存到路徑try {file.transferTo(uploadFile);} catch (IOException e) {e.printStackTrace();}return uploadFile.getName();}}?
package com.controller;import java.util.List; import java.util.Map;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import com.common.bean.MySessionContext; import com.common.bean.ResultData; import com.entity.User; import com.mapper.UserMapper;@RestController() @RequestMapping("/user") public class UserController {@Autowiredprivate UserMapper um;@PostMapping("changepswd.action")ResultData changePswd(String token,@RequestBody Map<String,String> map) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}User uu = (User) ss.getAttribute("login_user");if( uu == null ) return ResultData.fail("請(qǐng)先登錄!");String password = map.get("password");String newpassword = map.get("password2");int num = um.updatePassword(uu.getId(), password, newpassword);if( num > 0) return ResultData.success();return ResultData.fail("原始密碼錯(cuò)誤");}@PostMapping("adduser.action")ResultData addUser(String token,@RequestBody User user) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}User uu = (User) ss.getAttribute("login_user");System.out.println( uu );if( uu == null ) return ResultData.fail("請(qǐng)先登錄!");if( !("admin".equalsIgnoreCase(uu.getRole()) ||"root".equals( uu.getRole() ) ) ) {return ResultData.fail("請(qǐng)用管理員賬號(hào)登錄再添加");}um.addUser(user);return ResultData.success();}@PostMapping("delete.action")ResultData deleteUser(String token,@RequestBody User user) {System.out.println( user);HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}User uu = (User) ss.getAttribute("login_user");if( uu == null ) return ResultData.fail("請(qǐng)先登錄!");if("admin".equalsIgnoreCase(user.getRole()) || "root".equals( user.getRole() )) return ResultData.fail("無法刪除管理員用戶!");if( !("admin".equalsIgnoreCase(uu.getRole()) ||"root".equals( uu.getRole() ) ) ) {return ResultData.fail("請(qǐng)用管理員賬號(hào)登錄再刪除");}um.deleteUser(user);return ResultData.success();}@PostMapping("getall.action")ResultData getAll(String token) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}List<User> list = um.getAll();for(User u:list) {u.setPassword(null);}return ResultData.success().setData( list );}@PostMapping("logout.action")ResultData getAllUser(String token) {HttpSession ss = MySessionContext.getSession( token );if( ss != null ) {ss.invalidate();}return ResultData.success();}@PostMapping("login.action")ResultData login(@RequestBody User user,HttpSession ss) {User rs = um.Login( user );if(rs != null ) {rs.setPassword( null );ss.setAttribute("login_user", rs );MySessionContext.AddSession( ss );return ResultData.success().setData( rs ).setToken(ss.getId() );}else {return ResultData.fail("用戶名或密碼錯(cuò)誤!");}}} package com.controller;import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import com.common.bean.MySessionContext; import com.common.bean.ResultData; import com.entity.Order; import com.mapper.OrderMapper;@RestController() @RequestMapping("/order") public class OrderController {@Autowiredprivate OrderMapper ordermapper;@PostMapping("calc.action")ResultData update(String token,@RequestBody List<Order> list) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}for( Order od : list ) {ordermapper.add( od );}return ResultData.success();}@PostMapping("query.action")ResultData query(String token,@RequestBody Map<String,Long> map) {HttpSession ss = MySessionContext.getSession( token );if( ss == null ) {return ResultData.fail("請(qǐng)先登錄!");}long t1 = map.get("start");long t2 = map.get("end");Date d1 = new Date();d1.setTime(t1);Date d2 = new Date();d2.setTime(t2);String start = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format( d1 );String end = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format( d2 );List<Order> list = ordermapper.query(start, end);return ResultData.success().setData( list );}}總結(jié)
以上是生活随笔為你收集整理的基于JAVA超市自助购物系统的设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [软件更新]影拓三代 PTZ系列 系列
- 下一篇: 怎么用dos系统进入服务器,怎么用DOS