Browse Source

重构login页与portal页

zengy 5 ngày trước cách đây
mục cha
commit
ef4749460b

+ 39 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/system/PortalController.java

@@ -0,0 +1,39 @@
+package com.zksy.web.controller.system;
+
+import com.zksy.common.core.controller.BaseController;
+import com.zksy.common.core.domain.AjaxResult;
+import com.zksy.system.domain.SysNotice;
+import com.zksy.system.service.PortalService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * PC 门户公共接口,不要求具体菜单权限。
+ */
+@RestController
+@RequestMapping("/portal")
+public class PortalController extends BaseController {
+    private final PortalService portalService;
+
+    public PortalController(PortalService portalService) {
+        this.portalService = portalService;
+    }
+
+    @GetMapping("/statistics")
+    public AjaxResult statistics() {
+        return success(portalService.getStatistics());
+    }
+
+    @GetMapping("/notices")
+    public AjaxResult notices() {
+        return success(portalService.getNotices());
+    }
+
+    @GetMapping("/notices/{noticeId}")
+    public AjaxResult notice(@PathVariable Long noticeId) {
+        SysNotice notice = portalService.getNotice(noticeId);
+        return notice == null ? error("公告不存在或已关闭") : success(notice);
+    }
+}

+ 17 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/system/domain/vo/PortalStatistics.java

@@ -0,0 +1,17 @@
+package com.zksy.system.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 门户全网统计数据。
+ */
+@Data
+public class PortalStatistics {
+    private Long deviceTotal;
+    private Long offlineDeviceCount;
+    private Long alarmingDeviceCount;
+    private Long todayWarningCount;
+    private Long yesterdayWarningCount;
+    private Long todayAlarmCount;
+    private Long yesterdayAlarmCount;
+}

+ 18 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/system/mapper/PortalMapper.java

@@ -0,0 +1,18 @@
+package com.zksy.system.mapper;
+
+import com.zksy.system.domain.SysNotice;
+import com.zksy.system.domain.vo.PortalStatistics;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 门户数据查询。
+ */
+public interface PortalMapper {
+    PortalStatistics selectStatistics();
+
+    List<SysNotice> selectNotices(@Param("limit") int limit);
+
+    SysNotice selectNoticeById(@Param("noticeId") Long noticeId);
+}

+ 34 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/system/service/PortalService.java

@@ -0,0 +1,34 @@
+package com.zksy.system.service;
+
+import com.zksy.system.domain.SysNotice;
+import com.zksy.system.domain.vo.PortalStatistics;
+import com.zksy.system.mapper.PortalMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 门户公共数据服务。统计不附加用户或部门数据范围。
+ */
+@Service
+public class PortalService {
+    private static final int NOTICE_LIMIT = 10;
+
+    private final PortalMapper portalMapper;
+
+    public PortalService(PortalMapper portalMapper) {
+        this.portalMapper = portalMapper;
+    }
+
+    public PortalStatistics getStatistics() {
+        return portalMapper.selectStatistics();
+    }
+
+    public List<SysNotice> getNotices() {
+        return portalMapper.selectNotices(NOTICE_LIMIT);
+    }
+
+    public SysNotice getNotice(Long noticeId) {
+        return portalMapper.selectNoticeById(noticeId);
+    }
+}

