实战SSM_O2O商铺_18【商铺编辑】Service层开发

简介: 实战SSM_O2O商铺_18【商铺编辑】Service层开发

概述

既然是商铺编辑,肯定要根据入参shopId获取shop信息,然后用户在客户端修改店铺信息后,提交到后台更新商铺信息。

所以同样的对于Service层来讲 有2个方法 (DAO层也有对应的两个方法,只不过updateShop我们复用了)

  • Shop getShopById(long shopId);
  • ShopExecution modifyShop(Shop shop, InputStream shopFileInputStream, String fileName) throws ShopOperationException;

结构


Service层接口及其实现类

com.artisan.o2o.service.ShopService 接口新增两个接口方法如下

/**
   * 
   * 
   * @Title: getShopById
   * 
   * @Description: 根据shopId查询商铺
   * 
   * @param shopId
   * @return
   * 
   * @return: Shop
   */
  Shop getShopById(long shopId);
  /**
   * 
   * 
   * @Title: modifyShop
   * 
   * @Description: 编辑商铺信息
   * 
   * @param shop
   * @param shopFileInputStream
   * @param fileName
   * @return
   * 
   * @return: ShopExecution
   */
  ShopExecution modifyShop(Shop shop, InputStream shopFileInputStream, String fileName) throws ShopOperationException;

com.artisan.o2o.service.impl.ShopServiceImpl.java实现类

@Override
  public Shop getShopById(long shopId) {
    return shopDao.selectShopById(shopId);
  }
  @Override
  @Transactional
  public ShopExecution modifyShop(Shop shop, InputStream shopFileInputStream, String fileName) throws ShopOperationException {
    if (shop == null || shop.getShopId() == null) {
      return new ShopExecution(ShopStateEnum.NULL_SHOP_INFO);
    }else{
      try {
        // 1. 判断是否需要处理图片
        if (shopFileInputStream != null && fileName != null && !"".equals(fileName)) {
          // 1.1 删除掉旧的图片
          // 查询入参shop对应数据库表中的shopImg路径
          Shop tempShop = shopDao.selectShopById(shop.getShopId());
          if (tempShop != null) {
            // 删除就的缩略图
            ImageUtil.deleteStorePath(tempShop.getShopImg());
          }
          // 1.2 用新的图片生成缩略图
          addShopImg(shop, shopFileInputStream, fileName);
        }
        // 2. 更新店铺信息
        // 2.1 更新一些必要属性
        shop.setLastEditTime(new Date());
        // 2.2 更新店铺
        int effectedNum = shopDao.updateShop(shop);
        if (effectedNum <= 0) {
          throw new ShopOperationException(ShopStateEnum.INNER_ERROR.getStateInfo());
        }
        return new ShopExecution(ShopStateEnum.SUCCESS, shop);
      } catch (Exception e) {
        e.printStackTrace();
        throw new ShopOperationException("modify shop error:" + e.getMessage());
      }
    }
  }

因为用户有可能更新图片,其中为了删除旧的文件或者目录,com.artisan.o2o.util.ImageUtil.java 新增了工具类

/**
   * 
   * 
   * @Title: deleteStorePath
   * 
   * @Description: 判断storePath是否为目录,为目录的话删掉目录下的所有文件,否则删掉文件
   * 
   * @param storePath
   * 
   * @return: void
   */
  public static void deleteStorePath(String storePath) {
    File fileOrMenu = new File(FileUtil.getImgBasePath() + storePath);
    if (fileOrMenu != null) {
      if (fileOrMenu.isDirectory()) {
        File[] files = fileOrMenu.listFiles();
        for (int i = 0; i < files.length; i++) {
          files[i].delete();
        }
      }
      fileOrMenu.delete();
    }
  }

单元测试

