浏览代码

no message

xingzai 1 年之前
父节点
当前提交
d95ae80f28

+ 154 - 95
controllers/cygx/activity_special_trip.go

@@ -63,7 +63,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 		uids += strconv.Itoa(v.UserId) + ","
 	}
 	uids = strings.TrimRight(uids, ",")
-	for i, v := range uidList {
+	for _, v := range uidList {
 		uid := v.UserId
 		wxUser, userErr := models.GetWxUserByUserId(uid)
 		if userErr != nil {
@@ -115,106 +115,138 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 					return
 				}
 			}
-			total, errtotal := cygx.GetActivitySpecialTripCount(uid, activityId)
-			if errtotal != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取失败,Err:" + errtotal.Error()
-				return
-			}
+			//total, errtotal := cygx.GetActivitySpecialTripCount(uid, activityId)
+			//if errtotal != nil {
+			//	br.Msg = "获取失败"
+			//	br.ErrMsg = "获取失败,Err:" + errtotal.Error()
+			//	return
+			//}
 			infoUser, err := cygx.GetUserAndCompanyNameList(uid)
 			if err != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取数据失败,Err:" + err.Error()
 				return
 			}
-			if total == 0 {
-				totalAll, err := cygx.GetUserActivitySpecialTripCount(uid, activityId)
+			//if total == 0 {
+			totalAll, err := cygx.GetUserActivitySpecialTripCount(uid, activityId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+				return
+			}
+			//流水记录表
+			itemBill := new(cygx.CygxActivitySpecialTripBill)
+			itemBill.UserId = infoUser.UserId
+			itemBill.ActivityId = activityInfo.ActivityId
+			itemBill.CreateTime = time.Now()
+			itemBill.Mobile = infoUser.Mobile
+			itemBill.Email = infoUser.Email
+			itemBill.CompanyId = infoUser.CompanyId
+			itemBill.CompanyName = infoUser.CompanyName
+			itemBill.RealName = infoUser.RealName
+			itemBill.Source = 2
+			itemBill.DoType = 1
+			itemBill.BillDetailed = -1 // 流水减一
+			itemBill.RegisterPlatform = 3
+			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
+			itemBill.AdminId = AdminUser.AdminId
+
+			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+				//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+				maxChartPermissionId, maxChartPermissionName, err := cygxService.GetSpecialBillMaxChartPermissionId(infoUser)
 				if err != nil {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+					br.Msg = "操作失败"
+					br.ErrMsg = "获取销售信息失败,GetSpecialBillMaxChartPermissionId Err:" + err.Error()
 					return
 				}
-				//流水记录表
-				itemBill := new(cygx.CygxActivitySpecialTripBill)
-				itemBill.UserId = infoUser.UserId
-				itemBill.ActivityId = activityInfo.ActivityId
-				itemBill.CreateTime = time.Now()
-				itemBill.Mobile = infoUser.Mobile
-				itemBill.Email = infoUser.Email
-				itemBill.CompanyId = infoUser.CompanyId
-				itemBill.CompanyName = infoUser.CompanyName
-				itemBill.RealName = infoUser.RealName
-				itemBill.Source = 2
-				itemBill.DoType = 1
-				itemBill.BillDetailed = -1 // 流水减一
-				itemBill.RegisterPlatform = 1
-				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
-				itemBill.ChartPermissionName = activityInfo.ChartPermissionName
-				itemBill.AdminId = AdminUser.AdminId
+				itemBill.ChartPermissionId = maxChartPermissionId
+				itemBill.ChartPermissionName = maxChartPermissionName
+			}
 
