From 8e49faa42ff419efa0641478702ce7d5f8455bd9 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 30 七月 2025 20:47:56 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json                   |  117 +-
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs       |    6 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo                                  |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json            |  121 +-
 项目代码/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue                                          |  438 +++++++--
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs                            |    3 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs              |   42 +
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs       |    2 
 /dev/null                                                                                  |  264 ------
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs |   40 
 项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2                         |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin          |    0 
 项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin         |    0 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs               |  446 ++++++++++
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs   |   20 
 项目代码/WCS/WIDESEAWCS_Client/src/views/Home.vue                                              |  952 +++++++++++++++++++++-
 项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin         |    0 
 项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs                         |    4 
 18 files changed, 1,866 insertions(+), 589 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 d89ec78..113d024 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"
@@ -1,20 +1,72 @@
 <template>
-	<div>
-		111
-	</div>
 	<div class="title">
-		<el-row :gutter="20" style="height:100%">
+		<el-row :gutter="20" style="height:85%">
 			<el-col :span="8">
-				<span style="position: relative; top: 100px;left: 30px;">绗竴灞�</span>
+				<span style="position: relative; top: 100px;left: 30px;">
+					<h4>涓�妤艰澶囩洃鎺�</h4>
+				</span>
 				<el-row :gutter="20" style="height:1000px">
-					<el-col :span="8"></el-col>
+					<el-col :span="8">
+						<div>
+							<div v-for="(group, index) in groupedLines(linescopy7)" :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" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
+								</div>
+							</div>
+							<div style="margin-top: 118px;"></div>
+							<div v-for="(group, index) in groupedLines(linescopy8)" :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" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
+								</div>
+							</div>
+							<div style="margin-top: 115px;"></div>
+							<div v-for="(group, index) in groupedLines(linescopy9)" :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" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
+								</div>
+							</div>
+							<div style="margin-top: 112px;"></div>
+							<div v-for="(group, index) in groupedLines(linescopy10)" :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" :condition="line.condition" />
+								</div>
+							</div>
+							<div style="margin-top: 109px;"></div>
+							<div v-for="(group, index) in groupedLines(linescopy11)" :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" :condition="line.condition" />
+								</div>
+							</div>
+							<div style="margin-top: 107px;"></div>
+							<div v-for="(group, index) in groupedLines(linescopy12)" :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" :condition="line.condition" />
+								</div>
+							</div>
+						</div>
+					</el-col>
 					<el-col :span="8">
 						<div class="line-container">
 							<div class="RGVline"></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 :class="updateRGVTwo()" :style="{ marginTop: 1000 + 'px' }" @click="mouseClickSecond">2
+							</div>
 						</div>
 					</el-col>
 					<el-col :span="8">
@@ -112,14 +164,36 @@
 		<el-row :gutter="20" class="cardWidthrow">
 			<el-col :span="12">
 				<div>
-					<span style="position: relative; top: 120px;left: 30px;">绗簩灞�</span>
-					<div v-for="(group, index) in groupedLines(linescopy4)" :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" />
+
+					<el-row :gutter="20" style="height:1000px;margin-top:50px;">
+						<span style="position: relative; top: 150px;left: 30px;">绗簩灞�</span>
+						<div>
+							<div v-for="(group, index) in groupedLines(linescopy13)" :key="index">
+								<div class="positionY-group">
+									<LineInfo v-for="(line, lineIndex) in group.lines" :key="lineIndex"
+										:equipNo="line.equipNo" :imgType="line.imgType" :positionX="line.positionX"
+										:positionY="line.positionY" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
+								</div>
+							</div>
 						</div>
-					</div>
+						<div class="line-containerThird">
+							<div class="lineThird"></div>
+							<div :class="updateRGVThird()"
+								:style="{ transform: `translateX(${RGV03.LevelPoint}px)`, marginTop: '3px' }"
+								@click="mouseClickThird">3</div>
+						</div>
+						<div style="margin-top:180px;margin-right:100px">
+							<div v-for="(group, index) in groupedLines(linescopy14)" :key="index">
+								<div class="positionY-group">
+									<LineInfo v-for="(line, lineIndex) in group.lines" :key="lineIndex"
+										:equipNo="line.equipNo" :imgType="line.imgType" :positionX="line.positionX"
+										:positionY="line.positionY" :condition="line.condition"
+										url="api/Equipment/GetLineInfoByNo" />
+								</div>
+							</div>
+						</div>
+					</el-row>
 				</div>
 			</el-col>
 
@@ -131,7 +205,6 @@
 			<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>
@@ -165,56 +238,75 @@
 					</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="RGV01.Alarm" 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-form ref="form" :model="formRGV" 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 size="large" v-model="formRGV.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+								<el-option label="鍙栧畾浣�" value="1" />
+								<el-option label="鏀惧畾浣�" value="2" />
+								<el-option label="鍙栬揣" value="3" />
+								<el-option label="鏀捐揣" value="4" />
+								<el-option label="鍙栨斁璐�" value="5" />
+								<el-option label="閫�鍥�" value="6" />
 							</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 label="鍙栬揣浣�:">
+							<el-input size="large" v-model="formRGV.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 label="鏀捐揣浣�:">
+							<el-input size="large" v-model="formRGV.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-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="primary" size="small" plain @click="SendCommand(RGV01.DeviceCode)">
+						<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">
+				<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="warning" size="small" plain @click="RGVReset(RGV01.DeviceCode)">
 						<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">
+				<el-col :span="4" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="danger" size="small" plain @click="RGVemergencyStop(RGV01.DeviceCode)">
 						<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="RGVPause(RGV01.DeviceCode)">
+						<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="RGVCancel(RGV01.DeviceCode)">
+						<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="RGVInitialize(RGV01.DeviceCode)">
+						<i class="el-icon-check">宸ヤ綅鍒濆鍖�</i>
 					</el-button>
 				</el-col>
 			</el-row>
@@ -228,12 +320,251 @@
 			</div>
 		</template>
 	</el-dialog>
