From 4110b7475eccf48283ff22c0e4545850849d445d Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 30 七月 2025 14:03:06 +0800
Subject: [PATCH] 代码提交

---
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json                   |  169 ++--
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs       |   37 +
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo                                  |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json            |  181 ++--
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs         |    2 
 项目代码/WCS/WIDESEAWCS_Client/src/views/LineInfocopy.vue                                      |  199 +++++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs          |    5 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj                |    2 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs              |   71 ++
 项目代码/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue                                |   16 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs |   61 +
 项目代码/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue                                     |  174 ++++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs               |  673 +++++++++++++++++++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs   |    4 
 项目代码/WCS/WIDESEAWCS_Client/src/views/Home.vue                                              |  421 +++++++----
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/HandTask/StackerHandTask.cs                      |   16 
 16 files changed, 1,646 insertions(+), 385 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/Home.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/Home.vue"
index 0ad79c8..d89ec78 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/Home.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/Home.vue"
@@ -11,8 +11,10 @@
 					<el-col :span="8">
 						<div class="line-container">
 							<div class="RGVline"></div>
-							<div :class="updateRGVOne()" :style="{ marginTop: RGV01.LevelPoint + 'px' }" ref="childDot" @click="mouseClick">1</div>
-							<div :class="updateRGVTwo()" :style="{ marginTop: RGV02.LevelPoint + 'px' }" ref="childDot" @click="mouseClick">2</div>
+							<div :class="updateRGVOne()" :style="{ marginTop: RGV01.LevelPoint + 'px' }"
+								@click="mouseClickRGVFirst">1</div>
+							<div :class="updateRGVTwo()" :style="{ marginTop: RGV02.LevelPoint + 'px' }"
+								@click="mouseClickSecond">2</div>
 						</div>
 					</el-col>
 					<el-col :span="8">
@@ -21,7 +23,8 @@
 								<div class="positionY-group">
 									<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex"
 										:equipNo="line.equipNo" :imgType="line.imgType" :positionX="line.positionX"
-										:positionY="line.positionY" :condition="line.condition" />
+										:positionY="line.positionY" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
 								</div>
 							</div>
 							<div style="margin-top: 118px;"></div>
@@ -29,7 +32,8 @@
 								<div class="positionY-group">
 									<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex"
 										:equipNo="line.equipNo" :imgType="line.imgType" :positionX="line.positionX"
-										:positionY="line.positionY" :condition="line.condition" />
+										:positionY="line.positionY" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
 								</div>
 							</div>
 							<div style="margin-top: 115px;"></div>
@@ -37,7 +41,8 @@
 								<div class="positionY-group">
 									<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex"
 										:equipNo="line.equipNo" :imgType="line.imgType" :positionX="line.positionX"
-										:positionY="line.positionY" :condition="line.condition" />
+										:positionY="line.positionY" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
 								</div>
 							</div>
 							<div style="margin-top: 112px;"></div>
@@ -103,57 +108,6 @@
 					</div>
 				</div>
 			</el-col>
-			<!-- <el-col :span="8">
-				<div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-					<div style="margin-top: 105px;"></div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-					<div style="margin-top: 105px;"></div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-					<div style="margin-top: 105px;"></div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-					<div style="margin-top: 100px;"></div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-					<div style="margin-top: 100px;"></div>
-					<div v-for="(group, index) in groupedLines(linescopy3)" :key="index">
-						<div class="positionY-group">
-							<LineInfoCopy v-for="(line, lineIndex) in group.lines" :key="lineIndex" :equipNo="line.equipNo"
-								:imgType="line.imgType" :positionX="line.positionX" :positionY="line.positionY"
-								url="api/Equipment/GetLineInfoByNo" :condition="line.condition" />
-						</div>
-					</div>
-				</div>
-			</el-col> -->
 		</el-row>
 		<el-row :gutter="20" class="cardWidthrow">
 			<el-col :span="12">
@@ -170,9 +124,110 @@
 			</el-col>
 
 		</el-row>
-		
+
 	</div>
-	
+	<el-dialog v-model="RGVFirst" title="RGV淇℃伅鏌ョ湅" :before-close="handleClose">
+		<el-form ref="$form" :model="StackerCrane" label-position="left" label-width="120px" size="medium">
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="璁惧缂栧彿锛�">
+						<!-- <el-input v-model="equipNo"></el-input> -->
+						<j-el-description :value="RGV01.DeviceName" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="璁惧鐘舵��:">
+						<j-el-description :value="RGV01.Fault" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="宸ヤ綔妯″紡:">
+						<j-el-description :value="RGV01.Automatic" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="浠诲姟鍙凤細">
+						<j-el-description :value="RGV01.CurrentTaskNum" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="浣滀笟鐘舵��:">
+						<j-el-description :value="RGV01.Running" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="褰撳墠姘村钩浣嶇疆锛�">
+						<j-el-description :value="RGV01.LevelPoint" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-divider />
+			<h4 style="margin-bottom: 50px;">鎵嬪姩鎿嶄綔</h4>
+			<el-form ref="form" :model="formFirst" label-width="90px">
+				<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+					<el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+						<el-form-item label="浠诲姟鍛戒护" prop="TargetAddress">
+							<el-select size="large" v-model="formFirst.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+								<el-option label="鍏ュ簱" value="17" />
+								<el-option label="鍑哄簱" value="18" />
+								<el-option label="绉诲簱" value="20" />
+								<el-option label="鍙栬揣" value="24" />
+								<el-option label="鏀捐揣" value="48" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+					<el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+						<el-form-item label="璧风偣琛屽垪灞�:">
+							<el-input size="large" v-model="formFirst.SourceAddress" style="width: 800px"
+								placeholder="璇疯緭鍏ヨ捣鐐硅鍒楀眰" />
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+					<el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+						<el-form-item label="缁堢偣琛屽垪灞�:">
+							<el-input size="large" v-model="formFirst.TargetAddress" style="width: 800px"
+								placeholder="璇疯緭鍏ョ粓鐐硅鍒楀眰" />
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<el-divider />
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+				<el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="primary" size="small" plain @click="start">
+						<i class="el-icon-check">鍚姩</i>
+					</el-button>
+
+				</el-col>
+				<el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="warning" size="small" plain @click="reset">
+						<i class="el-icon-check">澶嶄綅</i>
+					</el-button>
+
+				</el-col>
+				<el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="danger" size="small" plain @click="emergencyStop">
+						<i class="el-icon-check">鎬ュ仠</i>
+					</el-button>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<div class="dialog-footer">
+				<el-button @click="RGVFirst = false">鍙栨秷</el-button>
+				<el-button type="primary" @click="RGVFirst = false">
+					纭
+				</el-button>
+			</div>
+		</template>
+	</el-dialog>
 </template>
 
 <script>
@@ -182,7 +237,7 @@
 import LineInfoCopy from "./LineInfocopy.vue";
 import LineComponent from './LineComponent.vue';
 import eventBus from "../uitils/eventBus";
