20250408 更新

1.贵阳禁毒-鉴定文书系统初始化
master
陈江保 4 weeks ago
parent e9f135f058
commit e2c4ae1dbd
  1. 15
      Dockerfile
  2. 769
      db/dlp_identify_book.sql
  3. 17
      db/permission.sql
  4. 3
      db/sql.sql
  5. 269
      pom.xml
  6. 22
      src/main/java/digital/laboratory/platform/identifybook/DlpIdentifyBookApplication.java
  7. 130
      src/main/java/digital/laboratory/platform/identifybook/config/ApiPathProperties.java
  8. 43
      src/main/java/digital/laboratory/platform/identifybook/config/FeignOauth2RequestInterceptor.java
  9. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/BIdentificationProcessController.java
  10. 734
      src/main/java/digital/laboratory/platform/identifybook/controller/BusinessProcessRecordController.java
  11. 23
      src/main/java/digital/laboratory/platform/identifybook/controller/CaseEventController.java
  12. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/CaseEvidenceController.java
  13. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/DelivererController.java
  14. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/EntrustmentBundleController.java
  15. 57
      src/main/java/digital/laboratory/platform/identifybook/controller/EntrustmentController.java
  16. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/EntrustmentIdentificationMaterialController.java
  17. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/ExaminationMethodsController.java
  18. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/ExperimentController.java
  19. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/HairJobController.java
  20. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/HairJobIdentificationMaterialController.java
  21. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentificationController.java
  22. 109
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentifyBookApproveController.java
  23. 238
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentifyBookCommController.java
  24. 89
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentifyBookController.java
  25. 123
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentifyBookRelevanceController.java
  26. 238
      src/main/java/digital/laboratory/platform/identifybook/controller/IdentifyDataCommController.java
  27. 174
      src/main/java/digital/laboratory/platform/identifybook/controller/ModifySupplementApplyController.java
  28. 171
      src/main/java/digital/laboratory/platform/identifybook/controller/ReceiveIdentifyBookController.java
  29. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/ResultEntrustmentQualitativeController.java
  30. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/ResultEntrustmentRationController.java
  31. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/SampleController.java
  32. 20
      src/main/java/digital/laboratory/platform/identifybook/controller/TakerController.java
  33. 53
      src/main/java/digital/laboratory/platform/identifybook/controller/TaskNotificationController.java
  34. 108
      src/main/java/digital/laboratory/platform/identifybook/controller/commDataStatisticsController.java
  35. 130
      src/main/java/digital/laboratory/platform/identifybook/dto/EntrustCaseDTO.java
  36. 54
      src/main/java/digital/laboratory/platform/identifybook/dto/EntrustmentDTO.java
  37. 99
      src/main/java/digital/laboratory/platform/identifybook/dto/ReceiveIdentifyBookDTO.java
  38. 43
      src/main/java/digital/laboratory/platform/identifybook/emums/AnnexTypeEnum.java
  39. 54
      src/main/java/digital/laboratory/platform/identifybook/emums/BusinessStatus.java
  40. 38
      src/main/java/digital/laboratory/platform/identifybook/emums/IdentifyRequireEnum.java
  41. 54
      src/main/java/digital/laboratory/platform/identifybook/emums/PermissionGroupEnum.java
  42. 39
      src/main/java/digital/laboratory/platform/identifybook/emums/ReceiveWayEnum.java
  43. 24
      src/main/java/digital/laboratory/platform/identifybook/emums/TaskTypeEnum.java
  44. 40
      src/main/java/digital/laboratory/platform/identifybook/emums/UnitEnums.java
  45. 15
      src/main/java/digital/laboratory/platform/identifybook/entity/AvoidIdentifier.java
  46. 36
      src/main/java/digital/laboratory/platform/identifybook/entity/BIdentificationProcess.java
  47. 58
      src/main/java/digital/laboratory/platform/identifybook/entity/BusinessProcessRecord.java
  48. 113
      src/main/java/digital/laboratory/platform/identifybook/entity/CaseEvent.java
  49. 211
      src/main/java/digital/laboratory/platform/identifybook/entity/CaseEvidence.java
  50. 63
      src/main/java/digital/laboratory/platform/identifybook/entity/Deliverer.java
  51. 763
      src/main/java/digital/laboratory/platform/identifybook/entity/Entrustment.java
  52. 64
      src/main/java/digital/laboratory/platform/identifybook/entity/EntrustmentBundle.java
  53. 538
      src/main/java/digital/laboratory/platform/identifybook/entity/EntrustmentIdentificationMaterial.java
  54. 127
      src/main/java/digital/laboratory/platform/identifybook/entity/ExaminationMethods.java
  55. 70
      src/main/java/digital/laboratory/platform/identifybook/entity/Experiment.java
  56. 81
      src/main/java/digital/laboratory/platform/identifybook/entity/HairJob.java
  57. 125
      src/main/java/digital/laboratory/platform/identifybook/entity/HairJobIdentificationMaterial.java
  58. 22
      src/main/java/digital/laboratory/platform/identifybook/entity/IMAdditionalProperty.java
  59. 46
      src/main/java/digital/laboratory/platform/identifybook/entity/IMTSampleStatus.java
  60. 40
      src/main/java/digital/laboratory/platform/identifybook/entity/Identification.java
  61. 60
      src/main/java/digital/laboratory/platform/identifybook/entity/IdentifyBook.java
  62. 95
      src/main/java/digital/laboratory/platform/identifybook/entity/IdentifyBookApprove.java
  63. 44
      src/main/java/digital/laboratory/platform/identifybook/entity/IdentifyBookRelevance.java
  64. 113
      src/main/java/digital/laboratory/platform/identifybook/entity/ModifySupplementApply.java
  65. 58
      src/main/java/digital/laboratory/platform/identifybook/entity/ReceiveIdentifyBook.java
  66. 66
      src/main/java/digital/laboratory/platform/identifybook/entity/ResultEntrustmentQualitative.java
  67. 66
      src/main/java/digital/laboratory/platform/identifybook/entity/ResultEntrustmentRation.java
  68. 196
      src/main/java/digital/laboratory/platform/identifybook/entity/Sample.java
  69. 63
      src/main/java/digital/laboratory/platform/identifybook/entity/Taker.java
  70. 75
      src/main/java/digital/laboratory/platform/identifybook/entity/TaskNotification.java
  71. 41
      src/main/java/digital/laboratory/platform/identifybook/entity/UpdateInfo.java
  72. 39
      src/main/java/digital/laboratory/platform/identifybook/event/PushDataToLabsCareEvent.java
  73. 67
      src/main/java/digital/laboratory/platform/identifybook/handler/AppStartupRunner.java
  74. 67
      src/main/java/digital/laboratory/platform/identifybook/listener/PushDataToLabsCareEventListener.java
  75. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/BIdentificationProcessMapper.java
  76. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/BusinessProcessRecordMapper.java
  77. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/CaseEventMapper.java
  78. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/CaseEvidenceMapper.java
  79. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/DelivererMapper.java
  80. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/EntrustmentBundleMapper.java
  81. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/EntrustmentIdentificationMaterialMapper.java
  82. 34
      src/main/java/digital/laboratory/platform/identifybook/mapper/EntrustmentMapper.java
  83. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/ExaminationMethodsMapper.java
  84. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/ExperimentMapper.java
  85. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/HairJobIdentificationMaterialMapper.java
  86. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/HairJobMapper.java
  87. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/IdentificationMapper.java
  88. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/IdentifyBookApproveMapper.java
  89. 20
      src/main/java/digital/laboratory/platform/identifybook/mapper/IdentifyBookMapper.java
  90. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/IdentifyBookRelevanceMapper.java
  91. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/ModifySupplementApplyMapper.java
  92. 22
      src/main/java/digital/laboratory/platform/identifybook/mapper/ReceiveIdentifyBookMapper.java
  93. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/ResultEntrustmentQualitativeMapper.java
  94. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/ResultEntrustmentRationMapper.java
  95. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/SampleMapper.java
  96. 18
      src/main/java/digital/laboratory/platform/identifybook/mapper/TakerMapper.java
  97. 26
      src/main/java/digital/laboratory/platform/identifybook/mapper/TaskNotificationMapper.java
  98. 21
      src/main/java/digital/laboratory/platform/identifybook/req/BusinessProcessRecordREQ.java
  99. 36
      src/main/java/digital/laboratory/platform/identifybook/req/EntrustmentREQ.java
  100. 30
      src/main/java/digital/laboratory/platform/identifybook/req/ModifySupplementApplyREQ.java
  101. Some files were not shown because too many files have changed in this diff Show More

@ -0,0 +1,15 @@
FROM moxm/java:1.8-full
RUN mkdir -p /dlp-identifyBook
WORKDIR /dlp-identifyBook
ARG JAR_FILE=target/dlp-identifyBook.jar
COPY ${JAR_FILE} dlp-identifyBook.jar
EXPOSE 5299
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD sleep 60; java -jar dlp-identifyBook.jar $JAVA_OPTS

