123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- package roadshow
- import (
- "github.com/beego/beego/v2/client/orm"
- "hongze/hz_crm_api/models/system"
- "hongze/hz_crm_api/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 system.AdminItem, researcherList []system.AdminItem) (err error) {
- currentStartTimer := time.Unix(int64(thirdUserCalendar.StartTime), 0)
- currentEndTimer := time.Unix(int64(thirdUserCalendar.EndTime), 0)
- o := orm.NewOrm()
- to, err := o.Begin()
- if err != nil {
- return
- }
- defer func() {
- if err != nil {
- _ = to.Rollback()
- } else {
- _ = to.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: "",
- IsSynced: 1,
- }
- rsCalendarId, err := to.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.EnWeekToCnWeek(currentStartTimer.Weekday().String()),
- EndWeek: utils.EnWeekToCnWeek(currentEndTimer.Weekday().String()),
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- Status: 2, //1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束
- RefuseReason: "",
- //RefuseTime: time.Time{},
- DeleteReason: "",
- IsSynced: 1,
- }
- rsCalendarResearcherId, tmpErr := to.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 := to.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 []system.AdminItem) (err error) {
- currentStartTimer := time.Unix(int64(thirdUserCalendar.StartTime), 0)
- currentEndTimer := time.Unix(int64(thirdUserCalendar.EndTime), 0)
- //新增研究员
- //删除研究员
- //更新研究员
- o := orm.NewOrm()
- to, err := o.Begin()
- if err != nil {
- return
- }
- defer func() {
- if err != nil {
- _ = to.Rollback()
- } else {
- _ = to.Commit()
- }
- }()
- // 路演活动表修改
- rsCalendar.Title = thirdUserCalendar.Title
- rsCalendar.ModifyTime = time.Now()
- _, err = to.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 := to.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.EnWeekToCnWeek(currentStartTimer.Weekday().String())
- rsCalendarResearcher.EndWeek = utils.EnWeekToCnWeek(currentEndTimer.Weekday().String())
- rsCalendarResearcher.Status = 2 // 已接受
- rsCalendarResearcher.ModifyTime = time.Now()
- rsCalendarResearcher.IsSynced = 1
- _, tmpErr := to.Update(rsCalendarResearcher, "StartDate", "EndDate", "StartTime", "EndTime", "StartWeek", "EndWeek", "Status", "ModifyTime", "IsSynced")
- 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.EnWeekToCnWeek(currentStartTimer.Weekday().String()),
- EndWeek: utils.EnWeekToCnWeek(currentEndTimer.Weekday().String()),
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- Status: 2, //1:待接受,2:已接受,3:已拒绝,4:已删除,5:已撤回,6:已结束
- RefuseReason: "",
- //RefuseTime: time.Time{},
- DeleteReason: "",
- IsSynced: 1,
- }
- rsCalendarResearcherId, tmpErr := to.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 = to.Update(rsCalendarRelation, "SelfCalendarId", "UserId", "UserPhone", "UserName", "ProjectName", "ProjectId", "CustomerId", "CustomerName", "CustomerSocial", "ProjectType", "ProjectFormType", "Room", "StartTime", "EndTime", "Content", "FeedExpert", "Title", "ResearcherMobile", "ModifyTime")
- return
- }
- // UpdateRsCalendarRelation 更新活动关系信息
- func UpdateRsCalendarRelation(where, updateParams map[string]interface{}) error {
- o := orm.NewOrm()
- ptrStructOrTableName := "rs_calendar"
- qs := o.QueryTable(ptrStructOrTableName)
- for expr, exprV := range where {
- qs = qs.Filter(expr, exprV)
- }
- _, err := qs.Update(updateParams)
- return err
- }
- // 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
- }
|