Browse Source

Merge branch 'master' into feature/crm14.9_contract_change

xyxie 1 year ago
parent
commit
87cfa1bda7
37 changed files with 1734 additions and 321 deletions
  1. 20 2
      controllers/company.go
  2. 58 1
      controllers/company_apply_v2.go
  3. 0 83
      controllers/company_renewal.go
  4. 154 96
      controllers/cygx/activity_special_trip.go
  5. 2 0
      controllers/cygx/apply_record.go
  6. 29 0
      controllers/cygx/industrial_management.go
  7. 31 0
      controllers/cygx/morning_meeting_review.go
  8. 20 19
      controllers/cygx/report_article.go
  9. 57 1
      controllers/cygx/summary_manage.go
  10. 657 2
      controllers/statistic_company_merge.go
  11. 1 1
      controllers/statistic_report.go
  12. 8 0
      models/chart_permission.go
  13. 2 0
      models/company/company.go
  14. 25 1
      models/company/company_contract.go
  15. 24 0
      models/company/company_contract_merge.go
  16. 8 0
      models/company/company_contract_no_renewed_ascribe.go
  17. 2 2
      models/company/company_user.go
  18. 91 0
      models/cygx/activity_special_permission_points.go
  19. 0 0
      models/cygx/activity_special_points_company.go
  20. 32 0
      models/cygx/activity_special_trip_bill.go
  21. 12 2
      models/cygx/cygx_morning_meeting_review_chapter.go
  22. 22 2
      models/cygx/cygx_user_company.go
  23. 1 1
      models/cygx/report_article.go
  24. 11 1
      models/cygx/summary_manage.go
  25. 1 1
      models/cygx/tag_history.go
  26. 1 0
      models/db.go
  27. 14 0
      models/response/statistic_report.go
  28. 17 12
      models/statistic_report.go
  29. 45 0
      routers/commentsRouter.go
  30. 22 21
      services/company_apply/company_approval.go
  31. 29 0
      services/cygx/activity_meet.go
  32. 6 0
      services/cygx/activity_power_check.go
  33. 313 62
      services/cygx/activity_special.go
  34. 4 1
      services/cygx/resource_data.go
  35. 2 0
      services/statistic_report/company.go
  36. 2 0
      services/statistic_report/reponse.go
  37. 11 10
      utils/constants.go

+ 20 - 2
controllers/company.go

@@ -379,6 +379,11 @@ func (this *CompanyController) SearchList() {
 		}
 		list[i].BtnItem = btnItem
 	}
+
+	for _, v := range list {
+		v.Status = strings.Replace(v.Status, utils.COMPANY_STATUS_FOREVER, utils.COMPANY_STATUS_X_CLASS_TRY_OUT, -1)   // 永续客户类型,映射成 X类试用
+		v.Duration = strings.Replace(v.Status, utils.COMPANY_STATUS_FOREVER, utils.COMPANY_STATUS_X_CLASS_TRY_OUT, -1) // 永续客户类型,映射成 X类试用
+	}
 	if list == nil {
 		list = make([]*company.CompanySearchItem, 0)
 	}