@ -0,0 +1,769 @@
/*
Navicat Premium Data Transfer
Source Server : MariaDB
Source Server Type : MariaDB
Source Server Version : 100519
Source Host : localhost:3308
Source Schema : dlp_identify_book
Target Server Type : MariaDB
Target Server Version : 100519
File Encoding : 65001
Date: 01/09/2023 11:45:55
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for b_business_process_record
-- ----------------------------
DROP TABLE IF EXISTS `b_business_process_record`;
CREATE TABLE `b_business_process_record` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务流程记录ID',
`business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务ID',
`business_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务名称',
`business_type_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务类型名称',
`business_status` int(10) NULL DEFAULT NULL COMMENT '业务状态',
`message` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '意见',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '业务流程记录表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_case_event
-- ----------------------------
DROP TABLE IF EXISTS `b_case_event`;
CREATE TABLE `b_case_event` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`case_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件编号',
`third_party_sys_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '第三方系统(如现勘系统、案事件系统)编号',
`case_name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '案件名称任务名称',
`case_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件类型',
`happen_time` datetime(0) NULL DEFAULT NULL COMMENT '案发时间',
`case_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案发地详细地点',
`case_area` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案发地行政区划编码(到县一级)',
`case_own_org_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件所属机构',
`case_rank` int(11) NULL DEFAULT 0 COMMENT '案件级别: 0=普通案件, 1=紧急案件, 2=加急案件',
`case_brief` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案情简要',
`comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件备注',
`data_sources` int(11) NULL DEFAULT 0 COMMENT '数据来源,表示数据是本系统自己产生,还是来自外部系统,0表示系统自身,1表示来自外部',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '案件、事件' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_case_evidence
-- ----------------------------
DROP TABLE IF EXISTS `b_case_evidence`;
CREATE TABLE `b_case_evidence` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`evidence_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本系统物证编号',
`case_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '案件Id',
`third_party_sys_evidence_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '第三方系统(如现勘系统、案事件系统)物证编号',
`name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证名称',
`type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证类别:1. 非生物性物证;2. 生物特性物证',
`field_label_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '现场标牌号',
`source` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证来源',
`color` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证颜色',
`form` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证性状',
`fund_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证情况之承载物名称, 例如 棉签 2 棵, 粉末 少许',
`fund_quantity` int(11) NULL DEFAULT NULL COMMENT '物证情况之承载物数量, 例如 5 颗, 3包, ',
`fund_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证情况之承载物单位, 例如 5 颗, 3包',
`quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '物证数量, 例如 3.8 克 或 4.5毫升',
`unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证单位, 例如 3.8 克 或 4.5毫升',
`additional_properties` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '附加属性, 如:体积3毫升,密码123,型号abc',
`person_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者姓名',
`person_cert` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者证件类型',
`person_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者证件号',
`person_gender` int(11) NULL DEFAULT NULL COMMENT '所有者性别,公安系统编码 1:男 2:女 0:未知',
`person_nationality` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者国籍',
`person_nation` int(11) NULL DEFAULT NULL COMMENT '所有者民族编码,公安系统编码',
`person_address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者地址',
`person_age` int(11) NULL DEFAULT NULL COMMENT '所有者年龄',
`pack` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '包装情况:纸袋,纸盒,纸箱,自定义',
`storage_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '存储方法:常规,冷藏,特殊',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '描述',
`comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`data_sources` int(11) NULL DEFAULT 0 COMMENT '数据来源,表示数据是本系统自己产生,还是来自外部系统,0表示系统自身,1表示来自外部',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE,
INDEX `FK1_case_id`(`case_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '与案件相关的物证信息' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_deliverer
-- ----------------------------
DROP TABLE IF EXISTS `b_deliverer`;
CREATE TABLE `b_deliverer` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`owner_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员拥有者userId',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员姓名',
`position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员职务',
`cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员证件名称',
`idnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员证件编号',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检员电话',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `name`(`owner_user_id`, `name`) USING BTREE,
INDEX `owner_user_id`(`owner_user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '送检员' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_entrustment
-- ----------------------------
DROP TABLE IF EXISTS `b_entrustment`;
CREATE TABLE `b_entrustment` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编号',
`case_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '案件Id',
`entrustment_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托编号',
`third_sys_entrust_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '第三方系统中的委托编号',
`entrustment_type` int(11) NULL DEFAULT 0 COMMENT '委托类型: 0=正常司法鉴定委托, 1=案前委托',
`business_type` int(11) NULL DEFAULT 0 COMMENT '业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组',
`process_instance_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '对应的流程实例Id',
`identification_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理Id, 通过这个可以得到鉴定号',
`entrustment_time` datetime(0) NULL DEFAULT NULL COMMENT '委托日期, 鉴定委托书打印日期',
`submitter` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托提交者, 后期可能会转给其他人user_id',
`submit_time` datetime(0) NULL DEFAULT NULL COMMENT '提交日期, 提交审核的日期',
`client_org_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定委托单位编码',
`client_org_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定委托单位名称',
`client_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '通讯地址',
`client_postcode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮政编码',
`client_tel` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话号码',
`client_fax` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '传真号码',
`identification_domain` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托鉴定专业',
`identification_org_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定机构名称',
`qualitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定性分析',
`quantitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定量分析',
`other_identification_requests` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '其他鉴定要求',
`candidate_drugs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '候选毒品列表(drug 对象的 json array)',
`is_client_specified_method` tinyint(1) NULL DEFAULT NULL COMMENT '是否由委托方指定鉴定方法',
`client_specified_method` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托方指定的鉴定方法',
`destructive_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '是否有损检验:0=无损,1=有损',
`other_identification_notes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检验的其他说明(鉴定事项确认书中要求, 审核人填写)',
`reidentification` tinyint(1) NULL DEFAULT 0 COMMENT '是否重新鉴定:0=否,1=重新鉴定',
`old_identification_org_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '原鉴定机构',
`old_identification_document` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '原鉴定文书',
`old_identification_result` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '原鉴定结果',
`reidentification_reason` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '重新鉴定理由',
`avoid_identifier` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '回避的鉴定人及回避事由, json 格式',
`specified_identifier` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '指定鉴定人, 委托中指定鉴定人',
`other_agreement` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '其它约定事项,打印在鉴定事项确认书中的\"约定->其他\"',
`comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`check_candidate_user` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '候选审核人, user_id列表, 逗号分隔',
`check_claim_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审核任务认领人',
`check_claim_time` datetime(0) NULL DEFAULT NULL COMMENT '审核任务认领时间',
`check_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际审核人, user_id',
`check_time` datetime(0) NULL DEFAULT NULL COMMENT '审核时间',
`check_comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审核意见: (审批通过 审批不通过及原因)',
`check_times` int(11) NOT NULL DEFAULT 0 COMMENT '审核次数记录',
`check_all_identification_material_confirmed` tinyint(1) NOT NULL DEFAULT 0 COMMENT '专业全部物证检验状态: 0=未全部审核 1=已全部审核',
`approve_candidate_user` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '候选审批人, user_id列表, 逗号分隔',
`approve_claim_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批任务认领人',
`approve_claim_time` datetime(0) NULL DEFAULT NULL COMMENT '审批任务认领时间',
`approve_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际审批人, user_id',
`approve_time` datetime(0) NULL DEFAULT NULL COMMENT '审批时间',
`approve_comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批意见: (审批通过 审批不通过及原因)',
`approve_times` int(11) NOT NULL DEFAULT 0 COMMENT '审批次数:该字段在审核通过时初始化, 值为0或1时代表初审, 2代表复审',
`deliver_confirm_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检确认人user_id',
`deliver_confirm_time` datetime(0) NULL DEFAULT NULL COMMENT '送检确认时间',
`deliver_confirm_comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检确认意见',
`deliver_time` datetime(0) NULL DEFAULT NULL COMMENT '送检日期',
`deliver_submitter` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检操作提交用户user_id',
`deliverer1_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人1姓名',
`deliverer1_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人1职务',
`deliverer1_cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人1证件名称',
`deliverer1_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人1证件编号',
`deliverer1_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人1电话',
`deliverer2_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人2姓名',
`deliverer2_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人2职务',
`deliverer2_cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人2证件名称',
`deliverer2_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人2证件编号',
`deliverer2_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检人2电话',
`accept_claim_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理任务认领人',
`accept_claim_time` datetime(0) NULL DEFAULT NULL COMMENT '受理任务认领时间',
`accept_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理编号',
`accept_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理人user_id',
`accept_time` datetime(0) NULL DEFAULT NULL COMMENT '受理时间',
`accept_comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理意见',
`identification_items_confirm_printed` tinyint(4) NULL DEFAULT 0 COMMENT '鉴定事项确认书是否已经打印',
`process_info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检受理信息, 以 json 格式记录送检受理各环节的文字意见',
`report_receive_mode` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取方式: 0=自取, 1=代领, 2=邮寄',
`report_receiver1_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的 user id',
`report_receiver1_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的姓名',
`report_receiver1_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的职务',
`report_receiver1_cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的证件类型',
`report_receiver1_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的证件号',
`report_receiver1_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人1的电话',
`report_receiver2_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的 user id',
`report_receiver2_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的姓名',
`report_receiver2_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的职务',
`report_receiver2_cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的证件类型',
`report_receiver2_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的证件号',
`report_receiver2_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告领取人2的电话',
`report_sender_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '报告发放人user_id(通常是受理员)',
`report_sent_time` datetime(0) NULL DEFAULT NULL COMMENT '报告发放时间',
`report_receiver1_signature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '报告领取人1领取报告时的签名',
`report_receiver2_signature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '报告领取人2领取报告时的签名',
`sample_receive_mode` int(11) NULL DEFAULT NULL COMMENT '检材领取方式: 0=自取, 1=实验室自行处理',
`sample_receiver1_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '如果检材领取人1是系统用户, 记录userId',
`sample_receiver1_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人1姓名',
`sample_receiver1_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人1职位',
`sample_receiver1_cret` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人1证件类型',
`sample_receiver1_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人1证件号',
`sample_receiver1_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人1电话',
`sample_receiver2_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '如果检材领取人2是系统用户, 记录userId',
`sample_receiver2_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人2姓名',
`sample_receiver2_position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人2职位',
`sample_receiver2_cret` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人2证件类型',
`sample_receiver2_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人2证件号',
`sample_receiver2_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材领取人2电话',
`sample_sender_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材发放人, 鉴定机构工作人员user_id',
`sample_sent_time` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材发放时间',
`sample_receiver1_person_signature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '检材领取人1签名',
`sample_receiver2_person_signnature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '检材领取人2签名',
`status` int(11) NOT NULL DEFAULT 0 COMMENT '状态',
`previous_status` int(11) NULL DEFAULT NULL COMMENT '上一个状态',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`entrustment_letter_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托书pdf路径',
`identification_items_confirm_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定事项确认书pdf路径',
`transfer_status` int(11) NULL DEFAULT NULL COMMENT '移交状态, null、 1可移交。2已移交; 记录在另一张移交表',
`transfer_oper_signnature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
`transfer_get_signnature` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
`transfer_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`transfer_no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`accept_need_professional` tinyint(4) NOT NULL DEFAULT 0 COMMENT 'x需要专业人员受理: 0=不需要 1=需要',
`data_sources` int(11) NULL DEFAULT 0 COMMENT '数据来源,表示数据是本系统自己产生,还是来自外部系统,0表示系统自身,1表示来自外部',
`accept_no_third_sys` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '第三方系统的受理编号',
`entrust_requirement` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定要求',
`post_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮寄地址',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_case_id`(`case_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '委托' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_entrustment_bundle
-- ----------------------------
DROP TABLE IF EXISTS `b_entrustment_bundle`;
CREATE TABLE `b_entrustment_bundle` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'entrustment_id',
`selected_experiment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '\'[]\'' COMMENT '选中的实验, 实验id的json数组',
`approval_result` tinyint(1) NULL DEFAULT NULL COMMENT '审核审批结果: null=未审, 0=审核审批未通过, 1=审核审批已通过',
`submit_date` date NULL DEFAULT NULL COMMENT '提交给文书系统的日期',
`status` int(11) NOT NULL DEFAULT 0 COMMENT '状态: 0=刚创建, 1=已提交给文书系统, 2=文书审核审批通过, 3=已通知委托系统',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '修改人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '委托与实验关系' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_entrustment_identification_material
-- ----------------------------
DROP TABLE IF EXISTS `b_entrustment_identification_material`;
CREATE TABLE `b_entrustment_identification_material` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '检材id',
`im_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材编号',
`evidence_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '物证id',
`case_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件id',
`entrustment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材名称',
`type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材类别:继承所取物证的类别或从物证类别选择',
`type_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材类别名称:继承所取物证的类别或从物证类别选择',
`color` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材颜色:继承所取物证颜色或手动填入',
`form` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材性状:继承所取物证性状或从物证性状类别选择',
`form_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材性状:继承所取物证性状或从物证性状类别选择',
`fund_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许',
`fund_quantity` int(11) NULL DEFAULT NULL COMMENT '检材情况之承载物数量, 例如 5 颗, 3包',
`fund_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材情况之承载物单位, 例如 5 颗, 3包',
`quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '检材数量, 例如 3.8 克 或 4.5毫升',
`unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '计量单位, 例如 3.8 克 或 4.5毫升',
`additional_properties` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '附加属性, 如:体积3毫升,密码123,型号abc',
`draw_way` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提取方法',
`person_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者姓名',
`person_cert` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者证件类型',
`person_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者证件号',
`person_gender` int(11) NULL DEFAULT 0 COMMENT '所有者性别,公安系统编码: 1=男 2=女 0=未知',
`person_nationality` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者国籍',
`person_nation` int(11) NULL DEFAULT NULL COMMENT '所有者民族编码,公安系统编码',
`person_address` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者地址',
`person_age` int(11) NULL DEFAULT NULL COMMENT '所有者年龄',
`take1_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人1姓名',
`take1_position` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人1职务',
`take1_cert` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人1证件名称',
`take1_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人1证件号',
`take1_phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人1联系电话',
`take2_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人2姓名',
`take2_position` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人2职务',
`take2_cert` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人2证件名称',
`take2_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人2证件号',
`take2_phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集人2联系电话',
`take_time` datetime(0) NULL DEFAULT NULL COMMENT '采集日期',
`witness_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '见证人姓名',
`witness_cert` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '见证人证件名称',
`witness_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '见证人证件号',
`pack` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '包装情况:纸袋,纸盒,纸箱,自定义',
`pack_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '包装情况名称:纸袋,纸盒,纸箱,自定义',
`storage_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '存储方法:常规,冷藏,特殊',
`candidate_drugs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '候选毒品列表(drug 对象的 json array)',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '检材概要',
`check_time` datetime(0) NULL DEFAULT NULL COMMENT '审核时间',
`check_passed` int(11) NULL DEFAULT 0 COMMENT '审核是否通过: 1=审核通过',
`approve_time` datetime(0) NULL DEFAULT NULL COMMENT '审批时间',
`approve_passed` int(11) NULL DEFAULT 0 COMMENT '审批是否通过: 1=审批通过',
`accept_time` datetime(0) NULL DEFAULT NULL COMMENT '受理时间',
`accept_passed` int(11) NULL DEFAULT 0 COMMENT '是否受理: 0=未受理, 1=已受理, -1=不予受理',
`provided_sample1_present` tinyint(1) NULL DEFAULT 1 COMMENT '提供的样本1是否存在, 应该总是存在',
`provided_sample1_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提供的样本1编号',
`provided_sample1_fund_quantity` int(11) NULL DEFAULT NULL COMMENT '提供的样本1承载物数量(重量), 例如 5颗, 3包',
`provided_sample1_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '提供的样本1数量, 例如 3.8 克 或 4.5毫升',
`provided_sample2_present` tinyint(1) NULL DEFAULT 0 COMMENT '提供的样本2是否存在',
`provided_sample2_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提供的样本2编号',
`provided_sample2_fund_quantity` int(11) NULL DEFAULT NULL COMMENT '提供的样本2承载物数量(重量), 例如 5颗, 3包',
`provided_sample2_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '提供的样本2数量, 例如 3.8 克 或 4.5毫升',
`splited_sample` tinyint(1) NULL DEFAULT 0 COMMENT '是否已分样: 0=未分样, 1=已分样',
`sample1_present` tinyint(1) NULL DEFAULT 1 COMMENT '样本1是否存在, 应该总是存在',
`sample1_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本1编号',
`sample1_fund_quantity` int(11) NULL DEFAULT NULL COMMENT '样本1承载物数量(重量), 例如 5颗, 3包',
`sample1_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '样本1数量, 例如 3.8 克 或 4.5毫升',
`sample1_box_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本1盒子 id',
`sample2_present` tinyint(1) NULL DEFAULT 0 COMMENT '样本2是否存在',
`sample2_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本2编号',
`sample2_fund_quantity` int(11) NULL DEFAULT NULL COMMENT '样本2承载物数量(重量), 例如 5颗, 3包',
`sample2_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '样本2数量, 例如 3.8 克 或 4.5毫升',
`sample2_box_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本2盒子 id',
`sample1_repeat_weigh` decimal(10, 4) UNSIGNED ZEROFILL NULL DEFAULT NULL COMMENT '样本1的复秤重量',
`sample2_repeat_weigh` decimal(10, 4) UNSIGNED ZEROFILL NULL DEFAULT NULL COMMENT '样本2的复秤重量',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`analysis_option` int(11) NULL DEFAULT NULL COMMENT '分析项目,代替原来的定性分析,定量分析字段 1.定性分析 2.定量分析 3.定性定量分析 4.关联性判断 5。其他',
`qualitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定性分析',
`quantitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定量分析',
`data_sources` int(11) NULL DEFAULT 0 COMMENT '数据来源,表示数据是本系统自己产生,还是来自外部系统,0表示系统自身,1表示来自外部',
`accept_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材的受理编号',
`order_no` int(11) NULL DEFAULT NULL COMMENT '委托检材顺序号',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_case_id`(`case_id`) USING BTREE,
INDEX `idx_evidence_id`(`evidence_id`) USING BTREE,
INDEX `idx_evidence_no`(`im_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '检材信息' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_experiment
-- ----------------------------
DROP TABLE IF EXISTS `b_experiment`;
CREATE TABLE `b_experiment` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`method_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检验方法id',
`template_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '模板id',
`business` int(11) NULL DEFAULT NULL COMMENT '业务类型,字典中的dlp.identification.business项',
`name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实验名称',
`op_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检验人员id',
`status` int(11) NULL DEFAULT 0 COMMENT '状态: 0=准备中; 1=实验中; 2=实验结束; -1=实验中止',
`finish_date` date NULL DEFAULT NULL COMMENT '实验完成日期',
`comments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注说明',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '修改人',
PRIMARY KEY (`id`) USING BTREE,
INDEX `create_time`(`create_time`) USING BTREE,
INDEX `create_by`(`create_by`) USING BTREE,
INDEX `template_id`(`template_id`) USING BTREE,
INDEX `op_user_id`(`op_user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '实验(检验方法的实例)' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_hair_job
-- ----------------------------
DROP TABLE IF EXISTS `b_hair_job`;
CREATE TABLE `b_hair_job` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`root_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '根任务id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务名称',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务内容描述说明',
`job_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务编号',
`job_issue_org` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务发布单位',
`job_exec_org` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务执行单位',
`job_from` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务来源',
`expiration_date` datetime(0) NULL DEFAULT NULL COMMENT '任务截止日期',
`start_date` datetime(0) NULL DEFAULT NULL COMMENT '任务开始日期',
`comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务备注',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`job_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务类型: 毛发检测/污水检测...',
`xxxjob_identify_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'xxx任务检测类型: 毛发检测:社区戒毒人员检测、公职人员、招考人员。/污水检测:污水处理厂、自然水体、其它水体。...',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '毛发检测任务' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_hair_job_identification_material
-- ----------------------------
DROP TABLE IF EXISTS `b_hair_job_identification_material`;
CREATE TABLE `b_hair_job_identification_material` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '检材id',
`job_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '任务id',
`job_root_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '根任务id',
`im_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材编号',
`sample1_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'A样编号',
`sample2_no` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'B样编号',
`sample1_box_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'A样盒子',
`sample2_box_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'B样盒子',
`person_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者姓名',
`person_card` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '所有者身份证号',
`person_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '人员类别',
`project_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '项目名称',
`execution_time` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '社区戒毒人员在社区执行时间是否超过 6 个月',
`drug_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '曾经吸毒种类',
`collector` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采样人',
`collector_group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采样单位',
`collect_time` datetime(0) NULL DEFAULT NULL COMMENT '采样时间',
`collect_place` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采样地点',
`supervisor` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '监督人员',
`accept_time` datetime(0) NULL DEFAULT NULL COMMENT '受理时间',
`accept_passed` int(11) NULL DEFAULT NULL COMMENT '受理是否通过: 0=未受理, 1=受理通过, -1=受理被拒绝',
`comments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材名称',
`quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '检材数量',
`sample1_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT 'A样数量',
`sample2_quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT 'B样数量',
`unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '计量单位',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_evidence_no`(`im_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '毛发任务的检材信息' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_identification
-- ----------------------------
DROP TABLE IF EXISTS `b_identification`;
CREATE TABLE `b_identification` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`identification_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定号,受理号',
`status` int(11) NOT NULL DEFAULT 0 COMMENT '状态: 0=鉴定中,-1=已终止, 1=已结束',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '鉴定表,一个鉴定可能会有多个委托' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_identification_process
-- ----------------------------
DROP TABLE IF EXISTS `b_identification_process`;
CREATE TABLE `b_identification_process` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '委托ID',
`inspection_process` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检验过程',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '检验过程' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_identify_book
-- ----------------------------
DROP TABLE IF EXISTS `b_identify_book`;
CREATE TABLE `b_identify_book` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书消息ID',
`identify_book_relevance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父ID',
`bucket_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '桶名称',
`path` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书路径',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书文件名(文件名命名规则:鉴定文书 + \"版本号\") ',
`version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书版本号(示例:v1.0、v1.1)',
`remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
INDEX `identify_book_relevance001`(`identify_book_relevance_id`) USING BTREE,
CONSTRAINT `identify_book_relevance001` FOREIGN KEY (`identify_book_relevance_id`) REFERENCES `b_identify_book_relevance` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '鉴定文书消息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_identify_book_approve
-- ----------------------------
DROP TABLE IF EXISTS `b_identify_book_approve`;
CREATE TABLE `b_identify_book_approve` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '鉴定文书审核审批ID',
`relevance_business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务ID',
`year` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '',
`serial_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '序号',
`annex_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '附件类型集合(1:检验记录(含原始记录,检验图表)、2:鉴定事项确认书、3:鉴定委托书或鉴定聘请书、4:检材照片、5:送检人证件复印件、6:原鉴定文书)',
`book_type` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文书类型:(1:检验报告,2:其它)',
`inspection_report_number` int(10) NULL DEFAULT NULL COMMENT '检验报告数量(单位:份)',
`other_number` int(10) NULL DEFAULT NULL COMMENT '其它数量(单位:份)',
`is_qualified` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '是否合格(1:检验方法、2:检验过程、3:检验图谱、4:检验结果)',
`process_user_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审核人ID',
`process_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审核人',
`process_time` datetime(0) NULL DEFAULT NULL COMMENT '审核时间',
`process_message` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审核意见',
`approve_user_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批人ID',
`approve_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批人',
`approve_time` datetime(0) NULL DEFAULT NULL COMMENT '审批时间',
`approve_message` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批意见',
`path` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书审批记录文件路径',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书文件名(文件名命名规则:鉴定文书 + \"版本号\"+\"文件类型\") ',
`version` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '版本号',
`remarks` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '鉴定文书审核审批表 ' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_identify_book_relevance
-- ----------------------------
DROP TABLE IF EXISTS `b_identify_book_relevance`;
CREATE TABLE `b_identify_book_relevance` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`relevance_business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联业务ID',
`year` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '年份',
`serial_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流水号',
`book_status` int(10) NOT NULL COMMENT '鉴定文书业务状态(-1:待制作,0:已制作/重新制作,1:鉴定文书-提交审核,2:鉴定文书-审核通过),-2:鉴定文书-审核未通过,3:鉴定文书-审核退回修改,4:鉴定文书-审批签发成功,-4:鉴定文书-审批拒绝签发,5:鉴定文书-审批签发退回修改,6:鉴定文书-已领取',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '鉴定文书关联中间表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_modify_supplement_apply
-- ----------------------------
DROP TABLE IF EXISTS `b_modify_supplement_apply`;
CREATE TABLE `b_modify_supplement_apply` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '鉴定文书修改补充申请ID',
`year` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '',
`serial_number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流水号',
`entrustment_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托ID',
`entrust_dept_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托单位',
`identify_book_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书编号',
`entrust_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托人ID',
`entrust_user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托人姓名',
`apply_time` datetime(0) NULL DEFAULT NULL COMMENT '申请时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '修改人ID',
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
`update_reason` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '修改原因',
`update_content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '修改内容',
`entrust_by_sign` longblob NULL COMMENT '委托人签名',
`entrust_by_sign_date` datetime(0) NULL DEFAULT NULL COMMENT '委托人签名日期',
`update_way` int(10) NULL DEFAULT NULL COMMENT '修改方式(1:修改存档文件、2:收回原件,重新出具鉴定文书)',
`update_by_sign` longblob NULL COMMENT '修改人签字',
`update_by_sign_date` datetime(0) NULL DEFAULT NULL COMMENT '修改人签字日期',
`status` int(10) NULL DEFAULT 0 COMMENT '业务状态(1:鉴定文书-提交修改补充申请,2:鉴定文书-修改补充-审核通过,-2:鉴定文书-修改补充-审核未通过,3:鉴定文书-修改补充-审批通过,-3:鉴定文书-修改补充-审批通过)',
`empower_by_sign` longblob NULL COMMENT '授权人签字',
`empower_by_sign_date` datetime(0) NULL DEFAULT NULL COMMENT '授权人签字日期',
`empower_by_sign_opinion` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '授权签字人意见',
`technology_by_sign` longblob NULL COMMENT '技术人员签字',
`technology_by_sign_date` datetime(0) NULL DEFAULT NULL COMMENT '技术人员签字日期',
`technology_by_sign_opinion` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '技术人员签字意见',
`path` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书修改/申请文件路径',
`file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定文书修改/申请文件名(文件名命名规则:鉴定文书 + \"版本号\"+\"文件类型\") ',
`remarks` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '鉴定文书修改补充申请表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_receive_identify_book
-- ----------------------------
DROP TABLE IF EXISTS `b_receive_identify_book`;
CREATE TABLE `b_receive_identify_book` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '领取ID',
`relevance_business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '关联业务ID',
`receive_way` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '领取方式',
`recipients_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '领取人ID',
`recipients_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '领取人姓名',
`recipients_time` datetime(0) NULL DEFAULT NULL COMMENT '领取人时间',
`operator_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '经办人ID',
`operator_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '经办人姓名',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '领取鉴定文书信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_result_entrustment_qualitative
-- ----------------------------
DROP TABLE IF EXISTS `b_result_entrustment_qualitative`;
CREATE TABLE `b_result_entrustment_qualitative` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`experiment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实验id',
`sample_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`sample_no` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本编号,字符串,必填,长度 200',
`material_index` int(11) NOT NULL DEFAULT 0 COMMENT '检材序号, 通常是受理的序号',
`short_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本的简要名称',
`compound` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '化合物,必填,长度 200',
`result` tinyint(1) NULL DEFAULT NULL COMMENT 'negative:未检出,positive:检出',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_experiment_id`(`experiment_id`) USING BTREE,
INDEX `sample_no`(`sample_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '委托定性分析检验结果' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_result_entrustment_ration
-- ----------------------------
DROP TABLE IF EXISTS `b_result_entrustment_ration`;
CREATE TABLE `b_result_entrustment_ration` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`experiment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实验id',
`sample_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`sample_no` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本编号,字符串,必填,长度 200',
`material_index` int(11) NOT NULL DEFAULT 0 COMMENT '检材序号, 通常是受理的序号',
`compound` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '化合物,必填,长度 200',
`result` double NULL DEFAULT NULL COMMENT '定量结果,必填,长度12, 精度8',
`comments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注说明',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE,
INDEX `experiment_id`(`experiment_id`) USING BTREE,
INDEX `sample_no`(`sample_no`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '委托定量检验结果' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_sample
-- ----------------------------
DROP TABLE IF EXISTS `b_sample`;
CREATE TABLE `b_sample` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '样本id',
`identification_material_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '检材id, 对应委托的检材id或毛发任务的检材id或污水任务的检材id',
`sample_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本编号',
`source` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '样本来源: entrustment/hairJob/sewageJob/....',
`entrustment_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '委托id',
`sewage_job_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '污水任务id',
`hair_job_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '毛发任务id',
`qualitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定性分析',
`quantitative_analysis` tinyint(1) NULL DEFAULT 1 COMMENT '定量分析',
`candidate_drugs` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '候选毒品列表(drug 对象的 json array)',
`fund_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许',
`fund_quantity` int(11) NULL DEFAULT NULL COMMENT '检材情况之承载物数量, 如 3 颗 或 1包',
`fund_unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '检材情况之承载物单位, 例如 5 颗, 3包',
`quantity` decimal(10, 4) NULL DEFAULT NULL COMMENT '样品数量, 例如 2.3 克 或 3.1 毫升',
`unit` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '计量单位, 例如 3.8 克 或 4.5毫升',
`additional_properties` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '附加属性, 如:体积3毫升,密码123,型号abc',
`draw_way` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提取方法',
`box_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '盒子编号',
`sample_type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'A样还是B样',
`storage_method` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '存储方法:常规,冷藏,特殊',
`accept_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '受理时间, 相当于检验开始时间, 用于比对花了多少时间在检验上',
`status` int(11) NULL DEFAULT NULL COMMENT '状态: 0=已受理,等分配, 1=已分配到检验人员, 2=检验完成',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`holder` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '当前持有者',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '样本名称',
`org_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '送检单位ID',
`accept_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '受理编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '检验用的样本' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_taker
-- ----------------------------
DROP TABLE IF EXISTS `b_taker`;
CREATE TABLE `b_taker` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`owner_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员拥有者userId',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员姓名',
`position` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员职务',
`cert` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员证件名称',
`idnum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员证件编号',
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '采集员电话',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`) USING BTREE,
INDEX `owner_user_id`(`owner_user_id`) USING BTREE,
INDEX `taker_name`(`name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '采集员' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for b_task_notification
-- ----------------------------
DROP TABLE IF EXISTS `b_task_notification`;
CREATE TABLE `b_task_notification` (
`id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '消息ID',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '消息标题',
`type` int(10) NULL DEFAULT NULL COMMENT '任务类型(1:鉴定文书-审核,2:鉴定文书-审核退回修改,3:鉴定文书-审批,4:鉴定文书-审批退回修改,5:鉴定文书-签发/领取,6:鉴定文书修改/补充-审核,7:鉴定文书修改/补充-审批)',
`business_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '业务ID',
`submitter_user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提交人ID',
`submitter_user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '提交人姓名',
`submitter_time` datetime(0) NULL DEFAULT NULL COMMENT '提交日期',
`accept_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '鉴定编号',
`case_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '案件名称',
`content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '消息内容',
`transaction_personnel_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '处理人员ID',
`transaction_personnel_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '办理人姓名',
`permission_group` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '办理人权限组',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`status` int(10) NULL DEFAULT 0 COMMENT '处理状态(0: 待处理,1:已处理,2:退回修改,-1:未通过)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '任务信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for examination_methods
-- ----------------------------
DROP TABLE IF EXISTS `examination_methods`;
CREATE TABLE `examination_methods` (
`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '方法实体类id',
`method_name` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法名',
`method_basis` int(5) NULL DEFAULT NULL COMMENT '方法依据',
`method_English_name` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '方法英文名',
`standard_number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标准号',
`publishing_unit` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发布单位',
`publishing_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间',
`others` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他依据',
`implement_time` datetime(0) NULL DEFAULT NULL COMMENT '实施时间',
`suit_range` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '适用范围',
`normative_references` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '规范性引用文件',
`term_and_definition` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '术语和定义',
`principle` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '原理',
`method_status` int(5) NULL DEFAULT NULL COMMENT '方法当前状态',
`method_type` int(5) NULL DEFAULT NULL COMMENT '方法类型(标准/非标准)',
`reagent` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '试剂',
`instruments_and_equipment` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '仪器和设备',
`quantitative_result_evaluation` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '定量结果评价',
`operation_method` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '操作方法',
`guidelines_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '指导书id',
`expression_of_results` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '结果表述',
`review_time` datetime(0) NULL DEFAULT NULL COMMENT '评审时间',
`reviewer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评审人',
`review_results` int(5) NULL DEFAULT NULL COMMENT '评审结果',
`review_opinion` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '评审意见',
`create_time` datetime(0) NULL DEFAULT current_timestamp COMMENT '创建时间--录入时间',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建人--录入人',
`update_time` datetime(0) NULL DEFAULT current_timestamp ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新人',
`annex_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件url',
`annex_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '检验方法' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

@ -0,0 +1,17 @@
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60000', 'root', '鉴定文书管理', '', 60000, 2, '鉴定文书管理', '/book', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:28:23', NULL);
-- START 鉴定文书制作审核审批签发 --
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60100', '60000', '鉴定文书制作/审核/审批/领取管理', '', 60100, 1, '鉴定文书制作/审核/审批/领取管理', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60110', '60100', '鉴定文书制作/修改', 'IdentifyBookProductionRrSubmissionProcess', 60110, 1, '文书制作/修改(实验人员)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60120', '60100', '鉴定文书审核', 'IdentifyBookSH', 60120, 1, '鉴定文书审核(授权签字人)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60130', '60100', '鉴定文书审批', 'IdentifyBookSP', 60130, 1, '鉴定文书审批(主任)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60140', '60100', '鉴定文书签发/领取', 'IdentifyBookQF', 60140, 1, '鉴定文书签发/领取(实验人员)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
-- END 鉴定文书制作审核审批 --
-- START 鉴定文书修改补充申请/审核/审批 --
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60200', '60000', '鉴定文书修改补充申请/审核/审批管理', '', 60200, 1, '鉴定文书修改补充申请/审核/审批管理', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60210', '60200', '鉴定文修改补充申请/提交', 'IdentifyBookModificationAndSupplementationSQ', 60210, 1, '鉴定文修改补充申请/提交(实验人员)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60220', '60200', '鉴定文书修改补充审核', 'IdentifyBookModificationAndSupplementationSH', 60220, 1, '鉴定文书修改补充审核(授权签字人)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
INSERT INTO `dlp_base`.`sys_permission`(`permission_id`, `parent_id`, `name`, `permission`, `sort`, `type`, `comments`, `path`, `icon`, `keep_alive`, `component`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('60230', '60200', '鉴定文书修改补充审批', 'IdentifyBookModificationAndSupplementationSP', 60230, 1, '鉴定文书修改补充审批(主任)', '', 'icon-guanwangfangwen', '0', NULL, '2023-08-25 14:28:23', NULL, '2023-08-25 14:46:29', NULL);
-- END 鉴定文书修改补充申请/审核/审批 --

@ -0,0 +1,3 @@
INSERT INTO `dlp_base`.`sys_dictionary`(`id`, `module`, `type`, `sort`, `code`, `label`, `css_class`, `list_class`, `default_value`, `description`, `comments`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('dlp.entrustment.identifyBookApproveTemplate', NULL, 'dlp.entrustment', 0, 'identifyBookApproveTemplate', 'NADL-Shaanxi-CX-22-01-2021鉴定文书审批表001.doc', NULL, NULL, 1, NULL, '鉴定文书审批模板', '2021-12-27 17:22:32', '1', '2023-05-26 00:56:13', '1');
INSERT INTO `dlp_base`.`sys_dictionary`(`id`, `module`, `type`, `sort`, `code`, `label`, `css_class`, `list_class`, `default_value`, `description`, `comments`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('dlp.entrustment.identifyBookModifySupplementApplyTemplate', NULL, 'dlp.entrustment', 0, 'identifyBookModifySupplementApplyTemplate', 'NADL-Shaanxi-CX-22-02-2021鉴定文书修改补充申请表001.doc', NULL, NULL, 1, NULL, '鉴定文书修改补充申请模板', '2021-12-27 17:22:32', '1', '2023-05-26 00:56:13', '1');
INSERT INTO `dlp_base`.`sys_dictionary`(`id`, `module`, `type`, `sort`, `code`, `label`, `css_class`, `list_class`, `default_value`, `description`, `comments`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES ('dlp.entrustment.identifyBookTemplate', NULL, 'dlp.entrustment', 0, 'identifyBookTemplate', 'NADL-Shaanxi-CX-22-03-2021国家毒品实验室检验鉴定报告文号和格式模板001.docx', NULL, NULL, 1, NULL, '鉴定文书模板', '2021-12-27 17:22:32', '1', '2023-05-26 00:56:09', '1');

@ -0,0 +1,269 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>digital.laboratory.platform</groupId>
<artifactId>DigitalLaboratoryPlatform</artifactId>
<version>2022.10.11-snapshots</version>
</parent>
<artifactId>dlp-identifyBook</artifactId>
<packaging>jar</packaging>
<description>DLP 鉴定文书管理系统</description>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<junit.version>5.7.1</junit.version>
<dlp.version>2022.10.11-snapshots</dlp.version>
</properties>
<dependencies>
<!--注册中心客户端-->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<!--配置中心客户端-->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.1</version>
</dependency>
<!-- swagger -->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
<!--断路器依赖-->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-feign</artifactId>
<version>${dlp.version}</version>
</dependency>
<!--security-->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-security</artifactId>
<version>${dlp.version}</version>
</dependency>
<!--JDBC相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--core 工具类-->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-core</artifactId>
<version>${dlp.version}</version>
</dependency>
<!-- 数据库 mysql依赖 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!-- log -->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-log</artifactId>
<version>${dlp.version}</version>
</dependency>
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-oss</artifactId>
<version>${dlp.version}</version>
<scope>compile</scope>
</dependency>
<!-- 业务数据的依赖 -->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-admin-api</artifactId>
<version>${dlp.version}</version>
</dependency>
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-remote-word2pdf</artifactId>
<version>${dlp.version}</version>
<scope>compile</scope>
</dependency>
<!-- 鉴定数据依赖 -->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-common-remote-identification</artifactId>
<version>${dlp.version}</version>
</dependency>
<!--检验系统的数据接口-->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-drugtesting-api</artifactId>
<version>${dlp.version}</version>
</dependency>
<!-- TODO poi-tl word 模板处理器 http://deepoove.com/poi-tl -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
<version>2.0.3</version>
</dependency>
<!--QR Code-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<!--aspose 破解 word转pdf-->
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>1.0.1</version>
</dependency>
<!-- MultipartFile 相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!-- 第三方系统api工具-->
<dependency>
<groupId>digital.laboratory.platform</groupId>
<artifactId>dlp-othersys-api</artifactId>
<version>${dlp.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-Xlint:unchecked</compilerArgument>
</configuration>
<version>3.8.1</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>timestamp</name>
<pattern>yyyy-MM-dd HH:mm:ss</pattern>
<locale>zh_CN</locale>
<timeZone>Asia/Shanghai</timeZone>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>copy-resource-one</id>
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/../../out</outputDirectory>
<resources>
<resource>
<directory>${basedir}/target</directory>
<includes>
<include>${project.artifactId}.jar</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<!-- 环境标识, 需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
</properties>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
</project>

@ -0,0 +1,22 @@
package digital.laboratory.platform.identifybook;
import digital.laboratory.platform.common.feign.annotation.EnableDLPFeignClients;
import digital.laboratory.platform.common.security.annotation.EnableDLPResourceServer;
import digital.laboratory.platform.common.swagger.annotation.EnableDLPSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableAsync;
@EnableDLPSwagger2
@EnableDLPFeignClients
@EnableDiscoveryClient
@EnableDLPResourceServer
@SpringBootApplication(scanBasePackages={"digital.laboratory.platform"})
public class DlpIdentifyBookApplication {
public static void main(String[] args) {
SpringApplication.run(DlpIdentifyBookApplication.class, args);
}
}

@ -0,0 +1,130 @@
package digital.laboratory.platform.identifybook.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 贵阳禁毒-情报平台推送数据配置
*/
@Component
@ConfigurationProperties(prefix = "gyjd.labscare.api")
public class ApiPathProperties {
/**
* api的ip
*/
private String host;
/**
* 委托书推送的接口
*/
private String entrustLetter;
/**
* 确认书推送接口
*/
private String confirmLetter;
/**
* 生物检材定性记录
*/
private String biologyQualitativeRecord;
/**
* 普通检材定性记录非红外报告
*/
private String nonInfraredGeneralQualitativeRecord;
/**
* 普通检材定性记录红外报告
*/
private String infraredGeneralQualitativeRecord;
/**
* 鉴定报告审批表
*/
private String appraisalReportApprovalForm;
/**
* 定性报告
*/
private String qualitativeReport;
/**
* 归档报告信息
*/
private String archiveReportInfo;
/************************************ Getter Setter 方法 ***********************************/
/******************************** Getter 方法会拼接上host返回 ***************************/
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getEntrustLetter() {
return host + entrustLetter;
}
public void setEntrustLetter(String entrustLetter) {
this.entrustLetter = entrustLetter;
}
public String getConfirmLetter() {
return host + confirmLetter;
}
public void setConfirmLetter(String confirmLetter) {
this.confirmLetter = confirmLetter;
}
public String getBiologyQualitativeRecord() {
return host + biologyQualitativeRecord;
}
public void setBiologyQualitativeRecord(String biologyQualitativeRecord) {
this.biologyQualitativeRecord = biologyQualitativeRecord;
}
public String getNonInfraredGeneralQualitativeRecord() {
return host + nonInfraredGeneralQualitativeRecord;
}
public void setNonInfraredGeneralQualitativeRecord(String nonInfraredGeneralQualitativeRecord) {
this.nonInfraredGeneralQualitativeRecord = nonInfraredGeneralQualitativeRecord;
}
public String getInfraredGeneralQualitativeRecord() {
return host + infraredGeneralQualitativeRecord;
}
public void setInfraredGeneralQualitativeRecord(String infraredGeneralQualitativeRecord) {
this.infraredGeneralQualitativeRecord = infraredGeneralQualitativeRecord;
}
public String getAppraisalReportApprovalForm() {
return host + appraisalReportApprovalForm;
}
public void setAppraisalReportApprovalForm(String appraisalReportApprovalForm) {
this.appraisalReportApprovalForm = appraisalReportApprovalForm;
}
public String getQualitativeReport() {
return host + qualitativeReport;
}
public void setQualitativeReport(String qualitativeReport) {
this.qualitativeReport = qualitativeReport;
}
public String getArchiveReportInfo() {
return host + archiveReportInfo;
}
public void setArchiveReportInfo(String archiveReportInfo) {
this.archiveReportInfo = archiveReportInfo;
}
}

@ -0,0 +1,43 @@
package digital.laboratory.platform.identifybook.config;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
/**
* Feign 请求拦截器
* Feign Client 向业务系统发出请求的时候, Token 带上, 以用户自己的身份调用业务系统
* 目的是在业务系统中识别用户是谁, 允许或禁止用户进行对应的操作
*/
@Configuration
public class FeignOauth2RequestInterceptor implements RequestInterceptor {
private final String AUTHORIZATION_HEADER = "Authorization";
private final String BEARER_TOKEN_TYPE = "Bearer";
@Override
public void apply(RequestTemplate requestTemplate) {
//System.out.println(String.format("======================================================================================"));
//System.out.println(String.format("dlp-admin-service, FeignOauth2RequestInterceptor(), feignTarget().name()=%s target.url=%s url=%s path=%s", requestTemplate.feignTarget().name(), requestTemplate.feignTarget().url(), requestTemplate.url(), requestTemplate.path()));
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails) {
OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails();
//System.out.println(String.format("FeignOauth2RequestInterceptor() Authorization, token=%s", details.getTokenValue()));
requestTemplate.header(AUTHORIZATION_HEADER, String.format("%s %s", BEARER_TOKEN_TYPE, details.getTokenValue()));
}
else {
//System.out.println(String.format("authentication=%s", authentication));
}
//System.out.println(String.format("======================================================================================"));
}
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-27
*/
@RestController
@RequestMapping("//b-identification-process")
public class BIdentificationProcessController {
}

