lyhzzz hace 2 meses
padre
commit
542627e48a
Se han modificado 27 ficheros con 952 adiciones y 60 borrados
  1. 4 0
      doc/nacos-update2.1.0.txt
  2. 34 0
      doc/update.2.1.0.sql
  3. 432 0
      doc/开放服务-api(2).md
  4. 2 2
      src/main/java/com/fdkankan/manage/config/ManageConfig.java
  5. 21 0
      src/main/java/com/fdkankan/manage/controller/DictFileCaseController.java
  6. 10 8
      src/main/java/com/fdkankan/manage/controller/inner/InnerAPIController.java
  7. 3 0
      src/main/java/com/fdkankan/manage/entity/CaseOverview.java
  8. 4 0
      src/main/java/com/fdkankan/manage/entity/DictFile.java
  9. 48 0
      src/main/java/com/fdkankan/manage/entity/DictFileCase.java
  10. 1 1
      src/main/java/com/fdkankan/manage/generate/AutoGenerate.java
  11. 28 0
      src/main/java/com/fdkankan/manage/httpClient/HaixinInterceptor.java
  12. 1 1
      src/main/java/com/fdkankan/manage/httpClient/address/HaixinAddressSource.java
  13. 3 2
      src/main/java/com/fdkankan/manage/httpClient/client/HaixinClient.java
  14. 18 0
      src/main/java/com/fdkankan/manage/mapper/IDictFileCaseMapper.java
  15. 2 0
      src/main/java/com/fdkankan/manage/mapper/IDictFileMapper.java
  16. 2 0
      src/main/java/com/fdkankan/manage/service/ICaseOverviewService.java
  17. 28 0
      src/main/java/com/fdkankan/manage/service/IDictFileCaseService.java
  18. 3 1
      src/main/java/com/fdkankan/manage/service/IDictFileService.java
  19. 25 0
      src/main/java/com/fdkankan/manage/service/impl/CaseOverviewServiceImpl.java
  20. 100 0
      src/main/java/com/fdkankan/manage/service/impl/DictFileCaseServiceImpl.java
  21. 98 35
      src/main/java/com/fdkankan/manage/service/impl/DictFileServiceImpl.java
  22. 4 2
      src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java
  23. 6 0
      src/main/java/com/fdkankan/manage/vo/request/DictFileParam.java
  24. 1 0
      src/main/java/com/fdkankan/manage/vo/request/addMediaLibraryParam.java
  25. 4 0
      src/main/java/com/fdkankan/manage/vo/response/DictFileVo.java
  26. 5 0
      src/main/resources/mapper/manage/DictFileCaseMapper.xml
  27. 65 8
      src/main/resources/mapper/manage/DictFileMapper.xml

+ 4 - 0
doc/nacos-update2.1.0.txt

@@ -0,0 +1,4 @@
+forest-config.yaml
+haixin:
+  basePath: http://1.119.159.10:58080
+  appkey: 780A5AB5A877CE6A3AB01799745332F1

+ 34 - 0
doc/update.2.1.0.sql

