Browse Source

新增首页列表接口

rdluck 4 years ago
parent
commit
9d923ad83b

+ 9 - 15
controllers/base_auth.go

@@ -7,12 +7,11 @@ import (
 	"net/url"
 	"strconv"
 	"strings"
-	"time"
 
 	"github.com/astaxie/beego"
 
-	"hongze/hongze_admin/models"
-	"hongze/hongze_admin/utils"
+	"hongze/hongze_api/models"
+	"hongze/hongze_api/utils"
 
 	"rdluck_tools/log"
 )
@@ -25,7 +24,7 @@ func init() {
 
 type BaseAuthController struct {
 	beego.Controller
-	SysUser *models.Admin
+	User *models.WxUserItem
 }
 
 func (this *BaseAuthController) Prepare() {
@@ -63,7 +62,7 @@ func (this *BaseAuthController) Prepare() {
 			}
 
 			fmt.Println("GetUserByToken")
-			session, err := models.GetSysSessionByToken(token)
+			session, err := models.GetSessionByToken(token)
 			if err != nil {
 				if err.Error() == utils.ErrNoRow() {
 					this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "Token 信息已变更:Token: " + token}, false, false)
@@ -79,29 +78,24 @@ func (this *BaseAuthController) Prepare() {
 				this.StopRun()
 				return
 			}
-			if time.Now().After(session.ExpiredTime) {
-				this.JSON(models.BaseResponse{Ret: 408, Msg: "请重新登录!", ErrMsg: "获取用户信息异常,Eerr:" + err.Error()}, false, false)
-				this.StopRun()
-				return
-			}
-			admin, err := models.GetSysUserById(session.SysUserId)
+			wxUser, err := models.GetWxUserItemByUserId(session.UserId)
 			if err != nil {
 				if err.Error() == utils.ErrNoRow() {
-					this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取admin 信息失败 " + strconv.Itoa(session.SysUserId)}, false, false)
+					this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取admin 信息失败 " + strconv.Itoa(session.UserId)}, false, false)
 					this.StopRun()
 					return
 				}
-				this.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "获取admin信息异常,Eerr:" + err.Error()}, false, false)
+				this.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "获取wx_user信息异常,Eerr:" + err.Error()}, false, false)
 				this.StopRun()
 				return
 			}
-			if admin == nil {
+			if wxUser == nil {
 				this.JSON(models.BaseResponse{Ret: 408, Msg: "网络异常,请稍后重试!", ErrMsg: "admin is empty "}, false, false)
 				this.StopRun()
 				return
 			}
 
-			this.SysUser = admin
+			this.User = wxUser
 		} else {
 			this.JSON(models.BaseResponse{Ret: 408, Msg: "请求异常,请联系客服!", ErrMsg: "POST之外的请求,暂不支持"}, false, false)
 			this.StopRun()

+ 2 - 2
controllers/base_common.go

@@ -7,8 +7,8 @@ import (
 
 	"github.com/astaxie/beego"
 
-	"hongze/hongze_admin/models"
-	"hongze/hongze_admin/utils"
+	"hongze/hongze_api/models"
+	"hongze/hongze_api/utils"
 )
 
 type BaseCommonController struct {

+ 40 - 0
controllers/home.go

@@ -0,0 +1,40 @@
+package controllers
+
+import (
+	"hongze/hongze_api/models"
+	"hongze/hongze_api/services"
+)
+
+//首页
+type HomeController struct {
+	BaseAuthController
+}
+
+// @Title 首页列表接口
+// @Description 首页列表接口
+// @Success 200 {object} models.ReportListResp
+// @router /list [get]
+func (this *HomeController) ListHome() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,用户信息为空"
+		br.Ret = 408
+		return
+	}
+	list, err := services.HomeList(30809, 16)
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取数据成功"
+	br.Data = list
+}

+ 30 - 0
models/base.go

