permission.go 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003
  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. wxUser, e := wx_user.GetByUserId(userId)
  118. if e != nil {
  119. err = errors.New("不存在当前用户, Err:" + e.Error())
  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. customerInfo := response.CustomerInfo{
  135. CompanyName: productInfo.CompanyName,
  136. Status: productInfo.Status,
  137. Name: wxUser.RealName,
  138. IsSuspend: productInfo.IsSuspend,
  139. Mobile: wxUser.Mobile,
  140. }
  141. checkInfo.CustomerInfo = customerInfo
  142. // 客户状态是否为流失
  143. if productInfo.Status == "流失" {
  144. checkInfo.Type = CheckTypeApply
  145. return
  146. }
  147. // 客户对应的销售信息
  148. sellerInfo, e := admin.GetByAdminId(productInfo.SellerID)
  149. if e != nil {
  150. err = errors.New("获取用户销售信息失败 Err:" + e.Error())
  151. return
  152. }
  153. checkInfo.Name = sellerInfo.RealName
  154. checkInfo.Mobile = sellerInfo.Mobile
  155. if productInfo.Status == "冻结" || (productInfo.Status == "试用" && productInfo.IsSuspend == 1) {
  156. checkInfo.Type = CheckTypeContact
  157. return
  158. }
  159. // 正常用户, 获取有效权限
  160. permissionIdArr, e = GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  161. if e != nil {
  162. err = errors.New("获取用户有效权限列表失败 Err:" + e.Error())
  163. return
  164. }
  165. ok = true
  166. return
  167. }
  168. // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验(ficc)
  169. func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  170. defer func() {
  171. // 如果无权限,那么就去查询是否申请过
  172. if ok == false {
  173. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, userId, permissionIdList)
  174. }
  175. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  176. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
  177. if err != nil && err != utils.ErrNoRow {
  178. return
  179. }
  180. //查询是否有申请过,如果有申请过的话,那么err是nil
  181. if err == nil {
  182. permissionCheckInfo.CustomerInfo.HasApply = true
  183. }
  184. }
  185. }()
  186. //非潜在客户
  187. if len(permissionIdList) <= 0 {
  188. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  189. return
  190. }
  191. permissionMap := make(map[int]bool)
  192. for _, permissionId := range permissionIdList {
  193. permissionMap[permissionId] = true
  194. }
  195. var productId int64
  196. productId = 1
  197. if companyId > 1 {
  198. //查询是否 开通ficc的客户
  199. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  200. if tmpErr != nil {
  201. // 没有开通ficc的客户
  202. if tmpErr == utils.ErrNoRow {
  203. permissionCheckInfo.Type = CheckTypeApply
  204. return
  205. }
  206. err = tmpErr
  207. return
  208. }
  209. wxUser, tmpErr := wx_user.GetByUserId(userId)
  210. if tmpErr != nil {
  211. permissionCheckInfo.Type = CheckTypeApply
  212. err = tmpErr
  213. return
  214. }
  215. // 查询用户是否为弘则研究已禁用的联系人
  216. if companyId == 16 {
  217. if wxUser.Enabled != 1 {
  218. permissionCheckInfo.Type = CheckTypeApply
  219. return
  220. }
  221. }
  222. //客户信息
  223. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  224. if tmpErr != nil {
  225. // 没有开通ficc的客户
  226. if tmpErr == utils.ErrNoRow {
  227. permissionCheckInfo.Type = CheckTypeApply
  228. return
  229. }
  230. err = tmpErr
  231. return
  232. }
  233. customerInfo := CustomerInfo{
  234. CompanyName: companyInfo.CompanyName,
  235. Status: companyProductInfo.Status,
  236. Name: wxUser.RealName,
  237. IsSuspend: companyProductInfo.IsSuspend,
  238. Mobile: wxUser.Mobile,
  239. }
  240. permissionCheckInfo.CustomerInfo = customerInfo
  241. // 如果客户ficc产品的状态是流失,那么也是让去申请
  242. if companyProductInfo.Status == "流失" {
  243. permissionCheckInfo.Type = CheckTypeApply
  244. return
  245. }
  246. //查找对应客户的销售信息
  247. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  248. if tmpErr != nil {
  249. //if tmpErr ==
  250. err = tmpErr
  251. return
  252. }
  253. permissionCheckInfo.Name = adminInfo.RealName
  254. permissionCheckInfo.Mobile = adminInfo.Mobile
  255. if companyProductInfo.Status == "冻结" {
  256. permissionCheckInfo.Type = CheckTypeContact
  257. return
  258. }
  259. //客户状态是:试用暂停状态(联系销售)
  260. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  261. permissionCheckInfo.Type = CheckTypeContact
  262. return
  263. }
  264. // 获取有效的权限id列表
  265. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  266. if tmpErr != nil {
  267. err = tmpErr
  268. return
  269. }
  270. // 校验在有效的权限id列表中是否存在该权限
  271. for _, validPermissionId := range validPermissionIdList {
  272. //如果有该权限id,那么直接返回校验通过
  273. if _, validOk := permissionMap[validPermissionId]; validOk {
  274. ok = true
  275. return
  276. }
  277. }
  278. permissionCheckInfo.Type = CheckTypeContact
  279. } else {
  280. permissionCheckInfo.Type = CheckTypeApply
  281. }
  282. return
  283. }
  284. func GetCheckPermission(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo response.PermissionCheckInfo, finalValidPermissionIds []int, err error) {
  285. defer func() {
  286. // 如果无权限,那么就去查询是否申请过
  287. if ok == false {
  288. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, userId, permissionIdList)
  289. }
  290. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  291. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
  292. if err != nil {
  293. if err == utils.ErrNoRow {
  294. err = nil
  295. }
  296. return
  297. }
  298. //查询是否有申请过,如果有申请过的话,那么err是nil
  299. if err == nil {
  300. permissionCheckInfo.CustomerInfo.HasApply = true
  301. }
  302. }
  303. }()
  304. permissionCheckInfo.HzPhone = utils.HZPHONE
  305. //非潜在客户
  306. permissionMap := make(map[int]bool)
  307. if len(permissionIdList) > 0 {
  308. for _, permissionId := range permissionIdList {
  309. permissionMap[permissionId] = true
  310. }
  311. }
  312. var productId int64
  313. productId = 1
  314. if companyId > 1 {
  315. //查询是否 开通ficc的客户
  316. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  317. if tmpErr != nil {
  318. // 没有开通ficc的客户
  319. if tmpErr == utils.ErrNoRow {
  320. permissionCheckInfo.Type = CheckTypeApply
  321. return
  322. }
  323. err = tmpErr
  324. return
  325. }
  326. wxUser, tmpErr := wx_user.GetByUserId(userId)
  327. if tmpErr != nil {
  328. permissionCheckInfo.Type = CheckTypeApply
  329. err = tmpErr
  330. return
  331. }
  332. //客户信息
  333. companyInfo, tmpErr := companyCache.GetByCompanyId(companyId)
  334. if tmpErr != nil {
  335. // 没有开通ficc的客户
  336. if tmpErr == utils.ErrNoRow {
  337. permissionCheckInfo.Type = CheckTypeApply
  338. return
  339. }
  340. err = tmpErr
  341. return
  342. }
  343. customerInfo := response.CustomerInfo{
  344. CompanyName: companyInfo.CompanyName,
  345. Status: companyProductInfo.Status,
  346. Name: wxUser.RealName,
  347. IsSuspend: companyProductInfo.IsSuspend,
  348. Mobile: wxUser.Mobile,
  349. }
  350. permissionCheckInfo.CustomerInfo = customerInfo
  351. // 如果客户ficc产品的状态是流失,那么也是让去申请
  352. if companyProductInfo.Status == "流失" {
  353. permissionCheckInfo.Type = CheckTypeApply
  354. return
  355. }
  356. //查找对应客户的销售信息
  357. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  358. if tmpErr != nil {
  359. //if tmpErr ==
  360. err = tmpErr
  361. return
  362. }
  363. permissionCheckInfo.Name = adminInfo.RealName
  364. permissionCheckInfo.Mobile = adminInfo.Mobile
  365. if companyProductInfo.Status == "冻结" {
  366. permissionCheckInfo.Type = CheckTypeContact
  367. return
  368. }
  369. //客户状态是:试用暂停状态(联系销售)
  370. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  371. permissionCheckInfo.Type = CheckTypeContact
  372. return
  373. }
  374. // 获取有效的权限id列表
  375. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  376. if tmpErr != nil {
  377. err = tmpErr
  378. return
  379. }
  380. // 校验在有效的权限id列表中是否存在该权限
  381. if len(permissionIdList) > 0 {
  382. for _, validPermissionId := range validPermissionIdList {
  383. //如果有该权限id,那么直接返回校验通过
  384. if _, validOk := permissionMap[validPermissionId]; validOk {
  385. finalValidPermissionIds = append(finalValidPermissionIds, validPermissionId)
  386. ok = true
  387. }
  388. }
  389. return
  390. }
  391. permissionCheckInfo.Type = CheckTypeContact
  392. } else {
  393. permissionCheckInfo.Type = CheckTypeApply
  394. }
  395. return
  396. }
  397. // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
  398. func checkPermissionByPermissionIdList2Rai(companyId int64, userId int, permissionIdList []int) (ok bool, err error) {
  399. //非潜在客户
  400. if len(permissionIdList) <= 0 {
  401. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  402. return
  403. }
  404. // 查询用户是否为弘则研究已禁用的联系人
  405. wxUser, tmpErr := wx_user.GetByUserId(userId)
  406. if tmpErr != nil {
  407. err = fmt.Errorf("用户信息异常")
  408. return
  409. }
  410. if companyId == 16 {
  411. if wxUser.Enabled != 1 {
  412. return
  413. }
  414. }
  415. //市场策略(ficc权限id):33
  416. ficcPermissionId := 33
  417. //市场策略(权益权限id):23
  418. raiPermissionId := 23
  419. //是否往下校验
  420. var permissionOk bool
  421. for _, permissionId := range permissionIdList {
  422. if permissionId == ficcPermissionId {
  423. permissionOk = true
  424. }
  425. }
  426. var productId int64
  427. productId = 2
  428. if companyId > 1 && permissionOk {
  429. // 获取有效的权限id列表
  430. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  431. if tmpErr != nil {
  432. err = tmpErr
  433. return
  434. }
  435. // 校验在有效的权限id列表中是否存在该权限
  436. for _, validPermissionId := range validPermissionIdList {
  437. if validPermissionId == raiPermissionId {
  438. ok = true
  439. return
  440. }
  441. }
  442. }
  443. return
  444. }
  445. // ChartPermissionCheckInfo 图表权限验证信息
  446. type ChartPermissionCheckInfo struct {
  447. Name string `json:"name" description:"销售名称"`
  448. Mobile string `json:"mobile" description:"手机号"`
  449. Type string `json:"type" description:"无权限,需要前端处理的类型,枚举值:expired, apply, contact"`
  450. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  451. Jump string `json:"jump" description:"需要跳转的页面,sandbox_list"`
  452. }
  453. // CheckUserChartPermission 验证用户/联系人的图库权限
  454. func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionCheckInfo ChartPermissionCheckInfo, err error) {
  455. defer func() {
  456. // 如果无权限,那么就去查询是否申请过
  457. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  458. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 图库申请
  459. // 查询是否有申请过,如果有申请过的话,那么err是nil
  460. if err != nil {
  461. if err == utils.ErrNoRow {
  462. err = nil
  463. return
  464. }
  465. return
  466. }
  467. permissionCheckInfo.CustomerInfo.HasApply = true
  468. }
  469. }()
  470. var productId int64
  471. productId = 1
  472. if companyId > 1 {
  473. // 查询是否开通FICC
  474. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  475. if tmpErr != nil {
  476. // 没有开通FICC
  477. if tmpErr == utils.ErrNoRow {
  478. permissionCheckInfo.Type = CheckTypeApply
  479. return
  480. }
  481. err = tmpErr
  482. return
  483. }
  484. wxUser, tmpErr := wx_user.GetByUserId(userId)
  485. if tmpErr != nil {
  486. permissionCheckInfo.Type = CheckTypeApply
  487. err = tmpErr
  488. return
  489. }
  490. // 查询用户是否为弘则研究已禁用的联系人
  491. if companyId == 16 {
  492. if wxUser.Enabled != 1 {
  493. permissionCheckInfo.Type = CheckTypeApply
  494. return
  495. }
  496. }
  497. // 客户信息
  498. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  499. if tmpErr != nil {
  500. // 没有开通FICC
  501. if tmpErr == utils.ErrNoRow {
  502. permissionCheckInfo.Type = CheckTypeApply
  503. return
  504. }
  505. err = tmpErr
  506. return
  507. }
  508. customerInfo := CustomerInfo{
  509. CompanyName: companyInfo.CompanyName,
  510. Status: companyProductInfo.Status,
  511. Name: wxUser.RealName,
  512. IsSuspend: companyProductInfo.IsSuspend,
  513. Mobile: wxUser.Mobile,
  514. }
  515. permissionCheckInfo.CustomerInfo = customerInfo
  516. // 如果客户FICC产品的状态是流失-申请
  517. if companyProductInfo.Status == "流失" {
  518. permissionCheckInfo.Type = CheckTypeApply
  519. return
  520. }
  521. // 查找对应客户的销售信息
  522. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  523. if tmpErr != nil {
  524. err = tmpErr
  525. return
  526. }
  527. // 客户状态为冻结/试用暂停-联系销售
  528. permissionCheckInfo.Name = adminInfo.RealName
  529. permissionCheckInfo.Mobile = adminInfo.Mobile
  530. if companyProductInfo.Status == "冻结" || (companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1) {
  531. permissionCheckInfo.Type = CheckTypeContact
  532. return
  533. }
  534. // 验证用户的图表权限
  535. permissionInfo, tmpErr := company_user_chart_classify_permission.GetPermissionByUserId(userId)
  536. if tmpErr != nil {
  537. if tmpErr == utils.ErrNoRow {
  538. // 无权限-联系销售
  539. permissionCheckInfo.Type = CheckTypeContact
  540. return
  541. }
  542. err = tmpErr
  543. return
  544. }
  545. nowTime := time.Now()
  546. if permissionInfo.Enabled != 1 {
  547. // 权限被禁用-联系销售
  548. permissionCheckInfo.Type = CheckTypeContact
  549. return
  550. }
  551. endTime := permissionInfo.EndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second)
  552. if nowTime.After(permissionInfo.StartTime) && nowTime.Before(endTime) {
  553. ok = true
  554. } else {
  555. // 权限已到期
  556. permissionCheckInfo.Type = CheckTypeExpire
  557. return
  558. }
  559. // 都不是默认联系销售
  560. permissionCheckInfo.Type = CheckTypeContact
  561. } else {
  562. permissionCheckInfo.Type = CheckTypeApply
  563. }
  564. return
  565. }
  566. type FiccPermissionList struct {
  567. ClassifyName string `description:"分类"`
  568. //HasPermission bool `description:"是否有权限"`
  569. Items []*PermissionItem `description:"子类"`
  570. }
  571. type PermissionItem struct {
  572. PermissionId int `description:"权限id"`
  573. PermissionName string `description:"权限名称"`
  574. //HasPermission bool `description:"是否有权限"`
  575. }
  576. // GetFiccPermissionList 获取FICC品种权限列表-不校验用户权限
  577. func GetFiccPermissionList() (list []*FiccPermissionList, err error) {
  578. productId := 1
  579. list = make([]*FiccPermissionList, 0)
  580. for _, v := range utils.PermissionFiccClassifyArr {
  581. classify := new(FiccPermissionList)
  582. classify.ClassifyName = v
  583. items, e := chart_permission.GetListByProductIdAndClassifyName(productId, v)
  584. if e != nil {
  585. err = errors.New("获取品种权限失败 Err:" + e.Error())
  586. return
  587. }
  588. tmpItems := make([]*PermissionItem, 0)
  589. for _, iv := range items {
  590. item := new(PermissionItem)
  591. item.PermissionId = int(iv.ChartPermissionID)
  592. item.PermissionName = iv.PermissionName
  593. tmpItems = append(tmpItems, item)
  594. }
  595. classify.Items = tmpItems
  596. list = append(list, classify)
  597. }
  598. return
  599. }
  600. func GetHomeFiccPermissions(user user.UserInfo) (ret response.PermissionFiccResp, err error) {
  601. var errMsg string
  602. defer func() {
  603. if err != nil {
  604. global.LOG.Critical(fmt.Sprintf("GetHomeFiccPermissions: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  605. }
  606. }()
  607. validPermissionList, err := GetValidPermissionByCompany2ProductId(user.CompanyID, 1)
  608. if err != nil {
  609. return
  610. }
  611. var validPermissionIds []int
  612. for _, item := range validPermissionList {
  613. validPermissionIds = append(validPermissionIds, item.ChartPermissionID)
  614. }
  615. permissionList, err := chart_permission.GetFiccListExceptTacticByProductId()
  616. if err != nil {
  617. return
  618. }
  619. permissionMap := make(map[uint64]bool)
  620. permissionFirstMap := make(map[string]*response.PermissionFirstItem)
  621. //查询首页展示的图标
  622. permissionFirstList, err := chart_permission_first.GetIndexShowList()
  623. if err != nil {
  624. return
  625. }
  626. for _, v := range permissionFirstList {
  627. permissionFirstMap[v.ClassifyName] = &response.PermissionFirstItem{
  628. Id: int(v.Id),
  629. Sort: v.YbIndexSort + 1000,
  630. YbIndexName: v.YbIndexName,
  631. YbIndexIcon: v.YbIndexIcon,
  632. }
  633. }
  634. for k, v := range permissionList {
  635. permissionMap[v.ChartPermissionID] = false
  636. for _, myPerId := range validPermissionIds {
  637. if int(v.ChartPermissionID) == myPerId {
  638. permissionMap[v.ChartPermissionID] = true
  639. permissionList[k].Sort = v.Sort - 1000
  640. if _, ok := permissionFirstMap[v.ClassifyName]; ok && !permissionFirstMap[v.ClassifyName].IsCheck {
  641. permissionFirstMap[v.ClassifyName].AuthOk = true
  642. permissionFirstMap[v.ClassifyName].Sort -= 1000
  643. permissionFirstMap[v.ClassifyName].IsCheck = true
  644. }
  645. break
  646. }
  647. }
  648. }
  649. for _, v := range permissionList {
  650. temp := new(response.PermissionFiccSecondItem)
  651. temp.Sort = v.Sort
  652. temp.ChartPermissionID = int(v.ChartPermissionID)
  653. temp.ChartPermissionName = v.PermissionName
  654. temp.AuthOk = permissionMap[v.ChartPermissionID]
  655. temp.PirceDrivenState = v.PriceDrivenState
  656. if _, ok := permissionFirstMap[v.ClassifyName]; ok {
  657. permissionFirstMap[v.ClassifyName].List = append(permissionFirstMap[v.ClassifyName].List, temp)
  658. } else {
  659. permissionFirstMap[v.ClassifyName] = &response.PermissionFirstItem{
  660. List: []*response.PermissionFiccSecondItem{temp},
  661. }
  662. }
  663. }
  664. var list response.PermissionFiccList
  665. for _, v := range permissionFirstMap {
  666. temp := new(response.PermissionFiccItem)
  667. temp.Id = v.Id
  668. temp.Sort = v.Sort
  669. temp.ClassifyName = v.YbIndexName
  670. temp.IconUrl = v.YbIndexIcon
  671. if len(temp.IconUrl) > 4 {
  672. tmpIcon := temp.IconUrl[:len(temp.IconUrl)-4]
  673. temp.SelectIconUrl = tmpIcon + "_select.png"
  674. }
  675. if len(v.List) > 0 {
  676. temp.List = v.List
  677. sort.Sort(temp.List)
  678. }
  679. list = append(list, temp)
  680. }
  681. if len(list) > 0 {
  682. sort.Sort(list)
  683. }
  684. //判断是否是已购用户,如果是已购用户,需要返回对应的联系人方式
  685. companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1)
  686. if err != nil {
  687. if err == utils.ErrNoRow {
  688. err = nil
  689. }
  690. }
  691. if err != nil {
  692. errMsg = err.Error()
  693. err = errors.New("查询用户状态失败")
  694. return
  695. }
  696. // 已购仅付费用户可见
  697. var contactInfo response.PermissionCheckContactInfo
  698. checkFlag := false
  699. if companyProduct.Status != "" && strings.Contains("永续,正式", companyProduct.Status) {
  700. //查询对应的销售
  701. //查找对应客户的销售信息
  702. adminInfo, tmpErr := admin.GetByAdminId(companyProduct.SellerID)
  703. if tmpErr != nil {
  704. errMsg = tmpErr.Error()
  705. err = errors.New("查询销售信息出错")
  706. return
  707. }
  708. contactInfo.Name = adminInfo.RealName
  709. contactInfo.Mobile = adminInfo.Mobile
  710. checkFlag = true
  711. }
  712. temp := new(response.PermissionFiccItem)
  713. temp.SelectIconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_more_select.png"
  714. temp.IconUrl = utils.ALIYUN_YBIMG_HOST + "ficc_icon_idx_more.png"
  715. temp.ClassifyName = "更多报告"
  716. temp.Sort = 100000
  717. list = append(list, temp)
  718. ret.PermissionList = list
  719. ret.CheckFlag = checkFlag
  720. ret.ContactInfo = contactInfo
  721. return
  722. }
  723. // CheckUserSandboxPermission 验证用户/联系人的沙盘权限
  724. func CheckUserSandboxPermission(companyId int64, userId, permissionId int) (ok bool, companyPermissionIdList []int, permissionCheckInfo ChartPermissionCheckInfo, err error) {
  725. defer func() {
  726. // 如果无权限,那么就去查询是否申请过
  727. if ok == false && permissionCheckInfo.Type == CheckTypeApply {
  728. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 图库申请
  729. // 查询是否有申请过,如果有申请过的话,那么err是nil
  730. if err != nil {
  731. if err == utils.ErrNoRow {
  732. err = nil
  733. return
  734. }
  735. return
  736. }
  737. permissionCheckInfo.CustomerInfo.HasApply = true
  738. }
  739. }()
  740. var productId int64
  741. productId = 1
  742. if companyId > 1 {
  743. // 查询是否开通FICC
  744. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  745. if tmpErr != nil {
  746. // 没有开通FICC
  747. if tmpErr == utils.ErrNoRow {
  748. permissionCheckInfo.Type = CheckTypeApply
  749. return
  750. }
  751. err = tmpErr
  752. return
  753. }
  754. wxUser, tmpErr := wx_user.GetByUserId(userId)
  755. if tmpErr != nil {
  756. permissionCheckInfo.Type = CheckTypeApply
  757. err = tmpErr
  758. return
  759. }
  760. // 查询用户是否为弘则研究已禁用的联系人
  761. if companyId == 16 {
  762. if wxUser.Enabled != 1 {
  763. permissionCheckInfo.Type = CheckTypeApply
  764. return
  765. }
  766. }
  767. // 客户信息
  768. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  769. if tmpErr != nil {
  770. // 没有开通FICC
  771. if tmpErr == utils.ErrNoRow {
  772. permissionCheckInfo.Type = CheckTypeApply
  773. return
  774. }
  775. err = tmpErr
  776. return
  777. }
  778. customerInfo := CustomerInfo{
  779. CompanyName: companyInfo.CompanyName,
  780. Status: companyProductInfo.Status,
  781. Name: wxUser.RealName,
  782. IsSuspend: companyProductInfo.IsSuspend,
  783. Mobile: wxUser.Mobile,
  784. }
  785. permissionCheckInfo.CustomerInfo = customerInfo
  786. // 如果客户FICC产品的状态是流失-申请
  787. if companyProductInfo.Status == "流失" {
  788. permissionCheckInfo.Type = CheckTypeApply
  789. return
  790. }
  791. // 查找对应客户的销售信息
  792. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  793. if tmpErr != nil {
  794. err = tmpErr
  795. return
  796. }
  797. // 客户状态为冻结/试用暂停-联系销售
  798. permissionCheckInfo.Name = adminInfo.RealName
  799. permissionCheckInfo.Mobile = adminInfo.Mobile
  800. if companyProductInfo.Status == "冻结" || (companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1) {
  801. permissionCheckInfo.Type = CheckTypeContact
  802. return
  803. }
  804. // 验证用户的沙盘权限
  805. //获取所有的权限分类列表
  806. companyPermissionList, tmpErr := GetValidPermissionByCompany2ProductId(companyId, productId)
  807. if tmpErr != nil {
  808. err = tmpErr
  809. return
  810. }
  811. //客户品种权限赋值
  812. for _, chartPermission := range companyPermissionList {
  813. companyPermissionIdList = append(companyPermissionIdList, chartPermission.ChartPermissionID)
  814. }
  815. if permissionId > 0 {
  816. for _, chartPermission := range companyPermissionList {
  817. if chartPermission.ChartPermissionID == permissionId {
  818. ok = true
  819. }
  820. }
  821. if ok == false {
  822. permissionCheckInfo.Jump = `sandbox_list` //如果是没有单个品种的权限,那么提示后并跳转到沙盘列表页吧
  823. }
  824. } else {
  825. // 不校验品种权限的话,那么就是认为有权限的
  826. if len(companyPermissionList) > 0 {
  827. ok = true
  828. }
  829. }
  830. // 都不是默认联系销售
  831. permissionCheckInfo.Type = CheckTypeContact
  832. } else {
  833. permissionCheckInfo.Type = CheckTypeApply
  834. }
  835. return
  836. }
  837. func GetBindFiccPermissions(user user.UserInfo) (ret response.BindPermissionFiccResp, err error) {
  838. var errMsg string
  839. defer func() {
  840. if err != nil {
  841. global.LOG.Critical(fmt.Sprintf("GetHomeFiccPermissions: userId=%d, err:%s, errMsg:%s", user.UserID, err.Error(), errMsg))
  842. }
  843. }()
  844. ret.PermissionList = make([]*response.BindPermissionFiccItem, 0)
  845. // 判断用户状态是否是正常和永续
  846. var productAuthOk bool
  847. companyProduct, err := company_product.GetByCompany2ProductId(user.CompanyID, 1)
  848. if err == utils.ErrNoRow {
  849. err = nil
  850. return
  851. }
  852. if err != nil {
  853. errMsg = err.Error()
  854. err = errors.New("查询用户购买产品出错")
  855. return
  856. }
  857. if companyProduct != nil {
  858. // 无FICC权限的客户不可见
  859. if companyProduct.CompanyProductID > 0 {
  860. // 已购或者试用用户可见
  861. if strings.Contains("永续,正式", companyProduct.Status) || (companyProduct.Status == "试用" && companyProduct.IsSuspend != 1) {
  862. productAuthOk = true
  863. }
  864. }
  865. }
  866. if !productAuthOk {
  867. return
  868. }
  869. validPermissionList, err := GetValidPermissionByCompany2ProductId(user.CompanyID, 1)
  870. if err != nil {
  871. return
  872. }
  873. var validPermissionIds []int
  874. for _, item := range validPermissionList {
  875. validPermissionIds = append(validPermissionIds, item.ChartPermissionID)
  876. }
  877. permissionList, err := chart_permission.GetFiccListExceptTacticByProductIdOrderSort()
  878. if err != nil {
  879. return
  880. }
  881. permissionMap := make(map[uint64]bool)
  882. permissionFirstMap := make(map[string]*response.BindPermissionFiccItem)
  883. //查询首页展示的图标
  884. permissionFirstList, err := chart_permission_first.GetIndexShowListOrderSort()
  885. if err != nil {
  886. return
  887. }
  888. for _, v := range permissionFirstList {
  889. permissionFirstMap[v.ClassifyName] = &response.BindPermissionFiccItem{
  890. Id: int(v.Id),
  891. ClassifyName: v.YbIndexName,
  892. }
  893. }
  894. for _, v := range permissionList {
  895. permissionMap[v.ChartPermissionID] = false
  896. for _, myPerId := range validPermissionIds {
  897. if int(v.ChartPermissionID) == myPerId {
  898. permissionMap[v.ChartPermissionID] = true
  899. break
  900. }
  901. }
  902. }
  903. for _, v := range permissionList {
  904. temp := new(response.BindPermissionFiccSecondItem)
  905. temp.ChartPermissionID = int(v.ChartPermissionID)
  906. temp.ChartPermissionName = v.PermissionName
  907. if _, ok := permissionFirstMap[v.ClassifyName]; ok && permissionMap[v.ChartPermissionID] {
  908. permissionFirstMap[v.ClassifyName].List = append(permissionFirstMap[v.ClassifyName].List, temp)
  909. }
  910. }
  911. var list []*response.BindPermissionFiccItem
  912. for _, v := range permissionFirstList {
  913. item := permissionFirstMap[v.ClassifyName]
  914. if len(item.List) > 0 {
  915. temp := new(response.BindPermissionFiccItem)
  916. temp.Id = item.Id
  917. temp.ClassifyName = item.ClassifyName
  918. temp.List = item.List
  919. list = append(list, temp)
  920. }
  921. }
  922. ret.PermissionList = list
  923. return
  924. }