• 校园商铺-6店铺编辑列表和列表功能-6店铺列表展示之Service层的实现


    1. Service层

    为什么返回shopExecution?
    原因:需要将这个shopList还有它的count整合在一起返回。而shopExecution正好满足了我们的条件。

    package com.csj2018.o2o.service;
    
    import java.io.InputStream;
    
    import com.csj2018.o2o.entity.Shop;
    import com.csj2018.o2o.exceptions.ShopOperationException;
    import com.csj2018.o2o.dto.ShopExecution;
    public interface ShopService {
    	/**
    	 * 根据shopCondition分页返回相应店铺列表
    	 * @param shopCondition
    	 * @param pageIndex
    	 * @param pageSize
    	 * @return
    	 */
    	public ShopExecution getShopList(Shop shopCondition,int pageIndex,int pageSize);
    	/**
    	 * 通过店铺ID获取店铺信息
    	 * @param shopId
    	 * @return
    	 */
    	Shop getByShopId(long shopId);
    	/**
    	 * 更新店铺信息,包括对图片的处理
    	 * @param shop
    	 * @param shopImgInputStream
    	 * @param fileName
    	 * @return
    	 */
    	ShopExecution modifyShop(Shop shop,InputStream shopImgInputStream,String fileName) throws ShopOperationException;
    	/**
    	 * 注册店铺信息,包括图片处理
    	 * @param shop
    	 * @param shopImgInputStream
    	 * @param fileName
    	 * @return
    	 */
    	ShopExecution addShop(Shop shop,InputStream shopImgInputStream,String fileName) throws ShopOperationException;
    }
    

    2. Service实现类

    2.1 参数转换

    Dao层第2个参数是rowIndex,而Service是pageIndex。因为前端只认页数,而Dao层只认行数。因此这里需要做一个转换。
    编写一个工具类

    package com.csj2018.o2o.util;
    
    public class PageCalculator {
    	public static int calculatorRowIndex(int pageIndex,int pageSize) {
    		return (pageIndex > 0)?(pageIndex - 1) * pageSize:0;    
    
    //同		if(pageIndex>0) {
    //			return pageIndex - 1;
    //		}else {
    //			return 0;
    //		}
    	}
    }
    

    当pageIndex为0和1时,rowIndex为0

    2.2 实现类

    package com.csj2018.o2o.service.impl;
    
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    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.exceptions.ShopOperationException;
    import com.csj2018.o2o.service.ShopService;
    import com.csj2018.o2o.util.ImageUtil;
    import com.csj2018.o2o.util.PageCalculator;
    import com.csj2018.o2o.util.PathUtil;
    
    @Service
    public class ShopServiceImpl implements ShopService {
    	private Logger logger = LoggerFactory.getLogger(ShopServiceImpl.class);
    
    	@Autowired
    	private ShopDao shopDao;
    	@Override
    	public ShopExecution getShopList(Shop shopCondition,int pageIndex,int pageSize) {
    		int rowIndex = PageCalculator.calculatorRowIndex(pageIndex, pageSize);
    		List<Shop> shopList = shopDao.queryShopList(shopCondition, rowIndex, pageSize);
    		int count = shopDao.queryShopCount(shopCondition);
    		ShopExecution se = new ShopExecution();
    		if(shopList != null) {
    			se.setShopList(shopList);
    			se.setCount(count);
    		}else {
    			se.setState(ShopStateEnum.INNER_ERROR.getState());
    		}
    		return se;
    	}
    	
    	@Override
    	@Transactional
    	public ShopExecution addShop(Shop shop, InputStream shopImgInputStream, String fileName) {
    
    		// 控制判断,shop是不是包含必需的值
    		if (shop == null) {
    			logger.warn("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);
    			logger.warn("添加结果:" + effectedNum + "shopId:" + shop.getShopId());
    			if (effectedNum <= 0) {
    				throw new ShopOperationException("店铺创建失败");
    			} else {
    				if (shopImgInputStream != null) {
    
    					// 存储图片
    					try {
    						addShopImage(shop, shopImgInputStream, fileName);
    					} 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, InputStream shopImg, String fileName) {
    		// 获取shop图片目录的相对路径
    		String dest = PathUtil.getShopImagePath(shop.getShopId());
    		String shopImgAddr = ImageUtil.generateThumbnail(shopImg, fileName, dest);
    		shop.setShopImg(shopImgAddr);
    	}
    
    	@Override
    	public Shop getByShopId(long shopId) {
    		return shopDao.queryByShopId(shopId);
    	}
    
    	@Override
    	public ShopExecution modifyShop(Shop shop, InputStream shopImgInputStream, String fileName)
    			throws ShopOperationException {
    		if (shop == null || shop.getShopId() == null) {
    			return new ShopExecution(ShopStateEnum.NUll_SHOP);
    		} else {
    			try {
    				// 1.判断是否需要处理图片
    				if (shopImgInputStream != null && fileName != null && !"".equals(fileName)) {
    					Shop tempShop = shopDao.queryByShopId(shop.getShopId());
    					if (tempShop.getShopImg() != null) {
    						//编写工具类,删除图片信息 
    						ImageUtil.deleteFileOfPath(tempShop.getShopImg());
    					}
    					addShopImage(shop, shopImgInputStream, fileName);
    				}
    				// 2.更新店铺信息
    				shop.setLastEditTime(new Date());
    				int effectedNum = shopDao.updateShop(shop);
    				if (effectedNum <= 0) {
    					return new ShopExecution(ShopStateEnum.INNER_ERROR);
    				} else {
    					shop = shopDao.queryByShopId(shop.getShopId());
    					return new ShopExecution(ShopStateEnum.SUCCESS, shop);
    				}
    			} catch (Exception e) {
    				throw new ShopOperationException("modifyShop error:" + e.getMessage());
    			}
    		}
    	}
    }
    

    3. 单元测试

    package com.csj2018.o2o.service;
    
    import static org.junit.Assert.assertEquals;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.util.Date;
    
    import org.junit.Ignore;
    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;
    import com.csj2018.o2o.exceptions.ShopOperationException;
    
    
    public class ShopServiceTest extends BaseTest{
    	@Autowired
    	private ShopService shopService;
    	@Test
    	public void testGetShopList() {
    		Shop shopCondition = new Shop();
    		ShopCategory sc = new ShopCategory();
    		sc.setShopCategoryId(1L);
    		shopCondition.setShopCategory(sc);
    		ShopExecution se = shopService.getShopList(shopCondition, 1, 5);
    		System.out.println("店铺列表总数:"+se.getShopList().size());
    		System.out.println("店铺总数为:"+se.getCount());
    	}
    	
    	@Test
    	@Ignore
    	public void testModifyShop() throws ShopOperationException,FileNotFoundException{
    		Shop shop = new Shop();
    		shop.setShopId(1L);
    		shop.setShopName("修改后的店铺名称");
    //		File shopImg = new File("/Users/chenshanju/Downloads/liuchuanfeng.jpeg");
    		InputStream is = new FileInputStream("/Users/chenshanju/Downloads/liuchuanfeng.jpeg");
    		ShopExecution shopExecution = shopService.modifyShop(shop, is, "流川枫.jpeg");
    		System.out.println("新的图片地址:"+shopExecution.getShop().getShopImg());
    	}
    	@Test
    	@Ignore
    	public void testAddShop() throws FileNotFoundException {
    		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店铺4");
    		shop.setShopDesc("店铺描述4");
    		shop.setShopAddr("测试路4号1");
    		shop.setPhone("1234567892");
    		shop.setPriority(4);
    		shop.setCreateTime(new Date());
    		shop.setEnableStatus(ShopStateEnum.CHECK.getState());
    		shop.setAdvice("审核中");
    		File shopImg = new File("/Users/chenshanju/Downloads/cat.jpg");
    		InputStream is = new FileInputStream(shopImg);
    		ShopExecution se = shopService.addShop(shop, is,shopImg.getName());
    		assertEquals(ShopStateEnum.CHECK.getState(), se.getState());
    	}
    }
    
    
  • 相关阅读:
    C# 对MongoDB 进行增删改查的简单操作 (转)
    MongoDB 查询 (转) 仅限于C++开发
    STL 中 string 的使用
    360应用上传所需的准备
    HTML5应用 转 Android、Windows Phone 应用
    Cocos2d-x项目编译为Android应用——命令行方式
    Coding 初级教程(二)——上传已有项目
    【5】Android Service 与 AIDL
    使用类的成员函数来实现回调函数
    JavaScript 学习笔记
  • 原文地址:https://www.cnblogs.com/csj2018/p/12230517.html
Copyright © 2020-2023  润新知