permission.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. HasApply bool `json:"has_apply" description:"是否有申请过"`
  57. }
  58. // CheckPermissionByFicc 权限校验
  59. func CheckPermissionByFicc(companyId int64, permissionId int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  60. //非潜在客户
  61. var productId int64
  62. productId = 1
  63. if companyId > 1 {
  64. //查询是否 开通ficc的客户
  65. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  66. if tmpErr != nil {
  67. // 没有开通ficc的客户
  68. if tmpErr == utils.ErrNoRow {
  69. permissionCheckInfo.Type = "apply"
  70. return
  71. }
  72. err = tmpErr
  73. return
  74. }
  75. // 如果客户ficc产品的状态是流失,那么也是让去申请
  76. if companyProductInfo.Status == "流失" {
  77. permissionCheckInfo.Type = "apply"
  78. return
  79. }
  80. // 获取有效的权限id列表
  81. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  82. if tmpErr != nil {
  83. err = tmpErr
  84. return
  85. }
  86. // 校验在有效的权限id列表中是否存在该权限
  87. for _, validPermissionId := range validPermissionIdList {
  88. //如果有该权限id,那么直接返回校验通过
  89. if validPermissionId == permissionId {
  90. ok = true
  91. return
  92. }
  93. }
  94. //查找对应客户的销售信息
  95. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  96. if tmpErr != nil {
  97. err = tmpErr
  98. return
  99. }
  100. permissionCheckInfo = PermissionCheckInfo{
  101. Name: adminInfo.RealName,
  102. Mobile: adminInfo.Mobile,
  103. Type: "contact",
  104. }
  105. } else {
  106. permissionCheckInfo.Type = "apply"
  107. }
  108. return
  109. }
  110. // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验
  111. func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
  112. defer func() {
  113. // 如果无权限,那么就去查询是否申请过
  114. if ok == false && permissionCheckInfo.Type == "apply" {
  115. _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId)
  116. //查询是否有申请过,如果有申请过的话,那么err是nil
  117. if err == nil {
  118. permissionCheckInfo.CustomerInfo.HasApply = true
  119. }
  120. }
  121. }()
  122. //非潜在客户
  123. if len(permissionIdList) <= 0 {
  124. err = fmt.Errorf("权限异常,请传入需要校验的权限")
  125. return
  126. }
  127. permissionMap := make(map[int]bool)
  128. for _, permissionId := range permissionIdList {
  129. permissionMap[permissionId] = true
  130. }
  131. var productId int64
  132. productId = 1
  133. if companyId > 1 {
  134. //查询是否 开通ficc的客户
  135. companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
  136. if tmpErr != nil {
  137. // 没有开通ficc的客户
  138. if tmpErr == utils.ErrNoRow {
  139. permissionCheckInfo.Type = "apply"
  140. return
  141. }
  142. err = tmpErr
  143. return
  144. }
  145. wxUser, tmpErr := wx_user.GetByUserId(userId)
  146. if tmpErr != nil {
  147. permissionCheckInfo.Type = "apply"
  148. err = tmpErr
  149. return
  150. }
  151. //客户信息
  152. companyInfo, tmpErr := company.GetByCompanyId(companyId)
  153. if tmpErr != nil {
  154. // 没有开通ficc的客户
  155. if tmpErr == utils.ErrNoRow {
  156. permissionCheckInfo.Type = "apply"
  157. return
  158. }
  159. err = tmpErr
  160. return
  161. }
  162. customerInfo := CustomerInfo{
  163. CompanyName: companyInfo.CompanyName,
  164. Status: companyProductInfo.Status,
  165. Name: wxUser.RealName,
  166. Mobile: wxUser.Mobile,
  167. }
  168. permissionCheckInfo.CustomerInfo = customerInfo
  169. // 如果客户ficc产品的状态是流失,那么也是让去申请
  170. if companyProductInfo.Status == "流失" {
  171. permissionCheckInfo.Type = "apply"
  172. return
  173. }
  174. //查找对应客户的销售信息
  175. adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
  176. if tmpErr != nil {
  177. err = tmpErr
  178. return
  179. }
  180. //客户状态是:试用暂停状态(联系销售)
  181. if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
  182. permissionCheckInfo = PermissionCheckInfo{
  183. Name: adminInfo.RealName,
  184. Mobile: adminInfo.Mobile,
  185. Type: "contact",
  186. }
  187. return
  188. }
  189. // 获取有效的权限id列表
  190. validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
  191. if tmpErr != nil {
  192. err = tmpErr
  193. return
  194. }
  195. // 校验在有效的权限id列表中是否存在该权限
  196. for _, validPermissionId := range validPermissionIdList {
  197. //如果有该权限id,那么直接返回校验通过
  198. if _, validOk := permissionMap[validPermissionId]; validOk {
  199. ok = true
  200. return
  201. }
  202. }
  203. permissionCheckInfo = PermissionCheckInfo{
  204. Name: adminInfo.RealName,
  205. Mobile: adminInfo.Mobile,
  206. Type: "contact",
  207. }
  208. } else {
  209. permissionCheckInfo.Type = "apply"
  210. }
  211. return
  212. }