123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- package company
- import (
- "fmt"
- "hongze/hongze_yb/models/tables/admin"
- "hongze/hongze_yb/models/tables/chart_permission"
- "hongze/hongze_yb/models/tables/company"
- "hongze/hongze_yb/models/tables/company_product"
- "hongze/hongze_yb/models/tables/company_report_permission"
- "hongze/hongze_yb/models/tables/company_user_chart_classify_permission"
- "hongze/hongze_yb/models/tables/wx_user"
- "hongze/hongze_yb/models/tables/yb_apply_record"
- "hongze/hongze_yb/utils"
- "time"
- )
- // GetClassNameListByProductId 根据权限id获取权限分类
- func GetClassNameListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
- list, err = chart_permission.GetClassNameListByProductId(productId)
- return
- }
- // GetPermissionListByProductId 根据product_id获取所有的权限列表
- func GetPermissionListByProductId(productId int64) (list []*chart_permission.ChartPermission, err error) {
- list, err = chart_permission.GetListByProductId(productId)
- return
- }
- // GetValidPermissionByCompany2ProductId 根据客户id和产品id获取有效的权限列表
- func GetValidPermissionByCompany2ProductId(companyId, productId int64) (list []*company_report_permission.CompanyReportPermission, err error) {
- where := make(map[string]interface{})
- where["company_id ="] = companyId
- where["product_id ="] = productId
- where["status in"] = []string{"正式", "试用", "永续"}
- list, err = company_report_permission.GetByWhereMap(where)
- return
- }
- // GetValidPermissionIdListByCompany2ProductId 根据客户id和产品id获取有效的权限id列表
- func GetValidPermissionIdListByCompany2ProductId(companyId, productId int64) (list []int, err error) {
- companyReportPermissionList, err := GetValidPermissionByCompany2ProductId(companyId, productId)
- if err != nil {
- return
- }
- for _, v := range companyReportPermissionList {
- list = append(list, v.ChartPermissionID)
- }
- return
- }
- // PermissionCheckInfo 权限校验完成后的结果
- type PermissionCheckInfo struct {
- Name string `json:"name" description:"销售名称"`
- Mobile string `json:"mobile" description:"手机号"`
- Type string `json:"type" description:"校验失败,没有权限,需要让前端处理的类型,枚举值:apply,contact"`
- CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
- }
- // CustomerInfo 客户信息
- type CustomerInfo struct {
- CompanyName string `json:"company_name" description:"客户(公司)名称"`
- Name string `json:"name" description:"联系人名称"`
- Mobile string `json:"mobile" description:"手机号"`
- Status string `json:"status" description:"状态"`
- IsSuspend int8 `json:"is_suspend" description:"启用与否字段:1:暂停,0:启用"`
- HasApply bool `json:"has_apply" description:"是否有申请过"`
- }
- // CheckPermissionByFicc 权限校验
- func CheckPermissionByFicc(companyId int64, permissionId int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
- //非潜在客户
- var productId int64
- productId = 1
- if companyId > 1 {
- //查询是否 开通ficc的客户
- companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- // 没有开通ficc的客户
- if tmpErr == utils.ErrNoRow {
- permissionCheckInfo.Type = "apply"
- return
- }
- err = tmpErr
- return
- }
- // 如果客户ficc产品的状态是流失,那么也是让去申请
- if companyProductInfo.Status == "流失" {
- permissionCheckInfo.Type = "apply"
- return
- }
- // 获取有效的权限id列表
- validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- // 校验在有效的权限id列表中是否存在该权限
- for _, validPermissionId := range validPermissionIdList {
- //如果有该权限id,那么直接返回校验通过
- if validPermissionId == permissionId {
- ok = true
- return
- }
- }
- //查找对应客户的销售信息
- adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- permissionCheckInfo = PermissionCheckInfo{
- Name: adminInfo.RealName,
- Mobile: adminInfo.Mobile,
- Type: "contact",
- }
- } else {
- permissionCheckInfo.Type = "apply"
- }
- return
- }
- // CheckPermissionByPermissionIdList2Ficc 根据权限id集合权限校验(ficc)
- func CheckPermissionByPermissionIdList2Ficc(companyId int64, userId int, permissionIdList []int) (ok bool, permissionCheckInfo PermissionCheckInfo, err error) {
- defer func() {
- // 如果无权限,那么就去查询是否申请过
- if ok == false {
- ok, _ = checkPermissionByPermissionIdList2Rai(companyId, permissionIdList)
- }
- if ok == false && permissionCheckInfo.Type == "apply" {
- _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 从来源我的/活动申请的记录
- if err != nil && err != utils.ErrNoRow {
- return
- }
- //查询是否有申请过,如果有申请过的话,那么err是nil
- if err == nil {
- permissionCheckInfo.CustomerInfo.HasApply = true
- }
- }
- }()
- //非潜在客户
- if len(permissionIdList) <= 0 {
- err = fmt.Errorf("权限异常,请传入需要校验的权限")
- return
- }
- permissionMap := make(map[int]bool)
- for _, permissionId := range permissionIdList {
- permissionMap[permissionId] = true
- }
- var productId int64
- productId = 1
- if companyId > 1 {
- //查询是否 开通ficc的客户
- companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- // 没有开通ficc的客户
- if tmpErr == utils.ErrNoRow {
- permissionCheckInfo.Type = "apply"
- return
- }
- err = tmpErr
- return
- }
- wxUser, tmpErr := wx_user.GetByUserId(userId)
- if tmpErr != nil {
- permissionCheckInfo.Type = "apply"
- err = tmpErr
- return
- }
- //客户信息
- companyInfo, tmpErr := company.GetByCompanyId(companyId)
- if tmpErr != nil {
- // 没有开通ficc的客户
- if tmpErr == utils.ErrNoRow {
- permissionCheckInfo.Type = "apply"
- return
- }
- err = tmpErr
- return
- }
- customerInfo := CustomerInfo{
- CompanyName: companyInfo.CompanyName,
- Status: companyProductInfo.Status,
- Name: wxUser.RealName,
- IsSuspend: companyProductInfo.IsSuspend,
- Mobile: wxUser.Mobile,
- }
- permissionCheckInfo.CustomerInfo = customerInfo
- // 如果客户ficc产品的状态是流失,那么也是让去申请
- if companyProductInfo.Status == "流失" {
- permissionCheckInfo.Type = "apply"
- return
- }
- //查找对应客户的销售信息
- adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
- if tmpErr != nil {
- //if tmpErr ==
- err = tmpErr
- return
- }
- permissionCheckInfo.Name = adminInfo.RealName
- permissionCheckInfo.Mobile = adminInfo.Mobile
- if companyProductInfo.Status == "冻结" {
- permissionCheckInfo.Type = "contact"
- return
- }
- //客户状态是:试用暂停状态(联系销售)
- if companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1 {
- permissionCheckInfo.Type = "contact"
- return
- }
- // 获取有效的权限id列表
- validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- // 校验在有效的权限id列表中是否存在该权限
- for _, validPermissionId := range validPermissionIdList {
- //如果有该权限id,那么直接返回校验通过
- if _, validOk := permissionMap[validPermissionId]; validOk {
- ok = true
- return
- }
- }
- permissionCheckInfo.Type = "contact"
- } else {
- permissionCheckInfo.Type = "apply"
- }
- return
- }
- // checkPermissionByPermissionIdList2Rai 根据权限id集合权限校验(权益)
- func checkPermissionByPermissionIdList2Rai(companyId int64, permissionIdList []int) (ok bool, err error) {
- //非潜在客户
- if len(permissionIdList) <= 0 {
- err = fmt.Errorf("权限异常,请传入需要校验的权限")
- return
- }
- //市场策略(ficc权限id):33
- ficcPermissionId := 33
- //市场策略(权益权限id):23
- raiPermissionId := 23
- //是否往下校验
- var permissionOk bool
- for _, permissionId := range permissionIdList {
- if permissionId == ficcPermissionId {
- permissionOk = true
- }
- }
- var productId int64
- productId = 2
- if companyId > 1 && permissionOk {
- // 获取有效的权限id列表
- validPermissionIdList, tmpErr := GetValidPermissionIdListByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- // 校验在有效的权限id列表中是否存在该权限
- for _, validPermissionId := range validPermissionIdList {
- if validPermissionId == raiPermissionId {
- ok = true
- return
- }
- }
- }
- return
- }
- // ChartPermissionCheckInfo 图表权限验证信息
- type ChartPermissionCheckInfo struct {
- Name string `json:"name" description:"销售名称"`
- Mobile string `json:"mobile" description:"手机号"`
- Type string `json:"type" description:"无权限,需要前端处理的类型,枚举值:expired, apply, contact"`
- CustomerInfo CustomerInfo `json:"customer_info" description:"客户信息"`
- }
- // CheckUserChartPermission 验证用户/联系人的图库权限
- func CheckUserChartPermission(companyId int64, userId int) (ok bool, permissionCheckInfo ChartPermissionCheckInfo, err error) {
- defer func() {
- // 如果无权限,那么就去查询是否申请过
- if ok == false && permissionCheckInfo.Type == "apply" {
- _, err = yb_apply_record.GetLastNotOpRecordByUserId(userId) // 图库申请
- // 查询是否有申请过,如果有申请过的话,那么err是nil
- if err != nil {
- if err == utils.ErrNoRow {
- err = nil
- return
- }
- return
- }
- permissionCheckInfo.CustomerInfo.HasApply = true
- }
- }()
- var productId int64
- productId = 1
- if companyId > 1 {
- // 查询是否开通FICC
- companyProductInfo, tmpErr := company_product.GetByCompany2ProductId(companyId, productId)
- if tmpErr != nil {
- // 没有开通FICC
- if tmpErr == utils.ErrNoRow {
- permissionCheckInfo.Type = "apply"
- return
- }
- err = tmpErr
- return
- }
- wxUser, tmpErr := wx_user.GetByUserId(userId)
- if tmpErr != nil {
- permissionCheckInfo.Type = "apply"
- err = tmpErr
- return
- }
- // 客户信息
- companyInfo, tmpErr := company.GetByCompanyId(companyId)
- if tmpErr != nil {
- // 没有开通FICC
- if tmpErr == utils.ErrNoRow {
- permissionCheckInfo.Type = "apply"
- return
- }
- err = tmpErr
- return
- }
- customerInfo := CustomerInfo{
- CompanyName: companyInfo.CompanyName,
- Status: companyProductInfo.Status,
- Name: wxUser.RealName,
- IsSuspend: companyProductInfo.IsSuspend,
- Mobile: wxUser.Mobile,
- }
- permissionCheckInfo.CustomerInfo = customerInfo
- // 如果客户FICC产品的状态是流失-申请
- if companyProductInfo.Status == "流失" {
- permissionCheckInfo.Type = "apply"
- return
- }
- // 查找对应客户的销售信息
- adminInfo, tmpErr := admin.GetByAdminId(companyProductInfo.SellerID)
- if tmpErr != nil {
- err = tmpErr
- return
- }
- // 客户状态为冻结/试用暂停-联系销售
- permissionCheckInfo.Name = adminInfo.RealName
- permissionCheckInfo.Mobile = adminInfo.Mobile
- if companyProductInfo.Status == "冻结" || (companyProductInfo.Status == "试用" && companyProductInfo.IsSuspend == 1) {
- permissionCheckInfo.Type = "contact"
- return
- }
- // 验证用户的图表权限
- permissionInfo, tmpErr := company_user_chart_classify_permission.GetPermissionByUserId(userId)
- if tmpErr != nil {
- if tmpErr == utils.ErrNoRow {
- // 无权限-联系销售
- permissionCheckInfo.Type = "contact"
- return
- }
- err = tmpErr
- return
- }
- nowTime := time.Now()
- if permissionInfo.Enabled != 1 {
- // 权限被禁用-联系销售
- permissionCheckInfo.Type = "contact"
- return
- }
- endTime := permissionInfo.EndTime.Add(23 * time.Hour + 59 * time.Minute + 59 * time.Second)
- if nowTime.After(permissionInfo.StartTime) && nowTime.Before(endTime) {
- ok = true
- } else {
- // 权限已到期
- permissionCheckInfo.Type = "expired"
- return
- }
- // 都不是默认联系销售
- permissionCheckInfo.Type = "contact"
- } else {
- permissionCheckInfo.Type = "apply"
- }
- return
- }
|