From a3fa685014ca577779c47aa540a7735ae58fb30d Mon Sep 17 00:00:00 2001
From: cuijian <cuijian@xalxzn.com>
Date: 星期一, 26 五月 2025 11:49:18 +0800
Subject: [PATCH] 工具入库申请功能

---
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundDetailMapper.java            |   27 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundDetailController.java    |  174 +++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InStoreDetailMapper.xml         |    5 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundOrder.java                   |  116 ++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InStoreDetailServiceImpl.java |   19 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java |   54 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsConfigProperty.java            |    1 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundDetailService.java         |   20 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InStoreDetailMapper.java            |   17 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodeUtils.java                     |  121 ++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InStoreDetail.java                  |   94 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInStoreDetailService.java         |   14 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java         |    1 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java                 |    1 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java          |    1 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundOrderController.java     |  237 ++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundDetailMapper.xml         |   21 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java  |  209 ++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InStoreDetailController.java    |  177 +++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundOrderMapper.xml          |    5 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java            |    3 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodePrinterUtils.java              |   74 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java              |    1 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundOrderMapper.java             |   17 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/InboundOrderFlowDto.java        |   12 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundDetail.java                  |   97 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml             |   91 +
 lxzn-module-system/lxzn-system-start/src/main/resources/db/tms_2025/tms-init-20250522.sql      | 1240 +++++++++++++++++++++++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundDetailServiceImpl.java |   55 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundOrderService.java          |   19 
 30 files changed, 2,850 insertions(+), 73 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-start/src/main/resources/db/tms_2025/tms-init-20250522.sql b/lxzn-module-system/lxzn-system-start/src/main/resources/db/tms_2025/tms-init-20250522.sql
