瀏覽代碼

Merge branch 'master' of http://47.114.101.16:7070/ssy/newcpms

zhangding 3 年之前
父節點
當前提交
7d316027d8
共有 19 個文件被更改,包括 497 次插入121 次删除
  1. 12 0
      master/src/main/java/com/ruoyi/project/aspen/controller/TElecdashboardHourController.java
  2. 7 0
      master/src/main/java/com/ruoyi/project/aspen/mapper/TElecdashboardHourMapper.java
  3. 7 0
      master/src/main/java/com/ruoyi/project/aspen/service/ITElecdashboardHourService.java
  4. 10 0
      master/src/main/java/com/ruoyi/project/aspen/service/impl/TElecdashboardHourServiceImpl.java
  5. 6 5
      master/src/main/java/com/ruoyi/project/invoice/controller/TApproveReserveInvoiceController.java
  6. 147 0
      master/src/main/java/com/ruoyi/project/invoice/domain/TInvoiceBookingworkticketVo.java
  7. 2 0
      master/src/main/java/com/ruoyi/project/invoice/mapper/TInvoiceBookingworkticketMapper.java
  8. 2 0
      master/src/main/java/com/ruoyi/project/invoice/service/ITInvoiceBookingworkticketService.java
  9. 7 0
      master/src/main/java/com/ruoyi/project/invoice/service/impl/TInvoiceBookingworkticketServiceImpl.java
  10. 0 0
      master/src/main/resources/mybatis/aspen/TElecdashboardHourMapper.xml
  11. 28 6
      master/src/main/resources/mybatis/invoice/TInvoiceBookingworkticketMapper.xml
  12. 9 1
      ui/src/api/aspen/hour.js
  13. 105 9
      ui/src/views/approve/approveDetail/invoice-detail.vue
  14. 9 9
      ui/src/views/invoice/bookingworkticket/index.vue
  15. 1 1
      ui/src/views/monitor/elec/bottomRight.vue
  16. 14 13
      ui/src/views/monitor/elec/center.vue
  17. 84 52
      ui/src/views/monitor/elec/echart/bottom/bottomRightChart.vue
  18. 29 22
      ui/src/views/monitor/elec/echart/bottom/bottomRightChart2.vue
  19. 18 3
      ui/src/views/monitor/elec/elecindex.vue

+ 12 - 0
master/src/main/java/com/ruoyi/project/aspen/controller/TElecdashboardHourController.java

@@ -33,6 +33,18 @@ public class TElecdashboardHourController extends BaseController
     @Autowired
     private ITElecdashboardHourService tElecdashboardHourService;
 
+    /**
+     * 查询日期最靠前的24条电厂大屏每小时数据
+     */
+    @PreAuthorize("@ss.hasPermi('aspen:hour:list')")
+    @GetMapping("/listLatest24")
+    public TableDataInfo listLatest24()
+    {
+        startPage();
+        List<TElecdashboardHour> list = tElecdashboardHourService.selectTElecdashboardHourListLatest24();
+        return getDataTable(list);
+    }
+
     /**
      * 查询电厂大屏每小时数据列表
      */

+ 7 - 0
master/src/main/java/com/ruoyi/project/aspen/mapper/TElecdashboardHourMapper.java

@@ -60,4 +60,11 @@ public interface TElecdashboardHourMapper
      * @return 结果
      */
     public int deleteTElecdashboardHourByIds(Long[] ids);
+
+    /**
+     * 查询日期最靠前的24条电厂大屏每小时数据
+     *
+     * @return 日期最靠前的24条电厂大屏每小时数据
+     */
+    public List<TElecdashboardHour> selectTElecdashboardHourListLatest24();
 }

+ 7 - 0
master/src/main/java/com/ruoyi/project/aspen/service/ITElecdashboardHourService.java

@@ -58,4 +58,11 @@ public interface ITElecdashboardHourService
      * @return 结果
      */
     public int deleteTElecdashboardHourById(Long id);
+
+    /**
+     * 查询日期最靠前的24条电厂大屏每小时数据
+     *
+     * @return 日期最靠前的24条电厂大屏每小时数据
+     */
+    public List<TElecdashboardHour> selectTElecdashboardHourListLatest24();
 }

+ 10 - 0
master/src/main/java/com/ruoyi/project/aspen/service/impl/TElecdashboardHourServiceImpl.java

@@ -90,4 +90,14 @@ public class TElecdashboardHourServiceImpl implements ITElecdashboardHourService
     {
         return tElecdashboardHourMapper.deleteTElecdashboardHourById(id);
     }
+
+    /**
+     * 查询日期最靠前的24条电厂大屏每小时数据
+     *
+     * @return 日期最靠前的24条电厂大屏每小时数据
+     */
+    @Override
+    public List<TElecdashboardHour> selectTElecdashboardHourListLatest24() {
+        return tElecdashboardHourMapper.selectTElecdashboardHourListLatest24();
+    }
 }

