chart_permission.go 11 KB

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