瀏覽代碼

Merge branch 'cygx/cygx_need_p1-885' of http://8.136.199.33:3000/hongze/hz_crm_api

xingzai 1 年之前
父節點
當前提交
caf457af51

+ 154 - 96
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,107 +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.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
@@ -531,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 {
@@ -548,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 = "修改失败"

+ 29 - 0
controllers/cygx/industrial_management.go

@@ -197,6 +197,35 @@ func (this *IndustrialManagementController) ChartPermissionFirstProduct() {
 	br.Data = resp
 }
 
+// @Title 专项产业调研活动一级行业分类
+// @Description 专项产业调研活动一级行业分类接口
+// @Success 200 {object} cygx.ChartPermissionResp
+// @router /chartPermission/activitySpecial [get]
+func (this *IndustrialManagementController) ChartPermissionListActivitySpecial() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	resp := new(cygx.ChartPermissionResp)
+	list, err := cygx.GetChartPermissionAll()
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
+		return
+	}
+	//医药、消费、科技、制造、策略
+	for _, v := range list {
+		if v.PermissionName == utils.YI_YAO_NAME || v.PermissionName == utils.XIAO_FEI_NAME || v.PermissionName == utils.KE_JI_NAME || v.PermissionName == utils.ZHI_ZAO_NAME || v.PermissionName == utils.CE_LUE_NAME {
+			resp.List = append(resp.List, v)
+		}
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
 // @Title 添加产业
 // @Description 添加产业接口
 // @Param	request	body cygx.IndustrialManagementAdd true "type json string"

+ 8 - 0
models/chart_permission.go

@@ -152,3 +152,11 @@ func GetChartPermissionListRai() (items []*ChartPermission, err error) {
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// 获取权益主观权限
+func GetChartPermissionListRaiSubjectivity() (items []*ChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM chart_permission WHERE product_id=2  AND permission_type = 1  ORDER BY sort ASC `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 91 - 0
models/cygx/activity_special_permission_points.go

@@ -0,0 +1,91 @@
+package cygx
+
+import (
+	//"github.com/beego/beego/v2/client/orm"
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
+	"time"
+)
+
+type CygxActivitySpecialPermissionPoints struct {
+	Id                  int       `orm:"column(id);pk"`
+	CompanyId           int       `description:"公司ID"`
+	Points              int       `description:"剩余点数"`
+	CompanyName         string    `description:"公司名称"`
+	ChartPermissionId   int       `description:"行业id"`
+	ChartPermissionName string    `description:"行业名称"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"更新时间"`
+}
+
+// MultiAddCygxActivitySpecialPermissionPoints 批量添加
+func MultiAddCygxActivitySpecialPermissionPoints(items []*CygxActivitySpecialPermissionPoints) (err error) {
+	if len(items) == 0 {
+		return
+	}
+
+	var chartPermissionIds []int
+	var companyId int
+	for _, v := range items {
+		companyId = v.CompanyId
+		if v.ChartPermissionId > 0 {
+			chartPermissionIds = append(chartPermissionIds, v.ChartPermissionId)
+		}
+	}
+	lenchartPermissionIds := len(chartPermissionIds)
+	o, err := orm.NewOrmUsingDB("hz_cygx").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err == nil {
+			o.Commit()
+		} else {
+			o.Rollback()
+		}
+	}()
+
+	var condition string
+	var pars []interface{}
+	pars = make([]interface{}, 0)
+	condition = " AND  company_id  = ?  "
+	pars = append(pars, companyId)
+	if lenchartPermissionIds > 0 {
+		condition += " AND  chart_permission_id IN (" + utils.GetOrmInReplace(lenchartPermissionIds) + ")   "
+		pars = append(pars, chartPermissionIds)
+	}
+	//删除历史记录
+	sql := ""
+	if condition != "" {
+		sql = " DELETE FROM cygx_activity_special_permission_points  WHERE 1= 1 " + condition
+		_, err = o.Raw(sql, pars).Exec()
+		if err != nil {
+			return
+		}
+	}
+	//批量插入
+	_, err = o.InsertMulti(len(items), items)
+	if err != nil {
+		return
+	}
+	return
+}
+
+// 获取公司每个行业剩余研选点数列表
+func GetCygxActivitySpecialPermissionPointsList(condition string, pars []interface{}) (items []*CygxActivitySpecialPermissionPoints, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_activity_special_permission_points WHERE 1 = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	_, 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
+}

+ 0 - 0
models/cygx/cygx_activity_special_points_company.go → models/cygx/activity_special_points_company.go


+ 32 - 0
models/cygx/activity_special_trip_bill.go

@@ -46,6 +46,7 @@ type CygxActivitySpecialTripBillList struct {
 	ChartPermissionName string    `description:"行业名称"`
 	Way                 int       `description:"1报名,取消报名。2到会取消到会 3转正或清零 4取消活动"`
 	Content             string    `description:"内容"`
+	Total               string    `description:"总和"`
 }
 
 // 添加
@@ -194,3 +195,34 @@ 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
+}
+
+func GetBestNewBillList() (item []*CygxActivitySpecialTripBillList, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT
+*  
+FROM
+	cygx_activity_special_trip_bill 
+WHERE
+	1 = 1
+AND id  IN (SELECT
+	MAX(id) as  mid 
+FROM
+	cygx_activity_special_trip_bill 
+WHERE
+	1 = 1 
+GROUP BY
+	company_id)`
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}

+ 1 - 0
models/db.go

@@ -465,6 +465,7 @@ func initCygx() {
 		new(cygx.CygxQuestionnaireTheme),
 		new(cygx.CygxAskserieVideo),
 		new(cygx.CygxIndustrialAskserieVideoGroupManagement),
+		new(cygx.CygxActivitySpecialPermissionPoints),
 	)
 }
 

+ 9 - 0
routers/commentsRouter.go

@@ -1492,6 +1492,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialManagementController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialManagementController"],
+        beego.ControllerComments{
+            Method: "ChartPermissionListActivitySpecial",
+            Router: `/chartPermission/activitySpecial`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialManagementController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:IndustrialManagementController"],
         beego.ControllerComments{
             Method: "ChartPermissionList",

+ 22 - 21
services/company_apply/company_approval.go

@@ -391,28 +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) //审批通过的时候专项调研次数更新
-					}
+				//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, recordInfo.CompanyContractId, companyInfo.CompanyName) //审批通过的时候专项调研次数更新
+					//cygxService.ActivitySpecialCompanyApproval(recordInfo.CompanyContractId) //审批通过的时候专项调研次数更新
+				}
+				//}
 
 				//权益销售客户申请转正后,消息群发给所有销售
 				services.AddCompanyApprovalMessageRai(recordInfo.CompanyId, recordInfo.CompanyContractId, recordInfo.ApplyRealName, companyInfo.CompanyName)