-				if totalAll == 0 {
-					item := new(cygx.CygxActivitySpecialTrip)
-					item.UserId = infoUser.UserId
-					item.RealName = infoUser.RealName
-					item.SellerName = infoUser.SellerName
-					item.ActivityId = activityId
-					item.CreateTime = time.Now()
-					item.Mobile = infoUser.Mobile
-					item.Email = infoUser.Email
-					item.CompanyId = infoUser.CompanyId
-					item.CompanyName = infoUser.CompanyName
-					item.AdminId = AdminUser.AdminId
-					item.Source = 2
-					//优先绑定用户修改过的外呼手机号
-					if infoUser.OutboundMobile != "" {
-						item.OutboundMobile = infoUser.OutboundMobile
-						if infoUser.OutboundCountryCode == "" {
-							item.CountryCode = "86"
-						} else {
-							item.CountryCode = infoUser.OutboundCountryCode
-						}
+			if totalAll == 0 {
+				item := new(cygx.CygxActivitySpecialTrip)
+				item.UserId = infoUser.UserId
+				item.RealName = infoUser.RealName
+				item.SellerName = infoUser.SellerName
+				item.ActivityId = activityId
+				item.CreateTime = time.Now()
+				item.Mobile = infoUser.Mobile
+				item.Email = infoUser.Email
+				item.CompanyId = infoUser.CompanyId
+				item.CompanyName = infoUser.CompanyName
+				item.AdminId = AdminUser.AdminId
+				item.Source = 2
+				//优先绑定用户修改过的外呼手机号
+				if infoUser.OutboundMobile != "" {
+					item.OutboundMobile = infoUser.OutboundMobile
+					if infoUser.OutboundCountryCode == "" {
+						item.CountryCode = "86"
 					} else {
-						item.OutboundMobile = infoUser.Mobile
-						if infoUser.CountryCode == "" {
-							item.CountryCode = "86"
-						} else {
-							item.CountryCode = infoUser.CountryCode
-						}
+						item.CountryCode = infoUser.OutboundCountryCode
 					}
-					items = append(items, item)
 				} else {
-					err = cygx.UpdateSpecialTrip(1, 0, uid, activityId)
-					if err != nil {
-						br.Msg = "报名失败,"
-						br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
-						return
-					}
-					resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
-					//48小时之内的取消也扣除一次参会记录
-					if time.Now().Add(+time.Hour * 48).After(resultTime) {
-						itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
+					item.OutboundMobile = infoUser.Mobile
+					if infoUser.CountryCode == "" {
+						item.CountryCode = "86"
+					} else {
+						item.CountryCode = infoUser.CountryCode
 					}
 				}
-				userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+				items = append(items, item)
+				err = cygxService.DeductTripRemainingtimesByUser(infoUser, activityInfo) //扣除用户专项调研剩余次数
 				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 - i
-					itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			} else {
+				err = cygx.UpdateSpecialTrip(1, 0, uid, activityId)
+				if err != nil {
+					br.Msg = "报名失败,"
+					br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
+					return
+				}
+				resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
+				//48小时之内的取消也扣除一次参会记录
+				if time.Now().Add(+time.Hour * 48).After(resultTime) {
+					itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
 				} else {
-					for k, num := range mapChartName {
-						if activityInfo.ChartPermissionName == k {
-							num = num + itemBill.BillDetailed - i
-						}
-						itemBill.Total += k + strconv.Itoa(num) + "次+"
+					err = cygxService.DeductTripRemainingtimesByUser(infoUser, activityInfo) //扣除用户专项调研剩余次数
+					if err != nil {
+						br.Msg = "操作失败"
+						br.ErrMsg = "操作失败,Err:" + err.Error()
+						return
 					}
-					itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 				}
-				itemsBill = append(itemsBill, itemBill)
 			}
+			//userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取专项调研剩余次数失败"
+			//	br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+			//	return
+			//}
+			//if userType == 2 {
+			//	tripRemaining = tripRemaining + itemBill.BillDetailed - i
+			//	itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			//} else {
+			//	for k, num := range mapChartName {
+			//		if activityInfo.ChartPermissionName == k {
+			//			num = num + itemBill.BillDetailed - i
+			//		}
+			//		itemBill.Total += k + strconv.Itoa(num) + "次+"
+			//	}
+			//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+			//}
+			totalText, err := cygxService.HandleActivitySpecialTripBillTotalText(infoUser)
+			if err != nil {
+				br.Msg = "报名失败,"
+				br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
+				return
+			}
+			itemBill.Total = totalText
+			itemsBill = append(itemsBill, itemBill)
+			//}
 
 			var itemMeeting = new(cygx.CygxActivitySpecialMeetingDetail)
 			itemMeeting.UserId = v.UserId
@@ -530,16 +562,36 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 	itemBill.Source = 2
 	itemBill.DoType = 2
 	itemBill.BillDetailed = 1 // 流水加一
-	itemBill.RegisterPlatform = 1
+	itemBill.RegisterPlatform = 3
 	itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	itemBill.AdminId = sysUser.AdminId
+
+	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+		//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+		lastTripBill, err := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, userId)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取销售信息失败,GetCygxActivitySpecialTripBillLastDetialByActivityId Err:" + err.Error()
+			return
+		}
+		itemBill.ChartPermissionId = lastTripBill.ChartPermissionId
+		itemBill.ChartPermissionName = lastTripBill.ChartPermissionName
+	}
+
 	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
 	//48小时之内的取消也扣除一次参会记录
 	var isValid int
 	if time.Now().Add(+time.Hour * 48).After(resultTime) {
 		isValid = 1
 		itemBill.BillDetailed = 0 // 48小时之内取消的,照样扣点,流水不进行加一
+	} else {
+		err = cygxService.RebateTripRemainingtimesByUser(infoUser, activityInfo) // 返点
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,RebateTripRemainingtimesByUserErr:" + err.Error()
+			return
+		}
 	}
 	err = cygx.ActivitySpecialTripCancel(isValid, activityId, userId)
 	if err != nil {
@@ -547,24 +599,31 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 		br.ErrMsg = "修改失败 Err:" + err.Error()
 		return
 	}
-	userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+	//userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.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 := cygxService.HandleActivitySpecialTripBillTotalText(infoUser)
 	if err != nil {
-		br.Msg = "获取专项调研剩余次数失败"
-		br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+		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, "+")
-	}
+	itemBill.Total = totalText
 	err = cygx.AddCygxActivitySpecialTripBill(itemBill)
 	if err != nil {
 		br.Msg = "修改失败"

+ 8 - 0
models/cygx/activity_special_permission_points.go

@@ -81,3 +81,11 @@ func GetCygxActivitySpecialPermissionPointsList(condition string, pars []interfa
 	_, err = o.Raw(sql, pars).QueryRows(&items)
 	return
 }
+
+// 更新公司每个行业剩余研选点数
+func UpdateCygxActivitySpecialPermissionPoints(points, companyId, chartPermissionId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	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/cygx/activity_special_trip_bill.go

@@ -194,3 +194,14 @@ func GetCygxActivitySpecialTripBillByCompanyId(companyId int) (item *CygxActivit
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
 }
+
+// GetCygxActivitySpecialTripBillLastDetialByActivityId  根据活动ID获取最后一条扣点明细
+func GetCygxActivitySpecialTripBillLastDetialByActivityId(activityId, userId int) (item *CygxActivitySpecialTripBill, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT *
+			FROM
+			cygx_activity_special_trip_bill  
+			WHERE 1 = 1  AND activity_id =?  AND  user_id = ?  ORDER BY id  DESC LIMIT 1  `
+	err = o.Raw(sql, activityId, userId).QueryRow(&item)
+	return
+}

+ 6 - 0
services/cygx/activity_power_check.go

@@ -538,6 +538,12 @@ func GetSpecialDetailUserPower(user *models.WxUser, activityInfo *cygx.ActivityS
 		err = errs
 		return
 	}
+	//如果有升级权限的自动添加策略的升级权限
+	if permissionStr != "" {
+		if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+			permissionStr += "," + utils.CE_LUE_NAME
+		}
+	}
 	//如果没有对应的升级权限,则返回
 	if !strings.Contains(permissionShengji, activityInfo.ChartPermissionName) {
 		return

+ 146 - 0
services/cygx/activity_special.go

@@ -736,3 +736,149 @@ func GetSpecialSurplusByCompanyNew(companyId int) (specialSurplus string, err er
 	}
 	return
 }
+
+// GetSpecialBillMaxChartPermissionId  获取专项调研剩余点数最多的行业
+func GetSpecialBillMaxChartPermissionId(user *cygx.UserAndCompanyName) (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 := cygx.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 *cygx.UserAndCompanyName, activityInfo *cygx.ActivitySpecialDetail) (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 := cygx.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 = cygx.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// RebateTripRemainingtimesByUser 返点用户专项调研剩余次数
+func RebateTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo *cygx.ActivitySpecialDetail) (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 {
+		lastTripBill, e := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
+		if e != nil {
+			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+			return
+		}
+
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?    LIMIT 1   "
+		pars = append(pars, companyId, lastTripBill.ChartPermissionId)
+	}
+	activitySpecialPermissionPointsList, e := cygx.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 = cygx.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// 预处理专项调研流水明细表描述内容
+func HandleActivitySpecialTripBillTotalText(user *cygx.UserAndCompanyName) (totalText string, err error) {
+	companyId := user.CompanyId
+	companyDetail, e := cygx.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 := cygx.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, "次")) // 行业套餐客户展示规则
+		}
+		if v.ChartPermissionId == 0 {
+			totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则
+		}
+	}
+	if len(itemBillTotal) > 0 {
+		totalText = strings.Join(itemBillTotal, "+")
+	}
+	return
+}