+	<el-dialog v-model="RGVSecond" 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="璁惧缂栧彿锛�">
+						<j-el-description :value="RGV02.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="RGV02.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="RGV02.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="RGV02.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="RGV02.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="RGV02.LevelPoint" 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="RGV02.Alarm" 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="formRGV" 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="formRGV.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+								<el-option label="鍙栧畾浣�" value="1" />
+								<el-option label="鏀惧畾浣�" value="2" />
+								<el-option label="鍙栬揣" value="3" />
+								<el-option label="鏀捐揣" value="4" />
+								<el-option label="鍙栨斁璐�" value="5" />
+								<el-option label="閫�鍥�" value="6" />
+							</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="formRGV.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="formRGV.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="4" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="primary" size="small" plain @click="SendCommand(RGV02.DeviceCode)">
+						<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="RGVReset(RGV02.DeviceCode)">
+						<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="RGVemergencyStop(RGV02.DeviceCode)">
+						<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="RGVPause(RGV02.DeviceCode)">
+						<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="RGVCancel(RGV02.DeviceCode)">
+						<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="RGVInitialize(RGV02.DeviceCode)">
+						<i class="el-icon-check">宸ヤ綅鍒濆鍖�</i>
+					</el-button>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<div class="dialog-footer">
+				<el-button @click="RGVSecond = false">鍙栨秷</el-button>
+				<el-button type="primary" @click="RGVSecond = false">
+					纭
+				</el-button>
+			</div>
+		</template>
+	</el-dialog>
+	<el-dialog v-model="RGVThird" 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="璁惧缂栧彿锛�">
+						<j-el-description :value="RGV03.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="RGV03.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="RGV03.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="RGV03.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="RGV03.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="RGV03.LevelPoint" 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="RGV03.Alarm" 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="formRGV" 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="formRGV.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+								<el-option label="鍙栧畾浣�" value="1" />
+								<el-option label="鏀惧畾浣�" value="2" />
+								<el-option label="鍙栬揣" value="3" />
+								<el-option label="鏀捐揣" value="4" />
+								<el-option label="鍙栨斁璐�" value="5" />
+								<el-option label="閫�鍥�" value="6" />
+							</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="formRGV.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="formRGV.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="4" :offset="0" :push="0" :pull="0" tag="div">
+					<el-button type="primary" size="small" plain @click="SendCommand(RGV03.DeviceCode)">
+						<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="RGVReset(RGV03.DeviceCode)">
+						<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="RGVemergencyStop(RGV03.DeviceCode)">
+						<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="RGVPause(RGV03.DeviceCode)">
+						<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="RGVCancel(RGV03.DeviceCode)">
+						<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="RGVInitialize(RGV03.DeviceCode)">
+						<i class="el-icon-check">宸ヤ綅鍒濆鍖�</i>
+					</el-button>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<div class="dialog-footer">
+				<el-button @click="RGVThird = false">鍙栨秷</el-button>
+				<el-button type="primary" @click="RGVThird = false">
+					纭
+				</el-button>
+			</div>
+		</template>
+	</el-dialog>
 </template>
 
 <script>
 import { onMounted, ref, reactive } from "vue";
-// import StackerInfo from "./StackerInfo.vue";
-// import LineInfo from "./LineInfo.vue";
+import LineInfo from "./LineInfo.vue";
 import LineInfoCopy from "./LineInfocopy.vue";
 import LineComponent from './LineComponent.vue';
 import eventBus from "../uitils/eventBus";
@@ -591,6 +922,343 @@
 					condition: false,
 				},
 			],
+			linescopy7: [
+				{
+					equipNo: "1001",
+					imgType: "1",
+					positionX: 5,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1002",
+					imgType: "1",
+					positionX: 5,
+					positionY: 8,
+					condition: false,
+				},
+
+				{
+					equipNo: "1003",
+					imgType: "1",
+					positionX: 5,
+					positionY: 20,
+					condition: false,
+				},
+				{
+					equipNo: "1004",
+					imgType: "1",
+					positionX: 5,
+					positionY: 20,
+					condition: false,
+				},
+			],
+			linescopy8: [
+				{
+					equipNo: "1039",
+					imgType: "1",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1040",
+					imgType: "1",
+					positionX: 6,
+					positionY: 16,
+					condition: false,
+				},
+			],
+			linescopy9: [
+				{
+					equipNo: "1013",
+					imgType: "1",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1014",
+					imgType: "1",
+					positionX: 6,
+					positionY: 16,
+					condition: false,
+				},
+			],
+			linescopy10: [
+				{
+					equipNo: "1015",
+					imgType: "1",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1016",
+					imgType: "1",
+					positionX: 6,
+					positionY: 16,
+					condition: false,
+				},
+			],
+			linescopy11: [
+				{
+					equipNo: "1027",
+					imgType: "1",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1028",
+					imgType: "1",
+					positionX: 6,
+					positionY: 16,
+					condition: false,
+				},
+
+			],
+			linescopy12: [
+				{
+					equipNo: "1029",
+					imgType: "1",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "1030",
+					imgType: "1",
+					positionX: 6,
+					positionY: 16,
+					condition: false,
+				},
+			],
+			linescopy13: [
+				{
+					equipNo: "3005",
+					imgType: "2",
+					positionX: 5,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3006",
+					imgType: "2",
+					positionX: 5,
+					positionY: 9,
+					condition: false,
+				},
+
+				{
+					equipNo: "3007",
+					imgType: "2",
+					positionX: 6,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3008",
+					imgType: "2",
+					positionX: 6,
+					positionY: 9,
+					condition: false,
+				}, {
+					equipNo: "3010",
+					imgType: "2",
+					positionX: 8,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3009",
+					imgType: "2",
+					positionX: 8,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3012",
+					imgType: "2",
+					positionX: 9,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3011",
+					imgType: "2",
+					positionX: 9,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3014",
+					imgType: "2",
+					positionX: 11,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3013",
+					imgType: "2",
+					positionX: 11,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3016",
+					imgType: "2",
+					positionX: 12,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3015",
+					imgType: "2",
+					positionX: 12,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3018",
+					imgType: "2",
+					positionX: 14,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3017",
+					imgType: "2",
+					positionX: 14,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3020",
+					imgType: "2",
+					positionX: 15,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3019",
+					imgType: "2",
+					positionX: 15,
+					positionY: 9,
+					condition: false,
+				},
+
+				{
+					equipNo: "3022",
+					imgType: "2",
+					positionX: 17,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3021",
+					imgType: "2",
+					positionX: 17,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3024",
+					imgType: "2",
+					positionX: 18,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3023",
+					imgType: "2",
+					positionX: 18,
+					positionY: 9,
+					condition: false,
+				},
+
+				{
+					equipNo: "3026",
+					imgType: "2",
+					positionX: 20,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3025",
+					imgType: "2",
+					positionX: 20,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3028",
+					imgType: "2",
+					positionX: 21,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3027",
+					imgType: "2",
+					positionX: 21,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3030",
+					imgType: "2",
+					positionX: 23,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3029",
+					imgType: "2",
+					positionX: 23,
+					positionY: 9,
+					condition: false,
+				},
+				{
+					equipNo: "3032",
+					imgType: "2",
+					positionX: 24,
+					positionY: 8,
+					condition: false,
+				},
+				{
+					equipNo: "3031",
+					imgType: "2",
+					positionX: 24,
+					positionY: 9,
+					condition: false,
+				},
+			],
+			linescopy14: [
+				{
+					equipNo: "3004",
+					imgType: "2",
+					positionX: -8,
+					positionY: 1,
+					condition: false,
+				},
+				{
+					equipNo: "3002",
+					imgType: "2",
+					positionX: -6,
+					positionY: 1,
+					condition: false,
+				},
+				{
+					equipNo: "3001",
+					imgType: "2",
+					positionX: -5,
+					positionY: 2,
+					condition: false,
+				},
+			],
+
+
 			StackerCrane: {
 				Automatic: "",
 				Fault: "",
@@ -601,7 +1269,7 @@
 				Running: "",
 				DeviceName: "",
 				DeviceCOde: "",
-				StackerAlarm:"",
+				StackerAlarm: "",
 			},
 			RGVFirst: false,
 			RGVSecond: false,
