RoomServiceImpl.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.fdkankan.tk.service.impl;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import java.util.List;
  6. import cn.hutool.core.date.DateUtil;
  7. import cn.hutool.core.io.FileUtil;
  8. import cn.hutool.jwt.JWTUtil;
  9. import com.auth0.jwt.JWT;
  10. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  12. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  13. import com.fdkankan.redis.constant.RedisKey;
  14. import com.fdkankan.redis.util.RedisUtil;
  15. import com.fdkankan.tk.common.FilePath;
  16. import com.fdkankan.tk.common.PageInfo;
  17. import com.fdkankan.tk.common.ResultCode;
  18. import com.fdkankan.tk.common.util.JwtUtil;
  19. import com.fdkankan.tk.common.util.RedisKeyUtil;
  20. import com.fdkankan.tk.common.util.UploadToOssUtil;
  21. import com.fdkankan.tk.entity.Room;
  22. import com.fdkankan.tk.exception.BusinessException;
  23. import com.fdkankan.tk.mapper.IRoomMapper;
  24. import com.fdkankan.tk.request.RoomAddParam;
  25. import com.fdkankan.tk.request.RoomListParam;
  26. import com.fdkankan.tk.response.RoomVo;
  27. import com.fdkankan.tk.response.SceneVo;
  28. import com.fdkankan.tk.service.IRoomNumService;
  29. import com.fdkankan.tk.service.IRoomService;
  30. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  31. import com.fdkankan.tk.service.ISceneService;
  32. import com.fdkankan.tk.service.IWxService;
  33. import org.apache.commons.lang3.StringUtils;
  34. import org.springframework.beans.BeanUtils;
  35. import org.springframework.beans.factory.annotation.Autowired;
  36. import org.springframework.beans.factory.annotation.Value;
  37. import org.springframework.stereotype.Service;
  38. /**
  39. * <p>
  40. * 服务实现类
  41. * </p>
  42. *
  43. * @author
  44. * @since 2022-09-19
  45. */
  46. @Service
  47. public class RoomServiceImpl extends ServiceImpl<IRoomMapper, Room> implements IRoomService {
  48. @Autowired
  49. IRoomNumService roomNumService;
  50. @Autowired
  51. ISceneService sceneService;
  52. @Autowired
  53. UploadToOssUtil uploadToOssUtil;
  54. @Autowired
  55. IWxService wxService;
  56. @Value("${upload.query-path}")
  57. private String queryPath;
  58. @Autowired
  59. RedisUtil redisUtil;
  60. @Override
  61. public PageInfo pageList(RoomListParam param, String token) {
  62. LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>();
  63. if(StringUtils.isNotBlank(token)){
  64. String fdToken = String.format(RedisKey.TOKEN_V3,token);
  65. if(! redisUtil.hasKey(fdToken)){
  66. throw new BusinessException(ResultCode.USER_NOT_LOGIN);
  67. }
  68. redisUtil.expire(fdToken,6 * 60 * 60);
  69. String userName = JwtUtil.getUserName(token);
  70. wrapper.eq(Room::getRoomUserName,userName);
  71. }
  72. if (StringUtils.isNotBlank(param.getRoomTitle()) ) {
  73. wrapper.like(Room::getRoomTitle,param.getRoomTitle());
  74. }
  75. wrapper.orderByDesc(Room::getCreateTime);
  76. Page<Room> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
  77. return PageInfo.PageInfo(page);
  78. }
  79. @Override
  80. public Room addOrUpdate(RoomAddParam param, String token) {
  81. if(param.getNumList() == null || param.getNumList().size() <=0){
  82. throw new BusinessException(ResultCode.PARAM_MISS);
  83. }
  84. if(StringUtils.isEmpty(param.getRoomTitle()) ){
  85. throw new BusinessException(ResultCode.PARAM_MISS);
  86. }
  87. Room room = new Room();
  88. BeanUtils.copyProperties(param,room);
  89. room.setRoomUserName(JwtUtil.getUserName(token));
  90. if(StringUtils.isEmpty(room.getRoomHostName())){
  91. room.setRoomHostName(room.getRoomUserName());
  92. }
  93. if(param.getRoomId() != null){
  94. room.setUpdateTime(null);
  95. }
  96. this.saveOrUpdate(room);
  97. roomNumService.addBatch(room.getRoomId(),param.getNumList());
  98. param.setRoomId(room.getRoomId());
  99. return param;
  100. }
  101. @Override
  102. public void deleteById(Integer roomId) {
  103. roomNumService.deleteByRoomId(roomId);
  104. Room room = this.getById(roomId);
  105. if(StringUtils.isNotBlank(room.getRoomShareUrl())){
  106. uploadToOssUtil.delete(room.getRoomShareUrl());
  107. }
  108. this.removeById(roomId);
  109. }
  110. @Override
  111. public RoomVo getRoomInfo(Integer roomId) {
  112. Room room = this.getById(roomId);
  113. List<String> numList = roomNumService.getListByRoomId(roomId);
  114. List<SceneVo> list = new ArrayList<>();
  115. if(numList.size() >0){
  116. list = sceneService.getListByNumList(numList);
  117. }
  118. RoomVo roomVo = new RoomVo();
  119. BeanUtils.copyProperties(room,roomVo);
  120. roomVo.setSceneData(list);
  121. return roomVo;
  122. }
  123. @Override
  124. public void roomAddView(Integer roomId) {
  125. LambdaUpdateWrapper<Room> wrapper = new LambdaUpdateWrapper<>();
  126. wrapper.setSql("room_view_count = room_view_count +1");
  127. wrapper.eq(Room::getRoomId,roomId);
  128. this.update(wrapper);
  129. }
  130. @Override
  131. public String getWxQrCode(Integer roomId,String type) {
  132. Room room = this.getById(roomId);
  133. if(room == null){
  134. throw new BusinessException(ResultCode.ROOM_MISS);
  135. }
  136. if(type.equals("follower") && StringUtils.isNotBlank(room.getRoomShareCode())){ //普通用户二维码
  137. if(uploadToOssUtil.existKey(room.getRoomShareCode())){
  138. return room.getRoomShareCode();
  139. }
  140. }
  141. if(type.equals("leader") && StringUtils.isNotBlank(room.getRoomHostCode())){ //主持人二维码
  142. if(uploadToOssUtil.existKey(room.getRoomHostCode())){
  143. return room.getRoomHostCode();
  144. }
  145. }
  146. String localPath = String.format(FilePath.LOCAL_QRCODE_PATH, type,roomId);
  147. String ossPath = String.format(FilePath.OSS_QRCODE_PATH,type, roomId);
  148. String path = "id="+roomId+"&role=%s";
  149. path = String.format(path,type);
  150. wxService.getWxQRCode(path,localPath,0);
  151. if(!new File(localPath).exists()){
  152. throw new BusinessException(ResultCode.QRCODE_MISS);
  153. }
  154. uploadToOssUtil.uploadOss(localPath,ossPath);
  155. if(!uploadToOssUtil.existKey(ossPath)){
  156. FileUtil.del(localPath);
  157. throw new BusinessException(ResultCode.QRCODE_MISS);
  158. }
  159. if(type.equals("leader")){
  160. room.setRoomHostCode(queryPath + ossPath);
  161. }else {
  162. room.setRoomShareCode(queryPath + ossPath);
  163. }
  164. this.updateById(room);
  165. FileUtil.del(localPath);
  166. return queryPath + ossPath;
  167. }
  168. @Override
  169. public void inOrOutRoom(Integer roomId, String role, Integer type) {
  170. if(roomId == null || StringUtils.isBlank(role)
  171. || ( !role.equals("leader") && !role.equals("follower"))){
  172. throw new BusinessException(ResultCode.PARAM_MISS);
  173. }
  174. if(role.equals("follower")){
  175. return;
  176. }
  177. Room room = this.getById(roomId);
  178. if(room == null){
  179. throw new BusinessException(ResultCode.ROOM_MISS);
  180. }
  181. if(type == 0 ){
  182. room.setLastLookTime(DateUtil.formatDateTime(new Date()));
  183. room.setRoomStatus(1);
  184. }
  185. if(type == 1 ){
  186. room.setLastLookTime(DateUtil.formatDateTime(new Date()));
  187. room.setRoomStatus(2);
  188. }
  189. room.setUpdateTime(null);
  190. this.updateById(room);
  191. }
  192. }