Browse Source

no message

xingzai 1 year ago
parent
commit
400f3513fc

+ 103 - 9
controllers/cygx/activity_special_trip.go

@@ -48,6 +48,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 	}
 	var items []*cygx.CygxActivitySpecialTrip
 	var itemsBill []*cygx.CygxActivitySpecialTripBill
+	var itemsMeet []*cygx.CygxActivitySpecialMeetingDetail
 	activityIds := req.ActivityIds
 	uidList := req.List
 	if activityIds == "" {
@@ -119,14 +120,13 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				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 {
-				infoUser, err := cygx.GetUserAndCompanyNameList(uid)
-				if err != nil {
-					br.Msg = "获取失败"
-					br.ErrMsg = "获取数据失败,Err:" + err.Error()
-					return
-				}
-
 				//流水记录表
 				itemBill := new(cygx.CygxActivitySpecialTripBill)
 				itemBill.UserId = infoUser.UserId
@@ -176,9 +176,20 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				items = append(items, item)
 				itemsBill = append(itemsBill, itemBill)
 			}
+
+			var itemMeeting = new(cygx.CygxActivitySpecialMeetingDetail)
+			itemMeeting.UserId = v.UserId
+			itemMeeting.ActivityId = activityId
+			itemMeeting.CreateTime = time.Now()
+			itemMeeting.Mobile = infoUser.Mobile
+			itemMeeting.Email = infoUser.Email
+			itemMeeting.CompanyId = infoUser.CompanyId
+			itemMeeting.CompanyName = infoUser.CompanyName
+			itemMeeting.RealName = infoUser.RealName
+			itemsMeet = append(itemsMeet, itemMeeting)
 		}
 	}
-	err = cygx.AddCygxActivitySpecialTrip(items, itemsBill)
+	err = cygx.AddCygxActivitySpecialTrip(items, itemsBill, itemsMeet)
 	if err != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "新增用户失败,Err:" + err.Error()
@@ -607,6 +618,7 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		return
 	}
 	var userIdArr []int
+	var newMeetingUserid = make(map[int]bool) //新提交的到会的额用户ID
 	meetingUids := req.UserIds
 	if len(meetingUids) == 0 {
 		meetingUids = "0"
@@ -620,6 +632,7 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 				userId, _ := strconv.Atoi(v)
 				if userId > 0 {
 					userIdArr = append(userIdArr, userId)
+					newMeetingUserid[userId] = true
 				}
 			}
 		}
@@ -667,7 +680,66 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+
+	var condition string
+	var pars []interface{}
+	condition += " AND is_meeting = 1  AND  activity_id = ? "
+	pars = append(pars, activityId)
+	listOldMeetingDetail, err := cygx.GetCygxActivitySpecialMeetingDetailList(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "GetCygxActivitySpecialMeetingDetailList,Err:" + err.Error()
+		return
+	}
+	//获取之前已经到会的人
+	//var oldMeetingUserid = make(map[int]bool)
+
+	pars = make([]interface{}, 0)
+	condition = "  AND  activity_id = ? "
+	pars = append(pars, activityId)
+	listTripBill, err := cygx.GetCygxActivitySpecialTripBill(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "GetCygxActivitySpecialTripBill,Err:" + err.Error()
+		return
+	}
+	//获取用户最后一次的扣点状态
+	mapUserLastTripBill := make(map[int]*cygx.CygxActivitySpecialTripBill)
+	for _, v := range listTripBill {
+		mapUserLastTripBill[v.UserId] = v
+	}
+
 	var items []*cygx.CygxActivitySpecialMeetingDetail
