deviceBaseModel.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package bo
  2. import (
  3. "scd_check_tools/logger"
  4. "scd_check_tools/tools"
  5. "errors"
  6. "log"
  7. "sync"
  8. "github.com/astaxie/beego/orm"
  9. _ "github.com/go-sql-driver/mysql"
  10. )
  11. //设备模型基类对象
  12. //所有设备对象均应从本对象继承
  13. //实例化对象时需要指定ModelTableName属性值,它表示当前模型对应的数据表名称
  14. type DeviceBaseModel struct {
  15. //当前登录用户对象.主要信息key键:userid|name|account|ip
  16. userInfo *sync.Map
  17. //模型对应数据表名称
  18. ModelTableName string
  19. Idseq int64
  20. u_ip string
  21. u_name string
  22. u_account string
  23. u_roleid string
  24. u_userid string
  25. }
  26. var GetLock = sync.RWMutex{}
  27. var GetULock = sync.RWMutex{}
  28. var ReadKey = func(k string, u map[string]interface{}) interface{} {
  29. GetLock.RLock()
  30. defer GetLock.RUnlock()
  31. return u[k]
  32. }
  33. //设置当前用户
  34. func (c *DeviceBaseModel) SetUserInfo(u map[string]interface{}) {
  35. defer func() {
  36. err := recover()
  37. //未发生宕机级别异常时,recover返回nil
  38. if err != nil {
  39. logger.Logger.Error(err)
  40. }
  41. }()
  42. c.userInfo = new(sync.Map)
  43. c.userInfo.Store("u", u)
  44. c.u_ip = tools.IsEmpty(ReadKey("ip", u))
  45. c.u_name = tools.IsEmpty(ReadKey("name", u))
  46. c.u_account = tools.IsEmpty(ReadKey("account", u))
  47. c.u_roleid = tools.IsEmpty(ReadKey("roleid", u))
  48. c.u_userid = tools.IsEmpty(ReadKey("userid", u))
  49. }
  50. //获取当前用户
  51. func (c *DeviceBaseModel) GetUserInfo() map[string]interface{} {
  52. if c.userInfo == nil {
  53. return nil
  54. }
  55. GetULock.RLock()
  56. defer func() {
  57. GetULock.RUnlock()
  58. err := recover()
  59. //未发生宕机级别异常时,recover返回nil
  60. if err != nil {
  61. logger.Logger.Error(err)
  62. }
  63. }()
  64. vobj, _ := c.userInfo.Load("u")
  65. newObj := make(map[string]interface{}) //拷贝一个新对象
  66. for k, v := range vobj.(map[string]interface{}) {
  67. newObj[k] = v
  68. }
  69. return newObj
  70. }
  71. //获取当前用户角色ID
  72. func (c *DeviceBaseModel) GetUserRoleId() string {
  73. return c.u_roleid
  74. }
  75. //获取当前用户ID
  76. func (c *DeviceBaseModel) GetUserId() string {
  77. return c.u_userid
  78. }
  79. //获取当前用户名称
  80. func (c *DeviceBaseModel) GetUserName() string {
  81. return c.u_name
  82. }
  83. //获取当前用户IP
  84. func (c *DeviceBaseModel) GetIP() string {
  85. return c.u_ip
  86. }
  87. //获取当前用户帐号
  88. func (c *DeviceBaseModel) GetAccount() string {
  89. return c.u_account
  90. }
  91. func (c *DeviceBaseModel) GetID() int64 {
  92. c.Idseq = c.Idseq + 1
  93. return c.Idseq
  94. }
  95. /**
  96. * @description:模型初始化
  97. * @param 初始化参数
  98. * @return void
  99. */
  100. func (c *DeviceBaseModel) Init(param ...map[string]interface{}) {
  101. c.GetTableName()
  102. }
  103. /**
  104. * @description: 返回设备表名称
  105. * @return {设备表名称}
  106. */
  107. func (c *DeviceBaseModel) GetTableName() string {
  108. return c.ModelTableName
  109. }
  110. //根据区域统计所有下级区域的设备数量
  111. func (c *DeviceBaseModel) StatCountByParentArea(id string) ([]orm.Params, error) {
  112. if c.GetTableName() == "" {
  113. return nil, errors.New("未指定模型表名称!")
  114. }
  115. o := orm.NewOrm()
  116. var sqlCommandText = "select b.area_id,count(1) cnt,case when count(1)>0 then 'true' else 'true' end isParent from t_data_area a ," + c.ModelTableName + " b where a.id=b.area_id and a.pid=? GROUP BY b.area_id;"
  117. var tableData []orm.Params
  118. _, err := o.Raw(sqlCommandText, id).Values(&tableData)
  119. if err != nil {
  120. log.Println(err)
  121. }
  122. return tableData, err
  123. }