permission.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  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/wx_user"
  10. "hongze/hongze_yb/models/tables/yb_apply_record"
  11. "hongze/hongze_yb/utils"
  12. )
  13. // GetClassNameListByProductId 根据权限id获取权限分类
  14. func GetClassNameListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  15. list, err = chart_permission.GetClassNameListByProductId(productId)
  16. return
  17. }
  18. // GetPermissionListByProductId 根据product_id获取所有的权限列表
  19. func GetPermissionListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
  20. list, err = chart_permission.GetListByProductId(productId)
  21. return
  22. }
  23. // GetValidPermissionByCompany2ProductId 根据客户id和产品id获取有效的权限列表
  24. func GetValidPermissionByCompany2ProductId(companyId, productId int64) (list []*company_report_permission.CompanyReportPermission, err error) {
  25. where := make(map[string]interface{})
  26. where["company_id ="] = companyId
  27. where["product_id ="] = productId
  28. where["status in"] = []string{"正式", "试用", "永续"}
  29. list, err = company_report_permission.GetByWhereMap(where)
  30. return
  31. }
  32. // GetValidPermissionIdListByCompany2ProductId 根据客户id和产品id获取有效的权限id列表
  33. func GetValidPermissionIdListByCompany2ProductId(companyId, productId int64) (list []int, err error) {
  34. companyReportPermissionList, err := GetValidPermissionByCompany2ProductId(companyId, productId)
  35. if err != nil {
  36. return
  37. }
  38. for _, v := range companyReportPermissionList {
  39. list = append(list, v.ChartPermissionID)
  40. }
  41. return
  42. }
  43. // PermissionCheckInfo 权限校验完成后的结果
  44. type PermissionCheckInfo struct {
  45. Name string `json:"name" description:"销售名称"`
  46. Mobile string `json:"mobile" description:"手机号"`
  47. Type string `json:"type" description:"校验失败,没有权限,需要让前端处理的类型,枚举值:apply,contact"`
  48. CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
  49. }
  50. // CustomerInfo 客户信息
  51. type CustomerInfo struct {
  52. CompanyName string `json:"company_name" description:"客户(公司)名称"`
  53. Name string `json:"name" description:"联系人名称"`
  54. Mobile string `json:"mobile" description:"手机号"`
  55. Status string `json:"status" description:"状态"`
  56. IsSuspend int8 `json:"is_suspend" description:"启用与否字段:1:暂停,0:启用"`
  57. HasApply bool `json:"has_apply" description:"是否有申请过"`
  58. }
  59. // CheckPermissionByFicc 权限校验
  60. func CheckPermissionByFicc(companyId int64, permissionId int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  61. //非潜在客户
  62. var productId int64
  63. productId = 1
  64. if companyId > 1 {
  65. //查询是否 开通ficc的客户
  66. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  67. if tmpErr != nil {
  68. // 没有开通ficc的客户
  69. if tmpErr == utils.ErrNoRow {
  70. permissionCheckInfo.Type = "apply"
  71. return
  72. }
  73. err = tmpErr
  74. return
  75. }
  76. // 如果客户ficc产品的状态是流失,那么也是让去申请
  77. if companyProductInfo.Status == "流失" {
  78. permissionCheckInfo.Type = "apply"
  79. return
  80. }
  81. // 获取有效的权限id列表
  82. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  83. if tmpErr != nil {
  84. err = tmpErr
  85. return
  86. }
  87. // 校验在有效的权限id列表中是否存在该权限
  88. for _, validPermissionId := range validPermissionIdList {
  89. //如果有该权限id,那么直接返回校验通过
  90. if validPermissionId == permissionId {
  91. ok = true
  92. return
  93. }
  94. }
  95. //查找对应客户的销售信息
  96. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  97. if tmpErr != nil {
  98. err = tmpErr
  99. return
  100. }
  101. permissionCheckInfo = PermissionCheckInfo{
  102. Name: adminInfo.RealName,
  103. Mobile: adminInfo.Mobile,
  104. Type: "contact",
  105. }
  106. } else {
  107. permissionCheckInfo.Type = "apply"
  108. }
  109. return
  110. }
  111. // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验(ficc)
  112. func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  113. defer func() {
  114. // 如果无权限,那么就去查询是否申请过
  115. if ok == false {
  116. ok, _ = checkPermissionByPermissionIdList2Rai(companyId, permissionIdList)
  117. }
  118. if ok == false && permissionCheckInfo.Type == "apply" {
  119. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId, 2) // 活动申请
  120. //查询是否有申请过,如果有申请过的话,那么err是nil
  121. if err == nil {
  122. permissionCheckInfo.CustomerInfo.HasApply = true
  123. }
  124. }
  125. }()
  126. //非潜在客户
  127. if len(permissionIdList) <= 0 {
  128. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  129. return
  130. }
  131. permissionMap := make(map[int]bool)
  132. for _, permissionId := range permissionIdList {
  133. permissionMap[permissionId] = true
  134. }
  135. var productId int64
  136. productId = 1
  137. if companyId > 1 {
  138. //查询是否 开通ficc的客户
  139. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  140. if tmpErr != nil {
  141. // 没有开通ficc的客户
  142. if tmpErr == utils.ErrNoRow {
  143. permissionCheckInfo.Type = "apply"
  144. return
  145. }
  146. err = tmpErr
  147. return
  148. }
  149. wxUser, tmpErr := wx_user.GetByUserId(userId)
  150. if tmpErr != nil {
  151. permissionCheckInfo.Type = "apply"
  152. err = tmpErr
  153. return
  154. }
  155. //客户信息
  156. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  157. if tmpErr != nil {
  158. // 没有开通ficc的客户
  159. if tmpErr == utils.ErrNoRow {
  160. permissionCheckInfo.Type = "apply"
  161. return
  162. }
  163. err = tmpErr
  164. return
  165. }
  166. customerInfo := CustomerInfo{
  167. CompanyName: companyInfo.CompanyName,
  168. Status: companyProductInfo.Status,
  169. Name: wxUser.RealName,
  170. IsSuspend: companyProductInfo.IsSuspend,
  171. Mobile: wxUser.Mobile,
  172. }
  173. permissionCheckInfo.CustomerInfo = customerInfo
  174. // 如果客户ficc产品的状态是流失,那么也是让去申请
  175. if companyProductInfo.Status == "流失" {
  176. permissionCheckInfo.Type = "apply"
  177. return
  178. }
  179. //查找对应客户的销售信息
  180. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  181. if tmpErr != nil {
  182. //if tmpErr ==
  183. err = tmpErr
  184. return
  185. }
  186. permissionCheckInfo.Name = adminInfo.RealName
  187. permissionCheckInfo.Mobile = adminInfo.Mobile
  188. if companyProductInfo.Status == "冻结" {
  189. permissionCheckInfo.Type = "contact"
  190. return
  191. }
  192. //客户状态是:试用暂停状态(联系销售)
  193. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  194. permissionCheckInfo.Type = "contact"
  195. return
  196. }
  197. // 获取有效的权限id列表
  198. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  199. if tmpErr != nil {
  200. err = tmpErr
  201. return
  202. }
  203. // 校验在有效的权限id列表中是否存在该权限
  204. for _, validPermissionId := range validPermissionIdList {
  205. //如果有该权限id,那么直接返回校验通过
  206. if _, validOk := permissionMap[validPermissionId]; validOk {
  207. ok = true
  208. return
  209. }
  210. }
  211. permissionCheckInfo.Type = "contact"
  212. } else {
  213. permissionCheckInfo.Type = "apply"
  214. }
  215. return
  216. }
  217. // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
  218. func checkPermissionByPermissionIdList2Rai(companyId int64, permissionIdList []int) (ok bool, err error) {
  219. //非潜在客户
  220. if len(permissionIdList) <= 0 {
  221. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  222. return
  223. }
  224. //市场策略(ficc权限id):33
  225. ficcPermissionId := 33
  226. //市场策略(权益权限id):23
  227. raiPermissionId := 23
  228. //是否往下校验
  229. var permissionOk bool
  230. for _, permissionId := range permissionIdList {
  231. if permissionId == ficcPermissionId {
  232. permissionOk = true
  233. }
  234. }
  235. var productId int64
  236. productId = 2
  237. if companyId > 1 && permissionOk {
  238. // 获取有效的权限id列表
  239. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  240. if tmpErr != nil {
  241. err = tmpErr
  242. return
  243. }
  244. // 校验在有效的权限id列表中是否存在该权限
  245. for _, validPermissionId := range validPermissionIdList {
  246. if validPermissionId == raiPermissionId {
  247. ok = true
  248. return
  249. }
  250. }
  251. }
  252. return
  253. }