xingzai 1 سال پیش
والد
کامیت
ae97165999

+ 105 - 34
controllers/activity_special.go

@@ -7,7 +7,6 @@ import (
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"strconv"
-	"strings"
 	"time"
 )
 
@@ -247,10 +246,22 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 			itemBill.Source = 1
 			itemBill.DoType = 1
 			itemBill.BillDetailed = -1 // 流水减一
-			itemBill.RegisterPlatform = 1
+			itemBill.RegisterPlatform = utils.REGISTER_PLATFORM
 			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 
+			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+				//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+				maxChartPermissionId, maxChartPermissionName, err := services.GetSpecialBillMaxChartPermissionId(user)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "获取销售信息失败,GetSpecialBillMaxChartPermissionId Err:" + err.Error()
+					return
+				}
+				itemBill.ChartPermissionId = maxChartPermissionId
+				itemBill.ChartPermissionName = maxChartPermissionName
+			}
+
 			var itemMeeting = new(models.CygxActivitySpecialMeetingDetail)
 			itemMeeting.UserId = user.UserId
 			itemMeeting.ActivityId = activityId
@@ -299,6 +310,14 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 						item.CountryCode = user.CountryCode
 					}
 				}
+
+				err = services.DeductTripRemainingtimesByUser(user, activityInfo) //扣除用户专项调研剩余次数
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + err.Error()
+					return
+				}
+
 				err = models.AddCygxActivitySpecialTrip(item)
 				if err != nil {
 					br.Msg = "操作失败"
@@ -322,26 +341,42 @@ func (this *ActivitySpecialCoAntroller) SpecialTripAdd() {
 				//48小时之内的取消也扣除一次参会记录
 				if time.Now().Add(+time.Hour * 48).After(resultTime) {
 					itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
+				} else {
+					err = services.DeductTripRemainingtimesByUser(user, activityInfo) //扣除用户专项调研剩余次数
+					if err != nil {
+						br.Msg = "操作失败"
+						br.ErrMsg = "操作失败,Err:" + err.Error()
+						return
+					}
 				}
 			}
-			userType, tripRemaining, mapChartName, err := services.GetChartPermissionSpecialSurplusByCompany(user.CompanyId)
+			//userType, tripRemaining, mapChartName, err := services.GetChartPermissionSpecialSurplusByCompany(user.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取专项调研剩余次数失败"
+			//	br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+			//	return
+			//}
+			//if userType == 2 {
+			//	tripRemaining = tripRemaining + itemBill.BillDetailed
+			//	itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			//} else {
+			//	for k, num := range mapChartName {
+			//		if activityInfo.ChartPermissionName == k {
+			//			num = num + itemBill.BillDetailed
+			//		}
+			//		itemBill.Total += k + strconv.Itoa(num) + "次+"
+			//	}
+			//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+			//}
+
+			totalText, err := services.HandleActivitySpecialTripBillTotalText(user)
 			if err != nil {
-				br.Msg = "获取专项调研剩余次数失败"
-				br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+				br.Msg = "报名失败,"
+				br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
 				return
 			}
-			if userType == 2 {
-				tripRemaining = tripRemaining + itemBill.BillDetailed
-				itemBill.Total = strconv.Itoa(tripRemaining) + "次"
-			} else {
-				for k, num := range mapChartName {
-					if activityInfo.ChartPermissionName == k {
-						num = num + itemBill.BillDetailed
-					}
-					itemBill.Total += k + strconv.Itoa(num) + "次+"
-				}
-				itemBill.Total = strings.TrimRight(itemBill.Total, "+")
-			}
+			itemBill.Total = totalText
+
 			//添加流水记录
 			err = models.AddCygxActivitySpecialTripBill(itemBill)
 			if err != nil {
@@ -403,6 +438,16 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 		return
 	}
 	activityId := req.ActivityId
+	total, err := models.GetUserActivitySpecialTripCount(user.UserId, activityId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+		return
+	}
+	if total == 0 {
+		br.Msg = "已取消报名!"
+		return
+	}
 	activityInfo, errInfo := models.GetCygxActivitySpecialDetailById(uid, activityId)
 	if activityInfo == nil {
 		br.Msg = "操作失败"
@@ -427,35 +472,61 @@ func (this *ActivitySpecialCoAntroller) Tripcancel() {
 	itemBill.Source = 1
 	itemBill.DoType = 2
 	itemBill.BillDetailed = 1 // 流水加一
-	itemBill.RegisterPlatform = 1
+	itemBill.RegisterPlatform = utils.REGISTER_PLATFORM
 	itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
+
+	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+		//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+		lastTripBill, err := models.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取销售信息失败,GetSpecialBillMaxChartPermissionId Err:" + err.Error()
+			return
+		}
+		itemBill.ChartPermissionId = lastTripBill.ChartPermissionId
+		itemBill.ChartPermissionName = lastTripBill.ChartPermissionName
+	}
 	//48小时之内的取消也扣除一次参会记录
 	var isValid int
 	if time.Now().Add(+time.Hour * 48).After(resultTime) {
 		isValid = 1
 		itemBill.BillDetailed = 0 //48小时之内取消的活动扣点不返回
-	}
-	userType, tripRemaining, mapChartName, err := services.GetChartPermissionSpecialSurplusByCompany(user.CompanyId)
-	if err != nil {
-		br.Msg = "获取专项调研剩余次数失败"
-		br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
-		return
-	}
-	if userType == 2 {
-		tripRemaining += itemBill.BillDetailed
-		itemBill.Total = strconv.Itoa(tripRemaining) + "次"
 	} else {
-		for k, num := range mapChartName {
-			if activityInfo.ChartPermissionName == k {
-				num += itemBill.BillDetailed
-			}
-			itemBill.Total += k + strconv.Itoa(num) + "次+"
+		err = services.RebateTripRemainingtimesByUser(user, activityInfo) // 返点
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,RebateTripRemainingtimesByUserErr:" + err.Error()
+			return
 		}
-		itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 	}
+	//userType, tripRemaining, mapChartName, err := services.GetChartPermissionSpecialSurplusByCompany(user.CompanyId)
+	//if err != nil {
+	//	br.Msg = "获取专项调研剩余次数失败"
+	//	br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+	//	return
+	//}
+	//if userType == 2 {
+	//	tripRemaining += itemBill.BillDetailed
+	//	itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+	//} else {
+	//	for k, num := range mapChartName {
+	//		if activityInfo.ChartPermissionName == k {
+	//			num += itemBill.BillDetailed
+	//		}
+	//		itemBill.Total += k + strconv.Itoa(num) + "次+"
+	//	}
+	//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+	//}
 
+	totalText, err := services.HandleActivitySpecialTripBillTotalText(user)
+	if err != nil {
+		br.Msg = "操作失败,"
+		br.ErrMsg = "HandleActivitySpecialTripBillTotalText,Err:" + err.Error()
+		return
+	}
+	itemBill.Total = totalText
 	err = models.CancelActivitySpecialTripIsValid(isValid, activityInfo.ActivityId, uid)
 	if err != nil {
 		br.Msg = "操作失败"

+ 36 - 0
models/activity_special_permission_points.go

@@ -0,0 +1,36 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySpecialPermissionPoints struct {
+	Id                  int       `orm:"column(id);pk"`
+	CompanyId           int       `description:"公司ID"`
+	Points              int       `description:"剩余点数"`
+	CompanyName         string    `description:"公司名称"`
+	ChartPermissionId   int       `description:"行业id"`
+	ChartPermissionName string    `description:"行业名称"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"更新时间"`
+}
+
+// 获取公司每个行业剩余研选点数列表
+func GetCygxActivitySpecialPermissionPointsList(condition string, pars []interface{}) (items []*CygxActivitySpecialPermissionPoints, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_special_permission_points WHERE 1 = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+// 更新公司每个行业剩余研选点数
+func UpdateCygxActivitySpecialPermissionPoints(points, companyId, chartPermissionId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_special_permission_points SET points = ?  WHERE company_id=?  AND chart_permission_id=? `
+	_, err = o.Raw(sql, points, companyId, chartPermissionId).Exec()
+	return
+}

+ 11 - 0
models/activity_special_trip_bill.go

@@ -187,3 +187,14 @@ func UpdateCygxActivitySpecialTripBillByCompanyIdForInit(total string, id int) (
 	_, err = o.Raw(sql, total, id).Exec()
 	return
 }
+
+// GetCygxActivitySpecialTripBillLastDetialByActivityId  根据活动ID获取最后一条扣点明细
+func GetCygxActivitySpecialTripBillLastDetialByActivityId(activityId, userId int) (item *CygxActivitySpecialTripBill, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+			FROM
+			cygx_activity_special_trip_bill  
+			WHERE 1 = 1  AND activity_id =?  AND  user_id = ?  `
+	err = o.Raw(sql, activityId, userId).QueryRow(&item)
+	return
+}

+ 275 - 83
services/activity_special_trip.go

@@ -6,6 +6,7 @@ import (
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/utils"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -52,107 +53,298 @@ func SpecialTripPopupMsg(activityInfo *models.CygxActivitySpecialDetail, user *m
 }
 
 // 获取用户剩余报名次数
-func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, tripRemaining int, err error) {
+//func GetTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, tripRemaining int, err error) {
+//
+//	//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
+//	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
+//	//var tripTota int
+//	//var airborneTota int
+//	//userType, _, e := GetActivitySpecialUserType(user.CompanyId)
+//	userType, _, e := GetUserType(user.CompanyId)
+//	if e != nil {
+//		err = errors.New("获取客户身份信息失败 GetActivitySpecialUserType, Err: " + e.Error())
+//		return
+//	}
+//	if userType == 0 {
+//		errMsg = msgTemplate
+//		return
+//	} else if userType == 1 {
+//		tripRemaining = 999
+//		return
+//	} else if userType == 2 {
+//		var condition string
+//		var pars []interface{}
+//
+//		condition += ` AND company_id = ? `
+//		pars = append(pars, user.CompanyId)
+//
+//		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+//		//if e != nil {
+//		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+//		//	return
+//		//}
+//		//condition += ` AND is_valid = 1 `
+//		//查询当年的数据
+//		condition += ` AND create_time >= ?  `
+//		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
+//		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
+//		if e != nil {
+//			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+//			return
+//		}
+//		var TripBillNum int
+//		for _, v := range listTripBill {
+//			TripBillNum += v.BillDetailed
+//		}
+//		var packageType int
+//		//大套餐客户,数据库添加标识,
+//		companyUserTypeDetail, errs := models.GetCygxCompanyUserType(user.CompanyId)
+//		if errs != nil && errs.Error() != utils.ErrNoRow() {
+//			err = errs
+//			return
+//		}
+//		if companyUserTypeDetail != nil {
+//			packageType = companyUserTypeDetail.PackageType
+//			if companyUserTypeDetail.CustomerTypeId != 0 {
+//				userType = companyUserTypeDetail.CustomerTypeId
+//				return
+//			}
+//		}
+//
+//		packageTypeMap := map[int]int{1: 16, 2: 10}
+//		totalTrip := packageTypeMap[packageType]
+//		//tripRemaining = 10 - airborneTota + TripBillNum
+//		tripRemaining = totalTrip + TripBillNum
+//		if tripRemaining <= 0 {
+//			errMsg = msgTemplate
+//			return
+//		}
+//		//tripRemaining = 12 - tripTota
+//	} 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)
+//
+//		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+//		//if e != nil {
+//		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+//		//	return
+//		//}
+//		//查询当年的数据
+//		condition += ` AND create_time >= ?  `
+//		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
+//		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
+//		if e != nil {
+//			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+//			return
+//		}
+//		var TripBillNum int
+//		for _, v := range listTripBill {
+//			TripBillNum += v.BillDetailed
+//		}
+//		//tripRemaining = 5 - airborneTota + TripBillNum
+//		tripRemaining = 5 + TripBillNum
+//		if tripRemaining <= 0 {
+//			errMsg = msgTemplate
+//			return
+//		}
+//	}
+//	return
+//}
 
-	//获取 专项调研客户类型   //1、永续客户 //2、大套餐客户(4个行业全开通的正式客户) //3、分行业套餐客户(开通对应行业的正式客户) //4、仅开通专家套餐的正式客户 //5、开通对应行业套餐或专家套餐的试用客户;6、冻结客户;7、流失客户 8:行业升级套餐客户
+// 校验是否还有剩余次数
+func CheckTripRemainingtimesBycompany(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (errMsg string, err error) {
 	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
-	//var tripTota int
-	//var airborneTota int
-	//userType, _, e := GetActivitySpecialUserType(user.CompanyId)
-	userType, _, e := GetUserType(user.CompanyId)
+	companyId := user.CompanyId
+	chartPermissionName := activityInfo.ChartPermissionName
+
+	companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
 	if e != nil {
-		err = errors.New("获取客户身份信息失败 GetActivitySpecialUserType, Err: " + e.Error())
+		err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
+		return
+	}
+	//永续客户不限制次数
+	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
+		return
+	}
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  chart_permission_id DESC  "
+	pars = append(pars, companyId)
+	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
 		return
 	}
-	if userType == 0 {
+	//如果没有剩余的点数,就返回
+	if len(activitySpecialPermissionPointsList) == 0 {
 		errMsg = msgTemplate
 		return
-	} else if userType == 1 {
-		tripRemaining = 999
-		return
-	} else if userType == 2 {
-		var condition string
-		var pars []interface{}
-
-		condition += ` AND company_id = ? `
-		pars = append(pars, user.CompanyId)
-
-		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-		//if e != nil {
-		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-		//	return
-		//}
-		//condition += ` AND is_valid = 1 `
-		//查询当年的数据
-		condition += ` AND create_time >= ?  `
-		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
-		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
-		if e != nil {
-			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
-			return
-		}
-		var TripBillNum int
-		for _, v := range listTripBill {
-			TripBillNum += v.BillDetailed
-		}
-		var packageType int
-		//大套餐客户,数据库添加标识,
-		companyUserTypeDetail, errs := models.GetCygxCompanyUserType(user.CompanyId)
-		if errs != nil && errs.Error() != utils.ErrNoRow() {
-			err = errs
-			return
-		}
-		if companyUserTypeDetail != nil {
-			packageType = companyUserTypeDetail.PackageType
-			if companyUserTypeDetail.CustomerTypeId != 0 {
-				userType = companyUserTypeDetail.CustomerTypeId
+	}
+
+	//判断是不是策略行业的活动,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName == utils.CE_LUE_NAME {
+		return
+	} else {
+		for _, v := range activitySpecialPermissionPointsList {
+			if v.ChartPermissionName == chartPermissionName || v.ChartPermissionId == 0 {
 				return
-			}
+			} // 如果对应行业有剩余次数,或者是属于大套餐且有次数,那么校验也通过
 		}
+	}
+	errMsg = msgTemplate
+	return
 
-		packageTypeMap := map[int]int{1: 16, 2: 10}
-		totalTrip := packageTypeMap[packageType]
-		//tripRemaining = 10 - airborneTota + TripBillNum
-		tripRemaining = totalTrip + TripBillNum
-		if tripRemaining <= 0 {
-			errMsg = msgTemplate
-			return
-		}
-		//tripRemaining = 12 - tripTota
+}
+
+// GetSpecialBillMaxChartPermissionId  获取专项调研剩余点数最多的行业
+func GetSpecialBillMaxChartPermissionId(user *models.WxUserItem) (maxChartPermissionId int, maxChartPermissionName string, err error) {
+	companyId := user.CompanyId
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		maxChartPermissionName = v.ChartPermissionName
+	}
+	return
+}
+
+// DeductTripRemainingtimesByUser 扣除用户专项调研剩余次数
+func DeductTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (err error) {
+	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
+	companyId := user.CompanyId
+	chartPermissionName := activityInfo.ChartPermissionName
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME {
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+		pars = append(pars, companyId, activityInfo.ChartPermissionId)
+	}
+	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+	//如果没有剩余的点数,就返回
+	if len(activitySpecialPermissionPointsList) == 0 {
+		err = errors.New(msgTemplate)
+		return
+	}
+	var maxChartPermissionId int // 剩余点数最多的行业
+	var points int               // 剩余点数
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		points = v.Points - 1
+	}
+	//更新对应行业剩余点数
+	e = models.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// RebateTripRemainingtimesByUser 返点用户专项调研剩余次数
+func RebateTripRemainingtimesByUser(user *models.WxUserItem, activityInfo *models.CygxActivitySpecialDetail) (err error) {
+	companyId := user.CompanyId
+	chartPermissionName := activityInfo.ChartPermissionName
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME {
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   LIMIT 1   "
+		pars = append(pars, companyId, activityInfo.ChartPermissionId)
 	} 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)
-
-		//airborneTota, e = models.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-		//if e != nil {
-		//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-		//	return
-		//}
-		//查询当年的数据
-		condition += ` AND create_time >= ?  `
-		pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
-		listTripBill, e := models.GetCygxActivitySpecialTripBill(condition, pars)
+		lastTripBill, e := models.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
 		if e != nil {
 			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
-		var TripBillNum int
-		for _, v := range listTripBill {
-			TripBillNum += v.BillDetailed
+
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?    LIMIT 1   "
+		pars = append(pars, companyId, lastTripBill.ChartPermissionId)
+	}
+	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+
+	var maxChartPermissionId int // 剩余点数最多的行业(返点行业)
+	var points int               // 剩余点数
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		points = v.Points + 1
+	}
+	//更新对应行业剩余点数
+	e = models.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// 预处理专项调研流水明细表描述内容
+func HandleActivitySpecialTripBillTotalText(user *models.WxUserItem) (totalText string, err error) {
+	companyId := user.CompanyId
+	companyDetail, e := models.GetCompanyDetailByIdGroup(companyId)
+	if e != nil {
+		err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
+		return
+	}
+	//永续客户不限制次数
+	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
+		totalText = "0次"
+		return
+	}
+	var condition string
+	var pars []interface{}
+	pars = make([]interface{}, 0)
+	condition = " AND  company_id  = ?  AND points  != 0   ORDER BY  chart_permission_id DESC  "
+	pars = append(pars, companyId)
+	activitySpecialPermissionPointsList, e := models.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+
+	var itemBillTotal []string
+	for _, v := range activitySpecialPermissionPointsList {
+		if v.ChartPermissionId > 0 {
+			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次")) // 行业套餐客户展示规则
 		}
-		//tripRemaining = 5 - airborneTota + TripBillNum
-		tripRemaining = 5 + TripBillNum
-		if tripRemaining <= 0 {
-			errMsg = msgTemplate
-			return
+		if v.ChartPermissionId == 0 {
+			totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则
 		}
 	}
+	if len(itemBillTotal) > 0 {
+		totalText = strings.Join(itemBillTotal, "+")
+	}
 	return
 }
 

+ 12 - 0
utils/constants.go

@@ -269,3 +269,15 @@ func GetWeeklyDatabase() (databaseName string) {
 	}
 	return
 }
+
+// 客户状态
+const (
+	COMPANY_STATUS_TRY_OUT   = "试用"
+	COMPANY_STATUS_FOREVER   = "永续"
+	COMPANY_STATUS_FREEZE    = "冻结"
+	COMPANY_STATUS_LOSE      = "流失"
+	COMPANY_STATUS_LOSE_FLAG = "loss"
+	COMPANY_STATUS_FORMAL    = "正式"
+	COMPANY_STATUS_POTENTIAL = "潜在"
+	COMPANY_STATUS_CLOSE     = "关闭"
+)