user.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. package bo
  2. import (
  3. "crypto/md5"
  4. "errors"
  5. "fmt"
  6. "rtzh_elec_temperature/enum"
  7. "rtzh_elec_temperature/logger"
  8. "rtzh_elec_temperature/tools"
  9. "strconv"
  10. "strings"
  11. "github.com/astaxie/beego/orm"
  12. _ "github.com/astaxie/beego/orm"
  13. )
  14. type T_data_user struct {
  15. Id int `orm:"pk;auto"`
  16. Name string `orm:"size(20)"`
  17. Account string `orm:"size(20)"`
  18. Pwd string `orm:"size(256)"`
  19. PwdExpire string
  20. Mobilephone string
  21. Role int
  22. BindIps string
  23. DatelimitStart string
  24. DatelimitEnd string
  25. Memo string
  26. Createtime string
  27. Createuser int
  28. }
  29. type T_data_user_func struct {
  30. Id int `orm:"pk"`
  31. Userid int
  32. Funccode string
  33. }
  34. func init() {
  35. orm.RegisterModel(new(T_data_user))
  36. orm.RegisterModel(new(T_data_user_func))
  37. }
  38. func SaveUser(dataobj T_data_user, userinfo map[string]interface{}) (result int64, err error) {
  39. opt := "创建"
  40. if dataobj.Id > 0 {
  41. opt = "编辑"
  42. }
  43. dblog := new(SystemLog)
  44. dblog.UserInfo = userinfo
  45. dblog.Audittype = enum.AuditType_admin_system_user
  46. dblog.Logtype = enum.LogType_Insert
  47. dblog.Eventtype = enum.OptEventType_Bus
  48. dblog.Eventlevel = enum.OptEventLevel_Hight
  49. if dataobj.Account == "admin" {
  50. dblog.Description = opt + "用户失败:帐号admin已存在"
  51. dblog.Fail2()
  52. return 0, errors.New("帐号admin已存在")
  53. }
  54. has, err2 := checkUserAccount(dataobj)
  55. if !has || err2 != nil {
  56. dblog.Description = opt + "用户失败:" + err2.Error()
  57. dblog.Fail2()
  58. return 0, err2
  59. }
  60. o := orm.NewOrm()
  61. var id int64
  62. if dataobj.Id == 0 {
  63. id, err = o.Insert(&dataobj)
  64. } else {
  65. id, err = o.Update(&dataobj)
  66. }
  67. if err == nil {
  68. dblog.Description = opt + "用户成功!"
  69. dblog.Success2()
  70. } else {
  71. dblog.Description = opt + "用户失败:" + err.Error()
  72. dblog.Fail2()
  73. logger.Logger.Error(err, fmt.Sprintf("操作数据:%+v", dataobj))
  74. }
  75. return id, err
  76. }
  77. func SavePwd(dataobj T_data_user, userinfo map[string]interface{}) (result int64, err error) {
  78. dblog := new(SystemLog)
  79. dblog.UserInfo = userinfo
  80. dblog.Audittype = enum.AuditType_admin_system_user
  81. dblog.Logtype = enum.LogType_changepassword
  82. dblog.Eventtype = enum.OptEventType_Bus
  83. dblog.Eventlevel = enum.OptEventLevel_Hight
  84. o := orm.NewOrm()
  85. newPwd := dataobj.Pwd
  86. e := o.Read(&dataobj)
  87. if e != nil || e == orm.ErrNoRows {
  88. dblog.Description = fmt.Sprintf("用户%d重置密码失败:%s", dataobj.Id, e.Error())
  89. dblog.Fail2()
  90. return 0, errors.New("无效的用户ID")
  91. }
  92. if len(newPwd) > 20 {
  93. newPwd = tools.OriginalCode(newPwd)
  94. }
  95. has := md5.Sum([]byte(newPwd))
  96. newPwd = fmt.Sprintf("%x", has)
  97. dataobj.Pwd = newPwd
  98. var id int64
  99. id, err = o.Update(&dataobj)
  100. if err != nil {
  101. logger.Logger.Error(err)
  102. dblog.Description = fmt.Sprintf("用户%s重置密码失败:%s", dataobj.Name, e.Error())
  103. dblog.Fail2()
  104. return 0, err
  105. }
  106. dblog.Description = fmt.Sprintf("用户重置密码成功|%s", dataobj.Name)
  107. dblog.Success2()
  108. return id, err
  109. }
  110. func AuthUser(account string, pwd string) (result int64, err error) {
  111. var obj = T_data_user{Account: account}
  112. o := orm.NewOrm()
  113. has := o.QueryTable("t_data_user")
  114. has.Filter("account", account).One(&obj)
  115. if obj.Id > 0 {
  116. tmpValuePart := strings.Split(pwd, "0000")
  117. pwdpart := strings.Split(obj.Pwd, "0000")
  118. fmt.Println(pwdpart[1])
  119. fmt.Println(tmpValuePart[1])
  120. if pwdpart[1] == tmpValuePart[1] {
  121. return int64(obj.Id), nil
  122. }
  123. return 0, nil
  124. } else {
  125. //判断是否是管理员
  126. var er2 error
  127. var tmpValue string
  128. tmpValue, er2 = GetSysParamValue("admin_account", "")
  129. if er2 != nil {
  130. return 0, er2
  131. }
  132. if tmpValue == account {
  133. tmpValue, er2 = GetSysParamValue("admin_pwd", "")
  134. if er2 != nil {
  135. return 0, er2
  136. }
  137. tmpValuePart := strings.Split(tmpValue, "0000")
  138. pwdpart := strings.Split(pwd, "0000")
  139. if tmpValuePart[1] == pwdpart[1] {
  140. return 9999, nil
  141. }
  142. }
  143. return 0, er2
  144. }
  145. }
  146. func checkUserAccount(bo T_data_user) (bool, error) {
  147. if tools.IsEmpty(bo.Account) == "" {
  148. return false, errors.New("用户帐号不能为空")
  149. }
  150. o := orm.NewOrm()
  151. sql := "select id from t_data_user where account=?"
  152. var maps []orm.Params
  153. num, err := o.Raw(sql, bo.Account).Values(&maps)
  154. if err != nil {
  155. return false, err
  156. }
  157. if num > 0 {
  158. var oldid = 0
  159. for _, term := range maps {
  160. oldid, _ = strconv.Atoi(term["id"].(string))
  161. }
  162. if bo.Id > 0 && bo.Id != oldid {
  163. return false, errors.New("帐号已存在")
  164. } else if bo.Id == 0 {
  165. return false, errors.New("帐号已存在")
  166. }
  167. }
  168. return true, nil
  169. }
  170. func QueryUserList(param map[string]interface{}, dataobj T_data_user, userinfo map[string]interface{}) (data map[string]interface{}, err error) {
  171. o := orm.NewOrm()
  172. var dberr error
  173. var maps = map[string]interface{}{}
  174. querycondtion := param["datatable"].(map[string]interface{})
  175. var paramvalues = []interface{}{}
  176. var sqls = []string{}
  177. sqlcolnum := "select *,(select ifnull(count(0),0) cnt from t_data_user_func b where a.id=b.userid ) privcount FROM t_data_user a WHERE 1=1"
  178. sqltotal := "select count(1) cnt FROM t_data_user WHERE 1=1"
  179. sqls = append(sqls, " and not exist(select 1 from global_const_code where a.role=id and code='role_superadmin')")
  180. if dataobj.Id > 0 {
  181. sqls = append(sqls, " and a.id=?")
  182. paramvalues = append(paramvalues, dataobj.Id)
  183. }
  184. if name, ok2 := querycondtion["name"]; ok2 && tools.IsEmpty(name) != "" {
  185. sqls = append(sqls, " and a.name like like %?%")
  186. paramvalues = append(paramvalues, name)
  187. }
  188. if account, ok3 := querycondtion["account"]; ok3 && tools.IsEmpty(account) != "" {
  189. sqls = append(sqls, " and a.account like %?%")
  190. paramvalues = append(paramvalues, account)
  191. }
  192. limitStr, meta := tools.ParsePaginationToSqlPart(param)
  193. datas := []orm.Params{}
  194. sql := sqlcolnum + strings.Join(sqls, " ") + limitStr
  195. _, dberr = o.Raw(sql, paramvalues).Values(&datas)
  196. dblog := new(SystemLog)
  197. dblog.UserInfo = userinfo
  198. dblog.Audittype = enum.AuditType_admin_system_user
  199. dblog.Logtype = enum.LogType_Query
  200. dblog.Eventtype = enum.OptEventType_Bus
  201. dblog.Eventlevel = enum.OptEventLevel_Low
  202. sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, paramvalues)
  203. if dberr != nil {
  204. logger.Logger.Error(dberr)
  205. dblog.Description = sqllog
  206. dblog.Fail2()
  207. return nil, dberr
  208. } else {
  209. dblog.Description = sqllog
  210. dblog.Success2()
  211. }
  212. //查询数据记录数
  213. ts := []orm.Params{}
  214. _, dberr = o.Raw(sqltotal+strings.Join(sqls, " "), paramvalues).Values(&ts)
  215. for _, v := range ts {
  216. meta["total"], _ = strconv.Atoi(v["cnt"].(string))
  217. }
  218. if dberr == nil {
  219. maps["meta"] = meta
  220. if datas == nil || len(datas) == 0 {
  221. maps["data"] = ""
  222. } else {
  223. maps["data"] = datas
  224. }
  225. return maps, nil
  226. }
  227. return nil, dberr
  228. }
  229. func QueryUserPrivList(dataobj T_data_user_func, userinfo map[string]interface{}) (data map[string]interface{}, err error) {
  230. if dataobj.Userid == 0 {
  231. return nil, errors.New("用户ID不能为空")
  232. }
  233. o := orm.NewOrm()
  234. var dberr error
  235. var maps = map[string]interface{}{}
  236. datas := []orm.Params{}
  237. sql := "select a.*,b.name funcname FROM t_data_user_func a,global_const_code b WHERE a.funccode=b.code and b.parentcode='userpriv' and a.userid=? "
  238. _, dberr = o.Raw(sql, dataobj.Userid).Values(&datas)
  239. dblog := new(SystemLog)
  240. dblog.UserInfo = userinfo
  241. dblog.Audittype = enum.AuditType_admin_system_userrole
  242. dblog.Logtype = enum.LogType_Query
  243. dblog.Eventtype = enum.OptEventType_Bus
  244. dblog.Eventlevel = enum.OptEventLevel_Low
  245. sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, dataobj)
  246. if dberr != nil {
  247. logger.Logger.Error(dberr)
  248. dblog.Description = sqllog
  249. dblog.Fail2()
  250. return nil, dberr
  251. } else {
  252. dblog.Description = sqllog
  253. dblog.Success2()
  254. maps["data"] = datas
  255. return maps, nil
  256. }
  257. return nil, dberr
  258. }
  259. func SaveUserPrivList(uid int, policyids string, userinfo map[string]interface{}) (result int, err error) {
  260. if uid == 0 {
  261. return 0, errors.New("用户ID不能为空")
  262. }
  263. dblog := new(SystemLog)
  264. dblog.UserInfo = userinfo
  265. dblog.Audittype = enum.AuditType_admin_system_userrole
  266. dblog.Logtype = enum.LogType_Update
  267. dblog.Eventtype = enum.OptEventType_Bus
  268. dblog.Eventlevel = enum.OptEventLevel_Hight
  269. o := orm.NewOrm()
  270. _, err = o.Raw("delete from t_data_user_func where userid=?", uid).Exec()
  271. if err != nil {
  272. dblog.Description = fmt.Sprintf("用户%d权限设置失败:%s", uid, err.Error())
  273. dblog.Fail2()
  274. return 0, err
  275. }
  276. ids := strings.Split(policyids, ",")
  277. dataobj := T_data_user_func{Userid: uid}
  278. for _, code := range ids {
  279. if tools.IsEmpty(code) == "" {
  280. continue
  281. }
  282. dataobj.Funccode = code
  283. newid, err2 := o.Insert(&dataobj)
  284. if err2 != nil {
  285. logger.Logger.Error(err2)
  286. dblog.Description = fmt.Sprintf("用户%d权限设置失败:%s", uid, err2.Error())
  287. dblog.Fail2()
  288. return 0, err2
  289. }
  290. dataobj.Id = int(newid + 1)
  291. }
  292. dblog.Description = fmt.Sprintf("用户%d权限设置成功!", uid)
  293. dblog.Success2()
  294. return dataobj.Id, nil
  295. }