@@ -622,6 +1290,7 @@
 				Running: "",
 				DeviceName: "",
 				DeviceCode: "RGV01",
+				Alarm:"",
 			},
 			RGV02: {
 				Automatic: "",
@@ -631,6 +1300,7 @@
 				Running: "",
 				DeviceName: "",
 				DeviceCode: "RGV02",
+				Alarm:"",
 			},
 			RGV03: {
 				Automatic: "",
@@ -639,9 +1309,10 @@
 				CurrentTaskNum: "",
 				Running: "",
 				DeviceName: "",
-				DeviceCode: "",
+				DeviceCode: "RGV03",
+				Alarm:"",
 			},
-			formFirst: {
+			formRGV: {
 				TaskType: "",
 				SourceAddress: "",
 				TargetAddress: "",
@@ -651,6 +1322,7 @@
 	},
 	components: {
 		LineInfoCopy,
+		LineInfo,
 		LineComponent,
 		JElDescription,
 	},
@@ -693,7 +1365,7 @@
 				return 'dot-Fault ';
 			}
 		},
-		updateRGV03() {
+		updateRGVThird() {
 			if (this.RGV03.Automatic == "鑱旀満妯″紡" && this.RGV03.Fault != "鏁呴殰" && this.RGV03.Running == "寰呮満") {
 				return 'dot-Automatic ';
 			}
@@ -709,11 +1381,105 @@
 			this.fullscreenLoading = true;
 			this.RGVFirst = true;
 			this.fullscreenLoading = false;
-		}, mouseClickSecond() {
+		},
+		mouseClickSecond() {
 			this.fullscreenLoading = true;
 			this.RGVSecond = true;
 			this.fullscreenLoading = false;
-		}
+		},
+		mouseClickThird() {
+			this.fullscreenLoading = true;
+			this.RGVThird = true;
+			this.fullscreenLoading = false;
+		},
+		SendCommand(x) {
+			this.fullscreenLoading = true;
+			this.formRGV.DeviceCode = x;
+			this.http.post("api/DeviceInfo/RGVHandTask", this.formRGV)
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+						$vue.refresh();
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		RGVReset(x) {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/RGVReset?DeviceCode=" + x, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		RGVemergencyStop(x) {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/RGVemergencyStop?DeviceCode=" + x, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		RGVPause(x) {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/RGVPause?DeviceCode=" + x, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		RGVCancel(x) {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/RGVCancel?DeviceCode=" + x, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
+		RGVInitialize(x) {
+			this.fullscreenLoading = true;
+			this.http.post("api/DeviceInfo/RGVInitialize?DeviceCode=" + x, null, "")
+				.then((x) => {
+					if (!x.status) {
+						this.$message.error(x.message);
+					} else {
+						this.$Message.success(x.message);
+					}
+				})
+				.finally(() => {
+					this.fullscreenLoading = false;
+				});
+		},
 	},
 	computed: {
 
@@ -742,46 +1508,63 @@
 				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);
 				});
 			}
 		});
 
