sitesInfoManageDomain.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. package domain
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "go.mongodb.org/mongo-driver/bson/primitive"
  7. )
  8. // 过滤类型定义
  9. const (
  10. FilterUnknown int = iota // 0 - 未知类型
  11. FilterEqualInt // 1 - 等于指定值(整数)
  12. FilterEqualFloat // 2 - 等于指定值(浮点数)
  13. FilterEqualString // 3 - 等于指定字符串
  14. FilterIncludeString // 4 - 包含指定字符串
  15. FilterRangeInt // 5 - 数值范围检索(整数)
  16. FilterRangeFloat // 6 - 数值范围检索(浮点数)
  17. FilterRangeTime // 7 - 数值范围检索(时间)
  18. FilterExists // 8 - 判断字段是否存在或不为空
  19. )
  20. type FlexiblePara struct {
  21. String *string
  22. Int *int64
  23. Float *float64
  24. }
  25. func (f *FlexiblePara) UnmarshalJSON(data []byte) error {
  26. // 尝试 string
  27. var s string
  28. if err := json.Unmarshal(data, &s); err == nil {
  29. f.String = &s
  30. return nil
  31. }
  32. // 尝试 int64
  33. var i int64
  34. if err := json.Unmarshal(data, &i); err == nil {
  35. f.Int = &i
  36. return nil
  37. }
  38. // 尝试 float64
  39. var fl float64
  40. if err := json.Unmarshal(data, &fl); err == nil {
  41. f.Float = &fl
  42. return nil
  43. }
  44. return fmt.Errorf("invalid type")
  45. }
  46. type SiteInfoFilterConfig struct {
  47. Key string `json:"key"` // 过滤的关键字
  48. Type int `json:"type"` // 过滤类型
  49. Para1 FlexiblePara `json:"para1"` // 参数1
  50. Para2 *FlexiblePara `json:"para2,omitempty"` // 参数2
  51. }
  52. type SiteInfoSubFilter struct {
  53. Logic string `json:"logic"`
  54. Config []SiteInfoFilterConfig `json:"config"`
  55. }
  56. type SiteInfoFilter struct {
  57. Logic string `json:"logic"`
  58. SubFilter []SiteInfoSubFilter `json:"subFilter"`
  59. }
  60. type SiteInfoUpdateRecord struct {
  61. Id *primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
  62. Progress Progress `bson:"progress" json:"progress"`
  63. CreateTime time.Time `bson:"createTime" json:"createTime"`
  64. UpdateTime time.Time `bson:"updateTime" json:"updateTime"`
  65. Total uint64 `bson:"total" json:"total"`
  66. }
  67. type TaskSiteInfoUpdate struct {
  68. Id primitive.ObjectID `bson:"_id" json:"id"`
  69. }
  70. type SiteInfoDomain struct {
  71. Sn string `bson:"_id" json:"sn"` // aGate SN
  72. Name *string `bson:"name,omitempty" json:"name,omitempty"`
  73. DistributorId *int `bson:"distributorId,omitempty" json:"distributorId,omitempty"` // 经销商ID
  74. DistributorName *string `bson:"distributorName,omitempty" json:"distributorName,omitempty"` // 经销商名称
  75. InstallerId *int `bson:"installerId,omitempty" json:"installerId,omitempty"` // 安装商ID
  76. InstallerAccountId *int `bson:"installerAccountId,omitempty" json:"installerAccountId,omitempty"` // 安装商账号ID
  77. InstallerAccount *string `bson:"installerAccount,omitempty" json:"installerAccount,omitempty"` // 安装商账号
  78. InstallerName *string `bson:"installerName,omitempty" json:"installerName,omitempty"` // 安装商名称
  79. MaintId *int `bson:"maintId,omitempty" json:"maintId,omitempty"` // 维护商ID
  80. MaintName *string `bson:"maintName,omitempty" json:"maintName,omitempty"` // 维护商名称
  81. Account *string `bson:"account,omitempty" json:"account,omitempty"` // 绑定的用户账号
  82. AccountName *string `bson:"accountName,omitempty" json:"accountName,omitempty"` // 绑定账号名
  83. Longitude string `bson:"longitude" json:"longitude"` // 经度
  84. Latitude string `bson:"latitude" json:"latitude"` // 纬度
  85. Address *string `bson:"address,omitempty" json:"address,omitempty"`
  86. InstallTime *string `bson:"installTime,omitempty" json:"installTime,omitempty"` // 安装时间
  87. ActiveStatus int `bson:"activeStatus" json:"activeStatus"` // 激活状态 0-未激活 1-激活
  88. ActiveTime string `bson:"activeTime" json:"activeTime"` // 激活时间(北京时间)
  89. LocalActiveTime string `bson:"localActiveTime" json:"localActiveTime"` // 激活时间(站点当地时间)
  90. Status int `bson:"status" json:"status"` // 网络状态 0-离线 1-在线
  91. OnLineTime *string `bson:"onLineTime,omitempty" json:"onLineTime,omitempty"` // 最后上线时间 YYYY-MM-DD HH:mm:SS
  92. OffLineTime *string `bson:"offLineTime,omitempty" json:"offLineTime,omitempty"` // 最后离线时间 YYYY-MM-DD HH:mm:SS
  93. // model * ??? 未知字段 (TODO:后续处理)
  94. DeviceIp *string `bson:"deviceIp,omitempty" json:"deviceIp,omitempty"` // 设备联网IP
  95. Subnet *string `bson:"subnet,omitempty" json:"subnet,omitempty"` // 子掩码
  96. Mac *string `bson:"mac,omitempty" json:"mac,omitempty"` // MAC地址
  97. GatewayIp *string `bson:"gatewayIp,omitempty" json:"gatewayIp,omitempty"` // 网关IP
  98. Signal *string `bson:"signal,omitempty" json:"signal,omitempty"` // 信号强度
  99. ICCID string `bson:"iccId" json:"iccId"`
  100. IMEI string `bson:"imei" json:"imei"`
  101. FirmUpgradeTime *string `bson:"firmUpgradeTime,omitempty" json:"firmUpgradeTime,omitempty"` // 固件最后更新时间 YYYY-MM-DD HH:mm:SS
  102. TurnoverTime *string `bson:"turnoverTime,omitempty" json:"turnoverTime,omitempty"` // 周转时间??? YYYY-MM-DD HH:mm:SS
  103. CreateTime *string `bson:"createTime,omitempty" json:"createTime,omitempty"` // 设备首次登录时间 YYYY-MM-DD HH:mm:SS
  104. // 忽略部分功率字段powerSun、powerGen、powerUti、powerFhp、powerLoad
  105. BatterySoc *float32 `bson:"batterySoc,omitempty" json:"batterySoc,omitempty"` // 系统电池SOC
  106. RunStatus int `bson:"runStatus" json:"runStatus"` // 设备运行状态 0-待机 1-充电 2-放电 3-故障
  107. EmsModel *int `bson:"emsModel,omitempty" json:"emsModel,omitempty"` // EMS调度运行模式(策略) 参考调度ID
  108. ElectricityType int `bson:"electricityType" json:"electricityType"` // 电网类型 0-离网运行 1-并网运行
  109. // workMode * ??? 未知字段 (TODO:后续处理)
  110. FhpSn string `bson:"fhpSn" json:"fhpSn"` // aPower SN 多设备用,分割
  111. TimeZone float32 `bson:"timeZone" json:"timeZone"` // 时区数值
  112. Version string `bson:"version" json:"version"` // 设备固件版本
  113. SlVersion string `bson:"slVersion" json:"slVersion"` // EMS-DSP版本
  114. SlVersionJson string `bson:"slVersionJson" json:"slVersionJson"` // EMS-DSP版本详细信息JSON
  115. MeterVersion *string `bson:"meterVersion,omitempty" json:"meterVersion,omitempty"` // 电表版本
  116. MbVersion *string `bson:"mbVersion,omitempty" json:"mbVersion,omitempty"` // MODBUS版本
  117. AwsVersion *string `bson:"awsVersion,omitempty" json:"awsVersion,omitempty"` // AWS版本
  118. AppVersion *string `bson:"appVersion,omitempty" json:"appVersion,omitempty"` // APP版本(与APP通讯的模块软件)
  119. ElecnetStatus int `bson:"elecnetStatus" json:"elecnetStatus"` // 电网状态 0-离网 1-并网
  120. SlaverStat int `bson:"slaverStat" json:"slaverStat"` // EMS-DSP状态
  121. Dst *int `bson:"dst,omitempty" json:"dst,omitempty"` // 夏令时 0-否 1-是
  122. ZoneInfo string `bson:"zoneInfo" json:"zoneInfo"` // 时区信息 America/Los_Angeles
  123. PostCode string `bson:"postCode" json:"postCode"` // 邮编
  124. DeviceTime *string `bson:"deviceTime,omitempty" json:"deviceTime,omitempty"` // 设备时间 YYYY-MM-DD HH:mm:SS
  125. ProtocolVer string `bson:"protocolVer" json:"protocolVer"` // 协议版本
  126. SysHdVersion int `bson:"sysHdVersion" json:"sysHdVersion"` // aGate硬件版本
  127. RealSysHdVersion *string `bson:"realSysHdVersion,omitempty" json:"realSysHdVersion,omitempty"` // aGate系统版本名称
  128. WifiSignal string `bson:"wifiSignal" json:"wifiSignal"` // WIFI信号
  129. ConnType int `bson:"connType" json:"connType"` // 网络连接类型 0-未连接 1-eth0 2-eth1 3-WIFI 4-4G
  130. UserName *string `bson:"userName,omitempty" json:"userName,omitempty"`
  131. ContactNumber *string `bson:"contactNumber,omitempty" json:"contactNumber,omitempty"` // 联系方式(手机号)
  132. // 忽略部分未知字段totalData、usedData、resourceList
  133. FinancierName *string `bson:"financierName,omitempty" json:"financierName,omitempty"` // 大客户名称
  134. FinancierContractNumber *string `bson:"financierContractNumber,omitempty" json:"financierContractNumber,omitempty"` // 大客户联系方式(手机号)
  135. CountryId *int `bson:"countryId,omitempty" json:"countryId,omitempty"` // 国家ID
  136. ProvinceId *int `bson:"provinceId,omitempty" json:"provinceId,omitempty"` // 州/省ID
  137. FinancierId *int `bson:"financierId,omitempty" json:"financierId,omitempty"` // 大客户ID
  138. FirstName *string `bson:"firstName,omitempty" json:"firstName,omitempty"` // 用户名
  139. LastName *string `bson:"lastName,omitempty" json:"lastName,omitempty"` // 用户姓
  140. // region * ??? 未知字段 (TODO:后续处理)
  141. Remark *string `bson:"remark,omitempty" json:"remark,omitempty"` // 备注信息
  142. GenEn int `bson:"genEn" json:"genEn"` // 发电机是否使能 0-不使能 1-使能
  143. UserId *int `bson:"userId,omitempty" json:"userId,omitempty"` // 用户ID
  144. Country string `bson:"country" json:"country"` // 国家
  145. Province string `bson:"province" json:"province"` // 州/省
  146. City string `bson:"city" json:"city"` // 城市
  147. AddressSecondLast *string `bson:"addressSecondLast,omitempty" json:"addressSecondLast,omitempty"`
  148. DeviceAddress *string `bson:"deviceAddress,omitempty" json:"deviceAddress,omitempty"` // 设备地址
  149. // whetherEncrypt * ??? 未知字段 (TODO:后续处理)
  150. EmsDeviceVer *int `bson:"emsDeviceVer,omitempty" json:"emsDeviceVer,omitempty"` // EMS版本
  151. Site *string `bson:"site,omitempty" json:"site,omitempty"` // 站点ID名
  152. // 忽略部分字段newHomeFlag、sleepStatus、isJoinJA12
  153. SiteId *uint `bson:"siteId,omitempty" json:"siteId,omitempty"` // 站点ID号
  154. JobCode *string `bson:"jobCode,omitempty" json:"jobCode,omitempty"` // Job Code (Sunrun相关)
  155. // 非原始数据
  156. ExtTags *[]string `bson:"extTags,omitempty" json:"extTags,omitempty"` // (扩展)设备标签,保存内容为标签ID
  157. }
  158. type SiteTagDomain struct {
  159. Id primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"` // 标签ID
  160. Name string `bson:"name" json:"name"` // 标签名
  161. Count uint `bson:"count" json:"count"` // 标签关联设备数量
  162. Color string `bson:"color" json:"color"` // 标签颜色
  163. Description string `bson:"description" json:"description"` // 标签描述
  164. }
  165. // Code generated. FwhSiteInfo -> SiteInfoDomain
  166. func FwhSiteInfoToSiteInfoDomain(src *FwhSiteInfo) *SiteInfoDomain {
  167. if src == nil {
  168. return nil
  169. }
  170. return &SiteInfoDomain{
  171. Sn: src.Id,
  172. Name: src.Name,
  173. DistributorId: src.DistributorId,
  174. DistributorName: src.DistributorName,
  175. InstallerId: src.InstallerId,
  176. InstallerAccountId: src.InstallerAccountId,
  177. InstallerAccount: src.InstallerAccount,
  178. InstallerName: src.InstallerName,
  179. MaintId: src.MaintId,
  180. MaintName: src.MaintName,
  181. Account: src.Account,
  182. AccountName: src.AccountName,
  183. Longitude: src.Longitude,
  184. Latitude: src.Latitude,
  185. Address: src.Address,
  186. InstallTime: src.InstallTime,
  187. ActiveStatus: src.ActiveStatus,
  188. ActiveTime: src.ActiveTime,
  189. Status: src.Status,
  190. OnLineTime: src.OnLineTime,
  191. OffLineTime: src.OffLineTime,
  192. DeviceIp: src.DeviceIp,
  193. Subnet: src.Subnet,
  194. Mac: src.Mac,
  195. GatewayIp: src.GatewayIp,
  196. Signal: src.Signal,
  197. ICCID: src.ICCID,
  198. IMEI: src.IMEI,
  199. FirmUpgradeTime: src.FirmUpgradeTime,
  200. TurnoverTime: src.TurnoverTime,
  201. CreateTime: src.CreateTime,
  202. BatterySoc: src.BatterySoc,
  203. RunStatus: src.RunStatus,
  204. EmsModel: src.EmsModel,
  205. ElectricityType: src.ElectricityType,
  206. FhpSn: src.FhpSn,
  207. TimeZone: src.TimeZone,
  208. Version: src.Version,
  209. SlVersion: src.SlVersion,
  210. SlVersionJson: src.SlVersionJson,
  211. MeterVersion: src.MeterVersion,
  212. MbVersion: src.MbVersion,
  213. AwsVersion: src.AwsVersion,
  214. AppVersion: src.AppVersion,
  215. ElecnetStatus: src.ElecnetStatus,
  216. SlaverStat: src.SlaverStat,
  217. Dst: src.Dst,
  218. ZoneInfo: src.ZoneInfo,
  219. PostCode: src.PostCode,
  220. DeviceTime: src.DeviceTime,
  221. ProtocolVer: src.ProtocolVer,
  222. SysHdVersion: src.SysHdVersion,
  223. RealSysHdVersion: src.RealSysHdVersion,
  224. WifiSignal: src.WifiSignal,
  225. ConnType: src.ConnType,
  226. UserName: src.UserName,
  227. ContactNumber: src.ContactNumber,
  228. FinancierName: src.FinancierName,
  229. FinancierContractNumber: src.FinancierContractNumber,
  230. CountryId: src.CountryId,
  231. ProvinceId: src.ProvinceId,
  232. FinancierId: src.FinancierId,
  233. FirstName: src.FirstName,
  234. LastName: src.LastName,
  235. Remark: src.Remark,
  236. GenEn: src.GenEn,
  237. UserId: src.UserId,
  238. Country: src.Country,
  239. Province: src.Province,
  240. City: src.City,
  241. AddressSecondLast: src.AddressSecondLast,
  242. DeviceAddress: src.DeviceAddress,
  243. EmsDeviceVer: src.EmsDeviceVer,
  244. Site: src.Site,
  245. SiteId: src.SiteId,
  246. }
  247. }