@@ -0,0 +1,30 @@
+package models
+
+type BaseResponse struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    interface{}
+	Success bool `description:"true 执行成功,false 执行失败"`
+}
+
+type BaseResponseRef struct {
+	Ret     int
+	Msg     string
+	ErrMsg  string
+	ErrCode string
+	Data    string
+}
+
+type BaseResponseResult struct {
+	Ret     int    `description:"状态:200 成功,408 重新登录,403:为失败"`
+	Msg     string `description:"提示信息,对用户展示"`
+	ErrMsg  string `description:"错误信息,供开发定位问题"`
+	ErrCode string `description:"错误编码,预留"`
+	Data    string `description:"返回数据,json格式字符串"`
+}
+
+func (r *BaseResponse) Init() *BaseResponse {
+	return &BaseResponse{Ret: 403}
+}

+ 16 - 0
models/classify.go

@@ -0,0 +1,16 @@
+package models
+
+import (
+	"time"
+)
+
+type Classify struct {
+	Id           int       `orm:"column(id);pk"`
+	ClassifyName string    `description:"分类名称"`
+	Sort         int       `json:"-"`
+	ParentId     int       `description:"父级分类id"`
+	CreateTime   time.Time `description:"创建时间"`
+	ModifyTime   time.Time `description:"修改时间"`
+	Abstract     string    `description:"简介"`
+	Descript     string    `description:"描述"`
+}

+ 43 - 0
models/company.go