-		eventBus.on('RGVData', eventData => {
+		eventBus.on('RGVData', x => {
 
-			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;
+			if (x.data.deviceCode == "RGV01") {
+				this.RGV01.Automatic = x.data.automatic == null ? "鏁呴殰" : x.data.automatic;
+				this.RGV01.Fault = x.data.fault == null ? "鏁呴殰" : x.data.fault;
+				this.RGV01.Running = x.data.running == null ? "鏁呴殰" : x.data.running;
+				this.RGV01.LevelPoint = x.data.levelPoint;
+				this.RGV01.DeviceName = x.data.deviceName;
+				this.RGV01.DeviceCode = x.data.deviceCode;
+				this.RGV01.Alarm = x.data.alarm;
+			} else if (x.data.deviceCode == "RGV02") {
+				this.RGV02.Automatic = x.data.automatic == null ? "鏁呴殰" : x.data.automatic;
+				this.RGV02.Fault = x.data.fault == null ? "鏁呴殰" : x.data.fault;
+				this.RGV02.Running = x.data.running == null ? "鏁呴殰" : x.data.running;
+				this.RGV02.LevelPoint = x.data.levelPoint;
+				this.RGV02.DeviceName = x.data.deviceName;
+				this.RGV02.Alarm = x.data.alarm;
+			} else if (x.data.deviceCode == "RGV03") {
+				this.RGV03.Automatic = x.data.automatic == null ? "鏁呴殰" : x.data.automatic;
+				this.RGV03.Fault = x.data.fault == null ? "鏁呴殰" : x.data.fault;
+				this.RGV03.Running = x.data.running == null ? "鏁呴殰" : x.data.running;
+				this.RGV03.LevelPoint = x.data.levelPoint;
+				this.RGV03.DeviceName = x.data.deviceName;
+				this.RGV03.Alarm = x.data.alarm;
 			}
 
 		});
 
 		eventBus.on("LineData", eventData => {
 			const stationMap = {
-				"SC01": this.linescopy1,
-				"SC02": this.linescopy2,
-				"SC03": this.linescopy3,
-				"SC04": this.linescopy4,
-				"SC05": this.linescopy5,
-				"SC06": this.linescopy6,
-				"SC07": this.linescopy7,
+				"SC011F": this.linescopy1,
+				"SC021F": this.linescopy2,
+				"SC031F": this.linescopy3,
+				"SC041F": this.linescopy4,
+				"SC051F": this.linescopy5,
+				"SC061F": this.linescopy6,
+				"SC071F": this.linescopy7,
+				"SC081F": this.linescopy8,
+				"SC091F": this.linescopy9,
+				"SC101F": this.linescopy10,
+				"SC111F": this.linescopy11,
+				"SC121F": this.linescopy12,
+				"SC012F": this.linescopy13,
+				"SC022F": this.linescopy13,
+				"SC032F": this.linescopy13,
+				"SC042F": this.linescopy13,
+				"SC052F": this.linescopy13,
+				"SC062F": this.linescopy13,
+				"SC072F": this.linescopy13,
+				"SC082F": this.linescopy14,
 			};
 
 			var station = eventData.stationChildCode;
@@ -814,7 +1597,7 @@
 .cardWidthrow {
 	height: 40%;
 	width: 100%;
-	margin-top: 10px;
+	/* margin-top: 10px; */
 	box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
 }
 
@@ -918,6 +1701,21 @@
 	background-color: #a0cfff;
 }
 
-:deep(.j-el-description) {
-	background-color: #e40e0e;
-}</style>
\ No newline at end of file
+.line-containerThird {
+	position: absolute;
+	height: 20px;
+	background-color: #ecf5ff;
+	width: 1330px;
+	/* margin-top:180px; */
+	top: 180px;
+
+	left: 300px;
+}
+
+.lineThird {
+	/* position: absolute; */
+	height: 1px;
+	/* margin-top:180px; */
+	background-color: #a0cfff;
+}
+</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"
deleted file mode 100644
index cf55c98..0000000
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue"
+++ /dev/null
@@ -1,264 +0,0 @@
-<template>
-  <div>
-    <el-row>
-      <template v-for="item in 32" :key="item">
-        <el-col :span="0.9">
-          <span class="image-text"></span>
-          <img src="../../public/璐ф灦.jpeg" />
-        </el-col>
-      </template>
-    </el-row>
-    <el-row style="padding-bottom: 5px;">
-      <template v-for="item in 32" :key="item">
-        <el-col :span="0.9">
-          <span class="image-text"></span>
-          <img src="../../public/璐ф灦.jpeg" />
-        </el-col>
-      </template>
-    </el-row>
-  </div>
-  <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>
-  <div>
-    <el-row style="padding-top: 5px;">
-      <template v-for="item in 32" :key="item">
-        <el-col :span="0.9">
-          <span class="image-text"></span>
-          <img src="../../public/璐ф灦.jpeg" />
-        </el-col>
-      </template>
-    </el-row>
-    <el-row style="padding-bottom: 5px;">
-      <template v-for="item in 32" :key="item">
-        <el-col :span="0.9">
-          <span class="image-text"></span>
-          <img src="../../public/璐ф灦.jpeg" />
-        </el-col>
-      </template>
-    </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-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>
-          </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="StackerCrane.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="StackerCrane.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">
-        <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>
-          </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-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">
-        <el-button @click="dialogVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="dialogVisible = false">
-          纭
-        </el-button>
-      </div>
-    </template>
-  </el-dialog>
-</template>
-
-<script>
-import { id } from "element-plus/es/locale";
-import JElDescription from "./JElDescription";
-export default {
-  components: {
-    JElDescription
-  },
-  data() {
-    return {
-      x: 0, // 鍒濆x鍊�
-      url: "api/Equipment/GetStackerInfoByNo",
-      dialogVisible: false,
-      StackerCrane: {
-        Automatic: "",
-        Fault: "",
-        CurrentLayer: "1",
-        CurrentRow: "1",
-        CurrentColumn: "1",
-        CurrentTaskNum: "",
-        Running: "",
-        DeviceName: "",
-      }
-    };
-  },
-  props: {
-    equipNo: {
-      type: String,
-      default: "0",
-    },
-  },
-  computed: {
-    dotPosition() {
-      return this.x;
-    },
-  },
-  mounted() {
-    this.moveDot(this.x);
-  },
-  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;
-    },
-    update(){
-        if(this.StackerCrane.Automatic&&!this.StackerCrane.Fault&&!this.StackerCrane.Running){
-          return 'dot-Automatic ';
-        }
-        else if(!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;
-    },
-  },
-};
-</script>
-
-<style scoped>
-.line-container {
-  position: relative;
-  height: 20px;
-  background-color: #ecf5ff;
-  width: 960px;
-}
-
-.line {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 1px;
-  background-color: #a0cfff;
-}
-
-.dot-Running {
-  position: absolute;
-  top: -5px;
-  width: 25px;
-  height: 25px;
-  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: 25px;
-  height: 25px;
-  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: 25px;
-  height: 25px;
-  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;
-}
-
-img {
-  width: 30px;
-  height: 25px;
-}
-
-.image-text {
-  position: absolute;
-  top: 5px;
-  /* left: 10px;  */
-  color: white;
-  /* 鏂囧瓧棰滆壊 */
-  font-size: 12px;
-  /* 瀛楀彿澶у皬 */
-  font-weight: bold;
-  /* 瀛椾綋绮楃粏 */
-  margin-left: 5px;
-}
-</style>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue"
index eea4270..e3d1f9a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue"
@@ -1,131 +1,327 @@
 <template>
-  <div>
-    <el-popover placement="bottom" :title="equipNo" width="200" trigger="click">
-      <template #reference>
-        <div :style="{
-          color: equipNoFontColor,
-          width: width,
-          height: height,
-          left: left,
-          top: top,
-          margin_top: marginTop
-        }" style="position: absolute" @click="mouseClick">
-          <img v-if="imgType == '1'" src="../../public/lines.png" style="width: 40px" />
-          <img v-if="imgType == '1'" src="../../public/lines2.png" style="width: 40px" />
-          <label v-if="equipNo != ''" style="position: relative; margin-left: 5px; top: -35px;font-size: 12px;">{{
-            equipNo }}</label>
-        </div>
-      </template>
-      <el-row>
-        <el-col :span="12">鏄惁鏈夌洏:</el-col>
-        <el-col :span="12">{{ lineItemInfo.r_Line_HasPallet }}</el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="12">鎵樼洏鏉$爜</el-col>
-        <el-col :span="12">{{ lineItemInfo.r_Line_Barcode }}</el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="12">鐩爣浣嶇疆</el-col>
-        <el-col :span="12">{{ lineItemInfo.r_Line_Target }}</el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="12">浠诲姟鍙�</el-col>
-        <el-col :span="12">{{ lineItemInfo.r_Line_TaskNum }}</el-col>
-      </el-row>
-      <el-row>
-        <el-col :span="12">鎶ヨ浠g爜</el-col>
-        <el-col :span="12">{{ lineItemInfo.r_Line_ErrorCode }}</el-col>
-      </el-row>
-    </el-popover>
-  </div>
+	<div :class="update()" :style="{ left: left, top: top, marginBottom: 0 + 'px', marginTop: 0 + '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-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">
+					<el-form-item label="璁惧缂栧彿锛�">
+						<j-el-description :value="equipNo" 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="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>
+					</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>
+					</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>
+				<el-button type="primary" @click="dialogVisible = false">
+					纭
+				</el-button>
+			</div>
+		</template>
+	</el-dialog>
 </template>
 
 <script>
 import { defineComponent } from "vue";
+import JElDescription from "./JElDescription";
 export default defineComponent({
-  props: {
-    equipNoFontColor: {
-      type: String,
-      default: "blue",
-    },
-    width: {
-      type: String,
-      default: "40px",
-    },
-    height: {
-      type: String,
-      default: "40px",
-    },
-    equipNo: {
-      type: String,
-      default: "0",
-    },
-    imgType: {
-      type: String,
-      default: "1",
-    },
-    positionX: {
-      type: Int32Array,
-      default: 1,
-    },
-    positionY: {
-      type: Int32Array,
-      default: 1,
-    },
-    url: {
-      type: String,
-      default: "",
-    },
-    marginTop: {
-      type: String,
-      default: "10px",
-    }
-    // mouseClick: {
-    //   type: Function,
-    //   default: function () {
-    //     alert(this.equipNo);
-    //   },
-    // },
-  },
-  data() {
-    return {
-      left: "20px",
-      top: "260px",
-      lineItemInfo: {
-        r_Line_Barcode: "",
-        r_Line_HasPallet: "",
-        r_Line_TaskNum: "",
-        r_Line_ErrorCode: "",
-        r_Line_Target: "",
-      },
-    };
-  },
-  mounted: function () {
-    var axisX = (this.positionX - 1) * 40 + 100;
-    this.left = axisX + "px";
+	components: {
+		JElDescription
+	},
+	props: {
+		equipNoFontColor: {
+			type: String,
+			default: "blue",
+		},
+		equipNo: {
+			type: String,
+			default: "0",
+		},
+		imgType: {
+			type: String,
+			default: "1",
+		},
+		positionX: {
+			type: Int32Array,
+			default: 1,
+		},
+		positionY: {
+			type: Int32Array,
+			default: 1,
+		},
+		url: {
+			type: String,
+			default: "",
+		},
+		condition: {
+			type: Boolean,
+			default: false,
+		},
+	},
+	data() {
+		return {
+			left: "500px",
+			top: "400px",
+			dialogVisible: false,
+			lineItemInfo: {
+				r_Line_Barcode: "",
+				r_Line_HasPallet: "",
+				r_Line_TaskNum: "",
+				r_Line_ErrorCode: "",
+				r_Line_Target: "",
+			},
+			form: {
+				TaskType: "",
+				TargetAddress: "",
+				DeviceCode: "",
+			},
+		};
+	},
+	mounted() {
+		const axisX = (this.positionX - 1) * 40 + 100;
+		const axisY = (this.positionY - 1) + 50;
+		this.$nextTick(() => {
+			this.left = `${axisX}px`;
+			this.top = `${axisY}px`;
+		});
+	},
+	methods: {
+		mouseClick() {
+			this.fullscreenLoading = true;
+			this.dialogVisible = true;
+			// 澶勭悊鐐瑰嚮浜嬩欢
+			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,
+						});
+					}
+				});
 
-    var axisY = (this.positionY - 1) * 40 + 50;
-    this.top = axisY + "px";
-  },
-  methods: {
-    mouseClick() {
-      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.fullscreenLoading = false;
+		},
+
+		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绉掓墽琛屼竴娆�
+			this.timer1 = setInterval(() => {
+				update();
+			}, 500);
+		},
+	},
 });
 </script>
 
