SceneEditServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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.alibaba.fastjson.serializer.SerializerFeature;
  9. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  10. import com.fdkankan.common.constant.CommonStatus;
  11. import com.fdkankan.common.constant.ConstantFilePath;
  12. import com.fdkankan.common.constant.ErrorCode;
  13. import com.fdkankan.common.constant.PayStatus;
  14. import com.fdkankan.common.constant.SceneStatus;
  15. import com.fdkankan.common.constant.ServerCode;
  16. import com.fdkankan.common.constant.UploadFilePath;
  17. import com.fdkankan.common.exception.BusinessException;
  18. import com.fdkankan.common.response.Result;
  19. import com.fdkankan.common.response.ResultData;
  20. import com.fdkankan.common.util.DateExtUtil;
  21. import com.fdkankan.common.util.FileUtils;
  22. import com.fdkankan.fyun.oss.UploadToOssUtil;
  23. import com.fdkankan.platform.api.feign.PlatformGoodsClient;
  24. import com.fdkankan.platform.api.feign.PlatformUserClient;
  25. import com.fdkankan.scene.bean.CameraBean;
  26. import com.fdkankan.scene.bean.UserIncrementBean;
  27. import com.fdkankan.scene.callback.FdkkMiniReqErrorCallback;
  28. import com.fdkankan.scene.callback.FdkkMiniReqSuccessCallback;
  29. import com.fdkankan.scene.entity.ScenePlus;
  30. import com.fdkankan.scene.entity.SceneProV3;
  31. import com.fdkankan.scene.httpclient.FdkankanMiniClient;
  32. import com.fdkankan.scene.service.ISceneEditInfoExtService;
  33. import com.fdkankan.scene.service.ISceneEditInfoService;
  34. import com.fdkankan.scene.service.ISceneEditService;
  35. import com.fdkankan.scene.service.IScenePlusService;
  36. import com.fdkankan.scene.service.ISceneProService;
  37. import com.fdkankan.scene.service.ISceneUploadService;
  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 java.io.File;
  44. import java.io.IOException;
  45. import java.nio.charset.StandardCharsets;
  46. import java.util.ArrayList;
  47. import java.util.Date;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Map;
  51. import java.util.Objects;
  52. import org.apache.commons.lang3.StringUtils;
  53. import org.springframework.beans.factory.annotation.Autowired;
  54. import org.springframework.beans.factory.annotation.Value;
  55. import org.springframework.cloud.context.config.annotation.RefreshScope;
  56. import org.springframework.stereotype.Service;
  57. import org.springframework.util.ObjectUtils;
  58. /**
  59. * <p>
  60. * TODO
  61. * </p>
  62. *
  63. * @author dengsixing
  64. * @since 2022/3/11
  65. **/
  66. @Service
  67. @RefreshScope
  68. public class SceneEditServiceImpl implements ISceneEditService {
  69. @Value("${oss.bucket:4dkankan}")
  70. private String bucket;
  71. @Value("${http.host.4dkankanMini}")
  72. private String fkankanMiniHost;
  73. @Value("${http.api-v4.getSceneProByNum}")
  74. private String URL_GET_SCENEPRO_BY_NUM;
  75. @Autowired
  76. ISceneProService sceneProService;
  77. @Autowired
  78. PlatformGoodsClient platformGoodsClient;
  79. @Autowired
  80. PlatformUserClient platformUserClient;
  81. @Autowired
  82. IScenePlusService scenePlusService;
  83. @Autowired
  84. private UploadToOssUtil uploadToOssUtil;
  85. @Autowired
  86. private ISceneUploadService sceneUploadService;
  87. @Autowired
  88. private ISceneEditInfoService sceneEditInfoService;
  89. @Autowired
  90. private ISceneEditInfoExtService sceneEditInfoExtService;
  91. @Autowired
  92. private FdkankanMiniClient fdkankanMiniClient;
  93. @Value("${http.api.isLogin}")
  94. private String URL_ISLOGIN;
  95. @Override
  96. public SceneAuthVO getAuth(String num, String token) throws Exception{
  97. // TODO: 2022/5/19 请求v3的接口,获取场景的状态 待v3停机后要换成v4d的逻辑-------------------------start
  98. String url = fkankanMiniHost + URL_GET_SCENEPRO_BY_NUM + num;
  99. Result<SceneProV3> result = fdkankanMiniClient
  100. .getSceneProByNum(url, new FdkkMiniReqSuccessCallback(),
  101. new FdkkMiniReqErrorCallback());
  102. SceneProV3 sceneProV3 = result.getData();
  103. if(sceneProV3 == null || sceneProV3.getId() == null){
  104. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  105. }
  106. if(sceneProV3.getRecStatus().equals("I")){
  107. throw new BusinessException(ErrorCode.FAILURE_CODE_5009);
  108. }
  109. if(SceneStatus.SUCCESS.code() != sceneProV3.getStatus()
  110. && SceneStatus.NO_DISPLAY.code() != sceneProV3.getStatus()){
  111. throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
  112. }
  113. if(PayStatus.PAY.code() != sceneProV3.getPayStatus()){
  114. throw new BusinessException(ErrorCode.FAILURE_CODE_5034);
  115. }
  116. // TODO: 2022/5/19 请求v3的接口,获取场景的状态 待v3停机后要换成v4d的逻辑-------------------------send
  117. ScenePlus scenePlus = scenePlusService.getOne(
  118. new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getNum, num)
  119. .eq(ScenePlus::getPayStatus, PayStatus.PAY.code()));
  120. // .in(ScenePlus::getSceneStatus, SceneStatus.SUCCESS.code(), SceneStatus.NO_DISPLAY.code()));
  121. if(scenePlus == null){
  122. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  123. }
  124. if(scenePlus.getSceneStatus() == SceneStatus.FAILD.code()
  125. || scenePlus.getSceneStatus() == SceneStatus.wait.code()){
  126. throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
  127. }
  128. //判断该场景是否属于增值权益
  129. boolean isVip = false;
  130. //获取该相机是否有权益
  131. boolean isExpired = false;
  132. // ResultData<Camera> cameraResultData = platformGoodsClient.getCameraById(scenePlus.getCameraId());
  133. // if(!cameraResultData.getSuccess()){
  134. // throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
  135. // }
  136. // Camera camera = cameraResultData.getData();
  137. // if(camera != null){
  138. // ResultData<UserIncrement> incrementResultData = platformUserClient
  139. // .getUserIncrementByCameraId(camera.getId());
  140. // if(!incrementResultData.getSuccess()){
  141. // throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message());
  142. // }
  143. // UserIncrement userIncrement = incrementResultData.getData();
  144. // if(userIncrement != null){
  145. // if( userIncrement.getIsExpired().intValue() == 0){
  146. // isVip = true;
  147. // }
  148. // if(userIncrement.getIsExpired().intValue() == 1){
  149. // isExpired = true;
  150. // }
  151. // }else{
  152. // Date date = DateUtil.parse("2021-09-09 00:00:00", DateExtUtil.dateStyle);
  153. //
  154. // //非07批次的放开
  155. // String pc = camera.getSnCode().substring(0,2);
  156. // if(!pc.equals("07") ){
  157. // if(camera.getCreateTime()!=null && date.after(camera.getCreateTime())){
  158. // isVip = true;
  159. // isExpired = false;
  160. // }
  161. // }
  162. // }
  163. // }
  164. // TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------start
  165. url = fkankanMiniHost + URL_ISLOGIN + num;
  166. Result<Map<String, Object>> isLoginResult = fdkankanMiniClient
  167. .getIsLogin(url, token, new FdkkMiniReqSuccessCallback(),
  168. new FdkkMiniReqErrorCallback());
  169. Map<String, Object> data = isLoginResult.getData();
  170. isVip = (boolean)data.get("isIncrement");
  171. isExpired = (boolean)data.get("isExpired");
  172. Integer company = data.get("company") == null ? null : (int)data.get("company");
  173. // TODO: 2022/4/25 v3v4共存过渡期结束需要删除,恢复上面注释内容 ------------------------------------------end
  174. return SceneAuthVO.builder()
  175. .isExpired(isExpired).isVip(isVip)
  176. .company(company)
  177. .exclude(data.get("exclude"))
  178. .include(data.get("include"))
  179. .build();
  180. }
  181. @Override
  182. public ResultData locales(LocalesParamVO param) throws Exception {
  183. String key = "v4/www/locales/" + param.getFile();
  184. uploadToOssUtil.upload(JSON.toJSONBytes(param.getData()), key);
  185. return ResultData.ok();
  186. }
  187. @Override
  188. public ResultData saveTour(BaseDataParamVO param) throws IOException {
  189. String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "tour.json";
  190. uploadToOssUtil.upload(param.getData().getBytes(StandardCharsets.UTF_8), key);
  191. sceneEditInfoExtService.updateToursByNum(
  192. param.getNum(), Integer.valueOf(CommonStatus.YES.code()));
  193. return ResultData.ok();
  194. }
  195. @Override
  196. public ResultData deleteTour(BaseSceneParamVO param) throws Exception {
  197. String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
  198. String tourJsonPath = userEditPath + "tour.json";
  199. String tourJson = uploadToOssUtil.getObjectContent(bucket, tourJsonPath);
  200. JSONArray tours = JSON.parseArray(tourJson);
  201. if(CollUtil.isNotEmpty(tours)){
  202. List<String> fileNames = new ArrayList<>();
  203. for (Object o : tours) {
  204. JSONObject tour = (JSONObject)o;
  205. JSONObject enter = tour.getJSONObject("enter");
  206. if(Objects.nonNull(enter)){
  207. String enterOver = enter.getString("cover");
  208. if(StrUtil.isNotEmpty(enterOver)){
  209. fileNames.add(enterOver);
  210. }
  211. }
  212. JSONObject exit = tour.getJSONObject("exit");
  213. if(Objects.nonNull(exit)){
  214. String exitOver = exit.getString("cover");
  215. if(StrUtil.isNotEmpty(exitOver)){
  216. fileNames.add(exitOver);
  217. }
  218. }
  219. String music = tour.getString("music");
  220. if(StrUtil.isNotEmpty(music)){
  221. fileNames.add( music);
  222. }
  223. }
  224. //批量删除资源文件
  225. if(CollUtil.isNotEmpty(fileNames)){
  226. sceneUploadService.delete(
  227. DeleteFileParamVO.builder()
  228. .num(param.getNum()).bizType("tour").fileNames(fileNames)
  229. .build());
  230. }
  231. }
  232. //删除tour.json文件
  233. uploadToOssUtil.delete(tourJsonPath);
  234. sceneEditInfoExtService.updateToursByNum(
  235. param.getNum(), Integer.valueOf(CommonStatus.NO.code()));
  236. return ResultData.ok();
  237. }
  238. }