Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hz_crm_api into crm/crm_14.7

xingzai 1 year ago
parent
commit
652301ec2f

+ 47 - 4
controllers/company_share.go

@@ -175,7 +175,39 @@ func (this *CompanyController) CompanyShareList() {
 				condition += ` AND b.product_id=? `
 				pars = append(pars, productId)
 			}
-			if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.AdminId != 66 && sysUser.AdminId != 15 {
+
+			if sysUser.Authority == 2 && roleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
+				groupIdStr, sellerIdStr, err := services.GetFiccChildGroupIdsByGroupIds(sysUser.GroupId)
+				if err != nil {
+					br.Msg = "获取销售分组信息失败!"
+					br.ErrMsg = "获取销售分组信息失败!Err:" + err.Error()
+					return
+				}
+				if sysUser.GroupId == groupId {
+					if sellerIdStr != "" {
+						condition += ` AND a.share_seller_id IN (` + sellerIdStr + `) `
+					}
+				} else {
+					if groupIdStr != "" {
+						condition += ` AND b.group_id IN (` + groupIdStr + `) `
+					}
+				}
+			} else if sysUser.Authority == 4 || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
+				if sysUser.GroupId == groupId {
+					sellerIdStr, err := services.GetFiccSellerIdsByGroupId(sysUser.GroupId)
+					if err != nil {
+						br.Msg = "获取销售分组信息失败!"
+						br.ErrMsg = "获取销售分组信息失败!Err:" + err.Error()
+						return
+					}
+					if sellerIdStr != "" {
+						condition += ` AND a.share_seller_id IN (` + sellerIdStr + `) `
+					}
+				} else {
+					condition += ` AND b.group_id=? `
+					pars = append(pars, sysUser.GroupId)
+				}
+			} else if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && sysUser.AdminId != 66 && sysUser.AdminId != 15 && roleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN && roleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
 				if sysUser.GroupId == groupId {
 					condition += ` AND a.share_seller_id=? `
 					pars = append(pars, sysUser.AdminId)
@@ -192,8 +224,10 @@ func (this *CompanyController) CompanyShareList() {
 			//非咨询组销售,那么默认查看“未共享”的客户
 			if sysUser.GroupId != groupId {
 				listParam = 3
-				condition += ` AND b.seller_id = ? `
-				pars = append(pars, sysUser.AdminId)
+				if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER {
+					condition += ` AND b.seller_id = ? `
+					pars = append(pars, sysUser.AdminId)
+				}
 			} else {
 				condition += ` AND a.is_share=1 `
 			}
@@ -471,7 +505,7 @@ func (this *CompanyController) CompanyShareList() {
 			//btnItem = services.GetCompanyPermissionButtonByReceiveEnabled(btnItem, receiveEnabled)
 
 			// 13.6正式客户共享按钮显示控制
-			btnItem = services.GetShareCompanyPermissionButton(roleTypeCode, itemStatus, item.ProductId)
+			btnItem = services.GetShareCompanyPermissionButton(roleTypeCode, itemStatus, item.ProductId, item, sysUser)
 		}
 		list[i].BtnItem = btnItem
 
@@ -528,6 +562,15 @@ func (this *CompanyController) CompanyShareList() {
 			tmpStatus := v.Status
 			if v.IsShare == 1 {
 				tmpStatus = v.Status + "(共享)"
+			} else {
+				if v.BtnItem.BtnModifySeller == true {
+					v.BtnItem.BtnModifySeller = false
+				}
+			}
+
+			if v.IsShare == 1 && v.BtnItem.BtnModifySeller == true {
+				//如果已经是共享客户了,取消共享按钮全都显示,和修改销售权限一样
+				v.BtnItem.BtnShare = true
 			}
 
 			companyList := &company.CompanyListItem{

+ 154 - 96
controllers/cygx/activity_special_trip.go

@@ -63,7 +63,7 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 		uids += strconv.Itoa(v.UserId) + ","
 	}
 	uids = strings.TrimRight(uids, ",")
-	for i, v := range uidList {
+	for _, v := range uidList {
 		uid := v.UserId
 		wxUser, userErr := models.GetWxUserByUserId(uid)
 		if userErr != nil {
@@ -115,107 +115,138 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 					return
 				}
 			}
-			total, errtotal := cygx.GetActivitySpecialTripCount(uid, activityId)
-			if errtotal != nil {
-				br.Msg = "获取失败"
-				br.ErrMsg = "获取失败,Err:" + errtotal.Error()
-				return
-			}
+			//total, errtotal := cygx.GetActivitySpecialTripCount(uid, activityId)
+			//if errtotal != nil {
+			//	br.Msg = "获取失败"
+			//	br.ErrMsg = "获取失败,Err:" + errtotal.Error()
+			//	return
+			//}
 			infoUser, err := cygx.GetUserAndCompanyNameList(uid)
 			if err != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取数据失败,Err:" + err.Error()
 				return
 			}
-			if total == 0 {
-				totalAll, err := cygx.GetUserActivitySpecialTripCount(uid, activityId)
+			//if total == 0 {
+			totalAll, err := cygx.GetUserActivitySpecialTripCount(uid, activityId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+				return
+			}
+			//流水记录表
+			itemBill := new(cygx.CygxActivitySpecialTripBill)
+			itemBill.UserId = infoUser.UserId
+			itemBill.ActivityId = activityInfo.ActivityId
+			itemBill.CreateTime = time.Now()
+			itemBill.Mobile = infoUser.Mobile
+			itemBill.Email = infoUser.Email
+			itemBill.CompanyId = infoUser.CompanyId
+			itemBill.CompanyName = infoUser.CompanyName
+			itemBill.RealName = infoUser.RealName
+			itemBill.Source = 2
+			itemBill.DoType = 1
+			itemBill.BillDetailed = -1 // 流水减一
+			itemBill.RegisterPlatform = 3
+			itemBill.ChartPermissionId = activityInfo.ChartPermissionId
+			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
+			itemBill.AdminId = AdminUser.AdminId
+
+			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+				//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+				maxChartPermissionId, maxChartPermissionName, err := cygxService.GetSpecialBillMaxChartPermissionId(infoUser)
 				if err != nil {
-					br.Msg = "获取信息失败"
-					br.ErrMsg = "获取日程数量信息失败,Err:" + err.Error()
+					br.Msg = "操作失败"
+					br.ErrMsg = "获取销售信息失败,GetSpecialBillMaxChartPermissionId Err:" + err.Error()
 					return
 				}
-				//流水记录表
-				itemBill := new(cygx.CygxActivitySpecialTripBill)
-				itemBill.UserId = infoUser.UserId
-				itemBill.ActivityId = activityInfo.ActivityId
-				itemBill.CreateTime = time.Now()
-				itemBill.Mobile = infoUser.Mobile
-				itemBill.Email = infoUser.Email
-				itemBill.CompanyId = infoUser.CompanyId
-				itemBill.CompanyName = infoUser.CompanyName
-				itemBill.RealName = infoUser.RealName
-				itemBill.Source = 2
-				itemBill.DoType = 1
-				itemBill.BillDetailed = -1 // 流水减一
-				itemBill.RegisterPlatform = 1
-				itemBill.ChartPermissionId = activityInfo.ChartPermissionId
-				itemBill.ChartPermissionName = activityInfo.ChartPermissionName
-				itemBill.AdminId = AdminUser.AdminId
+				itemBill.ChartPermissionId = maxChartPermissionId
+				itemBill.ChartPermissionName = maxChartPermissionName
+			}
 
-				if totalAll == 0 {
-					item := new(cygx.CygxActivitySpecialTrip)
-					item.UserId = infoUser.UserId
-					item.RealName = infoUser.RealName
-					item.SellerName = infoUser.SellerName
-					item.ActivityId = activityId
-					item.CreateTime = time.Now()
-					item.Mobile = infoUser.Mobile
-					item.Email = infoUser.Email
-					item.Email = infoUser.Email
-					item.CompanyId = infoUser.CompanyId
-					item.CompanyName = infoUser.CompanyName
-					item.AdminId = AdminUser.AdminId
-					item.Source = 2
-					//优先绑定用户修改过的外呼手机号
-					if infoUser.OutboundMobile != "" {
-						item.OutboundMobile = infoUser.OutboundMobile
-						if infoUser.OutboundCountryCode == "" {
-							item.CountryCode = "86"
-						} else {
-							item.CountryCode = infoUser.OutboundCountryCode
-						}
+			if totalAll == 0 {
+				item := new(cygx.CygxActivitySpecialTrip)
+				item.UserId = infoUser.UserId
+				item.RealName = infoUser.RealName
+				item.SellerName = infoUser.SellerName
+				item.ActivityId = activityId
+				item.CreateTime = time.Now()
+				item.Mobile = infoUser.Mobile
+				item.Email = infoUser.Email
+				item.CompanyId = infoUser.CompanyId
+				item.CompanyName = infoUser.CompanyName
+				item.AdminId = AdminUser.AdminId
+				item.Source = 2
+				//优先绑定用户修改过的外呼手机号
+				if infoUser.OutboundMobile != "" {
+					item.OutboundMobile = infoUser.OutboundMobile
+					if infoUser.OutboundCountryCode == "" {
+						item.CountryCode = "86"
 					} else {
-						item.OutboundMobile = infoUser.Mobile
-						if infoUser.CountryCode == "" {
-							item.CountryCode = "86"
-						} else {
-							item.CountryCode = infoUser.CountryCode
-						}
+						item.CountryCode = infoUser.OutboundCountryCode
 					}
-					items = append(items, item)
 				} else {
-					err = cygx.UpdateSpecialTrip(1, 0, uid, activityId)
-					if err != nil {
-						br.Msg = "报名失败,"
-						br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
-						return
-					}
-					resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
-					//48小时之内的取消也扣除一次参会记录
-					if time.Now().Add(+time.Hour * 48).After(resultTime) {
-						itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
+					item.OutboundMobile = infoUser.Mobile
+					if infoUser.CountryCode == "" {
+						item.CountryCode = "86"
+					} else {
+						item.CountryCode = infoUser.CountryCode
 					}
 				}
-				userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+				items = append(items, item)
+				err = cygxService.DeductTripRemainingtimesByUser(infoUser, activityInfo) //扣除用户专项调研剩余次数
 				if err != nil {
-					br.Msg = "获取专项调研剩余次数失败"
-					br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+					br.Msg = "操作失败"
+					br.ErrMsg = "操作失败,Err:" + err.Error()
 					return
 				}
-				if userType == 2 {
-					tripRemaining = tripRemaining + itemBill.BillDetailed - i
-					itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			} else {
+				err = cygx.UpdateSpecialTrip(1, 0, uid, activityId)
+				if err != nil {
+					br.Msg = "报名失败,"
+					br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
+					return
+				}
+				resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
+				//48小时之内的取消也扣除一次参会记录
+				if time.Now().Add(+time.Hour * 48).After(resultTime) {
+					itemBill.BillDetailed = 0 //48小时之内,取消报名之后二次报名,不扣除流水记录
 				} else {
-					for k, num := range mapChartName {
-						if activityInfo.ChartPermissionName == k {
-							num = num + itemBill.BillDetailed - i
-						}
-						itemBill.Total += k + strconv.Itoa(num) + "次+"
+					err = cygxService.DeductTripRemainingtimesByUser(infoUser, activityInfo) //扣除用户专项调研剩余次数
+					if err != nil {
+						br.Msg = "操作失败"
+						br.ErrMsg = "操作失败,Err:" + err.Error()
+						return
 					}
-					itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 				}
-				itemsBill = append(itemsBill, itemBill)
 			}
+			//userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+			//if err != nil {
+			//	br.Msg = "获取专项调研剩余次数失败"
+			//	br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+			//	return
+			//}
+			//if userType == 2 {
+			//	tripRemaining = tripRemaining + itemBill.BillDetailed - i
+			//	itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+			//} else {
+			//	for k, num := range mapChartName {
+			//		if activityInfo.ChartPermissionName == k {
+			//			num = num + itemBill.BillDetailed - i
+			//		}
+			//		itemBill.Total += k + strconv.Itoa(num) + "次+"
+			//	}
+			//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+			//}
+			totalText, err := cygxService.HandleActivitySpecialTripBillTotalText(infoUser)
+			if err != nil {
+				br.Msg = "报名失败,"
+				br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
+				return
+			}
+			itemBill.Total = totalText
+			itemsBill = append(itemsBill, itemBill)
+			//}
 
 			var itemMeeting = new(cygx.CygxActivitySpecialMeetingDetail)
 			itemMeeting.UserId = v.UserId
@@ -531,16 +562,36 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 	itemBill.Source = 2
 	itemBill.DoType = 2
 	itemBill.BillDetailed = 1 // 流水加一
-	itemBill.RegisterPlatform = 1
+	itemBill.RegisterPlatform = 3
 	itemBill.ChartPermissionId = activityInfo.ChartPermissionId
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	itemBill.AdminId = sysUser.AdminId
+
+	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+		//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+		lastTripBill, err := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, userId)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取销售信息失败,GetCygxActivitySpecialTripBillLastDetialByActivityId Err:" + err.Error()
+			return
+		}
+		itemBill.ChartPermissionId = lastTripBill.ChartPermissionId
+		itemBill.ChartPermissionName = lastTripBill.ChartPermissionName
+	}
+
 	resultTime := utils.StrTimeToTime(activityInfo.ActivityTime)
 	//48小时之内的取消也扣除一次参会记录
 	var isValid int
 	if time.Now().Add(+time.Hour * 48).After(resultTime) {
 		isValid = 1
 		itemBill.BillDetailed = 0 // 48小时之内取消的,照样扣点,流水不进行加一
+	} else {
+		err = cygxService.RebateTripRemainingtimesByUser(infoUser, activityInfo) // 返点
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "操作失败,RebateTripRemainingtimesByUserErr:" + err.Error()
+			return
+		}
 	}
 	err = cygx.ActivitySpecialTripCancel(isValid, activityId, userId)
 	if err != nil {
@@ -548,24 +599,31 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 		br.ErrMsg = "修改失败 Err:" + err.Error()
 		return
 	}
-	userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+	//userType, tripRemaining, mapChartName, err := cygxService.GetChartPermissionSpecialSurplusByCompany(infoUser.CompanyId)
+	//if err != nil {
+	//	br.Msg = "获取专项调研剩余次数失败"
+	//	br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+	//	return
+	//}
+	//if userType == 2 {
+	//	tripRemaining += itemBill.BillDetailed
+	//	itemBill.Total = strconv.Itoa(tripRemaining) + "次"
+	//} else {
+	//	for k, num := range mapChartName {
+	//		if activityInfo.ChartPermissionName == k {
+	//			num += itemBill.BillDetailed
+	//		}
+	//		itemBill.Total += k + strconv.Itoa(num) + "次+"
+	//	}
+	//	itemBill.Total = strings.TrimRight(itemBill.Total, "+")
+	//}
+	totalText, err := cygxService.HandleActivitySpecialTripBillTotalText(infoUser)
 	if err != nil {
-		br.Msg = "获取专项调研剩余次数失败"
-		br.ErrMsg = "获取专项调研剩余次数失败,err:" + err.Error()
+		br.Msg = "报名失败,"
+		br.ErrMsg = "二次报名,更改报名是否有效状态失败,Err:" + err.Error()
 		return
 	}
-	if userType == 2 {
-		tripRemaining += itemBill.BillDetailed
-		itemBill.Total = strconv.Itoa(tripRemaining) + "次"
-	} else {
-		for k, num := range mapChartName {
-			if activityInfo.ChartPermissionName == k {
-				num += itemBill.BillDetailed
-			}
-			itemBill.Total += k + strconv.Itoa(num) + "次+"
-		}
-		itemBill.Total = strings.TrimRight(itemBill.Total, "+")
-	}
+	itemBill.Total = totalText
 	err = cygx.AddCygxActivitySpecialTripBill(itemBill)
 	if err != nil {
 		br.Msg = "修改失败"

+ 29 - 0
controllers/cygx/industrial_management.go

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

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

+ 120 - 1
controllers/statistic_report.go

@@ -5755,7 +5755,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)
 	}
 
@@ -6357,3 +6357,122 @@ func (this *StatisticReportController) UnusualRenewCompanyStatistics() {
 	br.Msg = "获取成功"
 	br.Data = companyRenewRecordResp
 }
+
+// UnusualRenewCompanyList
+// @Title 获取未续约的公司合同列表
+// @Description 合同套餐列表
+// @Param   ProductId  query  int  false  "套餐类型: 1-FICC(默认); 2-权益"
+// @Param   StartDate   query   string  true       "开始日期,格式:2022-04"
+// @Param   EndDate   query   string  true       "结束日期,格式:2022-04"
+// @Success 200 {object} company.GetUnusualRenewListGroupMonthResp
+// @router /report/unusual_renew_company/chart [get]
+func (this *StatisticReportController) UnusualRenewCompanyList() {
+	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
+	}
+	// 起始日期
+	// 截止日期
+	productId, _ := this.GetInt("ProductId", 1)
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+
+	if startDate == `` || endDate == `` {
+		br.Msg = "开始日期或结束日期不能为空"
+		return
+	}
+	allList := make([]*company.GetUnusualRenewListGroupMonth, 0)
+	resp := new(company.GetUnusualRenewListGroupMonthResp)
+	resp.List = allList
+	newStartDate := startDate + "-01"
+	newEndDate := endDate + "-01"
+
+	startDateTimer, _ := time.ParseInLocation(utils.FormatDate, newStartDate, time.Local)
+	endDateTimer, _ := time.ParseInLocation(utils.FormatDate, newEndDate, time.Local)
+	endDateTimer = endDateTimer.AddDate(0, 1, 0).Add(-1 * time.Second) //本月最后一天
+
+	// 按月分组
+	monthMap := make(map[string]int)
+	monthCompanyMap := make(map[string]struct{})
+	monthList := make([]string, 0)
+	tmpDate, _ := time.ParseInLocation(utils.FormatYearMonthDate, startDate, time.Local)
+	tmpEndDate, _ := time.ParseInLocation(utils.FormatYearMonthDate, endDate, time.Local)
+	for tmpDate.Before(tmpEndDate) || tmpDate == tmpEndDate {
+		monthMap[tmpDate.Format(utils.FormatYearMonthDate)] = 0
+		monthList = append(monthList, tmpDate.Format(utils.FormatYearMonthDate))
+		tmpDate = tmpDate.AddDate(0, 1, 0)
+
+	}
+	// 只查询咨询组销售下的客户
+	groupId := 0
+	if utils.RunMode == "release" {
+		groupId = 37
+	} else {
+		groupId = 61
+	}
+	subAdmins, err := system.GetAdminByGroupId(groupId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取销售失败"
+		br.ErrMsg = "获取销售失败,Err:" + err.Error()
+		return
+	}
+	if len(subAdmins) == 0 {
+		resp = &company.GetUnusualRenewListGroupMonthResp{
+			List: allList,
+		}
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+	subAdminIds := make([]string, 0)
+	for _, v := range subAdmins {
+		subAdminIds = append(subAdminIds, strconv.Itoa(v.AdminId))
+	}
+	shareSellerIds := strings.Join(subAdminIds, ",")
+
+	list, err := company.GetUnusualRenewList(startDateTimer, endDateTimer, productId, shareSellerIds)
+	if err != nil {
+		br.Msg = "数据异常"
+		br.ErrMsg = "数据异常,Err:" + err.Error()
+		return
+	}
+	if len(list) > 0 {
+		for _, v := range list {
+			t := v.ModifyTime.Format(utils.FormatYearMonthDate)
+			name := fmt.Sprintf("%s_%d", t, v.CompanyId)
+			if _, ok := monthCompanyMap[name]; !ok {
+				if num, ok1 := monthMap[t]; ok1 {
+					monthMap[t] = num + 1
+				}
+				monthCompanyMap[name] = struct{}{}
+			}
+		}
+	}
+
+	for _, v := range monthList {
+		n, _ := monthMap[v]
+		tmp := &company.GetUnusualRenewListGroupMonth{
+			Date:       v,
+			CompanyNum: n,
+		}
+		allList = append(allList, tmp)
+	}
+	resp = &company.GetUnusualRenewListGroupMonthResp{
+		List: allList,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

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

+ 35 - 1
models/company/company_renewal_record.go

@@ -44,7 +44,7 @@ WHERE
     AND a.source = 1 
 	AND a.product_id = ?
 GROUP BY
-	a.seller_id;
+	a.share_seller_id;
 `
 	_, err = o.Raw(sql, startDate, endDate, productId).QueryRows(&list)
 
@@ -67,3 +67,37 @@ func (item *CompanyRenewalRecord) Add() (err error) {
 
 	return
 }
+
+type GetUnusualRenewListGroupMonth struct {
+	Date       string
+	CompanyNum int
+}
+
+type GetUnusualRenewListGroupMonthResp struct {
+	List []*GetUnusualRenewListGroupMonth
+}
+
+// GetUnusualRenewList 获取未续约公司列表
+func GetUnusualRenewList(startDate, endDate time.Time, productId int, shareSellerIds string) (list []*CompanyRenewalRecord, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+	* 
+FROM
+	company_renewal_record 
+WHERE
+	source = 1 
+	AND modify_time BETWEEN ? 
+	AND ? 
+	AND product_id = ?
+	AND share_seller_id in (` + shareSellerIds + `)
+`
+	_, err = o.Raw(sql, startDate, endDate, productId).QueryRows(&list)
+
+	return
+}
+
+func (item *CompanyRenewalRecord) InsertMulti(items []*CompanyRenewalRecord) (err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}

+ 2 - 2
models/company/company_user.go

@@ -146,8 +146,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),
 		new(cygx.CygxUserYanxuanPermission),
 		new(cygx.CygxUserYanxuanPermissionLog),
 	)

+ 27 - 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",
@@ -10555,6 +10573,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"],
+        beego.ControllerComments{
+            Method: "UnusualRenewCompanyList",
+            Router: `/report/unusual_renew_company/chart`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers:StatisticReportController"],
         beego.ControllerComments{
             Method: "StackCompanyList",

+ 26 - 1
services/company.go

@@ -8,6 +8,7 @@ import (
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/company_user"
+	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
 	"strconv"
@@ -2349,7 +2350,7 @@ func FilterReadAndContractAuth(chartPermissions, contractPermissions, condition
 }
 
 // GetShareCompanyPermissionButton 正式客户共享-权限按钮(目前仅FICC有正式客户共享, 所以不管权益角色)
-func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId int) (button *company.ButtonPermission) {
+func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId int, item *company.CompanyItem, sysUser *system.Admin) (button *company.ButtonPermission) {
 	statusMap := make(map[int]string)
 	statusMap[productId] = statuses
 	if strings.Contains(statuses, "/") {
@@ -2357,6 +2358,26 @@ func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId in
 		statusMap[1] = statusArr[0]
 		statusMap[2] = statusArr[1]
 	}
+	//roleTypeCode, itemStatus, item.SellerIds, item.GroupIds, item.GroupId, sysUser.GroupId, item.SellerId, sysUser.AdminId, sysUser.Authority, item.ProductId, item.ShareSellerId
+
+	//所属销售map
+	sellerIdMap := make(map[int]string)
+	sellerIdMap[productId] = item.SellerIds
+	if strings.Contains(item.SellerIds, "/") {
+		sellerIdSlice := strings.Split(item.SellerIds, "/")
+		sellerIdMap[1] = sellerIdSlice[0]
+		sellerIdMap[2] = sellerIdSlice[1]
+	}
+
+	//分组map
+	groupIdMap := make(map[int]string)
+	groupIdMap[productId] = item.GroupIds
+
+	if strings.Contains(item.GroupIds, "/") {
+		groupIdSlice := strings.Split(item.GroupIds, "/")
+		groupIdMap[1] = groupIdSlice[0]
+		groupIdMap[2] = groupIdSlice[1]
+	}
 
 	// 查看权限均有
 	button = new(company.ButtonPermission)
@@ -2394,5 +2415,9 @@ func GetShareCompanyPermissionButton(roleTypeCode, statuses string, productId in
 		button.BtnRemarkView = true
 		button.BtnServiceRecord = true
 	}
+	companyButton := GetCompanyPermissionButton(roleTypeCode, statuses, item.SellerIds, item.GroupIds, item.GroupId, sysUser.GroupId, item.SellerId, sysUser.AdminId, sysUser.Authority, item.ProductId, item.ShareSellerId)
+	if companyButton.BtnShare == true {
+		button.BtnShare = true
+	}
 	return
 }

+ 22 - 21
services/company_apply/company_approval.go

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

+ 6 - 0
services/cygx/activity_power_check.go

@@ -538,6 +538,12 @@ func GetSpecialDetailUserPower(user *models.WxUser, activityInfo *cygx.ActivityS
 		err = errs
 		return
 	}
+	//如果有升级权限的自动添加策略的升级权限
+	if permissionStr != "" {
+		if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
+			permissionStr += "," + utils.CE_LUE_NAME
+		}
+	}
 	//如果没有对应的升级权限,则返回
 	if !strings.Contains(permissionShengji, activityInfo.ChartPermissionName) {
 		return

+ 313 - 62
services/cygx/activity_special.go

@@ -539,15 +539,32 @@ func GetChartPermissionSpecialSurplusByCompany(companyId int) (userType int, tri
 	return
 }
 
+//func init() {
+//	ActivitySpecialCompanyApproval(7030, 1259, "怀民大套餐客户")
+
+// //格式化合同开始时间
+// contractStartDate, tmpErr := time.Parse(utils.FormatDate, "2023-12-19")
+//
+//	if tmpErr != nil {
+//		fmt.Println(tmpErr)
+//		return
+//	}
+//
+//	if time.Now().After(contractStartDate) {
+//		fmt.Println("go")
+//	}
+//}
+
 // 审批通过的时候专项调研次数更新
-func ActivitySpecialCompanyApproval(companyId int, companyName string) (err error) {
+func ActivitySpecialCompanyApproval(companyId, companyContractId int, companyName string) (err error) {
 	userType, packageType, _, _, _ := GetUserType(companyId)
 	// 获取继承点数
 	//inheritList, e := cygx.GetCygxActivitySpecialInheritPointsByCompanyId(companyId)
 	//if e != nil && e.Error() != utils.ErrNoRow() {
 	//	err = errors.New("GetCygxActivitySpecialInheritPointsByCompanyId, Err: " + e.Error())
 	//}
-	chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
+	//chartNameMap := map[string]int{utils.YI_YAO_NAME: 0, utils.XIAO_FEI_NAME: 0, utils.KE_JI_NAME: 0, utils.ZHI_ZAO_NAME: 0}
+	var items []*cygx.CygxActivitySpecialPermissionPoints
 
 	itemBill := new(cygx.CygxActivitySpecialTripBill)
 	itemBill.CreateTime = time.Now()
@@ -559,17 +576,6 @@ func ActivitySpecialCompanyApproval(companyId int, companyName string) (err erro
 	if userType == 2 {
 		packageTypeMap := map[int]int{1: 16, 2: 10}
 		totalTrip := packageTypeMap[packageType]
-		//if len(inheritList) > 0 {
-		//	for _, v := range inheritList {
-		//		if v.ChartPermissionId == 0 {
-		//			itemBill.BillDetailed = totalTrip + v.Points
-		//		} else {
-		//			itemBill.BillDetailed = totalTrip
-		//		}
-		//	}
-		//} else {
-		//	itemBill.BillDetailed = totalTrip
-		//}
 		itemBill.BillDetailed = totalTrip
 		itemBill.Total = strconv.Itoa(itemBill.BillDetailed) + "次"
 		if totalTrip == 10 {
@@ -577,70 +583,104 @@ func ActivitySpecialCompanyApproval(companyId int, companyName string) (err erro
 		} else {
 			itemBill.Content = "70w大套餐转正"
 		}
+
+		//记录公司剩余点数
+		item := new(cygx.CygxActivitySpecialPermissionPoints)
+		item.Points = totalTrip
+		item.CompanyId = companyId
+		item.CompanyName = companyName
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		items = append(items, item)
+
 	} else {
-		list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
+		//list, e := company.GetCompanyReportPermissionByCompanyIdAndProductId(companyId, 2)
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
+		//}
+		//if len(list) == 0 {
+		//	return
+		//}
+
+		var condition string
+		var pars []interface{}
+		pars = make([]interface{}, 0)
+		condition = " AND  company_contract_id = ?  AND  is_upgrade = 1  "
+		pars = append(pars, companyContractId)
+		list, e := company.GetCompanyContractPermissionList(condition, pars) // 获取带有升级的权限
 		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = errors.New("GetCompanyReportPermissionUpgrade, Err: " + e.Error())
-		}
-		if len(list) == 0 {
+			err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
 			return
 		}
-		var chartPermissionIdSlice []string
-		mapChartName := make(map[string]int)
-		mapUpgradeId := make(map[int]int)
-		mapInheritChartName := make(map[string]int)
-		mapPermissionNameTrip := make(map[string]int)
-		//mapPermissionName := make(map[int]string)
-		for _, v := range list {
-			chartPermissionIdSlice = append(chartPermissionIdSlice, strconv.Itoa(v.ChartPermissionId))
-			//是升级套餐才有点数
-			if v.IsUpgrade == 1 {
-				mapUpgradeId[v.ChartPermissionId] = 1
-			}
-		}
-		chartList := make([]*models.ChartPermission, 0)
-		if len(chartPermissionIdSlice) > 0 {
-			chartList, e = models.GetChartPermissionByIds(chartPermissionIdSlice)
-			if e != nil {
-				err = errors.New("获取品种信息失败, Err:" + e.Error())
-				return
-			}
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxAllocationCompanyContractPermissionListById, Err: " + e.Error())
+			return
 		}
-		if len(chartList) == 0 {
+
+		if len(list) == 0 {
 			return
 		}
-		for _, v := range chartList {
-			//如果是升级则加点
-			if _, ok := mapUpgradeId[v.ChartPermissionId]; ok {
-				mapChartName[v.PermissionName] = 5 + mapPermissionNameTrip[v.ChartPermissionName]
-			} else {
-				mapChartName[v.PermissionName] = mapPermissionNameTrip[v.ChartPermissionName]
-			}
+
+		//获取权益主观权限
+		listRaiSubjectivity, e := models.GetChartPermissionListRaiSubjectivity()
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetChartPermissionListRaiSubjectivity, Err: " + e.Error())
 		}
-		// 通过继承获得的加点
-		//for _, v := range inheritList {
-		//	mapInheritChartName[v.ChartPermissionName] = v.Points
-		//}
-		for k, _ := range chartNameMap {
-			if _, ok := mapChartName[k]; ok {
-				if inherit, ok2 := mapInheritChartName[k]; ok2 {
-					mapChartName[k] += inherit
-				}
-			}
+		mapRaiSubjectivity := make(map[int]bool)
+		mapPermissionName := make(map[int]string)
+		for _, v := range listRaiSubjectivity {
+			mapRaiSubjectivity[v.ChartPermissionId] = true
+			mapPermissionName[v.ChartPermissionId] = v.ChartPermissionName
 		}
-		for k, v := range mapChartName {
-			if v > 0 {
-				itemBill.BillDetailed += v
-				itemBill.Total += k + strconv.Itoa(v) + "次+"
+		for _, v := range list {
+			//如果是升级则加点
+			if v.IsUpgrade == 1 && mapRaiSubjectivity[v.ChartPermissionId] {
+				item := new(cygx.CygxActivitySpecialPermissionPoints)
+				item.Points = 5
+				item.CompanyId = companyId
+				item.CompanyName = companyName
+				item.ChartPermissionId = v.ChartPermissionId
+				item.ChartPermissionName = mapPermissionName[v.ChartPermissionId]
+				item.CreateTime = time.Now()
+				item.ModifyTime = time.Now()
+				items = append(items, item)
 			}
 		}
 		itemBill.Content = "行业升级套餐转正"
-		itemBill.Total = strings.TrimRight(itemBill.Total, "+")
 	}
-	err = cygx.AddCygxActivitySpecialTripBill(itemBill)
-	if err != nil {
+
+	e := cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
+	if e != nil {
+		err = errors.New("MultiAddCygxActivitySpecialPermissionPoints, Err:" + e.Error())
 		return
 	}
+	if userType != 2 && len(items) > 0 {
+		var condition string
+		var pars []interface{}
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  chart_permission_id DESC  "
+		pars = append(pars, companyId)
+		activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+			return
+		}
+		var itemBillTotal []string
+		for _, v := range activitySpecialPermissionPointsList {
+			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次"))
+		}
+		itemBill.BillDetailed = 5 * len(items)
+		itemBill.Total = strings.Join(itemBillTotal, "+")
+	}
+
+	//如果有升级行业权限,或者大套餐客户就写入流水信息
+	if itemBill.Total != "" {
+		e := cygx.AddCygxActivitySpecialTripBill(itemBill)
+		if e != nil {
+			err = errors.New("AddCygxActivitySpecialTripBill, Err:" + e.Error())
+			return
+		}
+	}
 	return
 }
 
@@ -697,3 +737,214 @@ func GetSpecialSurplusByCompanyNew(companyId int) (specialSurplus string, err er
 	}
 	return
 }
+
+// GetSpecialBillMaxChartPermissionId  获取专项调研剩余点数最多的行业
+func GetSpecialBillMaxChartPermissionId(user *cygx.UserAndCompanyName) (maxChartPermissionId int, maxChartPermissionName string, err error) {
+	companyId := user.CompanyId
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		maxChartPermissionName = v.ChartPermissionName
+	}
+	return
+}
+
+// DeductTripRemainingtimesByUser 扣除用户专项调研剩余次数
+func DeductTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo *cygx.ActivitySpecialDetail) (err error) {
+	msgTemplate := "您的专项调研次数已用完,如仍想参加,请与您的对口销售商议"
+	companyId := user.CompanyId
+	chartPermissionName := activityInfo.ChartPermissionName
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?  AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME {
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   AND points  > 0   ORDER BY  points DESC LIMIT 1   "
+		pars = append(pars, companyId, activityInfo.ChartPermissionId)
+	}
+	activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+	//如果没有剩余的点数,就返回
+	if len(activitySpecialPermissionPointsList) == 0 {
+		err = errors.New(msgTemplate)
+		return
+	}
+	var maxChartPermissionId int // 剩余点数最多的行业
+	var points int               // 剩余点数
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		points = v.Points - 1
+	}
+	//更新对应行业剩余点数
+	e = cygx.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// RebateTripRemainingtimesByUser 返点用户专项调研剩余次数
+func RebateTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo *cygx.ActivitySpecialDetail) (err error) {
+	companyId := user.CompanyId
+	chartPermissionName := activityInfo.ChartPermissionName
+	var condition string
+	var pars []interface{}
+	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
+	pars = append(pars, companyId)
+
+	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME {
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?   LIMIT 1   "
+		pars = append(pars, companyId, activityInfo.ChartPermissionId)
+	} else {
+		lastTripBill, e := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, user.UserId)
+		if e != nil {
+			err = errors.New("GetActivitySpecialTripCountByActivitySpecial, Err: " + e.Error())
+			return
+		}
+
+		pars = make([]interface{}, 0)
+		condition = " AND  company_id  = ?  AND  chart_permission_id  = ?    LIMIT 1   "
+		pars = append(pars, companyId, lastTripBill.ChartPermissionId)
+	}
+	activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+
+	var maxChartPermissionId int // 剩余点数最多的行业(返点行业)
+	var points int               // 剩余点数
+	for _, v := range activitySpecialPermissionPointsList {
+		maxChartPermissionId = v.ChartPermissionId
+		points = v.Points + 1
+	}
+	//更新对应行业剩余点数
+	e = cygx.UpdateCygxActivitySpecialPermissionPoints(points, companyId, maxChartPermissionId)
+	if e != nil {
+		err = errors.New("UpdateCygxActivitySpecialPermissionPoints, Err:" + e.Error())
+		return
+	}
+	return
+}
+
+// 预处理专项调研流水明细表描述内容
+func HandleActivitySpecialTripBillTotalText(user *cygx.UserAndCompanyName) (totalText string, err error) {
+	companyId := user.CompanyId
+	companyDetail, e := cygx.GetCompanyDetailByIdGroup(companyId)
+	if e != nil {
+		err = errors.New("GetCompanyDetailByIdGroup, Err:" + e.Error())
+		return
+	}
+	//永续客户不限制次数
+	if companyDetail.Status == utils.COMPANY_STATUS_FOREVER {
+		totalText = "0次"
+		return
+	}
+	var condition string
+	var pars []interface{}
+	pars = make([]interface{}, 0)
+	condition = " AND  company_id  = ?  AND points  != 0   ORDER BY  chart_permission_id DESC  "
+	pars = append(pars, companyId)
+	activitySpecialPermissionPointsList, e := cygx.GetCygxActivitySpecialPermissionPointsList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCygxActivitySpecialPermissionPointsList, Err:" + e.Error())
+		return
+	}
+
+	var itemBillTotal []string
+	for _, v := range activitySpecialPermissionPointsList {
+		if v.ChartPermissionId > 0 {
+			itemBillTotal = append(itemBillTotal, fmt.Sprint(v.ChartPermissionName, v.Points, "次")) // 行业套餐客户展示规则
+		}
+		if v.ChartPermissionId == 0 {
+			totalText = fmt.Sprint(v.Points, "次") // 大套餐客户展示规则
+		}
+	}
+	if len(itemBillTotal) > 0 {
+		totalText = strings.Join(itemBillTotal, "+")
+	}
+	return
+}
+
+func initnee885() {
+	list, err := cygx.GetBestNewBillList()
+	if err != nil {
+		fmt.Println(err)
+	}
+	var items []*cygx.CygxActivitySpecialPermissionPoints
+	for _, v := range list {
+		fmt.Println(v.Total)
+		if v.Total == "" || v.Total == "0" || v.Total == "0次" {
+			continue
+		}
+		//智造5次+科技5次+消费5次+医药4次
+		sliceTotal := strings.Split(v.Total, "+")
+
+		for _, vs := range sliceTotal {
+			var points string
+			item := new(cygx.CygxActivitySpecialPermissionPoints)
+			if strings.Contains(vs, "医药") {
+				item.ChartPermissionName = "医药"
+				points := strings.Replace(vs, "医药", "", -1)
+				fmt.Println(points)
+				points = strings.Replace(points, "次", "", -1)
+				item.Points, _ = strconv.Atoi(points)
+				item.ChartPermissionId = 22
+			} else if strings.Contains(vs, "消费") {
+				item.ChartPermissionName = "消费"
+				points := strings.Replace(vs, "消费", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 21
+				item.Points, _ = strconv.Atoi(points)
+			} else if strings.Contains(vs, "科技") {
+				item.ChartPermissionName = "科技"
+				points := strings.Replace(vs, "科技", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 20
+				item.Points, _ = strconv.Atoi(points)
+			} else if strings.Contains(vs, "智造") {
+				item.ChartPermissionName = "智造"
+				points := strings.Replace(vs, "智造", "", -1)
+				points = strings.Replace(points, "次", "", -1)
+				item.ChartPermissionId = 19
+				item.Points, _ = strconv.Atoi(points)
+			} else {
+				points = strings.Replace(vs, "次", "", -1)
+				item.Points, _ = strconv.Atoi(points)
+			}
+			fmt.Println("points", points)
+			fmt.Println(vs)
+
+			item.CompanyId = v.CompanyId
+			item.CompanyName = v.CompanyName
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			fmt.Println(item)
+			items = append(items, item)
+		}
+
+	}
+
+	fmt.Println(len(items))
+	err = cygx.MultiAddCygxActivitySpecialPermissionPoints(items)
+	fmt.Println(err)
+
+}

+ 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

+ 3 - 2
services/statistic_report/unusual_renew_company.go

@@ -136,7 +136,8 @@ func getUnusualRenewSectionData(productId int, startDate, endDate time.Time, ch
 			if !ok {
 				tmp = 0
 			}
-			unusualRenewMap[v.ShareSellerId] = tmp + 1
+			companyIdSlice := strings.Split(v.CompanyIds, ",")
+			unusualRenewMap[v.ShareSellerId] = tmp + len(companyIdSlice)
 
 			// 客户id
 			tmpCompanyIdList2, ok := unusualRenewCompanyIdListMap[v.ShareSellerId]
@@ -145,7 +146,7 @@ func getUnusualRenewSectionData(productId int, startDate, endDate time.Time, ch
 			}
 			unusualRenewCompanyIdListMap[v.ShareSellerId] = append(tmpCompanyIdList2, fmt.Sprint(v.CompanyIds))
 
-			unusualRenewCompanyTotal++
+			unusualRenewCompanyTotal += len(companyIdSlice)
 		}
 
 		for sellerId, tmpCompanyIdList := range unusualRenewCompanyIdListMap {

+ 74 - 0
services/system.go

@@ -6,6 +6,8 @@ import (
 	"hongze/hz_crm_api/models/roadshow"
 	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -290,3 +292,75 @@ func CheckRaiAdmin(adminId int) (isRai bool, err error) {
 	}
 	return
 }
+
+func GetFiccChildGroupIdsByGroupIds(groupId int) (sid string, sellerIds string, err error) {
+	pid, err := company.GetParentIdFromGroup(groupId)
+	if err != nil {
+		return
+	}
+	var ids []*string
+	if pid != nil {
+		if *pid != 0 {
+			//销售主管放在三级列表中
+			ids, err = company.GetGroupIdsByParentId(*pid)
+			if err != nil {
+				fmt.Println(err.Error())
+				return
+			}
+		} else {
+			//销售主管放在二级列表中
+			ids, err = company.GetGroupIdsByParentId(groupId)
+			if err != nil {
+				fmt.Println(err.Error())
+				return
+			}
+		}
+	}
+	var idSlice []string
+	for _, id := range ids {
+		idSlice = append(idSlice, *id)
+	}
+	//加入父级groupId
+	if *pid > 0 {
+		idSlice = append(idSlice, strconv.Itoa(*pid))
+	} else {
+		idSlice = append(idSlice, strconv.Itoa(groupId))
+	}
+	sid = strings.Join(idSlice, ",")
+
+	//查询这些组内的所有seller_ids
+	if len(idSlice) > 0 {
+		admins, tErr := system.GetTeamSysUserListByIds(sid)
+		if tErr != nil {
+			err = tErr
+			fmt.Println(tErr.Error())
+			return
+		}
+		var sellerIdSlice []string
+		for _, v := range admins {
+			sellerIdSlice = append(sellerIdSlice, strconv.Itoa(v.AdminId))
+		}
+		sellerIds = strings.Join(sellerIdSlice, ",")
+	}
+
+	return
+}
+
+func GetFiccSellerIdsByGroupId(groupId int) (sellerIds string, err error) {
+	//查询这些组内的所有seller_ids
+	if groupId > 0 {
+		admins, tErr := system.GetAdminByGroupId(groupId)
+		if tErr != nil {
+			err = tErr
+			fmt.Println(tErr.Error())
+			return
+		}
+		var sellerIdSlice []string
+		for _, v := range admins {
+			sellerIdSlice = append(sellerIdSlice, strconv.Itoa(v.AdminId))
+		}
+		sellerIds = strings.Join(sellerIdSlice, ",")
+	}
+
+	return
+}

+ 88 - 1
services/task.go

@@ -2,8 +2,10 @@ package services
 
 import (
 	"fmt"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/eta_business"
 	"hongze/hz_crm_api/utils"
+	"time"
 )
 
 func Task() {
@@ -14,7 +16,7 @@ func Task() {
 	go AutoInsertAdminOperateRecordToDB()
 
 	//go FixEtaBusinessCodeEncrypt()
-
+	//InitContractUnusual()
 	fmt.Println("task end")
 }
 
@@ -35,3 +37,88 @@ func FixEtaBusinessCodeEncrypt() {
 		}
 	}
 }
+
+// InitContractUnusual 补全续约统计异常的客户
+func InitContractUnusual() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("initYearContractUnusual 补全未续约合同记录,Err:" + err.Error())
+			utils.FileLog.Info("initYearContractUnusual 补全未续约合同记录,Err:" + err.Error())
+		}
+	}()
+
+	addList := make([]*company.CompanyRenewalRecord, 0)
+	// 整理时间表
+	startDate, _ := time.ParseInLocation(utils.FormatDate, "2023-01-01", time.Local)
+	endDate, _ := time.ParseInLocation(utils.FormatDate, "2023-12-07", time.Local)
+	for startDate.Before(endDate) || startDate == endDate {
+		tmpC := ` AND end_date = ? AND status = 1 AND contract_type IN ( "新签合同", "续约合同" )  AND product_id = 1`
+		var tmpP []interface{}
+		before61 := startDate.AddDate(0, 0, -61)
+		tmpP = append(tmpP, before61)
+		contractList, e := company.GetCompanyContractList(tmpC, tmpP)
+		if e != nil {
+			err = fmt.Errorf("查询合同列表失败, ERR:%s", e)
+			return
+		}
+		if len(contractList) > 0 {
+			contractMap := make(map[int]*company.CompanyContractResp)
+			for _, v := range contractList {
+				//查询这个合同是否存在续约合同,起始日大于今日,或者截止日
+				contractMap[v.CompanyId] = v
+			}
+			ficcNormalMap := make(map[int]struct{})
+
+			tmpC = ` AND start_date >= ? AND start_date <= ? AND status = 1 AND contract_type="续约合同" AND product_id = 1`
+			tmpP = make([]interface{}, 0)
+			tmpP = append(tmpP, before61, startDate)
+
+			contractNormalList, e := company.GetCompanyContractList(tmpC, tmpP)
+			if e != nil {
+				err = fmt.Errorf("查询合同列表失败, ERR:%s", e)
+				return
+			}
+			for _, v := range contractNormalList {
+				ficcNormalMap[v.CompanyId] = struct{}{}
+			}
+			for _, v := range contractList {
+				companyInfo, tErr := company.GetCompanyById(v.CompanyId)
+				if tErr != nil {
+					err = tErr
+					return
+				}
+				if companyInfo.IsShare == 0 {
+					companyInfo.ShareSellerId = 0
+					companyInfo.ShareSeller = ""
+				}
+				sellers, tErr := company.GetCompanyProductByCompanyIdAndProductId(v.CompanyId, v.ProductId)
+				if tErr != nil {
+					err = tErr
+					return
+				}
+				//查询这个合同是否存在续约合同,起始日大于今日,或者截止日
+				if _, ok := ficcNormalMap[v.CompanyId]; !ok {
+					tmp := &company.CompanyRenewalRecord{
+						CompanyId:       v.CompanyId,
+						ProductId:       v.ProductId,
+						Source:          1,
+						SellerId:        sellers.SellerId,
+						SellerName:      sellers.SellerName,
+						ShareSellerId:   companyInfo.ShareSellerId,
+						ShareSellerName: companyInfo.ShareSeller,
+						CreateTime:      startDate,
+						ModifyTime:      startDate,
+					}
+					addList = append(addList, tmp)
+				}
+			}
+		}
+		startDate = startDate.AddDate(0, 0, 1)
+	}
+	if len(addList) > 0 {
+		item := new(company.CompanyRenewalRecord)
+		err = item.InsertMulti(addList)
+
+	}
+	return
+}