SceneEditServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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.common.constant.SceneSource;
  12. import com.fdkankan.model.constants.UploadFilePath;
  13. import com.fdkankan.common.exception.BusinessException;
  14. import com.fdkankan.scene.httpclient.MyClient;
  15. import com.fdkankan.web.response.ResultData;
  16. import com.fdkankan.common.util.DateExtUtil;
  17. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  18. import com.fdkankan.scene.entity.Camera;
  19. import com.fdkankan.scene.entity.CameraDetail;
  20. import com.fdkankan.scene.entity.SceneCooperation;
  21. import com.fdkankan.scene.entity.ScenePlus;
  22. import com.fdkankan.scene.entity.ScenePlusExt;
  23. import com.fdkankan.scene.entity.SceneResource;
  24. import com.fdkankan.scene.entity.User;
  25. import com.fdkankan.scene.entity.UserIncrement;
  26. import com.fdkankan.scene.service.ICameraDetailService;
  27. import com.fdkankan.scene.service.ICameraService;
  28. import com.fdkankan.scene.service.ISceneCooperationService;
  29. import com.fdkankan.scene.service.ISceneEditInfoExtService;
  30. import com.fdkankan.scene.service.ISceneEditService;
  31. import com.fdkankan.scene.service.IScenePlusExtService;
  32. import com.fdkankan.scene.service.IScenePlusService;
  33. import com.fdkankan.scene.service.ISceneProService;
  34. import com.fdkankan.scene.service.ISceneResourceService;
  35. import com.fdkankan.scene.service.ISceneUploadService;
  36. import com.fdkankan.scene.service.IUserIncrementService;
  37. import com.fdkankan.scene.service.IUserService;
  38. import com.fdkankan.scene.vo.BaseDataParamVO;
  39. import com.fdkankan.scene.vo.BaseSceneParamVO;
  40. import com.fdkankan.scene.vo.DeleteFileParamVO;
  41. import com.fdkankan.scene.vo.LocalesParamVO;
  42. import com.fdkankan.scene.vo.SceneAuthVO;
  43. import com.fdkankan.web.user.SSOUser;
  44. import java.io.IOException;
  45. import java.nio.charset.StandardCharsets;
  46. import java.util.ArrayList;
  47. import java.util.Calendar;
  48. import java.util.Date;
  49. import java.util.List;
  50. import java.util.Objects;
  51. import lombok.extern.slf4j.Slf4j;
  52. import org.springframework.beans.factory.annotation.Autowired;
  53. import org.springframework.beans.factory.annotation.Value;
  54. import org.springframework.cloud.context.config.annotation.RefreshScope;
  55. import org.springframework.stereotype.Service;
  56. import org.springframework.util.ObjectUtils;
  57. /**
  58. * <p>
  59. * TODO
  60. * </p>
  61. *
  62. * @author dengsixing
  63. * @since 2022/3/11
  64. **/
  65. @Slf4j
  66. @Service
  67. @RefreshScope
  68. public class SceneEditServiceImpl implements ISceneEditService {
  69. @Value("${4dkk.manageService.basePath}")
  70. private String manageServiceUrl;
  71. @Value("${4dkk.manageService.api.getServiceUpTip}")
  72. private String getServiceUpTipApi;
  73. @Autowired
  74. ISceneProService sceneProService;
  75. @Autowired
  76. IScenePlusService scenePlusService;
  77. @Autowired
  78. private FYunFileServiceInterface fYunFileService;
  79. @Autowired
  80. private ISceneUploadService sceneUploadService;
  81. @Autowired
  82. private ISceneEditInfoExtService sceneEditInfoExtService;
  83. @Autowired
  84. private ICameraDetailService cameraDetailService;
  85. @Autowired
  86. private ICameraService cameraService;
  87. @Autowired
  88. private IUserIncrementService userIncrementService;
  89. @Value("${expected.time}")
  90. private String expectedTime;
  91. @Autowired
  92. private IUserService userService;
  93. @Autowired
  94. private ISceneCooperationService sceneCooperationService;
  95. @Autowired
  96. private ISceneResourceService sceneResourceService;
  97. @Autowired
  98. private IScenePlusExtService scenePlusExtService;
  99. @Value("${scene.expired.month:#{null}}")
  100. private Integer expiredMonth;
  101. @Autowired
  102. private MyClient myClient;
  103. @Override
  104. public SceneAuthVO getAuth(String num, SSOUser ssoUser){
  105. // 解密获得username,用于和数据库进行对比
  106. String username = ssoUser.getUserName();
  107. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  108. if(Objects.isNull(scenePlus)){
  109. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  110. }
  111. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  112. SceneAuthVO sceneAuthVO = new SceneAuthVO();
  113. List<SceneResource> exclude = new ArrayList<>();
  114. SceneResource excludeEntity = new SceneResource();
  115. excludeEntity.setKeyWord("data");
  116. exclude.add(excludeEntity);
  117. Camera camera = cameraService.findByChildName(username);
  118. sceneAuthVO.setExclude(exclude);
  119. sceneAuthVO.setInclude(new ArrayList<>());
  120. sceneAuthVO.setCompany(null);
  121. //判断data.json是否存在,如果存在,则证明计算在未被定时任务删除前上传过oss
  122. boolean exist = fYunFileService.fileExist(String.format(UploadFilePath.scene_result_data_path, num).concat("data.json"));
  123. if(!exist){
  124. sceneAuthVO.setSourceExpired(true);
  125. }
  126. //判断该场景是否属于增值权益
  127. boolean isVip = false;
  128. //获取该相机是否有权益
  129. boolean isExpired = false;
  130. Camera sceneCamera = cameraService.getById(scenePlus.getCameraId());
  131. if(sceneCamera != null){
  132. UserIncrement userIncrementEntity = userIncrementService.findByCameraId(sceneCamera.getId());
  133. if(userIncrementEntity != null){
  134. if( userIncrementEntity.getIsExpired().intValue() == 0){
  135. isVip = true;
  136. }
  137. if(userIncrementEntity.getIsExpired().intValue() == 1){
  138. isExpired = true;
  139. }
  140. }else{
  141. try {
  142. Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
  143. //非07批次的放开
  144. String pc = sceneCamera.getSnCode().substring(0,2);
  145. if(!pc.equals("07") ){
  146. if(sceneCamera.getCreateTime()!=null && date.after(sceneCamera.getCreateTime())){
  147. isVip = true;
  148. isExpired = false;
  149. }
  150. }
  151. }catch (Exception e){
  152. e.printStackTrace();
  153. }
  154. }
  155. }
  156. //增加判断,如果是e57类型场景,默认给会员(上传e57功能需求临时方案)
  157. if(scenePlus.getSceneSource() == SceneSource.E57.code()){
  158. isExpired = false;
  159. isVip = true;
  160. }
  161. sceneAuthVO.setIsExpired(isExpired);
  162. sceneAuthVO.setIsVip(isVip);
  163. if(camera != null){
  164. if(!scenePlus.getCameraId().equals(camera.getId())){
  165. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  166. }
  167. CameraDetail cameraDetailEntity = cameraDetailService.findByCameraId(camera.getId());
  168. if(cameraDetailEntity.getCompanyId() != null){
  169. if(cameraDetailEntity.getCompanyId().longValue() == 1 || cameraDetailEntity.getCompanyId().longValue() == 14){
  170. sceneAuthVO.setExclude(new ArrayList<>());
  171. sceneAuthVO.setCompany(cameraDetailEntity.getCompanyId());
  172. }
  173. }
  174. return sceneAuthVO;
  175. }
  176. User user = userService.findByUserName(username);
  177. if(scenePlus.getCameraId() != null){
  178. camera = cameraService.getById(scenePlus.getCameraId());
  179. if(camera != null){
  180. CameraDetail cameraDetail = cameraDetailService.findByCameraId(camera.getId());
  181. if(cameraDetail.getCompanyId() != null){
  182. if(cameraDetail.getCompanyId().longValue() == 1 || cameraDetail.getCompanyId().longValue() == 14){
  183. sceneAuthVO.setExclude(new ArrayList<>());
  184. sceneAuthVO.setCompany(cameraDetail.getCompanyId());
  185. }
  186. }
  187. }
  188. }
  189. //权限控制完后判断若是协作账号,获取协作权限
  190. if(scenePlus.getUserId().equals(ssoUser.getId())){
  191. return sceneAuthVO;
  192. }
  193. SceneCooperation sceneCooperation = sceneCooperationService.getByNumAndUserId(num, user.getId());
  194. if(Objects.nonNull(sceneCooperation)){
  195. sceneAuthVO.setInclude(sceneResourceService.findByCooperationId(sceneCooperation.getId()));
  196. }
  197. return sceneAuthVO;
  198. }
  199. @Override
  200. public ResultData locales(LocalesParamVO param) throws Exception {
  201. String key = "v4/www/locales/" + param.getFile();
  202. fYunFileService.uploadFile(JSON.toJSONBytes(param.getData()), key);
  203. return ResultData.ok();
  204. }
  205. @Override
  206. public ResultData saveTour(BaseDataParamVO param) throws IOException {
  207. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  208. if(Objects.isNull(scenePlus)){
  209. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  210. }
  211. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  212. String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "tour.json";
  213. fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), param.getData().getBytes(StandardCharsets.UTF_8), key);
  214. sceneEditInfoExtService.updateToursByNum(
  215. param.getNum(), Integer.valueOf(CommonStatus.YES.code()));
  216. return ResultData.ok();
  217. }
  218. @Override
  219. public ResultData deleteTour(BaseSceneParamVO param) throws Exception {
  220. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  221. if(Objects.isNull(scenePlus)){
  222. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  223. }
  224. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  225. String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
  226. String tourJsonPath = userEditPath + "tour.json";
  227. String tourJson = fYunFileService.getFileContent(scenePlusExt.getYunFileBucket(), tourJsonPath);
  228. JSONArray tours = JSON.parseArray(tourJson);
  229. if(CollUtil.isNotEmpty(tours)){
  230. List<String> fileNames = new ArrayList<>();
  231. for (Object o : tours) {
  232. JSONObject tour = (JSONObject)o;
  233. JSONObject enter = tour.getJSONObject("enter");
  234. if(Objects.nonNull(enter)){
  235. String enterOver = enter.getString("cover");
  236. if(StrUtil.isNotEmpty(enterOver)){
  237. fileNames.add(enterOver);
  238. }
  239. }
  240. JSONObject exit = tour.getJSONObject("exit");
  241. if(Objects.nonNull(exit)){
  242. String exitOver = exit.getString("cover");
  243. if(StrUtil.isNotEmpty(exitOver)){
  244. fileNames.add(exitOver);
  245. }
  246. }
  247. String music = tour.getString("music");
  248. if(StrUtil.isNotEmpty(music)){
  249. fileNames.add( music);
  250. }
  251. }
  252. //批量删除资源文件
  253. if(CollUtil.isNotEmpty(fileNames)){
  254. sceneUploadService.delete(
  255. DeleteFileParamVO.builder()
  256. .num(param.getNum()).bizType("tour").fileNames(fileNames)
  257. .build());
  258. }
  259. }
  260. //删除tour.json文件
  261. fYunFileService.deleteFile(scenePlusExt.getYunFileBucket(), tourJsonPath);
  262. sceneEditInfoExtService.updateToursByNum(
  263. param.getNum(), Integer.valueOf(CommonStatus.NO.code()));
  264. return ResultData.ok();
  265. }
  266. @Override
  267. public ResultData getServiceUpTip() {
  268. try {
  269. String url = this.manageServiceUrl.concat(this.getServiceUpTipApi);
  270. String params = "type=" + 0;
  271. ResultData resultData = myClient.get(url, params);
  272. return ResultData.ok(resultData.getData());
  273. }catch (Exception e){
  274. return ResultData.ok();
  275. }
  276. }
  277. }