lyhzzz 9 months ago
parent
commit
ccb0044427
24 changed files with 640 additions and 27 deletions
  1. 1 1
      pom.xml
  2. 11 8
      src/main/java/com/fdkankan/fusion/common/FilePath.java
  3. 10 10
      src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java
  4. 121 0
      src/main/java/com/fdkankan/fusion/controller/CaseImgController.java
  5. 39 0
      src/main/java/com/fdkankan/fusion/controller/CaseImgTagController.java
  6. 75 0
      src/main/java/com/fdkankan/fusion/entity/CaseImg.java
  7. 59 0
      src/main/java/com/fdkankan/fusion/entity/CaseImgTag.java
  8. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ICaseImgMapper.java
  9. 18 0
      src/main/java/com/fdkankan/fusion/mapper/ICaseImgTagMapper.java
  10. 22 0
      src/main/java/com/fdkankan/fusion/request/CaseImgParam.java
  11. 2 0
      src/main/java/com/fdkankan/fusion/service/ICaseFilesService.java
  12. 25 0
      src/main/java/com/fdkankan/fusion/service/ICaseImgService.java
  13. 19 0
      src/main/java/com/fdkankan/fusion/service/ICaseImgTagService.java
  14. 27 0
      src/main/java/com/fdkankan/fusion/service/impl/CaseFilesServiceImpl.java
  15. 128 0
      src/main/java/com/fdkankan/fusion/service/impl/CaseImgServiceImpl.java
  16. 42 0
      src/main/java/com/fdkankan/fusion/service/impl/CaseImgTagServiceImpl.java
  17. 3 0
      src/main/java/com/fdkankan/fusion/service/impl/CaseNumServiceImpl.java
  18. 4 2
      src/main/java/com/fdkankan/fusion/service/impl/XfyunImageServiceImpl.java
  19. 1 1
      src/main/resources/application-local.yaml
  20. 1 1
      src/main/resources/application-test.yaml
  21. 3 3
      src/main/resources/application.yaml
  22. 1 1
      src/main/resources/logback-spring.xml
  23. 5 0
      src/main/resources/mapper/fusion/CaseImgMapper.xml
  24. 5 0
      src/main/resources/mapper/fusion/CaseImgTagMapper.xml

+ 1 - 1
pom.xml

@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>com.fdkankan</groupId>
-    <artifactId>4dkankan-fusion</artifactId>
+    <artifactId>4dkankan-fusion-bc</artifactId>
     <version>1.0.0</version>
 
 

+ 11 - 8
src/main/java/com/fdkankan/fusion/common/FilePath.java

@@ -2,22 +2,25 @@ package com.fdkankan.fusion.common;
 
 public class FilePath {
 
-    public final static String LOCAL_BASE_PATH = "/home/tomcat/jar-fusion-8808/";
-    public final static String MNT_BASE_PATH = "/mnt/fusion/";
+    public final static String LOCAL_BASE_PATH = "/mnt/fusion-bc/";
+    public final static String MNT_BASE_PATH = "/mnt/fusion-bc/";
 
     public final static String OBJ_OSS_PATH = "scene_view_data/%s";
-    public final static String GLB_OSS_PATH = "fusion/%s/model/glb/%s/mesh.glb";
-    public final static String B3DM_OSS_PATH = "fusion/%s/model/b3dm/%s";
-    public final static String VIDEO_OSS_PATH = "fusion/%s/video/%s";
-    public final static String File_OSS_PATH = "fusion/%s/file/%s";
-    public final static String ICON_OSS_PATH = "fusion/%s/icon/%s";
-    public final static String DEFAULT_OSS_PATH = "fusion/default/%s";
+    public final static String GLB_OSS_PATH = "fusion-bc/%s/model/glb/%s/mesh.glb";
+    public final static String B3DM_OSS_PATH = "fusion-bc/%s/model/b3dm/%s";
+    public final static String VIDEO_OSS_PATH = "fusion-bc/%s/video/%s";
+    public final static String File_OSS_PATH = "fusion-bc/%s/file/%s";
+    public final static String ICON_OSS_PATH = "fusion-bc/%s/icon/%s";
+    public final static String DEFAULT_OSS_PATH = "fusion-bc/default/%s";
 
    // public final static String VIDEO_LOCAL_PATH = "D:\\video\\merge";
    public final static String VIDEO_LOCAL_PATH = LOCAL_BASE_PATH + "%s/video/merge";
    public final static String OBJ_LOCAL_PATH = LOCAL_BASE_PATH + "%s/model/%s";
 
    public final static String qj_image_path = "scene_view_data/%s/images/pan/high/";
+    public final static String IMAGES_OSS_PATH = "fusion/%s/image/%s";
 
+    public final static String FFMPEG_IMG_PATH  = "/mnt/fusion/ffmpeg_imgs";
 
+    public final static String cut_images_path = "scene_view_data/%s/images/cut_images";
 }

