user_area.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package bo
  2. import (
  3. "fmt"
  4. "log"
  5. "scd_check_tools/global"
  6. "scd_check_tools/logger"
  7. "scd_check_tools/models/enum"
  8. "scd_check_tools/tools"
  9. "strconv"
  10. "strings"
  11. "sync"
  12. "github.com/astaxie/beego/orm"
  13. )
  14. //用户-区域关系对象
  15. type UserAreaRelationObject struct {
  16. Model T_relation_user_area
  17. UserInfo sync.Map
  18. }
  19. //用户-区域关系模型
  20. type T_relation_user_area struct {
  21. Id int `orm:"pk"`
  22. Userid int
  23. Areaid int
  24. Ct string
  25. Cr int
  26. }
  27. func init() {
  28. orm.RegisterModel(new(T_relation_user_area))
  29. }
  30. func (c *UserAreaRelationObject) SetUserInfo(u map[string]interface{}) {
  31. c.UserInfo.Store("_uinfo", u)
  32. }
  33. func (c *UserAreaRelationObject) GetUserInfo() map[string]interface{} {
  34. u, _ := c.UserInfo.Load("_uinfo")
  35. if u == nil {
  36. return nil
  37. }
  38. return u.(map[string]interface{})
  39. }
  40. func (c *UserAreaRelationObject) GetUserInfoItem(key string) string {
  41. u, _ := c.UserInfo.Load("_uinfo")
  42. if u == nil {
  43. return ""
  44. }
  45. return tools.IsEmpty(u.(map[string]interface{})[key])
  46. }
  47. func (c *UserAreaRelationObject) Save() error {
  48. dblog := new(SystemLog)
  49. dblog.SetUserInfo(c.GetUserInfo())
  50. dblog.Audittype = enum.AuditType_admin_station
  51. dblog.Logtype = enum.LogType_bind
  52. dblog.Eventtype = enum.OptEventType_Bus
  53. dblog.Eventlevel = enum.OptEventLevel_Hight
  54. o := orm.NewOrm()
  55. var err error
  56. if c.Model.Id == 0 {
  57. c.Model.Ct = tools.NowTime()
  58. c.Model.Cr, _ = strconv.Atoi(c.GetUserInfoItem("userid"))
  59. _, err = o.Insert(&c.Model)
  60. } else {
  61. dblog.Logtype = enum.LogType_Update
  62. c.Model.Ct = tools.NowTime()
  63. c.Model.Cr, _ = strconv.Atoi(c.GetUserInfoItem("userid"))
  64. _, err = o.Update(&c.Model)
  65. }
  66. if err != nil {
  67. logger.Logger.Error(err)
  68. dblog.Description = fmt.Sprintf("保存用户区域绑定关系失败,操作数据:%+v", c.Model)
  69. dblog.Fail2()
  70. } else {
  71. dblog.Description = fmt.Sprintf("保存用户区域绑定关系成功,操作数据:%+v", c.Model)
  72. dblog.Success2()
  73. }
  74. return err
  75. }
  76. //将节点下的所有节点绑定到用户
  77. func (c *UserAreaRelationObject) AppendNodeAll(uid int, nodeid int) error {
  78. o := orm.NewOrm()
  79. 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=?),'%')"
  80. _, err := o.Raw(sql, uid, c.GetUserInfoItem("userid"), nodeid).Exec()
  81. if err != nil {
  82. log.Println(err)
  83. }
  84. return err
  85. }
  86. //删除信息
  87. func (c *UserAreaRelationObject) Delete() error {
  88. dblog := new(SystemLog)
  89. dblog.SetUserInfo(c.GetUserInfo())
  90. dblog.Audittype = enum.AuditType_admin_system_user
  91. dblog.Logtype = enum.LogType_Delete
  92. dblog.Eventtype = enum.OptEventType_Bus
  93. dblog.Eventlevel = enum.OptEventLevel_Hight
  94. o := orm.NewOrm()
  95. var sqlCommandText = "delete from t_relation_user_area where id=?"
  96. var err error
  97. if c.Model.Id > 0 {
  98. _, err = o.Raw(sqlCommandText, c.Model.Id).Exec()
  99. } else if c.Model.Areaid == 0 {
  100. sqlCommandText = "delete from t_relation_user_area where userid=? "
  101. _, err = o.Raw(sqlCommandText, c.Model.Userid).Exec()
  102. } else {
  103. sqlCommandText = "delete from t_relation_user_area where userid=? and areaid=?"
  104. _, err = o.Raw(sqlCommandText, c.Model.Userid, c.Model.Areaid).Exec()
  105. }
  106. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, c.Model)
  107. if err != nil {
  108. logger.Logger.Error(err, dblog.Description)
  109. dblog.Fail2()
  110. } else {
  111. dblog.Success2()
  112. }
  113. return err
  114. }
  115. func (c *UserAreaRelationObject) List() ([]orm.Params, error) {
  116. dblog := new(SystemLog)
  117. dblog.SetUserInfo(c.GetUserInfo())
  118. dblog.Audittype = enum.AuditType_admin_system_user
  119. dblog.Logtype = enum.LogType_Query
  120. dblog.Eventtype = enum.OptEventType_Bus
  121. dblog.Eventlevel = enum.OptEventLevel_Low
  122. o := orm.NewOrm()
  123. var sqlCommandText string
  124. var sqlParameter []interface{}
  125. var sqlCondition []string
  126. sqlCommandText = "select a.*,b.area_name,b.area_code from t_relation_user_area a ,t_data_area b where a.areaid=b.id"
  127. if c.Model.Userid > 0 {
  128. sqlCondition = append(sqlCondition, "a.userid=?")
  129. sqlParameter = append(sqlParameter, c.Model.Userid)
  130. }
  131. if c.Model.Areaid > 0 {
  132. sqlCondition = append(sqlCondition, "a.areaid=?")
  133. sqlParameter = append(sqlParameter, c.Model.Areaid)
  134. }
  135. if len(sqlCondition) > 0 {
  136. sqlCommandText += " and " + strings.Join(sqlCondition, " and ")
  137. }
  138. sqlCommandText += " order by a.id "
  139. var tableData []orm.Params
  140. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData)
  141. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, sqlParameter)
  142. if err != nil {
  143. logger.Logger.Error(err, dblog.Description)
  144. dblog.Fail2()
  145. } else {
  146. dblog.Success2()
  147. }
  148. return tableData, err
  149. }
  150. //生成根据当前用户过虑区域的查询条件
  151. func (c *UserAreaRelationObject) MakeAreaFilerIds(areaColCode string, isAnd ...string) string {
  152. key := "global_code_" + c.GetUserInfoItem("role")
  153. item, h := global.GoCahce.Get(key)
  154. if h {
  155. item2 := item.(orm.Params)
  156. userrole := tools.IsEmpty(item2["code"])
  157. //系统管理员或超级管理员
  158. if userrole == "role_superadmin" || userrole == "role_sysadmin" {
  159. return ""
  160. }
  161. }
  162. and := "and"
  163. if len(isAnd) > 0 {
  164. and = isAnd[0]
  165. }
  166. uid := c.GetUserInfoItem("userid")
  167. if uid == "" {
  168. return " " + and + " " + areaColCode + "=-1"
  169. }
  170. o := orm.NewOrm()
  171. sql := "select areaid from t_relation_user_area where userid=" + uid
  172. vallues := []orm.Params{}
  173. _, err := o.Raw(sql).Values(&vallues)
  174. if err != nil {
  175. logger.Logger.Error(err, fmt.Sprintf("SQL:+%s", sql))
  176. return " " + and + " " + areaColCode + "=-1"
  177. }
  178. if len(vallues) > 0 {
  179. ids := []string{}
  180. for _, row := range vallues {
  181. ids = append(ids, row["areaid"].(string))
  182. }
  183. return " " + and + " " + areaColCode + " in (" + strings.Join(ids, ",") + ")"
  184. } else {
  185. return " " + and + " " + areaColCode + "=-1"
  186. }
  187. }
  188. //生成根据当前用户过虑区域的查询条件
  189. func (c *UserAreaRelationObject) MakeAreaFilerWhere(areaColCode string, isAnd ...string) string {
  190. key := "global_code_" + c.GetUserInfoItem("role")
  191. item, h := global.GoCahce.Get(key)
  192. if h {
  193. item2 := item.(orm.Params)
  194. userrole := tools.IsEmpty(item2["code"])
  195. //系统管理员或超级管理员
  196. if userrole == "role_superadmin" || userrole == "role_sysadmin" {
  197. return ""
  198. }
  199. }
  200. and := "and"
  201. if len(isAnd) > 0 {
  202. and = isAnd[0]
  203. }
  204. return " " + and + " " + areaColCode + " in (select areaid from t_relation_user_area where userid=" + c.GetUserInfoItem("userid") + ")"
  205. }
  206. //生成根据当前用户过虑区域的查询子表
  207. //子表仅返回当前人员权限范围内的区域ID
  208. func (c *UserAreaRelationObject) MakeAreaFilerTable(areacode ...string) string {
  209. key := "global_code_" + c.GetUserInfoItem("role")
  210. item, h := global.GoCahce.Get(key)
  211. if h {
  212. item2 := item.(orm.Params)
  213. userrole := tools.IsEmpty(item2["code"])
  214. //系统管理员或超级管理员
  215. if userrole == "role_superadmin" || userrole == "role_sysadmin" {
  216. if len(areacode) > 0 && areacode[0] != "" {
  217. return " select id from t_data_area where AREA_CODE like '" + areacode[0] + "%'"
  218. }
  219. return " select id from t_data_area "
  220. }
  221. }
  222. if len(areacode) > 0 && areacode[0] != "" {
  223. 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")
  224. }
  225. return " select areaid id from t_relation_user_area where userid=" + c.GetUserInfoItem("userid")
  226. }