package roadshow import ( "github.com/beego/beego/v2/client/orm" "hongze/hongze_mobile_admin/models/tables/admin" "hongze/hongze_mobile_admin/utils" "strconv" "time" ) // RsCalendarRelation 自系统路演与第三方路演关系表 type RsCalendarRelation struct { RelationId int `orm:"column(relation_id);pk" description:"关系id"` CalendarType int8 `description:"日历类型;1:路演;2:事项"` SelfCalendarId int `description:"系统内部的日历id,可以是研究员与路演活动的关系id,也可以是事项id"` ThirdCalendarId int `description:"第三方路演id"` UserId int `description:"关系id"` UserPhone string `description:"创建人手机号"` UserName string `description:"创建人昵称"` ProjectName string `description:"活动名称"` ProjectId int `description:"活动id"` CustomerId int `description:"客户id"` CustomerName string `description:"客户名称"` CustomerSocial string `description:"客户社会信用码"` ProjectType int `description:"活动类型:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求,8=线下沙龙,9=公司调研"` ProjectFormType int `description:"服务形式:1=沙龙,2=路演,3=专家需求,4=研究需求,5=电话,6=面谈,7=专题需求"` Room int `description:"会议室id"` StartTime int `description:"开始时间戳"` EndTime int `description:"结束时间戳"` Content string `description:"活动内容"` FeedExpert string `description:"邀请的专家"` Title string `description:"日历显示的标题"` ResearcherMobile string `description:"研究员+协同人员手机号(多个使用逗号拼接)"` ModifyTime time.Time `description:"更新时间"` CreateTime time.Time `description:"关系建立时间"` } func GetRelationByPars(condition string, pars []interface{}) (items *RsCalendarRelation, err error) { o := orm.NewOrm() sql := `SELECT * FROM rs_calendar_relation WHERE 1=1 ` if condition != "" { sql += condition } err = o.Raw(sql, pars).QueryRow(&items) return } func GetPhoneFromResearcher(calendarResearcherId int) (items *string, err error) { o := orm.NewOrm() sql := `SELECT mobile FROM admin AS a INNER JOIN rs_calendar_researcher AS b ON a.admin_id=b.researcher_id WHERE b.rs_calendar_researcher_id=?` err = o.Raw(sql, calendarResearcherId).QueryRow(&items) return } func GetPhoneFromRsCalendarById(rsCalendarId int) (item *string, err error) { o := orm.NewOrm() sql := `SELECT mobile FROM admin AS a INNER JOIN rs_calendar AS b ON a.admin_id=b.sys_user_id WHERE b.rs_calendar_id=? ` err = o.Raw(sql, rsCalendarId).QueryRow(&item) return } // GetRsCalendarRelationListByThirdIds 根据第三方id集合获取所有的关系列表 func GetRsCalendarRelationListByThirdIds(thirdCalendarIds []int) (items []*RsCalendarRelation, err error) { if len(thirdCalendarIds) <= 0 { return } thirdCalendarIdStr := utils.Implode(thirdCalendarIds) o := orm.NewOrm() sql := `SELECT * FROM rs_calendar_relation WHERE third_calendar_id in (` + thirdCalendarIdStr + `) ` _, err = o.Raw(sql).QueryRows(&items) return } // AddRsCalendarRelation 添加自系统路演与第三方路演关系 func AddRsCalendarRelation(item *RsCalendarRelation) (lastId int64, err error) { o := orm.NewOrm() lastId, err = o.Insert(item) return } // DeleteRsCalendarRelation 删除关联表 func DeleteRsCalendarRelation(relationIdd int) (err error) { sql := `DELETE FROM rs_calendar_relation WHERE relation_id=? ` o := orm.NewOrm() _, err = o.Raw(sql, relationIdd).Exec() return } // SyncRsCalendarRelation 同步自系统路演与第三方路演关系 func SyncRsCalendarRelation(thirdUserCalendar UserCalendar, createUser admin.AdminItem, researcherList []admin.AdminItem) (err error) { currentStartTimer := time.Unix(int64(thirdUserCalendar.StartTime), 0) currentEndTimer := time.Unix(int64(thirdUserCalendar.EndTime), 0) o := orm.NewOrm() tx, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = tx.Rollback() } else { _ = tx.Commit() } }() //路演活动表入库 rsCalendar := &RsCalendar{ SysUserId: createUser.AdminId, SysUserRealName: createUser.RealName, ActivityType: "路演", RoadshowType: "", RoadshowPlatform: "", CompanyId: 0, CompanyName: thirdUserCalendar.CustomerName, Province: "", ProvinceCode: "", City: "", CityCode: "", Theme: "", CooperationName: "", Title: thirdUserCalendar.Title, Source: 1, //来源,0:自系统,1:上海方的 CreateTime: time.Now(), ModifyTime: time.Now(), ActivityCategory: "", } rsCalendarId, err := tx.Insert(rsCalendar) if err != nil { return } rsCalendar.RsCalendarId = int(rsCalendarId) // 路演研究员入库 rsCalendarResearcherList := make([]*RsCalendarResearcher, 0) for _, researcheInfo := range researcherList { rsCalendarResearcher := &RsCalendarResearcher{ RsCalendarResearcherId: 0, RsCalendarId: rsCalendar.RsCalendarId, ResearcherId: researcheInfo.AdminId, ResearcherName: researcheInfo.RealName, StartDate: currentStartTimer.Format(utils.FormatDate), EndDate: currentEndTimer.Format(utils.FormatDate), StartTime: currentStartTimer.Format(utils.FormatTime), EndTime: currentEndTimer.Format(utils.FormatTime), StartWeek: utils.StrDateTimeToWeek(currentStartTimer.Weekday().String()), EndWeek: utils.StrDateTimeToWeek(currentEndTimer.Weekday().String()), CreateTime: time.Now(), ModifyTime: time.Now(), Status: 2, //1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束 RefuseReason: "", //RefuseTime: time.Time{}, DeleteReason: "", } rsCalendarResearcherId, tmpErr := tx.Insert(rsCalendarResearcher) if tmpErr != nil { err = tmpErr return } rsCalendarResearcher.RsCalendarResearcherId = int(rsCalendarResearcherId) rsCalendarResearcherList = append(rsCalendarResearcherList, rsCalendarResearcher) } selfCalendarId := 0 if len(rsCalendarResearcherList) > 0 { selfCalendarId = rsCalendarResearcherList[0].RsCalendarResearcherId } //关系入库 customerId, _ := strconv.Atoi(thirdUserCalendar.CustomerId) rsCalendarRelation := &RsCalendarRelation{ //RelationId: 0, CalendarType: 1, //日历类型;1:路演;2:事项 SelfCalendarId: selfCalendarId, //研究员与路演关系id; ThirdCalendarId: thirdUserCalendar.ID, UserId: thirdUserCalendar.UserId, UserPhone: thirdUserCalendar.UserPhone, UserName: thirdUserCalendar.UserName, ProjectName: thirdUserCalendar.ProjectName, ProjectId: thirdUserCalendar.ProjectId, CustomerId: customerId, CustomerName: thirdUserCalendar.CustomerName, CustomerSocial: thirdUserCalendar.CustomerSocial, ProjectType: thirdUserCalendar.ProjectType, ProjectFormType: thirdUserCalendar.ProjectType, Room: thirdUserCalendar.Room, StartTime: thirdUserCalendar.StartTime, EndTime: thirdUserCalendar.EndTime, Content: thirdUserCalendar.Content, FeedExpert: thirdUserCalendar.FeedExpert, Title: thirdUserCalendar.Title, ResearcherMobile: thirdUserCalendar.ResearcherMobile, ModifyTime: time.Now(), CreateTime: time.Now(), } rsCalendarRelationId, err := tx.Insert(rsCalendarRelation) if err != nil { return } rsCalendarRelation.RelationId = int(rsCalendarRelationId) return } // UpdateSyncRsCalendarRelation 同步自系统路演与第三方路演关系 func UpdateSyncRsCalendarRelation(thirdUserCalendar UserCalendar, rsCalendar *RsCalendar, rsCalendarRelation *RsCalendarRelation, updateRsCalendarResearcherList []*RsCalendarResearcher, delResearcherIdList []int, addResearcherList []admin.AdminItem) (err error) { currentStartTimer := time.Unix(int64(thirdUserCalendar.StartTime), 0) currentEndTimer := time.Unix(int64(thirdUserCalendar.EndTime), 0) //新增研究员 //删除研究员 //更新研究员 o := orm.NewOrm() tx, err := o.Begin() if err != nil { return } defer func() { if err != nil { _ = tx.Rollback() } else { _ = tx.Commit() } }() // 路演活动表修改 rsCalendar.Title = thirdUserCalendar.Title rsCalendar.ModifyTime = time.Now() _, err = tx.Update(rsCalendar, "Title", "ModifyTime") if err != nil { return } // 删除路演研究员 if len(delResearcherIdList) > 0 { delResearcherIdStr := utils.Implode(delResearcherIdList) sql := `DELETE FROM rs_calendar_researcher WHERE rs_calendar_researcher_id in (` + delResearcherIdStr + `) ` _, tmpErr := tx.Raw(sql).Exec() if tmpErr != nil { err = tmpErr return } } // 修改路演研究员 for _, rsCalendarResearcher := range updateRsCalendarResearcherList { rsCalendarResearcher.StartDate = currentStartTimer.Format(utils.FormatDate) rsCalendarResearcher.EndDate = currentEndTimer.Format(utils.FormatDate) rsCalendarResearcher.StartTime = currentStartTimer.Format(utils.FormatTime) rsCalendarResearcher.EndTime = currentEndTimer.Format(utils.FormatTime) rsCalendarResearcher.StartWeek = utils.StrDateTimeToWeek(currentStartTimer.Weekday().String()) rsCalendarResearcher.EndWeek = utils.StrDateTimeToWeek(currentEndTimer.Weekday().String()) rsCalendarResearcher.Status = 2 // 已接受 rsCalendarResearcher.ModifyTime = time.Now() _, tmpErr := tx.Update(rsCalendarResearcher, "StartDate", "EndDate", "StartTime", "EndTime", "StartWeek", "EndWeek","Status", "ModifyTime") if tmpErr != nil { err = tmpErr return } } // 路演研究员入库 rsCalendarResearcherList := make([]*RsCalendarResearcher, 0) for _, researcheInfo := range addResearcherList { rsCalendarResearcher := &RsCalendarResearcher{ RsCalendarResearcherId: 0, RsCalendarId: rsCalendar.RsCalendarId, ResearcherId: researcheInfo.AdminId, ResearcherName: researcheInfo.RealName, StartDate: currentStartTimer.Format(utils.FormatDate), EndDate: currentEndTimer.Format(utils.FormatDate), StartTime: currentStartTimer.Format(utils.FormatTime), EndTime: currentEndTimer.Format(utils.FormatTime), StartWeek: utils.StrDateTimeToWeek(currentStartTimer.Weekday().String()), EndWeek: utils.StrDateTimeToWeek(currentEndTimer.Weekday().String()), CreateTime: time.Now(), ModifyTime: time.Now(), Status: 2, //1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束 RefuseReason: "", //RefuseTime: time.Time{}, DeleteReason: "", } rsCalendarResearcherId, tmpErr := tx.Insert(rsCalendarResearcher) if tmpErr != nil { err = tmpErr return } rsCalendarResearcher.RsCalendarResearcherId = int(rsCalendarResearcherId) rsCalendarResearcherList = append(rsCalendarResearcherList, rsCalendarResearcher) } // 关系表变更 selfCalendarId := rsCalendarRelation.SelfCalendarId if len(updateRsCalendarResearcherList) > 0 { selfCalendarId = updateRsCalendarResearcherList[0].RsCalendarResearcherId //更新的研究员关系表id } else if len(rsCalendarResearcherList) > 0 { selfCalendarId = rsCalendarResearcherList[0].RsCalendarResearcherId //新增的研究员关系表id } //关系入库 customerId, _ := strconv.Atoi(thirdUserCalendar.CustomerId) rsCalendarRelation.SelfCalendarId = selfCalendarId rsCalendarRelation.UserId = thirdUserCalendar.UserId rsCalendarRelation.UserPhone = thirdUserCalendar.UserPhone rsCalendarRelation.UserName = thirdUserCalendar.UserName rsCalendarRelation.ProjectName = thirdUserCalendar.ProjectName rsCalendarRelation.ProjectId = thirdUserCalendar.ProjectId rsCalendarRelation.CustomerId = customerId rsCalendarRelation.CustomerName = thirdUserCalendar.CustomerName rsCalendarRelation.CustomerSocial = thirdUserCalendar.CustomerSocial rsCalendarRelation.ProjectType = thirdUserCalendar.ProjectType rsCalendarRelation.ProjectFormType = thirdUserCalendar.ProjectType rsCalendarRelation.Room = thirdUserCalendar.Room rsCalendarRelation.StartTime = thirdUserCalendar.StartTime rsCalendarRelation.EndTime = thirdUserCalendar.EndTime rsCalendarRelation.Content = thirdUserCalendar.Content rsCalendarRelation.FeedExpert = thirdUserCalendar.FeedExpert rsCalendarRelation.Title = thirdUserCalendar.Title rsCalendarRelation.ResearcherMobile = thirdUserCalendar.ResearcherMobile rsCalendarRelation.ModifyTime = time.Now() _, err = tx.Update(rsCalendarRelation, "SelfCalendarId", "UserId", "UserPhone", "UserName", "ProjectName", "ProjectId", "CustomerId", "CustomerName", "CustomerSocial", "ProjectType", "ProjectFormType", "Room", "StartTime", "EndTime", "Content", "FeedExpert", "Title", "ResearcherMobile", "ModifyTime") return } // RsCalendarResearcherRelationInfo type RsCalendarResearcherRelationInfo struct { RsCalendarResearcherId int `orm:"column(rs_calendar_researcher_id);pk"` CalendarType int8 `description:"日历类型;1:路演;2:事项"` ThirdCalendarId int `description:"第三方路演id"` RsCalendarId int `description:"日历活动id"` ResearcherId int `description:"研究员id"` ResearcherName string `description:"研究员名称"` StartDate string `description:"开始日期"` EndDate string `description:"结束日期"` StartTime string `description:"开始时间"` EndTime string `description:"结束时间"` StartWeek string `description:"开始日期对应周"` EndWeek string `description:"结束日期对应周"` CreateTime time.Time ModifyTime time.Time Status int `description:"状态:1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束"` RefuseReason string `description:"拒绝理由"` RefuseTime time.Time `description:"拒绝时间"` DeleteReason string `description:"删除理由"` DeleteTime time.Time `description:"删除时间"` ApproveTime time.Time `description:"接受时间"` IsSynced int `description:"是否与上海同步 0:未同步 1:已同步"` ResearcherSort int `description:"研究员新增排序"` } // GetRsCalendarResearcherInfoIByResearcherIdAndDate 根据研究员和开始/结束日期获取上海的活动路演 func GetRsCalendarResearcherInfoIByResearcherIdAndDate(researcherId int, startDate, endDate string) (items []*RsCalendarResearcherRelationInfo, err error) { o := orm.NewOrm() // sql := `SELECT a.*,c.third_calendar_id,c.calendar_type FROM rs_calendar_researcher a join rs_calendar b on a.rs_calendar_id=b.rs_calendar_id //join rs_calendar_relation c on a.rs_calendar_researcher_id=c.self_calendar_id //WHERE b.source=1 and a.status=2 and c.calendar_type=1 and a.researcher_id=? and start_date>=? and end_date <= ? ` //杭州创建的路演活动,如果上海被删除了,那么也要同步删除杭州的(所以相对于上面的逻辑,下面移除了来源的where条件) sql := `SELECT a.*,c.third_calendar_id,c.calendar_type FROM rs_calendar_researcher a join rs_calendar b on a.rs_calendar_id=b.rs_calendar_id join rs_calendar_relation c on a.rs_calendar_researcher_id=c.self_calendar_id WHERE a.status=2 and c.calendar_type=1 and a.researcher_id=? and start_date>=? and end_date <= ? ` _, err = o.Raw(sql, researcherId, startDate, endDate).QueryRows(&items) return }