SceneController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. package com.fdkankan.scene.controller;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.io.FileUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import cn.hutool.extra.qrcode.QrCodeUtil;
  6. import cn.hutool.extra.qrcode.QrConfig;
  7. import com.fdkankan.common.constant.ErrorCode;
  8. import com.fdkankan.common.constant.LoginType;
  9. import com.fdkankan.common.exception.BusinessException;
  10. import com.fdkankan.common.util.JwtUtil;
  11. import com.fdkankan.common.util.SecurityUtil;
  12. import com.fdkankan.model.constants.ConstantFilePath;
  13. import com.fdkankan.scene.bean.RequestScene;
  14. import com.fdkankan.scene.bean.ResponseSceneDataDownload;
  15. import com.fdkankan.scene.entity.Camera;
  16. import com.fdkankan.scene.entity.CameraDetail;
  17. import com.fdkankan.scene.entity.SceneCooperation;
  18. import com.fdkankan.scene.entity.SceneDataDownload;
  19. import com.fdkankan.scene.entity.SceneProEdit;
  20. import com.fdkankan.scene.entity.User;
  21. import com.fdkankan.scene.service.ICameraDetailService;
  22. import com.fdkankan.scene.service.ICameraService;
  23. import com.fdkankan.scene.service.ISceneCooperationService;
  24. import com.fdkankan.scene.service.ISceneDataDownloadService;
  25. import com.fdkankan.scene.service.ISceneProEditService;
  26. import com.fdkankan.scene.service.IUserService;
  27. import com.fdkankan.web.model.SSOUser;
  28. import com.fdkankan.web.response.Result;
  29. import com.fdkankan.web.response.ResultData;
  30. import com.fdkankan.scene.bean.RequestRebuildVedioScene;
  31. import com.fdkankan.scene.bean.RequestSceneCooperation;
  32. import com.fdkankan.scene.bean.ResponseVideoSceneProgress;
  33. import com.fdkankan.scene.entity.ScenePro;
  34. import com.fdkankan.scene.service.IPicSceneProgressService;
  35. import com.fdkankan.scene.service.ISceneProService;
  36. import com.fdkankan.scene.service.ISceneService;
  37. import com.fdkankan.scene.service.IVideoSceneProgressService;
  38. import com.fdkankan.web.controller.BaseController;
  39. import com.fdkankan.web.user.SSOLoginHelper;
  40. import java.io.File;
  41. import javax.servlet.http.HttpServletRequest;
  42. import javax.servlet.http.HttpServletResponse;
  43. import lombok.extern.slf4j.Slf4j;
  44. import org.apache.commons.lang3.StringUtils;
  45. import org.springframework.beans.BeanUtils;
  46. import org.springframework.beans.factory.annotation.Autowired;
  47. import org.springframework.beans.factory.annotation.Value;
  48. import org.springframework.web.bind.annotation.GetMapping;
  49. import org.springframework.web.bind.annotation.PostMapping;
  50. import org.springframework.web.bind.annotation.RequestBody;
  51. import org.springframework.web.bind.annotation.RequestMapping;
  52. import org.springframework.web.bind.annotation.RequestMethod;
  53. import org.springframework.web.bind.annotation.RequestParam;
  54. import org.springframework.web.bind.annotation.RestController;
  55. @Slf4j
  56. @RestController
  57. @RequestMapping("/service/scenev3")
  58. public class SceneController extends BaseController {
  59. @Autowired
  60. private ISceneService sceneService;
  61. @Autowired
  62. private ISceneProService sceneProService;
  63. @Autowired
  64. private IVideoSceneProgressService videoSceneProgressService;
  65. @Autowired
  66. private IPicSceneProgressService picSceneProgressService;
  67. @Autowired
  68. private ISceneProEditService sceneProEditService;
  69. @Autowired
  70. private ISceneDataDownloadService sceneDataDownloadService;
  71. @Autowired
  72. private ICameraService cameraService;
  73. @Autowired
  74. private ICameraDetailService cameraDetailService;
  75. @Autowired
  76. private SSOLoginHelper ssoLoginHelper;
  77. @Autowired
  78. private ISceneCooperationService sceneCooperationService;
  79. @Value("${scene.pro.url}")
  80. private String sceneProUrl;
  81. @Value("${scene.pro.v3.url}")
  82. private String sceneProV3Url;
  83. @Value("${scene.pro.new.url}")
  84. private String sceneProV4Url;
  85. @Value("${main.url}")
  86. private String mainUrl;
  87. @Autowired
  88. private IUserService userService;
  89. /**
  90. * 是否已登录
  91. * @return
  92. */
  93. @PostMapping(value = "/isLogin")
  94. public ResultData isLogin(@RequestParam("num") String num) throws Exception{
  95. return sceneService.isLogin(num, this.getSsoUser());
  96. }
  97. /**
  98. * 协作者根据场景码获取场景资源集合
  99. * @return
  100. */
  101. @RequestMapping(value = "/sceneResourceBySceneNum", method = RequestMethod.POST)
  102. public ResultData sceneResourceBySceneNum(@RequestBody RequestSceneCooperation cooperation) throws Exception{
  103. return sceneService.sceneResourceBySceneNum(cooperation, this.getSsoUserV3());
  104. }
  105. /**
  106. * app录音获取录音文件版本
  107. */
  108. @RequestMapping(value = "/getVoiceSound")
  109. public ResultData getVoiceSound(HttpServletRequest request) throws Exception {
  110. String sceneNum = request.getParameter("num");
  111. return sceneService.getVoiceSound(sceneNum);
  112. }
  113. /**
  114. * 获取场景详情
  115. */
  116. @RequestMapping(value = "/getInfo")
  117. public ResultData getInfo(HttpServletRequest request) throws Exception {
  118. String sceneNum = request.getParameter("num");
  119. return sceneProService.getInfo(sceneNum);
  120. }
  121. /**
  122. * 场景模型重新计算
  123. */
  124. @RequestMapping(value = "/rebuildVideoScene", method = RequestMethod.POST)
  125. public ResultData rebuildVideoScene(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception {
  126. return sceneService.rebuildVideoScene(requestRebuildVedioScene);
  127. }
  128. /**
  129. * 场景视频重新计算进度
  130. */
  131. @RequestMapping(value = "/rebuildVideoSceneProgress", method = RequestMethod.POST)
  132. public ResultData rebuildVideoSceneProgress(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception {
  133. if(StringUtils.isEmpty(requestRebuildVedioScene.getSceneNum())){
  134. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  135. }
  136. ScenePro sceneProEntity = sceneProService.findBySceneNum(requestRebuildVedioScene.getSceneNum());
  137. if(null == sceneProEntity){
  138. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  139. }
  140. return ResultData.ok(videoSceneProgressService.findVideoSceneProgress(requestRebuildVedioScene));
  141. }
  142. /**
  143. * 场景图片重新计算
  144. */
  145. @RequestMapping(value = "/rebuildPicScene", method = RequestMethod.POST)
  146. public ResultData rebuildPicScene(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception {
  147. return sceneService.rebuildPicScene(requestRebuildVedioScene);
  148. }
  149. /**
  150. * 场景图片重新计算进度
  151. */
  152. @RequestMapping(value = "/rebuildPicSceneProgress", method = RequestMethod.POST)
  153. public ResultData rebuildPicSceneProgress(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception {
  154. if(StrUtil.isEmpty(requestRebuildVedioScene.getSceneNum())){
  155. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  156. }
  157. ScenePro sceneProEntity = sceneProService.findBySceneNum(requestRebuildVedioScene.getSceneNum());
  158. if(null == sceneProEntity){
  159. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  160. }
  161. ResponseVideoSceneProgress picSceneProgress = picSceneProgressService.findPicSceneProgress(requestRebuildVedioScene);
  162. return ResultData.ok(picSceneProgress.getRebuildResult());
  163. }
  164. /**
  165. * 根据场景密码打开场景
  166. */
  167. @RequestMapping(value = "/openSceneBykey")
  168. public ResultData openSceneBykey(HttpServletRequest request) throws Exception {
  169. String sceneNum = request.getParameter("num");
  170. String sceneKey = request.getParameter("sceneKey");
  171. if (StringUtils.isEmpty(sceneNum) || StringUtils.isEmpty(sceneKey)) {
  172. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  173. }
  174. ScenePro scenePro = sceneProService.findBySceneNum(sceneNum);
  175. if (scenePro == null) {
  176. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  177. }
  178. if (scenePro.getPayStatus() != 1) {
  179. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  180. }
  181. SceneProEdit editEntity = sceneProEditService.findBySceneProId(scenePro.getId());
  182. if (editEntity == null) {
  183. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  184. }
  185. if(!sceneKey.equals(editEntity.getSceneKey())){
  186. throw new BusinessException(ErrorCode.FAILURE_CODE_5021);
  187. }
  188. return ResultData.ok();
  189. }
  190. /**
  191. * 获取数据对接下载信息
  192. */
  193. @RequestMapping(value = "/downLoadZSData", method = RequestMethod.GET)
  194. public ResultData downLoadZSData(HttpServletRequest request) throws Exception{
  195. String sceneNum = request.getParameter("sceneNum");
  196. if(StrUtil.isEmpty(sceneNum)){
  197. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  198. }
  199. ScenePro sceneProEntity = sceneProService.findBySceneNum(sceneNum);
  200. if(sceneProEntity == null){
  201. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  202. }
  203. SceneDataDownload sceneDataDownloadEntity = sceneDataDownloadService.findBySceneNum(sceneNum);
  204. if(sceneDataDownloadEntity == null){
  205. throw new BusinessException(ErrorCode.FAILURE_CODE_5025);
  206. }
  207. ResponseSceneDataDownload responseSceneDataDownload = new ResponseSceneDataDownload();
  208. BeanUtils.copyProperties(sceneDataDownloadEntity, responseSceneDataDownload);
  209. return ResultData.ok(responseSceneDataDownload);
  210. }
  211. /**
  212. * <p>
  213. 跳转到编辑页面
  214. * </p>
  215. * @author dengsixing
  216. * @date 2022/9/6
  217. * @param request
  218. * @param response
  219. **/
  220. @RequestMapping("goEditScenePage")
  221. public void goEditScenePage(HttpServletRequest request, HttpServletResponse response) throws Exception{
  222. String phoneNum = request.getParameter("phoneNum");
  223. String password = request.getParameter("password");
  224. String sceneNum = request.getParameter("sceneNum");
  225. String childName = request.getParameter("childName");
  226. String lang = request.getParameter("lang");
  227. String vlog = request.getParameter("vlog");
  228. ScenePro scene = sceneProService.findBySceneNum(sceneNum);
  229. if(scene == null) {
  230. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  231. }
  232. if(StrUtil.isNotEmpty(childName)){
  233. Camera cameraEntity = cameraService.findByChildName(childName);
  234. if(cameraEntity != null){
  235. CameraDetail cameraDetailEntity = cameraDetailService.findByCameraId(cameraEntity.getId());
  236. if(cameraDetailEntity != null && cameraDetailEntity.getCooperationUser() != null){
  237. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  238. }
  239. SSOUser dbUser = new SSOUser();
  240. dbUser.setUserName(childName);
  241. dbUser.setId(scene.getUserId());
  242. if(dbUser.getId() == null){
  243. dbUser.setCameraLogin(1);
  244. dbUser.setCameraId(cameraEntity.getId());
  245. }
  246. String token = JwtUtil.createJWT(-1, childName, LoginType.USER.code());
  247. ssoLoginHelper.loginV3(token, dbUser);
  248. //登录成功
  249. if(scene.getWebSite().contains(sceneProUrl)){
  250. response.sendRedirect(mainUrl + "/" + sceneProUrl.replace("show", "edit").replace("PC", "Mobile") +
  251. sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" +
  252. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  253. }
  254. if(scene.getIsUpgrade() != null && scene.getIsUpgrade() == 1){
  255. if(scene.getWebSite().contains(sceneProV4Url)){
  256. response.sendRedirect(mainUrl + "/" + sceneProV4Url.replace("s", "e") +
  257. sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" +
  258. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  259. return;
  260. }
  261. }
  262. if(scene.getWebSite().contains(sceneProV3Url)){
  263. response.sendRedirect(mainUrl + "/" + sceneProV3Url.replace("s", "e") +
  264. sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" +
  265. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  266. }
  267. return;
  268. }
  269. }
  270. if(StringUtils.isEmpty(phoneNum) || StringUtils.isEmpty(password)
  271. || StringUtils.isEmpty(sceneNum)){
  272. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  273. }
  274. if(scene.getUserId()==null)
  275. throw new BusinessException(ErrorCode.FAILURE_CODE_5013);
  276. User user = userService.findByUserName(phoneNum);
  277. if(user == null){
  278. throw new BusinessException(ErrorCode.FAILURE_CODE_3015);
  279. }
  280. if(user.getId().longValue() != scene.getUserId().longValue()) {
  281. SceneCooperation sceneCooperationEntity = sceneCooperationService.getByNumAndUserId(sceneNum, user.getId());
  282. if(sceneCooperationEntity == null){
  283. throw new BusinessException(ErrorCode.FAILURE_CODE_5014);
  284. }
  285. }
  286. if(!SecurityUtil.MD5(password).equals(user.getPassword()))
  287. {
  288. throw new BusinessException(ErrorCode.FAILURE_CODE_3015);
  289. }
  290. String token = JwtUtil.createJWT(-1, user.getUserName(), LoginType.USER.code());
  291. ssoLoginHelper.loginV3(token, BeanUtil.copyProperties(user, SSOUser.class));
  292. //登录成功
  293. if(scene.getWebSite().contains(sceneProUrl)){
  294. response.sendRedirect(mainUrl + "/" + sceneProUrl.replace("show", "edit").replace("PC", "Mobile") +
  295. sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" +
  296. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  297. }
  298. if(scene.getIsUpgrade() != null && scene.getIsUpgrade() == 1){
  299. if(scene.getWebSite().contains(sceneProV4Url)){
  300. response.sendRedirect(mainUrl + "/" + sceneProV4Url.replace("s", "e") +
  301. sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" +
  302. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  303. return;
  304. }
  305. }
  306. if(scene.getWebSite().contains(sceneProV3Url)) {
  307. response.sendRedirect(mainUrl + "/" + sceneProV3Url.replace("s", "e") +
  308. sceneNum + "&t=" + System.currentTimeMillis() + "&token=" + token + "&app" +
  309. (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog));
  310. }
  311. }
  312. @PostMapping("/createScene")
  313. public Result createScene(@RequestBody RequestScene param) throws Exception{
  314. return sceneProService.createScene(param);
  315. }
  316. /**
  317. * 创建sketch场景分享二维码的logo
  318. */
  319. @GetMapping(value = "/createSketchQrLogo")
  320. public Result createSketchQrLogo(HttpServletRequest request) throws Exception{
  321. String sceneNum = request.getParameter("sceneNum");
  322. if(StringUtils.isEmpty(sceneNum)){
  323. throw new BusinessException(ErrorCode.FAILURE_CODE_3001);
  324. }
  325. //生成二维码
  326. QrCodeUtil.generate(mainUrl + "/" + sceneProV3Url + sceneNum, QrConfig.create(), FileUtil.file(ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+".png"));
  327. QrCodeUtil.generate(mainUrl + "/" + sceneProV3Url + sceneNum + "&lang=en", QrConfig.create(), FileUtil.file(ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+"_en.png"));
  328. return Result.success();
  329. }
  330. }