@ -0,0 +1,734 @@
package digital.laboratory.platform.identifybook.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants;
import digital.laboratory.platform.common.core.util.ClassUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.feign.RemoteGenerateWordService;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.identifybook.dto.EntrustCaseDTO;
import digital.laboratory.platform.identifybook.emums.BusinessStatus;
import digital.laboratory.platform.identifybook.emums.PermissionGroupEnum;
import digital.laboratory.platform.identifybook.emums.TaskTypeEnum;
import digital.laboratory.platform.identifybook.entity.*;
import digital.laboratory.platform.identifybook.event.PushDataToLabsCareEvent;
import digital.laboratory.platform.identifybook.handler.AppStartupRunner;
import digital.laboratory.platform.identifybook.req.BusinessProcessRecordREQ;
import digital.laboratory.platform.identifybook.service.*;
import digital.laboratory.platform.identifybook.vo.BusinessProcessRecordVO;
import digital.laboratory.platform.sys.feign.RemoteUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.context.ApplicationContext;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* <p>
* 业务流程 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "业务流程-相关接口")
@RequestMapping("/book/businessProcessRecord")
public class BusinessProcessRecordController {
private final RemoteUserService remoteUserService;
private final IBusinessProcessRecordService businessProcessRecordService;
private final IIdentifyBookRelevanceService identifyBookRelevanceService;
private final IIdentifyBookApproveService identifyBookApproveService;
private final IEntrustmentService entrustmentService;
private final IEntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService;
// 根据模板身材word工具服务
private final RemoteGenerateWordService remoteGenerateWordService;
private final IModifySupplementApplyService modifySupplementApplyService;
private final IReceiveIdentifyBookService receiveIdentifyBookService;
private final ITaskNotificationService taskNotificationService;
private final ApplicationContext applicationContext;
@ApiOperation(value = "通过条件分页查询业务流程记录列表", notes = "通过条件分页查询业务流程记录列表")
@PostMapping("/search")
public R<IPage<BusinessProcessRecord>> findBusinessProcessRecordPage(@RequestBody BusinessProcessRecordREQ req){
return R.ok(businessProcessRecordService.page(req.getPage(), null));
}
@ApiOperation(value = "根据业务ID查询业务流程记录", notes = "根据业务ID查询业务流程记录")
@PostMapping("/view/{businessId}")
public R<List<BusinessProcessRecord>> view(@PathVariable(value = "businessId") String businessId){
List<BusinessProcessRecord> businessProcessRecordList = businessProcessRecordService.list(
new LambdaQueryWrapper<BusinessProcessRecord>()
.eq(BusinessProcessRecord::getBusinessId, businessId)
.orderByAsc(BusinessProcessRecord::getCreateTime));
return R.ok(businessProcessRecordList);
}
@ApiOperation(value = "鉴定文书审批退回修改—重新提交", notes = "鉴定文书审批退回修改——重新提交")
@PostMapping("/identifyBookSPTHXGCXTJ")
public R<List<BusinessProcessRecord>> identifyBookSPTHXGCXTJ(@RequestBody BusinessProcessRecordVO vo, HttpServletRequest request){
boolean update = identifyBookRelevanceService.update(new LambdaUpdateWrapper<IdentifyBookRelevance>()
.set(IdentifyBookRelevance::getBookStatus, vo.getBusinessStatus())
.eq(IdentifyBookRelevance::getRelevanceBusinessId, vo.getBusinessId()));
if(update){
// 获取用户消息
Principal principal = request.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
TaskNotification taskNotification = new TaskNotification();
BusinessProcessRecord record = new BusinessProcessRecord();
record.setBusinessId(vo.getBusinessId());
record.setBusinessName("鉴定文书审批退回修改-重新提交");
record.setBusinessStatus(Integer.parseInt(vo.getBusinessStatus()));
if (BusinessStatus.JD_WS_SH_TG.getCode().equals(vo.getBusinessStatus())){
record.setBusinessTypeName(BusinessStatus.JD_WS_SH_TG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : "鉴定文书审批退回修改-重新提交");
businessProcessRecordService.save(record);
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_SP.getCode()),
TaskTypeEnum.JD_WS_SP.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookSP.getCode());
// 推送任务通知
commSaveTaskNotification(taskNotification);
}
}
}
return R.ok();
}
@ApiOperation(value = "鉴定文书(提交/审核/审批/签发)", notes = "鉴定文书(提交/审核/审批/签发)")
@Transactional
@PostMapping("/identifyBookTJSHSPQF")
public R<Object> identifyBookTJSHSPQF(@RequestBody BusinessProcessRecordVO vo, HttpServletRequest request){
boolean update = identifyBookRelevanceService.update(new LambdaUpdateWrapper<IdentifyBookRelevance>()
.set(IdentifyBookRelevance::getBookStatus, vo.getBusinessStatus())
.eq(IdentifyBookRelevance::getRelevanceBusinessId, vo.getBusinessId()));
if(update){
// 获取用户消息
Principal principal = request.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
TaskNotification taskNotification = new TaskNotification();
BusinessProcessRecord record = new BusinessProcessRecord();
record.setBusinessId(vo.getBusinessId());
record.setBusinessName("鉴定文书提交审核审批签发");
record.setBusinessStatus(Integer.parseInt(vo.getBusinessStatus()));
if(BusinessStatus.JD_WS_TJ_SH.getCode().equals(vo.getBusinessStatus())){
// 提交审核
record.setBusinessTypeName(BusinessStatus.JD_WS_TJ_SH.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_TJ_SH.getDesc());
// 主要处理是否是退回修改的业务
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1);
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_SH.getCode()),
TaskTypeEnum.JD_WS_SH.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookSH.getCode());
if(!flag){
taskNotification.setSubmitterUserId(dlpUser.getId());
taskNotification.setSubmitterUserName(dlpUser.getName());
Entrustment entrustment = entrustmentService.getById(vo.getBusinessId());
taskNotification.setAcceptNo(entrustment.getAcceptNo());
//CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId());
taskNotification.setCaseName(entrustment.getCaseName());
}
// 推送任务通知
commSaveTaskNotification(taskNotification);
} else if (BusinessStatus.JD_WS_SH_TG.getCode().equals(vo.getBusinessStatus())){
// 审核通过-保存或更新鉴定文书审审批表
IdentifyBookApprove one = new IdentifyBookApprove();
one.setRelevanceBusinessId(vo.getBusinessId());
one.setProcessUserBy(dlpUser.getId());
one.setProcessUserName(dlpUser.getName());
one.setProcessTime(new Date());
one.setProcessMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : "审核通过");
one.setAnnexType(vo.getApproveVO().getAnnexType());
one.setBookType(vo.getApproveVO().getBookType());
one.setInspectionReportNumber(vo.getApproveVO().getInspectionReportNumber());
one.setOtherNumber(vo.getApproveVO().getOtherNumber());
one.setIsQualified(vo.getApproveVO().getIsQualified());
identifyBookApproveService.saveOrUpdate(one);
record.setBusinessTypeName(BusinessStatus.JD_WS_SH_TG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SH_TG.getDesc());
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_SP.getCode()),
TaskTypeEnum.JD_WS_SP.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookSP.getCode());
// 推送任务通知
commSaveTaskNotification(taskNotification);
}
} else if (BusinessStatus.JD_WS_SH_WTG.getCode().equals(vo.getBusinessStatus())){
// 审核未通过
record.setBusinessTypeName(BusinessStatus.JD_WS_SH_WTG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SH_WTG.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), -1)){
}
} else if (BusinessStatus.JD_WS_SH_TH_XG.getCode().equals(vo.getBusinessStatus())){
// 审核-退回修改
record.setBusinessTypeName(BusinessStatus.JD_WS_SH_TH_XG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SH_TH_XG.getDesc());
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 2);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_SH_TH_XG.getCode()),
TaskTypeEnum.JD_WS_SH_TH_XG.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookProductionRrSubmissionProcess.getCode());
// 推送任务通知
commSaveTaskNotification(taskNotification);
}
} else if (BusinessStatus.JD_WS_SP_QF_TG.getCode().equals(vo.getBusinessStatus())){
// TODO 审批签发成功--更新鉴定文书并生成鉴定文书审批表
IdentifyBookApprove one = identifyBookApproveService.list(new LambdaQueryWrapper<IdentifyBookApprove>()
.eq(IdentifyBookApprove::getRelevanceBusinessId, vo.getBusinessId())
.orderByDesc(IdentifyBookApprove::getCreateTime)).get(0);
one.setRelevanceBusinessId(vo.getBusinessId());
one.setApproveUserBy(dlpUser.getId());
one.setApproveUserName(dlpUser.getName());
one.setApproveTime(new Date());
one.setApproveMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : "审批通过");
this.generateIdentifyBookApprove(one);
record.setBusinessTypeName(BusinessStatus.JD_WS_SP_QF_TG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SP_QF_TG.getDesc());
// 审批签发通过-通知鉴定系统
//remoteIdentificationService.putSetReportApplovalPassed(vo.getBusinessId()); 注释掉以前的通知方式
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_QF_LQ.getCode()),
TaskTypeEnum.JD_WS_QF_LQ.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookQF.getCode());
// 推送任务通知
commSaveTaskNotification(taskNotification);
// 发布推送事件
applicationContext.publishEvent(new PushDataToLabsCareEvent(this, vo.getBusinessId(), Collections.synchronizedSet(CollUtil.newHashSet(5, 6))));
// applicationContext.publishEvent(new PushDataToLabsCareEvent(this, vo.getBusinessId(), 6));
// applicationContext.publishEvent(new PushDataToLabsCareEvent(this, vo.getBusinessId(), 7));
}
} else if (BusinessStatus.JD_WS_SP_QF_WTG.getCode().equals(vo.getBusinessStatus())){
// 审批签发未通过
record.setBusinessTypeName(BusinessStatus.JD_WS_SP_QF_WTG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SP_QF_WTG.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), -1)){
}
} else if (BusinessStatus.JD_WS_SP_QF_TH_XG.getCode().equals(vo.getBusinessStatus())){
// 审批签发退回修改
record.setBusinessTypeName(BusinessStatus.JD_WS_SP_QF_TH_XG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_SP_QF_TH_XG.getDesc());
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 2);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_SP_TH_XG.getCode()),
TaskTypeEnum.JD_WS_SP_TH_XG.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookProductionRrSubmissionProcess.getCode());
// 推送任务通知
commSaveTaskNotification(taskNotification);
}
}else if (BusinessStatus.JD_WS_YLQ.getCode().equals(vo.getBusinessStatus())){
// TODO 领取成功--生成鉴定文书领取信息
ReceiveIdentifyBook receiveIdentifyBook = new ReceiveIdentifyBook();
BeanUtil.copyProperties(vo, receiveIdentifyBook);
if (receiveIdentifyBookService.count(Wrappers.<ReceiveIdentifyBook>lambdaQuery().eq(ReceiveIdentifyBook::getRelevanceBusinessId, vo.getBusinessId())) > 0) {
return R.failed("文书已被领取,请勿重复领取!");
}
receiveIdentifyBook.setRelevanceBusinessId(vo.getBusinessId());
receiveIdentifyBook.setOperatorUserId(dlpUser.getId());
receiveIdentifyBook.setOperatorUserName(dlpUser.getName());
receiveIdentifyBookService.save(receiveIdentifyBook);
record.setBusinessTypeName(BusinessStatus.JD_WS_YLQ.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_YLQ.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1)){
}
} else {
return R.failed("参数-业务状态未定义,请确认传入的业务状态是否正确或联系管理员!!!");
}
if(businessProcessRecordService.save(record)){
return R.ok();
}
}
return R.failed("系统异常,请联系管理员!!!");
}
@ApiOperation(value = "鉴定文书修改/补充(提交/审核/审批)", notes = "鉴定文书修改/补充(提交/审核/审批)")
@Transactional
@PostMapping("/identifyBookModifySupplementTJSHSP")
public R<String> identifyBookModifySupplementTJSHSP(@RequestBody BusinessProcessRecordVO vo, HttpServletRequest request){
boolean update = modifySupplementApplyService.update(new LambdaUpdateWrapper<ModifySupplementApply>()
.set(ModifySupplementApply::getStatus, vo.getBusinessStatus())
.eq(ModifySupplementApply::getId, vo.getId()));
if(update){
// 获取用户消息
Principal principal = request.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
TaskNotification taskNotification = new TaskNotification();
ModifySupplementApply modifySupplementApply = modifySupplementApplyService.getById(vo.getId());
BusinessProcessRecord record = new BusinessProcessRecord();
record.setBusinessId(vo.getBusinessId());
record.setBusinessName("鉴定文书修改/补充申请");
record.setBusinessStatus(Integer.parseInt(vo.getBusinessStatus()));
if(BusinessStatus.JD_WS_XG_BC_SQ.getCode().equals(vo.getBusinessStatus())) {
// 提交审核
record.setBusinessTypeName(BusinessStatus.JD_WS_XG_BC_SQ.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_XG_BC_SQ.getDesc());
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_XG_BC_SH.getCode()),
TaskTypeEnum.JD_WS_XG_BC_SH.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookModificationAndSupplementationSH.getCode());
taskNotification.setSubmitterUserId(dlpUser.getId());
taskNotification.setSubmitterUserName(dlpUser.getName());
Entrustment entrustment = entrustmentService.getById(modifySupplementApply.getEntrustmentId());
taskNotification.setAcceptNo(entrustment.getAcceptNo());
//CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId());
//taskNotification.setCaseName(caseEvent.getCaseName());
taskNotification.setCaseName(entrustment.getCaseName());
// 推送任务通知
commSaveTaskNotification(taskNotification);
} else if (BusinessStatus.JD_WS_XG_BC_SH_TG.getCode().equals(vo.getBusinessStatus())){
// 审核通过 设置并修改授权审核信息
modifySupplementApply.setEmpowerBySignDate(new Date());
modifySupplementApply.setEmpowerBySignOpinion(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : "审核通过");
modifySupplementApplyService.updateById(modifySupplementApply);
record.setBusinessTypeName(BusinessStatus.JD_WS_XG_BC_SH_TG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_XG_BC_SH_TG.getDesc());
// 修改推送任务通知处理状态
boolean flag = commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1);
if(flag){
// 设置任务通知公共信息
commSetTaskNotification(taskNotification, vo.getBusinessId(),
Integer.parseInt(TaskTypeEnum.JD_WS_XG_BC_SP.getCode()),
TaskTypeEnum.JD_WS_XG_BC_SP.getDesc(),
record.getMessage(),
PermissionGroupEnum.IdentifyBookModificationAndSupplementationSP.getCode());
Entrustment entrustment = entrustmentService.getById(modifySupplementApply.getEntrustmentId());
taskNotification.setCaseName(entrustment.getCaseName());
// 推送任务通知
commSaveTaskNotification(taskNotification);
}
} else if (BusinessStatus.JD_WS_XG_BC_SH_WTG.getCode().equals(vo.getBusinessStatus())){
// 审核未通过
record.setBusinessTypeName(BusinessStatus.JD_WS_XG_BC_SH_WTG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_XG_BC_SH_WTG.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), -1)){
}
} else if (BusinessStatus.JD_WS_XG_BC_SP_TG.getCode().equals(vo.getBusinessStatus())){
// 审批通过 设置并修改技术人员审批信息
modifySupplementApply.setTechnologyBySignDate(new Date());
modifySupplementApply.setTechnologyBySignOpinion(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : "审核通过");
// 生成鉴定文书修改补充申请表
this.generateModifySupplementApply(modifySupplementApply);
record.setBusinessTypeName(BusinessStatus.JD_WS_XG_BC_SP_TG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_XG_BC_SP_TG.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), 1)){
}
if(modifySupplementApply.getUpdateWay() == 2){
// 修改鉴定文书业务状态未 收回原件-重新制作
identifyBookRelevanceService.update(new LambdaUpdateWrapper<IdentifyBookRelevance>()
.set(IdentifyBookRelevance::getBookStatus, BusinessStatus.JD_WS_XG_BC_SH_YJ_CX_ZZ.getCode())
.eq(IdentifyBookRelevance::getRelevanceBusinessId, modifySupplementApply.getEntrustmentId()));
}
} else if (BusinessStatus.JD_WS_XG_BC_SP_WTG.getCode().equals(vo.getBusinessStatus())){
// 审批未通过
record.setBusinessTypeName(BusinessStatus.JD_WS_XG_BC_SP_WTG.getDesc());
record.setMessage(StringUtils.isNotEmpty(vo.getMessage()) ? vo.getMessage() : BusinessStatus.JD_WS_XG_BC_SP_WTG.getDesc());
// 修改推送任务通知处理状态
if(commUpdateTaskNotification(taskNotification, dlpUser, vo.getBusinessId(), -1)){
}
} else {
return R.failed("参数-业务状态未定义,请确认传入的业务状态是否正确或联系管理员!!!");
}
if(businessProcessRecordService.save(record)){
return R.ok();
}
}
return R.failed("系统异常,请联系管理员!!!");
}
//获取鉴定书的处理记录,按ID排序
@ApiOperation(value ="获取鉴定书的处理记录,按ID desc排序",notes = "获取鉴定书的处理记录,按ID desc排序")
@GetMapping("/getIdentifyBookProcessRecord")
public R getIdentifyBookProcessRecord(String businessId){
List<BusinessProcessRecord> ret= businessProcessRecordService.list(Wrappers.<BusinessProcessRecord>lambdaQuery()
.eq(BusinessProcessRecord::getBusinessId,businessId)
.orderByDesc(BusinessProcessRecord::getId));
return R.ok(ret);
}
/**
* TODO 生成鉴定文书审批表并保存
* @param one 鉴定文书审批表对象
*/
private void generateIdentifyBookApprove(IdentifyBookApprove one) {
try {
EntrustCaseDTO entrustCaseDTO = entrustmentService.getEntrustCaseDTOById(one.getRelevanceBusinessId());
IdentifyBookRelevance identifyBookRelevance = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.eq(IdentifyBookRelevance::getRelevanceBusinessId, one.getRelevanceBusinessId()));
// 模板
// String templateFileName = "NADL-Shaanxi-CX-22-01-2021鉴定文书审批表001.doc";
String templateFileName = AppStartupRunner.getCfg("identifyBookApproveTemplate");
// 文件类型
String fileType = ".docx"; // 文件类型
// 文件版本号
String version = "v1.0";
// 文件名
String fileName = "鉴定文书审批表-" + version;
// 文件路径 + 业务ID +文件名
String pathFileName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + one.getRelevanceBusinessId() + "/bookApprove/" + fileName;
Map<String, Object> parameter = ClassUtils.objectToMap(entrustCaseDTO);
parameter.put("bookYear", identifyBookRelevance.getYear());
parameter.put("bookSerialNumber", identifyBookRelevance.getSerialNumber());
one.setYear(identifyBookRelevance.getYear());
one.setSerialNumber(identifyBookRelevance.getSerialNumber());
// 获取样本数量
long sampleNum = entrustmentIdentificationMaterialService.count(new LambdaQueryWrapper<EntrustmentIdentificationMaterial>()
.eq(EntrustmentIdentificationMaterial::getEntrustmentId, one.getRelevanceBusinessId()));
parameter.put("sampleNum", sampleNum);
one.setPath(pathFileName + fileType);
one.setFileName(fileName + fileType);
if(StringUtils.isEmpty(one.getYear())){
LocalDateTime localDateTime = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
String year = LocalDateTimeUtil.format(localDateTime, "yyyy");
List<IdentifyBookApprove> list = identifyBookApproveService.list(new LambdaQueryWrapper<IdentifyBookApprove>()
.eq(IdentifyBookApprove::getYear, year)
.orderByDesc(IdentifyBookApprove::getSerialNumber));
if(CollectionUtils.isNotEmpty(list)){
int num = Integer.parseInt(list.get(0).getSerialNumber());
one.setYear(year);
one.setSerialNumber(StrUtil.fillBefore((num + 1) + "", '0', 5));
} else {
one.setYear(year);
one.setSerialNumber(StrUtil.fillBefore( "1", '0', 5));
}
}
parameter.put("year", one.getYear());
parameter.put("serialNumber", one.getSerialNumber());
// parameter.put("identificationRequestsDesc", IdentifyRequireEnum.findEnumByCode(entrustCaseDTO.getIdentificationRequests()).getDesc());
parameter.put("otherIdentificationRequests", StringUtils.isNotEmpty(entrustCaseDTO.getOtherIdentificationRequests())? "其它:" + entrustCaseDTO.getOtherIdentificationRequests(): "");
// 文书类型:(1:检验报告,2:其它)
parameter.put("inspectionReportFlag", false);
parameter.put("otherFlag", false);
if(StringUtils.isNotEmpty(one.getBookType())){
String[] bookTypeArr = one.getBookType().split(",");
for (String s : bookTypeArr) {
if (Integer.parseInt(s) == 1) {
parameter.put("inspectionReportFlag", true);
parameter.put("inspectionReportNumber", one.getInspectionReportNumber());
} else if (Integer.parseInt(s) == 2) {
parameter.put("otherFlag", true);
parameter.put("otherNumber", one.getOtherNumber());
}
}
}
// 附件(1:检验记录(含原始记录,检验图表)、2:鉴定事项确认书、3:鉴定委托书或鉴定聘请书、4:检材照片、5:送检人证件复印件、6:原鉴定文书)
parameter.put("jyJlFlag", false);
parameter.put("jdSxQrsFlag", false);
parameter.put("jdWtsFlag", false);
parameter.put("jcZpFlag", false);
parameter.put("sjrZjFyjFlag", false);
parameter.put("yJdWsFlag", false);
if(StringUtils.isNotEmpty(one.getAnnexType())){
String[] annexTypeArr = one.getAnnexType().split(",");
for (String s : annexTypeArr) {
int num = Integer.parseInt(s);
if (num == 1) {
parameter.put("jyJlFlag", true);
} else if (num == 2) {
parameter.put("jdSxQrsFlag", true);
} else if (num == 3) {
parameter.put("jdWtsFlag", true);
} else if (num == 4) {
parameter.put("jcZpFlag", true);
} else if (num == 5) {
parameter.put("sjrZjFyjFlag", true);
} else if (num == 6) {
parameter.put("yJdWsFlag", true);
}
}
}
// 是否合格(1:检验方法、2:检验过程、3:检验图谱、4:检验结果)
parameter.put("jyFfFlag", false);
parameter.put("jyGcFlag", false);
parameter.put("jyTpFlag", false);
parameter.put("jyJgFlag", false);
if(StringUtils.isNotEmpty(one.getIsQualified())){
String[] isQualifiedArr = one.getIsQualified().split(",");
for (String s : isQualifiedArr) {
int num = Integer.parseInt(s);
if (num == 1) {
parameter.put("jyFfFlag", true);
} else if (num == 2) {
parameter.put("jyGcFlag", true);
} else if (num == 3) {
parameter.put("jyTpFlag", true);
} else if (num == 4) {
parameter.put("jyJgFlag", true);
}
}
}
// 鉴定文书审核意见
parameter.put("processMessage", one.getProcessMessage());
// 鉴定文书审核日期
parameter.put("processTime", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(one.getProcessTime().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
// 鉴定文书审批意见
parameter.put("approveMessage", one.getApproveMessage());
// 鉴定文书审批日期
parameter.put("approveTime", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(one.getApproveTime().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
// 备注
parameter.put("remarks", one.getRemarks());
// 生成鉴定文书审批表
R r = remoteGenerateWordService.generateWord(templateFileName, "", pathFileName, fileType,
"", null, false, parameter);
if(r != null && r.getCode() == 0){
identifyBookApproveService.updateById(one);
} else {
throw new IllegalArgumentException(r.getMsg());
}
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* TODO 生成鉴定文书修改/补充申请表
* @param modifySupplementApply 修改补充对象
*/
private void generateModifySupplementApply(ModifySupplementApply modifySupplementApply){
try {
IdentifyBookRelevance identifyBookRelevance = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.eq(IdentifyBookRelevance::getRelevanceBusinessId, modifySupplementApply.getEntrustmentId()));
Entrustment entrustment = entrustmentService.getById(modifySupplementApply.getEntrustmentId());
Map<String, Object> parameter = ClassUtils.objectToMap(modifySupplementApply);
parameter.put("bookYear", identifyBookRelevance.getYear());
parameter.put("bookSerialNumber", identifyBookRelevance.getSerialNumber());
parameter.put("clientOrgName", entrustment.getClientOrgName());
if(StringUtils.isNotEmpty(modifySupplementApply.getEntrustBy()) && StringUtils.isEmpty(modifySupplementApply.getEntrustUserName())){
parameter.put("entrustUserName", remoteUserService.innerGetById(modifySupplementApply.getEntrustBy()).getData().getName());
} else {
parameter.put("entrustUserName", modifySupplementApply.getEntrustUserName());
}
if(ObjectUtils.isNotEmpty(modifySupplementApply.getApplyTime())){
parameter.put("applyTime", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(modifySupplementApply.getApplyTime().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
}
// parameter.put("updateUserName", remoteUserService.innerGetById(modifySupplementApply.getUpdateBy()).getData().getName());
parameter.put("updateUserName", modifySupplementApply.getUpdateBy());
if(ObjectUtils.isNotEmpty(modifySupplementApply.getUpdateTime())){
parameter.put("updateTime", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(modifySupplementApply.getUpdateTime().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
}
parameter.put("xgCdWjFlag", false);
parameter.put("shYjCxCjJdWsFlag", false);
if(modifySupplementApply.getUpdateWay() == 1){
parameter.put("xgCdWjFlag", true);
}else{
parameter.put("shYjCxCjJdWsFlag", true);
}
if(ObjectUtils.isNotEmpty(modifySupplementApply.getEmpowerBySignDate())){
parameter.put("empowerBySignDate", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(modifySupplementApply.getEmpowerBySignDate().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
}
if(ObjectUtils.isNotEmpty(modifySupplementApply.getTechnologyBySignDate())){
parameter.put("technologyBySignDate", LocalDateTimeUtil.format(
LocalDateTime.ofInstant(modifySupplementApply.getTechnologyBySignDate().toInstant(), ZoneId.systemDefault()), "yyyy年MM月dd日"));
}
// 获取模板文件名
String templateFileName = AppStartupRunner.getCfg("identifyBookModifySupplementApplyTemplate");
// 文件类型
String fileType = ".docx"; // 文件类型
// 文件版本号
String version = "v1.0";
// 文件名
String fileName = "鉴定文书修改补充申请-" + version;
// 文件路径 + 业务ID +文件名
String pathFileName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + modifySupplementApply.getEntrustmentId() + "/bookModifyApply/" + fileName;
// 生成鉴定文书审批表
R r = remoteGenerateWordService.generateWord(templateFileName, "", pathFileName, fileType,
"", null, false, parameter);
if(r != null && r.getCode() == 0){
modifySupplementApply.setPath(pathFileName + fileType);
modifySupplementApply.setFileName(fileName + fileType);
modifySupplementApplyService.updateById(modifySupplementApply);
} else {
throw new IllegalArgumentException(r.getMsg());
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 设置任务通知公共信息
* @param taskNotification 任务通知信息
* @param businessId 业务ID
* @param type 任务类型
* @param title 任务标题
* @param content 任务类容
* @param permissionGroup 任务代办人员组
*/
private void commSetTaskNotification(TaskNotification taskNotification, String businessId,
int type, String title, String content, String permissionGroup){
taskNotification.setBusinessId(businessId);
taskNotification.setType(type);
taskNotification.setTitle(title);
taskNotification.setContent(content);
taskNotification.setPermissionGroup(permissionGroup);
}
/**
* 修改推送任务通知处理状态
* @param taskNotification 任务通知基本信息
* @return R<Object>
*/
private boolean commUpdateTaskNotification(TaskNotification taskNotification, DLPUser dlpUser, String businessId, int status){
// 查询并 更新任务为已处理
TaskNotification notification = taskNotificationService.getOne(new LambdaQueryWrapper<TaskNotification>()
.eq(TaskNotification::getBusinessId, businessId)
.eq(TaskNotification::getStatus, 0)
.in(TaskNotification::getPermissionGroup, dlpUser.getPermissions()));
if(ObjectUtils.isNotEmpty(notification)){
notification.setStatus(status);
notification.setTransactionPersonnelId(dlpUser.getId());
notification.setTransactionPersonnelName(dlpUser.getName());
taskNotification.setSubmitterUserId(notification.getSubmitterUserId());
taskNotification.setSubmitterUserName(notification.getSubmitterUserName());
taskNotification.setAcceptNo(notification.getAcceptNo());
taskNotification.setCaseName(notification.getCaseName());
return taskNotificationService.updateById(notification);
}
return false;
}
/**
* 推送任务通知
* @param taskNotification
* @return
*/
private R<Object> commSaveTaskNotification(TaskNotification taskNotification){
// 设置任务通知
boolean save = taskNotificationService.save(taskNotification);
if(!save){
return R.failed("推送任务通知失败");
}
return R.ok();
}
}

@ -0,0 +1,23 @@
package digital.laboratory.platform.identifybook.controller;
import digital.laboratory.platform.common.feign.RemoteGenerateWordService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 案件事件 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/book/caseEvent")
public class CaseEventController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 与案件相关的物证信息 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/caseEvidence")
public class CaseEvidenceController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 送检员 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/deliverer")
public class DelivererController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 委托与实验关系 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@RestController
@RequestMapping("/book/b-entrustment-bundle")
public class EntrustmentBundleController {
}

@ -0,0 +1,57 @@
package digital.laboratory.platform.identifybook.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.identifybook.dto.EntrustmentDTO;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.req.EntrustmentREQ;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 委托 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "委托数据-相关接口")
@RequestMapping("/book/entrustment")
public class EntrustmentController {
private final IEntrustmentService entrustmentService;
@ApiOperation(value = "根据委托id查询委托相关详情", notes = "根据委托id查询委托相关详情")
@GetMapping("/view/{entrustId}")
public R<EntrustmentDTO> view(@PathVariable(value = "entrustId") String entrustId){
EntrustmentDTO entrustmentDTO = entrustmentService.getEntrustmentDTO(entrustId);
return R.ok(entrustmentDTO);
}
@ApiOperation(value = "根据条件分页查询委托数据列表", notes = "根据条件分页查询委托数据列表")
@PostMapping("/findEntrustPage")
public R<IPage<EntrustmentDTO>> findEntrustPage(@RequestBody EntrustmentREQ req){
List<Entrustment> list = entrustmentService.list();
List<String> entrustIdList=new ArrayList<>();
if(list.size()>0){
entrustIdList= list.stream().map(s -> s.getId()).collect(Collectors.toList());
}
entrustmentService.synchronizationTestSysData(entrustIdList);//同步远程数据,同步后的数据不会再同步
return R.ok(entrustmentService.findEntrustPage(req.getPage(), req));
}
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 检材信息 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/entrustmentIdentificationMaterial")
public class EntrustmentIdentificationMaterialController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 检验方法 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@RestController
@RequestMapping("/book/examinationMethods")
public class ExaminationMethodsController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 实验(检验方法的实例) 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@RestController
@RequestMapping("/book/b-experiment")
public class ExperimentController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 毛发检测任务 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/hairJob")
public class HairJobController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 毛发任务的检材信息 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/hairJobIdentificationMaterial")
public class HairJobIdentificationMaterialController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 鉴定表,一个鉴定可能会有多个委托 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/identification")
public class IdentificationController {
}

@ -0,0 +1,109 @@
package digital.laboratory.platform.identifybook.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.entity.IdentifyBookApprove;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import digital.laboratory.platform.identifybook.service.IIdentifyBookApproveService;
import digital.laboratory.platform.identifybook.utils.Word2PdfAsposeUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 鉴定文书审批表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-25
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定文书审批表相关接口")
@RequestMapping("/book/identifyBookApprove")
public class IdentifyBookApproveController {
private final OssFile ossFile;
private final IIdentifyBookApproveService identifyBookApproveService;
private final IEntrustmentService entrustmentService;
@ApiOperation(value = "根据委托ID获取鉴定文书审核审批详情", notes = "根据委托ID获取鉴定文书审核审批详情")
@GetMapping("/view/{entrustId}")
public R<IdentifyBookApprove> view(@PathVariable(value = "entrustId") String entrustId, HttpServletResponse response){
try {
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> entrustIds = new ArrayList<>();
List<Entrustment> entrustmentList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId())
.eq(Entrustment::getId, entrustment.getId())
);
if(CollectionUtils.isNotEmpty(entrustmentList)){
entrustIds.addAll(entrustmentList.stream().map(m -> m.getId()).collect(Collectors.toList()));
}
List<IdentifyBookApprove> identifyBookApproveList = identifyBookApproveService.list(new LambdaQueryWrapper<IdentifyBookApprove>()
.in(IdentifyBookApprove::getRelevanceBusinessId, entrustIds)
.orderByDesc(IdentifyBookApprove::getCreateTime));
return R.ok(CollectionUtils.isNotEmpty(identifyBookApproveList)? identifyBookApproveList.get(0): null);
}catch (Exception e){
System.out.println("获取鉴定文书审批表异常" + e.getMessage());
e.printStackTrace();
}
return R.failed("系统异常!!!");
}
@ApiOperation(value = "根据委托ID获取鉴定文书审批表文件", notes = "根据委托ID获取鉴定文书审批表文件")
@GetMapping("/getIdentifyBookApprove/{entrustId}")
public void getIdentifyBookApprove(@PathVariable(value = "entrustId") String entrustId, HttpServletResponse response){
try {
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> entrustIds = new ArrayList<>();
List<Entrustment> entrustmentList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId())
.eq(Entrustment::getId, entrustment.getId())
);
if(CollectionUtils.isNotEmpty(entrustmentList)){
entrustIds.addAll(entrustmentList.stream().map(m -> m.getId()).collect(Collectors.toList()));
}
List<IdentifyBookApprove> identifyBookApproveList = identifyBookApproveService.list(new LambdaQueryWrapper<IdentifyBookApprove>()
.in(IdentifyBookApprove::getRelevanceBusinessId, entrustIds)
.orderByDesc(IdentifyBookApprove::getCreateTime));
// 获取文件并转PDF
ByteArrayOutputStream bosWord = new ByteArrayOutputStream();
ossFile.fileGet(identifyBookApproveList.get(0).getPath(), bosWord);
ServletOutputStream servletOutputStream = response.getOutputStream();
byte[] pdfByte = Word2PdfAsposeUtil.docx2pdf(new ByteArrayInputStream(bosWord.toByteArray()));
ByteArrayOutputStream baos = new ByteArrayOutputStream(pdfByte.length);
baos.write(pdfByte, 0, pdfByte.length);
baos.writeTo(servletOutputStream);
String fileName = identifyBookApproveList.get(0).getFileName();
response.setContentType(new MimetypesFileTypeMap().getContentType(fileName.substring(0, fileName.length() - 5) + ".pdf"));
baos.close();
}catch (Exception e){
System.out.println("获取鉴定文书审批表异常" + e.getMessage());
e.printStackTrace();
}
}
}

@ -0,0 +1,238 @@
package digital.laboratory.platform.identifybook.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import digital.laboratory.platform.common.core.constant.OSSDirectoryConstants;
import digital.laboratory.platform.common.core.util.ClassUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.feign.RemoteGenerateWordService;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.identifybook.dto.EntrustCaseDTO;
import digital.laboratory.platform.identifybook.entity.*;
import digital.laboratory.platform.identifybook.handler.AppStartupRunner;
import digital.laboratory.platform.identifybook.service.*;
import digital.laboratory.platform.identifybook.vo.ExperimentVO;
import digital.laboratory.platform.sys.feign.RemoteUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
/**
* <p>
* 鉴定文书-制作/修改
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/22 17:41
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定文书-制作/修改-相关接口")
@RequestMapping("/book/identifyBookComm")
public class IdentifyBookCommController {
private final OssFile ossFile;
private final IEntrustmentService entrustmentService;
private final IIdentifyBookService identifyBookService;
private final IIdentifyBookRelevanceService identifyBookRelevanceService;
private final Environment env;
private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
@ApiOperation(value = "根据委托ID制作鉴定文书", notes = "根据委托ID制作鉴定文书")
@ApiImplicitParam(name = "entrustId", value = "委托ID", required = true)
@GetMapping("/makeIdentifyBook/{entrustId}")
public R makeIdentifyBook(@PathVariable(value = "entrustId") String entrustId, HttpServletResponse response) {
EntrustCaseDTO entrustCaseDTO = null;
try {
entrustCaseDTO = identifyBookService.buildIdentifyBook(entrustId);
} catch (Exception e) {
e.printStackTrace();
return R.failed("生成鉴定文书异常, 请联系系统管理员!!!");
}
if (entrustCaseDTO == null) {
return R.failed("实验数据不满足生成文书!");
} else {
return R.ok(entrustCaseDTO, "生成鉴定文书成功!");
}
}
@ApiOperation(value = "根据委托ID和修改后的鉴定文书更新鉴定文书", notes = "根据委托ID和修改后的鉴定文书更新鉴定文书")
@ApiImplicitParam(name = "entrustId", value = "委托ID", required = true)
@PostMapping("/updateIdentifyBook/{entrustId}")
public R updateIdentifyBook(@PathVariable(value = "entrustId") String entrustId,
@RequestPart("file") MultipartFile file, HttpServletResponse response) {
try {
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> stringIdsList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId()))
.stream().map(m -> m.getId())
.collect(Collectors.toList());
IdentifyBookRelevance one = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.in(IdentifyBookRelevance::getRelevanceBusinessId, stringIdsList));
// 获取最后一个文书版本数据
IdentifyBook identifyBook = identifyBookService.getMaxVersionIdentifyBook(one.getId());
String version = "v" + new BigDecimal(identifyBook.getVersion().substring(1)).add(new BigDecimal("0.1")); // 版本号
String fileName = "鉴定文书-" + version;
String fileType = ".docx"; // 文件类型
String identifyBookPathFileName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + one.getRelevanceBusinessId() + "/book/" + fileName; // 鉴定文书存储路径及文件名
// 上传文书
ossFile.fileSave(identifyBookPathFileName + fileType, file.getInputStream());
// 保存文书相关消息
boolean b = this.saveIdentifyBookComm(one.getId(), identifyBookPathFileName + fileType, fileName + fileType, version, "修改文书");
if (b) {
// ossFile.fileGet(identifyBookPathFileName + fileType, response.getOutputStream());
// response.setContentType(new MimetypesFileTypeMap().getContentType(fileName + fileType));
String uuid = IdWorker.get32UUID();
return R.ok(uuid + "#" + identifyBookPathFileName + fileType, "获取文件成功");
}
} catch (Exception e) {
return R.failed("修改文书上传异常,请联系管理员!!!");
}
return R.failed("修改文书上传异常,请联系管理员!!!");
}
@ApiOperation(value = "根据委托ID和修改后的鉴定文书更新鉴定文书", notes = "根据委托ID和修改后的鉴定文书更新鉴定文书")
@ApiImplicitParam(name = "entrustId", value = "委托ID", required = true)
@PostMapping("/callBackIdentifyBook/{entrustId}")
public void callBackIdentifyBook(@PathVariable(value = "entrustId") String entrustId, HttpServletRequest request, HttpServletResponse response) {
log.error("entrustId:: " + entrustId);
PrintWriter writer = null;
JSONObject jsonObj = null;
try {
writer = response.getWriter();
Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
String body = scanner.hasNext() ? scanner.next() : "";
jsonObj = (JSONObject) new JSONParser().parse(body);
System.out.println(jsonObj);
System.out.println("===saveeditedfile:" + jsonObj.get("status"));
/*
0 - no document with the key identifier could be found,
1 - document is being edited,
2 - document is ready for saving,
3 - document saving error has occurred,
4 - document is closed with no changes,
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document.
* */
if ((long) jsonObj.get("status") == 2) {
String downloadUri = (String) jsonObj.get("url");
URL url = new URL(downloadUri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> stringIdsList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId()))
.stream().map(m -> m.getId())
.collect(Collectors.toList());
IdentifyBookRelevance one = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.in(IdentifyBookRelevance::getRelevanceBusinessId, stringIdsList));
// 获取最后一个文书版本数据
IdentifyBook identifyBook = identifyBookService.getMaxVersionIdentifyBook(one.getId());
String version = "v" + new BigDecimal(identifyBook.getVersion().substring(1)).add(new BigDecimal("0.1")); // 版本号
String fileName = "鉴定文书-" + version;
String fileType = ".docx"; // 文件类型
String identifyBookPathFileName = OSSDirectoryConstants.IDENTIFY_BOOK_DIRECTORY + "/" + one.getRelevanceBusinessId() + "/book/" + fileName; // 鉴定文书存储路径及文件名
// 上传文书
ByteArrayOutputStream bosWord = new ByteArrayOutputStream();
int readPos;
final byte[] bytes_oss = new byte[1024];
while ((readPos = inputStream.read(bytes_oss)) != -1) {
bosWord.write(bytes_oss, 0, readPos);
}
ByteArrayInputStream baisWord = new ByteArrayInputStream(bosWord.toByteArray());
boolean b1 = ossFile.fileSave(identifyBookPathFileName + fileType, baisWord);
if (b1) {
// 保存文书相关消息
this.saveIdentifyBookComm(one.getId(), identifyBookPathFileName + fileType, fileName + fileType, version, "修改文书");
}
inputStream.close();
connection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
/**
* status = 1我们给onlyoffice的服务返回{"error":"0"}的信息这样onlyoffice会认为回调接口是没问题的这样就可以在线编辑文档了否则的话会弹出窗口说明
* 在线编辑还没有关闭前端有人下载文档时强制保存最新内容 当status 是6时说明有人在编辑时下载文档
*/
System.out.println(jsonObj.get("status"));
if ((long) jsonObj.get("status") == 6) {
//处理当文档正在编辑为关闭时,下载文档
if (((String) jsonObj.get("userdata")).equals("sample userdata")) {
// FileUtil.callBackSaveDocument(jsonObj,filePath,request, response);
}
System.out.println("====保存失败:");
writer.write("{\"error\":1}");
} else {
//执行删除编辑时下载保存的文件:
// FileUtil.deleteTempFile(filePath,request.getParameter("fileName"));
writer.write("{\"error\":0}");
}
}
/**
* 保存鉴定文书相关数据
*
* @param identifyBookRelevanceId 关联ID
* @param path 文件路径及文件名
* @param fileName 文件名
* @param version 版本号
* @return boolean
*/
private boolean saveIdentifyBookComm(String identifyBookRelevanceId, String path, String fileName,
String version, String remarks) {
IdentifyBook identifyBook = new IdentifyBook();
identifyBook.setIdentifyBookRelevanceId(identifyBookRelevanceId);
identifyBook.setBucketName(env.getProperty("oss.bucket-name"));
identifyBook.setPath(path);
identifyBook.setFileName(fileName);
identifyBook.setVersion(version);
identifyBook.setRemarks(remarks);
return identifyBookService.save(identifyBook);
}
}

@ -0,0 +1,89 @@
package digital.laboratory.platform.identifybook.controller;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.entity.IdentifyBook;
import digital.laboratory.platform.identifybook.entity.IdentifyBookRelevance;
import digital.laboratory.platform.identifybook.service.IIdentifyBookService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 鉴定文书信息表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定文书详细信息相关接口")
@RequestMapping("/book/identifyBook")
public class IdentifyBookController {
private final OssFile ossFile;
private final IIdentifyBookService identifyBookService;
@ApiOperation(value = "根据根据文书ID查看文书", notes = "根据根据文书ID查看文书")
@ApiImplicitParam(name = "bookId", value = "文书ID" , required = true)
@GetMapping("/view/{id}")
public R findBook(@PathVariable(value = "bookId") String bookId){
try {
IdentifyBook identifyBook = identifyBookService.getById(bookId);
String uuid= IdWorker.get32UUID();
return R.ok( uuid+"#"+identifyBook.getPath(), "获取文件成功");
} catch (Exception e) {
e.printStackTrace();
}
return R.failed("获取鉴定文书失败");
}
@ApiOperation(value = "根据根据文书ID删除文书", notes = "根据根据文书ID删除文书")
@ApiImplicitParam(name = "bookId", value = "文书ID" , required = true)
@DeleteMapping
public R deleteById(@PathVariable(value = "bookId") String bookId){
try {
IdentifyBook identifyBook = identifyBookService.getById(bookId);
ossFile.fileDelete(identifyBook.getFileName());
boolean b = identifyBookService.removeById(bookId);
if(b){
return R.ok(b, "删除成功!!!");
}
return R.failed(b, "删除失败!!!");
} catch (Exception e) {
e.printStackTrace();
}
return R.failed("获取鉴定文书失败");
}
@PostMapping("/uploadBookAttachment")
@ApiOperation(value = "上传文书的附件,主要包含 鉴定事项确认书(1),委托书(2),检材照片(3),送检人证件照(4),原鉴定情况(5)", notes = "上传文书的附件,主要包含 鉴定事项确认书(1),委托书(2),检材照片(3),送检人证件照(4),原鉴定情况(5)")
public R uploadBookAttachment(String attachType,String businessId ,List<MultipartFile> file){
Assert.notBlank(attachType,"附件类型参数不能为空");
Assert.notBlank(businessId,"业务ID参数不能为空");
return R.ok(identifyBookService.uploadIdentifyBookAttachment(attachType,file,businessId));
}
//获取手动上传的文书附件
@GetMapping("/getUploadBookAttachment")
@ApiOperation(value = "获取手动上传的文书附件,主要包含 鉴定事项确认书(1),委托书(2),检材照片(3),送检人证件照(4),原鉴定情况(5)", notes = "上传文书的附件,主要包含 鉴定事项确认书(1),委托书(2),检材照片(3),送检人证件照(4),原鉴定情况(5)")
public R getAttachment(String businessId,String attachType){
return R.ok(identifyBookService.getAttachment(businessId,attachType));
}
}

@ -0,0 +1,123 @@
package digital.laboratory.platform.identifybook.controller;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.entity.IdentifyBook;
import digital.laboratory.platform.identifybook.entity.IdentifyBookRelevance;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import digital.laboratory.platform.identifybook.service.IIdentifyBookRelevanceService;
import digital.laboratory.platform.identifybook.service.IIdentifyBookService;
import digital.laboratory.platform.sys.feign.RemoteUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 鉴定文书关联中间表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定文书-相关接口")
@RequestMapping("/book/identifyBookRelevance")
public class IdentifyBookRelevanceController {
private final OssFile ossFile;
private final IIdentifyBookRelevanceService identifyBookRelevanceService;
private final IIdentifyBookService identifyBookService;
private final IEntrustmentService entrustmentService;
private final RemoteUserService remoteUserService;
@ApiOperation(value = "根据委托ID获取鉴定文书", notes = "根据委托ID获取鉴定文书")
@ApiImplicitParam(name = "entrustId", value = "委托ID" , required = true)
@GetMapping("/getBook/{entrustId}")
public R getBook(@PathVariable(value = "entrustId") String entrustId, HttpServletResponse response){
try {
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> entrustIds = new ArrayList<>();
List<Entrustment> entrustmentList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId())
.eq(Entrustment::getId, entrustment.getId())
);
if(CollectionUtils.isNotEmpty(entrustmentList)){
entrustIds.addAll(entrustmentList.stream().map(m -> m.getId()).collect(Collectors.toList()));
}
IdentifyBookRelevance one = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.in(IdentifyBookRelevance::getRelevanceBusinessId, entrustIds));
if (ObjectUtils.isNotEmpty(one)) {
IdentifyBook identifyBook = identifyBookService.getMaxVersionIdentifyBook(one.getId());
//ossFile.fileGet(identifyBook.getPath(), response.getOutputStream());
String uuid= IdWorker.get32UUID();
return R.ok( uuid+"#"+identifyBook.getPath(), "获取文件成功");
//response.setContentType(new MimetypesFileTypeMap().getContentType(identifyBook.getFileName()));
}
} catch (Exception e) {
e.printStackTrace();
}
return R.failed("获取鉴定文书失败");
}
@ApiOperation(value = "根据委托ID获取鉴定文书制作或修订历史列表", notes = "根据委托ID获取鉴定文书制作或修订历史列表")
@ApiImplicitParam(name = "entrustId", value = "委托ID" , required = true)
@GetMapping("/findBookHistory/{entrustId}")
public R findBookHistory(@PathVariable(value = "entrustId") String entrustId){
try {
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> entrustIds = new ArrayList<>();
List<Entrustment> entrustmentList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId())
.eq(Entrustment::getId,entrustId)
);
if(CollectionUtils.isNotEmpty(entrustmentList)){
entrustIds.addAll(entrustmentList.stream().map(m -> m.getId()).collect(Collectors.toList()));
}
IdentifyBookRelevance one = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.in(IdentifyBookRelevance::getRelevanceBusinessId, entrustIds));
if (ObjectUtils.isNotEmpty(one)) {
// IdentifyBook identifyBook = identifyBookService.getMaxVersionIdentifyBook(one.getId());
List<IdentifyBook> identifyBookList = identifyBookService.list(new LambdaQueryWrapper<IdentifyBook>()
.eq(IdentifyBook::getIdentifyBookRelevanceId, one.getId())
.orderByDesc(IdentifyBook::getCreateTime));
for (IdentifyBook identifyBook: identifyBookList){
if(StringUtils.isNotEmpty(identifyBook.getCreateBy())){
identifyBook.setOperateUserName(remoteUserService.innerGetById(identifyBook.getCreateBy()).getData().getName());
}
}
return R.ok(identifyBookList);
}
return R.ok(null, "该委托还未制作文书!!!");
} catch (Exception e) {
e.printStackTrace();
}
return R.failed("获取鉴定文书失败");
}
}

