package com.iotechn.unimall.app.api.favorite; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dobbinsoft.fw.core.exception.AppServiceException; import com.dobbinsoft.fw.core.exception.ServiceException; import com.dobbinsoft.fw.support.component.CacheComponent; import com.dobbinsoft.fw.support.model.Page; import com.iotechn.unimall.data.constant.CacheConst; import com.iotechn.unimall.data.domain.FavoriteDO; import com.iotechn.unimall.data.dto.FavoriteDTO; import com.iotechn.unimall.data.exception.ExceptionDefinition; import com.iotechn.unimall.data.mapper.FavoriteMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; /* @author kbq @date 2019/7/5 - 10:48 */ @Service public class FavoriteServiceImpl implements FavoriteService { @Autowired private FavoriteMapper favoriteMapper; @Autowired private CacheComponent cacheComponent; @Override @Transactional(rollbackFor = Exception.class) public String create(Long spuId, Long userId) throws ServiceException { //校验SPU是否存在 int count = favoriteMapper.selectCount(new QueryWrapper() .eq("user_id", userId) .eq("spu_id", spuId)); if (count > 0) { // 若收藏已存在,这可能是缓存与数据库不一致导致的,在正常的系统操作下不可能发生 cacheComponent.putHashRaw(CacheConst.PRT_USER_FAVORITE_HASH_BUCKET + spuId, "U" + userId, "1"); return "ok"; } Date now = new Date(); FavoriteDO favoriteDO = new FavoriteDO(); favoriteDO.setSpuId(spuId); favoriteDO.setUserId(userId); favoriteDO.setGmtCreate(now); favoriteDO.setGmtUpdate(now); cacheComponent.putHashRaw(CacheConst.PRT_USER_FAVORITE_HASH_BUCKET + spuId, "U" + userId, "1"); if (favoriteMapper.insert(favoriteDO) > 0) { return "ok"; } throw new AppServiceException(ExceptionDefinition.APP_UNKNOWN_EXCEPTION); } @Override @Transactional(rollbackFor = Exception.class) public String delete(Long spuId, Long userId) throws ServiceException { Integer num = favoriteMapper.delete( new QueryWrapper() .eq("spu_id", spuId) .eq("user_id", userId)); if (num > 0) { cacheComponent.delHashKey(CacheConst.PRT_USER_FAVORITE_HASH_BUCKET + spuId, "U" + userId); return "ok"; } throw new AppServiceException(ExceptionDefinition.PARAM_CHECK_FAILED); } @Override public Page list(Long userId, Integer pageNo, Integer pageSize) throws ServiceException { return favoriteMapper.getFavoritePage(Page.div(pageNo, pageSize, FavoriteDTO.class), userId); } @Override public FavoriteDTO getFavoriteById(Long userId, Long collectId, Long spuId) throws ServiceException { return favoriteMapper.getFavoriteById(userId, collectId, spuId); } @Override public Boolean getFavoriteBySpuId(Long spuId, Long userId) throws ServiceException { String hashRaw = cacheComponent.getHashRaw(CacheConst.PRT_USER_FAVORITE_HASH_BUCKET + spuId, "U" + userId); return hashRaw != null && "1".equals(hashRaw); } }