meter_calc.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package iotReportProtocol
  2. import (
  3. "IotAdmin/common/global"
  4. "IotAdmin/core/logger"
  5. "IotAdmin/core/sdk"
  6. iotInterface "IotAdmin/iot/interface"
  7. iotMap "IotAdmin/iot/map"
  8. iotProtocol "IotAdmin/iot/protocol"
  9. iotStruct "IotAdmin/iot/struct"
  10. "IotAdmin/iot/struct/electric"
  11. "encoding/json"
  12. "errors"
  13. "strconv"
  14. "time"
  15. )
  16. func getMeterElectricCalc(cfg *iotStruct.SlaveConfig) (calc iotInterface.MeterCalcHandler, tms int, err error) {
  17. now := time.Now()
  18. today, _ := strconv.Atoi(now.Format("20060102"))
  19. tms = today
  20. if x, ok := iotMap.MapMeterCalc.Get(cfg.No); ok {
  21. calc = *x
  22. } else {
  23. calc, err = GetMeterCalcHandler(cfg.Protocol, cfg.No, today, "", cfg.OtherConfig)
  24. }
  25. return
  26. }
  27. // GetMeterCalcHandler 获取表计协议计算处理器
  28. func GetMeterCalcHandler(protocol string, id string, time int, calc, cfg string) (handler iotInterface.MeterCalcHandler, err error) {
  29. switch protocol {
  30. case iotProtocol.MeterElAdw300:
  31. handler, err = electric.NewMeterADW300(id, time, calc, cfg)
  32. case iotProtocol.MeterElPmc350b:
  33. handler, err = electric.NewMeterPMC350B(id, time, calc, cfg)
  34. default:
  35. err = errors.New("not support protocol")
  36. }
  37. return
  38. }
  39. func updateMeterCalc(elMeter electric.MeterElectric, calc *iotInterface.MeterCalcHandler) {
  40. q := sdk.Runtime.GetMemoryQueue("")
  41. data, err := json.Marshal(elMeter)
  42. if err != nil {
  43. logger.Errorf("更新电表计算参数失败: %s", err.Error())
  44. return
  45. }
  46. mp := make(map[string]interface{})
  47. mp["data"] = string(data)
  48. mp["id"] = elMeter.Id
  49. mp["time"] = elMeter.Time
  50. message, err := sdk.Runtime.GetStreamMessage("", global.UpdateMeterCalc, mp)
  51. if err != nil {
  52. logger.Errorf("构建更新表计计算参数 message [%s]失败: %v", global.UpdateMeterCalc, err)
  53. return
  54. }
  55. err = q.Append(message)
  56. if err != nil {
  57. return
  58. }
  59. iotMap.MapMeterCalc.Add(elMeter.Id, calc)
  60. }