-<style scoped></style>
\ No newline at end of file
+<style scoped>
+.custom-img {
+	position: relative;
+	display: inline-block;
+	/* background-color:  #d9ecff ; */
+}
+
+.custom-img-color {
+	position: relative;
+	display: inline-block;
+	background-color: #05fa7f;
+	color: white;
+	text-align: center;
+}
+
+/* .custom-img-color::before {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  background-color: #05fa7f;
+  border-radius: 50%;  
+} */
+
+.custom-img img {
+	width: 40px;
+	height: 40px;
+}
+
+.custom-img-color img {
+	width: 40px;
+	height: 40px;
+}
+
+.equip-no {
+	position: absolute;
+	top: 15px;
+	font-size: 12px;
+	margin-left: -35px;
+}
+</style>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin"
index 4aebc49..f835c92 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin"
index 30aa711..a93ada5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin"
Binary files differ
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin"
index 09baa99..b33c359 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin"
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/.futdcache.v2" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2"
index b24d1f9..1a2a3bf 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2"
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/.suo" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo"
index 784ae71..ae5b781 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 7722730..f883ee1 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,32 +3,36 @@
   "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\\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\\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:{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\\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:{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\\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\\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:{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}",
@@ -46,7 +50,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 7,
+          "SelectedChildIndex": 3,
           "Children": [
             {
               "$type": "Bookmark",
@@ -58,26 +62,26 @@
             },
             {
               "$type": "Document",
-              "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==",
+              "DocumentIndex": 3,
+              "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": "AgIAAIYAAAAAAAAAAAAIwJ8AAAAYAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-30T05:32:19.549Z",
+              "WhenOpened": "2025-07-30T09:52:26.156Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 0,
               "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==",
+              "ViewState": "AgIAAEMAAAAAAAAAAADwv9gCAAA/AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T01:59:05.153Z",
               "EditorCaption": ""
@@ -85,19 +89,6 @@
             {
               "$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",
@@ -105,73 +96,95 @@
               "RelativeToolTip": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
               "ViewState": "AgIAAMcAAAAAAAAAAAAAwM8AAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-29T03:10:22.341Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-07-29T03:10:22.341Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 5,
               "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==",
+              "ViewState": "AgIAAN8AAAAAAAAAAAAYwB4BAACTAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-24T03:47:03.579Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 6,
               "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": "AgIAAHIAAAAAAAAAAAAuwKgAAAAkAAAAAAAAAA==",
+              "ViewState": "AgIAAGMAAAAAAAAAAAAuwKgAAACSAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-24T03:54:34.335Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-07-24T03:54:34.335Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 1,
               "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==",
+              "ViewState": "AgIAAHEAAAAAAAAAAAAAAJQAAAA1AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T02:35:39.48Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
+              "DocumentIndex": 2,
               "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==",
+              "ViewState": "AgIAAEMAAAAAAAAAAAAwwGMAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T02:36:25.787Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
+              "DocumentIndex": 9,
+              "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"
+            },
+            {
+              "$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": "AgIAAJwAAAAAAAAAAAAQwKsAAACWAAAAAAAAAA==",
+              "ViewState": "AgIAAKMAAAAAAAAAAAAQwMkAAABaAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-28T04:13:17.74Z",
               "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "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"
             }
           ]
         }
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 8ddf200..f2b16f5 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,32 +3,36 @@
   "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\\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\\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:{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\\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:{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\\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:{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\\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:{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}",