+ 102 - 0
pipe-network-service/zksy-system/src/main/resources/mapper/system/PortalMapper.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zksy.system.mapper.PortalMapper">
+
+    <resultMap id="PortalStatisticsResult" type="com.zksy.system.domain.vo.PortalStatistics">
+        <result property="deviceTotal" column="device_total"/>
+        <result property="offlineDeviceCount" column="offline_device_count"/>
+        <result property="alarmingDeviceCount" column="alarming_device_count"/>
+        <result property="todayWarningCount" column="today_warning_count"/>
+        <result property="yesterdayWarningCount" column="yesterday_warning_count"/>
+        <result property="todayAlarmCount" column="today_alarm_count"/>
+        <result property="yesterdayAlarmCount" column="yesterday_alarm_count"/>
+    </resultMap>
+
+    <!-- 全网口径,不关联用户、角色或部门数据范围。 -->
+    <select id="selectStatistics" resultMap="PortalStatisticsResult">
+        SELECT
+            equipment.device_total,
+            equipment.offline_device_count,
+            equipment.alarming_device_count,
+            warning.today_warning_count,
+            warning.yesterday_warning_count,
+            alarm.today_alarm_count,
+            alarm.yesterday_alarm_count
+        FROM (
+            SELECT
+                COUNT(*) AS device_total,
+                COALESCE(SUM(CASE WHEN latest_status.online_status = 0 THEN 1 ELSE 0 END), 0) AS offline_device_count,
+                COALESCE(SUM(CASE WHEN latest_status.alarm_status = 1 THEN 1 ELSE 0 END), 0) AS alarming_device_count
+            FROM app_user.equipment_base equipment_base
+            LEFT JOIN LATERAL (
+                SELECT status.online_status, status.alarm_status
+                FROM app_user.equipment_status status
+                WHERE status.equipment_id = equipment_base.equipment_id
+                  AND status.del_flag = '0'
+                ORDER BY status.status_update_time DESC NULLS LAST, status.status_id DESC
+                LIMIT 1
+            ) latest_status ON TRUE
+        ) equipment
+        CROSS JOIN (
+            SELECT
+                COALESCE(SUM(CASE
+                    WHEN early_warning.status != 'DRAFT'
+                     AND early_warning.publish_time &gt;= CURRENT_DATE
+                     AND early_warning.publish_time &lt; CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
+                    THEN 1 ELSE 0 END), 0) AS today_warning_count,
+                COALESCE(SUM(CASE
+                    WHEN early_warning.status != 'DRAFT'
+                     AND early_warning.publish_time &gt;= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
+                     AND early_warning.publish_time &lt; CURRENT_DATE
+                    THEN 1 ELSE 0 END), 0) AS yesterday_warning_count
+            FROM app_user.early_warning early_warning
+            WHERE early_warning.status != 'DRAFT'
+              AND early_warning.publish_time &gt;= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
+              AND early_warning.publish_time &lt; CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
+        ) warning
+        CROSS JOIN (
+            SELECT
+                COALESCE(SUM(CASE
+                    WHEN alarm_data.audit_status = 1
+                     AND alarm_data.create_time &gt;= CURRENT_DATE
+                     AND alarm_data.create_time &lt; CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
+                    THEN 1 ELSE 0 END), 0) AS today_alarm_count,
+                COALESCE(SUM(CASE
+                    WHEN alarm_data.audit_status = 1
+                     AND alarm_data.create_time &gt;= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
+                     AND alarm_data.create_time &lt; CURRENT_DATE
+                    THEN 1 ELSE 0 END), 0) AS yesterday_alarm_count
+            FROM app_user.alarm_data alarm_data
+            WHERE alarm_data.audit_status = 1
+              AND alarm_data.create_time &gt;= CAST(CURRENT_DATE AS TIMESTAMP) - CAST('1 day' AS INTERVAL)
+              AND alarm_data.create_time &lt; CAST(CURRENT_DATE AS TIMESTAMP) + CAST('1 day' AS INTERVAL)
+        ) alarm
+    </select>
+
+    <resultMap id="PortalNoticeResult" type="com.zksy.system.domain.SysNotice">
+        <id property="noticeId" column="notice_id"/>
+        <result property="noticeTitle" column="notice_title"/>
+        <result property="noticeType" column="notice_type"/>
+        <result property="noticeContent" column="notice_content"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <select id="selectNotices" resultMap="PortalNoticeResult">
+        SELECT notice_id, notice_title, notice_type, status, create_by, create_time
+        FROM app_user.sys_notice
+        WHERE status = '0'
+        ORDER BY create_time DESC NULLS LAST, notice_id DESC
+        LIMIT #{limit}
+    </select>
+
+    <select id="selectNoticeById" resultMap="PortalNoticeResult">
+        SELECT notice_id, notice_title, notice_type, notice_content, status, create_by, create_time
+        FROM app_user.sys_notice
+        WHERE notice_id = #{noticeId}
+          AND status = '0'
+    </select>
+</mapper>