Przeglądaj źródła

照明定时策略,控制api对接

huangyan 1 tydzień temu
rodzic
commit
58301cc3a3

+ 11 - 3
config/local.yml

@@ -102,8 +102,16 @@ illuminating:
   clientId: 3
   mobile: "admin"
   password: "123456"
-  baseUrl: "http://10.1.204.253"
+  baseUrl: "http://182.43.247.65:8091"
   api:
     login: "/user/v1/user/user/login"
-    statistics: "/baseecic/v1/baseecic/all/statistics"
-    baseecic: "/baseecic/v2/device/all"
+    statistics: "/baseecic/v1/baseecic/all/statistics" #统计
+    baseecic: "/baseecic/v2/device/all"#所有设备
+    alarm: "/maintain/v2/maintain/alarm/message/find" #报警
+    deviceStatistics: "/device/v2/base/device/category/statistics" #设备统计
+    alarmStatistics: "/maintain/v3/maintain/alarm/message/statistics" #报警统计
+    gatewayFind: "/baseecic/v2/base/gateway/find/gateway" #网关
+    devicesControl: "/device/v1/base/devices/control/one" #设备控制
+    deviceOrgid: "/device/v1/cust/scene/timing/page/orgid"# 设备策略列表
+
+

+ 252 - 80
internal/handler/illuminating.go

@@ -7,8 +7,8 @@ import (
 	"encoding/json"
 	"fmt"
 	"go.uber.org/zap"
-	"math/rand"
 	"strconv"
+	"strings"
 	"time"
 
 	"github.com/gin-gonic/gin"
@@ -33,90 +33,116 @@ func NewIlluminatingHandler(
 	}
 }
 
-// 照明系统
+// GetIlluminating 照明系统
 func (h *IlluminatingHandler) GetIlluminating(ctx *gin.Context) {
 	m := make(map[string]any)
-	runAnaly := make(map[string]any)
-	var illuminatingDevice []model.IlluminatingDevice
-	var eventList []model.EventList
-	var runAnalyse model.RunAnalyse
-	for i := 0; i < 20; i++ {
-		device := model.IlluminatingDevice{
-			Id:             i + 1,
-			DeviceName:     model.GetRandomItem(model.IlluminatingDeviceNames),
-			SwitchStatus:   rand.Intn(2),
-			OnlinePresence: rand.Intn(2),
-		}
-		list := model.EventList{
-			Id:           i + 1,
-			DeviceName:   model.GetRandomItem(model.LightingEvents),
-			DeviceStatus: rand.Intn(2),
-			EventDate:    time.Now().Format("2006-01-02 15:04:05"),
-		}
-		eventList = append(eventList, list)
-		illuminatingDevice = append(illuminatingDevice, device)
-	}
-	for i := 0; i < 7; i++ {
-		date := fmt.Sprintf("2025-5-%v", i+1)
-		runAnalyse.FaultCount = rand.Intn(100)
-		runAnalyse.OpenCount = rand.Intn(100)
-		runAnalyse.OffCount = rand.Intn(100)
-		runAnaly[date] = runAnalyse
-	}
-	m["IlluminatingDevice"] = illuminatingDevice //设备列表
-	m["DeviceCount"] = rand.Intn(100)            //设备总数
-	m["OpenCount"] = rand.Intn(100)              //开启数量
-	m["OffCount"] = rand.Intn(100)               //关闭数量
-	m["FaultCount"] = rand.Intn(100)             //故障数量
-	m["RunAnalyse"] = runAnaly                   //运行分析
-	m["EventList"] = eventList                   //事件列表
-	resp.HandleSuccess(ctx, m)
-}
+	var alarmstatistics model.AlarmStatistics
+	var alarmCount model.AlarmCount
+	var statis model.IlluminatingStatistics
 
