permission.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. package company
  2. import (
  3. "errors"
  4. "fmt"
  5. companyCache "hongze/hongze_yb/cache/company"
  6. "hongze/hongze_yb/global"
  7. "hongze/hongze_yb/models/response"
  8. "hongze/hongze_yb/models/tables/admin"
  9. "hongze/hongze_yb/models/tables/chart_permission"
  10. "hongze/hongze_yb/models/tables/company"
  11. "hongze/hongze_yb/models/tables/company_product"
  12. "hongze/hongze_yb/models/tables/company_report_permission"
  13. "hongze/hongze_yb/models/tables/company_user_chart_classify_permission"
  14. "hongze/hongze_yb/models/tables/wx_user"
  15. "hongze/hongze_yb/models/tables/yb_apply_record"
  16. "hongze/hongze_yb/services/user"
  17. "hongze/hongze_yb/utils"
  18. "sort"
  19. "strings"
  20. "time"
  21. )
  22. var (
  23. CheckTypeApply = "apply"
  24. CheckTypeContact = "contact"
  25. CheckTypeExpire = "expired"
  26. )
  27. // GetClassNameListByProductId 根据权限id获取权限分类
  28. func GetClassNameListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  29. list, err = chart_permission.GetClassNameListByProductId(productId)
  30. return
  31. }
  32. // GetPermissionListByProductId 根据product_id获取所有的权限列表
  33. func GetPermissionListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  34. list, err = chart_permission.GetListByProductId(productId)
  35. return
  36. }
  37. // GetValidPermissionByCompany2ProductId 根据客户id和产品id获取有效的权限列表
  38. func GetValidPermissionByCompany2ProductId(companyId, productId int64) (list []*company_report_permission.CompanyReportPermission, err error) {
  39. where := make(map[string]interface{})
  40. where["company_id ="] = companyId
  41. where["product_id ="] = productId
  42. where["status in"] = []string{"正式", "试用", "永续"}
  43. list, err = company_report_permission.GetByWhereMap(where)
  44. return
  45. }
  46. // GetPurchasePermissionIdsByCompany2ProductId 根据客户id和产品id获取有效的权限id集合
  47. func GetPurchasePermissionIdsByCompany2ProductId(companyId, productId int64) (permissionIds []int, err error) {
  48. where := make(map[string]interface{})
  49. where["company_id ="] = companyId
  50. where["product_id ="] = productId
  51. where["status in"] = []string{"正式", "永续"}
  52. list, err := company_report_permission.GetByWhereMap(where)
  53. if err != nil {
  54. return
  55. }
  56. for _, v := range list {
  57. permissionIds = append(permissionIds, v.ChartPermissionID)
  58. }
  59. return
  60. }
  61. // GetValidPermissionIdListByCompany2ProductId 根据客户id和产品id获取有效的权限id列表
  62. func GetValidPermissionIdListByCompany2ProductId(companyId, productId int64) (list []int, err error) {
  63. companyReportPermissionList, err := GetValidPermissionByCompany2ProductId(companyId, productId)
  64. if err != nil {
  65. return
  66. }
  67. for _, v := range companyReportPermissionList {
  68. list = append(list, v.ChartPermissionID)
  69. }
  70. return
  71. }
  72. // PermissionCheckInfo 权限校验完成后的结果
  73. type PermissionCheckInfo struct {
  74. Name string `json:"name" description:"销售名称"`
  75. Mobile string `json:"mobile" description:"手机号"`
  76. Type string `json:"type" description:"校验失败,没有权限,需要让前端处理的类型,枚举值:apply,contact"`
  77. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  78. }
  79. // CustomerInfo 客户信息
  80. type CustomerInfo struct {
  81. CompanyName string `json:"company_name" description:"客户(公司)名称"`
  82. Name string `json:"name" description:"联系人名称"`
  83. Mobile string `json:"mobile" description:"手机号"`
  84. Status string `json:"status" description:"状态"`
  85. IsSuspend int8 `json:"is_suspend" description:"启用与否字段:1:暂停,0:启用"`
  86. HasApply bool `json:"has_apply" description:"是否有申请过"`
  87. }
  88. // CheckBaseFiccPermission 校验用户基本的FICC权限
  89. func CheckBaseFiccPermission(companyId int64, userId int) (ok bool, checkInfo response.PermissionCheckInfo, permissionIdArr []int, err error) {
  90. defer func() {
  91. // 无权限查询是否有申请记录
  92. if !ok {
  93. if checkInfo.Type == CheckTypeApply {
  94. if _, e := yb_apply_record.GetLastNotOpRecordByUserId(userId); e == nil {
  95. checkInfo.CustomerInfo.HasApply = true
  96. }
  97. }
  98. }
  99. }()
  100. // 潜在用户
  101. if companyId == 1 {
  102. checkInfo.Type = CheckTypeApply
  103. return
  104. }
  105. // 是否开通FICC
  106. productId := int64(1)
  107. productInfo, e := company_product.GetByCompany2ProductId(companyId, productId)
  108. if e != nil {
  109. if e == utils.ErrNoRow {
  110. checkInfo.Type = CheckTypeApply
  111. return
  112. }
  113. err = errors.New("获取用户FICC权限失败 Err:" + e.Error())
  114. return
  115. }
  116. // 客户状态是否为流失
  117. if productInfo.Status == "流失" {
  118. checkInfo.Type = CheckTypeApply
  119. return
  120. }
  121. // 是否为弘则研究已禁用的联系人
  122. if companyId == 16 {
  123. userInfo, e := wx_user.GetByUserId(userId)
  124. if e != nil {
  125. err = errors.New("用户信息异常 Err:" + e.Error())
  126. return
  127. }
  128. if userInfo.Enabled != 1 {
  129. checkInfo.Type = CheckTypeApply
  130. return
  131. }
  132. }
  133. // 客户对应的销售信息
  134. sellerInfo, e := admin.GetByAdminId(productInfo.SellerID)
  135. if e != nil {
  136. err = errors.New("获取用户销售信息失败 Err:" + e.Error())
  137. return
  138. }
  139. checkInfo.Name = sellerInfo.RealName
  140. checkInfo.Mobile = sellerInfo.Mobile
  141. if productInfo.Status == "冻结" || (productInfo.Status == "试用" && productInfo.IsSuspend == 1) {
  142. checkInfo.Type = CheckTypeContact
  143. return
  144. }
  145. // 正常用户, 获取有效权限
  146. permissionIdArr, e = GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  147. if e != nil {
  148. err = errors.New("获取用户有效权限列表失败 Err:" + e.Error())
  149. return
  150. }
  151. ok = true
  152. return
  153. }
  154. // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验(ficc)
  155. func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  156. defer func() {
  157. // 如果无权限,那么就去查询是否申请过
  158. if ok == false {
  159. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, userId, permissionIdList)
  160. }
  161. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  162. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
  163. if err != nil && err != utils.ErrNoRow {
  164. return
  165. }
  166. //查询是否有申请过,如果有申请过的话,那么err是nil
  167. if err == nil {
  168. permissionCheckInfo.CustomerInfo.HasApply = true
  169. }
  170. }
  171. }()
  172. //非潜在客户
  173. if len(permissionIdList) <= 0 {
  174. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  175. return
  176. }
  177. permissionMap := make(map[int]bool)
  178. for _, permissionId := range permissionIdList {
  179. permissionMap[permissionId] = true
  180. }
  181. var productId int64
  182. productId = 1
  183. if companyId > 1 {
  184. //查询是否 开通ficc的客户
  185. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  186. if tmpErr != nil {
  187. // 没有开通ficc的客户
  188. if tmpErr == utils.ErrNoRow {
  189. permissionCheckInfo.Type = CheckTypeApply
  190. return
  191. }
  192. err = tmpErr
  193. return
  194. }
  195. wxUser, tmpErr := wx_user.GetByUserId(userId)
  196. if tmpErr != nil {
  197. permissionCheckInfo.Type = CheckTypeApply
  198. err = tmpErr
  199. return
  200. }
  201. // 查询用户是否为弘则研究已禁用的联系人
  202. if companyId == 16 {
  203. if wxUser.Enabled != 1 {
  204. permissionCheckInfo.Type = CheckTypeApply
  205. return
  206. }
  207. }
  208. //客户信息
  209. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  210. if tmpErr != nil {
  211. // 没有开通ficc的客户
  212. if tmpErr == utils.ErrNoRow {
  213. permissionCheckInfo.Type = CheckTypeApply
  214. return
  215. }
  216. err = tmpErr
  217. return
  218. }
  219. customerInfo := CustomerInfo{
  220. CompanyName: companyInfo.CompanyName,
  221. Status: companyProductInfo.Status,
  222. Name: wxUser.RealName,
  223. IsSuspend: companyProductInfo.IsSuspend,
  224. Mobile: wxUser.Mobile,
  225. }
  226. permissionCheckInfo.CustomerInfo = customerInfo
  227. // 如果客户ficc产品的状态是流失,那么也是让去申请
  228. if companyProductInfo.Status == "流失" {
  229. permissionCheckInfo.Type = CheckTypeApply
  230. return
  231. }
  232. //查找对应客户的销售信息
  233. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  234. if tmpErr != nil {
  235. //if tmpErr ==
  236. err = tmpErr
  237. return
  238. }
  239. permissionCheckInfo.Name = adminInfo.RealName
  240. permissionCheckInfo.Mobile = adminInfo.Mobile
  241. if companyProductInfo.Status == "冻结" {
  242. permissionCheckInfo.Type = CheckTypeContact
  243. return
  244. }
  245. //客户状态是:试用暂停状态(联系销售)
  246. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  247. permissionCheckInfo.Type = CheckTypeContact
  248. return
  249. }
  250. // 获取有效的权限id列表
  251. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  252. if tmpErr != nil {
  253. err = tmpErr
  254. return
  255. }
  256. // 校验在有效的权限id列表中是否存在该权限
  257. for _, validPermissionId := range validPermissionIdList {
  258. //如果有该权限id,那么直接返回校验通过
  259. if _, validOk := permissionMap[validPermissionId]; validOk {
  260. ok = true
  261. return
  262. }
  263. }
  264. permissionCheckInfo.Type = CheckTypeContact
  265. } else {
  266. permissionCheckInfo.Type = CheckTypeApply
  267. }
  268. return
  269. }
  270. func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo response.PermissionCheckInfo, finalValidPermissionIds []int, err error) {
  271. defer func() {
  272. // 如果无权限,那么就去查询是否申请过
  273. if ok == false {
  274. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, userId, permissionIdList)
  275. }
  276. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  277. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
  278. if err != nil {
  279. if err == utils.ErrNoRow {
  280. err = nil
  281. }
  282. return
  283. }
  284. //查询是否有申请过,如果有申请过的话,那么err是nil
  285. if err == nil {
  286. permissionCheckInfo.CustomerInfo.HasApply = true
  287. }
  288. }
  289. }()
  290. permissionCheckInfo.HzPhone = utils.HZPHONE
  291. //非潜在客户
  292. permissionMap := make(map[int]bool)
  293. if len(permissionIdList) > 0 {
  294. for _, permissionId := range permissionIdList {
  295. permissionMap[permissionId] = true
  296. }
  297. }
  298. var productId int64
  299. productId = 1
  300. if companyId > 1 {
  301. //查询是否 开通ficc的客户
  302. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  303. if tmpErr != nil {
  304. // 没有开通ficc的客户
  305. if tmpErr == utils.ErrNoRow {
  306. permissionCheckInfo.Type = CheckTypeApply
  307. return
  308. }
  309. err = tmpErr
  310. return
  311. }
  312. wxUser, tmpErr := wx_user.GetByUserId(userId)
  313. if tmpErr != nil {
  314. permissionCheckInfo.Type = CheckTypeApply
  315. err = tmpErr
  316. return
  317. }
  318. //客户信息
  319. companyInfo, tmpErr := companyCache.GetByCompanyId(companyId)
  320. if tmpErr != nil {
  321. // 没有开通ficc的客户
  322. if tmpErr == utils.ErrNoRow {
  323. permissionCheckInfo.Type = CheckTypeApply
  324. return
  325. }
  326. err = tmpErr
  327. return
  328. }
  329. customerInfo := response.CustomerInfo{
  330. CompanyName: companyInfo.CompanyName,
  331. Status: companyProductInfo.Status,
  332. Name: wxUser.RealName,
  333. IsSuspend: companyProductInfo.IsSuspend,
  334. Mobile: wxUser.Mobile,
  335. }
  336. permissionCheckInfo.CustomerInfo = customerInfo
  337. // 如果客户ficc产品的状态是流失,那么也是让去申请
  338. if companyProductInfo.Status == "流失" {
  339. permissionCheckInfo.Type = CheckTypeApply
  340. return
  341. }
  342. //查找对应客户的销售信息
  343. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  344. if tmpErr != nil {
  345. //if tmpErr ==
  346. err = tmpErr
  347. return
  348. }
  349. permissionCheckInfo.Name = adminInfo.RealName
  350. permissionCheckInfo.Mobile = adminInfo.Mobile
  351. if companyProductInfo.Status == "冻结" {
  352. permissionCheckInfo.Type = CheckTypeContact
  353. return
  354. }
  355. //客户状态是:试用暂停状态(联系销售)
  356. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  357. permissionCheckInfo.Type = CheckTypeContact
  358. return
  359. }
  360. // 获取有效的权限id列表
  361. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  362. if tmpErr != nil {
  363. err = tmpErr
  364. return
  365. }
  366. // 校验在有效的权限id列表中是否存在该权限
  367. if len(permissionIdList) > 0 {
  368. for _, validPermissionId := range validPermissionIdList {
  369. //如果有该权限id,那么直接返回校验通过
  370. if _, validOk := permissionMap[validPermissionId]; validOk {
  371. finalValidPermissionIds = append(finalValidPermissionIds, validPermissionId)
  372. ok = true
  373. }
  374. }
  375. return
  376. }
  377. permissionCheckInfo.Type = CheckTypeContact
  378. } else {
  379. permissionCheckInfo.Type = CheckTypeApply
  380. }
  381. return
  382. }
  383. // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
  384. func checkPermissionByPermissionIdList2Rai(companyId int64, userId int, permissionIdList []int) (ok bool, err error) {
  385. //非潜在客户
  386. if len(permissionIdList) <= 0 {
  387. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  388. return
  389. }
  390. // 查询用户是否为弘则研究已禁用的联系人
  391. wxUser, tmpErr := wx_user.GetByUserId(userId)
  392. if tmpErr != nil {
  393. err = fmt.Errorf("用户信息异常")
  394. return
  395. }
  396. if companyId == 16 {
  397. if wxUser.Enabled != 1 {
  398. return
  399. }
  400. }
  401. //市场策略(ficc权限id):33
  402. ficcPermissionId := 33
  403. //市场策略(权益权限id):23
  404. raiPermissionId := 23
  405. //是否往下校验
  406. var permissionOk bool
  407. for _, permissionId := range permissionIdList {
  408. if permissionId == ficcPermissionId {
  409. permissionOk = true
  410. }
  411. }
  412. var productId int64
  413. productId = 2
  414. if companyId > 1 && permissionOk {
  415. // 获取有效的权限id列表
  416. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  417. if tmpErr != nil {
  418. err = tmpErr
  419. return
  420. }
  421. // 校验在有效的权限id列表中是否存在该权限
  422. for _, validPermissionId := range validPermissionIdList {
  423. if validPermissionId == raiPermissionId {
  424. ok = true
  425. return
  426. }
  427. }
  428. }
  429. return
  430. }
  431. // ChartPermissionCheckInfo 图表权限验证信息
  432. type ChartPermissionCheckInfo struct {
  433. Name string `json:"name" description:"销售名称"`
  434. Mobile string `json:"mobile" description:"手机号"`
  435. Type string `json:"type" description:"无权限,需要前端处理的类型,枚举值:expired, apply, contact"`
  436. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  437. }
  438. // CheckUserChartPermission 验证用户/联系人的图库权限
  439. func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionCheckInfo ChartPermissionCheckInfo, err error) {
  440. defer func() {
  441. // 如果无权限,那么就去查询是否申请过
  442. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  443. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 图库申请
  444. // 查询是否有申请过,如果有申请过的话,那么err是nil
  445. if err != nil {
  446. if err == utils.ErrNoRow {
  447. err = nil
  448. return
  449. }
  450. return
  451. }
  452. permissionCheckInfo.CustomerInfo.HasApply = true
  453. }
  454. }()
  455. var productId int64
  456. productId = 1
  457. if companyId > 1 {
  458. // 查询是否开通FICC
  459. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  460. if tmpErr != nil {
  461. // 没有开通FICC
  462. if tmpErr == utils.ErrNoRow {
  463. permissionCheckInfo.Type = CheckTypeApply
  464. return
  465. }
  466. err = tmpErr
  467. return
  468. }
  469. wxUser, tmpErr := wx_user.GetByUserId(userId)
  470. if tmpErr != nil {
  471. permissionCheckInfo.Type = CheckTypeApply
  472. err = tmpErr
  473. return
  474. }
  475. // 查询用户是否为弘则研究已禁用的联系人
  476. if companyId == 16 {
  477. if wxUser.Enabled != 1 {
  478. permissionCheckInfo.Type = CheckTypeApply
  479. return
  480. }
  481. }
  482. // 客户信息
  483. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  484. if tmpErr != nil {
  485. // 没有开通FICC
  486. if tmpErr == utils.ErrNoRow {
  487. permissionCheckInfo.Type = CheckTypeApply
  488. return
  489. }
  490. err = tmpErr
  491. return
  492. }
  493. customerInfo := CustomerInfo{
  494. CompanyName: companyInfo.CompanyName,
  495. Status: companyProductInfo.Status,
  496. Name: wxUser.RealName,
  497. IsSuspend: companyProductInfo.IsSuspend,
  498. Mobile: wxUser.Mobile,
  499. }
  500. permissionCheckInfo.CustomerInfo = customerInfo
  501. // 如果客户FICC产品的状态是流失-申请
  502. if companyProductInfo.Status == "流失" {
  503. permissionCheckInfo.Type = CheckTypeApply
  504. return
  505. }
  506. // 查找对应客户的销售信息
  507. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  508. if tmpErr != nil {
  509. err = tmpErr
  510. return
  511. }
  512. // 客户状态为冻结/试用暂停-联系销售
  513. permissionCheckInfo.Name = adminInfo.RealName
  514. permissionCheckInfo.Mobile = adminInfo.Mobile
  515. if companyProductInfo.Status == "冻结" || (companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1) {
  516. permissionCheckInfo.Type = CheckTypeContact
  517. return
  518. }
  519. // 验证用户的图表权限
  520. permissionInfo, tmpErr := company_user_chart_classify_permission.GetPermissionByUserId(userId)
  521. if tmpErr != nil {
  522. if tmpErr == utils.ErrNoRow {
  523. // 无权限-联系销售
  524. permissionCheckInfo.Type = CheckTypeContact
  525. return
  526. }
  527. err = tmpErr
  528. return
  529. }
  530. nowTime := time.Now()
  531. if permissionInfo.Enabled != 1 {
  532. // 权限被禁用-联系销售
  533. permissionCheckInfo.Type = CheckTypeContact
  534. return
  535. }
  536. endTime := permissionInfo.EndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  537. if nowTime.After(permissionInfo.StartTime) && nowTime.Before(endTime) {
  538. ok = true
  539. } else {
  540. // 权限已到期
  541. permissionCheckInfo.Type = CheckTypeExpire
  542. return
  543. }
  544. // 都不是默认联系销售
  545. permissionCheckInfo.Type = CheckTypeContact
  546. } else {
  547. permissionCheckInfo.Type = CheckTypeApply
  548. }
  549. return
  550. }
  551. type FiccPermissionList struct {
  552. ClassifyName string `description:"分类"`
  553. HasPermission bool `description:"是否有权限"`
  554. Items []*PermissionItem `description:"子类"`
  555. }
  556. type PermissionItem struct {
  557. PermissionId int `description:"权限id"`
  558. PermissionName string `description:"权限名称"`
  559. HasPermission bool `description:"是否有权限"`
  560. }
  561. // GetFiccPermissionList 获取FICC品种权限列表-不校验用户权限
  562. func GetFiccPermissionList() (list []*FiccPermissionList, err error) {
  563. productId := 1
  564. list = make([]*FiccPermissionList, 0)
  565. for _, v := range utils.PermissionFiccClassifyArr {
  566. classify := new(FiccPermissionList)
  567. classify.ClassifyName = v
  568. items, e := chart_permission.GetListByProductIdAndClassifyName(productId, v)
  569. if e != nil {
  570. err = errors.New("获取品种权限失败 Err:" + e.Error())
  571. return
  572. }
  573. tmpItems := make([]*PermissionItem, 0)
  574. for _, iv := range items {
  575. item := new(PermissionItem)
  576. item.PermissionId = int(iv.ChartPermissionID)
  577. item.PermissionName = iv.PermissionName
  578. tmpItems = append(tmpItems, item)
  579. }
  580. classify.Items = tmpItems
  581. list = append(list, classify)
  582. }
  583. return
  584. }
  585. func GetHomeFiccPermissions(user user.UserInfo) (ret response.PermissionFiccResp, err error) {
  586. var errMsg string
  587. defer func() {
  588. if err != nil {
  589. global.LOG.Critical(fmt.Sprintf("GetHomeFiccPermissions: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  590. }
  591. }()
  592. validPermissionList, err := GetValidPermissionByCompany2ProductId(user.CompanyID, 1)
  593. if err != nil {
  594. return
  595. }
  596. var validPermissionIds []int
  597. for _, item := range validPermissionList {
  598. validPermissionIds = append(validPermissionIds, item.ChartPermissionID)
  599. }
  600. permissionList, err := chart_permission.GetFiccListExceptTacticByProductId()
  601. if err != nil {
  602. return
  603. }
  604. permissionMap := make(map[uint64]bool)
  605. permissionFirstMap := make(map[string]*response.PermissionFirstItem)
  606. permissionFirstMap["宏观经济"] = &response.PermissionFirstItem{
  607. Sort: 1001,
  608. }
  609. permissionFirstMap["化工产业"] = &response.PermissionFirstItem{
  610. Sort: 1002,
  611. }
  612. permissionFirstMap["黑色产业"] = &response.PermissionFirstItem{
  613. Sort: 1003,
  614. }
  615. permissionFirstMap["有色产业"] = &response.PermissionFirstItem{
  616. Sort: 1004,
  617. }
  618. for k, v := range permissionList {
  619. permissionMap[v.ChartPermissionID] = false
  620. for _, myPerId := range validPermissionIds {
  621. if int(v.ChartPermissionID) == myPerId {
  622. permissionMap[v.ChartPermissionID] = true
  623. permissionList[k].Sort = v.Sort - 1000
  624. if _, ok := permissionFirstMap[v.ClassifyName]; ok && !permissionFirstMap[v.ClassifyName].IsCheck {
  625. permissionFirstMap[v.ClassifyName].AuthOk = true
  626. permissionFirstMap[v.ClassifyName].Sort -= 1000
  627. permissionFirstMap[v.ClassifyName].IsCheck = true
  628. }
  629. break
  630. }
  631. }
  632. }
  633. for _, v := range permissionList {
  634. temp := new(response.PermissionFiccSecondItem)
  635. temp.Sort = v.Sort
  636. temp.ChartPermissionID = int(v.ChartPermissionID)
  637. temp.ChartPermissionName = v.PermissionName
  638. temp.AuthOk = permissionMap[v.ChartPermissionID]
  639. if _, ok := permissionFirstMap[v.ClassifyName]; ok {
  640. permissionFirstMap[v.ClassifyName].List = append(permissionFirstMap[v.ClassifyName].List, temp)
  641. } else {
  642. permissionFirstMap[v.ClassifyName] = &response.PermissionFirstItem{
  643. List: []*response.PermissionFiccSecondItem{temp},
  644. }
  645. }
  646. }
  647. var list response.PermissionFiccList
  648. for k, v := range permissionFirstMap {
  649. temp := new(response.PermissionFiccItem)
  650. temp.Sort = v.Sort
  651. temp.ClassifyName = k
  652. if strings.Contains(temp.ClassifyName, "宏观") {
  653. temp.ClassifyName = "宏观经济"
  654. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_hongguan_select.png"
  655. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_hongguan.png"
  656. } else if temp.ClassifyName == "化工产业" {
  657. temp.ClassifyName = "化工"
  658. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_huagong_select.png"
  659. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_huagong.png"
  660. } else if temp.ClassifyName == "黑色产业" {
  661. temp.ClassifyName = "黑色"
  662. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_black_select.png"
  663. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_black.png"
  664. } else if temp.ClassifyName == "有色产业" {
  665. temp.ClassifyName = "有色"
  666. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_youse_select.png"
  667. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_youse.png"
  668. }
  669. if len(v.List) > 0 {
  670. temp.List = v.List
  671. sort.Sort(temp.List)
  672. }
  673. list = append(list, temp)
  674. }
  675. if len(list) > 0 {
  676. sort.Sort(list)
  677. }
  678. //判断是否是已购用户,如果是已购用户,需要返回对应的联系人方式
  679. companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1)
  680. if err != nil {
  681. if err == utils.ErrNoRow {
  682. err = nil
  683. }
  684. }
  685. if err != nil {
  686. errMsg = err.Error()
  687. err = errors.New("查询用户状态失败")
  688. return
  689. }
  690. // 已购仅付费用户可见
  691. var contactInfo response.PermissionCheckContactInfo
  692. checkFlag := false
  693. if companyProduct.Status != "" && strings.Contains("永续,正式", companyProduct.Status) {
  694. //查询对应的销售
  695. //查找对应客户的销售信息
  696. adminInfo, tmpErr := admin.GetByAdminId(companyProduct.SellerID)
  697. if tmpErr != nil {
  698. errMsg = tmpErr.Error()
  699. err = errors.New("查询销售信息出错")
  700. return
  701. }
  702. contactInfo.Name = adminInfo.RealName
  703. contactInfo.Mobile = adminInfo.Mobile
  704. checkFlag = true
  705. }
  706. temp := new(response.PermissionFiccItem)
  707. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_more_select.png"
  708. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_more.png"
  709. temp.ClassifyName = "更多报告"
  710. temp.Sort = 100000
  711. list = append(list, temp)
  712. ret.PermissionList = list
  713. ret.CheckFlag = checkFlag
  714. ret.ContactInfo = contactInfo
  715. return
  716. }