Browse Source

Merge branch 'debug' of http://8.136.199.33:3000/hongze/hz_crm_api into debug

xingzai 1 year ago
parent
commit
1899d0f0b3

+ 1 - 0
controllers/company.go

@@ -9245,6 +9245,7 @@ func (this *CompanyTodoController) CompanyActivitySpecialPointsBill() {
 		br.Msg = "请选择客户"
 		return
 	}
+
 	// 获取流水信息
 	var condition string
 	var pars []interface{}

+ 90 - 35
controllers/cygx/activity_special_trip.go

@@ -63,7 +63,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 		uids += strconv.Itoa(v.UserId) + ","
 	}
 	uids = strings.TrimRight(uids, ",")
-	for _, v := range uidList {
+	for i, v := range uidList {
 		uid := v.UserId
 		wxUser, userErr := models.GetWxUserByUserId(uid)
 		if userErr != nil {
@@ -128,6 +128,12 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				return
 			}
 			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
@@ -144,6 +150,51 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 				itemBill.RegisterPlatform = 1
 				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 				itemBill.AdminId = AdminUser.AdminId
+
+				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.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
+						}
+					} else {
+						item.OutboundMobile = infoUser.Mobile
+						if infoUser.CountryCode == "" {
+							item.CountryCode = "86"
+						} else {
+							item.CountryCode = infoUser.CountryCode
+						}
+					}
+					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小时之内,取消报名之后二次报名,不扣除流水记录
+					}
+				}
 				userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
 				if err != nil {
 					br.Msg = "获取专项调研剩余次数失败"
@@ -151,49 +202,17 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 					return
 				}
 				if userType == 2 {
-					tripRemaining -= 1
+					tripRemaining = tripRemaining + itemBill.BillDetailed-i
 					itemBill.Total = strconv.Itoa(tripRemaining) + "次"
 				} else {
 					for k, num := range mapChartName {
 						if activityInfo.ChartPermissionName == k {
-							num -= 1
+							num = num + itemBill.BillDetailed - i
 						}
 						itemBill.Total += k + strconv.Itoa(num) + "次+"
 					}
 					itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 				}
-
-
-				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.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
-					}
-				} else {
-					item.OutboundMobile = infoUser.Mobile
-					if infoUser.CountryCode == "" {
-						item.CountryCode = "86"
-					} else {
-						item.CountryCode = infoUser.CountryCode
-					}
-				}
-				items = append(items, item)
 				itemsBill = append(itemsBill, itemBill)
 			}
 
@@ -773,6 +792,24 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 				itemBill.AdminId = AdminUser.AdminId
 				itemBill.Way = 2
+				userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(v.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, "+")
+				}
 				itemsBill = append(itemsBill, itemBill)
 			}
 		}
@@ -812,6 +849,24 @@ func (this *ActivitySpecialTripCoAntroller) MeetingDo() {
 			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 			itemBill.AdminId = AdminUser.AdminId
 			itemBill.Way = 2
+			userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(v.CompanyId)
+			if err != nil {
+				br.Msg = "获取专项调研剩余次数失败"
+				br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+				return
+			}
+			if userType == 2 {
+				tripRemaining -= 1
+				itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			} else {
+				for k, num := range mapChartName {
+					if activityInfo.ChartPermissionName == k {
+						num -= 1
+					}
+					itemBill.Total += k + strconv.Itoa(num) + "次+"
+				}
+				itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+			}
 			itemsBill = append(itemsBill, itemBill)
 		}
 		items = append(items, item)

+ 17 - 0
models/company/company_permission.go

@@ -623,3 +623,20 @@ func GetReportPermissionIdsByCompanyIds(companyIds []int) (items []*CompanyListP
 	_, err = o.Raw(sql, companyIds).QueryRows(&items)
 	return
 }
