permission.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. package company
  2. import (
  3. "fmt"
  4. "hongze/hongze_yb/models/tables/admin"
  5. "hongze/hongze_yb/models/tables/chart_permission"
  6. "hongze/hongze_yb/models/tables/company"
  7. "hongze/hongze_yb/models/tables/company_product"
  8. "hongze/hongze_yb/models/tables/company_report_permission"
  9. "hongze/hongze_yb/models/tables/company_user_chart_classify_permission"
  10. "hongze/hongze_yb/models/tables/wx_user"
  11. "hongze/hongze_yb/models/tables/yb_apply_record"
  12. "hongze/hongze_yb/utils"
  13. "time"
  14. )
  15. // GetClassNameListByProductId 根据权限id获取权限分类
  16. func GetClassNameListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  17. list, err = chart_permission.GetClassNameListByProductId(productId)
  18. return
  19. }
  20. // GetPermissionListByProductId 根据product_id获取所有的权限列表
  21. func GetPermissionListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  22. list, err = chart_permission.GetListByProductId(productId)
  23. return
  24. }
  25. // GetValidPermissionByCompany2ProductId 根据客户id和产品id获取有效的权限列表
  26. func GetValidPermissionByCompany2ProductId(companyId, productId int64) (list []*company_report_permission.CompanyReportPermission, err error) {
  27. where := make(map[string]interface{})
  28. where["company_id ="] = companyId
  29. where["product_id ="] = productId
  30. where["status in"] = []string{"正式", "试用", "永续"}
  31. list, err = company_report_permission.GetByWhereMap(where)
  32. return
  33. }
  34. // GetValidPermissionIdListByCompany2ProductId 根据客户id和产品id获取有效的权限id列表
  35. func GetValidPermissionIdListByCompany2ProductId(companyId, productId int64) (list []int, err error) {
  36. companyReportPermissionList, err := GetValidPermissionByCompany2ProductId(companyId, productId)
  37. if err != nil {
  38. return
  39. }
  40. for _, v := range companyReportPermissionList {
  41. list = append(list, v.ChartPermissionID)
  42. }
  43. return
  44. }
  45. // PermissionCheckInfo 权限校验完成后的结果
  46. type PermissionCheckInfo struct {
  47. Name string `json:"name" description:"销售名称"`
  48. Mobile string `json:"mobile" description:"手机号"`
  49. Type string `json:"type" description:"校验失败,没有权限,需要让前端处理的类型,枚举值:apply,contact"`
  50. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  51. }
  52. // CustomerInfo 客户信息
  53. type CustomerInfo struct {
  54. CompanyName string `json:"company_name" description:"客户(公司)名称"`
  55. Name string `json:"name" description:"联系人名称"`
  56. Mobile string `json:"mobile" description:"手机号"`
  57. Status string `json:"status" description:"状态"`
  58. IsSuspend int8 `json:"is_suspend" description:"启用与否字段:1:暂停,0:启用"`
  59. HasApply bool `json:"has_apply" description:"是否有申请过"`
  60. }
  61. // CheckPermissionByFicc 权限校验
  62. func CheckPermissionByFicc(companyId int64, permissionId int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  63. //非潜在客户
  64. var productId int64
  65. productId = 1
  66. if companyId > 1 {
  67. //查询是否 开通ficc的客户
  68. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  69. if tmpErr != nil {
  70. // 没有开通ficc的客户
  71. if tmpErr == utils.ErrNoRow {
  72. permissionCheckInfo.Type = "apply"
  73. return
  74. }
  75. err = tmpErr
  76. return
  77. }
  78. // 如果客户ficc产品的状态是流失,那么也是让去申请
  79. if companyProductInfo.Status == "流失" {
  80. permissionCheckInfo.Type = "apply"
  81. return
  82. }
  83. // 获取有效的权限id列表
  84. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  85. if tmpErr != nil {
  86. err = tmpErr
  87. return
  88. }
  89. // 校验在有效的权限id列表中是否存在该权限
  90. for _, validPermissionId := range validPermissionIdList {
  91. //如果有该权限id,那么直接返回校验通过
  92. if validPermissionId == permissionId {
  93. ok = true
  94. return
  95. }
  96. }
  97. //查找对应客户的销售信息
  98. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  99. if tmpErr != nil {
  100. err = tmpErr
  101. return
  102. }
  103. permissionCheckInfo = PermissionCheckInfo{
  104. Name: adminInfo.RealName,
  105. Mobile: adminInfo.Mobile,
  106. Type: "contact",
  107. }
  108. } else {
  109. permissionCheckInfo.Type = "apply"
  110. }
  111. return
  112. }
  113. // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验(ficc)
  114. func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  115. defer func() {
  116. // 如果无权限,那么就去查询是否申请过
  117. if ok == false {
  118. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, permissionIdList)
  119. }
  120. if ok == false && permissionCheckInfo.Type == "apply" {
  121. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
  122. if err != nil && err != utils.ErrNoRow {
  123. return
  124. }
  125. //查询是否有申请过,如果有申请过的话,那么err是nil
  126. if err == nil {
  127. permissionCheckInfo.CustomerInfo.HasApply = true
  128. }
  129. }
  130. }()
  131. //非潜在客户
  132. if len(permissionIdList) <= 0 {
  133. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  134. return
  135. }
  136. permissionMap := make(map[int]bool)
  137. for _, permissionId := range permissionIdList {
  138. permissionMap[permissionId] = true
  139. }
  140. var productId int64
  141. productId = 1
  142. if companyId > 1 {
  143. //查询是否 开通ficc的客户
  144. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  145. if tmpErr != nil {
  146. // 没有开通ficc的客户
  147. if tmpErr == utils.ErrNoRow {
  148. permissionCheckInfo.Type = "apply"
  149. return
  150. }
  151. err = tmpErr
  152. return
  153. }
  154. wxUser, tmpErr := wx_user.GetByUserId(userId)
  155. if tmpErr != nil {
  156. permissionCheckInfo.Type = "apply"
  157. err = tmpErr
  158. return
  159. }
  160. //客户信息
  161. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  162. if tmpErr != nil {
  163. // 没有开通ficc的客户
  164. if tmpErr == utils.ErrNoRow {
  165. permissionCheckInfo.Type = "apply"
  166. return
  167. }
  168. err = tmpErr
  169. return
  170. }
  171. customerInfo := CustomerInfo{
  172. CompanyName: companyInfo.CompanyName,
  173. Status: companyProductInfo.Status,
  174. Name: wxUser.RealName,
  175. IsSuspend: companyProductInfo.IsSuspend,
  176. Mobile: wxUser.Mobile,
  177. }
  178. permissionCheckInfo.CustomerInfo = customerInfo
  179. // 如果客户ficc产品的状态是流失,那么也是让去申请
  180. if companyProductInfo.Status == "流失" {
  181. permissionCheckInfo.Type = "apply"
  182. return
  183. }
  184. //查找对应客户的销售信息
  185. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  186. if tmpErr != nil {
  187. //if tmpErr ==
  188. err = tmpErr
  189. return
  190. }
  191. permissionCheckInfo.Name = adminInfo.RealName
  192. permissionCheckInfo.Mobile = adminInfo.Mobile
  193. if companyProductInfo.Status == "冻结" {
  194. permissionCheckInfo.Type = "contact"
  195. return
  196. }
  197. //客户状态是:试用暂停状态(联系销售)
  198. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  199. permissionCheckInfo.Type = "contact"
  200. return
  201. }
  202. // 获取有效的权限id列表
  203. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  204. if tmpErr != nil {
  205. err = tmpErr
  206. return
  207. }
  208. // 校验在有效的权限id列表中是否存在该权限
  209. for _, validPermissionId := range validPermissionIdList {
  210. //如果有该权限id,那么直接返回校验通过
  211. if _, validOk := permissionMap[validPermissionId]; validOk {
  212. ok = true
  213. return
  214. }
  215. }
  216. permissionCheckInfo.Type = "contact"
  217. } else {
  218. permissionCheckInfo.Type = "apply"
  219. }
  220. return
  221. }
  222. // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
  223. func checkPermissionByPermissionIdList2Rai(companyId int64, permissionIdList []int) (ok bool, err error) {
  224. //非潜在客户
  225. if len(permissionIdList) <= 0 {
  226. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  227. return
  228. }
  229. //市场策略(ficc权限id):33
  230. ficcPermissionId := 33
  231. //市场策略(权益权限id):23
  232. raiPermissionId := 23
  233. //是否往下校验
  234. var permissionOk bool
  235. for _, permissionId := range permissionIdList {
  236. if permissionId == ficcPermissionId {
  237. permissionOk = true
  238. }
  239. }
  240. var productId int64
  241. productId = 2
  242. if companyId > 1 && permissionOk {
  243. // 获取有效的权限id列表
  244. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  245. if tmpErr != nil {
  246. err = tmpErr
  247. return
  248. }
  249. // 校验在有效的权限id列表中是否存在该权限
  250. for _, validPermissionId := range validPermissionIdList {
  251. if validPermissionId == raiPermissionId {
  252. ok = true
  253. return
  254. }
  255. }
  256. }
  257. return
  258. }
  259. // ChartPermissionCheckInfo 图表权限验证信息
  260. type ChartPermissionCheckInfo struct {
  261. Name string `json:"name" description:"销售名称"`
  262. Mobile string `json:"mobile" description:"手机号"`
  263. Type string `json:"type" description:"无权限,需要前端处理的类型,枚举值:expired, apply, contact"`
  264. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  265. }
  266. // CheckUserChartPermission 验证用户/联系人的图库权限
  267. func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionCheckInfo ChartPermissionCheckInfo, err error) {
  268. defer func() {
  269. // 如果无权限,那么就去查询是否申请过
  270. if ok == false && permissionCheckInfo.Type == "apply" {
  271. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 图库申请
  272. // 查询是否有申请过,如果有申请过的话,那么err是nil
  273. if err != nil {
  274. if err == utils.ErrNoRow {
  275. err = nil
  276. return
  277. }
  278. return
  279. }
  280. permissionCheckInfo.CustomerInfo.HasApply = true
  281. }
  282. }()
  283. var productId int64
  284. productId = 1
  285. if companyId > 1 {
  286. // 查询是否开通FICC
  287. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  288. if tmpErr != nil {
  289. // 没有开通FICC
  290. if tmpErr == utils.ErrNoRow {
  291. permissionCheckInfo.Type = "apply"
  292. return
  293. }
  294. err = tmpErr
  295. return
  296. }
  297. wxUser, tmpErr := wx_user.GetByUserId(userId)
  298. if tmpErr != nil {
  299. permissionCheckInfo.Type = "apply"
  300. err = tmpErr
  301. return
  302. }
  303. // 客户信息
  304. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  305. if tmpErr != nil {
  306. // 没有开通FICC
  307. if tmpErr == utils.ErrNoRow {
  308. permissionCheckInfo.Type = "apply"
  309. return
  310. }
  311. err = tmpErr
  312. return
  313. }
  314. customerInfo := CustomerInfo{
  315. CompanyName: companyInfo.CompanyName,
  316. Status: companyProductInfo.Status,
  317. Name: wxUser.RealName,
  318. IsSuspend: companyProductInfo.IsSuspend,
  319. Mobile: wxUser.Mobile,
  320. }
  321. permissionCheckInfo.CustomerInfo = customerInfo
  322. // 如果客户FICC产品的状态是流失-申请
  323. if companyProductInfo.Status == "流失" {
  324. permissionCheckInfo.Type = "apply"
  325. return
  326. }
  327. // 查找对应客户的销售信息
  328. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  329. if tmpErr != nil {
  330. err = tmpErr
  331. return
  332. }
  333. // 客户状态为冻结/试用暂停-联系销售
  334. permissionCheckInfo.Name = adminInfo.RealName
  335. permissionCheckInfo.Mobile = adminInfo.Mobile
  336. if companyProductInfo.Status == "冻结" || (companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1) {
  337. permissionCheckInfo.Type = "contact"
  338. return
  339. }
  340. // 验证用户的图表权限
  341. permissionInfo, tmpErr := company_user_chart_classify_permission.GetPermissionByUserId(userId)
  342. if tmpErr != nil {
  343. if tmpErr == utils.ErrNoRow {
  344. // 无权限-联系销售
  345. permissionCheckInfo.Type = "contact"
  346. return
  347. }
  348. err = tmpErr
  349. return
  350. }
  351. nowTime := time.Now()
  352. if permissionInfo.Enabled != 1 {
  353. // 权限被禁用-联系销售
  354. permissionCheckInfo.Type = "contact"
  355. return
  356. }
  357. endTime := permissionInfo.EndTime.Add(23 * time.Hour + 59 * time.Minute + 59 * time.Second)
  358. if nowTime.After(permissionInfo.StartTime) && nowTime.Before(endTime) {
  359. ok = true
  360. } else {
  361. // 权限已到期
  362. permissionCheckInfo.Type = "expired"
  363. return
  364. }
  365. // 都不是默认联系销售
  366. permissionCheckInfo.Type = "contact"
  367. } else {
  368. permissionCheckInfo.Type = "apply"
  369. }
  370. return
  371. }