123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package bo
- import (
- "scd_check_tools/logger"
- "scd_check_tools/tools"
- "errors"
- "log"
- "sync"
- "github.com/astaxie/beego/orm"
- _ "github.com/go-sql-driver/mysql"
- )
- //设备模型基类对象
- //所有设备对象均应从本对象继承
- //实例化对象时需要指定ModelTableName属性值,它表示当前模型对应的数据表名称
- type DeviceBaseModel struct {
- //当前登录用户对象.主要信息key键:userid|name|account|ip
- userInfo *sync.Map
- //模型对应数据表名称
- ModelTableName string
- Idseq int64
- u_ip string
- u_name string
- u_account string
- u_roleid string
- u_userid string
- }
- var GetLock = sync.RWMutex{}
- var GetULock = sync.RWMutex{}
- var ReadKey = func(k string, u map[string]interface{}) interface{} {
- GetLock.RLock()
- defer GetLock.RUnlock()
- return u[k]
- }
- //设置当前用户
- func (c *DeviceBaseModel) SetUserInfo(u map[string]interface{}) {
- defer func() {
- err := recover()
- //未发生宕机级别异常时,recover返回nil
- if err != nil {
- logger.Logger.Error(err)
- }
- }()
- c.userInfo = new(sync.Map)
- c.userInfo.Store("u", u)
- c.u_ip = tools.IsEmpty(ReadKey("ip", u))
- c.u_name = tools.IsEmpty(ReadKey("name", u))
- c.u_account = tools.IsEmpty(ReadKey("account", u))
- c.u_roleid = tools.IsEmpty(ReadKey("roleid", u))
- c.u_userid = tools.IsEmpty(ReadKey("userid", u))
- }
- //获取当前用户
- func (c *DeviceBaseModel) GetUserInfo() map[string]interface{} {
- if c.userInfo == nil {
- return nil
- }
- GetULock.RLock()
- defer func() {
- GetULock.RUnlock()
- err := recover()
- //未发生宕机级别异常时,recover返回nil
- if err != nil {
- logger.Logger.Error(err)
- }
- }()
- vobj, _ := c.userInfo.Load("u")
- newObj := make(map[string]interface{}) //拷贝一个新对象
- for k, v := range vobj.(map[string]interface{}) {
- newObj[k] = v
- }
- return newObj
- }
- //获取当前用户角色ID
- func (c *DeviceBaseModel) GetUserRoleId() string {
- return c.u_roleid
- }
- //获取当前用户ID
- func (c *DeviceBaseModel) GetUserId() string {
- return c.u_userid
- }
- //获取当前用户名称
- func (c *DeviceBaseModel) GetUserName() string {
- return c.u_name
- }
- //获取当前用户IP
- func (c *DeviceBaseModel) GetIP() string {
- return c.u_ip
- }
- //获取当前用户帐号
- func (c *DeviceBaseModel) GetAccount() string {
- return c.u_account
- }
- func (c *DeviceBaseModel) GetID() int64 {
- c.Idseq = c.Idseq + 1
- return c.Idseq
- }
- /**
- * @description:模型初始化
- * @param 初始化参数
- * @return void
- */
- func (c *DeviceBaseModel) Init(param ...map[string]interface{}) {
- c.GetTableName()
- }
- /**
- * @description: 返回设备表名称
- * @return {设备表名称}
- */
- func (c *DeviceBaseModel) GetTableName() string {
- return c.ModelTableName
- }
- //根据区域统计所有下级区域的设备数量
- func (c *DeviceBaseModel) StatCountByParentArea(id string) ([]orm.Params, error) {
- if c.GetTableName() == "" {
- return nil, errors.New("未指定模型表名称!")
- }
- o := orm.NewOrm()
- 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;"
- var tableData []orm.Params
- _, err := o.Raw(sqlCommandText, id).Values(&tableData)
- if err != nil {
- log.Println(err)
- }
- return tableData, err
- }
|