-
+import JElDescription from "./JElDescription";
 
 export default {
 	data() {
@@ -545,7 +600,12 @@
 				CurrentTaskNum: "",
 				Running: "",
 				DeviceName: "",
+				DeviceCOde: "",
+				StackerAlarm:"",
 			},
+			RGVFirst: false,
+			RGVSecond: false,
+			RGVThird: false,
 			xValue1: 0,
 			xValue2: 0,
 			xValue3: 0,
@@ -554,38 +614,45 @@
 			xValue6: 0,
 			timer1: null, // 瀹氭椂鍣ㄥ彉閲�
 			timer2: null, // 瀹氭椂鍣ㄥ彉閲�
-			RGV01:{
+			RGV01: {
 				Automatic: "",
 				Fault: "",
-				LevelPoint:0,
+				LevelPoint: 0,
 				CurrentTaskNum: "",
 				Running: "",
 				DeviceName: "",
-				DeviceCode:"RGV01",
+				DeviceCode: "RGV01",
 			},
-			RGV02:{
+			RGV02: {
 				Automatic: "",
 				Fault: "",
-				LevelPoint:1280,
+				LevelPoint: 1280,
 				CurrentTaskNum: "",
 				Running: "",
 				DeviceName: "",
-				DeviceCode:"RGV02",
+				DeviceCode: "RGV02",
 			},
-			RGV03:{
+			RGV03: {
 				Automatic: "",
 				Fault: "",
-				LevelPoint:0,
+				LevelPoint: 0,
 				CurrentTaskNum: "",
 				Running: "",
 				DeviceName: "",
-				DeviceCode:"",
+				DeviceCode: "",
+			},
+			formFirst: {
+				TaskType: "",
+				SourceAddress: "",
+				TargetAddress: "",
+				DeviceCode: "",
 			},
 		};
 	},
 	components: {
 		LineInfoCopy,
 		LineComponent,
+		JElDescription,
 	},
 	methods: {
 		groupedLines(linescopy) {
@@ -602,42 +669,51 @@
 			});
 			return Object.values(groups);
 		},
-		updateRGVOne(){
-        if(this.RGV01.Automatic=="鑱旀満妯″紡"&&this.RGV01.Fault!="鏁呴殰"&&this.RGV01.Running=="寰呮満"){
-          return 'dot-Automatic ';
-        }
-        else if(this.RGV01.Automatic=="鑱旀満妯″紡"&&this.RGV01.Fault!="鏁呴殰"&&this.RGV01.Running=="杩愯涓�"){
-          return 'dot-Running ';
-        }else if(this.RGV01.Fault=="鏁呴殰"){
-          return 'dot-Fault ';
-        }else{
-          return 'dot-Fault ';
-        }
+		updateRGVOne() {
+			if (this.RGV01.Automatic == "鑱旀満妯″紡" && this.RGV01.Fault != "鏁呴殰" && this.RGV01.Running == "寰呮満") {
+				return 'dot-Automatic ';
+			}
+			else if (this.RGV01.Automatic == "鑱旀満妯″紡" && this.RGV01.Fault != "鏁呴殰" && this.RGV01.Running == "杩愯涓�") {
+				return 'dot-Running ';
+			} else if (this.RGV01.Fault == "鏁呴殰") {
+				return 'dot-Fault ';
+			} else {
+				return 'dot-Fault ';
+			}
 		},
-		updateRGVTwo(){
-			if(this.RGV02.Automatic=="鑱旀満妯″紡"&&this.RGV02.Fault!="鏁呴殰"&&this.RGV02.Running=="寰呮満"){
-          return 'dot-Automatic ';
-        }
-        else if(this.RGV02.Automatic=="鑱旀満妯″紡"&&this.RGV01.Fault!="鏁呴殰"&&this.RGV02.Running=="杩愯涓�"){
-          return 'dot-Running ';
-        }else if(this.RGV02.Fault=="鏁呴殰"){
-          return 'dot-Fault ';
-        }else{
-          return 'dot-Fault ';
-        }
+		updateRGVTwo() {
+			if (this.RGV02.Automatic == "鑱旀満妯″紡" && this.RGV02.Fault != "鏁呴殰" && this.RGV02.Running == "寰呮満") {
+				return 'dot-Automatic ';
+			}
+			else if (this.RGV02.Automatic == "鑱旀満妯″紡" && this.RGV01.Fault != "鏁呴殰" && this.RGV02.Running == "杩愯涓�") {
+				return 'dot-Running ';
+			} else if (this.RGV02.Fault == "鏁呴殰") {
+				return 'dot-Fault ';
+			} else {
+				return 'dot-Fault ';
+			}
 		},
-		updateRGV03(){
-			if(this.RGV03.Automatic=="鑱旀満妯″紡"&&this.RGV03.Fault!="鏁呴殰"&&this.RGV03.Running=="寰呮満"){
-          return 'dot-Automatic ';
-        }
-        else if(this.RGV03.Automatic=="鑱旀満妯″紡"&&this.RGV03.Fault!="鏁呴殰"&&this.RGV03.Running=="杩愯涓�"){
-          return 'dot-Running ';
-        }else if(this.RGV03.Fault=="鏁呴殰"){
-          return 'dot-Fault ';
-        }else{
-          return 'dot-Fault ';
-        }
+		updateRGV03() {
+			if (this.RGV03.Automatic == "鑱旀満妯″紡" && this.RGV03.Fault != "鏁呴殰" && this.RGV03.Running == "寰呮満") {
+				return 'dot-Automatic ';
+			}
+			else if (this.RGV03.Automatic == "鑱旀満妯″紡" && this.RGV03.Fault != "鏁呴殰" && this.RGV03.Running == "杩愯涓�") {
+				return 'dot-Running ';
+			} else if (this.RGV03.Fault == "鏁呴殰") {
+				return 'dot-Fault ';
+			} else {
+				return 'dot-Fault ';
+			}
 		},
+		mouseClickRGVFirst() {
+			this.fullscreenLoading = true;
+			this.RGVFirst = true;
+			this.fullscreenLoading = false;
+		}, mouseClickSecond() {
+			this.fullscreenLoading = true;
+			this.RGVSecond = true;
+			this.fullscreenLoading = false;
+		}
 	},
 	computed: {
 
@@ -646,7 +722,7 @@
 	},
 	created() {
 		eventBus.on('stackerData', eventData => {
-			
+
 			const stackerComponentsMap = {
 				"SC01": 'stacker1',
 				"SC02": 'stacker2',
@@ -657,13 +733,16 @@
 			};
 			const componentKey = stackerComponentsMap[eventData.data.deviceCode];
 			if (componentKey) {
-				this.StackerCrane.Automatic=eventData.data.automatic;
-				this.StackerCrane.Fault=eventData.data.fault;
-				this.StackerCrane.Running=eventData.data.running;
-				this.StackerCrane.CurrentColumn=eventData.data.currentColumn;
-				this.StackerCrane.CurrentLayer=eventData.data.currentLayer;
-				this.StackerCrane.LevelPoint=eventData.data.levelPoint;
-				this.StackerCrane.DeviceName=eventData.data.deviceName;
+				this.StackerCrane.Automatic = eventData.data.automatic;
+				this.StackerCrane.Fault = eventData.data.fault;
+				this.StackerCrane.Running = eventData.data.running;
+				this.StackerCrane.CurrentColumn = eventData.data.currentColumn;
+				this.StackerCrane.CurrentLayer = eventData.data.currentLayer;
+				this.StackerCrane.LevelPoint = eventData.data.levelPoint;
+				this.StackerCrane.DeviceName = eventData.data.deviceName;
+				this.StackerCrane.DeviceCode = eventData.data.deviceCode;
+				this.StackerCrane.StackerAlarm = eventData.data.stackerAlarm;
+				
 				this.$nextTick(() => {
 					this.$refs[componentKey].moveDot(this.StackerCrane);
 				});
@@ -671,26 +750,25 @@
 		});
 
 		eventBus.on('RGVData', eventData => {
-			
-			if(eventData.data.deviceCode=="RGV01"){
-				this.RGV01.Automatic=eventData.data.automatic;
-				this.RGV01.Fault=eventData.data.fault;
-				this.RGV01.Running=eventData.data.running;
-				this.RGV01.LevelPoint=eventData.data.levelPoint;
-				this.RGV01.DeviceName=eventData.data.deviceName;
-				console.log(this.RGV01.LevelPoint)
-			}else if(eventData.data.deviceCode=="RGV02"){
-				this.RGV02.Automatic=eventData.data.automatic;
-				this.RGV02.Fault=eventData.data.fault;
-				this.RGV02.Running=eventData.data.running;
-				this.RGV02.LevelPoint=eventData.data.levelPoint;
-				this.RGV02.DeviceName=eventData.data.deviceName;
-			}else if(eventData.data.deviceCode=="RGV03"){
-				this.RGV03.Automatic=eventData.data.automatic;
-				this.RGV03.Fault=eventData.data.fault;
-				this.RGV03.Running=eventData.data.running;
-				this.RGV03.LevelPoint=eventData.data.levelPoint;
-				this.RGV03.DeviceName=eventData.data.deviceName;
+
+			if (eventData.data.deviceCode == "RGV01") {
+				this.RGV01.Automatic = x.Automatic == null ? "鏁呴殰" : x.Automatic;
+				this.RGV01.Fault = x.Fault == null ? "鏁呴殰" : x.Fault;
+				this.RGV01.Running = x.Running == null ? "鏁呴殰" : x.Running;
+				this.RGV01.LevelPoint = x.LevelPoint;
+				this.RGV01.DeviceName = x.DeviceName;
+			} else if (eventData.data.deviceCode == "RGV02") {
+				this.RGV02.Automatic = x.Automatic == null ? "鏁呴殰" : x.Automatic;
+				this.RGV02.Fault = x.Fault == null ? "鏁呴殰" : x.Fault;
+				this.RGV02.Running = x.Running == null ? "鏁呴殰" : x.Running;
+				this.RGV02.LevelPoint = x.LevelPoint;
+				this.RGV02.DeviceName = x.DeviceName;
+			} else if (eventData.data.deviceCode == "RGV03") {
+				this.RGV03.Automatic = x.Automatic == null ? "鏁呴殰" : x.Automatic;
+				this.RGV03.Fault = x.Fault == null ? "鏁呴殰" : x.Fault;
+				this.RGV03.Running = x.Running == null ? "鏁呴殰" : x.Running;
+				this.RGV03.LevelPoint = x.LevelPoint;
+				this.RGV03.DeviceName = x.DeviceName;
 			}
 
 		});
@@ -762,52 +840,54 @@
 	color: rgba(0, 195, 255, 0.822);
 	margin-bottom: 12px;
 }
+
 .dot-Running {
-  position: absolute;
-  top: -5px;
-  width: 20px;
+	position: absolute;
+	top: -5px;
+	width: 20px;
 	height: 20px;
-  border-radius: 50%;
-  background-color: #409eff;
-  transition: transform 0.3s ease;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  font-size: 9px;
-  font-weight: bold;
-  color: white;
+	border-radius: 50%;
+	background-color: #409eff;
+	transition: transform 0.3s ease;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	font-size: 9px;
+	font-weight: bold;
+	color: white;
 }
+
 .dot-Automatic {
-  position: absolute;
-  top: -5px;
-  width: 20px;
+	position: absolute;
+	top: -5px;
+	width: 20px;
 	height: 20px;
-  border-radius: 50%;
-  background-color: #0df705;
-  transition: transform 0.3s ease;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  font-size: 9px;
-  font-weight: bold;
-  color: white;
+	border-radius: 50%;
+	background-color: #0df705;
+	transition: transform 0.3s ease;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	font-size: 9px;
+	font-weight: bold;
+	color: white;
 }
 
 .dot-Fault {
-  position: absolute;
-  top: -5px;
-  width: 20px;
+	position: absolute;
+	top: -5px;
+	width: 20px;
 	height: 20px;
 	/* right:0px; */
-  border-radius: 50%;
-  background-color: #f80410;
-  transition: transform 0.3s ease;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  font-size: 9px;
-  font-weight: bold;
-  color: white;
+	border-radius: 50%;
+	background-color: #f80410;
+	transition: transform 0.3s ease;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	font-size: 9px;
+	font-weight: bold;
+	color: white;
 }
 
 
@@ -816,9 +896,10 @@
 	height: 1280px;
 	background-color: #ecf5ff;
 	width: 20px;
-	top:30px;
-	left:200px
+	top: 30px;
+	left: 200px
 }
+
 .RGVline {
 	position: absolute;
 	top: 0;
@@ -827,6 +908,7 @@
 	height: 2px;
 	background-color: #a0cfff;
 }
+
 .line {
 	position: absolute;
 	top: 0;
@@ -835,4 +917,7 @@
 	height: 2px;
 	background-color: #a0cfff;
 }
-</style>
\ No newline at end of file
+
+:deep(.j-el-description) {
+	background-color: #e40e0e;
+}</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue"
index 5c5043c..cf55c98 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue"
@@ -83,6 +83,22 @@
           </el-form-item>
         </el-col>
       </el-row>
+
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+        <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+          <el-form-item label="浣滀笟鐘舵��:">
+            <el-input v-model="input" style="width: 240px" placeholder="Please input" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+          <el-form-item label="褰撳墠琛屽垪灞傦細">
+            <j-el-description
+              :value="StackerCrane.CurrentRow + '-' + StackerCrane.CurrentColumn + '-' + StackerCrane.CurrentLayer"
+              type="primary" ellipsis></j-el-description>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
     </el-form>
     <template #footer>
       <div class="dialog-footer">
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
index d377da6..0aebd5a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
@@ -20,7 +20,9 @@
   <div class="line-container">
     <div class="line"></div>
     <!-- <div class="dot" :style="{ right: dotPosition + 'px' }" ref="childDot" @click="mouseClick"></div> -->
-    <div :class="update()" :style="{ transform: `translateX(${StackerCrane.CurrentColumn<33?StackerCrane.CurrentColumn * 30-29:0}px)` }" ref="childDot" @click="mouseClick"></div>
+    <div :class="update()"
+      :style="{ transform: `translateX(${StackerCrane.CurrentColumn < 33 ? StackerCrane.CurrentColumn * 30 - 29 : 0}px)` }"
+      ref="childDot" @click="mouseClick"></div>
   </div>
   <div>
     <el-row style="padding-top: 5px;">
@@ -41,19 +43,17 @@
     </el-row>
   </div>
 
-  <el-dialog v-model="dialogVisible" title="淇℃伅鏌ョ湅" :before-close="handleClose">
-    <el-form ref="$form" :model="StackerCrane" label-position="left" label-width="100px" size="medium">
+  <el-dialog v-model="dialogVisible" title="鍫嗗灈鏈轰俊鎭煡鐪�" :before-close="handleClose">
+    <el-form ref="$form" :model="StackerCrane" label-position="left" label-width="120px" size="medium">
       <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="璁惧缂栧彿锛�">
-            <!-- <el-input v-model="equipNo"></el-input> -->
             <j-el-description :value="StackerCrane.DeviceName" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="璁惧鐘舵��:">
-            <j-el-description :value="StackerCrane.Fault" type="primary"
-              ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.Fault" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
       </el-row>
@@ -69,7 +69,7 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="浣滀笟鐘舵��:">
             <j-el-description :value="StackerCrane.Running" type="primary" ellipsis></j-el-description>
@@ -81,6 +81,64 @@
               :value="StackerCrane.CurrentRow + '-' + StackerCrane.CurrentColumn + '-' + StackerCrane.CurrentLayer"
               type="primary" ellipsis></j-el-description>
           </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+        <el-col :span="24" :offset="0" :push="0" :pull="0" tag="div">
+          <el-form-item label="鎶ヨ淇℃伅:">
+            <j-el-description :value="StackerCrane.StackerAlarm" type="primary" ellipsis></j-el-description>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider />
+      <h4 style="margin-bottom: 50px;">鎵嬪姩鎿嶄綔</h4>
+      <el-form ref="form" :model="form" label-width="90px">
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="浠诲姟鍛戒护"  prop="TargetAddress">
+              <el-select size="large" v-model="form.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+                <el-option label="鍏ュ簱" value="17" />
+                <el-option label="鍑哄簱" value="18" />
+                <el-option label="绉诲簱" value="20" />
+                <el-option label="鍙栬揣" value="24" />
+                <el-option label="鏀捐揣" value="48" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="璧风偣琛屽垪灞�:">
+              <el-input size="large" v-model="form.SourceAddress" style="width: 800px" placeholder="璇疯緭鍏ヨ捣鐐硅鍒楀眰" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="缁堢偣琛屽垪灞�:">
+              <el-input size="large" v-model="form.TargetAddress" style="width: 800px" placeholder="璇疯緭鍏ョ粓鐐硅鍒楀眰" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <el-divider />
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="primary" size="small" plain @click="start">
+            <i class="el-icon-check">鍚姩</i>
+          </el-button>
+
+        </el-col>
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="warning" size="small" plain @click="reset">
+            <i class="el-icon-check">澶嶄綅</i>
+          </el-button>
+
+        </el-col>
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="danger" size="small" plain @click="emergencyStop">
+            <i class="el-icon-check">鎬ュ仠</i>
+          </el-button>
         </el-col>
       </el-row>
     </el-form>
@@ -116,7 +174,15 @@
         CurrentTaskNum: "",
         Running: "",
         DeviceName: "",
-      }
+        DeviceCode: "",
+        StackerAlarm:"",
+      },
+      form: {
+        TaskType: "",
+        SourceAddress: "",
+        TargetAddress: "",
+        DeviceCode: "",
+      },
     };
   },
   props: {
@@ -135,31 +201,84 @@
   },
   methods: {
     moveDot(x) {
-        this.StackerCrane.Automatic=x.Automatic==null?"鏁呴殰":x.Automatic;
-				this.StackerCrane.Fault=x.Fault==null?"鏁呴殰":x.Fault;
-				this.StackerCrane.Running=x.Running==null?"鏁呴殰":x.Running;
-				this.StackerCrane.CurrentColumn=x.CurrentColumn==undefined?1:x.CurrentColumn;
-				this.StackerCrane.CurrentLayer=x.CurrentLayer==undefined?1:x.CurrentLayer;
-				this.StackerCrane.LevelPoint=x.LevelPoint;
-				this.StackerCrane.DeviceName=x.DeviceName;
+      this.StackerCrane.Automatic = x.Automatic == null ? "鏁呴殰" : x.Automatic;
+      this.StackerCrane.Fault = x.Fault == null ? "鏁呴殰" : x.Fault;
+      this.StackerCrane.Running = x.Running == null ? "鏁呴殰" : x.Running;
+      this.StackerCrane.CurrentColumn = x.CurrentColumn == undefined ? 1 : x.CurrentColumn;
+      this.StackerCrane.CurrentLayer = x.CurrentLayer == undefined ? 1 : x.CurrentLayer;
+      this.StackerCrane.LevelPoint = x.LevelPoint;
+      this.StackerCrane.DeviceName = x.DeviceName;
+      this.StackerCrane.StackerAlarm = x.StackerAlarm;
+      this.form.DeviceCode = x.DeviceCode;
     },
-    update(){
-      if(this.StackerCrane.Automatic=="鑱旀満妯″紡"&&this.StackerCrane.Fault!="鏁呴殰"&&this.StackerCrane.Running=="寰呮満"){
-          return 'dot-Automatic ';
-        }
-        else if(this.StackerCrane.Automatic=="鑱旀満妯″紡"&&this.StackerCrane.Fault!="鏁呴殰"&&this.StackerCrane.Running=="杩愯涓�"){
-          return 'dot-Running ';
-        }else if(this.StackerCrane.Fault=="鏁呴殰"){
-          return 'dot-Fault ';
-        }else{
-          return 'dot-Fault ';
-        }
-		},
+    update() {
+      if (this.StackerCrane.Automatic == "鑱旀満妯″紡" && this.StackerCrane.Fault != "鏁呴殰" && this.StackerCrane.Running == "寰呮満") {
+        return 'dot-Automatic ';
+      }
+      else if (this.StackerCrane.Automatic == "鑱旀満妯″紡" && this.StackerCrane.Fault != "鏁呴殰" && this.StackerCrane.Running == "杩愯涓�") {
+        return 'dot-Running ';
+      } else if (this.StackerCrane.Fault == "鏁呴殰") {
+        return 'dot-Fault ';
+      } else {
+        return 'dot-Fault ';
+      }
+    },
     mouseClick() {
       this.fullscreenLoading = true;
       this.dialogVisible = true;
       this.fullscreenLoading = false;
     },
+    start() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerHandTask", this.form)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("鍫嗗灈鏈哄懡浠ゅ凡涓嬪彂");
+            // $vue.success("鎴愬姛.");
+            this.show = false;
+            $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    }, reset() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerReset?DeviceCode=" + this.form.DeviceCode)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("澶嶄綅鎴愬姛");
+            // $vue.success("鎴愬姛.");
+            this.show = false;
+            $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    },
+
+    emergencyStop() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerEmergencyStop?DeviceCode=" + this.form.DeviceCode)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("鎬ュ仠宸叉寜涓�");
+            // $vue.success("鎴愬姛.");
+            // this.show = false;
+            // $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    }
   },
 };
 </script>
