fwhProDomain.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. package domain
  2. // 定义枚举类型
  3. type CountryType int
  4. const (
  5. CTRY_ALL CountryType = 0 // 所有国家
  6. CTRY_US CountryType = 2 // 美国
  7. CTRY_AU CountryType = 3 // 澳大利亚
  8. )
  9. type FwhResponse[T any] struct {
  10. Code int `json:"code"` // 401 - invalid token
  11. Message string `json:"message"`
  12. Result *T `json:"result"`
  13. Success *bool `json:"success"`
  14. }
  15. type FwhPageResponse[T any] struct {
  16. Code int `json:"code"` // 401 - invalid token
  17. Message string `json:"message"`
  18. Result *T `json:"result"`
  19. Success *bool `json:"success"`
  20. Total uint64 `json:"total"`
  21. }
  22. type FwhResponseA[T any] struct {
  23. Code int `json:"code"` // 401 - invalid token
  24. Msg string `json:"msg"`
  25. Result *T `json:"result"`
  26. }
  27. type FwhResponseB[T any] struct {
  28. Code int `json:"code"` // 401 - invalid token
  29. Msg string `json:"msg"`
  30. Data *T `json:"data"`
  31. }
  32. type AlarmSnapshotInfo struct {
  33. Id int64 `json:"id"`
  34. CodeType int32 `json:"codeType"` // 作用未知
  35. FileName string `json:"fileName"`
  36. FileUrl string `json:"fileUrl"`
  37. LinkId string `json:"linkId"` // site SN
  38. LogTime string `json:"logTime"` // format YYYY-MM-DD
  39. SerialNumber string `json:"serialNumber"`
  40. StartTime string `json:"startTime"` // format YYYY-MM-DD HH:mm:SS
  41. EndTime string `json:"endTime"` // format YYYY-MM-DD HH:mm:SS
  42. Status int `json:"status"` // 1-完成
  43. CompleteTime string `json:"completeTime"` // format YYYY-MM-DD HH:mm:SS
  44. }
  45. type EventAlarmItem struct {
  46. ID *string `json:"id"` // UUID or null
  47. CmdType string `json:"cmdType"` // 命令说明
  48. CmdName string `json:"cmdName"` // 命令类型 exp:201...
  49. GatewayId string `json:"gatewayId"` // SN
  50. GatewayType *string `json:"gatewayType"`
  51. GatewayStatus *string `json:"gatewayStatus"`
  52. ActiveStatus *string `json:"activeStatus"` // 激活状态
  53. ActiveTime *string `json:"activeTime"` // 激活时间
  54. AlarmCode string `json:"alarmCode"` // 告警码,事件则为0
  55. LogName string `json:"logName"`
  56. LogType string `json:"logType"` // 日志类型 0-事件 1-告警
  57. LogData string `json:"logData"` // JSON数据
  58. LogTime string `json:"logTime"` // 设备时间(日志上传时间,告警未结束为开始时间,结束为结束时间)
  59. Time string `json:"time"` // UTC时间
  60. StartTime string `json:"startTime"` // 事件或告警的开始时间
  61. EndTime *string `json:"endTime"` // 告警结束时间,事件没有结束时间为null,告警枚举结束时间则未结束
  62. }
  63. type ShutdownRecord struct {
  64. GatewayId string `json:"gatewayId"` // SN
  65. ShutdownType int `json:"shutdownType"` // 1-系统停机 2-aPower停机
  66. Country string `json:"country"` // 国家
  67. Province string `json:"province"` // 州/省
  68. ActiveTime string `json:"activeTime"` // 激活时间
  69. DeviceTime string `json:"deviceTime"` // 告警时的设备时间 (Shutdown开始时间)
  70. }
  71. type EmsLogRecordInfo struct {
  72. Id int64 `json:"id"`
  73. FileName string `json:"fileName"` // 不含后缀
  74. CallTime string `json:"callTime"`
  75. CompleteTime string `json:"completeTime"`
  76. Status int `json:"status"` // 召唤状态 1-成功 0-召唤中 -1-失败
  77. FileUrl string `json:"fileUrl"`
  78. LinkId string `json:"linkId"` // SN
  79. LogTime string `json:"logTime"`
  80. CodeType int `json:"codeType"` // 日志类型 4-IBG运行日志 7-电池日志 9-设备系统资源监控日志 10-4G日志 11-AWS日志 12-主进程日志
  81. }
  82. type FaultRecordInfo struct {
  83. Id int64 `json:"id"`
  84. DeviceType int `json:"deviceType"` // 0-aPower-PE 1-aGate/MCA 2-aPower-MPPT 3-aHub
  85. ApowerId *string `json:"apowerId"` // aPower SN, deviceType不为0或2时为null
  86. GatewayId string `json:"gatewayId"` // aGate SN
  87. PowerlinkId *string `json:"powerlinkId"` // aHub SN, deviceType不为3时为null
  88. TriggerType int `json:"triggerType"` // 触发类中:1-手动 2-自动
  89. FaultRecordsCount int `json:"faultRecordsCount"` // 故障录波召唤数量
  90. EarliestFaultTime string `json:"earliestFaultTime"` // 故障录波列表Format: YYY-MM-DD hh:mm:ss / 召唤记录Format: 时间戳
  91. LatestFaultTime string `json:"latestFaultTime"` // 故障录波列表Format: YYY-MM-DD hh:mm:ss / 召唤记录Format: 时间戳
  92. CellTime string `json:"cellTime"` // 召唤时间 Format: YYY-MM-DD hh:mm:ss
  93. FileUrl string `json:"fileUrl"` // 文件下载路径
  94. FileName string `json:"fileName"` // 文件名,不含后缀
  95. Status *int `json:"status"` // 录波数据查询为null,召唤记录查询则为召唤状态 0-开始召唤 2-召唤成功 -1-召唤失败
  96. FaultReason *string `json:"faultReason"` // 录波数据查询为null,status为-1时为失败原因,否则为null
  97. }
  98. type FaultRecordCallableInfo struct {
  99. Idx int `json:"idx"` // 数据序号
  100. IndexNumber string `json:"indexNumber"` // 数据序号 exg."01"
  101. FailureTime string `json:"failureTime"` // 故障时间 Format: YYY-MM-DD hh:mm:ss
  102. ParamVersionNumber string `json:"paramVersionNumber"` // 故障信息
  103. TriggerSourceCode string `json:"triggerSourceCode"` // 故障码
  104. }
  105. type FaultRecordChannelInfo struct {
  106. Code string `json:"code"`
  107. Describe string `json:"describe"` // 说明
  108. Index int `json:"index"`
  109. }
  110. type FaultRecordSubInfo struct {
  111. DeviceType int `json:"deviceType"` // 0-aPower-PE 1-aGate/MCA 2-aPower-MPPT 3-aHub
  112. ApowerId *string `json:"apowerId"` // aPower SN
  113. GatewayId string `json:"gatewayId"` // aGate SN
  114. FileName string `json:"fileName"` // 不含后缀
  115. Id int64 `json:"id"` // 本条记录的ID
  116. FaultId int64 `json:"faultId"`
  117. EventTriggerSource string `json:"eventTriggerSource"` // 故障码
  118. EventTriggerSourceName string `json:"eventTriggerSourceName"` // 故障码解释
  119. SamplingCount uint `json:"samplingCount"` // 采样通道数量
  120. FailureTime string `json:"failureTime"` //故障发送时间 Format: YYY-MM-DD hh:mm:ss
  121. SnapshotCount string `json:"snapshotCount"` // 快照采样通道数量
  122. SamplingPoints string `json:"samplingPoints"` // 采样点总数
  123. MaxFrequency string `json:"maxFrequency"` // 最大采样频率
  124. CurrFrequency string `json:"currFrequency"` // 当前采样频率
  125. SnapshotMeaningVal string `json:"snapshotMeaningVal"` // 快照含义?
  126. SnapshotChannel []FaultRecordChannelInfo `json:"snapshotChannel"` // 快照通道信息
  127. SamplingMeaning string `json:"samplingMeaning"` // 采样含义?
  128. SamplingChannel []FaultRecordChannelInfo `json:"samplingChannel"` // 采样通道信息
  129. }
  130. type SystemUpdateRecordInfo struct {
  131. Id int64 `json:"id"`
  132. OrderNo string `json:"orderNo"` // 升级单号
  133. Name string `json:"name"` //
  134. UpgradeType int `json:"upgradeType"` // 升级类型标识(上游返回数值)
  135. UpgradeTime string `json:"upgradeTime"` // 升级开始时间 - UTC时间
  136. UpgradeNum int `json:"upgradeNum"` // 升级设备数量
  137. Result int `json:"result"` // 升级结果 1-升级中 2-升级成功 3-升级失败
  138. Status int `json:"status"`
  139. SuccessNum int `json:"successNum"`
  140. FailuresNum int `json:"failuresNum"`
  141. TurnoverTime string `json:"turnoverTime"` // 升级完成时间 - UTC时间
  142. OrderUpgradeTypeName string `json:"orderUpgradeTypeName"` // 升级类型 exg.无感升级
  143. }
  144. type AHubUpdateRecordInfo struct {
  145. AHubSn string `json:"ahubSn"` // aHub SN
  146. OrderNo string `json:"orderNo"` // 升级单号
  147. GatewayId string `json:"gatewayId"` // Gate SN
  148. EndTime int64 `json:"endTime"` // 升级结束时间 - 时间戳(ms) - 只能显示北京时间
  149. UpgradeResult int `json:"upgradeResult"` // 升级结果 0-成功
  150. DetailList []struct {
  151. UpgradeFileName string `json:"upgradeFileName"` // 升级包名
  152. UpgradeFileOrder string `json:"upgradeFileOrder"` // 升级包单号
  153. UpgradeResult string `json:"upgradeResult"` // 升级结果 '0'-成功
  154. UpgradeResultDesc string `json:"upgradeResultDesc"` // 升级结果说明
  155. OldVersion string `json:"oldVersion"` // 升级前版本
  156. NewVersion string `json:"newVersion"` // 升级后版本
  157. } `json:"detailList"`
  158. }
  159. type SystemUpdateDetailInfo struct {
  160. Id int64 `json:"id"`
  161. OrderNo string `json:"orderNo"` // 升级单号
  162. GatewayId string `json:"gatewayId"` // SN
  163. GatewayName string `json:"gatewayName"`
  164. GatewayStatus int `json:"gatewayStatus"`
  165. ActiveStatus int `json:"activeStatus"` // 激活状态 0-未激活 1-已激活
  166. Result int `json:"result"` // 升级结果 1-升级中 2-升级成功 3-升级失败
  167. UpgradeTime string `json:"upgradeTime"` // 升级开始时间
  168. TurnoverTime string `json:"turnoverTime"` // 升级完成时间
  169. IbgVersion string `json:"ibgVersion"` // 设备版本信息(同IbgVersionNew) JSON string
  170. IbgVersionNew []struct { // Gate 版本
  171. Type string `json:"type"` // 版本类型
  172. OldVersion string `json:"oldVersion"` // 升级前版本
  173. Version string `json:"version"` // 升级后版本
  174. Children []struct {
  175. Type string `json:"type"` // 版本类型
  176. OldVersion string `json:"oldVersion"` // 升级前版本
  177. Version string `json:"version"` // 升级后版本
  178. } `json:"children"`
  179. } `json:"ibgVersionNew"`
  180. ErrCode int `json:"errCode"` // 错误码 0-无错误
  181. ErrMsg string `json:"errMsg"` // 错误信息
  182. DownloadAfterStatus int `json:"downloadAfterStatus"`
  183. CoverOrderNo string `json:"coverOrderNo"`
  184. SysHdVersion int `json:"sysHdVersion"` // 系统硬件版本 int eg.104=FHP1.4
  185. RealSysHdVersion string `json:"realSysHdVersion"` // 系统硬件版本 string
  186. EmsDeviceVer int `json:"emsDeviceVer"`
  187. OldEmsDeviceVer int `json:"oldEmsDeviceVer"`
  188. SonNewDevices []struct { // 子设备版本 (aPower、aHub)
  189. ApowerSn string `json:"apowerSn"` // 子设备SN
  190. FirstList []struct { // 1级菜单
  191. BigType string `json:"bigType"` // 设备类型
  192. DeviceSn string `json:"deviceSn"` // 设备SN
  193. Secondlist []struct { // 2级菜单
  194. Type string `json:"type"` // 版本类型
  195. Thirdlist []struct { // 3级类型
  196. SubType string `json:"subType"` // 版本类型
  197. Version string `json:"version"` // 升级后版本
  198. OldVersion string `json:"oldVersion"` // 升级前版本
  199. } `json:"thirdlist"`
  200. } `json:"secondlist"`
  201. } `json:"firstList"`
  202. } `json:"sonNewDevices"`
  203. // sonDevices ??? TODO
  204. // apboxVersion ??? TODO
  205. // apboxVersionVOList ??? TODO
  206. }
  207. type AlarmStatisticsInfo struct {
  208. LogName string `json:"logName"`
  209. LogNameEn string `json:"logNameEn"`
  210. AlarmCount int `json:"alarmCount"`
  211. AlarmCode string `json:"alarmCode"`
  212. Level int `json:"level"`
  213. AlarmPercent float32 `json:"alarmPercent"` // 告警数量占比
  214. }
  215. type AlarmStatisticsFromCodeInfo struct {
  216. GatewayId string `json:"gatewayId"` // aGateSN
  217. ApowerList []string `json:"apowerList"` // aPowerSn List
  218. Mode string `json:"mode"` // 站点工作模式
  219. Name string `json:"name"` // 站点工作模式名
  220. LogTime string `json:"logTime"` // 告警日志上传时间(北京时间) format: YYYY-MM-DD HH:mm:SS
  221. }
  222. type AlarmStatisticsData[T any] struct {
  223. PageNo int `json:"pageNo"`
  224. PageSize int `json:"pageSize"`
  225. PageTotal int `json:"pageTotal"`
  226. Records []T `json:"records"`
  227. Total int `json:"total"`
  228. }
  229. type FwhSiteInfo struct {
  230. Id string `json:"id"` // aGate SN
  231. Name *string `json:"name"`
  232. DistributorId *int `json:"distributorId"` // 经销商ID
  233. DistributorName *string `json:"distributorName"` // 经销商名称
  234. InstallerId *int `json:"installerId"` // 安装商ID
  235. InstallerAccountId *int `json:"installerAccountId"` // 安装商账号ID
  236. InstallerAccount *string `json:"installerAccount"` // 安装商账号
  237. InstallerName *string `json:"installerName"` // 安装商名称
  238. MaintId *int `json:"maintId"` // 维护商ID
  239. MaintName *string `json:"maintName"` // 维护商名称
  240. Account *string `json:"account"` // 绑定的用户账号
  241. AccountName *string `json:"accountName"` // 绑定账号名
  242. Longitude string `json:"longitude"` // 经度
  243. Latitude string `json:"latitude"` // 纬度
  244. Address *string `json:"address"`
  245. InstallTime *string `json:"installTime"` // 安装时间
  246. ActiveStatus int `json:"activeStatus"` // 激活状态 0-未激活 1-激活
  247. ActiveTime string `json:"activeTime"` // 激活时间(北京时间)
  248. LocalActiveTime string `json:"localActiveTime"` // 激活时间(站点当地时间)
  249. Status int `json:"status"` // 网络状态 0-离线 1-在线
  250. OnLineTime *string `json:"onLineTime"` // 最后上线时间 YYYY-MM-DD HH:mm:SS
  251. OffLineTime *string `json:"offLineTime"` // 最后离线时间 YYYY-MM-DD HH:mm:SS
  252. // model * ??? 未知字段 (TODO:后续处理)
  253. DeviceIp *string `json:"deviceIp"` // 设备联网IP
  254. Subnet *string `json:"subnet"` // 子掩码
  255. Mac *string `json:"mac"` // MAC地址
  256. GatewayIp *string `json:"gatewayIp"` // 网关IP
  257. Signal *string `json:"signal"` // 信号强度
  258. ICCID string `json:"iccId"`
  259. IMEI string `json:"imei"`
  260. FirmUpgradeTime *string `json:"firmUpgradeTime"` // 固件最后更新时间 YYYY-MM-DD HH:mm:SS
  261. TurnoverTime *string `json:"turnoverTime"` // 周转时间??? YYYY-MM-DD HH:mm:SS
  262. CreateTime *string `json:"createTime"` // 设备首次登录时间 YYYY-MM-DD HH:mm:SS
  263. // 忽略部分功率字段powerSun、powerGen、powerUti、powerFhp、powerLoad
  264. BatterySoc *float32 `json:"batterySoc"` // 系统电池SOC
  265. RunStatus int `json:"runStatus"` // 设备运行状态 0-待机 1-充电 2-放电 3-故障
  266. EmsModel *int `json:"emsModel"` // EMS调度运行模式(策略) 参考调度ID
  267. ElectricityType int `json:"electricityType"` // 电网类型 0-离网运行 1-并网运行
  268. // workMode * ??? 未知字段 (TODO:后续处理)
  269. FhpSn string `json:"fhpSn"` // aPower SN 多设备用,分割
  270. TimeZone float32 `json:"timeZone"` // 时区数值
  271. Version string `json:"version"` // 设备固件版本
  272. SlVersion string `json:"slVersion"` // EMS-DSP版本
  273. SlVersionJson string `json:"slVersionJson"` // EMS-DSP版本详细信息JSON
  274. MeterVersion *string `json:"meterVersion"` // 电表版本
  275. MbVersion *string `json:"mbVersion"` // MODBUS版本
  276. AwsVersion *string `json:"awsVersion"` // AWS版本
  277. AppVersion *string `json:"appVersion"` // APP版本(与APP通讯的模块软件)
  278. ElecnetStatus int `json:"elecnetStatus"` // 电网状态 0-离网 1-并网
  279. SlaverStat int `json:"slaverStat"` // EMS-DSP状态
  280. Dst *int `json:"dst"` // 夏令时 0-否 1-是
  281. ZoneInfo string `json:"zoneInfo"` // 时区信息 America/Los_Angeles
  282. PostCode string `json:"postCode"` // 邮编
  283. DeviceTime *string `json:"deviceTime"` // 设备时间 YYYY-MM-DD HH:mm:SS
  284. ProtocolVer string `json:"protocolVer"` // 协议版本
  285. SysHdVersion int `json:"sysHdVersion"` // aGate硬件版本
  286. RealSysHdVersion *string `json:"realSysHdVersion"` // aGate系统版本名称
  287. WifiSignal string `json:"wifiSignal"` // WIFI信号
  288. ConnType int `json:"connType"` // 网络连接类型 0-未连接 1-eth0 2-eth1 3-WIFI 4-4G
  289. UserName *string `json:"userName"`
  290. ContactNumber *string `json:"contactNumber"` // 联系方式(手机号)
  291. // 忽略部分未知字段totalData、usedData、resourceList
  292. FinancierName *string `json:"financierName"` // 大客户名称
  293. FinancierContractNumber *string `json:"financierContractNumber"` // 大客户联系方式(手机号)
  294. CountryId *int `json:"countryId"` // 国家ID
  295. ProvinceId *int `json:"provinceId"` // 州/省ID
  296. FinancierId *int `json:"financierId"` // 大客户ID
  297. FirstName *string `json:"firstName"` // 用户名
  298. LastName *string `json:"lastName"` // 用户姓
  299. // region * ??? 未知字段 (TODO:后续处理)
  300. Remark *string `json:"remark"` // 备注信息
  301. GenEn int `json:"genEn"` // 发电机是否使能 0-不使能 1-使能
  302. UserId *int `json:"userId"` // 用户ID
  303. Country string `json:"country"` // 国家
  304. Province string `json:"province"` // 州/省
  305. City string `json:"city"` // 城市
  306. AddressSecondLast *string `json:"addressSecondLast"`
  307. DeviceAddress *string `json:"deviceAddress"` // 设备地址
  308. // whetherEncrypt * ??? 未知字段 (TODO:后续处理)
  309. EmsDeviceVer *int `json:"emsDeviceVer"` // EMS版本
  310. Site *string `json:"site"` // 站点ID名
  311. // 忽略部分字段newHomeFlag、sleepStatus、isJoinJA12
  312. SiteId *uint `json:"siteId"` // 站点ID号
  313. JobCode *string `json:"jobCode"` // Job Code (Sunrun相关)
  314. }
  315. /*************** 设备信息 /hes-gateway/manage/getDeviceInfo ***************/
  316. // FwhDeviceInfoAPower getDeviceInfo.apowerList 项
  317. type FwhDeviceInfoAPower struct {
  318. Id string `json:"id"` // aPower SN
  319. RatedPwr *int `json:"ratedPwr"` // 额定功率
  320. RateBatCap *int `json:"rateBatCap"` // 额定电池容量
  321. ModelName string `json:"modelName"` // 型号,如 aPower 2、aPower S
  322. }
  323. // FwhDeviceInfo 网关设备信息(只解析故障录波需要的字段)
  324. type FwhDeviceInfo struct {
  325. FhpSn string `json:"fhpSn"` // aPower SN,多设备用 , 分割
  326. PeHwVerList []int `json:"peHwVerList"` // 各 aPower 的 PE 硬件版本,顺序与 fhpSn 一致;21、24 支持 MPPT
  327. ApowerList []FwhDeviceInfoAPower `json:"apowerList"` // 各 aPower 信息
  328. MpptEnFlag *bool `json:"mpptEnFlag"` // 站点是否启用 MPPT
  329. Apbox20Num *int `json:"apbox20Num"` // aHub(aPbox2.0) 数量
  330. EquipType *int `json:"equipType"`
  331. }
  332. /*************** 网关功率 /hes-gateway/manage/selectGatewayPower ***************/
  333. // FwhApbox20Info selectGatewayPower.apbox20List 项(aHub 即 aPbox2.0)
  334. type FwhApbox20Info struct {
  335. Apbox20Sn string `json:"apbox20Sn"` // aHub SN
  336. Apbox20HardwareVer *int `json:"apbox20HardwareVer"` // 硬件版本
  337. Apbox20AppVer string `json:"apbox20AppVer"` // 软件版本
  338. }
  339. // FwhGatewayPower 网关功率信息(只解析故障录波需要的字段)
  340. type FwhGatewayPower struct {
  341. Apbox20List []FwhApbox20Info `json:"apbox20List"`
  342. MpptSta []int `json:"mpptSta"` // 各 aPower 的 MPPT 状态,顺序与 aPower 一致
  343. }