Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上商城系統(tǒng)的實(shí)現(xiàn)流程
一、項(xiàng)目簡述(+需求文檔+PPT)
功能: 主頁顯示熱銷商品;所有商品展示,可進(jìn)行商品搜索;點(diǎn) 擊商品進(jìn)入商品詳情頁,顯示庫存,具有立即購買和加入 購物車功能,可增減購買商品數(shù)量亦可手動輸入(同時驗(yàn)證 庫存),熱銷商品展示。立即購買進(jìn)入確認(rèn)訂單頁面,可選 擇已經(jīng)添加的地址,亦可新增地址。(同時驗(yàn)證庫存),可 選擇購買哪些商品,可刪除不需要的商品。點(diǎn)擊結(jié)算進(jìn)入 確認(rèn)訂單頁面,確認(rèn)后提交訂單,訂單重復(fù)提交給予響 應(yīng),庫存不足或商品下架給予響應(yīng)。后臺管理:(修改密碼 等),商品管理(商品批量添加、上下架、庫存維護(hù)等), 訂單管理。
二、項(xiàng)目運(yùn)行
環(huán)境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe ( IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
項(xiàng)目技術(shù): JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。
后臺管理-主頁操作代碼:
/** * 后臺管理-主頁 */ @Controller public class AdminHomeController extends BaseController { @Resource(name = "adminService") private AdminService adminService; @Resource(name = "productOrderService") private ProductOrderService productOrderService; @Resource(name = "productService") private ProductService productService; @Resource(name = "userService") private UserService userService; /** * 轉(zhuǎn)到后臺管理-主頁 * @param session session對象 * @param map 前臺傳入的Map * @return 響應(yīng)數(shù)據(jù) * @throws ParseException 轉(zhuǎn)換異常 */ @RequestMapping(value = "admin", method = RequestMethod.GET) public String goToPage(HttpSession session, Map<String, Object> map) throws ParseException { logger.info("獲取管理員信息"); Object adminId = checkAdmin(session); if (adminId == null) { return "redirect:/admin/login"; } Admin admin = adminService.get(null, Integer.parseInt(adminId.toString())); map.put("admin", admin); logger.info("獲取統(tǒng)計(jì)信息"); //產(chǎn)品總數(shù) Integer productTotal = productService.getTotal(null, new Byte[]{0, 2}); //用戶總數(shù) Integer userTotal = userService.getTotal(null); //訂單總數(shù) Integer orderTotal = productOrderService.getTotal(null, new Byte[]{3}); logger.info("獲取圖表信息"); map.put("jsonObject", getChartData(null,null,7)); map.put("productTotal", productTotal); map.put("userTotal", userTotal); map.put("orderTotal", orderTotal); logger.info("轉(zhuǎn)到后臺管理-主頁"); return "admin/homePage"; } /** * 轉(zhuǎn)到后臺管理-主頁(ajax方式) * @param session session對象 * @param map 前臺傳入的Map * @return 響應(yīng)數(shù)據(jù) * @throws ParseException 轉(zhuǎn)換異常 */ @RequestMapping(value = "admin/home", method = RequestMethod.GET) public String goToPageByAjax(HttpSession session, Map<String, Object> map) throws ParseException { logger.info("獲取管理員信息"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; } Admin admin = adminService.get(null, Integer.parseInt(adminId.toString())); map.put("admin", admin); logger.info("獲取統(tǒng)計(jì)信息"); Integer productTotal = productService.getTotal(null, new Byte[]{0, 2}); Integer userTotal = userService.getTotal(null); Integer orderTotal = productOrderService.getTotal(null, new Byte[]{3}); logger.info("獲取圖表信息"); map.put("jsonObject", getChartData(null, null,7)); logger.info("獲取圖表信息"); map.put("jsonObject", getChartData(null,null,7)); map.put("productTotal", productTotal); map.put("userTotal", userTotal); map.put("orderTotal", orderTotal); logger.info("轉(zhuǎn)到后臺管理-主頁-ajax方式"); return "admin/homeManagePage"; } /** * 按日期查詢圖表數(shù)據(jù)(ajax方式) * @param beginDate 開始日期 * @param endDate 結(jié)束日期 * @return 響應(yīng)數(shù)據(jù) * @throws ParseException 轉(zhuǎn)換異常 */ @ResponseBody @RequestMapping(value = "admin/home/charts", method = RequestMethod.GET, produces = "application/json;charset=utf-8") public String getChartDataByDate(@RequestParam(required = false) String beginDate, @RequestParam(required = false) String endDate) throws ParseException { if (beginDate != null && endDate != null) { //轉(zhuǎn)換日期格式 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); return getChartData(simpleDateFormat.parse(beginDate), simpleDateFormat.parse(endDate),7).toJSONString(); } else { return getChartData(null, null,7).toJSONString(); } } /** * 按日期獲取圖表數(shù)據(jù) * @param beginDate 開始日期 * @param endDate 結(jié)束日期 * @param days 天數(shù) * @return 圖表數(shù)據(jù)的JSON對象 * @throws ParseException 轉(zhuǎn)換異常 */ private JSONObject getChartData(Date beginDate,Date endDate,int days) throws ParseException { JSONObject jsonObject = new JSONObject(); SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd", Locale.UK); SimpleDateFormat time2 = new SimpleDateFormat("MM/dd", Locale.UK); SimpleDateFormat timeSpecial = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.UK); //如果沒有指定開始和結(jié)束日期 if (beginDate == null || endDate == null) { //指定一周前的日期為開始日期 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 1-days); beginDate = time.parse(time.format(cal.getTime())); //指定當(dāng)前日期為結(jié)束日期 cal = Calendar.getInstance(); endDate = cal.getTime(); } else { beginDate = time.parse(time.format(beginDate)); endDate = timeSpecial.parse(time.format(endDate) + " 23:59:59"); } logger.info("根據(jù)訂單狀態(tài)分類"); //未付款訂單數(shù)統(tǒng)計(jì)數(shù)組 int[] orderUnpaidArray = new int[7]; //未發(fā)貨訂單數(shù)統(tǒng)計(jì)叔祖 int[] orderNotShippedArray = new int[7]; //未確認(rèn)訂單數(shù)統(tǒng)計(jì)數(shù)組 int[] orderUnconfirmedArray = new int[7]; //交易成功訂單數(shù)統(tǒng)計(jì)數(shù)組 int[] orderSuccessArray = new int[7]; //總交易訂單數(shù)統(tǒng)計(jì)數(shù)組 int[] orderTotalArray = new int[7]; logger.info("從數(shù)據(jù)庫中獲取統(tǒng)計(jì)的訂單集合數(shù)據(jù)"); List<OrderGroup> orderGroupList = productOrderService.getTotalByDate(beginDate, endDate); //初始化日期數(shù)組 JSONArray dateStr = new JSONArray(days); //按指定的天數(shù)進(jìn)行循環(huán) for (int i = 0; i < days; i++) { //格式化日期串(MM/dd)并放入日期數(shù)組中 Calendar cal = Calendar.getInstance(); cal.setTime(beginDate); cal.add(Calendar.DATE, i); String formatDate = time2.format(cal.getTime()); dateStr.add(formatDate); //該天的訂單總數(shù) int orderCount = 0; //循環(huán)訂單集合數(shù)據(jù)的結(jié)果集 for(int j = 0; j < orderGroupList.size(); j++){ OrderGroup orderGroup = orderGroupList.get(j); //如果該訂單日期與當(dāng)前日期一致 if(orderGroup.getProductOrder_pay_date().equals(formatDate)){ //從結(jié)果集中移除數(shù)據(jù) orderGroupList.remove(j); //根據(jù)訂單狀態(tài)將統(tǒng)計(jì)結(jié)果存入對應(yīng)的訂單狀態(tài)數(shù)組中 switch (orderGroup.getProductOrder_status()) { case 0: //未付款訂單 orderUnpaidArray[i] = orderGroup.getProductOrder_count(); break; case 1: //未發(fā)貨訂單 orderNotShippedArray[i] = orderGroup.getProductOrder_count(); break; case 2: //未確認(rèn)訂單 orderUnconfirmedArray[i] = orderGroup.getProductOrder_count(); break; case 3: //交易成功訂單 orderSuccessArray[i] = orderGroup.getProductOrder_count(); break; } //累加當(dāng)前日期的訂單總數(shù) orderCount += orderGroup.getProductOrder_count(); } } //將統(tǒng)計(jì)的訂單總數(shù)存入總交易訂單數(shù)統(tǒng)計(jì)數(shù)組 orderTotalArray[i] = orderCount; } logger.info("返回結(jié)果集map"); jsonObject.put("orderTotalArray", orderTotalArray); jsonObject.put("orderUnpaidArray", orderUnpaidArray); jsonObject.put("orderNotShippedArray", orderNotShippedArray); jsonObject.put("orderUnconfirmedArray", orderUnconfirmedArray); jsonObject.put("orderSuccessArray", orderSuccessArray); jsonObject.put("dateStr",dateStr); return jsonObject; } }
前臺主頁代碼:
/** * 主頁 */ @Controller public class ForeHomeController extends BaseController { @Resource(name = "userService") private UserService userService; @Resource(name="categoryService") private CategoryService categoryService; @Resource(name="productService") private ProductService productService; @Resource(name="productImageService") private ProductImageService productImageService; //轉(zhuǎn)到前臺天貓-主頁 @RequestMapping(value = "/", method = RequestMethod.GET) public String goToPage(HttpSession session, Map<String, Object> map) { logger.info("檢查用戶是否登錄"); Object userId = checkUser(session); if (userId != null) { logger.info("獲取用戶信息"); User user = userService.get(Integer.parseInt(userId.toString())); map.put("user", user); } logger.info("獲取產(chǎn)品分類列表"); List<Category> categoryList = categoryService.getList(null,null); logger.info("獲取每個分類下的產(chǎn)品列表"); for(Category category : categoryList){ List<Product> productList = productService.getList( new Product().setProduct_category(category), new Byte[]{0, 2}, new OrderUtil("product_sale_count", true), new PageUtil(0, 8) ); if (productList != null) { for (Product product : productList) { Integer product_id = product.getProduct_id(); product.setSingleProductImageList( productImageService.getList( product_id, (byte) 0, new PageUtil(0, 1) ) ); } } category.setProductList(productList); } map.put("categoryList",categoryList); logger.info("獲取促銷產(chǎn)品列表"); List<Product> specialProductList = productService.getList( null, new Byte[]{2}, null, new PageUtil(0, 6) ); map.put("specialProductList", specialProductList); logger.info("轉(zhuǎn)到前臺主頁"); return "fore/homePage"; } //轉(zhuǎn)到前臺天貓-錯誤頁 @RequestMapping(value = "error", method = RequestMethod.GET) public String goToErrorPage() { return "fore/errorPage"; } //獲取主頁分類下產(chǎn)品信息-ajax @ResponseBody @RequestMapping(value = "product/nav/{category_id}", method = RequestMethod.GET, produces = "application/json;charset=utf-8") public String getProductByNav(@PathVariable("category_id") Integer category_id) { JSONObject object = new JSONObject(); if (category_id == null) { object.put("success", false); return object.toJSONString(); } logger.info("獲取分類ID為{}的產(chǎn)品標(biāo)題數(shù)據(jù)", category_id); List<Product> productList = productService.getTitle( new Product().setProduct_category(new Category().setCategory_id(category_id)), new PageUtil(0, 40) ); List<List<Product>> complexProductList = new ArrayList<>(8); List<Product> products = new ArrayList<>(5); for (int i = 0; i < productList.size(); i++) { //如果臨時集合中產(chǎn)品數(shù)達(dá)到5個,加入到產(chǎn)品二維集合中,并重新實(shí)例化臨時集合 if (i % 5 == 0) { complexProductList.add(products); products = new ArrayList<>(5); } products.add(productList.get(i)); } complexProductList.add(products); Category category = new Category().setCategory_id(category_id).setComplexProductList(complexProductList); object.put("success", true); object.put("category", category); return object.toJSONString(); } }
以上就是Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上商城系統(tǒng)的實(shí)現(xiàn)流程的詳細(xì)內(nèi)容,更多關(guān)于Java 網(wǎng)上商城系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!
- Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線蛋糕商城系統(tǒng)的實(shí)現(xiàn)
- Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之線上水果超市商城的實(shí)現(xiàn)
- Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之寵物商城系統(tǒng)的實(shí)現(xiàn)流程
- Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之在線服裝銷售商城系統(tǒng)的實(shí)現(xiàn)流程
- Java實(shí)戰(zhàn)花店商城系統(tǒng)的實(shí)現(xiàn)流程
- Java實(shí)戰(zhàn)玩具商城的前臺與后臺實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線購書商城系統(tǒng)的實(shí)現(xiàn)流程
- Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線蛋糕銷售商城的實(shí)現(xiàn)
相關(guān)文章
Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解
這篇文章主要介紹了Java實(shí)現(xiàn)飛機(jī)航班管理系統(tǒng)的思路詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07springboot返回值轉(zhuǎn)成JSONString的處理方式
這篇文章主要介紹了springboot返回值轉(zhuǎn)成JSONString的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06springboot項(xiàng)目監(jiān)控開發(fā)小用例(實(shí)例分析)
這篇文章主要介紹了springboot項(xiàng)目監(jiān)控開發(fā)小用例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09一文徹底弄懂Java中MultipartFile接口和File類
MultipartFile是一個接口,我們可以理解為是Spring?給我們綁定的一個在使用文件上傳等時簡便實(shí)現(xiàn)的口子,這篇文章主要給大家介紹了關(guān)于如何通過一文徹底弄懂Java中MultipartFile接口和File類的相關(guān)資料,需要的朋友可以參考下2023-11-11Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解
這篇文章主要介紹了Java常見的數(shù)據(jù)結(jié)構(gòu)之棧和隊(duì)列詳解,棧(Stack) 是一種基本的數(shù)據(jù)結(jié)構(gòu),具有后進(jìn)先出(LIFO)的特性,類似于現(xiàn)實(shí)生活中的一疊盤子,棧用于存儲一組元素,但只允許在棧頂進(jìn)行插入(入棧)和刪除(出棧)操作,需要的朋友可以參考下2023-10-10