+	var itemsBill []*cygx.CygxActivitySpecialTripBill
+	if len(listOldMeetingDetail) > 0 {
+		for _, v := range listOldMeetingDetail {
+			if mapUserLastTripBill[v.UserId] == nil {
+				continue
+			}
+			//如果上一次空降的用户,这一次提交的时候没有带入,而且还被扣点了,那么就进行返点处理
+			if !newMeetingUserid[v.UserId] && v.IsAirborne == 1 && mapUserLastTripBill[v.UserId].BillDetailed < 0 {
+				var itemBill = new(cygx.CygxActivitySpecialTripBill)
+				//流水记录表
+				itemBill.UserId = v.UserId
+				itemBill.ActivityId = activityInfo.ActivityId
+				itemBill.CreateTime = time.Now()
+				itemBill.Mobile = v.Mobile
+				itemBill.Email = v.Email
+				itemBill.CompanyId = v.CompanyId
+				itemBill.CompanyName = v.CompanyName
+				itemBill.RealName = v.RealName
+				itemBill.Source = 2
+				itemBill.DoType = 2
+				itemBill.BillDetailed = 1 // 流水加一
+				itemBill.RegisterPlatform = 1
+				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+				itemBill.AdminId = AdminUser.AdminId
+				itemBill.Way = 2
+				itemsBill = append(itemsBill, itemBill)
+			}
+		}
+	}
+
 	for _, v := range listUser {
 		var item = new(cygx.CygxActivitySpecialMeetingDetail)
 		item.UserId = v.UserId
@@ -678,13 +750,35 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 		item.CompanyId = v.CompanyId
 		item.CompanyName = v.CompanyName
 		item.IsMeeting = 1
+		item.RealName = v.RealName
 		//添加空降人员字段
 		if _, ok := UserMap[v.UserId]; !ok {
 			item.IsAirborne = 1
 		}
+		var itemBill = new(cygx.CygxActivitySpecialTripBill)
+		//如果是空降客户,(没有扣点记录,或者上一次的流水不为负) 就进行扣点处理
+		if item.IsAirborne == 1 && (mapUserLastTripBill[v.UserId] == nil || mapUserLastTripBill[v.UserId].BillDetailed >= 0) {
+			//流水记录表
+			itemBill.UserId = v.UserId
+			itemBill.ActivityId = activityInfo.ActivityId
+			itemBill.CreateTime = time.Now()
+			itemBill.Mobile = v.Mobile
+			itemBill.Email = v.Email
+			itemBill.CompanyId = v.CompanyId
+			itemBill.CompanyName = v.CompanyName
+			itemBill.RealName = v.RealName
+			itemBill.Source = 2
+			itemBill.DoType = 1
+			itemBill.BillDetailed = -1 // 流水减一
+			itemBill.RegisterPlatform = 1
+			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+			itemBill.AdminId = AdminUser.AdminId
+			itemBill.Way = 2
+			itemsBill = append(itemsBill, itemBill)
+		}
 		items = append(items, item)
 	}
-	err = cygx.MeetingDopecialMeet(meetingUids, noMeetingUids, activityId, items)
+	err = cygx.MeetingDopecialMeet(meetingUids, noMeetingUids, activityId, items, itemsBill)
 	if err != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = "操作失败,Err:" + err.Error()

+ 30 - 4
models/cygx/cygx_activity_special_meeting_detail.go → models/cygx/activity_special_meeting_detail.go

@@ -17,6 +17,7 @@ type CygxActivitySpecialMeetingDetail struct {
 	CompanyName string    `description:"公司名称"`
 	IsMeeting   int       `description:"是否到会  1.是 ,0否"`
 	IsAirborne  int       `description:"是否属于空降  1.是 ,0否"`
+	RealName    string    `description:"真实姓名"`
 }
 
 type CygxActivitySpecialMeetingDetailResp struct {
@@ -42,7 +43,7 @@ type MeetingSpeciaDoRep struct {
 	ActivityId int    `description:"活动ID"`
 }
 
-//列表
+// 列表
 func GetCygxActivitySpecialMeetingDetailListByActivity(activityId int) (items []*CygxActivitySpecialMeetingDetailResp, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.* , u.real_name
@@ -52,8 +53,8 @@ func GetCygxActivitySpecialMeetingDetailListByActivity(activityId int) (items []
 	return
 }
 
-//到会操作
-func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivitySpecialMeetingDetail) (err error) {
+// 到会操作
+func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, items []*CygxActivitySpecialMeetingDetail, itemsBill []*CygxActivitySpecialTripBill) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -110,10 +111,19 @@ func MeetingDopecialMeet(meetingUids, noMeetingUids string, ActivityId int, item
 	if err != nil {
 		return
 	}
+	//添加到会扣点流水记录
+	if len(itemsBill) > 0 {
+		for _, v := range itemsBill {
+			_, err = to.Insert(v)
+			if err != nil {
+				return
+			}
+		}
+	}
 	return
 }
 
-//列表
+// 列表
 func GetCygxActivitySpecialMeetingDetailList(condition string, pars []interface{}) (items []*CygxActivitySpecialMeetingDetail, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT s.* 
@@ -131,3 +141,19 @@ func GetCygxActivitySpecialMeetingDetailListByActivityId(activityId int) (item [
 	_, err = o.Raw(sql, activityId).QueryRows(&item)
 	return
 }
+
+// 列表
+func UpdateCygxActivitySpecialMeetingDetailRealName(realName, mobile string) (err error) {
+	o := orm.NewOrm()
+	//添加记录表的到会信息
+	sql := `UPDATE cygx_activity_special_meeting_detail SET real_name = ?  WHERE mobile = ? `
+	_, err = o.Raw(sql, realName, mobile).Exec()
+	return
+}
+
+// 添加
+func AddCygxActivitySpecialMeetingDetail(item *CygxActivitySpecialMeetingDetail) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 44 - 3
models/cygx/activity_special_trip.go

@@ -2,7 +2,7 @@ package cygx
 
 import (
 
-	//"hongze/hz_crm_api/models"
+	//"hongze/hongze_admin/models"
 	"github.com/beego/beego/v2/client/orm"
 	"time"
 )
@@ -20,6 +20,7 @@ type CygxActivitySpecialTrip struct {
 	SellerName     string    `description:"所属销售"`
 	AdminId        int       `description:"销售/管理员ID"`
 	Source         int       `description:"来源,1小程序,2后台添加"`
+	IsMeeting      int       `description:"是否到会"`
 	OutboundMobile string    `description:"外呼手机号"`
 	CountryCode    string    `description:"手机国家区号"`
 }
@@ -78,7 +79,7 @@ func GetActivitySpecialTripCount(uid, activityId int) (count int, err error) {
 }
 
 // 新增预约人数
-func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*CygxActivitySpecialTripBill) (err error) {
+func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*CygxActivitySpecialTripBill, itemsMeet []*CygxActivitySpecialMeetingDetail) (err error) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -118,6 +119,14 @@ func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*C
 			return
 		}
 	}
