From 2fef20fe45a1fc901b51243bcc60682524447990 Mon Sep 17 00:00:00 2001
From: shicf <shi_chongfu@163.com>
Date: 星期五, 23 八月 2024 18:55:41 +0800
Subject: [PATCH] Merge branch '2.0.0-release' of http://nonxin.cn:8090/r/product/product-server/V2.0.0

---
 product-server-device/src/main/java/com/product/device/service/DeviceMainenanceService.java        |  279 ++++++++++-
 product-server-device/src/main/java/com/product/device/service/QuickResponseService.java           |   12 
 .idea/vcs.xml                                                                                      |    1 
 product-server-device/src/main/java/com/product/device/service/CommonInspectionService.java        |  284 ++++++++++++
 product-server-device/src/main/java/com/product/device/config/DeviceCode.java                      |  162 ++++++
 product-server-device/src/main/java/com/product/device/config/DeviceConst.java                     |  167 +++++++
 product-server-device/src/main/java/com/product/device/service/DeviceManagerService.java           |   44 -
 product-server-device/pom.xml                                                                      |    6 
 product-server-device/src/main/java/com/product/device/controller/CommonInspectionController.java  |  193 ++++++--
 product-server-device/src/main/java/com/product/device/controller/DeviceMaintenanceController.java |  133 ++++-
 10 files changed, 1,096 insertions(+), 185 deletions(-)

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index f9d89d8..9f4a03f 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -13,6 +13,7 @@
     <mapping directory="$PROJECT_DIR$/product-server-data-export-import" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/product-server-data-sync" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/product-server-datasource" vcs="Git" />
+    <mapping directory="$PROJECT_DIR$/product-server-device" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/product-server-email" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/product-server-file" vcs="Git" />
     <mapping directory="$PROJECT_DIR$/product-server-lucene" vcs="Git" />
diff --git a/product-server-device/pom.xml b/product-server-device/pom.xml
index 527d70f..45b5ad7 100644
--- a/product-server-device/pom.xml
+++ b/product-server-device/pom.xml
@@ -19,6 +19,10 @@
         </dependency>
         <dependency>
             <groupId>com.lx</groupId>
+            <artifactId>product-server-org-admin</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.lx</groupId>
             <artifactId>product-server-util</artifactId>
         </dependency>
         <dependency>
@@ -33,8 +37,8 @@
         <dependency>
             <groupId>com.lx</groupId>
             <artifactId>product-server-task</artifactId>
-            <version>2.1.0-release</version>
         </dependency>
     </dependencies>
 
+
 </project>
diff --git a/product-server-device/src/main/java/com/product/device/config/DeviceCode.java b/product-server-device/src/main/java/com/product/device/config/DeviceCode.java
index b9a80d5..fd9f9a8 100644
--- a/product-server-device/src/main/java/com/product/device/config/DeviceCode.java
+++ b/product-server-device/src/main/java/com/product/device/config/DeviceCode.java
@@ -1,7 +1,12 @@
 package com.product.device.config;
 
+import java.text.DecimalFormat;
+import java.text.Format;
+
 import com.product.common.enums.IEnum;
 import com.product.common.enums.ModuleEnum;
