lyhzzz 2 天之前
父节点
当前提交
2eb996e81b
共有 53 个文件被更改,包括 593 次插入27 次删除
  1. 6 0
      src/main/java/com/fdkankan/manage/common/CommandEnum.java
  2. 62 0
      src/main/java/com/fdkankan/manage/common/EvidenceEnum.java
  3. 4 3
      src/main/java/com/fdkankan/manage/config/ManageConfig.java
  4. 1 1
      src/main/java/com/fdkankan/manage/constant/FileTypeEnum.java
  5. 153 17
      src/main/java/com/fdkankan/manage/controller/inner/InnerAPIController.java
  6. 8 0
      src/main/java/com/fdkankan/manage/entity/Dict.java
  7. 9 0
      src/main/java/com/fdkankan/manage/entity/DictFile.java
  8. 51 0
      src/main/java/com/fdkankan/manage/entity/DictIcon.java
  9. 2 2
      src/main/java/com/fdkankan/manage/generate/AutoGenerate.java
  10. 20 0
      src/main/java/com/fdkankan/manage/httpClient/address/HaixinAddressSource.java
  11. 20 0
      src/main/java/com/fdkankan/manage/httpClient/client/HaixinClient.java
  12. 12 0
      src/main/java/com/fdkankan/manage/httpClient/param/HaixinParam.java
  13. 18 0
      src/main/java/com/fdkankan/manage/mapper/IDictIconMapper.java
  14. 2 0
      src/main/java/com/fdkankan/manage/service/IDictFileService.java
  15. 20 0
      src/main/java/com/fdkankan/manage/service/IDictIconService.java
  16. 3 1
      src/main/java/com/fdkankan/manage/service/IDictService.java
  17. 11 0
      src/main/java/com/fdkankan/manage/service/impl/DictFileServiceImpl.java
  18. 42 0
      src/main/java/com/fdkankan/manage/service/impl/DictIconServiceImpl.java
  19. 15 1
      src/main/java/com/fdkankan/manage/service/impl/DictServiceImpl.java
  20. 69 0
      src/main/java/com/fdkankan/manage/task/TaskService.java
  21. 40 0
      src/main/java/com/fdkankan/manage/vo/EvidenceVo.java
  22. 2 0
      src/main/java/com/fdkankan/manage/vo/request/SceneParam.java
  23. 12 0
      src/main/java/com/fdkankan/manage/vo/request/addMediaLibraryParam.java
  24. 1 1
      src/main/resources/bootstrap-dev.yml
  25. 二进制
      src/main/resources/evidence-icon/cartridge.png
  26. 二进制
      src/main/resources/evidence-icon/case_other.png
  27. 二进制
      src/main/resources/evidence-icon/check.png
  28. 二进制
      src/main/resources/evidence-icon/corpse.png
  29. 二进制
      src/main/resources/evidence-icon/cube.png
  30. 二进制
      src/main/resources/evidence-icon/dot.png
  31. 二进制
      src/main/resources/evidence-icon/electronic.png
  32. 二进制
      src/main/resources/evidence-icon/folder_close.png
  33. 二进制
      src/main/resources/evidence-icon/footprint.png
  34. 二进制
      src/main/resources/evidence-icon/hand_l.png
  35. 二进制
      src/main/resources/evidence-icon/hand_r.png
  36. 二进制
      src/main/resources/evidence-icon/handprint.png
  37. 二进制
      src/main/resources/evidence-icon/physics_and_chemistry.png
  38. 二进制
      src/main/resources/evidence-icon/poison.png
  39. 二进制
      src/main/resources/evidence-icon/shitib.png
  40. 二进制
      src/main/resources/evidence-icon/shitifuhao.png
  41. 二进制
      src/main/resources/evidence-icon/shitiz.png
  42. 二进制
      src/main/resources/evidence-icon/video.png
  43. 二进制
      src/main/resources/evidence-icon/virus.png
  44. 二进制
      src/main/resources/evidence-icon/wrenchAndScrewdriver.png
  45. 二进制
      src/main/resources/evidence-icon/xieyin.png
  46. 二进制
      src/main/resources/evidence-icon/xueji.png
  47. 二进制
      src/main/resources/evidence-icon/xuepo.png
  48. 二进制
      src/main/resources/evidence-icon/youzuji.png
  49. 二进制
      src/main/resources/evidence-icon/zhiwen.png
  50. 二进制
      src/main/resources/evidence-icon/zuozuji.png
  51. 1 1
      src/main/resources/mapper/manage/DictFileMapper.xml
  52. 5 0
      src/main/resources/mapper/manage/DictIconMapper.xml
  53. 4 0
      src/main/resources/mapper/manage/SceneProMapper.xml

