1
huangxiaoqiang
2025-07-30 8e49faa42ff419efa0641478702ce7d5f8455bd9
1
已修改17个文件
已删除1个文件
2455 ■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Client/src/views/Home.vue 952 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/LineInfo.vue 438 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs 446 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/IDeviceInfoService.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceInfoController.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/CommonRGVJob.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/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>
.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>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/views/LineComponent copy.vue
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/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">报警代码</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="报警代码:">
                        <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>
<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>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.strings.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo
Binary files differ
ÏîÄ¿´úÂë/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"
            }
          ]
        }
ÏîÄ¿´úÂë/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"
            }
          ]
        }
ÏîÄ¿´úÂë/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
    }
ÏîÄ¿´úÂë/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);
    }
}
ÏîÄ¿´úÂë/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);
        }
    }
}
ÏîÄ¿´úÂë/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);
ÏîÄ¿´úÂë/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;
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob/RGVDBName.cs
@@ -38,6 +38,7 @@
        TaskType,
        TaskNum,
        LevelPoint,
        CurrentTaskNum,
        CurrentTaskNum,
        RGVAlarm,
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/RGVJob_FirstFloor/CommonRGV_FirstFloorJob.cs
@@ -79,7 +79,7 @@
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine(DateTime.Now.ToString() + ",线程ID:" + Thread.CurrentThread.ManagedThreadId);
            //Console.WriteLine(DateTime.Now.ToString() + ",线程ID:" + 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
                //}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -122,7 +122,7 @@
                        true => "故障",
                        false => "正常",
                    };
                    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,
                    };