Browse Source

Merge branch 'master' into yb/6.0

hsun 2 years ago
parent
commit
a4f06c7a99

+ 9 - 2
models/company.go

@@ -41,6 +41,13 @@ func GetCompanyByName(companyName string) (item *Company, err error) {
 	return
 }
 
+func GetCompanyById(companyId int) (item *Company, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company WHERE company_id=? `
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}
+
 func GetCompanyCountByCreditCode(CreditCode string) (count int, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT COUNT(1) AS count FROM company WHERE credit_code=? `
@@ -125,9 +132,9 @@ func ModifyCompanyCreditCode(companyId int, creditCode string) (err error) {
 	return
 }
 
-func ModifyCompanyIndustry(industryId,companyId int, industryName string) (err error) {
+func ModifyCompanyIndustry(industryId, companyId int, industryName string) (err error) {
 	o := orm.NewOrm()
 	sql := `UPDATE company_product SET industry_id=?,industry_name=? WHERE company_id=? AND product_id=1 AND industry_id=0 `
-	_, err = o.Raw(sql, industryId,industryName, companyId).Exec()
+	_, err = o.Raw(sql, industryId, industryName, companyId).Exec()
 	return
 }

+ 8 - 0
models/company_product.go

@@ -176,8 +176,16 @@ type CompanyProduct struct {
 	LossTime         time.Time `description:"流失时间"`
 	CompanyType      string    `description:"客户类型"`
 	OpenCode         string    `description:"开放给第三方的编码,不让第三方定位我们的客户信息"`
+	Scale            string    `description:"管理规模,空不填,1::50亿以下,2:50~100亿,3:100亿以上。"`
+	ViewTotal        int       `description:"总阅读次数"`
+	RoadShowTotal    int       `description:"累计路演次数"`
+	LastViewTime     time.Time `description:"最后一次阅读时间"`
 	PackageType      int       `description:"套餐类型,0:无,1:大套餐,2:小套餐"`
 	IsFormal         int       `description:"是否已经转正式,0是没有转正式,1是已经转过正式"`
+	TodoStatus       string    `description:"任务处理状态;枚举值:'无任务','未完成','已完成'"`
+	TodoCreateTime   time.Time `description:"任务创建时间"`
+	TodoApproveTime  time.Time `description:"任务审批时间"`
+	TryStage         int       `description:"试用客户子标签:1未分类、2  推进、3 跟踪、4 预备"`
 }
 
 //获取产品详情

+ 15 - 0
models/data_manage/ppt_v2_save_log.go

@@ -0,0 +1,15 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func DeletePPTLogByDate(date string) (err error) {
+	sql := `DELETE FROM ppt_v2_save_log WHERE create_time<%s `
+	sql = fmt.Sprintf(sql, date)
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Raw(sql, date).Exec()
+
+	return
+}

+ 15 - 0
models/data_manage/report_save_log.go

@@ -0,0 +1,15 @@
+package data_manage
+
+import (
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func DeleteReportLogByDate(date string) (err error) {
+	sql := `DELETE FROM report_save_log WHERE create_time<%s `
+	sql = fmt.Sprintf(sql, date)
+	o := orm.NewOrmUsingDB("rddp")
+	_, err = o.Raw(sql, date).Exec()
+
+	return
+}

+ 20 - 0
models/data_manage/user_record.go

@@ -0,0 +1,20 @@
+package data_manage
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+func GetUnSubUserOpenid(openIdstr string) (items []string, err error){
+	sql := `SELECT open_id FROM user_record 
+          WHERE open_id IS NOT NULL AND subscribe=0 AND create_platform=1 `
+	sql += ` AND open_id in (` + openIdstr + `) `
+	_, err = orm.NewOrm().Raw(sql).QueryRows(&items)
+	return
+}
+
+func UpdateSubStatus(unSubIds string) (err error){
+	sql := "UPDATE user_record SET subscribe=1,subscribe_time=NOW() WHERE create_platform=1 "
+	sql += ` AND open_id in (` + unSubIds + `) `
+	_, err = orm.NewOrm().Raw(sql).Exec()
+	return
+}

+ 3 - 1
models/db.go

@@ -75,7 +75,7 @@ func init() {
 	// 注册Edb指标 数据表
 	initEdbDataTable()
 
-	// 注册ETA表格 数据表
+	// 注册研报 数据表
 	initYbTable()
 }
 
@@ -133,5 +133,7 @@ func initYbTable() {
 		new(yb.ActivityRegister), //研报活动报名表
 		new(yb.Speaker),          //研报主持人表
 		new(yb.PriceDriven),		// 研报价格驱动表
+		new(yb.ComeinEvent),      //进门会议表
+		new(yb.ComeinEventUser),  //进门会议用户表
 	)
 }

+ 35 - 1
models/report_view.go

@@ -80,6 +80,40 @@ func GetRddpReportViewersDetail(startTime, endTime string) (items []*ResearchRep
 			WHERE uvh.create_time >?
             AND uvh.create_time <=?
 			AND c.company_id NOT IN (1)
+			AND r.classify_name_first <> "周报"
+			ORDER BY uvh.create_time DESC
+`
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, startTime, endTime).QueryRows(&items)
+	return
+}
+
+type RddpWeekReportViewersDetail struct {
+	RealName           string
+	CompanyName        string
+	CreatedTime        string //访问时间
+	ResearchReportName string
+	ReportVariety      string
+	ResearchReportType string
+	ReportCreateDate   string
+	ChapterTitle       string
+}
+
+func GetRddpWeekReportViewersDetail(startTime, endTime string) (items []*RddpWeekReportViewersDetail, err error) {
+	sql := `
+			SELECT
+	u.real_name,c.company_name,uvh.create_time AS created_time,REPLACE ( SUBSTRING( r.create_time, 6, 5 ), '-', '' ) AS report_create_date,
+	r.title AS research_report_name,r.classify_name_second AS research_report_type ,rc.title chapter_title,rc.type_name as report_variety
+FROM
+	hongze_rddp.report_view_record AS uvh
+	INNER JOIN hongze_rddp.report AS r ON uvh.report_id = r.id
+	INNER JOIN hongze_rddp.report_chapter AS rc ON uvh.report_id = rc.report_id and uvh.report_chapter_id=rc.report_chapter_id
+	INNER JOIN wx_user u ON u.user_id = uvh.user_id
+	INNER JOIN company c ON c.company_id = u.company_id 
+			WHERE uvh.create_time >?
+            AND uvh.create_time <=?
+			AND c.company_id NOT IN (1)
+			AND r.classify_name_first = "周报"
 			ORDER BY uvh.create_time DESC
 `
 	o := orm.NewOrm()
@@ -168,4 +202,4 @@ func GetAdvisoryViewersDetail(startTime, endTime string) (items []*ResearchRepor
 	o := orm.NewOrm()
 	_, err = o.Raw(sql, startTime, endTime).QueryRows(&items)
 	return
-}
+}

+ 15 - 0
models/user_view_statistics.go

@@ -185,3 +185,18 @@ func GetMaxAdvisoryCountUserViewHistoryByMobiles() (items []*UserViewMobileTotal
 	_, err = o.Raw(sql).QueryRows(&items)
 	return
 }
+
+// UserViewStatisticsInfo 根据用户手机号字符串获取用户的浏览数和最晚阅读次数
+type UserViewStatisticsInfo struct {
+	Mobile       string    `description:"用户手机号"`
+	Total        int       `description:"总阅读数"`
+	LastViewTime time.Time `description:"用户浏览时间"`
+}
+
+// GetUserLastViewStatisticsByMobile 根据手机号获取最新的联系人的浏览次数
+func GetUserLastViewStatisticsByMobile(mobile string) (item *UserViewStatisticsInfo, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT mobile,sum(view_num) total,max(last_view_time) last_view_time FROM  user_view_statistics  WHERE mobile = ? `
+	err = o.Raw(sql, mobile).QueryRow(&item)
+	return
+}

+ 35 - 6
models/users.go

@@ -3,6 +3,7 @@ package models
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"strings"
+	"time"
 )
 
 type HongzeUsers struct {
@@ -25,12 +26,30 @@ func GetHongzeUsers() (items []*HongzeUsers, err error) {
 }
 
 type WxUser struct {
-	UserId    int64
-	Mobile    string
-	Email     string
-	CompanyId int
-	ExpiredIn int64
-	OpenId    string
+	ExpiredIn           int64
+	UserId              int64 `orm:"column(user_id);pk"`
+	Mobile              string
+	Email               string
+	CompanyId           int
+	RealName            string `description:"姓名"`
+	NickName            string `description:"昵称"`
+	CreatedTime         time.Time
+	MobileTwo           string `description:"备用手机号"`
+	BusinessCardUrl     string `description:"名片"`
+	IsMaker             int    `description:"是否决策人,1:是,0:否"`
+	Position            string `description:"职位"`
+	Sex                 int    `description:"普通用户性别,1为男性,2为女性"`
+	DepartmentName      string `description:"联系人部门"`
+	RegisterTime        time.Time
+	RegisterPlatform    int
+	Remark              string    `description:"备注"`
+	CountryCode         string    `description:"区号,86、852、886等"`
+	OutboundMobile      string    `description:"外呼手机号"`
+	OutboundCountryCode string    `description:"外呼手机号区号,86、852、886等"`
+	LastUpdatedTime     time.Time `description:"最近一次更新时间"`
+	IsDeal              int       `description:"是否标记处理 0-未处理 1-已处理"`
+	OpenId              string    `orm:"column(open_id)" description:"微信openid"`
+	Headimgurl          string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
 }
 
 func GetWxUserByUserId(userId int) (item *WxUser, err error) {
@@ -45,6 +64,16 @@ func GetWxUserByMobile(mobile string) (item *WxUser, err error) {
 	return
 }
 
+// GetWxUserByMobileCountryCode 根据手机号和区号获取用户信息
+func GetWxUserByMobileCountryCode(mobile, countryCode string) (item *WxUser, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM wx_user WHERE mobile = ? `
+	sql += ` and country_code in ("","` + countryCode + `") `
+	sql += ` LIMIT 1 `
+	err = o.Raw(sql, mobile).QueryRow(&item)
+	return
+}
+
 func AddWxUser(companyId int, mobile, realName, email string) (err error) {
 	sql := `INSERT INTO wx_user(company_id,real_name,mobile,first_login,enabled,is_note,from_type,apply_method,email) VALUES (?,?,?,1,1,1,'report',0,?);`
 	orm.NewOrm().Raw(sql, companyId, realName, mobile, email).Exec()

+ 2 - 2
models/wechat.go

@@ -3,9 +3,9 @@ package models
 import (
 	"encoding/json"
 	"fmt"
-	"hongze/hongze_task/utils"
-	"github.com/rdlucklib/rdluck_tools/http"
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/http"
+	"hongze/hongze_task/utils"
 	"strings"
 	"time"
 )

+ 102 - 0
models/yb/comein_event.go

@@ -0,0 +1,102 @@
+package yb
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// ComeinEvent 全时会议表
+type ComeinEvent struct {
+	ComeinEventId int       `orm:"column(comein_event_id);pk" description:"自增id"`
+	RoadshowId    int       `description:"路演ID"`
+	ConferenceId  string    `description:"电话会议ID"`
+	Title         string    `description:"活动标题"`
+	StartTime     time.Time `description:"路演开始时间"`
+	EndTime       time.Time `description:"路演结束时间"`
+	People        int       `description:"实际入会人数"`
+	CreateTime    time.Time `description:"创建时间"`
+}
+
+// TableName 表名变更
+func (comeinEventInfo *ComeinEvent) TableName() string {
+	return "comein_event"
+}
+
+// GetComeinEventByRoadshowId 根据进门会议的路演id获取进门会议(已同步)
+func GetComeinEventByRoadshowId(comeinId int) (item *ComeinEvent, err error) {
+	o := orm.NewOrm()
+	sql := "select * from comein_event where roadshow_id=? "
+	err = o.Raw(sql, comeinId).QueryRow(&item)
+	return
+}
+
+// Update 更新进门会议
+func (comeinEventInfo *ComeinEvent) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(comeinEventInfo, cols...)
+	return
+}
+
+// AddComeinEvent 新增进门会议
+func AddComeinEvent(comeinEvent *ComeinEvent) (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(comeinEvent)
+	if err != nil {
+		return
+	}
+	comeinEvent.ComeinEventId = int(id)
+	return
+}
+
+// GetComeinList 获取进门列表数据
+func GetComeinList(condition string, pars []interface{}, startSize, pageSize int) (total int, list []*ComeinEvent, err error) {
+	o := orm.NewOrm()
+	sql := "select a.* from comein_event a " +
+		" where 1=1  "
+	sql += condition
+	sql += ` order by a.start_time DESC,comein_event_id desc `
+
+	totalSql := `select count(1) total from (` + sql + `) z `
+	err = o.Raw(totalSql, pars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+	return
+}
+
+// AddComeinEventAndUser 添加进门活动和用户
+func AddComeinEventAndUser(comeinEventInfo *ComeinEvent, userList []*ComeinEventUser) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	id, err := to.Insert(comeinEventInfo)
+	if err != nil {
+		return
+	}
+	comeinEventInfo.ComeinEventId = int(id)
+
+	// 联系人入库
+	if len(userList) > 0 {
+		for _, v := range userList {
+			v.ComeinEventId = comeinEventInfo.ComeinEventId
+		}
+		_, tmpErr := to.InsertMulti(len(userList), userList)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+	}
+}

+ 77 - 0
models/yb/comein_event_user.go

@@ -0,0 +1,77 @@
+package yb
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// ComeinEventUser 进门会议用户表
+type ComeinEventUser struct {
+	ComeinUserId     int       `orm:"column(comein_user_id);pk" description:"自增id"`
+	ComeinEventId    int       `orm:"column(comein_event_id)" description:"活动与进门会议的关系id"`
+	ComeinDataId     int       `orm:"column(comein_data_id)" description:"进门会议的数据id,用作数据去重"`
+	UserId           int       `description:"用户id"`
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	Name             string    `description:"姓名"`
+	FirstWatchTime   time.Time `description:"首次入会时间"`
+	LastWatchTime    time.Time `description:"最后退出会议时间"`
+	JoinTime         int       `description:"会议参与时长"`
+	AuthInfo         string    `description:"用户参与鉴权"`
+	JoinType         int       `description:"参与方式 1:网络 2:电话"`
+	DataType         int       `description:"数据类型,1:直播 2:回放"`
+	RegisterTime     time.Time `description:"用户注册时间"`
+	ViewTotal        int       `description:"报告累计阅读次数"`
+	LastViewTime     time.Time `description:"报告最近一次阅读时间"`
+	CompanyId        int       `description:"客户id"`
+	ProductId        int       `description:"产品id"`
+	CompanyName      string    `description:"客户名称"`
+	Occupation       string    `description:"职位"`
+	Status           string    `description:"客户产品状态"`
+	SellerId         int       `description:"所属销售id"`
+	SellerName       string    `description:"所属销售名称"`
+	CompanyViewTotal int       `description:"客户总计阅读次数"`
+	CompanyRoadTotal int       `description:"客户路演次数"`
+	CreateTime       time.Time `description:"记录创建时间"`
+}
+
+// TableName 表名变更
+func (comeinEventUserInfo *ComeinEventUser) TableName() string {
+	return "comein_event_user"
+}
+
+// AddComeinEventUser 新增进门会议用户
+func AddComeinEventUser(comeinEventUserInfo *ComeinEventUser) (err error) {
+	o := orm.NewOrm()
+	id, err := o.Insert(comeinEventUserInfo)
+	if err != nil {
+		return
+	}
+	comeinEventUserInfo.ComeinUserId = int(id)
+	return
+}
+
+// GetQsUserList 获取到会用户列表数据
+func GetComeinUserList(condition string, pars []interface{}, startSize, pageSize int) (total int, list []*ComeinEventUser, err error) {
+	o := orm.NewOrm()
+	sql := "select * from comein_event_user a where 1=1 "
+	sql += condition
+	sql += ` order by a.comein_user_id desc`
+
+	totalSql := `select count(1) total from (` + sql + `) z `
+	err = o.Raw(totalSql, pars).QueryRow(&total)
+	if err != nil {
+		return
+	}
+	sql += ` LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&list)
+	return
+}
+
+// GetComeinEventUserByComeinDataId 根据进门会议的数据id获取记录
+func GetComeinEventUserByComeinDataId(comeinId int) (item *ComeinEventUser, err error) {
+	o := orm.NewOrm()
+	sql := "select * from comein_event_user where comein_data_id=? "
+	err = o.Raw(sql, comeinId).QueryRow(&item)
+	return
+}

+ 219 - 0
services/comein.go

@@ -0,0 +1,219 @@
+package services
+
+import (
+	"context"
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/models/yb"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/services/comein"
+	"hongze/hongze_task/utils"
+	"strings"
+	"time"
+)
+
+// SyncComeinMeeting 同步进门会议参会人员数据
+func SyncComeinMeeting(cont context.Context) (err error) {
+	errMsgList := make([]string, 0)
+	defer func() {
+		if len(errMsgList) > 0 {
+			//for _, v := range errMsgList {
+			//	fmt.Println(v)
+			//}
+			go alarm_msg.SendAlarmMsg("同步进门会议参会人员数据失败:"+strings.Join(errMsgList, "/n"), 3)
+		}
+	}()
+
+	nowHour := time.Now().Hour()
+	//因为 0点 和 19点 是在更新指标,就不同步参会人数了
+	if nowHour == 0 || nowHour == 19 {
+		return
+	}
+
+	//默认往前面推 1 小时
+	beforeHour := time.Duration(1)
+	//因为 0点 和 19点 是在更新指标,所以后面的两个时间点同步数据时,需要往前面2小时往后拉取
+	if nowHour == 1 || nowHour == 20 {
+		beforeHour = time.Duration(2) //往前面推 2 小时
+	}
+
+	startTimeInt := time.Now().Add(-3600*beforeHour*time.Second-600).Unix() * 1000 //开始时间
+	endTimeInt := time.Now().Unix() * 1000                                         //结束时间
+
+	roadshowData, err := comein.GetRoadshowDataList(startTimeInt, endTimeInt)
+	if err != nil {
+		errMsgList = append(errMsgList, fmt.Sprintf("获取进门路演到会信息失败,%s,err:%s", time.Now().Format(utils.FormatDate), err.Error()))
+		return
+	}
+	roadshowDataList := roadshowData.Data
+
+	comeinEventMap := make(map[int]*yb.ComeinEvent)
+
+	// 开始同步
+	companyProductMap := make(map[string]*models.CompanyProduct)
+	companyMap := make(map[string]*models.Company)
+	companyIdProductIdMap := make(map[int]int)
+	// 参会人
+	for _, v := range roadshowDataList {
+		//只记录普通成员(也就是参会人)
+		if v.UserIdentity != 4 { //参会者身份,1:主讲人 2:主持人 3:嘉宾 4:普通参会者 5:联席主讲人 6:会议助理
+			continue
+		}
+		if v.UserPhone == "" { //如果手机号为空,那么就不处理了,进入下一个循环
+			continue
+		}
+
+		tmpComeinEvent, ok := comeinEventMap[int(v.RoadshowID)]
+		if !ok {
+			// 检测会议是否存在,不存在则创建会议
+			tmpComeinEventInfo, tmpErr := yb.GetComeinEventByRoadshowId(int(v.RoadshowID))
+			if tmpErr != nil {
+				if tmpErr.Error() == utils.ErrNoRow() {
+					//会议信息
+					tmpComeinEventInfo = &yb.ComeinEvent{
+						//ComeinEventId: 0,
+						RoadshowId: int(v.RoadshowID),
+						//ConferenceId: comeinDataInfo.ConferenceType,
+						Title:      v.RoadshowTitle,
+						StartTime:  time.Unix(v.RoadshowBeginTime/1000, 0),
+						EndTime:    time.Unix(v.RoadshowEndTime/1000, 0),
+						People:     0,
+						CreateTime: time.Now(),
+					}
+					tmpErr2 := yb.AddComeinEvent(tmpComeinEventInfo)
+					if tmpErr2 != nil {
+						//入库失败
+						errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,会议入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error()))
+						continue
+					}
+				} else {
+					//数据异常,sql异常
+					errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,查找会议失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error()))
+					continue
+				}
+			}
+			comeinEventMap[tmpComeinEventInfo.RoadshowId] = tmpComeinEventInfo
+			tmpComeinEvent = tmpComeinEventInfo
+		}
+
+		//校验该记录是否已经入库,如果已经入库,那么就不处理了,进入下一个循环
+		tmpComeinEventUser, tmpErr := yb.GetComeinEventUserByComeinDataId(int(v.ID))
+		if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
+			errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,用户手机号:%s,会议用户入库失败,err:%s", v.RoadshowID, v.RoadshowTitle, v.UserPhone, err.Error()))
+			continue
+		}
+		if tmpComeinEventUser == nil {
+			mobile := v.UserPhone
+			countryCode := strings.Replace(v.AreaCode, "+", "", -1)
+
+			var companyProductInfo *models.CompanyProduct
+			var companyInfo *models.Company
+			var wxUserInfo *models.WxUser
+
+			productIdList := []int{1, 2}
+			if mobile != "" {
+				wxUserInfo, _ = models.GetWxUserByMobileCountryCode(mobile, countryCode)
+				if wxUserInfo != nil && wxUserInfo.CompanyId != 1 {
+					//获取客户产品信息
+					productId, ok := companyIdProductIdMap[wxUserInfo.CompanyId]
+					if ok { //已经查询过
+						if productId > 0 {
+							// 获取客户产品信息
+							key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId)
+
+							if tmpCompanyProductInfo, ok := companyProductMap[key]; ok {
+								companyProductInfo = tmpCompanyProductInfo
+							}
+
+						}
+					} else {
+						for _, productId := range productIdList {
+							key := fmt.Sprint(wxUserInfo.CompanyId, "_", productId)
+							companyProductInfo, _ = models.GetCompanyProduct(wxUserInfo.CompanyId, productId)
+							if companyProductInfo != nil {
+								companyProductMap[key] = companyProductInfo
+								companyIdProductIdMap[wxUserInfo.CompanyId] = productId
+								//退出产品查询
+								break
+							}
+						}
+						if companyProductInfo == nil {
+							companyIdProductIdMap[wxUserInfo.CompanyId] = 0
+						}
+
+					}
+
+					// 获取客户信息
+					key := fmt.Sprint(wxUserInfo.CompanyId)
+					if tmpCompanyInfo, ok := companyMap[key]; ok {
+						companyInfo = tmpCompanyInfo
+					} else {
+						companyInfo, _ = models.GetCompanyById(wxUserInfo.CompanyId)
+						if companyInfo != nil {
+							companyMap[key] = companyInfo
+						}
+					}
+				}
+			}
+
+			name := v.UserName
+			comeinEventUserInfo := &yb.ComeinEventUser{
+				//ComeinUserId     int       `orm:"column(comein_user_id);pk" description:"自增id"`
+				ComeinEventId:  tmpComeinEvent.ComeinEventId,
+				ComeinDataId:   int(v.ID),
+				UserId:         0,
+				Mobile:         mobile,
+				Email:          v.Email,
+				Name:           name,
+				FirstWatchTime: time.Unix(v.FirstWatchTime/1000, 0),
+				LastWatchTime:  time.Unix(v.LastWatchTime/1000, 0),
+				JoinTime:       int(v.JoinTime),
+				AuthInfo:       v.AuthInfo,
+				JoinType:       int(v.JoinType),
+				DataType:       int(v.DataType),
+				//RegisterTime:     time.Time{},
+				ViewTotal: 0,
+				//LastViewTime:     time.Time{},
+				CompanyId:        0,
+				ProductId:        0,
+				CompanyName:      v.Company,
+				Occupation:       v.Occupation,
+				Status:           "",
+				SellerId:         0,
+				SellerName:       "",
+				CompanyViewTotal: 0,
+				CompanyRoadTotal: 0,
+				CreateTime:       time.Now(),
+			}
+			//这个时候是系统用户了,美滋滋
+			if companyProductInfo != nil {
+				comeinEventUserInfo.RegisterTime = wxUserInfo.RegisterTime
+				//models.
+				userViewStatisticsInfo, _ := models.GetUserLastViewStatisticsByMobile(mobile) //用户阅读信息
+				if userViewStatisticsInfo != nil {
+					comeinEventUserInfo.ViewTotal = userViewStatisticsInfo.Total
+					comeinEventUserInfo.LastViewTime = userViewStatisticsInfo.LastViewTime
+				}
+
+				comeinEventUserInfo.UserId = int(wxUserInfo.UserId)
+				comeinEventUserInfo.Name = wxUserInfo.RealName
+				comeinEventUserInfo.CompanyId = companyProductInfo.CompanyId
+				comeinEventUserInfo.ProductId = companyProductInfo.ProductId
+				comeinEventUserInfo.CompanyName = companyInfo.CompanyName
+				comeinEventUserInfo.Status = companyProductInfo.Status
+				comeinEventUserInfo.SellerId = companyProductInfo.SellerId
+				comeinEventUserInfo.SellerName = companyProductInfo.SellerName
+				comeinEventUserInfo.CompanyViewTotal = companyProductInfo.ViewTotal
+				comeinEventUserInfo.CompanyRoadTotal = companyProductInfo.RoadShowTotal
+			}
+			yb.AddComeinEventUser(comeinEventUserInfo)
+
+			tmpComeinEvent.People = tmpComeinEvent.People + 1
+		}
+	}
+
+	for _, v := range comeinEventMap {
+		v.Update([]string{"People"})
+	}
+	return
+}

