Java 实战项目锤炼之网上商城系统的实现流程

作者:qq_1334611189 时间:2022-06-26 17:21:47 

一、项目简述(+需求文档+PPT)

功能: 主页显示热销商品;所有商品展示,可进行商品搜索;点 击商品进入商品详情页,显示库存,具有立即购买和加入 购物车功能,可增减购买商品数量亦可手动输入(同时验证 库存),热销商品展示。立即购买进入确认订单页面,可选 择已经添加的地址,亦可新增地址。(同时验证库存),可 选择购买哪些商品,可删除不需要的商品。点击结算进入 确认订单页面,确认后提交订单,订单重复提交给予响 应,库存不足或商品下架给予响应。后台管理:(修改密码 等),商品管理(商品批量添加、上下架、库存维护等), 订单管理。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe ( IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP + C3P0+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload等等。

Java 实战项目锤炼之网上商城系统的实现流程

Java 实战项目锤炼之网上商城系统的实现流程

Java 实战项目锤炼之网上商城系统的实现流程

Java 实战项目锤炼之网上商城系统的实现流程

后台管理-主页操作代码:


/**
* 后台管理-主页
*/
@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;

/**
    * 转到后台管理-主页
    * @param session session对象
    * @param map 前台传入的Map
    * @return 响应数据
    * @throws ParseException 转换异常
    */
   @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("获取统计信息");
       //产品总数
       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));
       map.put("productTotal", productTotal);
       map.put("userTotal", userTotal);
       map.put("orderTotal", orderTotal);

logger.info("转到后台管理-主页");
       return "admin/homePage";
   }

/**
    * 转到后台管理-主页(ajax方式)
    * @param session session对象
    * @param map 前台传入的Map
    * @return 响应数据
    * @throws ParseException 转换异常
    */
   @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("获取统计信息");
       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("转到后台管理-主页-ajax方式");
       return "admin/homeManagePage";
   }

/**
    * 按日期查询图表数据(ajax方式)
    * @param beginDate 开始日期
    * @param endDate 结束日期
    * @return 响应数据
    * @throws ParseException 转换异常
    */
   @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) {
           //转换日期格式
           SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
           return getChartData(simpleDateFormat.parse(beginDate), simpleDateFormat.parse(endDate),7).toJSONString();
       } else {
           return getChartData(null, null,7).toJSONString();
       }
   }

/**
    * 按日期获取图表数据
    * @param beginDate 开始日期
    * @param endDate 结束日期
    * @param days 天数
    * @return 图表数据的JSON对象
    * @throws ParseException 转换异常
    */
   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);
       //如果没有指定开始和结束日期
       if (beginDate == null || endDate == null) {
           //指定一周前的日期为开始日期
           Calendar cal = Calendar.getInstance();
           cal.add(Calendar.DATE, 1-days);
           beginDate = time.parse(time.format(cal.getTime()));
           //指定当前日期为结束日期
           cal = Calendar.getInstance();
           endDate = cal.getTime();
       } else {
           beginDate = time.parse(time.format(beginDate));
           endDate = timeSpecial.parse(time.format(endDate) + " 23:59:59");
       }
       logger.info("根据订单状态分类");
       //未付款订单数统计数组
       int[] orderUnpaidArray = new int[7];
       //未发货订单数统计叔祖
       int[] orderNotShippedArray = new int[7];
       //未确认订单数统计数组
       int[] orderUnconfirmedArray = new int[7];
       //交易成功订单数统计数组
       int[] orderSuccessArray = new int[7];
       //总交易订单数统计数组
       int[] orderTotalArray = new int[7];
       logger.info("从数据库中获取统计的订单集合数据");
       List<OrderGroup> orderGroupList = productOrderService.getTotalByDate(beginDate, endDate);
       //初始化日期数组
       JSONArray dateStr = new JSONArray(days);
       //按指定的天数进行循环
       for (int i = 0; i < days; i++) {
           //格式化日期串(MM/dd)并放入日期数组中
           Calendar cal = Calendar.getInstance();
           cal.setTime(beginDate);
           cal.add(Calendar.DATE, i);
           String formatDate = time2.format(cal.getTime());
           dateStr.add(formatDate);
           //该天的订单总数
           int orderCount = 0;
           //循环订单集合数据的结果集
           for(int j = 0; j < orderGroupList.size(); j++){
               OrderGroup orderGroup = orderGroupList.get(j);
               //如果该订单日期与当前日期一致
               if(orderGroup.getProductOrder_pay_date().equals(formatDate)){
                   //从结果集中移除数据
                   orderGroupList.remove(j);
                   //根据订单状态将统计结果存入对应的订单状态数组中
                   switch (orderGroup.getProductOrder_status()) {
                       case 0:
                           //未付款订单
                           orderUnpaidArray[i] = orderGroup.getProductOrder_count();
                           break;
                       case 1:
                           //未发货订单
                           orderNotShippedArray[i] = orderGroup.getProductOrder_count();
                           break;
                       case 2:
                           //未确认订单
                           orderUnconfirmedArray[i] = orderGroup.getProductOrder_count();
                           break;
                       case 3:
                           //交易成功订单
                           orderSuccessArray[i] = orderGroup.getProductOrder_count();
                           break;
                   }
                   //累加当前日期的订单总数
                   orderCount += orderGroup.getProductOrder_count();
               }
           }
           //将统计的订单总数存入总交易订单数统计数组
           orderTotalArray[i] = orderCount;
       }
       logger.info("返回结果集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;

//转到前台天猫-主页
   @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("获取产品分类列表");
       List<Category> categoryList = categoryService.getList(null,null);
       logger.info("获取每个分类下的产品列表");
      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("获取促销产品列表");
       List<Product> specialProductList = productService.getList(
               null, new Byte[]{2}, null, new PageUtil(0, 6)
       );
       map.put("specialProductList", specialProductList);

logger.info("转到前台主页");
       return "fore/homePage";
   }

