SceneController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. package com.fdkankan.ucenter.controller;
  2. import cn.hutool.core.io.FileUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.aliyun.oss.OSSClient;
  5. import com.aliyun.oss.internal.OSSUtils;
  6. import com.fdkankan.common.util.JwtUtil;
  7. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  8. import com.fdkankan.ucenter.common.BaseController;
  9. import com.fdkankan.ucenter.common.DownloadStatusEnum;
  10. import com.fdkankan.ucenter.common.Result;
  11. import com.fdkankan.ucenter.common.constants.ConstantFilePath;
  12. import com.fdkankan.ucenter.common.constants.NacosProperty;
  13. import com.fdkankan.ucenter.common.constants.ResultCode;
  14. import com.fdkankan.ucenter.common.constants.ResultCodeMsg;
  15. import com.fdkankan.ucenter.config.FyunConfig;
  16. import com.fdkankan.ucenter.entity.ScenePlus;
  17. import com.fdkankan.ucenter.entity.User;
  18. import com.fdkankan.ucenter.exception.BusinessException;
  19. import com.fdkankan.ucenter.httpClient.client.FdKKClient;
  20. import com.fdkankan.ucenter.httpClient.param.FdRoomVo;
  21. import com.fdkankan.ucenter.httpClient.param.UploadEditSceneParam;
  22. import com.fdkankan.ucenter.service.*;
  23. import com.fdkankan.ucenter.service.impl.TakeLookService;
  24. import com.fdkankan.ucenter.vo.request.RequestScene;
  25. import com.fdkankan.ucenter.vo.request.SceneParam;
  26. import com.fdkankan.ucenter.vo.response.DownloadProcessVo;
  27. import lombok.extern.slf4j.Slf4j;
  28. import org.apache.commons.codec.language.Nysiis;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.beans.factory.annotation.Value;
  31. import org.springframework.web.bind.annotation.*;
  32. import org.springframework.web.multipart.MultipartFile;
  33. import java.io.File;
  34. import java.net.URL;
  35. import java.util.HashMap;
  36. import java.util.Objects;
  37. import java.util.UUID;
  38. /**
  39. * <p>
  40. * 场景表 前端控制器
  41. * </p>
  42. *
  43. * @author
  44. * @since 2022-07-04
  45. */
  46. @RestController
  47. @RequestMapping("/ucenter/user/scene")
  48. @Slf4j
  49. public class SceneController extends BaseController {
  50. @Autowired
  51. ISceneProService sceneProService;
  52. @Autowired
  53. IUserService userService;
  54. @Autowired
  55. IDownService downService;
  56. @Autowired
  57. ISceneUpgradeToV4Service sceneUpgradeToV4Service;
  58. @Autowired
  59. ISceneCooperationService sceneCooperationService;
  60. @Autowired
  61. ISceneService sceneService;
  62. @Autowired
  63. IScenePlusService scenePlusService;
  64. @Autowired
  65. TakeLookService takeLookService;
  66. @PostMapping("/findSceneNumber")
  67. public Result findSceneNumber(){
  68. return Result.success(sceneProService.findSceneNumber(getToken()));
  69. }
  70. @PostMapping("/getOldSceneList")
  71. public Result getOldSceneList(@RequestBody SceneParam param){
  72. User user = userService.getByToken(getToken());
  73. param.setUserId(user.getId());
  74. return Result.success(sceneService.pageList(param));
  75. }
  76. @PostMapping(value = "/list")
  77. public Result getScenes(@RequestBody RequestScene param) throws Exception {
  78. String username = JwtUtil.getUsername(getToken());
  79. return Result.success(sceneProService.getScenes(username, param));
  80. }
  81. @PostMapping("/newList")
  82. public Result newList(@RequestBody SceneParam param){
  83. String username = JwtUtil.getUsername(getToken());
  84. return Result.success(sceneProService.newList(param,username));
  85. }
  86. @PostMapping("/getOnlySceneList")
  87. public Result getOnlySceneList(@RequestBody SceneParam param){
  88. String username = JwtUtil.getUsername(getToken());
  89. param.setHasFolder(0);
  90. JSONObject jsonObject = sceneProService.newList(param, username);
  91. JSONObject pageInfo = jsonObject.getJSONObject("pageInfo");
  92. pageInfo.put("endRow",0);
  93. pageInfo.put("firstPage",param.getPageNum());
  94. pageInfo.put("hasNextPage",false);
  95. pageInfo.put("isLastPage",0);
  96. pageInfo.put("size",pageInfo.get("total"));
  97. Integer pages = pageInfo.getInteger("total") / param.getPageSize();
  98. pageInfo.put("pages",pageInfo.getInteger("total") % param.getPageSize() == 0 ? pages : pages + 1);
  99. return Result.success(pageInfo);
  100. }
  101. /**
  102. * 获取场景详情
  103. */
  104. @RequestMapping(value = "/detail", method = RequestMethod.POST)
  105. public Result getSceneDetail(@RequestBody SceneParam param) throws Exception {
  106. return Result.success(sceneProService.getSceneDetail(param.getSceneNum()));
  107. }
  108. @PostMapping("/copyScene")
  109. public Result copyScene(@RequestBody SceneParam param) throws Exception {
  110. String username = JwtUtil.getUsername(getToken());
  111. sceneProService.copyScene(param.getSceneNum(),username);
  112. return Result.success();
  113. }
  114. @PostMapping("/delete")
  115. public Result delete(@RequestBody SceneParam param) throws Exception {
  116. sceneProService.delete(param.getSceneNum(),getUserId(),param.getPlatform());
  117. return Result.success();
  118. }
  119. /**
  120. * 校验该场景有无下载资格
  121. */
  122. @PostMapping("/checkDownload")
  123. public Result checkDownload(@RequestBody SceneParam param) throws Exception {
  124. return Result.success( downService.checkDownLoad(param.getSceneNum(),param.getIsObj()) );
  125. }
  126. /**
  127. * 校验该场景有无下载资格
  128. * @param param
  129. * @return
  130. */
  131. @PostMapping("/downloadScene")
  132. public Result downloadScene(@RequestBody SceneParam param) throws Exception{
  133. String username = JwtUtil.getUsername(getToken());
  134. return Result.success(downService.down(param.getSceneNum(),username,param.getIsObj()));
  135. }
  136. /**
  137. * 获取下载进度
  138. * @param param
  139. * @return
  140. */
  141. @PostMapping("/downloadProcess")
  142. public Result downloadProcess(@RequestBody SceneParam param) throws Exception{
  143. User user = userService.getByUserName(JwtUtil.getUsername(this.getToken()));
  144. DownloadProcessVo downloadProcessVo = downService.downloadProcess(user.getId(), param.getSceneNum(),param.getIsObj());
  145. if(downloadProcessVo.getStatus() == DownloadStatusEnum.DOWNLOAD_FAILED_CODE){
  146. return Result.failure("下载失败!");
  147. }
  148. return Result.success(downloadProcessVo);
  149. }
  150. /**
  151. * 检查下载
  152. * num 场景码
  153. */
  154. @GetMapping("/checkDownLoadE57")
  155. public Result checkDownLoadE57(@RequestParam(required = false) String num){
  156. String username = JwtUtil.getUsername(getToken());
  157. return Result.success(downService.checkDownLoadE57(num,username));
  158. }
  159. /**
  160. * 下载场景
  161. * num 场景码
  162. */
  163. @GetMapping("/downSceneE57")
  164. public Result downSceneE57(@RequestParam(required = false) String num){
  165. String username = JwtUtil.getUsername(getToken());
  166. return Result.success(downService.downE57(num,username));
  167. }
  168. /**
  169. * 下载场景进度条
  170. * num 场景码
  171. */
  172. @GetMapping("/downloadProcessE57")
  173. public Result downloadProcessE57(@RequestParam(required = false) String num){
  174. String username = JwtUtil.getUsername(getToken());
  175. return Result.success(downService.downloadProcessE57(num,username));
  176. }
  177. /**
  178. *
  179. * 场景升级V4接口
  180. */
  181. @GetMapping("/upgradeToV4")
  182. public Result upgradeToV4(String num) throws Exception{
  183. return sceneUpgradeToV4Service.upgrade(num);
  184. }
  185. /**
  186. *
  187. * 场景升级进度查询接口
  188. */
  189. @GetMapping("/getUpgradeToV4Progress")
  190. public Result getUpgradeToV4Progress(String num) throws Exception{
  191. return sceneUpgradeToV4Service.getUpgradeToV4Progress(num);
  192. }
  193. /**
  194. *
  195. * 分页查询存在houseType文件的场景
  196. */
  197. @PostMapping("/pageSceneWithHouseType")
  198. public Result pageSceneWithHouseType(@RequestBody RequestScene param){
  199. return scenePlusService.pageSceneWithHouseType(param,this.getToken());
  200. }
  201. /**
  202. *
  203. * 根据场景码返回ar路径
  204. */
  205. @GetMapping("/getArPathByNum")
  206. public Result getArPathByNum(@RequestParam(value = "num") String num){
  207. return scenePlusService.getArPathByNum(num);
  208. }
  209. /**
  210. * 发起带看获取带看房间号
  211. */
  212. @GetMapping("/getTakeLookRoomId")
  213. public Result getTakeLookRoomId(@RequestParam(value = "num") String num){
  214. ScenePlus scenePlus = scenePlusService.getByNum(num);
  215. if(scenePlus == null){
  216. throw new BusinessException(ResultCodeMsg.FAILURE_CODE_400002, ResultCodeMsg.FAILURE_MSG_400002);
  217. }
  218. if(scenePlus.getSceneStatus() != -2){
  219. throw new BusinessException(ResultCodeMsg.FAILURE_CODE_400009, ResultCodeMsg.FAILURE_MSG_400009);
  220. }
  221. FdRoomVo fdRoomVo = takeLookService.getRoomIdByNum(num, scenePlus.getTitle(), getToken());
  222. takeLookService.openRoom(fdRoomVo.getRoomId(),getToken());
  223. return Result.success(fdRoomVo);
  224. }
  225. @GetMapping("/removePortrait")
  226. public Result removePortrait(@RequestParam(value = "num") String num){
  227. sceneProService.removePortrait(num);
  228. return Result.success();
  229. }
  230. @Autowired
  231. FYunFileServiceInterface fYunFileServiceInterface;
  232. @Autowired
  233. FdKKClient fdKKClient;
  234. @PostMapping("/uploadE57")
  235. public Result uploadE57(@RequestParam("file") MultipartFile file,
  236. @RequestParam(value = "isObj",required = false)Integer isObj,
  237. @RequestParam(value = "title",required = false)String title) {
  238. String originalFilename = file.getOriginalFilename();
  239. String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
  240. if(!suffix.equals(".e57")){
  241. throw new BusinessException(ResultCode.UPLOAD_ERROR2);
  242. }
  243. File targetFile = null;
  244. try {
  245. String newFileName = UUID.randomUUID().toString().replace("-","");
  246. String filePath = ConstantFilePath.MANAGE_PATH + "e57" + File.separator + newFileName +suffix;
  247. targetFile = new File(filePath);
  248. if(!targetFile.getParentFile().exists()){
  249. targetFile.getParentFile().mkdirs();
  250. }
  251. file.transferTo(targetFile);
  252. fYunFileServiceInterface.uploadFile(filePath,filePath.replace(ConstantFilePath.MANAGE_PATH,"ucenter/"));
  253. UploadEditSceneParam editSceneParam = new UploadEditSceneParam();
  254. editSceneParam.setTitle(title);
  255. editSceneParam.setUserId(getUser().getId());
  256. editSceneParam.setPath(filePath.replace(ConstantFilePath.MANAGE_PATH,"ucenter/"));
  257. editSceneParam.setIsObj(isObj);
  258. editSceneParam.setOtherType("E57_V4");
  259. JSONObject jsonObject = fdKKClient.reverseScene(editSceneParam);
  260. Integer code = jsonObject.getInteger("code");
  261. if(code != 0){
  262. log.info("调用失败-toFdCreateScene:{}",jsonObject);
  263. throw new BusinessException(ResultCode.UPLOAD_ERROR);
  264. }
  265. }catch (Exception e){
  266. log.info("调用失败-toFdCreateScene:",e);
  267. throw new BusinessException(ResultCode.UPLOAD_ERROR);
  268. }finally {
  269. if(targetFile != null){
  270. try {
  271. FileUtil.del(targetFile);
  272. }catch (Exception e){
  273. log.info("删除文件失败:{}",targetFile.getPath());
  274. }
  275. }
  276. }
  277. return Result.success();
  278. }
  279. @Autowired
  280. FyunConfig fyunConfig;
  281. @PostMapping("/getUploadUrl")
  282. public Result getUploadUrl( @RequestParam(value = "fileName",required = false)String fileName) {
  283. String newFileName = UUID.randomUUID().toString().replace("-","");
  284. String suffix = fileName.substring(fileName.lastIndexOf("."));
  285. URL presignedUrl = fyunConfig.getPresignedUrl("ucenter/e57/" + newFileName + suffix);
  286. HashMap<String, Object> map = new HashMap<>();
  287. map.put("newFileName",newFileName + suffix);
  288. map.put("url",presignedUrl.toString());
  289. return Result.success(map);
  290. }
  291. @PostMapping("/relevanceE57")
  292. public Result relevanceE57( @RequestParam(value = "isObj",required = false)Integer isObj,
  293. @RequestParam(value = "title",required = false)String title,
  294. @RequestParam(value = "newFileName",required = false)String newFileName ){
  295. UploadEditSceneParam editSceneParam = new UploadEditSceneParam();
  296. editSceneParam.setTitle(title);
  297. editSceneParam.setUserId(getUser().getId());
  298. editSceneParam.setPath("ucenter/e57/"+newFileName);
  299. editSceneParam.setIsObj(isObj);
  300. editSceneParam.setOtherType("E57_V4");
  301. JSONObject jsonObject = fdKKClient.reverseScene(editSceneParam);
  302. Integer code = jsonObject.getInteger("code");
  303. if(code != 0){
  304. log.info("调用失败-toFdCreateScene:{}",jsonObject);
  305. throw new BusinessException(ResultCode.UPLOAD_ERROR);
  306. }
  307. return Result.success();
  308. }
  309. }