yangpeixing
5 天以前 6cb85536a0b7edf936cfc7b68502c858068c140f
在WCS中添加监控堆垛机和提升机状态和报警信息功能
已删除1个文件
已添加4个文件
已修改19个文件
928 ■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Client/src/router/viewGird.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/Elevator/Elevator.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/Equipmentstatus/Equipmentstatus.vue 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Client/src/views/Index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db-shm 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db-wal 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/SqlsugarSetup.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/EquipmentStatusController.cs 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskExecuteDetailController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Properties/PublishProfiles/FolderProfile.pubxml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/ElevatorDBName.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/通信协议/~$提升机通讯协议2025.7.22新程序使用!(1).xlsx 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/router/viewGird.js
@@ -87,10 +87,10 @@
      keepAlive: false
    }
  },
  {
    path: '/Elevator',
    name: 'Elevator',
    component: () => import('@/views/Elevator/Elevator.vue')
    {
    path: '/Equipmentstatus',
    name: 'Equipmentstatus',
    component: () => import('@/views/Equipmentstatus/Equipmentstatus.vue')
  },
]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/views/Elevator/Elevator.vue
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/views/Equipmentstatus/Equipmentstatus.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,352 @@
<template>
    <div class="machine-monitor-container">
        <!-- é¡µé¢å¤´éƒ¨ -->
        <div class="monitor-header">
            <h1>设备状态监控中心</h1>
            <div class="header-actions">
                <el-button type="success" @click="startElevator()">
                    <span class="text">启动提升机</span>
                </el-button>
                <el-button type="danger" @click="stopElevator()">
                    <span class="text">停止提升机</span>
                </el-button>
                <el-button type="warning" @click="resetElevator()">
                    <span class="text">复位提升机</span>
                </el-button>
                <el-button type="primary" @click="initializationElevator()">
                    <span class="text">初始化提升机</span>
                </el-button>
                <el-button type="primary" @click="refreshData" :loading="refreshing" icon="Refresh">
                    æ‰‹åŠ¨åˆ·æ–°
                </el-button>
                <el-switch v-model="autoRefresh" active-text="自动刷新开启" inactive-text="自动刷新关闭"
                    @change="toggleAutoRefresh" />
            </div>
        </div>
        <!-- ç»Ÿè®¡å¡ç‰‡ -->
        <div class="stat-cards">
            <el-card class="stat-card" :class="getStatusClass('normal')">
                <div class="stat-content">
                    <span class="stat-label">运行设备</span>
                    <span class="stat-value">{{ normalCount }}</span>
                </div>
            </el-card>
            <el-card class="stat-card" :class="getStatusClass('warning')">
                <div class="stat-content">
                    <span class="stat-label">空闲设备</span>
                    <span class="stat-value">{{ warningCount }}</span>
                </div>
            </el-card>
            <el-card class="stat-card" :class="getStatusClass('error')">
                <div class="stat-content">
                    <span class="stat-label">报警设备</span>
                    <span class="stat-value">{{ errorCount }}</span>
                </div>
            </el-card>
            <el-card class="stat-card" :class="getStatusClass('offline')">
                <div class="stat-content">
                    <span class="stat-label">离线设备</span>
                    <span class="stat-value">{{ offlineCount }}</span>
                </div>
            </el-card>
            <el-card class="stat-card">
                <div class="stat-content">
                    <span class="stat-label">总计设备</span>
                    <span class="stat-value">{{ totalCount }}</span>
                </div>
            </el-card>
        </div>
        <!-- è®¾å¤‡åˆ—表 -->
        <div class="machine-list">
            <el-table :data="filteredMachines" border stripe v-loading="tableLoading" style="width: 100%"
                :empty-text="tableEmptyText">
                <el-table-column prop="id" label="设备编号" width="120" />
                <el-table-column prop="name" label="设备名称" width="150" />
                <el-table-column prop="type" label="设备类型" width="240" />
                <el-table-column prop="status" label="运行状态" min-width="150" />
                <el-table-column prop="alarmInformation" label="报警信息" min-width="250" />
                <el-table-column prop="lastUpdate" label="最后更新" width="200" />
            </el-table>
        </div>
    </div>
