GoodsService.java 3.4 KB
package com.w1hd.zzhnc.service;

import java.sql.Date;
import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.testng.util.Strings;

import com.google.common.collect.Lists;
import com.w1hd.zzhnc.dao.GoodsDao;
import com.w1hd.zzhnc.model.Goods;
import com.w1hd.zzhnc.util.PageResults;
import com.w1hd.zzhnc.util.RedisUtil;

import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.entity.Example.Criteria;

@Service
public class GoodsService {

	@Autowired
	GoodsDao goodsDao;

	final String GOODSID_ = RedisUtil.PROJECTNAME.concat("_").concat("goods");

	public List<Goods> getHomeData() {
		Example ex = new Example(Goods.class);
		ex.createCriteria().andEqualTo("deleted", false).andEqualTo("isHome", true);
		ex.setOrderByClause("pageViews desc");
		RowBounds r = new RowBounds(0, 10);
		return goodsDao.selectByExample(ex);
	}

	@SuppressWarnings("unchecked")
	public Goods update(Goods goods) {
		goods.setUpdateTime(new Date(System.currentTimeMillis()));
		if (goods.getId() == null || goods.getId() == 0) {
			goods.setCreatetime(new Date(System.currentTimeMillis()));
			goods.setDeleted(false);
			goodsDao.insert(goods);
		} else {
			if (goods.getCreatetime() == null) {
				goods.setCreatetime(new java.util.Date());
			}
			goods.setDeleted(false);
			Goods old = goods(goods.getId()).getRows().get(0);
			if(old!=null) {
				goods.setPageViews(old.getPageViews() + 1);
			}
			redisTemplate.delete(GOODSID_ + goods.getId());
			goodsDao.updateByPrimaryKey(goods);
		}
		return goods;
	}

	@Autowired
	RedisTemplate redisTemplate;

	public PageResults<Goods> seacrh(Integer id, String key, Integer sellerId, Integer page, Integer size) {
		Example ex = new Example(Goods.class);
		Criteria c = ex.createCriteria();
		if (id != null && id > 0) {
			return goods(id);
		} else {
			if (!Strings.isNullOrEmpty(key)) {
				if ("副食".equals(key) || "小商品".equals(key) || "服装".equals(key) || "汽摩配件".equals(key)) {
					c.andEqualTo("categoryName", key);
				} else {
					c.andCondition(" (description like \"%" + key + "%\" or name like \"%" + key + "%\")");
				}

			}
			if (sellerId != null && sellerId > 0) {
				c.andEqualTo("sellerId", sellerId);
			}
		}

		c.andEqualTo("deleted", false);
		RowBounds row = new RowBounds((page - 1) * size, size);
		List<Goods> list = goodsDao.selectByExampleAndRowBounds(ex, row);
		int count = goodsDao.selectCountByExample(ex);
		PageResults<Goods> pageResults = new PageResults<>();
		pageResults.setTotal(count);
		pageResults.setPage(page);
		pageResults.setPageSize(size);
		pageResults.setRows(list);
		return pageResults;
	}

	@SuppressWarnings("unchecked")
	public PageResults<Goods> goods(Integer id) {
		PageResults<Goods> pageResults = new PageResults<>();
		pageResults.setTotal(1);
		pageResults.setPage(1);
		pageResults.setPageSize(10);
		List<Goods> list = Lists.newArrayList();
		Goods goods = (Goods) redisTemplate.opsForValue().get(GOODSID_ + id);
		if(goods==null) {
			goods = goodsDao.selectByPrimaryKey(id);
		}
		goods.setPageViews(goods.getPageViews() + 1);
		redisTemplate.opsForValue().set(GOODSID_ + id, goods);
		list.add(goods);
		pageResults.setRows(list);
		return pageResults;
	}

	public Object delete(Integer id) {
		return goodsDao.deleteByPrimaryKey(id) > 0;
	}

}