@@ -472,12 +477,17 @@ func (this *CompanyController) List() {
 	resp := new(company.CompanyListResp)
 	statusItems := make([]*company.CompanyStatus, 0)
 
+	// 永续客户类型,映射成 X类试用
+	if status == utils.COMPANY_STATUS_X_CLASS_TRY_OUT {
+		status = utils.COMPANY_STATUS_FOREVER
+	}
+
 	var statusArr []string
 	// 对权益用户隐藏关闭
 	if productId == utils.COMPANY_PRODUCT_RAI_ID {
-		statusArr = []string{"全部", "试用", "正式", "冻结", "流失", "永续"}
+		statusArr = []string{"全部", "试用", "正式", "冻结", "流失", utils.COMPANY_STATUS_X_CLASS_TRY_OUT}
 	} else {
-		statusArr = []string{"全部", "试用", "正式", "冻结", "流失", utils.COMPANY_STATUS_CLOSE, "永续"}
+		statusArr = []string{"全部", "试用", "正式", "冻结", "流失", utils.COMPANY_STATUS_CLOSE, utils.COMPANY_STATUS_X_CLASS_TRY_OUT}
 	}
 	//var statusArr = [...]string{"全部", "试用-活跃", "试用-非活跃", "正式", "冻结", "流失", "永续"}
 
@@ -1187,6 +1197,7 @@ func (this *CompanyController) List() {
 
 		var expireDay string
 		itemStatus := item.Status
+		item.Status = strings.Replace(item.Status, utils.COMPANY_STATUS_FOREVER, utils.COMPANY_STATUS_X_CLASS_TRY_OUT, -1) // 永续客户类型,映射成 X类试用
 		if itemStatus != "" {
 			if !strings.Contains(item.Status, "/") {
 				if itemStatus == utils.COMPANY_STATUS_FOREVER { //永续
@@ -1467,6 +1478,7 @@ func (this *CompanyController) List() {
 	statusMap := make(map[string]int, 0)
 	var totalCount int
 	for _, sv := range statusCount {
+		sv.Status = strings.Replace(sv.Status, utils.COMPANY_STATUS_FOREVER, utils.COMPANY_STATUS_X_CLASS_TRY_OUT, -1) // 永续客户类型,映射成 X类试用
 		totalCount = totalCount + sv.Count
 		statusMap[sv.Status] = sv.Count
 	}
@@ -3225,6 +3237,9 @@ func (this *CompanyController) Detail() {
 				item.PermissionList = append(item.PermissionList, plist)
 			}
 			resp.FiccItem = item
+			if resp.FiccItem.Status == utils.COMPANY_STATUS_FOREVER {
+				resp.FiccItem.Status = utils.COMPANY_STATUS_X_CLASS_TRY_OUT
+			}
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER ||
 				roleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP || roleTypeCode == utils.ROLE_TYPE_CODE_FICC_DEPARTMENT) &&
 				item.Status == utils.COMPANY_STATUS_TRY_OUT && item.ApproveStatus != "待审批" {
@@ -3268,6 +3283,9 @@ func (this *CompanyController) Detail() {
 
 			item.PermissionList = append(item.PermissionList, plist)
 			resp.RaiItem = item
+			if resp.RaiItem.Status == utils.COMPANY_STATUS_FOREVER {
+				resp.RaiItem.Status = utils.COMPANY_STATUS_X_CLASS_TRY_OUT
+			}
 			if (roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER ||
 				roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP ||
 				roleTypeCode == utils.ROLE_TYPE_CODE_RAI_DEPARTMENT) &&

+ 58 - 1
controllers/company_apply_v2.go

@@ -79,7 +79,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 	}
 	mapPermissionIdUpgrade := make(map[int]int, 0)
 	mapPermissionIdExpensive := make(map[int]int, 0)
-
+	var raicontractType string
 	if productId == 2 {
 		// CRM13.3改-是否为权益内部人员, 非权益内部人员只能勾选行业不能勾选单独的主客观, 勾选行业(即勾选主观的ID需要加入客观的权限ID)
 		isRai, e := services.CheckRaiAdmin(sysUser.AdminId)
@@ -97,6 +97,23 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 			return
 		}
 		req.PermissionIds = permissionIdsNew
+
+		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+		raicontractType = req.ContractType
+		if raicontractType != "新签合同" {
+			startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
+			startDateTime = startDateTime.AddDate(-1, 0, 0)
+			totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+			if err != nil {
+				br.Msg = "获取合同信息失败"
+				br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+				return
+			}
+			if totalLastYear > 0 {
+				raicontractType = "新签合同"
+			}
+		}
+
 	} else {
 		permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
 		if err != nil {
@@ -217,6 +234,7 @@ func (this *CompanyApplyController) ApplyServiceUpdate() {
 		contract.ProductName = companyProduct.ProductName
 		contract.CompanyProductId = companyProduct.CompanyProductId
 		contract.ContractType = req.ContractType
+		contract.RaiContractType = raicontractType
 		contract.ContractCode = contractCode
 		contract.StartDate = req.StartDate
 		contract.EndDate = req.EndDate
@@ -568,6 +586,7 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 
 	// 合同类型
 	contractType := req.ContractType
+	var raicontractType string // 权益合同类型
 	{
 		if contractType == "" {
 			contractType = "新签合同"
@@ -588,6 +607,24 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 			contractType = "续约合同"
 		}
 
+		if productId == 2 {
+			//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+			raicontractType = contractType
+			if raicontractType != "新签合同" {
+				startDateTime, _ := time.Parse(utils.FormatDate, req.StartDate)
+				startDateTime = startDateTime.AddDate(-1, 0, 0)
+				totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+				if err != nil {
+					br.Msg = "获取合同信息失败"
+					br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+					return
+				}
+				if totalLastYear > 0 {
+					raicontractType = "新签合同"
+				}
+			}
+		}
+
 		// 若上面的判断不是续约合同, 则继续查询是否存在正式转试用的记录,如果存在,那么合同类型是续约合同
 		if contractType != "续约合同" {
 			total, e := company.GetCompanyProductOperationRecordCount(companyProduct.CompanyId, companyProduct.ProductId)
@@ -634,6 +671,7 @@ func (this *CompanyApplyController) ApplyTurnPositive() {
 		contract.CompanyId = req.CompanyId
 		contract.ProductId = productId
 		contract.ContractType = contractType
+		contract.RaiContractType = raicontractType
 		contract.ProductName = companyProduct.ProductName
 		contract.CompanyProductId = companyProduct.CompanyProductId
 		contract.ContractCode = contractCode
@@ -1081,6 +1119,24 @@ func (this *CompanyApplyController) ApplyBySystemContract() {
 		}
 	}
 
+	var raicontractType string
+	if productId == 2 {
+		//权益的新签合同重新定义,如果合同起始时间在新签合同起始日期 1年之内的,仍为新签合同。
+		raicontractType = contractType
+		if raicontractType != "新签合同" {
+			startDateTime := contractDetail.StartDate.AddDate(-1, 0, 0)
+			totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(req.CompanyId, startDateTime.Format(utils.FormatDate))
+			if err != nil {
+				br.Msg = "获取合同信息失败"
+				br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+				return
+			}
+			if totalLastYear > 0 {
+				raicontractType = "新签合同"
+			}
+		}
+	}
+
 	var companyApprovalId int
 	if req.CompanyApprovalId <= 0 {
 		//当前是否存在待审批的单子
@@ -1105,6 +1161,7 @@ func (this *CompanyApplyController) ApplyBySystemContract() {
 			CompanyId:        req.CompanyId,
 			ProductId:        contractDetail.ProductId,
 			ContractType:     contractType,
+			RaiContractType:  raicontractType,
 			ProductName:      companyProduct.ProductName,
 			CompanyProductId: companyProduct.CompanyProductId,
 			ContractCode:     contractDetail.ContractCode,

+ 0 - 83
controllers/company_renewal.go

@@ -2,7 +2,6 @@ package controllers
 
 import (
 	"encoding/json"
-	"fmt"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/utils"
@@ -501,85 +500,3 @@ func (this *CompanyRenewalController) CompanyContractNoRenewedAscribeAddDetail()
 	br.Msg = "获取成功"
 	br.Data = resp
 }
-
-func init12123() {
-	var condition string
-	var pars []interface{}
-	list, e := company.GetCompanyNoRenewedAscribeList(condition, pars, 0, 0)
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		fmt.Println(e)
-		return
-	}
-
-	for _, v := range list {
-		pars = make([]interface{}, 0)
-		condition = " AND  company_id = ? "
-		pars = append(pars, v.CompanyId)
-
-		companyContractList, e := company.GetCompanyContractList(condition, pars)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			fmt.Println(e)
-			return
-		}
-		for _, vC := range companyContractList {
-			item := new(company.CompanyContractNoRenewedAscribe)
-			item.CompanyAscribeId = v.CompanyAscribeId
-			item.AscribeContent = v.AscribeContent
-			item.Content = v.Content
-			item.ProductId = v.ProductId
-			item.CompanyId = v.CompanyId
-			item.CompanyContractId = vC.CompanyContractId
-			item.AdminId = v.AdminId
-			item.CreateTime = utils.StrTimeToTime(v.CreateTime)
-			item.ModifyTime = utils.StrTimeToTime(v.CreateTime)
-
-			itemLog := new(company.CompanyContractNoRenewedAscribeLog)
-			itemLog.CompanyAscribeId = v.CompanyAscribeId
-			itemLog.AscribeContent = v.AscribeContent
-			itemLog.Content = v.Content
-			itemLog.ProductId = v.ProductId
-			itemLog.CompanyId = v.CompanyId
-			itemLog.CompanyContractId = vC.CompanyContractId
-			itemLog.AdminId = v.AdminId
-			itemLog.CreateTime = utils.StrTimeToTime(v.CreateTime)
-			itemLog.ModifyTime = utils.StrTimeToTime(v.CreateTime)
-
-			err := company.AddCompanyContractNoRenewedAscribe(item, itemLog)
-			fmt.Println(err)
-		}
-	}
-	return
-}
-
-func init879() {
-
-	companyContractList, e := models.GetIncrementalCompanyListByOperationRecordMerge879()
-	if e != nil && e.Error() != utils.ErrNoRow() {
-		fmt.Println(e)
-		return
-	}
-	fmt.Println(len(companyContractList))
-	//return
-	for _, v := range companyContractList {
-		item := new(company.CompanyContractNoRenewedAscribe)
-		item.CompanyContractId = v.CompanyContractId
-		item.ProductId = v.ProductId
-		item.CompanyId = v.CompanyId
-		item.CreateTime = time.Now()
-		item.ModifyTime = time.Now()
-
-		itemLog := new(company.CompanyContractNoRenewedAscribeLog)
-		itemLog.AscribeContent = v.AscribeContent
-		itemLog.Content = v.Content
-		itemLog.ProductId = v.ProductId
-		itemLog.CompanyId = v.CompanyId
-		itemLog.CompanyContractId = v.CompanyContractId
-		itemLog.CreateTime = time.Now()
-		itemLog.ModifyTime = time.Now()
-
-		err := company.AddCompanyContractNoRenewedAscribe(item, itemLog)
-		fmt.Println(err)
-	}
-
-	return
-}

+ 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 = "修改失败"

+ 2 - 0
controllers/cygx/apply_record.go

@@ -208,6 +208,8 @@ func (this *ApplyRecordController) ListSysRole() {
 			list[i].HttpUrl = utils.CYGX_WEB_URL + "/summary/1/" + strconv.Itoa(v.SourceId)
 		case "reportselection": //报告精选(重点公司)
 			list[i].HttpUrl = utils.CYGX_WEB_URL + "/recent/" + strconv.Itoa(v.SourceId)
+		case "yanxuanspecial": //研选专栏
+			list[i].HttpUrl = utils.CYGX_WEB_URL + "/column/detail/" + strconv.Itoa(v.SourceId)
 		}
 	}
 

+ 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"

+ 31 - 0
controllers/cygx/morning_meeting_review.go

@@ -213,6 +213,16 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 					}
 				}
 			}
+			//解析报告链接中的ID
+			var linkArticleId int
+			if req.ReportLink != "" {
+				linkArticleId, err = cygxService.GetReportLinkToArticleid(req.ReportLink)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "解析报告链接ID失败,Err:" + err.Error()
+					return
+				}
+			}
 
 			item := cygx.CygxMorningMeetingReviewChapter{
 				MeetingTime:          meetingTime,
@@ -225,6 +235,9 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 				IndustrialSubjectIds: req.IndustrialSubjectIds,
 				MeetingId:            meetingId,
 				Content:              req.Content,
+				ReportLink:           req.ReportLink,
+				LinkArticleId:        linkArticleId,
+				Title:                req.Title,
 			}
 			err := cygx.AddCygxMorningMeetingReviewChapter(&item)
 			if err != nil {
@@ -344,6 +357,16 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 					}
 				}
 			}
+			//解析报告链接中的ID
+			var linkArticleId int
+			if req.ReportLink != "" {
+				linkArticleId, err = cygxService.GetReportLinkToArticleid(req.ReportLink)
+				if err != nil {
+					br.Msg = "操作失败"
+					br.ErrMsg = "解析报告链接ID失败,Err:" + err.Error()
+					return
+				}
+			}
 
 			//有可能在编辑时新增了段落
 			if req.ChapterId == 0 {
@@ -358,6 +381,9 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 					IndustrialSubjectIds: req.IndustrialSubjectIds,
 					MeetingId:            int64(reqList.MeetingId),
 					Content:              req.Content,
+					ReportLink:           req.ReportLink,
+					LinkArticleId:        linkArticleId,
+					Title:                req.Title,
 				}
 				err := cygx.AddCygxMorningMeetingReviewChapter(&item)
 				if err != nil {
@@ -377,6 +403,9 @@ func (this *MorningMeetingController) PreserveAndPublish() {
 					IndustrialSubjectIds: req.IndustrialSubjectIds,
 					MeetingId:            int64(reqList.MeetingId),
 					Content:              req.Content,
+					ReportLink:           req.ReportLink,
+					LinkArticleId:        linkArticleId,
+					Title:                req.Title,
 				}
 				err := cygx.UpdateCygxMorningMeetingReviewChapter(&item)
 				if err != nil {
@@ -495,6 +524,8 @@ func (this *MorningMeetingController) Detail() {
 			IndustrialSubjectList: subjectItemList,
 			MeetingId:             chapter.MeetingId,
 			Content:               chapter.Content,
+			Title:                 chapter.Title,
+			ReportLink:            chapter.ReportLink,
 		}
 		resp.List = append(resp.List, &respItem)
 	}

+ 20 - 19
controllers/cygx/report_article.go

@@ -186,7 +186,7 @@ func (this *ReportArticleController) ReportArticleList() {
 	}
 	//主题
 	if subCategoryName != "" {
-		condition += ` AND ret.sub_category_name  =  ` + "'" + subCategoryName + "' "
+		condition += ` AND art.sub_category_name  =  ` + "'" + subCategoryName + "' "
 	}
 	//发布时间
 	if startDate != "" {
@@ -198,25 +198,26 @@ func (this *ReportArticleController) ReportArticleList() {
 	//报告匹配类型
 	if matchTypeName != "" && chartPermissionId > 0 {
 		//condition += ` AND re.match_type_name  =  ` + "'" + matchTypeName + "' "
-		mappingCygxDetai, err := cygx.GetCygxReportMappingCygxDetailByNameAndChartPermissionId(matchTypeName, chartPermissionId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取失败,Err:" + err.Error()
-			return
-		}
-		if mappingCygxDetai == nil {
-			resp := new(cygx.GetReportArticleListRep)
-			resp.List = make([]*cygx.CygxReportArticle, 0)
-			page := paging.GetPaging(currentIndex, pageSize, 0)
-			resp.Paging = page
-			br.Ret = 200
-			br.Success = true
-			br.Msg = "获取成功"
-			br.Data = resp
-			return
-		}
+		//mappingCygxDetai, err := cygx.GetCygxReportMappingCygxDetailByNameAndChartPermissionId(matchTypeName, chartPermissionId)
+		//if err != nil && err.Error() != utils.ErrNoRow() {
+		//	br.Msg = "获取失败"
+		//	br.ErrMsg = "获取失败,Err:" + err.Error()
+		//	return
+		//}
+		//if mappingCygxDetai == nil {
+		//	resp := new(cygx.GetReportArticleListRep)
+		//	resp.List = make([]*cygx.CygxReportArticle, 0)
+		//	page := paging.GetPaging(currentIndex, pageSize, 0)
+		//	resp.Paging = page
+		//	br.Ret = 200
+		//	br.Success = true
+		//	br.Msg = "获取成功"
+		//	br.Data = resp
+		//	return
+		//}
 		//这里量不大,走一下子查询
-		condition += ` 	AND art.category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(mappingCygxDetai.Id) + ` )  `
+		//condition += ` 	AND art.category_id IN ( SELECT category_id_celue FROM cygx_report_mapping_group WHERE id_cygx = ` + strconv.Itoa(mappingCygxDetai.Id) + ` )  `
+		condition += ` 	AND art.category_id IN ( SELECT category_id FROM cygx_report_mapping WHERE match_type_name = ` + "'" + matchTypeName + "'" + ` )  `
 	}
 	// 报告标签
 	if reportLabel != "" {

+ 57 - 1
controllers/cygx/summary_manage.go

@@ -688,7 +688,7 @@ func (this *SummaryManage) SummaryManageList() {
 		return
 	}
 	condition += ` GROUP BY art.article_id `
-	condition += ` ORDER BY art.publish_date DESC `
+	condition += ` ORDER BY  art.top_time DESC , art.publish_date DESC `
 	list, errList := cygx.GetSummaryManageList(condition, pars, startSize, pageSize)
 	if errList != nil {
 		br.Msg = "获取失败"
@@ -1645,3 +1645,59 @@ func (this *SummaryManage) VisibleRange() {
 	br.Msg = "操作成功"
 	br.IsAddLog = true
 }
+
+// @Title 文章的置顶与取消置顶
+// @Description 活动的发布与取消发布接口
+// @Param	request	body cygx.ActivityIdRep true "type json string"
+// @Success 200 操作成功
+// @router /summaryManage/top_change [post]
+func (this *SummaryManage) TopeChange() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	AdminUser := this.SysUser
+
+	if AdminUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	var req cygx.SummaryManageIdRep
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	articleId := req.ArticleId
+
+	articleInfo, errInfo := cygx.GetArticleInfoOtherByArticleId(articleId)
+	if articleInfo == nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "纪要ID错误"
+		return
+	}
+	if errInfo != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
+		return
+	}
+	var topTime int
+	//如果有置顶时间就设为取消置顶,如果没有就写入当前置顶时间
+	if articleInfo.TopTime == 0 {
+		topTime = int(time.Now().Unix())
+	}
+	err = cygx.UpdateArticleTopTime(articleId, topTime)
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+	br.IsAddLog = true
+}

+ 657 - 2
controllers/statistic_company_merge.go

@@ -11,6 +11,9 @@ import (
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"os"
 	"path/filepath"
+	"strconv"
+	"strings"
+
 	//"hongze/hz_crm_api/services"
 	"hongze/hz_crm_api/utils"
 	//"strings"
@@ -204,7 +207,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
 		pars1 := pars
 		condition1 += ` AND a.start_date >= ? AND a.start_date <= ?  `
 		pars1 = append(pars1, startDate, endDate)
-		condition1 += ` AND a.contract_type = ? `
+		condition1 += ` AND a.rai_contract_type = ? `
 		pars1 = append(pars1, "新签合同")
 		newCompanyTotal, err = company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
 		if err != nil && err.Error() != utils.ErrNoRow() {
@@ -240,7 +243,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
 		pars1 := pars
 		condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
 		pars1 = append(pars1, startDate, endDate)
-		condition1 += ` AND a.contract_type = ? `
+		condition1 += ` AND a.rai_contract_type = ? `
 		pars1 = append(pars1, "续约合同")
 		////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
 		//pars1 = append(pars1, endDate)
@@ -1195,3 +1198,655 @@ func PermissionCompanyListListExport(this *StatisticCompanyMergerController, dat
 	br.Success = true
 	br.Msg = "导出成功"
 }
+
+// @Title 权益客户续约率统计
+// @Description 权益客户续约率统计接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   ContractDataType   query   string  false       "合同类型,枚举值:`续约合同`,`到期合同`"
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company/company_contract_percentage/list [get]
+func (this *StatisticCompanyMergerController) CompanyContractPercentageList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	adminId := this.GetString("AdminId")
+	contractDataType := this.GetString("ContractDataType")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	initendDate := this.GetString("EndDate")
+	if startDate == "" || endDate == "" {
+		br.Msg = "开始时间或结束时间不能为空"
+		return
+	}
+
+	//如果传的查询方式是今年,那么就以当前时间作为截止时间
+	//if endDate == strconv.Itoa(time.Now().Year())+"-12-31" {
+	//	endDate = time.Now().Format(utils.FormatDate)
+	//}
+
+	//判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
+	endDateTime, _ := time.Parse(utils.FormatDate, endDate)
+	if endDateTime.After(time.Now()) {
+		endDate = time.Now().Format(utils.FormatDate)
+	}
+	//fmt.Println("endDate", endDate)
+	if contractDataType == "" {
+		contractDataType = "续约合同"
+	}
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var pars []interface{}
+
+	//条件
+	if adminId != "" {
+		condition += ` AND c.seller_id in  (` + adminId + `) `
+	} else {
+		//根据当前角色来获取查询条件
+		condition, pars = getQueryParams(condition, pars, sysUser, "c.")
+	}
+
+	//权益有效合同
+	condition += ` AND c.product_id = 2   AND  a.status = 1 `
+
+	var list []*models.IncrementalList
+	var renewalRateMoney string        //合同金额续约率
+	var renewalRateMoneyContent string //合同金额续约率详情
+	var renewalRateTotal string        //合同数量续约率
+	var renewalRateTotalContent string //合同数量续约率详情
+	var renewalContractTotal int       //续约合同数量
+	var renewalContractMoney int       //续约合同数量
+	var expireRenewalContractTotal int //到期合同数量
+	var expireRenewalContractMoney int //到期合同数量
+	var dataTotal int                  //分页数据
+
+	conditionRenewal := condition // 续约合同查询条件查询条件
+	parsRenewal := pars
+	conditionRenewal += ` AND a.start_date >= ? AND a.start_date <= ? `
+	parsRenewal = append(parsRenewal, startDate, endDate)
+	conditionRenewal += ` AND a.rai_contract_type = ? `
+	parsRenewal = append(parsRenewal, "续约合同")
+	totalRenewal, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewal, parsRenewal)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyRenewal, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewal, parsRenewal)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	//续约合同查询条件查询条件 end
+
+	conditionRenewalEnd := condition // 今年结束的续约合同查询条件
+	parsRenewalEnd := pars
+	conditionRenewalEnd += ` AND a.end_date >= ? AND a.end_date <= ? `
+	parsRenewalEnd = append(parsRenewalEnd, startDate, endDate)
+	conditionRenewalEnd += ` AND a.rai_contract_type = ? `
+	parsRenewalEnd = append(parsRenewalEnd, "续约合同")
+	totalRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewalEnd, parsRenewalEnd)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewalEnd, parsRenewalEnd)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	} // 今年结束的续约合同查询条件end
+
+	conditionNew := condition // 新签合同查询条件
+	parsNew := pars
+	conditionNew += ` AND a.end_date >= ? AND a.end_date <= ? `
+	parsNew = append(parsNew, startDate, endDate)
+	conditionNew += ` AND a.rai_contract_type = ? `
+	parsNew = append(parsNew, "新签合同")
+	totalNew, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionNew, parsNew)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyNew, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionNew, parsNew)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	} // 新签合同查询条件 end
+
+	//分子或者分母为零的时候,不做计算
+	if totalRenewal == 0 || totalNew+totalRenewalEnd == 0 {
+		renewalRateMoney = "0%"
+		renewalRateTotal = "0%"
+	} else {
+		renewalRateMoney = fmt.Sprint(utils.SubFloatToString(float64(totalMoneyRenewal)/float64(totalMoneyNew+totalMoneyRenewalEnd)*100, 2), "%")
+		renewalRateTotal = fmt.Sprint(utils.SubFloatToString(float64(totalRenewal)/float64(totalNew+totalRenewalEnd)*100, 2), "%")
+	}
+	renewalRateTotalContent = fmt.Sprint(int(totalMoneyRenewal), "/", int(totalMoneyNew+totalMoneyRenewalEnd))
+	renewalRateMoneyContent = fmt.Sprint(totalRenewal, "份/", totalNew+totalRenewalEnd, "份")
+
+	if contractDataType == "续约合同" {
+		condition1 := condition
+		pars1 := pars
+		condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
+		pars1 = append(pars1, startDate, endDate)
+		condition1 += ` AND a.rai_contract_type = ? `
+		pars1 = append(pars1, "续约合同")
+
+		total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+
+		renewalContractTotal = total
+		renewalContractMoney = int(totalMoney)
+
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeList(condition1, pars1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = total
+	}
+
+	if contractDataType == "到期合同" {
+		condition1 := condition
+		pars1 := pars
+
+		//判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。并且当前这天的到期的合同,不查询
+		endDateTime, _ := time.Parse(utils.FormatDate, initendDate)
+		if endDateTime.After(time.Now()) {
+			endDate = time.Now().Format(utils.FormatDate)
+			condition1 += ` AND a.end_date >= ? AND a.end_date < ? `
+		} else {
+			condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
+		}
+
+		//condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
+		pars1 = append(pars1, startDate, endDate)
+
+		total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		expireRenewalContractTotal = total
+		expireRenewalContractMoney = int(totalMoney)
+
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeListEnd(condition1, pars1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = total
+	}
+
+	listLen := len(list)
+	if listLen == 0 {
+		list = make([]*models.IncrementalList, 0)
+	}
+	var companyContractIds []int
+	for i := 0; i < listLen; i++ {
+		item := list[i]
+		companyContractIds = append(companyContractIds, item.CompanyContractId)
+	}
+
+	//合并合同所对应的权限
+	mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range list {
+		v.PermissionName = mappermissionName[v.CompanyContractId]
+	}
+	page := paging.GetPaging(currentIndex, pageSize, dataTotal)
+	resp := response.IncrementalCompanyPercentageListResp{
+		Paging:                     page,
+		RenewalContractTotal:       renewalContractTotal,
+		RenewalContractMoney:       renewalContractMoney,
+		ExpireRenewalContractTotal: expireRenewalContractTotal,
+		ExpireRenewalContractMoney: expireRenewalContractMoney,
+		RenewalRateMoney:           renewalRateMoney,
+		RenewalRateMoneyContent:    renewalRateMoneyContent,
+		RenewalRateTotal:           renewalRateTotal,
+		RenewalRateTotalContent:    renewalRateTotalContent,
+		List:                       list,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 权益客户续约率统计所能查询的年份
+// @Description权益客户续约率统计所能查询的年份接口
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company/get_year_list [get]
+func (this *StatisticCompanyMergerController) GetYearList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	thisYear := time.Now().Year()
+	startYear := 2022 //初始查询年份
+
+	resp := new(company.SearchYearListResp)
+	var yearList []int
+	for i := startYear; i <= thisYear; i++ {
+		yearList = append(yearList, i)
+	}
+	resp.List = yearList
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 权益客户续约率统计
+// @Description 权益客户续约率统计接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   AdminId   query   string  true       "销售id,多个用英文逗号隔开,空字符串为全部"
+// @Param   StartDate   query   string  false       "开始日期"
+// @Param   EndDate   query   string  false       "结束日期"
+// @Param   ContractDataType   query   string  false       "合同类型,枚举值:`续约合同`,`到期合同`"
+// @Success 200 {object} response.IncrementalCompanyListResp
+// @router /merge_company/company_contract_percentage/listV2 [get]
+func (this *StatisticCompanyMergerController) CompanyContractPercentageListV2() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	adminId := this.GetString("AdminId")
+	contractDataType := this.GetString("ContractDataType")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	//initendDate := this.GetString("EndDate")
+	if startDate == "" || endDate == "" {
+		br.Msg = "开始时间或结束时间不能为空"
+		return
+	}
+
+	//如果传的查询方式是今年,那么就以当前时间作为截止时间
+	//if endDate == strconv.Itoa(time.Now().Year())+"-12-31" {
+	//	endDate = time.Now().Format(utils.FormatDate)
+	//}
+
+	//判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。
+	endDateTime, _ := time.Parse(utils.FormatDate, endDate)
+	if endDateTime.After(time.Now()) {
+		endDate = time.Now().Format(utils.FormatDate)
+	}
+	//fmt.Println("endDate", endDate)
+	if contractDataType == "" {
+		contractDataType = "续约合同"
+	}
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = utils.StartIndex(currentIndex, pageSize)
+
+	var condition string
+	var pars []interface{}
+
+	//条件
+	if adminId != "" {
+		condition += ` AND c.seller_id in  (` + adminId + `) `
+	} else {
+		//根据当前角色来获取查询条件
+		condition, pars = getQueryParams(condition, pars, sysUser, "c.")
+	}
+
+	//权益有效合同
+	condition += ` AND c.product_id = 2   AND  a.status = 1 `
+
+	var list []*models.IncrementalList
+	var renewalRateMoney string        //合同金额续约率
+	var renewalRateMoneyContent string //合同金额续约率详情
+	var renewalRateTotal string        //合同数量续约率
+	var renewalRateTotalContent string //合同数量续约率详情
+	var renewalContractTotal int       //续约合同数量
+	var renewalContractMoney int       //续约合同数量
+	var expireRenewalContractTotal int //到期合同数量
+	var expireRenewalContractMoney int //到期合同数量
+	var dataTotal int                  //分页数据
+
+	//conditionRenewal := condition // 续约合同查询条件查询条件
+	//parsRenewal := pars
+	//conditionRenewal += ` AND a.start_date >= ? AND a.start_date <= ? `
+	//conditionRenewal += ` AND a.end_date >= ? AND a.end_date <= ? `
+	//parsRenewal = append(parsRenewal, startDate, endDate)
+	////conditionRenewal += ` AND a.rai_contract_type = ? `
+	////parsRenewal = append(parsRenewal, "续约合同")
+	//
+	//conditionRenewal += ` AND  a.company_ascribe_id  > 0 AND  a.company_ascribe_id  !=9   ` // 已确认未续约
+
+	//totalRenewal, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewal, parsRenewal)
+	//if err != nil {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//}
+	//
+	//totalMoneyRenewal, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewal, parsRenewal)
+	//if err != nil {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//}
+	//续约合同查询条件查询条件 end
+
+	//conditionRenewalEnd := condition // 今年结束的续约合同查询条件
+	//parsRenewalEnd := pars
+	//
+	////startDateTime, _ := time.Parse(utils.FormatDate, endDate)
+	////startDateTime = startDateTime.AddDate(-1, 0, 2) //合同开始时间,与查询的结束时间,之间相差的天数大于  365天。
+	////fmt.Println("startDateTime", startDateTime)
+	//conditionRenewalEnd += ` AND a.end_date >= ? AND a.end_date <= ?    `
+	//parsRenewalEnd = append(parsRenewalEnd, startDate, endDate)
+	//conditionRenewalEnd += ` AND a.rai_contract_type = ? `
+	//parsRenewalEnd = append(parsRenewalEnd, "续约合同")
+	//
+	//totalRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionRenewalEnd, parsRenewalEnd)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//}
+	////return
+	//totalMoneyRenewalEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionRenewalEnd, parsRenewalEnd)
+	//if err != nil {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//} // 今年结束的续约合同查询条件end
+	//
+	//conditionNew := condition // 新签合同查询条件
+	//parsNew := pars
+	//conditionNew += ` AND a.end_date >= ? AND a.end_date <= ?   `
+	//parsNew = append(parsNew, startDate, endDate)
+	//conditionNew += ` AND a.rai_contract_type = ? `
+	//parsNew = append(parsNew, "新签合同")
+	//totalNew, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionNew, parsNew)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//}
+	//totalMoneyNew, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionNew, parsNew)
+	//if err != nil {
+	//	br.Msg = "获取失败"
+	//	br.ErrMsg = "获取失败,Err:" + err.Error()
+	//	return
+	//} // 新签合同查询条件 end
+
+	//fmt.Println("totalNew", totalNew)
+	//fmt.Println("totalRenewalEnd", totalRenewalEnd)
+
+	condition1 := condition
+	pars1 := pars
+	//condition1 += ` AND a.start_date >= ? AND a.start_date <= ? `
+	condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
+	pars1 = append(pars1, startDate, endDate)
+	//condition1 += ` AND a.rai_contract_type = ? `
+	//pars1 = append(pars1, "续约合同")
+	condition1 += ` AND  a.company_ascribe_id  > 0 AND  a.company_ascribe_id  !=9   ` // 已确认未续约
+
+	totalNo, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoney, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(condition1, pars1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	renewalContractTotal = totalNo
+	renewalContractMoney = int(totalMoney)
+	if contractDataType == "续约合同" || contractDataType == "确认不续约合同" {
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeListEnd(condition1, pars1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = totalNo
+	}
+
+	conditionEnd1 := condition
+	parsEnd1 := pars
+
+	//判断结束时间是否晚于当前时间,如果晚于当前时间,那么就把当前时间作为截止时间。并且当前这天的到期的合同,不查询
+	//endDateTime, _ := time.Parse(utils.FormatDate, initendDate)
+	//if endDateTime.After(time.Now()) {
+	//	endDate = time.Now().Format(utils.FormatDate)
+	//	condition1 += ` AND a.end_date >= ? AND a.end_date < ? `
+	//} else {
+	//	condition1 += ` AND a.end_date >= ? AND a.end_date <= ? `
+	//}
+
+	conditionEnd1 += ` AND a.end_date >= ? AND a.end_date <= ?  AND  a.company_ascribe_id  !=9   `
+	parsEnd1 = append(parsEnd1, startDate, endDate)
+
+	//condition1 += ` AND a.start_date  < ?   `
+	//pars1 = append(pars1, startDateTime)
+
+	totalEnd, err := company.GetIncrementalRenewalCompanyProductMergeCount(conditionEnd1, parsEnd1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	totalMoneyEnd, err := company.GetIncrementalRenewalCompanyProductMergeSumMoney(conditionEnd1, parsEnd1)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	expireRenewalContractTotal = totalEnd
+	expireRenewalContractMoney = int(totalMoneyEnd)
+	if contractDataType == "到期合同" {
+		//列表页数据
+		tmpList, err := models.GetIncrementalCompanyMergeListEnd(conditionEnd1, parsEnd1, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		list = tmpList
+		dataTotal = totalEnd
+	}
+
+	//分子或者分母为零的时候,不做计算
+	if totalNo == 0 || totalEnd == 0 {
+		renewalRateMoney = "0%"
+		renewalRateTotal = "0%"
+	} else {
+		renewalRateMoney = fmt.Sprint(utils.SubFloatToString(float64(totalMoney)/float64(totalMoneyEnd)*100, 2), "%")
+		renewalRateTotal = fmt.Sprint(utils.SubFloatToString(float64(totalNo)/float64(totalEnd)*100, 2), "%")
+	}
+	renewalRateTotalContent = fmt.Sprint(int(totalMoney), "/", int(totalMoneyEnd))
+	renewalRateMoneyContent = fmt.Sprint(totalNo, "份/", totalEnd, "份")
+
+	listLen := len(list)
+	if listLen == 0 {
+		list = make([]*models.IncrementalList, 0)
+	}
+	var companyContractIds []int
+	for i := 0; i < listLen; i++ {
+		item := list[i]
+		companyContractIds = append(companyContractIds, item.CompanyContractId)
+	}
+
+	//合同归因标签
+	mapGetCompanyAscribeContent, mapContent := services.GetCompanyContractAscribeContentMap(companyContractIds)
+
+	//合并合同所对应的权限
+	mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(companyContractIds)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for _, v := range list {
+		v.PermissionName = mappermissionName[v.CompanyContractId]
+		if mapGetCompanyAscribeContent[v.CompanyContractId] != "" {
+			v.Content = mapContent[v.CompanyContractId]
+			v.AscribeContent = mapGetCompanyAscribeContent[v.CompanyContractId]
+			v.IsShowNoRenewedNote = true
+		}
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, dataTotal)
+	resp := response.IncrementalCompanyPercentageListResp{
+		Paging:                     page,
+		RenewalContractTotal:       renewalContractTotal,
+		RenewalContractMoney:       renewalContractMoney,
+		ExpireRenewalContractTotal: expireRenewalContractTotal,
+		ExpireRenewalContractMoney: expireRenewalContractMoney,
+		RenewalRateMoney:           renewalRateMoney,
+		RenewalRateMoneyContent:    renewalRateMoneyContent,
+		RenewalRateTotal:           renewalRateTotal,
+		RenewalRateTotalContent:    renewalRateTotalContent,
+		List:                       list,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+func init213() {
+	var condition string
+	var pars []interface{}
+
+	condition = " AND  rai_contract_type  = '续约合同'  AND  product_id = 2 "
+
+	var companyContractIds []string
+	companyContractList, e := company.GetCompanyContractList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		fmt.Println(e)
+		return
+	}
+	for _, v := range companyContractList {
+		fmt.Println(v.CompanyContractId)
+		startDateTime, _ := time.Parse(utils.FormatDate, v.StartDate)
+		startDateTime = startDateTime.AddDate(-1, 0, 0)
+		totalLastYear, err := company.GetCompanyContractCountRaiByLastYear(v.CompanyId, startDateTime.Format(utils.FormatDate))
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		if totalLastYear > 0 {
+			companyContractIds = append(companyContractIds, strconv.Itoa(v.CompanyContractId))
+		}
+	}
+	fmt.Println("companyContractIds", len(companyContractIds))
+
+	fmt.Println(strings.Join(companyContractIds, ","))
+	err := company.UpdateCompanyContractRaiContractTypeInit(strings.Join(companyContractIds, ","))
+	fmt.Println(err)
+	return
+}
+
+func init323() {
+	var conditionConfirm string
+	var parsConfirm []interface{}
+
+	companyConfirmList, err := company.GetCompanyContractNoRenewedAscribeList(conditionConfirm, parsConfirm, 0, 0)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		fmt.Println(err)
+		return
+	}
+
+	for _, v := range companyConfirmList {
+		err = company.UpdateCompanyContractCompanyAscribeId(v.CompanyAscribeId, v.CompanyContractId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			fmt.Println(err)
+			return
+		}
+	}
+}

+ 1 - 1
controllers/statistic_report.go

@@ -5769,7 +5769,7 @@ func (this *StatisticReportController) InvoicePaymentList() {
 		}
 		cond += ` AND (c.seller_id IN (` + strings.Join(sellerIdsList, ",") + `) OR d.seller_id IN (` + strings.Join(sellerIdsList, ",") + `))`
 	} else if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN {
-		cond += ` AND (c.seller_id=? OR d.seller_id=? )`
+		cond += ` AND (c.seller_id=? OR d.seller_id=?)`
 		pars = append(pars, sysUser.AdminId, sysUser.AdminId)
 	}
 

+ 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
+}

+ 2 - 0
models/company/company.go

@@ -362,6 +362,8 @@ as sort_todo_end_time,
             b.freeze_time,b.freeze_reason,b.renewal_reason,
 			b.view_total,
 			b.last_view_time,
+			a.share_seller,
+			a.share_seller_id,
 			MAX(b.last_view_time) as max_last_view_time,
 			MIN(b.last_view_time) as min_last_view_time,
 			MAX(b.end_date) as max_end_date,

+ 25 - 1
models/company/company_contract.go

@@ -26,6 +26,7 @@ type CompanyContract struct {
 	Source            string    `description:"合同来源,枚举值:上传附件、系统合同,默认上传附件"`
 	PackageType       int       `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
 	RaiPackageType    int       `description:"权益套餐类型: 0-无; 1-70w大套餐; 2-45w大套餐"`
+	RaiContractType   string    `description:"权益合同类型:枚举值:'新签合同','续约合同','补充协议'"`
 }
 
 // 新增客户合同
@@ -259,7 +260,7 @@ func UpdateCompanyContractPermissionMulti(items []*CompanyContractPermission) (e
 		}
 	}()
 
-	//批量修改公司剩余点数
+	//批量修改
 	p, err := o.Raw("UPDATE company_contract_permission SET permission_name = ? ,contract_type = ? WHERE id = ?").Prepare()
 	if err != nil {
 		return
@@ -302,6 +303,29 @@ func GetLastContractListByEndDate(companyId, productId int, endDate string) (ite
 	o := orm.NewOrm()
 	sql := "SELECT * FROM company_contract where company_id = ? AND product_id= ? end_date < ? AND status = 1 ORDER BY end_date desc"
 	err = o.Raw(sql, companyId, productId, endDate).QueryRow(&item)
+	return
+}
+
+// 获取权益近一年是否有新签合同
+func GetCompanyContractCountRaiByLastYear(companyId int, startDate string) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) AS total FROM company_contract AS a WHERE  product_id = 2  AND   rai_contract_type = '新签合同'  AND  company_id = ?  AND start_date > ? `
+	err = o.Raw(sql, companyId, startDate).QueryRow(&count)
+	return
+}
 
+// UpdateCompanyContractRaiContractType  更新某些合同权益的标识,为新签合同
+func UpdateCompanyContractRaiContractTypeInit(companyContractId string) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract SET rai_contract_type = '新签合同'  WHERE company_contract_id IN  (` + companyContractId + `) `
+	_, err = o.Raw(sql).Exec()
+	return
+}
+
+// UpdateCompanyContractCompanyAscribeId 更改权益未续约归因
+func UpdateCompanyContractCompanyAscribeId(companyAscribId, companyContractId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract SET company_ascribe_id = ?  WHERE company_contract_id=? `
+	_, err = o.Raw(sql, companyAscribId, companyContractId).Exec()
 	return
 }

+ 24 - 0
models/company/company_contract_merge.go

@@ -94,3 +94,27 @@ func GetIncrementalNewCompanyProductPermissionCount(condition string, pars []int
 	err = o.Raw(sql, pars).QueryRow(&total)
 	return
 }
+
+// GetIncrementalRenewalCompanyProductMergeSumMoney 对于签约的合同金额进行求和运算
+func GetIncrementalRenewalCompanyProductMergeSumMoney(condition string, pars []interface{}) (total float64, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			SUM( a.money ) AS total 
+		FROM
+			company_contract a
+			JOIN company b ON a.company_id = b.company_id
+			JOIN company_product c ON a.company_id = c.company_id 
+			AND a.product_id = c.product_id 
+		WHERE
+			1 = 1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&total)
+	return
+}
+
+// 权益客户统计,续约率搜索自然年的年份,返回类
+type SearchYearListResp struct {
+	List []int
+}

+ 8 - 0
models/company/company_contract_no_renewed_ascribe.go

@@ -80,6 +80,10 @@ func AddCompanyContractNoRenewedAscribe(item *CompanyContractNoRenewedAscribe, i
 	}
 
 	_, err = to.Insert(itemLog)
+
+	//修改未续约归因
+	sql := `UPDATE company_contract SET company_ascribe_id = ?  WHERE company_contract_id=? `
+	_, err = to.Raw(sql, item.CompanyAscribeId, item.CompanyContractId).Exec()
 	return
 }
 
@@ -113,6 +117,10 @@ func UpdateCompanyContractNoRenewedAscribe(item *CompanyContractNoRenewedAscribe
 		return
 	}
 	_, err = to.Insert(itemLog)
+
+	//修改未续约归因
+	sql := `UPDATE company_contract SET company_ascribe_id = ?  WHERE company_contract_id=? `
+	_, err = to.Raw(sql, item.CompanyAscribeId, item.CompanyContractId).Exec()
 	return
 }
 

+ 2 - 2
models/company/company_user.go

@@ -140,8 +140,8 @@ func GetCompanyUserListV2(condition string, pars []interface{}, companyId, start
 	if condition != "" {
 		sql += condition
 	}
-	//sql += ` group by a.user_id ORDER BY a.is_register desc,a.report_last_view_time desc,a.last_updated_time DESC LIMIT ?,? `
-	sql += ` group by a.user_id ORDER BY CASE WHEN is_follow = 1 AND (report_last_view_time < NOW()  - INTERVAL 7 DAY or report_last_view_time is NULL ) THEN 0 ELSE 1 END,a.is_register desc,a.report_last_view_time ASC,a.last_updated_time  ASC LIMIT ?,? `
+	sql += ` group by a.user_id ORDER BY CASE WHEN is_follow = 1 AND (report_last_view_time < NOW()  - INTERVAL 7 DAY or report_last_view_time is NULL ) THEN 0 ELSE 1 END,a.report_last_view_time desc,a.last_updated_time DESC LIMIT ?,? `
+	//sql += ` group by a.user_id ORDER BY CASE WHEN is_follow = 1 AND (report_last_view_time < NOW()  - INTERVAL 7 DAY or report_last_view_time is NULL ) THEN 0 ELSE 1 END,a.is_register desc,a.report_last_view_time ASC,a.last_updated_time  ASC LIMIT ?,? `
 	_, err = o.Raw(sql, companyId, pars, startSize, pageSize).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
+}

+ 12 - 2
models/cygx/cygx_morning_meeting_review_chapter.go

@@ -18,6 +18,9 @@ type CygxMorningMeetingReviewChapter struct {
 	IndustrialSubjectIds string    `json:"industrialSubjectId"` // 标的id
 	MeetingId            int64     `json:"meetingId"`           // 主表id
 	Content              string    `json:"content"`             // 内容
+	Title                string    `json:"title"`               // 标题
+	ReportLink           string    `json:"reportLink"`          // 报告链接
+	LinkArticleId        int       `json:"linkArticleId"`       // 报告ID链接
 }
 
 type AddMorningMeetingReviewItem struct {
@@ -28,6 +31,8 @@ type AddMorningMeetingReviewItem struct {
 	IndustryId           int
 	IndustryName         string
 	IndustrialSubjectIds string
+	ReportLink           string `description:"报告链接"`
+	Title                string `description:"标题"`
 }
 
 type AddMorningMeetingReviewsReq struct {
@@ -82,6 +87,8 @@ type CygxMorningMeetingReviewChapterRespItem struct {
 	IndustrialSubjectList []*IndustrialSubjectItem `json:"industrialSubjectList"` // 标的list
 	MeetingId             int64                    `json:"meetingId"`             // 主表id
 	Content               string                   `json:"content"`               // 内容
+	Title                 string                   `json:"title"`                 // 标题
+	ReportLink            string                   `json:"reportLink"`            // 报告链接
 }
 
 type CygxMorningMeetingReviewChapterResp struct {
@@ -110,10 +117,13 @@ func UpdateCygxMorningMeetingReviewChapter(item *CygxMorningMeetingReviewChapter
 			  chart_permission_id = ?,
 			  chart_permission_name = ?,
 			  industrial_subject_ids = ?,
-			  content = ? 
+			  content = ?,
+			  report_link = ?,
+			  link_article_id = ?,
+			  title = ?
 			WHERE id = ? `
 	_, err = o.Raw(sql, item.MeetingTime, item.ModifyTime, item.IndustryId, item.IndustryName,
-		item.ChartPermissionId, item.ChartPermissionName, item.IndustrialSubjectIds, item.Content, item.Id).Exec()
+		item.ChartPermissionId, item.ChartPermissionName, item.IndustrialSubjectIds, item.Content, item.ReportLink, item.LinkArticleId, item.Title, item.Id).Exec()
 
 	return
 }

+ 22 - 2
models/cygx/cygx_user_company.go

@@ -186,6 +186,9 @@ func GetActivityMeetByCompanyWeekly(condition string, startSize, pageSize int) (
 			r.meeting_type_str,
 			r.meeting_authentication,
 			r.meeting_status_str,
+			r.company_name,
+			r.company_id,
+			r.real_name,
 			r.duration
 		FROM
 			cygx_activity_signup_detail AS r
@@ -288,7 +291,9 @@ func GetCygxArticleCollectByCompanyWeekly(startSize, pageSize int, condition str
 			r.create_time,
 			r.mobile,
 			r.real_name,
-			re.match_type_name,
+			re.match_type_name,	
+			r.company_name,
+			r.company_id,
 			(
 			SELECT
 				GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) 
@@ -371,6 +376,8 @@ func GetCygxIndustryFllowByCompanyWeekly(condition string, startSize, pageSize i
 			m.industry_name,
 			r.mobile,
 			r.real_name,
+			r.company_name,
+			r.company_id,
 			r.modify_time as create_time,
 			( SELECT GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR '/' ) FROM cygx_industrial_subject AS s WHERE s.industrial_management_id = m.industrial_management_id ) AS subject_name_str 
 		FROM
@@ -448,6 +455,8 @@ func GetCygArticleDepartmentFollowByCompanyWeekly(condition string, startSize, p
 			m.department_id,
 			a.title,
 			a.article_id,
+			r.company_name,
+			r.company_id,
 			( SELECT MAX( create_time ) FROM cygx_article_department_follow WHERE user_id = r.user_id ) AS max_time
 		FROM
 			cygx_article_department_follow AS r
@@ -511,6 +520,8 @@ func GetCygxSearchKeyWordByCompanyWeekly(condition string, startSize, pageSize i
 			r.key_word,
 			r.create_time,
 			r.mobile,
+			r.company_name,
+			r.company_id,
 			r.real_name
 		FROM
 			cygx_search_key_word as r
@@ -596,9 +607,12 @@ func CygxActivitySpecialTripByCompanyWeekly(condition string, startSize, pageSiz
 			r.mobile,
 			r.activity_id,
 			r.real_name,
+			r.company_name,
+			r.seller_name,
+			r.company_id,
 			r.is_meeting 
 		FROM
-			cygx_activity_special_meeting_detail AS r
+			cygx_activity_special_trip AS r
 			INNER JOIN cygx_activity_special AS a ON a.activity_id = r.activity_id
 			INNER JOIN %s.user_seller_relation AS us ON us.user_id = r.user_id   AND us.product_id = 2 
 			WHERE 1= 1   AND a.publish_status = 1  `
@@ -723,6 +737,8 @@ func GetCygxRoadshowByCompanyWeekly(condition string, startSize, pageSize int) (
 			r.create_time,
 			r.real_name,
 			r.mobile,
+			r.company_name,
+			r.company_id,
 			"逻辑解析" AS file_type 
 		FROM
 			cygx_micro_roadshow_video_history AS r
@@ -735,6 +751,8 @@ func GetCygxRoadshowByCompanyWeekly(condition string, startSize, pageSize int) (
 			r.create_time,
 			r.real_name,
 			r.mobile,
+			r.company_name,
+			r.company_id,
 			"路演回放" AS file_type 
 		FROM
 			cygx_activity_video_history AS r
@@ -747,6 +765,8 @@ func GetCygxRoadshowByCompanyWeekly(condition string, startSize, pageSize int) (
 			r.create_time,
 			r.real_name,
 			r.mobile,
+			r.company_name,
+			r.company_id,
 			"路演回放" AS file_type 
 		FROM
 			cygx_activity_voice_history AS r

+ 1 - 1
models/cygx/report_article.go

@@ -98,7 +98,7 @@ func GetReportArticleList(condition string, pars []interface{}, startSize, pageS
 				art.article_id_md5,
 				re.chart_permission_name,
 				re.match_type_name,
-				ret.sub_category_name,
+				art.sub_category_name,
 				re.chart_permission_id
 			FROM
 				cygx_article AS art

+ 11 - 1
models/cygx/summary_manage.go

@@ -136,6 +136,7 @@ type CygxArticleResp struct {
 	AdminName          string    `description:"销售/管理员姓名"`
 	Annotation         string    `description:"核心观点"`
 	VisibleRange       int       `description:"设置可见范围1全部,0内部"`
+	TopTime            int       `description:"置顶时间"`
 }
 
 type GetSummaryManageListRep struct {
@@ -293,6 +294,7 @@ type CygxArticleList struct {
 	ArticleTypeId   int    `description:"文章类型ID"`
 	ArticleTypeName string `description:"文章类型名称"`
 	VisibleRange    int    `description:"设置可见范围1全部,0内部"`
+	TopTime         int    `description:"置顶时间"`
 }
 
 // 列表
@@ -304,7 +306,7 @@ func GetSummaryManageList(condition string, pars []interface{}, startSize, pageS
 		(SELECT COUNT(1) FROM cygx_article_comment AS k    WHERE k.article_id=art.article_id) AS comment_num,
 		(SELECT COUNT(1) FROM cygx_article_collect AS c   WHERE c.article_id = art.article_id ) AS collection_num,
 		(SELECT GROUP_CONCAT(DISTINCT s.subject_name  SEPARATOR '/')  FROM cygx_industrial_subject as s  WHERE s.industrial_management_id = m.industrial_management_id) AS subject_name ,
-		art.title ,art.category_name ,art.publish_date ,art.id,art.last_updated_time,art.publish_status,art.abstract,art.body,art.article_id_md5 ,art.article_id,dm.nick_name , art.department_id,m.industry_name,art.article_type_id,art.article_type_name,art.visible_range
+		art.title ,art.category_name ,art.publish_date ,art.id,art.last_updated_time,art.publish_status,art.abstract,art.body,art.article_id_md5 ,art.article_id,dm.nick_name , art.department_id,m.industry_name,art.article_type_id,art.article_type_name,art.visible_range,art.top_time
 		FROM cygx_article as art 
 		LEFT JOIN cygx_article_department as dm ON dm.department_id = art.department_id
 		LEFT JOIN cygx_industrial_article_group_management as mg ON mg.article_id = art.article_id 
@@ -582,3 +584,11 @@ GROUP BY
 	_, err = o.Raw(sql).QueryRows(&list)
 	return
 }
+
+// 更新文章置顶时间
+func UpdateArticleTopTime(activityId, topTime int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ` UPDATE cygx_article SET  top_time=? WHERE article_id=?`
+	_, err = o.Raw(sql, topTime, activityId).Exec()
+	return
+}

+ 1 - 1
models/cygx/tag_history.go

@@ -219,7 +219,7 @@ func GetCygxTagHistoryListBycondition(condition string, startSize, pageSize int)
 // 获取列表
 func GetCygxTagHistoryListByconditionWeekly(condition string, startSize, pageSize int) (list []*UserInteraction, err error) {
 	databaseName := utils.GetWeeklyDatabase()
-	sql := ` SELECT r.real_name,r.mobile,r.company_name, r.create_time AS create_time,
+	sql := ` SELECT r.real_name,r.mobile,r.company_name, r.create_time AS create_time,	r.company_name,r.company_id,
 				b.tag_id,b.tag_name,b.article_types,b.activity_types,b.industries,b.subject_names
 				FROM cygx_tag_history as r 
 				INNER JOIN cygx_tag AS b ON r.tag_id = b.tag_id

+ 1 - 0
models/db.go

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

+ 14 - 0
models/response/statistic_report.go

@@ -129,3 +129,17 @@ type RenewReasonItemResp struct {
 type CompanyPreviousDetailResp struct {
 	Detail *models.IncrementalList
 }
+
+// 权益客户统计,续约率,返回类
+type IncrementalCompanyPercentageListResp struct {
+	Paging                     *paging.PagingItem `description:"分页数据"`
+	List                       []*models.IncrementalList
+	RenewalRateMoney           string `description:"合同金额续约率"`
+	RenewalRateMoneyContent    string `description:"合同金额续约率详情"`
+	RenewalRateTotal           string `description:"合同数量续约率"`
+	RenewalRateTotalContent    string `description:"合同数量续约率详情"`
+	RenewalContractTotal       int    `description:"续约合同数量"`
+	RenewalContractMoney       int    `description:"续约合同总金额"`
+	ExpireRenewalContractTotal int    `description:"到期合同数量"`
+	ExpireRenewalContractMoney int    `description:"到期合同总金额"`
+}

+ 17 - 12
models/statistic_report.go

@@ -861,7 +861,23 @@ func GetIncrementalCompanyMergeList(condition string, pars []interface{}, startS
 	if condition != "" {
 		sql += condition
 	}
-	sql += ` group by a.company_contract_id  order by start_date desc,company_id desc limit ?,?`
+	sql += ` group by a.company_contract_id  order by a.start_date desc,a.company_id desc limit ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// GetIncrementalNewCompanyList 获取到期合同列表数据(根据合同来展示)
+func GetIncrementalCompanyMergeListEnd(condition string, pars []interface{}, startSize, pageSize int) (items []*IncrementalList, err error) {
+	o := orm.NewOrm()
+
+	sql := `SELECT a.*,b.region_type,c.seller_id,c.seller_name,b.company_name,c.renewal_reason FROM company_contract a
+		 JOIN company b ON a.company_id = b.company_id
+		 JOIN company_product c ON a.company_id = c.company_id and a.product_id=c.product_id WHERE 1 = 1 `
+
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` group by a.company_contract_id  order by a.end_date desc,a.company_id desc limit ?,?`
 	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
@@ -870,17 +886,6 @@ func GetIncrementalCompanyMergeList(condition string, pars []interface{}, startS
 func GetIncrementalCompanyListByOperationRecordMerge(condition string, pars []interface{}, startSize, pageSize int) (items []*IncrementalList, err error) {
 	o := orm.NewOrm()
 
-	////查询出最大id
-	//sql1 := `SELECT max(id) id FROM company_operation_record a
-	//	RIGHT JOIN company b ON a.company_id = b.company_id
-	//	JOIN company_product c ON b.company_id = c.company_id
-	//	AND a.product_id = c.product_id
-	//WHERE 1 = 1 `
-	//if condition != "" {
-	//	sql1 += condition
-	//}
-	//sql1 += ` GROUP BY a.company_id, a.product_id `
-
 	//查询真正的数据
 	sql := `SELECT a.company_contract_id,a.contract_type ,a.company_product_id ,a.contract_code ,a.pay_method ,a.pay_channel ,a.package_difference ,a.company_id, a.start_date, a.end_date, a.money, b.company_name, c.seller_id, c.seller_name, a.product_id, a.product_name, a.create_time, b.region_type, c.renewal_reason, c.renewal_todo, c.status FROM company_contract a
 		RIGHT JOIN company b ON a.company_id = b.company_id

+ 45 - 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",
@@ -2698,6 +2707,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:SummaryManage"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:SummaryManage"],
+        beego.ControllerComments{
+            Method: "TopeChange",
+            Router: `/summaryManage/top_change`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:SummaryManage"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/cygx:SummaryManage"],
         beego.ControllerComments{
             Method: "VisibleRange",
@@ -10375,6 +10393,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
+        beego.ControllerComments{
+            Method: "CompanyContractPercentageList",
+            Router: `/merge_company/company_contract_percentage/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
+        beego.ControllerComments{
+            Method: "CompanyContractPercentageListV2",
+            Router: `/merge_company/company_contract_percentage/listV2`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
         beego.ControllerComments{
             Method: "CompanyContractPermissionList",
@@ -10384,6 +10420,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
+        beego.ControllerComments{
+            Method: "GetYearList",
+            Router: `/merge_company/get_year_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticCompanyMergerController"],
         beego.ControllerComments{
             Method: "MergeCompanyList",

+ 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)

+ 29 - 0
services/cygx/activity_meet.go

@@ -7,6 +7,7 @@ import (
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
+	"strconv"
 )
 
 // 获取线上活动到会更新时间
@@ -438,3 +439,31 @@ func AddctivitySignupDetailListByAdminSignup(activityIdsStr string) (err error)
 
 	return err
 }
+
+func init77777() {
+	var condition string
+	var pars []interface{}
+
+	listAct, errList := cygx.GetActivityListAll(condition+"AND active_state = 3 AND activity_id > 3000  AND publish_status = 1 ", pars, 0, 9999)
+	if errList != nil {
+		fmt.Println(errList)
+		return
+	}
+
+	fmt.Println(len(listAct))
+
+	for _, v := range listAct {
+		condition = ` AND a.activity_id  = ` + strconv.Itoa(v.ActivityId)
+		//pars = append(pars)
+		list, e := cygx.GetCygxActivityAttendanceDetailList(condition, pars, 0, 999)
+		if e != nil {
+			fmt.Println(e)
+			return
+		}
+
+		fmt.Println("ActivityId", v.ActivityId, "list", len(list))
+
+		AddctivitySignupDetailListByHand(list, v.ActivityId)
+	}
+
+}

+ 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  = ?   OR chart_permission_id = 0 )   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  = ?   OR chart_permission_id = 0 )  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  = ?   OR chart_permission_id = 0 )   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)
+
+}

+ 4 - 1
services/cygx/resource_data.go

@@ -529,7 +529,10 @@ func UpdateProductInteriorResourceData(sourceId int) {
 		item.Source = source
 		item.SearchTag = mapMatchTypeName[detail.MatchTypeId]
 		item.PublishDate = publishDate
-		item.ChartPermissionId = detail.ChartPermissionId
+		if item.SearchTag != "观点周递" {
+			item.ChartPermissionId = detail.ChartPermissionId //首页筛选任何行业时,无法筛选出【观点周递】类型的报告
+		}
+
 		item.CreateTime = time.Now()
 		item.SearchTitle = detail.Title
 		item.SearchContent = detail.Abstract + industrialName + subjectName

+ 2 - 0
services/statistic_report/company.go

@@ -555,6 +555,8 @@ func CompanyList(sysUser *system.Admin, req statisticModels.IncrementalCompanyLi
 				Deadline:        tmpDeadline,
 				IsShow:          isShow,
 				TryStageSlice:   tryStageSlice,
+				ShareSellerId:   v.ShareSellerId,
+				ShareSeller:     v.ShareSeller,
 			}
 			if strings.Contains(companyList.ApproveStatus, "已审批") {
 				companyList.ApproveStatus = ""

+ 2 - 0
services/statistic_report/reponse.go

@@ -148,6 +148,8 @@ type CompanyListItem struct {
 	TryStageSlice    []company.TryStageSliceItem `description:"试用状态相关"`
 	FiccTryOutDay    int                         `description:"Ficc总试用天数"`
 	RaiTryOutDay     int                         `description:"权益总试用天数"`
+	ShareSellerId    int                         `description:"分配的咨询组销售ID"`
+	ShareSeller      string                      `description:"分配的咨询组销售名称"`
 }
 
 // CompanyRenewRecordResp 总统计信息

+ 11 - 10
utils/constants.go

@@ -92,16 +92,17 @@ const (
 
 // 客户状态
 const (
-	COMPANY_STATUS_TRY_OUT       = "试用"
-	COMPANY_STATUS_FOREVER       = "永续"
-	COMPANY_STATUS_FREEZE        = "冻结"
-	COMPANY_STATUS_LOSE          = "流失"
-	COMPANY_STATUS_LOSE_FLAG     = "loss"
-	COMPANY_STATUS_FORMAL        = "正式"
-	COMPANY_STATUS_POTENTIAL     = "潜在"
-	COMPANY_STATUS_CLOSE         = "关闭"
-	COMPANY_STATUS_CLOSE_FLAG    = "close"
-	COMPANY_STATUS_TRY_OUT_COUNT = 60
+	COMPANY_STATUS_TRY_OUT         = "试用"
+	COMPANY_STATUS_X_CLASS_TRY_OUT = "X类试用" //最早定义为永续
+	COMPANY_STATUS_FOREVER         = "永续"
+	COMPANY_STATUS_FREEZE          = "冻结"
+	COMPANY_STATUS_LOSE            = "流失"
+	COMPANY_STATUS_LOSE_FLAG       = "loss"
+	COMPANY_STATUS_FORMAL          = "正式"
+	COMPANY_STATUS_POTENTIAL       = "潜在"
+	COMPANY_STATUS_CLOSE           = "关闭"
+	COMPANY_STATUS_CLOSE_FLAG      = "close"
+	COMPANY_STATUS_TRY_OUT_COUNT   = 60
 
 	COMPANY_APPROVE_STATUS = "待审批"
 )