+ 6 - 5
master/src/main/java/com/ruoyi/project/invoice/controller/TApproveReserveInvoiceController.java

@@ -10,6 +10,7 @@ import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.approve.damain.DevTask;
 import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
 import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticketVo;
 import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
 import com.ruoyi.project.invoice.mapper.TInvoiceWorkcontentMapper;
 import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
@@ -70,8 +71,8 @@ public class TApproveReserveInvoiceController extends BaseController {
             ids = tApprove.getInvoiceId().split(",");
             List<Object> devList = new ArrayList<>();
             for (String id : ids) {
-                TInvoiceBookingworkticket book = workService.getById(id);
-                devList.add(book);
+                List<TInvoiceBookingworkticketVo> book = workService.selectDetailById(Long.valueOf(id));
+                devList.addAll(book);
             }
             tApprove.setDevList(devList);
         }
@@ -101,8 +102,8 @@ public class TApproveReserveInvoiceController extends BaseController {
         ids = tApprove.getInvoiceId().split(",");
         List<Object> devList = new ArrayList<>();
         for (String inId : ids) {
-            TInvoiceBookingworkticket book = workService.getById(inId);
-            devList.add(book);
+            List<TInvoiceBookingworkticketVo> book = workService.selectDetailById(Long.valueOf(inId));
+            devList.addAll(book);
         }
         tApprove.setDevList(devList);
         return AjaxResult.success(tApprove);
@@ -257,7 +258,7 @@ public class TApproveReserveInvoiceController extends BaseController {
         }
         List<TInvoiceWorkcontent> workcontents = invoiceWorkcontentMapper.selectTInvoiceWorkcontentBybookingticketId(Long.valueOf(invoice.getInvoiceId()));
         for (TInvoiceWorkcontent workcontent : workcontents) {
-            if (workcontent.getWorkType() == 1 || workcontent.getWorkType() == 2 || workcontent.getWorkType() == 3 || workcontent.getWorkType() == 15) {
+            if (workcontent.getWorkType() == 1 || workcontent.getWorkType() == 15) {
                 param.put("isspecial", "1");
                 break;
             } else {

+ 147 - 0
master/src/main/java/com/ruoyi/project/invoice/domain/TInvoiceBookingworkticketVo.java

@@ -0,0 +1,147 @@
+package com.ruoyi.project.invoice.domain;
+
+import com.ruoyi.framework.web.domain.BaseEntity;
+
+/**
+ * 预约作业票台账详细
+ *
+ * @author jiang
+ * @date 2022-09-16
+ */
+public class TInvoiceBookingworkticketVo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+    private String workUnit;
+    private String workArea;
+    private String floorLocation;
+    private String workStartTime;
+    private String workEndTime;
+    private String contact;
+    private String phonenumber;
+    private String workType;
+    private String riskLevel;
+    private String workDescription;
+    private String workPeopleNumber;
+    private String estimateWorktime;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    private String status;
+
+    public TInvoiceBookingworkticketVo(String workUnit, String workArea, String floorLocation, String workStartTime, String workEndTime, String contact, String phonenumber, String workType, String riskLevel, String workDescription, String workPeopleNumber, String estimateWorktime) {
+        this.workUnit = workUnit;
+        this.workArea = workArea;
+        this.floorLocation = floorLocation;
+        this.workStartTime = workStartTime;
+        this.workEndTime = workEndTime;
+        this.contact = contact;
+        this.phonenumber = phonenumber;
+        this.workType = workType;
+        this.riskLevel = riskLevel;
+        this.workDescription = workDescription;
+        this.workPeopleNumber = workPeopleNumber;
+        this.estimateWorktime = estimateWorktime;
+    }
+
+    public String getWorkUnit() {
+        return workUnit;
+    }
+
+    public void setWorkUnit(String workUnit) {
+        this.workUnit = workUnit;
+    }
+
+    public String getWorkArea() {
+        return workArea;
+    }
+
+    public void setWorkArea(String workArea) {
+        this.workArea = workArea;
+    }
+
+    public String getFloorLocation() {
+        return floorLocation;
+    }
+
+    public void setFloorLocation(String floorLocation) {
+        this.floorLocation = floorLocation;
+    }
+
+    public String getWorkStartTime() {
+        return workStartTime;
+    }
+
+    public void setWorkStartTime(String workStartTime) {
+        this.workStartTime = workStartTime;
+    }
+
+    public String getWorkEndTime() {
+        return workEndTime;
+    }
+
+    public void setWorkEndTime(String workEndTime) {
+        this.workEndTime = workEndTime;
+    }
+
+    public String getContact() {
+        return contact;
+    }
+
+    public void setContact(String contact) {
+        this.contact = contact;
+    }
+
+    public String getPhonenumber() {
+        return phonenumber;
+    }
+
+    public void setPhonenumber(String phonenumber) {
+        this.phonenumber = phonenumber;
+    }
+
+    public String getWorkType() {
+        return workType;
+    }
+
+    public void setWorkType(String workType) {
+        this.workType = workType;
+    }
+
+    public String getRiskLevel() {
+        return riskLevel;
+    }
+
+    public void setRiskLevel(String riskLevel) {
+        this.riskLevel = riskLevel;
+    }
+
+    public String getWorkDescription() {
+        return workDescription;
+    }
+
+    public void setWorkDescription(String workDescription) {
+        this.workDescription = workDescription;
+    }
+
+    public String getWorkPeopleNumber() {
+        return workPeopleNumber;
+    }
+
+    public void setWorkPeopleNumber(String workPeopleNumber) {
+        this.workPeopleNumber = workPeopleNumber;
+    }
+
+    public String getEstimateWorktime() {
+        return estimateWorktime;
+    }
+
+    public void setEstimateWorktime(String estimateWorktime) {
+        this.estimateWorktime = estimateWorktime;
+    }
+}

+ 2 - 0
master/src/main/java/com/ruoyi/project/invoice/mapper/TInvoiceBookingworkticketMapper.java

@@ -3,6 +3,7 @@ package com.ruoyi.project.invoice.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticketVo;
 import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
 
 import java.util.List;
@@ -22,6 +23,7 @@ public interface TInvoiceBookingworkticketMapper  extends BaseMapper<TInvoiceBoo
      * @return 预约作业票台账
      */
     public TInvoiceBookingworkticket selectTInvoiceBookingworkticketById(Long id);
+    public List<TInvoiceBookingworkticketVo> selectDetailById(Long id);
 
     /**
      * 查询预约作业票台账列表

+ 2 - 0
master/src/main/java/com/ruoyi/project/invoice/service/ITInvoiceBookingworkticketService.java

@@ -2,6 +2,7 @@ package com.ruoyi.project.invoice.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticketVo;
 import com.ruoyi.project.invoice.domain.TInvoiceContractor;
 import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
 
@@ -22,6 +23,7 @@ public interface ITInvoiceBookingworkticketService extends IService<TInvoiceBook
      * @return 预约作业票台账
      */
     public TInvoiceBookingworkticket selectTInvoiceBookingworkticketById(Long id);
+    public List<TInvoiceBookingworkticketVo> selectDetailById(Long id);
 
     /**
      * 查询预约作业票台账列表

+ 7 - 0
master/src/main/java/com/ruoyi/project/invoice/service/impl/TInvoiceBookingworkticketServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.project.invoice.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
 import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticketVo;
 import com.ruoyi.project.invoice.domain.TInvoiceContractor;
 import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
 import com.ruoyi.project.invoice.mapper.TInvoiceBookingworkticketMapper;
@@ -44,6 +45,12 @@ public class TInvoiceBookingworkticketServiceImpl extends ServiceImpl<TInvoiceBo
         return tInvoiceBookingworkticketMapper.selectTInvoiceBookingworkticketById(id);
     }
 
+    @Override
+    public List<TInvoiceBookingworkticketVo> selectDetailById(Long id)
+    {
+        return tInvoiceBookingworkticketMapper.selectDetailById(id);
+    }
+
     /**
      * 查询预约作业票台账列表
      *

File diff suppressed because it is too large
+ 0 - 0
master/src/main/resources/mybatis/aspen/TElecdashboardHourMapper.xml


+ 28 - 6
master/src/main/resources/mybatis/invoice/TInvoiceBookingworkticketMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.project.invoice.mapper.TInvoiceBookingworkticketMapper">
-    
+
     <resultMap type="TInvoiceBookingworkticket" id="TInvoiceBookingworkticketResult">
         <result property="id"    column="id"    />
         <result property="workUnit"    column="work_unit"    />
@@ -28,6 +28,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="userUnit"    column="user_unit"    />
     </resultMap>
 
+    <resultMap type="TInvoiceBookingworkticketVo" id="TInvoiceBookingworkticketResultVo">
+        <result property="workUnit"    column="work_unit"    />
+        <result property="workArea"    column="work_area"    />
+        <result property="floorLocation"    column="floor_location"    />
+        <result property="workStartTime"    column="work_start_time"    />
+        <result property="workEndTime"    column="work_end_time"    />
+        <result property="contact"    column="contact"    />
+        <result property="phonenumber"    column="phonenumber"    />
+        <result property="workType"    column="work_type"    />
+        <result property="riskLevel"    column="risk_level"    />
+        <result property="workDescription"    column="work_description"    />
+        <result property="workPeopleNumber"    column="work_people_number"    />
+        <result property="estimateWorktime"    column="estimate_worktime"    />
+        <result property="status"    column="status"    />
+    </resultMap>
+
     <sql id="selectTInvoiceBookingworkticketVo">
         select d.id, d.work_unit, d.work_area, d.unit_number, d.floor_location, d.work_start_time, d.work_end_time, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.contact, d.phonenumber, d.status, d.dept_id, d.user_mg ,d.user_unit,s.dept_name,d.filename,d.reservation_number from t_invoice_bookingworkticket d
       left join sys_dept s on s.dept_id = d.dept_id
@@ -35,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectTInvoiceBookingworkticketList" parameterType="TInvoiceBookingworkticket" resultMap="TInvoiceBookingworkticketResult">
         <include refid="selectTInvoiceBookingworkticketVo"/>
-        <where>  
+        <where>
             <if test="workUnit != null "> and work_unit = #{workUnit}</if>
             <if test="workArea != null "> and work_area = #{workArea}</if>
             <if test="unitNumber != null "> and unit_number = #{unitNumber}</if>
@@ -59,13 +75,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>
-    
+
+    <select id="selectDetailById" parameterType="Long" resultMap="TInvoiceBookingworkticketResultVo">
+        select a.work_unit,a.work_area,a.floor_location,a.work_start_time,a.work_end_time,a.status,b.work_type,b.risk_level,b.work_description,b.work_people_number,b.estimate_worktime,a.contact,a.phonenumber
+        from  t_invoice_bookingworkticket a,t_invoice_workcontent b
+        where a.id=b.bookingticket_id and  a.id=#{id} and a.del_flag = 0
+    </select>
+
     <select id="selectTInvoiceBookingworkticketById" parameterType="Long" resultMap="TInvoiceBookingworkticketResult">
         <include refid="selectTInvoiceBookingworkticketVo"/>
         where id = #{id}
         and d.del_flag = 0
     </select>
-        
+
     <insert id="insertTInvoiceBookingworkticket" parameterType="TInvoiceBookingworkticket" useGeneratedKeys = "true" keyProperty = "id">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT t_bookingworkticket_seq.NEXTVAL as id FROM DUAL
@@ -153,5 +175,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </update>
-    
-</mapper>
+
+</mapper>

+ 9 - 1
ui/src/api/aspen/hour.js

@@ -1,5 +1,13 @@
 import request from '@/utils/request'
 
+// 查询日期最靠前的24条电厂大屏每小时数据
+export function listHourLatest24() {
+  return request({
+    url: '/aspen/hour/listLatest24',
+    method: 'get'
+  })
+}
+
 // 查询电厂大屏每小时数据列表
 export function listHour(query) {
   return request({
@@ -50,4 +58,4 @@ export function exportHour(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 105 - 9
ui/src/views/approve/approveDetail/invoice-detail.vue

@@ -4,12 +4,11 @@
     :close-on-click-modal="false"
     :visible.sync="visible"
     :append-to-body="true">
-    <el-form :model="taskForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="" label-width="80px">
+    <el-form :model="taskForm" :rules="dataRule"  ref="dataForm" @keyup.enter.native="" label-width="80px">
       <el-form-item :label="$t('申请开票')">
-        <el-table :data="devList" border style="width: 100%;">
-          <el-table-column label="作业单位" align="center" prop="workUnit" :formatter="workUnitFormat"/>
-          <el-table-column label="作业区域" align="center" prop="workArea" :formatter="workAreaFormat"/>
-          <el-table-column label="单元号" align="center" prop="unitNumber" :formatter="unitNumberFormat"/>
+        <el-table :data="devList" :span-method="mergeMethod" border style="width: 100%;">
+          <el-table-column label="作业单位" align="center" prop="workUnit" :show-overflow-tooltip="true"/>
+          <el-table-column label="作业区域单元" align="center" prop="workArea" :show-overflow-tooltip="true"/>
           <el-table-column label="楼层位置" align="center" prop="floorLocation" :formatter="floorLocationFormat"/>
           <el-table-column label=" 作业开始时间" align="center" prop="workStartTime" width="100">
             <template slot-scope="scope">
@@ -21,6 +20,11 @@
               <span>{{ parseTime(scope.row.workEndTime, '{y}-{m}-{d}') }}</span>
             </template>
           </el-table-column>
+          <el-table-column label="作业类型" align="center" prop="workType" :formatter="workTypeFormat"  :show-overflow-tooltip="true"/>
+          <el-table-column label="风险等级" align="center" prop="riskLevel" :formatter="riskLevelFormat"/>
+          <el-table-column label="作业内容描述" align="center" prop="workDescription" :show-overflow-tooltip="true"/>
+          <el-table-column label="作业人员数" align="center" prop="workPeopleNumber" :show-overflow-tooltip="true"/>
+          <el-table-column label="预计作业时间" align="center" prop="estimateWorktime" :show-overflow-tooltip="true"/>
           <el-table-column label="联系人" align="center" prop="contact" :show-overflow-tooltip="true"/>
           <el-table-column label="联系方式" align="center" prop="phonenumber" :show-overflow-tooltip="true"/>
           <el-table-column label="状态" align="center" prop="status" width="100" :formatter="statusFormat"/>
@@ -198,7 +202,12 @@ export default {
     },
     // 字典翻译
     floorLocationFormat(row, column) {
-      return this.selectDictLabel(this.floorLocationOptions, row.floorLocation);
+      console.log(row.floorLocation)
+      let floor="";
+      row.floorLocation.split(",").forEach(item=>{
+        floor+= this.selectDictLabel(this.floorLocationOptions,item)+","
+      })
+      return floor.substring(0,floor.length-1);
     },
     // 字典翻译
     userMgFormat(row, column) {
@@ -221,8 +230,6 @@ export default {
       return this.selectDictLabel(this.guardianUnitOptions, row.guardianUnit);
     },
     init (id, taskId, processId,taskName) {
-      console.log(id)
-      console.log("idididid")
       this.reset();
       this.fileList = [];
       this.getDicts("booking_work_status").then(response => {
@@ -267,7 +274,6 @@ export default {
         this.historyLoading = false
       });
       getInvoice(id).then(response => {
-        console.log(response)
         this.taskForm.businessKey = response.data.id
         this.dataForm.userId = response.data.userId
         this.dataForm.devId = response.data.devId
@@ -335,6 +341,7 @@ export default {
       };
       this.resetForm("form");
       this.historyList=[];
+      this.devList=[];
     },
 
     /** 提交按钮 */
@@ -368,6 +375,95 @@ export default {
       this.$nextTick(() => {
         this.$refs.recordDeal.init(devList,dataForm);
       })
+    },//合并单元格
+    mergeMethod({ row, column, rowIndex, columnIndex }) {
+      // console.log(row)
+      if (columnIndex === 0) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+      if (columnIndex === 1) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+      if (columnIndex === 2) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+      if (columnIndex === 3) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+      if (columnIndex === 4) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+      if (columnIndex === 10) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }if (columnIndex === 11) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }if (columnIndex === 12) {
+        const _row = this.setTable(this.devList).merge[rowIndex];
+        const _col = _row > 0 ? 1 : 0;
+        return {
+          rowspan: _row,
+          colspan: _col
+        };
+      }
+
+
+    },
+    //单元格整理
+    setTable(tableData) {
+      let spanArr = [],
+        concat = 0;
+      tableData.forEach((item, index) => {
+        if (index === 0) {
+          spanArr.push(1);
+        } else {
+          if (item.workUnit === tableData[index - 1].workUnit) {
+            //第一列需合并相同内容的判断条件
+            spanArr[concat] += 1;
+            spanArr.push(0);
+          } else {
+            spanArr.push(1);
+            concat = index;
+          }
+        }
+      });
+      return {
+        merge: spanArr
+      };
     },
 }
 }

