permission.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  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, 2) // 活动申请
  122. //查询是否有申请过,如果有申请过的话,那么err是nil
  123. if err == nil {
  124. permissionCheckInfo.CustomerInfo.HasApply = true
  125. }
  126. }
  127. }()
  128. //非潜在客户
  129. if len(permissionIdList) <= 0 {
  130. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  131. return
  132. }
  133. permissionMap := make(map[int]bool)
  134. for _, permissionId := range permissionIdList {
  135. permissionMap[permissionId] = true
  136. }
  137. var productId int64
  138. productId = 1
  139. if companyId > 1 {
  140. //查询是否 开通ficc的客户
  141. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  142. if tmpErr != nil {
  143. // 没有开通ficc的客户
  144. if tmpErr == utils.ErrNoRow {
  145. permissionCheckInfo.Type = "apply"
  146. return
  147. }
  148. err = tmpErr
  149. return
  150. }
  151. wxUser, tmpErr := wx_user.GetByUserId(userId)
  152. if tmpErr != nil {
  153. permissionCheckInfo.Type = "apply"
  154. err = tmpErr
  155. return
  156. }
  157. //客户信息
  158. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  159. if tmpErr != nil {
  160. // 没有开通ficc的客户
  161. if tmpErr == utils.ErrNoRow {
  162. permissionCheckInfo.Type = "apply"
  163. return
  164. }
  165. err = tmpErr
  166. return
  167. }
  168. customerInfo := CustomerInfo{
  169. CompanyName: companyInfo.CompanyName,
  170. Status: companyProductInfo.Status,
  171. Name: wxUser.RealName,
  172. IsSuspend: companyProductInfo.IsSuspend,
  173. Mobile: wxUser.Mobile,
  174. }
  175. permissionCheckInfo.CustomerInfo = customerInfo
  176. // 如果客户ficc产品的状态是流失,那么也是让去申请
  177. if companyProductInfo.Status == "流失" {
  178. permissionCheckInfo.Type = "apply"
  179. return
  180. }
  181. //查找对应客户的销售信息
  182. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  183. if tmpErr != nil {
  184. //if tmpErr ==
  185. err = tmpErr
  186. return
  187. }
  188. permissionCheckInfo.Name = adminInfo.RealName
  189. permissionCheckInfo.Mobile = adminInfo.Mobile
  190. if companyProductInfo.Status == "冻结" {
  191. permissionCheckInfo.Type = "contact"
  192. return
  193. }
  194. //客户状态是:试用暂停状态(联系销售)
  195. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  196. permissionCheckInfo.Type = "contact"
  197. return
  198. }
  199. // 获取有效的权限id列表
  200. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  201. if tmpErr != nil {
  202. err = tmpErr
  203. return
  204. }
  205. // 校验在有效的权限id列表中是否存在该权限
  206. for _, validPermissionId := range validPermissionIdList {
  207. //如果有该权限id,那么直接返回校验通过
  208. if _, validOk := permissionMap[validPermissionId]; validOk {
  209. ok = true
  210. return
  211. }
  212. }
  213. permissionCheckInfo.Type = "contact"
  214. } else {
  215. permissionCheckInfo.Type = "apply"
  216. }
  217. return
  218. }
  219. // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
  220. func checkPermissionByPermissionIdList2Rai(companyId int64, permissionIdList []int) (ok bool, err error) {
  221. //非潜在客户
  222. if len(permissionIdList) <= 0 {
  223. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  224. return
  225. }
  226. //市场策略(ficc权限id):33
  227. ficcPermissionId := 33
  228. //市场策略(权益权限id):23
  229. raiPermissionId := 23
  230. //是否往下校验
  231. var permissionOk bool
  232. for _, permissionId := range permissionIdList {
  233. if permissionId == ficcPermissionId {
  234. permissionOk = true
  235. }
  236. }
  237. var productId int64
  238. productId = 2
  239. if companyId > 1 && permissionOk {
  240. // 获取有效的权限id列表
  241. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  242. if tmpErr != nil {
  243. err = tmpErr
  244. return
  245. }
  246. // 校验在有效的权限id列表中是否存在该权限
  247. for _, validPermissionId := range validPermissionIdList {
  248. if validPermissionId == raiPermissionId {
  249. ok = true
  250. return
  251. }
  252. }
  253. }
  254. return
  255. }
  256. // ChartPermissionCheckInfo 图表权限验证信息
  257. type ChartPermissionCheckInfo struct {
  258. Name string `json:"name" description:"销售名称"`
  259. Mobile string `json:"mobile" description:"手机号"`
  260. Type string `json:"type" description:"无权限,需要前端处理的类型,枚举值:expired, apply, contact"`
  261. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  262. }
  263. // CheckUserChartPermission 验证用户/联系人的图库权限
  264. func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionCheckInfo ChartPermissionCheckInfo, err error) {
  265. defer func() {
  266. // 如果无权限,那么就去查询是否申请过
  267. if ok == false && permissionCheckInfo.Type == "apply" {
  268. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId, 3) // 图库申请
  269. // 查询是否有申请过,如果有申请过的话,那么err是nil
  270. if err == nil {
  271. permissionCheckInfo.CustomerInfo.HasApply = true
  272. }
  273. }
  274. }()
  275. var productId int64
  276. productId = 1
  277. if companyId > 1 {
  278. // 查询是否开通FICC
  279. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  280. if tmpErr != nil {
  281. // 没有开通FICC
  282. if tmpErr == utils.ErrNoRow {
  283. permissionCheckInfo.Type = "apply"
  284. return
  285. }
  286. err = tmpErr
  287. return
  288. }
  289. wxUser, tmpErr := wx_user.GetByUserId(userId)
  290. if tmpErr != nil {
  291. permissionCheckInfo.Type = "apply"
  292. err = tmpErr
  293. return
  294. }
  295. // 客户信息
  296. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  297. if tmpErr != nil {
  298. // 没有开通FICC
  299. if tmpErr == utils.ErrNoRow {
  300. permissionCheckInfo.Type = "apply"
  301. return
  302. }
  303. err = tmpErr
  304. return
  305. }
  306. customerInfo := CustomerInfo{
  307. CompanyName: companyInfo.CompanyName,
  308. Status: companyProductInfo.Status,
  309. Name: wxUser.RealName,
  310. IsSuspend: companyProductInfo.IsSuspend,
  311. Mobile: wxUser.Mobile,
  312. }
  313. permissionCheckInfo.CustomerInfo = customerInfo
  314. // 如果客户FICC产品的状态是流失-申请
  315. if companyProductInfo.Status == "流失" {
  316. permissionCheckInfo.Type = "apply"
  317. return
  318. }
  319. // 查找对应客户的销售信息
  320. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  321. if tmpErr != nil {
  322. err = tmpErr
  323. return
  324. }
  325. // 客户状态为冻结/试用暂停-联系销售
  326. permissionCheckInfo.Name = adminInfo.RealName
  327. permissionCheckInfo.Mobile = adminInfo.Mobile
  328. if companyProductInfo.Status == "冻结" {
  329. permissionCheckInfo.Type = "contact"
  330. return
  331. }
  332. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  333. permissionCheckInfo.Type = "contact"
  334. return
  335. }
  336. // 验证用户的图表权限
  337. permissionInfo, tmpErr := company_user_chart_classify_permission.GetPermissionByUserId(userId)
  338. if tmpErr != nil {
  339. if tmpErr == utils.ErrNoRow {
  340. // 无权限-联系销售
  341. permissionCheckInfo.Type = "contact"
  342. return
  343. }
  344. err = tmpErr
  345. return
  346. }
  347. nowTime := time.Now()
  348. if permissionInfo.Enabled != 1 {
  349. // 权限被禁用-联系销售
  350. permissionCheckInfo.Type = "contact"
  351. return
  352. }
  353. if nowTime.After(permissionInfo.StartTime) && nowTime.Before(permissionInfo.EndTime) {
  354. ok = true
  355. } else {
  356. // 权限已到期
  357. permissionCheckInfo.Type = "expired"
  358. return
  359. }
  360. // 都不是默认联系销售
  361. permissionCheckInfo.Type = "contact"
  362. } else {
  363. permissionCheckInfo.Type = "apply"
  364. }
  365. return
  366. }