@@ -0,0 +1,43 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type Company struct {
+	CompanyId       int64     `orm:"column(company_id);pk"`
+	CompanyName     string    `description:"客户名称"`
+	CreditCode      string    `description:"社会统一信用码"`
+	CompanyCode     string    `description:"客户编码"`
+	Sort            int       `description:"优先级"`
+	IsFeeCustomer   int       `description:"是否付费用户"`
+	Country         string    `description:"国家编码"`
+	ProvinceId      int       `description:"省id"`
+	CityId          int       `description:"市id"`
+	Address         string    `description:"详细地址"`
+	CompanyType     int       `orm:"column(type)" description:"客户标签,1:付费客户,2:试用客户,3:流失客户,4:潜在客户"`
+	Enabled         int       `description:"用户状态"`
+	CreatedTime     time.Time `description:"创建时间"`
+	LastUpdatedTime time.Time `description:"最后一次阅读时间"`
+	Seller          string    `description:"销售员"`
+	SellsId         int       `description:"销售员id"`
+	CompanyBelong   string    `description:"客户所属,ficc:ficc客户,public_offering:公募客户,partner:合作伙伴"`
+	StartDate       string    `description:"合同开始日期"`
+	EndDate         string    `description:"合同结束日期"`
+	LoseReason      string    `description:"流失原因"`
+	LastType        int       `description:"原客户标签"`
+	IsVip           int       `description:"0:普通用户,1:大客户"`
+	LossTime        time.Time `description:"流失时间"`
+	FirstStartDate  string    `description:"首次设置为试用客户开始时间"`
+	FirstEndDate    string    `description:"首次设置为试用客户结束时间"`
+	DateType        int       `description:"设置流失类型,1:1个月,2:2个月,3:3个月"`
+}
+
+func GetCompanyById(companyId int) (item *Company, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM company WHERE company_id=? `
+	err = o.Raw(sql, companyId).QueryRow(&item)
+	return
+}
+

+ 1 - 1
models/db.go

@@ -1,7 +1,7 @@
 package models
 
 import (
-	"hongze/hongze_data_entry/utils"
+	"hongze/hongze_api/utils"
 	_ "github.com/go-sql-driver/mysql"
 	"time"
 

+ 69 - 0
models/home.go

@@ -0,0 +1,69 @@
+package models
+
+import (
+	"hongze/hongze_api/utils"
+	"rdluck_tools/orm"
+)
+
+type HomeList struct {
+	ClassifyId   int    `orm:"column(id)"`
+	ClassifyName string `description:"分类名称"`
+	Child        []*HomeClassifyItem
+}
+
+type HomeClassifyItem struct {
+	ClassifyId   int    `orm:"column(id)"`
+	ClassifyName string `description:"分类名称"`
+	Child        *Report
+}
+
+func ListHome(userId, maxPermission, userPermission int, permissionStr string) (items []*HomeList, err error) {
+	o := orm.NewOrm()
+	o.Using("rddp")
+	sql := `SELECT id,classify_name FROM classify WHERE parent_id=0 ORDER BY create_time ASC `
+	_, err = o.Raw(sql).QueryRows(&items)
+	if err != nil {
+		return
+	}
+	lenItem := len(items)
+	for i := 0; i < lenItem; i++ {
+		item := items[i]
+		subItems := make([]*HomeClassifyItem, 0)
+		subWhere := ``
+		if maxPermission < 15 && userPermission == 0 {
+			if permissionStr != "" {
+				subWhere = ` WHERE parent_id=? AND classify_name IN(` + permissionStr + `) `
+			} else {
+				subWhere = ` WHERE parent_id=? `
+			}
+		} else {
+			subWhere = ` WHERE parent_id=? `
+		}
+		subSql := `SELECT id ,classify_name FROM classify   `
+		subSql += subWhere
+		subSql += ` ORDER BY create_time ASC `
+		_, err = o.Raw(subSql, item.ClassifyId).QueryRows(&subItems)
+		if err != nil {
+			return
+		}
+		lenSub := len(subItems)
+		for k := 0; k < lenSub; k++ {
+			subItem := subItems[k]
+			reportSql := ` SELECT a.id,a.classify_name,b.*,
+                (SELECT COUNT(1) FROM report_view_log AS c WHERE c.user_id=? AND c.report_id=b.id ) AS is_show_new_label,
+                CASE WHEN DATE(b.modify_time)=DATE(NOW()) THEN 1 ELSE 0 END AS is_current_date
+                FROM classify AS a
+                INNER JOIN report AS b ON a.id=b.classify_id_second
+                WHERE b.state=2 AND a.id=?
+                ORDER BY b.publish_time DESC LIMIT 1  `
+			report := new(Report)
+			err = o.Raw(reportSql, userId, subItem.ClassifyId).QueryRow(&report)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				return
+			}
+			subItems[k].Child = report
+		}
+		items[i].Child = subItems
+	}
+	return
+}

+ 5 - 0
models/report.go

@@ -0,0 +1,5 @@
+package models
+
+type Report struct {
+
+}

+ 23 - 0
models/session.go

@@ -0,0 +1,23 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type Session struct {
+	SessionId   int
+	UserId      int
+	OpenId      string
+	AccessToken string
+	ExpireTime  string
+	CreatedTime time.Time
+}
+
+func GetSessionByToken(token string) (item *Session, err error) {
+	sql := `SELECT * FROM session WHERE access_token=? AND expired_time> NOW() ORDER BY expired_time DESC LIMIT 1 `
+	o := orm.NewOrm()
+	o.Using("rddp")
+	err = o.Raw(sql, token).QueryRow(&item)
+	return
+}

+ 82 - 0
models/wx_user.go

@@ -0,0 +1,82 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+type WxUser struct {
+	UserId          int       `description:"用户id"`
+	OpenId          string    `description:"open_id"`
+	UnionId         string    `description:"union_id"`
+	Subscribe       string    `description:"是否关注"`
+	CompanyId       int       `description:"客户id"`
+	NickName        string    `description:"用户昵称"`
+	RealName        string    `description:"用户实际名称"`
+	UserCode        string    `description:"用户编码"`
+	Mobile          string    `description:"手机号码"`
+	BindAccount     string    `description:"绑定时的账号"`
+	WxCode          string    `description:"微信号"`
+	Profession      string    `description:"职业"`
+	Email           string    `description:"邮箱"`
+	Telephone       string    `description:"座机"`
+	Sex             int       `description:"普通用户性别,1为男性,2为女性"`
+	Province        string    `description:"普通用户个人资料填写的省份"`
+	City            string    `description:"普通用户个人资料填写的城市"`
+	Country         string    `description:"国家,如中国为CN"`
+	SubscribeTime   time.Time `description:"关注时间"`
+	Remark          string    `description:"备注"`
+	Headimgurl      string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
+	Privilege       string    `description:"用户特权信息,json数组,如微信沃卡用户为(chinaunicom)"`
+	Unionid         string    `description:"用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。"`
+	FirstLogin      int       `description:"是否第一次登陆"`
+	Enabled         int       `description:"是否可用"`
+	CreatedTime     time.Time `description:"创建时间"`
+	LastUpdatedTime time.Time `description:"最新一次修改时间"`
+	Seller          string    `description:"销售员"`
+	Note            string    `description:"客户备份信息"`
+	IsNote          int       `description:"是否备注过信息"`
+	FromType        string    `description:"report' COMMENT 'report:研报,teleconference:电话会"`
+	ApplyMethod     int       `description:"0:未申请,1:已付费客户申请试用,2:非客户申请试用"`
+}
+
+type WxUserItem struct {
+	UserId      int    `description:"用户id"`
+	OpenId      string `description:"open_id"`
+	UnionId     string `description:"union_id"`
+	CompanyId   int    `description:"客户id"`
+	NickName    string `description:"用户昵称"`
+	RealName    string `description:"用户实际名称"`
+	Mobile      string `description:"手机号码"`
+	BindAccount string `description:"绑定时的账号"`
+	Email       string `description:"邮箱"`
+	Headimgurl  string `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
+	ApplyMethod int    `description:"0:未申请,1:已付费客户申请试用,2:非客户申请试用"`
+}
+
+func GetWxUserItemByUserId(userId int) (item *WxUserItem, err error) {
+	sql := `SELECT * FROM wx_user WHERE user_id=? `
+	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
+	return
+}
+
+type PermissionSearchKeyWord struct {
+	KeyWord string
+}
+
+func GetPermissionSearchKeyWord(userId int) (items []*PermissionSearchKeyWord, err error) {
+	sql := "SELECT a.key_word FROM chart_permission_search_key_word_mapping AS a INNER JOIN company_report_permission AS crp ON a.chart_permission_id=crp.chart_permission_id INNER JOIN wx_user AS wu ON wu.company_id=crp.company_id WHERE wu.user_id=? AND `from`='rddp' GROUP BY a.key_word"
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, userId).QueryRows(&items)
+	return
+}
+
+//判断客户权限总数
+func GetUserIsMaxPermission(companyId int) (count int, err error) {
+	sql := ` SELECT COUNT(DISTINCT b.chart_permission_id) as count FROM company as a
+        INNER JOIN company_report_permission as b on a.company_id=b.company_id
+        WHERE b.company_id=? `
+	o := orm.NewOrm()
+	err = o.Raw(sql, companyId).QueryRow(&count)
+	return
+}