+ 9 - 9
ui/src/views/invoice/bookingworkticket/index.vue

@@ -600,7 +600,7 @@ export default {
     },
     addAprrove(row) {
       this.reset();
-  
+
       var rows = row ? [row] : this.bookingworkticketList.map(item => {
         return item
       })
@@ -623,11 +623,11 @@ export default {
               this.approveForm.isToday = 1;
         }
          //判断是否涉及 动火 和当日
-          if (row.workType===1||row.workType===2||row.workType===3||row.workType===15){
+          if (row.workType===1||row.workType===15){
             this.approveForm.isSpecial = 1
           }
         this.approveForm.userSupId=row.bookingworkticket.userMg;
-    
+
         addInvoice(this.approveForm).then(response => {
           this.msgSuccess(this.$t('预约成功'));
           // this.visible = false;
@@ -868,7 +868,7 @@ export default {
      
     //  console.log(row.floorLocation)  将后台的字符串数组重新转换为el-select要的数组格式
        let arr=row.floorLocation.split(",")
-       let st=[] 
+       let st=[]
 		// 将字符串数组的每一项转换成Number,生成一个新的数组
       	for (var arrInt in arr) {
 			  st.push(parseInt(arr[arrInt]))
@@ -887,7 +887,7 @@ export default {
       });
     },
     /** 提交按钮 */
-   submitForm() { 
+   submitForm() {
     let arr=[]
      const basicForm = this.$refs.form;
      arr.push(basicForm)
@@ -930,7 +930,7 @@ export default {
               console.log(this.ruleForm)
             this.approveForm.invoiceId=response.data
             var nowTime = this.getNowFormatDate()
-       
+
              //判断是否涉及 动火 和当日
             if ( this.form.workStartTime &&  this.form.workStartTime ===  nowTime){
               this.approveForm.isToday = 1;
@@ -938,9 +938,9 @@ export default {
                    this.approveForm.isToday = 0;
             }
             for(let i=0;i<this.ruleForm.length;i++){
-               if( this.ruleForm[i].workType===1||this.ruleForm[i].workType===2||
-               this.ruleForm[i].workType===3||this.ruleForm[i].workType===15){
+               if( this.ruleForm[i].workType===1||this.ruleForm[i].workType===15){
               this.approveForm.isSpecial = 1
+                 break;
             }else{
                 this.approveForm.isSpecial = 0
             }
@@ -964,7 +964,7 @@ export default {
           this.msgError("表单校验未通过,每项申请内容都必填");
         }
       });
-    
+
     },
     /** 删除按钮操作 */
     handleDelete(row) {

+ 1 - 1
ui/src/views/monitor/elec/bottomRight.vue

@@ -15,7 +15,7 @@
       </div>
       <div style="display:flex;flex-direction:row">
         <div style="flex: 3.1" >
-          <bottomRightChart :weekData="weekData"/>
+          <bottomRightChart :weekData="weekData" v-bind="$attrs"/>
         </div>
       <div class="naturalGasData" style="flex: 0.9;">
         <span style="fontSize:14px;position:relative;top:-15px;">NG消耗</span>

+ 14 - 13
ui/src/views/monitor/elec/center.vue

@@ -71,7 +71,7 @@
 import centerChart from "./echart/center/centerChartRate";
 
 export default {
-  props: ['dashboardelecdata'],
+  props: ['dashboardelecdata', 'latest24HourData'],
   data() {
     return {
       openChart: false,
@@ -269,20 +269,21 @@ export default {
     initChart() {
       // 基于准备好的dom,初始化echarts实例
       this.chart = this.echarts.init(document.getElementById('naturalGasChart'))
-
+      const hourArray = [];
+      const carbonArray = [];
+      let data = this.latest24HourData;
+      for (let i = 0; i < data.length; i++) {
+        if (i % 4 == 0) {
+          hourArray.push(data[i].pullDate.toString().substr(14, 5));
+          carbonArray.push(data[i].carbonRealTime);
+        }
+      }
+      hourArray.reverse();
+      carbonArray.reverse();
       this.chart.setOption({
         xAxis: {
           type: 'category',
-          data: [
-            '00:00-03:00',
-            '03:00-06:00',
-            '06:00-09:00',
-            '09:00-12:00',
-            '12:00-15:00',
-            '15:00-18:00',
-            '18:00-21:00',
-            '21:00-00:00'
-          ]
+          data: hourArray
         },
         yAxis: {
           type: 'value',
@@ -290,7 +291,7 @@ export default {
         },
         series: [
           {
-            data: [120, 200, 150, 80, 70, 110, 130],
+            data: carbonArray,
             type: 'line',
             smooth: true,
             symbol: '',

+ 84 - 52
ui/src/views/monitor/elec/echart/bottom/bottomRightChart.vue

@@ -11,7 +11,7 @@
 import echartMixins from "@/utils/resizeMixins";
 
 export default {
-  props:['weekData'],
+  props:['weekData', 'latest24HourData'],
   data() {
     return {
       chart: null,
@@ -41,31 +41,31 @@ export default {
       // 基于准备好的dom,初始化echarts实例
       this.chart = this.echarts.init(document.getElementById("bottomRightChart"));
       //  ----------------------------------------------------------------
-      // 数据
-      let dateBase = new Date();
-      let year = dateBase.getFullYear();
-      let dottedBase = +dateBase + 1000 * 3600 * 24;
-      let weekCategory = [];
-
-      let maxData = 12000;
-      let weekMaxData = [];
-      let weekLineData = [];
-
-      // 周数据
-      for (let i = 0; i < 7; i++) {
-        // 日期
-        var date = new Date((dottedBase -= 1000 * 3600 * 24));
-        weekCategory.unshift([date.getMonth() + 1, date.getDate()].join("/"));
-
-        // 折线图数据
-        weekMaxData.push(maxData);
-        var distance = Math.round(Math.random() * 11000 + 500);
-        weekLineData.push(distance);
-      }
-      const dateNum = [];
-      for (let i = 0; i < this.weekData.length; i++) {
-        dateNum[i] = this.weekData[i].evconsume;
-      }
+      // // 数据
+      // let dateBase = new Date();
+      // let year = dateBase.getFullYear();
+      // let dottedBase = +dateBase + 1000 * 3600 * 24;
+      // let weekCategory = [];
+      //
+      // let maxData = 12000;
+      // let weekMaxData = [];
+      // let weekLineData = [];
+      //
+      // // 周数据
+      // for (let i = 0; i < 7; i++) {
+      //   // 日期
+      //   var date = new Date((dottedBase -= 1000 * 3600 * 24));
+      //   weekCategory.unshift([date.getMonth() + 1, date.getDate()].join("/"));
+      //
+      //   // 折线图数据
+      //   weekMaxData.push(maxData);
+      //   var distance = Math.round(Math.random() * 11000 + 500);
+      //   weekLineData.push(distance);
+      // }
+      // const dateNum = [];
+      // for (let i = 0; i < this.weekData.length; i++) {
+      //   dateNum[i] = this.weekData[i].evconsume;
+      // }
 
       // // 颜色设置
       // let color = {
@@ -256,6 +256,22 @@ export default {
       //     }
       //   ]
       // };
+
+      const hourArray = [];
+      const gasArray = [];
+      let latestDate = null;
+      let data = this.latest24HourData;
+      for (let i = 0; i < data.length; i++) {
+        if (i == 0) {
+          latestDate = data[i].pullDate.toString().substr(5, 5);
+        } else if (latestDate == data[i].pullDate.toString().substr(5, 5)) {
+          hourArray.push(data[i].pullDate.toString().substr(14, 5));
+          gasArray.push(data[i].gasUsed);
+        }
+      }
+      hourArray.reverse();
+      gasArray.reverse();
+
       let option = {
         tooltip: {
           trigger: "item"
@@ -274,7 +290,7 @@ export default {
               color: "rgba(255,255,255,.8)",
               fontSize: 12
             },
-            data: ['08:00' ,'11:00' ,'14:00' ,'17:00' ,'20:00' ,'23:00' ,'02:00' ,'05:00' ]
+            data: hourArray
             // data: weekCategory
           },
         yAxis: {
@@ -283,7 +299,7 @@ export default {
         },
         series: [
           {
-            data: [99, 180, 200, 310, 459, 601, 800 ,933],
+            data: gasArray,
             // data:dateNum,
             type: 'line',
             smooth: true,
@@ -326,30 +342,46 @@ export default {
       this.chart1 = this.echarts.init(document.getElementById("bottomRightChartDialog"));
       //  ----------------------------------------------------------------
       // 数据
-      let dateBase = new Date();
-      let year = dateBase.getFullYear();
-      let dottedBase = +dateBase + 1000 * 3600 * 24;
-      let weekCategory = [];
-
-      let maxData = 12000;
-      let weekMaxData = [];
-      let weekLineData = [];
-
-      // 周数据
-      for (let i = 0; i < 7; i++) {
-        // 日期
-        var date = new Date((dottedBase -= 1000 * 3600 * 24));
-        weekCategory.unshift([date.getMonth() + 1, date.getDate()].join("/"));
+      // let dateBase = new Date();
+      // let year = dateBase.getFullYear();
+      // let dottedBase = +dateBase + 1000 * 3600 * 24;
+      // let weekCategory = [];
+      //
+      // let maxData = 12000;
+      // let weekMaxData = [];
+      // let weekLineData = [];
+      //
+      // // 周数据
+      // for (let i = 0; i < 7; i++) {
+      //   // 日期
+      //   var date = new Date((dottedBase -= 1000 * 3600 * 24));
+      //   weekCategory.unshift([date.getMonth() + 1, date.getDate()].join("/"));
+      //
+      //   // 折线图数据
+      //   weekMaxData.push(maxData);
+      //   var distance = Math.round(Math.random() * 11000 + 500);
+      //   weekLineData.push(distance);
+      // }
+      // const dateNum = [];
+      // for (let i = 0; i < this.weekData.length; i++) {
+      //   dateNum[i] = this.weekData[i].evconsume;
+      // }
 
-        // 折线图数据
-        weekMaxData.push(maxData);
-        var distance = Math.round(Math.random() * 11000 + 500);
-        weekLineData.push(distance);
-      }
-      const dateNum = [];
-      for (let i = 0; i < this.weekData.length; i++) {
-        dateNum[i] = this.weekData[i].evconsume;
+      const hourArray = [];
+      const gasArray = [];
+      let latestDate = null;
+      let data = this.latest24HourData;
+      for (let i = 0; i < data.length; i++) {
+        if (i == 0) {
+          latestDate = data[i].pullDate.toString().substr(5, 5);
+        } else if (latestDate == data[i].pullDate.toString().substr(5, 5)) {
+          hourArray.push(data[i].pullDate.toString().substr(14, 5));
+          gasArray.push(data[i].gasUsed);
+        }
       }
+      hourArray.reverse();
+      gasArray.reverse();
+
       let option = {
         tooltip: {
           trigger: "item"
@@ -359,7 +391,7 @@ export default {
           right: 80,
         },
         xAxis: {
-          data: ['08:00' ,'11:00' ,'14:00' ,'17:00' ,'20:00' ,'23:00' ,'02:00' ,'05:00']
+          data: hourArray
           // data: weekCategory
         },
         yAxis: {
@@ -372,7 +404,7 @@ export default {
               show: true,
               position: 'top'
             },
-            data: [99, 180, 200, 310, 459, 601, 800 ,933],
+            data: gasArray,
             // data:dateNum,
             type: 'line',
             smooth: true,

+ 29 - 22
ui/src/views/monitor/elec/echart/bottom/bottomRightChart2.vue

@@ -13,6 +13,7 @@ import echartMixins from "@/utils/resizeMixins";
 import echarts from "@/api/cpms/echarts.min";
 
 export default {
+  props: ['latest24HourData'],
   data() {
     return {
       chart:null,
@@ -38,6 +39,19 @@ export default {
       // let lineData = [
       //   820, 932, 901, 934, 1290, 1330, 1320
       // ];
+
+      const hourArray = [];
+      const gasArray = [];
+      let data = this.latest24HourData;
+      for (let i = 0; i < data.length; i++) {
+        if (i % 3 == 0) {
+          hourArray.push(data[i].pullDate.toString().substr(14, 5));
+          gasArray.push(data[i].gasRealTime);
+        }
+      }
+      hourArray.reverse();
+      gasArray.reverse();
+
       let option={
         legend:{
           orient:'horizontal',
@@ -64,16 +78,7 @@ export default {
           },
           boundaryGap: false,
           type: 'category',
-          data: [
-            '00:00-03:00',
-            '03:00-06:00',
-            '06:00-09:00',
-            '09:00-12:00',
-            '12:00-15:00',
-            '15:00-18:00',
-            '18:00-21:00',
-            '21:00-00:00'
-          ]
+          data: hourArray
         },
         yAxis: {
           type: 'value',
@@ -87,7 +92,7 @@ export default {
         },
         series: [
           {
-            data: [500, 680, 733, 470, 1290, 980, 1320,1580],
+            data: gasArray,
             type: 'line',
             smooth: 0.5,
             symbolSize: 10,
@@ -141,6 +146,17 @@ export default {
       // let lineData = [
       //   820, 932, 901, 934, 1290, 1330, 1320
       // ];
+      const hourArray = [];
+      const gasArray = [];
+      let data = this.latest24HourData;
+      for (let i = 0; i < data.length; i++) {
+        if (i % 3 == 0) {
+          hourArray.push(data[i].pullDate.toString().substr(14, 5));
+          gasArray.push(data[i].gasRealTime);
+        }
+      }
+      hourArray.reverse();
+      gasArray.reverse();
       let option={
         legend:{
           orient:'horizontal',
@@ -160,16 +176,7 @@ export default {
             }
           },
           type: 'category',
-          data: [
-            '00:00-03:00',
-            '03:00-06:00',
-            '06:00-09:00',
-            '09:00-12:00',
-            '12:00-15:00',
-            '15:00-18:00',
-            '18:00-21:00',
-            '21:00-00:00'
-          ]
+          data: hourArray
         },
         yAxis: {
           type: 'value',
@@ -181,7 +188,7 @@ export default {
         },
         series: [
           {
-            data: [500, 680, 733, 470, 1290, 980, 1320,1580],
+            data: gasArray,
             type: 'line',
             smooth: 0.5,
             symbolSize: 10,

+ 18 - 3
ui/src/views/monitor/elec/elecindex.vue

@@ -70,7 +70,7 @@
           </div>
           <!-- 中间 -->
           <div>
-            <center :dashboardelecdata="dashboardelecdata"/>
+            <center :dashboardelecdata="dashboardelecdata" :latest24HourData="latest24HourData" />
           </div>
           <!-- 中间 -->
           <div>
@@ -90,7 +90,7 @@
           </dv-border-box-13>
           <div class="bototm-box1">
             <dv-border-box-12>
-              <bottom-right :weekData="weekData" :dashboardelecdata="dashboardelecdata"/>
+              <bottom-right :weekData="weekData" :dashboardelecdata="dashboardelecdata":latest24HourData="latest24HourData" />
             </dv-border-box-12>
             <div class="bototm-box2">
               <dv-border-box-12>
@@ -119,7 +119,7 @@
                     </div>
                   </div>
                   <div>
-                    <bottom-right2 />
+                    <bottom-right2 :latest24HourData="latest24HourData" />
                   </div>
                 </div>
               </dv-border-box-12>
@@ -166,6 +166,7 @@ import {selectLast,selectMonth,selecctfiftyday} from "@/api/aspen/dashboarddayel
 import {selectWeek} from "@/api/aspen/dashboarddayeleceight";
 import {getRealtimeByMaxDate} from "@/api/aspen/realtime.js";
 import {listDayLatest7, listDayLatest30} from "@/api/aspen/day.js";
+import {listHourLatest24} from "@/api/aspen/hour.js";
 export default {
   data() {
     return {
@@ -182,6 +183,8 @@ export default {
       bgCol0:"#0a84ff",
       wh:"3.25rem",
       tAlign:"left",
+      // 最近24小时的数据
+      latest24HourData: [],
       // 最近7天的数据
       latest7DayData: [],
       // 最近30天的数据
@@ -375,6 +378,8 @@ export default {
     this.getLatest7DayData();
     // 抓取最近30天的数据
     this.getLatest30DayData();
+    // 抓取最近24小时的数据
+    this.getLatest24HourData();
 
     // this.getList1();
     // this.getMonthList1();
@@ -412,6 +417,16 @@ export default {
     // }, 1000 * 10 * 6 * 60 * 6)
   },
   methods: {
+    /** 抓取最近24小时的数据 */
+    getLatest24HourData() {
+      listHourLatest24().then(response => {
+        // 最近24小时的数据
+        let data = response.rows;
+        for (let i = 0; i < data.length; i++) {
+          this.latest24HourData.push(data[i]);
+        }
+      });
+    },
     /** 抓取最近30天的数据 */
     getLatest30DayData() {
       listDayLatest30().then(response => {

Some files were not shown because too many files changed in this diff