Explorar el Código

运行情况汇总

wanglt hace 3 meses
padre
commit
95a700f828

+ 83 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/controller/GxtMonthRuntimeController.java

@@ -0,0 +1,83 @@
+package com.ygtx.gxt.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.ygtx.common.constant.HttpStatus;
+import com.ygtx.common.core.controller.BaseController;
+import com.ygtx.common.core.page.PageDomain;
+import com.ygtx.common.core.page.TableSupport;
+import com.ygtx.gxt.domain.GxtWorkOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import com.ygtx.gxt.domain.GxtMonthRuntime;
+import com.ygtx.gxt.service.IGxtMonthRuntimeService;
+import com.ygtx.common.core.page.TableDataInfo;
+
+/**
+ * 月度场站运行天数工单Controller
+ * 
+ * @author ruoyi
+ * @date 2025-01-16
+ */
+@RestController
+@RequestMapping("/gxt/monthRuntime")
+public class GxtMonthRuntimeController extends BaseController
+{
+    @Autowired
+    private IGxtMonthRuntimeService gxtMonthRuntimeService;
+
+    /**
+     * 查询月度场站运行天数工单列表
+     */
+    @PreAuthorize("@ss.hasPermi('gxt:monthRuntime:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(GxtMonthRuntime gxtMonthRuntime)
+    {
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        Integer pageNum = pageDomain.getPageNum();
+        Integer pageSize = pageDomain.getPageSize();
+        List<GxtMonthRuntime> list = gxtMonthRuntimeService.selectGxtMonthRuntimeList(gxtMonthRuntime);
+        Integer total = list.size();
+        List<GxtMonthRuntime> result = new ArrayList<>();
+        if (pageNum!=null && pageSize!=null) {
+            int from = (pageNum-1) * pageSize;
+            int to = pageNum * pageSize;
+            if (to>=total) {
+                result.addAll(list.subList(from,total));
+            }else {
+                result.addAll(list.subList(from, to));
+            }
+        }
+        TableDataInfo dataInfo = new TableDataInfo();
+        dataInfo.setCode(HttpStatus.SUCCESS);
+        dataInfo.setMsg("查询成功");
+        dataInfo.setTotal(total);
+        dataInfo.setRows(result);
+        return dataInfo;
+    }
+
+    @PreAuthorize("@ss.hasPermi('gxt:monthRuntime:query')")
+    @GetMapping("/getOrders")
+    public TableDataInfo getOrders(@RequestParam Integer itemNum,@RequestParam Integer itemSize,@RequestParam Long pid,@RequestParam Integer fromDays,@RequestParam Integer toDays,@RequestParam boolean isStop) {
+        List<GxtWorkOrder> list = gxtMonthRuntimeService.getOrders(pid,fromDays,toDays,isStop);
+        Integer total = list.size();
+        List<GxtWorkOrder> result = new ArrayList<>();
+        if (itemNum!=null && itemSize!=null) {
+            int from = (itemNum-1) * itemSize;
+            int to = itemNum * itemSize;
+            if (to>=total) {
+                result.addAll(list.subList(from,total));
+            }else {
+                result.addAll(list.subList(from, to));
+            }
+        }
+        TableDataInfo dataInfo = new TableDataInfo();
+        dataInfo.setCode(HttpStatus.SUCCESS);
+        dataInfo.setMsg("查询成功");
+        dataInfo.setTotal(total);
+        dataInfo.setRows(result);
+        return dataInfo;
+    }
+}

+ 19 - 0
ygtx-ui/src/api/gxt/monthRuntime.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 查询月度运行时长列表
+export function listMonthRuntime(query) {
+  return request({
+    url: '/gxt/monthRuntime/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月度运行时长详细
+export function getOrders(params) {
+  return request({
+    url: '/gxt/monthRuntime/getOrders',
+    method: 'get',
+    params: params
+  })
+}

+ 235 - 0
ygtx-ui/src/views/gxt/monthRuntime/index.vue

@@ -0,0 +1,235 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-position="top" @submit.prevent="handleQuery">
+      <el-form-item label="场站名称" prop="deptName">
+        <el-input
+          v-model="queryParams.deptName"
+          placeholder="请输入场站名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item style="margin-right: 0;">
+        <div class="item-search">&nbsp;</div>
+        <div class="item-search" style="display: flex; gap: 8px;">
+          <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" />
+      <el-table-column label="场站名称" prop="deptName" />
+      <el-table-column label="运行天数" prop="runtimeRange">
+        <template #default="scope">
+          {{ scope.row.runtimeRange }}
+        </template>
+      </el-table-column>
+      <el-table-column label="安全运行设备数量" prop="runningNum">
+        <template #default="scope">
+          <el-link type="primary" @click="handleShowOrders(scope.row, 'running')">{{ scope.row.runningNum }}</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column label="停运设备数量" prop="stopNum">
+        <template #default="scope">
+          <el-link type="primary" @click="handleShowOrders(scope.row, 'stopped')">{{ scope.row.stopNum }}</el-link>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 分页 -->
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+
+
+    <!-- 订单列表弹窗 -->
+    <el-dialog :title="ordersTitle" v-model="openOrders" width="1200px" append-to-body>
+      <el-table v-loading="ordersLoading" :data="ordersList" style="width: 100%">
+        <el-table-column prop="pcsDeviceName" label="设备编号" width="120" />
+        <el-table-column prop="model" label="设备型号" width="150" />
+        <el-table-column prop="pcsStationName" label="设备场站" width="150" />
+        <el-table-column prop="orderType" label="工单类型" width="100">
+          <template #default="scope">
+            {{ scope.row.orderType == 1 ? '维保工单' : scope.row.orderType == 2 ? '维修工单' : '' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="工单编号" width="150">
+          <template #default="scope">
+            <el-button link type="primary" @click="handleWorkOrderClick(scope.row)">{{ scope.row.workOrderProjectNo }}</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column prop="restartTime" label="复运时间" width="150" />
+        <el-table-column prop="pauseTime" label="停机时间" width="150" />
+        <el-table-column v-if="isStop" prop="stopDays" label="停机天数" />
+        <el-table-column v-if="!isStop" prop="runningDays" label="持续运行天数" />
+      </el-table>
+      <!-- 订单列表分页 -->
+      <pagination
+        v-show="orderTotal > 0"
+        :total="orderTotal"
+        v-model:page="orderQueryParams.itemNum"
+        v-model:limit="orderQueryParams.itemSize"
+        @pagination="getOrdersByNextPage"
+      />
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="openOrders = false">关 闭</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="MonthRuntime">
+import { ref, reactive, toRefs, getCurrentInstance } from "vue"
+import { useRouter } from "vue-router"
+import { listMonthRuntime,getOrders } from "@/api/gxt/monthRuntime";
+
+const router = useRouter()
+
+const { proxy } = getCurrentInstance()
+
+const list = ref([])
+const openOrders = ref(false)
+const loading = ref(true)
+const ordersLoading = ref(false)
+const showSearch = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const ordersTitle = ref("")
+const isStop = ref(false)
+const orderTotal = ref(0)
+
+const orderQueryParams = ref({ itemNum: 1, itemSize: 10, pid: 0, fromDays: 0, toDays: 0, isStop: false })
+
+const data = reactive({
+  formData: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    deptName: undefined,
+    monthPeriod: undefined
+  },
+  ordersList: [],
+  rules: {
+  }
+})
+
+const { queryParams, formData, ordersList, rules } = toRefs(data)
+
+/** 查询月度运行时长列表 */
+function getList() {
+  loading.value = true
+  listMonthRuntime(queryParams.value).then(response => {
+    list.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+/** 取消按钮 */
+function cancel() {
+  reset()
+}
+
+/** 表单重置 */
+function reset() {
+  formData.value = {}
+  proxy.resetForm("form")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+/** 多选框选中数据 */
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+function getOrdersByNextPage() {
+  // 调用API获取订单列表
+  ordersLoading.value = true;
+  getOrders(orderQueryParams.value).then(response => {
+    ordersList.value = response.rows || [];
+    orderTotal.value = response.total || 0;
+    openOrders.value = true;
+    ordersLoading.value = false;
+  }).catch(error => {
+    console.error('获取订单列表失败:', error);
+    ordersLoading.value = false;
+  });
+}
+
+/** 显示订单列表 */
+function handleShowOrders(row, type) {
+  isStop.value = type === 'stopped';
+  const title = isStop.value ? '停运设备列表' : '持续运行设备列表';
+  
+  ordersTitle.value = title;
+
+  orderQueryParams.value = { itemNum: 1, itemSize: 10, pid: row.deptId, fromDays: row.fromDays, toDays: row.toDays, isStop: isStop.value };
+  
+  // 调用API获取订单列表
+  getOrdersByNextPage()
+}
+
+
+    
+// 处理工单编号点击事件
+function handleWorkOrderClick(row) {
+  // 记录来源路由和工单编号
+  if (!row.workOrderProjectNo) return
+  openOrders.value = false;
+  if (row.orderType==1) {
+    sessionStorage.setItem('fromRoute', '/workScore/monthScore');
+    sessionStorage.setItem('workOrderProjectNo', row.workOrderProjectNo);
+    // 跳转到维保工单列表页面
+    router.push({
+      path: '/workOrder/gxtOrder'
+    });
+  }else{
+    // 记录来源路由和工单编号
+    sessionStorage.setItem('fromRouteRepair', '/workScore/monthScore');
+    sessionStorage.setItem('workOrderProjectNoRepair', row.workOrderProjectNo);
+    // 跳转到维保工单列表页面
+    router.push({
+      path: '/workOrder/repairOrder'
+    });
+  }
+}
+
+getList()
+</script>
+
+<style lang="scss" scoped>
+.app-container {
+  padding: 10px;
+}
+
+.item-search {
+  display: flex;
+  justify-content: flex-start;;
+  align-items: center;
+}
+</style>