@ -0,0 +1,238 @@
package digital.laboratory.platform.identifybook.controller;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.identifybook.entity.*;
import digital.laboratory.platform.identifybook.service.*;
import digital.laboratory.platform.sys.vo.CommonDataVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 鉴定数据-控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/18 16:35
*/
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定数据相关接口")
@RequestMapping("/book/identifyDataComm")
public class IdentifyDataCommController {
/** TODO START 委托相关基础信息 **/
private final ICaseEventService caseEventService;
private final ICaseEvidenceService caseEvidenceService;
private final IDelivererService delivererService;
private final IEntrustmentService entrustmentService;
private final IEntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService;
private final IHairJobService hairJobService;
private final IHairJobIdentificationMaterialService hairJobIdentificationMaterialService;
private final IIdentificationService identificationService;
private final ISampleService sampleService;
private final ITakerService takerService;
/** TODO END 委托相关基础信息 **/
private final IEntrustmentBundleService entrustmentBundleService;
private final IExperimentService experimentService;
private final IExaminationMethodsService examinationMethodsService;
private final IResultEntrustmentQualitativeService resultEntrustmentQualitativeService;
private final IResultEntrustmentRationService resultEntrustmentRationService;
private final IBIdentificationProcessService identificationProcessService;
private final IIdentifyBookRelevanceService identifyBookRelevanceService;
@ApiOperation(value = "保存委托相关数据", notes = "保存委托相关数据")
@PostMapping("/commonEntrustRelated")
public R commonEntrustRelated(@RequestBody CommonDataVO commonDataVO){
log.info("委托相关信息{}", commonDataVO);
try {
if(ObjectUtils.isNotEmpty(commonDataVO)){
// 委托信息 检验过程 鉴定状态表
if(CollectionUtils.isNotEmpty(commonDataVO.getEntrustmentList())){
log.info("委托信息:{}", commonDataVO.getEntrustmentList());
List<Entrustment> entrustmentList = BeanUtil.copyToList(commonDataVO.getEntrustmentList(), Entrustment.class);
boolean b = entrustmentService.saveOrUpdateBatch(entrustmentList);
if (b) {
Entrustment entrustment;
if(entrustmentList.size() > 1){
entrustment = entrustmentList
.stream()
.sorted(Comparator.comparing(Entrustment::getCreateTime))
.collect(Collectors.toList()).get(0);
} else {
entrustment = entrustmentList.get(0);
}
List<String> stringIDSList = entrustmentList.stream().map(m -> m.getId()).collect(Collectors.toList());
IdentifyBookRelevance identifyBookRelevance = identifyBookRelevanceService.getOne(new LambdaQueryWrapper<IdentifyBookRelevance>()
.in(IdentifyBookRelevance::getRelevanceBusinessId, stringIDSList));
if(ObjectUtils.isEmpty(identifyBookRelevance)){
String[] arrNo = entrustment.getAcceptNo().split("-");
identifyBookRelevance = new IdentifyBookRelevance();
identifyBookRelevance.setRelevanceBusinessId(entrustment.getId());
identifyBookRelevance.setYear(arrNo[0]);
identifyBookRelevance.setSerialNumber(arrNo[1]);
identifyBookRelevance.setBookStatus(-1);
boolean save = identifyBookRelevanceService.save(identifyBookRelevance);
if(!save){
throw new RuntimeException("保存文书关联消息失败!!!");
}
}
// 检验过程
BIdentificationProcess identificationProcess = new BIdentificationProcess();
identificationProcess.setId(entrustment.getId());
identificationProcess.setInspectionProcess(
StringUtils.isNotEmpty(commonDataVO.getIdentificationProcess()) ? commonDataVO.getIdentificationProcess() : "");
boolean saveOrUpdate = identificationProcessService.saveOrUpdate(identificationProcess);
if(!saveOrUpdate){
throw new RuntimeException("保存文书关联检验过程失败!!!");
}
log.info("保存或更新委托成功!!!");
}
}
// 委托关联案件信息 --
if(ObjectUtils.isNotEmpty(commonDataVO.getCaseEvent())){
log.info("委托关联案件信息:{}", commonDataVO.getCaseEvent());
CaseEvent caseEvent = new CaseEvent();
BeanUtil.copyProperties(commonDataVO.getCaseEvent(), caseEvent);
boolean b = caseEventService.saveOrUpdate(caseEvent);
if (b) {
log.info("保存或更新案件成功!!!");
}
}
// 委托案件关联物证 --
if(CollectionUtils.isNotEmpty(commonDataVO.getCaseEvidence())){
log.info("委托案件关联物证:{}", commonDataVO.getCaseEvidence());
List<CaseEvidence> caseEvidenceList = BeanUtil.copyToList(commonDataVO.getCaseEvidence(), CaseEvidence.class);
boolean b = caseEvidenceService.saveOrUpdateBatch(caseEvidenceList);
if (b) {
log.info("保存或更新委托物证成功!!!");
}
}
// 检材信息
if(CollectionUtils.isNotEmpty(commonDataVO.getEntrustmentIdentificationMaterial())){
log.info("检材信息:{}", commonDataVO.getEntrustmentIdentificationMaterial());
List<EntrustmentIdentificationMaterial> entrustmentIdentificationMaterialList =
BeanUtil.copyToList(commonDataVO.getEntrustmentIdentificationMaterial(), EntrustmentIdentificationMaterial.class);
boolean b = entrustmentIdentificationMaterialService.saveOrUpdateBatch(entrustmentIdentificationMaterialList);
if (b) {
log.info("保存或更新检材消息成功!!!");
}
}
// 鉴定表,一个鉴定可能会有多个委托
if(ObjectUtils.isNotEmpty(commonDataVO.getIdentification())){
log.info("鉴定表,一个鉴定可能会有多个委托:{}", commonDataVO.getIdentification());
Identification identification = new Identification();
BeanUtil.copyProperties(commonDataVO.getIdentification(), identification);
boolean b = identificationService.saveOrUpdate(identification);
if (b) {
log.info("保存或更新鉴定表成功!!!");
}
}
// 检验用的样本
if(CollectionUtils.isNotEmpty(commonDataVO.getSample())){
log.info("检验用的样本:{}", commonDataVO.getSample());
List<Map> copyToList = BeanUtil.copyToList(commonDataVO.getSample(), Map.class);
// List<Sample> sampleList = BeanUtil.copyToList(commonDataVO.getSample(), Sample.class);
List<Sample> sampleList = new ArrayList<>();
for (Map map: copyToList){
log.info("map.get(sampleInfo): {}",map.get("sampleInfo"));
// sampleList.add(BeanUtil.copyProperties(map.get("sampleInfo"), Sample.class));
//传递过来的数据中 sampleInfo可能为空
if(map.get("sampleInfo")!=null){
sampleList.add(JSON.parseObject(JSON.toJSONString(map.get("sampleInfo")), Sample.class));
}else{
log.info("map.get(sampleInfo): {},sampleId={} experimentId={} 这个为空",map.get("sampleInfo"),map.get("sampleId"),map.get("experimentId"));
}
}
log.info("检验用的样本sampleList:{}", sampleList);
boolean b = sampleService.saveOrUpdateBatch(sampleList);
log.info("检验用的样本sampleList-当这里么!!!");
if (b) {
log.info("保存或更新检验用的样本成功!!!");
}
}
// 委托与实验关系
if(ObjectUtils.isNotEmpty(commonDataVO.getEntrustmentBundle())){
log.info("委托与实验关系:{}", commonDataVO.getEntrustmentBundle());
EntrustmentBundle entrustmentBundle = new EntrustmentBundle();
BeanUtil.copyProperties(commonDataVO.getEntrustmentBundle(), entrustmentBundle);
boolean b = entrustmentBundleService.saveOrUpdate(entrustmentBundle);
if (b) {
log.info("保存或更新委托与实验关系成功!!!");
}
}
// 实验列表
if(CollectionUtils.isNotEmpty(commonDataVO.getExperimentList())){
log.info("实验列表:{}", commonDataVO.getExperimentList());
List<Experiment> experimentList = BeanUtil.copyToList(commonDataVO.getExperimentList(), Experiment.class);
boolean b = experimentService.saveOrUpdateBatch(experimentList);
if (b) {
log.info("保存或更新实验列表成功!!!");
}
}
// 检验方法列表
if(CollectionUtils.isNotEmpty(commonDataVO.getMethodList())){
log.info("检验方法列表:{}", commonDataVO.getMethodList());
List<ExaminationMethods> examinationMethodsList = BeanUtil.copyToList(commonDataVO.getMethodList(), ExaminationMethods.class);
boolean b = examinationMethodsService.saveOrUpdateBatch(examinationMethodsList);
if (b) {
log.info("保存或更新检验方法列表成功!!!");
}
}
// 定性检验结果
if(CollectionUtils.isNotEmpty(commonDataVO.getResultEntrustmentQualitative())){
log.info("定性检验结果:{}", commonDataVO.getResultEntrustmentQualitative());
List<ResultEntrustmentQualitative> resultEntrustmentQualitativeList =
BeanUtil.copyToList(commonDataVO.getResultEntrustmentQualitative(), ResultEntrustmentQualitative.class);
boolean b = resultEntrustmentQualitativeService.saveOrUpdateBatch(resultEntrustmentQualitativeList);
if (b) {
log.info("保存或更新定性检验结果!!!");
}
}
// 定量检验结果
if(CollectionUtils.isNotEmpty(commonDataVO.getResultEntrustmentRation())){
log.info("定量检验结果:{}", commonDataVO.getResultEntrustmentRation());
List<ResultEntrustmentRation> resultEntrustmentRationList =
BeanUtil.copyToList(commonDataVO.getResultEntrustmentRation(), ResultEntrustmentRation.class);
boolean b = resultEntrustmentRationService.saveOrUpdateBatch(resultEntrustmentRationList);
if (b) {
log.info("保存或更新定量检验结果!!!");
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.failed("保存或更新委托及鉴定结果异常,请联系管理员!!!");
}
return R.ok();
}
}

@ -0,0 +1,174 @@
package digital.laboratory.platform.identifybook.controller;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.common.oss.service.OssFile;
import digital.laboratory.platform.identifybook.emums.BusinessStatus;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.entity.IdentifyBookApprove;
import digital.laboratory.platform.identifybook.entity.ModifySupplementApply;
import digital.laboratory.platform.identifybook.req.ModifySupplementApplyREQ;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import digital.laboratory.platform.identifybook.service.IModifySupplementApplyService;
import digital.laboratory.platform.identifybook.utils.Word2PdfAsposeUtil;
import digital.laboratory.platform.sys.feign.RemoteUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.web.bind.annotation.*;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.security.Principal;
import java.util.Arrays;
import java.util.Date;
/**
* <p>
* 鉴定文书修改补充申请表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "鉴定文书修改补充申请相关接口")
@RequestMapping("/book/modifySupplementApply")
public class ModifySupplementApplyController {
private final OssFile ossFile;
private final IModifySupplementApplyService modifySupplementApplyService;
private final RemoteUserService remoteUserService;
private final IEntrustmentService entrustmentService;
@ApiOperation(value = "保存/更新鉴定文书修改补充申请信息", notes = "保存/更新鉴定文书修改补充申请信息")
@PostMapping
public R<ModifySupplementApply> addOrUpdate(@RequestBody ModifySupplementApply modifySupplementApply, HttpServletRequest request){
// 获取用户消息
Principal principal = request.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
// 查询当前是否已经申请并且还没有审批完成的记录
ModifySupplementApply existInfo = modifySupplementApplyService
.getOne(Wrappers.<ModifySupplementApply>lambdaQuery()
.eq(ModifySupplementApply::getEntrustmentId, modifySupplementApply.getEntrustmentId())
.eq(ModifySupplementApply::getApplyBy, dlpUser.getId())
.notIn(ModifySupplementApply::getStatus,
Arrays.asList(BusinessStatus.JD_WS_XG_BC_SP_TG.getCode(), BusinessStatus.JD_WS_XG_BC_SP_WTG.getCode())));
if (existInfo != null) {
throw new RuntimeException("当前您有未审批完成的申请,请先处理当前申请!");
}
Entrustment entrustment = entrustmentService.getById(modifySupplementApply.getEntrustmentId());
String[] split = entrustment.getAcceptNo().split("-");
modifySupplementApply.setApplyBy(dlpUser.getId());
modifySupplementApply.setYear(split[0]);
modifySupplementApply.setSerialNumber(split[1]);
modifySupplementApply.setStatus(0);
modifySupplementApply.setApplyTime(new Date());
modifySupplementApply.setUpdateTime(new Date());
if(modifySupplementApplyService.saveOrUpdate(modifySupplementApply)){
return R.ok(modifySupplementApply);
}
return R.failed("保存或更新失败");
}
@ApiOperation(value = "获取当前用户是否有未审批的申请修改记录信息", notes = "获取当前用户是否有未审批的申请修改记录信息")
@GetMapping("/getNotApproveApplyInfo")
public R<ModifySupplementApply> getNotApproveApplyInfoByUser(@RequestParam String entrustId, HttpServletRequest request){
// 获取用户消息
Principal principal = request.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
// 查询当前是否已经申请并且还没有审批完成的记录
ModifySupplementApply existInfo = modifySupplementApplyService
.getOne(Wrappers.<ModifySupplementApply>lambdaQuery()
.eq(ModifySupplementApply::getEntrustmentId, entrustId)
.eq(ModifySupplementApply::getApplyBy, dlpUser.getId())
.notIn(ModifySupplementApply::getStatus,
Arrays.asList(BusinessStatus.JD_WS_XG_BC_SP_TG.getCode(), BusinessStatus.JD_WS_XG_BC_SP_WTG.getCode())));
// 如果查询为空则new一个实例返回
return R.ok(existInfo == null ? new ModifySupplementApply() : existInfo);
}
@ApiOperation(value = "通过鉴定文书修改补充申请ID删除鉴定文书修改补充申请信息", notes = "通过鉴定文书修改补充申请ID删除鉴定文书修改补充申请信息")
@DeleteMapping("/{id}")
public R<String> del(@PathVariable("id") String id){
if(modifySupplementApplyService.removeById(id)){
return R.ok();
}
return R.failed("删除鉴定文书修改补充申请信息失败!!!");
}
@ApiOperation(value = "通过鉴定文书修改补充申请ID查询鉴定文书修改补充申请信息", notes = "通过鉴定文书修改补充申请ID查询职鉴定文书修改补充申请信息")
@GetMapping("/view/{id}")
public R<ModifySupplementApply> view(@PathVariable("id") String id){
ModifySupplementApply modifySupplementApply = modifySupplementApplyService.getById(id);
if(ObjectUtils.isNotEmpty(modifySupplementApply)){
if(StringUtils.isNotEmpty(modifySupplementApply.getEntrustBy()) && StringUtils.isEmpty(modifySupplementApply.getEntrustUserName())){
modifySupplementApply.setEntrustUserName(
remoteUserService.innerGetById(modifySupplementApply.getEntrustBy()).getData().getName());
}
return R.ok(modifySupplementApply);
}
return R.failed("查询鉴定文书修改补充申请信息失败");
}
@ApiOperation(value = "通过条件分页查询鉴定文书修改补充申请信息", notes = "通过条件分页查询鉴定文书修改补充申请信息")
@PostMapping("/search")
public R<IPage<ModifySupplementApply>> getCareerCredentialsPage(@RequestBody ModifySupplementApplyREQ req){
IPage<ModifySupplementApply> modifySupplementApplyIPage = modifySupplementApplyService.page(
req.getPage(), null);
if(CollectionUtils.isNotEmpty(modifySupplementApplyIPage.getRecords())){
for (ModifySupplementApply modifySupplementApply: modifySupplementApplyIPage.getRecords()) {
if(StringUtils.isNotEmpty(modifySupplementApply.getEntrustBy())){
modifySupplementApply.setEntrustUserName(
remoteUserService.innerGetById(modifySupplementApply.getEntrustBy()).getData().getName());
}
}
}
return R.ok(modifySupplementApplyIPage);
}
@ApiOperation(value = "根据鉴定文书修改补充申请ID获取鉴定文书修改补充申请文件", notes = "根据鉴定文书修改补充申请ID获取鉴定文书修改补充申请文件")
@GetMapping("/getIdentifyBookApprove/{id}")
public R getModifySupplementApplyWord(@PathVariable(value = "id") String id, HttpServletResponse response){
try {
ModifySupplementApply modifySupplementApply = modifySupplementApplyService.getById(id);
if (ObjectUtils.isNotEmpty(modifySupplementApply) && StringUtils.isNotEmpty(modifySupplementApply.getPath())){
ByteArrayOutputStream bosWord = new ByteArrayOutputStream();
ossFile.fileGet(modifySupplementApply.getPath(), bosWord);
// ossFile.fileGet(modifySupplementApply.getPath(), response.getOutputStream());
ServletOutputStream servletOutputStream = response.getOutputStream();
byte[] pdfByte = Word2PdfAsposeUtil.docx2pdf(new ByteArrayInputStream(bosWord.toByteArray()));
ByteArrayOutputStream baos = new ByteArrayOutputStream(pdfByte.length);
baos.write(pdfByte, 0, pdfByte.length);
baos.writeTo(servletOutputStream);
response.setContentType(new MimetypesFileTypeMap().getContentType(
modifySupplementApply.getFileName().substring(0, modifySupplementApply.getFileName().length() - 5) + ".pdf"));
// String uuid= IdWorker.get32UUID();
// return R.ok( uuid+"#"+modifySupplementApply.getPath(), "获取文件成功");
}
}catch (Exception e){
System.out.println("获取鉴定文书审批表异常" + e.getMessage());
e.printStackTrace();
}
return R.failed("获取鉴定文书修改补充申请文件失败");
}
}

@ -0,0 +1,171 @@
package digital.laboratory.platform.identifybook.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.identifybook.dto.EntrustmentDTO;
import digital.laboratory.platform.identifybook.dto.ReceiveIdentifyBookDTO;
import digital.laboratory.platform.identifybook.emums.BusinessStatus;
import digital.laboratory.platform.identifybook.entity.CaseEvent;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import digital.laboratory.platform.identifybook.entity.EntrustmentIdentificationMaterial;
import digital.laboratory.platform.identifybook.entity.ReceiveIdentifyBook;
import digital.laboratory.platform.identifybook.req.EntrustmentREQ;
import digital.laboratory.platform.identifybook.service.ICaseEventService;
import digital.laboratory.platform.identifybook.service.IEntrustmentIdentificationMaterialService;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import digital.laboratory.platform.identifybook.service.IReceiveIdentifyBookService;
import digital.laboratory.platform.identifybook.utils.BaseRequest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 领取鉴定文书信息表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-30
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "领取鉴定文书信息-相关接口")
@RequestMapping("/book/receiveIdentifyBook")
public class ReceiveIdentifyBookController {
private final IEntrustmentService entrustmentService;
private final ICaseEventService caseEventService;
private final IEntrustmentIdentificationMaterialService entrustmentIdentificationMaterialService;
private final IReceiveIdentifyBookService receiveIdentifyBookService;
@ApiOperation(value = "根据条件分页查询委托数据列表", notes = "根据条件分页查询委托数据列表")
@PostMapping("/findReceiveIdentifyBookPage")
public R<IPage<ReceiveIdentifyBookDTO>> findEntrustPage(@RequestBody EntrustmentREQ req){
if(req.getBookStatusList().size() == 1){
if(req.getBookStatusList().get(0).equals("4")){
IPage<EntrustmentDTO> entrustPage = entrustmentService.findEntrustPage(req.getPage(), req);
IPage<ReceiveIdentifyBookDTO> bookDTOIPage = new Page<>();
bookDTOIPage.setCurrent(entrustPage.getCurrent());
bookDTOIPage.setPages(entrustPage.getPages());
bookDTOIPage.setSize(entrustPage.getSize());
bookDTOIPage.setTotal(entrustPage.getTotal());
List<ReceiveIdentifyBookDTO> receiveIdentifyBookDTOList = new ArrayList<>();
for (EntrustmentDTO entrustmentDTO: entrustPage.getRecords()){
ReceiveIdentifyBookDTO receiveIdentifyBookDTO = new ReceiveIdentifyBookDTO();
List<String> stringIDSList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustmentDTO.getIdentificationId())
.eq(Entrustment::getId, entrustmentDTO.getId())
)
.stream().map(m -> m.getId())
.collect(Collectors.toList());
receiveIdentifyBookDTO.setEntrustId(entrustmentDTO.getId());
receiveIdentifyBookDTO.setSampleNum(entrustmentDTO.getMaterialNum());
BeanUtil.copyProperties(entrustmentDTO, receiveIdentifyBookDTO);
/* List<ReceiveIdentifyBook> receiveIdentifyBookList = receiveIdentifyBookService.list(new LambdaQueryWrapper<ReceiveIdentifyBook>()
.in(ReceiveIdentifyBook::getRelevanceBusinessId, stringIDSList));
if(CollectionUtils.isNotEmpty(receiveIdentifyBookList)){
BeanUtil.copyProperties(receiveIdentifyBookList.get(0), receiveIdentifyBookDTO);
receiveIdentifyBookDTO.setReceiveId(receiveIdentifyBookList.get(0).getId());
receiveIdentifyBookDTO.setStatus(2);
} else {
receiveIdentifyBookDTO.setStatus(1);
}*/
receiveIdentifyBookDTO.setCaseName(entrustmentDTO.getCaseName());
receiveIdentifyBookDTO.setAcceptNo(entrustmentDTO.getAcceptNo());
receiveIdentifyBookDTO.setAcceptTime(entrustmentDTO.getAcceptTime());
receiveIdentifyBookDTO.setStatus(1);
if (StrUtil.isBlank(receiveIdentifyBookDTO.getReceiveWay())) {
receiveIdentifyBookDTO.setReceiveWay(entrustmentDTO.getReportReceiveMode());//优先使用原来的领取方式
receiveIdentifyBookDTO.setPostAddress(entrustmentDTO.getPostAddress());
}
receiveIdentifyBookDTOList.add(receiveIdentifyBookDTO);
}
bookDTOIPage.setRecords(receiveIdentifyBookDTOList);
return R.ok(bookDTOIPage);
} else {
BaseRequest<ReceiveIdentifyBook> request = new BaseRequest<>();
request.setCurrent(req.getCurrent());
request.setSize(req.getSize());
IPage<ReceiveIdentifyBookDTO> receiveIdentifyBookDTOIPage =
receiveIdentifyBookService.pageReceiveIdentifyBook(request.getPage(), req.getKey());
if(CollectionUtils.isNotEmpty(receiveIdentifyBookDTOIPage.getRecords())){
for (ReceiveIdentifyBookDTO receiveIdentifyBookDTO: receiveIdentifyBookDTOIPage.getRecords()){
Entrustment entrustment = entrustmentService.getById(receiveIdentifyBookDTO.getEntrustId());
List<String> stringIDSList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
//.eq(Entrustment::getIdentificationId, entrustment.getIdentificationId())
.eq(Entrustment::getId, entrustment.getId())
)
.stream().map(m -> m.getId())
.collect(Collectors.toList());
receiveIdentifyBookDTO.setCaseName(entrustment.getCaseName());
receiveIdentifyBookDTO.setSampleNum(entrustment.getMaterialNum());
receiveIdentifyBookDTO.setAcceptTime(entrustment.getAcceptTime());
receiveIdentifyBookDTO.setAcceptNo(entrustment.getAcceptNo());
receiveIdentifyBookDTO.setStatus(2);
if (StrUtil.isBlank(receiveIdentifyBookDTO.getReceiveWay())) {
receiveIdentifyBookDTO.setReceiveWay(entrustment.getReportReceiveMode());//优先使用原来的领取方式
receiveIdentifyBookDTO.setPostAddress(entrustment.getPostAddress());
}
}
}
return R.ok(receiveIdentifyBookDTOIPage);
}
}
return R.ok(null,"未查询到数据");
}
@ApiOperation(value = "根据委托ID查看发放领取详情", notes = "根据委托ID查看发放领取详情")
@ApiImplicitParam(name = "entrustId", value = "委托ID" , required = true)
@GetMapping("/view/{entrustId}")
public R<ReceiveIdentifyBookDTO> view(@PathVariable(value = "entrustId") String entrustId){
Entrustment entrustment = entrustmentService.getById(entrustId);
List<String> stringIDSList = entrustmentService.list(new LambdaQueryWrapper<Entrustment>()
.select(Entrustment::getId)
.eq(Entrustment::getIdentificationId,
entrustment.getIdentificationId()))
.stream().map(m -> m.getId())
.collect(Collectors.toList());
List<ReceiveIdentifyBook> receiveIdentifyBookList = receiveIdentifyBookService.list(
new LambdaQueryWrapper<ReceiveIdentifyBook>()
.in(ReceiveIdentifyBook::getRelevanceBusinessId, stringIDSList));
if(CollectionUtils.isNotEmpty(receiveIdentifyBookList)){
ReceiveIdentifyBookDTO receiveIdentifyBookDTO = new ReceiveIdentifyBookDTO();
BeanUtil.copyProperties(receiveIdentifyBookList.get(0), receiveIdentifyBookDTO);
CaseEvent caseEvent = caseEventService.getById(entrustment.getCaseId());
receiveIdentifyBookDTO.setReceiveId(receiveIdentifyBookList.get(0).getId());
receiveIdentifyBookDTO.setEntrustId(receiveIdentifyBookList.get(0).getRelevanceBusinessId());
receiveIdentifyBookDTO.setDeliverer1Name(entrustment.getDeliverer1Name());
receiveIdentifyBookDTO.setDeliverer2Name(entrustment.getDeliverer2Name());
receiveIdentifyBookDTO.setDeliverTime(entrustment.getDeliverTime());
receiveIdentifyBookDTO.setIdentificationDomain(entrustment.getIdentificationDomain());
receiveIdentifyBookDTO.setCaseNo(caseEvent.getCaseNo());
receiveIdentifyBookDTO.setThirdPartySysNo(caseEvent.getThirdPartySysNo());
receiveIdentifyBookDTO.setCaseName(caseEvent.getCaseName());
receiveIdentifyBookDTO.setSampleNum(entrustment.getMaterialNum());
return R.ok(receiveIdentifyBookDTO);
}
return R.failed("为获取到相关数据!!!!");
}
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 委托定性分析检验结果 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@RestController
@RequestMapping("/book/resultEntrustmentQualitative")
public class ResultEntrustmentQualitativeController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 委托定量检验结果 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@RestController
@RequestMapping("/book/resultEntrustmentRation")
public class ResultEntrustmentRationController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 检验用的样本 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/sample")
public class SampleController {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 采集员 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@RestController
@RequestMapping("/book/taker")
public class TakerController {
}

@ -0,0 +1,53 @@
package digital.laboratory.platform.identifybook.controller;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.identifybook.entity.TaskNotification;
import digital.laboratory.platform.identifybook.req.TaskNotificationREQ;
import digital.laboratory.platform.identifybook.service.ITaskNotificationService;
import digital.laboratory.platform.identifybook.vo.TaskNotificationVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
/**
* <p>
* 任务信息表 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-31
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "审核审批签发-相关接口")
@RequestMapping("/book/taskNotification")
public class TaskNotificationController {
private final ITaskNotificationService taskNotificationService;
@ApiOperation(value = "根据条件分页查询任务/任务记录列表", notes = "根据条件分页查询任务/任务记录列表")
@PostMapping("/findTaskNotification")
public R<IPage<TaskNotificationVO>> findTaskNotification(@RequestBody TaskNotificationREQ req, HttpServletRequest theHttpServletRequest){
// 获取当前登录用户信息
Principal principal = theHttpServletRequest.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
IPage<TaskNotificationVO> page = taskNotificationService.queryTaskNotificationPage(req, dlpUser);
return R.ok(page);
}
}

@ -0,0 +1,108 @@
package digital.laboratory.platform.identifybook.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.identifybook.emums.BusinessStatus;
import digital.laboratory.platform.identifybook.entity.IdentifyBookRelevance;
import digital.laboratory.platform.identifybook.service.IEntrustmentService;
import digital.laboratory.platform.identifybook.service.IIdentifyBookRelevanceService;
import digital.laboratory.platform.identifybook.service.ITaskNotificationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* <p>
* 公共数据统计 前端控制器
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-31
*/
@RestController
@RequiredArgsConstructor
@Api( tags = "公共数据统计-相关接口管理")
@RequestMapping("/book/commDataStatistics")
public class commDataStatisticsController {
private final ITaskNotificationService taskNotificationService;
private final IEntrustmentService entrustmentService;
private final IIdentifyBookRelevanceService identifyBookRelevanceService;
@ApiOperation(value = "综合统计", notes = "综合统计")
@GetMapping("/comprehensiveStatistics")
public R comprehensiveStatistics(HttpServletRequest theHttpServletRequest){
Principal principal = theHttpServletRequest.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
Map<String, Object> mapTotal= new HashMap<>();
// 鉴定文书列表任务统计
long countWSLBSum = entrustmentService.countWSLBSum(Stream.of(-1, -2, 3, -4, 5, 7).collect(Collectors.toList()));
// 审核审批签发任务统计
long countRWSum = taskNotificationService.countRWSum(dlpUser);
// 鉴定文书签发领取任务统计
long countQFLQSum = identifyBookRelevanceService.count(new LambdaQueryWrapper<IdentifyBookRelevance>()
.eq(IdentifyBookRelevance::getBookStatus, BusinessStatus.JD_WS_SP_QF_TG.getCode()));
mapTotal.put("countWSLBSum", countWSLBSum);
mapTotal.put("countRWSum", countRWSum);
mapTotal.put("countQFLQSum", countQFLQSum);
return R.ok(mapTotal, "countWSLBSum:鉴定文书列表统计结果,countRWSum:审核审批任务统计结果,countQFLQSum:签发领取任务结果");
}
@ApiOperation(value = "审核审批任务统计", notes = "审核审批任务统计")
@GetMapping("/reviewAndApprovalTaskStatistics")
public R reviewAndApprovalTaskStatistics(HttpServletRequest theHttpServletRequest){
// 获取当前登录用户信息
Principal principal = theHttpServletRequest.getUserPrincipal();
DLPUser dlpUser = (DLPUser) ((OAuth2Authentication) principal).getUserAuthentication().getPrincipal();
return R.ok(taskNotificationService.countRWSum(dlpUser));
}
@ApiOperation(value = "鉴定文书任务列表/待制作/退回修改任务统计", notes = "鉴定文书任务列表/待制作/退回修改任务统计")
@GetMapping("/identifyBookDZZORTHXGTaskStatistics")
public R identifyBookDZZORTHXGTaskStatistics(){
Map<String, Object> mapTotal= new HashMap<>();
// 鉴定文书任务列表/待制作统计
long countWSLBDZZSum = entrustmentService.countWSLBSum(Stream.of(-1).collect(Collectors.toList()));
// 鉴定文书任务列表/退回修改/补充
long countWSLBTHXGSum = entrustmentService.countWSLBSum(Stream.of(3, 5).collect(Collectors.toList()));
// 鉴定文书任务列表/重新制作
long countWSLBCXZZSum = entrustmentService.countWSLBSum(Stream.of(-2, -4, 7).collect(Collectors.toList()));
mapTotal.put("countWSLBDZZSum", countWSLBDZZSum);
mapTotal.put("countWSLBTHXGSum", countWSLBTHXGSum);
mapTotal.put("countWSLBCXZZSum", countWSLBCXZZSum);
return R.ok(mapTotal, "countWSLBDZZSum:鉴定文书待制作任务统计结果、countWSLBTHXGSum:鉴定文书退回修改任务统计结果、countWSLBCXZZSum:鉴定文书任务列表/重新制作");
}
@ApiOperation(value = "鉴定文书签发待领取任务统计", notes = "鉴定文书签发待领取任务统计")
@GetMapping("/identifyBookQFDLQTaskStatistics")
public R identifyBookQFDLQTaskStatistics(){
return R.ok(identifyBookRelevanceService.count(
new LambdaQueryWrapper<IdentifyBookRelevance>()
.eq(IdentifyBookRelevance::getBookStatus, BusinessStatus.JD_WS_SP_QF_TG.getCode())));
}
}

@ -0,0 +1,130 @@
package digital.laboratory.platform.identifybook.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/24 10:15
*/
@Data
@ApiModel(value = "EntrustCaseDTO对象", description = "封装委托及案件相关属性")
public class EntrustCaseDTO {
@ApiModelProperty(value = "委托Id")
private String id;
@ApiModelProperty(value = "委托编号")
private String entrustmentNo;
@ApiModelProperty(value = "对应的流程实例Id")
private String processInstanceId;
@ApiModelProperty(value = "受理Id, 通过这个可以得到鉴定号")
private String identificationId;
@ApiModelProperty(value = "鉴定委托单位名称")
private String clientOrgName;
@ApiModelProperty(value = "委托鉴定专业")
private String identificationDomain;
@ApiModelProperty(value = "鉴定机构名称")
private String identificationOrgName;
@ApiModelProperty(value = "鉴定要求")
private String entrustRequirement;
@ApiModelProperty(value = "其他鉴定要求")
private String otherIdentificationRequests;
@ApiModelProperty(value = "是否由委托方指定鉴定方法")
private Boolean isClientSpecifiedMethod;
@ApiModelProperty(value = "委托方指定的鉴定方法")
private String clientSpecifiedMethod;
@ApiModelProperty(value = "检验的其他说明(鉴定事项确认书中要求, 审核人填写)")
private String otherIdentificationNotes;
@ApiModelProperty(value = "送检人1姓名")
private String deliverer1Name;
@ApiModelProperty(value = "送检人1职务")
private String deliverer1Position;
@ApiModelProperty(value = "送检人1证件名称")
private String deliverer1Cert;
@ApiModelProperty(value = "送检人1证件编号")
private String deliverer1Id;
@ApiModelProperty(value = "送检人1电话")
private String deliverer1Phone;
@ApiModelProperty(value = "送检人2姓名")
private String deliverer2Name;
@ApiModelProperty(value = "送检人2职务")
private String deliverer2Position;
@ApiModelProperty(value = "送检人2证件名称")
private String deliverer2Cert;
@ApiModelProperty(value = "送检人2证件编号")
private String deliverer2Id;
@ApiModelProperty(value = "送检人2电话")
private String deliverer2Phone;
@ApiModelProperty(value = "鉴定编号")
private String identificationNo;
@ApiModelProperty(value = "受理编号")
private String acceptNo;
@ApiModelProperty(value = "受理人user_id")
private String acceptUser;
@ApiModelProperty(value = "受理时间")
private Date acceptTime;
@ApiModelProperty(value = "受理意见")
private String acceptComments;
@ApiModelProperty(value = "案件编号")
private String caseNo;
@ApiModelProperty(value = "第三方系统(如现勘系统、案事件系统)编号")
private String thirdPartySysNo;
@ApiModelProperty(value = "案件名称任务名称")
private String caseName;
@ApiModelProperty(value = "案发时间")
private Date happenTime;
@ApiModelProperty(value = "案发地详细地点")
private String caseAddress;
@ApiModelProperty(value = "案件所属机构")
private String caseOwnOrgId;
@ApiModelProperty(value = "案情简要")
private String caseBrief;
@ApiModelProperty(value = "业务类型:业务类型 10000 委托检验鉴定 10001-NPS案件 10002-毛发案件 20000 任务检验鉴定 20001-毛发任务 20002-污水任务 30000 筛查检验鉴定 30001-筛查")
private Integer businessType;
@ApiModelProperty(value="原始系统中的委托ID")
private String synEntrustId;
}

@ -0,0 +1,54 @@
package digital.laboratory.platform.identifybook.dto;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/25 15:27
*/
@Data
@ApiModel(value = "EntrustmentDTO对象", description = "封装委托相关属性")
public class EntrustmentDTO extends Entrustment {
@ApiModelProperty(value = "案件编号")
private String caseNo;
@ApiModelProperty(value = "案件名称任务名称")
private String caseName;
@ApiModelProperty(value = "案情简要")
private String caseBrief;
@ApiModelProperty(value = "鉴定文书年份")
private String year;
@ApiModelProperty(value = "鉴定文书序号")
private String serialNumber;
@ApiModelProperty(value = "鉴定文书业务状态(-1:待制作,0:已制作/重新制作,1:鉴定文书-提交审核,2:鉴定文书-审核通过),-2:鉴定文书-审核未通过,3:鉴定文书-审核退回修改,4:鉴定文书-审批签发成功,-4:鉴定文书-审批拒绝签发,5:鉴定文书-审批签发退回修改")
private Integer bookStatus;
@ApiModelProperty(value = "鉴定人")
private String appraisalUserName;
@ApiModelProperty(value = "鉴定开始时间")
private String inspectionStartDate;
@ApiModelProperty(value = "鉴定结束时间")
private String finishDate;
@ApiModelProperty("补送集合")
private List<EntrustmentDTO> children;
}

@ -0,0 +1,99 @@
package digital.laboratory.platform.identifybook.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* <p>
* 领取鉴定文书相关信息
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-30
*/
@Data
@ApiModel(value="ReceiveIdentifyBookDTO对象", description="领取鉴定文书相关信息")
public class ReceiveIdentifyBookDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "委托ID")
private String entrustId;
/**
* 业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组
*/
@ApiModelProperty(value="业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组")
private Integer businessType;
@ApiModelProperty(value = "领取ID")
private String receiveId;
@ApiModelProperty(value = "领取方式")
private String receiveWay;
@ApiModelProperty(value="邮寄地址")
private String postAddress;
@ApiModelProperty(value = "领取人ID")
private String recipientsUserId;
@ApiModelProperty(value = "领取人姓名")
private String recipientsUserName;
@ApiModelProperty(value = "领取时间")
private Date recipientsTime;
@ApiModelProperty(value = "经办人ID")
private String operatorUserId;
@ApiModelProperty(value = "经办人姓名")
private String operatorUserName;
@ApiModelProperty(value="案件编号")
private String caseNo;
@ApiModelProperty(value="受理编号")
private String acceptNo;
@ApiModelProperty(value="第三方系统(如现勘系统、案事件系统)编号")
private String thirdPartySysNo;
@ApiModelProperty(value="案件名称任务名称")
private String caseName;
@ApiModelProperty(value="送检人1姓名")
private String deliverer1Name;
@ApiModelProperty(value="送检人2姓名")
private String deliverer2Name;
@ApiModelProperty(value="送检日期")
private LocalDateTime deliverTime;
@ApiModelProperty(value="受理时间")
@JsonFormat(pattern = "yyyy年MM月dd日", timezone = "GMT+8")
private LocalDateTime acceptTime;
@ApiModelProperty(value="检验项目")
private String identificationDomain;
@ApiModelProperty(value="检材数量")
private Integer sampleNum;
@ApiModelProperty(value="领取/发放状态(1:待发放,2:已发放)")
private Integer status;
@ApiModelProperty(value="原始系统中的委托ID")
private String synEntrustId;
@ApiModelProperty(value = "鉴定文书业务状态(-1:待制作,0:已制作/重新制作,1:鉴定文书-提交审核,2:鉴定文书-审核通过),-2:鉴定文书-审核未通过,3:鉴定文书-审核退回修改,4:鉴定文书-审批签发成功,-4:鉴定文书-审批拒绝签发,5:鉴定文书-审批签发退回修改,6:鉴定文书-已领取")
private Integer bookStatus;
}

