SceneEditServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.alibaba.fastjson.JSON;
  6. import com.alibaba.fastjson.JSONArray;
  7. import com.alibaba.fastjson.JSONObject;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.fdkankan.common.constant.CommonStatus;
  10. import com.fdkankan.common.constant.ErrorCode;
  11. import com.fdkankan.model.constants.UploadFilePath;
  12. import com.fdkankan.common.exception.BusinessException;
  13. import com.fdkankan.web.response.ResultData;
  14. import com.fdkankan.common.util.DateExtUtil;
  15. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  16. import com.fdkankan.scene.entity.Camera;
  17. import com.fdkankan.scene.entity.CameraDetail;
  18. import com.fdkankan.scene.entity.SceneCooperation;
  19. import com.fdkankan.scene.entity.ScenePlus;
  20. import com.fdkankan.scene.entity.ScenePlusExt;
  21. import com.fdkankan.scene.entity.SceneResource;
  22. import com.fdkankan.scene.entity.User;
  23. import com.fdkankan.scene.entity.UserIncrement;
  24. import com.fdkankan.scene.service.ICameraDetailService;
  25. import com.fdkankan.scene.service.ICameraService;
  26. import com.fdkankan.scene.service.ISceneCooperationService;
  27. import com.fdkankan.scene.service.ISceneEditInfoExtService;
  28. import com.fdkankan.scene.service.ISceneEditService;
  29. import com.fdkankan.scene.service.IScenePlusExtService;
  30. import com.fdkankan.scene.service.IScenePlusService;
  31. import com.fdkankan.scene.service.ISceneProService;
  32. import com.fdkankan.scene.service.ISceneResourceService;
  33. import com.fdkankan.scene.service.ISceneUploadService;
  34. import com.fdkankan.scene.service.IUserIncrementService;
  35. import com.fdkankan.scene.service.IUserService;
  36. import com.fdkankan.scene.vo.BaseDataParamVO;
  37. import com.fdkankan.scene.vo.BaseSceneParamVO;
  38. import com.fdkankan.scene.vo.DeleteFileParamVO;
  39. import com.fdkankan.scene.vo.LocalesParamVO;
  40. import com.fdkankan.scene.vo.SceneAuthVO;
  41. import com.fdkankan.web.user.SSOUser;
  42. import java.io.IOException;
  43. import java.nio.charset.StandardCharsets;
  44. import java.util.ArrayList;
  45. import java.util.Calendar;
  46. import java.util.Date;
  47. import java.util.List;
  48. import java.util.Objects;
  49. import lombok.extern.slf4j.Slf4j;
  50. import org.springframework.beans.factory.annotation.Autowired;
  51. import org.springframework.beans.factory.annotation.Value;
  52. import org.springframework.cloud.context.config.annotation.RefreshScope;
  53. import org.springframework.stereotype.Service;
  54. import org.springframework.util.ObjectUtils;
  55. /**
  56. * <p>
  57. * TODO
  58. * </p>
  59. *
  60. * @author dengsixing
  61. * @since 2022/3/11
  62. **/
  63. @Slf4j
  64. @Service
  65. @RefreshScope
  66. public class SceneEditServiceImpl implements ISceneEditService {
  67. @Autowired
  68. ISceneProService sceneProService;
  69. @Autowired
  70. IScenePlusService scenePlusService;
  71. @Autowired
  72. private FYunFileServiceInterface fYunFileService;
  73. @Autowired
  74. private ISceneUploadService sceneUploadService;
  75. @Autowired
  76. private ISceneEditInfoExtService sceneEditInfoExtService;
  77. @Autowired
  78. private ICameraDetailService cameraDetailService;
  79. @Autowired
  80. private ICameraService cameraService;
  81. @Autowired
  82. private IUserIncrementService userIncrementService;
  83. @Value("${expected.time}")
  84. private String expectedTime;
  85. @Autowired
  86. private IUserService userService;
  87. @Autowired
  88. private ISceneCooperationService sceneCooperationService;
  89. @Autowired
  90. private ISceneResourceService sceneResourceService;
  91. @Autowired
  92. private IScenePlusExtService scenePlusExtService;
  93. @Value("${scene.expired.month:#{null}}")
  94. private Integer expiredMonth;
  95. @Override
  96. public SceneAuthVO getAuth(String num, SSOUser ssoUser){
  97. // 解密获得username,用于和数据库进行对比
  98. String username = ssoUser.getUserName();
  99. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  100. if(Objects.isNull(scenePlus)){
  101. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  102. }
  103. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  104. SceneAuthVO sceneAuthVO = new SceneAuthVO();
  105. List<SceneResource> exclude = new ArrayList<>();
  106. SceneResource excludeEntity = new SceneResource();
  107. excludeEntity.setKeyWord("data");
  108. exclude.add(excludeEntity);
  109. Camera camera = cameraService.findByChildName(username);
  110. sceneAuthVO.setExclude(exclude);
  111. sceneAuthVO.setInclude(new ArrayList<>());
  112. sceneAuthVO.setCompany(null);
  113. sceneAuthVO.setIsExpired(false);
  114. sceneAuthVO.setIsVip(true);
  115. //判断过期时间
  116. Date date = DateUtil.parse(expectedTime, DateExtUtil.dateStyle);
  117. if(camera != null){
  118. if(!scenePlus.getCameraId().equals(camera.getId())){
  119. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  120. }
  121. CameraDetail cameraDetailEntity = cameraDetailService.findByCameraId(camera.getId());
  122. if(cameraDetailEntity.getCompanyId() != null){
  123. if(cameraDetailEntity.getCompanyId().longValue() == 1 || cameraDetailEntity.getCompanyId().longValue() == 14){
  124. sceneAuthVO.setExclude(new ArrayList<>());
  125. sceneAuthVO.setCompany(cameraDetailEntity.getCompanyId());
  126. }
  127. }
  128. return sceneAuthVO;
  129. }
  130. User user = userService.findByUserName(username);
  131. if("18750226207".equals(username)){
  132. log.info("18750226207该账号默认超级管理员,可以操作所有场景");
  133. }
  134. else if(user == null || scenePlus.getUserId() == null || user.getId().longValue() != scenePlus.getUserId().longValue()){
  135. log.info("user:" + user.getId() + ",scene:" + scenePlus.getUserId());
  136. List<SceneCooperation> list =
  137. sceneCooperationService.list(
  138. new LambdaQueryWrapper<SceneCooperation>()
  139. .eq(SceneCooperation::getSceneNum, num));
  140. if(list != null && list.size() > 0){
  141. if(list.get(0).getUserId().longValue() != user.getId().longValue()){
  142. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  143. }
  144. }else {
  145. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  146. }
  147. }
  148. if(scenePlus.getCameraId() != null){
  149. camera = cameraService.getById(scenePlus.getCameraId());
  150. if(camera != null){
  151. CameraDetail cameraDetail = cameraDetailService.findByCameraId(camera.getId());
  152. if(cameraDetail.getCompanyId() != null){
  153. if(cameraDetail.getCompanyId().longValue() == 1 || cameraDetail.getCompanyId().longValue() == 14){
  154. sceneAuthVO.setExclude(new ArrayList<>());
  155. sceneAuthVO.setCompany(cameraDetail.getCompanyId());
  156. }
  157. }
  158. }
  159. }
  160. //权限控制完后判断若是协作账号,获取协作权限
  161. SceneCooperation sceneCooperation = sceneCooperationService.getByNum(num);
  162. //若数据为空表示可操作全部资源
  163. if(sceneCooperation == null || sceneCooperation.getUserId().longValue() != ssoUser.getId().longValue()){
  164. return sceneAuthVO;
  165. }
  166. if(scenePlus.getUserId()!= null && sceneCooperation.getUserId()!= null &&
  167. scenePlus.getUserId().equals(sceneCooperation.getUserId())){
  168. return sceneAuthVO;
  169. }
  170. sceneAuthVO.setInclude(sceneResourceService.findByCooperationId(sceneCooperation.getId()));
  171. return sceneAuthVO;
  172. }
  173. @Override
  174. public ResultData locales(LocalesParamVO param) throws Exception {
  175. String key = "v4/www/locales/" + param.getFile();
  176. fYunFileService.uploadFile(JSON.toJSONBytes(param.getData()), key);
  177. return ResultData.ok();
  178. }
  179. @Override
  180. public ResultData saveTour(BaseDataParamVO param) throws IOException {
  181. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  182. if(Objects.isNull(scenePlus)){
  183. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  184. }
  185. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  186. String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "tour.json";
  187. fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), param.getData().getBytes(StandardCharsets.UTF_8), key);
  188. sceneEditInfoExtService.updateToursByNum(
  189. param.getNum(), Integer.valueOf(CommonStatus.YES.code()));
  190. return ResultData.ok();
  191. }
  192. @Override
  193. public ResultData deleteTour(BaseSceneParamVO param) throws Exception {
  194. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  195. if(Objects.isNull(scenePlus)){
  196. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  197. }
  198. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  199. String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
  200. String tourJsonPath = userEditPath + "tour.json";
  201. String tourJson = fYunFileService.getFileContent(scenePlusExt.getYunFileBucket(), tourJsonPath);
  202. JSONArray tours = JSON.parseArray(tourJson);
  203. if(CollUtil.isNotEmpty(tours)){
  204. List<String> fileNames = new ArrayList<>();
  205. for (Object o : tours) {
  206. JSONObject tour = (JSONObject)o;
  207. JSONObject enter = tour.getJSONObject("enter");
  208. if(Objects.nonNull(enter)){
  209. String enterOver = enter.getString("cover");
  210. if(StrUtil.isNotEmpty(enterOver)){
  211. fileNames.add(enterOver);
  212. }
  213. }
  214. JSONObject exit = tour.getJSONObject("exit");
  215. if(Objects.nonNull(exit)){
  216. String exitOver = exit.getString("cover");
  217. if(StrUtil.isNotEmpty(exitOver)){
  218. fileNames.add(exitOver);
  219. }
  220. }
  221. String music = tour.getString("music");
  222. if(StrUtil.isNotEmpty(music)){
  223. fileNames.add( music);
  224. }
  225. }
  226. //批量删除资源文件
  227. if(CollUtil.isNotEmpty(fileNames)){
  228. sceneUploadService.delete(
  229. DeleteFileParamVO.builder()
  230. .num(param.getNum()).bizType("tour").fileNames(fileNames)
  231. .build());
  232. }
  233. }
  234. //删除tour.json文件
  235. fYunFileService.deleteFile(scenePlusExt.getYunFileBucket(), tourJsonPath);
  236. sceneEditInfoExtService.updateToursByNum(
  237. param.getNum(), Integer.valueOf(CommonStatus.NO.code()));
  238. return ResultData.ok();
  239. }
  240. }