package com.imooc.service.impl; import com.github.pagehelper.PageHelper; import com.imooc.base.BaseInfoProperties; import com.imooc.bo.VlogBO; import com.imooc.enums.MessageEnum; import com.imooc.enums.YesOrNo; import com.imooc.mapper.MyLikedVlogMapper; import com.imooc.mapper.VlogMapper; import com.imooc.mapper.VlogMapperCustom; import com.imooc.pojo.MyLikedVlog; import com.imooc.pojo.Vlog; import com.imooc.service.FansService; import com.imooc.service.MsgService; import com.imooc.service.VlogService; import com.imooc.utils.PagedGridResult; import com.imooc.vo.IndexVlogVO; import org.apache.commons.lang3.StringUtils; import org.n3r.idworker.Sid; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tk.mybatis.mapper.entity.Example; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class VlogServiceImpl extends BaseInfoProperties implements VlogService { @Autowired private VlogMapper vlogMapper; @Autowired private VlogMapperCustom vlogMapperCustom; @Autowired private MyLikedVlogMapper myLikedVlogMapper; @Autowired private FansService fansService; @Autowired private MsgService msgService; @Autowired private Sid sid; @Transactional @Override public void updateVlogStatus(String fileId,Integer status,String reason) { Example example = new Example(Vlog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("fileId", fileId); Vlog pendingVlog = new Vlog(); pendingVlog.setStatus(status); pendingVlog.setReason(reason); vlogMapper.updateByExampleSelective(pendingVlog, example); } @Transactional @Override public void updateVlogFirstImg(String fileId,String url,String fileUrl) { Example example = new Example(Vlog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("fileId", fileId); Vlog pendingVlog = new Vlog(); pendingVlog.setFirstFrameImg(url); pendingVlog.setUrl(fileUrl); vlogMapper.updateByExampleSelective(pendingVlog, example); } @Transactional @Override public void createVlog(VlogBO vlogBO) { String vid = sid.nextShort(); Vlog vlog = new Vlog(); BeanUtils.copyProperties(vlogBO, vlog); vlog.setId(vid); vlog.setLikeCounts(0); vlog.setCommentsCounts(0); vlog.setStatus(0); vlog.setIsPrivate(YesOrNo.NO.type); vlog.setCreatedTime(new Date()); vlog.setUpdatedTime(new Date()); vlogMapper.insert(vlog); } @Override public PagedGridResult getIndexVlogList(String userId, String search, String cityCode, String status, Integer page, Integer pageSize) { PageHelper.startPage(page, pageSize); Map map = new HashMap<>(); if (StringUtils.isNotBlank(search)) { map.put("search", search); } if (StringUtils.isNotBlank(cityCode)) { map.put("cityCode", cityCode); } if (StringUtils.isNotBlank(status)) { map.put("status", status); } List list = vlogMapperCustom.getIndexVlogList(map); for (IndexVlogVO v : list) { String vlogerId = v.getVlogerId(); String vlogId = v.getVlogId(); if (StringUtils.isNotBlank(userId)) { // 用户是否关注该博主 boolean doIFollowVloger = fansService.queryDoIFollowVloger(userId, vlogerId); v.setDoIFollowVloger(doIFollowVloger); // 判断当前用户是否点赞过视频 v.setDoILikeThisVlog(doILikeVlog(userId, vlogId)); } // 获得当前视频被点赞过的总数 v.setLikeCounts(getVlogBeLikedCounts(vlogId)); // 评论数 v.setCommentsCounts(getVlogComment(vlogId)); } // return list; return setterPagedGrid(list, page); } private IndexVlogVO setterVO(IndexVlogVO v, String userId) { String vlogerId = v.getVlogerId(); String vlogId = v.getVlogId(); if (StringUtils.isNotBlank(userId)) { // 用户是否关注该博主 boolean doIFollowVloger = fansService.queryDoIFollowVloger(userId, vlogerId); v.setDoIFollowVloger(doIFollowVloger); // 判断当前用户是否点赞过视频 v.setDoILikeThisVlog(doILikeVlog(userId, vlogId)); } // 获得当前视频被点赞过的总数 v.setLikeCounts(getVlogBeLikedCounts(vlogId)); return v; } // @Override public Integer getVlogBeLikedCounts(String vlogId) { String countsStr = redis.get(REDIS_VLOG_BE_LIKED_COUNTS + ":" + vlogId); if (StringUtils.isBlank(countsStr)) { countsStr = "0"; } return Integer.valueOf(countsStr); } private Integer getVlogComment(String vlogId) { String countsStr = redis.get(REDIS_VLOG_COMMENT_COUNTS + ":" + vlogId); if (StringUtils.isBlank(countsStr)) { countsStr = "0"; } return Integer.valueOf(countsStr); } // private boolean doILikeVlog(String myId, String vlogId) { String doILike = redis.get(REDIS_USER_LIKE_VLOG + ":" + myId + ":" + vlogId); boolean isLike = false; if (StringUtils.isNotBlank(doILike) && doILike.equalsIgnoreCase("1")) { isLike = true; } return isLike; } // @Override public IndexVlogVO getVlogDetailById(String userId, String vlogId) { Map map = new HashMap<>(); map.put("vlogId", vlogId); List list = vlogMapperCustom.getVlogDetailById(map); if (list != null && list.size() > 0 && !list.isEmpty()) { IndexVlogVO vlogVO = list.get(0); // return vlogVO; return setterVO(vlogVO, userId); } return null; } @Transactional @Override public void changeToPrivateOrPublic(String userId, String vlogId, Integer yesOrNo) { Example example = new Example(Vlog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("id", vlogId); criteria.andEqualTo("vlogerId", userId); Vlog pendingVlog = new Vlog(); pendingVlog.setIsPrivate(yesOrNo); vlogMapper.updateByExampleSelective(pendingVlog, example); } @Override public PagedGridResult queryMyVlogList(String userId, Integer page, Integer pageSize, Integer yesOrNo) { Example example = new Example(Vlog.class); Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("vlogerId", userId); criteria.andEqualTo("isPrivate", yesOrNo); PageHelper.startPage(page, pageSize); List list = vlogMapper.selectByExample(example); return setterPagedGrid(list, page); } @Transactional @Override public void userLikeVlog(String userId, String vlogId) { String rid = sid.nextShort(); MyLikedVlog likedVlog = new MyLikedVlog(); likedVlog.setId(rid); likedVlog.setVlogId(vlogId); likedVlog.setUserId(userId); likedVlog.setCreatedTime(new Date()); myLikedVlogMapper.insert(likedVlog); // System.out.println(vlogId); // // Vlog vlog = new Vlog(); // vlog.setId(vlogId); // Vlog vlog1 = vlogMapper.selectOne(vlog); // System.out.println(vlog1.toString()); //// System.out.println(vlog1.getCreatedTime()); // Vlog vlog2 = vlogMapper.selectByPrimaryKey(vlogId); // System.out.println(vlog2.toString()); // Vlog vlog1 = vlogMapper.selectOne(new Vlog().setId(vlogId)); // Vlog vlog = vlog1 // System.out.println(vlog); // 系统消息:点赞短视频 Vlog vlog = this.getVlog(vlogId); Map msgContent = new HashMap(); msgContent.put("vlogId", vlogId); msgContent.put("vlogCover", vlog.getCover()); msgService.createMsg(userId, vlog.getVlogerId(), MessageEnum.LIKE_VLOG.type, msgContent); } // @Override public Vlog getVlog(String id) { Vlog vlog = vlogMapper.selectByPrimaryKey(id); // Vlog vlog = new Vlog(); // vlog.setId(id); // Vlog vlog1 = vlogMapper.selectOne(vlog); return vlog; } @Transactional @Override public void flushCounts(String vlogId, Integer counts) { Vlog vlog = new Vlog(); vlog.setId(vlogId); vlog.setLikeCounts(counts); // System.out.println(vlog.toString()); int i = vlogMapper.updateByPrimaryKeySelective(vlog); // System.out.println(i); } // @Transactional @Override public void userUnLikeVlog(String userId, String vlogId) { MyLikedVlog likedVlog = new MyLikedVlog(); likedVlog.setVlogId(vlogId); likedVlog.setUserId(userId); myLikedVlogMapper.delete(likedVlog); } @Override public PagedGridResult getMyLikedVlogList(String userId, Integer page, Integer pageSize) { PageHelper.startPage(page, pageSize); Map map = new HashMap<>(); map.put("userId", userId); List list = vlogMapperCustom.getMyLikedVlogList(map); return setterPagedGrid(list, page); } @Override public PagedGridResult getMyFollowVlogList(String myId, Integer page, Integer pageSize) { PageHelper.startPage(page, pageSize); Map map = new HashMap<>(); map.put("myId", myId); List list = vlogMapperCustom.getMyFollowVlogList(map); for (IndexVlogVO v : list) { String vlogerId = v.getVlogerId(); String vlogId = v.getVlogId(); if (StringUtils.isNotBlank(myId)) { // 用户必定关注该博主 v.setDoIFollowVloger(true); // 判断当前用户是否点赞过视频 v.setDoILikeThisVlog(doILikeVlog(myId, vlogId)); } // 获得当前视频被点赞过的总数 v.setLikeCounts(getVlogBeLikedCounts(vlogId)); } return setterPagedGrid(list, page); } // @Override public PagedGridResult getMyFriendVlogList(String myId, Integer page, Integer pageSize) { PageHelper.startPage(page, pageSize); Map map = new HashMap<>(); map.put("myId", myId); List list = vlogMapperCustom.getMyFriendVlogList(map); for (IndexVlogVO v : list) { String vlogerId = v.getVlogerId(); String vlogId = v.getVlogId(); if (StringUtils.isNotBlank(myId)) { // 用户必定关注该博主 v.setDoIFollowVloger(true); // 判断当前用户是否点赞过视频 v.setDoILikeThisVlog(doILikeVlog(myId, vlogId)); } // 获得当前视频被点赞过的总数 v.setLikeCounts(getVlogBeLikedCounts(vlogId)); } return setterPagedGrid(list, page); } // @Override // public Vlog getVlog(String id) { // return null; // } }