-// 获取灯光状态
-func (h *IlluminatingHandler) GetLightingstatus(ctx *gin.Context) {
-	// 设置响应头
-	ctx.Header("Content-Type", "text/event-stream")
-	ctx.Header("Cache-Control", "no-cache")
-	ctx.Header("Connection", "keep-alive")
-	// 监听客户端断开连接
-	conn := true
-	notify := ctx.Writer.CloseNotify()
-	type Response struct {
-		RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
-		Code      int32  `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
-		Msg       string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"`
-		Data      any    `json:"data"`
-	}
-	stationNo := ctx.Query("id")
-	if len(stationNo) == 0 {
-		resp.HandleError(ctx, 1201, "缺少必要参数", nil)
+	now := time.Now()
+	sevenDaysAgo := now.AddDate(0, 0, -7).Format("2006-01-02")
+	format := now.Format("2006-01-02")
+	alarmStatistics, err := h.illuminatingService.GetAlarmStatistics(sevenDaysAgo, format)
+	if err != nil {
+		h.logger.Error("获取告警信息统计失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1204, "获取告警信息统计失败", nil)
 		return
 	}
-	var response Response
-	for conn {
-		select {
-		case <-notify:
-			conn = false
-			fmt.Println("断开连接")
-			return
-		default:
-			// 模拟数据
-			data := make(map[string]any)
-			response.Code = 200
-			response.RequestId = strconv.Itoa(rand.Intn(1000))
-			response.Msg = "success"
-			data["设备名称"] = model.GetRandomItem(model.IlluminatingDeviceNames)
-			data["state"] = rand.Intn(2) // 1开  0关  2故障
-			response.Data = data
-			res, _ := json.Marshal(&response)
-			fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
-			ctx.Writer.Flush()
-			time.Sleep(10 * time.Second)
-		}
+	err = json.Unmarshal(alarmStatistics, &alarmstatistics)
+	if err != nil {
+		h.logger.Error("json反序列化失败")
+		resp.HandleError(ctx, 1205, "json序列化失败", nil)
+		return
+	}
+	alarm, err := h.illuminatingService.GetAlarm(1, 20)
+	if err != nil {
+		h.logger.Error("获取告警信息失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1203, "获取告警信息失败", nil)
+		return
 	}
+	err = json.Unmarshal(alarm, &alarmCount)
+	if err != nil {
+		h.logger.Error("json反序列化失败")
+		resp.HandleError(ctx, 1205, "json序列化失败", nil)
+		return
+	}
+	statistics, err := h.illuminatingService.GetStatistics()
+	if err != nil {
+		h.logger.Error("获取统计信息失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
+		return
+	}
+	err = json.Unmarshal(statistics, &statis)
+	if err != nil {
+		h.logger.Error("json反序列化失败")
+		resp.HandleError(ctx, 1202, "json反序列化失败", nil)
+		return
+	}
+	for i, _ := range alarmstatistics.TimeStatistics {
+		s := alarmstatistics.TimeStatistics[i].TimeDay.Format("2006-01-02 15:04:05")
+		alarmstatistics.TimeStatistics[i].Time = s
+	}
+	baseecic, err := h.illuminatingService.GetBaseecic(1, 0, -1, 0, 20, "", "")
+	if err != nil {
+		h.logger.Error("获取 basement_ecic 列表失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1202, "获取 basement_ecic 列表失败", nil)
+		return
+	}
+	m["IlluminatingDevice"] = baseecic.Devices       //设备列表
+	m["DeviceCount"] = statis.DeviceCount            //设备总数
+	m["GatewayCount"] = statis.GatewayCount          //网关数量
+	m["OffCount"] = statis.StrategyCount             //策略总数
+	m["AlarmCount"] = statis.AlarmCount              //报警数量
+	m["RunAnalyse"] = alarmstatistics.TimeStatistics //运行分析
+	m["EventList"] = alarmCount                      //报警事件
+	resp.HandleSuccess(ctx, m)
 }
 
+// 获取灯光状态
+//func (h *IlluminatingHandler) GetLightingstatus(ctx *gin.Context) {
+//	// 设置响应头
+//	ctx.Header("Content-Type", "text/event-stream")
+//	ctx.Header("Cache-Control", "no-cache")
+//	ctx.Header("Connection", "keep-alive")
+//	// 监听客户端断开连接
+//	conn := true
+//	notify := ctx.Writer.CloseNotify()
+//	type Response struct {
+//		RequestId string `protobuf:"bytes,1,opt,name=requestId,proto3" json:"requestId,omitempty"`
+//		Code      int32  `protobuf:"varint,2,opt,name=code,proto3" json:"code,omitempty"`
+//		Msg       string `protobuf:"bytes,3,opt,name=msg,proto3" json:"msg,omitempty"`
+//		Data      any    `json:"data"`
+//	}
+//	stationNo := ctx.Query("id")
+//	if len(stationNo) == 0 {
+//		resp.HandleError(ctx, 1201, "缺少必要参数", nil)
+//		return
+//	}
+//	var response Response
+//	for conn {
+//		select {
+//		case <-notify:
+//			conn = false
+//			fmt.Println("断开连接")
+//			return
+//		default:
+//			// 模拟数据
+//			data := make(map[string]any)
+//			response.Code = 200
+//			response.RequestId = strconv.Itoa(rand.Intn(1000))
+//			response.Msg = "success"
+//			data["设备名称"] = model.GetRandomItem(model.IlluminatingDeviceNames)
+//			data["state"] = rand.Intn(2) // 1开  0关  2故障
+//			response.Data = data
+//			res, _ := json.Marshal(&response)
+//			fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
+//			ctx.Writer.Flush()
+//			time.Sleep(10 * time.Second)
+//		}
+//	}
+//}
+
 // 修改灯光状态
 func (h *IlluminatingHandler) UpdataLightingStatus(ctx *gin.Context) {
 	id := ctx.PostForm("id")
@@ -144,6 +170,13 @@ func (h *IlluminatingHandler) GetStatistics(ctx *gin.Context) {
 		resp.HandleError(ctx, 1202, "json反序列化失败", nil)
 		return
 	}
+	alarm, err := h.illuminatingService.GetAlarm(1, 20)
+	if err != nil {
+		h.logger.Error("获取告警信息失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1203, "获取告警信息失败", nil)
+		return
+	}
+	fmt.Println("报警信息统计", string(alarm))
 	resp.HandleSuccess(ctx, statis)
 }
 func (h *IlluminatingHandler) GetBaseecic(ctx *gin.Context) {
@@ -151,18 +184,18 @@ func (h *IlluminatingHandler) GetBaseecic(ctx *gin.Context) {
 	currentPage, err := strconv.Atoi(currentPageStr)
 	device_type_idStr := ctx.PostForm("device_type_id")
 	device_type_id, err := strconv.Atoi(device_type_idStr)
-
 	devices_enabledStr := ctx.PostForm("devices_enabled")
 	devices_enabled, err := strconv.Atoi(devices_enabledStr)
 	pageSizeStr := ctx.PostForm("pageSize")
+	gatewayStr := ctx.PostForm("gateway_id")
+	gateway_id, err := strconv.Atoi(gatewayStr)
 	pageSize, err := strconv.Atoi(pageSizeStr)
 	if err != nil {
 		resp.HandleError(ctx, 1203, "参数错误", err)
 		return
 	}
 	query := ctx.PostForm("query")
-
-	baseecic, err := h.illuminatingService.GetBaseecic(currentPage, device_type_id, devices_enabled, pageSize, query)
+	baseecic, err := h.illuminatingService.GetBaseecic(currentPage, device_type_id, devices_enabled, gateway_id, pageSize, query, "")
 	if err != nil {
 		h.logger.Error("获取统计信息失败", zap.Any("err", err))
 		resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
@@ -171,3 +204,142 @@ func (h *IlluminatingHandler) GetBaseecic(ctx *gin.Context) {
 
 	resp.HandleSuccess(ctx, baseecic)
 }
+
+// GetgatewayFind 获取网关信息
+func (h *IlluminatingHandler) GetgatewayFind(ctx *gin.Context) {
+	gateway, err := h.illuminatingService.GetgatewayFind()
+	if err != nil {
+		h.logger.Error("获取统计信息失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1201, "获取统计信息失败", nil)
+		return
+	}
+	resp.HandleSuccess(ctx, gateway)
+	h.logger.Info("获取统计信息成功", zap.Any("control", gateway))
+
+}
+
+// DevicesControl 设备控制
+func (h *IlluminatingHandler) DevicesControl(ctx *gin.Context) {
+	agreement_json := ctx.PostForm("agreement_json")
+	request_id := ctx.PostForm("request_id")
+	udid := ctx.PostForm("udid")
+	source, err := strconv.Atoi(ctx.PostForm("source"))
+	if err != nil {
+		resp.HandleError(ctx, 1203, "参数错误", err)
+		return
+	}
+	control, err := h.illuminatingService.DevicesControl(agreement_json, request_id, udid, source)
+	if err != nil {
+		h.logger.Error("控制灯光设备失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1201, "控制灯光设备失败", nil)
+		return
+	}
+	resp.HandleSuccess(ctx, control)
+	h.logger.Info("控制灯光设备成功", zap.Any("control", control))
+}
+
+// GetLightingstatus  获取设备信息详情
+func (h *IlluminatingHandler) GetLightingstatus(ctx *gin.Context) {
+	// 设置响应头
+	ctx.Header("Content-Type", "text/event-stream")
+	ctx.Header("Cache-Control", "no-cache")
+	ctx.Header("Connection", "keep-alive")
+	// 监听客户端断开连接
+	conn := true
+	notify := ctx.Writer.CloseNotify()
+	var response model.Response
+	m := make(map[string]any)
+	// 使用 map[string]interface{} 来接收未知结构的 JSON 对象
+	var data map[string]any
+	devices_udid := ctx.Query("devices_udid")
+	for conn {
+		select {
+		case <-notify:
+			conn = false
+			fmt.Println("断开连接")
+			return
+		default:
+			baseecic, err := h.illuminatingService.GetBaseecic(1, 0, -1, 0, 1, "", devices_udid)
+			if err != nil {
+				h.logger.Error("获取设备信息详情失败")
+				response.Code = 1203
+				response.Msg = "获取设备信息详情失败"
+				response.Data = nil
+				res, _ := json.Marshal(&response)
+				fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
+				ctx.Writer.Flush()
+				conn = false
+				return
+			}
+			m["设备名称"] = baseecic.Devices[0].DevicesName
+			m["state"] = baseecic.Devices[0].GatewayStatus
+			err = json.Unmarshal([]byte(baseecic.Devices[0].DevicesJsonObject), &data)
+			if err != nil {
+				h.logger.Error("json反序列化失败")
+				response.Code = 1202
+				response.Msg = "json反序列化失败"
+				response.Data = nil
+				res, _ := json.Marshal(&response)
+				fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
+				conn = false
+			}
+
+			deviceTags := make(map[string]int)
+			// 遍历所有 key
+			for key, value := range data {
+				// 检查是否是 name 开头
+				if strings.HasPrefix(key, "name") {
+					// 尝试将 value 转为字符串
+					name, ok := value.(string)
+					if !ok {
+						continue
+					}
+					// 提取序号,比如 name1 -> 1
+					indexStr := strings.TrimPrefix(key, "name")
+					index, err := strconv.Atoi(indexStr)
+					if err != nil {
+						continue
+					}
+					// 构造对应的 tag 键名
+					tagKey := fmt.Sprintf("tag%d", index)
+					// 获取 tag 的值并转为 int
+					if tagValue, ok := data[tagKey].(float64); ok {
+						deviceTags[name] = int(tagValue)
+					}
+				}
+			}
+			for k, v := range deviceTags {
+				m[k] = v
+			}
+			response.Code = 200
+			response.Msg = "获取设备信息成功"
+			response.Data = m
+			res, _ := json.Marshal(&response)
+			fmt.Fprintf(ctx.Writer, "data: %s\n\n", string(res))
+			ctx.Writer.Flush()
+			time.Sleep(10 * time.Second)
+		}
+	}
+}
+
+// GetDeviceOrgid 获取照明定时策略
+func (h *IlluminatingHandler) GetDeviceOrgid(ctx *gin.Context) {
+	currentPage := ctx.Query("currentPage")
+	pageSize := ctx.Query("pageSize")
+	searchText := ctx.Query("searchText")
+	var response model.DeviceOrgid
+	control, err := h.illuminatingService.GetDeviceOrgid(currentPage, pageSize, searchText)
+	if err != nil {
+		h.logger.Error("获取照明定时策略失败", zap.Any("err", err))
+		resp.HandleError(ctx, 1201, "获取照明定时策略失败", nil)
+		return
+	}
+	err = json.Unmarshal(control, &response)
+	if err != nil {
+		h.logger.Error("json反序列化失败")
+		resp.HandleError(ctx, 1202, "json反序列化失败", nil)
+		return
+	}
+	resp.HandleSuccess(ctx, response)
+	h.logger.Info("获取照明定时策略成功", zap.Any("control", response))
+}

+ 131 - 0
internal/model/illuminating.go

@@ -129,6 +129,137 @@ type IlluminatingBaseecic struct {
 	Count int `json:"count"`
 }
 
+// DeviceStatistics 设备统计
+type DeviceStatistics struct {
+	CategoryStatistics []struct {
+		CategoryId     int    `json:"category_id"`
+		CategoryName   string `json:"category_name"`
+		Total          int    `json:"total"`
+		TypeStatistics []struct {
+			DevicesTypeId   int    `json:"devices_type_id"`
+			DevicesTypeName string `json:"devices_type_name"`
+			Total           int    `json:"total"`
+			OnLine          int    `json:"on_line"`
+			OffLine         int    `json:"off_line"`
+		} `json:"type_statistics"`
+		CategorySort int `json:"category_sort"`
+		OnLine       int `json:"on_line"`
+		OffLine      int `json:"off_line"`
+	} `json:"category_statistics"`
+}
+type AlarmStatistics struct {
+	MessageStatistics []struct {
+		AlarmType int `json:"alarm_type"`
+		Count     int `json:"count"`
+	} `json:"message_statistics"`
+	LevelStatistics []struct {
+		AlarmLevel int `json:"alarm_level"`
+		Count      int `json:"count"`
+	} `json:"level_statistics"`
+	StatusStatistics []struct {
+		AlarmStatus int `json:"alarm_Status"`
+		Count       int `json:"count"`
+	} `json:"status_statistics"`
+	TimeStatistics []struct {
+		TimeDay time.Time `json:"time_day"`
+		Time    string    `json:"time"`
+		Count   int       `json:"count"`
+	} `json:"time_statistics"`
+}
+type AlarmCount struct {
+	Alarm []struct {
+		AlarmMessageId    int         `json:"alarm_message_id"`
+		OrgId             int         `json:"org_id"`
+		DeviceId          int         `json:"device_id"`
+		GatewayId         int         `json:"gateway_id"`
+		AlarmTitle        string      `json:"alarm_title"`
+		AlarmRemarks      string      `json:"alarm_remarks"`
+		AlarmCreateTime   string      `json:"alarm_create_time"`
+		AlarmRecentlyTime string      `json:"alarm_recently_time"`
+		AlarmType         int         `json:"alarm_type"`
+		AlarmLevel        int         `json:"alarm_level"`
+		AlarmRecoveryTime string      `json:"alarm_recovery_time"`
+		AlarmIsRead       int         `json:"alarm_is_read"`
+		DevicesName       string      `json:"devices_name"`
+		OrdersStatus      int         `json:"orders_status"`
+		AlarmDurationTime string      `json:"alarm_duration_time"`
+		GatewayName       string      `json:"gateway_name"`
+		FullRegionName    string      `json:"full_region_name"`
+		AlarmStatus       int         `json:"alarm_status"`
+		WorkOrder         interface{} `json:"work_order"`
+		OrdersId          int         `json:"orders_id"`
+	} `json:"alarm"`
+	Count int `json:"count"`
+}
+type GatewayFind struct {
+	GatewayAndBacnet []struct {
+		GatewayId              int           `json:"gateway_id"`
+		GatewayName            string        `json:"gateway_name"`
+		GatewayCode            string        `json:"gateway_code"`
+		GatewayDescription     string        `json:"gateway_description"`
+		GatewayOrgId           int           `json:"gateway_org_id"`
+		GatewayStatus          int           `json:"gateway_status"`
+		GatewayLastRequestTime time.Time     `json:"gateway_last_request_time"`
+		CreateTime             time.Time     `json:"create_time"`
+		CreateAuthor           int           `json:"create_author"`
+		UserName               string        `json:"user_name"`
+		GatewayType            int           `json:"gateway_type"`
+		EncryAlg               int           `json:"encry_alg"`
+		EncryKey               string        `json:"encry_key"`
+		BacnetId               int           `json:"bacnet_id"`
+		Interface              string        `json:"interface"`
+		Port                   int           `json:"port"`
+		OrgId                  int           `json:"org_id"`
+		UpdateUserId           int           `json:"update_user_id"`
+		UpdateTime             string        `json:"update_time"`
+		HisSaveCycle           int           `json:"his_save_cycle"`
+		LimitHisSaveCycle      int           `json:"limit_his_save_cycle"`
+		DdcIpInstance          []interface{} `json:"ddc_ip_instance"`
+		CollectCycle           int           `json:"collect_cycle"`
+		RemoteIp               string        `json:"remote_ip"`
+		MqttUsername           string        `json:"mqtt_username"`
+		MqttPassword           string        `json:"mqtt_password"`
+		GatewayModbusTcp       interface{}   `json:"gateway_modbus_tcp"`
+		GatewayIp              string        `json:"gateway_ip"`
+	} `json:"gatewayAndBacnet"`
+	Count int `json:"count"`
+}
+
+// 设备控制
+type DevicesControl struct {
+	Status          int    `json:"status"`
+	Msg             string `json:"msg"`
+	Mac             string `json:"mac"`
+	Udid            string `json:"udid"`
+	Device          string `json:"device"`
+	Region          string `json:"region"`
+	Enabled         int    `json:"enabled"`
+	LastRequestTime string `json:"last_request_time"`
+}
+
+// DeviceOrgid 定时策略
+type DeviceOrgid struct {
+	Count  int `json:"count"`
+	Timing []struct {
+		TimingId        int           `json:"timing_id"`
+		TimingName      string        `json:"timing_name"`
+		TimingWeek      int           `json:"timing_week"`
+		TimingStartTime string        `json:"timing_start_time"`
+		TimingState     int           `json:"timing_state"`
+		TimingAgreement string        `json:"timing_agreement"`
+		OrgId           int           `json:"org_id"`
+		DeviceIds       []interface{} `json:"device_ids"`
+		Devices         []interface{} `json:"devices"`
+		Weeks           []int         `json:"weeks"`
+		Agreement       string        `json:"agreement"`
+		RegionIds       string        `json:"region_ids"`
+		CategoryId      int           `json:"category_id"`
+		DeviceTypeId    int           `json:"device_type_id"`
+		GroupId         int           `json:"group_id"`
+		CommitAgreement string        `json:"commit_agreement"`
+	} `json:"Timing"`
+}
+
 func (m *Illuminating) TableName() string {
 	return "illuminating"
 }

+ 3 - 0
internal/server/http.go

@@ -108,6 +108,9 @@ func NewServerHTTP(
 		ill.POST("/updateLightingStatus", illuminating.UpdataLightingStatus)
 		ill.GET("/getStatistics", illuminating.GetStatistics)
 		ill.POST("/getBaseecic", illuminating.GetBaseecic)
+		ill.GET("/gatewayFind", illuminating.GetgatewayFind)
+		ill.POST("/devicesControl", illuminating.DevicesControl)
+		ill.GET("/getDeviceOrgid", illuminating.GetDeviceOrgid)
 	}
 	//能源系统
 	ener := r.Group("/energy")

+ 117 - 73
internal/service/illuminating.go

@@ -13,13 +13,19 @@ import (
 	"net/http"
 	"net/url"
 	"reflect"
+	"strings"
 )
 
 type IlluminatingService interface {
 	GetIlluminating(ctx context.Context, id int64) (*model.Illuminating, error)
 	Illuminating(method, url string, body any) ([]byte, error)
 	GetStatistics() ([]byte, error)
-	GetBaseecic(currentPage, device_type_id, devices_enabled, pageSize int, query string) (model.IlluminatingBaseecic, error)
+	GetBaseecic(currentPage, device_type_id, devices_enabled, gateway_id, pageSize int, query, devices_udid string) (model.IlluminatingBaseecic, error)
+	GetAlarm(currentPage, pageSize int) ([]byte, error)
+	GetAlarmStatistics(start_time, end_time string) ([]byte, error)
+	GetgatewayFind() (model.GatewayFind, error)
+	DevicesControl(agreement_json, request_id, udid string, source int) (model.DevicesControl, error)
+	GetDeviceOrgid(currentPage, pageSize, searchText string) ([]byte, error)
 }
 
 func NewIlluminatingService(
@@ -50,74 +56,6 @@ func (s *illuminatingService) GetIlluminating(ctx context.Context, id int64) (*m
 	return s.illuminatingRepository.GetIlluminating(ctx, id)
 }
 
-//	func (s *illuminatingService) Illuminating(methond, url string, body any) ([]byte, error) {
-//		urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.login")
-//		authorization := s.conf.GetString("illuminating.authorization")
-//		clientId := s.conf.GetInt("illuminating.clientId")
-//		mobile := s.conf.GetString("illuminating.mobile")
-//		password := s.conf.GetString("illuminating.password")
-//		requst := model.LoginRequst{
-//			Authorization: authorization,
-//			ClientId:      clientId,
-//			Mobile:        mobile,
-//			Password:      password,
-//		}
-//		var login model.Login
-//		var reqBody io.Reader
-//		bodyBytes, err := json.Marshal(requst)
-//		if err != nil {
-//			return nil, err
-//		}
-//		reqBody = bytes.NewBuffer(bodyBytes)
-//		request, err := http.NewRequest("POST", urls, reqBody)
-//		if err != nil {
-//			return nil, err
-//		}
-//		client := &http.Client{}
-//		response, err := client.Do(request)
-//		defer response.Body.Close()
-//		if err != nil {
-//			return nil, err
-//		}
-//		responseBody, err := io.ReadAll(response.Body)
-//		if err != nil {
-//			return nil, err
-//		}
-//		err = json.Unmarshal(responseBody, &login)
-//		if err != nil {
-//			return nil, err
-//		}
-//		if body != nil {
-//			bodyBytes, err := json.Marshal(requst)
-//			if err != nil {
-//				return nil, err
-//			}
-//			reqBody = bytes.NewBuffer(bodyBytes)
-//		}
-//		var Bodys io.Reader
-//		if body != nil {
-//			Bytes, err := json.Marshal(body)
-//			if err != nil {
-//				return nil, err
-//			}
-//			Bodys = bytes.NewBuffer(Bytes)
-//		}
-//		newRequest, err := http.NewRequest(methond, url, Bodys)
-//		if err != nil {
-//			return nil, err
-//		}
-//		newRequest.Header.Set("Authorization", login.AccessToken)
-//		newResponse, err := client.Do(newRequest)
-//		defer newResponse.Body.Close()
-//		if err != nil {
-//			return nil, err
-//		}
-//		respBody, err := io.ReadAll(newResponse.Body)
-//		if err != nil {
-//			return nil, err
-//		}
-//		return respBody, nil
-//	}
 func (s *illuminatingService) Illuminating(method, url string, body any) ([]byte, error) {
 	login, err := s.login()
 	if err != nil {
@@ -281,17 +219,69 @@ func (s *illuminatingService) GetStatistics() ([]byte, error) {
 	return illuminating, nil
 }
 
+// GetDeviceStatistics 获取设备统计信息
+func (s *illuminatingService) GetDeviceStatistics() ([]byte, error) {
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.deviceStatistics")
+	illuminating, err := s.Illuminating("GET", urls, nil)
+	if err != nil {
+		return nil, errors.New("获取设备统计信息失败")
+	}
+	return illuminating, nil
+}
+
+// GetAlarm 获取报警信息
+func (s *illuminatingService) GetAlarm(currentPage, pageSize int) ([]byte, error) {
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.alarm")
+	m := make(map[string]any)
+	m["currentPage"] = currentPage
+	m["pageSize"] = pageSize
+	illuminating, err := s.Illuminating("POST", urls, m)
+	if err != nil {
+		return nil, errors.New("获取统计信息失败")
+	}
+	return illuminating, nil
+}
+
+// GetAlarmStatistics 获取报警统计信息
+func (s *illuminatingService) GetAlarmStatistics(start_time, end_time string) ([]byte, error) {
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.alarmStatistics")
+	urls += "?start_time=" + start_time + "&end_time=" + end_time
+	illuminating, err := s.Illuminating("GET", urls, nil)
+	if err != nil {
+		return nil, errors.New("获取统计信息失败")
+	}
+	return illuminating, nil
+}
+
 // GetBaseecic 获取照明监控列表
-func (s *illuminatingService) GetBaseecic(currentPage, device_type_id, devices_enabled, pageSize int, query string) (model.IlluminatingBaseecic, error) {
+func (s *illuminatingService) GetBaseecic(currentPage, device_type_id, devices_enabled, gateway_id, pageSize int, query, devices_udid string) (model.IlluminatingBaseecic, error) {
 	var baseecic model.IlluminatingBaseecic
 	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.baseecic")
 	m := make(map[string]any)
 	m["currentPage"] = currentPage
-	m["device_type_id"] = device_type_id
-	m["devices_enabled"] = devices_enabled
 	m["pageSize"] = pageSize
-	m["query"] = query
 
+	if currentPage == 0 {
+		m["currentPage"] = 1
+	}
+	if pageSize == 0 {
+		m["pageSize"] = 20
+	}
+	if device_type_id != 0 {
+		m["device_type_id"] = device_type_id
+	}
+	if devices_enabled != 0 {
+		m["devices_enabled"] = devices_enabled
+	}
+	if gateway_id != 0 {
+		m["gateway_id"] = gateway_id
+	}
+	if devices_udid != "" {
+		m["devices_udid"] = devices_udid
+	}
+	if query != "" {
+		m["query"] = query
+	}
 	illuminating, err := s.Illuminating("POST", urls, m)
 	if err != nil {
 		return model.IlluminatingBaseecic{}, errors.New("获取统计信息失败")
@@ -302,3 +292,57 @@ func (s *illuminatingService) GetBaseecic(currentPage, device_type_id, devices_e
 	}
 	return baseecic, nil
 }
+
+// GetgatewayFind 获取网关列表
+func (s *illuminatingService) GetgatewayFind() (model.GatewayFind, error) {
+	var gateway model.GatewayFind
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.gatewayFind")
+	m := make(map[string]any)
+	m["gateway_type"] = -1
+
+	illuminating, err := s.Illuminating("POST", urls, m)
+	if err != nil {
+		return model.GatewayFind{}, errors.New("获取统计信息失败")
+	}
+	err = json.Unmarshal(illuminating, &gateway)
+	if err != nil {
+		return model.GatewayFind{}, errors.New("json反序列化失败")
+	}
+	return gateway, nil
+}
+
+// DevicesControl 设备控制
+func (s *illuminatingService) DevicesControl(agreement_json, request_id, udid string, source int) (model.DevicesControl, error) {
+	var devicesControl model.DevicesControl
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.devicesControl")
+	m := make(map[string]any)
+	m["agreement_json"] = agreement_json
+	if request_id != "" {
+		m["request_id"] = request_id
+	}
+	m["source"] = source
+	m["udid"] = udid
+
+	illuminating, err := s.Illuminating("POST", urls, m)
+	if err != nil {
+		return model.DevicesControl{}, errors.New("控制灯光设备失败")
+	}
+	err = json.Unmarshal(illuminating, &devicesControl)
+	if err != nil {
+		return model.DevicesControl{}, errors.New("json反序列化失败")
+	}
+
+	return devicesControl, nil
+}
+
+// GetDeviceOrgid 获取定时策略
+func (s *illuminatingService) GetDeviceOrgid(currentPage, pageSize, searchText string) ([]byte, error) {
+	searchText = strings.ReplaceAll(searchText, " ", "")
+	urls := s.conf.GetString("illuminating.baseUrl") + s.conf.GetString("illuminating.api.deviceOrgid")
+	urls += "?currentPage=" + currentPage + "&pageSize=" + pageSize + "&searchText=" + searchText
+	illuminating, err := s.Illuminating("GET", urls, nil)
+	if err != nil {
+		return nil, errors.New("获取统计信息失败")
+	}
+	return illuminating, nil
+}