最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 實(shí)戰(zhàn)項(xiàng)目錘煉之網(wǎng)上商城系統(tǒng)的實(shí)現(xiàn)流程

 更新時(shí)間:2021年11月11日 15:33:45   作者:qq_1334611189  
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個(gè)網(wǎng)上商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平

一、項(xiàng)目簡(jiǎn)述(+需求文檔+PPT)

功能: 主頁顯示熱銷商品;所有商品展示,可進(jìn)行商品搜索;點(diǎn) 擊商品進(jìn)入商品詳情頁,顯示庫存,具有立即購(gòu)買和加入 購(gòu)物車功能,可增減購(gòu)買商品數(shù)量亦可手動(dòng)輸入(同時(shí)驗(yàn)證 庫存),熱銷商品展示。立即購(gòu)買進(jìn)入確認(rèn)訂單頁面,可選 擇已經(jīng)添加的地址,亦可新增地址。(同時(shí)驗(yàn)證庫存),可 選擇購(gòu)買哪些商品,可刪除不需要的商品。點(diǎn)擊結(jié)算進(jìn)入 確認(rèn)訂單頁面,確認(rèn)后提交訂單,訂單重復(fù)提交給予響 應(yīng),庫存不足或商品下架給予響應(yīng)。后臺(tái)管理:(修改密碼 等),商品管理(商品批量添加、上下架、庫存維護(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等等。

后臺(tái)管理-主頁操作代碼:

/**
 * 后臺(tái)管理-主頁
 */
@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)到后臺(tái)管理-主頁
     * @param session session對(duì)象
     * @param map 前臺(tái)傳入的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)到后臺(tái)管理-主頁");
        return "admin/homePage";
    }
 
    /**
     * 轉(zhuǎn)到后臺(tái)管理-主頁(ajax方式)
     * @param session session對(duì)象
     * @param map 前臺(tái)傳入的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)到后臺(tái)管理-主頁-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對(duì)象
     * @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é)果存入對(duì)應(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;
    }
}

前臺(tái)主頁代碼:

/**
 * 主頁
 */
@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)到前臺(tái)天貓-主頁
    @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("獲取每個(gè)分類下的產(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)到前臺(tái)主頁");
        return "fore/homePage";
    }
 
    //轉(zhuǎn)到前臺(tái)天貓-錯(cuò)誤頁
    @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++) {
            //如果臨時(shí)集合中產(chǎn)品數(shù)達(dá)到5個(gè),加入到產(chǎn)品二維集合中,并重新實(shí)例化臨時(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)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(cè)(Alibaba Java Coding Guidelines)

    IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(cè)(Alibaba Java Coding Guidelines

    這篇文章主要介紹了IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(cè)(Alibaba Java Coding Guidelines),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯實(shí)例詳解

    Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯實(shí)例詳解

    這篇文章主要介紹了Spring Boot 2 實(shí)戰(zhàn):自定義啟動(dòng)運(yùn)行邏輯,結(jié)合實(shí)例形式詳細(xì)分析了Spring Boot 2自定義啟動(dòng)運(yùn)行邏輯詳細(xì)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • maven 環(huán)境變量的配置詳解

    maven 環(huán)境變量的配置詳解

    這篇文章主要介紹了maven 環(huán)境變量的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Mybatis 實(shí)現(xiàn)一個(gè)搜索框?qū)Χ鄠€(gè)字段進(jìn)行模糊查詢

    Mybatis 實(shí)現(xiàn)一個(gè)搜索框?qū)Χ鄠€(gè)字段進(jìn)行模糊查詢

    這篇文章主要介紹了Mybatis 實(shí)現(xiàn)一個(gè)搜索框?qū)Χ鄠€(gè)字段進(jìn)行模糊查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • JAVA判斷空值方法原理解析

    JAVA判斷空值方法原理解析

    這篇文章主要介紹了JAVA判斷空值方法原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳細(xì)解讀Java編程中面向字符的輸入流

    詳細(xì)解讀Java編程中面向字符的輸入流

    這篇文章主要介紹了Java中面向字符的輸入和輸出流,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐

    springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐

    Spring security 是一個(gè)強(qiáng)大的和高度可定制的身份驗(yàn)證和訪問控制框架,本文主要介紹了springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣可以了解一下
    2023-08-08
  • SpringBoot統(tǒng)一功能處理的方式詳解

    SpringBoot統(tǒng)一功能處理的方式詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot統(tǒng)一功能處理的方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下
    2022-08-08
  • 解決Java的InputMismatchException異常

    解決Java的InputMismatchException異常

    這篇文章介紹了解決Java的InputMismatchException異常的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程

    Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程

    這篇文章主要為大家詳細(xì)介紹了Eclipse下基于Java的OpenCV開發(fā)環(huán)境配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評(píng)論

越西县| 东阳市| 乌苏市| 淄博市| 德钦县| 江口县| 自治县| 崇州市| 宜都市| 壶关县| 浠水县| 错那县| 顺昌县| 南陵县| 盈江县| 辽中县| 哈尔滨市| 泾源县| 星子县| 犍为县| 敦化市| 新蔡县| 甘肃省| 宕昌县| 西乌珠穆沁旗| 米脂县| 庄河市| 含山县| 镇江市| 江城| 务川| 平安县| 大姚县| 湘潭市| 胶州市| 科尔| 慈利县| 平阴县| 慈溪市| 宜川县| 洛宁县|