代码如下
ShopServiceImpl类
@Service
public class ShopServiceImpl implements ShopService {
@Autowired
TbShopMapper shopMapper;
@Transactional
@Override
public ShopExecution addShop(TbShop shop, File shopImg) {
//空值判断
if(shop == null) {
return new ShopExecution(ShopStateEnum.NULL_SHOP);
}
try {
//给店铺信息赋初始值
shop.setEnableStatus(0);
shop.setCreateTime(new Date());
shop.setLastEditTime(new Date());
//添加店铺信息
int effectedNum = shopMapper.insert(shop);
if(effectedNum <= 0) {
//用RuntimeException原因而不用Exception,因为用RuntimeException时遇到异常时会回滚,而Exception不会
throw new ShopOperationException("店铺创建失败");
}else {
if(shopImg != null) {
//存储图片
try {
addShopImg(shop,shopImg);
} catch (Exception e) {
throw new ShopOperationException("addShopImg error:"+e.getMessage()+shopImg.getName());
}
//更新图片地址
effectedNum = shopMapper.updateByPrimaryKey(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 addShopImg(TbShop shop, File shopImg) {
//获取shop图片目录的相对值路径
String dest = PathUtil.getShopImagePath(shop.getShopId());//"E:/project/upload/item/shop/" + shopId + "/"
String shopImgAddr = ImageUtil.generateThumbnail(shopImg, dest);//这里的工能看另一篇博客
shop.setShopImg(shopImgAddr);
}
}
注意:ShopExecution异常类是对RuntimeException的封装异常类,为了直观的观察异常类。