123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- 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")
- }
|