@ -0,0 +1,43 @@
package digital.laboratory.platform.identifybook.emums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author ChenJiangBao
* @version 1.0
* @description: 附件类型集合1检验记录含原始记录检验图表2鉴定事项确认书3鉴定委托书或鉴定聘请书4检材照片5送检人证件复印件6原鉴定文书
* @date 2025/4/2 10:12
*/
@Getter
public enum AnnexTypeEnum {
// 附件类型集合(1:检验记录(含原始记录,检验图表)、2:鉴定事项确认书、3:鉴定委托书或鉴定聘请书、4:检材照片、5:送检人证件复印件、6:原鉴定文书)
INSPECTION_RECORD("1", "检验记录(含原始记录,检验图表)"),
IDENTIFICATION_CONFIRMATION("2", "鉴定事项确认书"),
ENTRUST_LETTER("3", "鉴定委托书或鉴定聘请书"),
MATERIAL_PHOTO("4", "检材照片"),
EXAMINER_ID_COPY("5", "送检人证件复印件"),
ORIGINAL_DOCUMENT("6", "原鉴定文书"),
;
private final String code;
private final String desc;
AnnexTypeEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
// 使用 Map 提高查找效率
private static final Map<String, AnnexTypeEnum> CODE_MAP =
Arrays.stream(AnnexTypeEnum.values())
.collect(Collectors.toMap(AnnexTypeEnum::getCode, e -> e));
// 根据 code 获取枚举
public static AnnexTypeEnum fromCode(String code) {
return CODE_MAP.get(code);
}
}

