Browse Source

Merge branch 'master' of http://8.136.199.33:3000/hongze/hongze_task into crm_need_963

zhangchuanxing 3 weeks ago
parent
commit
3eee0c80b5

+ 27 - 1
models/company.go

@@ -2,6 +2,7 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_task/utils"
 	"time"
 )
 
@@ -32,6 +33,7 @@ type Company struct {
 	FirstStartDate  string    `description:"首次设置为试用客户开始时间"`
 	FirstEndDate    string    `description:"首次设置为试用客户结束时间"`
 	DateType        int       `description:"设置流失类型,1:1个月,2:2个月,3:3个月"`
+	InteractionNum  int       `description:"用户总的互动量"`
 }
 
 func GetCompanyByName(companyName string) (item *Company, err error) {
@@ -88,6 +90,18 @@ func GetCompanyNeedFreeze(endDate string) (items []*CompanyNeedFreeze, err error
 	return
 }
 
+// 权益客户正式转冻结
+func GetCompanyNeedFreezeRai(endDate string) (items []*CompanyNeedFreeze, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.company_id,b.company_product_id,b.product_id,a.company_name,b.product_name,b.status
+            FROM  company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE b.status='正式' AND b.product_id = 2
+			AND b.end_date<=? `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
 func GetCompanyNeedLoss(endDate string) (items []*CompanyNeedFreeze, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT a.company_id,b.company_product_id,b.product_id,a.company_name,b.product_name,b.status
@@ -106,7 +120,7 @@ func GetCompanyNeedTryOut(endDate string) (items []*CompanyNeedFreeze, err error
             FROM  company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			WHERE b.status='正式'
-			AND b.end_date<=?  AND b.init_status != '永续'  ` //权益的永续客户正式不转试用
+			AND b.end_date<=?  AND b.init_status != '永续'  AND product_id = 1  ` //权益的永续客户正式不转试用
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
@@ -162,3 +176,15 @@ func GetCompanyNeedFreezeXClassRai(endDate string) (items []*CompanyNeedFreeze,
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
+
+// GetCompanyListByCompanyId 根据公司ID获取公司信息
+func GetCompanyListByCompanyId(companyId []int) (items []*Company, err error) {
+	lenArr := len(companyId)
+	if lenArr == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := `SELECT interaction_num , company_id  FROM  company AS a WHERE a.company_id IN (` + utils.GetOrmInReplace(lenArr) + `)   `
+	_, err = o.Raw(sql, companyId).QueryRows(&items)
+	return
+}

+ 1 - 1
models/company_contract/company_contract.go

@@ -91,7 +91,7 @@ func GetAfterCompanyContractListByCompanyIdListAndEndDate(endDate string, compan
 // GetLastContractListByEndDate 通过最近一份合同的日期获取早于该合同的最晚一份合同
 func GetLastContractListByEndDate(companyId, productId int, endDate string) (item *CompanyContract, err error) {
 	o := orm.NewOrm()
-	sql := "SELECT * FROM company_contract where company_id = ? AND product_id= ? end_date < ? AND status = 1 ORDER BY end_date desc"
+	sql := "SELECT * FROM company_contract where company_id = ? AND product_id= ? AND end_date < ? AND status = 1 ORDER BY end_date desc"
 	err = o.Raw(sql, companyId, productId, endDate).QueryRow(&item)
 
 	return

+ 46 - 2
models/company_product.go

@@ -79,6 +79,47 @@ func CompanyFreeze(companyId, productId int) (companyReportPermissionList []*Com
 	return
 }
 
+func CompanyFreezeRai(companyId, productId int) (companyReportPermissionList []*CompanyReportPermission, err error) {
+	if productId != 2 {
+		return
+	}
+	o := orm.NewOrm()
+	freezeStartDate := time.Now().Format(utils.FormatDate)
+	freezeEndDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+
+	//客户产品 状态 变更
+	sql := `UPDATE company_product SET status='冻结',is_formal=0,is_suspend=0,freeze_time=NOW(),modify_time=NOW(),start_date=?,end_date=?,freeze_start_date=?,freeze_end_date=?,try_stage=1 WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, freezeStartDate, freezeEndDate, freezeStartDate, freezeEndDate, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//客户产品权限 状态 变更
+	//获取需要变更的 客户产品权限
+	oldPermissionEndDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	sql = `SELECT *
+          FROM company_report_permission
+			WHERE status='正式' AND end_date<=? AND company_id=? AND product_id=? `
+	total, err := o.Raw(sql, oldPermissionEndDate, companyId, productId).QueryRows(&companyReportPermissionList)
+	if err != nil {
+		return
+	}
+
+	if total > 0 {
+		sql = `UPDATE company_report_permission SET status='关闭',modify_time=NOW() 
+			WHERE status='正式' AND end_date<=? AND company_id=? AND product_id=? `
+		_, err = o.Raw(sql, oldPermissionEndDate, companyId, productId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	//客户状态变更
+	sql = `UPDATE company SET type=3,last_updated_time=NOW(),start_date=?,end_date=? WHERE company_id=? `
+	_, err = o.Raw(sql, freezeStartDate, freezeEndDate, companyId).Exec()
+	return
+}
+
 func CompanyFreezeXClassRai(companyId, productId int) (companyReportPermissionList []*CompanyReportPermission, err error) {
 	o := orm.NewOrm()
 	freezeStartDate := time.Now().Format(utils.FormatDate)
@@ -157,6 +198,9 @@ func CompanyTryOut(companyId, productId int) (companyReportPermissionList []*Com
 	o := orm.NewOrm()
 	startDate := time.Now().Format(utils.FormatDate)
 	endDate := time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+	if productId == utils.COMPANY_PRODUCT_RAI_ID {
+		endDate = time.Now().AddDate(0, 1, 0).Format(utils.FormatDate) // 权益客户试用期改为1个月。 需求池 1035
+	}
 
 	//客户产品 状态 变更
 	sql := `UPDATE company_product SET status='试用',start_date=?,end_date=?,modify_time=NOW(),try_out_time=NOW(),renewal_reason="",package_type=0,try_stage=1 WHERE company_id=? AND product_id=? `
@@ -437,12 +481,12 @@ func GetCompanyProductItemListByCompanyIdList(companyIdList []int, productId int
 // @param productId int
 // @return items []*CompanyProductItem
 // @return err error
-func GetCompanyProductItemByCompanyId(companyId int, productId int) (items *CompanyProductItem, err error) {
+func GetCompanyProductItemByCompanyId(companyId int, productId int) (item *CompanyProductItem, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT a.* FROM company_product as a 
          JOIN company b on a.company_id=b.company_id
          WHERE a.company_id = ? AND a.product_id = ? `
-	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	err = o.Raw(sql, companyId, productId).QueryRow(&item)
 
 	return
 }

+ 28 - 1
models/company_report_permission.go

@@ -23,6 +23,25 @@ type CompanyReportPermission struct {
 	ExpensiveYx               int       `description:"权益研选: 0-3w; 1-5w"`
 }
 
+// 客户授权产品结构体(包含产品名称)
+type CompanyReportPermissionAndName struct {
+	CompanyReportPermissionId int `description:"客户授权产品id"`
+	CompanyId                 int
+	ReportPermissionId        int
+	CreatedTime               time.Time
+	LastUpdatedTime           time.Time
+	ChartPermissionId         int
+	StartDate                 string    `description:"权限开始日期"`
+	EndDate                   string    `description:"权限结束日期"`
+	ProductId                 int       `description:"产品id"`
+	ProductName               string    `description:"产品名称"`
+	CompanyContractId         int       `description:"合同id"`
+	PermissionName            string    `description:"客户授权产品的名称"`
+	ClassifyName              string    `description:"客户授权产品的分类名称"`
+	Status                    string    `description:"'正式','试用','关闭'"`
+	ModifyTime                time.Time `description:"修改时间"`
+}
+
 // Update 更新客户产品权限
 func (item *CompanyReportPermission) Update(cols []string) (err error) {
 	o := orm.NewOrm()
@@ -54,7 +73,7 @@ func GetCompanyReportPermissionNeedTryOut(endDate string) (items []*CompanyRepor
 	o := orm.NewOrm()
 	sql := `SELECT *
           FROM company_report_permission
-			WHERE status='正式' AND end_date<=?`
+			WHERE status='正式' AND end_date<=? AND  product_id = 1 `
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
@@ -115,3 +134,11 @@ func GetCompanyReportPermissionByStatus(companyId, productId int, status string)
 	_, err = o.Raw(sql, companyId, productId, status).QueryRows(&items)
 	return
 }
+
+// 根据企业用户id和产品id获取所有正式的权限
+func GetCompanyProductReportPermissionList(companyId []int, productId int) (items []*CompanyReportPermissionAndName, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.*,b.permission_name,b.classify_name FROM company_report_permission a left join chart_permission b on a.chart_permission_id=b.chart_permission_id WHERE a.company_id IN (` + utils.GetOrmInReplace(len(companyId)) + `) and a.product_id=?   	AND a.status IN ('正式','试用','永续') `
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	return
+}

+ 7 - 0
models/cygx/activity_ask_email.go

@@ -16,3 +16,10 @@ func GetAskEmailList() (item []*AskEmailRep, err error) {
 	_, err = o.Raw(sql).QueryRows(&item)
 	return
 }
+
+func GetAskEmail() (item []*AskEmailRep, err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	sql := `SELECT * FROM cygx_activity_ask_email`
+	_, err = o.Raw(sql).QueryRows(&item)
+	return
+}

+ 45 - 31
models/db.go

@@ -32,47 +32,60 @@ func init() {
 	report_db, _ := orm.GetDB("rddp")
 	report_db.SetConnMaxLifetime(10 * time.Minute)
 
-	_ = orm.RegisterDataBase("edb", "mysql", utils.MYSQL_URL_EDB)
-	orm.SetMaxIdleConns("edb", 50)
-	orm.SetMaxOpenConns("edb", 100)
+	if utils.MYSQL_URL_EDB != "" {
+		_ = orm.RegisterDataBase("edb", "mysql", utils.MYSQL_URL_EDB)
+		orm.SetMaxIdleConns("edb", 50)
+		orm.SetMaxOpenConns("edb", 100)
 
-	edb_db, _ := orm.GetDB("edb")
-	edb_db.SetConnMaxLifetime(10 * time.Minute)
+		edb_db, _ := orm.GetDB("edb")
+		edb_db.SetConnMaxLifetime(10 * time.Minute)
 
-	_ = orm.RegisterDataBase("data", "mysql", utils.MYSQL_URL_DATA)
-	orm.SetMaxIdleConns("data", 50)
-	orm.SetMaxOpenConns("data", 100)
+	}
 
-	data_db, _ := orm.GetDB("data")
-	data_db.SetConnMaxLifetime(10 * time.Minute)
+	if utils.MYSQL_URL_DATA != "" {
+		_ = orm.RegisterDataBase("data", "mysql", utils.MYSQL_URL_DATA)
+		orm.SetMaxIdleConns("data", 50)
+		orm.SetMaxOpenConns("data", 100)
 
-	_ = orm.RegisterDataBase("gl", "mysql", utils.MYSQL_URL_GL)
-	orm.SetMaxIdleConns("gl", 50)
-	orm.SetMaxOpenConns("gl", 100)
+		data_db, _ := orm.GetDB("data")
+		data_db.SetConnMaxLifetime(10 * time.Minute)
+	}
 
-	gl, _ := orm.GetDB("gl")
-	gl.SetConnMaxLifetime(10 * time.Minute)
+	if utils.MYSQL_URL_GL != "" {
+		_ = orm.RegisterDataBase("gl", "mysql", utils.MYSQL_URL_GL)
+		orm.SetMaxIdleConns("gl", 50)
+		orm.SetMaxOpenConns("gl", 100)
 
-	_ = orm.RegisterDataBase("weekly_trial", "mysql", utils.MYSQL_URL_WEEKLY_TRIAL)
-	orm.SetMaxIdleConns("weekly_trial", 50)
-	orm.SetMaxOpenConns("weekly_trial", 100)
+		gl, _ := orm.GetDB("gl")
+		gl.SetConnMaxLifetime(10 * time.Minute)
+	}
 
-	trial_datadb, _ := orm.GetDB("weekly_trial")
-	trial_datadb.SetConnMaxLifetime(10 * time.Minute)
+	if utils.MYSQL_URL_WEEKLY_TRIAL != "" {
+		_ = orm.RegisterDataBase("weekly_trial", "mysql", utils.MYSQL_URL_WEEKLY_TRIAL)
+		orm.SetMaxIdleConns("weekly_trial", 50)
+		orm.SetMaxOpenConns("weekly_trial", 100)
 
-	_ = orm.RegisterDataBase("eta", "mysql", utils.MYSQL_URL_ETA)
-	orm.SetMaxIdleConns("eta", 50)
-	orm.SetMaxOpenConns("eta", 100)
+		trial_datadb, _ := orm.GetDB("weekly_trial")
+		trial_datadb.SetConnMaxLifetime(10 * time.Minute)
+	}
 
-	etaDb, _ := orm.GetDB("eta")
-	etaDb.SetConnMaxLifetime(10 * time.Minute)
+	if utils.MYSQL_URL_ETA != "" {
+		_ = orm.RegisterDataBase("eta", "mysql", utils.MYSQL_URL_ETA)
+		orm.SetMaxIdleConns("eta", 50)
+		orm.SetMaxOpenConns("eta", 100)
 
-	_ = orm.RegisterDataBase("hz_cygx", "mysql", utils.MYSQL_URL_CYGX)
-	orm.SetMaxIdleConns("hz_cygx", 50)
-	orm.SetMaxOpenConns("hz_cygx", 100)
+		etaDb, _ := orm.GetDB("eta")
+		etaDb.SetConnMaxLifetime(10 * time.Minute)
+	}
 
-	cygx_db, _ := orm.GetDB("hz_cygx")
-	cygx_db.SetConnMaxLifetime(10 * time.Minute)
+	if utils.MYSQL_URL_CYGX != "" {
+		_ = orm.RegisterDataBase("hz_cygx", "mysql", utils.MYSQL_URL_CYGX)
+		orm.SetMaxIdleConns("hz_cygx", 50)
+		orm.SetMaxOpenConns("hz_cygx", 100)
+
+		cygx_db, _ := orm.GetDB("hz_cygx")
+		cygx_db.SetConnMaxLifetime(10 * time.Minute)
+	}
 
 	orm.Debug = true
 	orm.DebugLog = orm.NewLog(utils.Binlog)
@@ -88,6 +101,8 @@ func init() {
 		new(ReportSendThsDetail),
 		new(Report),
 		new(UserViewStatistics),
+		new(roadshow.RsReportRecord),           //路演记录
+		new(roadshow.RsReportRecordPermission), //路演公司权限记录
 		new(CompanyReportRecord),
 		new(ChartPermission), // 权限表
 		new(ComeinWhiteUser), // 进门财经白名单
@@ -265,6 +280,5 @@ func initRoadShow() {
 		new(roadshow.RsCalendarResearcher), //路演研究员信息表
 		new(roadshow.RsMatters),            //公开会议表
 		new(roadshow.RsCalendarRelation),   //路演关系表(与上海的路演日历关系)
-		new(roadshow.RsReportRecord),       //路演统计表
 	)
 }

+ 41 - 45
models/eta_trial.go

@@ -1,48 +1,44 @@
 package models
 
-import (
-	"github.com/beego/beego/v2/client/orm"
-	"hongze/hongze_task/utils"
-)
+//
+//type ETATrialListRespItem struct {
+//	EtaTrialId     int    `orm:"column(eta_trial_id);pk" description:"eta试用客户id"`
+//	UserName       string `description:"客户名称"`
+//	CompanyName    string `description:"客户公司姓名"`
+//	Position       string `description:"职位"`
+//	Mobile         string `description:"手机号"`
+//	ActiveTime     string `description:"累计活跃时长"`
+//	LastLoginTime  string `description:"最后一次登陆时间"`
+//	SellerId       int    `description:"销售id"`
+//	Seller         string `description:"销售员名称"`
+//	InterestModule string `description:"感兴趣模块"`
+//	Expiration     int    `description:"账号到期时长"`
+//	Enabled        int    `description:"1:有效,0:禁用"`
+//	IndexNum       int    `description:"累计添加指标"`
+//	ChartNum       int    `description:"累计添加图表"`
+//	Password       string
+//	Account        string
+//	CreateTime     string
+//	ModifyTime     string
+//}
 
-type ETATrialListRespItem struct {
-	EtaTrialId     int    `orm:"column(eta_trial_id);pk" description:"eta试用客户id"`
-	UserName       string `description:"客户名称"`
-	CompanyName    string `description:"客户公司姓名"`
-	Position       string `description:"职位"`
-	Mobile         string `description:"手机号"`
-	ActiveTime     string `description:"累计活跃时长"`
-	LastLoginTime  string `description:"最后一次登陆时间"`
-	SellerId       int    `description:"销售id"`
-	Seller         string `description:"销售员名称"`
-	InterestModule string `description:"感兴趣模块"`
-	Expiration     int    `description:"账号到期时长"`
-	Enabled        int    `description:"1:有效,0:禁用"`
-	IndexNum       int    `description:"累计添加指标"`
-	ChartNum       int    `description:"累计添加图表"`
-	Password       string
-	Account        string
-	CreateTime     string
-	ModifyTime     string
-}
-
-func GetETATrialDisableList(endDate string) (items []*ETATrialListRespItem, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT * FROM eta_trial WHERE modify_time < '`+endDate+`'  `
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}
-
-func UpdateETATrialDisable(disableIds []int) (err error) {
-	o := orm.NewOrm()
-	sql := `UPDATE eta_trial SET enabled = 0 WHERE eta_trial_id IN (` + utils.GetOrmInReplace(len(disableIds)) + `) `
-	_, err = o.Raw(sql, disableIds, ).Exec()
-	return
-}
-
-func UpdateETATrialAdminDisable(disableMobiles []string) (err error) {
-	o := orm.NewOrmUsingDB("weekly_trial")
-	sql := `UPDATE admin SET enabled = 0 WHERE mobile IN  (` + utils.GetOrmInReplace(len(disableMobiles)) + `) `
-	_, err = o.Raw(sql,disableMobiles).Exec()
-	return
-}
+//func GetETATrialDisableList(endDate string) (items []*ETATrialListRespItem, err error) {
+//	o := orm.NewOrm()
+//	sql := `SELECT * FROM eta_trial WHERE modify_time < '`+endDate+`'  `
+//	_, err = o.Raw(sql).QueryRows(&items)
+//	return
+//}
+//
+//func UpdateETATrialDisable(disableIds []int) (err error) {
+//	o := orm.NewOrm()
+//	sql := `UPDATE eta_trial SET enabled = 0 WHERE eta_trial_id IN (` + utils.GetOrmInReplace(len(disableIds)) + `) `
+//	_, err = o.Raw(sql, disableIds, ).Exec()
+//	return
+//}
+//
+//func UpdateETATrialAdminDisable(disableMobiles []string) (err error) {
+//	o := orm.NewOrmUsingDB("weekly_trial")
+//	sql := `UPDATE admin SET enabled = 0 WHERE mobile IN  (` + utils.GetOrmInReplace(len(disableMobiles)) + `) `
+//	_, err = o.Raw(sql,disableMobiles).Exec()
+//	return
+//}

+ 35 - 0
models/roadshow/calendar.go

@@ -206,3 +206,38 @@ func UpdateRsCalendar(where, updateParams map[string]interface{}) error {
 	_, err := qs.Update(updateParams)
 	return err
 }
+
+type CalendarTesearcherQuestionTips struct {
+	CompanyName            string
+	OpenId                 string
+	RsCalendarId           int
+	RsCalendarResearcherId int
+}
+
+func GetCalendarTesearcherQuestionTips(endTime string) (list []*CalendarTesearcherQuestionTips, err error) {
+	sql := `
+select a.rs_calendar_id,a.rs_calendar_researcher_id,c.company_name,b.open_id 
+from rs_calendar_researcher as a
+inner join admin as b on a.researcher_id=b.admin_id
+inner join rs_calendar as c on a.rs_calendar_id=c.rs_calendar_id
+where 
+a.question_status=0
+and a.status in(2,6)
+and a.question_msg_status=0
+and CONCAT(a.end_date,' ',a.end_time) <= ?
+and b.open_id<>''
+and c.activity_type='路演'
+and c.roadshow_type<>''
+group by a.researcher_id,b.open_id
+`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, endTime).QueryRows(&list)
+	return
+}
+
+func ModifyRsCalendarResearcherQuestionMsgStatus(rsCalendarResearcher_id int) (err error) {
+	sql := ` UPDATE rs_calendar_researcher SET question_msg_status=1,modify_time=NOW() WHERE rs_calendar_researcher_id=? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, rsCalendarResearcher_id).Exec()
+	return
+}

+ 25 - 7
models/roadshow/report.go

@@ -1,8 +1,8 @@
 package roadshow
 
 import (
-	"time"
 	"github.com/beego/beego/v2/client/orm"
+	"time"
 )
 
 type RsReportRecord struct {
@@ -11,6 +11,7 @@ type RsReportRecord struct {
 	CompanyName                string    `description:"客户名称"`
 	CreditCode                 string    `description:"社会统一信用码"`
 	CompanyStatus              string    `description:"客户状态:'试用','永续','冻结','流失','正式','潜在'"`
+	PermissionName             string    `description:"开通品种"`
 	ResearcherId               int       `description:"研究员id"`
 	ResearcherName             string    `description:"研究员名称"`
 	ResearcherGroupId          int       `description:"研究员分组id"`
@@ -32,6 +33,8 @@ type RsReportRecord struct {
 	ModifyTime                 time.Time `description:"记录修改时间"`
 	ActivityType               string    `description:"活动类型"`
 	RoadshowType               string    `description:"路演形式"`
+	InteractionNum             int       `description:"当时用户总的互动量"`
+	QuestionStatus             int       `description:"问答状态:0-未填写;1-已填写"`
 }
 
 func AddRsReportRecord(item *RsReportRecord) (lastId int64, err error) {
@@ -77,23 +80,27 @@ type RsCalendarResearcherView struct {
 	ApproveTime            time.Time `description:"接受时间"`
 	IsSynced               int       `description:"是否与上海同步 0:未同步 1:已同步"`
 	ResearcherSort         int       `description:"研究员新增排序"`
+	QuestionStatus         int       `description:"问答状态:0-未填写;1-已填写"`
+	EnglishCompany         int       `description:"是否为英文客户: 0-否; 1-是"`
+	CompanyStatus          string    `description:"客户状态:'试用','永续','冻结','流失','正式','潜在'"`
 }
 
 func GetRsCalendarDetail(endDate string) (list []*RsCalendarResearcherView, err error) {
 	sql := ` SELECT * FROM  rs_calendar AS a
 			INNER JOIN rs_calendar_researcher AS b ON a.rs_calendar_id=b.rs_calendar_id
-			WHERE a.source=0 AND b.end_date>=? `
+			WHERE  b.end_date>=? `
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, endDate).QueryRows(&list)
 	return
 }
 
 type CompanySearchView struct {
-	CompanyId   int    `orm:"column(company_id);pk"`
-	CompanyName string `description:"客户名称"`
-	CreditCode  string `description:"社会统一信用码"`
-	CompanyCode string `description:"客户编码"`
-	Status      string `description:"客户状态"`
+	CompanyId      int    `orm:"column(company_id);pk"`
+	CompanyName    string `description:"客户名称"`
+	CreditCode     string `description:"社会统一信用码"`
+	CompanyCode    string `description:"客户编码"`
+	Status         string `description:"客户状态"`
+	PermissionName string `description:"开通品种"`
 }
 
 func RsCompanyList() (list []*CompanySearchView, err error) {
@@ -106,6 +113,17 @@ func RsCompanyList() (list []*CompanySearchView, err error) {
 	return
 }
 
+// 权益客户
+func RsCompanyListRai() (list []*CompanySearchView, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT b.company_id,b.company_name,a.credit_code,b.status FROM company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE  b.product_id=2 `
+	sql += ` GROUP BY b.company_id  `
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
 func GetExistRsReportRecord(endDate string) (list []*RsReportRecord, err error) {
 	sql := ` SELECT * FROM  rs_report_record
 			WHERE end_date>=? `

+ 47 - 0
models/roadshow/report_record_permission.go

@@ -0,0 +1,47 @@
+package roadshow
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+type RsReportRecordPermission struct {
+	RsReportRecordPermissionId int64     `orm:"column(rs_report_record_permission_id);pk"`
+	CompanyId                  int       `description:"公司id"`
+	ProductId                  int       `description:"产品id"`
+	ProductName                string    `description:"产品名称"`
+	ReportPermissionId         int       `description:"权限id(作废)"`
+	Status                     string    `description:"状态"`
+	CreatedTime                time.Time `description:"创建时间"`
+	ChartPermissionId          int       `description:"大分类ID"`
+	StartDate                  string    `description:"合同开始日期"`
+	EndDate                    string    `description:"合同结束日期"`
+	ModifyTime                 string    `description:"更新时间"`
+	IsUpgrade                  int       `description:"是否升级,1是,0否"`
+	ExpensiveYx                int       `description:"权益研选: 0-3w; 1-5w"`
+	RsCalendarId               int       `description:"路演活动id"`
+}
+
+// 根据企业用户id和产品id获取所有正式的权限
+func GetCompanyProductReportPermissionList(companyId []int, productId int) (items []*RsReportRecordPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company_report_permission  WHERE company_id IN (` + utils.GetOrmInReplace(len(companyId)) + `) and product_id=?  `
+	_, err = o.Raw(sql, companyId, productId).QueryRows(&items)
+	return
+}
+
+// 根据路演ID获取已经存在的路演信息
+func GetCompanyProductReportPermissionrsCalendarIdList(rsCalendarId []int) (items []*RsReportRecordPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT rs_calendar_id FROM rs_report_record_permission  WHERE  rs_calendar_id IN (` + utils.GetOrmInReplace(len(rsCalendarId)) + `) `
+	_, err = o.Raw(sql, rsCalendarId).QueryRows(&items)
+	return
+}
+
+func MultiRsReportRecordPermission(items []*RsReportRecordPermission) (err error) {
+	o := orm.NewOrm()
+	//批量插入
+	_, err = o.InsertMulti(len(items), items)
+	return
+}

+ 54 - 0
services/calendar_researcher_question.go

@@ -0,0 +1,54 @@
+package services
+
+import (
+	"context"
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_task/models/roadshow"
+	"hongze/hongze_task/utils"
+	"strconv"
+	"time"
+)
+
+func SendCalendarResearcherQuestionTips(cont context.Context) (err error) {
+	utils.FileLog.Info("start SendCalendarResearcherQuestionTips")
+	endTime := time.Now().Add(-2 * time.Second).Format(utils.FormatDateTime)
+	list, err := roadshow.GetCalendarTesearcherQuestionTips(endTime)
+	if err != nil {
+		fmt.Println("SendCalendarResearcherQuestionTips Err:" + err.Error())
+		utils.FileLog.Info("GetCalendarTesearcherQuestionTips Err:" + err.Error())
+		return
+	}
+
+	for _, v := range list {
+		redirectUrl := `/pages-approve/activity/detail?RsCalendarResearcherId=`
+		var openIdArr []string
+		openIdArr = append(openIdArr, v.OpenId)
+
+		keyword1 := v.CompanyName + "路演已结束,请及时填写客户回答"
+		//redirectUrl = fmt.Sprintf(redirectUrl, strconv.Itoa(v.RsCalendarResearcherId), strconv.Itoa(v.RsCalendarId))
+		redirectUrl = redirectUrl + strconv.Itoa(v.RsCalendarResearcherId) + "&RsCalendarId=" + strconv.Itoa(v.RsCalendarId)
+		sendInfo := new(SendWxTemplate)
+		sendInfo.WxAppId = utils.AdminWxAppId
+		sendInfo.Keyword1 = keyword1
+		sendInfo.Keyword2 = "待填写"
+		sendInfo.RedirectUrl = redirectUrl
+		sendInfo.RedirectTarget = 2
+		sendInfo.TemplateId = "rciDm9ThigRBGi1SZ4TFd74XA4aoAxSz_ugdv_tZ450"
+		sendInfo.Remark = time.Now().Format(utils.FormatDateTime)
+		sendInfo.OpenIdArr = openIdArr
+		err = SendTemplateMsgV2(sendInfo)
+		if err != nil {
+			utils.FileLog.Info("GetCalendarTesearcherQuestionTips SendTemplateMsgV2 Err:" + err.Error())
+			return
+		}
+		param, err := json.Marshal(sendInfo)
+		utils.FileLog.Info("SendTemplateMsgV2 success:" + string(param))
+		err = roadshow.ModifyRsCalendarResearcherQuestionMsgStatus(v.RsCalendarResearcherId)
+		if err != nil {
+			utils.FileLog.Info("ModifyRsCalendarResearcherQuestionMsgStatus Err:" + err.Error())
+		}
+	}
+	utils.FileLog.Info("end SendCalendarResearcherQuestionTips")
+	return
+}

+ 66 - 12
services/company_product.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"hongze/hongze_task/models"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/services/company"
 	"hongze/hongze_task/services/cygx"
 	"hongze/hongze_task/utils"
@@ -122,10 +123,10 @@ func CompanyTryOut(cont context.Context) (err error) {
 		}
 		fmt.Println(k, v.CompanyId)
 
-		// 更新专项调研点数,需要在状态变更之前
-		if v.ProductId == 2 {
-			cygx.ActivitySpecialCompanyTryOutReduce(v.CompanyId)
-		}
+		//// 更新专项调研点数,需要在状态变更之前
+		//if v.ProductId == 2 {
+		//	cygx.ActivitySpecialCompanyTryOutReduce(v.CompanyId)
+		//}
 		//客户正式转试用
 		companyReportPermissionList, err := models.CompanyTryOut(v.CompanyId, v.ProductId)
 		if err != nil {
@@ -146,10 +147,10 @@ func CompanyTryOut(cont context.Context) (err error) {
 			}
 		}
 
-		{
-			//正式转试用,删除不续约归因内容
-			company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
-		}
+		//{
+		//	//正式转试用,删除不续约归因内容
+		//	company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
+		//}
 
 		//正式转试用定时任务更新研选扣点
 		if v.ProductId == 2 {
@@ -816,10 +817,10 @@ func CompanyTryOutXClassRai(cont context.Context) (err error) {
 			}
 		}
 
-		{
-			//正式转试用,删除不续约归因内容
-			company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
-		}
+		//{
+		//	//正式转试用,删除不续约归因内容
+		//	company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
+		//}
 
 		//正式转试用定时任务更新研选扣点
 		{
@@ -876,3 +877,56 @@ func CompanyFreezeXClassRai(cont context.Context) (err error) {
 	}
 	return
 }
+
+// 权益客户部正式转冻结
+func CompanyFreezeRai(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("权益客户部正式转冻结失败:"+err.Error(), 2)
+		}
+	}()
+	endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	items, err := models.GetCompanyNeedFreezeRai(endDate)
+	if err != nil {
+		fmt.Println("GetCompanyNeedFreezeRai Err:" + err.Error())
+		utils.FileLog.Info("GetCompanyNeedFreezeRai Err:%s" + err.Error())
+		return
+	}
+	for k, v := range items {
+		fmt.Println(k, v.CompanyId)
+		// 更新专项调研点数,需要在状态变更之前
+		if v.ProductId == 2 {
+			cygx.ActivitySpecialCompanyTryOutReduce(v.CompanyId)
+		}
+		//正式转冻结
+		companyReportPermissionList, err := models.CompanyFreezeRai(v.CompanyId, v.ProductId)
+		if err != nil {
+			utils.FileLog.Info("CompanyFreezeRai Err:%s" + err.Error())
+			return err
+		}
+		//新增操作记录
+		{
+			remark := "正式转冻结"
+			operation := "freeze"
+			approveContent := ""
+			go AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
+				v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
+
+			//新增 客户产品权限 正式 转 冻结 的日志
+			for _, v := range companyReportPermissionList {
+				_ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, remark, operation, v.Status)
+			}
+		}
+
+		{
+			//正式转试用,删除不续约归因内容
+			company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
+		}
+
+		//正式转试用定时任务更新研选扣点
+		if v.ProductId == 2 {
+			cygx.YanXuanCompanyCompanyTryOut(v.CompanyId)
+		}
+	}
+	return
+}

+ 2 - 9
services/eta_trial.go

@@ -1,14 +1,6 @@
 package services
 
-import (
-	"context"
-	"fmt"
-	"hongze/hongze_task/models"
-	"hongze/hongze_task/utils"
-	"time"
-)
-
-//ETA试用客户 启用->禁用
+/*//ETA试用客户 启用->禁用
 func ETATrialDisabled(cont context.Context) (err error) {
 	defer func() {
 		if err != nil {
@@ -46,3 +38,4 @@ func ETATrialDisabled(cont context.Context) (err error) {
 
 	return
 }
+*/

+ 173 - 5
services/roadshow/report.go

@@ -1,14 +1,16 @@
 package roadshow
 
 import (
+	"context"
 	"errors"
 	"fmt"
 	"hongze/hongze_task/models"
+	"hongze/hongze_task/models/cygx"
 	"hongze/hongze_task/models/roadshow"
 	"hongze/hongze_task/utils"
 	"strconv"
+	"strings"
 	"time"
-	"context"
 )
 
 func AddReportRecord(cont context.Context) (err error) {
@@ -17,44 +19,176 @@ func AddReportRecord(cont context.Context) (err error) {
 			fmt.Println("AddReportRecord Err:" + err.Error())
 		}
 	}()
-
 	adminAll, err := models.GetAdminList()
 	if err != nil {
 		return
 	}
 	adminMap := make(map[int]*models.AdminView)
+	mapRaiSllerId := make(map[int]bool) // 是否为权益销售
 	for _, v := range adminAll {
 		adminMap[v.AdminId] = v
+		if v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP || v.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
+			mapRaiSllerId[v.AdminId] = true
+		}
+	}
+
+	listEmail, err := cygx.GetAskEmail() //权益研究员姓名
+	if err != nil {
+		return
+	}
+	mapResearcherNameRai := make(map[string]bool)
+	for _, v := range listEmail {
+		mapResearcherNameRai[v.Name] = true
 	}
 
 	companyList, err := roadshow.RsCompanyList()
 	if err != nil {
 		return
 	}
+
+	companyListRai, err := roadshow.RsCompanyListRai() //权益客户信息
+	if err != nil {
+		return
+	}
 	companyMap := make(map[int]*roadshow.CompanySearchView)
+	companyMapRai := make(map[int]*roadshow.CompanySearchView)
 	for _, v := range companyList {
 		companyMap[v.CompanyId] = v
 	}
 
-	endDate := time.Now().AddDate(-1, 0, 0).Format(utils.FormatDate)
+	for _, v := range companyListRai {
+		companyMapRai[v.CompanyId] = v
+	}
+
+	endDate := time.Now().AddDate(-0, 0, -3).Format(utils.FormatDate)
 
 	existList, err := roadshow.GetExistRsReportRecord(endDate)
 	if err != nil {
 		return
 	}
 	existMap := make(map[string]*roadshow.RsReportRecord)
+
 	for _, v := range existList {
 		key := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(v.RsCalendarResearcherId)
 		existMap[key] = v
 	}
+	mapInteractionNum := make(map[int]int)
+	mapPermissionNameFicc := make(map[int][]string)
+	mapPermissionNameRai := make(map[int][]string)
+	mapPermissionFicc := make(map[int][]*roadshow.RsReportRecordPermission)
+	mapPermissionRai := make(map[int][]*roadshow.RsReportRecordPermission)
+
+	var itemsRs []*roadshow.RsReportRecordPermission
 	list, err := roadshow.GetRsCalendarDetail(endDate)
 	if err != nil {
 		return
 	}
+	var companyIds []int
 	for _, v := range list {
+		if v.CompanyId > 0 {
+			companyIds = append(companyIds, v.CompanyId)
+		}
+	}
+	if len(companyIds) > 0 {
+		listPermissionNameFicc, errFicc := models.GetCompanyProductReportPermissionList(companyIds, 1) // FICC权限信息
+		if errFicc != nil {
+			err = errFicc
+			return
+		}
+		mapPermissionArrFicc := make(map[string]bool)
+		for _, v := range listPermissionNameFicc {
+			if companyMap[v.CompanyId] == nil {
+				continue
+			}
+			if mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
+				continue
+			}
+			if companyMap[v.CompanyId].Status == "正式" && v.Status != "正式" {
+				continue // 正式客户只统计正式权限
+			}
+			mapPermissionNameFicc[v.CompanyId] = append(mapPermissionNameFicc[v.CompanyId], v.PermissionName)
+			mapPermissionArrFicc[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
+		}
+
+		listPermissionNameRai, errRai := models.GetCompanyProductReportPermissionList(companyIds, 2) // 权益权限信息
+		if errRai != nil {
+			err = errRai
+			return
+		}
+
+		mapPermissionArrRai := make(map[string]bool)
+		for _, v := range listPermissionNameRai {
+			if companyMapRai[v.CompanyId] == nil {
+				continue
+			}
+			if mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] || v.PermissionName == "" {
+				continue
+			}
+			if companyMapRai[v.CompanyId].Status == "正式" && v.Status != "正式" {
+				continue // 正式客户只统计正式权限
+			}
+			mapPermissionNameRai[v.CompanyId] = append(mapPermissionNameRai[v.CompanyId], v.PermissionName)
+			mapPermissionArrRai[fmt.Sprint(v.CompanyId, v.PermissionName)] = true
+		}
+
+		listPermissionFicc, errFicc := roadshow.GetCompanyProductReportPermissionList(companyIds, 1) // FICC权限信息
+		if errFicc != nil {
+			err = errFicc
+			return
+		}
+		for _, v := range listPermissionFicc {
+			if companyMap[v.CompanyId] == nil {
+				continue
+			}
+			mapPermissionFicc[v.CompanyId] = append(mapPermissionFicc[v.CompanyId], v)
+		}
+
+		listPermissionRai, errRai := roadshow.GetCompanyProductReportPermissionList(companyIds, 2) // 权益权限信息
+		if errRai != nil {
+			err = errRai
+			return
+		}
+		for _, v := range listPermissionRai {
+			if companyMapRai[v.CompanyId] == nil {
+				continue
+			}
+			mapPermissionRai[v.CompanyId] = append(mapPermissionRai[v.CompanyId], v)
+		}
+		listerrCompanyInteractionNum, errCompany := models.GetCompanyListByCompanyId(companyIds) // 权益客户互动信息
+		if errCompany != nil {
+			err = errCompany
+			return
+		}
+		for _, v := range listerrCompanyInteractionNum {
+			mapInteractionNum[v.CompanyId] = v.InteractionNum
+		}
+
+	}
+
+	mapRsReportRecordPermission := make(map[string]bool) // 一个公司的一场路演,添加了多个研究员只记录一次
+	for _, v := range list {
+		if mapResearcherNameRai[v.ResearcherName] && v.CompanyName == "" && v.Source == 1 && v.ActivityType == "路演" {
+			continue // 如果权益研究员的而且公司名称为空,而且是上海那边同步过来的路演就不做记录
+		}
 		company := new(roadshow.CompanySearchView)
 		if v.CompanyId > 0 {
-			company, _ = companyMap[v.CompanyId]
+			if v.EnglishCompany == 1 { //如果是海外客户公司信息就直接拿存在海外的客户数据
+				company.CompanyId = v.CompanyId
+				company.CompanyName = v.CompanyName
+				company.Status = v.CompanyStatus
+			} else {
+				if mapRaiSllerId[v.SysUserId] {
+					company, _ = companyMapRai[v.CompanyId] // 如果是权益销售添加的信息,就用权益相关的客户信息
+					if len(mapPermissionNameRai[v.CompanyId]) > 0 {
+						company.PermissionName = strings.Join(mapPermissionNameRai[v.CompanyId], "/")
+					}
+				} else {
+					company, _ = companyMap[v.CompanyId]
+					if len(mapPermissionNameFicc[v.CompanyId]) > 0 {
+						company.PermissionName = strings.Join(mapPermissionNameFicc[v.CompanyId], "/")
+					}
+				}
+			}
 		}
 
 		researcher, ok := adminMap[v.ResearcherId]
@@ -81,7 +215,8 @@ func AddReportRecord(cont context.Context) (err error) {
 				reportUpdateParams["company_id"] = company.CompanyId
 				reportUpdateParams["company_name"] = company.CompanyName
 				reportUpdateParams["credit_code"] = company.CreditCode
-				reportUpdateParams["company_status"] = company.Status
+				reportUpdateParams["company_status"] = company.Status //记录当时的状态
+				reportUpdateParams["permission_name"] = company.PermissionName
 			}
 			reportUpdateParams["activity_type"] = v.ActivityType
 			if researcher != nil {
@@ -116,6 +251,7 @@ func AddReportRecord(cont context.Context) (err error) {
 			reportUpdateParams["rs_calendar_researcher_status"] = v.Status
 			reportUpdateParams["activity_type"] = v.ActivityType
 			reportUpdateParams["roadshow_type"] = v.RoadshowType
+			reportUpdateParams["question_status"] = v.QuestionStatus
 			reportUpdateParams["modify_time"] = time.Now()
 			err = roadshow.UpdateRsReportRecord(reportWhereParams, reportUpdateParams)
 		} else { //新增
@@ -125,6 +261,7 @@ func AddReportRecord(cont context.Context) (err error) {
 				item.CompanyName = company.CompanyName
 				item.CreditCode = company.CreditCode
 				item.CompanyStatus = company.Status
+				item.PermissionName = company.PermissionName
 			}
 			item.ActivityType = v.ActivityType
 			item.ResearcherId = v.ResearcherId
@@ -161,10 +298,41 @@ func AddReportRecord(cont context.Context) (err error) {
 			item.ModifyTime = time.Now()
 			item.RsCalendarResearcherStatus = v.Status
 			item.RoadshowType = v.RoadshowType
+			item.QuestionStatus = v.QuestionStatus
+			item.InteractionNum = mapInteractionNum[v.CompanyId]
 			_, err = roadshow.AddRsReportRecord(item)
 			if err != nil {
 				return
 			}
+
+			if mapRaiSllerId[v.SysUserId] {
+				for _, vP := range mapPermissionRai[v.CompanyId] {
+					pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
+					if mapRsReportRecordPermission[pKey] {
+						continue
+					}
+					vP.CreatedTime = time.Now()
+					vP.ModifyTime = time.Now().Format(utils.FormatDateTime)
+					vP.RsCalendarId = v.RsCalendarId
+					itemsRs = append(itemsRs, vP)
+					mapRsReportRecordPermission[pKey] = true
+				}
+			} else {
+				for _, vP := range mapPermissionFicc[v.CompanyId] {
+					pKey := strconv.Itoa(v.RsCalendarId) + "_" + strconv.Itoa(vP.ChartPermissionId)
+					if mapRsReportRecordPermission[pKey] {
+						continue
+					}
+					vP.CreatedTime = time.Now()
+					vP.ModifyTime = time.Now().Format(utils.FormatDateTime)
+					vP.RsCalendarId = v.RsCalendarId
+					itemsRs = append(itemsRs, vP)
+					mapRsReportRecordPermission[pKey] = true
+				}
+			}
+		}
+		if len(itemsRs) > 0 {
+			err = roadshow.MultiRsReportRecordPermission(itemsRs) // 添加公司当时对应的权限信息
 		}
 	}
 	return err

+ 12 - 4
services/task.go

@@ -58,6 +58,10 @@ func Task() {
 	companyTryOut := task.NewTask("companyTryOut", "0 5 2 * * *", CompanyTryOut)
 	task.AddTask("正式->试用", companyTryOut)
 
+	//权益正式->冻结
+	companyFreezeRai := task.NewTask("companyFreezeRai", "0 5 2 * * *", CompanyFreezeRai)
+	task.AddTask("正式->冻结", companyFreezeRai)
+
 	// 每日续约异常客户信息处理(涉及到需要统计当天未续约的,所以需要等正式转试用完成后执行)
 	handleCompanyRenewalRecord := task.NewTask("handleCompanyContract", "0 10 2 * * *", company_contract.HandleCompanyRenewalRecordV2)
 	task.AddTask("每日续约异常客户信息处理", handleCompanyRenewalRecord)
@@ -120,7 +124,7 @@ func Task() {
 	modifyRsCalendarStatus := task.NewTask("modifyRsCalendarStatus", "0 */1 * * * * ", roadshow.ModifyRsCalendarResearcherStatus)
 	task.AddTask("modifyRsCalendarStatus", modifyRsCalendarStatus)
 
-	addReportRecord := task.NewTask("addReportRecord", "0 0 */1 * * *", roadshow.AddReportRecord)
+	addReportRecord := task.NewTask("addReportRecord", "0 */10 * * * *", roadshow.AddReportRecord)
 	task.AddTask("addReportRecord", addReportRecord)
 
 	//ficc存量客户数据统计
@@ -175,9 +179,9 @@ func Task() {
 	cygxLastWeekSummary := task.NewTask("CygxLastWeekSummary", "0 0 10 * * 2", CygxLastWeekSummary)
 	task.AddTask("定时生成上周纪要汇总", cygxLastWeekSummary)
 
-	//ETA试用客户 启用->禁用
-	eTATrialDisabled := task.NewTask("eTATrialDisabled", "0 15 2 * * *", ETATrialDisabled)
-	task.AddTask("ETA试用客户 启用->禁用", eTATrialDisabled)
+	////ETA试用客户 启用->禁用
+	//eTATrialDisabled := task.NewTask("eTATrialDisabled", "0 15 2 * * *", ETATrialDisabled)
+	//task.AddTask("ETA试用客户 启用->禁用", eTATrialDisabled)
 
 	//英文研报客户 临时->终止
 	englishReportEmailTermination := task.NewTask("englishReportEmailTermination", "0 30 2 * * *", EnglishReportEmailTermination)
@@ -199,6 +203,10 @@ func Task() {
 	fixCompanyOverseasStatus := task.NewTask("fixCompanyOverseasStatus", "0 */5 * * * *", overseas_custom.FixCompanyOverseasStatus)
 	task.AddTask("同步客户状态", fixCompanyOverseasStatus)
 
+	//路演问答填写提示
+	sendCalendarResearcherQuestionTips := task.NewTask("sendCalendarResearcherQuestionTips", "0 */1 * * * *", SendCalendarResearcherQuestionTips)
+	task.AddTask("sendCalendarResearcherQuestionTips", sendCalendarResearcherQuestionTips)
+
 	task.StartTask()
 
 	fmt.Println("task end")

+ 1 - 1
services/wx_template_msg.go

@@ -324,7 +324,7 @@ func SendYbQuestionToResearcher(questionId, adminId int, openid, questionTitle,
 	//sendMap := make(map[string]interface{})
 	//sendData := make(map[string]interface{})
 
-	first := "您好,有新的提问待回复"
+	first := time.Now().Format(utils.FormatDate) + ": 您好,有新的提问待回复"
 	keyword1 := questionTitle
 	keyword2 := "待回复"
 	if remark == "" {

+ 1 - 1
services/yb_community_question.go

@@ -85,7 +85,7 @@ func NotifyNeedAnswerQuestionToResearch(ctx context.Context) (err error) {
 				continue
 			}
 			// 发送模版消息给研究员
-			if e := SendYbQuestionToResearcher(item.CommunityQuestionId, adminInfo.AdminId, adminInfo.OpenId, item.QuestionContent, ""); e != nil {
+			if err = SendYbQuestionToResearcher(item.CommunityQuestionId, adminInfo.AdminId, adminInfo.OpenId, item.QuestionContent, ""); err != nil {
 				errmsg += fmt.Sprintf("发送失败,推送模板消息失败 研究员id:%d, 提问id:%d\n", item.ReplierAdminId, item.CommunityQuestionId)
 				return
 			}

+ 9 - 3
utils/config.go

@@ -179,9 +179,7 @@ ZwIDAQAB
 
 	WxYbAppId = "wxb059c872d79b9967" //弘则研报小程序
 
-	//内部员工公众号(弘则部门)
-	AdminWxAppId = "wx1392111da5426e9e"
-	AdminWxAppSecret = "30eceb7cf29bf2f046031155ab55d7b4"
+	
 
 	if RunMode == "release" {
 		CompanyId = 16
@@ -205,6 +203,10 @@ ZwIDAQAB
 		SendWxTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_template_msg"
 		YbCommonTemplateId = "dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0"
 		WxMsgTemplateIdWithYbCommunityQuestion = "rciDm9ThigRBGi1SZ4TFd74XA4aoAxSz_ugdv_tZ450" // 研报小程序->问答社区回复通知
+		
+		//内部员工公众号(弘则部门)
+		AdminWxAppId = "wx1392111da5426e9e"
+		AdminWxAppSecret = "30eceb7cf29bf2f046031155ab55d7b4"
 	} else {
 		CompanyId = 16
 		RealName = "超级管理员"
@@ -227,6 +229,10 @@ ZwIDAQAB
 		SendWxTemplateMsgUrl = "http://127.0.0.1:8086/v1/wechat/send_template_msg"
 		YbCommonTemplateId = "CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM"
 		WxMsgTemplateIdWithYbCommunityQuestion = "rciDm9ThigRBGi1SZ4TFd74XA4aoAxSz_ugdv_tZ450" // 研报小程序->问答社区回复通知
+
+		//测试内部员工公众号(弘则科技)
+    	AdminWxAppId = "wxe0d0a4d892da28a3"
+    	AdminWxAppSecret = "b88ac96aef1852fa0b8902c321ed4bf8"
 	}
 
 	// 微信模版消息

+ 7 - 0
utils/constants.go

@@ -252,3 +252,10 @@ const (
 	CACHE_SYNC_DEPARTMENT = "hz_crm_eta:sync_department" // 同步部门的缓存队列key
 	CACHE_SYNC_GROUP      = "hz_crm_eta:sync_group"      // 同步分组的缓存队列key
 )
+
+const (
+	COMPANY_PRODUCT_FICC_ID   = 1
+	COMPANY_PRODUCT_FICC_NAME = "ficc"
+	COMPANY_PRODUCT_RAI_ID    = 2
+	COMPANY_PRODUCT_RAI_NAME  = "权益"
+)