user_area.go 6.7 KB

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