package controllers import ( "eta/eta_mini_crm/models" "eta/eta_mini_crm/models/response" "eta/eta_mini_crm/utils" "fmt" "strconv" "strings" "time" "github.com/rdlucklib/rdluck_tools/paging" ) type UserReadRecordController struct { BaseAuthController } // List // @Title 用户阅读统计列表 // @Description 用户阅读统计列表 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param SellerDepartmentId query int true "营业部门id" // @Param Status query string true "用户状态" // @Param KeyWord query string true "手机号/邮箱/姓名" // @Param IsRegistered query string true "是否注册" // @Param IsSubscribed query string true "是否关注" // @Param RegisterStartDate query string true "注册开始时间" // @Param RegisterEndDate query string true "注册结束时间" // @Param CreateStartDate query string true "创建开始时间" // @Param CreateEndDate query string true "创建结束时间" // @Param SortParam query string true "排序字段" // @Param SortType query string true "排序方式" // @Success 200 {object} response.UserListResp // @router /list [get] func (this *UserReadRecordController) List() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") sellerDepartmentId, _ := this.GetInt("SellerDepartmentId", 0) status := this.GetString("Status") keyWord := this.GetString("KeyWord") IsRegistered := this.GetString("IsRegisterd") IsSubscribed := this.GetString("IsSubscribed") registerStartDate := this.GetString("RegisterStartDate") registerEndDate := this.GetString("RegisterEndDate") createStartDate := this.GetString("CreateStartDate") createEndDate := this.GetString("CreateEndDate") sortParam := this.GetString("SortParam") sortType := this.GetString("SortType") var condition string var sortCondition string var pars []interface{} if keyWord != "" { condition += ` AND (u.real_name LIKE ? OR u.phone LIKE ? OR u.email LIKE ? OR u.company LIKE ?) ` pars = utils.GetLikeKeywordPars(pars, keyWord, 4) } if pageSize <= 0 { pageSize = utils.PageSize20 } else if pageSize > utils.PageSize100 { pageSize = utils.PageSize100 } if currentIndex <= 0 { currentIndex = 1 } if sellerDepartmentId > 0 { condition += " AND u.seller_department_id=? " pars = append(pars, sellerDepartmentId) } if sortParam != "" && sortType != "" { sortCondition = " ORDER BY " var param, sort string switch sortParam { case "LastUpdateTime": param = "last_update_time" case "ReadCnt": param = "read_cnt" } switch sortType { case "asc": sort = " ASC " case "desc": sort = " DESC " } if param != "" && sort != "" { sortCondition += param + " " + sort } else { sortCondition = "" } } switch status { case fmt.Sprint(utils.UserStatusNo): condition += " AND u.status=? " pars = append(pars, 0) case fmt.Sprint(1): condition += " AND u.status=? " pars = append(pars, 2) default: condition += " AND (u.status=? OR u.status=?) " pars = append(pars, 0, 2) } switch IsRegistered { case "是": condition += " AND u.is_registered=? " pars = append(pars, true) case "否": condition += " AND u.is_registered=? " pars = append(pars, false) } switch IsSubscribed { case "是": condition += " AND u.is_subscribed=? " pars = append(pars, true) case "否": condition += " AND u.is_subscribed=? " pars = append(pars, false) } if registerStartDate != "" { registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate) if er != nil { br.Msg = "日期格式有误" return } condition += " AND u.register_time>=? " registerStartDateStr := registerStartTime.Format(utils.FormatDateTime) pars = append(pars, registerStartDateStr) } if registerEndDate != "" { registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate) if er != nil { br.Msg = "日期格式有误" return } condition += " AND u.register_time<=? " // 结束时间包含今天 registerEndTime = registerEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) registerEndDateStr := registerEndTime.Format(utils.FormatDateTime) pars = append(pars, registerEndDateStr) } if createStartDate != "" { createStartTime, er := time.Parse(utils.FormatDate, createStartDate) if er != nil { br.Msg = "日期格式有误" return } condition += " AND u.create_time>=? " createStartDateStr := createStartTime.Format(utils.FormatDateTime) pars = append(pars, createStartDateStr) } if createEndDate != "" { createEndTime, er := time.Parse(utils.FormatDate, createEndDate) if er != nil { br.Msg = "日期格式有误" return } condition += " AND u.create_time<=? " // 结束时间包含今天 createEndTime = createEndTime.Add(23*time.Hour + 59*time.Minute + 59*time.Second) createEndDateStr := createEndTime.Format(utils.FormatDateTime) pars = append(pars, createEndDateStr) } if pageSize <= 0 { pageSize = utils.PageSize20 } else if pageSize > utils.PageSize100 { pageSize = utils.PageSize100 } if currentIndex <= 0 { currentIndex = 1 } startSize := utils.StartIndex(currentIndex, pageSize) total, err := models.GetUserReadCount(condition, pars) if err != nil { br.Msg = "获取失败" br.ErrMsg = "获取失败,Err:" + err.Error() return } userList, err := models.GetUserReadList(condition, sortCondition, pars, startSize, pageSize) if err != nil { br.Msg = "查询用户失败" br.Msg = "查询用户失败,系统错误,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(response.UserListResp) resp.Paging = page resp.List = userList br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" } // Detail // @Title 用户阅读记录详情 // @Description 用户阅读记录详情信息 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param ChartPermissionIds query string true "品种列表" // @Param ClassifyIds query string true "品种列表" // @Success 200 {object} models.LoginResp // @router /detail [get] func (this *UserReadRecordController) Detail() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() UserId, _ := this.GetInt("UserId") pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") chartPermissionids := this.GetString("ChartPermissionIds") classifyIds := this.GetString("ClassifyIds") if UserId <= 0 { br.Msg = "查询用户不存在" return } if pageSize <= 0 { pageSize = utils.PageSize20 } else if pageSize > utils.PageSize100 { pageSize = utils.PageSize100 } if currentIndex <= 0 { currentIndex = 1 } startSize := utils.StartIndex(currentIndex, pageSize) user, err := models.GetUserById(UserId) if err != nil { if err.Error() == utils.ErrNoRow() { br.Msg = "用户不存在或已删除,请刷新页面" return } br.Msg = "查询用户失败" br.ErrMsg = "查询用户失败,系统错误,Err:" + err.Error() return } if user == nil { br.Msg = "用户不存在或已删除,请刷新页面" return } var condition string var pars []interface{} if chartPermissionids != "" { ids := strings.Split(chartPermissionids, ",") if len(ids) != 0 { condition += ` AND ( ` for i, id := range ids { if i == 0 { condition += ` urp2.chart_permission_id = ? ` pars = append(pars, id) } else { condition += ` OR urp2.chart_permission_id = ? ` pars = append(pars, id) } } condition += `) ` } } var firstClassifyIds, secondClassifyIds, thirdClassifyIds []int if classifyIds != "" { ids := strings.Split(classifyIds, ",") classifyList, err := models.GetClassifyListByIds(ids) if err != nil { br.Msg = "查询失败" br.Msg = "分类查询失败,系统错误,Err:" + err.Error() return } for _, v := range classifyList { switch v.Level { case 1: firstClassifyIds = append(firstClassifyIds, v.Id) case 2: secondClassifyIds = append(secondClassifyIds, v.Id) case 3: thirdClassifyIds = append(thirdClassifyIds, v.Id) } } } total, err := models.GetUserReadRecordCountByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars) if err != nil { br.Msg = "查询阅读记录失败" br.ErrMsg = "查询阅读记录失败,Err:" + err.Error() return } readList, err := models.GetUserReadRecordByUserId(firstClassifyIds, secondClassifyIds, thirdClassifyIds, UserId, condition, pars, startSize, pageSize) if err != nil { br.Msg = "查询阅读记录失败" br.ErrMsg = "查询阅读记录失败,系统错误,Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(response.UserReadRecordListResp) resp.Paging = page resp.List = readList br.Msg = "获取成功" br.Data = resp br.Success = true br.Ret = 200 } // ReadCntChart // @Title 用户阅读量统计图信息 // @Description 用户阅读量统计图信息 // @Param ChartPermissionIds query string true "品种列表" // @Param ClassifyIds query string true "品种列表" // @Param StartDate query string true "开始时间" // @Param EndDate query string true "结束时间" // @Param UserId query int true "用户id" // @Success 200 {object} models.LoginResp // @router /readCntChart [get] func (this *UserReadRecordController) ReadCntChart() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() userId, _ := this.GetInt("UserId") startDate := this.GetString("StartDate") endDate := this.GetString("EndDate") chartPermissionIds := this.GetString("ChartPermissionIds") classifyIds := this.GetString("ClassifyIds") var condition string var pars []interface{} if chartPermissionIds != "" { ids := strings.Split(chartPermissionIds, ",") if len(ids) != 0 { condition += ` AND ( ` for i, id := range ids { if i == 0 { condition += ` urp.chart_permission_id = ? ` pars = append(pars, id) } else { condition += ` OR urp.chart_permission_id = ? ` pars = append(pars, id) } } condition += `) ` } } if classifyIds != "" { ids := strings.Split(classifyIds, ",") if len(ids) != 0 { condition += ` AND ( ` for i, id := range ids { if i == 0 { condition += ` classify_id2 = ? ` pars = append(pars, id) } else { condition += ` OR classify_id2 = ? ` pars = append(pars, id) } } condition += `) ` } } if startDate == "" { startDate = time.Now().AddDate(-1, 0, 0).Format(utils.FormatDate) } if endDate == "" { endDate = time.Now().AddDate(0, 0, 1).Format(utils.FormatDate) } if userId > 0 { condition += ` AND ur.user_id = ? ` pars = append(pars, userId) } readCnts, err := models.GetStaticReadCnt(condition, pars, startDate, endDate) if err != nil { br.Msg = "获取阅读统计失败" br.ErrMsg = "获取阅读统计失败,系统错误,Err:" + err.Error() return } br.Msg = "查询成功" br.Data = readCnts br.Ret = 200 br.Success = true } // readPermissionChart // @Title 用户阅读品种图信息 // @Description 用户阅读品种图信息 // @Param UserId query string true "用户id" // @Success 200 {object} models.LoginResp // @router /readPermissionChart [get] func (this *UserReadRecordController) ReadPermissionChart() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() userId, _ := this.GetInt("UserId") var condition string var pars []interface{} if userId > 0 { condition += ` AND ur.user_id = ? ` pars = append(pars, userId) } permissionCnts, err := models.GetStaticPermissionCnt(condition, pars) if err != nil { br.Msg = "获取品种阅读统计失败" br.ErrMsg = "获取品种阅读统计失败,系统错误,Err:" + err.Error() return } var sum int for _, v := range permissionCnts { sum += v.Count } for _, v := range permissionCnts { percent := float64(v.Count) / float64(sum) * 100 percentStr := fmt.Sprintf("%.0f", percent) parsedFloat, _ := strconv.ParseFloat(percentStr, 64) v.Percent = parsedFloat } br.Msg = "查询成功" br.Data = permissionCnts br.Ret = 200 br.Success = true }