zhangchuanxing 5 dagar sedan
förälder
incheckning
3a08bc5e04

+ 44 - 118
controllers/cygx/activity_special_trip.go

@@ -49,6 +49,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 	}
 	roleTypeCode := AdminUser.RoleTypeCode
 	var items []*cygx.CygxActivitySpecialTrip
+	var itemsRedis []*cygx.CygxActivitySpecialTrip
 	var itemsBill []*cygx.CygxActivitySpecialTripBill
 	var itemsMeet []*cygx.CygxActivitySpecialMeetingDetail
 	activityIds := req.ActivityIds
@@ -64,6 +65,16 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 		uids += strconv.Itoa(v.UserId) + ","
 	}
 	uids = strings.TrimRight(uids, ",")
+
+	if roleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
+		err = cygxService.CheckSpecialActivityPointsByUserIds(uids, len(activityIdList)) //根据用户ID,活动场次,校验用户是否有剩余点数报名专项调研活动
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,Err:" + err.Error()
+			return
+		}
+	}
+
 	for _, v := range uidList {
 		uid := v.UserId
 		wxUser, userErr := models.GetWxUserByUserId(uid)
@@ -82,7 +93,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 			}
 			limitPeopleNum := activityInfo.LimitPeopleNum
 			if limitPeopleNum > 0 {
-				if AdminUser.RoleTypeCode != "admin" {
+				if AdminUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
 					havePower, err := cygxService.GetSpecialDetailUserPower(wxUser, activityInfo)
 					if err != nil {
 						br.Msg = "用户权限校验失败!"
@@ -129,46 +140,38 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
 				return
 			}
-			if totalAll > 0 {
-				continue
-			}
 
-			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
-					}
+			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)
-				err = cygxService.DeductTripRemainingtimesByUser(infoUser, activityInfo, roleTypeCode) //扣除用户专项调研剩余次数
-				if err != nil {
-					br.Msg = "操作失败"
-					br.ErrMsg = "操作失败,Err:" + err.Error()
-					return
+			} else {
+				item.OutboundMobile = infoUser.Mobile
+				if infoUser.CountryCode == "" {
+					item.CountryCode = "86"
+				} else {
+					item.CountryCode = infoUser.CountryCode
 				}
+			}
+			itemsRedis = append(itemsRedis, item)
+			if totalAll == 0 {
+				items = append(items, item)
 			} else {
 				err = cygx.UpdateSpecialTrip(1, 0, uid, activityId)
 				if err != nil {
@@ -197,9 +200,9 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 		br.ErrMsg = "新增用户失败,Err:" + err.Error()
 		return
 	}
-	if len(items) > 0 {
+	if len(itemsRedis) > 0 {
 		//9用户报名添加到处理研选扣点
-		for _, v := range items {
+		for _, v := range itemsRedis {
 			time.Sleep(100 * time.Millisecond) // 添加0.1秒的延时
 			cygxService.SpecialActivityPointsBillSignupAddSpecial(v.ActivityId, v.UserId, AdminUser.AdminId)
 		}
@@ -480,57 +483,11 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
 		return
 	}
-
-	infoUser, err := cygx.GetUserAndCompanyNameList(userId)
-	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 = 2
-	//itemBill.BillDetailed = 1 // 流水加一
-	//itemBill.RegisterPlatform = 3
-	//itemBill.ChartPermissionId = activityInfo.ChartPermissionId
-	//itemBill.ChartPermissionName = activityInfo.ChartPermissionName
-	//itemBill.AdminId = sysUser.AdminId
-
-	//if activityInfo.ChartPermissionName == utils.CE_LUE_NAME || activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
-	//if utils.InArrayByStr(utils.ACTIVITY_SPECIAL_TRIP_PERMISSION_NAME_OTHER, activityInfo.ChartPermissionName) {
-	//	//如果是策略、固收行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
-	//	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 {
@@ -538,37 +495,6 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 		br.ErrMsg = "修改失败 Err:" + err.Error()
 		return
 	}
-	//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.CompanyId)
-	//if err != nil {
-	//	br.Msg = "报名失败,"
-	//	br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
-	//	return
-	//}
-	//itemBill.Total = totalText
-	//err = cygx.AddCygxActivitySpecialTripBill(itemBill)
-	//if err != nil {
-	//	br.Msg = "修改失败"
-	//	br.ErrMsg = "修改失败流水记录添加失败 Err:" + err.Error()
-	//	return
-	//}
 	go cygxService.ActivityPointsBillSignupCancelSpecial(activityId, userId, sysUser.AdminId) // 用户取消报名专项调研活动扣点处理
 	br.Ret = 200
 	br.Success = true
@@ -800,12 +726,12 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 					return
 				}
 				if userType == 2 {
-					tripRemaining += itemBill.BillDetailed
+					//tripRemaining += itemBill.BillDetailed要处理
 					itemBill.Total = strconv.Itoa(tripRemaining) + "次"
 				} else {
 					for k, num := range mapChartName {
 						if activityInfo.ChartPermissionName == k {
-							num += itemBill.BillDetailed
+							//num += itemBill.BillDetailed要处理
 						}
 						itemBill.Total += k + strconv.Itoa(num) + "次+"
 					}

+ 2 - 2
models/cygx/activity_special_permission_points.go

@@ -10,7 +10,7 @@ import (
 type CygxActivitySpecialPermissionPoints struct {
 	Id                  int       `orm:"column(id);pk"`
 	CompanyId           int       `description:"公司ID"`
-	Points              int       `description:"剩余点数"`
+	Points              float64   `description:"剩余点数"`
 	CompanyName         string    `description:"公司名称"`
 	ChartPermissionId   int       `description:"行业id"`
 	ChartPermissionName string    `description:"行业名称"`
@@ -90,7 +90,7 @@ func GetCygxActivitySpecialPermissionPointsList(condition string, pars []interfa
 }
 
 // 更新公司每个行业剩余研选点数
-func UpdateCygxActivitySpecialPermissionPoints(points, companyId, chartPermissionId int) (err error) {
+func UpdateCygxActivitySpecialPermissionPoints(points float64, 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()

+ 1 - 1
models/cygx/activity_special_trip_bill.go

@@ -17,7 +17,7 @@ type CygxActivitySpecialTripBill struct {
 	RealName            string    `description:"用户实际名称"`
 	AdminId             int       `description:"销售/管理员ID"`
 	Source              int       `description:"来源,1小程序,2后台添加, 3开发人员手动添加"`
-	BillDetailed        int       `description:"流水明细,判断是进账还是出账"`
+	BillDetailed        float64   `description:"流水明细,判断是进账还是出账"`
 	DoType              int       `description:"操作方式,1报名,2取消报名"`
 	RegisterPlatform    int       `description:"来源 1小程序,2:网页"`
 	ChartPermissionId   int       `description:"行业id"`

+ 46 - 8
services/cygx/activity_special.go

@@ -582,10 +582,10 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 	itemBill.DoType = 2
 	itemBill.Way = 3
 	if packageType > 0 {
-		packageTypeMap := map[int]int{1: 16, 2: 12}
+		packageTypeMap := map[int]float64{1: 16, 2: 12}
 		totalTrip := packageTypeMap[packageType]
 		itemBill.BillDetailed = totalTrip
-		itemBill.Total = strconv.Itoa(itemBill.BillDetailed) + "次"
+		itemBill.Total = fmt.Sprint(itemBill.BillDetailed) + "次"
 		if packageType == 2 {
 			itemBill.Content = "45w大套餐转正"
 		} else {
@@ -629,7 +629,7 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 			mapRaiSubjectivity[v.ChartPermissionId] = true
 			mapPermissionName[v.ChartPermissionId] = v.ChartPermissionName
 		}
-		var points int
+		var points float64
 		for _, v := range list {
 			//如果是升级则加点
 			if v.IsUpgrade == 1 && mapRaiSubjectivity[v.ChartPermissionId] {
@@ -670,7 +670,7 @@ func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyNam
 			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次"))
 			itemBillTotalMap[v.ChartPermissionName] = fmt.Sprint(v.ChartPermissionName, v.Points, "次")
 		}
-		itemBill.BillDetailed = 4 * len(items)
+		itemBill.BillDetailed = float64(4 * len(items))
 		permissionNameSlice := []string{"医药", "消费", "科技", "智造"}
 		var itemBillTotalNew []string
 		for _, v := range permissionNameSlice {
@@ -822,7 +822,7 @@ func DeductTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 		return
 	}
 
-	var maxPoints int // 获取最大剩余点数,(写的有点多余)
+	var maxPoints float64 // 获取最大剩余点数,(写的有点多余)
 	for _, v := range activitySpecialPermissionPointsList {
 		if maxPoints < v.Points {
 			maxPoints = v.Points
@@ -856,7 +856,7 @@ func DeductTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 		}
 	}
 	var maxChartPermissionId int // 剩余点数最多的行业
-	var points int               // 剩余点数
+	var points float64           // 剩余点数
 	for _, v := range activitySpecialPermissionPointsList {
 		maxChartPermissionId = v.ChartPermissionId
 		points = v.Points - 1
@@ -904,7 +904,7 @@ func RebateTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 	}
 
 	var maxChartPermissionId int // 剩余点数最多的行业(返点行业)
-	var points int               // 剩余点数
+	var points float64           // 剩余点数
 	for _, v := range activitySpecialPermissionPointsList {
 		maxChartPermissionId = v.ChartPermissionId
 		points = v.Points + 1
@@ -939,7 +939,7 @@ func HandleActivitySpecialTripBillTotalText(companyId int) (totalText string, er
 	}
 	//永续客户次数累加
 	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
-		var points int
+		var points float64
 		for _, v := range activitySpecialPermissionPointsList {
 			points += v.Points
 		}
@@ -973,3 +973,41 @@ func HandleActivitySpecialTripBillTotalText(companyId int) (totalText string, er
 	}
 	return
 }
+
+// 根据用户ID,活动场次,校验用户是否有剩余点数报名专项调研活动
+func CheckSpecialActivityPointsByUserIds(userIds string, activityLen int) (err error) {
+	userList, err := models.GetWxUserListByUserIds(userIds)
+	if err != nil {
+		return
+	}
+	mapCompanyPointAdd := make(map[int]float64) // 每个公司需要添加的点数
+	mapCompanyPointNow := make(map[int]float64) // 每个公司现有的点数
+	var comPanyIds []int
+	for _, v := range userList {
+		mapCompanyPointAdd[v.CompanyId] += float64(1 * activityLen)
+		comPanyIds = append(comPanyIds, v.CompanyId)
+	}
+
+	var condition string
+	var pars []interface{}
+	pars = make([]interface{}, 0)
+	condition = ` AND  company_id IN (` + utils.GetOrmInReplace(len(comPanyIds)) + `) `
+	pars = append(pars, comPanyIds)
+	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 {
+		mapCompanyPointNow[v.CompanyId] = v.Points
+	}
+	//如果需要新增的点数,大于公司剩余的点数,那么就做报错处理
+	for _, v := range userList {
+		if mapCompanyPointAdd[v.CompanyId] > mapCompanyPointNow[v.CompanyId] {
+			err = errors.New("您的专项调研次数已用完,如仍想参加,请与您的对口销售商议")
+		}
+	}
+
+	return
+
+}