package yb import ( "encoding/json" "fmt" "github.com/rdlucklib/rdluck_tools/paging" "github.com/tealeg/xlsx" "hongze/hz_crm_api/models" "hongze/hz_crm_api/models/yb" "hongze/hz_crm_api/models/yb/request" ybResp "hongze/hz_crm_api/models/yb/response" "hongze/hz_crm_api/utils" "os" "path/filepath" "time" ) // ComeInList // @Title 获取进门获到会列表 // @Description 取到进门获会列表 // @Param Keyword query string false "搜索关键字" // @Param StartDate query string false "活动开始日期,格式:2021-11-09" // @Param EndDate query string false "活动结束日期,格式:2021-11-10" // @Success 200 {object} []yb.QsUserListResp // @router /activity/comein/list [get] func (this *ActivityController) ComeInList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } keyword := this.GetString("Keyword") startDate := this.GetString("StartDate") endDate := this.GetString("EndDate") pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) condition := "" pars := make([]interface{}, 0) //关键字 if keyword != "" { condition += ` AND a.title LIKE '%` + keyword + `%' ` } //活动是否发布 //if publishStatus >= 0 { // condition += ` AND a.publish_status = ? ` // pars = append(pars, publishStatus) //} //活动时间 if startDate != "" && endDate != "" { condition += ` AND a.start_time >= ? and a.start_time <= ?` pars = append(pars, startDate+" 00:00:00", endDate+" 23:59:59") } // 获取所有的分类 total, list, err := yb.GetComeinList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取活动列表失败!" br.ErrMsg = "获取活动列表失败,Err:" + err.Error() return } //if len(list) > 0 { // for _, activityQs := range list { // if activityQs.QsStatus == 2 { // activityQs.RealTime = activityQs.EventEndTime.Unix() - activityQs.EventStartTime.Unix() // } // } //} page := paging.GetPaging(currentIndex, pageSize, total) resp := ybResp.ComeinListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // ComeInUserList // @Title 获取进门用户列表 // @Description 获取进门用户列表 // @Param ComeinEventId query int false "进门会议在我们系统内部id" // @Param DataType query int8 false "活动进行状态,枚举值:1:ficc联系人;2:权益联系人;3:未知联系人" // @Success 200 {object} []yb.QsUserListResp // @router /activity/comein/user_list [get] func (this *ActivityController) ComeInUserList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } dataType, _ := this.GetInt("DataType", 0) comeinEventId, _ := this.GetInt("ComeinEventId", 0) if comeinEventId <= 0 { br.Msg = "请选择活动" br.ErrMsg = "请选择活动" return } if dataType <= 0 { br.Msg = "请选择类型" br.ErrMsg = "请选择类型" return } pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) condition := "" pars := make([]interface{}, 0) condition += ` AND a.comein_event_id = ? ` pars = append(pars, comeinEventId) switch dataType { case 1: condition += ` AND a.product_id = ? ` pars = append(pars, 1) case 2: condition += ` AND a.product_id = ? ` pars = append(pars, 2) case 3: condition += ` AND a.product_id = ? ` pars = append(pars, 0) } // 获取所有的用户 total, list, err := yb.GetComeinUserList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取活动列表失败!" br.ErrMsg = "获取活动列表失败,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := ybResp.ComeinUserListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } //func init() { // // data, err := comein.GetEventList(time.Now().AddDate(0, 0, -7), time.Now()) // if err != nil { // fmt.Println("err:", err) // return // } // for _, v := range data.Data { // err = SyncUser(v) // if err != nil { // fmt.Println("err3:", err) // } // //return // } // //for index, v := range data.Data { // // // // v.Status = "已结束" // // err := SyncUser(v) // // if index == 0 { // // v.Members[0].PhoneNumber = `18170239278` // // } // // if err != nil { // // fmt.Println("err:", err) // // } // // //return // //} //} // SyncUser 用户同步 //func SyncUser(comeinDataInfo comein.EventListDataResp) (err error) { // if comeinDataInfo.IsDel != 0 { //已删除,那么就过滤掉 // return // } // if !utils.InArrayByStr([]string{"已结束", "空白"}, comeinDataInfo.Status) { //只同步已结束的数据(网络+电话/网络 :预告,直播中,空白,回放 电话:预告,直播中,已过期,已结束) // return // } // roadshowData, err := comein.GetRoadshowDataList(comeinDataInfo.Stime-(1000*60*30), comeinDataInfo.Etime) // if err != nil { // fmt.Println("err2:", err) // return // } // roadshowDataList := roadshowData.Data // _, err = yb.GetComeinEventByComeinId(int(comeinDataInfo.ID)) // if err == nil || err.Error() != utils.ErrNoRow() { // return // } // // // 开始同步 // err = nil // //会议信息 // comeinEventInfo := &yb.ComeinEvent{ // //ComeinEventId: 0, // ComeinId: int(comeinDataInfo.ID), // RoadshowId: int(comeinDataInfo.RoadshowID), // //ConferenceId: comeinDataInfo.ConferenceType, // Title: comeinDataInfo.Title, // StartTime: time.UnixMilli(comeinDataInfo.Stime), // EndTime: time.UnixMilli(comeinDataInfo.Etime), // People: len(comeinDataInfo.Members), // CreateTime: time.Now(), // } // // userList := make([]*yb.ComeinEventUser, 0) //参会用户集合 // // companyProductMap := make(map[string]*company.CompanyProduct) // companyMap := make(map[string]*company.Company) // companyIdProductIdMap := make(map[int]int) // // 参会人 // people := 0 //参与人数 // for _, v := range roadshowDataList { // if v.UserPhone == "" { //如果手机号为空,那么就不处理了,进入下一个循环 // continue // } // //if v.Identity != 0 { //只记录普通成员(也就是参会人) // // continue // //} // people++ // mobile := v.UserPhone // countryCode := strings.Replace(v.AreaCode, "+", "", -1) // // var companyProductInfo *company.CompanyProduct // var companyInfo *company.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, _ = company.GetCompanyProductByCompanyIdAndProductId(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, _ = company.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 : comeinEventInfo.ComeinEventId, // ComeinDataId: int(v.ID), // UserId: 0, // Mobile: mobile, // Email: v.Email, // Name: name, // FirstWatchTime: time.UnixMilli(v.FirstWatchTime), // LastWatchTime: time.UnixMilli(v.LastWatchTime), // 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: "", // Status: "", // SellerId: 0, // SellerName: "", // CompanyViewTotal: 0, // CompanyRoadTotal: 0, // CreateTime: time.Now(), // } // //这个时候是系统用户了,美滋滋 // if companyProductInfo != nil { // comeinEventUserInfo.RegisterTime = wxUserInfo.RegisterTime // //models. // userViewStatisticsInfo, _ := models.GetUserViewStatisticsByMobile(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 // } // userList = append(userList, comeinEventUserInfo) // } // // comeinEventInfo.People = people // //for _, v := range userList { // // fmt.Println(v) // //} // yb.AddComeinEventAndUser(comeinEventInfo, userList) // return //} //func init() { // errMsgList := make([]string, 0) // defer func() { // if len(errMsgList) > 0 { // for _, v := range errMsgList { // fmt.Println(v) // } // } // }() // roadshowData, err := comein.GetRoadshowDataList(time.Now().AddDate(0, 0, -1).Unix()*1000, time.Now().Unix()*1000) // if err != nil { // fmt.Println("err2:", err) // return // } // roadshowDataList := roadshowData.Data // // comeinEventMap := make(map[int]*yb.ComeinEvent) // // // 开始同步 // companyProductMap := make(map[string]*company.CompanyProduct) // companyMap := make(map[string]*company.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, 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.UnixMilli(v.RoadshowBeginTime), // EndTime: time.UnixMilli(v.RoadshowEndTime), // 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 // } // comeinEventMap[int(v.RoadshowID)] = tmpComeinEventInfo // } else { // //数据异常,sql异常 // errMsgList = append(errMsgList, fmt.Sprintf("路演id:%d,路演标题:%s,查找会议失败,err:%s", v.RoadshowID, v.RoadshowTitle, err.Error())) // continue // } // } else { // comeinEventMap[tmpComeinEvent.RoadshowId] = tmpComeinEvent // } // // //校验该记录是否已经入库,如果已经入库,那么就不处理了,进入下一个循环 // 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 *company.CompanyProduct // var companyInfo *company.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, _ = company.GetCompanyProductByCompanyIdAndProductId(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, _ = company.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.UnixMilli(v.FirstWatchTime), // LastWatchTime: time.UnixMilli(v.LastWatchTime), // 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.GetUserViewStatisticsByMobile(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 //} // ExportComeInUserList // @Title 导出进门用户列表 // @Description 导出进门用户列表 // @Param ComeinEventId query int false "进门会议在我们系统内部id" // @Success 200 导出成功 // @router /activity/comein/user_list/export [get] func (this *ActivityController) ExportComeInUserList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } comeinEventId, _ := this.GetInt("ComeinEventId", 0) if comeinEventId <= 0 { br.Msg = "请选择活动" br.ErrMsg = "请选择活动" return } dir, _ := os.Executable() exPath := filepath.Dir(dir) downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx" xlsxFile := xlsx.NewFile() for i := 1; i <= 3; i++ { var sheetName string switch i { case 1: sheetName = "ficc联系人" case 2: sheetName = "权益联系人" case 3: sheetName = "未知联系人" } sheet, err := xlsxFile.AddSheet(sheetName) if err != nil { fmt.Println("新增Sheet失败", err.Error()) br.Msg = "新增Sheet失败" br.ErrMsg = "新增Sheet失败," + err.Error() br.Ret = 408 return } row := sheet.AddRow() row.AddCell().SetValue("手机号") row.AddCell().SetValue("姓名") row.AddCell().SetValue("公司名称") if i < 3 { row.AddCell().SetValue("客户类型") row.AddCell().SetValue("状态") row.AddCell().SetValue("销售") } else if i == 3 { row.AddCell().SetValue("职位") } row.AddCell().SetValue("首次入会时间") row.AddCell().SetValue("最后退出时间") row.AddCell().SetValue("参与总时长") row.AddCell().SetValue("参会方式") row.AddCell().SetValue("参会鉴权") row.AddCell().SetValue("参会状态") // 获取所有的用户 condition := "" pars := make([]interface{}, 0) condition += ` AND a.comein_event_id = ? ` pars = append(pars, comeinEventId) switch i { case 1: condition += ` AND a.product_id = ? ` pars = append(pars, 1) case 2: condition += ` AND a.product_id = ? ` pars = append(pars, 2) case 3: condition += ` AND a.product_id = ? ` pars = append(pars, 0) } total, list, err := yb.GetComeinUserListForExport(condition, pars) if err != nil { br.Msg = "获取活动列表失败!" br.ErrMsg = "获取活动列表失败,Err:" + err.Error() return } if len(list) <= 0 { for n := 0; n < total; n++ { rowIndex := n + 1 row := sheet.Row(rowIndex) row.AddCell() row.AddCell() row.AddCell() } } else { for j, item := range list { row := sheet.Row(j + 1) row.AddCell().SetValue(item.Mobile) row.AddCell().SetValue(item.Name) row.AddCell().SetValue(item.CompanyName) if i < 3 { productName := "" switch item.ProductId { case 1: productName = "FICC" case 2: productName = "权益" } row.AddCell().SetValue(productName) row.AddCell().SetValue(item.Status) row.AddCell().SetValue(item.SellerName) } else if i == 3 { row.AddCell().SetValue(item.Occupation) } row.AddCell().SetValue(item.FirstWatchTime) row.AddCell().SetValue(item.LastWatchTime) min := item.JoinTime / 60 sec := item.JoinTime % 60 stringTime := fmt.Sprintf("%v分%v秒", min, sec) row.AddCell().SetValue(stringTime) joinType := "" switch item.JoinType { case 1: joinType = "网络" case 2: joinType = "电话" } row.AddCell().SetValue(joinType) row.AddCell().SetValue(item.AuthInfo) dataType := "" switch item.DataType { case 1: dataType = "直播" case 2: dataType = "回放" } row.AddCell().SetValue(dataType) } } } err := xlsxFile.Save(downLoadnFilePath) if err != nil { br.Msg = "保存文件失败" br.ErrMsg = "保存文件失败" return } fileName := `进门到会详情` fileName += time.Now().Format("06.01.02") + `.xlsx` //文件名称 this.Ctx.Output.Download(downLoadnFilePath, fileName) defer func() { os.Remove(downLoadnFilePath) }() br.Ret = 200 br.Success = true br.Msg = "success" } // ComeInShare2Seller // @Title 进门到会-分享给销售 // @Description 进门到会-分享给销售 // @Param request body request.QsShare2SellerReq true "type json string" // @router /activity/comein/share2seller [post] func (this *ActivityController) ComeInShare2Seller() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() sysUser := this.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } var req request.ComeInShare2SellerReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ComeinEventId <= 0 { br.Msg = "参数异常!" return } if req.SellerId <= 0 { br.Msg = "请选择销售" return } item, e := yb.GetComeInEventById(req.ComeinEventId) if e != nil { br.Msg = "操作失败" br.ErrMsg = "获取进门到会信息失败, Err: " + e.Error() return } item.ShareSellerId = req.SellerId if e = item.Update([]string{"ShareSellerId"}); e != nil { br.Msg = "操作失败" br.ErrMsg = "更新进门到会销售失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" }