From 40f616cb7b272efa6693585303cc98802827e8e1 Mon Sep 17 00:00:00 2001
From: lizijie <lzjiiie@163.com>
Date: Thu, 11 Nov 2021 17:06:31 +0800
Subject: [PATCH] 报警信息按条件查询

---
 screen-api/src/main/java/com/moral/api/service/impl/AlarmInfoServiceImpl.java |  116 +++++++++++++++++++
 screen-api/src/main/java/com/moral/api/mapper/AlarmInfoMapper.java            |   22 +++
 screen-api/src/main/resources/mapper/AlarmInfoMapper.xml                      |   34 +++++
 screen-api/src/main/java/com/moral/api/controller/AlarmInfoController.java    |   60 ++++++++++
 screen-api/src/main/java/com/moral/api/entity/AlarmInfo.java                  |   69 +++++++++++
 screen-api/src/main/java/com/moral/api/service/AlarmInfoService.java          |   28 ++++
 6 files changed, 329 insertions(+), 0 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/controller/AlarmInfoController.java b/screen-api/src/main/java/com/moral/api/controller/AlarmInfoController.java
new file mode 100644
index 0000000..9ad9d25
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/controller/AlarmInfoController.java
@@ -0,0 +1,60 @@
+package com.moral.api.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.moral.api.entity.Organization;
+import com.moral.api.mapper.OrganizationMapper;
+import com.moral.api.service.AlarmInfoService;
+import com.moral.constant.ResponseCodeEnum;
+import com.moral.constant.ResultMessage;
+import com.moral.util.WebUtils;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @program: screen
+ * @description: ������������
+ * @author: lizijie
+ * @create: 2021-11-10 16:05
+ **/
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@CrossOrigin(origins = "*", maxAge = 3600)
+@RequestMapping("/alarmInfo")
+public class AlarmInfoController {
+
+    @Resource
+    private OrganizationMapper organizationMapper;
+
+    @Resource
+    private AlarmInfoService alarmInfoService;
+
+    @RequestMapping(value = "getDataByCondition", method = RequestMethod.GET)
+    @ResponseBody
+    public ResultMessage getDataByCondition(HttpServletRequest request){
+        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request,null);
+        Object orgid = parameters.get("organization_id");
+        Object startTime = parameters.get("startTime");
+        Object endTime = parameters.get("endTime");
+        Object index = parameters.get("index");
+        Object alarmType = parameters.get("alarmType");
+        Object size = parameters.get("size");
+        Object current = parameters.get("current");
+        if (ObjectUtils.isEmpty(orgid) || ObjectUtils.isEmpty(startTime) || ObjectUtils.isEmpty(endTime) || ObjectUtils.isEmpty(index) || ObjectUtils.isEmpty(alarmType) || ObjectUtils.isEmpty(size) || ObjectUtils.isEmpty(current)){
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        }
+        Organization organization = organizationMapper.selectById(Integer.parseInt(orgid.toString()));
+        if (ObjectUtils.isEmpty(organization)){
+            return ResultMessage.fail(ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getCode(), ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getMsg());
+        }
+        List<Map<String, Object>> resultList = alarmInfoService.getDataByCondition(parameters);
+        return ResultMessage.ok(resultList);
+    }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/entity/AlarmInfo.java b/screen-api/src/main/java/com/moral/api/entity/AlarmInfo.java
new file mode 100644
index 0000000..bc3a6bd
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/entity/AlarmInfo.java
@@ -0,0 +1,69 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author moral
+ * @since 2021-11-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class AlarmInfo extends Model<AlarmInfo> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * ������������
+     */
+    private LocalDateTime alarmTime;
+
+    /**
+     * ������������������
+     */
+    private String index;
+
+    /**
+     * ������������������
+     */
+    private Integer deviceId;
+
+    /**
+     * ������������
+     */
+    private String alarmType;
+
+    /**
+     * ������������
+     */
+    private String alarmInformation;
+
+    /**
+     * ������������
+     */
+    private Date createTime;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/mapper/AlarmInfoMapper.java b/screen-api/src/main/java/com/moral/api/mapper/AlarmInfoMapper.java
new file mode 100644
index 0000000..308ad08
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/mapper/AlarmInfoMapper.java
@@ -0,0 +1,22 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.AlarmInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-11-10
+ */
+public interface AlarmInfoMapper extends BaseMapper<AlarmInfo> {
+
+    List<Map<String,Object>> selectDataByCondition(Map<String, Object> map);
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/AlarmInfoService.java b/screen-api/src/main/java/com/moral/api/service/AlarmInfoService.java
new file mode 100644
index 0000000..437b71e
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/AlarmInfoService.java
@@ -0,0 +1,28 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.AlarmInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-11-10
+ */
+public interface AlarmInfoService extends IService<AlarmInfo> {
+
+    /**
+      *@Description: ������������������������������
+      *@Param: [map]
+      *@return: java.util.List<com.moral.api.entity.AlarmInfo> 
+      *@Author: lizijie
+      *@Date: 2021/11/10 16:18
+     **/
+    List<Map<String,Object>> getDataByCondition(Map<String, Object> parameters);
+
+}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/AlarmInfoServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/AlarmInfoServiceImpl.java
new file mode 100644
index 0000000..49e5647
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/service/impl/AlarmInfoServiceImpl.java
@@ -0,0 +1,116 @@
+package com.moral.api.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.moral.api.entity.AlarmInfo;
+import com.moral.api.entity.Device;
+import com.moral.api.entity.Organization;
+import com.moral.api.mapper.AlarmInfoMapper;
+import com.moral.api.mapper.DeviceMapper;
+import com.moral.api.service.AlarmInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.service.OrganizationService;
+import com.moral.constant.Constants;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-11-10
+ */
+@Service
+public class AlarmInfoServiceImpl extends ServiceImpl<AlarmInfoMapper, AlarmInfo> implements AlarmInfoService {
+
+    @Autowired
+    private OrganizationService organizationService;
+
+    @Autowired(required = false)
+    private DeviceMapper deviceMapper;
+
+    @Autowired(required = false)
+    private AlarmInfoMapper alarmInfoMapper;
+
+    @Override
+    public List<Map<String, Object>> getDataByCondition(Map<String, Object> parameters) {
+        int orgId = Integer.parseInt(parameters.get("organization_id").toString());
+        //���������������������������������id
+        List<Integer> allOrgId = new ArrayList<>();
+        allOrgId.add(orgId);
+        //������������
+        //���������������
+        List<Organization> allChildrenOrganization = organizationService.getChildrenOrganizationsById(orgId);
+        if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1){
+            for (Organization organization:allChildrenOrganization) {
+                allOrgId.add(organization.getId());
+            }
+        }
+        //������������
+        List<Integer> allOrgIdWithoutDuplicates = allOrgId.stream().distinct().collect(Collectors.toList());
+        //������������list���������������id
+        List<Integer> deviceIdList = new ArrayList<>();
+        for (Integer orgIdWithoutDuplicates:allOrgIdWithoutDuplicates) {
+            //������id������������������
+            QueryWrapper<Device> wrapper_device = new QueryWrapper<>();
+            wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgIdWithoutDuplicates);
+            List<Device> devices = new ArrayList<>();
+            devices = deviceMapper.selectList(wrapper_device);
+            if (devices.size()>0){
+                for (Device device:devices) {
+                    int deviceId = device.getId();
+                    deviceIdList.add(deviceId);
+                }
+            }else {
+                continue;
+            }
+        }
+        if (deviceIdList.size()>0){
+            Map<String, Object> map = new HashMap<>();
+            map.put("deviceIds",deviceIdList);
+            int size = Integer.parseInt(parameters.get("size").toString());
+            int current = Integer.parseInt(parameters.get("current").toString());
+            int start = (current-1)*size;
+            map.put("size",size);
+            map.put("start",start);
+            String startTime = parameters.get("startTime")+" 00:00:00";
+            String endTime = parameters.get("endTime")+" 23:59:59";
+            map.put("startTime",startTime);
+            map.put("endTime",endTime);
+            String index = parameters.get("index").toString();
+            if (!index.equals("all")){
+                map.put("index",index);
+            }
+            String alarmType = parameters.get("alarmType").toString();
+            switch (alarmType){
+                case "������":map.put("alarmType","������");
+                    break;
+                case "���������":map.put("alarmType","���������");
+                    break;
+                case "���������100":map.put("alarmType","������������������100%");
+                    break;
+                case "���������150":map.put("alarmType","������������������150%");
+                    break;
+                case "���������250":map.put("alarmType","������������������250%");
+                    break;
+                case "������������150":map.put("alarmType","������������������150%");
+                    break;
+                case "������������250":map.put("alarmType","������������������250%");
+                    break;
+                default:break;
+            }
+            List<Map<String, Object>> resultList = alarmInfoMapper.selectDataByCondition(map);
+            return resultList;
+        }
+        return null;
+    }
+}
diff --git a/screen-api/src/main/resources/mapper/AlarmInfoMapper.xml b/screen-api/src/main/resources/mapper/AlarmInfoMapper.xml
new file mode 100644
index 0000000..c2ed097
--- /dev/null
+++ b/screen-api/src/main/resources/mapper/AlarmInfoMapper.xml
@@ -0,0 +1,34 @@
+<?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.moral.api.mapper.AlarmInfoMapper">
+
+        <!-- ������������������������ -->
+        <resultMap id="BaseResultMap" type="com.moral.api.entity.AlarmInfo">
+                    <id column="id" property="id" />
+                    <result column="alarm_time" property="alarmTime" />
+                    <result column="index" property="index" />
+                    <result column="device_id" property="deviceId" />
+                    <result column="alarm_type" property="alarmType" />
+                    <result column="alarm_information" property="alarmInformation" />
+                    <result column="create_time" property="createTime" />
+        </resultMap>
+
+    <select id="selectDataByCondition" resultType="java.util.Map">
+        select ai.id alarmInfoId,ai.index,ai.alarm_type,ai.alarm_information,d.id deviceId,d.name deviceName,d.longitude,d.latitude
+        from alarm_info ai, device d
+        where ai.device_id in
+        <foreach collection="deviceIds" item="deviceId" index="index" open="(" close=")" separator=",">
+            #{deviceId}
+        </foreach>
+        and d.id = ai.device_id
+        <if test="index != null">
+            and ai.index = #{index}
+        </if>
+        <if test="alarmType != null">
+            and ai.alarm_type = #{alarmType}
+        </if>
+        and alarm_time between #{startTime} and #{endTime}
+        ORDER by ai.create_time DESC
+        limit #{start},#{size}
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0