permission.go 26 KB

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