+ 10 - 10
src/main/java/com/fdkankan/fusion/common/util/RedisKeyUtil.java

@@ -5,19 +5,19 @@ public class RedisKeyUtil {
 
     public static Long tokenTime = 2 * 60 * 60L;
     public static Long projectRandCodeKeyTime = 14 * 24 * 60 * 60L ;
-    public static String mergerVideoKey = "fusion:merger:video:";
-    public static String modelUpload = "fusion:model:upload:";
-    public static String modelCancelUpload = "fusion:model:cancel:upload:";
-    public static String MANAGE_PERM_USER  = "fusion:manage_perm_user:%s";
-    public static String MANAGE_ROLE_USER = "fusion:manage_role_user:%s";
+    public static String mergerVideoKey = "fusion-bc:merger:video:";
+    public static String modelUpload = "fusion-bc:model:upload:";
+    public static String modelCancelUpload = "fusion-bc:model:cancel:upload:";
+    public static String MANAGE_PERM_USER  = "fusion-bc:manage_perm_user:%s";
+    public static String MANAGE_ROLE_USER = "fusion-bc:manage_role_user:%s";
     public static String fdToken = "token#%s";
-    public static String MANAGE_MENU = "fusion:menu";
-    public static String fusionLoginToken = "fusion:token:%s";
-    public static String fusionLoginUser = "fusion:user:%s";
-    public static String RAND_CODE_KEY = "fusion:project:rand_key:%s";
+    public static String MANAGE_MENU = "fusion-bc:menu";
+    public static String fusionLoginToken = "fusion-bc:token:%s";
+    public static String fusionLoginUser = "fusion-bc:user:%s";
+    public static String RAND_CODE_KEY = "fusion-bc:project:rand_key:%s";
 
 
-    public static String loginAuthCode = "fusion:login:auth:%s";
+    public static String loginAuthCode = "fusion-bc:login:auth:%s";
 
     public static final String SCENE_VERSION = "scenejson:num:%s";
 }

+ 121 - 0
src/main/java/com/fdkankan/fusion/controller/CaseImgController.java

