siteInfoManageServices.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "fwh-toolbox-server/domain"
  6. "fwh-toolbox-server/dto"
  7. "fwh-toolbox-server/repositories"
  8. "fwh-toolbox-server/taskQueue"
  9. "fwh-toolbox-server/utils/global"
  10. "strconv"
  11. "time"
  12. "github.com/xuri/excelize/v2"
  13. "go.uber.org/zap"
  14. )
  15. // 获取更新状态
  16. func GetSiteInfoUpdateStatus() (*domain.SiteInfoUpdateRecord, error) {
  17. return repositories.GetSiteInfoUpdateNewRecord()
  18. }
  19. // 请求更新站点信息表
  20. func UpdateSiteInfoDate() error {
  21. id, err := repositories.CreateSiteInfoUpdateInfo()
  22. if err != nil {
  23. return err
  24. }
  25. if err := taskQueue.EnqueueSiteInfoUpdateTask(domain.TaskSiteInfoUpdate{
  26. Id: *id,
  27. }); err != nil {
  28. return err
  29. }
  30. return nil
  31. }
  32. // 获取站点信息表
  33. func QuerySiteInfoDataList(para dto.SiteInfoRequest) (*dto.ResPage[dto.SiteInfoDTO], error) {
  34. res, err := repositories.GetSiteInfoManageList(para.PageNum, para.PageSize, para.Filter, para.Search)
  35. if err != nil {
  36. return nil, err
  37. }
  38. result := dto.ResPage[dto.SiteInfoDTO]{
  39. Data: []dto.SiteInfoDTO{},
  40. PageSize: res.PageSize,
  41. PageNum: res.PageNum,
  42. Total: res.Total,
  43. }
  44. for _, d := range res.Data {
  45. result.Data = append(result.Data, *dto.SiteInfoDomainToSiteInfoDTO(&d))
  46. }
  47. return &result, nil
  48. }
  49. // 导出站点信息表
  50. func ExportSiteInfoDataList(filer *domain.SiteInfoFilter) (*excelize.File, error) {
  51. res, err := repositories.GetSiteInfoManageList(0, 0, filer, "")
  52. if err != nil {
  53. return nil, err
  54. }
  55. record, err := repositories.GetSiteInfoUpdateNewRecord()
  56. if err != nil {
  57. return nil, err
  58. }
  59. // 创建新的excel文件
  60. f := excelize.NewFile()
  61. // 写标题行
  62. f.SetCellValue("Sheet1", "A1", "SN")
  63. f.SetCellValue("Sheet1", "B1", "Installer")
  64. f.SetCellValue("Sheet1", "C1", "ActiveTime")
  65. f.SetCellValue("Sheet1", "D1", "Status")
  66. f.SetCellValue("Sheet1", "E1", "OnLineTime")
  67. f.SetCellValue("Sheet1", "F1", "OffLineTime")
  68. f.SetCellValue("Sheet1", "G1", "FhpSn")
  69. f.SetCellValue("Sheet1", "H1", "Version")
  70. f.SetCellValue("Sheet1", "I1", "SlVersion")
  71. f.SetCellValue("Sheet1", "J1", "SlVersionJson")
  72. f.SetCellValue("Sheet1", "K1", "MeterVersion")
  73. f.SetCellValue("Sheet1", "L1", "MbVersion")
  74. f.SetCellValue("Sheet1", "M1", "AwsVersion")
  75. f.SetCellValue("Sheet1", "N1", "AppVersion")
  76. f.SetCellValue("Sheet1", "O1", "ProtocolVer")
  77. f.SetCellValue("Sheet1", "P1", "SysHdVersion")
  78. f.SetCellValue("Sheet1", "Q1", "Remark")
  79. f.SetCellValue("Sheet1", "R1", "Country")
  80. f.SetCellValue("Sheet1", "S1", "Province")
  81. f.SetCellValue("Sheet1", "T1", "ManufactureDate")
  82. f.SetCellValue("Sheet1", "U1", "HardwareVersion")
  83. f.SetCellValue("Sheet1", "V1", "CveStatus")
  84. f.SetCellValue("Sheet1", "W1", "SecurityPatchLevel")
  85. f.SetCellValue("Sheet1", "X1", "TargetVersion")
  86. f.SetCellValue("Sheet1", "Y1", "LastUpgradeTime")
  87. f.SetCellValue("Sheet1", "Z1", "UpgradeStatus")
  88. f.SetCellValue("Sheet1", "AA1", "Owner/Maintainer")
  89. f.SetCellValue("Sheet1", "AB1", "DataSource")
  90. f.SetCellValue("Sheet1", "AC1", "LastUpdated")
  91. // 写入数据
  92. for i, d := range res.Data {
  93. f.SetCellValue("Sheet1", "A"+strconv.Itoa(i+2), d.Sn)
  94. f.SetCellValue("Sheet1", "B"+strconv.Itoa(i+2), global.Deref(d.InstallerName, ""))
  95. f.SetCellValue("Sheet1", "C"+strconv.Itoa(i+2), d.ActiveTime)
  96. f.SetCellValue("Sheet1", "D"+strconv.Itoa(i+2), d.Status)
  97. f.SetCellValue("Sheet1", "E"+strconv.Itoa(i+2), global.Deref(d.OnLineTime, ""))
  98. f.SetCellValue("Sheet1", "F"+strconv.Itoa(i+2), global.Deref(d.OffLineTime, ""))
  99. f.SetCellValue("Sheet1", "G"+strconv.Itoa(i+2), d.FhpSn)
  100. f.SetCellValue("Sheet1", "H"+strconv.Itoa(i+2), d.Version)
  101. f.SetCellValue("Sheet1", "I"+strconv.Itoa(i+2), d.SlVersion)
  102. f.SetCellValue("Sheet1", "J"+strconv.Itoa(i+2), d.SlVersionJson)
  103. f.SetCellValue("Sheet1", "K"+strconv.Itoa(i+2), global.Deref(d.MeterVersion, ""))
  104. f.SetCellValue("Sheet1", "L"+strconv.Itoa(i+2), global.Deref(d.MbVersion, ""))
  105. f.SetCellValue("Sheet1", "M"+strconv.Itoa(i+2), global.Deref(d.AwsVersion, ""))
  106. f.SetCellValue("Sheet1", "N"+strconv.Itoa(i+2), global.Deref(d.AppVersion, ""))
  107. f.SetCellValue("Sheet1", "O"+strconv.Itoa(i+2), d.ProtocolVer)
  108. f.SetCellValue("Sheet1", "P"+strconv.Itoa(i+2), d.SysHdVersion)
  109. f.SetCellValue("Sheet1", "Q"+strconv.Itoa(i+2), global.Deref(d.Remark, ""))
  110. f.SetCellValue("Sheet1", "R"+strconv.Itoa(i+2), d.Country)
  111. f.SetCellValue("Sheet1", "S"+strconv.Itoa(i+2), d.Province)
  112. var manufactureDate string = ""
  113. if len(d.Sn) > 9 {
  114. year := d.Sn[len(d.Sn)-8 : len(d.Sn)-6]
  115. week := d.Sn[len(d.Sn)-6 : len(d.Sn)-4]
  116. manufactureDate = fmt.Sprintf("%s年%s周", year, week)
  117. }
  118. f.SetCellValue("Sheet1", "T"+strconv.Itoa(i+2), manufactureDate)
  119. f.SetCellValue("Sheet1", "U"+strconv.Itoa(i+2), "V"+strconv.Itoa(d.SysHdVersion))
  120. f.SetCellValue("Sheet1", "V"+strconv.Itoa(i+2), "无")
  121. f.SetCellValue("Sheet1", "W"+strconv.Itoa(i+2), "安全")
  122. f.SetCellValue("Sheet1", "X"+strconv.Itoa(i+2), d.Version)
  123. f.SetCellValue("Sheet1", "Y"+strconv.Itoa(i+2), global.Deref(d.FirmUpgradeTime, ""))
  124. f.SetCellValue("Sheet1", "Z"+strconv.Itoa(i+2), "成功")
  125. f.SetCellValue("Sheet1", "AA"+strconv.Itoa(i+2), "Jerry Liang/LMT")
  126. f.SetCellValue("Sheet1", "AB"+strconv.Itoa(i+2), "Fleetview")
  127. f.SetCellValue("Sheet1", "AC"+strconv.Itoa(i+2), record.UpdateTime.Format(time.DateTime))
  128. }
  129. return f, err
  130. }
  131. // 查询单个站点实时信息(同时更新单个站点数据)
  132. func GetSiteInfoData(sn string) (*dto.SiteInfoDTO, error) {
  133. res, err := repositories.QuerySiteInfoList(dto.SiteInfoPara{
  134. SN: &sn,
  135. PageSize: 10,
  136. PageNum: 1,
  137. })
  138. if err != nil {
  139. return nil, err
  140. }
  141. if res.Result == nil {
  142. return nil, fmt.Errorf("code: %s, msg: %s", strconv.Itoa(res.Code), res.Message)
  143. }
  144. if len(*res.Result) == 0 {
  145. return nil, fmt.Errorf("code: %s, msg: %s", strconv.Itoa(res.Code), res.Message)
  146. }
  147. domainData := domain.FwhSiteInfoToSiteInfoDomain(&(*res.Result)[0])
  148. // 数据插入数据库
  149. if err := repositories.InsertSiteInfoData(*domainData); err != nil {
  150. zap.L().Error("保存站点信息失败", zap.String("err", err.Error()), zap.String("sn", sn))
  151. }
  152. dtoData := dto.SiteInfoDomainToSiteInfoDTO(domainData)
  153. return dtoData, nil
  154. }
  155. // 使能站点xlog
  156. func OperateSiteInfoEnableXlog(ctx context.Context, sn string) (string, error) {
  157. return repositories.FwhMqttEnableXlog(ctx, sn)
  158. }