+
+	//添加到会信息记录查询表
+	for _, item := range itemsMeet {
+		_, err = to.Insert(item)
+		if err != nil {
+			return
+		}
+	}
 	return
 }
 
@@ -166,9 +175,25 @@ func GetActivitySpecialTripTotal(activityId int, sqlStr string) (count int, err
 
 // ActivitySpecialTripCancel 取消报名
 func ActivitySpecialTripCancel(isValid, activityId, uid int) (err error) {
-	o := orm.NewOrm()
+	o, err := orm.NewOrm().Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
 	sql := `UPDATE cygx_activity_special_trip SET   is_valid= ?, is_cancel = 1  WHERE activity_id=? AND user_id = ? `
 	_, err = o.Raw(sql, isValid, activityId, uid).Exec()
+	if err != nil {
+		return
+	}
+	//删除到会记录表信息
+	sql = ` DELETE FROM cygx_activity_special_meeting_detail  WHERE activity_id = ?  AND user_id = ?  `
+	_, err = o.Raw(sql, activityId, uid).Exec()
 	return
 }
 
@@ -232,3 +257,19 @@ func GetCygxActivitySpecialTripAirborneListByComapnyId(companyId int) (item []*C
 	_, err = o.Raw(sql, companyId).QueryRows(&item)
 	return
 }
+
+// 列表
+func GetCygxActivitySpecialTripListCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*CygxActivitySpecialTrip, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_activity_special_trip as art WHERE 1= 1 `
+	if condition != "" {
+		sql += condition
+	}
+	if startSize+pageSize > 0 {
+		sql += ` LIMIT ?,?  `
+		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	} else {
+		_, err = o.Raw(sql, pars).QueryRows(&items)
+	}
+	return
+}

+ 1 - 0
models/cygx/activity_special_trip_bill.go

@@ -21,6 +21,7 @@ type CygxActivitySpecialTripBill struct {
 	DoType            int       `description:"操作方式,1报名,2取消报名"`
 	RegisterPlatform  int       `description:"来源 1小程序,2:网页"`
 	ChartPermissionId int       `description:"行业id"`
+	Way               int       `description:"1报名,取消报名。2到会取消到会"`
 }
 
 type CygxActivitySpecialTripBillList struct {

+ 6 - 6
models/cygx/cygx_user.go

@@ -154,7 +154,7 @@ func GetCygxCompanyUserListSplit(userIds string) (items []*CygxCompanyUser, err
 				 AND t.activity_type = 1  AND h.do_fail_type = 0 ) AS on_line_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 				 AND t.activity_type = 0 AND h.do_fail_type = 0 ) AS office_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND h.is_cancel = 0   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
 			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS activity_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_voice_id = h.activity_voice_id WHERE  h.mobile = u.mobile  ) AS activity_voice_num,
@@ -506,12 +506,12 @@ func GetCygxActivitySpecialTripCount(condition string, pars []interface{}) (coun
 	sqlCount := `SELECT
 	COUNT( 1 ) 
 FROM
-	cygx_activity_special_trip AS h
+	cygx_activity_special_meeting_detail AS h
 	INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
 	INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 WHERE
 	1 = 1 
-	AND h.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition
+	AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition
 	err = o.Raw(sqlCount, pars).QueryRow(&count)
 	return
 }