@@ -46,7 +50,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 7,
+          "SelectedChildIndex": 5,
           "Children": [
             {
               "$type": "Bookmark",
@@ -58,26 +62,26 @@
             },
             {
               "$type": "Document",
-              "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==",
+              "DocumentIndex": 4,
+              "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": "AgIAAIYAAAAAAAAAAAAIwJ8AAAAYAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-30T05:32:19.549Z",
+              "WhenOpened": "2025-07-30T09:52:26.156Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
+              "DocumentIndex": 1,
               "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==",
+              "ViewState": "AgIAAPUCAAAAAAAAAAAIwNkCAAAIAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T01:59:05.153Z",
               "EditorCaption": ""
@@ -85,19 +89,6 @@
             {
               "$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",
@@ -105,44 +96,42 @@
               "RelativeToolTip": "WIDESEAWCS_DTO\\Enum\\TaskStatusEnum.cs",
               "ViewState": "AgIAAMcAAAAAAAAAAAAAwM8AAAAeAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2025-07-29T03:10:22.341Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-07-29T03:10:22.341Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 4,
+              "DocumentIndex": 0,
               "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==",
+              "ViewState": "AgIAAHEAAAAAAAAAAAAQwIYAAADHAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-24T03:47:03.579Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
+              "DocumentIndex": 6,
               "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*",
+              "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-24T03:54:34.335Z",
-              "EditorCaption": ""
+              "WhenOpened": "2025-07-24T03:54:34.335Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 5,
+              "DocumentIndex": 2,
               "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==",
+              "ViewState": "AgIAAHEAAAAAAAAAAAAAAJQAAAA1AAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T02:35:39.48Z",
               "EditorCaption": ""
@@ -155,23 +144,47 @@
               "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==",
+              "ViewState": "AgIAAEMAAAAAAAAAAAAwwGMAAAAuAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-30T02:36:25.787Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 6,
+              "DocumentIndex": 9,
+              "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"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
               "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==",
+              "ViewState": "AgIAAKMAAAAAAAAAAAAQwMkAAABaAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2025-07-28T04:13:17.74Z",
               "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "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"
             }
           ]
         }
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 c96806a..b01298a 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"
@@ -18,6 +18,7 @@
 using AutoMapper;
 using HslCommunication;
 using Newtonsoft.Json;
+using SixLabors.ImageSharp.ColorSpaces;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -625,7 +626,7 @@
                     {
                         CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                         conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
-                        return content.OK("鍋滄鎴愬姛");
+                        return content.OK("閫�鍥炴垚鍔�");
                     }
                 }
                 return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
@@ -648,7 +649,7 @@
                     {
                         CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                         conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(4), stationManager.stationChildCode);
-                        return content.OK("鍋滄鎴愬姛");
+                        return content.OK("鍙栨秷鎴愬姛");
                     }
                 }
                 return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
@@ -671,7 +672,7 @@
                     {
                         CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                         conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(6), stationManager.stationChildCode);
-                        return content.OK("鍋滄鎴愬姛");
+                        return content.OK("鍒濆鍖栨垚鍔�");
                     }
                 }
                 return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
@@ -725,7 +726,446 @@
         #endregion
 
         #region  RGV鎵嬪姩鍛戒护