@@ -196,6 +315,7 @@
   font-weight: bold;
   color: white;
 }
+
 .dot-Automatic {
   position: absolute;
   top: -5px;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfocopy.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfocopy.vue"
index 015c540..544ed9e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfocopy.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfocopy.vue"
@@ -1,10 +1,11 @@
 <template>
-		<div :class="update()" :style="{ left: left, top: top, marginBottom:0+'px',marginTop:15+'px'} " @click="mouseClick" v-loading.fullscreen.lock="fullscreenLoading">
+	<div :class="update()" :style="{ left: left, top: top, marginBottom: 0 + 'px', marginTop: 15 + 'px' }"
+		@click="mouseClick" v-loading.fullscreen.lock="fullscreenLoading">
 		<img v-if="imgType === '2'" src="../../public/lines.png" />
 		<img v-if="imgType === '1'" src="../../public/lines2.png" />
 		<label v-if="equipNo" class="equip-no">{{ equipNo }}</label>
 	</div>
-	<el-dialog v-model="dialogVisible" title="淇℃伅鏌ョ湅" :before-close="handleClose">
+	<el-dialog v-model="dialogVisible" title="杈撻�佺嚎淇℃伅鏌ョ湅" :before-close="handleClose">
 		<el-form ref="$form" :model="lineItemInfo" label-position="left" label-width="100px" size="medium">
 			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
 				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
@@ -14,26 +15,78 @@
 				</el-col>
 				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
 					<el-form-item label="鏄惁鏈夌洏:">
-						<j-el-description :value="lineItemInfo.r_Line_HasPallet" type="primary"
-							ellipsis></j-el-description>
+						<j-el-description :value="lineItemInfo.r_Line_HasPallet" type="primary" ellipsis></j-el-description>
 					</el-form-item>
 				</el-col>
 			</el-row>
 			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
 				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
 					<el-form-item label="鎵樼洏鏉$爜:">
-						<j-el-description :value="lineItemInfo.r_Line_Barcode" type="primary"
-							ellipsis></j-el-description>
+						<j-el-description :value="lineItemInfo.r_Line_Barcode" type="primary" ellipsis></j-el-description>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
 					<el-form-item label="鎶ヨ浠g爜锛�">
-						<j-el-description :value="lineItemInfo.r_Line_ErrorCode" type="primary"
-							ellipsis></j-el-description>
+						<j-el-description :value="lineItemInfo.r_Line_ErrorCode" type="primary" ellipsis></j-el-description>
+					</el-form-item>
+				</el-col>
+			</el-row>
+
+		</el-form><el-divider />
+		<h4 style="margin-bottom: 20px;">鎵嬪姩鎿嶄綔</h4>
+		<el-form ref="form" :model="form" label-width="100px">
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+				<el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="浠�  鍔�  鍛�  浠�" prop="TargetAddress">
+						<el-select size="large" v-model="form.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+							<el-option label="鍏ュ簱" value="1" />
+							<el-option label="鍑哄簱" value="2" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+			</el-row>
+			<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+				<el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+					<el-form-item label="涓嬩竴鐩爣鍦板潃:">
+						<el-input size="large" v-model="form.SourceAddress" placeholder="璇疯緭鍏ヨ捣鐐硅鍒楀眰" />
 					</el-form-item>
 				</el-col>
 			</el-row>
 		</el-form>
+		<el-divider />
+		<el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="primary" size="small" plain @click="SendCommand">
+					<i class="el-icon-check">鍙戦�佸懡浠�</i>
+				</el-button>
+			</el-col>
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="warning" size="small" plain @click="ConveyorLineReset">
+					<i class="el-icon-check">澶嶄綅</i>
+				</el-button>
+
+			</el-col>
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="danger" size="small" plain @click="ConveyorLineEmergencyStop">
+					<i class="el-icon-check">鍋滄</i>
+				</el-button>
+			</el-col>
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="danger" size="small" plain @click="ConveyorLineReturn">
+					<i class="el-icon-check">閫�鍥�</i>
+				</el-button>
+			</el-col>
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="danger" size="small" plain @click="ConveyorLineCancel">
+					<i class="el-icon-check">鍙栨秷浠诲姟</i>
+				</el-button>
+			</el-col>
+			<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+				<el-button type="danger" size="small" plain @click="ConveyorLineInitialize">
+					<i class="el-icon-check">宸ヤ綅鍒濆鍖�</i>
+				</el-button>
+			</el-col>
+		</el-row>
 		<template #footer>
 			<div class="dialog-footer">
 				<el-button @click="dialogVisible = false">鍙栨秷</el-button>
@@ -77,7 +130,7 @@
 			type: String,
 			default: "",
 		},
