diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/1/0133ebeb5b54aed369d35ab277528534ef73f401 b/wms_pro/hd/.idea/sonarlint/issuestore/0/1/0133ebeb5b54aed369d35ab277528534ef73f401
new file mode 100644
index 00000000..89981295
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/0/1/0133ebeb5b54aed369d35ab277528534ef73f401
@@ -0,0 +1,13 @@
+
+t	java:S116"ZRename this field "measure_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ó«€øþÿÿÿÿ
+n	java:S116#"TRename this field "unit_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÖÙ§²þÿÿÿÿ
+n	java:S116("TRename this field "unit_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ìï¸£ûÿÿÿÿ
+m	java:S116-"XRename this field "qty_precision" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(“ž‹¼
+l	java:S1162"RRename this field "is_used" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ýÝüšùÿÿÿÿ
+i	java:S1167"TRename this field "create_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÿéÕÓ
+p	java:S116<"VRename this field "create_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ü–”…ýÿÿÿÿ
+p	java:S116A"VRename this field "create_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù‡¥™úÿÿÿÿ
+n	java:S116F"TRename this field "update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(áÛë™ûÿÿÿÿ
+p	java:S116K"VRename this field "update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¥ÖÃùÿÿÿÿ
+k	java:S116P"VRename this field "update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹€ÆÖ
+f	java:S116U"QRename this field "ext_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñ�½•
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/9/094339bed4ba4403f9b0c60c75ade3f6aa5e96bd b/wms_pro/hd/.idea/sonarlint/issuestore/0/9/094339bed4ba4403f9b0c60c75ade3f6aa5e96bd
new file mode 100644
index 00000000..53f0cc80
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/0/9/094339bed4ba4403f9b0c60c75ade3f6aa5e96bd
@@ -0,0 +1,9 @@
+
+Q
+java:S3740#"/Provide the parametrized type for this generic.(Ù�º�ÿÿÿÿÿ8È�’Øâ1
+L
+java:S3740-"/Provide the parametrized type for this generic.(ÑñûÝ8É�’Øâ1
+Q
+java:S37404"/Provide the parametrized type for this generic.(øž®½üÿÿÿÿ8É�’Øâ1
+k	java:S117#"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù�º�ÿÿÿÿÿ
+e	java:S117;"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‡ê¢h
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/b/0b7d19b44eabe0d51a7ebb8a0badcbec8bf1236c b/wms_pro/hd/.idea/sonarlint/issuestore/0/b/0b7d19b44eabe0d51a7ebb8a0badcbec8bf1236c
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b b/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b
new file mode 100644
index 00000000..0f45d7f8
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/0/c/0c6792b66c9573faf6f7f102bb584f282187174b
@@ -0,0 +1,11 @@
+
+u	java:S116%"[Rename this field "local_table_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÊÖµ…ùÿÿÿÿ
+p	java:S116*"VRename this field "api_address" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‚Ô›Ûÿÿÿÿÿ
+n	java:S116/"TRename this field "sync_type" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‡¨Á•üÿÿÿÿ
+t	java:S1164"ZRename this field "external_system" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ðÄ¤«üÿÿÿÿ
+q	java:S1169"WRename this field "mapping_json" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÔÎŽ¤ÿÿÿÿÿ
+s	java:S116>"YRename this field "last_update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ª¢À½ùÿÿÿÿ
+p	java:S116C"[Rename this field "last_update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ØÈ®ë
+u	java:S116H"[Rename this field "last_update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ˆŠÎ›þÿÿÿÿ
+B
+java:S1948N"&Make "dtos" transient or serializable.(´›¤d8«¸Èãá1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/0/f/0f9efa8480b10f9adaa49898a79423f2ab0f6c1f b/wms_pro/hd/.idea/sonarlint/issuestore/0/f/0f9efa8480b10f9adaa49898a79423f2ab0f6c1f
new file mode 100644
index 00000000..9520db27
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/0/f/0f9efa8480b10f9adaa49898a79423f2ab0f6c1f
@@ -0,0 +1,3 @@
+
+E
+java:S3740/"/Provide the parametrized type for this generic.(âðœ×
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/1/0/10e40d67bd7d0818c5483704f020703d1bef8378 b/wms_pro/hd/.idea/sonarlint/issuestore/1/0/10e40d67bd7d0818c5483704f020703d1bef8378
new file mode 100644
index 00000000..bffb945f
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/1/0/10e40d67bd7d0818c5483704f020703d1bef8378
@@ -0,0 +1,2 @@
+
+N	java:S106."9Replace this use of System.out or System.err by a logger.(¬²âƒ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/1/3/13dcb74adf880fa445de696c0054cd586cf8b27a b/wms_pro/hd/.idea/sonarlint/issuestore/1/3/13dcb74adf880fa445de696c0054cd586cf8b27a
new file mode 100644
index 00000000..b3b3d3cd
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/1/3/13dcb74adf880fa445de696c0054cd586cf8b27a
@@ -0,0 +1,28 @@
+
+q	java:S116"WRename this field "product_area" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(°²ìäþÿÿÿÿ
+p	java:S116 "VRename this field "material_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ã¤ªªúÿÿÿÿ
+r	java:S116$"XRename this field "material_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ôáÈéùÿÿÿÿ
+r	java:S116("XRename this field "material_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÇåËÊøÿÿÿÿ
+m	java:S116,"XRename this field "material_spec" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Êåÿ´
+n	java:S1160"YRename this field "material_model" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ªÕ‚º
+q	java:S1164"WRename this field "english_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(®�­øýÿÿÿÿ
+q	java:S1168"WRename this field "base_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Üéï¦üÿÿÿÿ
+n	java:S116<"YRename this field "assist_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�ŒÙË
+s	java:S116@"YRename this field "approve_fileno" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(»ááüùÿÿÿÿ
+m	java:S116D"SRename this field "print_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ªó�˜þÿÿÿÿ
+p	java:S116H"[Rename this field "material_type_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ç¸‚ê
+p	java:S116L"VRename this field "len_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ûÙøÞÿÿÿÿÿ
+n	java:S116\"YRename this field "weight_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(®Ð¡÷
+q	java:S116`"WRename this field "gross_weight" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(˜˜‹ýøÿÿÿÿ
+o	java:S116d"URename this field "net_weight" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¡‘ß×ùÿÿÿÿ
+n	java:S116h"YRename this field "cubage_unit_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ïûÖû
+i	java:S116p"TRename this field "create_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÿéÕÓ
+p	java:S116t"VRename this field "create_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ü–”…ýÿÿÿÿ
+p	java:S116x"VRename this field "create_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù‡¥™úÿÿÿÿ
+n	java:S116|"TRename this field "update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(áÛë™ûÿÿÿÿ
+q	java:S116€"VRename this field "update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¥ÖÃùÿÿÿÿ
+l	java:S116„"VRename this field "update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹€ÆÖ
+m	java:S116ˆ"WRename this field "is_used_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(èÇÎù
+m	java:S116Œ"RRename this field "is_used" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ýÝüšùÿÿÿÿ
+j	java:S116�"TRename this field "is_delete" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�¬¿û
+g	java:S116”"QRename this field "ext_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñ�½•
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/1/5/15440390b143518a793fd475726cbb96e5d1efa0 b/wms_pro/hd/.idea/sonarlint/issuestore/1/5/15440390b143518a793fd475726cbb96e5d1efa0
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/1/b/1bd0fad6108c13d02e39735b623b7af835725dc9 b/wms_pro/hd/.idea/sonarlint/issuestore/1/b/1bd0fad6108c13d02e39735b623b7af835725dc9
new file mode 100644
index 00000000..d3937d77
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/1/b/1bd0fad6108c13d02e39735b623b7af835725dc9
@@ -0,0 +1,24 @@
+
+v	java:S116!"\Rename this field "storagevehicle_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¤é®úÿÿÿÿ
+r	java:S116&"^Rename this field "storagevehicle_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(µ¤«@
+s	java:S116+"^Rename this field "storagevehicle_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Æ€ºÁ
+h	java:S1160"SRename this field "one_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ƒ¾Ñ©
+m	java:S1165"SRename this field "two_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(œºµÁûÿÿÿÿ
+i	java:S116:"TRename this field "rfid_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ó�ôá
+i	java:S116?"TRename this field "create_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÿéÕÓ
+p	java:S116D"VRename this field "create_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ü–”…ýÿÿÿÿ
+p	java:S116I"VRename this field "create_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù‡¥™úÿÿÿÿ
+n	java:S116N"TRename this field "update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(áÛë™ûÿÿÿÿ
+p	java:S116S"VRename this field "update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¥ÖÃùÿÿÿÿ
+k	java:S116X"VRename this field "update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹€ÆÖ
+l	java:S116^"RRename this field "is_used" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ýÝüšùÿÿÿÿ
+s	java:S116c"^Rename this field "storagevehicle_type" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(éµØÇ
+l	java:S116h"XRename this field "vehicle_width" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ÿ£Éd
+m	java:S116n"YRename this field "vehicle_weight" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(˜›Üj
+q	java:S116t"WRename this field "vehicle_long" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñõ�’þÿÿÿÿ
+m	java:S116y"YRename this field "vehicle_height" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(›¾öI
+t	java:S116~"ZRename this field "overstruct_type" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ñ›Òñøÿÿÿÿ
+q	java:S116ƒ"[Rename this field "occupystruct_qty" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù¾×…
+g	java:S116ˆ"QRename this field "ext_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñ�½•
+A
+java:S1128"+Remove this unused import 'java.util.Date'.(¸…¼ü
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/2/a/2ad3fe4ba54e76946b9064e2e10aa26f43f04b61 b/wms_pro/hd/.idea/sonarlint/issuestore/2/a/2ad3fe4ba54e76946b9064e2e10aa26f43f04b61
new file mode 100644
index 00000000..f5e84c76
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/2/a/2ad3fe4ba54e76946b9064e2e10aa26f43f04b61
@@ -0,0 +1,4 @@
+
+Q
+java:S3740"/Provide the parametrized type for this generic.(µ‚Âòüÿÿÿÿ8�‘’Øâ1
+k	java:S117"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(µ‚Âòüÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/3/8/3828de74f3f9d1252984dd2c3524e61bc6632160 b/wms_pro/hd/.idea/sonarlint/issuestore/3/8/3828de74f3f9d1252984dd2c3524e61bc6632160
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/3/9/393731eb48daaa1a5f73e039a1985a2f2e7261dd b/wms_pro/hd/.idea/sonarlint/issuestore/3/9/393731eb48daaa1a5f73e039a1985a2f2e7261dd
new file mode 100644
index 00000000..ce8b944b
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/3/9/393731eb48daaa1a5f73e039a1985a2f2e7261dd
@@ -0,0 +1,4 @@
+
+y	java:S116"dRename this field "storagevehicle_code_begin" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(æñÈñ
+|	java:S116"bRename this field "storagevehicle_code_end" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�å�Éþÿÿÿÿ
+s	java:S116"^Rename this field "storagevehicle_type" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(éµØÇ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/0/400fbf00a1743bc1972994d7dffce150f50044f7 b/wms_pro/hd/.idea/sonarlint/issuestore/4/0/400fbf00a1743bc1972994d7dffce150f50044f7
new file mode 100644
index 00000000..d43fefd4
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/4/0/400fbf00a1743bc1972994d7dffce150f50044f7
@@ -0,0 +1,4 @@
+
+u	java:S116"[Rename this field "local_table_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÊÖµ…ùÿÿÿÿ
+�
+java:S1128"dRemove this unused import 'org.nl.wms.base_manage.field_mapping.service.dao.BmExternalFieldMapping'.(¨˜˜ž8¾£âæá1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/8/484515574155d74e2c0fb2f642d010e81da02c12 b/wms_pro/hd/.idea/sonarlint/issuestore/4/8/484515574155d74e2c0fb2f642d010e81da02c12
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8 b/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
new file mode 100644
index 00000000..719377ba
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
@@ -0,0 +1,3 @@
+
+k	java:S117I"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(„›îÿøÿÿÿÿ
+k	java:S117N"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÈÞÐ‚úÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/c/4c8cfb9f6e3870061053a6e1c2ed8f7913178d04 b/wms_pro/hd/.idea/sonarlint/issuestore/4/c/4c8cfb9f6e3870061053a6e1c2ed8f7913178d04
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/4/f/4fc9e6b89767bdae6bb64ea2eb8bdc73585e739c b/wms_pro/hd/.idea/sonarlint/issuestore/4/f/4fc9e6b89767bdae6bb64ea2eb8bdc73585e739c
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/5/7/57797c323a45bc67208d3507e8b58517d306782a b/wms_pro/hd/.idea/sonarlint/issuestore/5/7/57797c323a45bc67208d3507e8b58517d306782a
new file mode 100644
index 00000000..7fc4e2dc
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/5/7/57797c323a45bc67208d3507e8b58517d306782a
@@ -0,0 +1,2 @@
+
+u	java:S116"[Rename this field "local_table_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÊÖµ…ùÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/5/c/5cf8db646567d767805c9e2c9d75f48bf84445e6 b/wms_pro/hd/.idea/sonarlint/issuestore/5/c/5cf8db646567d767805c9e2c9d75f48bf84445e6
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/5/e/5e792c3d58824a1b5f4e3d3d409be838f13c2ea8 b/wms_pro/hd/.idea/sonarlint/issuestore/5/e/5e792c3d58824a1b5f4e3d3d409be838f13c2ea8
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/0/600228c110448d16e5738c74733e1807e77f1b53 b/wms_pro/hd/.idea/sonarlint/issuestore/6/0/600228c110448d16e5738c74733e1807e77f1b53
new file mode 100644
index 00000000..3a85a54c
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/6/0/600228c110448d16e5738c74733e1807e77f1b53
@@ -0,0 +1,32 @@
+
+E
+java:S37400"/Provide the parametrized type for this generic.(Ðòö¬
+o
+java:S11927"TDefine a constant instead of duplicating this literal "storagevehicle_code" 3 times.(˜Œ©•þÿÿÿÿ
+k	java:S117."QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(±ÛŸÚúÿÿÿÿ
+g	java:S117�"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¨Ôý�
+x
+java:S1488‹"\Immediately return this expression instead of assigning it to the temporary variable "list".(„Ÿ§îûÿÿÿÿ
+
+java:S1488Ï"\Immediately return this expression instead of assigning it to the temporary variable "json".(ÝÙÌÙýÿÿÿÿ8Ÿ™ôêá1
+]	java:S125("<This block of commented-out lines of code should be removed.(Þ¬§¬ýÿÿÿÿ8Áü‚ëá1
+Z
+java:S1854>"8Remove this useless assignment to local variable "code".(ÄÁœøþÿÿÿÿ8÷¯‚ëá1
+Z
+java:S1854A"8Remove this useless assignment to local variable "code".(Š¹–×üÿÿÿÿ8÷¯‚ëá1
+Z
+java:S1854D"8Remove this useless assignment to local variable "code".(ãÜ½÷ûÿÿÿÿ8÷¯‚ëá1
+U
+java:S1854G"8Remove this useless assignment to local variable "code".(Ã‡¶Ç8÷¯‚ëá1
+U
+java:S1854J"8Remove this useless assignment to local variable "code".(”„¾Ï8÷¯‚ëá1
+Z
+java:S1854M"8Remove this useless assignment to local variable "code".(¥•ì°úÿÿÿÿ8÷¯‚ëá1
+F
+java:S1481;")Remove this unused "code" local variable.(²çÎÒ8ù¯‚ëá1
+<	java:S131<""Add a default case to this switch.(¢¸áËþÿÿÿÿ
+X	java:S125U"<This block of commented-out lines of code should be removed.(–«ö†8ú¯‚ëá1
+X	java:S125e"<This block of commented-out lines of code should be removed.(„ì®à8’ï�ëá1
+=	java:S131´""Add a default case to this switch.(�«ü”ùÿÿÿÿ
+Y	java:S125Ì"<This block of commented-out lines of code should be removed.(À‡®ä8´Íôêá1
+^	java:S125Ð"<This block of commented-out lines of code should be removed.(Ä´×”ùÿÿÿÿ8»™ôêá1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943 b/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943
new file mode 100644
index 00000000..3f8b72a5
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/6/3/6380d92563f750329b625bda0586fc4ba3b71943
@@ -0,0 +1,2 @@
+
+r	java:S117A"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¾Ì˜Ñûÿÿÿÿ8â¢Àâá1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/5/659d014d87cf2cb817ac8aa861692dafad6985ad b/wms_pro/hd/.idea/sonarlint/issuestore/6/5/659d014d87cf2cb817ac8aa861692dafad6985ad
new file mode 100644
index 00000000..3831085a
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/6/5/659d014d87cf2cb817ac8aa861692dafad6985ad
@@ -0,0 +1,14 @@
+
+J
+java:S3740I"/Provide the parametrized type for this generic.(®åëÝúÿÿÿÿ
+`
+java:S1192,"JDefine a constant instead of duplicating this literal "cust_code" 3 times.(óÚ‹Ü
+f	java:S117,"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(óÚ‹Ü
+k	java:S117O"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(í¤ÐÜüÿÿÿÿ
+k	java:S117T"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¦öµôúÿÿÿÿ
+f	java:S117Y"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Œôª–
+k	java:S117Z"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(�˜‚Ùüÿÿÿÿ
+n
+java:S3252P"LUse static access with "cn.hutool.core.text.CharSequenceUtil" for "isEmpty".(Ä“ò˜ùÿÿÿÿ8Ÿ¦Žéá1
+n
+java:S3252U"LUse static access with "cn.hutool.core.text.CharSequenceUtil" for "isEmpty".(ž¥¨½úÿÿÿÿ8Ÿ¦Žéá1
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/a/6a0eb843818d8343bd44f2eb6fb96a2a17ad511d b/wms_pro/hd/.idea/sonarlint/issuestore/6/a/6a0eb843818d8343bd44f2eb6fb96a2a17ad511d
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/6/b/6b42b2e9bd0103ce4b84ace62d3bb90c20fcbc63 b/wms_pro/hd/.idea/sonarlint/issuestore/6/b/6b42b2e9bd0103ce4b84ace62d3bb90c20fcbc63
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/7/9/796d922b8f48974be99c1f691627d6ead93d3114 b/wms_pro/hd/.idea/sonarlint/issuestore/7/9/796d922b8f48974be99c1f691627d6ead93d3114
new file mode 100644
index 00000000..4699dfa9
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/7/9/796d922b8f48974be99c1f691627d6ead93d3114
@@ -0,0 +1,2 @@
+
+k	java:S117""QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ŠŒôŽúÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/5/85dbedfade54927efe168608601c3aefd87bec15 b/wms_pro/hd/.idea/sonarlint/issuestore/8/5/85dbedfade54927efe168608601c3aefd87bec15
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/9/89eeb13258719f34694cb541337f127c3bcaeda1 b/wms_pro/hd/.idea/sonarlint/issuestore/8/9/89eeb13258719f34694cb541337f127c3bcaeda1
new file mode 100644
index 00000000..52b27263
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/8/9/89eeb13258719f34694cb541337f127c3bcaeda1
@@ -0,0 +1,3 @@
+
+G
+java:S1602B",Remove useless curly braces around statement(ÒÌâ–øÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/c/8c15afe3f84fae04db4771870c3d8152dc6112b7 b/wms_pro/hd/.idea/sonarlint/issuestore/8/c/8c15afe3f84fae04db4771870c3d8152dc6112b7
new file mode 100644
index 00000000..55b46039
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/8/c/8c15afe3f84fae04db4771870c3d8152dc6112b7
@@ -0,0 +1,24 @@
+
+g	java:S116"RRename this field "cust_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¾Òê¯
+i	java:S116""TRename this field "cust_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(âÌ“�
+n	java:S116'"TRename this field "cust_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¢ê’›úÿÿÿÿ
+j	java:S116,"URename this field "jurid_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(­�÷Ê
+k	java:S1161"QRename this field "tax_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¨õÃ»ýÿÿÿÿ
+p	java:S1166"VRename this field "register_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(á¹Ô�ýÿÿÿÿ
+s	java:S116;"YRename this field "manage_lice_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ò†æàÿÿÿÿÿ
+n	java:S116@"YRename this field "busi_char_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ò½ í
+l	java:S116E"RRename this field "area_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù”€Ýøÿÿÿÿ
+m	java:S116J"SRename this field "zip_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¡î¹•ûÿÿÿÿ
+l	java:S116O"WRename this field "corp_tele_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ŸˆÊ¿
+q	java:S116T"WRename this field "corp_address" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(«Àèëøÿÿÿÿ
+i	java:S116Y"TRename this field "create_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÿéÕÓ
+p	java:S116^"VRename this field "create_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ü–”…ýÿÿÿÿ
+p	java:S116c"VRename this field "create_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù‡¥™úÿÿÿÿ
+n	java:S116h"TRename this field "update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(áÛë™ûÿÿÿÿ
+p	java:S116m"VRename this field "update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¥ÖÃùÿÿÿÿ
+k	java:S116r"VRename this field "update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹€ÆÖ
+l	java:S116w"WRename this field "is_used_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(èÇÎù
+g	java:S116|"RRename this field "is_used" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(üÙîË
+o	java:S116�"TRename this field "is_delete" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ñƒä†ÿÿÿÿÿ
+g	java:S116†"QRename this field "ext_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñ�½•
+i	java:S116�"SRename this field "class_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¹¶üž
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/8/d/8d5ad7519a7c25dad5b9ac989ab15bddd38c1744 b/wms_pro/hd/.idea/sonarlint/issuestore/8/d/8d5ad7519a7c25dad5b9ac989ab15bddd38c1744
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3 b/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
new file mode 100644
index 00000000..ef8a8000
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
@@ -0,0 +1,5 @@
+
+k	java:S117]"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(·ð¬’ûÿÿÿÿ
+f	java:S117a"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(àì�µ
+d
+java:S3252b"OUse static access with "cn.hutool.core.text.CharSequenceUtil" for "isNotBlank".(Š�Õq
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/9/6/962216bab28ad31a04e330ae84fc8491b73be9eb b/wms_pro/hd/.idea/sonarlint/issuestore/9/6/962216bab28ad31a04e330ae84fc8491b73be9eb
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/9/d/9de12ba5bf4d57379fd943ac5f598bff5f7e9b09 b/wms_pro/hd/.idea/sonarlint/issuestore/9/d/9de12ba5bf4d57379fd943ac5f598bff5f7e9b09
new file mode 100644
index 00000000..4a3be00b
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/9/d/9de12ba5bf4d57379fd943ac5f598bff5f7e9b09
@@ -0,0 +1,5 @@
+
+J
+java:S3740T"/Provide the parametrized type for this generic.(Þâþøúÿÿÿÿ
+G
+java:S1602K",Remove useless curly braces around statement(½ÃÇàüÿÿÿÿ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/a/4/a47ce58066d26fa89d378900d3c7057e934eea66 b/wms_pro/hd/.idea/sonarlint/issuestore/a/4/a47ce58066d26fa89d378900d3c7057e934eea66
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/a/7/a7241c86cb8a37ed0ceeb0177d553b8d09139e0f b/wms_pro/hd/.idea/sonarlint/issuestore/a/7/a7241c86cb8a37ed0ceeb0177d553b8d09139e0f
new file mode 100644
index 00000000..dcaf95fb
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/a/7/a7241c86cb8a37ed0ceeb0177d553b8d09139e0f
@@ -0,0 +1,3 @@
+
+—
+java:S11864"€Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.(‘“çÂ
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/a/8/a8ae509ac1fa3c77b43dddd6cf62c4d5b1bda604 b/wms_pro/hd/.idea/sonarlint/issuestore/a/8/a8ae509ac1fa3c77b43dddd6cf62c4d5b1bda604
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/b/0/b0de42f7cfd8eba26add38c170ecd5ad35938d74 b/wms_pro/hd/.idea/sonarlint/issuestore/b/0/b0de42f7cfd8eba26add38c170ecd5ad35938d74
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/c/f/cfb3b9e8e5934039226c5f151fead52f255d3821 b/wms_pro/hd/.idea/sonarlint/issuestore/c/f/cfb3b9e8e5934039226c5f151fead52f255d3821
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/d/f/df8b3befbd76ade64ad578e8f836ebe7dc24a98f b/wms_pro/hd/.idea/sonarlint/issuestore/d/f/df8b3befbd76ade64ad578e8f836ebe7dc24a98f
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4862e0547db5b758eaf94b49e5b6e4f938c0b99 b/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4862e0547db5b758eaf94b49e5b6e4f938c0b99
new file mode 100644
index 00000000..83ba6d7c
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/e/4/e4862e0547db5b758eaf94b49e5b6e4f938c0b99
@@ -0,0 +1,28 @@
+
+l	java:S116"RRename this field "supp_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¹‰çèýÿÿÿÿ
+h	java:S116"TRename this field "supp_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(„úàA
+n	java:S116#"TRename this field "supp_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(®ÚÜåýÿÿÿÿ
+j	java:S116("URename this field "jurid_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(­�÷Ê
+k	java:S116-"QRename this field "tax_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¨õÃ»ýÿÿÿÿ
+p	java:S1162"VRename this field "register_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(á¹Ô�ýÿÿÿÿ
+s	java:S1167"YRename this field "manage_lice_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ò†æàÿÿÿÿÿ
+n	java:S116<"YRename this field "busi_char_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ò½ í
+l	java:S116A"RRename this field "area_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù”€Ýøÿÿÿÿ
+m	java:S116F"SRename this field "zip_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¡î¹•ûÿÿÿÿ
+l	java:S116K"WRename this field "corp_tele_no" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ŸˆÊ¿
+q	java:S116P"WRename this field "corp_address" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(«Àèëøÿÿÿÿ
+i	java:S116U"TRename this field "create_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÿéÕÓ
+p	java:S116Z"VRename this field "create_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ü–”…ýÿÿÿÿ
+p	java:S116_"VRename this field "create_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ù‡¥™úÿÿÿÿ
+n	java:S116d"TRename this field "update_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(áÛë™ûÿÿÿÿ
+p	java:S116i"VRename this field "update_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(½¥ÖÃùÿÿÿÿ
+k	java:S116n"VRename this field "update_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹€ÆÖ
+l	java:S116s"WRename this field "is_used_time" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(èÇÎù
+g	java:S116x"RRename this field "is_used" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(üÙîË
+n	java:S116}"TRename this field "is_delete" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ñƒä†ÿÿÿÿÿ
+g	java:S116‚"QRename this field "ext_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ñ�½•
+s	java:S116‡"XRename this field "barcode_print" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ƒÃ„‡úÿÿÿÿ
+n	java:S116‘"SRename this field "class_id" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(©¢�Šüÿÿÿÿ
+k	java:S116–"URename this field "class_code" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(«¯íÛ
+k	java:S116›"URename this field "class_name" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(¼ç©É
+l	java:S116 "VRename this field "honour_days" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ˆïÐ�
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/e/6/e64c9e811d5217de8ee62ae956801ac875abef29 b/wms_pro/hd/.idea/sonarlint/issuestore/e/6/e64c9e811d5217de8ee62ae956801ac875abef29
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/e/7/e70f0441bebe61574c00213f32c632aa2897c910 b/wms_pro/hd/.idea/sonarlint/issuestore/e/7/e70f0441bebe61574c00213f32c632aa2897c910
new file mode 100644
index 00000000..ca99c502
--- /dev/null
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/e/7/e70f0441bebe61574c00213f32c632aa2897c910
@@ -0,0 +1,6 @@
+
+k	java:S117'"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(…ØÇŽüÿÿÿÿ
+k	java:S117("QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(‹ï„šùÿÿÿÿ
+f	java:S117)"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(×²¡Ø
+k	java:S117*"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(ÆûÀ¤úÿÿÿÿ
+f	java:S117+"QRename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.(Ø…Ä«
\ No newline at end of file
diff --git a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
index 7c852ae0..9e35f0cf 100644
--- a/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
+++ b/wms_pro/hd/.idea/sonarlint/issuestore/index.pb
@@ -40,4 +40,88 @@ _nladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dto/M
 �
 ]nladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dto/MappingDto.java,e/4/e4d40d63f40ac834a65cd47f2b9ab2436efb39d1
 ©
-ynladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/mapper/xml/BmExternalFieldMappingMapper.xml,8/5/8579f2942008652ebd59f8eed6fafca608a42516
\ No newline at end of file
+ynladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/mapper/xml/BmExternalFieldMappingMapper.xml,8/5/8579f2942008652ebd59f8eed6fafca608a42516
+_
+/nladmin-system/src/main/java/org/nl/AppRun.java,1/0/10e40d67bd7d0818c5483704f020703d1bef8378
+I
+nladmin-system/.gitignore,e/6/e64c9e811d5217de8ee62ae956801ac875abef29
+Œ
+\nladmin-system/src/main/java/org/nl/wms/base_manage/material/service/IBmMaterialService.java,9/6/962216bab28ad31a04e330ae84fc8491b73be9eb
+”
+dnladmin-system/src/main/java/org/nl/wms/base_manage/material/service/impl/BmMaterialServiceImpl.java,a/7/a7241c86cb8a37ed0ceeb0177d553b8d09139e0f
+ˆ
+Xnladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/BmMaterial.java,1/3/13dcb74adf880fa445de696c0054cd586cf8b27a
+¢
+rnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/controller/BmExternalFieldMappingController.java,4/9/491288c6a971edd368823e6e6d6a676827d0d7b8
+‹
+[nladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dto/MaterialQuery.java,4/0/400fbf00a1743bc1972994d7dffce150f50044f7
+˜
+hnladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/mapper/xml/BmMaterialMapper.xml,0/b/0b7d19b44eabe0d51a7ebb8a0badcbec8bf1236c
+•
+enladmin-system/src/main/java/org/nl/wms/base_manage/material/service/dao/mapper/BmMaterialMapper.java,a/4/a47ce58066d26fa89d378900d3c7057e934eea66
+�
+mnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/IBmExternalFieldMappingService.java,6/3/6380d92563f750329b625bda0586fc4ba3b71943
+¥
+unladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/impl/BmExternalFieldMappingServiceImpl.java,9/0/9019fde59766868f22fd17bff1ddac61f4908ef3
+¦
+vnladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/mapper/BmExternalFieldMappingMapper.java,3/8/3828de74f3f9d1252984dd2c3524e61bc6632160
+™
+inladmin-system/src/main/java/org/nl/wms/base_manage/field_mapping/service/dao/BmExternalFieldMapping.java,0/c/0c6792b66c9573faf6f7f102bb584f282187174b
+‘
+anladmin-system/src/main/java/org/nl/wms/base_manage/material/controller/BmMaterialController.java,8/9/89eeb13258719f34694cb541337f127c3bcaeda1
+•
+enladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/dao/mapper/BmSupplierMapper.java,8/5/85dbedfade54927efe168608601c3aefd87bec15
+ˆ
+Xnladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/dao/BmSupplier.java,e/4/e4862e0547db5b758eaf94b49e5b6e4f938c0b99
+‹
+[nladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/dto/SupplierQuery.java,5/7/57797c323a45bc67208d3507e8b58517d306782a
+Œ
+\nladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/IBmSupplierService.java,d/f/df8b3befbd76ade64ad578e8f836ebe7dc24a98f
+˜
+hnladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/dao/mapper/xml/BmSupplierMapper.xml,c/f/cfb3b9e8e5934039226c5f151fead52f255d3821
+‘
+anladmin-system/src/main/java/org/nl/wms/base_manage/supplier/controller/BmSupplierController.java,6/a/6a0eb843818d8343bd44f2eb6fb96a2a17ad511d
+‹
+[nladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/dto/CustomerQuery.java,6/b/6b42b2e9bd0103ce4b84ace62d3bb90c20fcbc63
+”
+dnladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/impl/BmCustomerServiceImpl.java,6/5/659d014d87cf2cb817ac8aa861692dafad6985ad
+Œ
+\nladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/IBmCustomerService.java,5/e/5e792c3d58824a1b5f4e3d3d409be838f13c2ea8
+‘
+anladmin-system/src/main/java/org/nl/wms/base_manage/customer/controller/BmCustomerController.java,9/d/9de12ba5bf4d57379fd943ac5f598bff5f7e9b09
+˜
+hnladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/dao/mapper/xml/BmCustomerMapper.xml,4/8/484515574155d74e2c0fb2f642d010e81da02c12
+•
+enladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/dao/mapper/BmCustomerMapper.java,b/0/b0de42f7cfd8eba26add38c170ecd5ad35938d74
+ˆ
+Xnladmin-system/src/main/java/org/nl/wms/base_manage/customer/service/dao/BmCustomer.java,8/c/8c15afe3f84fae04db4771870c3d8152dc6112b7
+Ž
+^nladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/IBmMeasureUnitService.java,8/d/8d5ad7519a7c25dad5b9ac989ab15bddd38c1744
+†
+Vnladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/dto/UnitQuery.java,a/8/a8ae509ac1fa3c77b43dddd6cf62c4d5b1bda604
+š
+jnladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/dao/mapper/xml/BmMeasureUnitMapper.xml,5/c/5cf8db646567d767805c9e2c9d75f48bf84445e6
+—
+gnladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/dao/mapper/BmMeasureUnitMapper.java,1/5/15440390b143518a793fd475726cbb96e5d1efa0
+Š
+Znladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/dao/BmMeasureUnit.java,0/1/0133ebeb5b54aed369d35ab277528534ef73f401
+–
+fnladmin-system/src/main/java/org/nl/wms/base_manage/measure/service/impl/BmMeasureUnitServiceImpl.java,e/7/e70f0441bebe61574c00213f32c632aa2897c910
+“
+cnladmin-system/src/main/java/org/nl/wms/base_manage/measure/controller/BmMeasureunitController.java,0/f/0f9efa8480b10f9adaa49898a79423f2ab0f6c1f
+–
+fnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/impl/BmVehicleInfoServiceImpl.java,6/0/600228c110448d16e5738c74733e1807e77f1b53
+Ž
+^nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/IBmVehicleInfoService.java,0/9/094339bed4ba4403f9b0c60c75ade3f6aa5e96bd
+—
+gnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dao/mapper/BmVehicleInfoMapper.java,2/a/2ad3fe4ba54e76946b9064e2e10aa26f43f04b61
+Š
+Znladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dao/BmVehicleInfo.java,1/b/1bd0fad6108c13d02e39735b623b7af835725dc9
+‰
+Ynladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dto/VehicleQuery.java,3/9/393731eb48daaa1a5f73e039a1985a2f2e7261dd
+š
+jnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/service/dao/mapper/xml/BmVehicleInfoMapper.xml,4/c/4c8cfb9f6e3870061053a6e1c2ed8f7913178d04
+”
+dnladmin-system/src/main/java/org/nl/wms/base_manage/supplier/service/impl/BmSupplierServiceImpl.java,4/f/4fc9e6b89767bdae6bb64ea2eb8bdc73585e739c
+“
+cnladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/controller/BmVehicleInfoController.java,7/9/796d922b8f48974be99c1f691627d6ead93d3114
\ No newline at end of file
diff --git a/wms_pro/hd/logPath_IS_UNDEFINED/2024-03-11.0.log b/wms_pro/hd/logPath_IS_UNDEFINED/2024-03-11.0.log
new file mode 100644
index 00000000..e69de29b
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/controller/BmClassStandardController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/controller/BmClassStandardController.java
new file mode 100644
index 00000000..ebd62f50
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/controller/BmClassStandardController.java
@@ -0,0 +1,124 @@
+
+package org.nl.wms.base_manage.class_standard.controller;
+
+
+import cn.hutool.core.map.MapUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.nl.common.TableDataInfo;
+import org.nl.common.utils.RedissonUtils;
+import org.nl.wms.base_manage.class_standard.service.IBmClassStandardService;
+import org.nl.wms.base_manage.class_standard.service.dao.BmClassStandard;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * @author zhouz
+ * @date 2021-12-07
+ **/
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/bmClassStandard")
+@Slf4j
+public class BmClassStandardController {
+
+    @Autowired
+    private IBmClassStandardService classStandardService;
+
+    @GetMapping
+    public ResponseEntity<Object> queryList(@RequestParam Map whereJson) {
+        return new ResponseEntity<>(TableDataInfo.build(classStandardService.dropdownList(whereJson)), HttpStatus.OK);
+    }
+
+    @PostMapping
+    public ResponseEntity<Object> create(@Validated @RequestBody JSONObject form) {
+        classStandardService.create(form);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    public ResponseEntity<Object> update(@Validated @RequestBody JSONObject form) {
+        classStandardService.updateForm(form);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    public ResponseEntity<Object> delete(@RequestBody String[] ids) {
+        classStandardService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+    @GetMapping("/loadClass")
+    public ResponseEntity<Object> query(@RequestParam Map whereJson) {
+        return new ResponseEntity<>(TableDataInfo.build(classStandardService.loadClass(whereJson)), HttpStatus.OK);
+    }
+
+    @GetMapping("/getClass")
+    public ResponseEntity<Object> queryClassBycode(@RequestParam Map whereJson) {
+        return new ResponseEntity<>(TableDataInfo.build(classStandardService.queryClassBycode(whereJson)), HttpStatus.OK);
+    }
+
+
+    @GetMapping("/queryClassById")
+    public ResponseEntity<Object> queryClassById(@RequestParam Map whereJson) {
+        return new ResponseEntity<>(TableDataInfo.build(classStandardService.queryClassById(whereJson)), HttpStatus.OK);
+    }
+
+    @GetMapping("/getClassTable")
+    public ResponseEntity<Object> queryClassTable(@RequestParam Map whereJson, Pageable page) {
+        return new ResponseEntity<>(classStandardService.queryClassTable(whereJson, page), HttpStatus.OK);
+    }
+
+    @PostMapping("/superior")
+    public ResponseEntity<Object> getSuperior(@RequestBody String id) {
+        BmClassStandard classStandard = classStandardService.getById(id);
+        JSONArray maters = classStandardService.getSuperior(classStandard, new JSONArray());
+        return new ResponseEntity<>(classStandardService.buildTree(maters), HttpStatus.OK);
+    }
+
+    @PostMapping("/superior2")
+    public ResponseEntity<Object> getSuperior2(@RequestBody String param) {
+        JSONArray arr = JSONArray.parseArray(param);
+        JSONObject parse = arr.getJSONObject(0);
+        String id = parse.getString("id");
+        if (StringUtils.isEmpty(id)) {
+            return new ResponseEntity<>(HttpStatus.OK);
+        }
+        BmClassStandard classStandard = classStandardService.getById(id);
+        JSONArray maters = classStandardService.getSuperiorLimit(classStandard, new JSONArray(), parse.getString("parent_id"));
+        return new ResponseEntity<>(classStandardService.buildTree(maters), HttpStatus.OK);
+    }
+
+    @GetMapping("/getType")
+    public ResponseEntity<Object> getType(@RequestParam Map whereJson) {
+        String type_id = MapUtil.getStr(whereJson, "type_id");
+        int level = MapUtil.getInt(whereJson, "level");
+        return new ResponseEntity<>(classStandardService.getType(type_id, level), HttpStatus.OK);
+    }
+
+    @GetMapping("/getClassName")
+    public ResponseEntity<Object> getClassName() {
+        return new ResponseEntity<>(classStandardService.getClassName(), HttpStatus.OK);
+    }
+
+    @PostMapping("/excelImport")
+    public ResponseEntity<Object> excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
+        RedissonUtils.lock(() -> {
+            classStandardService.excelImport(file, request, response);
+        }, "åŸºç¡€åˆ†ç±»å¯¼å…¥", null);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/IBmClassStandardService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/IBmClassStandardService.java
new file mode 100644
index 00000000..ad5f6fd0
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/IBmClassStandardService.java
@@ -0,0 +1,88 @@
+package org.nl.wms.base_manage.class_standard.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.nl.wms.base_manage.class_standard.service.dao.BmClassStandard;
+import org.springframework.data.domain.Pageable;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <p>
+ * åŸºç¡€æ•°æ�®åˆ†ç±»æ ‡å‡†è¡¨ æœ�åŠ¡ç±»
+ * </p>
+ *
+ * @author generator
+ * @since 2023-05-05
+ */
+public interface IBmClassStandardService extends IService<BmClassStandard> {
+
+    /**
+     * ç‰©æ–™ç±»åž‹ä¸‹æ‹‰é€‰
+     * @param json
+     * @return
+     */
+    List<Map> dropdownList(Map json);
+
+    /**
+     * å®¶åœ¨ç‰©æ–™åˆ—è¡¨
+     * @param whereJson
+     */
+    List<Map> loadClass(Map whereJson);
+
+
+    List<Map> queryClassBycode(Map whereJson);
+
+    List<Map> queryClassById(Map whereJson);
+
+
+        /**
+         * åˆ›å»º
+         * @param form
+         * @return
+         */
+    String create(JSONObject form);
+
+    /**
+     * ä¿®æ”¹
+     * @param form
+     * @return
+     */
+    String updateForm(JSONObject form);
+
+    /**
+     * åˆ é™¤å½“å‰�å�Šå­�é›†
+     * @param ids
+     */
+    void deleteAll(String[] ids);
+
+    /**
+     * cæŸ¥è¯¢å­�é›†
+     * @param class_id
+     * @return
+     */
+     List<String> getChildIdStr(String class_id);
+
+    Set<String> getAllChildIdSet(String class_idStr);
+
+    void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException;
+
+    JSONObject queryClassTable(Map whereJson, Pageable page);
+
+    JSONArray getSuperior(BmClassStandard classStandard, JSONArray objects);
+
+    JSONObject buildTree(JSONArray maters);
+
+    JSONArray getSuperiorLimit(BmClassStandard classStandard, JSONArray objects, String parent_id);
+
+    BmClassStandard getType(String type_id, int level);
+
+    JSONArray getClassName();
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/BmClassStandard.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/BmClassStandard.java
new file mode 100644
index 00000000..d1451437
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/BmClassStandard.java
@@ -0,0 +1,119 @@
+package org.nl.wms.base_manage.class_standard.service.dao;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * åŸºç¡€æ•°æ�®åˆ†ç±»æ ‡å‡†è¡¨
+ * </p>
+ *
+ * @author generator
+ * @since 2023-05-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("bm_class_standard")
+public class BmClassStandard implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * åˆ†ç±»æ ‡è¯†
+     */
+    @TableId(value = "class_id")
+    private String class_id;
+
+    /**
+     * åˆ†ç±»ç¼–ç �
+     */
+    private String class_code;
+
+    /**
+     * åˆ†ç±»é•¿ç¼–ç �
+     */
+    private String long_class_code;
+
+    /**
+     * åˆ†ç±»å��ç§°
+     */
+    private String class_name;
+
+    /**
+     * åˆ†ç±»ç®€è¦�æ��è¿°
+     */
+    private String class_desc;
+
+    /**
+     * ä¸Šçº§åˆ†ç±»æ ‡è¯†
+     */
+    private String parent_class_id;
+
+    /**
+     * å­�éƒ¨é—¨æ•°ç›®
+     */
+    private Integer sub_count;
+
+    /**
+     * æ˜¯å�¦å�¶å­�
+     */
+    private Boolean is_leaf;
+
+    /**
+     * æ˜¯å�¦å�¯ä¿®æ”¹
+     */
+    private Boolean is_modify;
+
+    /**
+     * çº§åˆ«
+     */
+    private String class_level;
+
+    /**
+     * å¤–éƒ¨æ ‡è¯†
+     */
+    private String ext_id;
+
+    /**
+     * å¤–éƒ¨ä¸Šçº§æ ‡è¯†
+     */
+    private String ext_parent_id;
+
+    /**
+     * åˆ›å»ºäºº
+     */
+    private String create_id;
+
+    /**
+     * åˆ›å»ºäººå§“å��
+     */
+    private String create_name;
+
+    /**
+     * åˆ›å»ºæ—¶é—´
+     */
+    private String create_time;
+
+    /**
+     * ä¿®æ”¹äºº
+     */
+    private String update_id;
+
+    /**
+     * ä¿®æ”¹äººå§“å��
+     */
+    private String update_name;
+
+    /**
+     * ä¿®æ”¹æ—¶é—´
+     */
+    private String update_time;
+
+    private Boolean is_delete;
+
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/BmClassStandardMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/BmClassStandardMapper.java
new file mode 100644
index 00000000..311a4a64
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/BmClassStandardMapper.java
@@ -0,0 +1,15 @@
+package org.nl.wms.base_manage.class_standard.service.dao.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.nl.wms.base_manage.class_standard.service.dao.BmClassStandard;
+
+import java.util.List;
+
+/**
+ * @Description TODO
+ * @Author Gengby
+ * @Date 2024/3/11
+ */
+public interface BmClassStandardMapper extends BaseMapper<BmClassStandard> {
+    List<String> getChildIdStr(String class_id);
+}
\ No newline at end of file
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/xml/BmClassStandardMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/xml/BmClassStandardMapper.xml
new file mode 100644
index 00000000..7bce31df
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dao/mapper/xml/BmClassStandardMapper.xml
@@ -0,0 +1,20 @@
+<?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.nl.wms.base_manage.class_standard.service.dao.mapper.BmClassStandardMapper">
+
+    <select id="getChildIdStr" resultType="java.lang.String">
+        select DISTINCT class_id
+        from (
+                 select t1.class_id,
+                        if(find_in_set(parent_class_id, @pids) > 0, @pids := concat(@pids, ',', class_id), 0) as ischild
+                 from (
+                          select class_id, parent_class_id
+                          from md_pb_classstandard t
+                          where t.is_delete = '0'
+                          order by class_code
+                      ) t1,
+                      (select @pids := #{class_id}) t2
+             ) t3
+        where ischild != 0
+    </select>
+</mapper>
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dto/BmClassStandardTree.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dto/BmClassStandardTree.java
new file mode 100644
index 00000000..b077d628
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/dto/BmClassStandardTree.java
@@ -0,0 +1,121 @@
+package org.nl.wms.base_manage.class_standard.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * åŸºç¡€æ•°æ�®åˆ†ç±»æ ‡å‡†è¡¨
+ * </p>
+ *
+ * @author generator
+ * @since 2023-05-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("bm_class_standard")
+public class BmClassStandardTree implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * åˆ†ç±»æ ‡è¯†
+     */
+    @TableId(value = "class_id")
+    private String class_id;
+
+    /**
+     * åˆ†ç±»ç¼–ç �
+     */
+    private String class_code;
+
+    /**
+     * åˆ†ç±»é•¿ç¼–ç �
+     */
+    private String long_class_code;
+
+    /**
+     * åˆ†ç±»å��ç§°
+     */
+    private String class_name;
+
+    /**
+     * åˆ†ç±»ç®€è¦�æ��è¿°
+     */
+    private String class_desc;
+
+    /**
+     * ä¸Šçº§åˆ†ç±»æ ‡è¯†
+     */
+    private String parent_class_id;
+
+    /**
+     * å­�éƒ¨é—¨æ•°ç›®
+     */
+    private Integer sub_count;
+
+    /**
+     * æ˜¯å�¦å�¶å­�
+     */
+    private Boolean is_leaf;
+
+    /**
+     * æ˜¯å�¦å�¯ä¿®æ”¹
+     */
+    private Boolean is_modify;
+
+    /**
+     * çº§åˆ«
+     */
+    private String class_level;
+
+    /**
+     * å¤–éƒ¨æ ‡è¯†
+     */
+    private String ext_id;
+
+    /**
+     * å¤–éƒ¨ä¸Šçº§æ ‡è¯†
+     */
+    private String ext_parent_id;
+
+    /**
+     * åˆ›å»ºäºº
+     */
+    private String create_id;
+
+    /**
+     * åˆ›å»ºäººå§“å��
+     */
+    private String create_name;
+
+    /**
+     * åˆ›å»ºæ—¶é—´
+     */
+    private String create_time;
+
+    /**
+     * ä¿®æ”¹äºº
+     */
+    private String update_id;
+
+    /**
+     * ä¿®æ”¹äººå§“å��
+     */
+    private String update_name;
+
+    /**
+     * ä¿®æ”¹æ—¶é—´
+     */
+    private String update_time;
+
+
+    private List<BmClassStandardTree> itemClassstrandard;
+
+
+}
diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/impl/BmClassStandardServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/impl/BmClassStandardServiceImpl.java
new file mode 100644
index 00000000..fd8ad512
--- /dev/null
+++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/class_standard/service/impl/BmClassStandardServiceImpl.java
@@ -0,0 +1,518 @@
+package org.nl.wms.base_manage.class_standard.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.poi.excel.ExcelReader;
+import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sun.istack.internal.NotNull;
+import org.apache.commons.lang3.StringUtils;
+import org.nl.common.domain.exception.BadRequestException;
+import org.nl.common.utils.CopyUtil;
+import org.nl.common.utils.IdUtil;
+import org.nl.common.utils.SecurityUtils;
+import org.nl.wms.base_manage.class_standard.service.IBmClassStandardService;
+import org.nl.wms.base_manage.class_standard.service.dao.BmClassStandard;
+import org.nl.wms.base_manage.class_standard.service.dao.mapper.BmClassStandardMapper;
+import org.nl.wms.base_manage.class_standard.service.dto.BmClassStandardTree;
+import org.nl.wms.base_manage.material.service.IBmMaterialService;
+import org.nl.wms.base_manage.material.service.dao.BmMaterial;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * åŸºç¡€æ•°æ�®åˆ†ç±»æ ‡å‡†è¡¨ æœ�åŠ¡å®žçŽ°ç±»
+ * </p>
+ *
+ * @author generator
+ * @since 2023-05-05
+ */
+@Service
+public class BmClassStandardServiceImpl extends ServiceImpl<BmClassStandardMapper, BmClassStandard> implements IBmClassStandardService {
+
+    @Autowired
+    private IBmMaterialService materialService;
+
+    @Override
+    public List<Map> dropdownList(Map whereJson) {
+        Assert.notNull(whereJson, "å�‚æ•°ä¸�èƒ½ä¸ºç©º");
+        QueryWrapper<BmClassStandard> query = new QueryWrapper<BmClassStandard>()
+                .eq("parent_class_id", "0")
+                .eq("is_delete", false);
+        if (whereJson.get("class_code") != null) {
+            query.eq("class_code", whereJson.get("class_code"));
+        }
+        return getMaps(this.listMaps(query));
+    }
+
+    @Override
+    public List<Map> loadClass(Map whereJson) {
+        List<Map<String, Object>> list = this.listMaps(new QueryWrapper<BmClassStandard>()
+                .eq("is_delete", false)
+                .eq("parent_class_id", whereJson.get("pid") == null ? "0" : whereJson.get("pid")));
+        List<Map> result = getMaps(list);
+        return result;
+    }
+
+    @NotNull
+    private List<Map> getMaps(List<Map<String, Object>> list) {
+        List<Map> result = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            Map<String, Object> item = list.get(i);
+            if ((int) item.get("sub_count") > 0) {
+                item.put("hasChildren", true);
+                item.put("leaf", false);
+            } else {
+                item.put("hasChildren", false);
+                item.put("leaf", true);
+            }
+            item.put("id", item.get("class_id"));
+            item.put("label", item.get("class_name"));
+            item.put("create_user_name", item.get("create_name"));
+            item.put("update_user_name", item.get("update_name"));
+            result.add(item);
+        }
+        return result;
+    }
+
+
+    @Override
+    public List<Map> queryClassBycode(Map whereJson) {
+        BmClassStandard classstandard = null;
+        if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code"))) {
+            classstandard = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_code", whereJson.get("parent_class_code")));
+            if (classstandard == null) {
+                throw new BadRequestException("è¯·è¾“å…¥æ­£ç¡®çš„çˆ¶èŠ‚ç‚¹ç¼–å�·!");
+            }
+        }
+        QueryWrapper<BmClassStandard> query = new QueryWrapper<BmClassStandard>().eq("is_delete", false);
+        if (ObjectUtil.isNotEmpty(whereJson.get("class_code"))) {
+            query.in("class_code", whereJson.get("class_code"));
+        }
+        if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code")) && !whereJson.get("parent_class_code").equals("0")) {
+            query.eq("class_id", classstandard.getClass_id());
+        }
+        if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_code")) || whereJson.get("parent_class_code").equals("0")) {
+            query.eq("parent_class_id", "0").or().isNull("parent_class_id");
+        }
+        return getMaps(this.listMaps(query));
+    }
+
+
+    @Override
+    public List<Map> queryClassById(Map whereJson) {
+        QueryWrapper<BmClassStandard> query = new QueryWrapper<>();
+        query.eq("1", "1");
+        if (ObjectUtil.isNotEmpty(whereJson.get("material_id"))) {
+            BmMaterial one = materialService.getOne(new QueryWrapper<BmMaterial>().eq("material_id", whereJson.get("material_id")));
+            whereJson.put("class_idStr", one.getMaterial_type_id());
+        }
+        query.eq("1", "1");
+        if (ObjectUtil.isNotEmpty(whereJson.get("material_id"))) {
+            BmMaterial one = materialService.getOne(new QueryWrapper<BmMaterial>().eq("material_id", whereJson.get("material_id")));
+            if (null != one) {
+                whereJson.put("class_idStr", one.getMaterial_type_id());
+            }
+        }
+        if (ObjectUtil.isNotEmpty(whereJson.get("whereStr"))) {
+            query.last((String) whereJson.get("whereStr"));
+        }
+        if (ObjectUtil.isNotEmpty(whereJson.get("parent_class_id"))) {
+            query.eq("parent_class_id", whereJson.get("parent_class_id"));
+        }
+        if (ObjectUtil.isNotEmpty(whereJson.get("class_idStr"))) {
+            query.in("class_id", whereJson.get("class_idStr"));
+            if (ObjectUtil.isNotEmpty(whereJson.get("class_idStr"))) {
+                query.last("and class_id in (" + whereJson.get("class_idStr") + ")");
+            }
+        }
+        List<Map<String, Object>> list = this.listMaps(query);
+        return getMaps(list);
+    }
+
+    @Override
+    @Transactional
+    public String create(JSONObject form) {
+        BmClassStandard one = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_code", form.getString("class_code")));
+        if (one != null) {
+            throw new BadRequestException(form.getString("class_code") + "å­˜åœ¨ç›¸å�Œçš„åŸºç¡€ç±»åˆ«ç¼–å�·");
+        }
+        BmClassStandard classstandard = form.toJavaObject(BmClassStandard.class);
+        classstandard.setClass_id(IdUtil.getStringId());
+        classstandard.setCreate_id(SecurityUtils.getCurrentUserId());
+        classstandard.setCreate_name(SecurityUtils.getCurrentNickName());
+        classstandard.setCreate_time(DateUtil.now());
+        classstandard.setIs_leaf(true);
+        classstandard.setClass_level(Math.ceil(classstandard.getClass_code().length() / 2.0) + "");
+        classstandard.setSub_count(0);
+        classstandard.setLong_class_code(classstandard.getClass_code());
+        this.save(classstandard);
+        ///æ›´æ–°èŠ‚ç‚¹
+        if (classstandard.getParent_class_id() != null) {
+            updateSubCnt(classstandard.getParent_class_id());
+        }
+        return classstandard.getClass_id();
+    }
+
+    public void updateSubCnt(String class_id) {
+        if (!StringUtils.isEmpty(class_id) && !class_id.equals("0")) {
+            BmClassStandard one = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_id", class_id).eq("is_delete", false));
+            if (one == null) {
+                throw new BadRequestException(class_id + "æ²¡æœ‰å¯¹åº”åˆ†ç±»æ•°æ�®");
+            }
+            int count = this.count(new QueryWrapper<BmClassStandard>()
+                    .eq("parent_class_id", class_id));
+
+            one.setSub_count(count);
+            one.setIs_leaf(count > 0 ? false : true);
+            this.updateById(one);
+        }
+    }
+
+    @Override
+    @Transactional
+    public String updateForm(JSONObject form) {
+        checkParam(form);
+        BmClassStandard dto = form.toJavaObject(BmClassStandard.class);
+        dto.setUpdate_time(DateUtil.now());
+        dto.setUpdate_id(SecurityUtils.getCurrentUserId());
+        dto.setUpdate_name(SecurityUtils.getCurrentNickName());
+        this.updateById(dto);
+
+        //æ›´æ–°çˆ¶èŠ‚ç‚¹ä¸­å­�èŠ‚ç‚¹æ•°ç›®
+        String oldPid = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_id", form.getString("class_id"))).getParent_class_id();
+        updateSubCnt(oldPid);
+        updateSubCnt(form.getString("parent_class_id"));
+        return null;
+    }
+
+    private void checkParam(JSONObject form) {
+        Assert.notNull(form, "å�‚æ•°ä¸�èƒ½ä¸ºç©º");
+        BmClassStandard onebyid = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_id", form.getString("class_id")));
+        if (onebyid == null) {
+            throw new BadRequestException(form.getString("class_id") + "è¢«åˆ é™¤æˆ–æ— æ�ƒé™�ï¼Œæ“�ä½œå¤±è´¥!");
+        }
+        if (form.getString("parent_class_id") != null && form.getString("class_id").equals(form.getString("parent_class_id"))) {
+            throw new BadRequestException("ä¸Šçº§ä¸�èƒ½ä¸ºè‡ªå·±");
+        }
+    }
+
+    @Override
+    public void deleteAll(String[] ids) {
+        final String TOP_PARENT_ID = "0";
+        if (ids == null || ids.length == 0) {
+            return;
+        }
+        List<BmClassStandardTree> list = CopyUtil.copyList(this.list(), BmClassStandardTree.class);
+        Map<String, List<BmClassStandardTree>> collect = list.stream().collect(Collectors.groupingBy(BmClassStandardTree::getParent_class_id));
+
+        Set<String> removeCollect = new HashSet<>();
+        for (String id : ids) {
+            removeCollect.add(id);
+            List<BmClassStandardTree> top_parent = collect.remove(id);
+            if (!CollectionUtils.isEmpty(top_parent)) {
+                this.getChildTree(top_parent, collect, removeCollect);
+            }
+        }
+        if (!CollectionUtils.isEmpty(removeCollect)) {
+            this.update(new UpdateWrapper<BmClassStandard>()
+                    .set("is_delete", true)
+                    .set("update_id", SecurityUtils.getCurrentUserId())
+                    .set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).in("class_id", removeCollect));
+        }
+    }
+
+    private List<BmClassStandardTree> getChildTree(List<BmClassStandardTree> top_parent, Map<String, List<BmClassStandardTree>> collect, Set<String> removeCollect) {
+        removeCollect.addAll(top_parent.stream().map(BmClassStandardTree::getClass_id).collect(Collectors.toList()));
+
+        if (CollectionUtils.isEmpty(collect)) {
+            return top_parent;
+        }
+        for (BmClassStandardTree parent : top_parent) {
+            List<BmClassStandardTree> child = collect.remove(parent.getClass_id());
+            if (CollectionUtils.isEmpty(child)) {
+                continue;
+            }
+            List<BmClassStandardTree> childMenuTree = getChildTree(child, collect, removeCollect);
+            if (!CollectionUtils.isEmpty(childMenuTree)) {
+                parent.setItemClassstrandard(childMenuTree);
+            }
+        }
+        return top_parent;
+    }
+
+
+    @Override
+    public List<String> getChildIdStr(String class_id) {
+        if (StringUtils.isEmpty(class_id)) {
+            return new ArrayList<>();
+        }
+        return this.baseMapper.getChildIdStr(class_id);
+    }
+
+    @Override
+    public JSONArray getSuperior(BmClassStandard classStandard, JSONArray ja) {
+        if (StrUtil.isEmpty(classStandard.getParent_class_id()) || classStandard.getParent_class_id().equals("0")) {
+            LambdaQueryWrapper<BmClassStandard> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(BmClassStandard::getIs_delete, "0")
+                    .and(q -> q.eq(BmClassStandard::getParent_class_id, "0")
+                            .or().isNull(BmClassStandard::getParent_class_id));
+            List<BmClassStandard> bmClassStandards = this.baseMapper.selectList(lqw);
+
+            for (int m = 0; m < bmClassStandards.size(); m++) {
+                BmClassStandard bmClassStandard = bmClassStandards.get(m);
+                ja.add(bmClassStandard);
+            }
+            return ja;
+        }
+        LambdaQueryWrapper<BmClassStandard> queryWrapper = new LambdaQueryWrapper<BmClassStandard>().eq(BmClassStandard::getParent_class_id, classStandard.getParent_class_id());
+        List<BmClassStandard> bmClassStandards = this.baseMapper.selectList(queryWrapper);
+        for (int n = 0; n < bmClassStandards.size(); n++) {
+            BmClassStandard bmClassStandard = bmClassStandards.get(n);
+            ja.add(bmClassStandard);
+        }
+        BmClassStandard bmClassStandard = this.baseMapper.selectById(classStandard.getParent_class_id());
+        return getSuperior(bmClassStandard, ja);
+    }
+
+    @Override
+    public Set<String> getAllChildIdSet(String class_idStr) {
+        List<BmClassStandard> class_ids = this.list(new QueryWrapper<BmClassStandard>().in("class_id", class_idStr));
+        Set<String> set = new HashSet<>();
+        set.add(class_idStr);
+        for (BmClassStandard classstandard : class_ids) {
+            set.addAll(this.getChildIdStr(classstandard.getClass_id()));
+        }
+        return set;
+    }
+
+    @Override
+    public void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        InputStream inputStream = file.getInputStream();
+        ExcelReader excelReader = ExcelUtil.getReader(inputStream);
+        List<List<Object>> read = excelReader.read();
+
+        Map<String, String> errorMap = new HashMap();
+        for (int i = 1; i < read.size(); i++) {
+            List<Object> list = read.get(i);
+            if (ObjectUtil.isEmpty(list)) {
+                continue;
+            }
+            if (ObjectUtil.isEmpty(list.get(0))) {
+                errorMap.put("ç¬¬" + (i + 1) + "è¡Œ:", "åˆ†ç±»ç¼–ç �ä¸ºç©ºï¼�");
+                continue;
+            }
+            String class_code = String.valueOf(list.get(0));
+            BmClassStandard one = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_code", class_code).eq("is_delete", false));
+            if (one != null) {
+                errorMap.put("ç¬¬" + (i + 1) + "è¡Œ:", "å­˜åœ¨ç›¸å�Œçš„åˆ†ç±»ç¼–ç �ï¼š" + class_code);
+                continue;
+            } else {
+                one = new BmClassStandard();
+            }
+
+            String class_name = (String) list.get(1);
+            if (ObjectUtil.isEmpty(class_name)) {
+                errorMap.put("ç¬¬" + (i + 1) + "è¡Œ:", "åˆ†ç±»å��ç§°ä¸ºç©ºï¼�");
+                continue;
+            }
+            String class_desc = (String) list.get(2);
+            if (StrUtil.isNotEmpty(class_desc)) {
+                one.setClass_desc(class_desc);
+            }
+
+            one.setClass_id(IdUtil.getStringId());
+            one.setClass_code(class_code);
+            one.setClass_name(class_name);
+            one.setCreate_id(SecurityUtils.getCurrentUserId());
+            one.setCreate_name(SecurityUtils.getCurrentNickName());
+            one.setCreate_time(DateUtil.now());
+            one.setIs_leaf(true);
+            one.setSub_count(0);
+
+            if (ObjectUtil.isNotEmpty(list.get(3))) {
+                String pareant_class_code = String.valueOf(list.get(3));
+                ///æ›´æ–°èŠ‚ç‚¹
+                if (StrUtil.isNotEmpty(pareant_class_code)) {
+                    BmClassStandard parent_one = this.getOne(new QueryWrapper<BmClassStandard>().eq("class_code", pareant_class_code).eq("is_delete", false));
+                    if (ObjectUtil.isEmpty(parent_one)) {
+                        errorMap.put("ç¬¬" + (i + 1) + "è¡Œ:", "çˆ¶èŠ‚ç‚¹å¯¹åº”çš„ç¼–ç �ï¼š" + pareant_class_code + "ä¸�å­˜åœ¨ï¼�");
+                    } else {
+                        one.setParent_class_id(parent_one.getClass_id());
+                        this.save(one);
+                        updateSubCnt(parent_one.getParent_class_id());
+                    }
+
+                }
+            }
+        }
+        if (!CollectionUtils.isEmpty(errorMap)) {
+            throw new BadRequestException(JSON.toJSONString(errorMap));
+        }
+    }
+
+    @Override
+    public JSONObject queryClassTable(Map whereJson, Pageable page) {
+        return null;
+    }
+
+    @Override
+    public JSONObject buildTree(JSONArray ja) {
+        Set<JSONObject> trees = new LinkedHashSet<>();
+        Set<JSONObject> maters = new LinkedHashSet<>();
+        List<String> mater_name = new LinkedList<>();
+        for (int i = 0; i < ja.size(); i++) {
+            JSONObject jo = ja.getJSONObject(i);
+            mater_name.add(jo.getString("class_name"));
+        }
+        boolean isChild;
+        for (int m = 0; m < ja.size(); m++) {
+            JSONObject jo1 = ja.getJSONObject(m);
+            isChild = false;
+            if (jo1.getString("parent_class_id").equals("0") || StrUtil.isEmpty(jo1.getString("parent_class_id"))) {
+                jo1.put("id", jo1.getString("class_id"));
+                jo1.put("label", jo1.getString("class_name"));
+                if (jo1.getInteger("sub_count") > 0) {
+                    jo1.put("hasChildren", true);
+                    jo1.put("leaf", false);
+                } else {
+                    jo1.put("hasChildren", false);
+                    jo1.put("leaf", true);
+                }
+                trees.add(jo1);
+            }
+            for (int n = 0; n < ja.size(); n++) {
+                JSONObject jo2 = ja.getJSONObject(n);
+                if (!jo2.getString("class_id").equals("0") && jo1.getString("class_id").equals(jo2.getString("parent_class_id"))) {
+                    isChild = true;
+                    if (jo1.getJSONArray("children") == null) {
+                        jo1.put("children", new JSONArray());
+                    }
+                    JSONArray child_ja = jo1.getJSONArray("children");
+                    jo2.put("id", jo2.getString("class_id"));
+                    jo2.put("label", jo2.getString("class_name"));
+                    if (jo2.getInteger("sub_count") > 0) {
+                        jo2.put("hasChildren", true);
+                        jo2.put("leaf", false);
+                    } else {
+                        jo2.put("hasChildren", false);
+                        jo2.put("leaf", true);
+                    }
+                    child_ja.add(jo2);
+                }
+            }
+            if (isChild) {
+                jo1.put("id", jo1.getString("class_id"));
+                jo1.put("label", jo1.getString("class_name"));
+                if (jo1.getInteger("sub_count") > 0) {
+                    jo1.put("hasChildren", true);
+                    jo1.put("leaf", false);
+                } else {
+                    jo1.put("hasChildren", false);
+                    jo1.put("leaf", true);
+                }
+                maters.add(jo1);
+            } else if (!jo1.getString("class_id").equals("0") && !mater_name.contains(jo1.getString("material_type_name"))) {
+                jo1.put("id", jo1.getString("class_id"));
+                jo1.put("label", jo1.getString("class_name"));
+                if (jo1.getInteger("sub_count") > 0) {
+                    jo1.put("hasChildren", true);
+                    jo1.put("leaf", false);
+                } else {
+                    jo1.put("hasChildren", false);
+                    jo1.put("leaf", true);
+                }
+                maters.add(jo1);
+            }
+        }
+        if (maters.size() == 0) {
+            maters = trees;
+        }
+        JSONObject jo = new JSONObject();
+        jo.put("totalElements", ja.size());
+        jo.put("content", maters.size() == 0 ? ja : trees);
+        return jo;
+    }
+
+    @Override
+    public JSONArray getSuperiorLimit(BmClassStandard classStandard, JSONArray ja, String parent_id) {
+        if (StrUtil.isEmpty(classStandard.getParent_class_id()) || classStandard.getParent_class_id().equals("0")) {
+            LambdaQueryWrapper<BmClassStandard> lqw = new LambdaQueryWrapper<>();
+            lqw.eq(BmClassStandard::getIs_delete, "0")
+                    .and(q -> q.eq(BmClassStandard::getParent_class_id, "0")
+                            .or().isNull(BmClassStandard::getParent_class_id));
+            List<BmClassStandard> bmClassStandards = this.baseMapper.selectList(lqw);
+
+            for (int m = 0; m < bmClassStandards.size(); m++) {
+                BmClassStandard bmClassStandard = bmClassStandards.get(m);
+                ja.add(bmClassStandard);
+            }
+            return ja;
+        }
+        LambdaQueryWrapper<BmClassStandard> queryWrapper = new LambdaQueryWrapper<BmClassStandard>().eq(BmClassStandard::getParent_class_id, classStandard.getParent_class_id());
+        List<BmClassStandard> bmClassStandards = this.baseMapper.selectList(queryWrapper);
+        for (int n = 0; n < bmClassStandards.size(); n++) {
+            BmClassStandard bmClassStandard = bmClassStandards.get(n);
+            ja.add(bmClassStandard);
+        }
+        LambdaQueryWrapper<BmClassStandard> lambdaQueryWrapper = new LambdaQueryWrapper<BmClassStandard>().eq(BmClassStandard::getClass_id, classStandard.getParent_class_id());
+        BmClassStandard bmClassStandard = this.baseMapper.selectOne(lambdaQueryWrapper);
+        if (bmClassStandard.getClass_id().equals(parent_id)) {
+            ja.add(bmClassStandard);
+            return ja;
+        }
+        return getSuperiorLimit(bmClassStandard, ja, parent_id);
+    }
+
+    @Override
+    public BmClassStandard getType(String type_id, int level) {
+        BmClassStandard bmClassStandard = this.baseMapper.selectById(type_id);
+        if (ObjectUtil.isEmpty(bmClassStandard)) {
+            return null;
+        }
+        String class_code = bmClassStandard.getClass_code();
+        if (class_code.length() / 2 == level) {
+            return bmClassStandard;
+        } else {
+            return getType(bmClassStandard.getParent_class_id(), level);
+        }
+
+    }
+
+    @Override
+    public JSONArray getClassName() {
+        LambdaQueryWrapper<BmClassStandard> lqw = new LambdaQueryWrapper<>();
+        lqw.eq(BmClassStandard::getIs_delete, "0")
+                .and(q -> q.eq(BmClassStandard::getParent_class_id, "0")
+                        .or().isNull(BmClassStandard::getParent_class_id));
+        List<BmClassStandard> bmClassStandards = this.baseMapper.selectList(lqw);
+        JSONArray res = new JSONArray();
+        for (int i = 0; i < bmClassStandards.size(); i++) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("label", bmClassStandards.get(i).getClass_name());
+            jsonObject.put("value", bmClassStandards.get(i).getClass_code());
+            res.add(jsonObject);
+        }
+        return res;
+    }
+}
diff --git a/wms_pro/qd/src/views/wms/base_manage/class_standard/UploadDialog.vue b/wms_pro/qd/src/views/wms/base_manage/class_standard/UploadDialog.vue
new file mode 100644
index 00000000..f8bbdb7a
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/base_manage/class_standard/UploadDialog.vue
@@ -0,0 +1,125 @@
+<template>
+  <el-dialog
+    title="å¯¼å…¥Excelæ–‡ä»¶"
+    append-to-body
+    :visible.sync="dialogVisible"
+    destroy-on-close
+    width="400px"
+    :show-close="true"
+    @close="close"
+    @open="open"
+  >
+    <el-upload
+      ref="upload"
+      class="upload-demo"
+      action=""
+      drag
+      :on-exceed="is_one"
+      :limit="1"
+      :auto-upload="false"
+      :multiple="false"
+      :show-file-list="true"
+      :on-change="uploadByJsqd"
+      :file-list="fileList"
+      accept=".xlsx,.xls"
+    >
+      <i class="el-icon-upload" />
+      <div class="el-upload__text">
+        å°†æ–‡ä»¶æ‹–åˆ°æ­¤å¤„ï¼Œæˆ–
+        <em>ç‚¹å‡»ä¸Šä¼ </em>
+      </div>
+      <div slot="tip" class="el-upload__tip">å�ªèƒ½ä¸Šä¼ Excelæ–‡ä»¶ï¼Œä¸”ä¸�è¶…è¿‡10MB</div>
+    </el-upload>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible = false">å�– æ¶ˆ</el-button>
+      <el-button type="primary" @click="submit">ç¡® å®š</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import crudClassstandard from './classstandard'
+import CRUD, { crud } from '@crud/crud'
+import { download2 } from '@/api/data'
+import { downloadFile } from '@/utils'
+
+export default {
+  name: 'UploadDialog',
+  mixins: [crud()],
+  components: {},
+  props: {
+    dialogShow: {
+      type: Boolean,
+      default: false
+    },
+    openParam: {
+      type: String
+    }
+  },
+  data() {
+    return {
+      dialogVisible: false,
+      fileList: [],
+      file1: ''
+    }
+  },
+  watch: {
+    dialogShow: {
+      handler(newValue, oldValue) {
+        this.dialogVisible = newValue
+      }
+    },
+    openParam: {
+      handler(newValue, oldValue) {
+        this.opendtlParam = newValue
+      }
+    }
+  },
+  methods: {
+    open() {
+    },
+    close() {
+      this.$emit('update:dialogShow', false)
+    },
+    is_one() {
+      this.crud.notify('å�ªèƒ½ä¸Šä¼ ä¸€ä¸ªexcelæ–‡ä»¶ï¼�', CRUD.NOTIFICATION_TYPE.WARNING)
+    },
+    // æ–‡ä»¶æ ¡éªŒæ–¹æ³•
+    beforeAvatarUpload(file) {
+      // ä¸�èƒ½å¯¼å…¥å¤§å°�è¶…è¿‡2Mbçš„æ–‡ä»¶
+      if (file.size > 10 * 1024 * 1024) {
+        return false
+      }
+      return true
+    },
+    // æ–‡ä»¶å�‘ç”Ÿæ”¹å�˜å°±ä¼šè§¦å�‘çš„äº‹ä»¶
+    uploadByJsqd(file) {
+      this.file1 = file
+    },
+    submit() {
+      if (this.beforeAvatarUpload(this.file1)) {
+        this.fileList.name = this.file1.name
+        this.fileList.url = ''
+        var formdata = new FormData()
+        formdata.append('file', this.file1.raw)
+        // excelImportï¼šè¯·æ±‚æŽ¥å�£ formdataï¼šä¼ é€’å�‚æ•°
+        crudClassstandard.excelImport(formdata).then((res) => {
+          this.crud.notify('å¯¼å…¥æˆ�åŠŸ', CRUD.NOTIFICATION_TYPE.SUCCESS)
+          this.$emit('tableChanged3', '')
+          this.$emit('update:dialogShow', false)
+        }).catch(err => {
+
+          const list = err.response.data.message
+          download2('/api/produceWorkorder/download', list).then(result => {
+            downloadFile(result, 'é”™è¯¯ä¿¡æ�¯æ±‡æ€»', 'xlsx')
+            crud.downloadLoading = false
+          })
+        })
+      } else {
+        this.crud.notify('æ–‡ä»¶è¿‡å¤§ï¼Œè¯·ä¸Šä¼ å°�äºŽ10MBçš„æ–‡ä»¶ã€œ', CRUD.NOTIFICATION_TYPE.WARNING)
+      }
+    }
+  }
+}
+</script>
+
diff --git a/wms_pro/qd/src/views/wms/base_manage/class_standard/classstandard.js b/wms_pro/qd/src/views/wms/base_manage/class_standard/classstandard.js
new file mode 100644
index 00000000..7eb86733
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/base_manage/class_standard/classstandard.js
@@ -0,0 +1,98 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/bmClassStandard',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/bmClassStandard/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/bmClassStandard',
+    method: 'put',
+    data
+  })
+}
+
+export function getClass(params) {
+  return request({
+    url: 'api/bmClassStandard/loadClass',
+    method: 'get',
+    params
+  })
+}
+
+export function getClassSuperior(ids) {
+  const data = ids.length || ids.length === 0 ? ids : Array.of(ids)
+  return request({
+    url: 'api/bmClassStandard/superior',
+    method: 'post',
+    data
+  })
+}
+export function getClassSuperior2(ids) {
+  const data = ids.length || ids.length === 0 ? ids : Array.of(ids)
+  return request({
+    url: 'api/bmClassStandard/superior2',
+    method: 'post',
+    data
+  })
+}
+
+export function getClassType(params) {
+  return request({
+    url: 'api/bmClassStandard/getClass',
+    method: 'get',
+    params
+  })
+}
+export function queryClassById(params) {
+  return request({
+    url: 'api/bmClassStandard/queryClassById',
+    method: 'get',
+    params
+  })
+}
+// ä¼ å…¥åˆ†ç±»æ ‡è¯†å’Œçº§åˆ«
+export function getType(params) {
+  return request({
+    url: 'api/bmClassStandard/getType',
+    method: 'get',
+    params
+  })
+}
+
+export function getClassTable(params) {
+  return request({
+    url: 'api/bmClassStandard/getClassTable',
+    method: 'get',
+    params
+  })
+}
+
+export function getClassName() {
+  return request({
+    url: 'api/bmClassStandard/getClassName',
+    method: 'get'
+  })
+}
+
+export function excelImport(data) {
+  return request({
+    url: 'api/bmClassStandard/excelImport',
+    method: 'post',
+    data
+  })
+}
+
+export default { add, edit, del, getClass, getClassSuperior,getClassSuperior2, getClassType, getClassTable, getType, queryClassById, getClassName, excelImport }
diff --git a/wms_pro/qd/src/views/wms/base_manage/class_standard/index.vue b/wms_pro/qd/src/views/wms/base_manage/class_standard/index.vue
new file mode 100644
index 00000000..218cdc72
--- /dev/null
+++ b/wms_pro/qd/src/views/wms/base_manage/class_standard/index.vue
@@ -0,0 +1,417 @@
+<template>
+  <div class="app-container">
+    <!--å·¥å…·æ �-->
+    <div class="head-container">
+      <div v-if="crud.props.searchToggle">
+        <!-- æ�œç´¢ -->
+        <el-form
+          :inline="true"
+          class="demo-form-inline"
+          label-position="right"
+          label-width="90px"
+          label-suffix=":"
+        >
+          <el-form-item label="åˆ†ç±»å��ç§°">
+            <el-select
+              v-model="query.class_code"
+              placeholder="è¯·é€‰æ‹©åˆ†ç±»å��ç§°"
+              clearable
+              filterable
+              size="mini"
+              class="filter-item"
+              style="width: 185px;"
+              @change="hand">
+              <el-option
+                v-for="item in classNames"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <rrOperation :crud="crud" />
+        </el-form>
+      </div>
+      <!--å¦‚æžœæƒ³åœ¨å·¥å…·æ �åŠ å…¥æ›´å¤šæŒ‰é’®ï¼Œå�¯ä»¥ä½¿ç”¨æ�’æ§½æ–¹å¼�ï¼Œ slot = 'left' or 'right'-->
+      <crudOperation :permission="permission">
+        <el-button
+          slot="right"
+          class="filter-item"
+          size="mini"
+          type="success"
+          icon="el-icon-s-operation"
+          @click="ToExpandall"
+        >
+          å…¨éƒ¨å±•å¼€
+        </el-button>
+        <el-button
+          slot="right"
+          class="filter-item"
+          type="warning"
+          icon="el-icon-upload2"
+          size="mini"
+          @click="uploadShow = true"
+        >
+          å¯¼å…¥
+        </el-button>
+      </crudOperation>
+      <!--è¡¨å�•ç»„ä»¶-->
+      <el-dialog
+        :close-on-click-modal="false"
+        :before-close="crud.cancelCU"
+        :visible.sync="crud.status.cu > 0"
+        :title="crud.status.title"
+        width="500px"
+      >
+        <el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
+          <el-form-item label="åˆ†ç±»ç¼–ç �" prop="class_code">
+            <el-input v-model="form.class_code" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="åˆ†ç±»å��ç§°" prop="class_name">
+            <el-input v-model="form.class_name" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="ç®€è¦�æ��è¿°" prop="class_desc">
+            <el-input v-model="form.class_desc" style="width: 370px;" />
+          </el-form-item>
+          <el-form-item label="é¡¶çº§ç±»ç›®">
+            <el-radio-group v-model="form.isTop" style="width: 140px">
+              <el-radio label="1">æ˜¯</el-radio>
+              <el-radio label="0">å�¦</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="form.isTop === '0'" style="margin-bottom: 0;" label="ä¸Šçº§ç±»ç›®" prop="pid">
+            <treeselect
+              v-model="form.parent_class_id"
+              :load-options="loadClass"
+              :options="classes"
+              style="width: 370px;"
+              placeholder="é€‰æ‹©ä¸Šçº§ç±»ç›®"
+            />
+          </el-form-item>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="text" @click="crud.cancelCU">å�–æ¶ˆ</el-button>
+          <el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">ç¡®è®¤</el-button>
+        </div>
+      </el-dialog>
+      <!--è¡¨æ ¼æ¸²æŸ“-->
+      <el-table
+        ref="table"
+        v-loading="crud.loading"
+        lazy
+        :load="getClassDatas"
+        :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+        :data="crud.data"
+        row-key="id"
+        @select="crud.selectChange"
+        @select-all="crud.selectAllChange"
+        @selection-change="crud.selectionChangeHandler"
+      >
+        <el-table-column prop="class_code" label="åˆ†ç±»ç¼–ç �" />
+        <el-table-column prop="class_name" label="åˆ†ç±»å��ç§°" />
+        <el-table-column prop="class_desc" label="åˆ†ç±»ç®€è¦�æ��è¿°" />
+        <el-table-column prop="update_optname" label="ä¿®æ”¹äºº" />
+        <el-table-column prop="update_time" label="ä¿®æ”¹æ—¶é—´" />
+        <el-table-column prop="is_modify" :formatter="modifyFormat" label="æ˜¯å�¦å�¯ä¿®æ”¹" />
+        <el-table-column
+          v-permission="['admin','Classstandard:edit','Classstandard:del']"
+          label="æ“�ä½œ"
+          width="250px"
+          align="center"
+        >
+          <template slot-scope="scope">
+            <udOperation
+              style="display: inline"
+              :data="scope.row"
+              :permission="permission"
+              :disabled-edit="scope.row.is_modify === '0'"
+              :disabled-dle="scope.row.is_modify === '0'"
+              msg="ç¡®å®šåˆ é™¤å�—,å¦‚æžœå­˜åœ¨ä¸‹çº§èŠ‚ç‚¹åˆ™ä¸€å¹¶åˆ é™¤ï¼Œæ­¤æ“�ä½œä¸�èƒ½æ’¤é”€ï¼�"
+            />
+            <el-button slot="right" size="mini" type="text" icon="el-icon-circle-plus-outline" @click="crud.toAddAndData(addSibling(scope.row))">æ–°å¢žå�Œçº§</el-button>
+            <el-button slot="right" size="mini" type="text" icon="el-icon-circle-plus" @click="crud.toAddAndData(addChildren(scope.row))">æ–°å¢žå­�çº§</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <!--åˆ†é¡µç»„ä»¶-->
+      <pagination />
+    </div>
+    <UploadDialog :dialog-show.sync="uploadShow" @tableChanged3="crud.toQuery()"/>
+  </div>
+</template>
+
+<script>
+import crudClassstandard from './classstandard'
+import CRUD, { crud, form, header, presenter } from '@crud/crud'
+import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import crudOperation from '@crud/CRUD.operation'
+import udOperation from '@crud/UD.operation'
+import rrOperation from '@crud/RR.operation'
+import pagination from '@crud/Pagination'
+import UploadDialog from './UploadDialog'
+
+let defaultForm = {
+  class_id: null,
+  base_data_type: null,
+  path_code: null,
+  class_code: null,
+  long_class_code: null,
+  class_name: null,
+  class_desc: null,
+  parent_class_id: null,
+  is_leaf: null,
+  sub_count: null,
+  is_modify: null,
+  is_delete: null,
+  class_level: null,
+  ext_id: null,
+  ext_parent_id: null,
+  create_id: null,
+  create_name: null,
+  create_time: null,
+  update_optid: null,
+  update_optname: null,
+  update_time: null,
+  isTop: '1'
+}
+export default {
+  name: 'Classstandard',
+  dicts: ['base_data'],
+  components: {UploadDialog, pagination, crudOperation, rrOperation, udOperation, Treeselect },
+  mixins: [presenter(), header(), form(defaultForm), crud()],
+  cruds() {
+    return CRUD({
+      title: 'åŸºç¡€ç±»åˆ«',
+      url: 'api/bmClassStandard',
+      idField: 'class_id',
+      sort: 'class_id,desc',
+      crudMethod: { ...crudClassstandard },
+      optShow: {
+        add: true,
+        reset: true
+      }
+    })
+  },
+  data() {
+    return {
+      classes: [],
+      uploadShow: false,
+      classNames: [],
+      permission: {},
+      rules: {
+        class_id: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        path_code: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        class_code: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        class_name: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        is_leaf: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        is_modify: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        is_delete: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        create_id: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        create_name: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ],
+        create_time: [
+          { required: true, message: 'ä¸�èƒ½ä¸ºç©º', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  created() {
+    this.getClassNames() // èŽ·å�–åˆ†ç±»
+  },
+  methods: {
+    getClassNames() {
+      crudClassstandard.getClassName().then((res) => { // èŽ·å�–åˆ†ç±»å��ç§°ï¼ŒæŸ¥è¯¢æ ¹æ�®åˆ†ç±»ç¼–ç �æŸ¥æ‰¾å¯¹åº”åˆ†æ”¯æ ‘
+        this.classNames = res
+      })
+    },
+    getClassDatas(tree, treeNode, resolve) {
+      const params = { pid: tree.id }
+      setTimeout(() => {
+        crudClassstandard.getClass(params).then(res => {
+          resolve(res.content)
+        })
+      }, 100)
+    },
+    // é’©å­�ï¼šåœ¨èŽ·å�–è¡¨æ ¼æ•°æ�®ä¹‹å‰�æ‰§è¡Œï¼Œfalse åˆ™ä»£è¡¨ä¸�èŽ·å�–æ•°æ�®
+    [CRUD.HOOK.beforeRefresh]() {
+      return true
+    },
+    modifyFormat(row, index) {
+      if (row.is_modify === '1') {
+        return 'æ˜¯'
+      } else {
+        return 'å�¦'
+      }
+    },
+    dataTypeChange(data) {
+      crudClassstandard.getClass({ base_data_type: data }).then(res => {
+        this.classes = res.content.map(function(obj) {
+          if (obj.hasChildren) {
+            obj.children = null
+          }
+          return obj
+        })
+      })
+    },
+    // æ–°å¢žä¸Žç¼–è¾‘å‰�å�šçš„æ“�ä½œ
+    [CRUD.HOOK.afterToCU](crud, form) {
+      if (form.parent_class_id !== '0' && form.parent_class_id !== null) {
+        form.isTop = '0'
+      } else if (form.class_id !== '0' && form.class_id !== null) {
+        form.isTop = '1'
+      }
+      form.enabled = `${form.enabled}`
+      if (form.class_id != null) {
+        this.getSubTypes(form.id)
+      } else {
+        this.getClass()
+      }
+    },
+    // æ��äº¤å‰�çš„éªŒè¯�
+    [CRUD.HOOK.afterValidateCU]() {
+      // if (this.form.parent_class_id !== null && this.form.parent_class_id === this.form.class_id) {
+      //   this.$message({
+      //     message: 'é¡¶çº§ç±»ç›®ä¸�èƒ½ä¸ºç©º',
+      //     type: 'warning'
+      //   })
+      //   return false
+      // }
+      if (this.form.isTop === '1') {
+        this.form.parent_class_id = 0
+      }
+      return true
+    },
+    getSubTypes(id) {
+      crudClassstandard.getClassSuperior(id).then(res => {
+        const date = res.content
+        this.buildClass(date)
+        this.classes = date
+      })
+    },
+    getClass() {
+      crudClassstandard.getClass({ enabled: true }).then(res => {
+        this.classes = res.content.map(function(obj) {
+          if (obj.hasChildren) {
+            obj.children = null
+          }
+          return obj
+        })
+      })
+    },
+    buildClass(classes) {
+      classes.forEach(data => {
+        if (data.children) {
+          this.buildClass(data.children)
+        }
+        if (data.hasChildren && !data.children) {
+          data.children = null
+        }
+      })
+    },
+    // èŽ·å�–å¼¹çª—å†…éƒ¨é—¨æ•°æ�®
+    loadClass({ action, parentNode, callback }) {
+      if (action === LOAD_CHILDREN_OPTIONS) {
+        crudClassstandard.getClass({ pid: parentNode.id }).then(res => {
+          parentNode.children = res.content.map(function(obj) {
+            if (obj.hasChildren) {
+              obj.children = null
+            }
+            return obj
+          })
+          setTimeout(() => {
+            callback()
+          }, 100)
+        })
+      }
+    },
+    clearFrom() {
+      defaultForm = {
+        id: null,
+        class_id: null,
+        base_data_type: null,
+        path_code: null,
+        class_code: null,
+        long_class_code: null,
+        class_name: null,
+        class_desc: null,
+        parent_class_id: null,
+        is_leaf: null,
+        sub_count: null,
+        is_modify: null,
+        is_delete: null,
+        class_level: null,
+        ext_id: null,
+        ext_parent_id: null,
+        create_id: null,
+        create_name: null,
+        create_time: null,
+        update_optid: null,
+        update_optname: null,
+        update_time: null,
+        isTop: null
+      }
+    },
+    addSibling(row) {
+      this.clearFrom() // å°†é»˜è®¤çš„è¡¨å�•æ•°æ�®æ¸…é™¤
+      defaultForm.id = row.id // èŽ·å�–åˆ†ç±»æ ‘çš„id - æ‡’åŠ è½½ä¾�èµ–æ­¤idï¼Œä¸�å�¯ä¸ºç©º
+      defaultForm.class_id = row.class_id
+      defaultForm.parent_class_id = row.parent_class_id // å�Œçº§ä¸ºçˆ¶ç±»class_id
+      defaultForm.isTop = row.isTop
+      return defaultForm
+    },
+    addChildren(row) {
+      this.clearFrom()
+      defaultForm.id = row.id // èŽ·å�–åˆ†ç±»æ ‘çš„id
+      defaultForm.class_id = row.parent_class_id
+      defaultForm.parent_class_id = row.id // å­�çº§ä¸ºæœ¬èº«çš„class_id
+      defaultForm.isTop = row.isTop
+      return defaultForm
+    },
+    // å…¨éƒ¨å±•å¼€ å�‚è€ƒï¼šhttps://www.cnblogs.com/toughy/p/12667805.html
+    ToExpandall() {
+      const els = document.getElementsByClassName('el-table__expand-icon')
+      if (this.crud.data.length !== 0 && els.length !== 0) {
+        for (let j1 = 0; j1 < els.length; j1++) {
+          els[j1].classList.add('dafult')
+        }
+        if (this.$el.getElementsByClassName('el-table__expand-icon--expanded')) {
+          const open = this.$el.getElementsByClassName('el-table__expand-icon--expanded')
+          for (let j = 0; j < open.length; j++) {
+            open[j].classList.remove('dafult')
+          }
+          const dafult = this.$el.getElementsByClassName('dafult')
+          for (let a = 0; a < dafult.length; a++) {
+
+            dafult[a].click()
+          }
+        }
+      }
+    },
+    hand(value) {
+      this.crud.toQuery()
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