</template>
<script setup>
import { ref, computed, onMounted, onUnmounted } from 'vue'
import { ElMessage } from 'element-plus' // æ­£ç¡®å¯¼å…¥Element Plus消息组件
import axios from 'axios' // å¯¼å…¥axios
const requestElevator = async (url, actionName) => {
    try {
        // å‘èµ·POST请求(替换为你的实际接口地址)
        const res = await axios.post(`http://10.31.3.241:9291/api/Elevator/${url}`)
        // æŽ¥å£è¿”回逻辑:假设res.data.status为true表示成功
        if (!res.data.status) {
            ElMessage.error(res.data.message || `${actionName}失败`)
        } else {
            ElMessage.success(`${actionName}成功`)
            // åˆ·æ–°è®¾å¤‡æ•°æ®
            await refreshData()
        }
    } catch (error) {
        console.error(`${actionName}接口异常:`, error)
        ElMessage.error(`${actionName}失败,接口请求异常`)
    }
}
const machines = ref([])
const searchKeyword = ref('')
const statusFilter = ref('')
const autoRefresh = ref(true)
const refreshing = ref(false)
const tableLoading = ref(false)
const detailVisible = ref(false)
const currentMachine = ref(null)
const refreshTimer = ref(null)
const filteredMachines = computed(() => {
    let result = machines.value
    return result
})
const normalCount = computed(() => machines.value.filter(item => item.status == '运行中').length)
const warningCount = computed(() => machines.value.filter(item => item.status === '空闲' || item.status == '待机').length)
const errorCount = computed(() => machines.value.filter(item => item.alarmInformation != null && item.alarmInformation != "").length)
const offlineCount = computed(() => machines.value.filter(item => item.status === 'offline').length)
const totalCount = computed(() => machines.value.length)
const tableEmptyText = computed(() => {
    if (searchKeyword.value || statusFilter.value) {
        return '暂无匹配的设备数据'
    }
    return '暂无设备数据'
})
const getStatusClass = (status) => {
    const classMap = {
        normal: 'stat-normal',
        warning: 'stat-warning',
        error: 'stat-error',
        offline: 'stat-offline'
    }
    return classMap[status] || ''
}
const refreshData = async () => {
    refreshing.value = true
    tableLoading.value = true
    try {
        const newData = await fetchEquipmentData()
        machines.value = newData
        ElMessage.success('数据刷新成功')
    } catch (error) {
        ElMessage.error('数据刷新失败')
    } finally {
        refreshing.value = false
        tableLoading.value = false
    }
}
const toggleAutoRefresh = () => {
    if (autoRefresh.value) {
        startAutoRefresh()
        ElMessage.success('自动刷新已开启(每10秒)')
    } else {
        stopAutoRefresh()
        ElMessage.info('自动刷新已关闭')
    }
}
const startAutoRefresh = () => {
    if (refreshTimer.value) clearInterval(refreshTimer.value)
    refreshTimer.value = setInterval(refreshData, 10000)
}
const stopAutoRefresh = () => {
    if (refreshTimer.value) {
        clearInterval(refreshTimer.value)
        refreshTimer.value = null
    }
}
const fetchEquipmentData = async () => {
    try {
        const res = await axios.post('http://localhost:9291/api/EquipmentStatus/GetData')
        if (!res.data || !Array.isArray(res.data.data)) {
            return generateFallbackData()
        }
        const equipmentList = res.data.data.map(item => ({
            id: item.deviceCode,
            name: item.deviceName,
            type: item.deviceType,
            status: item.deviceRunStatus || ['normal', 'warning', 'error', 'offline'][Math.floor(Math.random() * 4)],
            alarmInformation: item.alarmInformation,
            lastUpdate: item.lastUpdate || new Date(Date.now() - Math.random() * 3600000 * 24).toLocaleString()
        }))
        return equipmentList
    } catch (error) {
        console.error('获取设备数据失败:', error)
        ElMessage.error('获取设备数据失败,使用备用数据')
        return generateFallbackData()
    }
}
const generateFallbackData = () => {
    return [
        {
            id: 'TEST001',
            name: '测试提升机01',
            type: '提升机',
            status: '运行中',
            alarmInformation: '',
            lastUpdate: new Date().toLocaleString()
        },
        {
            id: 'TEST002',
            name: '测试提升机02',
            type: '提升机',
            status: '空闲',
            alarmInformation: '',
            lastUpdate: new Date().toLocaleString()
        }
    ]
}
// å¯åŠ¨æå‡æœº
const startElevator = () => {
    requestElevator('startElevator', '启动提升机')
}
// åœæ­¢æå‡æœº
const stopElevator = () => {
    requestElevator('stopElevator', '停止提升机')
}
// å¤ä½æå‡æœºï¼ˆæ³¨æ„æ–¹æ³•名小写开头,符合JS规范)
const resetElevator = () => {
    requestElevator('ResetElevator', '复位提升机')
}
// åˆå§‹åŒ–提升机
const initializationElevator = () => {
    requestElevator('initialization', '初始化提升机')
}
onMounted(async () => {
    tableLoading.value = true
    try {
        const initData = await fetchEquipmentData()
        machines.value = initData
    } finally {
        tableLoading.value = false
    }
    if (autoRefresh.value) {
        startAutoRefresh()
    }
})
onUnmounted(() => {
    stopAutoRefresh()
})
</script>
<style scoped>
/* åŽŸæœ‰æ ·å¼ä¿ç•™ */
.machine-monitor-container {
    padding: 20px;
    background-color: #f5f7fa;
    min-height: 100vh;
}
.monitor-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 20px;
    flex-wrap: wrap;
    gap: 10px;
}
.monitor-header h1 {
    margin: 0;
    color: #1989fa;
}
.header-actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
}
.stat-cards {
    display: flex;
    gap: 20px;
    margin-bottom: 20px;
    flex-wrap: wrap;
}
.stat-card {
    flex: 1;
    min-width: 180px;
}
.stat-content {
    text-align: center;
    padding: 10px 0;
}
.stat-label {
    display: block;
    font-size: 14px;
    color: #666;
    margin-bottom: 5px;
}
.stat-value {
    font-size: 24px;
    font-weight: bold;
}
.stat-normal .stat-value {
    color: #67c23a;
}
.stat-warning .stat-value {
    color: #e6a23c;
}
.stat-error .stat-value {
    color: #f56c6c;
}
.stat-offline .stat-value {
    color: #909399;
}
.machine-list {
    background: #fff;
    padding: 20px;
    border-radius: 8px;
}
@media (max-width: 768px) {
    .stat-cards {
        flex-direction: column;
    }
    .monitor-header {
        flex-direction: column;
        align-items: flex-start;
    }
    .header-actions {
        width: 100%;
    }
    .el-input {
        width: 100% !important;
    }
}
</style>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Client/src/views/Index.vue
@@ -2,7 +2,7 @@
  <div id="vol-container" :class="['vol-theme-' + theme]">
    <div class="vol-aside" :style="{ width: menuWidth + 'px' }">
      <div class="header" :style="{ width: menuWidth - 1 + 'px' }">
        <img v-show="!isCollapse" v-bind:src="logo" />
        <!-- <img v-show="!isCollapse" v-bind:src="logo" /> -->
        <i @click="toggleLeft" class="el-icon-s-fold collapse-menu" />
      </div>
      <div class="vol-menu">
