实战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


相关文章
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
180 1
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
前端开发
杨校老师之基于SSM开发的校园点餐配送系统
杨校老师之基于SSM开发的校园点餐配送系统
206 0
杨校老师之基于SSM开发的校园点餐配送系统
|
Web App开发 前端开发 JavaScript
基于ssm+layui开发汽车租赁管理系统
基于ssm+layui开发汽车租赁管理系统
220 0
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的二手交易平台设计与开发附带文章和源代码部署视频讲解等
191 0
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
存储 Java 关系型数据库
ssm026校园美食交流系统(文档+源码)_kaic
本文介绍了基于Java语言和MySQL数据库的校园美食交流系统的设计与实现。该系统采用B/S架构和SSM框架,旨在提高校园美食信息管理的效率与便捷性。主要内容包括:系统的开发背景、目的及内容;对Java技术、MySQL数据库、B/S结构和SSM框架的介绍;系统分析部分涵盖可行性分析、性能分析和功能需求分析;最后详细描述了系统各功能模块的具体实现,如登录、管理员功能(美食分类管理、用户管理等)和前台首页功能。通过此系统,管理员可以高效管理美食信息,用户也能方便地获取和分享美食资讯,从而提升校园美食交流的管理水平和用户体验。
|
Java 关系型数据库 MySQL
weixin050高校体育场管理系统+ssm(文档+源码)_kaic
本文针对高校体育场管理系统的开发与实现进行详细介绍。随着经济快速发展,人们对手机软件需求增加,高校体育场管理系统应运而生。系统采用JAVA技术、Mysql数据库和SSM框架等成熟技术,通过分析功能需求、可行性及性能,设计出包含管理员、用户和学生角色的功能模块。系统实现用户注册登录、信息管理等功能,简化传统手工统计模式,提高管理效率,满足用户对信息获取的及时性与准确性需求。
weixin050高校体育场管理系统+ssm(文档+源码)_kaic
|
前端开发 Java 关系型数据库
基于ssm的社区物业管理系统,附源码+数据库+论文+任务书
社区物业管理系统采用B/S架构,基于Java语言开发,使用MySQL数据库。系统涵盖个人中心、用户管理、楼盘管理、收费管理、停车登记、报修与投诉管理等功能模块,方便管理员及用户操作。前端采用Vue、HTML、JavaScript等技术,后端使用SSM框架。系统支持远程安装调试,确保顺利运行。提供演示视频和详细文档截图,帮助用户快速上手。
568 17

热门文章

最新文章