+import com.product.core.config.Global;
+import com.product.util.BaseUtil;
 
 /**
  * Copyright 漏 2019.
@@ -14,25 +19,160 @@
  */
 public enum DeviceCode implements IEnum {
 
-	SYSTEM_OPERATION_SUCCESS("鎴愬姛", "200"), 
-	SYSTEM_FORM_NODATA("璇锋眰鍙傛暟涓虹┖", ModuleEnum.DEVICE.getValue() + "001"),
-	DEVICE_CREATE_INSPECTION_ERROR("鍒涘缓璁惧鐐规閿欒", ModuleEnum.DEVICE.getValue() + "002"),
-	DEVICE_CREATE_FAILURE_ERROR("鍒涘缓璁惧鏁呴殰閿欒", ModuleEnum.DEVICE.getValue() + "003"),
-	;
-	
-	private String text;
-	private String value;
+	SYSTEM_OPERATION_SUCCESS("鎴愬姛", 200),
+	SYSTEM_FORM_NODATA("璇锋眰鍙傛暟涓虹┖", 999),
+	SYSTEM_FORM_COUNT("璇锋眰鍙傛暟鏈夎", 998),
+	SYSTEM_TABLE_NODATA("璇锋眰琛ㄥ悕鏈夎", 997),
+	SYSTEM_CPAGES_NOT_NULL("鍒嗛〉鍙傛暟涓嶈兘涓虹┖", 996),
+	SYSTEM_LOGIN_USER_FAIL("鑾峰彇褰撳墠鐧诲綍浜哄け璐�", 995),
 
-	private DeviceCode(String text, String value) {
+
+	COMMON_GET_WAREHOUSE_KEEPER_FAIL("鑾峰彇搴撶鍛樺け璐�", 1),
+	COMMON_UNKNOWN_ERROR("鏈煡寮傚父", 2),
+	COMMON_DATA_ERROR("鏁版嵁寮傚父", 3),
+
+	ARCHIVES_SAVE_FAIL("璁惧妗f淇濆瓨", 4),
+	ARCHIVES_DELETE_FAIL("璁惧妗f鍒犻櫎", 5),
+
+	DEVICE_CREATE_INSPECTION_ERROR("鍒涘缓璁惧鐐规閿欒", 4),
+	DEL_PRINT_CONFIG_DATA_FAIL("鍒犻櫎閰嶇疆鏁版嵁澶辫触", 6),
+	DEVICE_ARCHIVES_OPERATE_FAIL("鐢垫妗f鎿嶄綔澶辫触锛�", 7),
+	SAVE_PATROL_CONFIG_ERROR("鐢垫璁惧宸℃椤圭洰鎿嶄綔澶辫触", 8),
+	DEVICE_MAINTENANCE_REVIEW_FAIL("璁惧缁翠繚澶嶆牳澶辫触", 9),
+	DEVICE_MAINTENANCE_YEAR_FAIL("鑾峰彇缁翠繚鍗曚綅骞村害缁翠繚缁熻澶辫触", 10),
+	DEVICE_MAINTENANCE_YEAR_FINISH_FAIL("鑾峰彇缁翠繚鍗曚綅骞村害缁翠繚浠诲姟瀹屾垚鎯呭喌澶辫触", 11),
+
+
+	//璁惧鐐规
+	DEVICE_INSPECTION_ITEM_OPERATE_FAIL("鐐规椤圭洰鎿嶄綔閿欒锛�", 12),
+	DEVICE_INSPECTION_ITEM_DELETE_FAIL("鐐规椤圭洰鍒犻櫎澶辫触", 13),
+	DEVICE_INSPECTION_ITEM_HAS_REFERENCED("鐐规椤圭洰宸茶寮曠敤锛屼笉鑳藉垹闄�", 14),
+	DEVICE_INSPECTION_CONFIG_OPERATE_FIAL("鐐规閰嶇疆鎿嶄綔閿欒锛�", 15),
+	DEVICE_INSPECTION_CONFIG_SAVE_FIAL("鐐规閰嶇疆淇濆瓨閿欒", 16),
+	DEVICE_INSPECTION_RECORD_OPERATE_FIAL("鐐规璁板綍鎿嶄綔閿欒锛�", 17),
+	DEVICE_INSPECTION_RECORD_SAVEE_FIAL("鐐规璁板綍淇濆瓨澶辫触", 18),
+
+	//璁惧淇濆吇
+	DEVICE_MAINTENANCE_CONTENT_OPERATE_FAIL("淇濆吇椤圭洰鎿嶄綔閿欒锛�", 19),
+	DEVICE_MAINTENANCE_CONTENT_DEL_FAIL("淇濆吇鍐呭鍒犻櫎澶辫触", 20),
+	DEVICE_MAINTENANCE_CONTENT_HAS_REFERENCED("淇濆吇鍐呭宸茶寮曠敤锛屼笉鑳藉垹闄�", 21),
+	DEVICE_MAINTENANCE_CONFIG_OPERATE_FAIL("淇濆吇閰嶇疆鎿嶄綔閿欒锛�", 22),
+	DEVICE_MAINTENANCE_CONFIG_SAVE_FAIL("淇濆吇閰嶇疆淇濆瓨澶辫触", 23),
+	DEVICE_MAINTENANCE_PLAN_OPERATE_FAIL("淇濆吇璁″垝鎿嶄綔閿欒锛�", 24),
+	DEVICE_MAINTENANCE_PLAN_SAVE_FAIL("淇濆吇璁″垝淇濆瓨澶辫触", 25),
+	DEVICE_MAINTENANCE_PLAN_HAS_BEGIN("淇濆吇璁″垝宸茬粡寮�濮�", 26),
+	DEVICE_MAINTENANCE_PLAN_HAS_COMMON_PLAN("鍚屽勾搴﹀悓淇濆吇绫诲瀷璁″垝宸茬粡鍒涘缓", 27),
+	DEVICE_MAINTENANCE_PLAN_HAS_NO_CONFIG("娌℃湁閰嶇疆瀵瑰簲绫诲瀷鐨勪繚鍏昏澶�", 28),
+	DEVICE_MAINTENANCE_RECORD_OPERATE_FAIL("淇濆吇璁板綍鎿嶄綔閿欒锛�", 29),
+	DEVICE_MAINTENANCE_TAK_COMPLETE_FAIL("淇濆吇浠诲姟瀹屾垚澶辫触", 30),
+
+	//璁惧浠诲姟
+	DEVICE_TASK_TYPE_NO_EXIST("浠诲姟绫诲瀷鏁版嵁涓嶅瓨鍦�", 31),
+	DEVICE_TASK_DATA_NO_EXIST("璁惧浠诲姟鏁版嵁涓嶅瓨鍦�", 32),
+	DEVICE_TASK_CREATE_FAIL_PARAM_ERROR("鍙傛暟寮傚父锛屽彂璧蜂换鍔″け璐ワ紝", 33),
+	DEVICE_TASK_COMPLETE_FAIL_TASK_NO_EXIST("浠诲姟瀹屾垚澶辫触锛屼换鍔℃暟鎹笉瀛樺湪锛�", 34),
+	DEVICE_TASK_COMPLETE_FAIL_TASK_OWNER_MISMATCH("褰撳墠鍔炵悊浜轰笌涓茶浠诲姟鑺傜偣鍔炵悊浜轰笉鍖归厤", 35),
+	DEVICE_TASK_HAS_FINISH("浠诲姟宸茬粡缁撴潫锛屾棤闇�鍐嶆鍔炵悊", 36),
+	DEVICE_TASK_WAREHOUSE_KEPPER_NO_EXIST("搴撶鍛樹笉瀛樺湪", 37),
+
+	//澶囦欢妗f
+	SPARE_PART_ARCHIVE_OPERATE_FIAL("澶囦欢妗f鎿嶄綔閿欒锛�", 38),
+	SPARE_PART_ARCHIVE_DELETE_FIAL("澶囦欢妗f鍒犻櫎澶辫触", 39),
+	SPARE_PART_ARCHIVE_DELETE_FIAL_DATA_REFERENCED("澶囦欢妗f鍒犻櫎澶辫触,鏁版嵁宸茶寮曠敤", 40),
+	SPARE_PART_ARCHIVE_NEED_BAECODE_UNIT("闇�瑕佹寚瀹氫笖浠呰兘鎸囧畾涓�涓崟浣嶄负鏉$爜鍗曚綅锛岃鑱旂郴绠$悊鍛樺湪澶囦欢妗f杩涜璁剧疆锛�", 41),
+	SPARE_PART_ARCHIVE_GET_BASE_UNIT_FAIL("鍩烘湰鍗曚綅鑾峰彇澶辫触", 42),
+
+	//澶囦欢閲囪喘鐢宠
+	SPARE_PART_PURCHASE_APPLY_OPERATE_FIAL("澶囦欢閲囪喘鐢宠鎿嶄綔澶辫触锛�", 43),
+	SPARE_PART_PURCHASE_APPLY_DELETE_FIAL("澶囦欢閲囪喘鐢宠鎿嶄綔澶辫触锛�", 44),
+	SPARE_PART_PURCHASE_APPLY_DELETE_FIAL_DATA_REFERENCED("澶囦欢妗f鍒犻櫎澶辫触,鏁版嵁宸茶寮曠敤", 45),
+	SPARE_PART_PURCHASE_APPLY_CONFIRM("璇ラ噰璐敵璇峰崟宸茬粡琚簱绠$‘璁わ紝鏃犳硶鏇存敼锛�", 46),
+	SPARE_PART_PURCHASE_APPLY_SUB_LIST_FAIL("鏈敓鎴愯鍗曠殑閲囪喘鐢宠鍗曟槑缁嗚幏鍙栧け璐ワ細", 47),
+
+	//澶囦欢閲囪喘璁㈠崟
+	SPARE_PART_PURCHASE_ORDER_OPERATE_FIAL("澶囦欢閲囪喘鐢宠鎿嶄綔澶辫触锛�", 48),
+	SPARE_PART_PURCHASE_ORDER_PARTIAL_WAREHOUSING("宸插瓨鍦ㄩ儴鍒嗗瓙琛ㄦ暟鎹叆搴擄紝鏃犳硶鍒犻櫎", 49),
+	SPARE_PART_PURCHASE_ORDER_SELECT_ONE_SUPPLIER_ORDER("鍙兘閫夋嫨涓�瀹朵緵搴斿晢鐨勮鍗�", 50),
+
+	//澶囦欢鍏ュ簱
+	SPARE_PART_WAREHOUSE_IN_OPERATE_FIAL("澶囦欢鍏ュ簱鎿嶄綔澶辫触锛�", 51),
+	SPARE_PART_WAREHOUSE_IN_SAVE_FIAL("澶囦欢鍏ュ簱淇濆瓨澶辫触", 52),
+	SPARE_PART_WAREHOUSE_IN_SUB_OPERATE_FIAL("澶囦欢閲囪喘鐢宠瀛愯〃鎿嶄綔澶辫触锛�", 53),
+
+	//澶囦欢棰嗙敤
+	SPARE_PART_RECEIVE_OPERATE_FAIL("澶囦欢棰嗙敤鎿嶄綔澶辫触锛�", 54),
+	SPARE_PART_RECEIVE_SUB_LIST_BY_REPAIR_FAIL("缁翠慨澶囦欢棰嗙敤鏄庣粏鑾峰彇澶辫触", 55),
+	SPARE_PART_RECEIVE_SUB_LIST_BY_MAINTENANCE_FAIL("缁翠慨澶囦欢棰嗙敤鏄庣粏鑾峰彇澶辫触", 56),
+	SPARE_PART_RECEIVE_SUB_DETAIL_OPERATE_FAIL("澶囦欢棰嗙敤鏄庣粏鎿嶄綔澶辫触锛�", 57),
+	SPARE_PART_RECEIVE_SUB_SPLIT_OPERATE_FAIL("澶囦欢棰嗙敤鎷嗕欢鎿嶄綔澶辫触锛�", 58),
+	SPARE_PART_RECEIVE_TASK_HAS_SEND("浠诲姟宸插彂璧锋垨宸茬粨鏉燂紝璇峰嬁閲嶅鍙戣捣浠诲姟", 59),
+
+	//澶囦欢褰掕繕
+	SPARE_PART_RETURN_OPERATE_FAIL("澶囦欢褰掕繕鎿嶄綔澶辫触锛�", 60),
+	SPARE_PART_RETURN_DELETE_FIAL("澶囦欢褰掕繕鍒犻櫎澶辫触", 61),
+	SPARE_PART_RETURN_DELETE_FIAL_DATA_REFERENCED("澶囦欢褰掕繕鍒犻櫎澶辫触,鏁版嵁宸茶寮曠敤", 62),
+
+	//澶囦欢搴撳瓨
+	SPARE_PART_STOCK_OPERATE_FAIL("澶囦欢搴撳瓨鎿嶄綔澶辫触锛�", 63),
+	SPARE_PART_STOCK_ARCHIVE_PARAM_NO_UPLOAD("澶囦欢妗f鍙傛暟鏈笂浼狅紝鏃犳硶杩涜璁$畻", 64),
+	SPARE_PART_SROCK_SPECIFY_BARCODE_SPLIT("璇锋寚瀹氫竴涓潯鐮佽繘琛屾媶浠�", 65),
+	SPARE_PART_SROCK_SPLIT_METHOD_UNREASONABLE("鎷嗕欢鏂瑰紡涓嶅悎鐞嗭紝璇烽噸鏂伴�夋嫨", 66),
+	SPARE_PART_STOCK_DISABLED_OR_NO_EXIST_UNIT("绂佺敤鎴栬�呮湭褰曞叆鍒扮郴缁熺殑鍗曚綅锛屾棤娉曡繘琛岃绠楋紝鍗曚綅uuid锛�%s", 67),
+	SPARE_PART_STOCK_CANNOT_GET_ARCHIVE_UNIT("鏈幏鍙栧埌澶囦欢妗fid涓恒��%s銆戠殑鍗曚綅", 68),
+
+	//澶囦欢鎶ュ簾
+	SPARE_PART_SCRAPE_OPERATE_FAIL("澶囦欢鎶ュ簾鎿嶄綔澶辫触锛�", 69),
+	SPARE_PART_SCRAPE_DELETE_FIAL("澶囦欢鎶ュ簾鍒犻櫎澶辫触", 70),
+	SPARE_PART_SCRAPE_DELETE_FIAL_DATA_REFERENCED("澶囦欢鎶ュ簾鍒犻櫎澶辫触,鏁版嵁宸茶寮曠敤", 71),
+
+	//搴撳瓨鐩樼偣
+	SPARE_PART_INVENTORY_OPERATE_FAIL("澶囦欢搴撳瓨鎿嶄綔澶辫触锛�", 72),
+	SPARE_PART_INVENTORY_PARSE_ERROR("閿欒鐨勫弬鏁帮紝瑙f瀽澶辫触", 73),
+
+
+	DEVICE_RECORD_SAVE_FAIL("{&device.name(璁惧)&}鍙拌处淇濆瓨澶辫触", 74),
+
+	DEVICE_RECORD_FIND_FAIL("{&device.name(璁惧)&)鍙拌处璇︽儏鏌ヨ澶辫触", 75),
+	DEVICE_RECORD_FIND_ALL_FAIL("{&device.name(璁惧)&}鍙拌处鏌ヨ澶辫触", 76),
+	TASK_FIELDSET_NOT_FIND_ERROR("鏈壘鍒拌澶囦繚鍏讳俊鎭�", 77),
+
+	INSPECTION_PLAN_CONFIG_LIST_FIND_FAIL("璁惧鐐规璁″垝閰嶇疆鏌ヨ澶辫触", 78),
+
+	GET_INSPECTION_PLAN_DETAIL_LIST_FAIL("鑾峰彇鐐规璁″垝鏄庣粏澶辫触", 79),
+	;
+
+	private String text;
+	private int value;
+
+	private DeviceCode(String text, int value) {
 		this.text = text;
 		this.value = value;
 	}
 
 	public String getText() {
-		return text;
+		try {
+			//浣跨敤姝e垯鍖归厤text涓殑鐗规畩琛ㄨ揪寮忎互{&寮�澶达紝&}缁撳熬锛岃幏鍙栧埌鍏朵腑鐨勫唴瀹�
+			String regex = "\\{&(.+?)&\\}";
+			String result = this.text;
+			if (this.text.matches(regex)) {
+				result = this.text.replaceAll(regex, "$1");
+			}
+			String defaultValue = null;
+			//鎴彇result涓互(寮�澶达紝)缁撳熬鐨勫唴瀹�
+			if (result.contains("(") && result.contains(")")) {
+				defaultValue = result.substring(0, result.indexOf("("));
+			}
+			//鍘绘帀result涓� (寮�澶达紝)缁撳熬鐨勫唴瀹� 鍖呭惈鎷彿
+			result = result.replaceAll("\\(.*?\\)", "");
+			//鑾峰彇绯荤粺閰嶇疆涓殑鍊�
+			 return BaseUtil.ifNull(Global.getSystemConfig(result, defaultValue),text);
+		} catch (Exception e) {
+			return text;
+		}
 	}
 
 	public String getValue() {
-		return value;
+		Format format = new DecimalFormat("000");
+		return ModuleEnum.DEVICE.getValue() + format.format(this.value);
 	}
 }
diff --git a/product-server-device/src/main/java/com/product/device/config/DeviceConst.java b/product-server-device/src/main/java/com/product/device/config/DeviceConst.java
index 132f99a..9d01f1f 100644
--- a/product-server-device/src/main/java/com/product/device/config/DeviceConst.java
+++ b/product-server-device/src/main/java/com/product/device/config/DeviceConst.java
@@ -1,5 +1,8 @@
 package com.product.device.config;
 
+
+import com.product.core.config.CoreConst;
+
 /**
  * Copyright  LX-BASE
  *
@@ -7,15 +10,169 @@
  * @Project: LX-BASE-SERVER
  * @Date: 2020-06-15 11锛�47
  * @Author: LiuChao
- * @Description: 
+ * @Description:
  */
-public class DeviceConst {
-	
+public class DeviceConst extends CoreConst {
+
+	//鐗规畩鍙橀噺
+    public static final int    DEVICE_DATA_SOCKET_PORT=8899;
+    public static final String STANDARD_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    public static final String STANDARD_YEAR_FORMAT = "yyyy";
+    public static final String CPAGE="cpage";
+    public static final String PAGESIZE="pagesize";
+    public static final String DAYS="DAYS";
+    public static final String WEEKS="WEEKS";
+    public static final String MONTHS="MONTHS";
+    public static final String TASK_STATUS_START = "0";
+    public static final String TASK_STATUS_FINAL = "99";
+
+    // 浠诲姟绫诲瀷
+    public static final String TASK_TYPE_SPOT_CHECK = "0";
+    public static final String TASK_TYPE_MAINTENANCE = "1";//淇濆吇浠诲姟
+    public static final String TASK_TYPE_REPAIR = "2";
+    public static final String TASK_TYPE_IDENTIFY = "3";
+    public static final String TASK_TYPE_SPOT_CHECK_REVIEW = "4";
+    public static final String TASK_TYPE_MAINTENANCE_REVIEW = "5";
+    public static final String TASK_TYPE_REPAIR_REVIEW = "6";
+    public static final String TASK_TYPE_DISPATCH = "7";
+    public static final String TASK_TYPE_MOLD_RECEIVE = "8";
+    public static final String TASK_TYPE_MOLD_RETURN = "9";
+    public static final String TASK_TYPE_PURCHASE_APPLY = "10";
+    public static final String TASK_TYPE_PURCHASE_INBOUND = "11";
+    public static final String TASK_TYPE_COMPONENT_RECEIVE = "12";
+    public static final String TASK_TYPE_COMPONENT_RETURN = "13";
+    public static final String TASK_TYPE_COMPONENT_SCRAP = "14";
+
+    // 浠诲姟鏍囬
+    public static final String TASK_TITLE_FORMAT_SPOT_CHECK = "璁惧鐐规-%s";
+    public static final String TASK_TITLE_FORMAT_MAINTENANCE = "璁惧淇濆吇-%s-%s";
+    public static final String TASK_TITLE_FORMAT_REPAIR = "璁惧缁翠慨-%s-%s";
+    public static final String TASK_TITLE_FORMAT_IDENTIFY = "璁惧閴村畾-%s";
+    public static final String TASK_TITLE_FORMAT_SPOT_CHECK_REVIEW = "璁惧鐐规澶嶆牳-%s";
+    public static final String TASK_TITLE_FORMAT_MAINTENANCE_REVIEW = "璁惧淇濆吇澶嶆牳-%s-%s";
+    public static final String TASK_TITLE_FORMAT_REPAIR_REVIEW = "璁惧缁翠慨澶嶆牳-%s-%s";
+    public static final String TASK_TITLE_FORMAT_DISPATCH = "娲惧崟浠诲姟-%s";
+    public static final String TASK_TITLE_FORMAT_MOLD_RECEIVE = "妯″叿棰嗙敤-%s";
+    public static final String TASK_TITLE_FORMAT_MOLD_RETURN = "妯″叿褰掕繕-%s";
+    public static final String TASK_TITLE_FORMAT_PURCHASE_APPLY = "閲囪喘鐢宠-%s";
+    public static final String TASK_TITLE_FORMAT_PURCHASE_INBOUND = "閲囪喘鍏ュ簱-%s";
+    public static final String TASK_TITLE_FORMAT_COMPONENT_RECEIVE = "澶囦欢棰嗙敤-%s";
+    public static final String TASK_TITLE_FORMAT_COMPONENT_RETURN = "澶囦欢褰掕繕-%s";
+    public static final String TASK_TITLE_FORMAT_COMPONENT_SCRAP = "澶囦欢鎶ュ簾-%s";
+
+
+	// 琛ㄥ悕
     public static final String TABLE_PRODUCT_DEVICE_TASK="product_device_task";
     public static final String TABLE_PRODUCT_DEVICE_ARCHIVE="product_device_archives";
-    public static final String TABLE_PRODUCT_INSPECT_CONFIG="product_device_inspection_config";
+    public static final String TABLE_PRODUCT_DEVICE_INSPECT_ITEM_CONFIG="product_device_inspection_item_config";
     public static final String TABLE_PRODUCT_INSPECT_SETTING="product_device_inspection_setting";
     public static final String TABLE_PRODUCT_INSPECT_SETTING_SUB="product_device_inspection_setting_sub";
     public static final String TABLE_PRODUCT_REPAIR_FAILURE="product_device_repair_failure_record";
-    public static final int    DEVICE_DATA_SOCKET_PORT=8899;
+    public static final String TABLE_PRODUCT_INSPECTION_SETTING="product_device_inspection_setting";
+    public static final String TABLE_PRODUCT_MAINTENANCE_SETTING="product_device_maintenance_setting";
+    public static final String TABLE_PRODUCT_PATROL_RECORD="product_device_patrol_record";
+    public static final String TABLE_PRODUCT_PATROL_SETTING="product_device_patrol_setting";
+    public static final String TABLE_PRODUCT_PATROL_RECORD_SUB="product_device_patrol_record_sub";
+    public static final String PRODUCT_DEVICE_ARCHIVES = "product_device_archives";// 璁惧绠$悊
+    public static final String PRODUCT_DEVICE_INFO="product_device_info";
+    public static final String PRODUCT_DEVICE_TASK="product_device_task";
+    public static final String PRODUCT_DEVICE_TASK_TYPE="product_device_task_type";
+    public static final String PRODUCT_DEVICE_UNIT="product_device_unit";
+    public static final String PRODUCT_DEVICE_UNIT_SUB="product_device_unit_sub";
+    public static final String PRODUCT_DEVICE_INSPECTION_RECORD="product_device_inspection_record";//璁惧鐐规璁板綍
+	public static final String PRODUCT_DEVICE_INSPECTION_RECORD_SUB="product_device_inspection_record_sub";//鐐规璁板綍鏄庣粏
+    public static final String PRODUCT_DEVICE_MAINTENANCE_ITEM_CONFIG = "product_device_maintenance_item_config";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_ITEM_DETAIL = "product_device_maintenance_item_detail";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_PLAN = "product_device_maintenance_plan";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_PLAN_SUB = "product_device_maintenance_plan_sub";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_PLAN_CHANGE = "product_device_maintenance_plan_change";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_PLAN_CHANGE_SUB = "product_device_maintenance_plan_change_sub";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_RECORD = "product_device_maintenance_record";
+    public static final String PRODUCT_DEVICE_MAINTENANCE_RECORD_SUB = "product_device_maintenance_record_sub";
+    public static final String PRODUCT_DEVICE_REPAIR_RECORD = "product_device_repair_record";
+    public static final String PRODUCT_DEVICE_SPARE_PART_ARCHIVES = "product_device_spare_part_archives"; //璁惧澶囦欢妗f
+    public static final String PRODUCT_DEVICE_SPARE_PART_RECEIVE = "product_device_spare_part_receive"; //璁惧澶囦欢棰嗙敤鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_SCRAP = "product_device_spare_part_scrap"; //璁惧澶囦欢鎶ュ簾鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_ARCHIVES_PARAM = "product_device_spare_part_archives_param"; //澶囦欢妗f-鍙傛暟
+    public static final String PRODUCT_DEVICE_SPARE_PART_ARCHIVES_UNIT = "product_device_spare_part_archives_unit"; //澶囦欢妗f-鍗曚綅
+    public static final String PRODUCT_DEVICE_SPARE_PART_INVENTORY = "product_device_spare_part_inventory"; //鐩樼偣璁板綍
+    public static final String PRODUCT_DEVICE_SPARE_PART_INVENTORY_DETAIL = "product_device_spare_part_inventory_detail"; //鐩樼偣璁板綍-鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_INVENTORY_PROFIT = "product_device_spare_part_inventory_profit"; //鐩樼偣璁板綍-鍖垮悕鐩樼泩
+    public static final String PRODUCT_DEVICE_SPARE_PART_INVENTORY_PROFIT_DETAIL = "product_device_spare_part_inventory_profit_detail"; //鐩樼偣璁板綍-鍖垮悕鐩樼泩-鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_PURCHASE_APPLY = "product_device_spare_part_purchase_apply"; //閲囪喘鐢宠鍗�
+    public static final String PRODUCT_DEVICE_SPARE_PART_PURCHASE_APPLY_SUB = "product_device_spare_part_purchase_apply_sub"; //閲囪喘鐢宠鍗�-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_PURCHASE_ORDER = "product_device_spare_part_purchase_order"; //閲囪喘璁㈠崟
+    public static final String PRODUCT_DEVICE_SPARE_PART_PURCHASE_ORDER_SUB = "product_device_spare_part_purchase_order_sub"; //閲囪喘璁㈠崟-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_RECEIVE_SUB = "product_device_spare_part_receive_sub"; //棰嗙敤璁板綍-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_RECEIVE_SUB_DETAIL = "product_device_spare_part_receive_sub_detail"; //棰嗙敤璁板綍-瀛愯〃-棰嗙敤鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_RECEIVE_SUB_SPLIT = "product_device_spare_part_receive_sub_split"; //棰嗙敤璁板綍-瀛愯〃-鎷嗕欢鍏ュ簱鏄庣粏
+    public static final String PRODUCT_DEVICE_SPARE_PART_RETURN = "product_device_spare_part_return"; //閫�杩樿褰�
+    public static final String PRODUCT_DEVICE_SPARE_PART_RETURN_SUB = "product_device_spare_part_return_sub"; //閫�杩樿褰�-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_SCRAP_SUB = "product_device_spare_part_scrap_sub"; //鎶ュ簾璁板綍-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_STOCK = "product_device_spare_part_stock"; //搴撳瓨
+    public static final String PRODUCT_DEVICE_SPARE_PART_WAREHOUSE_IN = "product_device_spare_part_warehouse_in"; //鍏ュ簱鍗�
+    public static final String PRODUCT_DEVICE_SPARE_PART_WAREHOUSE_IN_SUB = "product_device_spare_part_warehouse_in_sub"; //鍏ュ簱鍗�-瀛愯〃
+    public static final String PRODUCT_DEVICE_SPARE_PART_WAREHOUSE_IN_SUB_DETAIL = "product_device_spare_part_warehouse_in_sub_detail"; //鍏ュ簱鍗�-瀛愯〃-鏄庣粏
+	public static final String PRODUCT_DEVICE_INSPECTION_PLAN_SETTING = "product_device_inspection_plan_setting"; //鐐规璁″垝閰嶇疆琛�
+	public static final String PRODUCT_DEVICE_INSPECTION_SETTING = "product_device_inspection_setting"; //鐐规閰嶇疆琛�
+
+	//瀛楁
+    public static final String DEVICE_QR_CODE= "device_qr_code";
+    public static final String DEVICE_CODE="device_code";
+    public static final String CREATED_BY="created_by";
+    public static final String DICT_VALUE="dict_value";
+    public static final String DICT_LABEL="dict_label";
+    public static final String TYPE="type";
+    public static final String NAME="name";
+    public static final String YEAR="year";
+    public static final String CYCLE="cycle";
+    public static final String DEVICE_NUMBER="device_number";
+    public static final String TASK_TITLE="task_title";
+    public static final String TASK_TYPE="task_type";
+    public static final String TASK_HANDLING_RULE="task_handling_rule";
+    public static final String TASK_OWNER="task_owner";
+    public static final String START_TIME="start_time";
+    public static final String END_TIME="end_time";
+    public static final String LINK_UUID="link_uuid";
+    public static final String WRITE_BACK_UUID="write_back_uuid";
+    public static final String MAINTENANCE_PERSONNEL="maintenance_personnel";
+    public static final String DEVICE_UUID="device_uuid";
+    public static final String DEVICE_NAME="device_name";
+    public static final String DEVICE_MANAGER="manager";
+    public static final String DEVICE_TYPE="device_type";
+    public static final String ELEVATOR_VARIETY="elevator_variety";
+    public static final String PLAN_MAINTENANCE_TIME="plan_maintenance_time";
+    public static final String MAINTENANCE_USER="maintenance_user";
+    public static final String MAINTENANCE_TIME="maintenance_time";
+    public static final String TECHNICIAN="technician";
+    public static final String PLAN_START_TIME="plan_start_time";
+    public static final String PLAN_FINISH_TIME="plan_finish_time";
+    public static final String TASK_STATUS="task_status";
+    public static final String TABLE_NAME="table_name";
+    public static final String ACTUAL_COMPLETION_TIME="actual_completion_time";
+    public static final String ACTUAL_COMPLETION_USER="actual_completion_user";
+    public static final String RESPONSIBLE_PERSON="responsible_person";
+    public static final String IS_FINISH="is_finish";
+    public static final String IS_REVOKE="is_revoke";
+    public static final String IS_TIMEOUT="is_timeout";
+    public static final String IS_ADD_RECORD="is_add_record";
+    public static final String TRANSFER_REASON = "transfer_reason";
+    public static final String APPLY_REPAIR_USER = "apply_repair_user";
+    public static final String APPLY_REPAIR_TIME = "apply_repair_time";
+    public static final String PLAN_SUB_UUID = "plan_sub_uuid";
+    public static final String ITEM_UUID = "item_uuid";
+    public static final String MAINTENANCE_STATUS = "maintenance_status";
+    public static final String MAINTENANCE_TYPE = "maintenance_type";
+    public static final String SEND_USER = "send_user";
+    public static final String MAINTENANCE_CYCLE = "maintenance_cycle";
+    public static final String INSPECTION_CYCLE="inspection_cycle";
+    public static final String CYCLE_UNIT = "cycle_unit";
+    public static final String MAINTENANCE_ITEM = "maintenance_item";
+    public static final String INSPECTION_ITEM = "inspection_item";
+    public static final String BACK_TYPE = "back_type";
+    public static final String REMARK = "remark";
+    public static final String CONFIRM_WAY = "confirm_way";
+    public static final String AHEAD_NOTICE_DAY = "ahead_notice_day";
+    public static final String INSPECT_FINAL_TIME="inspect_final_time";
+    public static final String PARENT_KEY= "parent_key";
 }
diff --git a/product-server-device/src/main/java/com/product/device/controller/CommonInspectionController.java b/product-server-device/src/main/java/com/product/device/controller/CommonInspectionController.java
index b56cf2f..1d88962 100644
--- a/product-server-device/src/main/java/com/product/device/controller/CommonInspectionController.java
+++ b/product-server-device/src/main/java/com/product/device/controller/CommonInspectionController.java
@@ -1,71 +1,168 @@
 package com.product.device.controller;
- 
+
+import com.product.device.config.DeviceCode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
-import com.alibaba.druid.util.StringUtils;
 import com.product.core.config.CoreConst;
 import com.product.core.controller.support.AbstractBaseController;
 import com.product.core.entity.FieldSetEntity;
 import com.product.core.entity.RequestParameterEntity;
 import com.product.core.exception.BaseException;
 import com.product.core.spring.context.SpringMVCContextHolder;
-import com.product.device.config.DeviceCode;
-import com.product.device.config.DeviceConst;
 import com.product.device.service.CommonInspectionService;
-import com.product.device.service.DeviceManagerService;
-import com.product.device.service.QuickResponseService;
 import com.product.module.sys.version.ApiVersion;
 
 import java.io.IOException;
- /**
-  * 璁惧鐐规
-  */
+
+/**
+ * 璁惧鐐规
+ */
 @RestController
 @RequestMapping("/api/device/inspection")
-public class CommonInspectionController  extends AbstractBaseController {
-    @Autowired
-    CommonInspectionService commonInspectionService;
+public class CommonInspectionController extends AbstractBaseController {
+	@Autowired
+	CommonInspectionService commonInspectionService;
 
-    /**
-     * 鍒涘缓璁惧鐐规
-     * @param content
-     * @param servletResponse
-     * @throws IOException
-     */
-    @RequestMapping(value = "/init/{version}", method = RequestMethod.POST)
+	/**
+	 * 璁惧宸℃鏈堝害灞曠ず
+	 * 
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/getPatrolMonthlViewy/{version}", method = RequestMethod.POST)
 	@ApiVersion(1)
-    public String createInspection(HttpServletRequest request) throws IOException {
-    	
-    	 try {
-             FieldSetEntity fse = null;
-             Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
-             if (bean != null) {
-                 RequestParameterEntity reqp = (RequestParameterEntity) bean;
-                 fse = reqp.getFormData();
-             }
-             if (bean == null || fse == null) {
-                 SpringMVCContextHolder.getSystemLogger().error(DeviceCode.SYSTEM_FORM_NODATA);
-                 return this.error(DeviceCode.SYSTEM_FORM_NODATA);
-             }
-             if (StringUtils.isEmpty(fse.getString("uuid")) && StringUtils.isEmpty(fse.getString("device_sn"))  ) {
-            	 SpringMVCContextHolder.getSystemLogger().error(DeviceCode.SYSTEM_FORM_NODATA);
-                 return this.error(DeviceCode.SYSTEM_FORM_NODATA);
-             }
-             String result=OK_List(commonInspectionService.createInspection(fse.getString("device_sn")));
-             System.out.println(result);
-             return result;
-         } catch (BaseException e) {
-             e.printStackTrace();
-             return error(e);
-         } catch (Exception e) {
-             e.printStackTrace();
-             return error(DeviceCode.DEVICE_CREATE_INSPECTION_ERROR);
-         }
-    }
+	public String getPatrolMonthlViewy(HttpServletRequest request) {
+
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(String.valueOf(DeviceCode.SYSTEM_FORM_NODATA));
+				return this.error(DeviceCode.SYSTEM_FORM_NODATA);
+			}
+			String result = OK_List(commonInspectionService.getPatrolMonthlView(fse));
+			return result;
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return e.getMessage();
+		}
+	}
+
+	/**
+	 * 璁惧鐐规鎴栬�呭贰妫�閰嶇疆淇濆瓨
+	 * 
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/saveSetting/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String saveSetting(HttpServletRequest request) {
+
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(String.valueOf(DeviceCode.SYSTEM_FORM_NODATA));
+				return this.error(DeviceCode.SYSTEM_FORM_NODATA);
+			}
+
+			boolean succ = commonInspectionService.saveSetting(fse);
+			if (succ) {
+				return OK();
+			}
+			SpringMVCContextHolder.getSystemLogger().error(DeviceCode.SAVE_PATROL_CONFIG_ERROR.getValue(),
+					DeviceCode.SAVE_PATROL_CONFIG_ERROR.getText());
+			return this.error(DeviceCode.SAVE_PATROL_CONFIG_ERROR);
+		} catch (BaseException e) {
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return this.error(e);
+		} catch (Exception e) {
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return this.error(DeviceCode.SAVE_PATROL_CONFIG_ERROR);
+		}
+	}
+
+	/**
+	 * 璁惧鐐规鎴栬�呭贰妫�澶嶆牳
+	 * 
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/batchReview/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String batchReview(HttpServletRequest request) {
+
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(String.valueOf(DeviceCode.SYSTEM_FORM_NODATA));
+				return this.error(DeviceCode.SYSTEM_FORM_NODATA);
+			}
+
+			boolean succ = commonInspectionService.batchReview(fse);
+			if (succ) {
+				return OK();
+			}
+			SpringMVCContextHolder.getSystemLogger().error(DeviceCode.SAVE_PATROL_CONFIG_ERROR.getValue(),
+					DeviceCode.SAVE_PATROL_CONFIG_ERROR.getText());
+			return error(DeviceCode.SAVE_PATROL_CONFIG_ERROR.getValue(), DeviceCode.SAVE_PATROL_CONFIG_ERROR.getText());
+		} catch (BaseException e) {
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return this.error(e);
+		} catch (Exception e) {
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			return this.error(DeviceCode.SAVE_PATROL_CONFIG_ERROR.getValue(),
+					DeviceCode.SAVE_PATROL_CONFIG_ERROR.getText());
+		}
+	}
+
+	/**
+	 * 璁惧宸℃閰嶇疆璇︽儏
+	 * 
+	 * @throws IOException
+	 */
+	@RequestMapping(value = "/findPatrolSetting/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String findPatrolSetting(HttpServletRequest request) {
+
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(String.valueOf(DeviceCode.SYSTEM_FORM_NODATA));
+				return this.error(DeviceCode.SYSTEM_FORM_NODATA);
+			}
+
+			String result = OK_List(commonInspectionService.findPatrolSetting());
+			return result;
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return e.getMessage();
+		}
+	}
 }
diff --git a/product-server-device/src/main/java/com/product/device/controller/DeviceMaintenanceController.java b/product-server-device/src/main/java/com/product/device/controller/DeviceMaintenanceController.java
index f7c9bb3..9c9db87 100644
--- a/product-server-device/src/main/java/com/product/device/controller/DeviceMaintenanceController.java
+++ b/product-server-device/src/main/java/com/product/device/controller/DeviceMaintenanceController.java
@@ -1,42 +1,113 @@
 package com.product.device.controller;
- 
+
+import com.product.core.entity.FieldSetEntity;
+import com.product.core.exception.BaseException;
+import com.product.device.config.DeviceCode;
+import com.product.module.sys.version.ApiVersion;
+import com.product.util.BaseUtil;
+import com.product.util.support.AbstractBaseController;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
-import net.bytebuddy.asm.Advice.This;
+
+import com.product.device.service.DeviceMainenanceService;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
-import com.alibaba.druid.util.StringUtils;
-import com.product.admin.service.idel.ISystemMenusService;
-import com.product.core.config.CoreConst;
-import com.product.core.controller.support.AbstractBaseController;
-import com.product.core.entity.FieldSetEntity;
-import com.product.core.entity.RequestParameterEntity;
-import com.product.core.exception.BaseException;
-import com.product.core.spring.context.SpringMVCContextHolder;
-import com.product.device.config.DeviceCode;
-import com.product.device.config.DeviceConst;
-import com.product.device.service.CommonInspectionService;
-import com.product.device.service.DeviceMainenanceService;
-import com.product.device.service.DeviceManagerService;
-import com.product.device.service.QuickResponseService;
-import com.product.device.service.ide.IDeviceMainenanceService;
-import com.product.module.sys.version.ApiVersion;
-
-import java.io.IOException;
- /**
-  * 璁惧缁翠慨
-  */
+/**
+ * 璁惧淇濆吇
+ */
 @RestController
 @RequestMapping("/api/device/maintenance")
-public class DeviceMaintenanceController  extends AbstractBaseController {
-    @Autowired
-    DeviceMainenanceService deviceMainenanceService;
-    
-    
-    
+public class DeviceMaintenanceController extends AbstractBaseController {
+	@Autowired
+	DeviceMainenanceService deviceMainenanceService;
+
+
+	@PostMapping("/{version}")
+	@ApiVersion(1)
+	public String getMaintainByCurrentYear(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+			return OK_List(deviceMainenanceService.getMaintainByCurrentYear(fse));
+		} catch (BaseException e) {
+			return error(e);
+		} catch (Exception e) {
+			return error(DeviceCode.COMMON_DATA_ERROR, e);
+		}
+	}
+
+	@PostMapping("/month/{version}")
+	@ApiVersion(1)
+	public String getMaintainMonth(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+			return OK_List(deviceMainenanceService.getMaintainMonth(fse));
+		} catch (BaseException e) {
+			return error(e);
+		} catch (Exception e) {
+			return error(DeviceCode.COMMON_DATA_ERROR, e);
+		}
+	}
+
+	/**
+	 * 澶嶆牳缁翠繚璁板綍
+	 *
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/review/{version}")
+	@ApiVersion(1)
+	public String reviewRecord(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+			if (!deviceMainenanceService.maintenanceReview(fse)) {
+				//鏇存柊澶辫触
+				return error(DeviceCode.DEVICE_MAINTENANCE_REVIEW_FAIL);
+			}
+			return OK();
+		} catch (BaseException e) {
+			return error(e);
+		} catch (Exception e) {
+			return error(DeviceCode.COMMON_DATA_ERROR, e);
+		}
+	}
+
+	/**
+	 * 缁翠繚鍗曚綅骞村害缁翠繚缁熻
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/year-maintenance/{version}")
+	@ApiVersion(1)
+	public String yearMaintenance(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+			return OK_List(deviceMainenanceService.yearMaintenance(fse));
+		} catch (BaseException e) {
+			return error(e);
+		} catch (Exception e) {
+			return error(DeviceCode.DEVICE_MAINTENANCE_YEAR_FAIL, e);
+		}
+	}
+
+	/**
+	 * 缁翠繚鍗曚綅骞村害缁翠繚浠诲姟瀹屾垚鎯呭喌
+	 * @param request
+	 * @return
+	 */
+	@PostMapping("/year-maintenance-finish/{version}")
+	@ApiVersion(1)
+	public String yearMaintenanceFinish(HttpServletRequest request) {
+		try {
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
+			return OK_List(deviceMainenanceService.yearMaintenanceFinish(fse));
+		} catch (BaseException e) {
+			return error(e);
+		} catch (Exception e) {
+			return error(DeviceCode.DEVICE_MAINTENANCE_YEAR_FINISH_FAIL, e);
+		}
+	}
 }