@@ -14,7 +14,7 @@
    </div>
    <div class="vol-container" :style="{ left: menuWidth - 1 + 'px' }">
      <div class="vol-header">
        <div class="project-name">明和WCS</div>
        <div class="project-name">明和智能设备有限公司</div>
        <div class="header-text">
          <!-- <div class="h-link">
            <a
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db-shm
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/CodeChunks.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db-shm
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/CopilotIndices/17.14.995.13737/SemanticSymbols.db-wal
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.backup.json
@@ -5,18 +5,6 @@
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\elevatorcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\elevatorcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -44,48 +32,9 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAA1AAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwEAAAA1AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-12-05T05:48:32.783Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "CommonElevatorJob.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ViewState": "AgIAAB8AAAAAAAAAAAAzwC0AAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:21:04.493Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAADUAAAAAAAAAAAAuwDoAAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:18:08.305Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "ElevatorController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "ViewState": "AgIAAAwAAAAAAAAAAAAAADkAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:16:54.858Z",
              "WhenOpened": "2025-12-10T08:10:51.354Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -5,18 +5,6 @@
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\elevatorcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\elevatorcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\elevatorjob\\commonelevatorjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -44,48 +32,9 @@
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAEAAAA1AAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvwEAAAA1AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-12-05T05:48:32.783Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "CommonElevatorJob.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ElevatorJob\\CommonElevatorJob.cs",
              "ViewState": "AgIAAB8AAAAAAAAAAAAzwC0AAAARAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:21:04.493Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "TaskController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAADUAAAAAAAAAAAAuwDoAAAAJAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:18:08.305Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "ElevatorController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\ElevatorController.cs",
              "ViewState": "AgIAAAwAAAAAAAAAAAAAADkAAAA3AAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:16:54.858Z",
              "WhenOpened": "2025-12-10T08:10:51.354Z",
              "EditorCaption": ""
            }
          ]
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
@@ -243,6 +243,7 @@
        }
        public virtual TEntity QueryFirst(Expression<Func<TEntity, bool>> whereExpression)
        {
            return _db.CopyNew().Queryable<TEntity>().WhereIF(whereExpression != null, whereExpression).First();
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Core/Extensions/SqlsugarSetup.cs
@@ -115,6 +115,7 @@
                #endregion
                SqlSugarScope sqlSugarClient = new SqlSugarScope(listConfig, db =>
                {
                    db.Aop.DataExecuting = SqlSugarAop.DataExecuting;
                });
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/EquipmentStatusController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,234 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
using WIDESEAWCS_Core;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_Tasks.ElevatorJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Server.Controllers.Task
{
    [Route("/api/EquipmentStatus")]
    [ApiController]
    public class EquipmentStatusController : ControllerBase
    {
        private readonly IDeviceInfoRepository _deviceInfoRepository;
        public EquipmentStatusController(IDeviceInfoRepository deviceInfoRepository)
        {
            _deviceInfoRepository = deviceInfoRepository;
        }
        [HttpGet, HttpPost, Route("GetData"), AllowAnonymous]
        public WebResponseContent GetData()
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                List<Equipment> equipments = new List<Equipment>();
                List<Dt_DeviceInfo> dt_DeviceInfos = _deviceInfoRepository.QueryData();
                if(dt_DeviceInfos.Count() > 0)
                {
                    foreach(var item in dt_DeviceInfos)
                    {
                        Equipment equipment = new Equipment();
                        if (item.DeviceCode == "1001") continue;
                        if (item.DeviceCode == "TSJ2") continue;
                        equipment.DeviceCode = item.DeviceCode;
                        equipment.DeviceName = item.DeviceName;
                        equipment.DeviceType = item.DeviceType;
                        equipments.Add(equipment);
                    }
                }
                else
                {
                    return content.Error("未查询到设备!!");
                }
                CommonElevator? commonElevator = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "TSJ1") as CommonElevator;
                CommonStackerCrane? commonStackerCrane = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC1") as CommonStackerCrane;
                foreach (var item in equipments)
                {
                    if(item.DeviceCode == "TSJ1")
                    {
                        if (commonElevator.GetValue<ElevatorDBName, short>(ElevatorDBName.ElevatorStatus) == 0)
                        {
                            item.DeviceRunStatus = "无状态";
                        }
                        else if(commonElevator.GetValue<ElevatorDBName, short>(ElevatorDBName.ElevatorStatus) == 1)
                        {
                            item.DeviceRunStatus = "运行中";
                        }
                        else if (commonElevator.GetValue<ElevatorDBName, short>(ElevatorDBName.ElevatorStatus) == 2)
                        {
                            item.DeviceRunStatus = "待机";
                        }
                        else
                        {
                            item.DeviceRunStatus = "报警";
                        }
                        if(commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm1)) { item.AlarmInformation = "急停被按下报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm2)) { item.AlarmInformation = "电梯内输送线电机过载报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm3)) { item.AlarmInformation = "地面输送线电机过载报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm4)) { item.AlarmInformation = "电梯系统异常报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm5)) { item.AlarmInformation = "初始化时设备上有货物报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm6)) { item.AlarmInformation = "一层输送线AGV放货异常报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm7)) { item.AlarmInformation = "一层光幕检测到物体报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm8)) { item.AlarmInformation = "二层光幕检测到物体报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm9)) { item.AlarmInformation = "二层输送线AGV放货异常报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm10)) { item.AlarmInformation = "一层电梯对准光电未检测到报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm11)) { item.AlarmInformation = "二层电梯对准光电未检测到报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm12)) { item.AlarmInformation = "有货物在一层输送线上报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm13)) { item.AlarmInformation = "AGV一层取货异常报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm14)) { item.AlarmInformation = "AGV二层取货异常报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm15)) { item.AlarmInformation = "有货物在二层输送线上报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm16)) { item.AlarmInformation = "电梯不在1楼报警"; }
                        if (commonElevator.GetValue<ElevatorDBName, bool>(ElevatorDBName.ElevatorAlarm17)) { item.AlarmInformation = "电梯不在2楼报警"; }
                    }
                    if (item.DeviceCode == "SC1")
                    {
                        var alarm = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.Alarm);
                        if(StackerCraneAlarm(alarm) != null)
                        {
                            item.AlarmInformation = StackerCraneAlarm(alarm);
                        }
                        var status = commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.StackerCraneWorkStatus);
                        if(StackerCraneStatus(status) != null)
                        {
                            item.DeviceRunStatus = StackerCraneStatus(status);
                        }
                    }
                }
                content = WebResponseContent.Instance.OK(data: equipments);
            }
            catch(Exception ex)
            {
                return content.Error(ex.Message);
            }
            return content;
        }
        public class Equipment
        {
            public string DeviceCode { get; set; }
            public string DeviceName { get; set; }
            public string DeviceType { get; set; }
            public string DeviceRunStatus { get; set; }
            public string AlarmInformation {get; set;}
        }
        #region æŠ¥è­¦ä»£ç è½¬æ¢æˆæ–‡å­—说明
        public string StackerCraneAlarm(short alarm) => alarm switch
        {
            1 => "左超限",
            2 => "右超限",
            3 => "前超限",
            4 => "后超限",
            5 => "高超限",
            6 => "取货载货台有货",
            7 => "放货载货台无货",
            8 => "取货左货格无货",
            9 => "取货右货格无货",
            10 => "放货左一有货",
            11 => "放货右一有货",
            12 => "取左二货格无货",
            13 => "取右二货格无货",
            14 => "放货左二货格有货",
            15 => "放货右二货格有货",
            16 => "左二取货左一有货",
            17 => "右二取货右一有货",
            18 => "左取货失败",
            19 => "右取货失败",
            20 => "左放货失败",
            21 => "右放货失败",
            22 => "货叉运行超时",
            23 => "货叉断路器跳闸",
            24 => "货叉变频器报警",
            25 => "货叉编码器故障",
            26 => "货叉伸叉故障",
            27 => "层运行货叉不在中位",
            28 => "列运行货叉不在中位",
            29 => "货叉中位开关故障",
            30 => "货叉变频器通讯故障",
            31 => "货叉编码器通讯故障",
            32 => "伸叉超出左极限",
            33 => "伸又超出右极限",
            34 => "入左二货格货时左一货格有货",
            35 => "入右二货格货时右一货格有货",
            36 => "货叉右侧回中停止位置错误",
            37 => "货叉左侧回中停止位置错误",
            38 => "货叉左侧极限停止位置错误",
            39 => "货叉右侧极限停止位置错误",
            40 => "面板急停",
            41 => "远程急停",
            42 => "主接触器控制回路故障",
            43 => "超重保护",
            44 => "松绳保护",
            45 => "限速保护",
            46 => "层停止位置错误",
            47 => "列停止位置错误",
            48 => "接收任务错误",
            49 => "接收列超限",
            50 => "接收层超限",
            51 => "行走前进极限",
            52 => "行走后退极限",
            53 => "提升上极限",
            54 => "提升下极限",
            55 => "行走运行超时",
            56 => "提升运行超时",
            57 => "行走断路器跳闸",
            58 => "提升断路器跳闸",
            59 => "行走变频器故障",
            60 => "提升变频器故障",
            61 => "行走测距/条码故障",
            62 => "提升测距/条码故障",
            63 => "行走测距/条码被挡",
            64 => "提升测距/条码被挡",
            65 => "上升减速光电故障",
            66 => "下降减速光电故障",
            67 => "提升原点光电故障",
            68 => "行走前减速光电故障",
            69 => "行走后减速光电故障",
            70 => "行走原点光电故障",
            71 => "与输送机通讯故障",
            72 => "升降超出最小层",
            73 => "升降超出最大层",
            74 => "行走超出最小列",
            75 => "行走超出最大列",
            76 => "接收排错误",
            77 => "起始站货格被禁用",
            78 => "目的站货格被禁用",
            79 => "行走抱闸故障",
            80 => "提升抱闸故障",
            81 => "安全门打开故障",
            _ =>  ""
        };
        #endregion
        #region è®¾å¤‡çŠ¶æ€è½¬æ¢æˆæ–‡å­—è¯´æ˜Ž
        public string StackerCraneStatus(short status) => status switch
        {
            0 => "空闲",
            1 => "取货走行",
            2 => "取货等待",
            3 => "取货中",
            4 => "放货走行",
            5 => "放货等待",
            6 => "放货中",
            7 => "回原点",
            8 => "回反原点",
            9 => "走行中",
            10 => "任务完成等待WCS确认",
            11 => "有货待命",
            99 => "报警",
            100 => "维护",
            _ => $"未知状态({status})"
        };
        #endregion
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskExecuteDetailController.cs
@@ -24,7 +24,7 @@
            return Service.GetDetailInfo(taskNum);
        }
        [HttpPost, HttpGet, Route("GetDetailDatas")]
        [HttpPost, HttpGet, Route("GetDetailDatas"), AllowAnonymous]
        public WebResponseContent GetDetailDatas(int taskNum)
        {
            return Service.GetDetailDatas(taskNum);
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -1,5 +1,5 @@
{
  //"urls": "http://*:9291", //web服务端口,如果用IIS部署,把这个去掉
  "urls": "http://*:9291", //web服务端口,如果用IIS部署,把这个去掉
  "Logging": {
    "LogLevel": {
      "Default": "Information",
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Properties/PublishProfiles/FolderProfile.pubxml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
  <PropertyGroup>
    <Configuration>Release</Configuration>
    <Platform>Any CPU</Platform>
    <PublishDir>bin\Release\net6.0\publish\</PublishDir>
    <PublishProtocol>FileSystem</PublishProtocol>
    <_TargetId>Folder</_TargetId>
  </PropertyGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
@@ -35,10 +35,12 @@
    public class TaskExecuteDetailService : ServiceBase<Dt_TaskExecuteDetail, ITaskExecuteDetailRepository>, ITaskExecuteDetailService
    {
        private readonly ITaskRepository _taskRepository;
        private readonly ITask_HtyRepository _task_htyRepository;
        public TaskExecuteDetailService(ITaskExecuteDetailRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
        public TaskExecuteDetailService(ITaskExecuteDetailRepository BaseDal, ITaskRepository taskRepository, ITask_HtyRepository task_HtyRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
            _task_htyRepository = task_HtyRepository;
        }
        public void AddTaskExecuteDetail(int taskId, string description = "")
@@ -245,18 +247,27 @@
            return content;
        }
        public WebResponseContent GetDetailDatas(int taskNum)
        {
            WebResponseContent content = new();
            try
            {
                Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == taskNum);
                Dt_Task_Hty task_Hty = _task_htyRepository.QueryFirst(x => x.TaskNum == taskNum);
                if (task != null)
                {
                    List<Dt_TaskExecuteDetail> taskExecuteDetails = BaseDal.QueryData(x => x.TaskId == task.TaskId, new Dictionary<string, SqlSugar.OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), SqlSugar.OrderByType.Asc } });
                    content = WebResponseContent.Instance.OK(data: taskExecuteDetails);
                }
                else if (task_Hty != null)
                {
                    List<Dt_TaskExecuteDetail> taskExecuteDetails = BaseDal.QueryData(x => x.TaskNum == taskNum, new Dictionary<string, SqlSugar.OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), SqlSugar.OrderByType.Asc } });
                    content = WebResponseContent.Instance.OK(data: taskExecuteDetails);
                }
                else
                {
                    content = WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ElevatorJob/ElevatorDBName.cs
@@ -140,5 +140,26 @@
        /// å¤ä½
        /// </summary>
        ResetElevator,
        /// <summary>
        /// æŠ¥è­¦ä¿¡æ¯
        /// </summary>
        ElevatorAlarm1,
        ElevatorAlarm2,
        ElevatorAlarm3,
        ElevatorAlarm4,
        ElevatorAlarm5,
        ElevatorAlarm6,
        ElevatorAlarm7,
        ElevatorAlarm8,
        ElevatorAlarm9,
        ElevatorAlarm10,
        ElevatorAlarm11,
        ElevatorAlarm12,
        ElevatorAlarm13,
        ElevatorAlarm14,
        ElevatorAlarm15,
        ElevatorAlarm16,
        ElevatorAlarm17,
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneDBName.cs
@@ -80,5 +80,10 @@
        /// æŠ¥è­¦ä¿¡æ¯
        /// </summary>
        Alarm,
        /// <summary>
        /// è®¾å¤‡çŠ¶æ€
        /// </summary>
        StackerCraneWorkStatus,
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.backup.json
@@ -44,7 +44,7 @@
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAkAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-12-05T02:47:46.451Z",
              "EditorCaption": ""
@@ -59,8 +59,7 @@
              "RelativeToolTip": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "ViewState": "AgIAAKIAAAAAAAAAAAA9wLIAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:41:12.132Z",
              "EditorCaption": ""
              "WhenOpened": "2025-12-05T02:41:12.132Z"
            },
            {
              "$type": "Document",
@@ -72,8 +71,7 @@
              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ViewState": "AgIAAFIAAAAAAAAAAAD4v2EAAAAFAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:41:00.007Z",
              "EditorCaption": ""
              "WhenOpened": "2025-12-05T02:41:00.007Z"
            },
            {
              "$type": "Document",
@@ -85,8 +83,7 @@
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAAJoAAAAAAAAAAADwv6wAAAABAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:40:46.147Z",
              "EditorCaption": ""
              "WhenOpened": "2025-12-05T02:40:46.147Z"
            }
          ]
        }
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/DocumentLayout.json
@@ -3,20 +3,16 @@
  "WorkspaceRootPath": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\task\\taskexecutedetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\task\\taskexecutedetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9912BD12-4CF7-4A91-8203-47C9C125004C}|WIDESEA_StorageTaskServices\\WIDESEA_StorageTaskServices.csproj|solutionrelative:widesea_storagetaskservices\\task\\dt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{986CA639-B3B4-4D4F-B12B-3D8FBA48B2B1}|WIDESEA_IStorageTaskService\\WIDESEA_IStorageTaskServices.csproj|solutionrelative:widesea_istoragetaskservice\\task\\idt_taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|d:\\\u660E\u548C\\duiduojiliku\\\u9879\u76EE\u4EE3\u7801\\wms\\widesea_wmsserver\\widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{D81A65B5-47D1-40C1-8FDE-7D24FF003F51}|WIDESEA_WMSServer\\WIDESEA_WMSServer.csproj|solutionrelative:widesea_wmsserver\\controllers\\task\\taskcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -39,45 +35,32 @@
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "appsettings.json",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\appsettings.json",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\appsettings.json",
              "RelativeToolTip": "WIDESEA_WMSServer\\appsettings.json",
              "Title": "TaskExecuteDetailController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskExecuteDetailController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskExecuteDetailController.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskExecuteDetailController.cs",
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskExecuteDetailController.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-12-05T02:47:46.451Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "IDt_TaskService.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "RelativeToolTip": "WIDESEA_IStorageTaskService\\Task\\IDt_TaskService.cs",
              "ViewState": "AgIAAKIAAAAAAAAAAAA9wLIAAAAAAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:41:12.132Z",
              "WhenOpened": "2025-12-09T08:24:11.519Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "DocumentIndex": 1,
              "Title": "Dt_TaskService.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ToolTip": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "RelativeToolTip": "WIDESEA_StorageTaskServices\\Task\\Dt_TaskService.cs",
              "ViewState": "AgIAAFIAAAAAAAAAAAD4v2EAAAAFAAAAAAAAAA==",
              "ViewState": "AgIAAEMAAAAAAAAAAAAQwGEAAAAFAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:41:00.007Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "DocumentIndex": 2,
              "Title": "TaskController.cs",
              "DocumentMoniker": "D:\\\u660E\u548C\\DuiDuoJiLiKu\\\u9879\u76EE\u4EE3\u7801\\WMS\\WIDESEA_WMSServer\\WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
              "RelativeDocumentMoniker": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
@@ -85,8 +68,7 @@
              "RelativeToolTip": "WIDESEA_WMSServer\\Controllers\\Task\\TaskController.cs",
              "ViewState": "AgIAAJoAAAAAAAAAAADwv6wAAAABAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-12-05T02:40:46.147Z",
              "EditorCaption": ""
              "WhenOpened": "2025-12-05T02:40:46.147Z"
            }
          ]
        }
ÏîÄ¿×ÊÁÏ/ͨÐÅЭÒé/~$ÌáÉý»úͨѶЭÒé2025.7.22гÌÐòʹÓã¡(1).xlsx
Binary files differ