+        public WebResponseContent RGVHandTask(HandTask RGVhand)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                if (RGVhand == null || RGVhand.TaskType == "")
+                {
+                    return content.Error("璇疯緭鍏ヤ换鍔″懡浠�");
+                }
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == RGVhand.DeviceCode);
+                if (device != null)
+                {
+                    if (RGVhand.DeviceCode == "RGV01" || RGVhand.DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor RGVcommand = (CommonRGV_FirstFloor)device;
+                        if (RGVhand.TaskType == "1")
+                        {
+                            if (RGVhand.SourceAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栧畾浣嶅懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鍙栧畾浣嶅懡浠ゅ彇璐т綅涓嶈兘涓虹┖");
+                            }
 
+                        }
+                        else if (RGVhand.TaskType == "2")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鏀惧畾浣嶅懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鏀惧畾浣嶅懡浠ゆ斁璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "3")
+                        {
+                            if (RGVhand.SourceAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栬揣鍛戒护涓嬪彂鎴愬姛");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鍙栬揣鍛戒护鍙栬揣浣嶄笉鑳戒负绌�");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "4")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鏀捐揣鍛戒护涓嬪彂鎴愬姛");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鏀捐揣鍛戒护鏀捐揣浣嶄笉鑳戒负绌�");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "5")
+                        {
+                            if (RGVhand.TargetAddress != null && RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栨斁璐у懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鍙栨斁璐у懡浠ゆ斁璐т綅鍜屽彇璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "6")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandFirstFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}閫�鍛戒护涓嬪彂鎴愬姛");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}閫�鍥炲懡浠ゆ斁璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else
+                        {
+                            return content.Error($"{device.DeviceName}鏈煡浠诲姟鍛戒护");
+                        }
+                    }
+                    else
+                    {
+                        CommonRGV RGVcommand = (CommonRGV)device;
+                        if (RGVhand.TaskType == "1")
+                        {
+                            if (RGVhand.SourceAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栧畾浣嶅懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鍙栧畾浣嶅懡浠ゅ彇璐т綅涓嶈兘涓虹┖");
+                            }
+
+                        }
+                        else if (RGVhand.TaskType == "2")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鏀惧畾浣嶅懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鏀惧畾浣嶅懡浠ゆ斁璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "3")
+                        {
+                            if (RGVhand.SourceAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栬揣鍛戒护涓嬪彂鎴愬姛");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鍙栬揣鍛戒护鍙栬揣浣嶄笉鑳戒负绌�");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "4")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鏀捐揣鍛戒护涓嬪彂鎴愬姛");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}鏀捐揣鍛戒护鏀捐揣浣嶄笉鑳戒负绌�");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "5")
+                        {
+                            if (RGVhand.TargetAddress != null && RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PickupLocation = (byte)Convert.ToSByte(RGVhand.SourceAddress),
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}鍙栨斁璐у懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error("鍙栨斁璐у懡浠ゆ斁璐т綅鍜屽彇璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else if (RGVhand.TaskType == "6")
+                        {
+                            if (RGVhand.TargetAddress != null)
+                            {
+                                RGVTaskCommand command = new RGVTaskCommand()
+                                {
+                                    PutcargoLocation = (byte)Convert.ToSByte(RGVhand.TargetAddress),
+                                    TaskType = (byte)Convert.ToSByte(RGVhand.TaskType),
+                                };
+                                SendCommandSecondFloor(RGVcommand, command);
+                                return content.OK($"{device.DeviceName}閫�鍥炲懡浠や笅鍙戞垚鍔�");
+                            }
+                            else
+                            {
+                                return content.Error($"{device.DeviceName}閫�鍥炲懡浠ゆ斁璐т綅涓嶈兘涓虹┖");
+                            }
+                        }
+                        else
+                        {
+                            return content.Error($"{device.DeviceName}鏈煡浠诲姟鍛戒护");
+                        }
+                    }
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RGVReset(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+                if (device != null)
+                {
+                    if (DeviceCode == "RGV01" || DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    else
+                    {
+                        CommonRGV commonRGV = (CommonRGV)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    return content.OK($"{device.DeviceName}澶嶄綅鎴愬姛");
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RGVEmergencyStop(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+                if (device != null)
+                {
+                    if (DeviceCode == "RGV01" || DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(11));
+                    }
+                    else
+                    {
+                        CommonRGV commonRGV = (CommonRGV)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(11));
+                    }
+                    return content.OK($"{device.DeviceName}鍋滄鎴愬姛");
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        public WebResponseContent RGVCancel(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+                if (device != null)
+                {
+                    if (DeviceCode == "RGV01" || DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    else
+                    {
+                        CommonRGV commonRGV = (CommonRGV)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    return content.OK($"{device.DeviceName}涓柇鎴愬姛");
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        public WebResponseContent RGVInitialize(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+                if (device != null)
+                {
+                    if (DeviceCode == "RGV01" || DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    else
+                    {
+                        CommonRGV commonRGV = (CommonRGV)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(9));
+                    }
+                    return content.OK($"{device.DeviceName}鍒濆鍖栨垚鍔�");
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent RGVPause(string DeviceCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
+                if (device != null)
+                {
+                    if (DeviceCode == "RGV01" || DeviceCode == "RGV02")
+                    {
+                        CommonRGV_FirstFloor commonRGV = (CommonRGV_FirstFloor)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(10));
+                    }
+                    else
+                    {
+                        CommonRGV commonRGV = (CommonRGV)device;
+                        commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(10));
+                    }
+                    return content.OK($"{device.DeviceName}鏆傚仠鎴愬姛");
+                }
+                return content.Error("鏈壘鍒拌澶囦俊鎭鑱旂郴IT");
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+        }
+        
+
+
+        public void SendCommandFirstFloor(CommonRGV_FirstFloor commonRGV, RGVTaskCommand? rgvTaskCommand)
+        {
+            commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(1));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, (byte)Convert.ToSByte(rgvTaskCommand.PutcargoLocation));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PickupLocation, (byte)Convert.ToSByte(rgvTaskCommand.PickupLocation));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(rgvTaskCommand.TaskType));
+
+        }
+        public void SendCommandSecondFloor(CommonRGV commonRGV, RGVTaskCommand? rgvTaskCommand)
+        {
+            commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(1));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, (byte)Convert.ToSByte(rgvTaskCommand.PutcargoLocation));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.PickupLocation, (byte)Convert.ToSByte(rgvTaskCommand.PickupLocation));
+            Thread.Sleep(100);
+            commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(rgvTaskCommand.TaskType));
+
+        }
+
+        public class RGVTaskCommand
+        {
+            #region <Public Menber>
+
+            /// <summary>
+            /// 鍙栬揣浣�
+            /// </summary>
+            public byte PickupLocation { get; set; }
+
+            /// <summary>
+            /// 鏀捐揣浣�
+            /// </summary>
+            public byte PutcargoLocation { get; set; }
+
+            /// <summary>
+            /// 浠诲姟绫诲瀷
+            /// </summary>
+            public byte TaskType { get; set; }
+
+            /// <summary>
+            /// 棰勭暀
+            /// </summary>
+            public byte Spare { get; set; }
+
+            /// <summary>
+            /// 浠诲姟鍙�
+            /// </summary>
+            public short TaskNum { get; set; }
+
+
+            #endregion <Public Menber>
+        }
 
         #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 f737f39..9e81b48 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"
@@ -105,5 +105,47 @@
         /// <param name="DeviceChildCode"></param>
         /// <returns></returns>
         WebResponseContent ConveyorLineInitialize(string DeviceChildCode);
+
+        /// <summary>
+        /// RGV鎵嬪姩浠诲姟
+        /// </summary>
+        /// <param name="RGVhand"></param>
+        /// <returns></returns>
+        WebResponseContent RGVHandTask(HandTask RGVhand);
+
+        /// <summary>
+        /// RGV澶嶄綅
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent RGVReset(string DeviceCode);
+
+        /// <summary>
+        /// RGV鎬ュ仠
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent RGVEmergencyStop(string DeviceCode);
+
+        /// <summary>
+        /// RGV涓柇浠诲姟
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent RGVCancel(string DeviceCode);
+
+        /// <summary>
+        /// RGV鍒濆鍖�
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent RGVInitialize(string DeviceCode);
+
+        /// <summary>
+        /// RGV鏆傚仠
+        /// </summary>
+        /// <param name="DeviceCode"></param>
+        /// <returns></returns>
+        WebResponseContent RGVPause(string DeviceCode);
     }
 }
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 5392760..747819a 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"
@@ -53,9 +53,9 @@
         }
 
         [HttpPost, Route("ConveyorLineHandTask"), AllowAnonymous]
-        public WebResponseContent ConveyorLineHandTask([FromBody] HandTask stackerhand)
+        public WebResponseContent ConveyorLineHandTask([FromBody] HandTask ConveyorLinehand)
         {
-            return Service.ConveyorLineHandTask(stackerhand);
+            return Service.ConveyorLineHandTask(ConveyorLinehand);
         }
 
         [HttpPost, Route("ConveyorLineReset"), AllowAnonymous]
@@ -87,5 +87,41 @@
         {
             return Service.ConveyorLineInitialize(DeviceChildCode);
         }