+ 6 - 0
src/main/java/com/fdkankan/manage/common/CommandEnum.java

@@ -0,0 +1,6 @@
+package com.fdkankan.manage.common;
+
+public class CommandEnum {
+
+    public static String WGET_URL = "wget -O %s %s";
+}

+ 62 - 0
src/main/java/com/fdkankan/manage/common/EvidenceEnum.java

@@ -0,0 +1,62 @@
+package com.fdkankan.manage.common;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public enum EvidenceEnum {
+    sy(1,"手印痕迹", Arrays.asList("zhiwen.png","hand_l.png","hand_r.png","handprint.png")),
+    zj(2,"足迹痕迹", Arrays.asList("zuozuji.png","youzuji.png","xieyin.png","footprint.png")),
+    gj(3,"工具痕迹", Arrays.asList("wrenchAndScrewdriver.png")),
+    stwt(11,"视听物证", Arrays.asList("video.png")),
+    sw(6,"生物物证", Arrays.asList("xuepo.png","xueji.png","virus.png")),
+    qd(4,"枪弹痕迹", Arrays.asList("cartridge.png")),
+    dh(7,"毒化物证", Arrays.asList("poison.png")),
+    lh(8,"理化物证", Arrays.asList("physics_and_chemistry.png")),
+    wj(9,"文检物证", Arrays.asList("folder_close.png")),
+    ts(5,"特殊物证", Arrays.asList("check.png")),
+    qt(12,"其它物证(痕迹物证)", Arrays.asList("case_other.png","dot.png")),
+    dz(10,"电子物证", Arrays.asList("electronic.png")),
+    tq(17,"提取物品", Arrays.asList("cube.png")),
+    st(18,"尸体", Arrays.asList("shitiz.png","shitib.png","shitifuhao.png","corpse.png")),
+    ;
+
+
+    private int type;
+    private String name;
+    private List<String> iconList;
+
+    public int getType() {
+        return type;
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    public List<String> getIconList() {
+        return iconList;
+    }
+    EvidenceEnum(int type, String name, List<String> iconList) {
+        this.type = type;
+        this.name = name;
+        this.iconList = iconList;
+    }
+
+    public static Map<Integer,EvidenceEnum> typeMaps = new HashMap<>(14);
+
+    static{
+        for (EvidenceEnum typeEnum : EvidenceEnum.values()) {
+            typeMaps.put(typeEnum.getType(),typeEnum);
+        }
+    }
+
+
+    public static EvidenceEnum getEvidenceEnum(Integer type){
+        return typeMaps.get(type);
+    }
+
+
+}

+ 4 - 3
src/main/java/com/fdkankan/manage/config/ManageConfig.java

@@ -19,11 +19,12 @@ public class ManageConfig {
     private String shareScenes;
     @Value("${fyun.host}")
     private String queryPath;
-    @Value("${manage.env}")
-    private String environment;
     @Value("${manage.default.password:afdd0b4ad2ec172c586e2150770fbf9e}")
     private String defaultPassword;
-
+    @Value("${manage.haixin.api.appkey}")
+    private String haixinApiAppkey;
+    @Value("${manage.haixin.api.basePath}")
+    private String haixinApiBasePath;
 
     public List<String> getNumList(){
         if(StringUtils.isNotBlank(this.shareScenes)){

+ 1 - 1
src/main/java/com/fdkankan/manage/constant/FileTypeEnum.java

@@ -7,7 +7,7 @@ import java.util.Arrays;
 import java.util.List;
 
 public enum FileTypeEnum {
-    IMAGE(0,"图片", Arrays.asList("jpg","png","jpeg")),
+    IMAGE(0,"图片", Arrays.asList("jpg","png","jpeg","bmp")),
     VIDEO(1,"视频",Arrays.asList("mp4")),
     MUSIC(2,"音频",Arrays.asList("wav","mp3")),
     MODEL(3,"模型",Arrays.asList("obj","osgb","b3dm","ply","las","laz","glb")),

+ 153 - 17
src/main/java/com/fdkankan/manage/controller/inner/InnerAPIController.java

@@ -1,22 +1,28 @@
 package com.fdkankan.manage.controller.inner;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.extra.servlet.ServletUtil;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dtflys.forest.annotation.Post;
-import com.fdkankan.manage.common.CameraTypeEnum;
-import com.fdkankan.manage.common.PageInfo;
-import com.fdkankan.manage.common.ResultCode;
-import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.manage.common.*;
 import com.fdkankan.manage.config.ManageConfig;
+import com.fdkankan.manage.constant.FileTypeEnum;
 import com.fdkankan.manage.controller.BaseController;
 import com.fdkankan.manage.entity.*;
+import com.fdkankan.manage.entity.Dict;
 import com.fdkankan.manage.exception.BusinessException;
+import com.fdkankan.manage.httpClient.client.HaixinClient;
+import com.fdkankan.manage.httpClient.param.HaixinParam;
 import com.fdkankan.manage.service.*;
 import com.fdkankan.manage.service.impl.ManageService;
 import com.fdkankan.manage.util.RsaUtils;
+import com.fdkankan.manage.util.ShellUtil;
+import com.fdkankan.manage.vo.EvidenceVo;
 import com.fdkankan.manage.vo.request.*;
 import com.fdkankan.manage.vo.response.ManageLoginResponse;
 import com.fdkankan.manage.vo.response.UserAuthSceneVo;
@@ -26,6 +32,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.File;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -55,6 +62,10 @@ public class InnerAPIController extends BaseController {
     ICaseService caseService;
     @Autowired
     ManageService manageService;
+    @Autowired
+    ICaseNumService caseNumService;
+    @Autowired
+    RabbitMqProducer rabbitMqProducer;
 
 
     @PostMapping("/getByRyId")
@@ -489,12 +500,10 @@ public class InnerAPIController extends BaseController {
         return ResultData.ok(map);
     }
 
-    @Autowired
-    RabbitMqProducer rabbitMqProducer;
 
     @PostMapping("/updateKno")
     public ResultData updateKno(@RequestBody ManageLoginRequest param){
-        if(StringUtils.isBlank(param.getProjectId())){
+        if(StringUtils.isBlank(param.getProjectId()) || StringUtils.isNotBlank(param.getKno())){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
         LambdaQueryWrapper<ScenePlus> sceneQw = new LambdaQueryWrapper<>();
@@ -503,17 +512,23 @@ public class InnerAPIController extends BaseController {
         if(list == null || list.isEmpty()){
             throw new BusinessException(ResultCode.SCENE_NOT_EXIST);
         }
-        ScenePlus scenePlus = list.get(0);
-
-
         LambdaUpdateWrapper<ScenePlus> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(ScenePlus::getTaskId,param.getProjectId());
         wrapper.set(ScenePlus::getKNo,param.getKno());
         scenePlusService.update(wrapper);
-        HashMap<String,Object> map = new HashMap<>();
-        map.put("num",scenePlus.getNum());
-        map.put("kNo",param.getKno());
-        //rabbitMqProducer.sendByWorkQueue("queue-aj-add-scene",map);
+
+
+        for (ScenePlus scenePlus : list) {
+            List<CaseNum> caseNumList = caseNumService.getByNum(scenePlus.getNum());
+            for (CaseNum caseNum : caseNumList) {
+                caseNumService.removeById(caseNum.getId());
+            }
+
+            HashMap<String,Object> map = new HashMap<>();
+            map.put("num",scenePlus.getNum());
+            map.put("kNo",param.getKno());
+            rabbitMqProducer.sendByWorkQueue("queue-aj-add-scene",map);
+        }
 
         return ResultData.ok();
     }
@@ -522,10 +537,23 @@ public class InnerAPIController extends BaseController {
     IDictService dictService;
     @Autowired
     IDictFileService dictFileService;
+    @Autowired
+    HaixinClient haixinClient;
+    @Autowired
+    private FYunFileServiceInterface fYunFileServiceInterface;
+    @Autowired
+    ICommonUploadService commonUploadService;
+    @Autowired
+    IDictIconService dictIconService;
 
-    @GetMapping("/traceEvidenceList")
-    public ResultData traceEvidenceList(){
-        List<Dict> dictList = dictService.getByUseType("trace_evidence");
+    @PostMapping("/traceEvidenceList")
+    public ResultData traceEvidenceList(@RequestBody DictFileParam dictParam){
+        List<Dict> dictList = dictService.getByUseType("trace_evidence",dictParam.getName());
+        List<Integer> dictIds = dictList.stream().map(Dict::getId).collect(Collectors.toList());
+        HashMap<Integer,List<DictIcon>> map = dictIconService.getMapGroupDict(dictIds);
+        for (Dict dict : dictList) {
+            dict.setDictIconList(map.get(dict.getId()));
+        }
         return ResultData.ok(dictList);
     }
 
@@ -535,4 +563,112 @@ public class InnerAPIController extends BaseController {
         dictParam.setUseType("trace_evidence");
         return ResultData.ok(dictFileService.pageList(dictParam));
     }
+
+    @GetMapping("/refreshTraceEvidenceInfoList/{kno}")
+    public ResultData refreshTraceEvidenceInfoList(@PathVariable String kno){
+        JSONObject jsonObject = haixinClient.queryEvidence(new HaixinParam(kno), manageConfig.getHaixinApiAppkey());
+        JSONObject data = jsonObject.getJSONObject("data");
+        JSONArray jsonArray = data.getJSONArray("sceneMaterialEvidence");
+        for (Object object : jsonArray) {
+            JSONObject obj = (JSONObject) object;
+            String evidenceNo = obj.getString("materialEvidenceNo"); //痕迹物证唯一编码
+            String category = obj.getString("category");
+            String fileServerPath = obj.getString("fileServerPath");
+            String materialEvidenceName = obj.getString("materialEvidenceName");
+            String leftPosition = obj.getString("leftPosition");
+            String feature = obj.getString("feature");
+            String collectionModeName = obj.getString("collectionModeName");
+            String collectedTime = obj.getString("collectedTime");
+            String createAccount = obj.getString("createAccount");
+            EvidenceVo vo = new EvidenceVo(materialEvidenceName,leftPosition,feature,collectionModeName,collectedTime,createAccount,0);
+
+            String localPath = OssPath.localPath + OssPath.MANAGE_MODEL_FILE_PATH;
+            String uuid = UUID.randomUUID().toString().replace("-","");
+            String extName = fileServerPath.substring(fileServerPath.lastIndexOf(".")).toLowerCase();
+            localPath = String.format(localPath,uuid) + extName;
+
+            String cmd = String.format(CommandEnum.WGET_URL,localPath,manageConfig.getHaixinApiBasePath() + "/"+ fileServerPath);
+            ShellUtil.execCmd(cmd);
+
+            String ossPath = String.format(OssPath.MANAGE_MODEL_FILE_PATH, uuid+ extName);
+            fYunFileServiceInterface.uploadFile(localPath, ossPath);
+
+            DictFile dictFile = dictFileService.getByEvidenceNo(evidenceNo);
+            if(dictFile == null){
+                 dictFile = new DictFile();
+            }
+            CommonUpload commonUpload = commonUploadService.getById(dictFile.getUploadId());
+            if(commonUpload == null){
+                commonUpload = new CommonUpload();
+            }
+            commonUpload.setFileName(materialEvidenceName);
+            commonUpload.setFileUrl(manageConfig.getQueryPath() + ossPath);
+            commonUpload.setFileSize("0");
+            commonUpload.setFileType(0);
+            commonUpload.setFileTypeStr("图片");
+            commonUpload.setFileFormat(extName);
+            commonUpload.setResultFileFormat(extName);
+            commonUpload.setStatus(1);
+            commonUpload.setUseType("trace_evidence");
+            commonUploadService.saveOrUpdate(commonUpload);
+
+            Dict dict = dictService.getByResourceId(category);
+
+            dictFile.setName(materialEvidenceName);
+            dictFile.setTypeKey("media-library");
+            dictFile.setDictId(dict != null?dict.getId() : null);
+            dictFile.setSysUserId(Long.valueOf(StpUtil.getLoginId().toString()));
+            dictFile.setUseType("trace_evidence");
+            dictFile.setUploadId(commonUpload.getId());
+            dictFile.setKno(kno);
+            dictFile.setContent(JSONObject.toJSONString(vo));
+            dictFile.setEvidenceNo(evidenceNo);
+            dictFileService.saveOrUpdate(dictFile);
+
+        }
+
+        return ResultData.ok();
+    }
+
+    @PostMapping("/addMediaLibrary")
+    public ResultData addMediaLibrary(@RequestBody addMediaLibraryParam param){
+        if(StringUtils.isBlank(param.getFilePath())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+
+        String uuid = UUID.randomUUID().toString().replace("-","");
+        String extName = param.getFilePath().substring(param.getFilePath().lastIndexOf(".")).toLowerCase();
+
+        FileTypeEnum fileTypeEnum = FileTypeEnum.getByType(extName.replace(".", ""));
+        if(fileTypeEnum == null){
+            throw new BusinessException(ResultCode.FILE_TYPE_ERROR2);
+        }
+
+        String ossPath = String.format(OssPath.MANAGE_MODEL_FILE_PATH, uuid+ extName);
+        fYunFileServiceInterface.copyFileInBucket(param.getFilePath(),ossPath);
+
+        CommonUpload  commonUpload = new CommonUpload();
+        commonUpload.setFileName(param.getFileName());
+        commonUpload.setFileUrl(manageConfig.getQueryPath() + ossPath);
+        commonUpload.setFileSize(param.getFileSize());
+        commonUpload.setFileType(fileTypeEnum.getCode());
+        commonUpload.setFileTypeStr(fileTypeEnum.getMsg());
+        commonUpload.setFileFormat(extName);
+        commonUpload.setResultFileFormat(extName);
+        commonUpload.setStatus(1);
+        commonUpload.setUseType("trace_evidence");
+        commonUploadService.saveOrUpdate(commonUpload);
+
+        DictFile dictFile  = new DictFile();
+        dictFile.setName(param.getFileName());
+        dictFile.setTypeKey("media-library");
+        dictFile.setSysUserId(Long.valueOf(StpUtil.getLoginId().toString()));
+        dictFile.setUseType("trace_evidence");
+        dictFile.setUploadId(commonUpload.getId());
+        dictFile.setKno(param.getKno());
+        dictFile.setContent(param.getContent());
+        dictFileService.saveOrUpdate(dictFile);
+
+        return ResultData.ok();
+    }
 }

+ 8 - 0
src/main/java/com/fdkankan/manage/entity/Dict.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
+
 import lombok.Getter;
 import lombok.Setter;
 
@@ -52,4 +54,10 @@ public class Dict implements Serializable {
 
     @TableField("use_type")
     private String useType;
+
+    @TableField("resource_id")
+    private Integer resourceId;
+
+    @TableField(exist = false)
+    private List<DictIcon> dictIconList;
 }

+ 9 - 0
src/main/java/com/fdkankan/manage/entity/DictFile.java

@@ -55,4 +55,13 @@ public class DictFile implements Serializable {
 
     @TableField("use_type")
     private String useType;
+
+    @TableField("kno")
+    private String kno;
+
+    @TableField("evidence_no")
+    private String evidenceNo;
+
+    @TableField("content")
+    private String content;
 }

+ 51 - 0
src/main/java/com/fdkankan/manage/entity/DictIcon.java

@@ -0,0 +1,51 @@
+package com.fdkankan.manage.entity;
+
+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 lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-18
+ */
+@Getter
+@Setter
+@TableName("t_dict_icon")
+public class DictIcon implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("name")
+    private String name;
+
+    @TableField("dict_id")
+    private Integer dictId;
+
+    @TableField("icon_url")
+    private String iconUrl;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 2 - 2
src/main/java/com/fdkankan/manage/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"manage", getTables(new String[]{
-                "t_case_fusion"
+                "t_dict_icon"
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,7 +46,7 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://119.23.182.50:3306/fd_fusion",
+        FastAutoGenerator.create("jdbc:mysql://192.168.0.125:13306/4dkankan_v4",
                 "root","4dkk2023cuikuan%")
                 .globalConfig(builder -> {
                     builder.author("")               //作者

+ 20 - 0
src/main/java/com/fdkankan/manage/httpClient/address/HaixinAddressSource.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.httpClient.address;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class HaixinAddressSource implements AddressSource {
+
+    @Value("${manage.haixin.api.basePath}")
+    private String haixinApiBasePath;
+
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",null,haixinApiBasePath);
+    }
+}

+ 20 - 0
src/main/java/com/fdkankan/manage/httpClient/client/HaixinClient.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.httpClient.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.annotation.*;
+import com.fdkankan.manage.httpClient.address.HaixinAddressSource;
+import com.fdkankan.manage.httpClient.address.OverallAddressSource;
+import com.fdkankan.manage.httpClient.param.HaixinParam;
+import com.fdkankan.manage.httpClient.vo.OverallParam;
+import com.fdkankan.manage.httpClient.vo.OverallVo;
+
+/**
+ * 获取,调用全景看看服务
+ */
+@Address(source = HaixinAddressSource.class)
+public interface HaixinClient {
+
+    @Post("/ecs/api/openapi/queryEvidence")
+    JSONObject queryEvidence(@JSONBody HaixinParam param, @Header("appkey") String appId);
+
+}

+ 12 - 0
src/main/java/com/fdkankan/manage/httpClient/param/HaixinParam.java

@@ -0,0 +1,12 @@
+package com.fdkankan.manage.httpClient.param;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class HaixinParam {
+    private String investigationNo;
+}

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IDictIconMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.DictIcon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-18
+ */
+@Mapper
+public interface IDictIconMapper extends BaseMapper<DictIcon> {
+
+}

+ 2 - 0
src/main/java/com/fdkankan/manage/service/IDictFileService.java

@@ -22,4 +22,6 @@ public interface IDictFileService extends IService<DictFile> {
     void del(DictFile dictFile);
 
     void updateDictId(Integer dictId, Integer UpDictId);
+
+    DictFile getByEvidenceNo(String evidenceNo);
 }

+ 20 - 0
src/main/java/com/fdkankan/manage/service/IDictIconService.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.DictIcon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-18
+ */
+public interface IDictIconService extends IService<DictIcon> {
+
+    HashMap<Integer, List<DictIcon>> getMapGroupDict(List<Integer> dictIds);
+}

+ 3 - 1
src/main/java/com/fdkankan/manage/service/IDictService.java

@@ -24,5 +24,7 @@ public interface IDictService extends IService<Dict> {
 
     Object pageList(DictParam param);
 
-    List<Dict> getByUseType(String traceEvidence);
+    List<Dict> getByUseType(String traceEvidence,String name);
+
+    Dict getByResourceId(String category);
 }

+ 11 - 0
src/main/java/com/fdkankan/manage/service/impl/DictFileServiceImpl.java

@@ -86,4 +86,15 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
         wrapper.set(DictFile::getDictId,UpDictId);
         this.update(wrapper);
     }
+
+    @Override
+    public DictFile getByEvidenceNo(String evidenceNo) {
+        LambdaQueryWrapper<DictFile> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictFile::getEvidenceNo,evidenceNo);
+        List<DictFile> list = this.list(wrapper);
+        if(list.isEmpty()){
+            return null;
+        }
+        return list.get(0);
+    }
 }

+ 42 - 0
src/main/java/com/fdkankan/manage/service/impl/DictIconServiceImpl.java

@@ -0,0 +1,42 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.manage.entity.DictIcon;
+import com.fdkankan.manage.mapper.IDictIconMapper;
+import com.fdkankan.manage.service.IDictIconService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-08-18
+ */
+@Service
+public class DictIconServiceImpl extends ServiceImpl<IDictIconMapper, DictIcon> implements IDictIconService {
+
+    @Override
+    public HashMap<Integer, List<DictIcon>> getMapGroupDict(List<Integer> dictIds) {
+        HashMap<Integer, List<DictIcon>> map = new HashMap<>();
+        if(dictIds != null && !dictIds.isEmpty()){
+            LambdaQueryWrapper<DictIcon> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(DictIcon::getDictId,dictIds);
+            List<DictIcon> list = this.list(wrapper);
+            for (DictIcon dictIcon : list) {
+                if(map.get(dictIcon.getDictId()) == null){
+                    map.put(dictIcon.getDictId(), Arrays.asList(dictIcon));
+                }else {
+                    map.get(dictIcon.getDictId()).add(dictIcon);
+                }
+            }
+        }
+        return map;
+    }
+}

+ 15 - 1
src/main/java/com/fdkankan/manage/service/impl/DictServiceImpl.java

@@ -88,9 +88,23 @@ public class DictServiceImpl extends ServiceImpl<IDictMapper, Dict> implements I
     }
 
     @Override
-    public List<Dict> getByUseType(String traceEvidence) {
+    public List<Dict> getByUseType(String traceEvidence,String name) {
         LambdaQueryWrapper<Dict> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(Dict::getUseType,traceEvidence);
+        if(StringUtils.isNotBlank(name)){
+            wrapper.like(Dict::getDictName,name);
+        }
         return this.list(wrapper);
     }
+
+    @Override
+    public Dict getByResourceId(String category) {
+        LambdaQueryWrapper<Dict> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Dict::getResourceId,category);
+        List<Dict> list = this.list(wrapper);
+        if(list.isEmpty()){
+            return null;
+        }
+        return list.get(0);
+    }
 }

+ 69 - 0
src/main/java/com/fdkankan/manage/task/TaskService.java

@@ -1,12 +1,19 @@
 package com.fdkankan.manage.task;
 
+import com.fdkankan.fyun.face.FYunFileServiceInterface;
+import com.fdkankan.manage.common.EvidenceEnum;
+import com.fdkankan.manage.common.OssPath;
+import com.fdkankan.manage.config.ManageConfig;
 import com.fdkankan.manage.entity.*;
 import com.fdkankan.manage.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
+import java.io.InputStream;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -21,6 +28,8 @@ public class TaskService {
     ICaseTabulationService caseTabulationService;
     @Autowired
     ICaseFusionService caseFusionService;
+    @Autowired
+    IDictService dictService;
 
     @PostConstruct
     public void task(){
@@ -30,6 +39,7 @@ public class TaskService {
         updateCaseFusionPlatformId();
         updateCaseFusionLat();
         updateCaseFusionTitle();
+        initDick();
     }
 
 
@@ -51,6 +61,9 @@ public class TaskService {
     private void updateCaseOverviewPlatformId() {
         List<CaseOverview> list = caseOverviewService.list();
         List<Integer> caseIds = list.stream().filter(e->e.getSysUserId()== null).map(CaseOverview::getCaseId).collect(Collectors.toList());
+        if(caseIds.isEmpty()){
+            return;
+        }
         List<Case> cases = caseService.listByIds(caseIds);
         for (Case aCase : cases) {
             caseOverviewService.updatePlatformIdByCase(aCase.getCaseId(),aCase.getSysUserId(),aCase.getPlatformId());
@@ -60,6 +73,9 @@ public class TaskService {
     private void updateCaseTabulationPlatformId() {
         List<CaseTabulation> list = caseTabulationService.list();
         List<Integer> caseIds = list.stream().filter(e->e.getSysUserId()== null).map(CaseTabulation::getCaseId).collect(Collectors.toList());
+        if(caseIds.isEmpty()){
+            return;
+        }
         List<Case> cases = caseService.listByIds(caseIds);
         for (Case aCase : cases) {
             caseTabulationService.updatePlatformIdByCase(aCase.getCaseId(),aCase.getSysUserId(),aCase.getPlatformId());
@@ -69,6 +85,9 @@ public class TaskService {
     private void updateCaseFusionPlatformId() {
         List<CaseFusion> list = caseFusionService.list();
         List<Integer> caseIds = list.stream().filter(e->e.getSysUserId()== null).map(CaseFusion::getCaseId).collect(Collectors.toList());
+        if(caseIds.isEmpty()){
+            return;
+        }
         List<Case> cases = caseService.listByIds(caseIds);
         for (Case aCase : cases) {
             caseFusionService.updatePlatformIdByCase(aCase.getCaseId(),aCase.getSysUserId(),aCase.getPlatformId());
@@ -78,6 +97,9 @@ public class TaskService {
     private void updateCaseFusionLat() {
         List<CaseFusion> list = caseFusionService.list();
         List<Integer> caseIds = list.stream().filter(e->e.getLatAndLong()== null).map(CaseFusion::getCaseId).collect(Collectors.toList());
+        if(caseIds.isEmpty()){
+            return;
+        }
         List<Case> cases = caseService.listByIds(caseIds);
         for (Case aCase : cases) {
             caseFusionService.updateCaseFusionLat(aCase.getCaseId(),aCase.getLatAndLong());
@@ -86,9 +108,56 @@ public class TaskService {
     private void updateCaseFusionTitle() {
         List<CaseFusion> list = caseFusionService.list();
         List<Integer> caseIds = list.stream().filter(e->e.getFusionTitle()== null).map(CaseFusion::getCaseId).collect(Collectors.toList());
+        if(caseIds.isEmpty()){
+            return;
+        }
         List<Case> cases = caseService.listByIds(caseIds);
         for (Case aCase : cases) {
             caseFusionService.updateCaseFusionTitle(aCase.getCaseId(),aCase.getCaseTitle());
         }
     }
+
+
+    @Autowired
+    IDictIconService dictIconService;
+    @Autowired
+    ManageConfig manageConfig;
+    @Autowired
+    FYunFileServiceInterface fYunFileServiceInterface;
+
+    private void initDick() {
+        EvidenceEnum[] values = EvidenceEnum.values();
+
+        List<Dict> dictList = dictService.getByUseType("trace_evidence",null);
+        if(dictList.isEmpty()){
+            for (EvidenceEnum value : values) {
+                int type = value.getType();
+                Dict dict = new Dict();
+                dict.setDictName(value.getName());
+                dict.setDictKey("media-library");
+                dict.setSort(1);
+                dict.setSysUserId(1L);
+                dict.setUseType("trace_evidence");
+                dict.setResourceId(type);
+                dictService.save(dict);
+
+                List<String> iconList = value.getIconList();
+                for (String icon : iconList) {
+                    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("evidence-icon/"+icon);
+                    String path = String.format(OssPath.MANAGE_MODEL_FILE_PATH,"evidence-icon/"+icon);
+                    fYunFileServiceInterface.uploadFile(inputStream,path);
+
+                    DictIcon dictIcon = new DictIcon();
+                    dictIcon.setName(icon);
+                    dictIcon.setDictId(dict.getId());
+                    dictIcon.setIconUrl(manageConfig.getQueryPath() + path);
+                    dictIconService.save(dictIcon);
+                }
+
+            }
+
+        }
+    }
+
+
 }

+ 40 - 0
src/main/java/com/fdkankan/manage/vo/EvidenceVo.java

@@ -0,0 +1,40 @@
+package com.fdkankan.manage.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class EvidenceVo {
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 遗留部位
+     */
+    private String leftPosition;
+    /**
+     * 特征描述
+     */
+    private String feature;
+    /**
+     * 提取方法
+     */
+    private String collectionModeName;
+    /**
+     * 提取时间
+     */
+    private String collectedTime;
+    /**
+     * 提取人
+     */
+    private String createAccount;
+    /**
+     * 委托状态
+     */
+    private Integer status ;
+}

+ 2 - 0
src/main/java/com/fdkankan/manage/vo/request/SceneParam.java

@@ -38,4 +38,6 @@ public class SceneParam extends RequestBase {
     private Boolean notThreeCamType;
     private Long notUserId;
 
+    private Integer sceneStatus;
+
 }

+ 12 - 0
src/main/java/com/fdkankan/manage/vo/request/addMediaLibraryParam.java

@@ -0,0 +1,12 @@
+package com.fdkankan.manage.vo.request;
+
+import lombok.Data;
+
+@Data
+public class addMediaLibraryParam {
+    private String kno;
+    private String fileName;
+    private String filePath;
+    private String content;
+    private String fileSize;
+}

+ 1 - 1
src/main/resources/bootstrap-dev.yml

@@ -4,7 +4,7 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 119.23.182.50:8848
+        server-addr: 192.168.0.125:28848
         file-extension: yaml
         namespace: dev
         extension-configs:

二进制
src/main/resources/evidence-icon/cartridge.png


二进制
src/main/resources/evidence-icon/case_other.png


二进制
src/main/resources/evidence-icon/check.png


二进制
src/main/resources/evidence-icon/corpse.png


二进制
src/main/resources/evidence-icon/cube.png


二进制
src/main/resources/evidence-icon/dot.png


二进制
src/main/resources/evidence-icon/electronic.png


二进制
src/main/resources/evidence-icon/folder_close.png


二进制
src/main/resources/evidence-icon/footprint.png


二进制
src/main/resources/evidence-icon/hand_l.png


二进制
src/main/resources/evidence-icon/hand_r.png


二进制
src/main/resources/evidence-icon/handprint.png


二进制
src/main/resources/evidence-icon/physics_and_chemistry.png


二进制
src/main/resources/evidence-icon/poison.png


二进制
src/main/resources/evidence-icon/shitib.png


二进制
src/main/resources/evidence-icon/shitifuhao.png


二进制
src/main/resources/evidence-icon/shitiz.png


二进制
src/main/resources/evidence-icon/video.png


二进制
src/main/resources/evidence-icon/virus.png


二进制
src/main/resources/evidence-icon/wrenchAndScrewdriver.png


二进制
src/main/resources/evidence-icon/xieyin.png


二进制
src/main/resources/evidence-icon/xueji.png


二进制
src/main/resources/evidence-icon/xuepo.png


二进制
src/main/resources/evidence-icon/youzuji.png


二进制
src/main/resources/evidence-icon/zhiwen.png


二进制
src/main/resources/evidence-icon/zuozuji.png


+ 1 - 1
src/main/resources/mapper/manage/DictFileMapper.xml

@@ -26,7 +26,7 @@
             and df.use_type = #{param.useType}
         </if>
         <if test="param.kno != null and param.kno !=''">
-            and df.k_no = #{param.kno}
+            and df.kno = #{param.kno}
         </if>
 
         <if test="param.fileType != null">

+ 5 - 0
src/main/resources/mapper/manage/DictIconMapper.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.manage.mapper.IDictIconMapper">
+
+</mapper>

+ 4 - 0
src/main/resources/mapper/manage/SceneProMapper.xml

@@ -170,6 +170,10 @@
         <if test="param.notUserId != null ">
             and u.id != #{param.notUserId}
         </if>
+        <if test="param.sceneStatus != null ">
+            and s.scene_status = #{param.sceneStatus}
+        </if>
+
 
         <if test="param.sceneSource != null and param.sceneSource.size >0">
             and s.scene_source in