package com.fdkankan.manage_jp.service.impl; import cn.hutool.core.io.FileUtil; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fdkankan.common.constant.SceneVersionType; import com.fdkankan.common.util.FileUtils; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.manage_jp.common.OssPath; import com.fdkankan.manage_jp.common.ResultCode; import com.fdkankan.manage_jp.entity.*; import com.fdkankan.manage_jp.exception.BusinessException; import com.fdkankan.manage_jp.httpClient.service.LaserService; import com.fdkankan.manage_jp.mapper.IScenePlusMapper; import com.fdkankan.manage_jp.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.manage_jp.util.SceneResourcePath; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.bytedeco.javacpp.presets.opencv_core; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.io.File; import java.util.List; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; /** *

* 场景主表 服务实现类 *

* * @author * @since 2022-12-30 */ @Service @Slf4j public class ScenePlusServiceImpl extends ServiceImpl implements IScenePlusService { @Autowired IScene3dNumService scene3dNumService; @Autowired IScenePlusExtService scenePlusExtService; @Autowired ISceneEditInfoService sceneEditInfoService; @Autowired ISceneEditInfoExtService sceneEditInfoExtService; @Autowired ISceneEditControlsService sceneEditControlsService; @Autowired FYunFileServiceInterface fYunFileServiceInterface; @Autowired SceneCommonService sceneCommonService; @Autowired ISurveillanceService surveillanceService; @Autowired LaserService laserService; @Autowired ISceneProService sceneProService; @Override public ScenePlus getByNum(String sceneNum) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ScenePlus::getNum,sceneNum); List list = this.list(wrapper); if(list!=null && list.size() >0){ return list.get(0); } return null; } @Override public void unbind(Long cameraId,Long userId) { LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(ScenePlus::getCameraId,cameraId); wrapper.set(ScenePlus::getUserId,userId); this.update(wrapper); } @Override public ScenePlus copyScene(ScenePlus scenePlus) { if(scenePlus.getSceneStatus() !=-2){ throw new BusinessException(ResultCode.SCENE_ERROR); } String oldNum = scenePlus.getNum(); String newNum = sceneCommonService.getNewNum(oldNum); Long plusId = scenePlus.getId(); String oldSceneName = scenePlus.getTitle(); ScenePlusExt plusExt = scenePlusExtService.getByPlusId(plusId); if(plusExt == null){ throw new BusinessException(ResultCode.NOT_RECORD); } scenePlus.setNum(newNum); scenePlus.setTitle(scenePlus.getTitle() +"(copy)"); scenePlus.setSceneStatus(0); scenePlus.setId(null); this.save(scenePlus); try { sceneCommonService.v4Async(plusExt,oldNum,newNum,scenePlus,plusId,oldSceneName); }catch (Exception e){ log.error("复制场景失败-sceneNum:{},error:{}",oldNum,e); scenePlus.setSceneStatus(-1); this.updateById(scenePlus); throw new BusinessException(ResultCode.SCENE_DATA_ERROR); } return scenePlus; } @Override public void updatePayStatus(String num,String version,Integer sceneSource,Integer payStatus,CameraDetail cameraDetail) { if(version.equals("v3")){ LambdaUpdateWrapper wrapper2 = new LambdaUpdateWrapper<>(); wrapper2.set(ScenePro::getPayStatus,payStatus); wrapper2.eq(ScenePro::getNum,num); if(cameraDetail != null){ wrapper2.set(ScenePro::getCameraId,cameraDetail.getCameraId()); } if(cameraDetail != null){ wrapper2.set(ScenePro::getUserId,cameraDetail.getUserId()); } sceneProService.update(wrapper2); updateOssPayStatus(String.format(OssPath.v3_statusPath,num),payStatus); }else if(version.equals("v4")){ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.set(ScenePlus::getPayStatus,payStatus); wrapper.eq(ScenePlus::getNum,num); if(cameraDetail != null){ wrapper.set(ScenePlus::getCameraId,cameraDetail.getCameraId()); } if(cameraDetail != null){ wrapper.set(ScenePlus::getUserId,cameraDetail.getUserId()); } this.update(wrapper); updateOssPayStatus(String.format(OssPath.v4_statusPath,num),payStatus); } if(sceneSource == 4 || sceneSource == 5){ laserService.updateStatus(num,payStatus==1?2:3,cameraDetail); } } /** * 修改oss status.json中 payStatus */ public void updateOssPayStatus(String path,Integer payStatus) { try { if(!fYunFileServiceInterface.fileExist(path)){ return; } String data = fYunFileServiceInterface.getFileContent(path); if(StringUtils.isBlank(data)){ return; } JSONObject jsonObject = JSONObject.parseObject(data); jsonObject.put("payStatus",payStatus); String json = JSONUtil.toJsonStr(jsonObject); FileUtils.writeFile(OssPath.localStatusPath ,json); log.info("updateOssStatus--localPath:{},ossPath:{},payStatus:{}",OssPath.localStatusPath,path,payStatus); fYunFileServiceInterface.uploadFile(OssPath.localStatusPath,path); }catch (Exception e){ e.printStackTrace(); }finally { FileUtil.del(OssPath.localStatusPath); } } }