-		condition:{
+		condition: {
 			type: Boolean,
 			default: false,
 		},
@@ -94,6 +147,11 @@
 				r_Line_ErrorCode: "",
 				r_Line_Target: "",
 			},
+			form: {
+				TaskType: "",
+				TargetAddress: "",
+				DeviceCode: "",
+			},
 		};
 	},
 	mounted() {
@@ -109,25 +167,110 @@
 			this.fullscreenLoading = true;
 			this.dialogVisible = true;
 			// 澶勭悊鐐瑰嚮浜嬩欢
-			if (this.url != "") {
-				this.http.post(this.url + "?equipNo=" + this.equipNo, null, "")
-					.then((x) => {
-						if (x.status) {
-							this.lineItemInfo = x.data;
-						} else {
-							this.$message({
-								type: "error",
-								message: x.message,
-							});
-						}
-					});
-			}
+			this.http.post("api/DeviceInfo/GetConveyorLineInfo?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (x.status) {
+						this.lineItemInfo = x.data;
+					} else {
+						this.$message({
+							type: "error",
+							message: x.message,
+						});
+					}
+				});
+
 			this.fullscreenLoading = false;
-			// this.dialogVisible = false;
 		},
-		
-		update(){
-			 return !this.condition ? 'custom-img' : 'custom-img-color'
+
+		SendCommand() {
+			this.fullscreenLoading = true;
+			this.form.DeviceCode=this.equipNo;
+			this.http.post("api/DeviceInfo/ConveyorLineHandTask" ,this.form)
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		}, 
+		ConveyorLineReset() {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/ConveyorLineReset?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		ConveyorLineEmergencyStop() {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/ConveyorLineEmergencyStop?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		}, 
+		ConveyorLineReturn() {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/ConveyorLineReturn?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		ConveyorLineCancel() {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/ConveyorLineCancel?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		ConveyorLineInitialize() {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/ConveyorLineInitialize?DeviceChildCode=" + this.equipNo, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		update() {
+			return !this.condition ? 'custom-img' : 'custom-img-color'
 		},
 		startTimer() {
 			// 寮�鍚畾鏃跺櫒锛屾瘡3绉掓墽琛屼竴娆�
@@ -145,10 +288,11 @@
 	display: inline-block;
 	/* background-color:  #d9ecff ; */
 }
+
 .custom-img-color {
 	position: relative;
 	display: inline-block;
-	background-color:  #05fa7f ;
+	background-color: #05fa7f;
 	color: white;
 	text-align: center;
 }
@@ -168,6 +312,7 @@
 	width: 40px;
 	height: 40px;
 }
+
 .custom-img-color img {
 	width: 40px;
 	height: 40px;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo"
index f147b03..784ae71 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
index cc8311d..7722730 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json"
@@ -3,36 +3,40 @@
   "WorkspaceRootPath": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgvjob\\commonrgvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgvjob\\commonrgvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\ideviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\ideviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgvjob_firstfloor\\commonrgv_firstfloorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgvjob_firstfloor\\commonrgv_firstfloorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgvjob\\commonrgvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgvjob\\commonrgvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\enum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\enum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -54,107 +58,120 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "TaskStatusEnum.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
-              "RelativeToolTip": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
-              "ViewState": "AgIAAEUAAAAAAAAAAAAewFQAAAAMAAAAAAAAAA==",
+              "DocumentIndex": 1,
+              "Title": "StackerCraneDBName.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ViewState": "AgIAAG4AAAAAAAAAAADwv5EAAAAQAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-29T03:10:22.341Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "CommonConveyorLineJob.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AgIAALEAAAAAAAAAAAAvwNIAAAAlAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T03:47:03.579Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "CommonRGV_FirstFloorJob.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "ViewState": "AgIAAMsCAAAAAAAAAAD4v+QCAAA7AAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-28T02:06:53.534Z",
+              "WhenOpened": "2025-07-30T05:32:19.549Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 2,
+              "Title": "DeviceInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ViewState": "AgIAAOQBAAAAAAAAAAA4wPgBAAA/AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T01:59:05.153Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
               "Title": "RequestInbound.cs",
               "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
               "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
-              "ViewState": "AgIAABQAAAAAAAAAAAAowC4AAAAxAAAAAAAAAA==",
+              "ViewState": "AgIAADQAAAAAAAAAAAAWwDgAAACkAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-24T04:21:01.123Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "CommonRGVJob.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
-              "ViewState": "AgIAAJIAAAAAAAAAAAAAAKsAAACWAAAAAAAAAA==",
+              "DocumentIndex": 7,
+              "Title": "TaskStatusEnum.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
+              "ViewState": "AgIAAMcAAAAAAAAAAAAAwM8AAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-28T04:13:17.74Z",
+              "WhenOpened": "2025-07-29T03:10:22.341Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "CommonConveyorLineJob.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ViewState": "AgIAAAgBAAAAAAAAAAD4vx4BAACTAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-24T03:47:03.579Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "TaskService.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAALkCAAAAAAAAAAAAAJwCAABKAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T03:47:03.559Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "ITaskService.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ViewState": "AgIAAFIAAAAAAAAAAAAnwGIAAAAiAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-28T11:23:22.437Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
               "Title": "CommonStackerCraneJob.cs",
               "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AgIAAMUAAAAAAAAAAAAUwNQAAABEAAAAAAAAAA==",
+              "ViewState": "AgIAAHIAAAAAAAAAAAAuwKgAAAAkAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-24T03:54:34.335Z",
               "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "IDeviceInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "ViewState": "AgIAACwAAAAAAAAAAAAcwEcAAAAoAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T02:35:39.48Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "DeviceInfoController.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "ViewState": "AgIAACoAAAAAAAAAAAAMwDkAAAAqAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T02:36:25.787Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "CommonRGVJob.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
+              "ViewState": "AgIAAJwAAAAAAAAAAAAQwKsAAACWAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-28T04:13:17.74Z",
+              "EditorCaption": ""
             }
           ]
         }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
index fb1863b..8ddf200 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json"
@@ -3,24 +3,28 @@
   "WorkspaceRootPath": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgvjob_firstfloor\\commonrgv_firstfloorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\rgvjob_firstfloor\\commonrgv_firstfloorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\stackercranedbname.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_quartzjob\\service\\ideviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\ideviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\rgvjob\\commonrgvjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -31,8 +35,8 @@
       "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\enum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\get\\aotansiwcs\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\task\\requestinbound.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -42,7 +46,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 4,
+          "SelectedChildIndex": 7,
           "Children": [
             {
               "$type": "Bookmark",
@@ -54,13 +58,52 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
+              "DocumentIndex": 1,
+              "Title": "StackerCraneDBName.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneDBName.cs",
+              "ViewState": "AgIAAG4AAAAAAAAAAADwv5EAAAAQAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T05:32:19.549Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "DeviceInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ViewState": "AgIAAOQBAAAAAAAAAAA4wPgBAAA/AAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T01:59:05.153Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "RequestInbound.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
+              "ViewState": "AgIAADQAAAAAAAAAAAAWwDgAAACkAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-24T04:21:01.123Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
               "Title": "TaskStatusEnum.cs",
               "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
               "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
               "RelativeToolTip": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
-              "ViewState": "AgIAAEUAAAAAAAAAAAAewFQAAAAMAAAAAAAAAA==",
+              "ViewState": "AgIAAMcAAAAAAAAAAAAAwM8AAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-29T03:10:22.341Z",
               "EditorCaption": ""
@@ -73,7 +116,7 @@
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AgIAALEAAAAAAAAAAAAvwNIAAAAlAAAAAAAAAA==",
+              "ViewState": "AgIAAAgBAAAAAAAAAAD4vx4BAACTAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-24T03:47:03.579Z",
               "EditorCaption": ""
@@ -81,79 +124,53 @@
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "CommonRGV_FirstFloorJob.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\RGVJob_FirstFloor\\CommonRGV_FirstFloorJob.cs",
-              "ViewState": "AgIAAL8AAAAAAAAAAAAtwNUAAAAcAAAAAAAAAA==",
+              "Title": "CommonStackerCraneJob.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs*",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs*",
+              "ViewState": "AgIAAGMAAAAAAAAAAAAuwKgAAACSAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-28T02:06:53.534Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "RequestInbound.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\Task\\RequestInbound.cs",
-              "ViewState": "AgIAABQAAAAAAAAAAAAowC4AAAAxAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T04:21:01.123Z",
+              "WhenOpened": "2025-07-24T03:54:34.335Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 5,
+              "Title": "IDeviceInfoService.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\IDeviceInfoService.cs",
+              "ViewState": "AgIAACwAAAAAAAAAAAAcwEcAAAAoAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T02:35:39.48Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "DeviceInfoController.cs",
+              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
+              "ViewState": "AgIAACoAAAAAAAAAAAAMwDkAAAAqAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2025-07-30T02:36:25.787Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
               "Title": "CommonRGVJob.cs",
               "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
               "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
               "RelativeToolTip": "WIDESEAWCS_Tasks\\RGVJob\\CommonRGVJob.cs",
-              "ViewState": "AgIAAJIAAAAAAAAAAAAAAKsAAACWAAAAAAAAAA==",
+              "ViewState": "AgIAAJwAAAAAAAAAAAAQwKsAAACWAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-28T04:13:17.74Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "TaskService.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AgIAAH0CAAAAAAAAAAAuwJwCAABKAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T03:47:03.559Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "ITaskService.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ViewState": "AgIAAFIAAAAAAAAAAAAnwGIAAAAiAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-28T11:23:22.437Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "CommonStackerCraneJob.cs",
-              "DocumentMoniker": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ToolTip": "E:\\GET\\AoTanSiWCS\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AgIAAMUAAAAAAAAAAAAUwNQAAABEAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T03:54:34.335Z",
               "EditorCaption": ""
             }
           ]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/HandTask/StackerHandTask.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/HandTask/StackerHandTask.cs"
new file mode 100644
index 0000000..c5681e9
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/HandTask/StackerHandTask.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.StackerHandTask
+{
+    public class HandTask
+    {
+        public string DeviceCode { get; set; }
+        public string TaskType { get; set; }
+        public string SourceAddress { get; set; }
+        public string TargetAddress { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs"
index f6551e1..c96806a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs"
@@ -16,31 +16,41 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using AutoMapper;
+using HslCommunication;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.StackerHandTask;
+using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_Model.BasicInfo;
+using WIDESEAWCS_QuartzJob.DeviceBase;
 using WIDESEAWCS_QuartzJob.DeviceEnum;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 using WIDESEAWCS_QuartzJob.Repository;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
+using static WIDESEAWCS_QuartzJob.Service.DeviceInfoService;
 
 namespace WIDESEAWCS_QuartzJob.Service
 {
     public class DeviceInfoService : ServiceBase<Dt_DeviceInfo, IDeviceInfoRepository>, IDeviceInfoService
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IDt_StationManagerRepository _stationManagerRepository;
         private readonly IMapper _mapper;
-        public DeviceInfoService(IDeviceInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper) : base(BaseDal)
+        public DeviceInfoService(IDeviceInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, IDt_StationManagerRepository stationManagerRepository) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _mapper = mapper;
+            _stationManagerRepository = stationManagerRepository;
         }
 
         public override WebResponseContent AddData(SaveModel saveModel)
@@ -57,5 +67,666 @@
             List<Dt_DeviceInfo> deviceInfos = await Db.Queryable<Dt_DeviceInfo>().Where(x => x.DeviceStatus == ((int)DeviceStatusEnum.Enable).ToString()).Includes(x => x.ProtocolList).ToListAsync();
             return _mapper.Map<List<DeviceInfoDTO>>(deviceInfos);
         }
+
+        #region  鍫嗗灈鏈烘墜鍔ㄥ懡浠�
+
+        public WebResponseContent StackerHandTask(HandTask stackerhand)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand();
+
+                if (stackerhand == null || stackerhand.TaskType == "")
+                {
+                    return content.Error("璇疯緭鍏ヤ换鍔″懡浠�");
+                }
+                stackerCraneTaskCommand.WorkType = (byte)Convert.ToSByte(stackerhand.TaskType);
+                //鍏ュ簱
+                if (stackerhand.TaskType == "17")
+                {
+                    string[] sourceCodes = stackerhand.SourceAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(sourceCodes[0]);
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"璧风偣閿欒锛氥�恵stackerhand.SourceAddress}銆�");
+                    }
+
+                    string[] targetCodes = stackerhand.TargetAddress.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(targetCodes[0]);
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"缁堢偣閿欒锛氥�恵stackerhand.TargetAddress}銆�");
+                    }
+                }
+                //鍑哄簱
+                else if (stackerhand.TaskType == "18")
+                {
+                    string[] sourceCodes = stackerhand.SourceAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(sourceCodes[0]);
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"璧风偣閿欒锛氥�恵stackerhand.SourceAddress}銆�");
+                    }
+                    string[] targetCodes = stackerhand.TargetAddress.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(targetCodes[0]);
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"缁堢偣閿欒锛氥�恵stackerhand.TargetAddress}銆�");
+                    }
+                }
+                //绉诲簱
+                else if (stackerhand.TaskType == "20")
+                {
+                    string[] sourceCodes = stackerhand.SourceAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(sourceCodes[0]);
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"璧风偣閿欒锛氥�恵stackerhand.SourceAddress}銆�");
+                    }
+
+                    string[] targetCodes = stackerhand.TargetAddress.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(targetCodes[0]);
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"缁堢偣閿欒锛氥�恵stackerhand.TargetAddress}銆�");
+                    }
+                }
+                //鍙栬揣
+                else if (stackerhand.TaskType == "24")
+                {
+                    string[] sourceCodes = stackerhand.SourceAddress.Split("-");
+                    if (sourceCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(sourceCodes[0]);
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(sourceCodes[1]);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(sourceCodes[2]);
+
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(0);
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(0);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(0);
+                    }
+                    else
+                    {
+                        return content.Error($"璧风偣閿欒锛氥�恵stackerhand.SourceAddress}銆�");
+                    }
+                }
+                //鏀捐揣
+                else if (stackerhand.TaskType == "48")
+                {
+                    string[] targetCodes = stackerhand.TargetAddress.Split("-");
+                    if (targetCodes.Length == 3)
+                    {
+                        stackerCraneTaskCommand.StartRow = (byte)Convert.ToSByte(0);
+                        stackerCraneTaskCommand.StartColumn = (byte)Convert.ToSByte(0);
+                        stackerCraneTaskCommand.StartLayer = (byte)Convert.ToSByte(0);
+
+                        stackerCraneTaskCommand.EndRow = (byte)Convert.ToSByte(targetCodes[0]);
+                        stackerCraneTaskCommand.EndColumn = (byte)Convert.ToSByte(targetCodes[1]);
+                        stackerCraneTaskCommand.EndLayer = (byte)Convert.ToSByte(targetCodes[2]);
+                    }
+                    else
+                    {
+                        return content.Error($"缁堢偣閿欒锛氥�恵stackerhand.SourceAddress}銆�");
+                    }
+                }
+                else
+                {
+                    return content.Error("鏈壘鍒颁换鍔″懡浠�");
+                }
+                StackerSendCommand(stackerCraneTaskCommand, stackerhand.DeviceCode);
+                return content;
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent StackerReset(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+
+                if (device != null)
+                {
+                    CommonStackerCrane commonStackerCrane = (CommonStackerCrane)device;
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(2));
+                    return content.OK();
+                }
+                else
+                {
+                    return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+                }
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent StackerEmergencyStop(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+
+                if (device != null)
+                {
+                    CommonStackerCrane commonStackerCrane = (CommonStackerCrane)device;
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(2));
+                    return content.OK();
+                }
+                else
+                {
+                    return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+                }
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public void StackerSendCommand(StackerCraneTaskCommand? command,string DeviceCode)
+        {
+            IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+
+            if (device != null)
+            {
+                CommonStackerCrane commonStackerCrane = (CommonStackerCrane)device;
+                if (commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic) && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Fault) && !commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Running))
+                {
+                    commonStackerCrane.SetValue(StackerCraneDBName.TaskNum, (short)Convert.ToInt16(1));
+                    Thread.Sleep(100);
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.StartRow, command.StartRow);
+                    Thread.Sleep(100);
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.StartColumn, command.StartColumn);
+                    Thread.Sleep(100);
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.StartColumn, command.StartLayer);
+                    Thread.Sleep(100);
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.EndRow, command.EndRow);
+                    Thread.Sleep(100);
+
+                    commonStackerCrane.SetValue(StackerCraneDBName.EndColumn, command.EndColumn);
+                    Thread.Sleep(100);
+                    commonStackerCrane.SetValue(StackerCraneDBName.EndLayer, command.EndLayer);
+                    Thread.Sleep(100);
+                    commonStackerCrane.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(command.WorkType));
+                }
+                else
+                {
+                    throw new Exception("璇峰湪鍫嗗灈鏈鸿仈鏈烘ā寮忋�佸緟鏈虹姸鎬併�佹棤鏁呴殰鐨勬儏鍐典笅涓嬪彂浠诲姟");
+                }
+            }
+            else
+            {
+                throw new Exception("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+        }
+
+
+        public class StackerCraneTaskCommand
+        {
+            #region <Public Menber>
+
+            /// <summary>
+            /// 璧峰琛�
+            /// </summary>
+            public byte StartRow { get; set; }
+
+            /// <summary>
+            /// 璧峰鍒�
+            /// </summary>
+            public byte StartColumn { get; set; }
+
+            /// <summary>
+            /// 璧峰灞�
+            /// </summary>
+            public byte StartLayer { get; set; }
+
+            /// <summary>
+            /// 鐩爣琛�
+            /// </summary>
+            public byte EndRow { get; set; }
+
+            /// <summary>
+            /// 鐩爣鍒�
+            /// </summary>
+            public byte EndColumn { get; set; }
+
+            /// <summary>
+            /// 鐩爣灞�
+            /// </summary>
+            public byte EndLayer { get; set; }
+
+
+            /// <summary>
+            /// 浣滀笟绫诲瀷
+            /// </summary>
+            public byte WorkType { get; set; }
+
+
+            /// <summary>
+            /// 棰勭暀瀛楄妭
+            /// </summary>
+            public byte Spare { get; set; }
+
+            /// <summary>
+            /// 浠诲姟鍙�
+            /// </summary>
+            public short TaskNum { get; set; }
+
+            #endregion <Public Menber>
+        }
+        public enum StackerCraneDBName
+        {
+            /// <summary>
+            /// 浠诲姟鍙�
+            /// </summary>
+            TaskNum,
+
+            /// <summary>
+            /// 浣滀笟绫诲瀷
+            /// </summary>
+            WorkType,
+
+            /// <summary>
+            /// 璧峰琛�
+            /// </summary>
+            StartRow,
+
+            /// <summary>
+            /// 璧峰鍒�
+            /// </summary>
+            StartColumn,
+
+            /// <summary>
+            /// 璧峰灞�
+            /// </summary>
+            StartLayer,
+
+            /// <summary>
+            /// 鐩爣琛�
+            /// </summary>
+            EndRow,
+
+            /// <summary>
+            /// 鐩爣鍒�
+            /// </summary>
+            EndColumn,
+
+            /// <summary>
+            /// 鐩爣灞�
+            /// </summary>
+            EndLayer,
+
+            /// <summary>
+            /// 鎵樼洏鍙�
+            /// </summary>
+            Barcode,
+
+            /// <summary>
+            /// 璧风偣
+            /// </summary>
+            StartAddress,
+
+            /// <summary>
+            /// 缁堢偣
+            /// </summary>
+            EndAddress,
+
+            /// <summary>
+            /// 浠诲姟瀹屾垚
+            /// </summary>
+            TaskCompleted,
+
+            /// <summary>
+            /// 浠诲姟鍙戦��
+            /// </summary>
+            SendTask,
+
+            /// <summary>
+            /// 鑷姩鐘舵��
+            /// </summary>
+            Automatic,
+
+            /// <summary>
+            /// 浣滀笟瀹屾垚
+            /// </summary>
+            WorkCompleted,
+
+            /// <summary>
+            /// 杩愯涓�
+            /// </summary>
+            Running,
+
+            /// <summary>
+            /// 鏁呴殰
+            /// </summary>
+            Fault,
+
+            /// <summary>
+            /// 浣滀笟绫诲瀷
+            /// </summary>
+            TaskType,
+
+            /// <summary>
+            /// 褰撳墠浠诲姟鍙�
+            /// </summary>
+            CurrentTaskNum,
+
+            /// <summary>
+            /// 鏈夎揣
+            /// </summary>
+            InStock,
+            PickupLocation,
+            PutcargoLocation,
+
+            /// <summary>
+            /// 褰撳墠鍒�
+            /// </summary>
+            CurrentColumn,
+
+            /// <summary>
+            /// 褰撳墠灞�
+            /// </summary>
+            CurrentLayer,
+
+            /// <summary>
+            /// 姘村钩鐐逛綅
+            /// </summary>
+            LevelPoint,
+        }
+
+        #endregion
+
+        #region  杈撻�佺嚎鎵嬪姩鍛戒护
+
+        public WebResponseContent GetConveyorLineInfo(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        ushort x = conveyorLine.GetValue<ConveyorLineDBName, ushort>(ConveyorLineDBName.InteractiveSignal, stationManager.stationChildCode);
+                        var structs = BitConverter.GetBytes(x).ToArray().ToBoolArray();
+                        short ConveyorLineTaskNum = conveyorLine.GetValue<ConveyorLineDBName, short>(ConveyorLineDBName.ConveyorLineTaskNum, stationManager.stationChildCode);
+                        int ConveyorLineAlarm = conveyorLine.GetValue<ConveyorLineDBName, int>(ConveyorLineDBName.ConveyorLineAlarm, stationManager.stationChildCode);
+                        ConveyorLineTaskCommand obj = new()
+                        {
+                            InStock = structs[2] == true ? "鏈夎揣" : "绌洪棽",
+                            TaskNum = ConveyorLineTaskNum.ToString(),
+                            Alarm = AlarmInfo(ConveyorLineAlarm)
+                        };
+                        return content.OK(data:obj);
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent ConveyorLineHandTask(HandTask ConveyorLinehand)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                if (ConveyorLinehand == null || ConveyorLinehand.TaskType == "")
+                {
+                    return content.Error("璇疯緭鍏ヤ换鍔″懡浠�");
+                }
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == ConveyorLinehand.DeviceCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        //鍏ュ簱
+                        if (ConveyorLinehand.TaskType == "1")
+                        {
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, Convert.ToInt16(ConveyorLinehand.TargetAddress), stationManager.stationChildCode);
+                            Thread.Sleep(100);
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, Convert.ToInt16(1), stationManager.stationChildCode);
+                            Thread.Sleep(100);
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(ConveyorLinehand.TaskType), stationManager.stationChildCode);
+                            return content.OK("鍙戦�佽緭閫佺嚎鍏ュ簱浠诲姟鎴愬姛!");
+                        }
+                        //鍑哄簱
+                        else if (ConveyorLinehand.TaskType == "2")
+                        {
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTargetAddress, Convert.ToInt16(ConveyorLinehand.TargetAddress), stationManager.stationChildCode);
+                            Thread.Sleep(100);
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteConveyorLineTaskNum, Convert.ToInt16(1), stationManager.stationChildCode);
+                            Thread.Sleep(100);
+                            conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(ConveyorLinehand.TaskType), stationManager.stationChildCode);
+                            return content.OK("鍙戦�佽緭閫佺嚎鍑哄簱浠诲姟鎴愬姛!");
+                        }
+                        else
+                        {
+                            return content.Error("鏈壘鍒颁换鍔″懡浠�");
+                        }
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent ConveyorLineReset(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(7), stationManager.stationChildCode);
+                        return content.OK("澶嶄綅鎴愬姛");
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent ConveyorLineEmergencyStop(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(7), stationManager.stationChildCode);
+                        return content.OK("鍋滄鎴愬姛");
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        public WebResponseContent ConveyorLineReturn(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
+                        return content.OK("鍋滄鎴愬姛");
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        public WebResponseContent ConveyorLineCancel(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(4), stationManager.stationChildCode);
+                        return content.OK("鍋滄鎴愬姛");
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        public WebResponseContent ConveyorLineInitialize(string DeviceChildCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Dt_StationManager stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == DeviceChildCode);
+                if (stationManager != null)
+                {
+                    IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManager.stationPLC);
+                    if (device != null)
+                    {
+                        CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
+                        conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(6), stationManager.stationChildCode);
+                        return content.OK("鍋滄鎴愬姛");
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        string AlarmInfo(int Alarm) => Alarm switch
+        {
+            0 => "鎬ュ仠",
+            1 => "鍙橀鍣ㄦ姤璀�1",
+            2 => "鍙橀鍣ㄦ姤璀�2",
+            3 => "宸﹁秴瀹�",
+            4 => "鍙宠秴瀹�",
+            5 => "瓒呴珮",
+            6 => "璇荤爜澶辫触",
+            7 => "璐х墿瓒呴噸",
+            8 => "杩愯瓒呮椂",
+            9 => "宸ヤ綅浼犳劅鍣ㄥ紓甯�",
+            10 => "棰勭暀1",
+            11 => "棰勭暀2",
+            12 => "棰勭暀3",
+            13 => "棰勭暀4",
+            14 => "棰勭暀5",
+            15 => "棰勭暀6",
+        };
+
+        public enum ConveyorLineDBName
+        {
+            InteractiveSignal,
+            ConveyorLineBarcode,
+            ConveyorLineAlarm,
+            ConveyorLineTargetAddress,
+            ConveyorLineTaskNum,
+
+            WriteInteractiveSignal,
+            WriteConveyorLineTargetAddress,
+            WriteConveyorLineTaskNum,
+        }
+        public class ConveyorLineTaskCommand
+        {
+            public string InStock { get; set; }
+
+            public string TaskNum { get; set; }
+
+            public string Alarm { get; set; }
+        }
+        #endregion
+
+        #region  RGV鎵嬪姩鍛戒护
+
+
+        #endregion
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs"
index 7ef5d26..f737f39 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs"
@@ -22,7 +22,7 @@
 using System.Threading.Tasks;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
-
+using WIDESEAWCS_DTO.StackerHandTask;
 using WIDESEAWCS_QuartzJob.DTO;
 using WIDESEAWCS_QuartzJob.Models;
 
@@ -36,5 +36,74 @@
         /// <returns>杩斿洖璁惧淇℃伅浠ュ強瀵瑰簲鍗忚淇℃伅鐨勯泦鍚堛��</returns>
         Task<List<DeviceInfoDTO>> QueryDeviceProInfos();
 
+        /// <summary>
+        /// 鍫嗗灈鏈烘墜鍔ㄤ换鍔�
+        /// </summary>
+        /// <param name="stackerhand"></param>
+        /// <returns></returns>
+        WebResponseContent StackerHandTask(HandTask stackerhand);
+
+        /// <summary>
+        /// 鍫嗗灈鏈烘�ュ仠
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent StackerEmergencyStop(string DeviceCode);
+
+        /// <summary>
+        /// 鍫嗗灈鏈哄浣�
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent StackerReset(string DeviceCode);
+
+        /// <summary>
+        /// 鑾峰彇杈撻�佺嚎淇℃伅
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent GetConveyorLineInfo(string DeviceChildCode);
+
+        /// <summary>
+        /// 杈撻�佺嚎鎵嬪姩浠诲姟
+        /// </summary>
+        /// <param name="stackerhand"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineHandTask(HandTask stackerhand);
+
+        /// <summary>
+        /// 杈撻�佺嚎澶嶄綅
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineReset(string DeviceChildCode);
+
+        /// <summary>
+        /// 杈撻�佺嚎鎬ュ仠
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineEmergencyStop(string DeviceChildCode);
+
+        /// <summary>
+        /// 杈撻�佺嚎閫�鍥�
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineReturn(string DeviceChildCode);
+
+        /// <summary>
+        /// 杈撻�佺嚎鍙栨秷浠诲姟
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineCancel(string DeviceChildCode);
+
+        /// <summary>
+        /// 杈撻�佺嚎鍒濆鍖�
+        /// </summary>
+        /// <param name="DeviceChildCode"></param>
+        /// <returns></returns>
+        WebResponseContent ConveyorLineInitialize(string DeviceChildCode);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj"
index d9a8d3a..7851d37 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/WIDESEAWCS_QuartzJob.csproj"
@@ -13,8 +13,10 @@
 	</ItemGroup>
 
 	<ItemGroup>
+		<ProjectReference Include="..\WIDESEAWCS_BasicInfoRepository\WIDESEAWCS_BasicInfoRepository.csproj" />
 		<ProjectReference Include="..\WIDESEAWCS_Communicator\WIDESEAWCS_Communicator.csproj" />
 		<ProjectReference Include="..\WIDESEAWCS_Core\WIDESEAWCS_Core.csproj" />
+		<ProjectReference Include="..\WIDESEAWCS_DTO\WIDESEAWCS_DTO.csproj" />
 	</ItemGroup>
 
 </Project>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs"
index 5996ff9..5392760 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs"
@@ -3,6 +3,7 @@
 using Microsoft.AspNetCore.Mvc;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_DTO.StackerHandTask;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob.DTO;
@@ -26,5 +27,65 @@
         {
             return await Service.QueryDeviceProInfos();
         }
+
+        [HttpPost, Route("StackerHandTask"), AllowAnonymous]
+        public WebResponseContent StackerHandTask([FromBody] HandTask stackerhand)
+        {
+            return Service.StackerHandTask(stackerhand);
+        }
+
+        [HttpPost, Route("StackerReset"), AllowAnonymous]
+        public WebResponseContent StackerReset(string DeviceCode)
+        {
+            return Service.StackerReset(DeviceCode);
+        }
+
+        [HttpPost, Route("StackerEmergencyStop"), AllowAnonymous]
+        public WebResponseContent StackerEmergencyStop(string DeviceCode)
+        {
+            return Service.StackerEmergencyStop(DeviceCode);
+        }
+
+        [HttpPost, Route("GetConveyorLineInfo"), AllowAnonymous]
+        public WebResponseContent GetConveyorLineInfo(string DeviceChildCode)
+        {
+            return Service.GetConveyorLineInfo(DeviceChildCode);
+        }
+
+        [HttpPost, Route("ConveyorLineHandTask"), AllowAnonymous]
+        public WebResponseContent ConveyorLineHandTask([FromBody] HandTask stackerhand)
+        {
+            return Service.ConveyorLineHandTask(stackerhand);
+        }
+
+        [HttpPost, Route("ConveyorLineReset"), AllowAnonymous]
+        public WebResponseContent ConveyorLineReset(string DeviceChildCode)
+        {
+            return Service.ConveyorLineReset(DeviceChildCode);
+        }
+
+        [HttpPost, Route("ConveyorLineEmergencyStop"), AllowAnonymous]
+        public WebResponseContent ConveyorLineEmergencyStop(string DeviceChildCode)
+        {
+            return Service.ConveyorLineEmergencyStop(DeviceChildCode);
+        }
+
+        [HttpPost, Route("ConveyorLineReturn"), AllowAnonymous]
+        public WebResponseContent ConveyorLineReturn(string DeviceChildCode)
+        {
+            return Service.ConveyorLineReturn(DeviceChildCode);
+        }
+
+        [HttpPost, Route("ConveyorLineCancel"), AllowAnonymous]
+        public WebResponseContent ConveyorLineCancel(string DeviceChildCode)
+        {
+            return Service.ConveyorLineCancel(DeviceChildCode);
+        }
+
+        [HttpPost, Route("ConveyorLineInitialize"), AllowAnonymous]
+        public WebResponseContent ConveyorLineInitialize(string DeviceChildCode)
+        {
+            return Service.ConveyorLineInitialize(DeviceChildCode);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs"
index d89caf3..860137f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs"
@@ -141,7 +141,7 @@
             }
             else
             {
-                DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault();
+                DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceChildCode == stationManager.stationNextChildCode && x.DeviceProParamName == "ConveyorLineBarcode").FirstOrDefault();
                 var x = conveyorLine.Communicator.Read(devicePro.DeviceProAddress, 5);
 
                 string Barcode = Encoding.UTF8.GetString(x);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
index 52840da..8bf8834 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs"
@@ -184,7 +184,7 @@
                 #endregion
 
                 #region  RGV02璋冨害
-                if (commonRGVSecond != null && commonRGVFirst is CommonRGV_FirstFloor SecondRgv)//杩欐牱鑳界湅鍑烘潵浼犲弬鍒板簳鍝噷鏈夐棶棰�
+                if (commonRGVSecond != null && commonRGVSecond is CommonRGV_FirstFloor SecondRgv)//杩欐牱鑳界湅鍑烘潵浼犲弬鍒板簳鍝噷鏈夐棶棰�
                 {
                     if (SecondRgv.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.WorkCompleted))
                     {
@@ -435,7 +435,7 @@
             {
                 var tasks = _taskService.QueryRGVTask();
                 Dt_Task task;
-                if (tasks == null && tasks.Count() == 0)
+                if (tasks.Count() == 0)
                 {
                     return null;
                 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
index 6966f3b..dae9457 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs"
@@ -122,6 +122,41 @@
                         true => "鏁呴殰",
                         false => "姝e父",
                     };
+                    string StackerCraneAlarm(int alarm) => alarm switch
+                    {
+                        0 => "鎸囦护鎴栧湴鍧�閿欒",
+                        1 => "鎬ュ仠",
+                        2 => "鍏夐�氳涓柇",
+                        3 => "缁勬�佸け鑱�",
+                        4 => "琛岃蛋鍙橀鏁呴殰",
+                        5 => "琛岃蛋鏋侀檺瑙﹀彂",
+                        6 => "琛岃蛋杩愯瓒呮椂",
+                        7 => "鎻愬崌鍙橀鏁呴殰",
+                        8 => "鎻愬崌鏋侀檺瑙﹀彂",
+                        9 => "鎻愬崌杩愯瓒呮椂",
+                        10 => "杞借揣鍙拌秴杞�",
+                        11 => "杞借揣鍙版瑺杞斤紙鏉剧怀)",
+                        12 => "杞借揣鍙板け閫�",
+                        13 => "璐у弶鍙橀鎶ヨ",
+                        14 => "璐у弶杩愯瓒呮椂",
+                        15 => "璐у弶鏋侀檺瑙﹀彂",
+                        16 => "璐у弶涓嶅眳涓�",
+                        17 => "宸︿晶瓒呴珮",
+                        18 => "鍙充晶瓒呴珮",
+                        19 => "宸︿晶瓒呭",
+                        20 => "鍙充晶瓒呭",
+                        21 => "宸﹁秴鍑�",
+                        22 => "鍙宠秴鍑�",
+                        23 => "鍙栬揣鏃惰浇璐у彴鏈夎揣",
+                        24 => "鍙栬揣鍚庤浇璐у彴鏃犺揣",
+                        25 => "鍙栨繁璐т綅鏃舵祬璐т綅鏈夎揣",
+                        26 => "鏀捐揣鏃惰浇璐у彴鏃犺揣",
+                        27 => "鏀捐揣鏃惰揣鏋舵湁璐�",
+                        28 => "鏀捐揣鍚庤浇璐у彴鏈夎揣",
+                        29 => "鏀炬繁璐ф椂娴呰揣浣嶆湁璐�",
+                        30 => "",
+                        31 => "",
+                    };
                     object obj = new
                     {
                         Automatic = StackerCraneAutoStatus(commonStackerCrane.GetValue<StackerCraneDBName, bool>(StackerCraneDBName.Automatic)),
@@ -131,6 +166,8 @@
                         CurrentLayer = Convert.ToInt32(commonStackerCrane.GetValue<StackerCraneDBName, byte>(StackerCraneDBName.CurrentLayer)),
                         LevelPoint = commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.LevelPoint),
                         CurrentTaskNum = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.CurrentTaskNum),
+                        //StackerAlarm = StackerCraneAlarm(commonStackerCrane.GetValue<StackerCraneDBName, int>(StackerCraneDBName.StackerAlarm)),
+                        
                         commonStackerCrane.DeviceCode,
                         commonStackerCrane.DeviceName,
                     };
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs"
index a8c3bfa..852c098 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs"
@@ -141,5 +141,10 @@
         /// 姘村钩鐐逛綅
         /// </summary>
         LevelPoint,
+
+        /// <summary>
+        /// 鎶ヨ淇℃伅
+        /// </summary>
+        StackerAlarm,
     }
 }

--
Gitblit v1.9.3