+ 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

+ 313 - 62
services/cygx/activity_special.go

@@ -539,15 +539,32 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 	return
 }
 
+//func init() {
+//	ActivitySpecialCompanyApproval(7030, 1259, "怀民大套餐客户")
+
+// //格式化合同开始时间
+// contractStartDate, tmpErr := time.Parse(utils.FormatDate, "2023-12-19")
+//
+//	if tmpErr != nil {
+//		fmt.Println(tmpErr)
+//		return
+//	}
+//
+//	if time.Now().After(contractStartDate) {
+//		fmt.Println("go")
+//	}
+//}
+
 // 审批通过的时候专项调研次数更新
-func ActivitySpecialCompanyApproval(companyId int, companyName string) (err error) {
+func ActivitySpecialCompanyApproval(companyId, companyContractId 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}
+	//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 items []*cygx.CygxActivitySpecialPermissionPoints
 
 	itemBill := new(cygx.CygxActivitySpecialTripBill)
 	itemBill.CreateTime = time.Now()
@@ -559,17 +576,6 @@ func ActivitySpecialCompanyApproval(companyId int, companyName string) (err erro
 	if userType == 2 {
 		packageTypeMap := map[int]int{1: 16, 2: 10}
 		totalTrip := packageTypeMap[packageType]
-		//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.BillDetailed = totalTrip
 		itemBill.Total = strconv.Itoa(itemBill.BillDetailed) + "次"
 		if totalTrip == 10 {
@@ -577,70 +583,104 @@ func ActivitySpecialCompanyApproval(companyId int, companyName string) (err erro
 		} else {
 			itemBill.Content = "70w大套餐转正"
 		}
+
+		//记录公司剩余点数
+		item := new(cygx.CygxActivitySpecialPermissionPoints)
+		item.Points = totalTrip
+		item.CompanyId = companyId
+		item.CompanyName = companyName
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		items = append(items, item)
+
 	} else {
-		list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
+		//list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
+		//}
+		//if len(list) == 0 {
+		//	return
+		//}
+
+		var condition string
+		var pars []interface{}
+		pars = make([]interface{}, 0)
+		condition = " AND  company_contract_id = ?  AND  is_upgrade = 1  "
+		pars = append(pars, companyContractId)
+		list, e := company.GetCompanyContractPermissionList(condition, pars) // 获取带有升级的权限
 		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
-		}
-		if len(list) == 0 {
+			err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
 			return
 		}
-		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 := make([]*models.ChartPermission, 0)
-		if len(chartPermissionIdSlice) > 0 {
-			chartList, e = models.GetChartPermissionByIds(chartPermissionIdSlice)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
-			}
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxAllocationCompanyContractPermissionListById, Err: " + e.Error())
+			return
 		}
-		if len(chartList) == 0 {
+
+		if len(list) == 0 {
 			return
 		}
-		for _, v := range chartList {
-			//如果是升级则加点
-			if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
-				mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
-			} else {
-				mapChartName[v.PermissionName] = mapPermissionNameTrip[v.ChartPermissionName]
-			}
+
+		//获取权益主观权限
+		listRaiSubjectivity, e := models.GetChartPermissionListRaiSubjectivity()
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetChartPermissionListRaiSubjectivity, Err: " + e.Error())
 		}
-		// 通过继承获得的加点
-		//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
-				}
-			}
+		mapRaiSubjectivity := make(map[int]bool)
+		mapPermissionName := make(map[int]string)
+		for _, v := range listRaiSubjectivity {
+			mapRaiSubjectivity[v.ChartPermissionId] = true
+			mapPermissionName[v.ChartPermissionId] = v.ChartPermissionName
 		}