+ 267 - 0
services/comein/comein.go

@@ -0,0 +1,267 @@
+package comein
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/utils"
+	"io/ioutil"
+	"net/http"
+	"net/url"
+	"sort"
+	"strconv"
+	"time"
+)
+
+// EventListResp 会议列表返回数据结构
+type EventListResp struct {
+	Code      string              `json:"code"`
+	Data      []EventListDataResp `json:"data"`
+	Errorcode string              `json:"errorcode"`
+	Errordesc string              `json:"errordesc"`
+	Extra     struct {
+		HasMore   bool   `json:"hasMore"`
+		More      string `json:"more"`
+		Pagestart string `json:"pagestart"`
+		Total     string `json:"total"`
+	} `json:"extra"`
+	Msg   string `json:"msg"`
+	Total int64  `json:"total"`
+}
+
+// EventListDataResp 会议数据
+type EventListDataResp struct {
+	Authtag            string `json:"authtag"`
+	ConferenceType     int64  `json:"conferenceType"`
+	ContentTypeTagName string `json:"contentTypeTagName"`
+	DescURL            string `json:"descUrl"`
+	Etime              int64  `json:"etime"`
+	ID                 int64  `json:"id"`
+	IndustryName       string `json:"industryName"`
+	IsDel              int64  `json:"isDel"`
+	Livemode           int64  `json:"livemode"`
+	Logo               string `json:"logo"`
+	Logoweb            string `json:"logoweb"`
+	Members            []struct {
+		Identity    int64  `json:"identity"`
+		PhoneNumber string `json:"phoneNumber"`
+		Type        int64  `json:"type"`
+		Uname       string `json:"uname"`
+	} `json:"members"`
+	PresentURL        string `json:"presentUrl"`
+	RecordSupport     int64  `json:"recordSupport"`
+	RoadshowID        int64  `json:"roadshowId"`
+	ShortURL          string `json:"shortUrl"`
+	Status            string `json:"status"`
+	Stime             int64  `json:"stime"`
+	Title             string `json:"title"`
+	WxminiProgramID   string `json:"wxminiProgramId"`
+	WxminiProgramPage string `json:"wxminiProgramPage"`
+}
+
+// GetEventList 获取会议列表
+func GetEventList(startTime, endTime time.Time) (respData EventListResp, err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("查询组织下所有的会议列表失败;ERR:"+err.Error(), 3)
+		}
+	}()
+	logMsg := ``
+	pageStart := 0
+	pageNum := 10
+	paramsMap := map[string]string{
+		"mod": "roadshow",   //模块名
+		"act": "opensearch", //处理方法名
+		//"btime": fmt.Sprint(startTime.Unix() * 1000), //开始时间,时间戳
+		//"etime": fmt.Sprint(endTime.Unix() * 1000),   //结束时间,时间戳
+		//"ignoredel": "1",                                  //忽略已删除的数据 (1 删除的数据也可查询出)
+		"pagestart": strconv.Itoa(pageStart),              //翻页数 (第一页传 0 )
+		"pagenum":   strconv.Itoa(pageNum),                //每页总条数(默认10条)
+		"ts":        fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
+	}
+	paramStr := GetUrlParams(paramsMap)
+	//fmt.Println(paramStr)
+
+	//App   string `json:"app" description:"数据类型"`
+	//Mod   string `json:"mod" description:"模块名"`
+	//Act   string `json:"act" description:"处理方法名"`
+	//Appid string `json:"appid" description:"合作方ID"`
+
+	getUrl := utils.COMEIN_URL + "?" + paramStr
+
+	resp, err := http.Get(getUrl)
+	if err != nil {
+		logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		logMsg = fmt.Sprint("comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+	utils.FileLog.Info(fmt.Sprint("comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &respData)
+	if err != nil {
+		utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if respData.Errorcode != "0" {
+		utils.FileLog.Info("comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
+		err = errors.New(respData.Errordesc)
+		return
+	}
+	return
+}
+
+// RoadshowDataResp 用户参会数据返回
+type RoadshowDataResp struct {
+	Code      string         `json:"code"`
+	Data      []RoadshowData `json:"data"`
+	Errorcode string         `json:"errorcode"`
+	Errordesc string         `json:"errordesc"`
+	Msg       string         `json:"msg"`
+}
+
+type RoadshowData struct {
+	AreaCode          string `json:"areaCode"`
+	AskCount          int64  `json:"askCount"`
+	AuthInfo          string `json:"authInfo"`
+	Company           string `json:"company"`
+	DataType          int64  `json:"dataType"`
+	DutySeller        string `json:"dutySeller"`
+	Email             string `json:"email"`
+	FirstWatchTime    int64  `json:"firstWatchTime"`
+	GuestUserNames    string `json:"guestUserNames"`
+	ID                int64  `json:"id"`
+	JoinTime          int64  `json:"joinTime"`
+	JoinType          int64  `json:"joinType"`
+	LastWatchTime     int64  `json:"lastWatchTime"`
+	MeetingType       string `json:"meetingType"`
+	Occupation        string `json:"occupation"`
+	OrgRemarks        string `json:"orgRemarks"`
+	ResearchArea      string `json:"researchArea"`
+	RoadshowBeginTime int64  `json:"roadshowBeginTime"`
+	RoadshowEndTime   int64  `json:"roadshowEndTime"`
+	RoadshowID        int64  `json:"roadshowId"`
+	RoadshowTitle     string `json:"roadshowTitle"`
+	RoadshowType      int64  `json:"roadshowType"`
+	SpeakerID         int64  `json:"speakerId"`
+	SpeakerName       string `json:"speakerName"`
+	TelFixedID        int64  `json:"telFixedId"`
+	TeleconferenceID  string `json:"teleconferenceId"`
+	ThirdMeetingID    string `json:"thirdMeetingId"`
+	UniqueID          string `json:"uniqueId"`
+	UserIdentity      int64  `json:"userIdentity"`
+	UserInfoSource    string `json:"userInfoSource"`
+	UserName          string `json:"userName"`
+	UserPhone         string `json:"userPhone"`
+}
+
+// GetRoadshowDataList 获取参会人员列表
+func GetRoadshowDataList(startTime, endTime int64) (respData RoadshowDataResp, err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg("获取参会人员列表失败;ERR:"+err.Error(), 3)
+		}
+	}()
+	logMsg := ``
+	paramsMap := map[string]string{
+		"mod":       "open",                               //模块名
+		"act":       "roadshow-datas",                     //处理方法名
+		"beginTime": fmt.Sprint(startTime),                //开始时间,时间戳
+		"endTime":   fmt.Sprint(endTime),                  //结束时间,时间戳
+		"ts":        fmt.Sprint(time.Now().Unix() * 1000), //请求发起的时间戳,单位:毫秒
+	}
+	paramStr := GetUrlParams(paramsMap)
+
+	paramsMap["dataType"] = "1" //数据类型,1:直播 2:回放 (该参数不参与签名算法)
+	//fmt.Println(paramStr)
+
+	//App   string `json:"app" description:"数据类型"`
+	//Mod   string `json:"mod" description:"模块名"`
+	//Act   string `json:"act" description:"处理方法名"`
+	//Appid string `json:"appid" description:"合作方ID"`
+
+	getUrl := utils.COMEIN_URL + "?" + paramStr
+
+	resp, err := http.Get(getUrl)
+	if err != nil {
+		logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+
+	defer resp.Body.Close()
+
+	body, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		logMsg = fmt.Sprint("获取参会人员列表 comein get err; request:", getUrl, "; errMsg:", err.Error())
+		utils.FileLog.Info(logMsg)
+		return
+	}
+	utils.FileLog.Info(fmt.Sprint("获取参会人员列表 comein get Result", ";url:", getUrl, ";\nresponse:", string(body)))
+	err = json.Unmarshal(body, &respData)
+	if err != nil {
+		utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
+		err = errors.New("Unmarshal Err:" + err.Error())
+		return
+	}
+	if respData.Errorcode != "0" {
+		utils.FileLog.Info("获取参会人员列表 comein get Err:", err.Error(), ";url:", getUrl, ";response:", string(body))
+		err = errors.New(respData.Errordesc)
+		return
+	}
+	return
+}
+
+// GetUrlParams 获取url请求参数
+func GetUrlParams(params map[string]string) (paramStr string) {
+	GetSign(params)
+	// 待签名字符串
+	for index, val := range params {
+		paramStr += index + `=` + val + `&`
+	}
+	paramStr = paramStr[:len(paramStr)-1]
+	return
+}
+
+// GetSign 获取签名
+func GetSign(params map[string]string) (paramStr string) {
+	//获取map的下标切片,然后对下标进行排序
+	keySlice := make([]string, 0)
+
+	//基础参数
+	params["appid"] = utils.COMEIN_APPID //签名用的是appid,实际请求用的appId
+	params["app"] = "json"
+
+	ignoreStr := []string{"app", "mod", "act"}
+	for index := range params {
+		//需要忽略的字符
+		if utils.InArrayByStr(ignoreStr, index) {
+			continue
+		}
+		keySlice = append(keySlice, index)
+	}
+	sort.Strings(keySlice)
+
+	// 待签名字符串
+	for _, index := range keySlice {
+		paramStr += index + `=` + params[index] + `&`
+	}
+
+	// 获取签名
+	signStr := utils.HmacMd5(utils.COMEIN_SECREKEY, paramStr[:len(paramStr)-1])
+	signature := url.QueryEscape(signStr)
+	params["signature"] = signature
+
+	delete(params, "appid")
+	params["appId"] = utils.COMEIN_APPID
+	return
+}

