1. 创建接口

ShopService.java

package com.csj2018.o2o.service;

import java.io.File;
import com.csj2018.o2o.entity.Shop;
import com.csj2018.o2o.dto.ShopExecution;
public interface ShopService {
ShopExecution addShop(Shop shop,File shopImg);
}

2. 创建店铺操作异常类

为什么会用RuntimeException,而不是Exception呢?

当我们的程序仅当跑出RuntimeException或者继承RuntimeException的异常类时,事物才得以终止并回滚。如果是Exception,事物就无法终止和回滚
```#java
package com.csj2018.o2o.exceptions;

public class ShopOperationException extends RuntimeException{

/**

*

*/

private static final long serialVersionUID = -4379928435508967105L;

public ShopOperationException(String msg) {

super(msg);

}

}

##    3. 创建接口的实现类
```#java
package com.csj2018.o2o.service.impl; import java.io.File;
import java.util.Date; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.csj2018.o2o.dao.ShopDao;
import com.csj2018.o2o.dto.ShopExecution;
import com.csj2018.o2o.entity.Shop;
import com.csj2018.o2o.enums.ShopStateEnum;
import com.csj2018.o2o.execptions.ShopOperationException;
import com.csj2018.o2o.service.ShopService;
import com.csj2018.o2o.util.ImageUtil;
import com.csj2018.o2o.util.PathUtil; @Service
public class ShopServiceImpl implements ShopService {
@Autowired
private ShopDao shopDao;
@Override
@Transactional
public ShopExecution addShop(Shop shop,File shopImg) {
//控制判断,shop是不是包含必须的一些值
if(shop == null) {
return new ShopExecution(ShopStateEnum.NUll_SHOP);
}
//增加对Shop其他引入类非空的判断
try {
//给店铺信息赋初始值
shop.setEnableStatus(0);
shop.setCreateTime(new Date());
shop.setLastEditTime(new Date());
//添加店铺信息
int effectedNum = shopDao.insertShop(shop);
if(effectedNum <= 0) {
throw new ShopOperationException("店铺创建失败");
}else {
if(shopImg != null) {
//存储图片
try {
addShopImage(shop,shopImg);
}catch (Exception e) {
throw new ShopOperationException("addShopImg error:"+e.getMessage());
}
//更新店铺的图片信息
effectedNum = shopDao.updateShop(shop);
if(effectedNum <= 0) {
throw new ShopOperationException("更新图片地址失败");
}
}
}
}catch(Exception e) {
throw new ShopOperationException("addShop error:"+e.getMessage());
}
return new ShopExecution(ShopStateEnum.CHECK,shop);
}
private void addShopImage(Shop shop, File shopImg) {
// 获取shop图片目录的相对路径
String dest = PathUtil.getShopImagePath(shop.getShopId());
String shopImgAddr = ImageUtil.generateThumbnail(shopImg, dest);
shop.setShopImg(shopImgAddr);
}
}

4. 创建单元测试类

package com.csj2018.o2o.service;

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.util.Date; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.csj2018.o2o.BaseTest;
import com.csj2018.o2o.dto.ShopExecution;
import com.csj2018.o2o.entity.Area;
import com.csj2018.o2o.entity.PersonInfo;
import com.csj2018.o2o.entity.Shop;
import com.csj2018.o2o.entity.ShopCategory;
import com.csj2018.o2o.enums.ShopStateEnum; public class ShopServiceTest extends BaseTest{
@Autowired
private ShopService shopService; @Test
public void testAddShop() {
Shop shop = new Shop(); PersonInfo owner = new PersonInfo();
Area area = new Area();
ShopCategory shopCategory = new ShopCategory();
owner.setUserId(1L);
area.setAreaId(2);
shopCategory.setShopCategoryId(1L); shop.setOwner(owner);
shop.setArea(area);
shop.setShopCategory(shopCategory);
shop.setShopName("测试de店铺1");
shop.setShopDesc("店铺描述1");
shop.setShopAddr("测试路1号1");
shop.setPhone("1234567891");
shop.setPriority(5);
shop.setCreateTime(new Date());
shop.setEnableStatus(ShopStateEnum.CHECK.getState());
shop.setAdvice("审核中");
File shopImg = new File("/Users/chenshanju/Downloads/cat.jpg");
ShopExecution se = shopService.addShop(shop, shopImg);
assertEquals(ShopStateEnum.CHECK.getState(), se.getState());
}
}


## 5. 总结
* 1.需要将店铺的信息插入到数据库当中
* 2.返回店铺的id
* 3.通过店铺id去创建出存储图片的文件夹,在文件夹下处理图片
* 4.在把文件夹的地址更新到数据里面去

最新文章

  1. PHP 进程间通信——消息队列(msg_queue)
  2. ATPCS和AAPCS
  3. QT 网络编程一
  4. javascript方法 call()和apply()的用法
  5. CRB and String
  6. javascript学习(二) DOM操作HTML
  7. linux telnet服务安装与配置
  8. Eclipse 使用说明
  9. 原码、反码、补码的正(nao)确(can)打开方式
  10. Lambda的使用与实战
  11. 有关Java 锁原理
  12. OO第9-11作业总结
  13. Docker容器启动lnmp环境下的mysql服务时报&quot;MySQL server PID file could not be found&quot;错误解决办法
  14. php 获取压缩包名
  15. python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)
  16. C++ 冒泡排序、选择排序、快速排序
  17. SQL 游标 Cursor 基本用法
  18. tensorflow没有代码提示的问题
  19. javascript 的MD5代码备份,跟java互通
  20. shell脚本练习题-&gt;1

热门文章

  1. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题
  2. vue-router 使用二级路由去实现子组件的显示和隐藏
  3. (Struts2学习系列一)MyEclipse创建第一个struts2项目
  4. 换盘符cd的用法
  5. 使用net模块创建tcp服务器
  6. 修改ie版本为Edge
  7. leetcood学习笔记-226- 翻转二叉树
  8. R语言 运算符
  9. 【Codeforces Round #429 (Div. 2) B】 Godsend
  10. [Nowcoder] 中位数