+
+
+// GetCompanyReportPermissionByCompanyIdAndProductId 获取权限类型
+func GetCompanyReportPermissionByCompanyIdAndProductId(companyId, productId int) (items []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	re.*
+FROM
+	company_report_permission  as re 
+	INNER JOIN chart_permission as  c ON c.chart_permission_id = re.chart_permission_id
+WHERE
+	re.company_id = ? 
+	AND re.product_id = ? 
+	AND STATUS = '正式' `
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	return
+}

+ 19 - 2
models/cygx/activity_special_trip.go

@@ -113,8 +113,9 @@ func AddCygxActivitySpecialTrip(items []*CygxActivitySpecialTrip, itemsBill []*C
 	}
 
 	//添加流水记录
-	for _, item := range itemsBill {
-		_, err = to.Insert(item)
+	//倒序插入,让流水表看起来是正的
+	for i := len(itemsBill) - 1; i >= 0; i-- {
+		_, err = to.Insert(itemsBill[i])
 		if err != nil {
 			return
 		}
@@ -280,3 +281,19 @@ func GetCygxActivitySpecialTripListCondition(condition string, pars []interface{
 	}
 	return
 }
+
+//获取某一用户的报名的数量
+func GetUserActivitySpecialTripCount(uid, activityId int) (count int, err error) {
+	sqlCount := `SELECT COUNT(1) AS count FROM cygx_activity_special_trip  WHERE  user_id=?  AND   activity_id =? `
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, uid, activityId).QueryRow(&count)
+	return
+}
+
+
+func UpdateSpecialTrip(isValid, isCancel, userId, activityId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE cygx_activity_special_trip SET is_valid = ?,create_time=NOW(),is_cancel=?  WHERE user_id=? AND activity_id=? `
+	_, err = o.Raw(sql, isValid, isCancel, userId, activityId).Exec()
+	return
+}

+ 11 - 0
models/cygx/activity_special_trip_bill.go

@@ -186,3 +186,14 @@ func GetCygxActivitySpecialTripBillDetailListAll(condition string, pars []interf
 	_, err = o.Raw(sql, pars).QueryRows(&item)
 	return
 }
+
+func GetCygxActivitySpecialTripBillByCompanyId(companyId int) (item *CygxActivitySpecialTripBill, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			*
+		FROM
+			cygx_activity_special_trip_bill WHERE company_id = ? ORDER BY create_time DESC LIMIT 1
+		`
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}

+ 1 - 1
models/cygx/company_user_type.go

@@ -55,7 +55,7 @@ func GetCygxCompanyUserTypeList() (items []*CygxCompanyUserType, err error) {
 // CygxCompanyUserType 更新权益客户身份类型
 func UpdateCygxCompanyUserTypeAndPackageType(companyId, useType, packageType int) (err error) {
 	o := orm.NewOrm()
-	sql := `UPDATE cygx_company_user_type SET customer_type_id=? AND package_type = ? WHERE company_id=? `
+	sql := `UPDATE cygx_company_user_type SET customer_type_id=?, package_type = ? WHERE company_id=? `
 	_, err = o.Raw(sql, useType, packageType, companyId).Exec()
 	return
 }

+ 39 - 0
models/cygx/cygx_activity_special_points_company.go

@@ -0,0 +1,39 @@
+package cygx
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxActivitySpecialInheritPointsCompany struct {
+	Id                  int       `orm:"column(id);pk"`
+	CompanyId           int       // 公司ID
+	CompanyName         string    // 公司名称
+	Points              int   // 公司剩余点数
+	CreateTime          time.Time // 创建时间
+	ModifyTime          time.Time // 更新时间
+	ChartPermissionId   int       // 品种ID
+	ChartPermissionName string    // 品种名称
+}
+
+func AddCygxActivitySpecialPointsCompany(item *CygxActivitySpecialInheritPointsCompany) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func AddCygxActivitySpecialInheritPointsCompanyMulti(items []*CygxActivitySpecialInheritPointsCompany) (err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(1, items)
+	return
+}
+
+func GetCygxActivitySpecialInheritPointsByCompanyId(companyId int) (list []*CygxActivitySpecialInheritPointsCompany, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * FROM cygx_activity_special_inherit_points_company WHERE company_id = ?  `
+	_, err = o.Raw(sql,companyId).QueryRows(&list)
+	return
+}

+ 23 - 2
services/company_apply/company_approval.go