@@ -528,12 +528,12 @@ func GetCygxActivitySpecialTripByUser(uid, startSize, pageSize int) (items []*Us
 			a.special_type AS activity_type,
 			h.is_meeting 
 		FROM
-			cygx_activity_special_trip AS h
+			cygx_activity_special_meeting_detail AS h
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id
 			INNER JOIN wx_user AS u ON h.mobile = u.mobile 
 		WHERE
 			1 = 1
-			AND h.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW()
+			 AND a.publish_status = 1 AND a.activity_time_end < NOW()
 			AND u.user_id = ?
 			ORDER BY  a.activity_time DESC LIMIT ?,? `
 	_, err = o.Raw(sql, uid, startSize, pageSize).QueryRows(&items)
@@ -849,7 +849,7 @@ func GetUserInteractionTableCount(uid int) (item *GetUserInteractionTableCountRe
 					  AND t.activity_type=1 AND h.do_fail_type = 0   ) AS on_line_num,
 			( SELECT  	COUNT( DISTINCT a.activity_id )  as count  FROM cygx_activity_signup_detail AS h INNER JOIN cygx_activity as a ON a.activity_id = h.activity_id  INNER JOIN cygx_activity_type as t ON t.activity_type_id = a.activity_type_id   WHERE h.mobile = u.mobile  
 				  AND t.activity_type = 0 AND h.do_fail_type = 0  ) AS office_num,
-			( SELECT COUNT( 1 ) FROM cygx_activity_special_trip AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND h.is_cancel = 0   AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
+			( SELECT COUNT( 1 ) FROM cygx_activity_special_meeting_detail AS h INNER JOIN cygx_activity_special AS a ON a.activity_id = h.activity_id WHERE h.mobile = u.mobile  AND a.publish_status = 1 AND a.activity_time_end < NOW()) AS trip_num,
 			( SELECT COUNT( 1 ) FROM cygx_micro_roadshow_video_history AS h  INNER JOIN cygx_micro_roadshow_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS roadshow_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_video_history AS h  INNER JOIN cygx_activity_video as v ON v.video_id = h.video_id WHERE  h.mobile = u.mobile  ) AS activity_video_num,
 			( SELECT COUNT( 1 ) FROM cygx_activity_voice_history AS h  INNER JOIN cygx_activity_voice as v ON v.activity_id = h.activity_id WHERE  h.mobile = u.mobile  ) AS activity_voice_num

+ 4 - 4
models/cygx/cygx_user_company.go

@@ -302,11 +302,11 @@ func GetCygxActivitySpecialTripCountByCompany(condition string) (count int, err
 	sqlCount := ` SELECT
 			COUNT( 1 ) 
 		FROM
-			cygx_activity_special_trip AS r
+			cygx_activity_special_meeting_detail AS r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
 		WHERE
 			1 = 1 
-			AND r.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW()   ` + condition
+			 AND a.publish_status = 1 AND a.activity_time_end < NOW()   ` + condition
 	err = o.Raw(sqlCount).QueryRow(&count)
 	return
 }
@@ -325,10 +325,10 @@ func CygxActivitySpecialTripByCompany(condition string, startSize, pageSize int)
 			r.real_name,
 			r.is_meeting 
 		FROM
-			cygx_activity_special_trip AS r
+			cygx_activity_special_meeting_detail AS r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
 			LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
-			WHERE 1= 1  	AND r.is_cancel = 0 AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition + `
+			WHERE 1= 1   AND a.publish_status = 1 AND a.activity_time_end < NOW() ` + condition + `
 			ORDER BY  ui.trip_num DESC, r.create_time DESC  LIMIT ?,? `
 	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return

+ 15 - 13
services/cygx/activity_special.go

@@ -234,11 +234,12 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			condition += ` AND company_id = ? `
 			pars = append(pars, companyId)
 
-			airborneTota, e = cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-			if e != nil {
-				err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-				return
-			}
+			//到会空降的也加入流水记录表,这里不在做单独计算 2023-07-10
+			//airborneTota, e = cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
+			//if e != nil {
+			//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
+			//	return
+			//}
 			//condition += ` AND is_valid = 1 `
 			//查询当年的数据
 			condition += ` AND create_time >= ?  `
@@ -286,14 +287,15 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			if len(chartList) == 0 {
 				return
 			}
-			airborneList, e := cygx.GetCygxActivitySpecialTripAirborneListByComapnyId(companyId)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
-			}
-			for _, v := range airborneList {
-				mapPermissionNameTrip[v.ChartPermissionName] += 1
-			}
+			//到会空降的也加入流水记录表,这里不在做单独计算 2023-07-10
+			//airborneList, e := cygx.GetCygxActivitySpecialTripAirborneListByComapnyId(companyId)
+			//if e != nil {
+			//	err = errors.New("获取品种信息失败, Err:" + e.Error())
+			//	return
+			//}
+			//for _, v := range airborneList {
+			//	mapPermissionNameTrip[v.ChartPermissionName] += 1
+			//}
 
 			var condition string
 			var pars []interface{}