package bo import ( "fmt" "log" "scd_check_tools/global" "scd_check_tools/logger" "scd_check_tools/models/enum" "scd_check_tools/tools" "strconv" "strings" "sync" "github.com/astaxie/beego/orm" ) //用户-区域关系对象 type UserAreaRelationObject struct { Model T_relation_user_area UserInfo sync.Map } //用户-区域关系模型 type T_relation_user_area struct { Id int `orm:"pk"` Userid int Areaid int Ct string Cr int } func init() { orm.RegisterModel(new(T_relation_user_area)) } func (c *UserAreaRelationObject) SetUserInfo(u map[string]interface{}) { c.UserInfo.Store("_uinfo", u) } func (c *UserAreaRelationObject) GetUserInfo() map[string]interface{} { u, _ := c.UserInfo.Load("_uinfo") if u == nil { return nil } return u.(map[string]interface{}) } func (c *UserAreaRelationObject) GetUserInfoItem(key string) string { u, _ := c.UserInfo.Load("_uinfo") if u == nil { return "" } return tools.IsEmpty(u.(map[string]interface{})[key]) } func (c *UserAreaRelationObject) Save() error { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_admin_station dblog.Logtype = enum.LogType_bind dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight o := orm.NewOrm() var err error if c.Model.Id == 0 { c.Model.Ct = tools.NowTime() c.Model.Cr, _ = strconv.Atoi(c.GetUserInfoItem("userid")) _, err = o.Insert(&c.Model) } else { dblog.Logtype = enum.LogType_Update c.Model.Ct = tools.NowTime() c.Model.Cr, _ = strconv.Atoi(c.GetUserInfoItem("userid")) _, err = o.Update(&c.Model) } if err != nil { logger.Logger.Error(err) dblog.Description = fmt.Sprintf("保存用户区域绑定关系失败,操作数据:%+v", c.Model) dblog.Fail2() } else { dblog.Description = fmt.Sprintf("保存用户区域绑定关系成功,操作数据:%+v", c.Model) dblog.Success2() } return err } //将节点下的所有节点绑定到用户 func (c *UserAreaRelationObject) AppendNodeAll(uid int, nodeid int) error { o := orm.NewOrm() sql := "insert into t_relation_user_area(userid,areaid,ct,cr) select ?,id,now(),? from t_data_area where AREA_CODE like concat((select area_code from t_data_area where id=?),'%')" _, err := o.Raw(sql, uid, c.GetUserInfoItem("userid"), nodeid).Exec() if err != nil { log.Println(err) } return err } //删除信息 func (c *UserAreaRelationObject) Delete() error { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_admin_system_user dblog.Logtype = enum.LogType_Delete dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Hight o := orm.NewOrm() var sqlCommandText = "delete from t_relation_user_area where id=?" var err error if c.Model.Id > 0 { _, err = o.Raw(sqlCommandText, c.Model.Id).Exec() } else if c.Model.Areaid == 0 { sqlCommandText = "delete from t_relation_user_area where userid=? " _, err = o.Raw(sqlCommandText, c.Model.Userid).Exec() } else { sqlCommandText = "delete from t_relation_user_area where userid=? and areaid=?" _, err = o.Raw(sqlCommandText, c.Model.Userid, c.Model.Areaid).Exec() } dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, c.Model) if err != nil { logger.Logger.Error(err, dblog.Description) dblog.Fail2() } else { dblog.Success2() } return err } func (c *UserAreaRelationObject) List() ([]orm.Params, error) { dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_admin_system_user dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Low o := orm.NewOrm() var sqlCommandText string var sqlParameter []interface{} var sqlCondition []string sqlCommandText = "select a.*,b.area_name,b.area_code from t_relation_user_area a ,t_data_area b where a.areaid=b.id" if c.Model.Userid > 0 { sqlCondition = append(sqlCondition, "a.userid=?") sqlParameter = append(sqlParameter, c.Model.Userid) } if c.Model.Areaid > 0 { sqlCondition = append(sqlCondition, "a.areaid=?") sqlParameter = append(sqlParameter, c.Model.Areaid) } if len(sqlCondition) > 0 { sqlCommandText += " and " + strings.Join(sqlCondition, " and ") } sqlCommandText += " order by a.id " var tableData []orm.Params _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData) dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, sqlParameter) if err != nil { logger.Logger.Error(err, dblog.Description) dblog.Fail2() } else { dblog.Success2() } return tableData, err } //生成根据当前用户过虑区域的查询条件 func (c *UserAreaRelationObject) MakeAreaFilerIds(areaColCode string, isAnd ...string) string { key := "global_code_" + c.GetUserInfoItem("role") item, h := global.GoCahce.Get(key) if h { item2 := item.(orm.Params) userrole := tools.IsEmpty(item2["code"]) //系统管理员或超级管理员 if userrole == "role_superadmin" || userrole == "role_sysadmin" { return "" } } and := "and" if len(isAnd) > 0 { and = isAnd[0] } uid := c.GetUserInfoItem("userid") if uid == "" { return " " + and + " " + areaColCode + "=-1" } o := orm.NewOrm() sql := "select areaid from t_relation_user_area where userid=" + uid vallues := []orm.Params{} _, err := o.Raw(sql).Values(&vallues) if err != nil { logger.Logger.Error(err, fmt.Sprintf("SQL:+%s", sql)) return " " + and + " " + areaColCode + "=-1" } if len(vallues) > 0 { ids := []string{} for _, row := range vallues { ids = append(ids, row["areaid"].(string)) } return " " + and + " " + areaColCode + " in (" + strings.Join(ids, ",") + ")" } else { return " " + and + " " + areaColCode + "=-1" } } //生成根据当前用户过虑区域的查询条件 func (c *UserAreaRelationObject) MakeAreaFilerWhere(areaColCode string, isAnd ...string) string { key := "global_code_" + c.GetUserInfoItem("role") item, h := global.GoCahce.Get(key) if h { item2 := item.(orm.Params) userrole := tools.IsEmpty(item2["code"]) //系统管理员或超级管理员 if userrole == "role_superadmin" || userrole == "role_sysadmin" { return "" } } and := "and" if len(isAnd) > 0 { and = isAnd[0] } return " " + and + " " + areaColCode + " in (select areaid from t_relation_user_area where userid=" + c.GetUserInfoItem("userid") + ")" } //生成根据当前用户过虑区域的查询子表 //子表仅返回当前人员权限范围内的区域ID func (c *UserAreaRelationObject) MakeAreaFilerTable(areacode ...string) string { key := "global_code_" + c.GetUserInfoItem("role") item, h := global.GoCahce.Get(key) if h { item2 := item.(orm.Params) userrole := tools.IsEmpty(item2["code"]) //系统管理员或超级管理员 if userrole == "role_superadmin" || userrole == "role_sysadmin" { if len(areacode) > 0 && areacode[0] != "" { return " select id from t_data_area where AREA_CODE like '" + areacode[0] + "%'" } return " select id from t_data_area " } } if len(areacode) > 0 && areacode[0] != "" { return " select b.id from t_relation_user_area a,t_data_area b where a.areaid=b.id and b.AREA_CODE like '" + areacode[0] + "%' and a.userid=" + c.GetUserInfoItem("userid") } return " select areaid id from t_relation_user_area where userid=" + c.GetUserInfoItem("userid") }