diff --git a/product-server-device/src/main/java/com/product/device/service/CommonInspectionService.java b/product-server-device/src/main/java/com/product/device/service/CommonInspectionService.java
index a892840..135dd44 100644
--- a/product-server-device/src/main/java/com/product/device/service/CommonInspectionService.java
+++ b/product-server-device/src/main/java/com/product/device/service/CommonInspectionService.java
@@ -1,54 +1,304 @@
 package com.product.device.service;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
+import com.product.admin.service.PublicService;
 import com.product.core.dao.BaseDao;
 import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
+import com.product.core.exception.BaseException;
 import com.product.core.service.support.AbstractBaseService;
+import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.core.transfer.Transactional;
+import com.product.device.config.DeviceCode;
 import com.product.device.config.DeviceConst;
+import com.product.device.service.idel.IDeviceInspectionService;
+import com.product.module.sys.entity.SystemUser;
+import com.product.util.BaseUtil;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.thymeleaf.util.StringUtils;
 
 
 /**
  * 璁惧鐐规
- * @Author 
+ *
+ * @Author
  * @Date 2022/3/8 16:33
  * @Desc 鍔熻兘鐩稿叧 service
  */
 @Service
-public class CommonInspectionService extends AbstractBaseService {
+public class CommonInspectionService extends AbstractBaseService implements IDeviceInspectionService {
 
     @Autowired
     public BaseDao baseDao;
     @Autowired
     DeviceManagerService deviceManagerService;
+    @Autowired
+    PublicService publicService;
+    @Autowired
+    DeviceTaskService deviceTaskService;
     /**
      * 鑾峰彇璁惧淇℃伅 鍖呮嫭瀛愯澶�
-     * @param uuid
+     *
      * @param device_sn
      * @return
      */
     public FieldSetEntity createInspection(String device_sn) {
-    	FieldSetEntity dev=deviceManagerService.findDevice(null,device_sn);
-    	baseDao.loadPromptData(dev);
-    	if(dev !=null) {
-    		DataTableEntity dt=baseDao.listTable(DeviceConst.TABLE_PRODUCT_INSPECT_CONFIG," uuid in( select config_uuid from"+DeviceConst.TABLE_PRODUCT_INSPECT_SETTING_SUB+" where  main_uuid=(select uuid from "+DeviceConst.TABLE_PRODUCT_INSPECT_SETTING+" where device_type=? )", new String[] {dev.getString("device_type")});
-    		if(!DataTableEntity.isEmpty(dt)) {
-    			Map <String,DataTableEntity> sub=new HashMap<>();
-    			sub.put("sub", dt);
-    			dev.setSubData(sub);
-    			dev.addSubDataTable(dt);
-    		}
+        FieldSetEntity dev = deviceManagerService.findDevice( device_sn);
+        baseDao.loadPromptData(dev);
+        if (dev != null) {
+            DataTableEntity dt = baseDao.listTable(DeviceConst.TABLE_PRODUCT_DEVICE_INSPECT_ITEM_CONFIG, " uuid in( select config_uuid from" + DeviceConst.TABLE_PRODUCT_INSPECT_SETTING_SUB + " where  main_uuid=(select uuid from " + DeviceConst.TABLE_PRODUCT_INSPECT_SETTING + " where device_type=? )", new String[]{dev.getString("device_type")});
+            if (!DataTableEntity.isEmpty(dt)) {
+                Map<String, DataTableEntity> sub = new HashMap<>();
+                sub.put("sub", dt);
+                dev.setSubData(sub);
+                dev.addSubDataTable(dt);
+            }
+        }
+        return dev;
+    }
+
+    public DataTableEntity getPatrolMonthlView(FieldSetEntity fliter)  throws BaseException{
+        StringBuffer sb = new StringBuffer();
+        ArrayList<String> parme = new ArrayList<>();
+        sb.append(" SELECT a.name obName,GROUP_CONCAT( CONCAT(check_time,'&',result) ) check_time FROM(");
+        sb.append(" SELECT c.name,b.result,DATE_FORMAT( a.check_time, '%d' ) check_time FROM ");
+
+        sb.append(" "+fliter.getTableName()+" a LEFT JOIN "+fliter.getTableName()+"_sub b on a.uuid =b.record_uuid ");
+
+        sb.append(" LEFT JOIN product_device_patrol_config c on b.patrol_uuid=c.uuid where 1=1");
+
+
+        if (!StringUtils.isEmpty(fliter.getString("device_number"))) {
+            sb.append(" and a.device_number=?");
+            parme.add(fliter.getString("device_number"));
+        }
+        if (!StringUtils.isEmpty(fliter.getString("patrol_user"))) {
+            sb.append(" and a.patrol_user=?");
+            parme.add(fliter.getString("patrol_user"));
+        }
+        if (!StringUtils.isEmpty(fliter.getString("check_time"))) {
+            sb.append(" and DATE_FORMAT( a.check_time, '%Y-%m' )=?");
+            parme.add(fliter.getString("check_time").substring(0, 7));
+        } else {
+            throw new BaseException("0","骞存湀涓嶈兘涓虹┖");
+        }
+        sb.append(" GROUP BY c.name,b.result,DATE_FORMAT( a.check_time, '%d' )  ");
+        sb.append(") a GROUP BY a.name ");
+        String[] pArr = parme.toArray(new String[parme.size()]);
+        DataTableEntity dt = baseDao.listTable(sb.toString(), pArr);
+        for (int i = 0; i <dt.getRows() ; i++) {
+            FieldSetEntity fs = dt.getFieldSetEntity(i);
+            String check_time = fs.getString("check_time");
+            if (!StringUtils.isEmpty(check_time)){
+                String[] check_time_arr = check_time.split(",");
+                for (int j = 0; j <check_time_arr.length ; j++) {
+                    String[] v = check_time_arr[j].split("&");
+                    fs.setValue("m"+v[0],v[1]);
+                }
+
+            }
+        }
+        return dt;
+    }
+
+    public FieldSetEntity getInspectionSetting(String device_type) {
+        FieldSetEntity fs = baseDao.getFieldSetByFilter(DeviceConst.TABLE_PRODUCT_INSPECTION_SETTING, " device_type=? ", new String[]{device_type}, false);
+        return fs;
+    }
+
+    public DataTableEntity getTreeArchives() {
+        DataTableEntity dt = baseDao.listTable(DeviceConst.TABLE_PRODUCT_DEVICE_ARCHIVE, new String[]{});
+        return dt;
+    }
+
+    /**
+     * 淇濇寔璁惧閰嶇疆锛堢偣妫�銆佸贰妫�銆佷繚鍏伙級
+     * @param fs
+     * @return
+     */
+    @Transactional
+    public boolean saveSetting(FieldSetEntity fs) {
+        DataTableEntity subTable = fs.getSubDataTable("subTable");
+        boolean re = true;
+        for (int i = 0; i < subTable.getRows(); i++) {
+            FieldSetEntity sub = subTable.getFieldSetEntity(i);
+            sub.setTableName(fs.getTableName());
+            if (!StringUtils.isEmpty(sub.getString("~type~"))) {
+                publicService.delete(sub);
+                continue;
+            }
+            sub.setValue("device_number", fs.getString("device_number"));
+            sub.setValue("cycle", fs.getString("cycle"));
+            baseDao.executeUpdate("update product_device_maintenance_setting set device_number=? ",new String[] {fs.getString("device_number")});
+
+            if ("product_device_maintenance_setting".equals(fs.getTableName())){
+                sub.setValue("type", fs.getString("type"));
+                sub.setValue("ahead_notice_day", fs.getString("ahead_notice_day"));
+            }
+            if ("product_device_inspection_setting".equals(fs.getTableName())){
+                sub.setValue("start_time", fs.getDate("start_time"));
+                sub.setValue("warn_time", fs.getDate("warn_time"));
+            }
+            String uuid = publicService.saveFieldSetEntity(sub);
+            if (StringUtils.isEmpty(uuid)) {
+                re = false;
+            }
+        }
+        return re;
+    }
+
+    @Transactional
+    public boolean batchReview(FieldSetEntity fs) {
+        String uuid = fs.getString("uuid");
+        if (StringUtils.isEmpty(uuid)) {
+            return false;
+        }
+        String[] split = uuid.split(",");
+        boolean re = true;
+        for (int i = 0; i < split.length; i++) {
+            FieldSetEntity recordFs = new FieldSetEntity();
+            recordFs.setTableName(fs.getTableName());
+            recordFs.setValue("uuid", split[i]);
+            recordFs.setValue("check_user", SpringMVCContextHolder.getCurrentUser().getUser_id());
+            recordFs.setValue("check_time", new Date());
+            String uuids = publicService.saveFieldSetEntity(recordFs);
+            if (StringUtils.isEmpty(uuids)) {
+                re = false;
+            }
+
+        }
+        return re;
+    }
+
+    public FieldSetEntity findPatrolSetting() {
+        DataTableEntity dataTableEntity = baseDao.listTable(DeviceConst.TABLE_PRODUCT_PATROL_SETTING, "");
+        FieldSetEntity fs = new FieldSetEntity();
+        fs.setTableName(DeviceConst.TABLE_PRODUCT_PATROL_SETTING);
+
+        DataTableEntity dt = new DataTableEntity();
+
+        for (int i = 0; i < dataTableEntity.getRows(); i++) {
+            FieldSetEntity sub = dataTableEntity.getFieldSetEntity(i);
+            FieldSetEntity fsSub = new FieldSetEntity();
+            fsSub.setTableName(DeviceConst.TABLE_PRODUCT_PATROL_SETTING);
+            fsSub.setValue("patrol_config_uuid", sub.getString("patrol_config_uuid"));
+            fsSub.setValue("remark", sub.getString("remark"));
+            fsSub.setValue("uuid", sub.getString("uuid"));
+            dt.addFieldSetEntity(fsSub);
+            fs.setValue("device_number", sub.getString("device_number"));
+            fs.setValue("cycle", sub.getString("cycle"));
+
+        }
+        Map<String, DataTableEntity> sub = new HashMap<>();
+        sub.put("subTable", dt);
+        fs.setSubData(sub);
+        return fs;
+    }
+    public FieldSetEntity findInspectionSetting() {
+        DataTableEntity dataTableEntity = baseDao.listTable(DeviceConst.TABLE_PRODUCT_INSPECTION_SETTING, "");
+        FieldSetEntity fs = new FieldSetEntity();
+        fs.setTableName(DeviceConst.TABLE_PRODUCT_INSPECTION_SETTING);
+
+        DataTableEntity dt = new DataTableEntity();
+
+        for (int i = 0; i < dataTableEntity.getRows(); i++) {
+            FieldSetEntity sub = dataTableEntity.getFieldSetEntity(i);
+            FieldSetEntity fsSub = new FieldSetEntity();
+            fsSub.setTableName(DeviceConst.TABLE_PRODUCT_INSPECTION_SETTING);
+            fsSub.setValue("inspection_uuid", sub.getString("inspection_uuid"));
+            fsSub.setValue("remark", sub.getString("remark"));
+            fsSub.setValue("uuid", sub.getString("uuid"));
+            fsSub.setValue("back_type", sub.getString("back_type"));
+
+            dt.addFieldSetEntity(fsSub);
+            fs.setValue("device_number", sub.getString("device_number"));
+            fs.setValue("cycle", sub.getString("cycle"));
+            fs.setValue("start_time", sub.getString("start_time"));
+            fs.setValue("warn_time", sub.getString("warn_time"));
+
+        }
+        Map<String, DataTableEntity> sub = new HashMap<>();
+        sub.put("subTable", dt);
+        fs.setSubData(sub);
+        return fs;
+    }
+	/**
+     * 璁惧鐨勭偣妫�閰嶇疆
+     * @param asset_code
+     * @return
+     */
+    public FieldSetEntity findDeviceSetting(String device_uuid) {
+    	FieldSetEntity device=deviceManagerService.findDevice(device_uuid);
+    	String sql="select c.* from product_device_inspection_setting a join product_device_inspection_setting_sub b on a.uuid=b.main_uuid left join product_device_inspection_item_config c on b.config_uuid=c.uuid and c.is_used=1 where status=1 and a.device_uuid=? ";
+        DataTableEntity dataTableEntity = baseDao.listTable(sql,new String[] {device_uuid});
+        device.addSubDataTable(dataTableEntity);
+        return device;
+    }
+    /**
+     * 璁惧鐨勭偣妫�璁板綍
+     * @param asset_code
+     * @return
+     */
+    public FieldSetEntity findInspectionRecord(String uuid) {
+    	FieldSetEntity record=baseDao.getFieldSetEntity("product_device_inspection_record", 
+    			new String[]{"device_uuid","inspect_user","inspect_final_time","check_user","check_time","is_finish"},uuid, false);
+    	
+    	if(!FieldSetEntity.isEmpty(record)) {
+    		
+	    	FieldSetEntity device=deviceManagerService.findDevice(record.getString("device_uuid"));
+	    	record.setValue("device_uuid", device.getString("device_name"));
+	    	record.setValue("device_uuid_save_value", device.getString("uuid"));
+	    	
+	    	String sql="select s.*,c.* from product_device_inspection_setting a left join product_device_inspection_item_config c on a.inspection_item=c.uuid and c.is_used=1 left join product_device_inspection_record_sub s on s.inspect_item=c.uuid and record_uuid=?  where a.device_uuid=? ";
+	        DataTableEntity dt = baseDao.listTable(sql,new String[] {uuid,record.getString("device_uuid_save_value")});
+	        record.addSubDataTable(dt);  //鐐规椤�
+//	        record.removeSubData("product_device_inspection_record_sub");
     	}
-    	return dev;
+        return record;
+    }
+    /**
+     * 淇濆瓨鐐规淇℃伅
+     * @param fs
+     * @return
+     */
+    @Transactional
+    public String saveInspection(FieldSetEntity fs) throws BaseException{
+    	if(!FieldSetEntity.isEmpty(fs) ) {
+    		FieldSetEntity rfs=new FieldSetEntity(DeviceConst.PRODUCT_DEVICE_INSPECTION_RECORD);
+    		SystemUser user = SpringMVCContextHolder.getCurrentUser();
+    		rfs.setValue("org_level_uuid", user.getOrg_level_uuid());
+//    		rfs.setValue("device_uuid", fs.getValue("device_number"));
+    		rfs.setValue("device_uuid", fs.getValue("uuid"));
+    		rfs.setValue("is_finish", 0);
+    		rfs.setValue("use_dept", user.getOrg_level_uuid());
+    		rfs.setValue("inspect_user", user.getUser_id());
+    		rfs.setValue("inspect_final_time",new Date());
+//    		rfs.setValue("task_uuid", fieldValue);
+    		DataTableEntity dt=fs.getSubDataTable(DeviceConst.PRODUCT_DEVICE_INSPECTION_RECORD_SUB);
+    		if(!DataTableEntity.isEmpty(dt)) {
+    			rfs.addSubDataTable(dt);
+    			if(baseDao.saveFieldSetEntity(rfs)) {//鍒涘缓浠诲姟
+    				deviceTaskService.automaticCreateTask(
+    						String.format(DeviceConst.TASK_TITLE_FORMAT_SPOT_CHECK, fs.getString(DeviceConst.DEVICE_NAME))
+    						,DeviceConst.TASK_TYPE_SPOT_CHECK
+    						,rfs.getUUID()
+    						,fs.getString(DeviceConst.DEVICE_MANAGER)
+    						);
+    				
+    			}
+    		}
+    		return  rfs.getUUID();
+    	}
+    	
+    	return null;
     }
     
     
-}
+    
+}
\ No newline at end of file
diff --git a/product-server-device/src/main/java/com/product/device/service/DeviceMainenanceService.java b/product-server-device/src/main/java/com/product/device/service/DeviceMainenanceService.java
index 06c8154..c7b3ba9 100644
--- a/product-server-device/src/main/java/com/product/device/service/DeviceMainenanceService.java
+++ b/product-server-device/src/main/java/com/product/device/service/DeviceMainenanceService.java
@@ -1,66 +1,265 @@
 package com.product.device.service;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.beust.jcommander.internal.Lists;
 import com.product.core.config.CoreConst;
 import com.product.core.dao.BaseDao;
+import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
+import com.product.core.exception.BaseException;
 import com.product.core.service.support.AbstractBaseService;
 import com.product.core.spring.context.SpringMVCContextHolder;
 import com.product.core.transfer.Transactional;
+import com.product.device.config.DeviceCode;
 import com.product.device.config.DeviceConst;
-import com.product.device.service.ide.IDeviceMainenanceService;
+import com.product.device.service.idel.IDeviceMainenanceService;
 import com.product.module.sys.entity.SystemUser;
 import com.product.task.device.service.DeviceManagerTaskService;
-
+import com.product.util.BaseUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 
 /**
  * 璁惧缁翠慨
- * @Author 
+ *
+ * @Author
  * @Date 2022/3/8 16:33
  * @Desc 鍔熻兘鐩稿叧 service
  */
 @Service
 public class DeviceMainenanceService extends AbstractBaseService implements IDeviceMainenanceService {
 
-    @Autowired
-    public BaseDao baseDao;
-    @Autowired
-    DeviceManagerService deviceManagerService;
-    @Autowired
-    DeviceManagerTaskService deviceManagerTaskService;
+	@Autowired
+	public BaseDao baseDao;
+	@Autowired
+	DeviceManagerService deviceManagerService;
+	@Autowired
+	DeviceManagerTaskService deviceManagerTaskService;
 
-    /**
-     * 鑾峰彇璁惧淇℃伅 鍖呮嫭瀛愯澶�
-     * @param uuid
-     * @param device_sn
-     * @return
-     */
-    @Transactional
-    public String saveDeviceFailure(FieldSetEntity fs) {
-    	SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
-    	if(fs!=null) {
-    		fs.setValue("org_level_uuid", currentUser.getOrg_level_uuid());
-    	}
-    	fs.setTableName(DeviceConst.TABLE_PRODUCT_REPAIR_FAILURE);
-    	boolean b=baseDao.saveFieldSetEntity(fs);
-    	if(b) {
-    		//淇敼璁惧鐨勭姸鎬佷负鍋滄満缁翠慨
-    		deviceManagerService.deviceStatusChange(fs.getString("asset_code"), "2");
+	/**
+	 * 鑾峰彇璁惧淇℃伅 鍖呮嫭瀛愯澶�
+	 *
+	 * @return
+	 */
+	@Transactional
+	public String saveDeviceFailure(FieldSetEntity fs) {
+		SystemUser currentUser = SpringMVCContextHolder.getCurrentUser();
+		if (fs != null) {
+			fs.setValue("org_level_uuid", currentUser.getOrg_level_uuid());
+		}
+		fs.setTableName(DeviceConst.TABLE_PRODUCT_REPAIR_FAILURE);
+		boolean b = baseDao.saveFieldSetEntity(fs);
+		if (b) {
+			//淇敼璁惧鐨勭姸鎬佷负鍋滄満缁翠慨
+			deviceManagerService.deviceStatusChange(fs.getString("asset_code"), "2");
 //    		//涓婃姤浠诲姟鐢熸垚
 //    		deviceManagerTaskService.createTask();
-    		//璁惧杩愯璁板綍
-    		deviceManagerService.appendDeivceManageLog(fs.getString("asset_code"),fs.getString("created_by"),"","璁惧鏁呴殰涓婃姤","product_device_repair_failure_record",fs.getString("uuid"));
-    	}
-    	
-    	return fs.getString(CoreConst.UUID);
-    }
-    /**
-     * 鍒涘缓缁翠慨浠诲姟锛岀涓�娆″彲鑳介�変腑鐨勬槸璋冨害浜猴紝涔熷彲鑳芥槸缁翠慨浜哄憳
-     * @param fs
-     */
-    public void createMaintainTask(FieldSetEntity fs) {
-    	
-    	deviceManagerTaskService.createTask();
-    }
+			//璁惧杩愯璁板綍
+			deviceManagerService.appendDeivceManageLog(fs.getString("asset_code"), fs.getString("created_by"), "", "璁惧鏁呴殰涓婃姤", "product_device_repair_failure_record", fs.getString("uuid"));
+		}
+
+		return fs.getString(CoreConst.UUID);
+	}
+
+	/**
+	 * 鍒涘缓缁翠慨浠诲姟锛岀涓�娆″彲鑳介�変腑鐨勬槸璋冨害浜猴紝涔熷彲鑳芥槸缁翠慨浜哄憳
+	 *
+	 * @param fs
+	 */
+	public void createMaintainTask(FieldSetEntity fs) {
+
+		deviceManagerTaskService.createTask();
+	}
+
+
+	/**
+	 * 鑾峰彇鏈勾宸插畬鎴愮殑淇濆吇璁板綍
+	 */
+	public DataTableEntity getMaintainByCurrentYear(FieldSetEntity fse) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("\nSELECT b.*,a.plan_maintenance_time,a.maintenance_user,a.maintenance_time,a.check_user,a.check_time FROM `product_device_maintenance_record` a ");
+		sql.append("\nINNER JOIN `product_device_info` b ON a. device_uuid=b.uuid ");
+		sql.append("\nwhere length(a.check_user)>0  ");
+		String elevatorVariety = fse.getString("elevator_variety");
+		String maintenanceUnit = fse.getString("maintenance_unit");
+		List<Object> params = StringUtils.isAnyEmpty(elevatorVariety, maintenanceUnit) ? new ArrayList<>() : null;
+		if (!StringUtils.isEmpty(elevatorVariety)) {
+			String[] split = elevatorVariety.split(",");
+			sql.append("\nAND ").append(BaseUtil.buildQuestionMarkFilter("b.elevator_variety", split.length, true));
+			params.addAll(CollectionUtil.toList(split));
+		}
+		if (!StringUtils.isEmpty(maintenanceUnit)) {
+			sql.append("\nAND b.maintenance_unit=? ");
+			params.add(elevatorVariety);
+		}
+		Integer cpage = fse.getInteger(DeviceConst.CPAGE);
+		Integer pageSize = fse.getInteger(DeviceConst.PAGESIZE);
+		//鏌ヨ宸插鏍歌繃鐨勮褰�
+		sql.append(" order by a.maintenance_time desc ");
+		DataTableEntity result = baseDao.listTable(sql.toString(), params.toArray(), pageSize, cpage);
+		result.getMeta().addAliasTable("product_device_info", "b");
+		result.getMeta().addAliasTable("product_device_maintenance_record", "a");
+		baseDao.loadPromptData(result);
+		return result;
+	}
+
+
+	public DataTableEntity getMaintainMonth(FieldSetEntity fse) {
+		Integer cpage = fse.getInteger(DeviceConst.CPAGE);
+		Integer pageSize = fse.getInteger(DeviceConst.PAGESIZE);
+		StringBuilder sql = new StringBuilder();
+		sql.append("\nSELECT b.*,a.maintenance_user, a.plan_finish_time FROM `product_device_maintenance_plan_sub`a ");
+		sql.append("\nINNER JOIN `product_device_info`b ON a.device_uuid = b.uuid ");
+		//sql鏌ヨplan_finish_time鏃堕棿鏄惁灞炰簬褰撴湀
+		sql.append("\nWHERE MONTH(a.plan_finish_time) = MONTH(NOW()) AND a.is_finish=1");
+		String elevatorVariety = fse.getString("elevator_variety");
+		String maintenanceUnit = fse.getString("maintenance_unit");
+		List<Object> params = StringUtils.isAnyEmpty(elevatorVariety, maintenanceUnit) ? new ArrayList<>() : null;
+		if (!StringUtils.isEmpty(elevatorVariety)) {
+			String[] split = elevatorVariety.split(",");
+			sql.append("\nAND ").append(BaseUtil.buildQuestionMarkFilter("b.elevator_variety", split.length, true));
+			params.addAll(CollectionUtil.toList(split));
+		}
+		if (!StringUtils.isEmpty(maintenanceUnit)) {
+			sql.append("\nAND b.maintenance_unit=? ");
+			params.add(elevatorVariety);
+		}
+		DataTableEntity result = baseDao.listTable(sql.toString(), params.toArray(), pageSize, cpage);
+		result.getMeta().addAliasTable("product_device_info", "b");
+		result.getMeta().addAliasTable("product_device_maintenance_plan_sub", "a");
+		return result;
+	}
+
+	/**
+	 * 缁翠繚璁板綍澶嶆牳
+	 */
+	public boolean maintenanceReview(FieldSetEntity fse) {
+		String uuids = fse.getString("uuids");
+		if (StringUtils.isBlank(uuids)) {
+			throw new BaseException(DeviceCode.SYSTEM_FORM_COUNT);
+		}
+
+		String[] split = (SpringMVCContextHolder.getCurrentUserId() + "," + uuids).split(",");
+		return baseDao.executeUpdate("update `product_device_maintenance_record` set check_time=now(),check_user=? where is_finish=1 and " + BaseUtil.buildQuestionMarkFilter("uuid", split.length - 1, true), split);
+	}
+
+	/**
+	 * 缁翠繚鍗曚綅骞村害缁翠繚缁熻
+	 *
+	 * @param fse
+	 * @return
+	 */
+	public DataTableEntity yearMaintenance(FieldSetEntity fse) {
+		// 鐢垫鍝佺
+		String elevatorVariety = null;
+		// 缁翠繚鍗曚綅
+		String maintenanceUnit = null;
+		if (fse != null) {
+			elevatorVariety = fse.getString("elevator_variety");
+			maintenanceUnit = fse.getString("maintenance_unit");
+		}
+		StringBuilder sql = new StringBuilder(128);
+		sql.append("\nSELECT u.`name`,count(r.uuid) record_count");
+		sql.append("\nFROM product_device_maintenance_unit u");
+		sql.append("\nLEFT JOIN product_device_info a on a.maintenance_unit=u.uuid");
+		sql.append("\nLEFT JOIN product_device_maintenance_record r on r.device_uuid=a.uuid");
+		StringBuilder filterSql = new StringBuilder(32);
+		List<String> param = Lists.newArrayList();
+		if (!StringUtils.isEmpty(elevatorVariety)) {
+			String[] arr = elevatorVariety.split(",");
+			filterSql.append(BaseUtil.buildQuestionMarkFilter("elevator_variety", arr.length, true));
+			param.addAll(Arrays.asList(arr));
+		}
+		if (!StringUtils.isEmpty(maintenanceUnit)) {
+			if (filterSql.length() > 0) {
+				filterSql.append(" AND ");
+			}
+			String[] arr = maintenanceUnit.split(",");
+			filterSql.append(BaseUtil.buildQuestionMarkFilter("maintenance_unit", arr.length, true));
+			param.addAll(Arrays.asList(arr));
+		}
+		if (filterSql.length() > 0) {
+			sql.append("\nWHERE ").append(filterSql);
+		}
+		sql.append("\nGROUP BY u.uuid");
+		return baseDao.listTable(sql.toString(), param.toArray());
+	}
+
+	/**
+	 * 缁翠繚鍗曚綅骞村害缁翠繚浠诲姟瀹屾垚鎯呭喌
+	 *
+	 * @param fse
+	 * @return
+	 */
+	public DataTableEntity yearMaintenanceFinish(FieldSetEntity fse) {
+		// 鐢垫鍝佺
+		String elevatorVariety = null;
+		// 缁翠繚鍗曚綅
+		String maintenanceUnit = null;
+		if (fse != null) {
+			elevatorVariety = fse.getString("elevator_variety");
+			maintenanceUnit = fse.getString("maintenance_unit");
+		}
+		StringBuilder sql = new StringBuilder(128);
+		sql.append("\nSELECT T.*,CASE WHEN record_count = 0 THEN 0 ELSE ROUND(finish_count / record_count, 4) END finish_rate");
+		sql.append("\nFROM (");
+		sql.append("\n    SELECT u.name,a.device_number,a.device_unit,a.device_code,d.manufacture_company,count(r.uuid) record_count, count(r.is_finish) + 1 finish_count");
+		sql.append("\n    FROM product_device_maintenance_unit u");
+		sql.append("\n    JOIN product_device_info a on a.maintenance_unit=u.uuid");
+		sql.append("\n    JOIN product_device_archives d on a.archives_uuid=d.uuid");
+		sql.append("\n    JOIN product_device_maintenance_record r on r.device_uuid=a.uuid");
+		StringBuilder filterSql = new StringBuilder(32);
+		List<String> param = Lists.newArrayList();
+		if (!StringUtils.isEmpty(elevatorVariety)) {
+			String[] arr = elevatorVariety.split(",");
+			filterSql.append(BaseUtil.buildQuestionMarkFilter("elevator_variety", arr.length, true));
+			param.addAll(Arrays.asList(arr));
+		}
+		if (!StringUtils.isEmpty(maintenanceUnit)) {
+			if (filterSql.length() > 0) {
+				filterSql.append(" AND ");
+			}
+			String[] arr = maintenanceUnit.split(",");
+			filterSql.append(BaseUtil.buildQuestionMarkFilter("maintenance_unit", arr.length, true));
+			param.addAll(Arrays.asList(arr));
+		}
+		if (filterSql.length() > 0) {
+			sql.append("\n    WHERE ").append(filterSql);
+		}
+		sql.append("\n    GROUP BY 1,2,3,4,5");
+		sql.append("\n) T");
+		return baseDao.listTable(sql.toString(), param.toArray());
+	}
+
+	/**
+	 * 璁惧鐨勪繚鍏婚厤缃�
+	 *
+	 * @param asset_code 璁惧缂栧彿
+	 * @param manceType  淇濆吇绫诲瀷
+	 * @return
+	 */
+	public FieldSetEntity findDeviceMaintenanceSetting(String uuid, String manceType) {
+
+		FieldSetEntity device = deviceManagerService.findDevice(uuid);
+
+		FieldSetEntity record = new FieldSetEntity("product_device_maintenance_record");
+		record.setValue("device_uuid", device.getString("device_name"));
+		record.setValue("device_number", device.getString("device_number"));
+		record.setValue("device_uuid_save_value", device.getString("uuid"));
+		String sql = "select c.item_uuid,c.content ,c.criterion from product_device_maintenance_setting a left join product_device_maintenance_item_config b on\r\n"
+				+ "a.maintenance_item=b.uuid join \r\n"
+				+ "product_device_maintenance_item_detail c  on b.uuid= c.item_uuid\r\n"
+				+ "where device_uuid=? and maintenance_type=?  and c.is_used=1 \r\n"
+				+ "order by item_uuid";
+		DataTableEntity dataTableEntity = baseDao.listTable(sql, new String[]{uuid, manceType});
+		record.addSubDataTable(dataTableEntity);
+
+		return record;
+	}
 }
