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" ybService "hongze/hz_crm_api/services/yb" "hongze/hz_crm_api/utils" "os" "path/filepath" "time" ) // CreateQs // @Title 创建全时会议 // @Description 创建全时会议接口 // @Param request body request.CreateQsReq true "type json string" // @router /activity/create_qs [post] func (this *ActivityController) CreateQs() { 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.CreateQsReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "请选择活动!" br.ErrMsg = "活动ID有误!" return } if req.Time <= 0 { br.Msg = "请输入大于0的会议时长!" br.ErrMsg = "请输入大于0的会议时长!" return } err, errMsg := ybService.CreateQsEvent(req) if err != nil { br.Msg = "创建全时会议失败!" + errMsg br.ErrMsg = "创建全时会议失败,Err:" + err.Error() return } msg := "创建成功" br.Ret = 200 br.Success = true br.Msg = msg } // CancelQs // @Title 取消全时会议 // @Description 取消全时会议解耦 // @Param request body request.CancelQsReq true "type json string" // @Success 200 {object} 取消发布成功 // @router /activity/cancel_qs [post] func (this *ActivityController) CancelQs() { 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.CancelQsReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.ActivityId <= 0 { br.Msg = "活动ID异常!" br.ErrMsg = "活动ID异常" return } err, errMsg := ybService.CancelQsEvent(req.ActivityId) if err != nil { br.Msg = "创建全时会议失败!" + errMsg br.ErrMsg = "创建全时会议失败,Err:" + err.Error() return } msg := "取消会议成功" br.Ret = 200 br.Success = true br.Msg = msg } // QsList // @Title 获取到会列表 // @Description 获取到会列表 // @Param Keyword query string false "搜索关键字" // @Param ActivityTypeIds query string false "活动类别ids,多个用英文逗号分割" // @Param ActiveStatus query int8 false "活动进行状态,枚举值:1:未开始;2:进行中;3:已结束" // @Param StartDate query string false "活动开始日期,格式:2021-11-09" // @Param EndDate query string false "活动结束日期,格式:2021-11-10" // @Success 200 {object} []yb.QsListResp // @router /activity/quanshi/list [get] func (this *ActivityController) QsList() { 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") activityTypeIds := this.GetString("ActivityTypeIds", "") activeStatus, _ := this.GetInt("ActiveStatus", 0) //publishStatus, _ := this.GetInt("PublishStatus", 0) 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.activity_name LIKE '%` + keyword + `%' ` } //活动类别ids if activityTypeIds != "" { condition += ` AND a.activity_type_id IN (` + activityTypeIds + `)` } //活动开始与否状态 order := "" if activeStatus > 0 { nowTime := time.Now().Format(utils.FormatDateTime) //1:未开始;2:进行中;3:已结束" switch activeStatus { case 1: condition += ` AND a.start_time > ? ` pars = append(pars, nowTime) case 2: condition += ` AND a.start_time <= ? and end_time >= ? ` pars = append(pars, nowTime, nowTime) order = " a.start_time DESC" case 3: condition += ` AND a.end_time < ? ` pars = append(pars, nowTime) order = " a.start_time DESC" } } //活动是否发布 //if publishStatus >= 0 { // condition += ` AND a.publish_status = ? ` // pars = append(pars, publishStatus) //} //活动时间 if startDate != "" && endDate != "" { condition += ` AND a.start_time >= ? and a.end_time <= ?` pars = append(pars, startDate+" 00:00:00", endDate+" 23:59:59") } // 获取所有的分类 total, list, err := yb.GetQsList(condition, order, 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.QsListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // QsUserList // @Title 获取到会用户列表 // @Description 获取到会用户列表 // @Param QsId query int false "全时会议与活动的关联id" // @Param DataType query int8 false "活动进行状态,枚举值:1:已知联系人;2:未知联系人" // @Success 200 {object} []yb.QsUserListResp // @router /activity/quanshi/user_list [get] func (this *ActivityController) QsUserList() { 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) qsId, _ := this.GetInt("QsId", 0) if qsId <= 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.qs_id = ? ` pars = append(pars, qsId) 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.GetQsUserList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取活动列表失败!" br.ErrMsg = "获取活动列表失败,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := ybResp.QsUserListResp{ List: list, Paging: page, } br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // ExportQsUserList // @Title 导出全时用户列表 // @Description 导出全时用户列表 // @Param QsId query int false "全时会议与活动的关联id" // @Success 200 导出成功 // @router /activity/quanshi/user_list/export [get] func (this *ActivityController) ExportQsUserList() { 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 } qsId, _ := this.GetInt("QsId", 0) if qsId <= 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("注册时间") row.AddCell().SetValue("累计阅读") 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.qs_id = ? ` pars = append(pars, qsId) 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.GetQsUserListForExport(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.RegisterTime) row.AddCell().SetValue(item.ViewTotal) row.AddCell().SetValue(item.LastViewTime) row.AddCell().SetValue(item.CompanyName) 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) row.AddCell().SetValue(item.CompanyViewTotal) row.AddCell().SetValue(item.CompanyRoadTotal) } } } 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" } // QsShare2Seller // @Title 全时会议-分享给销售 // @Description 全时会议-分享给销售 // @Param request body request.QsShare2SellerReq true "type json string" // @router /activity/qs_share2seller [post] func (this *ActivityController) QsShare2Seller() { 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.QsShare2SellerReq err := json.Unmarshal(this.Ctx.Input.RequestBody, &req) if err != nil { br.Msg = "参数解析异常!" br.ErrMsg = "参数解析失败,Err:" + err.Error() return } if req.QsId <= 0 { br.Msg = "参数异常!" return } if req.SellerId <= 0 { br.Msg = "请选择销售" return } item, e := yb.GetQsEventByQsId(req.QsId) if e != nil { br.Msg = "操作失败" br.ErrMsg = "获取全时会议信息失败, Err: " + e.Error() return } item.ShareSellerId = req.SellerId item.ModifyTime = time.Now().Local() if e = item.Update([]string{"ShareSellerId", "ModifyTime"}); e != nil { br.Msg = "操作失败" br.ErrMsg = "更新全时会议销售失败, Err: " + e.Error() return } br.Ret = 200 br.Success = true br.Msg = "操作成功" }