+ 6 - 3
routers/router.go

@@ -10,6 +10,7 @@ package routers
 import (
 	"github.com/astaxie/beego"
 	"github.com/astaxie/beego/plugins/cors"
+	"hongze/hongze_api/controllers"
 )
 
 func init() {
@@ -21,9 +22,11 @@ func init() {
 		ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
 		AllowCredentials: true,
 	}))
-	ns := beego.NewNamespace("/admin",
-		beego.NSNamespace("/sysuser",
-
+	ns := beego.NewNamespace("/api",
+		beego.NSNamespace("/home",
+			beego.NSInclude(
+				&controllers.HomeController{},
+			),
 		),
 	)
 	beego.AddNamespace(ns)

+ 32 - 0
services/home.go

@@ -0,0 +1,32 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_api/models"
+	"strings"
+)
+
+func HomeList(userId, companyId int) (items []*models.HomeList,err error) {
+	permissionKey, err := models.GetPermissionSearchKeyWord(userId)
+	if err != nil {
+		return
+	}
+	var permissionArr []string
+	for _, v := range permissionKey {
+		permissionArr = append(permissionArr, v.KeyWord)
+	}
+	permissionStr := strings.Join(permissionArr, "','")
+	permissionStr = "'" + permissionStr + "'"
+	fmt.Println("permissionStr")
+	fmt.Println(permissionStr)
+	maxPermissionCount, err := models.GetUserIsMaxPermission(companyId)
+	if err != nil {
+		return
+	}
+	permissionStatus, err := CheckUserPermission(userId)
+	if err != nil {
+		return
+	}
+	items, err = models.ListHome(userId, maxPermissionCount, permissionStatus, permissionStr)
+	return
+}

+ 1 - 1
services/oss.go

@@ -4,7 +4,7 @@ import (
 	"github.com/aliyun/aliyun-oss-go-sdk/oss"
 	"time"
 
-	"hongze/hongze_data_entry/utils"
+	"hongze/hongze_api/utils"
 )
 
 /*

+ 1 - 1
services/sms.go

@@ -1,7 +1,7 @@
 package services
 
 import (
-	"hongze/hongze_data_entry/utils"
+	"hongze/hongze_api/utils"
 	"encoding/json"
 	"fmt"
 	"io/ioutil"

+ 49 - 0
services/user_permission.go

@@ -0,0 +1,49 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_api/models"
+	"hongze/hongze_api/utils"
+	"strconv"
+)
+
+func CheckUserPermission(userId int) (status int, err error) {
+	if userId > 0 {
+		wxUser, err := models.GetWxUserItemByUserId(userId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				status = 4001
+				err = errors.New("用户信息不存在:userId:" + strconv.Itoa(userId))
+				return status,err
+			}
+			status = 4001
+			err = errors.New("获取用户信息失败:userId:" + strconv.Itoa(userId) + ";Err:" + err.Error())
+			return status, err
+		}
+		if wxUser == nil {
+			status = 4001
+			err = errors.New("获取用户信息失败:userId:" + strconv.Itoa(userId))
+			return status, err
+		}
+		companyId := wxUser.CompanyId
+		company, err := models.GetCompanyById(companyId)
+		if err != nil {
+			status = 4001
+			err = errors.New("获取客户信息失败:userId:" + strconv.Itoa(userId) + ";Err:" + err.Error())
+			return status, err
+		}
+		if company == nil {
+			status = 4001
+			err = errors.New("客户信息不存在:userId:" + strconv.Itoa(userId))
+			return status, err
+		}
+		if company.IsFeeCustomer == 1 {
+			status = 0
+		} else {
+			status = 40002
+		}
+	} else {
+		status = 40001
+	}
+	return
+}

+ 6 - 2
utils/constants.go

@@ -37,10 +37,13 @@ const (
 
 //聚合短信
 var (
-	TplId    = "65692"
-	JhAppKey = "4c8504c49dd335e99cfd7b6a3a9e2415"
+	JhGnTplId  = "65692"                            //聚合国内模板编码
+	JhGjTplId  = "10054"                            //聚合国内模板编码
+	JhGnAppKey = "4c8504c49dd335e99cfd7b6a3a9e2415" //聚合国内AppKey
+	JhGjAppKey = "3326ad2c1047a4cd92ace153e6044ca3"
 )
 
+
 //科大讯飞--语音合成
 const (
 	XfSTATUS_FIRST_FRAME    = 0 //第一帧标识
@@ -61,6 +64,7 @@ var (
 
 	Imghost    string = "http://hongze.oss-cn-shanghai.aliyuncs.com/"
 	Upload_dir string = "static/images/"
+	Upload_Audio_Dir string = "static/audio/"
 
 	AccessKeyId     string = "LTAIFMZYQhS2BTvW"
 	AccessKeySecret string = "12kk1ptCHoGWedhBnKRVW5hRJzq9Fq"

+ 1 - 1
utils/logs.go

@@ -8,5 +8,5 @@ var FileLog *logs.BeeLogger
 
 func init() {
 	FileLog = logs.NewLogger(1000000)
-	FileLog.SetLogger(logs.AdapterFile, `{"filename":"./rdlucklog/hongze_data_entry.log"}`)
+	FileLog.SetLogger(logs.AdapterFile, `{"filename":"./rdlucklog/hongze_api.log"}`)
 }