+
+        [HttpPost, Route("RGVHandTask"), AllowAnonymous]
+        public WebResponseContent RGVHandTask([FromBody] HandTask RGVhand)
+        {
+            return Service.RGVHandTask(RGVhand);
+        }
+
+        [HttpPost, Route("RGVReset"), AllowAnonymous]
+        public WebResponseContent RGVReset(string DeviceCode)
+        {
+            return Service.RGVReset(DeviceCode);
+        }
+
+        [HttpPost, Route("RGVEmergencyStop"), AllowAnonymous]
+        public WebResponseContent RGVEmergencyStop(string DeviceCode)
+        {
+            return Service.RGVEmergencyStop(DeviceCode);
+        }
+
+        [HttpPost, Route("RGVCancel"), AllowAnonymous]
+        public WebResponseContent RGVCancel(string DeviceCode)
+        {
+            return Service.RGVCancel(DeviceCode);
+        }
+
+        [HttpPost, Route("RGVInitialize"), AllowAnonymous]
+        public WebResponseContent RGVInitialize(string DeviceCode)
+        {
+            return Service.RGVInitialize(DeviceCode);
+        }
+
+        [HttpPost, Route("RGVPause"), AllowAnonymous]
+        public WebResponseContent RGVPause(string DeviceCode)
+        {
+            return Service.RGVPause(DeviceCode);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index 1090389..f7f1cac 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -132,7 +132,7 @@
                         foreach (var item in deviceProtocolDetails)
                         {
                             int itemValue = Convert.ToInt32(item.ProtocalDetailValue);
-                            _noticeService.LineData(userIds?.FirstOrDefault(), userTokenIds, new { station.stationChildCode,InStock= structs[itemValue] , Roadway =station.Roadway});
+                            _noticeService.LineData(userIds?.FirstOrDefault(), userTokenIds, new { station.stationChildCode,InStock= structs[itemValue] , Roadway =station.Roadway+station.stationFloor});
                             if (structs[itemValue] == true)
                             {
                                 MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
index bcfdc58..9bf224f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs"
@@ -198,10 +198,10 @@
 
                                 if (Barcode == null || Barcode == "")
                                 {
-                                    conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
+                                    //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, Convert.ToSByte(3), stationManager.stationChildCode);
                                     commonRGV.SetValue(StackerCraneDBName.PutcargoLocation, Convert.ToSByte(stationManager.stationRemark));
                                     commonRGV.SetValue(StackerCraneDBName.TaskNum, Convert.ToInt16(task.TaskNum));
-                                    //    commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
+                                    commonRGV.SetValue(StackerCraneDBName.TaskType, Convert.ToSByte(4));
                                     task.TaskState = (int)TaskInStatusEnum.InRetuen;
                                     _taskRepository.UpdateData(task);
                                     return;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs"
index 8c58b2d..a2ddcb2 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs"
@@ -38,6 +38,7 @@
         TaskType,
         TaskNum,
         LevelPoint,
-        CurrentTaskNum,
+        CurrentTaskNum, 
+        RGVAlarm,
     }
 }
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 8bf8834..a17c0ed 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"
@@ -79,7 +79,7 @@
 
         public Task Execute(IJobExecutionContext context)
         {
-            Console.WriteLine(DateTime.Now.ToString() + "锛岀嚎绋婭D锛�" + Thread.CurrentThread.ManagedThreadId);
+            //Console.WriteLine(DateTime.Now.ToString() + "锛岀嚎绋婭D锛�" + Thread.CurrentThread.ManagedThreadId);
             try
             {
                 //鐢ㄨ繖绉嶆柟寮忚兘纭繚绫诲瀷杞崲涓嶄細鏈夐棶棰�
@@ -164,6 +164,7 @@
                             Running = RGVWorkStatus(FirstRgv.GetValue<RGVDBName, bool>(RGVDBName.Running)),
                             LevelPoint = FirstRgv.GetValue<RGVDBName, int>(RGVDBName.LevelPoint),
                             CurrentTaskNum = FirstRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum),
+                            RGVAlarm = FirstRgv.GetValue<RGVDBName, uint>(RGVDBName.RGVAlarm),
                             FirstRgv.DeviceCode,
                             FirstRgv.DeviceName,
                         };
@@ -175,10 +176,10 @@
                 }
                 else
                 {
-                    if (commonRGVFirst == null)
-                        Console.WriteLine($"RGV01鏈壘鍒拌澶囧璞$殑鍊�");
-                    else
-                        Console.WriteLine($"RGV01璁惧瀵硅薄绫诲瀷閿欒");
+                    //if (commonRGVFirst == null)
+                    //    Console.WriteLine($"RGV01鏈壘鍒拌澶囧璞$殑鍊�");
+                    //else
+                    //    Console.WriteLine($"RGV01璁惧瀵硅薄绫诲瀷閿欒");
                 }
 
                 #endregion
@@ -254,6 +255,7 @@
                             Running = RGVWorkStatus(SecondRgv.GetValue<RGVDBName, bool>(RGVDBName.Running)),
                             LevelPoint = SecondRgv.GetValue<RGVDBName, int>(RGVDBName.LevelPoint),
                             CurrentTaskNum = SecondRgv.GetValue<RGVDBName, short>(RGVDBName.RGVTaskNum),
+                            RGVAlarm = SecondRgv.GetValue<RGVDBName, uint>(RGVDBName.RGVAlarm),
                             SecondRgv.DeviceCode,
                             SecondRgv.DeviceName,
                         };
@@ -265,10 +267,10 @@
                 }
                 else
                 {
-                    if (commonRGVSecond == null)
-                        Console.WriteLine($"RGV02鏈壘鍒拌澶囧璞$殑鍊�");
-                    else
-                        Console.WriteLine($"RGV02璁惧瀵硅薄绫诲瀷閿欒");
+                    //if (commonRGVSecond == null)
+                    //    Console.WriteLine($"RGV02鏈壘鍒拌澶囧璞$殑鍊�");
+                    //else
+                    //    Console.WriteLine($"RGV02璁惧瀵硅薄绫诲瀷閿欒");
                 }
                 #endregion
                 //}
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 dae9457..02e6b6f 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,7 +122,7 @@
                         true => "鏁呴殰",
                         false => "姝e父",
                     };
-                    string StackerCraneAlarm(int alarm) => alarm switch
+                    string StackerCraneAlarm(uint alarm) => alarm switch
                     {
                         0 => "鎸囦护鎴栧湴鍧�閿欒",
                         1 => "鎬ュ仠",
@@ -166,8 +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)),
-                        
+                        StackerAlarm = StackerCraneAlarm(commonStackerCrane.GetValue<StackerCraneDBName, uint>(StackerCraneDBName.StackerAlarm)),
+
                         commonStackerCrane.DeviceCode,
                         commonStackerCrane.DeviceName,
                     };

--
Gitblit v1.9.3