Browse Source

Merge branch 'master' into CRM_15.5

zwxi 1 year ago
parent
commit
a369a7d5aa

+ 8 - 1
controllers/company.go

@@ -2817,6 +2817,13 @@ func (this *CompanyController) Add() {
 			return
 		}
 	}
+
+	// 每个权益销售手中的试用客户最多30个
+	if productId == utils.COMPANY_PRODUCT_RAI_ID && tryOutCount >= utils.COMPANY_STATUS_TRY_OUT_COUNT_RAI {
+		br.Msg = "您的试用客户总数,已超过上限,不可继续新增"
+		return
+	}
+
 	if seller == nil {
 		br.Msg = "所属销售不存在"
 		return
@@ -3301,7 +3308,7 @@ func (this *CompanyController) Detail() {
 			}
 
 			// CRM8.8-权益权限列表调用较多、统一进行调整
-			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit)
+			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit, []string{"调研"})
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()

+ 5 - 0
controllers/company_apply.go

@@ -2028,6 +2028,11 @@ func (this *CompanyApplyController) ApplyContract() {
 			//	return
 			//}
 
+			filterPermissionName := []string{"专家", "路演服务"} // 需要过滤不展示的行业
+			if utils.InArrayByStr(filterPermissionName, n.PermissionName) {
+				continue
+			}
+
 			if utils.InArrayByInt(permissionIds, n.ChartPermissionId) {
 				fmt.Println(1)
 				n.Checked = true

+ 17 - 2
controllers/company_permission.go

@@ -83,13 +83,19 @@ func (this *CompanyPermissionController) List() {
 			br.ErrMsg = "获取权限信息失败,Err:" + err.Error()
 			return
 		}
-
+		filterPermissionName := []string{"专家", "路演服务", "调研"} // 需要过滤不展示的行业
+		if isShowYanXuanKouDian {
+			filterPermissionName = []string{"专家"} //申请转正,或者申请续约的时候 调研 行业需要进行展示
+		}
 		// 原始版的权限
 		if noUpgrade {
 			for _, v := range items {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 					continue
 				}
+				if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+					continue
+				}
 				p.Items = append(p.Items, v)
 			}
 		}
@@ -135,6 +141,9 @@ func (this *CompanyPermissionController) List() {
 				if !isShowYanXuanKouDian && v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 					continue
 				}
+				if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+					continue
+				}
 				// 处理四大行业的升级展示
 				if strings.Contains("医药消费科技智造", v.PermissionName) {
 					// 内部人员需要拆分主客观权限
@@ -434,6 +443,12 @@ func (this *CompanyPermissionController) PermissionLook() {
 		}
 	}
 
+	var filterPermissionName []string
+	if lookType == 1 {
+		filterPermissionName = []string{"专家", "路演服务", "研选扣点包", "调研"}
+	} else {
+		filterPermissionName = []string{"调研"}
+	}
 	//权益权限类目
 	for _, v := range permissionArr {
 
@@ -443,7 +458,7 @@ func (this *CompanyPermissionController) PermissionLook() {
 			if lookType == 1 {
 				unify = true
 			}
-			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify)
+			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify, filterPermissionName)
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()

+ 17 - 12
controllers/company_user.go

@@ -903,21 +903,23 @@ func (this *CompanyUserController) List() {
 		pars = append(pars, productId)
 
 		//流失客户(除非是超级管理员或者是部门管理员,要不然不允许看对应的联系人)
-		var companyProduct *company.CompanyProduct
+		//var companyProduct *company.CompanyProduct
 		//当前是ficc权限,且非ficc管理员
 		//if productId == 1 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_FICC_ADMIN {
 		//	tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 1)
 		//	companyProduct = tmpCompanyProduct
 		//}
-		if productId == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
-			// 当前是权益权限,且非 权益管理员
-			tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
-			companyProduct = tmpCompanyProduct
-			if companyProduct != nil && companyProduct.Status == utils.COMPANY_STATUS_LOSE {
-				condition += ` AND seller_id=? `
-				pars = append(pars, sysUser.AdminId)
-			}
-		}
+
+		//权益销售查看流失客户时,可以看到非本人名下流失客户的联系人需求池 930 2024-03-25
+		//if productId == 2 && sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_RAI_ADMIN {
+		//	// 当前是权益权限,且非 权益管理员
+		//	tmpCompanyProduct, _ := company.GetCompanyProductByCompanyIdAndProductId(companyId, 2)
+		//	companyProduct = tmpCompanyProduct
+		//	if companyProduct != nil && companyProduct.Status == utils.COMPANY_STATUS_LOSE {
+		//		condition += ` AND seller_id=? `
+		//		pars = append(pars, sysUser.AdminId)
+		//	}
+		//}
 	}
 
 	total, err := company.GetCompanyUserListCountV2(condition, pars, companyId)
@@ -1248,6 +1250,9 @@ func (this *CompanyUserController) List() {
 					list[i].IsChartPermissionSetting = 1
 				}
 			}
