| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- package dao
- import (
- "fmt"
- "server/global"
- "time"
- )
- type Device struct {
- global.GVA_MODEL
- Sn string `json:"sn" gorm:"column:sn;comment:设备sn"`
- Ip string `json:"ip" gorm:"column:ip;comment:ip"`
- RegionId int `json:"regionId" gorm:"column:region_id;comment:地区id"`
- Region *Region `json:"region" gorm:"foreignKey:RegionId;references:ID"`
- Name string `json:"name" gorm:"column:name;comment:名称"`
- State int `json:"state" gorm:"column:state;comment:状态"`
- Remark string `json:"remark" gorm:"column:remark;comment:备注"`
- IsSun bool `json:"isSun" gorm:"column:is_sun;comment:是否太阳能"`
- LoopNumber int `json:"loopNumber" gorm:"column:loop_number;comment:回路数量"`
- OnlineTime time.Time `json:"onlineTime" gorm:"column:online_time;default:null;comment:在线时间"`
- DeviceLoops []DeviceLoop `json:"deviceLoops"`
- Sun Sun `json:"sun"`
- RelayStatus []int `gorm:"-" json:"relayStatus"` //回路状态
- RelayTimeStr []string `gorm:"-" json:"relayTimeStr"` //回路时间设置
- }
- func (Device) TableName() string {
- return "device"
- }
- func QueryAllDevices() (devices []Device, err error) {
- err = global.GVA_DB.Find(&devices).Error
- return devices, err
- }
- func GetOnlineDevices() (devices []Device, err error) {
- err = global.GVA_DB.Where("state = 1").Preload("DeviceLoops").Find(&devices).Error
- return devices, err
- }
- func QueryDeviceByIp(ip string) (device Device, err error) {
- err = global.GVA_DB.Where("ip = ?", ip).First(&device).Error
- return device, err
- }
- func QueryDeviceById(id int) (device Device, err error) {
- err = global.GVA_DB.Where("id = ?", id).First(&device).Error
- return device, err
- }
- func QueryDeviceList(name, sn string, regionId, limit, offset int) (devices []Device, total int64, err error) {
- db := global.GVA_DB.Model(&Device{}).Preload("DeviceLoops").Preload("Region")
- // 如果有条件搜索 下方会自动创建搜索语句
- if sn != "" {
- db = db.Where("sn LIKE ?", "%"+sn+"%")
- }
- if name != "" {
- db = db.Where("name LIKE ?", "%"+name+"%")
- }
- if regionId != 0 {
- db = db.Where("region_id = ?", regionId)
- }
- err = db.Count(&total).Error
- if err != nil {
- return nil, 0, err
- }
- err = db.Order("name asc").Limit(limit).Offset(offset).Find(&devices).Error
- return devices, total, err
- }
- func QueryDevicesByRegionId(regionId int) (devices []Device, err error) {
- err = global.GVA_DB.Where("region_id = ?", regionId).Find(&devices).Error
- return devices, err
- }
- func QueryDeviceByIds(ids []int) (devices []Device, err error) {
- err = global.GVA_DB.Where("id in (?)", ids).Find(&devices).Error
- return devices, err
- }
- func (d Device) CreateDevice() error {
- return global.GVA_DB.Create(&d).Error
- }
- func (d Device) UpdateDevice() error {
- return global.GVA_DB.Where("id = ?", d.ID).Updates(&d).Error
- }
- func UpdateDeviceByMapAndSn(data map[string]interface{}, sn string) error {
- return global.GVA_DB.Model(&Device{}).Where("sn = ?", sn).Updates(data).Error
- }
- func DeleteDevice(id int) error {
- return global.GVA_DB.Where("id = ?", id).Unscoped().Delete(&Device{}).Error
- }
- func BatchUpdateDeviceTime(ids []int, timeCondition1OnTime, timeCondition1OffTime, timeCondition2OnTime, timeCondition2OffTime string) error {
- updateData := map[string]interface{}{
- "time_condition_1_on_time": timeCondition1OnTime,
- "time_condition_1_off_time": timeCondition1OffTime,
- "time_condition_2_on_time": timeCondition2OnTime,
- "time_condition_2_off_time": timeCondition2OffTime,
- }
- return global.GVA_DB.Model(&DeviceLoop{}).
- Where("device_id IN (?)", ids).
- Updates(updateData).Error
- }
- func BatchUpdateRegionTime(regionId int, timeCondition1OnTime, timeCondition1OffTime, timeCondition2OnTime, timeCondition2OffTime string) error {
- updateData := map[string]interface{}{
- "time_condition_1_on_time": timeCondition1OnTime,
- "time_condition_1_off_time": timeCondition1OffTime,
- "time_condition_2_on_time": timeCondition2OnTime,
- "time_condition_2_off_time": timeCondition2OffTime,
- }
- var deviceIds []int
- // 1. 查询该地区所有设备ID,捕获查询错误
- tx := global.GVA_DB.Begin()
- if tx.Error != nil {
- return fmt.Errorf("开启事务失败: %w", tx.Error)
- }
- if err := tx.Model(&Device{}).
- Select("id").
- Where("region_id = ?", regionId).
- Find(&deviceIds).Error; err != nil {
- _ = tx.Rollback()
- return fmt.Errorf("查询地区设备失败: %w", err)
- }
- if len(deviceIds) == 0 {
- _ = tx.Rollback()
- return fmt.Errorf("regionId=%d 下未查询到任何设备", regionId)
- }
- // 2. 批量更新该地区所有设备的回路时控
- if err := tx.Model(&DeviceLoop{}).
- Where("device_id IN (?)", deviceIds).
- Updates(updateData).Error; err != nil {
- _ = tx.Rollback()
- return fmt.Errorf("批量更新回路时控失败: %w", err)
- }
- // 全部成功提交事务
- if err := tx.Commit().Error; err != nil {
- _ = tx.Rollback()
- return fmt.Errorf("事务提交失败: %w", err)
- }
- return nil
- }
|