package com.fdkankan.job.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.job.entity.ScenePlus; import com.fdkankan.job.entity.ScenePlusExt; import com.fdkankan.job.service.IRepairUpXmlUrlService; import com.fdkankan.job.service.IScenePlusExtService; import com.fdkankan.job.service.IScenePlusService; import com.fdkankan.job.service.ISceneProService; import com.fdkankan.model.constants.UploadFilePath; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; import com.xxl.job.core.context.XxlJobHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** *

* TODO *

* * @author dengsixing * @since 2022/12/16 **/ @Service public class RepairUpXmlUrlServiceImpl implements IRepairUpXmlUrlService { @Autowired private ISceneProService sceneProService; @Autowired private IScenePlusService scenePlusService; @Autowired private IScenePlusExtService scenePlusExtService; @Autowired private FYunFileServiceInterface fYunFileServiceInterface; @Autowired private RedisUtil redisUtil; @Override public void repairSceneUpXmlUrlOfVideos() { List numList = null; String nums = XxlJobHelper.getJobParam(); if(StrUtil.isNotEmpty(nums)){ numList = Arrays.asList(nums.split(",")); } //查询场景 LambdaQueryWrapper scenePlusExtQueryWrapper = new LambdaQueryWrapper<>(); scenePlusExtQueryWrapper.isNotNull(ScenePlusExt::getVideos); if(CollUtil.isNotEmpty(numList)){ List plusList = scenePlusService.list(new LambdaQueryWrapper().in(ScenePlus::getNum, numList)); if(CollUtil.isEmpty(plusList)){ return; } List plusIdList = plusList.stream().map(plus -> plus.getId()).collect(Collectors.toList()); scenePlusExtQueryWrapper.in(ScenePlusExt::getPlusId, plusIdList); } int index = 0; int size = 1; boolean exit = false; List plusExtList = new ArrayList<>(); do { scenePlusExtQueryWrapper.last("limit " + index + " " + size); List subList = scenePlusExtService.list(scenePlusExtQueryWrapper); if(CollUtil.isNotEmpty(subList)){ plusExtList.addAll(subList); }else{ exit = true; } }while (exit); if(CollUtil.isEmpty(plusExtList)){ return; } List plusIdList = plusExtList.stream().map(ext -> ext.getPlusId()).collect(Collectors.toList()); List plusList = scenePlusService.listByIds(plusIdList); if(CollUtil.isEmpty(plusList)){ return; } Map idNumMap = new HashMap<>(); plusList.stream().forEach(plus->{ idNumMap.put(plus.getId(), plus.getNum()); }); List updateList = plusExtList.stream().filter(ext -> { String videos = ext.getVideos(); String num = idNumMap.get(ext.getPlusId()); if(StrUtil.isEmpty(num)){ return false; } String url = "https://4dkk.4dage.com/" + String.format(UploadFilePath.DATA_VIEW_PATH, num) + "Up.xml"; JSONObject videosJson = JSON.parseObject(videos); String upPath = videosJson.getString("upPath"); if (StrUtil.isEmpty(upPath)) { return false; } else //判断是否包含 if (upPath.contains("/data/data") || (upPath.contains("scene_view_data") && !upPath .contains(num))) { //修复数据库 videosJson.replace("upPath", url); ext.setVideos(videosJson.toJSONString()); //修复scene.json String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json"; String sceneJsonStr = fYunFileServiceInterface.getFileContent(sceneJsonPath); JSONObject sceneJson = JSON.parseObject(sceneJsonStr); sceneJson.replace("videos", ext.getVideos()); fYunFileServiceInterface .uploadFile(sceneJson.toJSONString().getBytes(StandardCharsets.UTF_8), sceneJsonPath); //清除缓存 redisUtil.del(String.format(RedisKey.SCENE_JSON, num)); return true; } return false; }).collect(Collectors.toList()); if(CollUtil.isNotEmpty(updateList)){ scenePlusExtService.updateBatchById(updateList); } } }