@ -0,0 +1,54 @@
package digital.laboratory.platform.identifybook.emums;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* <p>
* 业务状态枚举
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/12 16:20
*/
@Getter
@AllArgsConstructor
@ApiModel("业务状态")
public enum BusinessStatus {
JD_WS_YZZ("0", "已制作/重新制作鉴定文书"),
/** START 鉴定文书审核/审批/签发 **/
JD_WS_TJ_SH("1","鉴定文书-提交审核"),
JD_WS_SH_TG("2","鉴定文书-审核通过"),
JD_WS_SH_WTG("-2","鉴定文书-审核未通过"),
JD_WS_SH_TH_XG("3","鉴定文书-审核退回修改"),
JD_WS_SP_QF_TG("4","鉴定文书-审批签发成功"),
JD_WS_SP_QF_WTG("-4","鉴定文书-审批签发拒绝"),
JD_WS_SP_QF_TH_XG("5","鉴定文书-审批签发退回修改"),
JD_WS_YLQ("6","鉴定文书-已领取"),
/** END 年度人员培训计划-提交/审核/审批业务状态 **/
/** START 鉴定文书修改/补充申请业务状态 **/
JD_WS_XG_BC_SQ("1","鉴定文书-提交修改补充申请"),
JD_WS_XG_BC_SH_TG("2","鉴定文书-修改补充-审核通过"),
JD_WS_XG_BC_SH_WTG("-2","鉴定文书-修改补充-审核未通过"),
JD_WS_XG_BC_SP_TG("3","鉴定文书-修改补充-审批通过"),
JD_WS_XG_BC_SP_WTG("-3","鉴定文书-修改补充-审批不通过"),
JD_WS_XG_BC_SH_YJ_CX_ZZ("7","收回原件,重新出具鉴定文书"),
/** END 鉴定文书修改/补充申请业务状态 **/
;
private final String code;
private final String desc;
public static BusinessStatus findEnumByCode(String code) {
for (BusinessStatus status : BusinessStatus.values()) {
if (status.code.equals(code)) {
return status;
}
}
throw new IllegalArgumentException("code is not support");
}
}

@ -0,0 +1,38 @@
package digital.laboratory.platform.identifybook.emums;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* <p>
* 定性/定量分析枚举
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/26 10:40
*/
@Getter
@AllArgsConstructor
@ApiModel("业务状态")
public enum IdentifyRequireEnum {
QUALITATIVE_ANALYSIS(1, "对送检检材进行 ”定性“ 检测"),
QUANTITATIVE_ANALYSIS(2, "对送检检材进行 ”定量“ 检测"),
QUANTITATIVE_ANALYSIS_QUANTITATIVE_ANALYSIS(3, "对送检检材进行 ”定性,定量“ 检测"),
RELEVANCE(4, "对送检检材进行 ”关联性“ 检测"),
OTHER(5, "其它")
;
private final Integer code;
private final String desc;
public static IdentifyRequireEnum findEnumByCode(Integer code) {
for (IdentifyRequireEnum requireEnum : IdentifyRequireEnum.values()) {
if (requireEnum.code.equals(code)) {
return requireEnum;
}
}
throw new IllegalArgumentException("code is not support");
}
}

@ -0,0 +1,54 @@
package digital.laboratory.platform.identifybook.emums;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/8/9 16:20
*/
@Getter
@AllArgsConstructor
@ApiModel("权限组枚举")
public enum PermissionGroupEnum {
/**
* 鉴定文书-制作/提交/退回修改实验人员
*/
IdentifyBookProductionRrSubmissionProcess("IdentifyBookProductionRrSubmissionProcess", "鉴定文书-制作/提交/退回修改"),
/**
* 鉴定文书-审核授权签字人
*/
IdentifyBookSH("IdentifyBookSH", "鉴定文书-审核"),
/**
* 鉴定文书-审批主任
*/
IdentifyBookSP("IdentifyBookSP", "鉴定文书-审批(主任)"),
/**
* 鉴定文书-签发实验人员
*/
IdentifyBookQF("IdentifyBookQF", "鉴定文书-签发"),
/**
* 鉴定文书-修改补充申请/提交审核 实验人员
*/
IdentifyBookModificationAndSupplementationSQ("IdentifyBookModificationAndSupplementationSQ", "鉴定文书-修改补充申请/提交审核"),
/**
* 鉴定文书-修改补充审核 授权签字人
*/
IdentifyBookModificationAndSupplementationSH("IdentifyBookModificationAndSupplementationSH", "鉴定文书-修改补充审核 "),
/**
* 鉴定文书-修改补充审批 主任
*/
IdentifyBookModificationAndSupplementationSP("IdentifyBookModificationAndSupplementationSP", "鉴定文书-修改补充审批 ")
;
private final String code;
private final String desc;
}

@ -0,0 +1,39 @@
package digital.laboratory.platform.identifybook.emums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author ChenJiangBao
* @version 1.0
* @description: 报告领取方式: 0=自取, 1=代领, 2=邮寄
* @date 2025/4/2 10:12
*/
@Getter
public enum ReceiveWayEnum {
// 报告领取方式: 0=自取, 1=代领, 2=邮寄
SELF_PICKUP("0", "自取"),
PROXY_PICKUP("1", "代领"),
MAIL("2", "邮寄");
private final String code;
private final String desc;
ReceiveWayEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
// 使用 Map 提高查找效率
private static final Map<String, ReceiveWayEnum> CODE_MAP =
Arrays.stream(ReceiveWayEnum.values())
.collect(Collectors.toMap(ReceiveWayEnum::getCode, e -> e));
// 根据 code 获取枚举
public static ReceiveWayEnum fromCode(String code) {
return CODE_MAP.get(code);
}
}

@ -0,0 +1,24 @@
package digital.laboratory.platform.identifybook.emums;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
@ApiModel("任务类型枚举")
public enum TaskTypeEnum {
JD_WS_SH("1","鉴定文书-审核"),
JD_WS_SH_TH_XG("2","鉴定文书-审核退回修改"),
JD_WS_SP("3","鉴定文书-审批"),
JD_WS_SP_TH_XG("4","鉴定文书-审批退回修改"),
JD_WS_QF_LQ("5","鉴定文书-签发/领取"),
JD_WS_XG_BC_SH("6","鉴定文书修改/补充-审核"),
JD_WS_XG_BC_SP("7","鉴定文书修改/补充-审批")
;
private final String code;
private final String desc;
}

@ -0,0 +1,40 @@
package digital.laboratory.platform.identifybook.emums;
import lombok.Getter;
/**
* 重量/体积单位 枚举
*/
@Getter
public enum UnitEnums {
UNIT_SOLID_G("g", "克"),
UNIT_SOLID_MG("mg", "毫克"),
UNIT_SOLID_KG("kg", "公斤"),
UNIT_LIQUID_L("l", "升"),
UNIT_LIQUID_ML("ml", "毫升"),
;
private final String code;
private final String desc;
UnitEnums(String code, String desc) {
this.code = code;
this.desc = desc;
}
// 根据单位获取单位描述,没有就返回原先的字符
public static String fromUnit(String code) {
for (UnitEnums unitEnums : values()) {
if (unitEnums.getCode().equals(code)) {
return unitEnums.getDesc();
}
}
return code;
}
}

@ -0,0 +1,15 @@
package digital.laboratory.platform.identifybook.entity;
import lombok.Data;
/**
* 回避的鉴定人
* 作为委托的一个属性, 由委托方指定某些鉴定人需要回避
*/
@Data
public class AvoidIdentifier {
String userId; // 用户 Id
String name; // 这是鉴定人的姓名
String reason; // 回避的原因(事由)
}

@ -0,0 +1,36 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-27
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="BIdentificationProcess对象", description="")
public class BIdentificationProcess implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "委托ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "检验过程")
@TableField("inspection_process")
private String inspectionProcess;
}

@ -0,0 +1,58 @@
package digital.laboratory.platform.identifybook.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.util.Date;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 业务流程记录表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_business_process_record")
@ApiModel(value="BusinessProcessRecord对象", description="业务流程记录表")
public class BusinessProcessRecord implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "业务流程记录ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "业务ID")
private String businessId;
@ApiModelProperty(value = "业务名称")
private String businessName;
@ApiModelProperty(value = "业务类型名称")
private String businessTypeName;
@ApiModelProperty(value = "业务状态")
private Integer businessStatus;
@ApiModelProperty(value = "意见")
private String message;
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
@JSONField( format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
@ApiModelProperty(value = "创建人")
@TableField(fill = FieldFill.INSERT)
private String createBy;
}

@ -0,0 +1,113 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 案件事件
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_case_event")
@ApiModel(value="CaseEvent对象", description="案件、事件")
public class CaseEvent extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value="id")
private String id;
/**
* 案件编号
*/
@ApiModelProperty(value="案件编号")
private String caseNo;
/**
* 第三方系统(如现勘系统案事件系统)编号
*/
@ApiModelProperty(value="第三方系统(如现勘系统、案事件系统)编号")
private String thirdPartySysNo;
/**
* 案件名称任务名称
*/
@ApiModelProperty(value="案件名称任务名称")
private String caseName;
/**
* 案件类型
*/
@ApiModelProperty(value="案件类型")
private String caseType;
/**
* 案发时间
*/
@ApiModelProperty(value="案发时间")
private LocalDateTime happenTime;
/**
* 案发地详细地点
*/
@ApiModelProperty(value="案发地详细地点")
private String caseAddress;
/**
* 案发地行政区划编码(到县一级)
*/
@ApiModelProperty(value="案发地行政区划编码(到县一级)")
private String caseArea;
/**
* 案件所属机构
*/
@ApiModelProperty(value="案件所属机构")
private String caseOwnOrgId;
/**
* 案件级别: 0=普通案件, 1=紧急案件, 2=加急案件
*/
@ApiModelProperty(value="案件级别: 0=普通案件, 1=紧急案件, 2=加急案件")
private Integer caseRank;
/**
* 案情简要
*/
@ApiModelProperty(value="案情简要")
private String caseBrief;
/**
* 案件备注
*/
@ApiModelProperty(value="案件备注")
private String comments;
/**
* 数据来源用于区别数据来自自身系统还是外部系统
*/
@ApiModelProperty(value="数据来源")
private Integer dataSources;
}

@ -0,0 +1,211 @@
package digital.laboratory.platform.identifybook.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 与案件相关的物证信息
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_case_evidence")
@ApiModel(value="CaseEvidence对象", description="与案件相关的物证信息")
public class CaseEvidence extends BaseEntity {
/**
* id
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value="id")
private String id;
/**
* 本系统物证编号
*/
@ApiModelProperty(value="本系统物证编号")
private String evidenceNo;
/**
* 案件Id
*/
@ApiModelProperty(value="案件Id")
private String caseId;
/**
* 第三方系统(如现勘系统案事件系统)物证编号
*/
@ApiModelProperty(value="第三方系统(如现勘系统、案事件系统)物证编号")
private String thirdPartySysEvidenceNo;
/**
* 物证名称
*/
@ApiModelProperty(value="物证名称")
private String name;
/**
* 物证类别:1. 非生物性物证;2. 生物特性物证
*/
@ApiModelProperty(value="物证类别:1. 非生物性物证;2. 生物特性物证")
private String type;
/**
* 现场标牌号
*/
@ApiModelProperty(value="现场标牌号")
private String fieldLabelNo;
/**
* 物证来源
*/
@ApiModelProperty(value="物证来源")
private String source;
/**
* 物证颜色
*/
@ApiModelProperty(value="物证颜色")
private String color;
/**
* 物证性状
*/
@ApiModelProperty(value="物证性状")
private String form;
/**
* 物证情况之承载物名称, 例如 棉签 2 , 粉末 少许
*/
@ApiModelProperty(value="物证情况之承载物名称, 例如 棉签 2 棵, 粉末 少许")
private String fundName;
/**
* 物证情况之承载物数量, 例如 5 , 3包,
*/
@ApiModelProperty(value="物证情况之承载物数量, 例如 5 颗, 3包, ")
private Integer fundQuantity;
/**
* 物证情况之承载物单位, 例如 5 , 3包
*/
@ApiModelProperty(value="物证情况之承载物单位, 例如 5 颗, 3包")
private String fundUnit;
/**
* 物证数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value="物证数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal quantity;
/**
* 物证单位, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value="物证单位, 例如 3.8 克 或 4.5毫升")
private String unit;
/**
* 附加属性, :体积3毫升,密码123,型号abc
*/
@ApiModelProperty(value="附加属性, 如:体积3毫升,密码123,型号abc")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<IMAdditionalProperty> additionalProperties;
/**
* 所有者姓名
*/
@ApiModelProperty(value="所有者姓名")
private String personName;
/**
* 所有者证件类型
*/
@ApiModelProperty(value="所有者证件类型")
private String personCert;
/**
* 所有者证件号
*/
@ApiModelProperty(value="所有者证件号")
private String personId;
/**
* 所有者性别,公安系统编码 1 2 0未知
*/
@ApiModelProperty(value="所有者性别,公安系统编码 1:男 2:女 0:未知")
private Integer personGender;
/**
* 所有者国籍
*/
@ApiModelProperty(value="所有者国籍")
private String personNationality;
/**
* 所有者民族编码,公安系统编码
*/
@ApiModelProperty(value="所有者民族编码,公安系统编码")
private Integer personNation;
/**
* 所有者地址
*/
@ApiModelProperty(value="所有者地址")
private String personAddress;
/**
* 所有者年龄
*/
@ApiModelProperty(value="所有者年龄")
private Integer personAge;
/**
* 包装情况:纸袋,纸盒,纸箱,自定义
*/
@ApiModelProperty(value="包装情况:纸袋,纸盒,纸箱,自定义")
private String pack;
/**
* 存储方法:常规,冷藏,特殊
*/
@ApiModelProperty(value="存储方法:常规,冷藏,特殊")
private String storageMethod;
/**
* 描述
*/
@ApiModelProperty(value="描述")
private String description;
/**
* 备注
*/
@ApiModelProperty(value="备注")
private String comments;
/**
* 数据来源用于区别数据来自自身系统还是外部系统
*/
@ApiModelProperty(value="数据来源")
private Integer dataSources;
}

@ -0,0 +1,63 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 送检员
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_deliverer")
@ApiModel(value="Deliverer对象", description="送检员")
public class Deliverer implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "送检员拥有者userId")
private String ownerUserId;
@ApiModelProperty(value = "送检员姓名")
private String name;
@ApiModelProperty(value = "送检员职务")
private String position;
@ApiModelProperty(value = "送检员证件名称")
private String cert;
@ApiModelProperty(value = "送检员证件编号")
private String idnum;
@ApiModelProperty(value = "送检员电话")
private String phone;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
}

@ -0,0 +1,763 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import digital.laboratory.platform.sys.entity.DrugLite;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 委托
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_entrustment")
@ApiModel(value="Entrustment对象", description="委托")
public class Entrustment extends BaseEntity {
/**
* 编号
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value="编号")
private String id;
/**
* 案件Id
*/
@ApiModelProperty(value="案件Id")
private String caseId;
/**
* 案件名称
*/
@ApiModelProperty(value="案件名称")
private String caseName;
/**
* 案情简要
*/
@ApiModelProperty(value="案情简要")
private String caseBrief;
/**
* 委托编号
*/
@ApiModelProperty(value="委托编号")
private String entrustmentNo;
/**
* 委托类型: 0=正常司法鉴定委托, 1=案前委托
*/
@ApiModelProperty(value="委托类型: 0=正常司法鉴定委托, 1=案前委托")
private Integer entrustmentType;
/**
* 业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组
*/
@ApiModelProperty(value="业务类型: 0=毒品鉴定 1=.....用于对应到各个检验小组")
private Integer businessType;
/**
* 对应的流程实例Id
*/
@ApiModelProperty(value="对应的流程实例Id")
private String processInstanceId;
/**
* 受理Id, 通过这个可以得到鉴定号
*/
@ApiModelProperty(value="受理Id, 通过这个可以得到鉴定号")
private String identificationId;
/**
* 委托日期, 鉴定委托书打印日期
*/
@ApiModelProperty(value="委托日期, 鉴定委托书打印日期")
private LocalDateTime entrustmentTime;
/**
* 委托提交者, 后期可能会转给其他人user_id
*/
@ApiModelProperty(value="委托提交者, 后期可能会转给其他人user_id")
private String submitter;
/**
* 提交日期, 提交审核的日期
*/
@ApiModelProperty(value="提交日期, 提交审核的日期")
private LocalDateTime submitTime;
/**
* 鉴定委托单位编码
*/
@ApiModelProperty(value="鉴定委托单位编码")
private String clientOrgId;
/**
* 鉴定委托单位名称
*/
@ApiModelProperty(value="鉴定委托单位名称")
private String clientOrgName;
/**
* 通讯地址
*/
@ApiModelProperty(value="通讯地址")
private String clientAddress;
/**
* 邮政编码
*/
@ApiModelProperty(value="邮政编码")
private String clientPostcode;
/**
* 电话号码
*/
@ApiModelProperty(value="电话号码")
private String clientTel;
/**
* 传真号码
*/
@ApiModelProperty(value="传真号码")
private String clientFax;
/**
* 委托鉴定专业
*/
@ApiModelProperty(value="委托鉴定专业")
private String identificationDomain;
/**
* 鉴定机构名称
*/
@ApiModelProperty(value="鉴定机构名称")
private String identificationOrgName;
/**
* 定性分析
*/
@ApiModelProperty(value="定性分析")
private Boolean qualitativeAnalysis;
/**
* 定量分析
*/
@ApiModelProperty(value="定量分析")
private Boolean quantitativeAnalysis;
/**
* 其他鉴定要求
*/
@ApiModelProperty(value="其他鉴定要求")
private String otherIdentificationRequests;
/**
* 候选毒品列表(drug 对象的 json array)
*/
@ApiModelProperty(value="候选毒品列表(drug 对象的 json array)")
//@TableField(typeHandler = JacksonTypeHandler.class)
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<DrugLite> candidateDrugs;
/**
* 是否由委托方指定鉴定方法
*/
@ApiModelProperty(value="是否由委托方指定鉴定方法")
private Boolean isClientSpecifiedMethod;
/**
* 委托方指定的鉴定方法
*/
@ApiModelProperty(value="委托方指定的鉴定方法")
private String clientSpecifiedMethod;
/**
* 是否有损检验:0=无损,1=有损
*/
@ApiModelProperty(value="是否有损检验:0=无损,1=有损")
private Boolean destructiveAnalysis;
/**
* 检验的其他说明(鉴定事项确认书中要求, 审核人填写)
*/
@ApiModelProperty(value="检验的其他说明(鉴定事项确认书中要求, 审核人填写)")
private String otherIdentificationNotes;
/**
* 是否重新鉴定:0=,1=重新鉴定
*/
@ApiModelProperty(value="是否重新鉴定:0=否,1=重新鉴定")
private Boolean reidentification;
/**
* 原鉴定机构
*/
@ApiModelProperty(value="原鉴定机构")
private String oldIdentificationOrgName;
/**
* 原鉴定文书
*/
@ApiModelProperty(value="原鉴定文书")
private String oldIdentificationDocument;
/**
* 原鉴定结果
*/
@ApiModelProperty(value="原鉴定结果")
private String oldIdentificationResult;
/**
* 重新鉴定理由
*/
@ApiModelProperty(value="重新鉴定理由")
private String reidentificationReason;
/**
* 回避的鉴定人及回避事由, json 格式
*/
@ApiModelProperty(value="回避的鉴定人及回避事由, json 格式")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<AvoidIdentifier> avoidIdentifier;
/**
* 指定鉴定人, 委托中指定鉴定人
*/
@ApiModelProperty(value="指定鉴定人, 委托中指定鉴定人")
private String specifiedIdentifier;
/**
* 其它约定事项,打印在鉴定事项确认书中的"约定->其他"
*/
@ApiModelProperty(value="其它约定事项,打印在鉴定事项确认书中的\"约定->其他\"")
private String otherAgreement;
/**
* 备注
*/
@ApiModelProperty(value="备注")
private String comments;
/**
* 候选审核人, user_id列表, 逗号分隔
*/
@ApiModelProperty(value="候选审核人, user_id列表, 逗号分隔")
private String checkCandidateUser;
/**
* 审核任务认领人
*/
@ApiModelProperty(value="审核任务认领人")
private String checkClaimUser;
/**
* 审核任务认领时间
*/
@ApiModelProperty(value="审核任务认领时间")
private LocalDateTime checkClaimTime;
/**
* 实际审核人, user_id
*/
@ApiModelProperty(value="实际审核人, user_id")
private String checkUser;
/**
* 审核时间
*/
@ApiModelProperty(value="审核时间")
private LocalDateTime checkTime;
/**
* 审核意见: (审批通过 审批不通过及原因)
*/
@ApiModelProperty(value="审核意见: (审批通过 审批不通过及原因)")
private String checkComments;
/**
* 审核次数记录
*/
@ApiModelProperty(value="审核次数记录")
private Integer checkTimes;
/**
* 专业全部物证检验状态: 0=未全部审核 1=已全部审核
*/
@ApiModelProperty(value="专业全部物证检验状态: 0=未全部审核 1=已全部审核")
private Boolean checkAllIdentificationMaterialConfirmed;
/**
* 候选审批人, user_id列表, 逗号分隔
*/
@ApiModelProperty(value="候选审批人, user_id列表, 逗号分隔")
private String approveCandidateUser;
/**
* 审批任务认领人
*/
@ApiModelProperty(value="审批任务认领人")
private String approveClaimUser;
/**
* 审批任务认领时间
*/
@ApiModelProperty(value="审批任务认领时间")
private LocalDateTime approveClaimTime;
/**
* 实际审批人, user_id
*/
@ApiModelProperty(value="实际审批人, user_id")
private String approveUser;
/**
* 审批时间
*/
@ApiModelProperty(value="审批时间")
private LocalDateTime approveTime;
/**
* 审批意见: (审批通过 审批不通过及原因)
*/
@ApiModelProperty(value="审批意见: (审批通过 审批不通过及原因)")
private String approveComments;
/**
* 审批次数:该字段在审核通过时初始化, 值为0或1时代表初审, 2代表复审
*/
@ApiModelProperty(value="审批次数:该字段在审核通过时初始化, 值为0或1时代表初审, 2代表复审")
private Integer approveTimes;
/**
* 送检确认人user_id
*/
@ApiModelProperty(value="送检确认人user_id")
private String deliverConfirmUser;
/**
* 送检确认时间
*/
@ApiModelProperty(value="送检确认时间")
private LocalDateTime deliverConfirmTime;
/**
* 送检确认意见
*/
@ApiModelProperty(value="送检确认意见")
private String deliverConfirmComments;
/**
* 送检日期
*/
@ApiModelProperty(value="送检日期")
private LocalDateTime deliverTime;
/**
* 送检操作提交用户user_id
*/
@ApiModelProperty(value="送检操作提交用户user_id")
private String deliverSubmitter;
// /**
// * 如果送检人1是系统用户, 记录用户id
// */
// @ApiModelProperty(value="如果送检人1是系统用户, 记录用户id")
// private String deliverer1UserId;
/**
* 送检人1姓名
*/
@ApiModelProperty(value="送检人1姓名")
private String deliverer1Name;
/**
* 送检人1职务
*/
@ApiModelProperty(value="送检人1职务")
private String deliverer1Position;
/**
* 送检人1证件名称
*/
@ApiModelProperty(value="送检人1证件名称")
private String deliverer1Cert;
/**
* 送检人1证件编号
*/
@ApiModelProperty(value="送检人1证件编号")
private String deliverer1Id;
/**
* 送检人1电话
*/
@ApiModelProperty(value="送检人1电话")
private String deliverer1Phone;
// /**
// * 如果送检人2是系统用户, 记录用户id
// */
// @ApiModelProperty(value="如果送检人2是系统用户, 记录用户id")
// private String deliverer2UserId;
/**
* 送检人2姓名
*/
@ApiModelProperty(value="送检人2姓名")
private String deliverer2Name;
/**
* 送检人2职务
*/
@ApiModelProperty(value="送检人2职务")
private String deliverer2Position;
/**
* 送检人2证件名称
*/
@ApiModelProperty(value="送检人2证件名称")
private String deliverer2Cert;
/**
* 送检人2证件编号
*/
@ApiModelProperty(value="送检人2证件编号")
private String deliverer2Id;
/**
* 送检人2电话
*/
@ApiModelProperty(value="送检人2电话")
private String deliverer2Phone;
// /**
// * 受理任务认领人
// */
// @ApiModelProperty(value="受理任务认领人")
// private String acceptClaimUser;
//
// /**
// * 受理任务认领时间
// */
// @ApiModelProperty(value="受理任务认领时间")
// private LocalDateTime acceptClaimTime;
/**
* 受理编号
*/
@ApiModelProperty(value="受理编号")
private String acceptNo;
/**
* 受理人user_id
*/
@ApiModelProperty(value="受理人user_id")
private String acceptUser;
/**
* 受理时间
*/
@ApiModelProperty(value="受理时间")
private LocalDateTime acceptTime;
/**
* 受理意见
*/
@ApiModelProperty(value="受理意见")
private String acceptComments;
/**
* 鉴定事项确认书是否已经打印
*/
@ApiModelProperty(value="鉴定事项确认书是否已经打印")
private Boolean identificationItemsConfirmPrinted;
/**
* 送检受理信息, json 格式记录送检受理各环节的文字意见
*/
@ApiModelProperty(value="送检受理信息, 以 json 格式记录送检受理各环节的文字意见")
// @TableField(typeHandler = JacksonTypeHandler.class)
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<UpdateInfo> processInfo;
/**
* 报告领取方式: 0=自取, 1=代领, 2=邮寄
*/
@ApiModelProperty(value="报告领取方式: 0=自取, 1=代领, 2=邮寄")
private String reportReceiveMode;
/**
* 报告领取人1的 user id
*/
@ApiModelProperty(value="报告领取人1的 user id")
private String reportReceiver1UserId;
/**
* 报告领取人1的姓名
*/
@ApiModelProperty(value="报告领取人1的姓名")
private String reportReceiver1Name;
/**
* 报告领取人1的职务
*/
@ApiModelProperty(value="报告领取人1的职务")
private String reportReceiver1Position;
/**
* 报告领取人1的证件类型
*/
@ApiModelProperty(value="报告领取人1的证件类型")
private String reportReceiver1Cert;
/**
* 报告领取人1的证件号
*/
@ApiModelProperty(value="报告领取人1的证件号")
private String reportReceiver1Id;
/**
* 报告领取人1的电话
*/
@ApiModelProperty(value="报告领取人1的电话")
private String reportReceiver1Phone;
/**
* 报告领取人2的 user id
*/
@ApiModelProperty(value="报告领取人2的 user id")
private String reportReceiver2UserId;
/**
* 报告领取人2的姓名
*/
@ApiModelProperty(value="报告领取人2的姓名")
private String reportReceiver2Name;
/**
* 报告领取人2的职务
*/
@ApiModelProperty(value="报告领取人2的职务")
private String reportReceiver2Position;
/**
* 报告领取人2的证件类型
*/
@ApiModelProperty(value="报告领取人2的证件类型")
private String reportReceiver2Cert;
/**
* 报告领取人2的证件号
*/
@ApiModelProperty(value="报告领取人2的证件号")
private String reportReceiver2Id;
/**
* 报告领取人2的电话
*/
@ApiModelProperty(value="报告领取人2的电话")
private String reportReceiver2Phone;
/**
* 报告发放人user_id(通常是受理员)
*/
@ApiModelProperty(value="报告发放人user_id(通常是受理员)")
private String reportSenderUserId;
/**
* 报告发放时间
*/
@ApiModelProperty(value="报告发放时间")
private LocalDateTime reportSentTime;
/**
* 报告领取人1领取报告时的签名
*/
@ApiModelProperty(value="报告领取人1领取报告时的签名")
private String reportReceiver1Signature;
/**
* 报告领取人2领取报告时的签名
*/
@ApiModelProperty(value="报告领取人2领取报告时的签名")
private String reportReceiver2Signature;
/**
* 检材领取方式: 0=自取, 1=实验室自行处理
*/
@ApiModelProperty(value="检材领取方式: 0=自取, 1=实验室自行处理")
private Integer sampleReceiveMode;
/**
* 如果检材领取人1是系统用户, 记录userId
*/
@ApiModelProperty(value="如果检材领取人1是系统用户, 记录userId")
private String sampleReceiver1UserId;
/**
* 检材领取人1姓名
*/
@ApiModelProperty(value="检材领取人1姓名")
private String sampleReceiver1Name;
/**
* 检材领取人1职位
*/
@ApiModelProperty(value="检材领取人1职位")
private String sampleReceiver1Position;
/**
* 检材领取人1证件类型
*/
@ApiModelProperty(value="检材领取人1证件类型")
private String sampleReceiver1Cret;
/**
* 检材领取人1证件号
*/
@ApiModelProperty(value="检材领取人1证件号")
private String sampleReceiver1Id;
/**
* 检材领取人1电话
*/
@ApiModelProperty(value="检材领取人1电话")
private String sampleReceiver1Phone;
/**
* 如果检材领取人2是系统用户, 记录userId
*/
@ApiModelProperty(value="如果检材领取人2是系统用户, 记录userId")
private String sampleReceiver2UserId;
/**
* 检材领取人2姓名
*/
@ApiModelProperty(value="检材领取人2姓名")
private String sampleReceiver2Name;
/**
* 检材领取人2职位
*/
@ApiModelProperty(value="检材领取人2职位")
private String sampleReceiver2Position;
/**
* 检材领取人2证件类型
*/
@ApiModelProperty(value="检材领取人2证件类型")
private String sampleReceiver2Cret;
/**
* 检材领取人2证件号
*/
@ApiModelProperty(value="检材领取人2证件号")
private String sampleReceiver2Id;
/**
* 检材领取人2电话
*/
@ApiModelProperty(value="检材领取人2电话")
private String sampleReceiver2Phone;
/**
* 检材发放人, 鉴定机构工作人员user_id
*/
@ApiModelProperty(value="检材发放人, 鉴定机构工作人员user_id")
private String sampleSenderUserId;
/**
* 检材发放时间
*/
@ApiModelProperty(value="检材发放时间")
private String sampleSentTime;
/**
* 检材领取人1签名
*/
@ApiModelProperty(value="检材领取人1签名")
private String sampleReceiver1PersonSignature;
/**
* 检材领取人2签名
*/
@ApiModelProperty(value="检材领取人2签名")
private String sampleReceiver2PersonSignnature;
/**
* 状态
*/
@ApiModelProperty(value="状态")
private Integer status;
/**
* 上一个状态
*/
@ApiModelProperty(value="上一个状态")
private Integer previousStatus;
/**
* 数据来源用于区别数据来自自身系统还是外部系统
*/
@ApiModelProperty(value="数据来源")
private Integer dataSources;
/**
* 第三方数据系统中的委托编号
*/
@ApiModelProperty(value="禁毒数据平台的委托编号")
private String thirdSysEntrustNo;
/**
* 第三方系统受理编号
*/
@ApiModelProperty(value="第三方系统受理编号")
private String acceptNoThirdSys;
/**
* 鉴定要求
*/
@ApiModelProperty(value="鉴定要求")
private String entrustRequirement;
/**
* 邮寄地址
*/
@ApiModelProperty(value="邮寄地址")
private String postAddress;
@ApiModelProperty(value="原始系统中的委托ID")
private String synEntrustId;
@ApiModelProperty(value="检材数量")
private Integer materialNum;
@ApiModelProperty("是否推送数据到LabsCare的标识," +
"[" +
"EntrustLetter:true 代表推送委托书成功 | " +
"ItemConfirmLetter:true 代表推送鉴定事项确认书成功 | " +
"BiologyQualitativeRecord:true 代表推送生物定性检验记录成功" +
"" +
"]" +
"如果这个字段为空则表示失败,如果两个推送都成功,以英文逗号分隔")
private String pushFlag;
}

