chart_permission.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  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. if utils.CrmEtaServerUrl == "" {
  37. return
  38. }
  39. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/list")
  40. if pars.ProductId == 0 {
  41. pars.ProductId = 1 //默认查ficc的品种
  42. }
  43. b, err := crmEtaPost(url, pars)
  44. if err != nil {
  45. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  46. return
  47. }
  48. //result := new(models.ResultData)
  49. result := new(GetChartPermissionResp)
  50. if e := json.Unmarshal(b, &result); e != nil {
  51. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  52. return
  53. }
  54. utils.FileLog.Info("%s", string(b))
  55. if result.Code != 200 {
  56. err = fmt.Errorf("result: %s", string(b))
  57. return
  58. }
  59. res = result.Data
  60. return
  61. }
  62. type ChartPermissionResp struct {
  63. Code int `json:"code" description:"状态码"`
  64. Msg string `json:"msg" description:"提示信息"`
  65. ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
  66. }
  67. type ChartPermissionAddReq struct {
  68. PermissionName string `description:"品种权限名称"`
  69. ParentId int `description:"父级ID"`
  70. Enabled int `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
  71. IsPublic int `description:"是否是公有权限1:公有权限,0私有权限"`
  72. ProductId int
  73. }
  74. type ChartPermissionEditReq struct {
  75. ChartPermissionId int `description:"品种权限Id"` // 如果ID存在,则是更新操作,否则是新增操作
  76. PermissionName string `description:"品种权限名称"`
  77. ParentId int `description:"父级ID"`
  78. Enabled int `description:"是否可用 0禁用, 1启用"` //启用,禁用操作会关联二级品种
  79. IsPublic int `description:"是否是公有权限1:公有权限,0私有权限"`
  80. PublicPermissionIds []int `description:"公有权限的ID列表"` //一级品种没有公有私有属性
  81. }
  82. type ChartPermissionMoveReq struct {
  83. ChartPermissionId int `description:"品种id"`
  84. // ParentChartPermissionId int `description:"父级品种id"`
  85. PrevChartPermissionId int `description:"上一个兄弟节点品种id"`
  86. NextChartPermissionId int `description:"下一个兄弟节点品种id"`
  87. }
  88. func crmEtaPost(url string, pars interface{}) (respBody []byte, err error) {
  89. params, e := json.Marshal(pars)
  90. if e != nil {
  91. err = fmt.Errorf("data json marshal err: %s", e.Error())
  92. return
  93. }
  94. body := ioutil.NopCloser(strings.NewReader(string(params)))
  95. client := &http.Client{}
  96. req, e := http.NewRequest("POST", url, body)
  97. if e != nil {
  98. err = fmt.Errorf("http create request err: %s", e.Error())
  99. return
  100. }
  101. contentType := "application/json;charset=utf-8"
  102. req.Header.Set("Content-Type", contentType)
  103. req.Header.Set("Authorization", utils.CrmEtaAuthorization)
  104. resp, e := client.Do(req)
  105. if e != nil {
  106. err = fmt.Errorf("http client do err: %s", e.Error())
  107. return
  108. }
  109. defer func() {
  110. _ = resp.Body.Close()
  111. }()
  112. b, e := ioutil.ReadAll(resp.Body)
  113. if e != nil {
  114. err = fmt.Errorf("resp body read err: %s", e.Error())
  115. return
  116. }
  117. if len(b) == 0 {
  118. err = fmt.Errorf("resp body is empty")
  119. return
  120. }
  121. // 生产环境解密, 注意有个坑前后的双引号
  122. if utils.RunMode == "release" {
  123. str := string(b)
  124. str = strings.Trim(str, `"`)
  125. b = utils.DesBase64Decrypt([]byte(str), utils.CrmEtaServerDes3Key)
  126. }
  127. respBody = b
  128. return
  129. }
  130. func AddChartPermission(pars *ChartPermissionAddReq) (err error, errMsg string) {
  131. if utils.CrmEtaServerUrl == "" {
  132. return
  133. }
  134. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/add")
  135. if pars.ProductId == 0 {
  136. pars.ProductId = 1 //默认新增ficc的品种
  137. }
  138. b, err := crmEtaPost(url, pars)
  139. if err != nil {
  140. errMsg = "新增品种失败"
  141. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  142. return
  143. }
  144. //result := new(models.ResultData)
  145. result := new(ChartPermissionResp)
  146. if e := json.Unmarshal(b, &result); e != nil {
  147. errMsg = "新增品种失败"
  148. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  149. return
  150. }
  151. utils.FileLog.Info("%s", string(b))
  152. if result.Code != 200 {
  153. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  154. errMsg = result.Msg
  155. return
  156. }
  157. return
  158. }
  159. func EditChartPermission(pars *ChartPermissionEditReq) (err error, errMsg string) {
  160. if utils.CrmEtaServerUrl == "" {
  161. return
  162. }
  163. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/edit")
  164. b, err := crmEtaPost(url, pars)
  165. if err != nil {
  166. errMsg = "更新品种失败"
  167. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  168. return
  169. }
  170. //result := new(models.ResultData)
  171. result := new(ChartPermissionResp)
  172. if e := json.Unmarshal(b, &result); e != nil {
  173. errMsg = "更新品种失败"
  174. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  175. return
  176. }
  177. utils.FileLog.Info("%s", string(b))
  178. if result.Code != 200 {
  179. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  180. errMsg = result.Msg
  181. return
  182. }
  183. return
  184. }
  185. func MoveChartPermission(pars *ChartPermissionMoveReq) (err error, errMsg string) {
  186. if utils.CrmEtaServerUrl == "" {
  187. return
  188. }
  189. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/move")
  190. b, err := crmEtaPost(url, pars)
  191. if err != nil {
  192. errMsg = "移动品种失败"
  193. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  194. return
  195. }
  196. //result := new(models.ResultData)
  197. result := new(ChartPermissionResp)
  198. if e := json.Unmarshal(b, &result); e != nil {
  199. errMsg = "移动品种失败"
  200. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  201. return
  202. }
  203. utils.FileLog.Info("%s", string(b))
  204. if result.Code != 200 {
  205. err = fmt.Errorf("result: %s, err: %s", string(b), result.ErrMsg)
  206. errMsg = result.Msg
  207. return
  208. }
  209. return
  210. }
  211. // GetChartPermissionEnabledList 查询已启用的FICC权限列表
  212. func GetChartPermissionEnabledList() (list []*company.PermissionSetList, err error) {
  213. var req GetChartPermissionReq
  214. data, err := getChartPermission(req)
  215. if err != nil {
  216. return
  217. }
  218. dataList := data.List
  219. //enabledList := make([]*models.ChartPermission, 0)
  220. parentList := make([]*models.ChartPermission, 0)
  221. enabledMap := make(map[int][]*company.PermissionSetItem)
  222. listMap := make(map[int]*models.ChartPermission)
  223. for _, v := range dataList {
  224. listMap[v.ChartPermissionId] = v
  225. if v.ParentId == 0 {
  226. parentList = append(parentList, v)
  227. }
  228. if v.Enabled == 1 && v.ParentId > 0 && v.PermissionType == 0 {
  229. //enabledList = append(enabledList, v)
  230. item := &company.PermissionSetItem{
  231. ChartPermissionId: v.ChartPermissionId,
  232. PermissionName: v.PermissionName,
  233. PermissionType: v.PermissionType,
  234. }
  235. enabledMap[v.ParentId] = append(enabledMap[v.ParentId], item)
  236. }
  237. }
  238. for _, v := range parentList {
  239. items, ok := enabledMap[v.ChartPermissionId]
  240. if !ok {
  241. continue
  242. }
  243. checkList := make([]int, 0)
  244. p := new(company.PermissionSetList)
  245. p.PermissionName = v.PermissionName
  246. p.Child = items
  247. if v.PermissionName == "宏观经济" {
  248. checkList = append(checkList, 1)
  249. }
  250. p.CheckList = checkList
  251. list = append(list, p)
  252. }
  253. return
  254. }
  255. type EditClassifyPermissionReq struct {
  256. Keyword string
  257. ChartPermissionIdList []int `description:"权限id数组"`
  258. NewKeyword string
  259. }
  260. // GetClassifyChartPermission 获取报告分类已绑定的权限
  261. func GetClassifyChartPermission(classifyName string) (list []*models.ChartPermissionSearchKeyWordMapping, err error) {
  262. if utils.CrmEtaServerUrl == "" {
  263. return
  264. }
  265. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/classify")
  266. var req ClassifyPermissionReq
  267. req.Keyword = classifyName
  268. b, err := crmEtaPost(url, req)
  269. if err != nil {
  270. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  271. return
  272. }
  273. //result := new(models.ResultData)
  274. result := new(GetClassifyChartPermissionResp)
  275. if e := json.Unmarshal(b, &result); e != nil {
  276. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  277. return
  278. }
  279. utils.FileLog.Info("%s", string(b))
  280. if result.Code != 200 {
  281. err = fmt.Errorf("result: %s", string(b))
  282. return
  283. }
  284. list = result.Data.List
  285. return
  286. }
  287. type ClassifyPermissionReq struct {
  288. Keyword string
  289. }
  290. type ClassifyPermissionList struct {
  291. List []*models.ChartPermissionSearchKeyWordMapping
  292. }
  293. type GetClassifyChartPermissionResp struct {
  294. Code int `json:"code" description:"状态码"`
  295. Msg string `json:"msg" description:"提示信息"`
  296. Data ClassifyPermissionList `json:"data" description:"返回数据"`
  297. ErrMsg string `json:"-" description:"错误信息,不用返回给前端,只是做日志记录"`
  298. }
  299. // EditClassifyChartPermission 设置报告分类权限
  300. func EditClassifyChartPermission(req EditClassifyPermissionReq) (err error) {
  301. if utils.CrmEtaServerUrl == "" {
  302. return
  303. }
  304. url := fmt.Sprint(utils.CrmEtaServerUrl, "/api/crm/chart_permission/classify/edit")
  305. b, err := crmEtaPost(url, req)
  306. if err != nil {
  307. err = fmt.Errorf("url:%s err: %s", url, err.Error())
  308. return
  309. }
  310. //result := new(models.ResultData)
  311. result := new(ChartPermissionResp)
  312. if e := json.Unmarshal(b, &result); e != nil {
  313. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
  314. return
  315. }
  316. utils.FileLog.Info("%s", string(b))
  317. if result.Code != 200 {
  318. err = fmt.Errorf("result: %s", string(b))
  319. return
  320. }
  321. return
  322. }