global_code.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package bo
  2. import (
  3. "errors"
  4. "fmt"
  5. "log"
  6. "scd_check_tools/global"
  7. "scd_check_tools/logger"
  8. "scd_check_tools/models/enum"
  9. "scd_check_tools/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. DeviceBaseModel
  23. }
  24. func init() {
  25. orm.RegisterModel(new(Global_const_code))
  26. }
  27. func LoadAndCacheGlobalCode() {
  28. db := orm.NewOrm()
  29. //初始化一些特定系统字典定义,主要是CDC数据类型
  30. db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "DingzhiCdcDatatype", "systemconstcode", "定值CDC数据类型").Exec()
  31. db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoCeCdcDatatype", "systemconstcode", "遥测CDC数据类型").Exec()
  32. db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoXinCdcDatatype", "systemconstcode", "遥信CDC数据类型").Exec()
  33. db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "YaoKongCdcDatatype", "systemconstcode", "遥控CDC数据类型").Exec()
  34. db.Raw("insert IGNORE into global_const_code(code,parentcode,name)values(?,?,?)", "OtherCdcDatatype", "systemconstcode", "其他CDC数据类型").Exec()
  35. lst := []orm.Params{}
  36. _, err := db.Raw("select * from global_const_code").Values(&lst)
  37. if err != nil {
  38. log.Println(err)
  39. }
  40. hasDingzhiCdcDatatype := false
  41. hasYaoCeCdcDatatype := false
  42. hasYaoXinCdcDatatype := false
  43. hasYaoKongCdcDatatype := false
  44. hasOtherCdcDatatype := false
  45. if len(lst) > 0 {
  46. for _, item := range lst {
  47. pcode := tools.IsEmpty(item["parentcode"])
  48. code := tools.IsEmpty(item["code"])
  49. name := tools.IsEmpty(item["name"])
  50. key := "global_code_" + pcode + code
  51. global.GoCahce.Set(key, item, -1)
  52. key = "global_code_" + tools.IsEmpty(item["id"])
  53. global.GoCahce.Set(key, item, -1)
  54. if pcode == "DingzhiCdcDatatype" {
  55. hasDingzhiCdcDatatype = true
  56. DingZhiMap[code] = name
  57. } else if pcode == "YaoCeCdcDatatype" {
  58. hasYaoCeCdcDatatype = true
  59. YaoCeMap[code] = name
  60. } else if pcode == "YaoXinCdcDatatype" {
  61. hasYaoXinCdcDatatype = true
  62. YaoXinMap[code] = name
  63. } else if pcode == "YaoKongCdcDatatype" {
  64. hasYaoKongCdcDatatype = true
  65. YaoKongMap[code] = name
  66. } else if pcode == "OtherCdcDatatype" {
  67. hasOtherCdcDatatype = true
  68. OtherCdcTypeMap[code] = name
  69. }
  70. }
  71. }
  72. if !hasDingzhiCdcDatatype {
  73. for k, v := range DingZhiMap {
  74. db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "DingzhiCdcDatatype", v).Exec()
  75. }
  76. }
  77. if !hasYaoCeCdcDatatype {
  78. for k, v := range YaoCeMap {
  79. db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoCeCdcDatatype", v).Exec()
  80. }
  81. }
  82. if !hasYaoXinCdcDatatype {
  83. for k, v := range YaoXinMap {
  84. db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoXinCdcDatatype", v).Exec()
  85. }
  86. }
  87. if !hasYaoKongCdcDatatype {
  88. for k, v := range YaoKongMap {
  89. db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "YaoKongCdcDatatype", v).Exec()
  90. }
  91. }
  92. if !hasOtherCdcDatatype {
  93. for k, v := range OtherCdcTypeMap {
  94. db.Raw("insert into global_const_code(code,parentcode,name)values(?,?,?)", k, "OtherCdcDatatype", v).Exec()
  95. }
  96. }
  97. }
  98. func SaveGlobalCode(obj Global_const_code, userinfo ...map[string]interface{}) (int, error) {
  99. has, errorn := checkName(obj)
  100. if !has || errorn != nil {
  101. return 0, errorn
  102. }
  103. dblog := new(SystemLog)
  104. if len(userinfo) > 0 {
  105. dblog.SetUserInfo(userinfo[0])
  106. } else {
  107. dblog.SetUserInfo(map[string]interface{}{"name": "", "ip": "127.0.0.1"})
  108. }
  109. dblog.Audittype = enum.AuditType_admin_system_dict
  110. dblog.Logtype = enum.LogType_Insert
  111. dblog.Eventtype = enum.OptEventType_Bus
  112. dblog.Eventlevel = enum.OptEventLevel_Mid
  113. global.GoCahce.Delete("global_code_" + obj.Parentcode + obj.Code)
  114. o := orm.NewOrm()
  115. if obj.Id > 0 {
  116. dblog.Logtype = enum.LogType_Update
  117. _, err := o.Update(&obj)
  118. if err != nil {
  119. logger.Logger.Error(err)
  120. dblog.Description = fmt.Sprintf("编辑数据失败:%s,操作数据:%+v", err.Error(), obj)
  121. dblog.Fail2()
  122. return 0, err
  123. }
  124. dblog.Description = fmt.Sprintf("编辑数据成功,操作数据:%+v", obj)
  125. dblog.Success2()
  126. } else {
  127. newid, err := o.Insert(&obj)
  128. if err != nil {
  129. logger.Logger.Error(err)
  130. dblog.Description = fmt.Sprintf("新增数据失败:%s,操作数据:%+v", err.Error(), obj)
  131. dblog.Fail2()
  132. return 0, err
  133. }
  134. obj.Id = int(newid)
  135. dblog.Description = fmt.Sprintf("新增数据成功,操作数据:%+v", obj)
  136. dblog.Success2()
  137. }
  138. return obj.Id, nil
  139. }
  140. func DeleteGlobalCode(param Global_const_code, userinfo map[string]interface{}) (result int64, err error) {
  141. o := orm.NewOrm()
  142. dblog := new(SystemLog)
  143. dblog.SetUserInfo(userinfo)
  144. dblog.Audittype = enum.AuditType_admin_system_dict
  145. dblog.Logtype = enum.LogType_Delete
  146. dblog.Eventtype = enum.OptEventType_Bus
  147. dblog.Eventlevel = enum.OptEventLevel_Mid
  148. if param.Id > 0 {
  149. global.GoCahce.Delete("global_code_" + tools.IsEmpty(param.Id))
  150. err = o.Read(&param)
  151. if err == nil {
  152. global.GoCahce.Delete("global_code_" + param.Parentcode + param.Code)
  153. }
  154. _, err = o.Raw("delete from global_const_code where id=?", param.Id).Exec()
  155. } else {
  156. _, err = o.Raw("delete from global_const_code where parentcode=?", param.Code).Exec()
  157. _, err = o.Raw("delete from global_const_code where code=?", param.Code).Exec()
  158. }
  159. if err != nil {
  160. dblog.Description = fmt.Sprintf("删除数据失败:%s,操作数据:%+v", err.Error(), param)
  161. dblog.Fail2()
  162. return 0, errors.New(err.Error())
  163. }
  164. dblog.Description = fmt.Sprintf("删除数据成功,操作数据:%+v", param)
  165. dblog.Success2()
  166. return 1, nil
  167. }
  168. func checkName(bo Global_const_code) (bool, error) {
  169. if tools.IsEmpty(bo.Code) == "" {
  170. return false, errors.New("系统常量编码不能为空")
  171. }
  172. if tools.IsEmpty(bo.Parentcode) == "" {
  173. return false, errors.New("上级编码不能为空")
  174. }
  175. if tools.IsEmpty(bo.Name) == "" {
  176. return false, errors.New("系统常量名称不能为空")
  177. }
  178. o := orm.NewOrm()
  179. var sqlCommandText string
  180. var sqlParameter []interface{}
  181. if bo.Id > 0 {
  182. sqlCommandText = "select 1 from global_const_code where parentcode=? and name=? and id!=?"
  183. sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name, bo.Id)
  184. } else {
  185. sqlCommandText = "select 1 from global_const_code where parentcode=? and name=?"
  186. sqlParameter = append(sqlParameter, bo.Parentcode, bo.Name)
  187. }
  188. var maps []orm.Params
  189. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&maps)
  190. if err != nil {
  191. return false, err
  192. }
  193. if len(maps) > 0 {
  194. return false, errors.New("系统常量名称已存在")
  195. }
  196. return true, nil
  197. }
  198. func (t *Global) GetChildrenGlobalCode(code string) ([]orm.Params, error) {
  199. o := orm.NewOrm()
  200. if code == "" {
  201. code = "systemconstcode" //根节点
  202. }
  203. tableData := []orm.Params{}
  204. 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=? "
  205. _, err := o.Raw(SqlCommandText, code).Values(&tableData)
  206. if code == "systemconstcode" {
  207. tableData = append(tableData, orm.Params{"id": "0", "code": "systemconstcode", "parentcode": "", "name": "系统代码", "isParent": "true", "open": "true"})
  208. }
  209. return tableData, err
  210. }
  211. func (t *Global) QueryGlobalCodeList(param map[string]interface{}) ([]orm.Params, int, error) {
  212. dblog := new(SystemLog)
  213. dblog.SetUserInfo(t.GetUserInfo())
  214. dblog.Audittype = enum.AuditType_admin_system_dict
  215. dblog.Logtype = enum.LogType_Query
  216. dblog.Eventtype = enum.OptEventType_Bus
  217. dblog.Eventlevel = enum.OptEventLevel_Mid
  218. o := orm.NewOrm()
  219. tableData := []orm.Params{}
  220. var SqlCommandText = "select * from global_const_code "
  221. var sqlCondition []string
  222. var sqlParameter []interface{}
  223. var limit, totalSQL string
  224. if id, ok := param["id"]; ok && tools.IsEmpty(id) != "" {
  225. sqlCondition = append(sqlCondition, "id=?")
  226. sqlParameter = append(sqlParameter, id)
  227. } else if code, ok := param["code"]; ok && tools.IsEmpty(code) != "" {
  228. sqlCondition = append(sqlCondition, "code=?")
  229. sqlParameter = append(sqlParameter, code)
  230. } else if parentCode, ok1 := param["pcode"]; ok1 && tools.IsEmpty(parentCode) != "" {
  231. sqlCondition = append(sqlCondition, "parentcode=?")
  232. sqlParameter = append(sqlParameter, parentCode)
  233. }
  234. if len(sqlCondition) > 0 {
  235. SqlCommandText += " where " + strings.Join(sqlCondition, " and ") + " order by code asc "
  236. totalSQL = "select count(1) total from global_const_code where " + strings.Join(sqlCondition, " and ")
  237. } else {
  238. SqlCommandText += " order by code asc"
  239. totalSQL = "select count(1) total from global_const_code "
  240. }
  241. if index, ok := param["pageindex"]; ok {
  242. pageIndex, _ := strconv.Atoi(index.(string))
  243. pageSize, _ := strconv.Atoi(param["pagesize"].(string))
  244. limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize)
  245. SqlCommandText += limit
  246. }
  247. var number int
  248. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  249. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", SqlCommandText, sqlParameter)
  250. if err == nil {
  251. dblog.Success2()
  252. totalTable := []orm.Params{}
  253. _, err1 := o.Raw(totalSQL, sqlParameter).Values(&totalTable)
  254. if err1 == nil && len(totalTable) > 0 {
  255. number, _ = strconv.Atoi(totalTable[0]["total"].(string))
  256. }
  257. } else {
  258. logger.Logger.Error(err, dblog.Description)
  259. dblog.Fail2()
  260. }
  261. return tableData, number, err
  262. }
  263. //获取指定ID的代码
  264. func (t *Global) GetCodeInfoByID(id string) orm.Params {
  265. key := "global_code_" + id
  266. r, _ := global.GoCahce.Get(key)
  267. if r != nil {
  268. return r.(orm.Params)
  269. }
  270. return nil
  271. }
  272. func (t *Global) GetCodeInfoByCode(pcode, code string) orm.Params {
  273. key := "global_code_" + pcode + code
  274. r, _ := global.GoCahce.Get(key)
  275. if r != nil {
  276. return r.(orm.Params)
  277. }
  278. return nil
  279. }
  280. //类别管理树
  281. func (t *Global) GetCategoryTree() ([]orm.Params, error) {
  282. o := orm.NewOrm()
  283. var tableData = []orm.Params{}
  284. var SqlCommandText = "select id,code,parentcode,name title from global_const_code where code like 'pstype%';"
  285. _, err := o.Raw(SqlCommandText).Values(&tableData)
  286. dblog := new(SystemLog)
  287. dblog.SetUserInfo(t.GetUserInfo())
  288. dblog.Audittype = enum.AuditType_admin_system_dict
  289. dblog.Logtype = enum.LogType_Query
  290. dblog.Eventtype = enum.OptEventType_System
  291. dblog.Eventlevel = enum.OptEventLevel_Low
  292. dblog.Description = SqlCommandText
  293. if err == nil {
  294. dblog.Success2()
  295. } else {
  296. logger.Logger.Error(err, SqlCommandText)
  297. dblog.Fail2()
  298. }
  299. return tableData, err
  300. }
  301. //获取角色管理菜单树
  302. func (t *Global) GetMenuTree(roleId int) ([]orm.Params, error) {
  303. o := orm.NewOrm()
  304. tableData := []orm.Params{}
  305. var SqlCommandText string
  306. var sqlParameter []interface{}
  307. if roleId > -1 {
  308. SqlCommandText = "select funccodeid id from t_data_role_func where roleid=? "
  309. sqlParameter = append(sqlParameter, roleId)
  310. } else {
  311. SqlCommandText = "select funccodeid id from t_data_role_func "
  312. }
  313. SqlCommandText += " order by id asc "
  314. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  315. dblog := new(SystemLog)
  316. dblog.SetUserInfo(t.GetUserInfo())
  317. dblog.Audittype = enum.AuditType_admin_system_dict
  318. dblog.Logtype = enum.LogType_Query
  319. dblog.Eventtype = enum.OptEventType_System
  320. dblog.Eventlevel = enum.OptEventLevel_Low
  321. dblog.Description = SqlCommandText
  322. if err == nil {
  323. dblog.Success2()
  324. } else {
  325. logger.Logger.Error(err, SqlCommandText)
  326. dblog.Fail2()
  327. }
  328. return tableData, err
  329. }
  330. //获取角色管理菜单树
  331. func (t *Global) childrenMenu(code string, roleId int) ([]map[string]interface{}, error) {
  332. o := orm.NewOrm()
  333. tableData := []orm.Params{}
  334. var SqlCommandText string
  335. var sqlParameter []interface{}
  336. if roleId > -1 {
  337. SqlCommandText = "select a.id,a.name,case when b.id is null then 0 else 1 end checked " +
  338. "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=?"
  339. sqlParameter = append(sqlParameter, roleId, code)
  340. } else {
  341. SqlCommandText = "select id,name,0 checked from global_const_code where parentcode=?"
  342. sqlParameter = append(sqlParameter, code)
  343. }
  344. _, err := o.Raw(SqlCommandText, sqlParameter).Values(&tableData)
  345. var result []map[string]interface{}
  346. if err == nil && len(tableData) > 0 {
  347. for _, record := range tableData {
  348. checked, _ := strconv.ParseBool(record["checked"].(string))
  349. result = append(result, map[string]interface{}{"id": record["id"], "name": record["name"], "checked": checked})
  350. }
  351. }
  352. return result, err
  353. }