diff --git a/product-server-device/src/main/java/com/product/device/service/DeviceManagerService.java b/product-server-device/src/main/java/com/product/device/service/DeviceManagerService.java
index ffb6c76..8b54120 100644
--- a/product-server-device/src/main/java/com/product/device/service/DeviceManagerService.java
+++ b/product-server-device/src/main/java/com/product/device/service/DeviceManagerService.java
@@ -5,12 +5,11 @@
 import java.util.List;
 import java.util.Map;
 
-import com.product.admin.config.CmnConst;
+import com.product.core.config.Global;
 import com.product.core.dao.BaseDao;
 import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldSetEntity;
 import com.product.core.service.support.AbstractBaseService;
-import com.product.core.spring.context.SpringMVCContextHolder;
 import com.product.device.config.DeviceConst;
 import com.product.module.sys.service.UserService;
 
@@ -21,7 +20,7 @@
 
 /**
  * 璁惧绠$悊
- * @Author 
+ * @Author
  * @Date 2022/3/8 16:33
  * @Desc 鍔熻兘鐩稿叧 service
  */
@@ -35,13 +34,12 @@
     /**
      * 鑾峰彇璁惧淇℃伅 鍖呮嫭瀛愯澶�
      * @param uuid
-     * @param device_sn
      * @return
      */
