Browse Source

灯控策略 接口

terry 3 years ago
parent
commit
f2b43e7580

+ 2 - 8
app/device/controller/IntelligentLightingStrategy.go

@@ -61,11 +61,7 @@ func (c *intelligentLightingCtl) List(ctx *gin.Context) {
 	if size <= 0 || size > 100 {
 		size = 10
 	}
-	if groupId != "" {
-
-	}
-
-	strategies, err := service.IntelligentLightingService.List(searchValue, current, size)
+	strategies, err := service.IntelligentLightingService.List(searchValue, groupId, current, size)
 	if err != nil {
 		ctx.JSON(http.StatusOK, err)
 		return
@@ -76,9 +72,7 @@ func (c *intelligentLightingCtl) List(ctx *gin.Context) {
 		Size:    size,
 		Total:   len(strategies),
 		Pages:   int(pages),
-	}
-	for _, strategy := range strategies {
-		rsp.Records = append(rsp.Records, strategy)
+		Records: strategies,
 	}
 	ctx.JSON(http.StatusOK, util.SuccessResponse(util.Succeeded, rsp))
 }

+ 6 - 6
app/device/controller/LightStrategy.go

@@ -22,12 +22,12 @@ func (c *lightStrategyCtl) Detail(ctx *gin.Context) {
 		return
 	}
 
-	device, err := service.LightStrategyService.Get(id)
+	lightStrategy, err := service.LightStrategyService.Get(id)
 	if err != nil {
 		ctx.JSON(http.StatusOK, err)
 		return
 	}
-	ctx.JSON(http.StatusOK, util.SuccessResponse(util.Succeeded, device))
+	ctx.JSON(http.StatusOK, util.SuccessResponse(util.Succeeded, lightStrategy))
 }
 
 func (c *lightStrategyCtl) List(ctx *gin.Context) {
@@ -41,18 +41,18 @@ func (c *lightStrategyCtl) List(ctx *gin.Context) {
 		size = 10
 	}
 
-	devices, err := service.LightStrategyService.List(searchValue, current, size)
+	lightStrategies, err := service.LightStrategyService.List(searchValue, current, size)
 	if err != nil {
 		ctx.JSON(http.StatusOK, err)
 		return
 	}
-	pages := math.Ceil(float64(len(devices)) / float64(size))
+	pages := math.Ceil(float64(len(lightStrategies)) / float64(size))
 	rsp := model.RspLightStrategyList{
 		Current: current,
 		Size:    size,
-		Total:   len(devices),
+		Total:   len(lightStrategies),
 		Pages:   int(pages),
-		Records: devices,
+		Records: lightStrategies,
 	}
 
 	ctx.JSON(http.StatusOK, util.SuccessResponse(util.Succeeded, rsp))

+ 12 - 8
app/device/dao/LightStrategyDao.go

@@ -61,23 +61,27 @@ func (c *LightStrategy) Create() error {
 }
 
 func (c *LightStrategy) Update() error {
-	return Db.Model(&c).Where(" id = ? ", c.ID).Update(&c).Error
+	return Db.Model(&c).Where(" id = ? and is_deleted = 0", c.ID).Update(&c).Error
 }
 
 func (c *LightStrategy) GetStrategy() error {
-	err := Db.Model(&c).Where(" id = ? ", c.ID).First(&c).Error
+	err := Db.Model(&c).Where(" id = ? and is_deleted = 0", c.ID).First(&c).Error
 	return err
 }
 
 func (c LightStrategy) GetStrategies(offset, limit int) ([]LightStrategy, error) {
-	var Strategys []LightStrategy
-	err := Db.Model(&c).Where(" name like ? and is_deleted = 0", "%"+c.LightName+"%").Offset(offset).Limit(limit).Find(&Strategys).Error
-	return Strategys, err
+	var Strategies []LightStrategy
+	db := Db.Model(&c).Where("is_deleted = 0")
+	if c.LightSn != "" {
+		db = db.Where(" light_name like ? or light_sn like ?", "%"+c.LightSn+"%", "%"+c.LightSn+"%")
+	}
+	err := Db.Model(&c).Offset(offset).Limit(limit).Find(&Strategies).Error
+	return Strategies, err
 
 }
 
 func (c LightStrategy) GetAllStrategies() ([]*LightStrategy, error) {
-	var Strategys []*LightStrategy
-	err := Db.Model(&c).Where(" tenant_id = ? and is_deleted = ? ", c.TenantID, c.IsDeleted).Scan(&Strategys).Error
-	return Strategys, err
+	var Strategies []*LightStrategy
+	err := Db.Model(&c).Where(" tenant_id = ? and is_deleted = ? ", c.TenantID, c.IsDeleted).Scan(&Strategies).Error
+	return Strategies, err
 }

+ 42 - 2
app/device/dao/intelligentLightingDao.go

@@ -4,6 +4,13 @@ import (
 	"time"
 )
 
+type IntelligentLightRelation struct {
+	IntelligentLight
+	LightStrategy
+	LightControl
+	LampPoleGroup
+}
+
 type IntelligentLight struct {
 	ID           int       `gorm:"primary key" json:"id"`               //编号
 	LightID      int       `gorm:"type:int" json:"lightID"`             //照明策略id
@@ -29,7 +36,40 @@ func (c *IntelligentLight) BatchGet(ids []int) ([]IntelligentLight, error) {
 
 func (c *IntelligentLight) GetByRidAndType() ([]IntelligentLight, error) {
 	var intelligentLights []IntelligentLight
-	err := Db.Model(&c).Where("rid = ? and relation_type = ? and is_deleted = 0", c.Rid,
-		c.RelationType).Find(&intelligentLights).Error
+	db := Db.Model(&c).Where("relation_type = ? and is_deleted = 0 and tenant_id = ?",
+		c.RelationType, c.TenantID)
+	if c.Rid > 0 {
+		db = db.Where("rid = ?", c.Rid)
+	}
+	err := db.Find(&intelligentLights).Error
 	return intelligentLights, err
 }
+
+func (c *IntelligentLight) GetByType() ([]IntelligentLightRelation, error) {
+	var intelligentLights []IntelligentLightRelation
+	sql := `SELECT lig.*,
+       gro.id,   
+       gro.pole_group_name,
+       b.light_name,
+       b.light_sn,
+       b.start_time,
+       b.end_time,
+       b.is_all_year,
+       b.is_automatic_renewal
+FROM t_strategy_intelligent_light lig
+         LEFT JOIN t_dev_lamp_pole_group gro ON lig.rid = gro.id
+         LEFT JOIN t_strategy_light b ON b.id = lig.light_id
+WHERE lig.is_deleted = 0
+  AND lig.relation_type = 2
+  AND gro.is_deleted = 0
+  AND lig.tenant_id = ?`
+	if c.Rid > 0 {
+		sql += ` lig.rid = ? ORDER BY lig.create_time desc`
+		err := Db.Raw(sql, c.TenantID, c.Rid).Scan(&intelligentLights).Error
+		return intelligentLights, err
+	} else {
+		sql += ` ORDER BY lig.create_time desc`
+		err := Db.Raw(sql, c.TenantID).Scan(&intelligentLights).Error
+		return intelligentLights, err
+	}
+}

+ 9 - 3
app/device/dao/timeConditionDao.go

@@ -22,17 +22,23 @@ func (TimeCondition) TableName() string {
 }
 
 func (c *TimeCondition) Get() error {
-	return Db.Model(&c).Where("id = ?", c.ID).Find(&c).Error
+	return Db.Model(&c).Where("id = ? and is_deleted = 0", c.ID).Find(&c).Error
 }
 
 func (c *TimeCondition) BatchGet(ids []int) ([]TimeCondition, error) {
 	var conditions []TimeCondition
-	err := Db.Model(&c).Where("id in ?", ids).Find(&conditions).Error
+	err := Db.Model(&c).Where("id in ? and is_deleted = 0", ids).Find(&conditions).Error
 	return conditions, err
 }
 
 func (c *TimeCondition) GetByLightId() ([]TimeCondition, error) {
 	var conditions []TimeCondition
-	err := Db.Model(&c).Where("light_id = ?", c.LightId).Find(&conditions).Error
+	err := Db.Debug().Model(&c).Where("light_id = ? and is_deleted = 0", c.LightId).Find(&conditions).Error
+	return conditions, err
+}
+
+func (c *TimeCondition) GetAll() ([]TimeCondition, error) {
+	var conditions []TimeCondition
+	err := Db.Model(&c).Find(&conditions).Error
 	return conditions, err
 }

+ 13 - 19
app/device/model/LightStrategy.go

@@ -5,28 +5,22 @@ import "iot_manager_service/app/device/dao"
 //灯控策略
 type LightStrategyDetail struct {
 	dao.LightStrategy
-	LightType                string                 `json:"lightType"`               //策略类型
-	LightConditionList       []dao.LightCondition   `json:"lightConditionList"`      //光照条件
-	LightConditionDetailList []LightConditionDetail `json:"lightConditionVOList"`    //详情-光照条件
-	TimeConditionDetailList  []TimeConditionDetail  `json:"timeConditionVOList"`     //详情-时间条件
-	LampPoleDetailList       []LampPoleDetail       `json:"lampPoleDetailList"`      //详情-灯杆名称
-	LampPoleGroupDetailList  []LampPoleGroupDetail  `json:"lampPoleGroupDetailList"` //详情-分组名称
-	TimeConditionList        []dao.TimeCondition    `json:"timeConditionList"`       //时间条件
-	CombinationStr           string                 `json:"combinationStr"`          //(智慧照明关联时)组合展示
+	LightType                string                `json:"lightType"`               //策略类型
+	LightConditionList       []dao.LightCondition  `json:"lightConditionList"`      //光照条件
+	LightConditionDetailList []dao.LightCondition  `json:"lightConditionVOList"`    //详情-光照条件
+	TimeConditionDetailList  []dao.TimeCondition   `json:"timeConditionVOList"`     //详情-时间条件
+	LampPoleDetailList       []LampPoleDetail      `json:"lampPoleDetailList"`      //详情-灯杆名称
+	LampPoleGroupDetailList  []LampPoleGroupDetail `json:"lampPoleGroupDetailList"` //详情-分组名称
+	TimeConditionList        []dao.TimeCondition   `json:"timeConditionList"`       //时间条件
+	CombinationStr           string                `json:"combinationStr"`          //(智慧照明关联时)组合展示
 }
 
-type LightConditionDetail struct {
-	dao.LightCondition
-}
-type TimeConditionDetail struct {
-	dao.TimeCondition
-}
 type RspLightStrategyList struct {
-	Records []dao.LightStrategy `json:"records"` //记录列表
-	Current int                 `json:"current"` //当前分页
-	Size    int                 `json:"size"`    //每页数量
-	Total   int                 `json:"total"`   //总数
-	Pages   int                 `json:"pages"`   //总页数
+	Records []LightStrategyDetail `json:"records"` //记录列表
+	Current int                   `json:"current"` //当前分页
+	Size    int                   `json:"size"`    //每页数量
+	Total   int                   `json:"total"`   //总数
+	Pages   int                   `json:"pages"`   //总页数
 }
 
 type ReqLightStrategyRemove struct {

+ 38 - 6
app/device/model/intelligentLighting.go

@@ -1,6 +1,9 @@
 package model
 
-import "iot_manager_service/app/device/dao"
+import (
+	"iot_manager_service/app/device/dao"
+	"time"
+)
 
 const (
 	RelationIdInvalid         = "该记录未关联策略无法查看,请关联策略!"
@@ -36,10 +39,39 @@ type TimeConditionSimple struct {
 	Times     string `json:"times"`
 }
 
+type RspIntelligentLightListDetail struct {
+	dao.IntelligentLight
+	LightControlState  string                          `json:"lightControlState"`  //灯控状态
+	RunState           string                          `json:"runState"`           //运行状态
+	PublicName         string                          `json:"publicName"`         //设备名称(灯杆与灯杆分组公用)
+	PublicId           string                          `json:"publicId"`           //设备Id(灯杆与灯杆分组公用ID)
+	GroupId            string                          `json:"groupId"`            //灯杆分组ID
+	LampPoleName       string                          `json:"lampPoleName"`       //灯杆名称
+	LampPoleSn         string                          `json:"lampPoleSn"`         //灯杆编码
+	Location           string                          `json:"location"`           //安装位置
+	InstallTime        string                          `json:"installTime"`        //安装时间
+	LampLat            string                          `json:"lampLat"`            //经度
+	LampLng            string                          `json:"lampLng"`            //纬度
+	LightName          string                          `json:"lightName"`          //策略名称
+	LightSn            string                          `json:"lightSn"`            //策略编码
+	DeviceSn           string                          `json:"deviceSn"`           //灯控设备编码
+	StartTime          time.Time                       `json:"startTime"`          //生效日期-策略开始时间
+	EndTime            time.Time                       `json:"endTime"`            //生效日期-策略结束时间
+	ControlType        int                             `json:"controlType"`        //灯控类型
+	IsAllYear          int                             `json:"isAllYear"`          //全年设置2=是,1=否
+	IsAutomaticRenewal int                             `json:"isAutomaticRenewal"` //自动续期设置 2=是,1=否
+	EffectiveDate      int                             `json:"effectiveDate"`      //生效日期
+	Children           []RspIntelligentLightListDetail `json:"children"`           //灯控子集
+	CombinationStrList []string                        `json:"combinationStrList"` //照明策略条件组合展示集合
+	CombinationStr     string                          `json:"combinationStr"`     //详情照明策略组合展示
+	IsShowOpts         string                          `json:"isShowOpts"`         //页面是否显示操作按钮
+	HandSwitch         int                             `json:"handSwitch"`         //手动开关:1=开启,2,关闭
+}
+
 type RspIntelligentLightList struct {
-	Records []dao.IntelligentLight `json:"records"` //记录列表
-	Current int                    `json:"current"` //当前分页
-	Size    int                    `json:"size"`    //每页数量
-	Pages   int                    `json:"pages"`   //总页数
-	Total   int                    `json:"total"`   //总数
+	Records []RspIntelligentLightListDetail `json:"records"` //记录列表
+	Current int                             `json:"current"` //当前分页
+	Size    int                             `json:"size"`    //每页数量
+	Pages   int                             `json:"pages"`   //总页数
+	Total   int                             `json:"total"`
 }

+ 31 - 19
app/device/service/LightStrategyService.go

@@ -28,27 +28,12 @@ func (s *lightStrategyService) Get(id int) (*model.LightStrategyDetail, *util.Er
 		LightStrategy: *strategy,
 	}
 
-	lightStrategy.LightConditionList = LightConditionService.BatchGet([]int{id})
-	lightStrategy.TimeConditionList = TimeConditionService.BatchGet([]int{id})
+	lightStrategy.TimeConditionList = TimeConditionService.GetByLightId(id)
 
 	if len(lightStrategy.TimeConditionList) > 0 {
 		lightStrategy.LightType = "时间"
 	}
 	lightStrategy.LightType = lightStrategy.LightType + "策略"
-
-	lightingList := IntelligentLightingService.BatchGet([]int{id})
-	for _, lighting := range lightingList {
-		// 关联类型1=灯杆,2=灯杆分组
-		if lighting.RelationType == 2 {
-			lampPole, _ := LampPoleService.Get(lighting.Rid)
-			lightStrategy.LampPoleDetailList = append(lightStrategy.LampPoleDetailList,
-				model.LampPoleDetail{LampPole: *lampPole})
-		} else {
-			lampPoleGroup, _ := LampPoleGroupService.Get(lighting.Rid)
-			lightStrategy.LampPoleGroupDetailList = append(lightStrategy.LampPoleGroupDetailList,
-				model.LampPoleGroupDetail{LampPoleGroup: *lampPoleGroup})
-		}
-	}
 	return lightStrategy, nil
 
 }
@@ -194,11 +179,11 @@ func (s *lightStrategyService) CreateOrUpdate(req *model.LightStrategyDetail) *u
 	//todo operation record
 	return util.SuccessResponse(util.Succeeded, nil)
 }
-func (s *lightStrategyService) List(searchValue string, current, size int) ([]dao.LightStrategy, *util.Errors) {
+
+func (s *lightStrategyService) List(searchValue string, current, size int) ([]model.LightStrategyDetail, *util.Errors) {
 	strategy := dao.LightStrategy{}
 	if searchValue != "" {
 		strategy.LightSn = searchValue
-		strategy.LightName = searchValue
 	}
 
 	offset := (current - 1) * size
@@ -207,8 +192,35 @@ func (s *lightStrategyService) List(searchValue string, current, size int) ([]da
 	if err != nil {
 		return nil, util.FailResponse(err.Error(), nil)
 	}
-	return strategies, nil
+
+	timeConditions, _ := TimeConditionService.GetAll()
+	timeConditionsMap := make(map[int]dao.TimeCondition)
+	for _, timeCondition := range timeConditions {
+		timeConditionsMap[timeCondition.LightId] = timeCondition
+	}
+
+	year := time.Now().Year()
+	var details []model.LightStrategyDetail
+	for _, strategy := range strategies {
+		if strategy.IsAllYear == model.IsYear {
+			strategy.StartTime = fmt.Sprintf("%d-01-01", year)
+			strategy.StartTime = fmt.Sprintf("%d-12-31", year)
+		}
+		detail := model.LightStrategyDetail{LightStrategy: strategy}
+		if timeCondition, isExist := timeConditionsMap[strategy.ID]; isExist {
+			//开启日出日落
+			if timeCondition.Sunshine == 2 {
+				timeCondition.StartTime = "日落"
+				timeCondition.EndTime = "日出"
+			}
+			detail.CombinationStr = fmt.Sprintf("开灯时段:%s ~ %s , 灯光亮度:%d%%", timeCondition.StartTime,
+				timeCondition.EndTime, timeCondition.Luminance)
+		}
+		details = append(details, detail)
+	}
+	return details, nil
 }
+
 func (s *lightStrategyService) Remove(id int) *util.Errors {
 	// 创建查询实例
 	strategy := &dao.LightStrategy{

+ 37 - 6
app/device/service/intelligentLightingService.go

@@ -1,6 +1,7 @@
 package service
 
 import (
+	"encoding/json"
 	"fmt"
 	"iot_manager_service/app/device/dao"
 	"iot_manager_service/app/device/model"
@@ -41,7 +42,11 @@ func (s *intelligentLightingService) GetLightRelation(rId, relationType int) mod
 	detail := model.IntelligentLightSimple{}
 
 	// 获取照明策略关联
-	intelligentLight := dao.IntelligentLight{Rid: rId, RelationType: relationType}
+	intelligentLight := dao.IntelligentLight{
+		Rid:          rId,
+		RelationType: relationType,
+		TenantID:     "000000", //todo 使用登录态
+	}
 	relations, _ := intelligentLight.GetByRidAndType()
 	if len(relations) == 0 {
 		return detail
@@ -66,7 +71,7 @@ func (s *intelligentLightingService) GetLightRelation(rId, relationType int) mod
 	}
 
 	// 获取策略时间(每日的时间策略)
-	timeConditions, _ := TimeConditionService.GetByLightId(lightId)
+	timeConditions := TimeConditionService.GetByLightId(lightId)
 	for _, timeCondition := range timeConditions {
 		if timeCondition.StartTime == "" && timeCondition.EndTime == "" {
 			timeCondition.StartTime = "日落"
@@ -84,14 +89,40 @@ func (s *intelligentLightingService) GetLightRelation(rId, relationType int) mod
 func (s *intelligentLightingService) BatchGet(ids []int) []dao.IntelligentLight {
 	// 创建查询实例
 	intelligent := &dao.IntelligentLight{}
-	conditions, err := intelligent.BatchGet(ids)
+	intelligentLights, err := intelligent.BatchGet(ids)
 	if err != nil {
 		return nil
 	}
-	return conditions
+	return intelligentLights
 }
 
-func (s *intelligentLightingService) List(searchValue string, current, size int) ([]dao.IntelligentLight,
+func (s *intelligentLightingService) List(searchValue, groupId string, current, size int) ([]model.RspIntelligentLightListDetail,
 	*util.Errors) {
-	return nil, nil
+	var result []model.RspIntelligentLightListDetail
+	//获取策略关联信息
+	intelligent := &dao.IntelligentLight{
+		RelationType: model.RelationTypeLampPoleGroup,
+		TenantID:     "000000", //todo 使用登录态
+	}
+	gId := -1
+	if groupId != "" {
+		gId, _ = strconv.Atoi(groupId)
+		intelligent.Rid = gId
+	}
+	list, err := intelligent.GetByType()
+	fmt.Printf("list = %+v \n", list)
+
+	if err != nil {
+		return nil, util.FailResponse(err.Error(), nil)
+	}
+	data, err := json.Marshal(list)
+	if err != nil {
+		return nil, util.FailResponse(err.Error(), nil)
+	}
+	fmt.Println("data = ", string(data))
+	err = json.Unmarshal(data, &result)
+	if err != nil {
+		return nil, util.FailResponse(err.Error(), nil)
+	}
+	return result, nil
 }

+ 13 - 11
app/device/service/timeConditionService.go

@@ -1,6 +1,7 @@
 package service
 
 import (
+	"fmt"
 	"iot_manager_service/app/device/dao"
 	"iot_manager_service/util"
 )
@@ -22,26 +23,27 @@ func (s *timeConditionService) Get(id int) (*dao.TimeCondition, *util.Errors) {
 	return condition, nil
 }
 
-func (s *timeConditionService) BatchGet(ids []int) []dao.TimeCondition {
-	// 创建查询实例
-	condition := &dao.TimeCondition{}
-	conditions, err := condition.BatchGet(ids)
-	if err != nil {
-		return nil
-	}
-	return conditions
-}
-
 func (s *timeConditionService) Save([]dao.TimeCondition) error {
 	return nil
 }
 
-func (s *timeConditionService) GetByLightId(id int) ([]dao.TimeCondition, *util.Errors) {
+func (s *timeConditionService) GetByLightId(id int) []dao.TimeCondition {
 	// 创建查询实例
 	condition := &dao.TimeCondition{
 		LightId: id,
 	}
 	conditions, err := condition.GetByLightId()
+	if err != nil {
+		fmt.Printf("GetByLightIds err = %v  \n", err)
+		return nil
+	}
+	return conditions
+}
+
+func (s *timeConditionService) GetAll() ([]dao.TimeCondition, *util.Errors) {
+	// 创建查询实例
+	condition := &dao.TimeCondition{}
+	conditions, err := condition.GetAll()
 	if err != nil {
 		return nil, util.FailResponse(err.Error(), nil)
 	}

+ 5 - 5
router/router.go

@@ -312,12 +312,12 @@ func InitRouter(engine *gin.Engine) {
 	//}
 
 	//照明策略 控制器
-	lightStartegy := strategy.Group("lightstrategy")
+	lightStrategy := strategy.Group("light")
 	{
-		lightStartegy.GET("/detail", controller.LightStrategy.Detail)
-		lightStartegy.GET("/list", controller.LightStrategy.List)
-		lightStartegy.POST("/submit", controller.LightStrategy.CreateOrUpdate)
-		lightStartegy.POST("/remove", controller.LightStrategy.Remove)
+		lightStrategy.GET("/detail", controller.LightStrategy.Detail)
+		lightStrategy.GET("/list", controller.LightStrategy.List)
+		lightStrategy.POST("/submit", controller.LightStrategy.CreateOrUpdate)
+		lightStrategy.POST("/remove", controller.LightStrategy.Remove)
 	}
 
 	//照明策略略关联(灯杆分组/灯控树形态) 控制器