@ -0,0 +1,64 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 委托与实验关系
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "b_entrustment_bundle", autoResultMap = true)
@ApiModel(value="BEntrustmentBundle对象", description="委托与实验关系")
public class EntrustmentBundle implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "entrustment_id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value="选中的实验, 实验id的json数组")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<String> selectedExperiment;
@ApiModelProperty(value = "审核审批结果: null=未审, 0=审核审批未通过, 1=审核审批已通过")
private Boolean approvalResult;
@ApiModelProperty(value = "提交给文书系统的日期")
private Date submitDate;
@ApiModelProperty(value = "状态: 0=刚创建, 1=已提交给文书系统, 2=文书审核审批通过, 3=已通知委托系统")
private Integer status;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateBy;
}

@ -0,0 +1,538 @@
package digital.laboratory.platform.identifybook.entity;
import java.math.BigDecimal;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import digital.laboratory.platform.sys.entity.DrugLite;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 检材信息
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_entrustment_identification_material")
@ApiModel(value="EntrustmentIdentificationMaterial对象", description="检材信息")
public class EntrustmentIdentificationMaterial extends BaseEntity {
/**
* 检材id
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value = "检材id")
private String id;
/**
* 检材编号
*/
@ApiModelProperty(value = "检材编号")
private String imNo;
/**
* 物证id
*/
@ApiModelProperty(value = "物证id")
private String evidenceId;
/**
* 案件id
*/
@ApiModelProperty(value = "案件id")
private String caseId;
/**
* 委托id
*/
@ApiModelProperty(value = "委托id")
private String entrustmentId;
/**
* 检材名称
*/
@ApiModelProperty(value = "检材名称")
private String name;
/**
* 检材类别:继承所取物证的类别或从物证类别选择
*/
@ApiModelProperty(value = "检材类别:继承所取物证的类别或从物证类别选择")
private String type;
/**
* 检材类别名称:继承所取物证的类别或从物证类别选择
* 2023/5/31 在咸阳分中心添加
*/
@ApiModelProperty(value = "检材类别名称:继承所取物证的类别或从物证类别选择")
private String typeName;
/**
* 检材颜色:继承所取物证颜色或手动填入
*/
@ApiModelProperty(value = "检材颜色:继承所取物证颜色或手动填入")
private String color;
/**
* 检材性状:继承所取物证性状或从物证性状类别选择
*/
@ApiModelProperty(value = "检材性状:继承所取物证性状或从物证性状类别选择")
private String form;
/**
* 检材性状:继承所取物证性状或从物证性状类别选择
* * 2023/5/31 在咸阳分中心添加
*/
@ApiModelProperty(value = "检材性状名称:继承所取物证性状或从物证性状类别选择")
private String formName;
/**
* 检材情况之承载物名称, 例如 棉签 2 , 粉末 少许
*/
@ApiModelProperty(value = "检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许")
private String fundName;
/**
* 检材情况之承载物数量, 例如 5 , 3包
*/
@ApiModelProperty(value = "检材情况之承载物数量, 例如 5 颗, 3包")
private Integer fundQuantity;
/**
* 检材情况之承载物单位, 例如 5 , 3包
*/
@ApiModelProperty(value = "检材情况之承载物单位, 例如 5 颗, 3包")
private String fundUnit;
/**
* 检材数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "检材数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal quantity;
/**
* 计量单位, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "计量单位, 例如 3.8 克 或 4.5毫升")
private String unit;
/**
* 附加属性, :体积3毫升,密码123,型号abc
*/
@ApiModelProperty(value = "附加属性, 如:体积3毫升,密码123,型号abc")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<IMAdditionalProperty> additionalProperties;
/**
* 提取方法
*/
@ApiModelProperty(value = "提取方法")
private String drawWay;
/**
* 所有者姓名
*/
@ApiModelProperty(value = "所有者姓名")
private String personName;
/**
* 所有者证件类型
*/
@ApiModelProperty(value = "所有者证件类型")
private String personCert;
/**
* 所有者证件号
*/
@ApiModelProperty(value = "所有者证件号")
private String personId;
/**
* 所有者性别,公安系统编码: 1= 2= 0=未知
*/
@ApiModelProperty(value = "所有者性别,公安系统编码: 1=男 2=女 0=未知")
private Integer personGender;
/**
* 所有者国籍
*/
@ApiModelProperty(value = "所有者国籍")
private String personNationality;
/**
* 所有者民族编码,公安系统编码
*/
@ApiModelProperty(value = "所有者民族编码,公安系统编码")
private Integer personNation;
/**
* 所有者地址
*/
@ApiModelProperty(value = "所有者地址")
private String personAddress;
/**
* 所有者年龄
*/
@ApiModelProperty(value = "所有者年龄")
private Integer personAge;
/**
* 采集人1姓名
*/
@ApiModelProperty(value = "采集人1姓名")
private String take1Name;
/**
* 采集人1职务
*/
@ApiModelProperty(value = "采集人1职务")
private String take1Position;
/**
* 采集人1证件名称
*/
@ApiModelProperty(value = "采集人1证件名称")
private String take1Cert;
/**
* 采集人1证件号
*/
@ApiModelProperty(value = "采集人1证件号")
private String take1Id;
/**
* 采集人1联系电话
*/
@ApiModelProperty(value = "采集人1联系电话")
private String take1Phone;
/**
* 采集人2姓名
*/
@ApiModelProperty(value = "采集人2姓名")
private String take2Name;
/**
* 采集人2职务
*/
@ApiModelProperty(value = "采集人2职务")
private String take2Position;
/**
* 采集人2证件名称
*/
@ApiModelProperty(value = "采集人2证件名称")
private String take2Cert;
/**
* 采集人2证件号
*/
@ApiModelProperty(value = "采集人2证件号")
private String take2Id;
/**
* 采集人2联系电话
*/
@ApiModelProperty(value = "采集人2联系电话")
private String take2Phone;
/**
* 采集日期
*/
@ApiModelProperty(value = "采集日期")
private LocalDateTime takeTime;
/**
* 见证人姓名
*/
@ApiModelProperty(value = "见证人姓名")
private String witnessName;
/**
* 见证人证件名称
*/
@ApiModelProperty(value = "见证人证件名称")
private String witnessCert;
/**
* 见证人证件号
*/
@ApiModelProperty(value = "见证人证件号")
private String witnessId;
/**
* 包装情况:纸袋,纸盒,纸箱,自定义
*/
@ApiModelProperty(value = "包装情况:纸袋,纸盒,纸箱,自定义")
private String pack;
/**
* 包装情况名称:纸袋,纸盒,纸箱,自定义
* 2023/5/31 在咸阳分中心添加
*/
@ApiModelProperty(value = "包装情况名称:纸袋,纸盒,纸箱,自定义")
private String packName;
/**
* 存储方法:常规,冷藏,特殊
*/
@ApiModelProperty(value = "存储方法:常规,冷藏,特殊")
private String storageMethod;
/**
* 候选毒品列表(drug 对象的 json array)
*/
@ApiModelProperty(value = "候选毒品列表(drug 对象的 json array)")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<DrugLite> candidateDrugs;
/**
* 检材概要
*/
@ApiModelProperty(value = "检材概要")
private String description;
/**
* 审核时间
*/
@ApiModelProperty(value = "审核时间")
private LocalDateTime checkTime;
/**
* 审核是否通过: 1=审核通过
*/
@ApiModelProperty(value = "审核是否通过: 1=审核通过")
private Integer checkPassed;
/**
* 审批时间
*/
@ApiModelProperty(value = "审批时间")
private LocalDateTime approveTime;
/**
* 审批是否通过: 1=审批通过
*/
@ApiModelProperty(value = "审批是否通过: 1=审批通过")
private Integer approvePassed;
/**
* 受理时间
*/
@ApiModelProperty(value = "受理时间")
private LocalDateTime acceptTime;
/**
* 是否受理: 0=未受理, 1=已受理, -1=不予受理
*/
@ApiModelProperty(value = "是否受理: 0=未受理, 1=已受理, -1=不予受理")
private Integer acceptPassed;
/**
* 提供的样本1是否存在, 应该总是存在
*/
// @ApiModelProperty(value="提供的样本1是否存在, 应该总是存在")
// private Boolean providedSample1Present;
/**
* 提供的样本1编号
*/
@ApiModelProperty(value = "提供的样本1编号")
private String providedSample1No;
/**
* 提供的样本1承载物数量(重量), 例如 5颗, 3包
*/
@ApiModelProperty(value = "提供的样本1承载物数量(重量), 例如 5颗, 3包")
private Integer providedSample1FundQuantity;
/**
* 提供的样本1数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "提供的样本1数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal providedSample1Quantity;
/**
* 提供的样本2是否存在
*/
@ApiModelProperty(value = "提供的样本2是否存在")
private Boolean providedSample2Present;
/**
* 提供的样本2编号
*/
@ApiModelProperty(value = "提供的样本2编号")
private String providedSample2No;
/**
* 提供的样本2承载物数量(重量), 例如 5颗, 3包
*/
@ApiModelProperty(value = "提供的样本2承载物数量(重量), 例如 5颗, 3包")
private Integer providedSample2FundQuantity;
/**
* 提供的样本2数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "提供的样本2数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal providedSample2Quantity;
/**
* 是否已分样: 0=未分样, 1=已分样
*/
@ApiModelProperty(value = "是否已分样: 0=未分样, 1=已分样")
private Boolean splitedSample;
/**
* 样本1是否存在, 应该总是存在
*/
// @ApiModelProperty(value="样本1是否存在, 应该总是存在")
// private Boolean sample1Present;
/**
* 样本1编号
*/
@ApiModelProperty(value = "样本1编号")
private String sample1No;
/**
* 样本1承载物数量(重量), 例如 5颗, 3包
*/
@ApiModelProperty(value = "样本1承载物数量(重量), 例如 5颗, 3包")
private Integer sample1FundQuantity;
/**
* 样本1数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "样本1数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal sample1Quantity;
/**
* 样本1盒子 id
*/
@ApiModelProperty(value = "样本1盒子 id")
private String sample1BoxId;
/**
* 样本2是否存在
*/
@ApiModelProperty(value = "样本2是否存在")
private Boolean sample2Present;
/**
* 样本2编号
*/
@ApiModelProperty(value = "样本2编号")
private String sample2No;
/**
* 样本2承载物数量(重量), 例如 5颗, 3包
*/
@ApiModelProperty(value = "样本2承载物数量(重量), 例如 5颗, 3包")
private Integer sample2FundQuantity;
/**
* 样本2数量, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value = "样本2数量, 例如 3.8 克 或 4.5毫升")
private BigDecimal sample2Quantity;
/**
* 样本2盒子 id
*/
@ApiModelProperty(value = "样本2盒子 id")
private String sample2BoxId;
//add by xy 2023-04-15,记录复秤的结果而增加的字段信息
/**
* 样本1复秤后的重量
*/
@ApiModelProperty(value = "样本1的复秤重量")
private BigDecimal sample1RepeatWeigh;
/**
* 样本2复秤后的重量
*/
@ApiModelProperty(value = "样本2的复秤重量")
private BigDecimal sample2RepeatWeigh;
/**
* 分析项目 定性分析定量分析定性定量分析关联性判断 其他
* 1.定性分析 2.定量分析 3.定性定量分析 4.关联性判断 5其他
*/
private Integer analysisOption;
/**
* 数据来源用于区别数据来自自身系统还是外部系统
*/
@ApiModelProperty(value = "数据来源")
private Integer dataSources;
/**
* 检材受理编号一般是绑定检材所属的委托的受理编号
*/
@ApiModelProperty(value = "检材受理编号")
private String acceptNo;
/**
* 打印委托书的时候需要对检材的序号但是这个时候检材又没有受理所以添加一个顺序号
*/
@ApiModelProperty(value = "委托检材顺序号,由系统根据录入顺序生成")
private Integer orderNo;
public String getOrderNo1() {
return this.orderNo + "号检材";
}
public String getSampleCondition() {
if (this.getSample2FundQuantity() != null && this.getSample2FundQuantity() > 0) {
return this.getSample2FundQuantity() + this.getFundUnit();
} else {
return "";
}
}
/**
* 获取检材的描述性编号简短称呼,如果还没有受理之前是没有受理编号的所以未受理之前使用不了这个函数
*
* @return
*/
public String getShortNameDes() {
String acceptNo = this.getAcceptNo();
if (StringUtils.isNotBlank(acceptNo)) {
int seqNo = Integer.parseInt(acceptNo.substring(acceptNo.lastIndexOf("-") + 1));
return seqNo + "号";
} else {
return "0号";
}
}
/**
* 取检材的序号
*
* @return
*/
public int getIndex() {
String acceptNo = this.getAcceptNo();
if (StringUtils.isNotBlank(acceptNo)) {
int seqNo = Integer.parseInt(acceptNo.substring(acceptNo.lastIndexOf("-") + 1));
return seqNo;
} else {
return 0;
}
}
}

@ -0,0 +1,127 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 检验方法
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("examination_methods")
@ApiModel(value="ExaminationMethods对象", description="检验方法")
public class ExaminationMethods implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "方法实体类id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "方法名")
private String methodName;
@ApiModelProperty(value = "方法依据")
private Integer methodBasis;
@ApiModelProperty(value = "方法英文名")
@TableField("method_English_name")
private String methodEnglishName;
@ApiModelProperty(value = "标准号")
private String standardNumber;
@ApiModelProperty(value = "发布单位")
private String publishingUnit;
@ApiModelProperty(value = "发布时间")
private Date publishingTime;
@ApiModelProperty(value = "其他依据")
private String others;
@ApiModelProperty(value = "实施时间")
private Date implementTime;
@ApiModelProperty(value = "适用范围")
private String suitRange;
@ApiModelProperty(value = "规范性引用文件")
private String normativeReferences;
@ApiModelProperty(value = "术语和定义")
private String termAndDefinition;
@ApiModelProperty(value = "原理")
private String principle;
@ApiModelProperty(value = "方法当前状态")
private Integer methodStatus;
@ApiModelProperty(value = "方法类型(标准/非标准)")
private Integer methodType;
@ApiModelProperty(value = "试剂")
private String reagent;
@ApiModelProperty(value = "仪器和设备")
private String instrumentsAndEquipment;
@ApiModelProperty(value = "定量结果评价")
private String quantitativeResultEvaluation;
@ApiModelProperty(value = "操作方法")
private String operationMethod;
@ApiModelProperty(value = "指导书id")
private String guidelinesId;
@ApiModelProperty(value = "结果表述")
private String expressionOfResults;
@ApiModelProperty(value = "评审时间")
private Date reviewTime;
@ApiModelProperty(value = "评审人")
private String reviewer;
@ApiModelProperty(value = "评审结果")
private Integer reviewResults;
@ApiModelProperty(value = "评审意见")
private String reviewOpinion;
@ApiModelProperty(value = "创建时间--录入时间")
private Date createTime;
@ApiModelProperty(value = "创建人--录入人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "附件url")
private String annexUrl;
@ApiModelProperty(value = "附件名称")
private String annexName;
}

@ -0,0 +1,70 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 实验(检验方法的实例)
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_experiment")
@ApiModel(value="BExperiment对象", description="实验(检验方法的实例)")
public class Experiment implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "检验方法id")
private String methodId;
@ApiModelProperty(value = "模板id")
private String templateId;
@ApiModelProperty(value = "业务类型,字典中的dlp.identification.business项")
private Integer business;
@ApiModelProperty(value = "实验名称")
private String name;
@ApiModelProperty(value = "检验人员id")
private String opUserId;
@ApiModelProperty(value = "状态: 0=准备中; 1=实验中; 2=实验结束; -1=实验中止")
private Integer status;
@ApiModelProperty(value = "实验完成日期")
private Date finishDate;
@ApiModelProperty(value = "备注说明")
private String comments;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人")
private String updateBy;
}

@ -0,0 +1,81 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 毛发检测任务
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_hair_job")
@ApiModel(value="HairJob对象", description="毛发检测任务")
public class HairJob implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "根任务id")
private String rootId;
@ApiModelProperty(value = "任务名称")
private String name;
@ApiModelProperty(value = "任务内容描述说明")
private String description;
@ApiModelProperty(value = "任务编号")
private String jobNo;
@ApiModelProperty(value = "任务发布单位")
private String jobIssueOrg;
@ApiModelProperty(value = "任务执行单位")
private String jobExecOrg;
@ApiModelProperty(value = "任务来源")
private String jobFrom;
@ApiModelProperty(value = "任务截止日期")
private Date expirationDate;
@ApiModelProperty(value = "任务开始日期")
private Date startDate;
@ApiModelProperty(value = "任务备注")
private String comments;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "任务类型: 毛发检测/污水检测...")
private String jobType;
@ApiModelProperty(value = "xxx任务检测类型: 毛发检测:社区戒毒人员检测、公职人员、招考人员。/污水检测:污水处理厂、自然水体、其它水体。...")
private String xxxjobIdentifyType;
}

@ -0,0 +1,125 @@
package digital.laboratory.platform.identifybook.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 毛发任务的检材信息
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_hair_job_identification_material")
@ApiModel(value="HairJobIdentificationMaterial对象", description="毛发任务的检材信息")
public class HairJobIdentificationMaterial implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "检材id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "任务id")
private String jobId;
@ApiModelProperty(value = "根任务id")
private String jobRootId;
@ApiModelProperty(value = "检材编号")
private String imNo;
@ApiModelProperty(value = "A样编号")
private String sample1No;
@ApiModelProperty(value = "B样编号")
private String sample2No;
@ApiModelProperty(value = "A样盒子")
private String sample1BoxId;
@ApiModelProperty(value = "B样盒子")
private String sample2BoxId;
@ApiModelProperty(value = "所有者姓名")
private String personName;
@ApiModelProperty(value = "所有者身份证号")
private String personCard;
@ApiModelProperty(value = "人员类别")
private String personType;
@ApiModelProperty(value = "项目名称")
private String projectName;
@ApiModelProperty(value = "社区戒毒人员在社区执行时间是否超过 6 个月")
private String executionTime;
@ApiModelProperty(value = "曾经吸毒种类")
private String drugType;
@ApiModelProperty(value = "采样人")
private String collector;
@ApiModelProperty(value = "采样单位")
private String collectorGroup;
@ApiModelProperty(value = "采样时间")
private Date collectTime;
@ApiModelProperty(value = "采样地点")
private String collectPlace;
@ApiModelProperty(value = "监督人员")
private String supervisor;
@ApiModelProperty(value = "受理时间")
private Date acceptTime;
@ApiModelProperty(value = "受理是否通过: 0=未受理, 1=受理通过, -1=受理被拒绝")
private Integer acceptPassed;
@ApiModelProperty(value = "备注")
private String comments;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@ApiModelProperty(value = "检材名称")
private String name;
@ApiModelProperty(value = "检材数量")
private BigDecimal quantity;
@ApiModelProperty(value = "A样数量")
private BigDecimal sample1Quantity;
@ApiModelProperty(value = "B样数量")
private BigDecimal sample2Quantity;
@ApiModelProperty(value = "计量单位")
private String unit;
}

@ -0,0 +1,22 @@
package digital.laboratory.platform.identifybook.entity;
import lombok.Data;
/**
* 检材的附加属性
*/
@Data
public class IMAdditionalProperty {
String propertyName; // 中文名称: 体积、重量、性状、颜色、品牌、型号、密码等等
String quantity; // 重量、体积等等的量值, 或型号、密码的值
String unit; // 仅对有计量单位的属性, 如: 克、毫克、升等等, 品牌、型号、密码等属性没有单位
public IMAdditionalProperty() {
}
public IMAdditionalProperty(String propertyName, String quantity, String unit) {
this.propertyName = propertyName;
this.quantity = quantity;
this.unit = unit;
}
}

@ -0,0 +1,46 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* 样本的状态
* 这个字段主要设想为页面显示时可以看见样本的动向
*/
@Getter
@RequiredArgsConstructor
public enum IMTSampleStatus {
OUTBOUND(1,"未入库"),//出库
INBOUND(2,"已入库"),
TRANSFER(4,"流转中"),//流转中
UNDER_INSPECTION(6,"检验中"),
TO_BE_DESTROYED(7,"审核通过待销毁"),
DESTROYED(8,"已销毁"),
COLLECTING(9,"领用出库中"),
RETURN_OUT(10,"已经退还出库"),
RELEASE(11,"已发布销毁公示,待出库销毁"),
APPLY(12,"申请中"),
IDENTIFYING(13,"检验中"),
IDENTIFIED(14,"检验结束");
@EnumValue//标记数据库存的值是status
private final int status;
@JsonValue//标记返回前端字段
private final String description;
}

@ -0,0 +1,40 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.io.Serializable;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 鉴定表,一个鉴定可能会有多个委托
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_identification")
@ApiModel(value="Identification对象", description="鉴定表,一个鉴定可能会有多个委托")
public class Identification extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
@ApiModelProperty(value = "鉴定号,受理号")
private String identificationNo;
@ApiModelProperty(value = "状态: 0=鉴定中,-1=已终止, 1=已结束")
private Integer status;
}