-    public FieldSetEntity findDeviceAndSub(String uuid,String asset_code) {
-    	FieldSetEntity dev=findDevice(uuid,asset_code);
-    	if(dev !=null) {
-    		DataTableEntity dt=baseDao.listTable(DeviceConst.TABLE_PRODUCT_DEVICE_ARCHIVE,"parent_sn=?", new String[] {asset_code},new String[]{"uuid","device_name","asset_code","device_version","device_status"});
+    public FieldSetEntity findDeviceAndSub(String uuid,String device_number) {
+    	FieldSetEntity dev=findDevice(uuid);
+    	if(dev !=null && "device".equals(Global.getSystemConfig("system_platform_type", "")) ) {
+    		DataTableEntity dt=baseDao.listTable(DeviceConst.PRODUCT_DEVICE_INFO,"uuid=?", new String[] {uuid},new String[]{});
     		if(!DataTableEntity.isEmpty(dt)) {
     			baseDao.loadPromptData(dt);
     			Map <String,DataTableEntity> sub=new HashMap<>();
@@ -50,31 +48,25 @@
     			//dev.addSubDataTable(dt);
     		}
     	}
-    	
+
     	return dev;
     }
     /**
      * 鑾峰彇璁惧淇℃伅 鍖呮嫭瀛愯澶�
      * @param uuid
-     * @param device_sn
+     * @param asset_code
      * @return
      */
-    public FieldSetEntity findDevice(String uuid,String asset_code) {
+    public FieldSetEntity findDevice(String uuid) {
     	StringBuilder st=new StringBuilder();
     	List<String> pa=new ArrayList<String>();
-    	if(!StringUtils.isEmpty(asset_code)) {
-    		st.append("asset_code=?");
-    		pa.add(asset_code);
-    	}
     	if(!StringUtils.isEmpty(uuid)) {
-    		if(st.length()>0) {
-    			st.append(" and ");
-    		}
     		st.append("uuid=?");
     		pa.add(uuid);
+    	}else {
+    		return null;
     	}
-    	
-    	FieldSetEntity dev=baseDao.getFieldSetEntityByFilter(DeviceConst.TABLE_PRODUCT_DEVICE_ARCHIVE, new String[]{"uuid","device_name","asset_code","device_version","device_status"}, st.toString(), pa.toArray(), false, null);
+    	FieldSetEntity dev=baseDao.getFieldSetEntityByFilter(DeviceConst.PRODUCT_DEVICE_INFO, new String[]{}, st.toString(), pa.toArray(), false, null);
     	baseDao.loadPromptData(dev);
     	return dev;
     }
@@ -83,8 +75,8 @@
      * 濡傛灉鏈夊瓙璁惧锛岄渶瑕佹妸瀛愯澶囩姸鎬佷竴璧峰彉鏇�
      * @return
      */
-    public boolean deviceStatusChange(String asset_code,String status) {
-    	return baseDao.executeUpdate("update product_device_archives set device_status=? where asset_code=? or parent_sn=?",new String[] {status,asset_code,asset_code});
+    public boolean deviceStatusChange(String device_number,String status) {
+    	return baseDao.executeUpdate("update product_device_info set device_status=? where device_number=?",new String[] {status,device_number});
     }
     /**
      * 娣诲姞璁惧杩愯璁板綍
@@ -95,7 +87,7 @@
      * @return
      */
     public boolean appendDeivceManageLog(String asset_code,String user,String type,String log,String table,String uuid ) {
-    	
+
     	return true;
     }
     /**
@@ -114,7 +106,7 @@
         sql.append("\nselect technician  ,'鎶�鏈礋璐d汉' from product_device_archives where asset_code='").append(asset_code).append("' union");
         sql.append("\nselect safety_manager ,'瀹夊叏绠$悊鍛�' from product_device_archives where asset_code='").append(asset_code).append("'");
         sql.append("\n) b left join product_sys_users a on b.userid=a.user_id");
-     
+
         DataTableEntity dte = baseDao.listTable(sql.toString(), new Object[]{});
 //        dte.getMeta().addAliasTable("product_sys_users", "a");
 //        dte.getMeta().addAliasTable("product_device_archives", "b");
@@ -130,7 +122,7 @@
         }
 
         return dte;
-    	
+
     }
-   
+
 }
diff --git a/product-server-device/src/main/java/com/product/device/service/QuickResponseService.java b/product-server-device/src/main/java/com/product/device/service/QuickResponseService.java
index a7bd76e..e787276 100644
--- a/product-server-device/src/main/java/com/product/device/service/QuickResponseService.java
+++ b/product-server-device/src/main/java/com/product/device/service/QuickResponseService.java
@@ -1,18 +1,18 @@
 package com.product.device.service;
- 
+
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
+import com.product.device.utils.QuickResponseCode;
 import org.springframework.stereotype.Service;
- 
+
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
 import com.product.common.lang.StringUtils;
-import com.product.device.config.QuickResponseCode;
 
 import java.io.File;
 import java.io.IOException;
- 
+
 @Service
 public class QuickResponseService {
     @Resource
@@ -44,11 +44,11 @@
     		str.append( ",\"uuid\":\"").append(uuid ).append("\"");
     	}
     	str.append("}");
-    	
+
     	//鐢熸垚鍒版湰鍦版枃浠�
         QrCodeUtil.generate(str.toString(), QuickResponseCode.getQRConfig(), file);
     }
-    
+
     public static void main(String args[]) {
     	QuickResponseService k=new QuickResponseService();
     	File f=new File("d:/device.png");

--
Gitblit v1.9.2