package com.fdkankan.contro.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ZipUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.common.constant.CommonSuccessStatus; import com.fdkankan.common.constant.RecStatus; import com.fdkankan.common.constant.SceneStatus; import com.fdkankan.common.util.CmdUtils; import com.fdkankan.common.util.SnowflakeIdGenerator; import com.fdkankan.contro.entity.SceneFileBuild; import com.fdkankan.contro.entity.SceneOrigBd; import com.fdkankan.contro.entity.ScenePlus; import com.fdkankan.contro.httpclient.CustomHttpClient; import com.fdkankan.contro.service.*; import com.fdkankan.fyun.config.FYunFileConfig; import com.fdkankan.fyun.local.constant.LocalConstants; import com.fdkankan.model.constants.ConstantFilePath; import com.fdkankan.model.utils.SceneUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.UUID; @Slf4j @Service public class MjServiceImpl implements MjService { @Resource private FYunFileConfig fYunFileConfig; @Autowired private ISceneFileBuildService sceneFileBuildService; @Autowired private ISceneOrigBdService sceneOrigBdService; @Autowired private IScenePlusService scenePlusService; @Autowired private ISceneFilenameService sceneFilenameService; @Resource private CustomHttpClient httpClient; @Override public void bd() { List list = sceneOrigBdService.list(new LambdaQueryWrapper().eq(SceneOrigBd::getStatus, CommonSuccessStatus.WAITING.code())); if (CollUtil.isEmpty(list)) { return; } for (SceneOrigBd v : list) { String uuid = UUID.randomUUID().toString(); String fileUrl = v.getFileUrl(); String zipName = FileUtil.getName(fileUrl); String zipDir = ConstantFilePath.BUILD_MODEL_PATH + "bd/" + uuid + "/"; String taskId = v.getTaskId(); String kNo = v.getKNo(); try { ScenePlus scenePlus = scenePlusService.getByTaskId(taskId); if(Objects.nonNull(scenePlus) && scenePlus.getSceneStatus() == SceneStatus.wait.code()){ continue; } FileUtil.mkdir(zipDir); String downloadCmd = "wget -O " + zipDir + zipName + " " + fileUrl; CmdUtils.callLineSh(downloadCmd); // httpClient.downloadFile(fileUrl, zipDir, zipName); // String unzipCmd = "unzip -O GBK " + zipDir + zipName + " -d " + zipDir; // CmdUtils.callLine(unzipCmd); ZipUtil.unzip(new File(zipDir + zipName), new File(zipDir)); //解压后删除压缩包 FileUtil.del(zipDir + zipName); String dataFdagePath = zipDir + "data.fdage"; JSONObject dataFdageJson = JSON.parseObject(FileUtil.readUtf8String(dataFdagePath)); JSONObject camJson = dataFdageJson.getJSONObject("cam"); String snCode = camJson.getString("uuid"); String uuidtime = dataFdageJson.getString("uuidtime"); String unicode = snCode + "_" + uuidtime; SceneFileBuild sceneFileBuild = sceneFileBuildService.getOne(new LambdaQueryWrapper().eq(SceneFileBuild::getTaskId, taskId)); String fileId = null; if (Objects.isNull(sceneFileBuild)) { fileId = String.valueOf(new SnowflakeIdGenerator(0, 0).nextId()); sceneFileBuild = new SceneFileBuild(); sceneFileBuild.setFileId(fileId); sceneFileBuild.setUnicode(unicode); sceneFileBuild.setChildName(snCode); sceneFileBuild.setCreateTime(new Date()); sceneFileBuild.setRecStatus(RecStatus.VALID.code()); sceneFileBuild.setTaskId(taskId); sceneFileBuild.setKNo(kNo); sceneFileBuildService.save(sceneFileBuild); } else { fileId = sceneFileBuild.getFileId(); } String realDataSource = ConstantFilePath.BUILD_MODEL_PATH + snCode + "/" + fileId + "/" + unicode; String realOssHomePath = SceneUtil.getHomePath(realDataSource); String realOssHomeAbsolutePath = LocalConstants.BASE_PATH + fYunFileConfig.getBucket() + "/" + realOssHomePath; FileUtil.loopFiles(zipDir).stream().forEach(file -> { FileUtil.copy(file.getAbsolutePath(), file.getAbsolutePath().replace(zipDir, realOssHomeAbsolutePath), true); }); sceneFileBuildService.noticeBuild(unicode, v.getId(), realDataSource, "zip"); v.setStatus(CommonSuccessStatus.SUCCESS.code()); } catch (Exception e) { v.setStatus(CommonSuccessStatus.FAIL.code()); } sceneOrigBdService.updateById(v); } } public static void main(String[] args) { // ZipUtil.unzip(new File("D:\\Downloads\\916ed6689_202501101516307030\\916ed6689_202501101516307030.zip"), new File("D:\\Downloads\\aaa\\bbb")); String substring = "/mnt/data/bd/0ef1b470-4f3a-49b4-bd66-7e0584cce660/".substring(0, "/mnt/data/bd/0ef1b470-4f3a-49b4-bd66-7e0584cce660/".lastIndexOf("/")); System.out.println(substring); } }