-		for k, v := range mapChartName {
-			if v > 0 {
-				itemBill.BillDetailed += v
-				itemBill.Total += k + strconv.Itoa(v) + "次+"
+		for _, v := range list {
+			//如果是升级则加点
+			if v.IsUpgrade == 1 && mapRaiSubjectivity[v.ChartPermissionId] {
+				item := new(cygx.CygxActivitySpecialPermissionPoints)
+				item.Points = 5
+				item.CompanyId = companyId
+				item.CompanyName = companyName
+				item.ChartPermissionId = v.ChartPermissionId
+				item.ChartPermissionName = mapPermissionName[v.ChartPermissionId]
+				item.CreateTime = time.Now()
+				item.ModifyTime = time.Now()
+				items = append(items, item)
 			}
 		}
 		itemBill.Content = "行业升级套餐转正"
-		itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 	}
-	err = cygx.AddCygxActivitySpecialTripBill(itemBill)
-	if err != nil {
+
+	e := cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
+	if e != nil {
+		err = errors.New("MultiAddCygxActivitySpecialPermissionPoints, Err:" + e.Error())
 		return
 	}
+	if userType != 2 && len(items) > 0 {
+		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 {
+			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次"))
+		}
+		itemBill.BillDetailed = 5 * len(items)
+		itemBill.Total = strings.Join(itemBillTotal, "+")
+	}
+
+	//如果有升级行业权限,或者大套餐客户就写入流水信息
+	if itemBill.Total != "" {
+		e := cygx.AddCygxActivitySpecialTripBill(itemBill)
+		if e != nil {
+			err = errors.New("AddCygxActivitySpecialTripBill, Err:" + e.Error())
+			return
+		}
+	}
 	return
 }
 
@@ -697,3 +737,214 @@ 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
+}
+
+func initnee885() {
+	list, err := cygx.GetBestNewBillList()
+	if err != nil {
+		fmt.Println(err)
+	}
+	var items []*cygx.CygxActivitySpecialPermissionPoints
+	for _, v := range list {
+		fmt.Println(v.Total)
+		if v.Total == "" || v.Total == "0" || v.Total == "0次" {
+			continue
+		}
+		//智造5次+科技5次+消费5次+医药4次
+		sliceTotal := strings.Split(v.Total, "+")
+
+		for _, vs := range sliceTotal {
+			var points string
+			item := new(cygx.CygxActivitySpecialPermissionPoints)
+			if strings.Contains(vs, "医药") {
+				item.ChartPermissionName = "医药"
+				points := strings.Replace(vs, "医药", "", -1)
+				fmt.Println(points)
+				points = strings.Replace(points, "次", "", -1)
+				item.Points, _ = strconv.Atoi(points)
+				item.ChartPermissionId = 22
+			} else if strings.Contains(vs, "消费") {
+				item.ChartPermissionName = "消费"
+				points := strings.Replace(vs, "消费", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 21
+				item.Points, _ = strconv.Atoi(points)
+			} else if strings.Contains(vs, "科技") {
+				item.ChartPermissionName = "科技"
+				points := strings.Replace(vs, "科技", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 20
+				item.Points, _ = strconv.Atoi(points)
+			} else if strings.Contains(vs, "智造") {
+				item.ChartPermissionName = "智造"
+				points := strings.Replace(vs, "智造", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 19
+				item.Points, _ = strconv.Atoi(points)
+			} else {
+				points = strings.Replace(vs, "次", "", -1)
+				item.Points, _ = strconv.Atoi(points)
+			}
+			fmt.Println("points", points)
+			fmt.Println(vs)
+
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			fmt.Println(item)
+			items = append(items, item)
+		}
+
+	}
+
+	fmt.Println(len(items))
+	err = cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
+	fmt.Println(err)
+
+}