@@ -391,6 +391,29 @@ func Approved(approvalRecord *contract.ContractApprovalRecord, opUser *system.Ad
 				// 处理权益客户的身份信息()
 				cygxService.UpdateCygxCompanyUserType(recordInfo.CompanyContractId)
 
+				if recordInfo.ApplyMethod == 1{
+					//获取合同信息
+					contractInfo, tmpErr := company.GetCompanyContractDetail(recordInfo.CompanyId, recordInfo.ProductId, recordInfo.CompanyContractId)
+					if tmpErr != nil {
+						err = errors.New(fmt.Sprint("待审批信息不存在,CompanyId:", recordInfo.CompanyId, ";productId:", recordInfo.ProductId, ";Err:"+tmpErr.Error()))
+						return
+					}
+					if contractInfo == nil {
+						err = errors.New(fmt.Sprint("待审批信息不存在,CompanyId:", recordInfo.CompanyId, ";productId:", recordInfo.ProductId))
+						return
+					}
+
+					//格式化合同开始时间
+					contractStartDate, tmpErr := time.Parse(utils.FormatDate, contractInfo.StartDate)
+					if tmpErr != nil {
+						err = errors.New("合同开始时间转换失败,Err:" + tmpErr.Error())
+						return
+					}
+					if time.Now().After(contractStartDate) {
+						cygxService.ActivitySpecialCompanyApproval(recordInfo.CompanyId, companyInfo.CompanyName) //审批通过的时候专项调研次数更新
+					}
+				}
+
 				//权益销售客户申请转正后,消息群发给所有销售
 				services.AddCompanyApprovalMessageRai(recordInfo.CompanyId, recordInfo.CompanyContractId, recordInfo.ApplyRealName, companyInfo.CompanyName)
 
@@ -653,8 +676,6 @@ func afterApproved(companyApprovalId int, opUserId int, opUserName string) (err
 				err = errors.New("试用转正式失败,Err:" + tmpErr.Error())
 				return
 			}
-
-			go cygxService.ActivitySpecialCompanyApproval(recodeInfo.CompanyId, companyInfo.CompanyName) //审批通过的时候专项调研次数更新
 		} else {
 			tmpErr = company.ApplyApproveContract(recodeInfo.CompanyId, recodeInfo.ProductId, recodeInfo.CompanyApprovalId, contractInfo.CompanyContractId)
 			if tmpErr != nil {

+ 201 - 146
services/cygx/activity_special.go

@@ -223,73 +223,55 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 	if companyDetail.Status == "永续" {
 		specialSurplus = "不限次数"
 	}
+	// 获取继承点数
+	inheritList, e := cygx.GetCygxActivitySpecialInheritPointsByCompanyId(companyId)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialInheritPointsByCompanyId, Err: " + e.Error())
+	}
 	//chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
 	//chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
+	var condition string
+	var pars []interface{}
+
+	condition += ` AND company_id = ? `
+	pars = append(pars, companyId)
+
+	//查询当年的数据
+	condition += ` AND b.create_time >= ?  `
+	pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
+	listTripBill, e := cygx.GetCygxActivitySpecialTripBillList(condition, pars)
+	if e != nil {
+		err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+		return
+	}
+
 	if companyDetail.Status == "正式" {
 		userType, _, _, _, _ := GetUserType(companyId)
 		if userType == 2 {
-			var condition string
-			var pars []interface{}
-
-			condition += ` AND company_id = ? `
-			pars = append(pars, companyId)
-
-			//airborneList, e := cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-			//if e != nil {
-			//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-			//	return
-			//}
-			//ariborneMap := make(map[int]int)
-			//for _, v := range airborneList {
-			//	ariborneMap[v.ChartPermissionId] = v.Count
-			//}
-			//到会空降的也加入流水记录表,这里不在做单独计算 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 >= ?  `
-			pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
-			listTripBill, e := cygx.GetCygxActivitySpecialTripBill(condition, pars)
-			if e != nil {
-				err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
-				return
-			}
-			//TripBillNumMap := make(map[int]int)
-			//for _, v := range listTripBill {
-			//	TripBillNumMap[v.ChartPermissionId] += v.BillDetailed
-			//}
-			var TripBillNum int
+			var tripBillNum int
 			for _, v := range listTripBill {
 				//if v.ActivityId == 0 {
 				//	continue
 				//}
-				TripBillNum += v.BillDetailed
+				tripBillNum += v.BillDetailed
 			}
-			// CRM13.2 70w客户有16次专项调研, 45w有10次
-			//packageTypeMap := map[int]int{1: 16, 2: 10}
-			//totalTrip := packageTypeMap[packageType]
 
-			//tripRemaining := totalTrip + TripBillNum
-			tripRemaining := TripBillNum
+			if len(inheritList) > 0 {
+				for _, v := range inheritList {
+					if v.ChartPermissionId == 0 {
+						tripBillNum += v.Points
+					}
+				}
+			}
+			tripRemaining := tripBillNum
 			if tripRemaining < 0 {
 				tripRemaining = 0
 			}
-			//for k, _ := range chartNumMap {
-			//	tripRemaining := totalTrip - ariborneMap[k] + TripBillNumMap[k]
-			//	if tripRemaining < 0 {
-			//		tripRemaining = 0
-			//	}
-			//	specialSurplus += chartMap[k] + strconv.Itoa(tripRemaining) + "次,"
-			//}
-			//specialSurplus = strings.TrimRight(specialSurplus, ",")
+
 			specialSurplus = strconv.Itoa(tripRemaining) + "次"
-			//tripRemaining = 12 - tripTota
 		} else {
-			list, e := company.GetCompanyReportPermissionUpgrade(companyId, 2)
+			list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
 			if e != nil && e.Error() != utils.ErrNoRow() {
 				err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
 			}
@@ -298,44 +280,30 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 			}
 			var chartPermissionIdSlice []string
 			mapChartName := make(map[string]int)
+			mapUpgradeId := make(map[int]int)
 			mapPermissionNameTrip := make(map[string]int)
+			mapInheritChartName := make(map[string]int)
 			//mapPermissionName := make(map[int]string)
 			for _, v := range list {
 				chartPermissionIdSlice = append(chartPermissionIdSlice, strconv.Itoa(v.ChartPermissionId))
-
+				//是升级套餐才有点数
+				if v.IsUpgrade == 1 {
+					mapUpgradeId[v.ChartPermissionId] = 1
+				}
 			}
-			chartList, e := models.GetChartPermissionByIds(chartPermissionIdSlice)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
+			chartList := make([]*models.ChartPermission, 0)
+			if len(chartPermissionIdSlice) > 0 {
+				chartList, e = models.GetChartPermissionByIds(chartPermissionIdSlice)
+				if e != nil {
+					err = errors.New("获取品种信息失败, Err:" + e.Error())
+					return
+				}
 			}
+
 			if len(chartList) == 0 {
 				return
 			}
-			//到会空降的也加入流水记录表,这里不在做单独计算 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{}
-
-			condition += ` AND company_id = ? `
-			pars = append(pars, companyId)
-
-			//查询当年的数据
-			condition += ` AND b.create_time >= ?  `
-			pars = append(pars, time.Now().Format(utils.FormatYearDate)+"-01-01")
-			listTripBill, e := cygx.GetCygxActivitySpecialTripBillList(condition, pars)
-			if e != nil {
-				err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
-				return
-			}
+
 			//var TripBillNum int
 			for _, v := range listTripBill {
 				if v.ActivityId == 0 {
@@ -344,8 +312,25 @@ func GetSpecialSurplusByCompany(companyId int) (specialSurplus string, err error
 				mapPermissionNameTrip[v.ChartPermissionName] += v.BillDetailed
 			}
 			for _, v := range chartList {
-				mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+				//如果是升级则加点
+				if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
+					mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+				} else {
+					mapChartName[v.PermissionName] = mapPermissionNameTrip[v.ChartPermissionName]
+				}
+			}
+			// 通过继承获得的加点
+			for _, v := range inheritList {
+				mapInheritChartName[v.ChartPermissionName] = v.Points
+			}
+			for k, _ := range chartNameMap {
+				if _, ok := mapChartName[k]; ok {
+					if inherit, ok2 := mapInheritChartName[k]; ok2 {
+						mapChartName[k] += inherit
+					}
+				}
 			}
+
 			for k, v := range mapChartName {
 				if v > 0 {
 					specialSurplus += k + strconv.Itoa(v) + "次+"
@@ -421,7 +406,7 @@ func CheckActivitySpecialUpdatePower(adminId int, activityInfo *cygx.ActivitySpe
 }
 
 // GetChartPermissionSpecialSurplusByCompany 获取公司专项调研次数-分品种
-func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tripRemaining int,mapChartName map[string]int, err error) {
+func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tripRemaining int, mapChartName map[string]int, err error) {
 	companyDetail, e := cygx.GetCompanyDetailByIdGroup(companyId)
 	if e != nil {
 		err = errors.New("GetCompanyDetailByIdGroup, Err: " + e.Error())
@@ -438,6 +423,7 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 	}
 	//chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
 	//chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
 	if companyDetail.Status == "正式" {
 		//var packageType int
 		userType, _, _, _, _ = GetUserType(companyId)
@@ -455,55 +441,35 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
 			return
 		}
+		// 获取继承点数
+		inheritList, e := cygx.GetCygxActivitySpecialInheritPointsByCompanyId(companyId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivitySpecialInheritPointsByCompanyId, Err: " + e.Error())
+		}
 		if userType == 2 {
-			//airborneList, e := cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-			//if e != nil {
-			//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-			//	return
-			//}
-			//ariborneMap := make(map[int]int)
-			//for _, v := range airborneList {
-			//	ariborneMap[v.ChartPermissionId] = v.Count
-			//}
-			//到会空降的也加入流水记录表,这里不在做单独计算 2023-07-10
-			//airborneTotal, e := cygx.GetActivitySpecialTripAirborneCountByActivitySpecial(condition, pars)
-			//if e != nil {
-			//	err = errors.New("GetActivitySpecialTripAirborneCountByActivitySpecial, Err: " + e.Error())
-			//	return
-			//}
-			//condition += ` AND is_valid = 1 `
-			//TripBillNumMap := make(map[int]int)
-			//for _, v := range listTripBill {
-			//	TripBillNumMap[v.ChartPermissionId] += v.BillDetailed
-			//}
-			var TripBillNum int
+
+			var tripBillNum int
 			for _, v := range listTripBill {
 				//if v.ActivityId == 0 {
 				//	continue
 				//}
-				TripBillNum += v.BillDetailed
+				tripBillNum += v.BillDetailed
+			}
+			if len(inheritList) > 0 {
+				for _, v := range inheritList {
+					if v.ChartPermissionId == 0 {
+						tripBillNum += v.Points
+					}
+				}
 			}
-			// CRM13.2 70w客户有16次专项调研, 45w有10次
-			//packageTypeMap := map[int]int{1: 16, 2: 10}
-			//totalTrip := packageTypeMap[packageType]
 
-			tripRemaining = TripBillNum
+			tripRemaining = tripBillNum
 			if tripRemaining < 0 {
 				tripRemaining = 0
 			}
 
-			//for k, _ := range chartNumMap {
-			//	tripRemaining := totalTrip - ariborneMap[k] + TripBillNumMap[k]
-			//	if tripRemaining < 0 {
-			//		tripRemaining = 0
-			//	}
-			//	specialSurplus += chartMap[k] + strconv.Itoa(tripRemaining) + "次,"
-			//}
-			//specialSurplus = strings.TrimRight(specialSurplus, ",")
-
-			//tripRemaining = 12 - tripTota
 		} else {
-			list, e := company.GetCompanyReportPermissionUpgrade(companyId, 2)
+			list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
 			if e != nil && e.Error() != utils.ErrNoRow() {
 				err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
 			}
@@ -512,31 +478,30 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 			}
 			var chartPermissionIdSlice []string
 			mapChartName = make(map[string]int)
+			mapUpgradeId := make(map[int]int)
 			mapPermissionNameTrip := make(map[string]int)
+			mapInheritChartName := make(map[string]int)
 			//mapPermissionName := make(map[int]string)
 			for _, v := range list {
 				chartPermissionIdSlice = append(chartPermissionIdSlice, strconv.Itoa(v.ChartPermissionId))
-
+				//是升级套餐才有点数
+				if v.IsUpgrade == 1 {
+					mapUpgradeId[v.ChartPermissionId] = 1
+				}
 			}
-			chartList, e := models.GetChartPermissionByIds(chartPermissionIdSlice)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
+			chartList := make([]*models.ChartPermission, 0)
+			if len(chartPermissionIdSlice) > 0 {
+				chartList, e = models.GetChartPermissionByIds(chartPermissionIdSlice)
+				if e != nil {
+					err = errors.New("获取品种信息失败, Err:" + e.Error())
+					return
+				}
 			}
+
 			if len(chartList) == 0 {
 				return
 			}
-			//到会空降的也加入流水记录表,这里不在做单独计算 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 TripBillNum int
 			for _, v := range listTripBill {
 				if v.ActivityId == 0 {
 					continue
@@ -544,8 +509,25 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 				mapPermissionNameTrip[v.ChartPermissionName] += v.BillDetailed
 			}
 			for _, v := range chartList {
-				mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+				//如果是升级则加点
+				if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
+					mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+				} else {
+					mapChartName[v.PermissionName] = mapPermissionNameTrip[v.ChartPermissionName]
+				}
+			}
+			// 通过继承获得的加点
+			for _, v := range inheritList {
+				mapInheritChartName[v.ChartPermissionName] = v.Points
 			}
+			for k, _ := range chartNameMap {
+				if _, ok := mapChartName[k]; ok {
+					if inherit, ok2 := mapInheritChartName[k]; ok2 {
+						mapChartName[k] += inherit
+					}
+				}
+			}
+
 			for k, v := range mapChartName {
 				if v > 0 {
 					specialSurplus += k + strconv.Itoa(v) + "次+"
@@ -558,8 +540,15 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 }
 
 // 审批通过的时候专项调研次数更新
-func ActivitySpecialCompanyApproval(companyId int,companyName string) (err error) {
+func ActivitySpecialCompanyApproval(companyId int, companyName string) (err error) {
 	userType, packageType, _, _, _ := GetUserType(companyId)
+	// 获取继承点数
+	inheritList, e := cygx.GetCygxActivitySpecialInheritPointsByCompanyId(companyId)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialInheritPointsByCompanyId, Err: " + e.Error())
+	}
+	chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
+
 	itemBill := new(cygx.CygxActivitySpecialTripBill)
 	itemBill.CreateTime = time.Now()
 	itemBill.CompanyId = companyId
@@ -570,15 +559,26 @@ func ActivitySpecialCompanyApproval(companyId int,companyName string) (err error
 	if userType == 2{
 		packageTypeMap := map[int]int{1: 16, 2: 10}
 		totalTrip := packageTypeMap[packageType]
-		itemBill.BillDetailed = totalTrip
-		itemBill.Total = strconv.Itoa(totalTrip) + "次"
+		if len(inheritList) > 0 {
+			for _, v := range inheritList {
+				if v.ChartPermissionId == 0 {
+					itemBill.BillDetailed = totalTrip + v.Points
+				} else {
+					itemBill.BillDetailed = totalTrip
+				}
+			}
+		} else {
+			itemBill.BillDetailed = totalTrip
+		}
+
+		itemBill.Total = strconv.Itoa(itemBill.BillDetailed) + "次"
 		if totalTrip == 10 {
 			itemBill.Content = "45w大套餐转正"
 		} else {
 			itemBill.Content = "70w大套餐转正"
 		}
 	} else {
-		list, e := company.GetCompanyReportPermissionUpgrade(companyId, 2)
+		list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
 		}
@@ -587,25 +587,50 @@ func ActivitySpecialCompanyApproval(companyId int,companyName string) (err error
 		}
 		var chartPermissionIdSlice []string
 		mapChartName := make(map[string]int)
+		mapUpgradeId := make(map[int]int)
+		mapInheritChartName := make(map[string]int)
 		mapPermissionNameTrip := make(map[string]int)
 		//mapPermissionName := make(map[int]string)
 		for _, v := range list {
 			chartPermissionIdSlice = append(chartPermissionIdSlice, strconv.Itoa(v.ChartPermissionId))
+			//是升级套餐才有点数
+			if v.IsUpgrade == 1 {
+				mapUpgradeId[v.ChartPermissionId] = 1
+			}
 		}
-		chartList, e := models.GetChartPermissionByIds(chartPermissionIdSlice)
-		if e != nil {
-			err = errors.New("获取品种信息失败, Err:" + e.Error())
-			return
+		chartList := make([]*models.ChartPermission, 0)
+		if len(chartPermissionIdSlice) > 0 {
+			chartList, e = models.GetChartPermissionByIds(chartPermissionIdSlice)
+			if e != nil {
+				err = errors.New("获取品种信息失败, Err:" + e.Error())
+				return
+			}
 		}
 		if len(chartList) == 0 {
 			return
 		}
 		for _, v := range chartList {
-			mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+			//如果是升级则加点
+			if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
+				mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
+			} else {
+				mapChartName[v.PermissionName] = mapPermissionNameTrip[v.ChartPermissionName]
+			}
+		}
+		// 通过继承获得的加点
+		for _, v := range inheritList {
+			mapInheritChartName[v.ChartPermissionName] = v.Points
+		}
+		for k, _ := range chartNameMap {
+			if _, ok := mapChartName[k]; ok {
+				if inherit, ok2 := mapInheritChartName[k]; ok2 {
+					mapChartName[k] += inherit
+				}
+			}
 		}
 		for k, v := range mapChartName {
 			if v > 0 {
-				itemBill.BillDetailed += 5
+				itemBill.BillDetailed += v
 				itemBill.Total += k + strconv.Itoa(v) + "次+"
 			}
 		}
@@ -619,7 +644,6 @@ func ActivitySpecialCompanyApproval(companyId int,companyName string) (err error
 	return
 }
 
-
 // 取消专项调研返点
 func ActivitySpecialPublishAndCancel(activityInfo *cygx.ActivitySpecialDetail) (err error) {
 	//userType, tripRemaining, mapChartName, err := GetChartPermissionSpecialSurplusByCompany(companyId)
@@ -641,4 +665,35 @@ func ActivitySpecialPublishAndCancel(activityInfo *cygx.ActivitySpecialDetail) (
 	//	return
 	//}
 	return
+}
+
+// GetSpecialSurplusByCompanyNew 获取公司专项调研剩余次数-用流水表数据不计算了,计算都丢在流水里
+func GetSpecialSurplusByCompanyNew(companyId int) (specialSurplus string, err error) {
+	companyDetail, e := cygx.GetCompanyDetailByIdGroup(companyId)
+	if e != nil {
+		err = errors.New("GetCompanyDetailByIdGroup, Err: " + e.Error())
+	}
+	if companyDetail == nil {
+		return
+	}
+	if companyDetail.Status != "永续" && companyDetail.Status != "正式" {
+		return
+	}
+	if companyDetail.Status == "永续" {
+		specialSurplus = "不限次数"
+	}
+	//chartMap := map[int]string{utils.YI_YAO_ID:utils.YI_YAO_NAME, utils.XIAO_FEI_ID:utils.XIAO_FEI_NAME, utils.KE_JI_ID:utils.KE_JI_NAME, utils.ZHI_ZAO_ID:utils.ZHI_ZAO_NAME}
+	//chartNumMap := map[int]int{utils.YI_YAO_ID:0, utils.XIAO_FEI_ID:0, utils.KE_JI_ID:0, utils.ZHI_ZAO_ID:0}
+	if companyDetail.Status == "正式" {
+		billItem,e := cygx.GetCygxActivitySpecialTripBillByCompanyId(companyId)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = e
+			return
+		}
+		if billItem != nil {
+			specialSurplus = billItem.Total
+		}
+		return
+	}
+	return
 }