new file mode 100644
index 0000000..47fc1db
--- /dev/null
+++ b/lxzn-module-system/lxzn-system-start/src/main/resources/db/tms_2025/tms-init-20250522.sql
@@ -0,0 +1,1240 @@
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tools_classify]') AND type in (N'U')) DROP TABLE [dbo].[tools_classify];
+CREATE TABLE [dbo].[tools_classify](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(255),
+    type_name VARCHAR(128) NOT NULL,
+    parent_id VARCHAR(32) NOT NULL,
+    leaf_flag VARCHAR(6),
+    seq VARCHAR(255),
+    status VARCHAR(6),
+    rank INT NOT NULL,
+    encoding_type VARCHAR(32),
+    para_type_flag VARCHAR(32) NOT NULL,
+    remark VARCHAR(128),
+    tenant_id ,
+    created_by VARCHAR(32),
+    created_time DATE,
+    updated_by VARCHAR(32),
+    updated_time DATE,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被淇℃伅琛�', 'SCHEMA', dbo, 'table', tools_classify, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', tools_classify, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', tools_classify, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '绫诲瀷鍚嶇О', 'SCHEMA', dbo, 'table', tools_classify, 'column', type_name;
+EXEC sp_addextendedproperty 'MS_Description', '鐖剁被鍨嬬紪鍙�', 'SCHEMA', dbo, 'table', tools_classify, 'column', parent_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍙跺瓙鑺傜偣鏍囪;1鏄�2鍚�', 'SCHEMA', dbo, 'table', tools_classify, 'column', leaf_flag;
+EXEC sp_addextendedproperty 'MS_Description', '鏄剧ず搴忓彿', 'SCHEMA', dbo, 'table', tools_classify, 'column', seq;
+EXEC sp_addextendedproperty 'MS_Description', '鐘舵��;1.鍚敤锛�2.鍏抽棴', 'SCHEMA', dbo, 'table', tools_classify, 'column', status;
+EXEC sp_addextendedproperty 'MS_Description', '灞傜骇', 'SCHEMA', dbo, 'table', tools_classify, 'column', rank;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栫爜鏂瑰紡;1.绯荤粺鐢熸垚锛�
+2.鎸夌紪鐮佹嫾鎺ワ紱
+3.鎵嬪伐缂栫爜', 'SCHEMA', dbo, 'table', tools_classify, 'column', encoding_type;
+EXEC sp_addextendedproperty 'MS_Description', '瀵瑰簲鍙傛暟妯℃澘琛ㄥ悕绉�', 'SCHEMA', dbo, 'table', tools_classify, 'column', para_type_flag;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', tools_classify, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', tools_classify, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', tools_classify, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', tools_classify, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', tools_classify, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', tools_classify, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[base_tools]') AND type in (N'U')) DROP TABLE [dbo].[base_tools];
+CREATE TABLE [dbo].[base_tools](
+    id 32(32) NOT NULL,
+    classify_id 32(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    tool_level VARCHAR(16),
+    i_count VARCHAR(255),
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    tool_model VARCHAR(255),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿淇℃伅琛�', 'SCHEMA', dbo, 'table', base_tools, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', base_tools, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', base_tools, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', base_tools, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', base_tools, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿绛夌骇;宸ュ叿绮剧‘绛夌骇鍒嗕负3涓瓑绾э細鍒嗗埆涓篈銆丅銆丆
+A绫�:鐗瑰埆閲嶈锛屽叆搴撶殑宸ュ叿鏄闄勫疄鐗╃紪鐮侊紙渚嬪:Q20120918011-0001)
+B绫�:涓�鑸噸瑕侊紝鍏ュ簱鐨勫伐鍏锋槸涓嶉檮瀹炵墿缂栫爜锛堜緥濡�:Q20120918011)
+C绫�:涓嶉噸瑕侊紝娌℃湁鐗规畩瑙勫畾锛岃埅瀹囨殏鏃舵病鏈変娇鐢ㄥ満鏅�', 'SCHEMA', dbo, 'table', base_tools, 'column', tool_level;
+EXEC sp_addextendedproperty 'MS_Description', '鎶婂彿鏈�澶у��', 'SCHEMA', dbo, 'table', base_tools, 'column', i_count;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呯爜)', 'SCHEMA', dbo, 'table', base_tools, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', base_tools, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', base_tools, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囨敞绾у埆', 'SCHEMA', dbo, 'table', base_tools, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', base_tools, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', base_tools, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', base_tools, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', base_tools, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', base_tools, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', base_tools, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', base_tools, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', base_tools, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_hole_tools]') AND type in (N'U')) DROP TABLE [dbo].[para_hole_tools];
+CREATE TABLE [dbo].[para_hole_tools](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255) NOT NULL,
+    diameter VARCHAR(128) NOT NULL,
+    cone_angle VARCHAR(24),
+    edge_length VARCHAR(24) NOT NULL,
+    total_length VARCHAR(24) NOT NULL,
+    tool_material VARCHAR(64) NOT NULL,
+    part_material VARCHAR(64),
+    paintcoat_flag VARCHAR(32) NOT NULL,
+    tool_pattern VARCHAR(64) NOT NULL,
+    handle_specifications VARCHAR(128) NOT NULL,
+    cooling_method VARCHAR(64) NOT NULL,
+    technical_conditions VARCHAR(128) NOT NULL,
+    conditions_info VARCHAR(128),
+    brand VARCHAR(64),
+    types VARCHAR(64),
+    tolerance_class VARCHAR(64),
+    flute_form VARCHAR(64),
+    handle_form VARCHAR(64),
+    blade_count VARCHAR(24),
+    small_diameter VARCHAR(16),
+    chamfer_angle VARCHAR(16),
+    fitter_part VARCHAR(64),
+    effective_length VARCHAR(16),
+    drill_diameter_range VARCHAR(32),
+    knife_diameter VARCHAR(16),
+    bore_diameter VARCHAR(16),
+    connector_type VARCHAR(16),
+    slot_specification VARCHAR(32),
+    scope_of_application VARCHAR(32),
+    latest_boring_diameter VARCHAR(16),
+    max_boring_diameter VARCHAR(16),
+    processingmethod VARCHAR(64),
+    heads_number VARCHAR(16),
+    adapt_holder VARCHAR(64),
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '11瀛斿姞宸ュ垁鍏穏1', 'SCHEMA', dbo, 'table', para_hole_tools, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿-涓婚敭', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿(鎴栦紒涓氬唴鍘熶唬鐮�)', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙凤紙灞曠ず鏃躲�佸彲浠ュ涓嫾鎺ワ級;灞曠ず鏃躲�佸彲浠ュ涓嫾鎺ユ垚澶氫釜搴撲綅鍙风殑瀛楃涓诧紝杩涜浼垪灞曠ず銆�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鐩村緞', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冮敟瑙�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', cone_angle;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冮暱', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', edge_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋�婚暱', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', total_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋潗鏂�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁娑傚眰', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', paintcoat_flag;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏峰瀷寮�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tool_pattern;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯儴瑙勬牸', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', handle_specifications;
+EXEC sp_addextendedproperty 'MS_Description', '鍐峰嵈鏂瑰紡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', cooling_method;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', technical_conditions;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠惰鏄�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', conditions_info;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺墝', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', brand;
+EXEC sp_addextendedproperty 'MS_Description', '鍒跺紡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', types;
+EXEC sp_addextendedproperty 'MS_Description', '鍏樊绛夌骇', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tolerance_class;
+EXEC sp_addextendedproperty 'MS_Description', '鎺掑睉妲藉舰寮�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', flute_form;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯儴褰㈠紡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', handle_form;
+EXEC sp_addextendedproperty 'MS_Description', '鍒冩暟', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', blade_count;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�灏忕洿寰�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', small_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍊掕瑙掑害', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', chamfer_angle;
+EXEC sp_addextendedproperty 'MS_Description', '閫傞厤鍒�鐗�-鍒�澶�-鍒�鏉�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', fitter_part;
+EXEC sp_addextendedproperty 'MS_Description', '鏈夋晥鍔犲伐闀垮害', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', effective_length;
+EXEC sp_addextendedproperty 'MS_Description', '閽诲ご鐩村緞鑼冨洿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', drill_diameter_range;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗙洿寰�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', knife_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '瀛斿緞', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', bore_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鎺ュ彛褰㈠紡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', connector_type;
+EXEC sp_addextendedproperty 'MS_Description', '鎺ュ彛妲介暱瑙勬牸', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', slot_specification;
+EXEC sp_addextendedproperty 'MS_Description', '閫傜敤鑼冨洿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', scope_of_application;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�鏂伴晽瀛旂洿寰�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', latest_boring_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�澶ч晽瀛旂洿寰�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', max_boring_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍔犲伐鏂瑰紡', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', processingmethod;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�澶存暟', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', heads_number;
+EXEC sp_addextendedproperty 'MS_Description', '閫傞厤鍒�搴�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', adapt_holder;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_hole_tools, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_threading_tool]') AND type in (N'U')) DROP TABLE [dbo].[para_threading_tool];
+CREATE TABLE [dbo].[para_threading_tool](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255) NOT NULL,
+    thread_code VARCHAR(64) NOT NULL,
+    pitch VARCHAR(16) NOT NULL,
+    rotation_direction VARCHAR(16) NOT NULL,
+    tolerancezone_level VARCHAR(16) NOT NULL,
+    edge_length VARCHAR(32) NOT NULL,
+    total_length VARCHAR(32) NOT NULL,
+    tool_material VARCHAR(64) NOT NULL,
+    part_material VARCHAR(64),
+    paintcoat_flag VARCHAR(32) NOT NULL,
+    external_dimensions VARCHAR(64),
+    handle_specifications VARCHAR(64) NOT NULL,
+    technical_conditions VARCHAR(128) NOT NULL,
+    conditions_info VARCHAR(128),
+    brand VARCHAR(64),
+    types VARCHAR(64),
+    screw_hole_type VARCHAR(16),
+    cooling_method VARCHAR(64),
+    thread_standard VARCHAR(32),
+    flute_solt_type VARCHAR(32),
+    thread_type VARCHAR(32),
+    guiding_size VARCHAR(32),
+    connection_aperture VARCHAR(32),
+    connecting_keyway VARCHAR(64),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '12铻虹汗鍒�鍏穏2', 'SCHEMA', dbo, 'table', para_threading_tool, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呭師浠g爜锛�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗浠e彿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', thread_code;
+EXEC sp_addextendedproperty 'MS_Description', '铻鸿窛', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', pitch;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗鏃嬪悜', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', rotation_direction;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗鍏樊甯︿唬鍙�/绮惧害绛夌骇', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', tolerancezone_level;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冮暱', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', edge_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋�婚暱', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', total_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋潗鏂�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁娑傚眰', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', paintcoat_flag;
+EXEC sp_addextendedproperty 'MS_Description', '澶栧瀷灏哄', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', external_dimensions;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯儴瑙勬牸', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', handle_specifications;
+EXEC sp_addextendedproperty 'MS_Description', '闄勪欢鎶�鏈潯浠�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', technical_conditions;
+EXEC sp_addextendedproperty 'MS_Description', '闄勪欢鎶�鏈潯浠惰鏄�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', conditions_info;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺墝', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', brand;
+EXEC sp_addextendedproperty 'MS_Description', '鍒跺紡', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', types;
+EXEC sp_addextendedproperty 'MS_Description', '铻哄瓟绫诲瀷', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', screw_hole_type;
+EXEC sp_addextendedproperty 'MS_Description', '鍐峰嵈鏂瑰紡', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', cooling_method;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗鏍囧噯', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', thread_standard;
+EXEC sp_addextendedproperty 'MS_Description', '鎺掑睉妲藉瀷', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', flute_solt_type;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗绫诲瀷', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', thread_type;
+EXEC sp_addextendedproperty 'MS_Description', '瀵煎悜灏哄', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', guiding_size;
+EXEC sp_addextendedproperty 'MS_Description', '杩炴帴瀛斿緞', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', connection_aperture;
+EXEC sp_addextendedproperty 'MS_Description', '杩炴帴閿Ы', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', connecting_keyway;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_threading_tool, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_mill_tool]') AND type in (N'U')) DROP TABLE [dbo].[para_mill_tool];
+CREATE TABLE [dbo].[para_mill_tool](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(32),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255) NOT NULL,
+    diameter VARCHAR(128) NOT NULL,
+    nose_angle_r VARCHAR(64) NOT NULL,
+    number_of_teeth VARCHAR(64) NOT NULL,
+    edge_length VARCHAR(24) NOT NULL,
+    total_length VARCHAR(24) NOT NULL,
+    tool_material VARCHAR(64) NOT NULL,
+    part_material VARCHAR(64),
+    paintcoat_flag VARCHAR(32) NOT NULL,
+    tool_pattern VARCHAR(64) NOT NULL,
+    clamping_specifications VARCHAR(64) NOT NULL,
+    cooling_method VARCHAR(64) NOT NULL,
+    technical_conditions VARCHAR(128) NOT NULL,
+    conditions_info VARCHAR(128),
+    brand VARCHAR(64),
+    neck_diameter VARCHAR(64),
+    handle_form VARCHAR(64),
+    nose_angle_c VARCHAR(32),
+    angle_inside_r VARCHAR(32),
+    small_diameter VARCHAR(32),
+    tool_angle VARCHAR(16),
+    handle_length VARCHAR(16),
+    main_angle_k VARCHAR(16),
+    deepest_depth VARCHAR(16),
+    adapt_blade VARCHAR(64),
+    handle_neck_form VARCHAR(64),
+    handle_neck_length VARCHAR(16),
+    size_specifications VARCHAR(16),
+    milling_head_form VARCHAR(16),
+    overhanging_length VARCHAR(16),
+    cutting_edge_form VARCHAR(16),
+    number_patterns VARCHAR(16),
+    pitch VARCHAR(16),
+    recently_diameter VARCHAR(16),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '13閾e墛鍒�鍏穏3', 'SCHEMA', dbo, 'table', para_mill_tool, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭-鍒�鍏风紪鍙�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呭師浠g爜锛�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏风洿寰�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�灏栬R', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', nose_angle_r;
+EXEC sp_addextendedproperty 'MS_Description', '榻挎暟', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', number_of_teeth;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冮暱', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', edge_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋�婚暱', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', total_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋潗鏂�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁娑傚眰', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', paintcoat_flag;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏峰瀷寮�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tool_pattern;
+EXEC sp_addextendedproperty 'MS_Description', '瑁呭す瑙勬牸', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', clamping_specifications;
+EXEC sp_addextendedproperty 'MS_Description', '鍐峰嵈鏂瑰紡', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', cooling_method;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', technical_conditions;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠惰鏄�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', conditions_info;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺墝', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', brand;
+EXEC sp_addextendedproperty 'MS_Description', '棰堝緞', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', neck_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯儴褰㈠紡', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', handle_form;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�灏栬C', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', nose_angle_c;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�灏栬鍐匯', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', angle_inside_r;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�灏忕洿寰�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', small_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏疯搴�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tool_angle;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯暱', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', handle_length;
+EXEC sp_addextendedproperty 'MS_Description', '涓诲亸瑙扠', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', main_angle_k;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�澶у垏娣�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', deepest_depth;
+EXEC sp_addextendedproperty 'MS_Description', '閫傞厤鍒�鐗�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', adapt_blade;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯褰㈠紡', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', handle_neck_form;
+EXEC sp_addextendedproperty 'MS_Description', '鏌勯闀垮害', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', handle_neck_length;
+EXEC sp_addextendedproperty 'MS_Description', '鎺ュ彛灏哄瑙勬牸', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', size_specifications;
+EXEC sp_addextendedproperty 'MS_Description', '閾e垁澶村舰寮�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', milling_head_form;
+EXEC sp_addextendedproperty 'MS_Description', '鎮几闀垮害', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', overhanging_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冨舰寮�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', cutting_edge_form;
+EXEC sp_addextendedproperty 'MS_Description', '鍐呭绾规暟', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', number_patterns;
+EXEC sp_addextendedproperty 'MS_Description', '铻鸿窛', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', pitch;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�杩戝姞宸ョ洿寰�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', recently_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_mill_tool, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_turning_tools]') AND type in (N'U')) DROP TABLE [dbo].[para_turning_tools];
+CREATE TABLE [dbo].[para_turning_tools](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32),
+    tool_code VARCHAR(32) NOT NULL,
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255),
+    head_specifications VARCHAR(32) NOT NULL,
+    matching_number VARCHAR(64) NOT NULL,
+    lead_angle VARCHAR(32) NOT NULL,
+    cross_sectional_size VARCHAR(16) NOT NULL,
+    total_length VARCHAR(32) NOT NULL,
+    cutting_direction VARCHAR(24) NOT NULL,
+    tool_material VARCHAR(64) NOT NULL,
+    part_material VARCHAR(64),
+    tool_pattern VARCHAR(64) NOT NULL,
+    paintcoat_flag VARCHAR(32) NOT NULL,
+    technical_conditions VARCHAR(128) NOT NULL,
+    conditions_info VARCHAR(128),
+    brand VARCHAR(64),
+    types VARCHAR(64),
+    knife_size VARCHAR(32),
+    cooling_method VARCHAR(64),
+    holder_category VARCHAR(64),
+    tool_diameter VARCHAR(64),
+    fastening_form VARCHAR(64),
+    boring_bar_diameter VARCHAR(32),
+    blade_length VARCHAR(32),
+    blade_shape VARCHAR(24),
+    blade_posterior VARCHAR(24),
+    bar_direction VARCHAR(64),
+    blade_height VARCHAR(32),
+    blade_wide VARCHAR(24),
+    blade_size VARCHAR(32),
+    knife_clip_model VARCHAR(64),
+    clamping_method VARCHAR(64),
+    slot_width VARCHAR(32),
+    small_diameter VARCHAR(32),
+    max_diameter VARCHAR(32),
+    max_depth VARCHAR(32),
+    knife_bar_form VARCHAR(64),
+    blade_thickness VARCHAR(32),
+    min_diameter VARCHAR(32),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id,tool_code)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '14杞﹀墛鍒�鍏穏4', 'SCHEMA', dbo, 'table', para_turning_tools, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭-鍒�鍏风紪鍙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呭師浠g爜锛�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�澶磋鏍�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', head_specifications;
+EXEC sp_addextendedproperty 'MS_Description', '閰嶅鍒�鐗囧彿', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', matching_number;
+EXEC sp_addextendedproperty 'MS_Description', '涓诲亸瑙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', lead_angle;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋埅闈㈠昂瀵�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', cross_sectional_size;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋�婚暱', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', total_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鏂瑰悜', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', cutting_direction;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋潗鏂�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏峰瀷寮�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tool_pattern;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁娑傚眰', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', paintcoat_flag;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', technical_conditions;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠惰鏄�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', conditions_info;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺墝', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', brand;
+EXEC sp_addextendedproperty 'MS_Description', '鍒跺紡', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', types;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧昂瀵�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', knife_size;
+EXEC sp_addextendedproperty 'MS_Description', '鍐峰嵈鏂瑰紡', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', cooling_method;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗙被鍒�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', holder_category;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏风洿寰�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tool_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鎺ュ彛绱у浐褰㈠紡', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', fastening_form;
+EXEC sp_addextendedproperty 'MS_Description', '闀楁潌鐩村緞', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', boring_bar_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗛暱搴�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧舰鐘�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_shape;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧悗瑙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_posterior;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗘柟鍚�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', bar_direction;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗛珮搴�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_height;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗗搴�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_wide;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗗昂瀵�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_size;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�澶瑰瀷鍙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', knife_clip_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囪澶规柟寮�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', clamping_method;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囨Ы瀹�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', slot_width;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�灏忓垏鍏ョ洿寰�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', small_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�澶у垏鍏ョ洿寰�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', max_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�澶у垏妲芥繁搴�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', max_depth;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉嗗舰寮�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', knife_bar_form;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鏉垮帤搴�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', blade_thickness;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�灏忓姞宸ョ洿寰�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', min_diameter;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_turning_tools, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_blade]') AND type in (N'U')) DROP TABLE [dbo].[para_blade];
+CREATE TABLE [dbo].[para_blade](
+    id VARCHAR(32),
+    classify_id VARCHAR(32),
+    tool_code VARCHAR(32) NOT NULL,
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255),
+    blade_shape VARCHAR(32) NOT NULL,
+    blade_length VARCHAR(24) NOT NULL,
+    cutting_edge_count VARCHAR(32) NOT NULL,
+    blade_thickness VARCHAR(32) NOT NULL,
+    clamping_type VARCHAR(64) NOT NULL,
+    nose_angle_r VARCHAR(24) NOT NULL,
+    tool_material VARCHAR(64) NOT NULL,
+    part_material VARCHAR(64),
+    paintcoat_flag VARCHAR(32) NOT NULL,
+    technical_conditions VARCHAR(128) NOT NULL,
+    conditions_info VARCHAR(128),
+    brand VARCHAR(64),
+    types VARCHAR(64),
+    coating_material VARCHAR(64),
+    processing_classify VARCHAR(64),
+    blade_posterior VARCHAR(32),
+    cutting_direction VARCHAR(32),
+    blade_wide VARCHAR(32),
+    blade_size VARCHAR(34),
+    in_out_thread VARCHAR(32),
+    thread_standard VARCHAR(32),
+    dental_angle VARCHAR(16),
+    pitch VARCHAR(24),
+    min_internal_thread VARCHAR(24),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (tool_code)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '20鍒�鐗噂9', 'SCHEMA', dbo, 'table', para_blade, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_blade, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_blade, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭-鍒�鍏风紪鍙�', 'SCHEMA', dbo, 'table', para_blade, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呭師浠g爜锛�', 'SCHEMA', dbo, 'table', para_blade, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_blade, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_blade, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_blade, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_blade, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', para_blade, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_blade, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧舰鐘�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_shape;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囬暱搴�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_length;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鍒冩暟', 'SCHEMA', dbo, 'table', para_blade, 'column', cutting_edge_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧帤搴�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_thickness;
+EXEC sp_addextendedproperty 'MS_Description', '澶瑰浐鍨嬪紡', 'SCHEMA', dbo, 'table', para_blade, 'column', clamping_type;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�灏朢', 'SCHEMA', dbo, 'table', para_blade, 'column', nose_angle_r;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囨潗鏂�', 'SCHEMA', dbo, 'table', para_blade, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_blade, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁娑傚眰', 'SCHEMA', dbo, 'table', para_blade, 'column', paintcoat_flag;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠�', 'SCHEMA', dbo, 'table', para_blade, 'column', technical_conditions;
+EXEC sp_addextendedproperty 'MS_Description', '闄勫姞鎶�鏈潯浠惰鏄�', 'SCHEMA', dbo, 'table', para_blade, 'column', conditions_info;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺墝', 'SCHEMA', dbo, 'table', para_blade, 'column', brand;
+EXEC sp_addextendedproperty 'MS_Description', '鍒跺紡', 'SCHEMA', dbo, 'table', para_blade, 'column', types;
+EXEC sp_addextendedproperty 'MS_Description', '娑傚眰鏉愯川', 'SCHEMA', dbo, 'table', para_blade, 'column', coating_material;
+EXEC sp_addextendedproperty 'MS_Description', '鍔犲伐鍒嗙被', 'SCHEMA', dbo, 'table', para_blade, 'column', processing_classify;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧悗瑙�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_posterior;
+EXEC sp_addextendedproperty 'MS_Description', '鍒囧墛鏂瑰悜', 'SCHEMA', dbo, 'table', para_blade, 'column', cutting_direction;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧搴�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_wide;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鐗囧昂瀵�', 'SCHEMA', dbo, 'table', para_blade, 'column', blade_size;
+EXEC sp_addextendedproperty 'MS_Description', '鍐呭铻虹汗', 'SCHEMA', dbo, 'table', para_blade, 'column', in_out_thread;
+EXEC sp_addextendedproperty 'MS_Description', '铻虹汗鏍囧噯', 'SCHEMA', dbo, 'table', para_blade, 'column', thread_standard;
+EXEC sp_addextendedproperty 'MS_Description', '鐗欏瀷瑙掑害', 'SCHEMA', dbo, 'table', para_blade, 'column', dental_angle;
+EXEC sp_addextendedproperty 'MS_Description', '铻鸿窛', 'SCHEMA', dbo, 'table', para_blade, 'column', pitch;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�灏忓姞宸ュ唴铻虹汗鍏О鐩村緞', 'SCHEMA', dbo, 'table', para_blade, 'column', min_internal_thread;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_blade, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_blade, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_blade, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_blade, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_blade, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[outbound_order]') AND type in (N'U')) DROP TABLE [dbo].[outbound_order];
+CREATE TABLE [dbo].[outbound_order](
+    id VARCHAR(32) NOT NULL,
+    out_storehouse_type VARCHAR(32) NOT NULL,
+    is_return INT,
+    handler VARCHAR(32) NOT NULL,
+    reviewer VARCHAR(32),
+    order_status VARCHAR(32) NOT NULL,
+    out_status VARCHAR(255),
+    audit_date DATETIME,
+    approval_opinion VARCHAR(128),
+    subject_matter VARCHAR(128),
+    outbound_time DATETIME NOT NULL,
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐢宠鍗�', 'SCHEMA', dbo, 'table', outbound_order, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鍗曠紪鍙�', 'SCHEMA', dbo, 'table', outbound_order, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱绫诲瀷', 'SCHEMA', dbo, 'table', outbound_order, 'column', out_storehouse_type;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁褰掕繕;1鏈綊杩橈紙榛樿锛夛紱2.宸插綊杩�', 'SCHEMA', dbo, 'table', outbound_order, 'column', is_return;
+EXEC sp_addextendedproperty 'MS_Description', '缁忔墜浜�', 'SCHEMA', dbo, 'table', outbound_order, 'column', handler;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳浜�', 'SCHEMA', dbo, 'table', outbound_order, 'column', reviewer;
+EXEC sp_addextendedproperty 'MS_Description', '鍗曞瓙鐘舵��', 'SCHEMA', dbo, 'table', outbound_order, 'column', order_status;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚', 'SCHEMA', dbo, 'table', outbound_order, 'column', out_status;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳鏃堕棿', 'SCHEMA', dbo, 'table', outbound_order, 'column', audit_date;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳鎰忚', 'SCHEMA', dbo, 'table', outbound_order, 'column', approval_opinion;
+EXEC sp_addextendedproperty 'MS_Description', '棰嗙敤浜嬬敱', 'SCHEMA', dbo, 'table', outbound_order, 'column', subject_matter;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鏃堕棿', 'SCHEMA', dbo, 'table', outbound_order, 'column', outbound_time;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', outbound_order, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', outbound_order, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鎿嶄綔鍛�', 'SCHEMA', dbo, 'table', outbound_order, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', outbound_order, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', outbound_order, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', outbound_order, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[inbound_order]') AND type in (N'U')) DROP TABLE [dbo].[inbound_order];
+CREATE TABLE [dbo].[inbound_order](
+    id VARCHAR(32) NOT NULL,
+    inbound_time DATETIME(255),
+    in_storehouse_type VARCHAR(32) NOT NULL,
+    handler VARCHAR(32),
+    borrow_num VARCHAR(32),
+    reviewer VARCHAR(32),
+    approval_date DATETIME,
+    approval_opinion VARCHAR(128),
+    order_status VARCHAR(32),
+    in_status VARCHAR(32),
+    application_reason VARCHAR(128),
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鐢宠鍗�', 'SCHEMA', dbo, 'table', inbound_order, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭-鍏ュ簱鍗曞彿', 'SCHEMA', dbo, 'table', inbound_order, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏃堕棿', 'SCHEMA', dbo, 'table', inbound_order, 'column', inbound_time;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱绫诲瀷', 'SCHEMA', dbo, 'table', inbound_order, 'column', in_storehouse_type;
+EXEC sp_addextendedproperty 'MS_Description', '缁忔墜浜�', 'SCHEMA', dbo, 'table', inbound_order, 'column', handler;
+EXEC sp_addextendedproperty 'MS_Description', '鍊熺敤鍗曞彿', 'SCHEMA', dbo, 'table', inbound_order, 'column', borrow_num;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳浜�', 'SCHEMA', dbo, 'table', inbound_order, 'column', reviewer;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳鏃堕棿', 'SCHEMA', dbo, 'table', inbound_order, 'column', approval_date;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳鎰忚', 'SCHEMA', dbo, 'table', inbound_order, 'column', approval_opinion;
+EXEC sp_addextendedproperty 'MS_Description', '鍗曞瓙鐘舵��', 'SCHEMA', dbo, 'table', inbound_order, 'column', order_status;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鍗曠姸鎬�;1.鏈叆搴擄紱2.閮ㄥ垎鍏ュ簱锛�3.鍏ュ簱瀹屾垚', 'SCHEMA', dbo, 'table', inbound_order, 'column', in_status;
+EXEC sp_addextendedproperty 'MS_Description', '鐢宠鍘熷洜', 'SCHEMA', dbo, 'table', inbound_order, 'column', application_reason;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', inbound_order, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', inbound_order, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鎿嶄綔鍛�', 'SCHEMA', dbo, 'table', inbound_order, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鐢宠鏃堕棿', 'SCHEMA', dbo, 'table', inbound_order, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', inbound_order, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', inbound_order, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[outbound_detail]') AND type in (N'U')) DROP TABLE [dbo].[outbound_detail];
+CREATE TABLE [dbo].[outbound_detail](
+    id VARCHAR(32) NOT NULL,
+    out_storehouse_id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    outbound_quantity DECIMAL(64) NOT NULL,
+    out_actual_count DECIMAL(64),
+    storage_location VARCHAR(64),
+    outbound_location VARCHAR(255),
+    out_status VARCHAR(32) NOT NULL,
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐢宠鏄庣粏', 'SCHEMA', dbo, 'table', outbound_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', outbound_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鍗曞彿', 'SCHEMA', dbo, 'table', outbound_detail, 'column', out_storehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏风紪鐮�', 'SCHEMA', dbo, 'table', outbound_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏风紪鍙�', 'SCHEMA', dbo, 'table', outbound_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鐢宠鍑哄簱鏁伴噺', 'SCHEMA', dbo, 'table', outbound_detail, 'column', outbound_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '瀹為檯鍑哄簱鏁伴噺', 'SCHEMA', dbo, 'table', outbound_detail, 'column', out_actual_count;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱', 'SCHEMA', dbo, 'table', outbound_detail, 'column', storage_location;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱搴撲綅', 'SCHEMA', dbo, 'table', outbound_detail, 'column', outbound_location;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚', 'SCHEMA', dbo, 'table', outbound_detail, 'column', out_status;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', outbound_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鎿嶄綔鍛�', 'SCHEMA', dbo, 'table', outbound_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鏃堕棿', 'SCHEMA', dbo, 'table', outbound_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', outbound_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', outbound_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[inbound_detail]') AND type in (N'U')) DROP TABLE [dbo].[inbound_detail];
+CREATE TABLE [dbo].[inbound_detail](
+    id VARCHAR(32) NOT NULL,
+    goods_shelves_id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    in_storage_quantity DECIMAL(64) NOT NULL,
+    in_actual_count DECIMAL(64),
+    out_status VARCHAR(32),
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鐢宠鏄庣粏', 'SCHEMA', dbo, 'table', inbound_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', inbound_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦鍙�/瀛樺偍浣嶇疆', 'SCHEMA', dbo, 'table', inbound_detail, 'column', goods_shelves_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', inbound_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', inbound_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏁伴噺', 'SCHEMA', dbo, 'table', inbound_detail, 'column', in_storage_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '瀹為檯鍏ュ簱鏁伴噺', 'SCHEMA', dbo, 'table', inbound_detail, 'column', in_actual_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐘舵��;1.鏈叆搴擄紱2.閮ㄥ垎鍏ュ簱锛�3.鍏ュ簱瀹屾垚', 'SCHEMA', dbo, 'table', inbound_detail, 'column', out_status;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', inbound_detail, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', inbound_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', inbound_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', inbound_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', inbound_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', inbound_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tools_config_property]') AND type in (N'U')) DROP TABLE [dbo].[tools_config_property];
+CREATE TABLE [dbo].[tools_config_property](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32) NOT NULL,
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    application_type INT NOT NULL,
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    tool_model VARCHAR(128) NOT NULL,
+    supplier_id VARCHAR(128),
+    province_city VARCHAR(255),
+    warehouse_id VARCHAR(128),
+    position_code VARCHAR(255),
+    storage_location VARCHAR(64),
+    main_unit VARCHAR(64),
+    auxiliary_unit VARCHAR(64),
+    main_count VARCHAR(255),
+    auxiliary_count VARCHAR(255),
+    auxiliary_unit_flag VARCHAR(8),
+    price DECIMAL,
+    lower_inventory DECIMAL,
+    highest_inventory VARCHAR,
+    status VARCHAR(6),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿閫氱敤鎬ц川--鍙傛暟', 'SCHEMA', dbo, 'table', tools_config_property, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', tools_config_property, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', tools_config_property, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', tools_config_property, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '鑻辨枃鍚嶇О', 'SCHEMA', dbo, 'table', tools_config_property, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿绫诲瀷;1.閫氱敤
+2.涓撶敤', 'SCHEMA', dbo, 'table', tools_config_property, 'column', application_type;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', tools_config_property, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', tools_config_property, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍘傚', 'SCHEMA', dbo, 'table', tools_config_property, 'column', supplier_id;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱鐪佷唤鍩庡競', 'SCHEMA', dbo, 'table', tools_config_property, 'column', province_city;
+EXEC sp_addextendedproperty 'MS_Description', '搴撳尯/搴撳彿', 'SCHEMA', dbo, 'table', tools_config_property, 'column', warehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', tools_config_property, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '瀛樺偍浣嶇疆锛堝亸閭d釜鍘傚尯鐨勫簱锛�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', storage_location;
+EXEC sp_addextendedproperty 'MS_Description', '璁¢噺涓诲崟浣�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', main_unit;
+EXEC sp_addextendedproperty 'MS_Description', '璁¢噺杈呭崟浣�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', auxiliary_unit;
+EXEC sp_addextendedproperty 'MS_Description', '璁¢噺涓诲崟浣嶆暟閲�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', main_count;
+EXEC sp_addextendedproperty 'MS_Description', '璁¢噺杈呭崟浣嶆暟閲�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', auxiliary_count;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁鏈夎閲忚緟鍗曚綅;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', auxiliary_unit_flag;
+EXEC sp_addextendedproperty 'MS_Description', '鍗曚环', 'SCHEMA', dbo, 'table', tools_config_property, 'column', price;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�浣庡簱瀛�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', lower_inventory;
+EXEC sp_addextendedproperty 'MS_Description', '鏈�楂樺簱瀛�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', highest_inventory;
+EXEC sp_addextendedproperty 'MS_Description', '鐘舵��;1.鍚敤
+2.鏈惎鐢�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', status;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', tools_config_property, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', tools_config_property, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', tools_config_property, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', tools_config_property, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[warehouse]') AND type in (N'U')) DROP TABLE [dbo].[warehouse];
+CREATE TABLE [dbo].[warehouse](
+    id VARCHAR(32) NOT NULL,
+    warehouse_id VARCHAR(255),
+    warehouse_name VARCHAR(128),
+    parent_id VARCHAR(64),
+    seq VARCHAR(255),
+    leaf_flag VARCHAR(6),
+    status VARCHAR(6),
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱绠$悊', 'SCHEMA', dbo, 'table', warehouse, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', warehouse, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱缂栧彿', 'SCHEMA', dbo, 'table', warehouse, 'column', warehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱鍚嶇О', 'SCHEMA', dbo, 'table', warehouse, 'column', warehouse_name;
+EXEC sp_addextendedproperty 'MS_Description', '鐖惰妭鐐圭紪鍙�', 'SCHEMA', dbo, 'table', warehouse, 'column', parent_id;
+EXEC sp_addextendedproperty 'MS_Description', '灞曠ず搴忓彿', 'SCHEMA', dbo, 'table', warehouse, 'column', seq;
+EXEC sp_addextendedproperty 'MS_Description', '鏄惁鍙跺瓙鑺傜偣;1鏄�2鍚�', 'SCHEMA', dbo, 'table', warehouse, 'column', leaf_flag;
+EXEC sp_addextendedproperty 'MS_Description', '鐘舵��;1.鍚敤锛�2.鍋滅敤', 'SCHEMA', dbo, 'table', warehouse, 'column', status;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', warehouse, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', warehouse, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', warehouse, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', warehouse, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', warehouse, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', warehouse, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[goods_shelves]') AND type in (N'U')) DROP TABLE [dbo].[goods_shelves];
+CREATE TABLE [dbo].[goods_shelves](
+    id VARCHAR(32) NOT NULL,
+    warehouse_id VARCHAR(32) NOT NULL,
+    location_code VARCHAR(255) NOT NULL,
+    storey VARCHAR(32) NOT NULL,
+    arrange VARCHAR(32) NOT NULL,
+    column_number VARCHAR(32) NOT NULL,
+    cells_num VARCHAR(32),
+    shelf_number VARCHAR(64),
+    shelf_name VARCHAR(64),
+    remark VARCHAR(128),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦绠$悊', 'SCHEMA', dbo, 'table', goods_shelves, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', goods_shelves, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱缂栧彿', 'SCHEMA', dbo, 'table', goods_shelves, 'column', warehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�', 'SCHEMA', dbo, 'table', goods_shelves, 'column', location_code;
+EXEC sp_addextendedproperty 'MS_Description', '灞傛暟', 'SCHEMA', dbo, 'table', goods_shelves, 'column', storey;
+EXEC sp_addextendedproperty 'MS_Description', '鎺掓暟', 'SCHEMA', dbo, 'table', goods_shelves, 'column', arrange;
+EXEC sp_addextendedproperty 'MS_Description', '鍒楁暟', 'SCHEMA', dbo, 'table', goods_shelves, 'column', column_number;
+EXEC sp_addextendedproperty 'MS_Description', '鏍兼暟;榛樿鍊间负1', 'SCHEMA', dbo, 'table', goods_shelves, 'column', cells_num;
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦缂栧彿', 'SCHEMA', dbo, 'table', goods_shelves, 'column', shelf_number;
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦鍚嶇О', 'SCHEMA', dbo, 'table', goods_shelves, 'column', shelf_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', goods_shelves, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', goods_shelves, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', goods_shelves, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', goods_shelves, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', goods_shelves, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', goods_shelves, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[in_store_detail]') AND type in (N'U')) DROP TABLE [dbo].[in_store_detail];
+CREATE TABLE [dbo].[in_store_detail](
+    id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    in_storehouse_type VARCHAR(32),
+    goods_shelves_id VARCHAR(32),
+    in_number DECIMAL(64),
+    in_storehouse_id VARCHAR(32),
+    operate_type VARCHAR(64),
+    inbound_time DATETIME(24),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏄庣粏琛�-鎻忚堪鍒�鍏峰瓨鏀俱�佸彂鐢熺殑鏁伴噺', 'SCHEMA', dbo, 'table', in_store_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', in_store_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', in_store_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', in_store_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍏ュ簱鏂瑰紡', 'SCHEMA', dbo, 'table', in_store_detail, 'column', in_storehouse_type;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�', 'SCHEMA', dbo, 'table', in_store_detail, 'column', goods_shelves_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏁伴噺', 'SCHEMA', dbo, 'table', in_store_detail, 'column', in_number;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鐢宠鍗曞彿', 'SCHEMA', dbo, 'table', in_store_detail, 'column', in_storehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鎿嶄綔鏂瑰紡;1.鎸夌敵璇峰崟
+2.鎵嬪伐鎿嶄綔', 'SCHEMA', dbo, 'table', in_store_detail, 'column', operate_type;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏃堕棿', 'SCHEMA', dbo, 'table', in_store_detail, 'column', inbound_time;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', in_store_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', in_store_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', in_store_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', in_store_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', in_store_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[out_store_detail]') AND type in (N'U')) DROP TABLE [dbo].[out_store_detail];
+CREATE TABLE [dbo].[out_store_detail](
+    id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    out_storehouse_type VARCHAR(32),
+    goods_shelves_code VARCHAR(64),
+    out_number DECIMAL(64) NOT NULL,
+    in_storehouse_id VARCHAR(128),
+    operate_type VARCHAR(64),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鎻忚堪鍑哄簱鐨勫簱浣嶃�佹暟閲忓叧绯昏〃', 'SCHEMA', dbo, 'table', out_store_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', out_store_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', out_store_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', out_store_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱绫诲瀷', 'SCHEMA', dbo, 'table', out_store_detail, 'column', out_storehouse_type;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�', 'SCHEMA', dbo, 'table', out_store_detail, 'column', goods_shelves_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鏁伴噺', 'SCHEMA', dbo, 'table', out_store_detail, 'column', out_number;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鐢宠鍗曞彿', 'SCHEMA', dbo, 'table', out_store_detail, 'column', in_storehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍑哄簱鎿嶄綔鏂瑰紡;1.鎸夌敵璇峰崟
+2.鎵嬪伐鎿嶄綔', 'SCHEMA', dbo, 'table', out_store_detail, 'column', operate_type;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', out_store_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', out_store_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', out_store_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', out_store_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', out_store_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[para_common_tool]') AND type in (N'U')) DROP TABLE [dbo].[para_common_tool];
+CREATE TABLE [dbo].[para_common_tool](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32),
+    tool_code VARCHAR(32),
+    sign_code VARCHAR(16),
+    chinese_name VARCHAR(128),
+    foreign_language_name VARCHAR(128),
+    standard_level VARCHAR(16),
+    standard_code VARCHAR(32),
+    position_code VARCHAR(255),
+    tool_model VARCHAR(255),
+    tool_material VARCHAR(255),
+    part_material VARCHAR(255),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鏍囪瘑', 'SCHEMA', dbo, 'table', para_common_tool, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', para_common_tool, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍒嗙被缂栧彿', 'SCHEMA', dbo, 'table', para_common_tool, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', para_common_tool, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴忓彿锛堟垨浼佷笟鍐呮簮鐮侊級', 'SCHEMA', dbo, 'table', para_common_tool, 'column', sign_code;
+EXEC sp_addextendedproperty 'MS_Description', '涓枃鍚嶇О', 'SCHEMA', dbo, 'table', para_common_tool, 'column', chinese_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶栨枃鍚嶇О', 'SCHEMA', dbo, 'table', para_common_tool, 'column', foreign_language_name;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯绾у埆', 'SCHEMA', dbo, 'table', para_common_tool, 'column', standard_level;
+EXEC sp_addextendedproperty 'MS_Description', '鏍囧噯鍙�', 'SCHEMA', dbo, 'table', para_common_tool, 'column', standard_code;
+EXEC sp_addextendedproperty 'MS_Description', '搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��', 'SCHEMA', dbo, 'table', para_common_tool, 'column', position_code;
+EXEC sp_addextendedproperty 'MS_Description', '鍨嬪彿/鍥惧彿', 'SCHEMA', dbo, 'table', para_common_tool, 'column', tool_model;
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏锋潗鏂�', 'SCHEMA', dbo, 'table', para_common_tool, 'column', tool_material;
+EXEC sp_addextendedproperty 'MS_Description', '闆朵欢鏉愭枡', 'SCHEMA', dbo, 'table', para_common_tool, 'column', part_material;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', para_common_tool, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', para_common_tool, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', para_common_tool, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', para_common_tool, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', para_common_tool, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', para_common_tool, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tool_sharpening]') AND type in (N'U')) DROP TABLE [dbo].[tool_sharpening];
+CREATE TABLE [dbo].[tool_sharpening](
+    id VARCHAR(32,32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32,32),
+    sharpening_time DATETIME(24) NOT NULL,
+    sharpening_result VARCHAR(255),
+    responsible_person VARCHAR(24),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鍒�鍏峰垉纾�', 'SCHEMA', dbo, 'table', tool_sharpening, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒冪(鏃堕棿', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', sharpening_time;
+EXEC sp_addextendedproperty 'MS_Description', '鍒冪(缁撴灉鍙婂缓璁�', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', sharpening_result;
+EXEC sp_addextendedproperty 'MS_Description', '璐d换浜�', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', responsible_person;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', tool_sharpening, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[loss_bound]') AND type in (N'U')) DROP TABLE [dbo].[loss_bound];
+CREATE TABLE [dbo].[loss_bound](
+    id VARCHAR(32) NOT NULL,
+    losser VARCHAR(64),
+    handler VARCHAR(64),
+    loss_time DATETIME(32),
+    reviewer VARCHAR(64),
+    approval_date DATETIME(255),
+    order_status VARCHAR(32),
+    approval_opinion VARCHAR(255),
+    loss_reason VARCHAR(255),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鎶ユ崯鍗�', 'SCHEMA', dbo, 'table', loss_bound, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯鍗曞彿', 'SCHEMA', dbo, 'table', loss_bound, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯浜�', 'SCHEMA', dbo, 'table', loss_bound, 'column', losser;
+EXEC sp_addextendedproperty 'MS_Description', '缁忔墜浜�', 'SCHEMA', dbo, 'table', loss_bound, 'column', handler;
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound, 'column', loss_time;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳浜�', 'SCHEMA', dbo, 'table', loss_bound, 'column', reviewer;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound, 'column', approval_date;
+EXEC sp_addextendedproperty 'MS_Description', '鍗曟嵁鐘舵��', 'SCHEMA', dbo, 'table', loss_bound, 'column', order_status;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃壒鎰忚', 'SCHEMA', dbo, 'table', loss_bound, 'column', approval_opinion;
+EXEC sp_addextendedproperty 'MS_Description', '鎹熶激鍘熷洜', 'SCHEMA', dbo, 'table', loss_bound, 'column', loss_reason;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', loss_bound, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', loss_bound, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', loss_bound, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', loss_bound, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[loss_bound_detail]') AND type in (N'U')) DROP TABLE [dbo].[loss_bound_detail];
+CREATE TABLE [dbo].[loss_bound_detail](
+    id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(128),
+    loss_reason VARCHAR(64),
+    loss_number DECIMAL(64) NOT NULL,
+    goods_shelves_id VARCHAR(64),
+    in_store_date DATETIME(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯鍗曟槑缁�', 'SCHEMA', dbo, 'table', loss_bound_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯鍘熷洜', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', loss_reason;
+EXEC sp_addextendedproperty 'MS_Description', '鎶ユ崯鏁伴噺', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', loss_number;
+EXEC sp_addextendedproperty 'MS_Description', '瀛樺偍浣嶇疆(搴撲綅鍙�)', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', goods_shelves_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍏ュ簱鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', in_store_date;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', loss_bound_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[stocktaking_bound]') AND type in (N'U')) DROP TABLE [dbo].[stocktaking_bound];
+CREATE TABLE [dbo].[stocktaking_bound](
+    id VARCHAR(255) NOT NULL,
+    stocktaking_type VARCHAR(255),
+    order_code VARCHAR(255),
+    handler VARCHAR(255),
+    reviewer VARCHAR(255),
+    stocktaking_name VARCHAR(255),
+    remark VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鐩樼偣鐢宠鍗�', 'SCHEMA', dbo, 'table', stocktaking_bound, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鐩樼偣绫诲瀷;1.鏄庣洏鐩樼偣
+2.鏆楃洏鐩樼偣', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', stocktaking_type;
+EXEC sp_addextendedproperty 'MS_Description', '鐩樼偣鍗曞彿', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', order_code;
+EXEC sp_addextendedproperty 'MS_Description', '缁忔墜浜�', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', handler;
+EXEC sp_addextendedproperty 'MS_Description', '瀹℃牳浜�', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', reviewer;
+EXEC sp_addextendedproperty 'MS_Description', '鐩樼偣鍚嶇О', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', stocktaking_name;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', stocktaking_bound, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[stocktaking_bound_detail]') AND type in (N'U')) DROP TABLE [dbo].[stocktaking_bound_detail];
+CREATE TABLE [dbo].[stocktaking_bound_detail](
+    id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(32),
+    goods_shelves_id VARCHAR(64),
+    book_quantity DATETIME(255),
+    available_quantity DATETIME(255),
+    practical_quantity DATETIME(255),
+    surplus_deficit VARCHAR(36),
+    stocktaking_date DATETIME(255),
+    remark VARCHAR(218),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '鐩樼偣鍗曟槑缁�', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '搴撳瓨鍙�', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', goods_shelves_id;
+EXEC sp_addextendedproperty 'MS_Description', '璐﹂潰鏁伴噺', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', book_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '鍙敤鏁伴噺', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', available_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '瀹炵洏鏁伴噺', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', practical_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '鐩樼泩鐩樹簭;1.鐩樼泩
+2.鐩樹簭', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', surplus_deficit;
+EXEC sp_addextendedproperty 'MS_Description', '鐩樺簱鏃堕棿', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', stocktaking_date;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', stocktaking_bound_detail, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[store_early warning]') AND type in (N'U')) DROP TABLE [dbo].[store_early warning];
+CREATE TABLE [dbo].[store_early warning](
+    id VARCHAR(32) NOT NULL,
+    tool_code VARCHAR(32) NOT NULL,
+    tool_id VARCHAR(64),
+    goods_shelves_id VARCHAR(32),
+    lower_inventory DECIMAL(64),
+    highest_inventory DECIMAL(64),
+    total_count DECIMAL(64),
+    available_quantity DECIMAL(64),
+    status VARCHAR(255),
+    remark VARCHAR(216),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '搴撳瓨棰勮', 'SCHEMA', dbo, 'table', store_early warning, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', store_early warning, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', store_early warning, 'column', tool_code;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栧彿', 'SCHEMA', dbo, 'table', store_early warning, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '瀛樺偍浣嶇疆', 'SCHEMA', dbo, 'table', store_early warning, 'column', goods_shelves_id;
+EXEC sp_addextendedproperty 'MS_Description', '搴撳瓨涓嬮檺', 'SCHEMA', dbo, 'table', store_early warning, 'column', lower_inventory;
+EXEC sp_addextendedproperty 'MS_Description', '搴撳瓨涓婇檺', 'SCHEMA', dbo, 'table', store_early warning, 'column', highest_inventory;
+EXEC sp_addextendedproperty 'MS_Description', '鎬诲簱瀛樻暟閲�', 'SCHEMA', dbo, 'table', store_early warning, 'column', total_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍙敤搴撳瓨鏁伴噺', 'SCHEMA', dbo, 'table', store_early warning, 'column', available_quantity;
+EXEC sp_addextendedproperty 'MS_Description', '鐘舵��;1宸插鐞嗭紱2.鏈鐞嗐��', 'SCHEMA', dbo, 'table', store_early warning, 'column', status;
+EXEC sp_addextendedproperty 'MS_Description', '澶囨敞', 'SCHEMA', dbo, 'table', store_early warning, 'column', remark;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', store_early warning, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', store_early warning, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', store_early warning, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', store_early warning, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', store_early warning, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[goods_shelves_mark]') AND type in (N'U')) DROP TABLE [dbo].[goods_shelves_mark];
+CREATE TABLE [dbo].[goods_shelves_mark](
+    id VARCHAR(32) NOT NULL,
+    warehouse_id VARCHAR(32) NOT NULL,
+    goods_shelves VARCHAR(32) NOT NULL,
+    storey VARCHAR(128) NOT NULL,
+    variety VARCHAR(255),
+    tenant_id VARCHAR,
+    created_by VARCHAR(32),
+    created_time DATETIME,
+    updated_by VARCHAR(32),
+    updated_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦灞傛帓搴撳瓨宸ュ叿鐗瑰緛鏍囨敞', 'SCHEMA', dbo, 'table', goods_shelves_mark, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '浠撳簱缂栧彿', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', warehouse_id;
+EXEC sp_addextendedproperty 'MS_Description', '璐ф灦缂栧彿', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', goods_shelves;
+EXEC sp_addextendedproperty 'MS_Description', '灞傛暟淇℃伅', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', storey;
+EXEC sp_addextendedproperty 'MS_Description', '鍝佺-鏍囨敞瀛樻斁鍒�鍏峰搧绉嶄俊鎭�', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', variety;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', created_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', created_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', updated_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', goods_shelves_mark, 'column', updated_time;
+
+IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tool_ledger]') AND type in (N'U')) DROP TABLE [dbo].[tool_ledger];
+CREATE TABLE [dbo].[tool_ledger](
+    id VARCHAR(32) NOT NULL,
+    classify_id VARCHAR(32),
+    tool_id VARCHAR(32),
+    total_count VARCHAR(64),
+    available_count VARCHAR(64),
+    loss_count VARCHAR(64),
+    repair_count VARCHAR(64),
+    detection_count VARCHAR(64),
+    lend_count VARCHAR(64),
+    sharpening_count VARCHAR(64),
+    tenant_id VARCHAR,
+    create_by VARCHAR(32),
+    create_time DATETIME,
+    update_by VARCHAR(32),
+    update_time DATETIME,
+    PRIMARY KEY (id)
+);
+
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿鍙拌处鏁版嵁琛�', 'SCHEMA', dbo, 'table', tool_ledger, null, null;
+EXEC sp_addextendedproperty 'MS_Description', '涓婚敭', 'SCHEMA', dbo, 'table', tool_ledger, 'column', id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒嗙被缂栫爜', 'SCHEMA', dbo, 'table', tool_ledger, 'column', classify_id;
+EXEC sp_addextendedproperty 'MS_Description', '宸ュ叿缂栫爜', 'SCHEMA', dbo, 'table', tool_ledger, 'column', tool_id;
+EXEC sp_addextendedproperty 'MS_Description', '鎬诲簱瀛�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', total_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍙敤搴撳瓨', 'SCHEMA', dbo, 'table', tool_ledger, 'column', available_count;
+EXEC sp_addextendedproperty 'MS_Description', '鎬绘姤鎹熸暟閲�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', loss_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍦ㄤ慨鏁伴噺', 'SCHEMA', dbo, 'table', tool_ledger, 'column', repair_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍦ㄦ鏁伴噺', 'SCHEMA', dbo, 'table', tool_ledger, 'column', detection_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍦ㄥ�熸暟閲�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', lend_count;
+EXEC sp_addextendedproperty 'MS_Description', '鍦ㄧ(鏁伴噺', 'SCHEMA', dbo, 'table', tool_ledger, 'column', sharpening_count;
+EXEC sp_addextendedproperty 'MS_Description', '绉熸埛鍙�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', tenant_id;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓浜�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', create_by;
+EXEC sp_addextendedproperty 'MS_Description', '鍒涘缓鏃堕棿', 'SCHEMA', dbo, 'table', tool_ledger, 'column', create_time;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊浜�', 'SCHEMA', dbo, 'table', tool_ledger, 'column', update_by;
+EXEC sp_addextendedproperty 'MS_Description', '鏇存柊鏃堕棿', 'SCHEMA', dbo, 'table', tool_ledger, 'column', update_time;
+
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InStoreDetailController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InStoreDetailController.java
new file mode 100644
index 0000000..7a7f587
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InStoreDetailController.java
@@ -0,0 +1,177 @@
+package org.jeecg.modules.tms.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.tms.entity.InStoreDetail;
+import org.jeecg.modules.tms.service.IInStoreDetailService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 鍏ュ簱鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Api(tags="鍏ュ簱鏄庣粏")
+@RestController
+@RequestMapping("/tms/inStoreDetail")
+@Slf4j
+public class InStoreDetailController extends JeecgController<InStoreDetail, IInStoreDetailService> {
+	@Autowired
+	private IInStoreDetailService inStoreDetailService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param inStoreDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes="鍏ュ簱鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<InStoreDetail>> queryPageList(InStoreDetail inStoreDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<InStoreDetail> queryWrapper = QueryGenerator.initQueryWrapper(inStoreDetail, req.getParameterMap());
+		Page<InStoreDetail> page = new Page<InStoreDetail>(pageNo, pageSize);
+		IPage<InStoreDetail> pageList = inStoreDetailService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param inStoreDetail
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鏄庣粏-娣诲姞")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-娣诲姞", notes="鍏ュ簱鏄庣粏-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules:tms_in_store_detail:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody InStoreDetail inStoreDetail) {
+		inStoreDetailService.save(inStoreDetail);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param inStoreDetail
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鏄庣粏-缂栬緫")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-缂栬緫", notes="鍏ュ簱鏄庣粏-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules:tms_in_store_detail:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody InStoreDetail inStoreDetail) {
+		inStoreDetailService.updateById(inStoreDetail);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鏄庣粏-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-閫氳繃id鍒犻櫎", notes="鍏ュ簱鏄庣粏-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_in_store_detail:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		inStoreDetailService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鏄庣粏-鎵归噺鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-鎵归噺鍒犻櫎", notes="鍏ュ簱鏄庣粏-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_in_store_detail:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.inStoreDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鏄庣粏-閫氳繃id鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鏄庣粏-閫氳繃id鏌ヨ", notes="鍏ュ簱鏄庣粏-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<InStoreDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		InStoreDetail inStoreDetail = inStoreDetailService.getById(id);
+		if(inStoreDetail==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(inStoreDetail);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param inStoreDetail
+    */
+    //@RequiresPermissions("org.jeecg.modules:tms_in_store_detail:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InStoreDetail inStoreDetail) {
+        return super.exportXls(request, inStoreDetail, InStoreDetail.class, "鍏ュ簱鏄庣粏");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("tms_in_store_detail:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InStoreDetail.class);
+    }
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundDetailController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundDetailController.java
new file mode 100644
index 0000000..217b4e3
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundDetailController.java
@@ -0,0 +1,174 @@
+package org.jeecg.modules.tms.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.tms.entity.InboundDetail;
+import org.jeecg.modules.tms.service.IInboundDetailService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 鍏ュ簱鐢宠鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Api(tags="鍏ュ簱鐢宠鏄庣粏")
+@RestController
+@RequestMapping("/tms/inboundDetail")
+@Slf4j
+public class InboundDetailController extends JeecgController<InboundDetail, IInboundDetailService> {
+	@Autowired
+	private IInboundDetailService inboundDetailService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param inboundDetail
+	 * @param pageNo
+	 * @param pageSize
+	 * @param query
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes="鍏ュ簱鐢宠鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(InboundDetail inboundDetail,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam Map<String, String> query) {
+		IPage<Map<String, Object>> pageList = inboundDetailService.findPageList(pageNo, pageSize, query);
+		return Result.ok(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param inboundDetail
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-娣诲姞")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-娣诲姞", notes="鍏ュ簱鐢宠鏄庣粏-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_detail:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody InboundDetail inboundDetail) {
+		inboundDetailService.save(inboundDetail);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param inboundDetail
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-缂栬緫")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-缂栬緫", notes="鍏ュ簱鐢宠鏄庣粏-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_detail:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody InboundDetail inboundDetail) {
+		inboundDetailService.updateById(inboundDetail);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-閫氳繃id鍒犻櫎", notes="鍏ュ簱鐢宠鏄庣粏-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_detail:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		inboundDetailService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-鎵归噺鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-鎵归噺鍒犻櫎", notes="鍏ュ簱鐢宠鏄庣粏-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_detail:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.inboundDetailService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鐢宠鏄庣粏-閫氳繃id鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鐢宠鏄庣粏-閫氳繃id鏌ヨ", notes="鍏ュ簱鐢宠鏄庣粏-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<InboundDetail> queryById(@RequestParam(name="id",required=true) String id) {
+		InboundDetail inboundDetail = inboundDetailService.getById(id);
+		if(inboundDetail==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(inboundDetail);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param inboundDetail
+    */
+    //@RequiresPermissions("org.jeecg.modules:tms_inbound_detail:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InboundDetail inboundDetail) {
+        return super.exportXls(request, inboundDetail, InboundDetail.class, "鍏ュ簱鐢宠鏄庣粏");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("tms_inbound_detail:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InboundDetail.class);
+    }
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundOrderController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundOrderController.java
new file mode 100644
index 0000000..6852a66
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/InboundOrderController.java
@@ -0,0 +1,237 @@
+package org.jeecg.modules.tms.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
+import org.jeecg.modules.tms.entity.InboundDetail;
+import org.jeecg.modules.tms.entity.InboundOrder;
+import org.jeecg.modules.tms.entity.dto.InboundOrderFlowDto;
+import org.jeecg.modules.tms.entity.dto.OutBoundOrderFlowDto;
+import org.jeecg.modules.tms.service.IInboundDetailService;
+import org.jeecg.modules.tms.service.IInboundOrderService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 鍏ュ簱鐢宠鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Api(tags="鍏ュ簱鐢宠鍗�")
+@RestController
+@RequestMapping("/tms/inboundOrder")
+@Slf4j
+public class InboundOrderController extends JeecgController<InboundOrder, IInboundOrderService> {
+	@Autowired
+	private IInboundOrderService inboundOrderService;
+
+	 @Autowired
+	 private IInboundDetailService inboundDetailService;
+
+
+	 @Autowired
+	 private ISysBusinessCodeRuleService businessCodeRuleService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param inboundOrder
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鐢宠鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-鍒嗛〉鍒楄〃鏌ヨ", notes="鍏ュ簱鐢宠鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<InboundOrder>> queryPageList(InboundOrder inboundOrder,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<InboundOrder> queryWrapper = QueryGenerator.initQueryWrapper(inboundOrder, req.getParameterMap());
+		Page<InboundOrder> page = new Page<InboundOrder>(pageNo, pageSize);
+		IPage<InboundOrder> pageList = inboundOrderService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   娣诲姞
+	 *
+	 * @param jSONObject
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鍗�-娣诲姞")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-娣诲姞", notes="鍏ュ簱鐢宠鍗�-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_order:add")
+	@PostMapping(value = "/add")
+	public Result<?> add(@RequestBody JSONObject jSONObject) {
+		InboundOrder inboundOrder = jSONObject.toJavaObject(InboundOrder.class);
+		inboundOrder.setOrderStatus("1");
+		inboundOrder.setInStatus("1");
+		inboundOrder.setInboundNum(businessCodeRuleService.generateBusinessCodeSeq("InBoundOrder"));
+		inboundOrderService.save(inboundOrder);
+		// 淇濆瓨鍏ュ簱鐢宠鍗曟槑缁嗘暟鎹�
+		JSONArray jsonArray = jSONObject.getJSONArray("detailData");
+		List<InboundDetail> list = jsonArray.toJavaList(InboundDetail.class);
+		for (int i = 0; i < list.size(); i++) {
+			InboundDetail temp = list.get(i);
+			temp.setInStorehouseId(inboundOrder.getId());
+			temp.setToolCode(temp.getToolCodeId());
+		}
+		inboundDetailService.saveBatch(list);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+	
+	/**
+	 *  缂栬緫
+	 *
+	 * @param jSONObject
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鍗�-缂栬緫")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-缂栬緫", notes="鍏ュ簱鐢宠鍗�-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_order:edit")
+	@PostMapping(value = "/edit")
+	public Result<?> edit(@RequestBody JSONObject jSONObject) {
+		InboundOrder inboundOrder = jSONObject.toJavaObject(InboundOrder.class);
+		inboundOrderService.updateById(inboundOrder);
+		// 鍒犻櫎鐢宠鍗曟槑缁嗘暟鎹�
+		inboundDetailService.deleteByInboundOrderId(inboundOrder.getId());
+		// 淇濆瓨鍏ュ簱鐢宠鍗曟槑缁嗘暟鎹�
+		JSONArray jsonArray = jSONObject.getJSONArray("detailData");
+		List<InboundDetail> list = jsonArray.toJavaList(InboundDetail.class);
+		for (int i = 0; i < list.size(); i++) {
+			InboundDetail temp = list.get(i);
+			temp.setInStorehouseId(inboundOrder.getId());
+			temp.setToolCode(temp.getToolCodeId());
+		}
+		inboundDetailService.saveOrUpdateBatch(list);
+		return Result.OK("鎿嶄綔鎴愬姛!");
+	}
+	
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鍗�-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-閫氳繃id鍒犻櫎", notes="鍏ュ簱鐢宠鍗�-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_order:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		inboundOrderService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "鍏ュ簱鐢宠鍗�-鎵归噺鍒犻櫎")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-鎵归噺鍒犻櫎", notes="鍏ュ簱鐢宠鍗�-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules:tms_inbound_order:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.inboundOrderService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+	
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "鍏ュ簱鐢宠鍗�-閫氳繃id鏌ヨ")
+	@ApiOperation(value="鍏ュ簱鐢宠鍗�-閫氳繃id鏌ヨ", notes="鍏ュ簱鐢宠鍗�-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<InboundOrder> queryById(@RequestParam(name="id",required=true) String id) {
+		InboundOrder inboundOrder = inboundOrderService.getById(id);
+		if(inboundOrder==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(inboundOrder);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param inboundOrder
+    */
+    //@RequiresPermissions("org.jeecg.modules:tms_inbound_order:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, InboundOrder inboundOrder) {
+        return super.exportXls(request, inboundOrder, InboundOrder.class, "鍏ュ簱鐢宠鍗�");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("tms_inbound_order:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, InboundOrder.class);
+    }
+
+	 /**
+	  *  鎻愪氦
+	  *
+	  * @param id
+	  * @return
+	  */
+	 @AutoLog(value = "鍏ュ簱鐢宠鍗�-鎻愪氦")
+	 @GetMapping(value = "/submit")
+	 public Result<String> submit(@RequestParam(name = "id") String id) {
+		 inboundOrderService.submit(id);
+		 return Result.OK("鎻愪氦鎴愬姛!");
+	 }
+
+	 @AutoLog(value = "瀹℃壒娴佺▼")
+	 @ApiOperation(value = "鍏ュ簱鐢宠鍗�-瀹℃壒娴佺▼", notes = "鍏ュ簱鐢宠鍗�-瀹℃壒娴佺▼")
+	 @PostMapping("/approval")
+	 public Result<?> approval(@RequestBody InboundOrderFlowDto inboundOrderFlowDto) {
+		 inboundOrderService.approvalProcess(inboundOrderFlowDto);
+		 return Result.OK("鎿嶄綔鎴愬姛");
+	 }
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InStoreDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InStoreDetail.java
new file mode 100644
index 0000000..1164ab7
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InStoreDetail.java
@@ -0,0 +1,94 @@
+package org.jeecg.modules.tms.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 鍏ュ簱鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("tms_in_store_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="tms_in_store_detail瀵硅薄", description="鍏ュ簱鏄庣粏")
+public class InStoreDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**宸ュ叿缂栫爜*/
+	@Excel(name = "宸ュ叿缂栫爜", width = 15)
+    @ApiModelProperty(value = "宸ュ叿缂栫爜")
+    private String toolCode;
+	/**宸ュ叿缂栧彿*/
+	@Excel(name = "宸ュ叿缂栧彿", width = 15)
+    @ApiModelProperty(value = "宸ュ叿缂栧彿")
+    private String toolId;
+	/**宸ュ叿鍏ュ簱鏂瑰紡*/
+	@Excel(name = "宸ュ叿鍏ュ簱鏂瑰紡", width = 15)
+    @ApiModelProperty(value = "宸ュ叿鍏ュ簱鏂瑰紡")
+    private String inStorehouseType;
+	/**搴撲綅鍙�*/
+	@Excel(name = "搴撲綅鍙�", width = 15)
+    @ApiModelProperty(value = "搴撲綅鍙�")
+    private String goodsShelvesId;
+	/**鍏ュ簱鏁伴噺*/
+	@Excel(name = "鍏ュ簱鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鏁伴噺")
+    private BigDecimal inNumber;
+	/**鍏ュ簱鐢宠鍗曞彿*/
+	@Excel(name = "鍏ュ簱鐢宠鍗曞彿", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鐢宠鍗曞彿")
+    private String inStorehouseId;
+	/**鍏ュ簱鎿嶄綔鏂瑰紡;1.鎸夌敵璇峰崟
+2.鎵嬪伐鎿嶄綔*/
+	@Excel(name = "鍏ュ簱鎿嶄綔鏂瑰紡;1.鎸夌敵璇峰崟 2.鎵嬪伐鎿嶄綔", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鎿嶄綔鏂瑰紡;1.鎸夌敵璇峰崟 2.鎵嬪伐鎿嶄綔")
+    private java.lang.String operateType;
+	/**鍏ュ簱鏃堕棿*/
+	@Excel(name = "鍏ュ簱鏃堕棿", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍏ュ簱鏃堕棿")
+    private Date inboundTime;
+	/**绉熸埛鍙�*/
+	@Excel(name = "绉熸埛鍙�", width = 15)
+    @ApiModelProperty(value = "绉熸埛鍙�")
+    private String tenantId;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundDetail.java
new file mode 100644
index 0000000..9569464
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundDetail.java
@@ -0,0 +1,97 @@
+package org.jeecg.modules.tms.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("tms_inbound_detail")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="tms_inbound_detail瀵硅薄", description="鍏ュ簱鐢宠鏄庣粏")
+public class InboundDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍏ュ簱鐢宠鍗曞彿*/
+	@Excel(name = "鍏ュ簱鐢宠鍗曞彿", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鐢宠鍗曞彿")
+    private String inStorehouseId;
+	/**璐ф灦鍙�/瀛樺偍浣嶇疆*/
+	@Excel(name = "璐ф灦鍙�/瀛樺偍浣嶇疆", width = 15)
+    @ApiModelProperty(value = "璐ф灦鍙�/瀛樺偍浣嶇疆")
+    private String goodsShelvesId;
+	/**宸ュ叿缂栫爜*/
+	@Excel(name = "宸ュ叿缂栫爜", width = 15)
+    @ApiModelProperty(value = "宸ュ叿缂栫爜")
+    private String toolCode;
+	/**宸ュ叿缂栧彿*/
+	@Excel(name = "宸ュ叿缂栧彿", width = 15)
+    @ApiModelProperty(value = "宸ュ叿缂栧彿")
+    private String toolId;
+	/**鍏ュ簱鏁伴噺*/
+	@Excel(name = "鍏ュ簱鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鏁伴噺")
+    private BigDecimal inStorageQuantity;
+    /**瀹為檯鍏ュ簱鏁伴噺*/
+    @Excel(name = "瀹為檯鍏ュ簱鏁伴噺", width = 15)
+    @ApiModelProperty(value = "瀹為檯鍏ュ簱鏁伴噺")
+    private BigDecimal inActualCount;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+	/**绉熸埛鍙�*/
+	@Excel(name = "绉熸埛鍙�", width = 15)
+    @ApiModelProperty(value = "绉熸埛鍙�")
+    private String tenantId;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+
+    @TableField(exist = false)
+    private String toolName;
+
+    @TableField(exist = false)
+    private String toolModel;
+
+    @TableField(exist = false)
+    private String inStorehouseType;
+
+    @TableField(exist = false)
+    private String toolCodeId;
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundOrder.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundOrder.java
new file mode 100644
index 0000000..880d4df
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/InboundOrder.java
@@ -0,0 +1,116 @@
+package org.jeecg.modules.tms.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("tms_inbound_order")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="tms_inbound_order瀵硅薄", description="鍏ュ簱鐢宠鍗�")
+public class InboundOrder implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭id")
+    private String id;
+	/**鍏ュ簱鍗曠紪鍙�*/
+	@Excel(name = "鍏ュ簱鍗曠紪鍙�", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鍗曠紪鍙�")
+    private String inboundNum;
+	/**鍏ュ簱鏃堕棿*/
+	@Excel(name = "鍏ュ簱鏃堕棿", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鍏ュ簱鏃堕棿")
+    private Date inboundTime;
+	/**鍏ュ簱绫诲瀷*/
+	@Excel(name = "鍏ュ簱绫诲瀷", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱绫诲瀷")
+    @Dict(dicCode = "in_storehouse_type")
+    private String inStorehouseType;
+	/**缁忔墜浜�*/
+	@Excel(name = "缁忔墜浜�", width = 15)
+    @ApiModelProperty(value = "缁忔墜浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String handler;
+	/**鍊熺敤鍗曞彿*/
+	@Excel(name = "鍊熺敤鍗曞彿", width = 15)
+    @ApiModelProperty(value = "鍊熺敤鍗曞彿")
+    private String borrowNum;
+	/**瀹℃牳浜�*/
+	@Excel(name = "瀹℃牳浜�", width = 15)
+    @ApiModelProperty(value = "瀹℃牳浜�")
+    @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname")
+    private String reviewer;
+	/**瀹℃牳鏃堕棿*/
+	@Excel(name = "瀹℃牳鏃堕棿", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "瀹℃牳鏃堕棿")
+    private Date approvalDate;
+	/**瀹℃牳鎰忚*/
+	@Excel(name = "瀹℃牳鎰忚", width = 15)
+    @ApiModelProperty(value = "瀹℃牳鎰忚")
+    private String approvalOpinion;
+	/**鍗曞瓙鐘舵��*/
+	@Excel(name = "鍗曞瓙鐘舵��", width = 15)
+    @ApiModelProperty(value = "鍗曞瓙鐘舵��")
+    @Dict(dicCode = "in_bill_status")
+    private String orderStatus;
+    /**鍏ュ簱鐘舵��*/
+    @Excel(name = "鍏ュ簱鐘舵��", width = 15)
+    @Dict(dicCode = "in_status")
+    @ApiModelProperty(value = "鍏ュ簱鐘舵��")
+    private String inStatus;
+	/**鐢宠鍘熷洜*/
+	@Excel(name = "鐢宠鍘熷洜", width = 15)
+    @ApiModelProperty(value = "鐢宠鍘熷洜")
+    private String applicationReason;
+	/**澶囨敞*/
+	@Excel(name = "澶囨敞", width = 15)
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+	/**绉熸埛鍙�*/
+	@Excel(name = "绉熸埛鍙�", width = 15)
+    @ApiModelProperty(value = "绉熸埛鍙�")
+    private String tenantId;
+	/**鎿嶄綔鍛�*/
+    @ApiModelProperty(value = "鎿嶄綔鍛�")
+    private String createBy;
+	/**鐢宠鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鐢宠鏃堕棿")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃堕棿*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    private Date updateTime;
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsConfigProperty.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsConfigProperty.java
index 7084df0..6740196 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsConfigProperty.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/ToolsConfigProperty.java
@@ -55,6 +55,7 @@
 	/**宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤*/
 	@Excel(name = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤", width = 15)
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
+    @Dict(dicCode = "application_type")
     private java.lang.String applicationType;
 	/**鏍囧噯绾у埆*/
 	@Excel(name = "鏍囧噯绾у埆", width = 15)
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/InboundOrderFlowDto.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/InboundOrderFlowDto.java
new file mode 100644
index 0000000..cc1fd08
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/dto/InboundOrderFlowDto.java
@@ -0,0 +1,12 @@
+package org.jeecg.modules.tms.entity.dto;
+
+import lombok.Data;
+import org.jeecg.modules.flowable.domain.vo.FlowTaskVo;
+
+@Data
+public class InboundOrderFlowDto extends FlowTaskVo {
+    //瀹℃壒鐘舵��
+    private String status;
+    //瀹℃壒鎰忚
+    private String approvalOpinion;
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java
index 96fa5bc..0ce3390 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java
@@ -59,6 +59,7 @@
 
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
     private String applicationType;
+    private String applicationTypeName;
 
     @ApiModelProperty(value = "鍘傚")
     private String supplierId;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java
index b68c4f8..0365f95 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
 
 import java.io.Serializable;
 
@@ -56,7 +57,9 @@
     private String positionCode;
 
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
+    @Dict(dicCode = "application_type")
     private String applicationType;
+    private String applicationTypeName;
 
     @ApiModelProperty(value = "鍘傚")
     private String supplierId;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java
index 48c3772..8315462 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java
@@ -59,6 +59,7 @@
 
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
     private String applicationType;
+    private String applicationTypeName;
 
     @ApiModelProperty(value = "鍘傚")
     private String supplierId;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java
index 119e077..b2a9781 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java
@@ -59,6 +59,7 @@
 
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
     private String applicationType;
+    private String applicationTypeName;
 
     @ApiModelProperty(value = "鍘傚")
     private String supplierId;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java
index d2698c4..304fcc5 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java
@@ -59,6 +59,7 @@
 
     @ApiModelProperty(value = "宸ュ叿绫诲瀷;1.閫氱敤 2.涓撶敤")
     private String applicationType;
+    private String applicationTypeName;
 
     @ApiModelProperty(value = "鍘傚")
     private String supplierId;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InStoreDetailMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InStoreDetailMapper.java
new file mode 100644
index 0000000..97177f1
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InStoreDetailMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.tms.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.tms.entity.InStoreDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鍏ュ簱鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface InStoreDetailMapper extends BaseMapper<InStoreDetail> {
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundDetailMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundDetailMapper.java
new file mode 100644
index 0000000..b81f687
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundDetailMapper.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.tms.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.tms.entity.InboundDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface InboundDetailMapper extends BaseMapper<InboundDetail> {
+
+    public IPage<Map<String, Object>> findPageList(IPage<Map> pageData, @Param(Constants.WRAPPER) Wrapper<Map> wrapper);
+
+    @Delete("delete from tms_inbound_detail where in_storehouse_id = #{inboundOrderId}")
+    public boolean deleteByInboundOrderId(@Param("inboundOrderId") String inboundOrderId);
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundOrderMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundOrderMapper.java
new file mode 100644
index 0000000..56662df
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/InboundOrderMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.tms.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.tms.entity.InboundOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface InboundOrderMapper extends BaseMapper<InboundOrder> {
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml
index 4d01ce4..4e099e2 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml
@@ -59,43 +59,47 @@
             t2.adapt_holder adaptHolder,
             t2.remark,
             t3.classify_id classifyNum,
-            t3.type_name classifyName
-            from tms_base_tools t
-        left join tms_tools_config_property t1 on t1.tool_code = t.id
-        left join tms_para_hole_tools t2 on t2.tool_code = t.id
-        left join tms_tools_classify t3 on t3.id = t.classify_id
-        ${ew.customSqlSegment}
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
+        from tms_base_tools t
+                 left join tms_tools_config_property t1 on t1.tool_code = t.id
+                 left join tms_para_hole_tools t2 on t2.tool_code = t.id
+                 left join tms_tools_classify t3 on t3.id = t.classify_id
+                 left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
+            ${ew.customSqlSegment}
     </select>
     <select id="paraCommonToolList" resultType="org.jeecg.modules.tms.entity.vo.ParaCommonToolVo">
-    select
-    t.id,
-    t.classify_id classifyId,
-    t.tool_code toolCode,
-    t.sign_code signCode,
-    t.chinese_name chineseName,
-    t.foreign_language_name foreignLanguageName,
-    t.standard_level standardLevel,
-    t.standard_code standardCode,
-    t.tool_model toolModel,
-    t.parama_table_name paramaTableName,
-    t1.application_type applicationType,
-    t1.supplier_id supplierId,
-    t1.province_city provinceCity,
-    t1.position_code positionCode,
-    t1.storage_location storageLocation,
-    t1.main_unit mainUnit,
-    t1.auxiliary_unit auxiliaryUnit,
-    t1.auxiliary_unit_flag auxiliaryUnitFlag,
-    t1.price,
-    t1.lower_inventory lowerInventory,
-    t1.highest_inventory highestInventory,
-    t3.classify_id classifyNum,
-    t3.type_name classifyName
-    from tms_base_tools t
-    left join tms_tools_config_property t1 on t1.tool_code = t.id
-    left join tms_tools_classify t3 on t3.id = t.classify_id
-    ${ew.customSqlSegment}
-</select>
+        select
+            t.id,
+            t.classify_id classifyId,
+            t.tool_code toolCode,
+            t.sign_code signCode,
+            t.chinese_name chineseName,
+            t.foreign_language_name foreignLanguageName,
+            t.standard_level standardLevel,
+            t.standard_code standardCode,
+            t.tool_model toolModel,
+            t.parama_table_name paramaTableName,
+            t1.application_type applicationType,
+            t1.supplier_id supplierId,
+            t1.province_city provinceCity,
+            t1.position_code positionCode,
+            t1.storage_location storageLocation,
+            t1.main_unit mainUnit,
+            t1.auxiliary_unit auxiliaryUnit,
+            t1.auxiliary_unit_flag auxiliaryUnitFlag,
+            t1.price,
+            t1.lower_inventory lowerInventory,
+            t1.highest_inventory highestInventory,
+            t3.classify_id classifyNum,
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
+        from tms_base_tools t
+                 left join tms_tools_config_property t1 on t1.tool_code = t.id
+                 left join tms_tools_classify t3 on t3.id = t.classify_id
+                 left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
+            ${ew.customSqlSegment}
+    </select>
     <select id="paraThreadingToolList" resultType="org.jeecg.modules.tms.entity.vo.ParaThreadingToolVo">
         SELECT
             t.id,
@@ -144,12 +148,14 @@
             t2.connection_aperture connectionAperture,
             t2.connecting_keyway connectingKeyway,
             t3.classify_id classifyNum,
-            t3.type_name classifyName
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
         FROM
             tms_base_tools t
                 LEFT JOIN tms_tools_config_property t1 ON t1.tool_code = t.id
                 LEFT JOIN tms_para_threading_tool t2 ON t2.tool_code = t.id
                 LEFT JOIN tms_tools_classify t3 ON t3.id = t.classify_id
+                left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
             ${ew.customSqlSegment}
     </select>
     <select id="paraMillToolList" resultType="org.jeecg.modules.tms.entity.vo.ParaMillToolVo">
@@ -209,12 +215,14 @@
             t2.pitch,
             t2.recently_diameter recentlyDiameter,
             t3.classify_id classifyNum,
-            t3.type_name classifyName
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
         FROM
             tms_base_tools t
                 LEFT JOIN tms_tools_config_property t1 ON t1.tool_code = t.id
                 LEFT JOIN tms_para_mill_tool t2 ON t2.tool_code = t.id
                 LEFT JOIN tms_tools_classify t3 ON t3.id = t.classify_id
+                left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
             ${ew.customSqlSegment}
     </select>
     <select id="paraTurningToolsList" resultType="org.jeecg.modules.tms.entity.vo.ParaTurningToolsVo">
@@ -278,12 +286,14 @@
             t2.blade_thickness bladeThickness,
             t2.min_diameter minDiameter,
             t3.classify_id classifyNum,
-            t3.type_name classifyName
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
         FROM
             tms_base_tools t
                 LEFT JOIN tms_tools_config_property t1 ON t1.tool_code = t.id
                 LEFT JOIN tms_para_turning_tools t2 ON t2.tool_code = t.id
                 LEFT JOIN tms_tools_classify t3 ON t3.id = t.classify_id
+                left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
             ${ew.customSqlSegment}
     </select>
     <select id="paraBladeList" resultType="org.jeecg.modules.tms.entity.vo.ParaBladeVo">
@@ -335,14 +345,17 @@
             t2.pitch,
             t2.min_internal_thread minInternalThread,
             t3.classify_id classifyNum,
-            t3.type_name classifyName
+            t3.type_name classifyName,
+            t4.item_text applicationTypeName
         FROM
             tms_base_tools t
                 LEFT JOIN tms_tools_config_property t1 ON t1.tool_code = t.id
                 LEFT JOIN tms_para_blade t2 ON t2.tool_code = t.id
                 LEFT JOIN tms_tools_classify t3 ON t3.id = t.classify_id
+                left join (select * from v_sys_dict where dict_code = 'application_type') t4 on t4.item_value = t1.application_type
             ${ew.customSqlSegment}
     </select>
+
     <select id="pageWithLedgerAndConfig" resultType="org.jeecg.modules.tms.entity.vo.StocktakingPoundVo">
         SELECT
         t.id,
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InStoreDetailMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InStoreDetailMapper.xml
new file mode 100644
index 0000000..d062ac9
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InStoreDetailMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.tms.mapper.InStoreDetailMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundDetailMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundDetailMapper.xml
new file mode 100644
index 0000000..4ef950a
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundDetailMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.tms.mapper.InboundDetailMapper">
+
+    <select id="findPageList" resultType="map" parameterType="String">
+        select
+            t1.id,
+            t3.id toolCodeId,
+            t1.in_storage_quantity inStorageQuantity,
+            t3.tool_code toolCode,
+            t3.chinese_name chineseName,
+            t3.tool_model toolModel,
+            t5.item_text applicationType
+            from tms_inbound_detail t1
+            left join tms_inbound_order t2 on t1.in_storehouse_id = t2.id
+            left join tms_base_tools t3 on t3.id = t1.tool_code
+            left join tms_tools_config_property t4 on t4.tool_code = t1.tool_code
+            left join (select * from v_sys_dict where dict_code = 'application_type') t5 on t5.item_value = t4.application_type
+            ${ew.customSqlSegment}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundOrderMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundOrderMapper.xml
new file mode 100644
index 0000000..241d212
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/InboundOrderMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.tms.mapper.InboundOrderMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInStoreDetailService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInStoreDetailService.java
new file mode 100644
index 0000000..625733c
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInStoreDetailService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.tms.service;
+
+import org.jeecg.modules.tms.entity.InStoreDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 鍏ュ簱鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface IInStoreDetailService extends IService<InStoreDetail> {
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundDetailService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundDetailService.java
new file mode 100644
index 0000000..ea88f9b
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundDetailService.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.tms.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.modules.tms.entity.InboundDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface IInboundDetailService extends IService<InboundDetail> {
+
+    IPage<Map<String, Object>> findPageList(Integer pageNo, Integer pageSize, Map<String, String> query);
+
+    public boolean deleteByInboundOrderId(String inboundOrderId);
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundOrderService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundOrderService.java
new file mode 100644
index 0000000..e8ac09e
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IInboundOrderService.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.tms.service;
+
+import org.jeecg.modules.tms.entity.InboundOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.tms.entity.dto.InboundOrderFlowDto;
+import org.jeecg.modules.tms.entity.dto.OutBoundOrderFlowDto;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+public interface IInboundOrderService extends IService<InboundOrder> {
+
+    boolean submit(String id);
+
+    void approvalProcess(InboundOrderFlowDto inboundOrderFlowDto);
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InStoreDetailServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InStoreDetailServiceImpl.java
new file mode 100644
index 0000000..ebbce68
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InStoreDetailServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.tms.service.impl;
+
+import org.jeecg.modules.tms.entity.InStoreDetail;
+import org.jeecg.modules.tms.mapper.InStoreDetailMapper;
+import org.jeecg.modules.tms.service.IInStoreDetailService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 鍏ュ簱鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Service
+public class InStoreDetailServiceImpl extends ServiceImpl<InStoreDetailMapper, InStoreDetail> implements IInStoreDetailService {
+
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundDetailServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundDetailServiceImpl.java
new file mode 100644
index 0000000..c40515c
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundDetailServiceImpl.java
@@ -0,0 +1,55 @@
+package org.jeecg.modules.tms.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang.StringUtils;
+import org.jeecg.common.exception.ExceptionCast;
+import org.jeecg.modules.tms.entity.InboundDetail;
+import org.jeecg.modules.tms.mapper.InboundDetailMapper;
+import org.jeecg.modules.tms.service.IInboundDetailService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鏄庣粏
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Service
+public class InboundDetailServiceImpl extends ServiceImpl<InboundDetailMapper, InboundDetail> implements IInboundDetailService {
+
+    @Override
+    public IPage<Map<String, Object>> findPageList(Integer pageNo, Integer pageSize, Map<String, String> query) {
+        if (pageNo == null || pageNo < 1 || pageSize == null || pageSize < 1) {
+            ExceptionCast.cast("鍙傛暟閿欒");
+        }
+        IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
+        QueryWrapper<Map> queryWrapper = Wrappers.query();
+        if (null != query) {
+            String inboundOrderId = query.get("inboundOrderId");
+            if (StringUtils.isNotBlank(inboundOrderId)) {
+                queryWrapper.eq("t1.in_storehouse_id", inboundOrderId);
+            }
+            // 鎺掑簭鍐欐硶
+            List<OrderItem> orderItems = new ArrayList<>();
+            orderItems.add(OrderItem.desc("t1.create_time"));
+            ((Page<Map>) pageData).setOrders(orderItems);
+        }
+        return super.getBaseMapper().findPageList(pageData,queryWrapper);
+    }
+
+    @Override
+    public boolean deleteByInboundOrderId(String inboundOrderId) {
+        return this.baseMapper.deleteByInboundOrderId(inboundOrderId);
+    }
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java
new file mode 100644
index 0000000..8eddc4a
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java
@@ -0,0 +1,209 @@
+package org.jeecg.modules.tms.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.flowable.engine.TaskService;
+import org.flowable.task.api.Task;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
+import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
+import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
+import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
+import org.jeecg.modules.flowable.service.IFlowDefinitionService;
+import org.jeecg.modules.flowable.service.IFlowTaskService;
+import org.jeecg.modules.tms.entity.InboundOrder;
+import org.jeecg.modules.tms.entity.dto.InboundOrderFlowDto;
+import org.jeecg.modules.tms.mapper.InboundOrderMapper;
+import org.jeecg.modules.tms.service.IInboundOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @Description: 鍏ュ簱鐢宠鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-05-19
+ * @Version: V1.0
+ */
+@Service("IInboundOrderService")
+public class InboundOrderServiceImpl extends ServiceImpl<InboundOrderMapper, InboundOrder> implements IInboundOrderService, FlowCallBackServiceI {
+
+    @Autowired
+    private FlowCommonService flowCommonService;
+    @Autowired
+    private IFlowDefinitionService flowDefinitionService;
+
+    @Autowired
+    private IFlowTaskService flowTaskService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private IFlowMyBusinessService flowMyBusinessService;
+    @Override
+    public boolean submit(String id) {
+        InboundOrder inboundOrder = this.getById(id);
+        //鍙戣捣瀹℃壒娴佺▼
+        this.triggerProcess(inboundOrder);
+        //鏇存柊鍏ュ簱鍗曞鎵圭姸鎬佷负宸叉彁浜�
+        inboundOrder.setOrderStatus("2");
+        this.updateById(inboundOrder);
+        return true;
+    }
+
+    /**
+     * 瑙﹀彂娴佺▼
+     *
+     * @param inboundOrder
+     * @return
+     */
+    public boolean triggerProcess(InboundOrder inboundOrder) {
+
+        flowCommonService.initActBusiness("鍏ュ簱鐢宠鍗曞彿锛�" + inboundOrder.getInboundNum()+"鍙戣捣瀹℃壒娴佺▼",
+                inboundOrder.getId(), "IInboundOrderService", "tool_in_storage", null);
+        Map<String, Object> variables = new HashMap<>();
+        variables.put("dataId", inboundOrder.getId());
+        variables.put("organization", "鏂板鍏ュ簱鐢宠鍗曢粯璁ゅ惎鍔ㄦ祦绋�");
+        variables.put("comment", "鏂板鍏ュ簱鐢宠鍗曢粯璁ゅ惎鍔ㄦ祦绋�");
+        variables.put("proofreading", true);
+        List<String> usernames = new ArrayList<>();
+        usernames.add(inboundOrder.getHandler());
+        variables.put("NextAssignee", usernames);
+        Result result = flowDefinitionService.startProcessInstanceByKey("tool_in_storage", variables);
+        return result.isSuccess();
+    }
+
+    @Override
+    public void afterFlowHandle(FlowMyBusiness business) {
+        business.getTaskNameId();//鎺ヤ笅鏉ュ鎵圭殑鑺傜偣
+        business.getValues();//鍓嶇浼犺繘鏉ョ殑鍙傛暟
+        business.getActStatus();
+    }
+
+    @Override
+    public Object getBusinessDataById(String dataId) {
+        return this.getById(dataId);
+    }
+
+    @Override
+    public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
+        return null;
+    }
+
+    @Override
+    public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
+        //涓氬姟鏄惁骞查娴佺▼锛屼笟鍔″共棰勶紝娴佺▼骞查锛屾寚瀹氫汉鍛樿繘琛屽鐞�
+        //鑾峰彇涓嬩竴姝ュ鐞嗕汉
+        Object object = values.get("NextAssignee");
+        return (List<String>) object;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void approvalProcess(InboundOrderFlowDto inboundOrderFlowDto) {
+        if (StrUtil.isBlank(inboundOrderFlowDto.getTaskId()) || StrUtil.isBlank(inboundOrderFlowDto.getDataId())) {
+            throw new JeecgBootException("闈炴硶鍙傛暟锛�");
+        }
+
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser user = getCurrentUser();
+        if (user == null || StrUtil.isBlank(user.getId())) {
+            throw new JeecgBootException("璐﹀彿涓嶅瓨鍦�");
+        }
+
+        //鑾峰彇鍏ュ簱鐢宠鍗曚俊鎭�
+        InboundOrder inboundOrder = getById(inboundOrderFlowDto.getDataId());
+        if (inboundOrder == null) {
+            throw new JeecgBootException("鏈壘鍒板搴旂殑鍑哄簱鐢宠鍗曪紒");
+        }
+
+        //鑾峰彇娴佺▼涓氬姟璁板綍
+        FlowMyBusiness flowMyBusiness = getFlowMyBusiness(inboundOrderFlowDto.getInstanceId());
+        if (flowMyBusiness == null) {
+            throw new JeecgBootException("娴佺▼璁板綍涓嶅瓨鍦�");
+        }
+
+        // 妫�鏌ョ敤鎴锋槸鍚︽湁鏉冮檺鎿嶄綔浠诲姟
+        if (!isUserAuthorized(flowMyBusiness, user)) {
+            throw new JeecgBootException("鐢ㄦ埛鏃犳潈鎿嶄綔姝や换鍔�");
+        }
+
+        // 璁ら浠诲姟
+        if (!claimTask(flowMyBusiness.getTaskId(), user)) {
+            throw new JeecgBootException("浠诲姟涓嶅瓨鍦ㄣ�佸凡瀹屾垚鎴栧凡琚粬浜鸿棰�");
+        }
+
+        //璁剧疆娴佺▼鍙橀噺
+        setupProcessVariables(inboundOrderFlowDto, inboundOrder, user);
+
+        //瀹屾垚娴佺▼浠诲姟
+        Result result = flowTaskService.complete(inboundOrderFlowDto);
+
+        //鏍规嵁浠诲姟瀹屾垚缁撴灉鏇存柊鐢宠鍗曠姸鎬�
+        if (result.isSuccess()) {
+            inboundOrder.setOrderStatus(inboundOrderFlowDto.getStatus());
+            if ("3".equals(inboundOrderFlowDto.getStatus())) {
+                inboundOrder.setInStatus("1");
+            }
+            inboundOrder.setReviewer(user.getUsername());
+            inboundOrder.setApprovalDate(new Date());
+            inboundOrder.setApprovalOpinion(inboundOrderFlowDto.getApprovalOpinion());
+            updateById(inboundOrder);
+        }
+    }
+
+    private LoginUser getCurrentUser() {
+        // 鑾峰彇褰撳墠璁よ瘉鐨勭櫥褰曠敤鎴蜂俊鎭�
+        Subject currentUser = SecurityUtils.getSubject();
+        if (currentUser != null && currentUser.isAuthenticated()) {
+            Object principal = currentUser.getPrincipal();
+            if (principal instanceof LoginUser) {
+                return (LoginUser) principal;
+            }
+        }
+        return null;
+    }
+
+    private FlowMyBusiness getFlowMyBusiness(String instanceId) {
+        List<FlowMyBusiness> businessList = flowMyBusinessService.list(
+                new LambdaQueryWrapper<FlowMyBusiness>().eq(FlowMyBusiness::getProcessInstanceId, instanceId));
+        return businessList.isEmpty() ? null : businessList.get(0);
+    }
+
+    private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
+        List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
+        return todoUsers != null && todoUsers.contains(user.getUsername());
+    }
+
+    private boolean claimTask(String taskId, LoginUser user) {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        if (task == null) {
+            return false;
+        }
+        if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
+            return false;
+        }
+        taskService.claim(taskId, user.getUsername());
+        return true;
+    }
+
+    private void setupProcessVariables(InboundOrderFlowDto inboundOrderFlowDto, InboundOrder inboundOrder, LoginUser user) {
+        if ("2".equals(inboundOrder.getOrderStatus()) && user.getUsername().equals(inboundOrder.getReviewer())) {
+            Map<String, Object> values = new HashMap<>();
+            values.put("dataId", inboundOrder.getId());
+            values.put("organization", inboundOrderFlowDto.getApprovalOpinion());
+            values.put("comment", inboundOrderFlowDto.getApprovalOpinion());
+            values.put("status", inboundOrderFlowDto.getStatus());
+            values.put("NextAssignee", Collections.singletonList(inboundOrder.getReviewer()));
+            inboundOrderFlowDto.setValues(values);
+        }
+    }
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java
index 8cabb60..d19e690 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/ToolsClassifyServiceImpl.java
@@ -78,7 +78,7 @@
         return this.baseMapper.queryPageList(page, queryWrapper);
     }
     public List<CommonGenericTree> loadTree() {
-        List<ToolsClassify> toolsClassifyList = this.list();
+        List<ToolsClassify> toolsClassifyList = this.lambdaQuery().orderByAsc(ToolsClassify::getId).list();
         List<CommonGenericTree> commonGenericTreeList = loadTree(toolsClassifyList);
         return commonGenericTreeList;
     }
@@ -88,20 +88,15 @@
         List<CommonGenericTree> list = new ArrayList<>();
         Map<String, CommonGenericTree> map = new HashMap<>();
         CommonGenericTree<ToolsClassify> node = new CommonGenericTree<>();
-        node.setKey("-1");
-        node.setTitle("宸ュ叿鍒嗙被");
-        node.setRField1("");
-        node.setRField2("");
-        node.setEntity(new ToolsClassify().setId("-1").setClassifyId("0").setTypeName("宸ュ叿鍒嗙被").setLeafFlag("2"));
-        list.add(node);
         if (CollectionUtils.isNotEmpty(toolsClassifyList)) {
             CommonGenericTree<ToolsClassify> tcNode;
+            CommonGenericTree<ToolsClassify> childNode;
             for (ToolsClassify tc : toolsClassifyList) {
-                if (StrUtils.isBlankOrNull(tc.getParentId()) || tc.getParentId().equals("-1")) {
+                ToolsClassify child = tc;
+                if (StrUtils.isBlankOrNull(tc.getParentId())) {
                     tcNode = new CommonGenericTree<>();
                     tcNode.setKey(tc.getId());
                     tcNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
-                    tcNode.setParentId(node.getKey());
                     tcNode.setIcon("");
                     tcNode.setType(1);
                     tcNode.setValue(tc.getId());
@@ -109,32 +104,23 @@
                     tcNode.setRField1(tc.getClassifyId());
                     tcNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
                     tcNode.setEntity(tc);
-                    node.addChildren(tcNode);
+                    list.add(tcNode);
                     map.put(tc.getId(), tcNode);
-                }
-            }
-            CommonGenericTree<ToolsClassify> childNode;
-            for (ToolsClassify tc : toolsClassifyList) {
-                ToolsClassify child = tc;
-                if (map.containsKey(child.getParentId())) {
-                    if (StrUtils.isBlankOrNull(tc.getParentId()) || tc.getParentId().equals("-1")) {
-                        toolsClassify = tc;
-                    } else {
-                        tcNode = map.get(child.getParentId());
-                        childNode = new CommonGenericTree<>();
-                        childNode.setKey(tc.getId());
-                        childNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
-                        childNode.setParentId(tc.getParentId());
-                        childNode.setIcon("");
-                        childNode.setType(0);
-                        childNode.setValue(tc.getId());
-                        childNode.setDisabled(CommonConstant.STATUS_0.equals(tc.getStatus()) ? true : false);
-                        childNode.setRField1(tc.getClassifyId());
-                        childNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
-                        childNode.setEntity(tc);
-                        tcNode.addChildren(childNode);
-                        map.put(child.getId(), childNode);
-                    }
+                } else {
+                    tcNode = map.get(child.getParentId());
+                    childNode = new CommonGenericTree<>();
+                    childNode.setKey(tc.getId());
+                    childNode.setTitle(tc.getClassifyId() + "/" + tc.getTypeName());
+                    childNode.setParentId(tc.getParentId());
+                    childNode.setIcon("");
+                    childNode.setType(0);
+                    childNode.setValue(tc.getId());
+                    childNode.setDisabled(CommonConstant.STATUS_0.equals(tc.getStatus()) ? true : false);
+                    childNode.setRField1(tc.getClassifyId());
+                    childNode.setRField2(getBaseParent(tc.getId(), 0).getClassifyId());
+                    childNode.setEntity(tc);
+                    tcNode.addChildren(childNode);
+                    map.put(child.getId(), childNode);
                 }
             }
         }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodePrinterUtils.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodePrinterUtils.java
new file mode 100644
index 0000000..bde5895
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodePrinterUtils.java
@@ -0,0 +1,74 @@
+package org.jeecg.modules.tms.utils;
+
+import javax.print.*;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import java.awt.print.*;
+import java.awt.image.BufferedImage;
+import java.awt.*;
+
+public class QrCodePrinterUtils implements Printable {
+
+    private final BufferedImage image;
+
+    public QrCodePrinterUtils(BufferedImage image) {
+        this.image = image;
+    }
+
+    /**
+     * 鎵撳嵃浜岀淮鐮�
+     */
+    public void print() {
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(this);
+
+        // 寮瑰嚭鎵撳嵃瀵硅瘽妗嗭紙鍙�夛級
+        if (job.printDialog()) {
+            try {
+                job.print();
+            } catch (PrinterException e) {
+                System.err.println("鎵撳嵃澶辫触: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * 瀹炵幇 Printable 鎺ュ彛鐨勬墦鍗版柟娉�
+     */
+    @Override
+    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
+        if (pageIndex > 0) {
+            return NO_SUCH_PAGE;
+        }
+
+        Graphics2D g2d = (Graphics2D) graphics;
+        g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
+
+        // 璁$畻灞呬腑鍧愭爣
+        double pageWidth = pageFormat.getImageableWidth();
+        double pageHeight = pageFormat.getImageableHeight();
+        double imgWidth = image.getWidth();
+        double imgHeight = image.getHeight();
+
+        double scale = Math.min(pageWidth / imgWidth, pageHeight / imgHeight);
+        g2d.scale(scale, scale);
+        g2d.drawImage(image, 0, 0, null);
+
+        return PAGE_EXISTS;
+    }
+
+    /**
+     * 浣跨敤榛樿鎵撳嵃鏈烘墦鍗帮紝涓嶅脊瀵硅瘽妗�
+     */
+    public static void noDialogPrint(){
+        BufferedImage qrImage = QrCodeUtils.generateQrCode("Silent Print", 300, 300);
+        QrCodePrinterUtils printer = new QrCodePrinterUtils(qrImage);
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(printer);
+        try {
+            job.print();
+        } catch (PrinterException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodeUtils.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodeUtils.java
new file mode 100644
index 0000000..34b9c38
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/utils/QrCodeUtils.java
@@ -0,0 +1,121 @@
+package org.jeecg.modules.tms.utils;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+
+import javax.print.*;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Copies;
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.awt.print.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class QrCodeUtils {
+    /**
+     * 鐢熸垚浜岀淮鐮佸浘鐗�
+     * @param content 浜岀淮鐮佸唴瀹�
+     * @param width   鍥剧墖瀹藉害
+     * @param height  鍥剧墖楂樺害
+     * @return BufferedImage 瀵硅薄
+     */
+    public static BufferedImage generateQrCode(String content, int width, int height) {
+        try {
+            Map<EncodeHintType, Object> hints = new HashMap<>();
+            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+            QRCodeWriter writer = new QRCodeWriter();
+            BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
+            return MatrixToImageWriter.toBufferedImage(bitMatrix);
+        } catch (Exception e) {
+            throw new RuntimeException("鐢熸垚浜岀淮鐮佸け璐�", e);
+        }
+    }
+
+    /**
+     * 鎵撳嵃浜岀淮鐮�
+     */
+    public static void printBarcode(final BufferedImage image) {
+        PrinterJob job = PrinterJob.getPrinterJob();
+
+        // 璁剧疆鎵撳嵃椤甸潰
+        PageFormat pf = job.defaultPage();
+        Paper paper = pf.getPaper();
+
+        // 璁剧疆绾稿紶澶у皬鍖归厤鏉″舰鐮佸浘鍍�
+        paper.setSize(image.getWidth(), image.getHeight() + 50);
+        paper.setImageableArea(0, 0, image.getWidth(), image.getHeight() + 50);
+        pf.setPaper(paper);
+
+        // 璁剧疆鎵撳嵃鍐呭
+        job.setPrintable(new Printable() {
+            @Override
+            public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
+                if (pageIndex > 0) {
+                    return NO_SUCH_PAGE;
+                }
+
+                Graphics2D g2d = (Graphics2D) graphics;
+                g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
+                g2d.drawImage(image, 0, 0, null);
+
+                return PAGE_EXISTS;
+            }
+        }, pf);
+
+        // 鏄剧ず鎵撳嵃瀵硅瘽妗�
+        if (job.printDialog()) {
+            try {
+                job.print();
+                JOptionPane.showMessageDialog(null, "鎵撳嵃浠诲姟宸插彂閫佸埌鎵撳嵃鏈�");
+            } catch (PrinterException e) {
+                JOptionPane.showMessageDialog(null, "鎵撳嵃澶辫触: " + e.getMessage());
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+    /**
+     * 榛樿鎵撳嵃鏈烘墦鍗颁簩缁寸爜
+     */
+    private static void printBarcode2(BufferedImage image) throws Exception {
+        // 1. 灏咮ufferedImage杞崲涓哄瓧鑺傛暟缁�
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        javax.imageio.ImageIO.write(image, "png", baos);
+        byte[] imageData = baos.toByteArray();
+
+        // 2. 鏌ユ壘鎵撳嵃鏈嶅姟
+        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
+        if (services.length == 0) {
+            throw new Exception("娌℃湁鎵惧埌鍙敤鐨勬墦鍗版満");
+        }
+
+        // 3. 閫夋嫨榛樿鎵撳嵃鏈�(涔熷彲浠ヨ鐢ㄦ埛閫夋嫨)
+        PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService();
+        if (defaultPrinter == null) {
+            defaultPrinter = services[0]; // 浣跨敤绗竴涓壘鍒扮殑鎵撳嵃鏈�
+        }
+
+        // 4. 鍒涘缓鎵撳嵃浣滀笟
+        DocPrintJob job = defaultPrinter.createPrintJob();
+
+        // 5. 璁剧疆鎵撳嵃灞炴��
+        PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
+        attributes.add(new Copies(1)); // 鎵撳嵃浠芥暟
+
+        // 6. 鍒涘缓鎵撳嵃鏂囨。
+        DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;
+        Doc doc = new SimpleDoc(new ByteArrayInputStream(imageData), flavor, null);
+
+        // 7. 鎵ц鎵撳嵃
+        job.print(doc, attributes);
+    }
+}

--
Gitblit v1.9.3