chart_permission.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package services
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/company"
  6. "eta/eta_api/utils"
  7. "fmt"
  8. "io/ioutil"
  9. "net/http"
  10. "strings"
  11. )
  12. func GetChartPermissionList() (list []*models.ChartPermission, err error) {
  13. var req GetChartPermissionReq
  14. data, err := getChartPermission(req)
  15. if err != nil {
  16. return
  17. }
  18. list = data.List
  19. return
  20. }
  21. type GetChartPermissionReq struct {
  22. ChartPermissionId int `json:"chart_permission_id"`
  23. ProductId int `json:"product_id"`
  24. }
  25. type GetChartPermissionItem struct {
  26. List []*models.ChartPermission
  27. ParentList []*models.ChartPermission
  28. }
  29. type GetChartPermissionResp struct {
  30. Code int `json:"code" description:"状态码"`
  31. Msg string `json:"msg" description:"提示信息"`
  32. Data GetChartPermissionItem `json:"data" description:"返回数据"`
  33. ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
  34. }
  35. func getChartPermission(pars GetChartPermissionReq) (res GetChartPermissionItem, err error) {
  36. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/list")
  37. if pars.ProductId == 0 {
  38. pars.ProductId = 1 //默认查ficc的品种
  39. }
  40. b, err := crmEtaPost(url, pars)
  41. if err != nil {
  42. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  43. return
  44. }
  45. //result := new(models.ResultData)
  46. result := new(GetChartPermissionResp)
  47. if e := json.Unmarshal(b, &result); e != nil {
  48. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  49. return
  50. }
  51. utils.FileLog.Info("%s", string(b))
  52. if result.Code != 200 {
  53. err = fmt.Errorf("result: %s", string(b))
  54. return
  55. }
  56. res = result.Data
  57. return
  58. }
  59. type ChartPermissionResp struct {
  60. Code int `json:"code" description:"状态码"`
  61. Msg string `json:"msg" description:"提示信息"`
  62. ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
  63. }
  64. type ChartPermissionAddReq struct {
  65. PermissionName string `description:"品种权限名称"`
  66. ParentId int `description:"父级ID"`
  67. Enabled int `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
  68. IsPublic int `description:"是否是公有权限1:公有权限,0私有权限"`
  69. ProductId int
  70. }
  71. type ChartPermissionEditReq struct {
  72. ChartPermissionId int `description:"品种权限Id"` // 如果ID存在,则是更新操作,否则是新增操作
  73. PermissionName string `description:"品种权限名称"`
  74. Enabled int `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
  75. IsPublic int `description:"是否是公有权限1:公有权限,0私有权限"`
  76. PublicPermissionIds []int `description:"公有权限的ID列表"` //一级品种没有公有私有属性
  77. }
  78. type ChartPermissionMoveReq struct {
  79. ChartPermissionId int `description:"品种id"`
  80. // ParentChartPermissionId int `description:"父级品种id"`
  81. PrevChartPermissionId int `description:"上一个兄弟节点品种id"`
  82. NextChartPermissionId int `description:"下一个兄弟节点品种id"`
  83. }
  84. func crmEtaPost(url string, pars interface{}) (respBody []byte, err error) {
  85. params, e := json.Marshal(pars)
  86. if e != nil {
  87. err = fmt.Errorf("data json marshal err: %s", e.Error())
  88. return
  89. }
  90. body := ioutil.NopCloser(strings.NewReader(string(params)))
  91. client := &http.Client{}
  92. req, e := http.NewRequest("POST", url, body)
  93. if e != nil {
  94. err = fmt.Errorf("http create request err: %s", e.Error())
  95. return
  96. }
  97. contentType := "application/json;charset=utf-8"
  98. req.Header.Set("Content-Type", contentType)
  99. req.Header.Set("Authorization", utils.CrmEtaAuthorization)
  100. resp, e := client.Do(req)
  101. if e != nil {
  102. err = fmt.Errorf("http client do err: %s", e.Error())
  103. return
  104. }
  105. defer func() {
  106. _ = resp.Body.Close()
  107. }()
  108. b, e := ioutil.ReadAll(resp.Body)
  109. if e != nil {
  110. err = fmt.Errorf("resp body read err: %s", e.Error())
  111. return
  112. }
  113. if len(b) == 0 {
  114. err = fmt.Errorf("resp body is empty")
  115. return
  116. }
  117. // 生产环境解密, 注意有个坑前后的双引号
  118. if utils.RunMode == "release" {
  119. str := string(b)
  120. str = strings.Trim(str, `"`)
  121. b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
  122. }
  123. respBody = b
  124. return
  125. }
  126. func AddChartPermission(pars *ChartPermissionAddReq) (err error, errMsg string) {
  127. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/add")
  128. if pars.ProductId == 0 {
  129. pars.ProductId = 1 //默认新增ficc的品种
  130. }
  131. b, err := crmEtaPost(url, pars)
  132. if err != nil {
  133. errMsg = "新增品种失败"
  134. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  135. return
  136. }
  137. //result := new(models.ResultData)
  138. result := new(ChartPermissionResp)
  139. if e := json.Unmarshal(b, &result); e != nil {
  140. errMsg = "新增品种失败"
  141. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  142. return
  143. }
  144. utils.FileLog.Info("%s", string(b))
  145. if result.Code != 200 {
  146. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  147. errMsg = result.Msg
  148. return
  149. }
  150. return
  151. }
  152. func EditChartPermission(pars *ChartPermissionEditReq) (err error, errMsg string) {
  153. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/edit")
  154. b, err := crmEtaPost(url, pars)
  155. if err != nil {
  156. errMsg = "更新品种失败"
  157. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  158. return
  159. }
  160. //result := new(models.ResultData)
  161. result := new(ChartPermissionResp)
  162. if e := json.Unmarshal(b, &result); e != nil {
  163. errMsg = "更新品种失败"
  164. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  165. return
  166. }
  167. utils.FileLog.Info("%s", string(b))
  168. if result.Code != 200 {
  169. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  170. errMsg = result.Msg
  171. return
  172. }
  173. return
  174. }
  175. func MoveChartPermission(pars *ChartPermissionMoveReq) (err error, errMsg string) {
  176. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/move")
  177. b, err := crmEtaPost(url, pars)
  178. if err != nil {
  179. errMsg = "移动品种失败"
  180. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  181. return
  182. }
  183. //result := new(models.ResultData)
  184. result := new(ChartPermissionResp)
  185. if e := json.Unmarshal(b, &result); e != nil {
  186. errMsg = "移动品种失败"
  187. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  188. return
  189. }
  190. utils.FileLog.Info("%s", string(b))
  191. if result.Code != 200 {
  192. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  193. errMsg = result.Msg
  194. return
  195. }
  196. return
  197. }
  198. func GetChartPermissionEnabledList() (list []*company.PermissionSetList, err error) {
  199. var req GetChartPermissionReq
  200. data, err := getChartPermission(req)
  201. if err != nil {
  202. return
  203. }
  204. dataList := data.List
  205. //enabledList := make([]*models.ChartPermission, 0)
  206. parentList := make([]*models.ChartPermission, 0)
  207. enabledMap := make(map[int][]*company.PermissionSetItem)
  208. listMap := make(map[int]*models.ChartPermission)
  209. for _, v := range dataList {
  210. listMap[v.ChartPermissionId] = v
  211. if v.ParentId == 0 {
  212. parentList = append(parentList, v)
  213. }
  214. if v.Enabled == 1 && v.ParentId > 0 && v.PermissionType == 0 {
  215. //enabledList = append(enabledList, v)
  216. item := &company.PermissionSetItem{
  217. ChartPermissionId: v.ChartPermissionId,
  218. PermissionName: v.PermissionName,
  219. PermissionType: v.PermissionType,
  220. }
  221. enabledMap[v.ParentId] = append(enabledMap[v.ParentId], item)
  222. }
  223. }
  224. for _, v := range parentList {
  225. items, ok := enabledMap[v.ChartPermissionId]
  226. if !ok {
  227. continue
  228. }
  229. checkList := make([]int, 0)
  230. p := new(company.PermissionSetList)
  231. p.ClassifyName = v.PermissionName
  232. p.Items = items
  233. if v.PermissionName == "宏观经济" {
  234. checkList = append(checkList, 1)
  235. }
  236. p.CheckList = checkList
  237. list = append(list, p)
  238. }
  239. return
  240. }