global_sys_param.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package bo
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. "log"
  7. "os"
  8. "rtzh_elec_temperature/enum"
  9. "rtzh_elec_temperature/global"
  10. "rtzh_elec_temperature/logger"
  11. "rtzh_elec_temperature/mqtt"
  12. "rtzh_elec_temperature/tools"
  13. "strconv"
  14. "sync"
  15. "github.com/astaxie/beego/orm"
  16. _ "github.com/astaxie/beego/orm"
  17. )
  18. type Global_sys_param struct {
  19. Param_name string `orm:"pk"`
  20. Param_value string `orm:"size(2000)"`
  21. Param_memo string `orm:"size(50)"`
  22. }
  23. func init() {
  24. orm.RegisterModel(new(Global_sys_param))
  25. }
  26. //初始化加载系统参数。建议在系统启动时调用
  27. func LoadSysParam() {
  28. //用户密码规则及强度:simple|strong
  29. GetSysParamValue("user_pwd_rule", "simple")
  30. //初始化用户密码过期时间(天)。默认为60天,为0时永不过期
  31. GetSysParamValue("user_pwd_expire_day", "60")
  32. //初始化用户密码修改模式。默认只能管理员修改修改。可配置成自己可修改
  33. GetSysParamValue("user_pwd_edit_mod", "admin") //admin|self
  34. //初始化登录失败锁定次数
  35. GetSysParamValue("login_fail_maxcount", "5") //默认为5次
  36. //初始化登录失败锁定时长,单位:秒
  37. GetSysParamValue("login_fail_locktime", "180") //默认180秒
  38. r, _ := GetSysParamValue("session_timeout", "600")
  39. rInt, _ := strconv.Atoi(r)
  40. if rInt > 60 {
  41. global.SessionTimeout = rInt
  42. } else {
  43. //永不过期
  44. global.SessionTimeout = 0
  45. }
  46. loginFailMaxCount, _ := GetSysParamValue("login_fail_maxcount", "5")
  47. global.LoginFailMaxCount, _ = strconv.Atoi(loginFailMaxCount)
  48. global.UserLoginClientLimt, _ = GetSysParamValue("user_login_client_limt", "none")
  49. global.AllowAccessIps, _ = GetSysParamValue("allow_access_ips", "*")
  50. //初始化人像比对相似度
  51. //r, _ = GetSysParamValue("FaceSameValue", "60")
  52. //global.FaceSameValue = r
  53. //初始化Mqtt 地址参数。前端页面连接时的信息
  54. //获取配置的mqtt地址
  55. mqttinfo, _ := GetSysParamValue("Mqtt_JS_URL", "")
  56. if mqttinfo == "" {
  57. cnffile := "conf/mqtt.cnf"
  58. fileHanlder, err := os.Open(cnffile)
  59. if err == nil {
  60. txt, _ := ioutil.ReadAll(fileHanlder)
  61. fileHanlder.Close()
  62. txtStr := string(txt)
  63. if txtStr != "" {
  64. cfgdata := mqtt.Config{}
  65. err = json.Unmarshal(txt, &cfgdata)
  66. if err == nil {
  67. mqttinfo = cfgdata.Host + ":8083" //mqtt的js协议默认端口是8083
  68. if cfgdata.Host == "127.0.0.1" || cfgdata.Host == "" {
  69. //获取本机地址
  70. mqttinfo, _ := tools.LocalIPv4()
  71. mqttinfo = mqttinfo + ":8083"
  72. }
  73. sp := Global_sys_param{Param_name: "Mqtt_JS_URL", Param_value: mqttinfo, Param_memo: "mqtt的js库连接地址"}
  74. SaveSysParam(sp)
  75. }
  76. }
  77. }
  78. }
  79. }
  80. func SaveSysParam(obj Global_sys_param, userinfo ...map[string]interface{}) (result int64, err error) {
  81. dblog := new(SystemLog)
  82. if len(userinfo) == 0 {
  83. dblog.UserInfo = map[string]interface{}{"name": "", "ip": "127.0.0.1"}
  84. dblog.Eventtype = enum.OptEventType_System
  85. } else {
  86. dblog.UserInfo = userinfo[0]
  87. dblog.Eventtype = enum.OptEventType_Bus
  88. }
  89. dblog.Audittype = enum.AuditType_admin_system_paramater
  90. dblog.Logtype = enum.LogType_Update
  91. dblog.Eventlevel = enum.OptEventLevel_Hight
  92. dblog.Description = fmt.Sprintf("保存系统参数,数据:%+v", obj)
  93. o := orm.NewOrm()
  94. readObj := Global_sys_param{Param_name: obj.Param_name}
  95. has := o.Read(&readObj)
  96. var id int64
  97. if has == nil {
  98. id, err = o.Update(&obj)
  99. } else if has == orm.ErrNoRows {
  100. dblog.Logtype = enum.LogType_Insert
  101. id, err = o.Insert(&obj)
  102. } else {
  103. return 0, err
  104. }
  105. if err != nil {
  106. logger.Logger.Error(err)
  107. dblog.Fail2()
  108. return 0, nil
  109. }
  110. dblog.Success2()
  111. global.GoCahce.Set(obj.Param_name, obj.Param_value, -1)
  112. switch obj.Param_name {
  113. case "session_timeout":
  114. if tools.IsEmpty(obj.Param_value) == "" {
  115. global.SessionTimeout = 0
  116. } else {
  117. global.SessionTimeout, _ = strconv.Atoi(obj.Param_value)
  118. }
  119. case "login_fail_maxcount":
  120. global.LoginFailMaxCount, _ = strconv.Atoi(obj.Param_value)
  121. case "login_fail_locktime":
  122. global.LoginFailLockTime, _ = strconv.Atoi(obj.Param_value)
  123. if global.LoginFailLockTime <= 0 {
  124. global.LoginFailLockTime = 180
  125. }
  126. case "user_pwd_expire_day":
  127. if obj.Param_value == "0" {
  128. //永不过期,设置所有用户的密码过期时间
  129. o.Raw("update t_data_user set pwd_expire=?", "1970-01-01 00:00:00").Exec()
  130. } else {
  131. o.Raw("update t_data_user set pwd_expire=date_add(now(),interval ? DAY)", obj.Param_value).Exec()
  132. }
  133. case "user_login_client_limt":
  134. if obj.Param_value != "none" && obj.Param_value != "o2o" {
  135. log.Println("无效的user_login_client_limt参数值:" + obj.Param_value)
  136. } else {
  137. global.UserLoginClientLimt = obj.Param_value
  138. }
  139. case "allow_access_ips":
  140. if obj.Param_value == "" {
  141. obj.Param_value = "*"
  142. }
  143. global.AllowAccessIps = obj.Param_value
  144. //重新初始化已经访问ip队列
  145. global.AccessedIps = sync.Map{}
  146. }
  147. return id, err
  148. }
  149. func GetSysParamValue(param_name string, defaultvalue string) (result string, err error) {
  150. if v, has := global.GoCahce.Get(param_name); has {
  151. return tools.IsEmpty(v), nil
  152. }
  153. o := orm.NewOrm()
  154. v := Global_sys_param{Param_name: param_name}
  155. if err = o.Read(&v); err == nil {
  156. global.GoCahce.Set(param_name, v.Param_value, -1)
  157. return v.Param_value, nil
  158. } else {
  159. v.Param_value = defaultvalue
  160. SaveSysParam(v)
  161. return defaultvalue, nil
  162. }
  163. }
  164. func GetSysParamList(obj Global_sys_param, userinfo map[string]interface{}) (maps []orm.Params, err error) {
  165. dblog := new(SystemLog)
  166. dblog.UserInfo = userinfo
  167. dblog.Audittype = enum.AuditType_admin_system_paramater
  168. dblog.Logtype = enum.LogType_Query
  169. dblog.Eventlevel = enum.OptEventLevel_Low
  170. o := orm.NewOrm()
  171. var num int64
  172. var dberr error
  173. if obj.Param_name != "" {
  174. sql := "select * FROM global_sys_param WHERE param_name=?"
  175. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sql, obj.Param_name)
  176. num, dberr = o.Raw(sql, obj.Param_name).Values(&maps)
  177. } else {
  178. sql := "select * FROM global_sys_param"
  179. dblog.Description = sql
  180. num, dberr = o.Raw(sql).Values(&maps)
  181. }
  182. if dberr == nil && num > 0 {
  183. dblog.Success2()
  184. return maps, nil
  185. } else {
  186. dblog.Fail2()
  187. logger.Logger.Error(dberr, dblog.Description)
  188. }
  189. return nil, dberr
  190. }