+ 1 - 1
services/company.go

@@ -349,7 +349,7 @@ func IncrementCompany(cont context.Context) (err error) {
 	fmt.Println("start send email")
 	//收取邮件的人
 	emailUser := "kwhuang@hzinsights.com;csun@hzinsights.com;sphuang@hzinsights.com;pyan@hzinsights.com"
-	sendResult := utils.SendEmailByHongze(title, "增量客户记录,\"你好,上周的增量客户记录列表见附件。", emailUser, savePath, title+".xlsx")
+	sendResult := utils.SendEmailByHongze(title, "增量客户记录,你好,上周的增量客户记录列表见附件。", emailUser, savePath, title+".xlsx")
 	if sendResult {
 		os.Remove(savePath)
 	}

+ 66 - 5
services/report_view.go

@@ -35,7 +35,7 @@ func ReportViewTimes() (err error) {
 	cellD := rowTitle.AddCell()
 	cellD.Value = "最近一次访问日期"
 
-	rddpItems,err:=models.GetRddpHistoryViewTimes()
+	rddpItems, err := models.GetRddpHistoryViewTimes()
 
 	items, err := models.GetHistoryViewTimes()
 
@@ -76,7 +76,7 @@ func ReportViewTimes() (err error) {
 	//发送邮件
 	content := "你好,上周用户访问次数见附件。"
 	fmt.Println("start send email")
-	sendResult := utils.SendEmailByHongze(title, content, utils.EmailSendToHzUsers, savePath,title+".xlsx")
+	sendResult := utils.SendEmailByHongze(title, content, utils.EmailSendToHzUsers, savePath, title+".xlsx")
 	//sendResult:=utils.SendEmailByHongze(title,content,utils.EmailSendToMe,savePath)
 	if sendResult {
 		os.Remove(savePath)
@@ -105,7 +105,6 @@ func ReportViewDetail() (err error) {
 	advisory.TypeValue = "advisory"
 	typeList = append(typeList, advisory)
 
-
 	week := new(models.ReportType)
 	week.TypeName = "周报"
 	week.TypeValue = "week"
@@ -137,6 +136,68 @@ func ReportViewDetail() (err error) {
 	file := xlsx.NewFile()
 	for _, v := range typeList {
 		fmt.Println(v.TypeName, v.TypeValue)
+		if v.TypeName == `周报` {
+			sheet, err := file.AddSheet(v.TypeName + "研报阅读统计")
+			if err != nil {
+				return err
+			}
+			//标头
+			rowTitle := sheet.AddRow()
+			cellA := rowTitle.AddCell()
+			cellA.Value = "用户名称"
+			cellB := rowTitle.AddCell()
+			cellB.Value = "公司名称"
+			cellC := rowTitle.AddCell()
+			cellC.Value = "访问时间"
+			cellD := rowTitle.AddCell()
+			cellD.Value = "访问标题"
+			cellE := rowTitle.AddCell()
+			cellE.Value = "访问页面"
+			cellF := rowTitle.AddCell()
+			cellF.Value = "报告类型"
+
+			items, err := models.GetResearchReportViewersDetail(startTime, endTime, v.TypeValue)
+			if err != nil {
+				return err
+			}
+			for _, item := range items {
+				row := sheet.AddRow()
+				cellA := row.AddCell()
+				cellA.Value = item.RealName
+				cellB := row.AddCell()
+				cellB.Value = item.CompanyName
+				cellC := row.AddCell()
+				cellC.Value = item.CreatedTime
+				cellD := row.AddCell()
+				cellD.Value = item.ResearchReportName
+				cellE := row.AddCell()
+				cellE.Value = item.ReportVariety
+				cellF := row.AddCell()
+				cellF.Value = v.TypeName
+			}
+
+			//新周报的数据
+			weekItems, err := models.GetRddpWeekReportViewersDetail(startTime, endTime)
+			if err != nil {
+				return err
+			}
+			for _, item := range weekItems {
+				row := sheet.AddRow()
+				cellA := row.AddCell()
+				cellA.Value = item.RealName
+				cellB := row.AddCell()
+				cellB.Value = item.CompanyName
+				cellC := row.AddCell()
+				cellC.Value = item.CreatedTime
+				cellD := row.AddCell()
+				cellD.Value = item.ResearchReportName + "(" + item.ReportCreateDate + ")"
+				cellE := row.AddCell()
+				cellE.Value = item.ReportVariety
+				cellF := row.AddCell()
+				cellF.Value = v.TypeName
+			}
+			continue
+		}
 		if v.TypeValue == "rddp" {
 			sheet, err := file.AddSheet(v.TypeName + "阅读统计")
 			if err != nil {
@@ -248,7 +309,7 @@ func ReportViewDetail() (err error) {
 		}
 	}
 	title := "研报阅读统计报表"
-	savePath := "report_view_detail"+ time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
+	savePath := "report_view_detail" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
 	err = file.Save("./" + savePath)
 	fmt.Println(err)
 	if err != nil {
@@ -256,7 +317,7 @@ func ReportViewDetail() (err error) {
 	}
 	//发送邮件
 	fmt.Println("start send email")
-	sendResult := utils.SendEmailByHongze(title, "你好,上周研报阅读统计见附件。", utils.EmailSendToHzUsers, savePath,title+".xlsx")
+	sendResult := utils.SendEmailByHongze(title, "你好,上周研报阅读统计见附件。", utils.EmailSendToHzUsers, savePath, title+".xlsx")
 	//sendResult:=utils.SendEmailByHongze(title,"你好,上周研报阅读统计见附件。",utils.EmailSendToMe,savePath)
 	if sendResult {
 		os.Remove(savePath)

+ 28 - 0
services/save_log.go

@@ -0,0 +1,28 @@
+package services
+
+import (
+	"context"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+func DeleteLog(cont context.Context) (err error) {
+	date := time.Now().AddDate(0,-1,0).Format(utils.FormatDateTime)
+	go func() {
+		err = data_manage.DeletePPTLogByDate(date)
+		if err != nil {
+			alarm_msg.SendAlarmMsg("DeletePPTLogByDate ErrMsg:"+err.Error(), 3)
+		}
+	}()
+
+	go func() {
+		err = data_manage.DeleteReportLogByDate(date)
+		if err != nil {
+			alarm_msg.SendAlarmMsg("DeleteReportLogByDate ErrMsg:"+err.Error(), 3)
+		}
+	}()
+
+	return
+}

+ 14 - 0
services/task.go

@@ -105,6 +105,20 @@ func Task() {
 	setPublicMeetingUnionCode := task.NewTask("setPublicMeetingUnionCode", "0 */10 * * * *", roadshow.SetPublicMeetingUnionCode)
 	task.AddTask("setPublicMeetingUnionCode", setPublicMeetingUnionCode)
 
+	//同步进门会议参会人员数据
+	syncComeinMeeting := task.NewTask("SyncComeinMeeting", "0 1 */1 * * * ", SyncComeinMeeting)
+	task.AddTask("SyncComeinMeeting", syncComeinMeeting)
+
+	//同步user_record中的关注状态
+	syncSubStatus := task.NewTask("syncSubStatus", "0 0 2 * * *", SyncSubStatus)
+	task.AddTask("syncSubStatus", syncSubStatus)
+
+
+	//删除日志 report_save_log,ppt_v2_save_log,保留一个月的
+	deleteLog := task.NewTask("syncSubStatus", "0 0 2 1 * *", DeleteLog)
+	task.AddTask("deleteLog", deleteLog)
+
+
 	task.StartTask()
 
 	fmt.Println("task end")

+ 38 - 0
services/user_record.go

@@ -0,0 +1,38 @@
+package services
+
+import (
+	"context"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/models/data_manage"
+	"hongze/hongze_task/services/alarm_msg"
+	"hongze/hongze_task/utils"
+	"strings"
+)
+
+//同步user_record表中的关注状态
+func SyncSubStatus(cont context.Context) (err error) {
+	openIdstr := models.WxUsersGet()
+	var items []string
+	if openIdstr != "''"{
+		items, err = data_manage.GetUnSubUserOpenid(openIdstr)
+		if err != nil {
+			utils.FileLog.Info("SyncSubStatus select Err:%s" + err.Error())
+			go alarm_msg.SendAlarmMsg("SyncSubStatus 查询open_id失败 ErrMsg:"+err.Error(), 3)
+			return err
+		}
+	}
+
+	unSubIds := strings.Join(items, "','")
+	unSubIds = "'" + unSubIds + "'"
+
+	if unSubIds != "''" {
+		err = data_manage.UpdateSubStatus(unSubIds)
+		if err != nil {
+			utils.FileLog.Info("SyncSubStatus update Err:%s" + err.Error())
+			go alarm_msg.SendAlarmMsg("SyncSubStatus 更新关注状态失败 ErrMsg:"+err.Error(), 3)
+			return err
+		}
+	}
+
+	return
+}

+ 30 - 0
utils/common.go

@@ -1,6 +1,7 @@
 package utils
 
 import (
+	"crypto/hmac"
 	"crypto/md5"
 	"crypto/sha1"
 	"encoding/base64"
@@ -68,6 +69,13 @@ func MD5(data string) string {
 	return hex.EncodeToString(m[:])
 }
 
+// HmacMd5 HmacMd5加密
+func HmacMd5(key, data string) string {
+	h := hmac.New(md5.New, []byte(key))
+	h.Write([]byte(data))
+	return hex.EncodeToString(h.Sum([]byte("")))
+}
+
 // 获取数字随机字符
 func GetRandDigit(n int) string {
 	return fmt.Sprintf("%0"+strconv.Itoa(n)+"d", rnd.Intn(int(math.Pow10(n))))
@@ -736,3 +744,25 @@ func SubStr(str string, subLen int) string {
 	str = string(strRune[:bodyRuneLen])
 	return str
 }
+
+// InArrayByInt php中的in_array(判断Int类型的切片中是否存在该int值)
+func InArrayByInt(idIntList []int, searchId int) (has bool) {
+	for _, id := range idIntList {
+		if id == searchId {
+			has = true
+			return
+		}
+	}
+	return
+}
+
+// InArrayByStr php中的in_array(判断String类型的切片中是否存在该string值)
+func InArrayByStr(idStrList []string, searchId string) (has bool) {
+	for _, id := range idStrList {
+		if id == searchId {
+			has = true
+			return
+		}
+	}
+	return
+}

+ 23 - 0
utils/config.go

@@ -55,6 +55,13 @@ var (
 	EDB_LIB_URL string
 )
 
+//进门财经账号信息
+var (
+	COMEIN_URL      string
+	COMEIN_APPID    string
+	COMEIN_SECREKEY string
+)
+
 func init() {
 	tmpRunMode, err := web.AppConfig.String("run_mode")
 	if err != nil {
@@ -127,6 +134,22 @@ ZwIDAQAB
 
 		EDB_LIB_URL = "http://8.136.199.33:8300/edbapi/"
 	}
+
+	// 进门财经开放api配置
+	ComeinOpenApiConfig()
+}
+
+// ComeinOpenApiConfig 进门开放api配置
+func ComeinOpenApiConfig() {
+	if RunMode == "release" {
+		COMEIN_URL = "https://server.comein.cn/comein/index.php"
+		COMEIN_APPID = "39b48779-debd-446a-a303-900322d8e356"
+		COMEIN_SECREKEY = "9102a767f20f11ecb5d6b8599f142ed4"
+	} else {
+		COMEIN_URL = "https://testserver.comein.cn/comein/index.php"
+		COMEIN_APPID = "7b966708-4a8b-4d24-9066-fe29920e7eee"
+		COMEIN_SECREKEY = "76e004876fae4b3c8721a3f4c2d115da"
+	}
 }
 
 //http://entryapi.brilliantstart.cn