global_code.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. package bo
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "rtzh_elec_temperature/enum"
  7. "rtzh_elec_temperature/global"
  8. "rtzh_elec_temperature/logger"
  9. "rtzh_elec_temperature/tools"
  10. "strconv"
  11. "strings"
  12. "github.com/astaxie/beego/orm"
  13. _ "github.com/astaxie/beego/orm"
  14. )
  15. type Global_const_code struct {
  16. Id int `orm:pk;auto`
  17. Code string `orm:"size(20)"`
  18. Parentcode string `orm:"size(20)"`
  19. Name string `orm:"size(20)"`
  20. }
  21. type Global struct {
  22. Userinfo map[string]interface{}
  23. }
  24. func init() {
  25. orm.RegisterModel(new(Global_const_code))
  26. }
  27. func LoadAndCacheGlobalCode() {
  28. db := orm.NewOrm()
  29. lst := []orm.Params{}
  30. _, err := db.Raw("select * from global_const_code").Values(&lst)
  31. if err != nil {
  32. log.Println(err)
  33. }
  34. if len(lst) > 0 {
  35. for _, item := range lst {
  36. key := "global_code_" + tools.IsEmpty(item["parentcode"]) + tools.IsEmpty(item["code"])
  37. global.GoCahce.Set(key, item, -1)
  38. key = "global_code_" + tools.IsEmpty(item["id"])
  39. global.GoCahce.Set(key, item, -1)
  40. }
  41. }
  42. }
  43. func SaveGlobalCode(obj Global_const_code, userinfo ...map[string]interface{}) (int, error) {
  44. has, errorn := checkName(obj)
  45. if !has || errorn != nil {
  46. return 0, errorn
  47. }
  48. dblog := new(SystemLog)
  49. if len(userinfo) > 0 {
  50. dblog.UserInfo = userinfo[0]
  51. } else {
  52. dblog.UserInfo = map[string]interface{}{"name": "", "ip": "127.0.0.1"}
  53. }
  54. dblog.Audittype = enum.AuditType_admin_system_dict
  55. dblog.Logtype = enum.LogType_Insert
  56. dblog.Eventtype = enum.OptEventType_Bus
  57. dblog.Eventlevel = enum.OptEventLevel_Mid
  58. global.GoCahce.Delete("global_code_" + obj.Parentcode + obj.Code)
  59. o := orm.NewOrm()
  60. if obj.Id > 0 {
  61. dblog.Logtype = enum.LogType_Update
  62. _, err := o.Update(&obj)
  63. if err != nil {
  64. logger.Logger.Error(err)
  65. dblog.Description = fmt.Sprintf("编辑数据失败:%s,操作数据:%+v", err.Error(), obj)
  66. dblog.Fail2()
  67. return 0, err
  68. }
  69. dblog.Description = fmt.Sprintf("编辑数据成功,操作数据:%+v", obj)
  70. dblog.Success2()
  71. } else {
  72. newid, err := o.Insert(&obj)
  73. if err != nil {
  74. logger.Logger.Error(err)
  75. dblog.Description = fmt.Sprintf("新增数据失败:%s,操作数据:%+v", err.Error(), obj)
  76. dblog.Fail2()
  77. return 0, err
  78. }
  79. obj.Id = int(newid)
  80. dblog.Description = fmt.Sprintf("新增数据成功,操作数据:%+v", obj)
  81. dblog.Success2()
  82. }
  83. return obj.Id, nil
  84. }
  85. func DeleteGlobalCode(param Global_const_code, userinfo map[string]interface{}) (result int64, err error) {
  86. o := orm.NewOrm()
  87. dblog := new(SystemLog)
  88. dblog.UserInfo = userinfo
  89. dblog.Audittype = enum.AuditType_admin_system_dict
  90. dblog.Logtype = enum.LogType_Delete
  91. dblog.Eventtype = enum.OptEventType_Bus
  92. dblog.Eventlevel = enum.OptEventLevel_Mid
  93. if param.Id > 0 {
  94. global.GoCahce.Delete("global_code_" + tools.IsEmpty(param.Id))
  95. err = o.Read(&param)
  96. if err == nil {
  97. global.GoCahce.Delete("global_code_" + param.Parentcode + param.Code)
  98. }
  99. _, err = o.Raw("delete from global_const_code where id=?", param.Id).Exec()
  100. } else {
  101. _, err = o.Raw("delete from global_const_code where parentcode=?", param.Code).Exec()
  102. _, err = o.Raw("delete from global_const_code where code=?", param.Code).Exec()
  103. }
  104. if err != nil {
  105. dblog.Description = fmt.Sprintf("删除数据失败:%s,操作数据:%+v", err.Error(), param)
  106. dblog.Fail2()
  107. return 0, errors.New(err.Error())
  108. }
  109. dblog.Description = fmt.Sprintf("删除数据成功,操作数据:%+v", param)
  110. dblog.Success2()
  111. return 1, nil
  112. }
  113. func checkName(bo Global_const_code) (bool, error) {
  114. if tools.IsEmpty(bo.Code) == "" {
  115. return false, errors.New("系统常量编码不能为空")
  116. }
  117. if tools.IsEmpty(bo.Parentcode) == "" {
  118. return false, errors.New("上级编码不能为空")
  119. }
  120. if tools.IsEmpty(bo.Name) == "" {
  121. return false, errors.New("系统常量名称不能为空")
  122. }
  123. o := orm.NewOrm()
  124. var sqlCommandText string
  125. var sqlParameter []interface{}
  126. if bo.Id > 0 {
  127. sqlCommandText = "select 1 from global_const_code where parentcode=? and name=? and id!=?"
  128. sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name, bo.Id)
  129. } else {
  130. sqlCommandText = "select 1 from global_const_code where parentcode=? and name=?"
  131. sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name)
  132. }
  133. var maps []orm.Params
  134. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&maps)
  135. if err != nil {
  136. return false, err
  137. }
  138. if len(maps) > 0 {
  139. return false, errors.New("系统常量名称已存在")
  140. }
  141. return true, nil
  142. }
  143. //获取指定的系统代码信息
  144. func (t *Global) GetCodeInfo(pcode, code string) (orm.Params, error) {
  145. key := "global_code_" + pcode + code
  146. if row, has := global.GoCahce.Get(key); has {
  147. return row.(orm.Params), nil
  148. } else {
  149. lst := []orm.Params{}
  150. db := orm.NewOrm()
  151. _, err := db.Raw("select * from global_const_code where parentcode=? and code=?", pcode, code).Values(&lst)
  152. if err != nil {
  153. logger.Logger.Error(err)
  154. return orm.Params{}, err
  155. }
  156. if len(lst) > 0 {
  157. global.GoCahce.Set(key, lst[0], -1)
  158. return lst[0], nil
  159. }
  160. }
  161. return orm.Params{}, nil
  162. }
  163. func (t *Global) GetChildrenGlobalCode(code string) ([]orm.Params, error) {
  164. o := orm.NewOrm()
  165. if code == "" {
  166. code = "systemconstcode" //根节点
  167. }
  168. tableData := []orm.Params{}
  169. var SqlCommandText = "select a.id,a.code,a.parentcode,a.name,(select case count(0) when 0 then 'false' else 'true' end from global_const_code where parentcode=a.code) isParent from global_const_code a where a.parentcode=? "
  170. _, err := o.Raw(SqlCommandText, code).Values(&tableData)
  171. if code == "systemconstcode" {
  172. tableData = append(tableData, orm.Params{"id": "0", "code": "systemconstcode", "parentcode": "", "name": "系统代码", "isParent": "true", "open": "true"})
  173. }
  174. return tableData, err
  175. }
  176. func (t *Global) QueryGlobalCodeList(param map[string]interface{}) ([]orm.Params, int, error) {
  177. dblog := new(SystemLog)
  178. dblog.UserInfo = t.Userinfo
  179. dblog.Audittype = enum.AuditType_admin_system_dict
  180. dblog.Logtype = enum.LogType_Query
  181. dblog.Eventtype = enum.OptEventType_Bus
  182. dblog.Eventlevel = enum.OptEventLevel_Mid
  183. o := orm.NewOrm()
  184. tableData := []orm.Params{}
  185. var SqlCommandText = "select * from global_const_code "
  186. var sqlCondition []string
  187. var sqlParameter []interface{}
  188. var limit, totalSQL string
  189. if id, ok := param["id"]; ok && tools.IsEmpty(id) != "" {
  190. sqlCondition = append(sqlCondition, "id=?")
  191. sqlParameter = append(sqlParameter, id)
  192. } else if code, ok := param["code"]; ok && tools.IsEmpty(code) != "" {
  193. sqlCondition = append(sqlCondition, "code=?")
  194. sqlParameter = append(sqlParameter, code)
  195. } else if parentCode, ok1 := param["pcode"]; ok1 && tools.IsEmpty(parentCode) != "" {
  196. sqlCondition = append(sqlCondition, "parentcode=?")
  197. sqlParameter = append(sqlParameter, parentCode)
  198. }
  199. if len(sqlCondition) > 0 {
  200. SqlCommandText += " where " + strings.Join(sqlCondition, " and ") + " order by code asc "
  201. totalSQL = "select count(1) total from global_const_code where " + strings.Join(sqlCondition, " and ")
  202. } else {
  203. SqlCommandText += " order by code asc"
  204. totalSQL = "select count(1) total from global_const_code "
  205. }
  206. if index, ok := param["pageindex"]; ok {
  207. pageIndex, _ := strconv.Atoi(index.(string))
  208. pageSize, _ := strconv.Atoi(param["pagesize"].(string))
  209. limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize)
  210. SqlCommandText += limit
  211. }
  212. var number int
  213. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  214. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", SqlCommandText, sqlParameter)
  215. if err == nil {
  216. dblog.Success2()
  217. totalTable := []orm.Params{}
  218. _, err1 := o.Raw(totalSQL, sqlParameter).Values(&totalTable)
  219. if err1 == nil && len(totalTable) > 0 {
  220. number, _ = strconv.Atoi(totalTable[0]["total"].(string))
  221. }
  222. } else {
  223. logger.Logger.Error(err, dblog.Description)
  224. dblog.Fail2()
  225. }
  226. return tableData, number, err
  227. }
  228. //类别管理树
  229. func (t *Global) GetCategoryTree() ([]orm.Params, error) {
  230. o := orm.NewOrm()
  231. var tableData = []orm.Params{}
  232. var SqlCommandText = "select id,code,parentcode,name title from global_const_code where code like 'pstype%';"
  233. _, err := o.Raw(SqlCommandText).Values(&tableData)
  234. dblog := new(SystemLog)
  235. dblog.UserInfo = t.Userinfo
  236. dblog.Audittype = enum.AuditType_admin_system_dict
  237. dblog.Logtype = enum.LogType_Query
  238. dblog.Eventtype = enum.OptEventType_System
  239. dblog.Eventlevel = enum.OptEventLevel_Low
  240. dblog.Description = SqlCommandText
  241. if err == nil {
  242. dblog.Success2()
  243. } else {
  244. logger.Logger.Error(err, SqlCommandText)
  245. dblog.Fail2()
  246. }
  247. return tableData, err
  248. }
  249. //获取角色管理菜单树
  250. func (t *Global) GetMenuTree(roleId int) ([]orm.Params, error) {
  251. o := orm.NewOrm()
  252. tableData := []orm.Params{}
  253. var SqlCommandText string
  254. var sqlParameter []interface{}
  255. if roleId > -1 {
  256. SqlCommandText = "select funccodeid id from t_data_role_func where roleid=? "
  257. sqlParameter = append(sqlParameter, roleId)
  258. } else {
  259. SqlCommandText = "select funccodeid id from t_data_role_func "
  260. }
  261. SqlCommandText += " order by id asc "
  262. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  263. dblog := new(SystemLog)
  264. dblog.UserInfo = t.Userinfo
  265. dblog.Audittype = enum.AuditType_admin_system_dict
  266. dblog.Logtype = enum.LogType_Query
  267. dblog.Eventtype = enum.OptEventType_System
  268. dblog.Eventlevel = enum.OptEventLevel_Low
  269. dblog.Description = SqlCommandText
  270. if err == nil {
  271. dblog.Success2()
  272. } else {
  273. logger.Logger.Error(err, SqlCommandText)
  274. dblog.Fail2()
  275. }
  276. return tableData, err
  277. }
  278. //获取角色管理菜单树
  279. func (t *Global) childrenMenu(code string, roleId int) ([]map[string]interface{}, error) {
  280. o := orm.NewOrm()
  281. tableData := []orm.Params{}
  282. var SqlCommandText string
  283. var sqlParameter []interface{}
  284. if roleId > -1 {
  285. SqlCommandText = "select a.id,a.name,case when b.id is null then 0 else 1 end checked " +
  286. "from global_const_code a left join (select funccodeid id from t_data_role_func where roleid=?) b on a.id=b.id where parentcode=?"
  287. sqlParameter = append(sqlParameter, roleId, code)
  288. } else {
  289. SqlCommandText = "select id,name,0 checked from global_const_code where parentcode=?"
  290. sqlParameter = append(sqlParameter, code)
  291. }
  292. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  293. var result []map[string]interface{}
  294. if err == nil && len(tableData) > 0 {
  295. for _, record := range tableData {
  296. checked, _ := strconv.ParseBool(record["checked"].(string))
  297. result = append(result, map[string]interface{}{"id": record["id"], "name": record["name"], "checked": checked})
  298. }
  299. }
  300. return result, err
  301. }