+			// 分产品阅读统计
+			list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
+			//list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
 		}
 
 		isUserYanXuanButtonShow, err := services.CheckCompanyUserYanXuanButton(sysUser.RoleTypeCode, sysUser.Mobile)
@@ -1282,7 +1287,7 @@ func (this *CompanyUserController) List() {
 			for i := 0; i < lenList; i++ {
 				item := list[i]
 				// 分产品阅读统计
-				list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
+				//list[i].YbProductViewTotal = userYbViewsMap[int(item.UserId)]
 				list[i].MfyxInteractionNum = userInteractionNumMap[int(item.UserId)]
 				//权益销售查看用户研选的信息
 				if userYanxuanPermissionMap[int(item.UserId)] != nil {
@@ -1297,7 +1302,7 @@ func (this *CompanyUserController) List() {
 					list[i].MfyxIsBinding = true
 					list[i].MfyxBindingTime = mfyxuserRecordRegisterMap[int(item.UserId)]
 				}
-				list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
+				//list[i].LastViewTimeStr = list[i].RaiLastViewTime.Format(utils.FormatDateTime)
 			}
 		}
 	}

+ 2 - 1
controllers/cygx/activity_signup.go

@@ -2059,7 +2059,8 @@ func (this *ActivitySignupCoAntroller) AddSignuUser() {
 	if len(items) > 0 {
 		//1用户报名添加到处理研选扣点
 		for _, v := range items {
-			go cygxService.YanXuanActivityPointsBillSignupAdd(v.ActivityId, v.UserId, adminInfo.AdminId)
+			time.Sleep(100 * time.Millisecond) // 添加0.1秒的延时
+			cygxService.YanXuanActivityPointsBillSignupAdd(v.ActivityId, v.UserId, adminInfo.AdminId)
 		}
 
 		go cygxService.AddctivitySignupDetailListByAdminSignup(req.ActivityIds) //已结束的活动,管理员手动添加报名,把信息写入到联系人列表参会信息中

+ 4 - 4
controllers/cygx/activity_special_trip.go

@@ -153,8 +153,8 @@ func (this *ActivitySpecialTripCoAntroller) AddUser() {
 			itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 			itemBill.AdminId = AdminUser.AdminId
 
-			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-				//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+			if activityInfo.ChartPermissionName == utils.CE_LUE_NAME || activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+				//如果是策略、固收行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
 				maxChartPermissionId, maxChartPermissionName, err := cygxService.GetSpecialBillMaxChartPermissionId(infoUser)
 				if err != nil {
 					br.Msg = "操作失败"
@@ -568,8 +568,8 @@ func (this *ActivitySpecialTripCoAntroller) TripCancel() {
 	itemBill.ChartPermissionName = activityInfo.ChartPermissionName
 	itemBill.AdminId = sysUser.AdminId
 
-	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-		//如果是策略行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
+	if activityInfo.ChartPermissionName == utils.CE_LUE_NAME || activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+		//如果是策略、固收行业,把代扣行业信息放入流水表,取消报名的时候,返点使用
 		lastTripBill, err := cygx.GetCygxActivitySpecialTripBillLastDetialByActivityId(activityInfo.ActivityId, userId)
 		if err != nil {
 			br.Msg = "操作失败"

+ 2 - 1
controllers/cygx/contract_allocation.go

@@ -13,6 +13,7 @@ import (
 	"hongze/hz_crm_api/models/system"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/utils"
+	"math"
 	"os"
 	"path/filepath"
 	"strconv"
@@ -519,7 +520,7 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 	for _, p := range hasPermissions {
 		hasMap[p.ChartPermissionId] = p
 		if p.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
-			pointMoney = 0.2 * p.Points
+			pointMoney = math.Round(0.2*p.Points*100) / 100 // 将给定数字舍入到最近的整数,处理精度问题
 		}
 	}
 

+ 10 - 9
controllers/cygx/industrial_management.go

@@ -54,14 +54,15 @@ func (this *IndustrialManagementController) ChartPermissionList() {
 	//判断是否是策略平台的报告类型
 	if isCeLueReport {
 		for _, v := range list {
-			if v.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN {
-				resp.List = append(resp.List, v)
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN || v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
+				continue
 			}
+			resp.List = append(resp.List, v)
 		}
-		item := new(cygx.ChartPermission)
-		item.PermissionName = utils.GU_SHOU_NAME
-		item.ChartPermissionId = utils.GU_SHOU_ID
-		resp.List = append(resp.List, item)
+		//item := new(cygx.ChartPermission)
+		//item.PermissionName = utils.GU_SHOU_NAME
+		//item.ChartPermissionId = utils.GU_SHOU_ID
+		//resp.List = append(resp.List, item)
 	} else {
 		for _, v := range list {
 			if (v.PermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN || v.PermissionName == utils.YAN_XUAN_KOU_DIAN_BAO_NAME) && isHideResearch {
@@ -187,7 +188,7 @@ func (this *IndustrialManagementController) ChartPermissionFirstProduct() {
 	}
 	//医药消费科技制造策略
 	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 {
+		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 || v.PermissionName == utils.GU_SHOU_NAME {
 			resp.List = append(resp.List, v)
 		}
 	}
@@ -214,9 +215,9 @@ func (this *IndustrialManagementController) ChartPermissionListActivitySpecial()
 		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 {
+		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 || v.PermissionName == utils.GU_SHOU_NAME {
 			resp.List = append(resp.List, v)
 		}
 	}

+ 88 - 1
controllers/cygx/yanxuan_special.go

@@ -2,10 +2,12 @@ package cygx
 
 import (
 	"encoding/json"
+	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"github.com/tealeg/xlsx"
 	"hongze/hz_crm_api/controllers"
 	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
 	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/services/elastic"
@@ -74,6 +76,7 @@ func (this *YanxuanSpecialController) Add() {
 		UserId:      req.UserId,
 		RealName:    req.RealName,
 		Mobile:      req.Mobile,
+		MobileInit:  infoUser.Mobile,
 		CompanyName: infoUser.CompanyName,
 		CompanyId:   infoUser.CompanyId,
 		CreateTime:  time.Now(),
@@ -251,15 +254,46 @@ func (this *YanxuanSpecialController) AuthorList() {
 	}
 
 	var userIds []int
-
+	var mobiles []string
 	for _, v := range list {
 		userIds = append(userIds, v.UserId)
+		if v.MobileInit != "" {
+			mobiles = append(mobiles, v.MobileInit)
+		}
+	}
+
+	listUser, err := models.GetWxUserRaiSllerListByUserMobile(mobiles)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
 	}
+	//获取用户当前最新的公司信息
+	mapWxUserSller := make(map[string]*models.WxUserSller)
+	for _, v := range listUser {
+		mapWxUserSller[v.Mobile] = v
+	}
+
+	//对权益管理员跟超管展示全部手机号
+	var isShow bool
+	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
+		isShow = true
+	}
+
 	//获取专栏用户最新的一篇文章信息
 	mapNewTime := cygxService.GetBestNewYanxuanSpecialByUserId(userIds)
 	for _, v := range list {
 		v.SpecialAuthorId = v.Id
 		v.ArticlePublishTime = mapNewTime[v.UserId]
+		mapItem := mapWxUserSller[v.MobileInit]
+		if mapItem != nil {
+			v.CompanyName = mapItem.CompanyName
+			v.CompanyId = mapItem.CompanyId
+		}
+		if isShow {
+			v.Mobile = v.MobileInit
+		}
+
 	}
 	resp := new(cygx.GetCygxYanxuanSpecialAuthorItemResp)
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -561,6 +595,22 @@ func (this *YanxuanSpecialController) ListPv() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+
+	var companyIds []int
+	for _, v := range list {
+		companyIds = append(companyIds, v.CompanyId)
+	}
+
+	listCompanyProduct, err := company.GetCompanyProductListByCompanyIds(companyIds, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取销售列表失败,Err:" + err.Error()
+		return
+	}
+	mapsCompanyStatus := make(map[int]string)
+	for _, v := range listCompanyProduct {
+		mapsCompanyStatus[v.CompanyId] = v.Status
+	}
 	//创建excel
 	dir, err := os.Executable()
 	exPath := filepath.Dir(dir)
@@ -588,8 +638,12 @@ func (this *YanxuanSpecialController) ListPv() {
 	rowTitle := sheet.AddRow()
 	cellA := rowTitle.AddCell()
 	cellA.Value = "姓名"
+	cellMobile := rowTitle.AddCell()
+	cellMobile.Value = "手机号"
 	cellB := rowTitle.AddCell()
 	cellB.Value = "公司名称"
+	cellCompanyStatus := rowTitle.AddCell()
+	cellCompanyStatus.Value = "客户状态"
 	cellC := rowTitle.AddCell()
 	cellC.Value = "所属权益销售"
 	cellD := rowTitle.AddCell()
@@ -601,8 +655,12 @@ func (this *YanxuanSpecialController) ListPv() {
 		row := sheet.AddRow()
 		cellA := row.AddCell()
 		cellA.Value = item.RealName
+		cellMobile := row.AddCell()
+		cellMobile.Value = item.Mobile
 		cellB := row.AddCell()
 		cellB.Value = item.CompanyName
+		cellCompanyStatus := row.AddCell()
+		cellCompanyStatus.Value = mapsCompanyStatus[item.CompanyId]
 		cellC := row.AddCell()
 		cellC.Value = item.SellerName
 		cellD := row.AddCell()
@@ -787,3 +845,32 @@ func (this *YanxuanSpecialController) SpecialAuthorFansList() {
 	br.Success = true
 	br.Msg = "获取成功"
 }
+
+func init_928() {
+	var condition string
+	var pars []interface{}
+	list, err := cygx.GetYanxuanSpecialAuthorList(condition, pars, 0, 999)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+
+	for k, v := range list {
+		fmt.Println(k)
+		//获取关联公司的用户信息
+		infoUser, err := cygx.GetUserAndCompanyNameList(v.UserId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			fmt.Println(err)
+			return
+		}
+		if infoUser == nil {
+			continue
+		}
+		err = cygx.UpdateSpecialAuthormobile_init(infoUser.Mobile, infoUser.UserId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+	}
+	return
+}

+ 2 - 2
controllers/full_company.go

@@ -2446,7 +2446,7 @@ func (this *FullCompanyController) Detail() {
 			}
 
 			// CRM8.8-权益权限列表调用较多、统一进行调整
-			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit)
+			plist, e := services.RaiCompanyPermissionAndCheckList(companyId, isEdit, []string{"调研"})
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()
@@ -2751,7 +2751,7 @@ func (this *FullCompanyController) PermissionLook() {
 			if lookType == 1 {
 				unify = true
 			}
-			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify)
+			p, e := services.RaiCompanyPermissionAndCheckList(companyId, unify, []string{"调研"})
 			if e != nil {
 				br.Msg = "获取客户权益权限列表信息失败"
 				br.ErrMsg = "获取客户权益权限列表信息失败,Err:" + e.Error()

+ 11 - 4
controllers/help_doc/doc.go

@@ -68,6 +68,10 @@ func (this *HelpDocController) Add() {
 		}
 	}
 
+	var resp help_doc.HelpDocSaveResp
+	resp.HelpDocId = req.Id
+	resp.ModifyTime = time.Now().Format(utils.FormatDateTime)
+
 	item := new(help_doc.HelpDoc)
 	item.ClassifyId = req.ClassifyId
 	item.Title = req.Title
@@ -85,13 +89,16 @@ func (this *HelpDocController) Add() {
 	}
 
 	if req.Id == 0 {
-		_, err = help_doc.AddHelpDoc(item)
-		if err != nil {
+		id, e := help_doc.AddHelpDoc(item)
+		if e != nil {
+			err = e
 			br.Msg = "新增失败"
 			br.ErrMsg = "保存失败,Err:" + err.Error()
 			return
 		}
-	} else {
+		resp.HelpDocId = id
+		resp.ModifyTime = item.ModifyTime.Format(utils.FormatDateTime)
+	} else if req.IsChange {
 		err = help_doc.EditHelpDoc(item, req.Id)
 		if err != nil {
 			br.Msg = "保存失败"
@@ -107,7 +114,7 @@ func (this *HelpDocController) Add() {
 	}
 	br.Ret = 200
 	br.Success = true
-
+	br.Data = resp
 }
 
 // @Title 获取报告详情接口

+ 128 - 0
controllers/roadshow/report.go

@@ -2,6 +2,7 @@ package roadshow
 
 import (
 	"encoding/json"
+	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/roadshow"
@@ -1157,3 +1158,130 @@ func (this *CalendarController) ResearcherBusinessTrip() {
 	br.Data = resp
 	return
 }
+
+// OverseasCustomReportCalendarList
+// @Title 路演详情列表
+// @Description 路演详情列表接口
+// @Param   Keyword   query   string  true       "关键字:客户名称"
+// @Param   CompanyStatus   query   string  true       "客户状态,枚举值:正式、试用、关闭"
+// @Param   SellerId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   ResearcherId   query   int  true       "销售id列表;多个用英文,分割"
+// @Param   StartDate   query   string  true       "开始日期,格式:2022-04-06"
+// @Param   EndDate   query   string  true       "结束日期,格式:2022-04-06"
+// @Param   SortField	query	string		false	"排序字段:start_date"
+// @Param   SortDesc	query	int		false	"1:降序,默认,2:升序"
+// @Success 200 {object} []roadshow.RsReportRecordList
+// @router /overseas_custom/calendar/list [get]
+func (this *CalendarController) OverseasCustomReportCalendarList() {
+	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
+	}
+	keyword := this.GetString("Keyword")
+	companyStatus := this.GetString("CompanyStatus")
+	startDate := this.GetString("StartDate")
+	endDate := this.GetString("EndDate")
+	sellerId := this.GetString("SellerId")
+	researcherId := this.GetString("ResearcherId")
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	sortField := this.GetString("SortField")
+	sortDesc, _ := this.GetInt("SortDesc")
+
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+
+	switch sortField {
+	case "start_date":
+	default:
+		sortField = "start_date"
+	}
+
+	// "1:降序,默认,2:升序"
+	sortDesStr := ` desc `
+	switch sortDesc {
+	case 2:
+		sortDesStr = ` asc `
+	default:
+		sortDesStr = "desc"
+	}
+
+	total, list, err := roadshow.GetOverseaCustomCalendarList(keyword, sellerId, researcherId, startDate, endDate, companyStatus, sortField, sortDesStr, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp := new(roadshow.OverseaCustomRecordInfoResp)
+	resp.Paging = page
+	resp.List = list
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+	return
+}
+
+// OverseasCustomCalendarAdminList
+// @Title 海外客户路演用户列表接口
+// @Description 海外客户路演用户列表接口
+// @Param   AdminType   query   string  true       "枚举值:researcher、seller"
+// @Success 200 {object} []roadshow.AdminInfo
+// @router /overseas_custom/sys_user/list [get]
+func (this *CalendarController) OverseasCustomCalendarAdminList() {
+	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
+	}
+	adminType := this.GetString("AdminType")
+
+	var list []*roadshow.AdminInfo
+	var err error
+	//选择的人员类型(发起人还是被发起人)
+	if adminType == "seller" {
+		list, err = roadshow.GetOverseaCustomCalendarSellerList()
+	} else if adminType == "researcher" {
+		list, err = roadshow.GetOverseaCustomCalendarResearcherList()
+	} else {
+		br.Msg = "错误的类型"
+		br.IsSendEmail = false
+	}
+
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,ERR:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = list
+	return
+}

+ 12 - 0
models/cygx/cygx_yanxuan_special_user.go

@@ -15,6 +15,7 @@ type CygxYanxuanSpecialAuthor struct {
 	NickName     string    // 昵称
 	RealName     string    // 姓名
 	Mobile       string    // 手机号
+	MobileInit   string    // 初始化手机号(没有脱敏的)
 	CreateTime   time.Time // 创建时间
 	ModifyTime   time.Time // 修改时间
 	HeadImg      string    // 头像
@@ -30,12 +31,14 @@ type CygxYanxuanSpecialAuthorItem struct {
 	Id                 int    `orm:"column(id);pk"`
 	UserId             int    // 用户ID
 	CompanyName        string // 公司名
+	CompanyId          int    // 公Id
 	SpecialName        string // 专栏名称
 	Introduction       string // 介绍
 	Label              string // 标签
 	NickName           string // 昵称
 	RealName           string // 姓名
 	Mobile             string // 手机号
+	MobileInit         string // 初始化手机号(没有脱敏的)
 	CreateTime         string // 创建时间
 	ModifyTime         string // 修改时间
 	HeadImg            string // 头像
@@ -135,3 +138,12 @@ type CygxYanxuanSpecialCenterAuthorResp struct {
 	PublishTime string // 提审过审或驳回时间
 	Title       string // 标题
 }
+
+// 启用禁用作者
+func UpdateSpecialAuthormobile_init(mobile_init string, userId int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := ``
+	sql = `UPDATE cygx_yanxuan_special_author SET mobile_init = ?  WHERE user_id = ? `
+	_, err = o.Raw(sql, mobile_init, userId).Exec()
+	return
+}

+ 2 - 2
models/eta_trial/eta_trial.go

@@ -112,10 +112,10 @@ func AddETATrial(item *EtaTrial) (lastId int64, err error) {
 }
 
 func GetETATrialByAccount(account string) (items []*EtaTrial, err error) {
-	sql := `SELECT * FROM eta_trial WHERE account = ? `
+	sql := `SELECT * FROM eta_trial WHERE account LIKE '%` + account + `%' `
 	o := orm.NewOrm()
 
-	_, err = o.Raw(sql, account).QueryRows(&items)
+	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
 

+ 7 - 1
models/help_doc/help_doc.go

@@ -52,6 +52,7 @@ type AddHelpDocReq struct {
 	Author        string `description:"作者"`
 	Status        int    `description:"状态:1:未发布,2:已发布"`
 	Content       string `description:"内容"`
+	IsChange      bool   `description:"内容是否改变"`
 	AnchorData    []AnchorList
 	RecommendData []RecommendList
 }
@@ -189,4 +190,9 @@ func GetAllHelpDoc() (items []*HelpDocItem, err error) {
 	sql := `SELECT * FROM help_doc `
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
-}
+}
+
+type HelpDocSaveResp struct {
+	HelpDocId  int64  `description:"智能研报ID"`
+	ModifyTime string `description:"修改时间"`
+}

+ 178 - 0
models/roadshow/calendar.go

@@ -1,10 +1,13 @@
 package roadshow
 
 import (
+	"fmt"
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/system"
+	"hongze/hz_crm_api/utils"
+	"strings"
 	"time"
 )
 
@@ -733,3 +736,178 @@ func GetPublicCalendarDetailList(condition string, pars []interface{}) (list []*
 	_, err = o.Raw(sql, pars).QueryRows(&list)
 	return
 }
+
+type AdminInfo struct {
+	AdminId  int
+	RealName string
+}
+
+func GetOverseaCustomCalendarSellerList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT a.sys_user_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND a.sys_user_id != 0 `
+
+	sql2 := `SELECT aa.sys_user_id FROM  rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.rs_calendar_researcher_status=2 AND aa.sys_user_id != 0`
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+ JOIN admin n on m.sys_user_id=n.admin_id
+WHERE 1=1 Group by sys_user_id order by sys_user_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+func GetOverseaCustomCalendarResearcherList() (list []*AdminInfo, err error) {
+	o := orm.NewOrm()
+	sql1 := `SELECT b.researcher_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND b.researcher_id != 0`
+
+	sql2 := `SELECT bb.researcher_id FROM  rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+		where aa.english_company= 1 AND aa.source = 0  AND bb.rs_calendar_researcher_status=2 AND bb.researcher_id != 0 `
+
+	sql := `SELECT n.admin_id,n.real_name FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += `		) AS m 
+JOIN admin n on m.researcher_id=n.admin_id
+WHERE 1=1 Group by researcher_id order by researcher_id asc`
+	_, err = o.Raw(sql).QueryRows(&list)
+
+	return
+}
+
+type OverseaCustomRecordInfoResp struct {
+	Paging *paging.PagingItem
+	List   []*OverseaCustomRecordInfo
+}
+
+type OverseaCustomRecordInfo struct {
+	RsCalendarId     int
+	CompanyId        int
+	Source           int
+	RoadshowType     string
+	RoadshowPlatform string
+	SellerName       string
+	ResearcherName   string
+	CompanyName      string
+	CompanyStatus    string
+	StartDate        string
+}
+
+func GetOverseaCustomCalendarList(keyword, sellerId, researcherId, startDate, endDate, companyStatus, sortField, sortDesc string, startSize, pageSize int) (total int, list []*OverseaCustomRecordInfo, err error) {
+	var databaseName string
+	if utils.RunMode == "debug" {
+		databaseName = "test_v2_hongze_rddp"
+	} else {
+		databaseName = "hongze_rddp"
+	}
+	companyStatusList := make([]string, 0)
+	if companyStatus != "" {
+		companyStatusList = strings.Split(companyStatus, ",")
+	}
+	lenCompanyStatusList := len(companyStatusList)
+
+	o := orm.NewOrm()
+
+	pars := make([]interface{}, 0)
+
+	sql1 := `SELECT d.company_name,d.overseas_status company_status,b.start_date,a.rs_calendar_id,a.roadshow_type,a.roadshow_platform,a.sys_user_real_name seller_name,b.researcher_name as base_researcher_name,2 AS source,d.company_id FROM  rs_calendar AS a
+    INNER JOIN rs_report_record  AS b ON a.rs_calendar_id=b.rs_calendar_id
+         JOIN company_product AS c ON a.company_id=c.company_id AND c.product_id=1
+         JOIN company AS d ON c.company_id=d.company_id 
+				INNER JOIN overseas_custom_seller AS f ON c.seller_id=f.seller_id
+		where c.is_overseas = 0 and  a.english_company= 0 AND a.source = 0  AND b.rs_calendar_researcher_status=2 AND b.researcher_id != 0`
+
+	if keyword != "" {
+		sql1 += ` AND d.company_name like ? `
+		pars = utils.GetLikeKeywordPars(pars, keyword, 1)
+	}
+	if sellerId != "" {
+		sql1 += fmt.Sprintf(` AND a.sys_user_id in (%s) `, sellerId)
+	}
+	if startDate != "" {
+		sql1 += ` AND b.start_date >= ? `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql1 += ` AND b.start_date <= ? `
+		pars = append(pars, endDate)
+	}
+	if lenCompanyStatusList > 0 {
+		sql1 += ` AND d.overseas_status in (` + utils.GetOrmInReplace(lenCompanyStatusList) + ") "
+		pars = append(pars, companyStatusList)
+	}
+
+	sql2 := fmt.Sprintf(`SELECT cc.company_name,cc.overseas_status company_status,bb.start_date,aa.rs_calendar_id,aa.roadshow_type,aa.roadshow_platform,aa.sys_user_real_name seller_name,bb.researcher_name as base_researcher_name,1 AS source,cc.company_id+10000000 FROM rs_calendar AS aa
+    INNER JOIN rs_report_record  AS bb ON aa.rs_calendar_id=bb.rs_calendar_id
+    INNER JOIN %s.english_company AS cc ON aa.company_id=cc.company_id
+		where aa.english_company= 1 AND aa.source = 0 AND cc.is_deleted=0  AND bb.rs_calendar_researcher_status=2 AND bb.researcher_id != 0 `, databaseName)
+
+	if keyword != "" {
+		sql2 += ` AND cc.company_name like ? `
+		pars = utils.GetLikeKeywordPars(pars, keyword, 1)
+	}
+	if sellerId != "" {
+		sql2 += fmt.Sprintf(` AND aa.sys_user_id in (%s) `, sellerId)
+	}
+	if startDate != "" {
+		sql2 += ` AND bb.start_date >= ?  `
+		pars = append(pars, startDate)
+	}
+	if endDate != "" {
+		sql2 += ` AND bb.start_date <= ?  `
+		pars = append(pars, endDate)
+	}
+	if lenCompanyStatusList > 0 {
+		sql2 += ` AND cc.overseas_status in (` + utils.GetOrmInReplace(lenCompanyStatusList) + ") "
+		pars = append(pars, companyStatusList)
+	}
+	rsCalendarIdList := make([]int, 0)
+	if researcherId != `` {
+		rsCalendarIdSql := fmt.Sprintf("select rs_calendar_id from rs_calendar_researcher where researcher_id in (%s) group by rs_calendar_id", researcherId)
+		_, err = o.Raw(rsCalendarIdSql).QueryRows(&rsCalendarIdList)
+		if err != nil {
+			return
+		}
+	}
+	rsCalendarIdNum := len(rsCalendarIdList)
+
+	// 汇总数据
+	totalSql := `SELECT COUNT(1) FROM (SELECT rs_calendar_id FROM (` + sql1 + ` UNION ALL ` + sql2
+	totalSql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		totalSql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+		pars = append(pars, rsCalendarIdList)
+	}
+
+	totalSql += ` Group by rs_calendar_id) fff`
+	err = o.Raw(totalSql, pars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	// 列表数据
+	sql := `SELECT m.*,GROUP_CONCAT(DISTINCT base_researcher_name ORDER BY rs_calendar_id ASC SEPARATOR ',') AS researcher_name  FROM (` + sql1 + ` UNION ALL ` + sql2
+	sql += ` ) AS m  WHERE 1=1 `
+
+	if rsCalendarIdNum > 0 {
+		sql += fmt.Sprintf(` AND rs_calendar_id IN (` + utils.GetOrmInReplace(rsCalendarIdNum) + `)`)
+	}
+
+	sql += fmt.Sprintf(` Group by rs_calendar_id order by %s %s `, sortField, sortDesc)
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+
+	return
+}

+ 27 - 1
models/wx_user.go

@@ -562,6 +562,32 @@ func GetWxUserRaiSllerListByUserIds(userIds []int) (list []*WxUserSller, err err
 	return
 }
 
+// GetWxUserRaiSllerListByUserMobile 根据用户手机号获取权益相关用户信息
+func GetWxUserRaiSllerListByUserMobile(mobiles []string) (list []*WxUserSller, err error) {
+	lenarr := len(mobiles)
+	if lenarr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := ` SELECT
+				w.user_id,
+				w.real_name,
+				w.mobile,
+				c.company_name,
+				c.company_id,
+				p.seller_name 
+			FROM
+				wx_user AS w
+				INNER JOIN company_product AS p ON p.company_id = w.company_id
+				INNER JOIN company AS c ON c.company_id = w.company_id 
+			WHERE
+				1 = 1 
+				AND p.product_id = 2 
+				AND w.mobile IN (` + utils.GetOrmInReplace(lenarr) + `)  `
+	_, err = o.Raw(sql, mobiles).QueryRows(&list)
+	return
+}
+
 // GetWxUserByCompanyIds 根据客户ID集合获取用户列表
 func GetWxUserByCompanyIds(companyIds []int) (items []*WxUser, err error) {
 	num := len(companyIds)
@@ -598,4 +624,4 @@ func GetCompanyFollowCount(companyId int) (count int, err error) {
 	sql := ` SELECT COUNT(1) FROM wx_user WHERE company_id=? AND is_follow = 1 `
 	err = o.Raw(sql, companyId).QueryRow(&count)
 	return
-}
+}

+ 18 - 0
routers/commentsRouter.go

@@ -7387,6 +7387,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomReportCalendarList",
+            Router: `/overseas_custom/calendar/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
+        beego.ControllerComments{
+            Method: "OverseasCustomCalendarAdminList",
+            Router: `/overseas_custom/sys_user/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"] = append(beego.GlobalControllerRouter["hongze/hz_crm_api/controllers/roadshow:CalendarController"],
         beego.ControllerComments{
             Method: "PublicMeetingDetail",

+ 12 - 2
services/company_permission.go

@@ -16,7 +16,8 @@ import (
 // 场景:查看客户权限、客户详情、编辑客户、增开试用
 // 非权益客户时, 返回权益权限列表, 但是checkList为空[]int
 // unify: 是否需要统一合并/拆分
-func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.PermissionLookList, err error) {
+// filterPermissionName: 需要隐藏的权限名称
+func RaiCompanyPermissionAndCheckList(companyId int, unify bool, filterPermissionName []string) (resp *company.PermissionLookList, err error) {
 	resp = new(company.PermissionLookList)
 	productId := utils.COMPANY_PRODUCT_RAI_ID
 	productName := utils.COMPANY_PRODUCT_RAI_NAME
@@ -154,7 +155,13 @@ func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.
 	//有升级权限时只展示一个
 	newpPermissionItems := make([]*company.PermissionLookItem, 0)
 	if unify {
-		newpPermissionItems = permissionItems
+		//newpPermissionItems = permissionItems
+		for _, v := range permissionItems {
+			if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+				continue
+			}
+			newpPermissionItems = append(newpPermissionItems, v)
+		}
 	} else {
 		upgradeMap := make(map[string]int)
 		for _, v := range permissionItems {
@@ -162,6 +169,9 @@ func RaiCompanyPermissionAndCheckList(companyId int, unify bool) (resp *company.
 			//if v.ChartPermissionId == utils.YAN_XUAN_KOU_DIAN_BAO_ID {
 			//	continue
 			//}
+			if utils.InArrayByStr(filterPermissionName, v.PermissionName) {
+				continue
+			}
 			if _, ok := upgradeMap[v.PermissionName]; !ok {
 				newpPermissionItems = append(newpPermissionItems, v)
 				if strings.Contains(v.PermissionName, "升级") {

+ 1 - 0
services/cygx/acitvity.go

@@ -1367,6 +1367,7 @@ func GetActChartPermissionList() []*cygx.ChartPermissionRepMore {
 		{PermissionName: "科技"},
 		{PermissionName: "智造"},
 		{PermissionName: "策略"},
+		{PermissionName: "固收"},
 		{PermissionName: "宏观"},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN},
 		//{PermissionName: utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(医药)"},

+ 0 - 1
services/cygx/activity_points_set.go

@@ -211,7 +211,6 @@ func UpdateYanXuanActivityPointsBillOldComapny(activityInfo *cygx.ActivityDetail
 
 // 1用户报名添加到处理研选扣点
 func YanXuanActivityPointsBillSignupAdd(activityId, uid, adminId int) (err error) {
-	time.Sleep(1 * time.Second) // 添加一秒的延时
 	defer func() {
 		if err != nil {
 			fmt.Println(err)

+ 5 - 6
services/cygx/activity_power_check.go

@@ -552,19 +552,18 @@ func GetSpecialDetailUserPower(user *models.WxUser, activityInfo *cygx.ActivityS
 			return
 		}
 	}
-	//如果没有对应的权限,则返回
-	if !strings.Contains(permissionStr, activityInfo.ChartPermissionName) {
-		return
-	}
 	permissionShengji, errs := cygx.GetCompanyPermissionByUserTrip(user.CompanyId)
 	if errs != nil {
 		err = errs
 		return
 	}
-	//如果有升级权限的自动添加策略的升级权限
+	//如果有升级权限的自动添加策略、固收的升级权限
 	if permissionStr != "" {
 		if activityInfo.ChartPermissionName == utils.CE_LUE_NAME {
-			permissionStr += "," + utils.CE_LUE_NAME
+			permissionShengji += "," + utils.CE_LUE_NAME
+		}
+		if activityInfo.ChartPermissionName == utils.GU_SHOU_NAME {
+			permissionShengji += "," + utils.GU_SHOU_NAME
 		}
 	}
 	//如果没有对应的升级权限,则返回

+ 4 - 4
services/cygx/activity_special.go

@@ -793,8 +793,8 @@ func DeductTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	pars = append(pars, companyId)
 
-	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
-	if chartPermissionName != utils.CE_LUE_NAME {
+	//判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_NAME {
 		pars = make([]interface{}, 0)
 		condition = " AND  company_id  = ?   AND  (chart_permission_id  = ?   OR chart_permission_id = 0 )    ORDER BY  points DESC LIMIT 1   "
 		pars = append(pars, companyId, activityInfo.ChartPermissionId)
@@ -882,8 +882,8 @@ func RebateTripRemainingtimesByUser(user *cygx.UserAndCompanyName, activityInfo
 	condition = " AND  company_id  = ?    ORDER BY  points DESC LIMIT 1   "
 	pars = append(pars, companyId)
 
-	//判断是不是策略行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
-	if chartPermissionName != utils.CE_LUE_NAME {
+	//判断是不是策略、固收行业的活动,如果不是策略就获取对应行业的点数 ,策略的任何一个行业有剩余点数都能参加
+	if chartPermissionName != utils.CE_LUE_NAME && chartPermissionName != utils.GU_SHOU_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)

+ 2 - 2
services/cygx/mail.go

@@ -22,7 +22,7 @@ func SendResearchSummaryEmail(detail *cygx.DetailCygxResearchSummaryRep, touser
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
-	user = append(user, "krfeng@hzinsights.com ")
+	user = append(user, "hdong@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	m.SetHeader("Bcc", user...)
 	m.SetHeader("Subject", detail.Title)
@@ -291,7 +291,7 @@ func SendMinutesSummaryEmail(detail *cygx.DetailCygxMinutesSummaryRep, touser []
 	user = append(user, "zwxi@hzinsights.com ")
 	user = append(user, "zqliu@hzinsights.com ")
 	user = append(user, "tshen@hzinsights.com ")
-	user = append(user, "krfeng@hzinsights.com ")
+	user = append(user, "hdong@hzinsights.com ")
 	user = append(user, "cxzhang@hzinsights.com ")
 	m.SetHeader("To", user...)
 	m.SetHeader("Subject", detail.Title)

+ 20 - 0
utils/common.go

@@ -2181,3 +2181,23 @@ func GetArabicNumbers(str string) string {
 	}
 	return string(numbers)
 }
+
+// GetLikeKeywordPars
+//
+//	@Description: 获取sql查询中的参数切片
+//	@author: Roc
+//	@datetime2023-10-23 14:50:18
+//	@param pars []interface{}
+//	@param keyword string
+//	@param num int
+//	@return newPars []interface{}
+func GetLikeKeywordPars(pars []interface{}, keyword string, num int) (newPars []interface{}) {
+	newPars = pars
+	if newPars == nil {
+		newPars = make([]interface{}, 0)
+	}
+	for i := 1; i <= num; i++ {
+		newPars = append(newPars, `%`+keyword+`%`)
+	}
+	return
+}

+ 12 - 11
utils/constants.go

@@ -92,17 +92,18 @@ const (
 
 // 客户状态
 const (
-	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_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_STATUS_TRY_OUT_COUNT_RAI = 30 // 权益试用客户上限
 
 	COMPANY_APPROVE_STATUS = "待审批"
 )