|
@@ -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
|
|
|
}
|
|
|
|