@@ -0,0 +1,34 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 192.168.0.125-海鑫
+ Source Server Type    : MySQL
+ Source Server Version : 80027
+ Source Host           : 192.168.0.125:13306
+ Source Schema         : 4dkankan_v4
+
+ Target Server Type    : MySQL
+ Target Server Version : 80027
+ File Encoding         : 65001
+
+ Date: 11/10/2025 18:50:00
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for t_dict_file_case
+-- ----------------------------
+DROP TABLE IF EXISTS `t_dict_file_case`;
+CREATE TABLE `t_dict_file_case`  (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `dict_file_id` int NULL DEFAULT NULL,
+  `case_id` int NULL DEFAULT NULL,
+  `rec_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'A',
+  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 432 - 0
doc/开放服务-api(2).md

@@ -0,0 +1,432 @@
+# 开放服务-api
+
+> API接口列表
+
+1. 获取字典列表
+2. 通过勘验编号,获取痕迹物证信息
+
+> 获取字典列表
+
+- API路径:
+  `ecs/api/openapi/queryDictList/{rootKey}`
+
+- 请求类型:
+  `HTTP GET`
+
+- 请求头:
+  `Content-Type: application/json`
+  `appkey: 授权KEY`
+
+- 响应体:
+
+```json
+  {
+  "flag": 1,
+  "data": [
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa001",
+      "value": "待受理",
+      "key": "0",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa002",
+      "value": "受理",
+      "key": "1",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa003",
+      "value": "拒绝",
+      "key": "2",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa004",
+      "value": "有结果(检出基因型)",
+      "key": "3",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa005",
+      "value": "无结果(已实验未检出基因型)",
+      "key": "4",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa006",
+      "value": "已比中",
+      "key": "5",
+      "root": "DNAWTZTDM"
+    },
+    {
+      "parentKey": "DNAWTZTDM",
+      "id": "abb132ab6ce047a6ad1851f51aaaa007",
+      "value": "DNA委托物证状态代码",
+      "key": "DNAWTZTDM",
+      "root": "DNAWTZTDM"
+    }
+  ],
+  "totalCount": 0
+}
+```
+
+> 通过勘验编号,获取痕迹物证信息
+
+- API路径:
+  `ecs/api/openapi/queryEvidence`
+
+- 请求类型:
+  `HTTP POST`
+
+- 请求头:
+  `Content-Type: application/json`
+  `appkey: 授权KEY`
+
+- 请求体:
+
+```json
+  {
+    "investigationNo": "K1101060000002025080003"
+  }
+```
+
+- 痕迹类型字典:
+  1	手印
+  2	足迹
+  3	工具
+  4	枪弹
+  5	特殊
+  6	生物
+  7	毒化
+  8	理化
+  9	文检
+  10	电子
+  11	视频
+  12	其他
+  17	提取物品
+  18	尸体
+
+- 响应体:
+
+```json
+  {
+  "flag": 1,// 1 成功标识;0 失败标识
+  "msg" : "异常描述",
+  "data": {
+    "sceneMaterialEvidence": [ // 痕迹物证信息
+      {
+        "id": "df19928fd69c091efd791fa2b84b9d21",
+        "investigationId": "ff80808180acd97e0180acd9c8b50009",
+        "materialEvidenceNo": "W11010619000020220500071201002 痕迹物证唯一编码",
+        "category": "2 痕迹类型",
+        "categoryCn": "足迹",
+        "materialEvidenceType": "1",
+        "materialEvidenceTypeDict": "ZJHJLXDM",
+        "materialEvidenceTypeName": "鞋印",
+        "materialEvidenceName": "足迹",
+        "leftPosition": "遗留部位",
+        "feature": "特征描述",
+        "collectedTime": 1652112000000,
+        "collectionMode": "B01",
+        "collectionModeDict": "ZJTQFFDM",
+        "collectionModeName": "直接照相",
+        "createAccount": "yuchao",
+        "createTime": 1655975744000,
+        "labgoodsStatus": "0",
+        "intergoodsStatusCn": "未送检",
+        "fileMd5": "1a179b9975890028dad073360a627926",
+        "guid": "03CCBBE9-6154-4C3E-0F76-C510089FD26F",
+        "extractNo": "W11010619000020220500071201002",
+        "pictureId": "4028a9318180255001818fda5fc3000d",
+        "fileName": "7662882452_59724432884_cccc.jpg",
+        "fileServerPath": "M00/00/91/wKgpsWKFqliAKzx6AAOyvB3KeKY033.jpg"
+      }
+    ],
+    "sceneBodyBasic": [ // 尸体基本信息
+      {
+        "id":"尸体id",
+        "investigationId": "勘验信息ID",
+        "examinationNo": "尸检编号",
+        "consignedAgency": "委托单位",
+        "consignedDate": "委托时间",
+        "consignedBy": "委托人",
+        "consignerPhone": "联系电话",
+        "examinedAgency": "检验单位",
+        "examinedDate": "检验日期",
+        "examinedBy": "检验人",
+        "examinedPlace": "检验地点",
+        "name": "姓名",
+        "originStatus": "是否确定身源(SFDM)",
+        "sex": "性别(XBDM)",
+        "birthDate": "出生日期",
+        "folk": "民族(MZDM)",
+        "nationality": "国籍(GJDM)",
+        "nativePlaceRegionalism": "户籍地区划(XZQHDM)",
+        "nativePlace": "户籍地详址",
+        "addressRegionalism": "现住址区划(XZQHDM)",
+        "address": "现住址详址",
+        "organization": "服务处所",
+        "specialSign": "体表特殊标记(TBTSBJDM)",
+        "deathDateFrom": "死亡时间推断(起)",
+        "deathDateTo": "死亡时间推断(止)",
+        "caseSummary": "简要案情",
+        "gesture": "尸体姿态",
+        "clothes": "衣着情况",
+        "takenWith": "随身物品",
+        "deathReason": "致死原因(ZSYYFLDM)",
+        "deathProperty": "死亡性质(SWXZDM)",
+        "inflictManner": "尸体加害形式",
+        "strangleholdManner": "缢勒颈方式",
+        "chokeSymptom": "人员窒息症像",
+        "encasedBy": "盛装物名称",
+        "packagedBy": "包裹物名称",
+        "surfaceExamOpinion": "尸表检验意见",
+        "dissectionExamOpinion": "解剖检验意见",
+        "remark": "备注",
+        "examinedDateup": "检验开始日期",
+        "examinedDatedown": "检验结束日期",
+        "stfxddqk": "尸体发现地点情况",
+        "stwz": "尸体位置",
+        "xcxjqk": "现场血迹情况",
+        "xczwhjgk": "现场周围环境概况",
+        "familyComment": "家属是否同意解剖(SFDM)",
+        "source": "数据来源(SJLYDM)",
+        "serialNo": "序号",
+        "createAccount": "创建人账号",
+        "updateAccount": "更新人账号",
+        "specialSignCn": "SPECIAL_SIGN_CN",
+        "extractNo": "提取码",
+        "guid": "guid",
+        "isConfirmBodySource": "尸体类型:1确认身源,2未知名尸体,3非人的尸体",
+        "bodyCompleteness": "尸体完整程度(字典WZMSTWZCDDM)",
+        "bodyDegreeOfSpoilage": "尸体腐败程度(字典WZMSTFBCDDM)",
+        "credentialType": "证件类型(ZJZLDM)",
+        "credentialNo": "证件号码",
+        "stwzdm": "尸体位置代码(字典STWZDM)",
+        "age": "尸体年龄",
+        "weight": "尸体体重",
+        "bodyLength": "尸长",
+        "footLength": "足长",
+        "bloodType": "血型(XXFLDM)",
+        "bodyPlaceType": "尸体存放场所类型(WZMSTCFLXDM)",
+        "bodyPlace": "尸体存放详细地点",
+        "bodyAttributes": "尸体属性(字典WZMSTSXDM)",
+        "caseNature": "案件性质(字典WZMAJXZDM)",
+        "bodySaveTime": "尸体保存时间(字典WZMSTBCSJDM)",
+        "isHaveClothes": "有无衣着",
+        "isHaveCorpseSkinCheck": "有无尸表检验",
+        "isHaveAnatomyCheck": "有无解剖检验",
+        "isHaveExtractGoods": "有无提取物品",
+        "isExtractCorpseDna": "是否提取尸体DNA",
+        "isExtractCorpseHandprint": "是否提取尸体指纹",
+        "isExtractCorpseFacePic": "是否能提取尸体人脸照片",
+        "isHaveEntrustAppraisal": "有无委托鉴定信息",
+        "otherFeatures": "其他特征",
+        "corpsePosition": "尸体部位(RTBWMCDM)",
+        "corpseDefectPosition": "尸体缺失部位(RTBWMCDM)",
+        "throwCorpseTime": "抛尸时间",
+        "isHaveDrugHistory": "是否有吸毒史 1.是",
+        "isHavePregnant": "是否怀孕 1.是",
+        "isHaveAids": "是否艾滋病 1.是",
+        "corpseInfractDegree": "尸体侵害情况",
+        "corpseBriefSituation": "简要尸体情况",
+        "inputUnitDivisionCode": "录入单位区划",
+        "inputUnitDivisionCodeCn": "录入单位区划",
+        "inputUnitName": "录入单位名称",
+        "responsiblePersonName": "责任人姓名",
+        "responsiblePersonCard": "责任人身份证号",
+        "responsiblePersonPhone": "责任人联系电话",
+        "examinedPlaceCode": "尸体检验地点代码",
+        "submitFlag": "提交标识 0.暂存 1.提交",
+        "isCriminalCase": "是否为刑事案件",
+        "ageUpper": "尸体年龄上限",
+        "handprintPhoto":[{
+          "id": "无指纹证明照片id",
+          "fileServerPath": "无指纹证明照片路径(文件服务器返回给前端)",
+          "fileMd5": "无指纹证明照片32位md5值(文件服务器返回给前端)",
+          "fileName": "无指纹证明照片文件名称(文件服务器返回给前端)",
+          "handprintDatumName": "无指纹证明照片名称",
+          "deleteFlag": "1",//(1代表删除)
+        }],
+        "zjPictureId": "非人的尸体照片证件照片id",
+        "zjPictureName": "非人的尸体照片证件照片名称",
+        "zjPictureFileServerPath": "非人的尸体照片尸体图片路径(文件服务器返回给前端)",
+        "zjPictureFileMd5": "非人的尸体照片32位md5值(文件服务器返回给前端)",
+        "zjPictureFileName": "非人的尸体照片文件名称(文件服务器返回给前端)",
+        "certificateProveRemark": "证件照片描述",
+        "sceneBodyPhoto":[{//检验照片
+          "extractNo":"提取码",
+          "parentId": "父级id",//派生物证需要传父级(原物证id)
+          "guid": "guid",
+          "id":"4028a8aa58f1a2300158f1a2314d0032",//id(前端生成,后台存在则修改,不存在则新增)
+          "pictureId":"212121",//照片id
+          "bodyId": "4028a8aa58f1a2300158f1a2314d0030",//尸体基本信息ID
+          "deleteFlag": "1",//(1代表删除),
+          "name":"照片名称",
+          "type":"照片类型",//1尸表2解剖3人脸4衣着
+          "serialNo":"1",//尸体照片序号,前端生成
+          "photoDescription":"照片描述",
+          "fileServerPath": "尸体图片路径(文件服务器返回给前端)",
+          "fileMd5": "32位md5值(文件服务器返回给前端)",
+          "fileName": "文件名称(文件服务器返回给前端)"
+        }
+        ],
+        "materialEvidenceList": [
+          {
+            "id": "4028a8aa58f1a2300158f1a2314d0030",
+            "extractNo":"提取码",
+            "evidenceNo":"12121",//物证标牌号
+            "collectedGoodsId":"4028a8aa58f1a2300158f1a2314d0030",//痕迹关联人员id,即见证人id
+            "isSceneRegister":"是否列入现场提取登记表",
+            "parentId": "父级id",//派生物证需要传父级(原物证id)
+            "materialEvidenceNo":"",//痕迹物证编号
+            "inspectNo": "检验码",
+            "serialNo": 1,//序号(前端维护)
+            "category": "现场痕迹物证类别(XCHJWZLBDM)",
+            "pictureId":"原始图ID(前端生成)",//痕迹照片第一张图传这里,再把所有的痕迹照片传到materialEvidenceGoodsPic里去(痕迹物证重新修改为只能录入一张照片,materialEvidenceGoodsPic为空20190513)
+            "fileServerPath": "痕迹图片路径(文件服务器返回给前端)",
+            "fileMd5": "32位md5值(文件服务器返回给前端)",
+            "fileName": "图片文件名称(文件服务器返回给前端)",
+            "modifyFileServerPath": "修改痕迹图片路径(文件服务器返回给前端)",
+            "modifyFileName": "图片文件名称(文件服务器返回给前端)",
+            "modifyFileMd5": "32位md5值(文件服务器返回给前端)",
+            "rawFileName": "test.png",// raw文件名称
+            "rawFileMd5": "a43f3e9701de6453054d69de16e35eb7",//rawMD5
+            "rawFileServerPath": "M00/07/1F/CoKRTFlfTICAEXXlAAOzyBAJNgs291.jpg"//raw文件地址
+            "materialEvidenceName": "痕迹物证名称",
+            "materialEvidenceTypeDict": "痕迹物证类型字典名称",
+            "materialEvidenceType": "痕迹物证类型代码",
+            "materialEvidenceCode": "痕迹物证编码",
+            "materialEvidenceJudgement": "痕迹物证推断(GJTDZLDM)",
+            "leftPosition": "遗留部位",
+            "collectionModeDict": "提取方法字典名称(如果提取方式是手填,此项为录入项)",
+            "collectionMode": "提取方法代码(如果提取方式是手填,此项为空)",
+            "collectedTime": "提取日期",
+            "feature": "特征描述",
+            "bulletModel": "枪弹制式(QDZSDM)",
+            "bulletType": "枪支弹药种类(QZDYZLDM)",
+            "storageFlag": "是否提交专业系统(SFDM)",
+            "storageStatus": "专业系统状态反馈(ZYXTZTFKDM)",
+            "collectedFlag": "是否列入提取物品登记(SFDM)",
+            "relateId":"4028a8aa58f1a2300158f1a2314d0030",//痕迹关联人员id,即见证人id
+            "deleteFlag": "1",//(1代表删除)
+            "relateType":"关联类型(0提取物品;1现场照片,2相关人员3尸体)",//表示关联人员
+            "belongType":"痕迹物证归属 0-表示现场,1-人员,2-尸体,默认0",
+            "sceneCollectedPerson": [
+              {
+                "id": "4028a8aa58f1a2300158f1a2314d0030",
+                "collectedType": "提取类别(1-痕迹物证,2-提取物品)",
+                "collectedPersonId": "提取人ID",
+                "collectedPerson": "提取人姓名",
+                "deleteFlag": "1"//(1代表删除)
+              }
+            ]
+          }
+        ],
+        "sceneCollectedGoods": [
+          {
+            "id": "4028a8aa58f1a2300158f1a2314d0030",
+            "extractNo":"提取码",
+            "evidenceNo":"12121",//物证标牌号
+            "isSceneRegister":"是否列入现场提取登记表",
+            "parentId": "父级id",//派生物证需要传父级(原物证id)
+            "materialEvidenceNo":"",//痕迹物证编号
+            "inspectNo": "检验码",
+            "serialNo": 1,//序号(前段维护)
+            "name": "提取物品名称",
+            "materialEvidenceFlag": "是否痕迹物证标识",
+            "materialEvidenceId": "痕迹物证ID",
+            "amount": "提取物品数量",
+            "unit":"本",// 提取物单位
+            "collectedPosition": "提取部位",
+            "collectedMethod": "提取方法",
+            "collectedTime": "提取时间",
+            "feature": "特征描述",
+            "remark": "备注",
+            "category": "物证类别(XCHJWZLBDM)",
+            "materialEvidenceTypeDict": "物证类型字典名称",
+            "materialEvidenceType": "物证类型代码",
+            "deleteFlag": "1",//(1代表删除)
+            "belongType":"提取物品归属 0-表示现场,2-尸体,默认0",
+            "relateId":"尸体id",
+            "sceneCollectedGoodsPic":[// 提取物图片信息
+              {
+                "id": "4028a8aa58f1a2300158f1a2314d0030",
+                "fileName": "test.png",//图片名称
+                "fileMd5": "a43f3e9701de6453054d69de16e35eb7",//图片MD5
+                "fileServerPath": "M00/07/1F/CoKRTFlfTICAEXXlAAOzyBAJNgs291.jpg"//文件地址
+              }
+            ],
+            "sceneCollectedPerson": [
+              {
+                "collectedType": "提取类别(1-痕迹物证,2-提取物品)",
+                "collectedPersonId": "提取人ID",
+                "collectedPerson": "提取人姓名",
+                "deleteFlag": "1"//(1代表删除)
+              }
+            ]
+          }
+        ]
+      }
+    ],
+    "sceneCollectedGoods": [ // 提取物品信息
+      {
+        "id": "4028a8aa58f1a2300158f1a2314d0030",
+        "extractNo":"提取码",
+        "evidenceNo":"12121",//物证标牌号
+        "isSceneRegister":"是否列入现场提取登记表",
+        "parentId": "父级id",//派生物证需要传父级(原物证id)
+        "materialEvidenceNo":"",//痕迹物证编号
+        "inspectNo": "检验码",
+        "serialNo": 1,//序号
+        "name": "提取物品名称",
+        "materialEvidenceFlag": "是否痕迹物证标识",
+        "materialEvidenceId": "痕迹物证ID",
+        "amount": "提取物品数量",
+        "unit":"本",// 提取物单位
+        "collectedPosition": "提取部位",
+        "collectedMethod": "提取方法",
+        "collectedTime": "提取时间",
+        "feature": "特征描述",
+        "fileServerPath": "痕迹图片路径(文件服务器返回给前端)",
+        "fileMd5": "32位md5值(文件服务器返回给前端)",
+        "fileName": "图片文件名称(文件服务器返回给前端)",
+        "remark": "备注",
+        "category": "物证类别(XCHJWZLBDM)",
+        "materialEvidenceTypeDict": "物证类型字典名称",
+        "materialEvidenceType": "物证类型代码",
+        "deleteFlag": "1",//(1代表删除)
+        "intergoodsStatus": "内部送检状态(0未送检;1检验中;2完成检验)",
+        "intergoodsStatusCn": "内部送检状态中文",
+        "wzgoodsStatus": "入库保管状态(0未送检;其他代表物证状态)",
+        "wzgoodsStatusCn": "入库保管状态中文",
+        "labgoodsStatus": "委托送检状态(0未送检;其他代表实验室状态)",
+        "labgoodsStatusCn": "委托送检状态中文",
+        "sceneCollectedGoodsPic":[// 提取物图片信息
+          {
+            "fileName": "test.png",//图片名称
+            "fileMd5": "a43f3e9701de6453054d69de16e35eb7",//图片MD5
+            "fileServerPath": "M00/07/1F/CoKRTFlfTICAEXXlAAOzyBAJNgs291.jpg"//文件地址
+          }
+        ],
+        "sceneCollectedPerson": [
+          {
+            "collectedType": "提取类别(1-痕迹物证,2-提取物品)",
+            "collectedPersonId": "提取人ID",
+            "collectedPerson": "提取人姓名",
+            "deleteFlag": "1"//(1代表删除)
+          }
+        ]
+      }
+    ]
+  },
+  "totalCount": 0
+}
+```

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

@@ -21,9 +21,9 @@ public class ManageConfig {
     private String queryPath;
     @Value("${manage.default.password:afdd0b4ad2ec172c586e2150770fbf9e}")
     private String defaultPassword;
-    @Value("${manage.haixin.api.appkey}")
+    @Value("${haixin.appkey}")
     private String haixinApiAppkey;
-    @Value("${manage.haixin.api.basePath}")
+    @Value("${haixin.basePath}")
     private String haixinApiBasePath;
     @Value("${to-haixin.server-url}")
     private String serverUrl;

+ 21 - 0
src/main/java/com/fdkankan/manage/controller/DictFileCaseController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.manage.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-11
+ */
+@RestController
+@RequestMapping("/manage/dictFileCase")
+public class DictFileCaseController {
+
+}
+

+ 10 - 8
src/main/java/com/fdkankan/manage/controller/inner/InnerAPIController.java

@@ -532,7 +532,7 @@ public class InnerAPIController extends BaseController {
 
     @PostMapping("/updateKno")
     public ResultData updateKno(@RequestBody ManageLoginRequest param){
-        if(StringUtils.isBlank(param.getProjectId()) || StringUtils.isNotBlank(param.getKno())){
+        if(StringUtils.isBlank(param.getProjectId()) || StringUtils.isBlank(param.getKno())){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
         LambdaQueryWrapper<ScenePlus> sceneQw = new LambdaQueryWrapper<>();
@@ -587,7 +587,7 @@ public class InnerAPIController extends BaseController {
     @PostMapping("/traceEvidenceInfoList")
     public ResultData traceEvidenceInfoList(@RequestBody DictFileParam dictParam){
         dictParam.setTypeKey("media-library");
-        return ResultData.ok(dictFileService.pageList(dictParam));
+        return ResultData.ok(dictFileService.traceEvidenceInfoList(dictParam));
     }
 
     @GetMapping("/refreshTraceEvidenceInfoList/{kno}")
@@ -598,9 +598,8 @@ public class InnerAPIController extends BaseController {
 
     @PostMapping("/addMediaLibrary")
     public ResultData addMediaLibrary(@RequestBody addMediaLibraryParam param){
-        dictFileService.addMediaLibrary(param);
 
-        return ResultData.ok();
+        return ResultData.ok(dictFileService.addMediaLibrary(param));
     }
 
     @PostMapping("/addMediaLibrarys")
@@ -608,16 +607,19 @@ public class InnerAPIController extends BaseController {
         for (addMediaLibraryParam paramParam : param.getParams()) {
             dictFileService.checkMediaLibrary(paramParam);
         }
+        List<DictFile> dictFiles = new ArrayList<>();
         for (addMediaLibraryParam paramParam : param.getParams()) {
-            dictFileService.addMediaLibrary(paramParam);
+            dictFiles.add(dictFileService.addMediaLibrary(paramParam));
         }
-        return ResultData.ok();
+        return ResultData.ok(dictFiles);
     }
 
     @GetMapping("/getCaseByNum")
     public ResultData getCaseByNum(@RequestParam(required = false) String num){
         List<Case> caseByNum = caseService.getCaseByNum(num);
-        List<Case> collect = caseByNum.stream().filter(e -> StringUtils.isNotBlank(e.getKNumber())).collect(Collectors.toList());
-        return ResultData.ok(collect);
+        for (Case aCase : caseByNum) {
+            aCase.setKNumber(aCase.getCaseId().toString());
+        }
+        return ResultData.ok(caseByNum);
     }
 }

+ 3 - 0
src/main/java/com/fdkankan/manage/entity/CaseOverview.java

@@ -82,6 +82,9 @@ public class CaseOverview implements Serializable {
     @TableField("is_copy")
     private Integer isCopy;
 
+    @TableField("num")
+    private String num;
+
     @TableField(exist = false)
     private String resource;
 }

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

@@ -64,4 +64,8 @@ public class DictFile implements Serializable {
 
     @TableField("content")
     private String content;
+
+
+    @TableField(exist = false)
+    private String sid;
 }

+ 48 - 0
src/main/java/com/fdkankan/manage/entity/DictFileCase.java

@@ -0,0 +1,48 @@
+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-10-11
+ */
+@Getter
+@Setter
+@TableName("t_dict_file_case")
+public class DictFileCase implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("dict_file_id")
+    private Integer dictFileId;
+
+    @TableField("case_id")
+    private Integer caseId;
+
+    @TableField("rec_status")
+    @TableLogic(value = "A",delval = "I")
+    private String recStatus;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+
+}

+ 1 - 1
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_camera_type"
+                "t_dict_file_case"
         }));
 
 //        generate(path,"goods", getTables(new String[]{

+ 28 - 0
src/main/java/com/fdkankan/manage/httpClient/HaixinInterceptor.java

@@ -0,0 +1,28 @@
+package com.fdkankan.manage.httpClient;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.interceptor.Interceptor;
+import com.dtflys.forest.reflection.ForestMethod;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @author Xiewj
+ * @date 2025/7/8
+ */
+@Component
+@Slf4j
+public class HaixinInterceptor implements Interceptor<JSONObject> {
+
+    @Value("${haixin.appkey}")
+    public String appkey;
+    @Override
+    public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
+        request.addHeader("appkey",appkey);
+
+    }
+}

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

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
 @Component
 public class HaixinAddressSource implements AddressSource {
 
-    @Value("${manage.haixin.api.basePath}")
+    @Value("${haixin.basePath}")
     private String haixinApiBasePath;
 
 

+ 3 - 2
src/main/java/com/fdkankan/manage/httpClient/client/HaixinClient.java

@@ -2,6 +2,7 @@ package com.fdkankan.manage.httpClient.client;
 
 import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.*;
+import com.fdkankan.manage.httpClient.HaixinInterceptor;
 import com.fdkankan.manage.httpClient.address.HaixinAddressSource;
 import com.fdkankan.manage.httpClient.address.OverallAddressSource;
 import com.fdkankan.manage.httpClient.param.HaixinParam;
@@ -15,8 +16,8 @@ import com.fdkankan.manage.vo.request.SubmitPhotoHaixinVo;
 @Address(source = HaixinAddressSource.class)
 public interface HaixinClient {
 
-    @Post("/ecs/api/openapi/queryEvidence")
-    JSONObject queryEvidence(@JSONBody HaixinParam param, @Header("appkey") String appId);
+    @Post(value = "/ecs/api/openapi/queryEvidence",interceptor = HaixinInterceptor.class)
+    JSONObject queryEvidence(@JSONBody HaixinParam param);
 
     @Post("/ecs/api/panoramicImageService/submitPhoto")
     String submitPhoto(@JSONBody SubmitPhotoHaixinVo param);

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

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

+ 2 - 0
src/main/java/com/fdkankan/manage/mapper/IDictFileMapper.java

@@ -19,4 +19,6 @@ import org.apache.ibatis.annotations.Mapper;
 public interface IDictFileMapper extends BaseMapper<DictFile> {
 
     Page<DictFileVo> pageList(Page<Object> objectPage, DictFileParam param);
+
+    Page<DictFileVo> traceEvidenceInfoList(Page<Object> objectPage, DictFileParam param);
 }

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

@@ -23,4 +23,6 @@ public interface ICaseOverviewService extends IService<CaseOverview> {
     void del(Integer overviewId);
 
     void updatePlatformIdByCase(Integer caseId, Long sysUserId, Integer platformId);
+
+    void move(String num, Long sysUserId,Integer platformId);
 }

+ 28 - 0
src/main/java/com/fdkankan/manage/service/IDictFileCaseService.java

@@ -0,0 +1,28 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.entity.Case;
+import com.fdkankan.manage.entity.DictFileCase;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-11
+ */
+public interface IDictFileCaseService extends IService<DictFileCase> {
+
+    void add(Integer dictFileId,String num);
+    void add(Integer dictFileId,Integer caseId);
+
+    HashMap<Integer,List<Case>> getByDictIds(List<Integer> dictIds);
+
+    List<DictFileCase> getByCaseId(String kno);
+
+    List<DictFileCase> getByCaseIds(List<Integer> caseIds);
+}

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

@@ -17,6 +17,7 @@ public interface IDictFileService extends IService<DictFile> {
 
 
     Object pageList(DictFileParam param);
+    Object traceEvidenceInfoList(DictFileParam dictParam);
 
     void addOrUpdate(DictFile dictFile);
 
@@ -26,9 +27,10 @@ public interface IDictFileService extends IService<DictFile> {
 
     DictFile getByEvidenceNo(String evidenceNo);
 
-    void addMediaLibrary(addMediaLibraryParam param);
+    DictFile addMediaLibrary(addMediaLibraryParam param);
 
     void checkMediaLibrary(addMediaLibraryParam param);
 
     void updateByKno(String kno);
+
 }

+ 25 - 0
src/main/java/com/fdkankan/manage/service/impl/CaseOverviewServiceImpl.java

@@ -176,4 +176,29 @@ public class CaseOverviewServiceImpl extends ServiceImpl<ICaseOverviewMapper, Ca
         wrapper.set(CaseOverview::getPlatformId,platformId);
         this.update(wrapper);
     }
+
+    @Override
+    public void move(String num, Long sysUserId,Integer platformId) {
+        LambdaQueryWrapper<CaseOverview> qr = new LambdaQueryWrapper<>();
+        qr.eq(CaseOverview::getNum,num);
+        List<CaseOverview> list = this.list(qr);
+        if(list == null ||list.isEmpty()){
+            return;
+        }
+
+        for (CaseOverview caseOverview : list) {
+            LambdaUpdateWrapper<CaseTabulation> tw = new LambdaUpdateWrapper<>();
+            tw.eq(CaseTabulation::getOverviewId,caseOverview.getId());
+            tw.set(CaseTabulation::getSysUserId,sysUserId);
+            tw.set(CaseTabulation::getPlatformId,platformId);
+            caseTabulationService.update(tw);
+
+            LambdaUpdateWrapper<CaseOverview> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(CaseOverview::getId,caseOverview.getId());
+            wrapper.set(CaseOverview::getSysUserId,sysUserId);
+            wrapper.set(CaseOverview::getPlatformId,platformId);
+            this.update(wrapper);
+        }
+
+    }
 }

+ 100 - 0
src/main/java/com/fdkankan/manage/service/impl/DictFileCaseServiceImpl.java

@@ -0,0 +1,100 @@
+package com.fdkankan.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.manage.entity.Case;
+import com.fdkankan.manage.entity.DictFile;
+import com.fdkankan.manage.entity.DictFileCase;
+import com.fdkankan.manage.mapper.IDictFileCaseMapper;
+import com.fdkankan.manage.service.ICaseService;
+import com.fdkankan.manage.service.IDictFileCaseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-10-11
+ */
+@Service
+public class DictFileCaseServiceImpl extends ServiceImpl<IDictFileCaseMapper, DictFileCase> implements IDictFileCaseService {
+
+    @Autowired
+    ICaseService caseService;
+
+    @Override
+    public void add(Integer dictFileId,String num) {
+        List<Case> caseByNum = caseService.getCaseByNum(num);
+        if(!caseByNum.isEmpty()){
+            for (Case aCase : caseByNum) {
+                this.add(dictFileId,aCase.getCaseId());
+            }
+
+        }
+    }
+
+    @Override
+    public synchronized void add(Integer dictFileId, Integer caseId) {
+        LambdaQueryWrapper<DictFileCase> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictFileCase::getDictFileId,dictFileId);
+        wrapper.eq(DictFileCase::getCaseId,caseId);
+        List<DictFileCase> list = this.list(wrapper);
+        if(list.isEmpty()){
+            DictFileCase dictFileCase = new DictFileCase();
+            dictFileCase.setDictFileId(dictFileId);
+            dictFileCase.setCaseId(caseId);
+            this.save(dictFileCase);
+        }
+    }
+
+    @Override
+    public  HashMap<Integer,List<Case>> getByDictIds(List<Integer> dictIds) {
+        HashMap<Integer,List<Case>> map = new HashMap<>();
+
+        if(dictIds ==null || dictIds.isEmpty()){
+            return map;
+        }
+        LambdaQueryWrapper<DictFileCase> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(DictFileCase::getDictFileId,dictIds);
+        List<DictFileCase> list = this.list(wrapper);
+
+        List<Integer> caseIds = list.stream().map(DictFileCase::getCaseId).collect(Collectors.toList());
+        HashMap<Integer, Case> mapByCaseIds = caseService.getMapByCaseIds(caseIds);
+
+        for (DictFileCase dictFileCase : list) {
+            map.computeIfAbsent(dictFileCase.getDictFileId(), k -> new ArrayList<>());
+            Case aCase = mapByCaseIds.get(dictFileCase.getCaseId());
+            if(aCase !=null){
+                map.get(dictFileCase.getDictFileId()).add(aCase);
+            }
+        }
+        return map;
+
+    }
+
+    @Override
+    public List<DictFileCase> getByCaseId(String kno) {
+        LambdaQueryWrapper<DictFileCase> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DictFileCase::getCaseId,kno);
+
+        return this.list(wrapper);
+    }
+
+    @Override
+    public List<DictFileCase> getByCaseIds(List<Integer> caseIds) {
+        if(caseIds == null || caseIds.isEmpty()){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<DictFileCase> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(DictFileCase::getCaseId,caseIds);
+        return this.list(wrapper);
+    }
+}

+ 98 - 35
src/main/java/com/fdkankan/manage/service/impl/DictFileServiceImpl.java

@@ -35,10 +35,7 @@ import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -63,6 +60,8 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
     ICaseService caseService;
     @Autowired
     IDictIconService dictIconService;
+    @Autowired
+    IDictFileCaseService dictFileCaseService;
 
     @Override
     public Object pageList(DictFileParam param) {
@@ -75,14 +74,54 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
         Page<DictFileVo> pageVo = this.getBaseMapper().pageList(new Page<>(param.getPageNum(),param.getPageSize()),param);
         List<Integer> dictIds = pageVo.getRecords().stream().map(DictFile::getDictId).collect(Collectors.toList());
         HashMap<Integer,List<DictIcon>> map = dictIconService.getMapGroupDict(dictIds);
+
+        List<Integer> ids = pageVo.getRecords().stream().map(DictFile::getId).collect(Collectors.toList());
+        HashMap<Integer, List<Case>> byDictIds = dictFileCaseService.getByDictIds(ids);
+
         for (DictFileVo dictFileVo : pageVo.getRecords()) {
             dictFileVo.setDictIconList(map.get(dictFileVo.getDictId()));
-            if(StringUtils.isNotBlank(dictFileVo.getKno())){
-                Case byKno = caseService.getByKno(dictFileVo.getKno());
-                if(byKno !=null){
-                    dictFileVo.setCaseTitle(byKno.getCaseTitle());
-                }
+            dictFileVo.setCaseList(byDictIds.get(dictFileVo.getId()));
+        }
+        return PageInfo.PageInfo(pageVo);
+    }
+
+    @Override
+    public Object traceEvidenceInfoList(DictFileParam param) {
+        if(StringUtils.isBlank(param.getTypeKey())){
+            throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
+        }
+        if(!StpUtil.isLogin()){
+            throw new BusinessException(ResultCode.USER_NOT_LOGIN);
+        }
+        param.setSysUserId( Long.valueOf( StpUtil.getLoginId().toString()));
+        if(StringUtils.isNotBlank(param.getNum())){
+            List<Case> caseList = caseService.getCaseByNum(param.getNum());
+            List<Integer> caseIds = caseList.stream().map(Case::getCaseId).collect(Collectors.toList());
+            List<DictFileCase> dictFileCases = dictFileCaseService.getByCaseIds(caseIds);
+            Set<Integer> ids = dictFileCases.stream().map(DictFileCase::getDictFileId).collect(Collectors.toSet());
+            if(!ids.isEmpty()){
+                param.setDictFileIds(ids);
+            }
+        }
+        if(StringUtils.isNotBlank(param.getKno())){
+            List<DictFileCase> dictFileCases = dictFileCaseService.getByCaseId(param.getKno());
+            Set<Integer> ids = dictFileCases.stream().map(DictFileCase::getDictFileId).collect(Collectors.toSet());
+            if(ids.isEmpty()){
+                return PageInfo.PageInfoEmpty(param.getPageNum(),param.getPageSize());
             }
+            param.setDictFileIds(ids);
+        }
+
+        Page<DictFileVo> pageVo = this.getBaseMapper().traceEvidenceInfoList(new Page<>(param.getPageNum(),param.getPageSize()),param);
+        List<Integer> dictIds = pageVo.getRecords().stream().map(DictFile::getDictId).collect(Collectors.toList());
+        HashMap<Integer,List<DictIcon>> map = dictIconService.getMapGroupDict(dictIds);
+
+        List<Integer> ids = pageVo.getRecords().stream().map(DictFile::getId).collect(Collectors.toList());
+        HashMap<Integer, List<Case>> byDictIds = dictFileCaseService.getByDictIds(ids);
+
+        for (DictFileVo dictFileVo : pageVo.getRecords()) {
+            dictFileVo.setDictIconList(map.get(dictFileVo.getDictId()));
+            dictFileVo.setCaseList(byDictIds.get(dictFileVo.getId()));
         }
         return PageInfo.PageInfo(pageVo);
     }
@@ -150,7 +189,7 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
     }
 
     @Override
-    public void addMediaLibrary(addMediaLibraryParam param) {
+    public DictFile addMediaLibrary(addMediaLibraryParam param) {
 
         if(StringUtils.isBlank(param.getFilePath())){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
@@ -158,10 +197,11 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
         if(param.getToHaixin() == 1 && StringUtils.isBlank(param.getNum())){
             throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
         }
+        CommonUpload commonUpload = null;
         if(StringUtils.isNotBlank(param.getFileMd5())){
-            param.setFileMd5( MD5Checksum.getMD5( "/oss/4dkankan/" + param.getFilePath()));
+            //param.setFileMd5( MD5Checksum.getMD5( "/oss/4dkankan/" + param.getFilePath()));
+            commonUpload = commonUploadService.getByFileMd5(param.getFileMd5());
         }
-        CommonUpload commonUpload = commonUploadService.getByFileMd5(param.getFileMd5());
 
         if(commonUpload == null){
             String uuid = UUID.randomUUID().toString().replace("-","");
@@ -204,9 +244,10 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
             dictFile.setUseType("ordinary");
             dictFile.setUploadId(commonUpload.getId());
             dictFile.setKno(param.getKno());
+            dictFile.setSid(param.getSid());
             dictFile.setContent(JSONObject.toJSONString(param.getContent()));
-
             this.saveOrUpdate(dictFile);
+            dictFileCaseService.add(dictFile.getId(),param.getNum());
         }
 
         try {
@@ -220,11 +261,11 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
         if(param.getToHaixin() ==1){
             ScenePlus scenePlus = scenePlusService.getByNum(param.getNum());
             if(scenePlus == null){
-                return;
+                return dictFile;
             }
             Case caseEntity = caseService.getByKno(scenePlus.getKNo());
             if(caseEntity == null){
-                return;
+                return dictFile;
             }
             SubmitPhotoHaixinVo vo = new SubmitPhotoHaixinVo();
             vo.setKno(scenePlus.getKNo());
@@ -232,6 +273,9 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
             vo.setProjectId(scenePlus.getTaskId());
             vo.setPhotoId(dictFile.getId().toString());
             vo.setFileUrl( commonUpload.getFileUrl());
+            if(StringUtils.isBlank(param.getFileMd5())){
+               param.setFileMd5( MD5Checksum.getMD5( "/oss/4dkankan/" + param.getFilePath()));
+            }
             vo.setMd5(param.getFileMd5());
             vo.setCategory(param.getCategory());
             vo.setServerUrl(manageConfig.getServerUrl());
@@ -239,6 +283,7 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
             log.info("submitPhoto-tohaixin-result:{}",jsonObject);
 
         }
+        return dictFile;
     }
 
     private DictFile getByUploadIdAndSysId(Integer uploadId, Long sysId) {
@@ -255,7 +300,7 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
     @Override
     public void updateByKno(String kno) {
         try {
-            JSONObject jsonObject = haixinClient.queryEvidence(new HaixinParam(kno), manageConfig.getHaixinApiAppkey());
+            JSONObject jsonObject = haixinClient.queryEvidence(new HaixinParam(kno));
             JSONObject data = jsonObject.getJSONObject("data");
             JSONArray jsonArray = data.getJSONArray("sceneMaterialEvidence");
             for (Object object : jsonArray) {
@@ -267,26 +312,38 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
                 String leftPosition = obj.getString("leftPosition");
                 String feature = obj.getString("feature");
                 String collectionModeName = obj.getString("collectionModeName");
+                if(StringUtils.isBlank(collectionModeName)){
+                    collectionModeName =obj.getString("collectionMode");
+                }
                 String collectedTime = obj.getString("collectedTime");
                 String createAccount = obj.getString("createAccount");
-                EvidenceVo vo = new EvidenceVo(materialEvidenceName,leftPosition,feature,collectionModeName,collectedTime,createAccount,0,null);
-
-                String localPath = OssPath.localPath + OssPath.MANAGE_MODEL_FILE_PATH;
-                String uuid = UUID.randomUUID().toString().replace("-","");
-                String extName = fileServerPath.substring(fileServerPath.lastIndexOf(".")).toLowerCase();
-                String formart = extName.replace(".", "");
-                localPath = String.format(localPath,uuid) + extName;
-
-                String cmd = String.format(CommandEnum.WGET_URL,localPath,manageConfig.getHaixinApiBasePath() + "/"+ fileServerPath);
-                ShellUtil.execCmd(cmd);
-                if(!new File(localPath).exists()){
-                    log.info("wget-文件不存在");
-                    continue;
+                JSONArray jsonArray1 = obj.getJSONArray("sceneCollectedPerson");
+                StringBuilder collectedPerson = new StringBuilder();
+                for (Object o : jsonArray1) {
+                    JSONObject jsonObject1 = (JSONObject) o;
+                    collectedPerson.append(jsonObject1.getString("collectedPerson")).append(",");
+                }
+                if(collectedPerson.toString().contains(",")){
+                    collectedPerson.delete(collectedPerson.lastIndexOf(","),collectedPerson.length() -1);
                 }
-                Long fileSize = new File(localPath).length();
-                String ossPath = String.format(OssPath.MANAGE_MODEL_FILE_PATH, uuid+ extName);
-                fYunFileServiceInterface.uploadFile(localPath, ossPath);
-                FileUtil.del(localPath);
+                EvidenceVo vo = new EvidenceVo(materialEvidenceName,leftPosition,feature,collectionModeName,collectedTime,collectedPerson.toString(),0,null);
+
+//                String localPath = OssPath.localPath + OssPath.MANAGE_MODEL_FILE_PATH;
+//                String uuid = UUID.randomUUID().toString().replace("-","");
+//                String extName = fileServerPath.substring(fileServerPath.lastIndexOf(".")).toLowerCase();
+//                String formart = extName.replace(".", "");
+//                localPath = String.format(localPath,uuid) + extName;
+//
+//                String cmd = String.format(CommandEnum.WGET_URL,localPath,manageConfig.getHaixinApiBasePath() + "/"+ fileServerPath);
+//                ShellUtil.execCmd(cmd);
+//                if(!new File(localPath).exists()){
+//                    log.info("wget-文件不存在");
+//                    continue;
+//                }
+//                Long fileSize = new File(localPath).length();
+//                String ossPath = String.format(OssPath.MANAGE_MODEL_FILE_PATH, uuid+ extName);
+//                fYunFileServiceInterface.uploadFile(localPath, ossPath);
+//                FileUtil.del(localPath);
 
                 DictFile dictFile = this.getByEvidenceNo(evidenceNo);
                 if(dictFile == null){
@@ -297,8 +354,9 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
                     commonUpload = new CommonUpload();
                 }
                 commonUpload.setFileName(materialEvidenceName);
-                commonUpload.setFileUrl(manageConfig.getQueryPath() + ossPath);
-                commonUpload.setFileSize(fileSize.toString());
+                String formart = FileUtil.extName(fileServerPath);
+                commonUpload.setFileUrl(manageConfig.getHaixinApiBasePath() + "/"+ fileServerPath);
+                commonUpload.setFileSize("0");
                 commonUpload.setFileType(0);
                 commonUpload.setFileTypeStr("图片");
                 commonUpload.setFileFormat(formart);
@@ -324,6 +382,11 @@ public class DictFileServiceImpl extends ServiceImpl<IDictFileMapper, DictFile>
                 dictFile.setUpdateTime(new Date());
                 this.saveOrUpdate(dictFile);
 
+                Case byKno = caseService.getByKno(kno);
+                if(byKno !=null){
+                    dictFileCaseService.add(dictFile.getId(),byKno.getCaseId());
+                }
+
             }
 
         }catch (Exception e){

+ 4 - 2
src/main/java/com/fdkankan/manage/service/impl/SceneProServiceImpl.java

@@ -115,6 +115,8 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
     ManageConfig manageConfig;
     @Autowired
     RabbitMqProducer rabbitMqProducer;
+    @Autowired
+    ICaseOverviewService caseOverviewService;
 
 
     @Override
@@ -552,7 +554,6 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         if(jyUser == null){
             throw new BusinessException(ResultCode.USER_NOT_EXIST);
         }
-        caseService.checkNumInCase(param.getNum());
 
         JySceneUpload jySceneUpload = jySceneUploadService.getByNum(param.getNum());
         if(jySceneUpload == null){
@@ -569,8 +570,9 @@ public class SceneProServiceImpl extends ServiceImpl<ISceneProMapper, ScenePro>
         jySceneAuthService.delByNumList(Arrays.asList(scenePlus.getNum()),"scene");
 
         jyMoveSceneLogService.saveLog(scenePlus.getNum(),scenePlus.getUserId(),jyUser.getUserId(),Long.valueOf(StpUtil.getLoginId().toString()));
-
         laserService.updateSceneUser(new LaserUpdateUserVo(scenePlus.getUserId(),jyUser.getRyNo(),jyUser.getUserId(),scenePlus.getNum()));
+
+        caseOverviewService.move(param.getNum(),jyUser.getSysUserId(),jyUser.getPlatformId());
     }
 
     @Override

+ 6 - 0
src/main/java/com/fdkankan/manage/vo/request/DictFileParam.java

@@ -3,7 +3,9 @@ package com.fdkankan.manage.vo.request;
 import com.baomidou.mybatisplus.annotation.TableField;
 import lombok.Data;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 @Data
 public class DictFileParam extends RequestBase{
@@ -14,7 +16,11 @@ public class DictFileParam extends RequestBase{
     private List<Integer> fileTypes;
     private List<String> fileFormats;
     private List<Integer> dictIds;
+    private Set<Integer> dictFileIds;
     private Long sysUserId;
     private String useType;
     private String kno;
+    private Integer caseId;
+    private String num;
+
 }

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

@@ -16,4 +16,5 @@ public class addMediaLibraryParam {
     private Integer category ;
     private Integer dictId;
     private String fileMd5;
+    private String sid;
 }

+ 4 - 0
src/main/java/com/fdkankan/manage/vo/response/DictFileVo.java

@@ -2,6 +2,7 @@ package com.fdkankan.manage.vo.response;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fdkankan.manage.entity.Case;
 import com.fdkankan.manage.entity.DictFile;
 import com.fdkankan.manage.entity.DictIcon;
 import lombok.Data;
@@ -40,4 +41,7 @@ public class DictFileVo extends DictFile {
     private List<DictIcon> dictIconList;
 
     private String caseTitle;
+
+    private List<Case> caseList;
+
 }

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

+ 65 - 8
src/main/resources/mapper/manage/DictFileMapper.xml

@@ -3,11 +3,7 @@
 <mapper namespace="com.fdkankan.manage.mapper.IDictFileMapper">
 
 
-<!--    private String name;
-    private Integer dictId;
-    private String typeKey;
-    private Integer fileType;
-    private List<String> fileFormats;-->
+
     <select id="pageList" resultType="com.fdkankan.manage.vo.response.DictFileVo">
         SELECT * from t_dict_file df
                           LEFT JOIN t_dict d on df.dict_id = d.id
@@ -25,8 +21,51 @@
         <if test="param.useType != null and param.useType !=''">
             and df.use_type = #{param.useType}
         </if>
-        <if test="param.kno != null and param.kno !=''">
-            and df.kno = #{param.kno}
+
+        <if test="param.fileType != null">
+            and cu.file_type = #{param.fileType}
+        </if>
+        <if test="param.dictId != null">
+            and df.dict_id = #{param.dictId}
+        </if>
+        <if test="param.fileFormats != null and param.fileFormats.size>0">
+            and cu.file_format in
+            <foreach collection="param.fileFormats" item="fileFormat" open="(" separator="," close=")">
+                #{fileFormat}
+            </foreach>
+        </if>
+
+        <if test="param.fileTypes != null and param.fileTypes.size>0">
+            and cu.file_type in
+            <foreach collection="param.fileTypes" item="type" open="(" separator="," close=")">
+                #{type}
+            </foreach>
+        </if>
+        <if test="param.dictIds != null and param.dictIds.size>0">
+            and df.dict_id in
+            <foreach collection="param.dictIds" item="dict" open="(" separator="," close=")">
+                #{dict}
+            </foreach>
+        </if>
+        order by  df.id desc
+
+        </select>
+
+
+    <select id="traceEvidenceInfoList" resultType="com.fdkankan.manage.vo.response.DictFileVo">
+        SELECT * from t_dict_file df
+        LEFT JOIN t_dict d on df.dict_id = d.id
+        LEFT JOIN t_common_upload cu on df.upload_id = cu.id
+        where df.rec_status = 'A' and d.use_type = 'trace_evidence'
+
+        <if test="param.name != null and param.name !=''">
+            and df.name like concat('%',#{param.name}, '%')
+        </if>
+        <if test="param.typeKey != null and param.typeKey !=''">
+            and df.type_key = #{param.typeKey}
+        </if>
+        <if test="param.useType != null and param.useType !=''">
+            and df.use_type = #{param.useType}
         </if>
 
         <if test="param.fileType != null">
@@ -54,8 +93,26 @@
                 #{dict}
             </foreach>
         </if>
+        <if test="param.dictFileIds == null or param.dictFileIds.size==0">
+            and  df.sys_user_id = #{param.sysUserId}
+        </if>
+
+        <if test="(param.kno == null or param.kno=='') and param.dictFileIds != null and param.dictFileIds.size>0">
+            and ( df.sys_user_id = #{param.sysUserId} or
+                 df.id in
+            <foreach collection="param.dictFileIds" item="dictFileId" open="(" separator="," close=")">
+                #{dictFileId}
+            </foreach>
+            )
+        </if>
 
+        <if test="param.kno != null and param.kno!='' and param.dictFileIds != null and param.dictFileIds.size>0">
+           and  df.id in
+            <foreach collection="param.dictFileIds" item="dictFileId" open="(" separator="," close=")">
+                #{dictFileId}
+            </foreach>
+        </if>
         order by  df.id desc
 
-        </select>
+    </select>
 </mapper>