@@ -0,0 +1,121 @@
+package com.fdkankan.fusion.controller;
+
+
+import com.fdkankan.fusion.common.FilePath;
+import com.fdkankan.fusion.common.RequestBase;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.common.util.StringUtils;
+import com.fdkankan.fusion.entity.CaseImg;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.request.CaseImgParam;
+import com.fdkankan.fusion.service.ICaseImgService;
+import com.fdkankan.fusion.service.impl.UploadService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-04
+ */
+@RestController
+@RequestMapping("/caseImg")
+public class CaseImgController {
+
+    @Autowired
+    ICaseImgService caseImgService;
+
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody CaseImgParam param){
+        if(param.getCaseId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        return ResultData.ok(caseImgService.getByCaseId(param.getCaseId(),0));
+    }
+
+    @PostMapping("/saveOrUpdate")
+    public ResultData saveOrUpdate(@RequestBody CaseImg caseImg){
+        if(caseImg.getCaseId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        return ResultData.ok(caseImgService.saveOrUpdate(caseImg));
+    }
+
+    @PostMapping("/addBatch")
+    public ResultData saveBatch(@RequestBody CaseImgParam param){
+
+        if(param.getImgUrls() == null || param.getImgUrls().isEmpty()){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        for (CaseImg imgUrl : param.getImgUrls()) {
+            if(imgUrl.getCaseId() == null){
+                throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+            }
+            caseImgService.save(imgUrl);
+        }
+        return ResultData.ok();
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody CaseImg caseImg){
+        if(caseImg.getId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        return ResultData.ok(caseImgService.removeById(caseImg.getId()));
+    }
+
+    @PostMapping("/updateSort")
+    public ResultData updateSort(@RequestBody CaseImgParam param){
+        caseImgService.updateSort(param);
+        return ResultData.ok();
+    }
+
+    @Autowired
+    UploadService uploadService;
+    @Value("${spring.profiles.active}")
+    private String environment;
+
+    @PostMapping("/uploadImagesAndSave")
+    public ResultData uploadImagesAndSave(@RequestParam(required = false)MultipartFile[] files,
+                                          @RequestParam(required = false)Integer caseId) {
+        if(caseId == null || files.length==0){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        for (MultipartFile file : files) {
+            String fileName = file.getOriginalFilename();
+            if (fileName != null && fileName.contains(".")) {
+                fileName = fileName.substring(0,fileName.lastIndexOf("."));
+            }
+            String url = uploadService.uploadFile(file, true, String.format(FilePath.IMAGES_OSS_PATH, environment, caseId));
+            CaseImg caseImg = new CaseImg();
+            caseImg.setCaseId(caseId);
+            caseImg.setImgUrl(url);
+            caseImg.setImgInfo(fileName);
+            caseImgService.save(caseImg);
+        }
+        return ResultData.ok();
+    }
+
+
+    @GetMapping("/getFfmpegImage")
+    public ResultData getFfmpegImage( @RequestParam(required = false)Integer caseId){
+        if(caseId == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        return ResultData.ok(caseImgService.getByCaseId(caseId,1));
+    }
+
+    @PostMapping("/ffmpegImage")
+    public ResultData ffmpegImage(@RequestParam(required = false)MultipartFile[] files,
+                                  @RequestParam(required = false)Integer caseId) {
+        return ResultData.ok(caseImgService.ffmpegImage(files,caseId));
+    }
+}
+

+ 39 - 0
src/main/java/com/fdkankan/fusion/controller/CaseImgTagController.java

@@ -0,0 +1,39 @@
+package com.fdkankan.fusion.controller;
+
+
+import com.fdkankan.fusion.common.ResultData;
+import com.fdkankan.fusion.entity.CaseExtractDetail;
+import com.fdkankan.fusion.entity.CaseImgTag;
+import com.fdkankan.fusion.service.ICaseExtractDetailService;
+import com.fdkankan.fusion.service.ICaseImgTagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-12
+ */
+@RestController
+@RequestMapping("/caseImgTag")
+public class CaseImgTagController {
+
+    @Autowired
+    ICaseImgTagService caseImgTagService;
+
+
+    @GetMapping("/info")
+    public ResultData info(@RequestParam(required = false) Integer caseId){
+        return ResultData.ok(caseImgTagService.getByCaseId(caseId));
+    }
+
+    @PostMapping("/saveOrUpdate")
+    public ResultData saveOrUpdate(@RequestBody CaseImgTag caseImgTag){
+        caseImgTagService.saveByParam(caseImgTag);
+        return ResultData.ok();
+    }
+}
+

+ 75 - 0
src/main/java/com/fdkankan/fusion/entity/CaseImg.java

@@ -0,0 +1,75 @@
+package com.fdkankan.fusion.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-04
+ */
+@Getter
+@Setter
+@TableName("t_case_img")
+public class CaseImg implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 案例id
+     */
+    @TableField("case_id")
+    private Integer caseId;
+
+    /**
+     * 图片链接
+     */
+    @TableField("img_url")
+    private String imgUrl;
+
+    /**
+     * 图片说明
+     */
+    @TableField("img_info")
+    private String imgInfo;
+
+    /**
+     * 0未应用,1已应用
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 排序
+     */
+    @TableField("sort")
+    private Integer sort;
+
+    /**
+     * 0未应用,1已应用
+     */
+    @TableField("type")
+    private Integer type;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 59 - 0
src/main/java/com/fdkankan/fusion/entity/CaseImgTag.java

@@ -0,0 +1,59 @@
+package com.fdkankan.fusion.entity;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fdkankan.fusion.typehandle.JsonArrayTypeHandler;
+import com.fdkankan.fusion.typehandle.JsonObjTypeHandler;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-12
+ */
+@Getter
+@Setter
+@TableName(value = "t_case_img_tag",autoResultMap = true)
+public class CaseImgTag implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("case_id")
+    private Integer caseId;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("is_horizontal")
+    private Boolean isHorizontal;
+
+    @TableField(typeHandler = JsonObjTypeHandler.class)
+    private JSONObject data;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Integer tbStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ICaseImgMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.CaseImg;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-04
+ */
+@Mapper
+public interface ICaseImgMapper extends BaseMapper<CaseImg> {
+
+}

+ 18 - 0
src/main/java/com/fdkankan/fusion/mapper/ICaseImgTagMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.fusion.mapper;
+
+import com.fdkankan.fusion.entity.CaseImgTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-12
+ */
+@Mapper
+public interface ICaseImgTagMapper extends BaseMapper<CaseImgTag> {
+
+}

+ 22 - 0
src/main/java/com/fdkankan/fusion/request/CaseImgParam.java

@@ -0,0 +1,22 @@
+package com.fdkankan.fusion.request;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fdkankan.fusion.common.RequestBase;
+import com.fdkankan.fusion.entity.CaseImg;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CaseImgParam extends RequestBase {
+    private Integer caseId;
+    private Integer status;
+
+    private Integer id;
+    private Integer sort;
+
+    private List<CaseImgParam> paramList;
+
+
+    private List<CaseImg> imgUrls;
+}

+ 2 - 0
src/main/java/com/fdkankan/fusion/service/ICaseFilesService.java

@@ -20,4 +20,6 @@ public interface ICaseFilesService extends IService<CaseFiles> {
     List<CaseFiles> getByCaseId(Integer caseId);
 
     void deleteByCaseId(Integer caseId);
+
+    void addByCaseNum(Integer caseId, List<String> numList);
 }

+ 25 - 0
src/main/java/com/fdkankan/fusion/service/ICaseImgService.java

@@ -0,0 +1,25 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.CaseImg;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fdkankan.fusion.request.CaseImgParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-04
+ */
+public interface ICaseImgService extends IService<CaseImg> {
+
+    List<CaseImg> getByCaseId(Integer caseId,Integer type);
+
+    void updateSort(CaseImgParam param);
+
+    CaseImg ffmpegImage(MultipartFile[] files, Integer caseId);
+}

+ 19 - 0
src/main/java/com/fdkankan/fusion/service/ICaseImgTagService.java

@@ -0,0 +1,19 @@
+package com.fdkankan.fusion.service;
+
+import com.fdkankan.fusion.entity.CaseImgTag;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-12
+ */
+public interface ICaseImgTagService extends IService<CaseImgTag> {
+
+    CaseImgTag getByCaseId(Integer caseId);
+
+    void saveByParam(CaseImgTag caseImgTag);
+}

+ 27 - 0
src/main/java/com/fdkankan/fusion/service/impl/CaseFilesServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fusion.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.common.FilePath;
 import com.fdkankan.fusion.common.ResultCode;
 import com.fdkankan.fusion.common.util.UploadToOssUtil;
 import com.fdkankan.fusion.exception.BusinessException;
@@ -9,11 +10,14 @@ import com.fdkankan.fusion.entity.CaseFiles;
 import com.fdkankan.fusion.mapper.ICaseFilesMapper;
 import com.fdkankan.fusion.service.ICaseFilesService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -25,6 +29,7 @@ import java.util.List;
  * @since 2022-08-02
  */
 @Service
+@Slf4j
 public class CaseFilesServiceImpl extends ServiceImpl<ICaseFilesMapper, CaseFiles> implements ICaseFilesService {
 
     @Autowired
@@ -67,4 +72,26 @@ public class CaseFilesServiceImpl extends ServiceImpl<ICaseFilesMapper, CaseFile
             this.removeById(files.getFilesId());
         }
     }
+
+    @Override
+    public void addByCaseNum(Integer caseId, List<String> numList) {
+        List<CaseFiles> files = new ArrayList<>();
+        for (String num : numList) {
+            String ossPath = String.format(FilePath.cut_images_path, num);
+            List<String> list = uploadToOssUtil.listKeysFromAli(ossPath);
+            for (String imagePath : list) {
+                String[] split = imagePath.split("/");
+                String fileName = split[split.length-1];
+                CaseFiles caseFiles = new CaseFiles();
+                caseFiles.setCaseId(caseId);
+                caseFiles.setFilesTypeId(25);
+                caseFiles.setFilesTitle(fileName);
+                caseFiles.setFilesUrl(queryPath+imagePath);
+                files.add(caseFiles);
+            }
+        }
+        if(!files.isEmpty()){
+            this.saveBatch(files);
+        }
+    }
 }

+ 128 - 0
src/main/java/com/fdkankan/fusion/service/impl/CaseImgServiceImpl.java

@@ -0,0 +1,128 @@
+package com.fdkankan.fusion.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fdkankan.fusion.common.FilePath;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.common.util.ShellUtil;
+import com.fdkankan.fusion.entity.CaseImg;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.mapper.ICaseImgMapper;
+import com.fdkankan.fusion.request.CaseImgParam;
+import com.fdkankan.fusion.service.ICaseImgService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-04
+ */
+@Service
+@Slf4j
+public class CaseImgServiceImpl extends ServiceImpl<ICaseImgMapper, CaseImg> implements ICaseImgService {
+
+    @Override
+    public List<CaseImg> getByCaseId(Integer caseId,Integer type) {
+
+        LambdaQueryWrapper<CaseImg> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CaseImg::getCaseId,caseId);
+        if(type != null){
+            wrapper.eq(CaseImg::getType,type);
+        }
+        wrapper.orderByAsc(CaseImg::getSort);
+        wrapper.orderByAsc(CaseImg::getId);
+        return this.list(wrapper);
+    }
+
+
+    @Override
+    public void updateSort(CaseImgParam param) {
+        if(param.getParamList() == null || param.getParamList().isEmpty()){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        for (CaseImgParam caseImgParam : param.getParamList()) {
+            LambdaUpdateWrapper<CaseImg> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(CaseImg::getId,caseImgParam.getId());
+            wrapper.set(CaseImg::getSort,caseImgParam.getSort());
+            this.update(wrapper);
+        }
+    }
+
+    @Value("${upload.query-path}")
+    private String queryPath;
+    @Override
+    public CaseImg ffmpegImage(MultipartFile[] files, Integer caseId) {
+        if(files.length <=0 || caseId == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        String filePath = FilePath.FFMPEG_IMG_PATH +"/"+ caseId+"/";
+        try {
+            List<String> localList = new ArrayList<>();
+            String outFileName = UUID.randomUUID().toString().replace("-","") ;
+            String outSuffixName = ".jpg";
+            String outLocalPath = filePath + outFileName +outSuffixName;
+
+            for (MultipartFile file : files) {
+                String suffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+                //重新生成文件名
+                String fileName = UUID.randomUUID().toString().replace("-","") ;
+                String localFilePath = filePath + fileName  + suffixName;
+                File file1 = new File(localFilePath);
+                if(!file1.getParentFile().exists()){
+                    file1.getParentFile().mkdirs();
+                }
+                file.transferTo(file1);
+                localList.add(localFilePath);
+            }
+            StringBuilder ffmpegCmd = new StringBuilder("ffmpeg ");
+            if(files.length >1){
+                for (String localPath : localList) {
+                    ffmpegCmd.append(" -i ").append(localPath);
+                }
+                ffmpegCmd.append(" -filter_complex hstack=inputs="+ files.length);
+                ffmpegCmd.append(" " +outLocalPath);
+                ShellUtil.execCmd(ffmpegCmd.toString());
+            }else {
+                outLocalPath = localList.get(0);
+            }
+
+            if(!FileUtil.exist(outLocalPath)){
+                throw new BusinessException(ResultCode.UPLOAD_FILE_TYPE_ERROR);
+            }
+            ShellUtil.yunUpload(outLocalPath,outLocalPath.replace("/mnt/",""));
+
+            List<CaseImg> caseImgList = this.getByCaseId(caseId, 1);
+            CaseImg caseImg = null;
+            if(caseImgList ==null || caseImgList.isEmpty()){
+                caseImg = new CaseImg();
+            }else {
+                caseImg = caseImgList.get(0);
+            }
+            caseImg.setCaseId(caseId);
+            caseImg.setImgUrl(queryPath + outLocalPath.replace("/mnt/",""));
+            caseImg.setImgInfo("照片卷");
+            caseImg.setType(1);
+            this.saveOrUpdate(caseImg);
+            return caseImg;
+        }catch (Exception e){
+            log.info("ffmpeg错误:{}",caseId,e);
+        }finally {
+            FileUtil.del(filePath);
+        }
+        return null;
+    }
+}

+ 42 - 0
src/main/java/com/fdkankan/fusion/service/impl/CaseImgTagServiceImpl.java

@@ -0,0 +1,42 @@
+package com.fdkankan.fusion.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.fusion.common.ResultCode;
+import com.fdkankan.fusion.entity.CaseExtractDetail;
+import com.fdkankan.fusion.entity.CaseImgTag;
+import com.fdkankan.fusion.exception.BusinessException;
+import com.fdkankan.fusion.mapper.ICaseImgTagMapper;
+import com.fdkankan.fusion.service.ICaseImgTagService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2024-07-12
+ */
+@Service
+public class CaseImgTagServiceImpl extends ServiceImpl<ICaseImgTagMapper, CaseImgTag> implements ICaseImgTagService {
+
+    @Override
+    public CaseImgTag getByCaseId(Integer caseId) {
+        LambdaQueryWrapper<CaseImgTag> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CaseImgTag::getCaseId,caseId);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void saveByParam(CaseImgTag caseImgTag) {
+        if(caseImgTag.getCaseId() == null){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        CaseImgTag dbCaseImgTag = this.getByCaseId(caseImgTag.getCaseId());
+        if(dbCaseImgTag != null){
+            caseImgTag.setId(dbCaseImgTag.getId());
+        }
+        this.saveOrUpdate(caseImgTag);
+    }
+}

+ 3 - 0
src/main/java/com/fdkankan/fusion/service/impl/CaseNumServiceImpl.java

@@ -66,6 +66,8 @@ public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntit
     SessionService sessionService;
     @Autowired
     ICaseInquestCriminalService caseInquestCriminalService;
+    @Autowired
+    ICaseFilesService caseFilesService;
 
     @Override
     public List<CaseNumEntity> getByCaseId(Integer caseId) {
@@ -140,6 +142,7 @@ public class CaseNumServiceImpl extends ServiceImpl<ICaseNumMapper, CaseNumEntit
         if(newCaseNums.size() >0){
             this.saveBatch(newCaseNums);
             caseInquestCriminalService.getByCaseId(caseId);
+            caseFilesService.addByCaseNum(caseId,newCaseNums.stream().map(e -> e.getNum()).collect(Collectors.toList()));
         }
         if(modelList.size() >0){
             modelService.saveOrUpdateBatch(modelList);

+ 4 - 2
src/main/java/com/fdkankan/fusion/service/impl/XfyunImageServiceImpl.java

@@ -68,8 +68,10 @@ public class XfyunImageServiceImpl extends ServiceImpl<IXfyunImageMapper, XfyunI
             throw new BusinessException(ResultCode.QJ_IMAGE_NOT_EXIT);
         }
         int size = imagePahts.size();
-        Integer image = size%2 ==0 ? size/2 : size /2 +1;
-
+        Integer image = 0;
+        if(size != 1){
+            image = size%2 ==0 ? size/2 : size /2 +1;
+        }
         String imageOssPath = path+image +".jpg";
        // ShellUtil.yunDownload(imageOssPath,FilePath.MNT_BASE_PATH + imageOssPath);
         uploadToOssUtil.downFormAli(imageOssPath,FilePath.MNT_BASE_PATH + imageOssPath);

+ 1 - 1
src/main/resources/application-local.yaml

@@ -8,7 +8,7 @@ spring:
       datasource:
         db1:
           driver-class-name: com.mysql.jdbc.Driver
-          url: jdbc:mysql://120.25.146.52:13306/fd_fusion?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+          url: jdbc:mysql://120.25.146.52:13306/fd_fusion_bc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
           username: root
           password: JK123456%JIK
         db2:

+ 1 - 1
src/main/resources/application-test.yaml

@@ -9,7 +9,7 @@ spring:
         db1:
           driver-class-name: com.mysql.jdbc.Driver
           #url: jdbc:mysql://120.25.146.52:13306/fd_fusion?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
-          url: jdbc:mysql://127.0.0.1:13306/fd_fusion?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+          url: jdbc:mysql://127.0.0.1:13306/fd_fusion_bc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
           username: root
           password: JK123456%JIK
         db2:

+ 3 - 3
src/main/resources/application.yaml

@@ -7,9 +7,9 @@ spring:
       maxRequestSize: 1000MB
 
 server:
-  port: 8808
+  port: 8810
   servlet:
-    context-path: /fusion
+    context-path: /fusion-bc
   tomcat:
     max-http-form-post-size: -1
 
@@ -17,7 +17,7 @@ server:
 
 logging:
   config: classpath:logback-spring.xml
-  path: /home/backend/4dkankan_v4
+  path: /home/backend/4dkankan_v4/fusion-bc
 
 mybatis-plus:
   configuration:

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -8,7 +8,7 @@
 
 	<contextName>logback</contextName>
 	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
-	<property name="log.path" value="${LOG_PATH}/fusion/logs" />
+	<property name="log.path" value="${LOG_PATH}/logs" />
 
 	<!-- 彩色日志 -->
 	<!-- 彩色日志依赖的渲染类 -->

+ 5 - 0
src/main/resources/mapper/fusion/CaseImgMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ICaseImgMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/fusion/CaseImgTagMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.fusion.mapper.ICaseImgTagMapper">
+
+</mapper>