package domain import ( "encoding/json" "fmt" "time" "go.mongodb.org/mongo-driver/bson/primitive" ) // 过滤类型定义 const ( FilterUnknown int = iota // 0 - 未知类型 FilterEqualInt // 1 - 等于指定值(整数) FilterEqualFloat // 2 - 等于指定值(浮点数) FilterEqualString // 3 - 等于指定字符串 FilterIncludeString // 4 - 包含指定字符串 FilterRangeInt // 5 - 数值范围检索(整数) FilterRangeFloat // 6 - 数值范围检索(浮点数) FilterRangeTime // 7 - 数值范围检索(时间) FilterExists // 8 - 判断字段是否存在或不为空 ) type FlexiblePara struct { String *string Int *int64 Float *float64 } func (f *FlexiblePara) UnmarshalJSON(data []byte) error { // 尝试 string var s string if err := json.Unmarshal(data, &s); err == nil { f.String = &s return nil } // 尝试 int64 var i int64 if err := json.Unmarshal(data, &i); err == nil { f.Int = &i return nil } // 尝试 float64 var fl float64 if err := json.Unmarshal(data, &fl); err == nil { f.Float = &fl return nil } return fmt.Errorf("invalid type") } type SiteInfoFilterConfig struct { Key string `json:"key"` // 过滤的关键字 Type int `json:"type"` // 过滤类型 Para1 FlexiblePara `json:"para1"` // 参数1 Para2 *FlexiblePara `json:"para2,omitempty"` // 参数2 } type SiteInfoSubFilter struct { Logic string `json:"logic"` Config []SiteInfoFilterConfig `json:"config"` } type SiteInfoFilter struct { Logic string `json:"logic"` SubFilter []SiteInfoSubFilter `json:"subFilter"` } type SiteInfoUpdateRecord struct { Id *primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"` Progress Progress `bson:"progress" json:"progress"` CreateTime time.Time `bson:"createTime" json:"createTime"` UpdateTime time.Time `bson:"updateTime" json:"updateTime"` Total uint64 `bson:"total" json:"total"` } type TaskSiteInfoUpdate struct { Id primitive.ObjectID `bson:"_id" json:"id"` } type SiteInfoDomain struct { Sn string `bson:"_id" json:"sn"` // aGate SN Name *string `bson:"name,omitempty" json:"name,omitempty"` DistributorId *int `bson:"distributorId,omitempty" json:"distributorId,omitempty"` // 经销商ID DistributorName *string `bson:"distributorName,omitempty" json:"distributorName,omitempty"` // 经销商名称 InstallerId *int `bson:"installerId,omitempty" json:"installerId,omitempty"` // 安装商ID InstallerAccountId *int `bson:"installerAccountId,omitempty" json:"installerAccountId,omitempty"` // 安装商账号ID InstallerAccount *string `bson:"installerAccount,omitempty" json:"installerAccount,omitempty"` // 安装商账号 InstallerName *string `bson:"installerName,omitempty" json:"installerName,omitempty"` // 安装商名称 MaintId *int `bson:"maintId,omitempty" json:"maintId,omitempty"` // 维护商ID MaintName *string `bson:"maintName,omitempty" json:"maintName,omitempty"` // 维护商名称 Account *string `bson:"account,omitempty" json:"account,omitempty"` // 绑定的用户账号 AccountName *string `bson:"accountName,omitempty" json:"accountName,omitempty"` // 绑定账号名 Longitude string `bson:"longitude" json:"longitude"` // 经度 Latitude string `bson:"latitude" json:"latitude"` // 纬度 Address *string `bson:"address,omitempty" json:"address,omitempty"` InstallTime *string `bson:"installTime,omitempty" json:"installTime,omitempty"` // 安装时间 ActiveStatus int `bson:"activeStatus" json:"activeStatus"` // 激活状态 0-未激活 1-激活 ActiveTime string `bson:"activeTime" json:"activeTime"` // 激活时间(北京时间) LocalActiveTime string `bson:"localActiveTime" json:"localActiveTime"` // 激活时间(站点当地时间) Status int `bson:"status" json:"status"` // 网络状态 0-离线 1-在线 OnLineTime *string `bson:"onLineTime,omitempty" json:"onLineTime,omitempty"` // 最后上线时间 YYYY-MM-DD HH:mm:SS OffLineTime *string `bson:"offLineTime,omitempty" json:"offLineTime,omitempty"` // 最后离线时间 YYYY-MM-DD HH:mm:SS // model * ??? 未知字段 (TODO:后续处理) DeviceIp *string `bson:"deviceIp,omitempty" json:"deviceIp,omitempty"` // 设备联网IP Subnet *string `bson:"subnet,omitempty" json:"subnet,omitempty"` // 子掩码 Mac *string `bson:"mac,omitempty" json:"mac,omitempty"` // MAC地址 GatewayIp *string `bson:"gatewayIp,omitempty" json:"gatewayIp,omitempty"` // 网关IP Signal *string `bson:"signal,omitempty" json:"signal,omitempty"` // 信号强度 ICCID string `bson:"iccId" json:"iccId"` IMEI string `bson:"imei" json:"imei"` FirmUpgradeTime *string `bson:"firmUpgradeTime,omitempty" json:"firmUpgradeTime,omitempty"` // 固件最后更新时间 YYYY-MM-DD HH:mm:SS TurnoverTime *string `bson:"turnoverTime,omitempty" json:"turnoverTime,omitempty"` // 周转时间??? YYYY-MM-DD HH:mm:SS CreateTime *string `bson:"createTime,omitempty" json:"createTime,omitempty"` // 设备首次登录时间 YYYY-MM-DD HH:mm:SS // 忽略部分功率字段powerSun、powerGen、powerUti、powerFhp、powerLoad BatterySoc *float32 `bson:"batterySoc,omitempty" json:"batterySoc,omitempty"` // 系统电池SOC RunStatus int `bson:"runStatus" json:"runStatus"` // 设备运行状态 0-待机 1-充电 2-放电 3-故障 EmsModel *int `bson:"emsModel,omitempty" json:"emsModel,omitempty"` // EMS调度运行模式(策略) 参考调度ID ElectricityType int `bson:"electricityType" json:"electricityType"` // 电网类型 0-离网运行 1-并网运行 // workMode * ??? 未知字段 (TODO:后续处理) FhpSn string `bson:"fhpSn" json:"fhpSn"` // aPower SN 多设备用,分割 TimeZone float32 `bson:"timeZone" json:"timeZone"` // 时区数值 Version string `bson:"version" json:"version"` // 设备固件版本 SlVersion string `bson:"slVersion" json:"slVersion"` // EMS-DSP版本 SlVersionJson string `bson:"slVersionJson" json:"slVersionJson"` // EMS-DSP版本详细信息JSON MeterVersion *string `bson:"meterVersion,omitempty" json:"meterVersion,omitempty"` // 电表版本 MbVersion *string `bson:"mbVersion,omitempty" json:"mbVersion,omitempty"` // MODBUS版本 AwsVersion *string `bson:"awsVersion,omitempty" json:"awsVersion,omitempty"` // AWS版本 AppVersion *string `bson:"appVersion,omitempty" json:"appVersion,omitempty"` // APP版本(与APP通讯的模块软件) ElecnetStatus int `bson:"elecnetStatus" json:"elecnetStatus"` // 电网状态 0-离网 1-并网 SlaverStat int `bson:"slaverStat" json:"slaverStat"` // EMS-DSP状态 Dst *int `bson:"dst,omitempty" json:"dst,omitempty"` // 夏令时 0-否 1-是 ZoneInfo string `bson:"zoneInfo" json:"zoneInfo"` // 时区信息 America/Los_Angeles PostCode string `bson:"postCode" json:"postCode"` // 邮编 DeviceTime *string `bson:"deviceTime,omitempty" json:"deviceTime,omitempty"` // 设备时间 YYYY-MM-DD HH:mm:SS ProtocolVer string `bson:"protocolVer" json:"protocolVer"` // 协议版本 SysHdVersion int `bson:"sysHdVersion" json:"sysHdVersion"` // aGate硬件版本 RealSysHdVersion *string `bson:"realSysHdVersion,omitempty" json:"realSysHdVersion,omitempty"` // aGate系统版本名称 WifiSignal string `bson:"wifiSignal" json:"wifiSignal"` // WIFI信号 ConnType int `bson:"connType" json:"connType"` // 网络连接类型 0-未连接 1-eth0 2-eth1 3-WIFI 4-4G UserName *string `bson:"userName,omitempty" json:"userName,omitempty"` ContactNumber *string `bson:"contactNumber,omitempty" json:"contactNumber,omitempty"` // 联系方式(手机号) // 忽略部分未知字段totalData、usedData、resourceList FinancierName *string `bson:"financierName,omitempty" json:"financierName,omitempty"` // 大客户名称 FinancierContractNumber *string `bson:"financierContractNumber,omitempty" json:"financierContractNumber,omitempty"` // 大客户联系方式(手机号) CountryId *int `bson:"countryId,omitempty" json:"countryId,omitempty"` // 国家ID ProvinceId *int `bson:"provinceId,omitempty" json:"provinceId,omitempty"` // 州/省ID FinancierId *int `bson:"financierId,omitempty" json:"financierId,omitempty"` // 大客户ID FirstName *string `bson:"firstName,omitempty" json:"firstName,omitempty"` // 用户名 LastName *string `bson:"lastName,omitempty" json:"lastName,omitempty"` // 用户姓 // region * ??? 未知字段 (TODO:后续处理) Remark *string `bson:"remark,omitempty" json:"remark,omitempty"` // 备注信息 GenEn int `bson:"genEn" json:"genEn"` // 发电机是否使能 0-不使能 1-使能 UserId *int `bson:"userId,omitempty" json:"userId,omitempty"` // 用户ID Country string `bson:"country" json:"country"` // 国家 Province string `bson:"province" json:"province"` // 州/省 City string `bson:"city" json:"city"` // 城市 AddressSecondLast *string `bson:"addressSecondLast,omitempty" json:"addressSecondLast,omitempty"` DeviceAddress *string `bson:"deviceAddress,omitempty" json:"deviceAddress,omitempty"` // 设备地址 // whetherEncrypt * ??? 未知字段 (TODO:后续处理) EmsDeviceVer *int `bson:"emsDeviceVer,omitempty" json:"emsDeviceVer,omitempty"` // EMS版本 Site *string `bson:"site,omitempty" json:"site,omitempty"` // 站点ID名 // 忽略部分字段newHomeFlag、sleepStatus、isJoinJA12 SiteId *uint `bson:"siteId,omitempty" json:"siteId,omitempty"` // 站点ID号 JobCode *string `bson:"jobCode,omitempty" json:"jobCode,omitempty"` // Job Code (Sunrun相关) // 非原始数据 ExtTags *[]string `bson:"extTags,omitempty" json:"extTags,omitempty"` // (扩展)设备标签,保存内容为标签ID } type SiteTagDomain struct { Id primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"` // 标签ID Name string `bson:"name" json:"name"` // 标签名 Count uint `bson:"count" json:"count"` // 标签关联设备数量 Color string `bson:"color" json:"color"` // 标签颜色 Description string `bson:"description" json:"description"` // 标签描述 } // Code generated. FwhSiteInfo -> SiteInfoDomain func FwhSiteInfoToSiteInfoDomain(src *FwhSiteInfo) *SiteInfoDomain { if src == nil { return nil } return &SiteInfoDomain{ Sn: src.Id, Name: src.Name, DistributorId: src.DistributorId, DistributorName: src.DistributorName, InstallerId: src.InstallerId, InstallerAccountId: src.InstallerAccountId, InstallerAccount: src.InstallerAccount, InstallerName: src.InstallerName, MaintId: src.MaintId, MaintName: src.MaintName, Account: src.Account, AccountName: src.AccountName, Longitude: src.Longitude, Latitude: src.Latitude, Address: src.Address, InstallTime: src.InstallTime, ActiveStatus: src.ActiveStatus, ActiveTime: src.ActiveTime, Status: src.Status, OnLineTime: src.OnLineTime, OffLineTime: src.OffLineTime, DeviceIp: src.DeviceIp, Subnet: src.Subnet, Mac: src.Mac, GatewayIp: src.GatewayIp, Signal: src.Signal, ICCID: src.ICCID, IMEI: src.IMEI, FirmUpgradeTime: src.FirmUpgradeTime, TurnoverTime: src.TurnoverTime, CreateTime: src.CreateTime, BatterySoc: src.BatterySoc, RunStatus: src.RunStatus, EmsModel: src.EmsModel, ElectricityType: src.ElectricityType, FhpSn: src.FhpSn, TimeZone: src.TimeZone, Version: src.Version, SlVersion: src.SlVersion, SlVersionJson: src.SlVersionJson, MeterVersion: src.MeterVersion, MbVersion: src.MbVersion, AwsVersion: src.AwsVersion, AppVersion: src.AppVersion, ElecnetStatus: src.ElecnetStatus, SlaverStat: src.SlaverStat, Dst: src.Dst, ZoneInfo: src.ZoneInfo, PostCode: src.PostCode, DeviceTime: src.DeviceTime, ProtocolVer: src.ProtocolVer, SysHdVersion: src.SysHdVersion, RealSysHdVersion: src.RealSysHdVersion, WifiSignal: src.WifiSignal, ConnType: src.ConnType, UserName: src.UserName, ContactNumber: src.ContactNumber, FinancierName: src.FinancierName, FinancierContractNumber: src.FinancierContractNumber, CountryId: src.CountryId, ProvinceId: src.ProvinceId, FinancierId: src.FinancierId, FirstName: src.FirstName, LastName: src.LastName, Remark: src.Remark, GenEn: src.GenEn, UserId: src.UserId, Country: src.Country, Province: src.Province, City: src.City, AddressSecondLast: src.AddressSecondLast, DeviceAddress: src.DeviceAddress, EmsDeviceVer: src.EmsDeviceVer, Site: src.Site, SiteId: src.SiteId, } }