package com.fdkankan.scene.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.common.constant.CommonStatus; import com.fdkankan.common.constant.ErrorCode; import com.fdkankan.model.constants.UploadFilePath; import com.fdkankan.common.exception.BusinessException; import com.fdkankan.scene.httpclient.MyClient; import com.fdkankan.web.response.ResultData; import com.fdkankan.common.util.DateExtUtil; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.scene.entity.Camera; import com.fdkankan.scene.entity.CameraDetail; import com.fdkankan.scene.entity.SceneCooperation; import com.fdkankan.scene.entity.ScenePlus; import com.fdkankan.scene.entity.ScenePlusExt; import com.fdkankan.scene.entity.SceneResource; import com.fdkankan.scene.entity.User; import com.fdkankan.scene.entity.UserIncrement; import com.fdkankan.scene.service.ICameraDetailService; import com.fdkankan.scene.service.ICameraService; import com.fdkankan.scene.service.ISceneCooperationService; import com.fdkankan.scene.service.ISceneEditInfoExtService; import com.fdkankan.scene.service.ISceneEditService; import com.fdkankan.scene.service.IScenePlusExtService; import com.fdkankan.scene.service.IScenePlusService; import com.fdkankan.scene.service.ISceneProService; import com.fdkankan.scene.service.ISceneResourceService; import com.fdkankan.scene.service.ISceneUploadService; import com.fdkankan.scene.service.IUserIncrementService; import com.fdkankan.scene.service.IUserService; import com.fdkankan.scene.vo.BaseDataParamVO; import com.fdkankan.scene.vo.BaseSceneParamVO; import com.fdkankan.scene.vo.DeleteFileParamVO; import com.fdkankan.scene.vo.LocalesParamVO; import com.fdkankan.scene.vo.SceneAuthVO; import com.fdkankan.web.user.SSOUser; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; /** *
* TODO *
* * @author dengsixing * @since 2022/3/11 **/ @Slf4j @Service @RefreshScope public class SceneEditServiceImpl implements ISceneEditService { @Value("${4dkk.manageService.basePath}") private String manageServiceUrl; @Value("${4dkk.manageService.api.getServiceUpTip}") private String getServiceUpTipApi; @Autowired ISceneProService sceneProService; @Autowired IScenePlusService scenePlusService; @Autowired private FYunFileServiceInterface fYunFileService; @Autowired private ISceneUploadService sceneUploadService; @Autowired private ISceneEditInfoExtService sceneEditInfoExtService; @Autowired private ICameraDetailService cameraDetailService; @Autowired private ICameraService cameraService; @Autowired private IUserIncrementService userIncrementService; @Value("${expected.time}") private String expectedTime; @Autowired private IUserService userService; @Autowired private ISceneCooperationService sceneCooperationService; @Autowired private ISceneResourceService sceneResourceService; @Autowired private IScenePlusExtService scenePlusExtService; @Value("${scene.expired.month:#{null}}") private Integer expiredMonth; @Autowired private MyClient myClient; @Override public SceneAuthVO getAuth(String num, SSOUser ssoUser){ // 解密获得username,用于和数据库进行对比 ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num); if(Objects.isNull(scenePlus)){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); SceneAuthVO sceneAuthVO = new SceneAuthVO(); sceneAuthVO.setExclude(new ArrayList<>()); sceneAuthVO.setInclude(new ArrayList<>()); //判断本地资源是否已本删除,如果已删除,前端根据字段值为true提示用户不能使用某些功能,需要重算 Date algorithmTime = scenePlusExt.getAlgorithmTime() == null ? scenePlus.getCreateTime() : scenePlusExt.getAlgorithmTime(); if (!ObjectUtils.isEmpty(expiredMonth) && com.fdkankan.common.util.DateUtil.delay(algorithmTime, expiredMonth, Calendar.MONTH).before(new Date())) { sceneAuthVO.setSourceExpired(true); } //判断该场景是否属于增值权益 boolean isVip = true; //获取该相机是否有权益 boolean isExpired = false; sceneAuthVO.setIsExpired(isExpired); sceneAuthVO.setIsVip(isVip); return sceneAuthVO; } @Override public ResultData locales(LocalesParamVO param) throws Exception { String key = "v4/www/locales/" + param.getFile(); fYunFileService.uploadFile(JSON.toJSONBytes(param.getData()), key); return ResultData.ok(); } @Override public ResultData saveTour(BaseDataParamVO param) throws IOException { ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum()); if(Objects.isNull(scenePlus)){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); String key = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()) + "tour.json"; fYunFileService.uploadFile(scenePlusExt.getYunFileBucket(), param.getData().getBytes(StandardCharsets.UTF_8), key); sceneEditInfoExtService.updateToursByNum( param.getNum(), Integer.valueOf(CommonStatus.YES.code())); return ResultData.ok(); } @Override public ResultData deleteTour(BaseSceneParamVO param) throws Exception { ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum()); if(Objects.isNull(scenePlus)){ throw new BusinessException(ErrorCode.FAILURE_CODE_5005); } ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum()); String tourJsonPath = userEditPath + "tour.json"; String tourJson = fYunFileService.getFileContent(scenePlusExt.getYunFileBucket(), tourJsonPath); JSONArray tours = JSON.parseArray(tourJson); if(CollUtil.isNotEmpty(tours)){ List