xingzai 2 年 前
コミット
4be045fedd

+ 1 - 0
controllers/activity_special.go

@@ -109,6 +109,7 @@ func (this *ActivitySpecialCoAntroller) SpecialDetail() {
 		br.ErrMsg = "活动ID错误,Err:" + "activityId:" + strconv.Itoa(activityId)
 		return
 	}
+
 	applyCount, err := models.GetApplyRecordCount(uid)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取信息失败"

+ 1 - 0
models/activity.go

@@ -803,6 +803,7 @@ type CygxActivitySpecialDetail struct {
 	SpecialType           int    `description:"调研形式、 1 线上 , 2 线下"`
 	City                  string `description:"调研城市"`
 	ChartPermissionName   string `description:"行业名称"`
+	ChartPermissionId     string `description:"行业Id"`
 	ResearchTheme         string `description:"调研主题"`
 	ActivityTimeText      string `description:"活动预期时间带文字"`
 	TripImgLink           string `description:"行程图片链接"`

+ 13 - 0
models/activity_special_trip.go

@@ -64,6 +64,19 @@ func GetActivitySpecialTripCountByActivityId(condition string, pars []interface{
 	return
 }
 
+//获取某一活动的报名的数量 (同时关联活动类型进行获取)
+func GetActivitySpecialTripCountByActivitySpecial(condition string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count
+		FROM
+			cygx_activity_special_trip AS t
+			INNER JOIN cygx_activity_special AS a ON a.activity_id = t.activity_id 
+		WHERE
+			 1= 1 ` + condition
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
 //添加
 func AddCygxActivitySpecialTrip(item *CygxActivitySpecialTrip) (err error) {
 	o := orm.NewOrm()

+ 77 - 0
models/company_activity_trip.go

@@ -0,0 +1,77 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+func GetCountCompanyDetailByIdGroupTrip(companyId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+	COUNT( 1 ) AS count 
+FROM
+	company AS a
+	INNER JOIN company_product AS b ON a.company_id = b.company_id
+	INNER JOIN company_report_permission AS p ON p.company_id = a.company_id
+	INNER JOIN chart_permission AS cp ON cp.chart_permission_id = p.chart_permission_id
+	LEFT JOIN admin AS c ON b.seller_id = c.admin_id 
+WHERE
+	a.company_id = ? 
+	AND b.product_id = 2 
+	AND b.status = '正式' 
+	AND p.is_upgrade =  1
+	OR (
+		a.company_id = ? 
+	AND b.product_id = 2 
+	AND b.status = '永续') `
+	err = o.Raw(sql, companyId, companyId).QueryRow(&count)
+	return
+}
+
+func GetCompanyDetailByIdGroupTrip(companyId int) (item *CompanyDetail, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT a.company_id,a.company_name,b.status,b.seller_id,b.seller_name,c.mobile ,b.is_suspend
+            FROM company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			INNER JOIN company_report_permission AS p ON p.company_id = a.company_id
+			INNER JOIN chart_permission AS cp ON cp.chart_permission_id = p.chart_permission_id
+			LEFT JOIN admin AS c ON b.seller_id=c.admin_id
+			WHERE a.company_id=? AND b.product_id = 2  
+			ORDER BY b.product_id DESC  LIMIT 0,1  `
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}
+
+func GetCompanyPermissionByUserTrip(companyId int) (permission string, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT
+			GROUP_CONCAT( DISTINCT b.remark ORDER BY b.sort ASC SEPARATOR ',' ) AS permission 
+		FROM
+			company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id = b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id = c.company_id 
+			AND a.product_id = c.product_id 
+		WHERE
+			a.company_id = ? 
+			AND c.is_suspend = 0 
+			AND b.cygx_auth = 1 
+			AND a.is_upgrade = 1 
+			AND c.STATUS IN ( '正式' ) 
+			OR ( a.company_id = ? AND c.is_suspend = 0 AND b.cygx_auth = 1 AND c.STATUS IN ( '永续' ) ) 
+			OR ( a.company_id = ? AND c.is_suspend = 0 AND b.cygx_auth = 1 AND b.chart_permission_name = '策略' AND c.STATUS IN ( '正式' ) )`
+	err = o.Raw(sql, companyId, companyId, companyId).QueryRow(&permission)
+	return
+}
+
+//获取正式权限
+func GetCompanyPermissionByUserZhengShiTrip(companyId int) (permission string, err error) {
+	sql := ` SELECT GROUP_CONCAT(DISTINCT b.remark  ORDER BY b.sort ASC  SEPARATOR ',') AS permission
+			FROM company_report_permission AS a
+			INNER JOIN chart_permission AS b ON a.chart_permission_id=b.chart_permission_id
+			INNER JOIN company_product AS c ON a.company_id=c.company_id AND a.product_id=c.product_id
+			WHERE  a.company_id=?
+			AND c.is_suspend=0
+            AND b.cygx_auth=1
+			AND a.is_upgrade = 1 
+			AND c.status IN('正式')  `
+	o := orm.NewOrm()
+	err = o.Raw(sql, companyId).QueryRow(&permission)
+	return
+}

+ 63 - 0
services/activity_special.go

@@ -402,3 +402,66 @@ func GetActivitySpecialSearcheList(user *models.WxUserItem, condition string, st
 	total = totalSearche
 	return
 }
+
+//func init() {
+//	_, _, err := GetActivitySpecialUserType(235)
+//	fmt.Println(err)
+//}
+
+//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
+func GetActivitySpecialUserType(companyId int) (userType int, permissionStrnew string, err error) {
+	var permissionStr, permissionZhengShiStr string
+	if companyId <= 1 {
+		userType = 0
+	} else {
+		total, e := models.GetCountCompanyDetailByIdGroupTrip(companyId)
+		if e != nil {
+			err = errors.New("GetCountCompanyDetailByIdGroupTrip, Err: " + e.Error())
+			return
+		}
+		if total == 0 {
+			userType = 0
+		} else {
+			companyDetail, e := models.GetCompanyDetailByIdGroupTrip(companyId)
+			if e != nil {
+				err = errors.New("GetCompanyDetailByIdGroupTrip, Err: " + e.Error())
+				return
+			}
+			permissionStr, e = models.GetCompanyPermissionByUserTrip(companyId)
+			if e != nil {
+				err = errors.New("GetCompanyPermissionByUserTrip, Err: " + e.Error())
+				return
+			}
+			permissionZhengShiStr, e = models.GetCompanyPermissionByUserZhengShiTrip(companyId)
+			if e != nil {
+				err = errors.New("GetCompanyPermissionByUserZhengShiTrip, Err: " + e.Error())
+				return
+			}
+			//大套餐客户定义:医药、消费、科技、智造。4个行业中为升级,策略是正式,属于大套餐客户
+			if companyDetail.Status == "永续" {
+				userType = 1
+			} else if companyDetail.Status == "试用" {
+				userType = 5
+			} else if companyDetail.Status == "正式" {
+				if permissionStr == "专家" {
+					userType = 4
+				} else if strings.Count(permissionZhengShiStr, "医药") == 2 && strings.Count(permissionZhengShiStr, "消费") == 2 && strings.Count(permissionZhengShiStr, "科技") == 2 && strings.Count(permissionZhengShiStr, "智造") == 2 && strings.Count(permissionZhengShiStr, "策略") == 1 {
+					userType = 2
+				} else {
+					userType = 3
+				}
+				if userType == 3 {
+					if !strings.Contains(permissionStr, "医药") && !strings.Contains(permissionStr, "消费") && !strings.Contains(permissionStr, "科技") && !strings.Contains(permissionStr, "智造") {
+						userType = 4
+					}
+				}
+			} else if companyDetail.Status == "冻结" {
+				userType = 6
+			} else if companyDetail.Status == "流失" {
+				userType = 7
+			}
+		}
+	}
+	permissionStrnew = permissionStr
+	return
+}

+ 66 - 1
services/activity_special_trip.go

@@ -2,6 +2,7 @@ package services
 
 import (
 	"errors"
+	"fmt"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"time"
@@ -19,7 +20,7 @@ func SpecialTripPopupMsg(activityInfo *models.CygxActivitySpecialDetail, user *m
 	var condition string
 	var pars []interface{}
 
-	condition += ` AND activity_id LIKE ? `
+	condition += ` AND activity_id =  ? `
 	pars = append(pars, activityInfo.ActivityId)
 
 	tripTota, e := models.GetActivitySpecialTripCountByActivityId(condition, pars)
@@ -37,3 +38,67 @@ func SpecialTripPopupMsg(activityInfo *models.CygxActivitySpecialDetail, user *m
 	popupMsg2 = "由于每场活动人数有限,如果不能参加请提前48小时取消,未及时取消导致影响其他客户报名将会维持扣点。"
 	return
 }
+
+//获取用户剩余报名次数
+func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, err error) {
+
+	//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
+	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
+	var tripTota int
+	userType, permissionStrnew, e := GetActivitySpecialUserType(user.CompanyId)
+	if e != nil {
+		err = errors.New("获取客户身份信息失败 GetActivitySpecialUserType, Err: " + e.Error())
+		return
+	}
+	if userType == 0 {
+		errMsg = msgTemplate
+		return
+	} else if userType == 1 {
+		return
+	} else if userType == 2 {
+		var condition string
+		var pars []interface{}
+
+		condition += ` AND company_id = ? `
+		pars = append(pars, user.CompanyId)
+
+		condition += ` AND is_valid = 1 `
+
+		tripTota, e = models.GetActivitySpecialTripCountByActivitySpecial(condition, pars)
+		if e != nil {
+			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+			return
+		}
+		if tripTota >= 12 {
+			errMsg = msgTemplate
+			return
+		}
+	} else {
+		var condition string
+		var pars []interface{}
+
+		condition += ` AND company_id = ? `
+		pars = append(pars, user.CompanyId)
+
+		condition += ` AND chart_permission_id = ? `
+		pars = append(pars, activityInfo.ChartPermissionId)
+
+		condition += ` AND is_valid = 1 `
+
+		tripTota, e = models.GetActivitySpecialTripCountByActivitySpecial(condition, pars)
+		if e != nil {
+			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+			return
+		}
+		if tripTota >= 6 {
+			errMsg = msgTemplate
+			return
+		}
+	}
+
+	fmt.Println(permissionStrnew)
+	fmt.Println(permissionStrnew)
+	fmt.Println(userType)
+	fmt.Println(tripTota)
+	return
+}