//转到前台天猫-错误页
   @RequestMapping(value = "error", method = RequestMethod.GET)
   public String goToErrorPage() {
       return "fore/errorPage";
   }

//获取主页分类下产品信息-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为{}的产品标题数据", 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++) {
           //如果临时集合中产品数达到5个,加入到产品二维集合中,并重新实例化临时集合
           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();
   }
}

来源:https://blog.csdn.net/m0_59687645/article/details/121224704

标签:Java,网上商城系统,实战项目
0
投稿

猜你喜欢

  • Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解

    2023-11-23 11:00:58
  • Java Mybatis框架增删查改与核心配置详解流程与用法

    2022-07-08 10:47:20
  • Java并发编程之JUC并发核心AQS同步队列原理剖析

    2023-01-15 15:14:37
  • 解决本机安装的JDK8,启动IDEA2019没反应的问题(开发工具)

    2023-08-12 23:29:11
  • android JSON解析数据 android解析天气预报

    2022-01-16 03:33:53
  • Kotlin原理详析之拓展函数

    2023-04-10 19:54:08
  • 详解spring boot集成RabbitMQ

    2022-06-25 17:56:07
  • maven引入本地jar包运行报错java.lang.NoClassDefFoundError解决

    2022-10-15 01:42:24
  • Java Springboot如何基于图片生成下载链接

    2023-05-19 19:57:32
  • java并发编程专题(六)----浅析(JUC)Semaphore

    2023-07-27 23:30:28
  • MAC下如何设置JDK环境变量

    2023-12-20 16:05:24
  • java json 省市级联实例代码

    2021-11-13 18:50:35
  • 23种设计模式(19)java责任链模式

    2021-10-19 15:04:00
  • Java全面细致讲解Cookie与Session及kaptcha验证码的使用

    2021-09-03 23:10:56
  • 详解SpringBoot中如何使用布隆过滤器

    2023-11-10 17:43:06
  • Java枚举类使用Lombok方式

    2022-06-28 22:07:02
  • C#抓取网络图片保存到本地的实现方法

    2023-06-28 11:35:13
  • Java实现考试系统

    2023-11-18 04:15:03
  • Java代理模式与动态代理之间的关系以及概念

    2022-03-15 18:05:34
  • SpringBoot整合Zookeeper详细教程

    2022-07-24 11:33:09
  • asp之家 软件编程 m.aspxhome.com