Power.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. package controllers
  2. import (
  3. "bzd_server/Nats/NatsServer"
  4. "bzd_server/conf"
  5. "bzd_server/models/Account"
  6. "bzd_server/models/System"
  7. "fmt"
  8. menulibs "git.baozhida.cn/ERP_libs/Menu"
  9. powerlibs "git.baozhida.cn/ERP_libs/Power"
  10. "git.baozhida.cn/ERP_libs/lib"
  11. "github.com/astaxie/beego/logs"
  12. "github.com/beego/beego/v2/adapter/orm"
  13. beego "github.com/beego/beego/v2/server/web"
  14. "math"
  15. )
  16. type PowerController struct {
  17. beego.Controller
  18. User Account.User
  19. }
  20. func (c *PowerController) Prepare() {
  21. c.User = *Account.User_r
  22. }
  23. // 列表 -
  24. func (c *PowerController) List() {
  25. // 分页参数 初始化
  26. page, _ := c.GetInt("page")
  27. if page < 1 {
  28. page = 1
  29. }
  30. page_z, _ := c.GetInt("page_z")
  31. if page_z < 1 {
  32. page_z = conf.Page_size
  33. }
  34. // 查询
  35. T_name := c.GetString("T_name")
  36. R_List, R_cnt := Account.Read_Power_List(T_name, page, page_z)
  37. var r_jsons lib.R_JSONS
  38. r_jsons.Num = R_cnt
  39. r_jsons.Data = R_List
  40. r_jsons.Page = page
  41. r_jsons.Page_size = int(math.Ceil(float64(R_cnt) / float64(page_z)))
  42. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
  43. c.ServeJSON()
  44. return
  45. }
  46. func (c *PowerController) Get() {
  47. type Data struct {
  48. Power powerlibs.Power_R
  49. Menu []menulibs.Menu
  50. Menu_checked []int
  51. }
  52. var data Data
  53. T_id := c.GetString("T_id")
  54. T_code := c.GetString("T_code")
  55. if len(T_code) == 0 {
  56. T_code = conf.ERP_Account_Sys
  57. }
  58. if len(T_id) < 1 {
  59. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  60. c.ServeJSON()
  61. return
  62. }
  63. sysName := Account.Get_Sys_Name(T_code)
  64. var menu []menulibs.Menu
  65. var power powerlibs.Power
  66. var err error
  67. switch T_code {
  68. case conf.ERP_Account_Sys:
  69. power, err = Account.Read_Power_ByT_id(T_id)
  70. if err != nil {
  71. c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
  72. c.ServeJSON()
  73. return
  74. }
  75. menu, err = Account.Read_Menu_List()
  76. if err != nil {
  77. c.Data["json"] = lib.JSONS{Code: 202, Msg: "获取用户系统菜单失败!"}
  78. c.ServeJSON()
  79. return
  80. }
  81. default:
  82. power, err = NatsServer.ERP_Read_Power_ByT_id(T_code, T_id)
  83. if err != nil {
  84. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("获取%s权限失败!", sysName)}
  85. c.ServeJSON()
  86. return
  87. }
  88. menu, err = NatsServer.ERP_Read_Menu_List(T_code)
  89. if err != nil {
  90. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("获取%s菜单失败!", sysName)}
  91. c.ServeJSON()
  92. return
  93. }
  94. }
  95. data.Power = powerlibs.PowerToPower_R(power)
  96. data.Menu = menu
  97. if power.T_menu != "*" {
  98. data.Menu_checked = lib.SplitStringToIntIds(power.T_menu, "M")
  99. }
  100. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: data}
  101. c.ServeJSON()
  102. return
  103. }
  104. func (c *PowerController) Add() {
  105. T_name := c.GetString("T_name")
  106. rand_x := 0
  107. T_id := ""
  108. for true {
  109. T_id = lib.GetRandstring(8, "", int64(rand_x))
  110. _, err := Account.Read_Power_ByT_id(T_id)
  111. if err != nil {
  112. break
  113. }
  114. rand_x += 1
  115. }
  116. var_ := powerlibs.Power{
  117. T_id: T_id,
  118. T_name: T_name,
  119. }
  120. id, err := Account.Add_Power(var_)
  121. if err != nil {
  122. c.Data["json"] = lib.JSONS{Code: 202, Msg: "添加失败!"}
  123. c.ServeJSON()
  124. return
  125. }
  126. for _, prefix := range Account.ERP_Sys_prefix {
  127. i := 3
  128. for {
  129. // Nats 发送失败 重试3次
  130. _, err = NatsServer.ERP_Add_Power(prefix, var_)
  131. if err == nil || i == 0 {
  132. break
  133. }
  134. i--
  135. }
  136. if err != nil {
  137. sysName := Account.Get_Sys_Name(prefix)
  138. logs.Error(lib.FuncName(), sysName+"添加失败: ", err)
  139. c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + "添加失败!"}
  140. c.ServeJSON()
  141. return
  142. }
  143. }
  144. System.Add_UserLogs_T(c.User.T_uuid, "权限", "新增", var_)
  145. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
  146. c.ServeJSON()
  147. return
  148. }
  149. func (c *PowerController) Edit() {
  150. T_id := c.GetString("T_id")
  151. T_name := c.GetString("T_name")
  152. if len(T_id) == 0 {
  153. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_id Err!"}
  154. c.ServeJSON()
  155. return
  156. }
  157. var_, err := Account.Read_Power_ByT_id(T_id)
  158. if err != nil {
  159. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  160. c.ServeJSON()
  161. return
  162. }
  163. var_.T_name = T_name
  164. id, err := Account.Update_Power(var_)
  165. if err != nil {
  166. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  167. c.ServeJSON()
  168. return
  169. }
  170. // 向除开用户系统的其他系统修改权限
  171. // 查询新系统是否存在与用户系统powerT_id相同的power 存在=>修改 不存在=>添加
  172. for _, prefix := range Account.ERP_Sys_prefix {
  173. // Nats 发送失败 重试3次
  174. i := 3
  175. for {
  176. _, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
  177. if err != nil {
  178. if err.Error() == orm.ErrNoRows.Error() {
  179. _, err = NatsServer.ERP_Add_Power(prefix, var_)
  180. if err == nil || i == 0 {
  181. break
  182. }
  183. } else {
  184. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  185. c.ServeJSON()
  186. return
  187. }
  188. }
  189. _, err = NatsServer.ERP_Update_Power(prefix, var_)
  190. if err == nil || i == 0 {
  191. break
  192. }
  193. i--
  194. }
  195. if err != nil {
  196. sysName := Account.Get_Sys_Name(prefix)
  197. c.Data["json"] = lib.JSONS{Code: 202, Msg: sysName + "修改失败!"}
  198. c.ServeJSON()
  199. return
  200. }
  201. }
  202. System.Add_UserLogs_T(c.User.T_uuid, "权限", "修改", var_)
  203. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
  204. c.ServeJSON()
  205. return
  206. }
  207. func (c *PowerController) Sys_List() {
  208. type Sys struct {
  209. T_sys string
  210. T_name string
  211. }
  212. var list []Sys
  213. for k, v := range conf.ERP_Sys_List {
  214. list = append(list, Sys{
  215. T_sys: k,
  216. T_name: v,
  217. })
  218. }
  219. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: list}
  220. c.ServeJSON()
  221. return
  222. }
  223. func (c *PowerController) Edit_Menu() {
  224. T_id := c.GetString("T_id")
  225. T_code := c.GetString("T_code")
  226. T_menu := c.GetString("T_menu")
  227. if len(T_id) == 0 {
  228. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  229. c.ServeJSON()
  230. return
  231. }
  232. sysName := Account.Get_Sys_Name(T_code)
  233. if sysName == T_code {
  234. // 不存在这个code
  235. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_code Err!"}
  236. c.ServeJSON()
  237. return
  238. }
  239. var_, err := Account.Read_Power_ByT_id(T_id)
  240. var_.T_menu = T_menu
  241. if err != nil {
  242. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  243. c.ServeJSON()
  244. return
  245. }
  246. var id int64
  247. switch T_code {
  248. case conf.ERP_Account_Sys:
  249. id, err = Account.Update_Power(var_)
  250. if err != nil {
  251. c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
  252. c.ServeJSON()
  253. return
  254. }
  255. default:
  256. _, err = NatsServer.ERP_Read_Power_ByT_id(T_code, T_id)
  257. if err != nil {
  258. if err.Error() == orm.ErrNoRows.Error() {
  259. _, err = NatsServer.ERP_Add_Power(T_code, var_)
  260. } else {
  261. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  262. c.ServeJSON()
  263. return
  264. }
  265. }
  266. id, err = NatsServer.ERP_Update_Power(T_code, var_)
  267. if err != nil {
  268. c.Data["json"] = lib.JSONS{Code: 202, Msg: fmt.Sprintf("%s 修改失败!", sysName)}
  269. c.ServeJSON()
  270. return
  271. }
  272. }
  273. Account.Redis_Menu_DelK(T_id)
  274. System.Add_UserLogs_T(c.User.T_uuid, "权限", sysName+" 修改菜单", var_)
  275. c.Data["json"] = lib.JSONS{Code: 200, Msg: sysName + " ok!", Data: id}
  276. c.ServeJSON()
  277. return
  278. }
  279. func (c *PowerController) Del() {
  280. T_id := c.GetString("T_id")
  281. if len(T_id) == 0 {
  282. c.Data["json"] = lib.JSONS{Code: 201, Msg: "T_id Err!"}
  283. c.ServeJSON()
  284. return
  285. }
  286. R, err := Account.Read_Power_ByT_id(T_id)
  287. if err != nil {
  288. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  289. c.ServeJSON()
  290. return
  291. }
  292. id, err := Account.Delete_Power(R)
  293. if err != nil {
  294. c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
  295. c.ServeJSON()
  296. return
  297. }
  298. for _, prefix := range Account.ERP_Sys_prefix {
  299. i := 3
  300. for {
  301. R, err = NatsServer.ERP_Read_Power_ByT_id(prefix, T_id)
  302. if err != nil {
  303. if err.Error() == orm.ErrNoRows.Error() {
  304. break
  305. }
  306. c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
  307. c.ServeJSON()
  308. return
  309. }
  310. // Nats 发送失败 重试3次
  311. _, err = NatsServer.ERP_Delete_Power(prefix, R)
  312. if err == nil || i == 0 {
  313. break
  314. }
  315. i--
  316. }
  317. if err != nil {
  318. name := Account.Get_Sys_Name(prefix)
  319. c.Data["json"] = lib.JSONS{Code: 202, Msg: name + " 修改失败!"}
  320. c.ServeJSON()
  321. return
  322. }
  323. }
  324. System.Add_UserLogs_T(c.User.T_uuid, "权限", "删除", T_id)
  325. c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: id}
  326. c.ServeJSON()
  327. return
  328. }