Browse Source

fix:添加潜在用户查询接口

zqbao 9 tháng trước cách đây
mục cha
commit
baa670b4b2
3 tập tin đã thay đổi với 214 bổ sung0 xóa
  1. 156 0
      controllers/user.go
  2. 49 0
      models/user.go
  3. 9 0
      routers/commentsRouter.go

+ 156 - 0
controllers/user.go

@@ -651,6 +651,162 @@ func (this *UserController) List() {
 	br.Msg = "获取成功"
 }
 
+// PotentialList
+// @Title 潜在用户列表
+// @Description 潜在用户列表
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   KeyWord   query   string  true       "手机号/邮箱"
+// @Param   RegisterStartDate   query   string  true       "注册开始时间"
+// @Param   RegisterEndDate   query   string  true       "注册结束时间"
+// @Param   LastUpdateStartDate query   string  true       "最后一次阅读开始时间"
+// @Param   LastUpdateEndDate   query   string  true       "最后一次阅读结束时间"
+// @Param   SortParam   query   string  true       "排序字段"
+// @Param   SortType   query   string  true       "排序方式"
+// @Success 200 {object} response.UserListResp
+// @router /potential/list [get]
+func (this *UserController) PotentialList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	keyWord := this.GetString("KeyWord")
+	registerStartDate := this.GetString("RegisterStartDate")
+	registerEndDate := this.GetString("RegisterEndDate")
+	lastUpdateStartDate := this.GetString("LastUpdateStartDate")
+	lastUpdateEndDate := this.GetString("LastUpdateEndDate")
+	sortParma := this.GetString("SortParam")
+	sortType := this.GetString("SortType")
+
+	var sortCondition string
+	var condition string
+	var pars []interface{}
+
+	if keyWord != "" {
+		condition += ` AND ( u.phone LIKE ? OR u.email LIKE ?) `
+		pars = utils.GetLikeKeywordPars(pars, keyWord, 2)
+	}
+
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	} else if pageSize > utils.PageSize100 {
+		pageSize = utils.PageSize100
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+
+	if sortParma != "" && sortType != "" {
+		sortCondition = " ORDER BY "
+		var param, sort string
+		switch sortParma {
+		case "RegisterTime":
+			param = "u.register_time"
+		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 = ""
+		}
+	}
+
+	if registerStartDate != "" {
+		registerStartTime, er := time.Parse(utils.FormatDate, registerStartDate)
+		if er != nil {
+			br.Msg = "日期格式有误"
+			return
+		}
+		condition += " AND u.register_time>? "
+		pars = append(pars, registerStartTime)
+	}
+	if registerEndDate != "" {
+		registerEndTime, er := time.Parse(utils.FormatDate, registerEndDate)
+		if er != nil {
+			br.Msg = "日期格式有误"
+			return
+		}
+		condition += " AND u.register_time<? "
+		pars = append(pars, registerEndTime)
+	}
+	if lastUpdateStartDate != "" {
+		lastUpdateStartTime, er := time.Parse(utils.FormatDate, lastUpdateStartDate)
+		if er != nil {
+			br.Msg = "日期格式有误"
+			return
+		}
+		condition += " AND ur.create_time>? "
+		pars = append(pars, lastUpdateStartTime)
+	}
+	if lastUpdateEndDate != "" {
+		lastUpdateEndTime, er := time.Parse(utils.FormatDate, lastUpdateEndDate)
+		if er != nil {
+			br.Msg = "日期格式有误"
+			return
+		}
+		condition += " AND ur.create_time<? "
+		pars = append(pars, lastUpdateEndTime)
+	}
+	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.GetPotentialUserCountByConditon(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	resp := new(response.UserListResp)
+	if total == 0 {
+		page := paging.GetPaging(currentIndex, pageSize, total)
+		resp.Paging = page
+		br.Msg = "获取成功"
+		br.Ret = 200
+		br.Success = true
+		br.Data = resp
+		return
+	}
+	userIds, err := models.GetPotentialUserIdsByConditon(condition, pars)
+	if err != nil {
+		br.Msg = "查询用户失败"
+		br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
+		return
+	}
+	userList, err := models.GetPotentialUserListByConditonSort(userIds, sortCondition, startSize, pageSize)
+	if err != nil {
+		br.Msg = "查询用户失败"
+		br.Msg = "查询用户失败,系统错误,Err:" + err.Error()
+		return
+	}
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	resp.Paging = page
+	resp.List = userList
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
 // Detail
 // @Title 用户详情信息
 // @Description 用户详情信息

+ 49 - 0
models/user.go

@@ -2,6 +2,8 @@ package models
 
 import (
 	"context"
+	"fmt"
+	"strings"
 	"time"
 
 	"github.com/beego/beego/v2/client/orm"
@@ -162,6 +164,53 @@ func GetUserListByConditonSort(condition, sortConditon string, pars []interface{
 	return
 }
 
+func GetPotentialUserCountByConditon(condition string, pars []interface{}) (count int, err error) {
+	sql := `SELECT COUNT(DISTINCT u.user_id) AS count
+	FROM user AS u
+	LEFT JOIN user_read_record AS ur
+	ON u.user_id = ur.user_id
+	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
+	if condition != "" {
+		sql += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func GetPotentialUserIdsByConditon(condition string, pars []interface{}) (userIds []string, err error) {
+	sql := `SELECT DISTINCT u.user_id AS user_id
+	FROM user AS u
+	LEFT JOIN user_read_record AS ur
+	ON u.user_id = ur.user_id
+	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
+	if condition != "" {
+		sql += condition
+	}
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, pars).QueryRows(&userIds)
+	return
+}
+
+func GetPotentialUserListByConditonSort(userIds []string, sortConditon string, startSize, pageSize int) (items []*UserView, err error) {
+	sql := `SELECT u.*, COUNT(ur.user_id) AS read_cnt, Max(ur.create_time) AS last_update_time
+	FROM user AS u
+	LEFT JOIN user_read_record AS ur
+	ON u.user_id = ur.user_id
+	WHERE 1=1 AND (u.phone IS NOT NULL OR u.email IS NOT NULL) AND u.status=1`
+	if len(userIds) > 0 {
+		sql += fmt.Sprintf(" AND u.user_id IN (%s)", strings.Join(userIds, ","))
+	}
+	sql += ` GROUP BY u.user_id`
+	if sortConditon != "" {
+		sql += sortConditon
+	}
+	sql += ` LIMIT ?,? `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
+	return
+}
+
 func GetUserReadList(condition, sortCondition string, pars []interface{}, startSize, pageSize int) (items []*UserView, err error) {
 	sql := `SELECT u.*, su.sys_real_name AS seller_name, COUNT(ur.user_id) AS read_cnt, Max(ur.create_time) AS last_update_time
 	FROM user AS u

+ 9 - 0
routers/commentsRouter.go

@@ -313,6 +313,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserController"],
+        beego.ControllerComments{
+            Method: "PotentialList",
+            Router: `/potential/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"] = append(beego.GlobalControllerRouter["eta/eta_mini_crm/controllers:UserLoginController"],
         beego.ControllerComments{
             Method: "AreaCodeList",