@Test
  public void testModifyShop() {
    Shop shop = new Shop();
    Area area = new Area();
    ShopCategory shopCategory = new ShopCategory();
    shop.setShopId(28L);
    area.setAreaId(2);
    shopCategory.setShopCategoryId(2L);
    shop.setArea(area);
    shop.setShopCategory(shopCategory);
    shop.setShopName("Modify咖啡店");
    shop.setShopDesc("Modify小工匠的咖啡店");
    shop.setShopAddr("Modify-NanJing");
    shop.setPhone("123456");
    shop.setPriority(78);
    File shopFile = new File("D:/o2o/artisan.jpg");
    ShopExecution se = null;
    InputStream ins = null;
    try {
      ins = new FileInputStream(shopFile);
      se = shopService.modifyShop(shop, ins, shopFile.getName());
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    Assert.assertEquals(ShopStateEnum.SUCCESS.getState(), se.getState());
  }

运行符合预期。

控制台日志

Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@3fed2870] will be managed by Spring
==>  Preparing: SELECT s.shop_id, s.shop_name, s.shop_desc, s.shop_addr, s.phone, s.shop_img, s.priority, s.create_time, s.last_edit_time, s.enable_status, s.advice, a.area_id, a.area_name, sc.shop_category_id, sc.shop_category_name FROM tb_shop s, tb_area a, tb_shop_category sc WHERE s.area_id = a.area_id AND s.shop_category_id = sc.shop_category_id AND s.shop_id = ? 
==> Parameters: 28(Long)
<==    Columns: shop_id, shop_name, shop_desc, shop_addr, phone, shop_img, priority, create_time, last_edit_time, enable_status, advice, area_id, area_name, shop_category_id, shop_category_name
<==        Row: 28, Modify咖啡店, Modify小工匠的咖啡店, Modify-NanJing, 123456, \upload\item\shopImage\28\2018060301211217157.jpg, 78, 2018-05-28 23:13:37.0, 2018-06-03 01:21:14.0, 0, null, 1, 北京, 1, 咖啡奶茶
<==      Total: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6] from current transaction
==>  Preparing: update tb_shop SET shop_name=?, shop_desc=?, shop_addr=?, phone=?, shop_img=?, priority=?, last_edit_time=?, area_id=?, shop_category_id=? where shop_id = ? 
==> Parameters: Modify咖啡店(String), Modify小工匠的咖啡店(String), Modify-NanJing(String), 123456(String), \upload\item\shopImage\28\2018060301223045572.jpg(String), 78(Integer), 2018-06-03 01:22:31.968(Timestamp), 2(Integer), 2(Long), 28(Long)
<==    Updates: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@61544ae6]

库表字段正常

旧的图片被删除,新的图片OK


Github地址

代码地址: https://github.com/yangshangwei/o2o


相关文章
|
9月前
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
|
9月前
|
前端开发
杨校老师之基于SSM开发的校园点餐配送系统
杨校老师之基于SSM开发的校园点餐配送系统
83 0
杨校老师之基于SSM开发的校园点餐配送系统
|
9月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的商铺租赁管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的商铺租赁管理系统附带文章和源代码部署视频讲解等
93 7
|
9月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的文化遗产的保护与旅游开发附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的文化遗产的保护与旅游开发附带文章和源代码部署视频讲解等
63 1
|
9月前
|
Web App开发 前端开发 JavaScript
基于ssm+layui开发汽车租赁管理系统
基于ssm+layui开发汽车租赁管理系统
63 0
|
9月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
54 0
|
17天前
|
存储 Java 关系型数据库
ssm026校园美食交流系统(文档+源码)_kaic
本文介绍了基于Java语言和MySQL数据库的校园美食交流系统的设计与实现。该系统采用B/S架构和SSM框架,旨在提高校园美食信息管理的效率与便捷性。主要内容包括:系统的开发背景、目的及内容;对Java技术、MySQL数据库、B/S结构和SSM框架的介绍;系统分析部分涵盖可行性分析、性能分析和功能需求分析;最后详细描述了系统各功能模块的具体实现,如登录、管理员功能(美食分类管理、用户管理等)和前台首页功能。通过此系统,管理员可以高效管理美食信息,用户也能方便地获取和分享美食资讯,从而提升校园美食交流的管理水平和用户体验。
|
10天前
|
存储 Java 关系型数据库
ssm064农产品仓库管理系统系统(文档+源码)_kaic
农产品仓库管理系统基于现代经济快速发展和信息化技术的升级,采用SSM框架、Java语言及Mysql数据库开发。系统旨在帮助管理者高效处理大量数据信息,提升事务处理效率,实现数据管理的科学化与规范化。该系统涵盖物资基础数据管理、出入库订单管理等功能,界面简洁美观,符合用户操作习惯,并提供数据安全解决方案,确保信息的安全性和可靠性。通过自动化和集中处理,系统显著提高了仓库管理的效率和准确性。
|
7月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
6月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统