@ -0,0 +1,60 @@
package digital.laboratory.platform.identifybook.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.util.Date;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonFormat;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 鉴定文书消息表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_identify_book")
@ApiModel(value="IdentifyBook对象", description="鉴定文书消息表")
public class IdentifyBook extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "鉴定文书消息ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "父ID")
private String identifyBookRelevanceId;
@ApiModelProperty(value = "文件桶")
private String bucketName;
@ApiModelProperty(value = "鉴定文书路径")
private String path;
@ApiModelProperty(value = "鉴定文书文件名(文件名命名贵州:鉴定文书 + 业务数据编号 + 版本号) ")
private String fileName;
@ApiModelProperty(value = "鉴定文书版本号(示例:v1.0、v1.1)")
private String version;
@ApiModelProperty(value = "备注")
private String remarks;
@ApiModelProperty(value = "制作或修改人")
@TableField(exist = false)
private String operateUserName;
}

@ -0,0 +1,95 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import java.io.Serializable;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 鉴定文书审批表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_identify_book_approve")
@ApiModel(value="IdentifyBookApprove对象", description="鉴定文书审批表 ")
public class IdentifyBookApprove extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "鉴定文书审核审批表ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "业务ID")
private String relevanceBusinessId;
@ApiModelProperty(value = "年")
private String year;
@ApiModelProperty(value = "序号")
private String serialNumber;
@ApiModelProperty(value = "附件类型集合(1:检验记录(含原始记录,检验图表)、2:鉴定事项确认书、3:鉴定委托书或鉴定聘请书、4:检材照片、5:送检人证件复印件、6:原鉴定文书)注:选择多个示例(1,2,...)其中”,“是英文")
private String annexType;
@ApiModelProperty(value = "文书类型:(1:检验报告,2:其它)注:选择多个示例(1,2,...)其中”,“是英文")
private String bookType;
@ApiModelProperty(value = "检验报告数量(单位: 份)")
private Integer inspectionReportNumber;
@ApiModelProperty(value = "其它数量(单位:份)")
private Integer otherNumber;
@ApiModelProperty(value = "是否合格(1:检验方法、2:检验过程、3:检验图谱、4:检验结果)注:选择多个示例(1,2,...)其中”,“是英文")
private String isQualified;
@ApiModelProperty(value = "审核人ID")
private String processUserBy;
@ApiModelProperty(value = "审核人")
private String processUserName;
@ApiModelProperty(value = "审核时间")
private Date processTime;
@ApiModelProperty(value = "审核意见")
private String processMessage;
@ApiModelProperty(value = "审批人ID")
private String approveUserBy;
@ApiModelProperty(value = "审批人")
private String approveUserName;
@ApiModelProperty(value = "审批时间")
private Date approveTime;
@ApiModelProperty(value = "审批意见")
private String approveMessage;
@ApiModelProperty(value = "鉴定文书审批记录文件路径")
private String path;
@ApiModelProperty(value = "鉴定文书文件名(文件名命名规则:鉴定文书 + 版本号 + 文件类型) ")
private String fileName;
@ApiModelProperty(value = "版本号")
private String version;
@ApiModelProperty(value = "备注")
private String remarks;
}

@ -0,0 +1,44 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 鉴定文书关联中间表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_identify_book_relevance")
@ApiModel(value="IdentifyBookRelevance对象", description="鉴定文书关联中间表")
public class IdentifyBookRelevance implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "关联业务ID")
private String relevanceBusinessId;
@ApiModelProperty(value = "年")
private String year;
@ApiModelProperty(value = "流水号")
private String serialNumber;
@ApiModelProperty(value = "鉴定文书业务状态(-1:待制作,0:已制作/重新制作,1:鉴定文书-提交审核,2:鉴定文书-审核通过),-2:鉴定文书-审核未通过,3:鉴定文书-审核退回修改,4:鉴定文书-审批签发成功,-4:鉴定文书-审批拒绝签发,5:鉴定文书-审批签发退回修改,6:鉴定文书-已领取")
private Integer bookStatus;
}

@ -0,0 +1,113 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.sql.Blob;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 鉴定文书修改补充申请表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_modify_supplement_apply")
@ApiModel(value="ModifySupplementApply对象", description="鉴定文书修改补充申请表")
public class ModifySupplementApply implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "鉴定文书修改补充申请ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "年")
private String year;
@ApiModelProperty(value = "流水号")
private String serialNumber;
@ApiModelProperty(value = "委托ID", required = true)
private String entrustmentId;
@ApiModelProperty(value = "委托人ID")
private String entrustBy;
@ApiModelProperty(value = "申请时间")
private Date applyTime;
@ApiModelProperty(value = "申请人id")
private String applyBy;
@ApiModelProperty(value = "修改人")
private String updateBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改原因")
private String updateReason;
@ApiModelProperty(value = "修改内容")
private String updateContent;
@ApiModelProperty(value = "委托人签名")
private Blob entrustBySign;
@ApiModelProperty(value = "委托人签名日期")
private Date entrustBySignDate;
@ApiModelProperty(value = "修改方式(1:修改存档文件、2:收回原件,重新出具鉴定文书)")
private Integer updateWay;
@ApiModelProperty(value = "修改人签字")
private Blob updateBySign;
@ApiModelProperty(value = "修改人签字日期")
private Date updateBySignDate;
@ApiModelProperty(value = "业务状态(1:鉴定文书-提交修改补充申请,2:鉴定文书-修改补充-审核通过,-2:鉴定文书-修改补充-审核未通过,3:鉴定文书-修改补充-审批通过,-3:鉴定文书-修改补充-审批不通过)")
private Integer status;
@ApiModelProperty(value = "授权人签字")
private Blob empowerBySign;
@ApiModelProperty(value = "授权人签字日期")
private Date empowerBySignDate;
@ApiModelProperty(value = "授权签字人意见")
private String empowerBySignOpinion;
@ApiModelProperty(value = "技术人员签字")
private Blob technologyBySign;
@ApiModelProperty(value = "技术人员签字日期")
private Date technologyBySignDate;
@ApiModelProperty(value = "技术人员签字意见")
private String technologyBySignOpinion;
@ApiModelProperty(value = "鉴定文书修改/申请文件路径")
private String path;
@ApiModelProperty(value = "鉴定文书修改/申请文件名(文件名命名规则:鉴定文书 + 文件类型) ")
private String fileName;
@ApiModelProperty(value = "备注")
private String remarks;
@ApiModelProperty(value = "委托人姓名")
private String entrustUserName;
}

@ -0,0 +1,58 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 领取鉴定文书信息表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-30
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_receive_identify_book")
@ApiModel(value="ReceiveIdentifyBook对象", description="领取鉴定文书信息表")
public class ReceiveIdentifyBook implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "领取ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "关联业务ID")
private String relevanceBusinessId;
@ApiModelProperty(value = "领取方式")
private String receiveWay;
@ApiModelProperty(value="邮寄地址")
private String postAddress;
@ApiModelProperty(value = "领取人ID")
private String recipientsUserId;
@ApiModelProperty(value = "领取人姓名")
private String recipientsUserName;
@ApiModelProperty(value = "领取人时间")
private Date recipientsTime;
@ApiModelProperty(value = "经办人ID")
private String operatorUserId;
@ApiModelProperty(value = "经办人姓名")
private String operatorUserName;
}

@ -0,0 +1,66 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 委托定性分析检验结果
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_result_entrustment_qualitative")
@ApiModel(value="BResultEntrustmentQualitative对象", description="委托定性分析检验结果")
public class ResultEntrustmentQualitative implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "实验id")
private String experimentId;
private String sampleId;
@ApiModelProperty(value = "样本编号,字符串,必填,长度 200")
private String sampleNo;
@ApiModelProperty(value = "检材序号, 通常是受理的序号")
private Integer materialIndex;
@ApiModelProperty(value = "样本的简要名称")
private String shortName;
@ApiModelProperty(value = "化合物,必填,长度 200")
private String compound;
@ApiModelProperty(value = "negative:未检出,positive:检出")
private Boolean result;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
}

@ -0,0 +1,66 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 委托定量检验结果
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_result_entrustment_ration")
@ApiModel(value="BResultEntrustmentRation对象", description="委托定量检验结果")
public class ResultEntrustmentRation implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "实验id")
private String experimentId;
private String sampleId;
@ApiModelProperty(value = "样本编号,字符串,必填,长度 200")
private String sampleNo;
@ApiModelProperty(value = "检材序号, 通常是受理的序号")
private Integer materialIndex;
@ApiModelProperty(value = "化合物,必填,长度 200")
private String compound;
@ApiModelProperty(value = "定量结果,必填,长度12, 精度8")
private Double result;
@ApiModelProperty(value = "备注说明")
private String comments;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
}

@ -0,0 +1,196 @@
package digital.laboratory.platform.identifybook.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import digital.laboratory.platform.sys.entity.DrugLite;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 检验用的样本
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "b_sample", autoResultMap = true)
@ApiModel(value="Sample对象", description="检验用的样本")
public class Sample extends BaseEntity {
/**
* 样本id
*/
@TableId(value = "id", type = IdType.ASSIGN_UUID)
@ApiModelProperty(value = "样本id")
private String id;
/**
* 检材id, 对应委托的检材id或毛发任务的检材id或污水任务的检材id
*/
@ApiModelProperty(value = "检材id, 对应委托的检材id或毛发任务的检材id或污水任务的检材id")
private String identificationMaterialId;
/**
* 样本编号
*/
@ApiModelProperty(value = "样本编号")
private String sampleNo;
/**
* 样本来源: entrustment/hairJob/sewageJob/....
*/
@ApiModelProperty(value = "样本来源: entrustment/hairJob/sewageJob/....")
private String source;
/**
* 委托id
*/
@ApiModelProperty(value="委托id")
private String entrustmentId;
/**
* 污水任务id
*/
@ApiModelProperty(value="污水任务id")
private String sewageJobId;
/**
* 毛发任务id
*/
@ApiModelProperty(value="毛发任务id")
private String hairJobId;
/**
* 定性分析
*/
@ApiModelProperty(value="定性分析")
private Boolean qualitativeAnalysis;
/**
* 定量分析
*/
@ApiModelProperty(value="定量分析")
private Boolean quantitativeAnalysis;
/**
* 候选毒品列表(drug 对象的 json array)
*/
@ApiModelProperty(value="候选毒品列表(drug 对象的 json array)")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<DrugLite> candidateDrugs;
/**
* 检材情况之承载物名称, 例如 棉签 2 , 粉末 少许
*/
@ApiModelProperty(value="检材情况之承载物名称, 例如 棉签 2 棵, 粉末 少许")
private String fundName;
/**
* 检材情况之承载物数量, 3 1包
*/
@ApiModelProperty(value="检材情况之承载物数量, 如 3 颗 或 1包")
private Integer fundQuantity;
/**
* 检材情况之承载物单位, 例如 5 , 3包
*/
@ApiModelProperty(value="检材情况之承载物单位, 例如 5 颗, 3包")
private String fundUnit;
/**
* 样品数量, 例如 2.3 3.1 毫升
*/
@ApiModelProperty(value="样品数量, 例如 2.3 克 或 3.1 毫升")
private BigDecimal quantity;
/**
* 计量单位, 例如 3.8 4.5毫升
*/
@ApiModelProperty(value="计量单位, 例如 3.8 克 或 4.5毫升")
private String unit;
/**
* 附加属性, :体积3毫升,密码123,型号abc
*/
@ApiModelProperty(value="附加属性, 如:体积3毫升,密码123,型号abc")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<IMAdditionalProperty> additionalProperties;
/**
* 提取方法
*/
@ApiModelProperty(value="提取方法")
private String drawWay;
/**
* 盒子编号
*/
@ApiModelProperty(value="盒子编号")
private String boxId;
/**
* A样还是B样
*/
@ApiModelProperty(value="A样还是B样")
private String sampleType;
/**
* 存储方法:常规,冷藏,特殊
*/
@ApiModelProperty(value="存储方法:常规,冷藏,特殊")
private String storageMethod;
/**
* 受理时间, 相当于检验开始时间, 用于比对花了多少时间在检验上
*/
@ApiModelProperty(value="受理时间, 相当于检验开始时间, 用于比对花了多少时间在检验上")
private LocalDateTime acceptTime;
/**
* 状态: 0=已受理,等分配, 1=已分配到检验人员, 2=检验完成
*/
// @ApiModelProperty(value="状态: 0=已受理,等分配, 1=已分配到检验人员, 2=检验完成")
// private Integer status;
@ApiModelProperty(value = "状态: 0=已受理,等分配, 1=已分配到检验人员, 2=检验完成")
private IMTSampleStatus status;
/**
* 当前持有者
*/
@ApiModelProperty(value="当前持有者")
private String holder;
/**
* 送检单位id
*/
@ApiModelProperty(value="送检单位id")
private String orgId;
/**
* 样本名称
*/
@ApiModelProperty(value="样本名称")
private String name;
@ApiModelProperty(value = "检材受理编号")
private String acceptNo;
}

@ -0,0 +1,63 @@
package digital.laboratory.platform.identifybook.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 采集员
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_taker")
@ApiModel(value="Taker对象", description="采集员")
public class Taker implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "采集员拥有者userId")
private String ownerUserId;
@ApiModelProperty(value = "采集员姓名")
private String name;
@ApiModelProperty(value = "采集员职务")
private String position;
@ApiModelProperty(value = "采集员证件名称")
private String cert;
@ApiModelProperty(value = "采集员证件编号")
private String idnum;
@ApiModelProperty(value = "采集员电话")
private String phone;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
}

@ -0,0 +1,75 @@
package digital.laboratory.platform.identifybook.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import java.util.Date;
import java.io.Serializable;
import digital.laboratory.platform.common.mybatis.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 任务信息表
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-31
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("b_task_notification")
@ApiModel(value="TaskNotification对象", description="任务信息表")
public class TaskNotification extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "消息ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty(value = "消息标题")
private String title;
@ApiModelProperty(value = "任务类型(1:鉴定文书-审核,2:鉴定文书-审核退回修改,3:鉴定文书-审批,4:鉴定文书-审批退回修改,5:鉴定文书-签发/领取,6:鉴定文书修改/补充-审核,7:鉴定文书修改/补充-审批)")
private Integer type;
@ApiModelProperty(value = "业务ID")
private String businessId;
@ApiModelProperty(value = "提交人ID")
private String submitterUserId;
@ApiModelProperty(value = "提交人姓名")
private String submitterUserName;
@ApiModelProperty(value = "提交日期")
private Date submitterTime;
@ApiModelProperty(value = "鉴定编号")
private String acceptNo;
@ApiModelProperty(value = "案件名称")
private String caseName;
@ApiModelProperty(value = "消息内容")
private String content;
@ApiModelProperty(value = "处理人员ID")
private String transactionPersonnelId;
@ApiModelProperty(value = "办理人姓名")
private String transactionPersonnelName;
@ApiModelProperty(value = "办理人权限组")
private String permissionGroup;
@ApiModelProperty(value = "处理状态(0: 待处理,1:已处理,2:退回修改,-1:未通过)")
private Integer status;
}

@ -0,0 +1,41 @@
package digital.laboratory.platform.identifybook.entity;
import cn.hutool.core.date.DateUtil;
import lombok.Data;
// 本类的实例对应 Entrustment 对象中的 ProcessInfo 字段。
@Data
public class UpdateInfo {
String userId;
String userName;
String orgId;
String orgName;
// @JsonDeserialize(using = LocalDateTimeDeserializer.class)
// @JsonSerialize(using = LocalDateTimeSerializer.class)
//@JSONField(format ="yyyy-MM-dd HH:mm:ss")
//LocalDateTime processTime;
String processTime; // 如果使用 LocalDateTime 类型, 序列化和反序列化的时候老是有格式转换的错误, 我们其实对内容不需要再加工, 直接保存字符串算了
String operation; // 动作, 例如: 录入、审核、审批 等
Integer opCode; // 动作码, 通常: 1=通过, -1=拒绝
public UpdateInfo() {
}
public UpdateInfo(String userId,
String userName,
String orgId,
String orgName,
String operation,
Integer opCode) {
this.userId = userId;
this.userName = userName;
this.orgId = orgId;
this.orgName = orgName;
this.processTime = DateUtil.now();
this.operation = operation;
this.opCode = opCode;
}
}

@ -0,0 +1,39 @@
package digital.laboratory.platform.identifybook.event;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;
import java.time.Clock;
import java.util.Set;
/**
* 推送数据到LabsCare 数据平台上的spring 事件
*/
@Getter
public class PushDataToLabsCareEvent extends ApplicationEvent {
/**
* 委托id
*/
private final String entrustId;
/**
* 推送的数据类型 1 鉴定委托书数据 | 2 鉴定事项确认书数据 | 3 生物检材定性记录报告数据 | 4 普通检材定性记录非红外报告数据
* 5 鉴定报告审批表数据 | 6 定性报告数据 | 7 归档报告信息数据
*/
private final Set<Integer> pushType;
public PushDataToLabsCareEvent(Object source, String entrustId, Set<Integer> pushType) {
super(source);
this.entrustId = entrustId;
this.pushType = pushType;
}
public PushDataToLabsCareEvent(Object source, Clock clock, String entrustId, Set<Integer> pushType) {
super(source, clock);
this.entrustId = entrustId;
this.pushType = pushType;
}
}

@ -0,0 +1,67 @@
package digital.laboratory.platform.identifybook.handler;
import digital.laboratory.platform.common.core.constant.CommonConstants;
import digital.laboratory.platform.common.core.util.R;
import digital.laboratory.platform.sys.entity.Dictionary;
import digital.laboratory.platform.sys.feign.RemoteDictionaryService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* App 启动类
* Spring Application 启动完成后, 会调用这个类的 run() 方法进行一些最后的初始化
* 我们在这个方法中从数据库加载一些全局的配置
*
* @author Zhang Xiaolong
*/
@Component
@RequiredArgsConstructor
public class AppStartupRunner implements ApplicationRunner {
private final RemoteDictionaryService remoteDictionaryService;
public static Map<String, String> entrustmentConfig = new HashMap<>();
public static String getCfg(String code) {
return entrustmentConfig.get(code);
}
/**
*
* @param args 参数
* @throws Exception 异常
*
* // @SysLog("委托受理模块初始化") 这里不能使用 @SysLog(), 因为 SysLog 还没有初始化
*/
@Override
public void run(ApplicationArguments args) throws Exception {
// BusinessCodeUtils.removeSymbols("x-*/)——0*&……%¥#@xasdf!*&^&%^ 中文、/+)(()\n\\xx\rx");
{
// 加载 entrustment 在字典中的配置
R<List<Dictionary>> r = remoteDictionaryService.getDictionaryByType(CommonConstants.DLP_TYPE_ENTRUSTMENT);
if (Optional.ofNullable(r).isPresent() && (r.getData() != null)) {
List<Dictionary> itemList = r.getData();
for (Dictionary item : itemList) {
entrustmentConfig.put(item.getCode(), item.getLabel());
}
}
for (String key : entrustmentConfig.keySet()) {
System.out.println(String.format("entrustmentConfig[%s]=%s", key, entrustmentConfig.get(key)));
}
}
}
}

@ -0,0 +1,67 @@
package digital.laboratory.platform.identifybook.listener;
import digital.laboratory.platform.identifybook.event.PushDataToLabsCareEvent;
import digital.laboratory.platform.identifybook.service.PushDataToLabsCareService;
import digital.laboratory.platform.identifybook.threadpool.GlobalThreadPool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.CompletableFuture;
/**
* 监听有关推送数据到LabsCare 平台的事件 采用异步
*/
@Slf4j
@Component
public class PushDataToLabsCareEventListener implements ApplicationListener<PushDataToLabsCareEvent> {
@Resource
private PushDataToLabsCareService pushDataToLabsCareService;
/**
* 处理委托数据推送事件
*
* @param event 委托数据推送事件对象
*/
@Override
public void onApplicationEvent(PushDataToLabsCareEvent event) {
CompletableFuture.runAsync(() -> {
event.getPushType().forEach(pushType -> {
// 处理不同的推送类型
switch (pushType) {
case 5: // 推送鉴定报告审批表数据
try {
pushDataToLabsCareService.pushAppraisalReportApprovalFormData(event.getEntrustId());
} catch (Exception e) {
log.error("委托id为 {} 的鉴定报告审批表数据推送失败!", event.getEntrustId(), e);
}
break;
case 6: // 推送定性报告数据
try {
pushDataToLabsCareService.pushQualitativeReportData(event.getEntrustId());
} catch (Exception e) {
log.error("委托id为 {} 的定性报告数据推送失败!", event.getEntrustId(), e);
}
break;
case 7: // 推送定性报告数据
try {
pushDataToLabsCareService.pushArchiveReportInfoData(event.getEntrustId());
} catch (Exception e) {
log.error("委托id为 {} 的归档报告信息数据推送失败!", event.getEntrustId(), e);
}
break;
default:
log.warn("未知的推送类型: {}", event.getPushType());
break;
}
});
}, GlobalThreadPool.getInstance()).exceptionally(e -> {
log.error("推送数据到 LabsCare 失败", e);
return null;
});
}
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.BIdentificationProcess;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-27
*/
@Mapper
public interface BIdentificationProcessMapper extends BaseMapper<BIdentificationProcess> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.BusinessProcessRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 业务流程记录表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Mapper
public interface BusinessProcessRecordMapper extends BaseMapper<BusinessProcessRecord> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.CaseEvent;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 案件事件 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface CaseEventMapper extends BaseMapper<CaseEvent> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.CaseEvidence;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 与案件相关的物证信息 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface CaseEvidenceMapper extends BaseMapper<CaseEvidence> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.Deliverer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 送检员 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface DelivererMapper extends BaseMapper<Deliverer> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.EntrustmentBundle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 委托与实验关系 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Mapper
public interface EntrustmentBundleMapper extends BaseMapper<EntrustmentBundle> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.EntrustmentIdentificationMaterial;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 检材信息 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface EntrustmentIdentificationMaterialMapper extends BaseMapper<EntrustmentIdentificationMaterial> {
}

@ -0,0 +1,34 @@
package digital.laboratory.platform.identifybook.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import digital.laboratory.platform.identifybook.dto.EntrustCaseDTO;
import digital.laboratory.platform.identifybook.dto.EntrustmentDTO;
import digital.laboratory.platform.identifybook.entity.Entrustment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import digital.laboratory.platform.identifybook.req.EntrustmentREQ;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 委托 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface EntrustmentMapper extends BaseMapper<Entrustment> {
EntrustCaseDTO getEntrustCaseDTOById(@Param(value = "entrustId") String entrustId);
IPage<EntrustmentDTO> findEntrustPage(IPage<EntrustmentDTO> page, @Param(value = "req") EntrustmentREQ req);
List<EntrustmentDTO> findEntrust(@Param(value = "id") String id, @Param(value = "identificationId") String identificationId);
EntrustmentDTO getEntrustmentDTO(@Param(value = "entrustId") String entrustId);
long countWSLBSum(@Param("bookStatusList") List<Integer> bookStatusList);
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.ExaminationMethods;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 检验方法 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Mapper
public interface ExaminationMethodsMapper extends BaseMapper<ExaminationMethods> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.Experiment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 实验(检验方法的实例) Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Mapper
public interface ExperimentMapper extends BaseMapper<Experiment> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.HairJobIdentificationMaterial;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 毛发任务的检材信息 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface HairJobIdentificationMaterialMapper extends BaseMapper<HairJobIdentificationMaterial> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.HairJob;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 毛发检测任务 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface HairJobMapper extends BaseMapper<HairJob> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.Identification;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 鉴定表,一个鉴定可能会有多个委托 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface IdentificationMapper extends BaseMapper<Identification> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.IdentifyBookApprove;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 鉴定文书审批表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-25
*/
@Mapper
public interface IdentifyBookApproveMapper extends BaseMapper<IdentifyBookApprove> {
}

@ -0,0 +1,20 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.IdentifyBook;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 鉴定文书消息表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Mapper
public interface IdentifyBookMapper extends BaseMapper<IdentifyBook> {
IdentifyBook getMaxVersionIdentifyBook(@Param(value = "fkId") String fkId);
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.IdentifyBookRelevance;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 鉴定文书关联中间表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Mapper
public interface IdentifyBookRelevanceMapper extends BaseMapper<IdentifyBookRelevance> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.ModifySupplementApply;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 鉴定文书修改补充申请表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-22
*/
@Mapper
public interface ModifySupplementApplyMapper extends BaseMapper<ModifySupplementApply> {
}

@ -0,0 +1,22 @@
package digital.laboratory.platform.identifybook.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import digital.laboratory.platform.identifybook.dto.ReceiveIdentifyBookDTO;
import digital.laboratory.platform.identifybook.entity.ReceiveIdentifyBook;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 领取鉴定文书信息表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-30
*/
@Mapper
public interface ReceiveIdentifyBookMapper extends BaseMapper<ReceiveIdentifyBook> {
IPage<ReceiveIdentifyBookDTO> pageReceiveIdentifyBook(IPage<ReceiveIdentifyBook> page, @Param(value = "key") String key);
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.ResultEntrustmentQualitative;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 委托定性分析检验结果 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Mapper
public interface ResultEntrustmentQualitativeMapper extends BaseMapper<ResultEntrustmentQualitative> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.ResultEntrustmentRation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 委托定量检验结果 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-17
*/
@Mapper
public interface ResultEntrustmentRationMapper extends BaseMapper<ResultEntrustmentRation> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.Sample;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 检验用的样本 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface SampleMapper extends BaseMapper<Sample> {
}

@ -0,0 +1,18 @@
package digital.laboratory.platform.identifybook.mapper;
import digital.laboratory.platform.identifybook.entity.Taker;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 采集员 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Mapper
public interface TakerMapper extends BaseMapper<Taker> {
}

@ -0,0 +1,26 @@
package digital.laboratory.platform.identifybook.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import digital.laboratory.platform.identifybook.dto.EntrustmentDTO;
import digital.laboratory.platform.identifybook.entity.TaskNotification;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import digital.laboratory.platform.identifybook.req.EntrustmentREQ;
import digital.laboratory.platform.identifybook.vo.TaskNotificationVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 任务信息表 Mapper 接口
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-08-31
*/
@Mapper
public interface TaskNotificationMapper extends BaseMapper<TaskNotification> {
IPage<TaskNotificationVO> queryTaskNotificationPage(IPage<TaskNotification> page, @Param(Constants.WRAPPER) QueryWrapper<TaskNotification> qw);
}

@ -0,0 +1,21 @@
package digital.laboratory.platform.identifybook.req;
import digital.laboratory.platform.identifybook.entity.BusinessProcessRecord;
import digital.laboratory.platform.identifybook.utils.BaseRequest;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/26 0:31
*/
@Data
@ApiModel(value="BusinessProcessRecordREQ对象", description="封装条件属性")
public class BusinessProcessRecordREQ extends BaseRequest<BusinessProcessRecord> implements Serializable {
}

@ -0,0 +1,36 @@
package digital.laboratory.platform.identifybook.req;
import digital.laboratory.platform.identifybook.dto.EntrustmentDTO;
import digital.laboratory.platform.identifybook.utils.BaseRequest;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* <p>
* 委托
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023-05-17
*/
@Data
@ApiModel(value="EntrustmentREQ对象", description="封装条件属性")
public class EntrustmentREQ extends BaseRequest<EntrustmentDTO> implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "参数key")
private String key;
@ApiModelProperty(value = "鉴定委托单位编码")
private String clientOrgId;
@ApiModelProperty(value = "状态")
private List<String> bookStatusList;
}

@ -0,0 +1,30 @@
package digital.laboratory.platform.identifybook.req;
import digital.laboratory.platform.identifybook.entity.ModifySupplementApply;
import digital.laboratory.platform.identifybook.utils.BaseRequest;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 旌霖科技-www.jinglin.com
* @since 2023/5/26 0:08
*/
@Data
@ApiModel(value="ModifySupplementApplyREQ对象", description="封装条件属性")
public class ModifySupplementApplyREQ extends BaseRequest<ModifySupplementApply> implements Serializable {
@ApiModelProperty(value = "任务模糊查询:(鉴定文书编号/委托人姓名)")
private String key;
@ApiModelProperty(value = "业务状态(1:鉴定文书-提交修改补充申请,2:鉴定文书-修改补充-审核通过,-2:鉴定文书-修改补充-审核未通过,3:鉴定文书-修改补充-审批通过,-3:鉴定文书-修改补充-审批通过)")
private String status;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save