zoukankan      html  css  js  c++  java
  • 校园商铺-4店铺注册功能模块-5店铺注册之Service层的实现

    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,事物就无法终止和回滚
    package com.csj2018.o2o.exceptions;
    
    public class ShopOperationException extends RuntimeException{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -4379928435508967105L;
    	public ShopOperationException(String msg) {
    		super(msg);
    	}
    }
    

    3. 创建接口的实现类

    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.在把文件夹的地址更新到数据里面去
  • 相关阅读:
    index of rmvb mp3 rm突破站点入口下载
    人类智商一般在多少左右?爱因斯坦的智商是多少?
    UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点
    ProgressDialog使用总结
    Js中的多条件排序,多列排序
    腾讯2014年实习生招聘笔试面试经历
    周根项《一分钟速算》全集播放&amp;下载地址
    中国大推力矢量发动机WS15 跨入 世界先进水平!
    探索Android中的Parcel机制(上)
    ORACLE uuid自己主动生成主键
  • 原文地址:https://www.cnblogs.com/csj2018/p/11585423.html
Copyright © 2011-2022 走看看