package com.fdkankan.scene.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.common.constant.LoginType; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.common.util.JwtUtil; import com.fdkankan.common.util.SecurityUtil; import com.fdkankan.model.constants.ConstantFilePath; import com.fdkankan.scene.bean.RequestScene; import com.fdkankan.scene.bean.ResponseSceneDataDownload; import com.fdkankan.scene.entity.Camera; import com.fdkankan.scene.entity.CameraDetail; import com.fdkankan.scene.entity.SceneCooperation; import com.fdkankan.scene.entity.SceneDataDownload; import com.fdkankan.scene.entity.SceneProEdit; import com.fdkankan.scene.entity.User; import com.fdkankan.scene.service.ICameraDetailService; import com.fdkankan.scene.service.ICameraService; import com.fdkankan.scene.service.ISceneCooperationService; import com.fdkankan.scene.service.ISceneDataDownloadService; import com.fdkankan.scene.service.ISceneProEditService; import com.fdkankan.scene.service.IUserService; import com.fdkankan.web.model.SSOUser; import com.fdkankan.web.response.Result; import com.fdkankan.web.response.ResultData; import com.fdkankan.scene.bean.RequestRebuildVedioScene; import com.fdkankan.scene.bean.RequestSceneCooperation; import com.fdkankan.scene.bean.ResponseVideoSceneProgress; import com.fdkankan.scene.entity.ScenePro; import com.fdkankan.scene.service.IPicSceneProgressService; import com.fdkankan.scene.service.ISceneProService; import com.fdkankan.scene.service.ISceneService; import com.fdkankan.scene.service.IVideoSceneProgressService; import com.fdkankan.web.controller.BaseController; import com.fdkankan.web.user.SSOLoginHelper; import java.io.File; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController @RequestMapping("/service/scenev3") public class SceneController extends BaseController { @Autowired private ISceneService sceneService; @Autowired private ISceneProService sceneProService; @Autowired private IVideoSceneProgressService videoSceneProgressService; @Autowired private IPicSceneProgressService picSceneProgressService; @Autowired private ISceneProEditService sceneProEditService; @Autowired private ISceneDataDownloadService sceneDataDownloadService; @Autowired private ICameraService cameraService; @Autowired private ICameraDetailService cameraDetailService; @Autowired private SSOLoginHelper ssoLoginHelper; @Autowired private ISceneCooperationService sceneCooperationService; @Value("${scene.pro.url}") private String sceneProUrl; @Value("${scene.pro.v3.url}") private String sceneProV3Url; @Value("${scene.pro.new.url}") private String sceneProV4Url; @Value("${main.url}") private String mainUrl; @Autowired private IUserService userService; /** * 是否已登录 * @return */ @PostMapping(value = "/isLogin") public ResultData isLogin(@RequestParam("num") String num) throws Exception{ return sceneService.isLogin(num, this.getSsoUser()); } /** * 协作者根据场景码获取场景资源集合 * @return */ @RequestMapping(value = "/sceneResourceBySceneNum", method = RequestMethod.POST) public ResultData sceneResourceBySceneNum(@RequestBody RequestSceneCooperation cooperation) throws Exception{ return sceneService.sceneResourceBySceneNum(cooperation, this.getSsoUserV3()); } /** * app录音获取录音文件版本 */ @RequestMapping(value = "/getVoiceSound") public ResultData getVoiceSound(HttpServletRequest request) throws Exception { String sceneNum = request.getParameter("num"); return sceneService.getVoiceSound(sceneNum); } /** * 获取场景详情 */ @RequestMapping(value = "/getInfo") public ResultData getInfo(HttpServletRequest request) throws Exception { String sceneNum = request.getParameter("num"); return sceneProService.getInfo(sceneNum); } /** * 场景模型重新计算 */ @RequestMapping(value = "/rebuildVideoScene", method = RequestMethod.POST) public ResultData rebuildVideoScene(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception { return sceneService.rebuildVideoScene(requestRebuildVedioScene); } /** * 场景视频重新计算进度 */ @RequestMapping(value = "/rebuildVideoSceneProgress", method = RequestMethod.POST) public ResultData rebuildVideoSceneProgress(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception { if(StringUtils.isEmpty(requestRebuildVedioScene.getSceneNum())){ throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } ScenePro sceneProEntity = sceneProService.findBySceneNum(requestRebuildVedioScene.getSceneNum()); if(null == sceneProEntity){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } return ResultData.ok(videoSceneProgressService.findVideoSceneProgress(requestRebuildVedioScene)); } /** * 场景图片重新计算 */ @RequestMapping(value = "/rebuildPicScene", method = RequestMethod.POST) public ResultData rebuildPicScene(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception { return sceneService.rebuildPicScene(requestRebuildVedioScene); } /** * 场景图片重新计算进度 */ @RequestMapping(value = "/rebuildPicSceneProgress", method = RequestMethod.POST) public ResultData rebuildPicSceneProgress(@RequestBody RequestRebuildVedioScene requestRebuildVedioScene) throws Exception { if(StrUtil.isEmpty(requestRebuildVedioScene.getSceneNum())){ throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } ScenePro sceneProEntity = sceneProService.findBySceneNum(requestRebuildVedioScene.getSceneNum()); if(null == sceneProEntity){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } ResponseVideoSceneProgress picSceneProgress = picSceneProgressService.findPicSceneProgress(requestRebuildVedioScene); return ResultData.ok(picSceneProgress.getRebuildResult()); } /** * 根据场景密码打开场景 */ @RequestMapping(value = "/openSceneBykey") public ResultData openSceneBykey(HttpServletRequest request) throws Exception { String sceneNum = request.getParameter("num"); String sceneKey = request.getParameter("sceneKey"); if (StringUtils.isEmpty(sceneNum) || StringUtils.isEmpty(sceneKey)) { throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } ScenePro scenePro = sceneProService.findBySceneNum(sceneNum); if (scenePro == null) { throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } if (scenePro.getPayStatus() != 1) { throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } SceneProEdit editEntity = sceneProEditService.findBySceneProId(scenePro.getId()); if (editEntity == null) { throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } if(!sceneKey.equals(editEntity.getSceneKey())){ throw new BusinessException(ErrorCode.FAILURE_CODE_5021); } return ResultData.ok(); } /** * 获取数据对接下载信息 */ @RequestMapping(value = "/downLoadZSData", method = RequestMethod.GET) public ResultData downLoadZSData(HttpServletRequest request) throws Exception{ String sceneNum = request.getParameter("sceneNum"); if(StrUtil.isEmpty(sceneNum)){ throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } ScenePro sceneProEntity = sceneProService.findBySceneNum(sceneNum); if(sceneProEntity == null){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } SceneDataDownload sceneDataDownloadEntity = sceneDataDownloadService.findBySceneNum(sceneNum); if(sceneDataDownloadEntity == null){ throw new BusinessException(ErrorCode.FAILURE_CODE_5025); } ResponseSceneDataDownload responseSceneDataDownload = new ResponseSceneDataDownload(); BeanUtils.copyProperties(sceneDataDownloadEntity, responseSceneDataDownload); return ResultData.ok(responseSceneDataDownload); } /** *

跳转到编辑页面 *

* @author dengsixing * @date 2022/9/6 * @param request * @param response **/ @RequestMapping("goEditScenePage") public void goEditScenePage(HttpServletRequest request, HttpServletResponse response) throws Exception{ String phoneNum = request.getParameter("phoneNum"); String password = request.getParameter("password"); String sceneNum = request.getParameter("sceneNum"); String childName = request.getParameter("childName"); String lang = request.getParameter("lang"); String vlog = request.getParameter("vlog"); ScenePro scene = sceneProService.findBySceneNum(sceneNum); if(scene == null) { throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } if(StrUtil.isNotEmpty(childName)){ Camera cameraEntity = cameraService.findByChildName(childName); if(cameraEntity != null){ CameraDetail cameraDetailEntity = cameraDetailService.findByCameraId(cameraEntity.getId()); if(cameraDetailEntity != null && cameraDetailEntity.getCooperationUser() != null){ throw new BusinessException(ErrorCode.FAILURE_CODE_5014); } SSOUser dbUser = new SSOUser(); dbUser.setUserName(childName); dbUser.setId(scene.getUserId()); if(dbUser.getId() == null){ dbUser.setCameraLogin(1); dbUser.setCameraId(cameraEntity.getId()); } String token = JwtUtil.createJWT(-1, childName, LoginType.USER.code()); ssoLoginHelper.loginV3(token, dbUser); //登录成功 if(scene.getWebSite().contains(sceneProUrl)){ response.sendRedirect(mainUrl + "/" + sceneProUrl.replace("show", "edit").replace("PC", "Mobile") + sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); } if(scene.getIsUpgrade() != null && scene.getIsUpgrade() == 1){ if(scene.getWebSite().contains(sceneProV4Url)){ response.sendRedirect(mainUrl + "/" + sceneProV4Url.replace("s", "e") + sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); return; } } if(scene.getWebSite().contains(sceneProV3Url)){ response.sendRedirect(mainUrl + "/" + sceneProV3Url.replace("s", "e") + sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); } return; } } if(StringUtils.isEmpty(phoneNum) || StringUtils.isEmpty(password) || StringUtils.isEmpty(sceneNum)){ throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } if(scene.getUserId()==null) throw new BusinessException(ErrorCode.FAILURE_CODE_5013); User user = userService.findByUserName(phoneNum); if(user == null){ throw new BusinessException(ErrorCode.FAILURE_CODE_3015); } if(user.getId().longValue() != scene.getUserId().longValue()) { SceneCooperation sceneCooperationEntity = sceneCooperationService.getByNumAndUserId(sceneNum, user.getId()); if(sceneCooperationEntity == null){ throw new BusinessException(ErrorCode.FAILURE_CODE_5014); } } if(!SecurityUtil.MD5(password).equals(user.getPassword())) { throw new BusinessException(ErrorCode.FAILURE_CODE_3015); } String token = JwtUtil.createJWT(-1, user.getUserName(), LoginType.USER.code()); ssoLoginHelper.loginV3(token, BeanUtil.copyProperties(user, SSOUser.class)); //登录成功 if(scene.getWebSite().contains(sceneProUrl)){ response.sendRedirect(mainUrl + "/" + sceneProUrl.replace("show", "edit").replace("PC", "Mobile") + sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); } if(scene.getIsUpgrade() != null && scene.getIsUpgrade() == 1){ if(scene.getWebSite().contains(sceneProV4Url)){ response.sendRedirect(mainUrl + "/" + sceneProV4Url.replace("s", "e") + sceneNum + "&t=" +System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); return; } } if(scene.getWebSite().contains(sceneProV3Url)) { response.sendRedirect(mainUrl + "/" + sceneProV3Url.replace("s", "e") + sceneNum + "&t=" + System.currentTimeMillis() + "&token=" + token + "&app" + (lang == null ? "" : "&lang=" + lang) + (vlog == null ? "" : "&vlog=" + vlog)); } } @PostMapping("/createScene") public Result createScene(@RequestBody RequestScene param) throws Exception{ return sceneProService.createScene(param); } /** * 创建sketch场景分享二维码的logo */ @GetMapping(value = "/createSketchQrLogo") public Result createSketchQrLogo(HttpServletRequest request) throws Exception{ String sceneNum = request.getParameter("sceneNum"); if(StringUtils.isEmpty(sceneNum)){ throw new BusinessException(ErrorCode.FAILURE_CODE_3001); } //生成二维码 QrCodeUtil.generate(mainUrl + "/" + sceneProV3Url + sceneNum, QrConfig.create(), FileUtil.file(ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+".png")); QrCodeUtil.generate(mainUrl + "/" + sceneProV3Url + sceneNum + "&lang=en", QrConfig.create(), FileUtil.file(ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+"_en.png")); return Result.success(); } }