123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524 |
- package my_chart
- import (
- "fmt"
- "github.com/gin-gonic/gin"
- "hongze/hongze_yb/controller/response"
- "hongze/hongze_yb/models/request"
- responseModel "hongze/hongze_yb/models/response"
- chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
- "hongze/hongze_yb/models/tables/company_product"
- "hongze/hongze_yb/models/tables/yb_config"
- "hongze/hongze_yb/models/tables/yb_my_chart"
- "hongze/hongze_yb/models/tables/yb_my_chart_classify"
- "hongze/hongze_yb/services"
- userService "hongze/hongze_yb/services/user"
- "hongze/hongze_yb/utils"
- "strconv"
- "time"
- )
- // MyChartController 用户-我的图表
- type MyChartController struct{}
- // List 我的图表列表
- func (this *MyChartController) List(c *gin.Context) {
- userInfo := userService.GetInfoByClaims(c)
- userId := int(userInfo.UserID)
- var req request.MyChartCollectListReq
- if c.Bind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- cond := `user_id = ?`
- pars := make([]interface{}, 0)
- pars = append(pars, userId)
- if req.Keyword != "" {
- kw := fmt.Sprint("%", req.Keyword, "%")
- cond += ` AND chart_name LIKE ?`
- pars = append(pars, kw)
- }
- if req.ClassifyId > 0 {
- cond += ` AND my_chart_classify_id = ?`
- pars = append(pars, req.ClassifyId)
- }
- // classifyId = -1的时候查询默认分类
- if req.ClassifyId == -1 {
- cond += ` AND my_chart_classify_id = 0`
- }
- pageIndex := services.GetCurrPageByClaims(c)
- pageSize := services.GetPageSizeByClaims(c)
- ob := new(yb_my_chart.YbMyChart)
- chartTotal, e := ob.Count(cond, pars)
- if e != nil {
- response.FailMsg("获取失败", "获取用户图表列表总数失败, Err:"+e.Error(), c)
- return
- }
- total := int(chartTotal)
- list, e := ob.PageList(cond, pars, pageIndex, pageSize)
- if e != nil {
- response.FailMsg("获取失败", "获取用户图表列表失败, Err:"+e.Error(), c)
- return
- }
- respList := make([]*responseModel.MyChartItem, 0)
- for i := range list {
- respList = append(respList, &responseModel.MyChartItem{
- MyChartID: list[i].MyChartID,
- MyChartClassifyID: list[i].MyChartClassifyID,
- ChartInfoID: list[i].ChartInfoID,
- ChartName: list[i].ChartName,
- UniqueCode: list[i].UniqueCode,
- ChartImage: list[i].ChartImage,
- UserID: list[i].UserID,
- ReportID: list[i].ReportID,
- ReportChapterID: list[i].ReportChapterID,
- ChartInfoSource: list[i].Source,
- CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
- })
- }
- response.OkData("获取成功", &responseModel.MyChartListResp{
- List: respList,
- Paging: responseModel.GetPaging(pageIndex, pageSize, total),
- }, c)
- }
- // Collect 收藏图表
- func (this *MyChartController) Collect(c *gin.Context) {
- var req request.MyChartCollectReq
- if c.ShouldBind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- if req.Authorization == "" {
- response.Fail("用户身份有误", c)
- return
- }
- if req.UniqueCode == "" {
- response.Fail("请选择图表", c)
- return
- }
- if req.ReportId <= 0 {
- response.Fail("请选择报告", c)
- return
- }
- // 获取用户信息
- userInfo, e := userService.GetUserInfoByToken(req.Authorization)
- if e != nil {
- response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
- return
- }
- if userInfo.UserID <= 0 {
- response.FailMsg("操作失败", "Token获取有效用户失败", c)
- return
- }
- userId := int(userInfo.UserID)
- // 获取图表信息
- chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
- if e != nil {
- response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
- return
- }
- if chartInfo.ChartInfoId <= 0 {
- response.FailMsg("操作失败", "图表信息有误", c)
- return
- }
- // 图表收藏上限
- ob := new(yb_my_chart.YbMyChart)
- countCond := `user_id = ?`
- countPars := make([]interface{}, 0)
- countPars = append(countPars, userId)
- count, e := ob.Count(countCond, countPars)
- if e != nil {
- response.FailMsg("操作失败", "获取用户图表收藏数量失败, Err: "+e.Error(), c)
- return
- }
- // 获取图表收藏上限配置
- configCond := `config_code = ?`
- configPars := make([]interface{}, 0)
- configPars = append(configPars, yb_config.UserChartCollectMax)
- confOB := new(yb_config.YbConfig)
- conf, e := confOB.Fetch(configCond, configPars)
- if e != nil {
- response.FailMsg("操作失败", "获取图表收藏上限配置失败, Err: "+e.Error(), c)
- return
- }
- max, e := strconv.Atoi(conf.ConfigValue)
- if e != nil {
- response.FailMsg("操作失败", "图表收藏上限配置有误, Err: "+e.Error(), c)
- return
- }
- if int(count) >= max {
- response.Fail(fmt.Sprintf("图表最多可收藏%d张", max), c)
- return
- }
- // 是否已收藏
- cond := `user_id = ? AND chart_info_id = ?`
- pars := make([]interface{}, 0)
- pars = append(pars, userId, chartInfo.ChartInfoId)
- exists, e := ob.FetchByCondition(cond, pars)
- if e != nil && e != utils.ErrNoRow {
- response.FailMsg("操作失败", "获取用户图表失败, Err: "+e.Error(), c)
- return
- }
- nowTime := time.Now().Local()
- collectId := 0
- if exists != nil && exists.MyChartID > 0 {
- // 更新收藏信息
- exists.ChartName = chartInfo.ChartName
- exists.ChartImage = chartInfo.ChartImage
- exists.ReportID = req.ReportId
- exists.ReportChapterID = req.ReportChapterId
- exists.ModifyTime = nowTime
- exists.Source = chartInfo.Source
- updateCols := []string{"ChartName", "ChartImage", "ReportID", "ReportChapterID", "ModifyTime"}
- if e = exists.Update(updateCols); e != nil {
- response.FailMsg("操作失败", "更新收藏失败, Err: "+e.Error(), c)
- return
- }
- collectId = exists.MyChartID
- } else {
- // 查询客户信息
- companyName := "潜在客户"
- companyStatus := "潜在"
- sellerId := 0
- if userInfo.CompanyID > 0 {
- //查询ficc产品信息和ficc销售信息
- companyInfo, e := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
- if e != nil && e != utils.ErrNoRow {
- response.FailMsg("获取客户信息失败", "获取客户信息失败, Err: "+e.Error(), c)
- return
- }
- if companyInfo != nil && companyInfo.CompanyID > 0 {
- companyStatus = companyInfo.Status
- companyName = companyInfo.CompanyName
- sellerId = companyInfo.SellerID
- }
- }
- // 新增收藏
- ob.ChartInfoID = chartInfo.ChartInfoId
- ob.ChartName = chartInfo.ChartName
- ob.UniqueCode = chartInfo.UniqueCode
- ob.ChartImage = chartInfo.ChartImage
- ob.UserID = userId
- ob.CompanyID = int(userInfo.CompanyID)
- ob.CompanyStatus = companyStatus
- ob.CompanyName = companyName
- ob.RealName = userInfo.RealName
- ob.SellerID = sellerId
- ob.ReportID = req.ReportId
- ob.ReportChapterID = req.ReportChapterId
- ob.CreateTime = nowTime
- ob.ModifyTime = nowTime
- ob.Source = chartInfo.Source
- if e = ob.Create(); e != nil {
- response.FailMsg("操作失败", "新增收藏失败, Err: "+e.Error(), c)
- return
- }
- collectId = ob.MyChartID
- }
- response.OkData("操作成功", collectId, c)
- }
- // CollectCancel 取消收藏
- func (this *MyChartController) CollectCancel(c *gin.Context) {
- var req request.MyChartCollectCancelReq
- if c.ShouldBind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- if req.Authorization == "" {
- response.Fail("用户身份有误", c)
- return
- }
- if req.UniqueCode == "" {
- response.Fail("请选择图表", c)
- return
- }
- // 获取用户信息
- userInfo, e := userService.GetUserInfoByToken(req.Authorization)
- if e != nil {
- response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
- return
- }
- if userInfo.UserID <= 0 {
- response.FailMsg("操作失败", "Token获取有效用户失败", c)
- return
- }
- userId := int(userInfo.UserID)
- // 获取图表信息
- //chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
- //if e != nil {
- // response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
- // return
- //}
- //if chartInfo.ChartInfoId <= 0 {
- // response.FailMsg("操作失败", "图表信息有误", c)
- // return
- //}
- cond := `user_id = ? AND unique_code = ?`
- pars := make([]interface{}, 0)
- pars = append(pars, userId, req.UniqueCode)
- ob := new(yb_my_chart.YbMyChart)
- // 此处可能出现同一个报告两个同样的图表均有"取消收藏"按钮,点击第一个取消之后再点击第二个会报错,此时进行一个友好的提示"已取消收藏"
- item, e := ob.FetchByCondition(cond, pars)
- if e != nil {
- response.FailMsg("已取消收藏", "获取用户图表失败, Err: "+e.Error(), c)
- return
- }
- if e = item.Delete(); e != nil {
- response.FailMsg("已取消收藏", "取消用户图表收藏失败, Err: "+e.Error(), c)
- return
- }
- response.Ok("操作成功", c)
- }
- // RelateClassify 加入分类
- func (this *MyChartController) RelateClassify(c *gin.Context) {
- userInfo := userService.GetInfoByClaims(c)
- userId := int(userInfo.UserID)
- if userId <= 0 {
- response.Fail("请登录后操作", c)
- return
- }
- var req request.MyChartRelateClassifyReq
- if c.ShouldBind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- if req.MyChartId <= 0 {
- response.Fail("请选择图表", c)
- return
- }
- if req.ClassifyId <= 0 {
- response.Fail("请选择分类", c)
- return
- }
- ob := new(yb_my_chart.YbMyChart)
- item, e := ob.Fetch(req.MyChartId)
- if e != nil {
- response.FailMsg("图表信息有误", "获取用户图表失败, Err: "+e.Error(), c)
- return
- }
- if item.UserID != userId {
- response.Fail("无权操作", c)
- return
- }
- item.MyChartClassifyID = req.ClassifyId
- item.ModifyTime = time.Now().Local()
- if e = item.Update([]string{"MyChartClassifyID", "ModifyTime"}); e != nil {
- response.FailMsg("操作失败", "更新用户图表关联分类失败, Err: "+e.Error(), c)
- return
- }
- response.Ok("操作成功", c)
- }
- // IsCollect 是否已收藏
- func (this *MyChartController) IsCollect(c *gin.Context) {
- var req request.MyChartIsCollectReq
- if c.Bind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- if req.Authorization == "" {
- response.Fail("用户身份有误", c)
- return
- }
- if req.UniqueCode == "" {
- response.Fail("请选择图表", c)
- return
- }
- // 获取用户信息
- userInfo, e := userService.GetUserInfoByToken(req.Authorization)
- if e != nil {
- response.FailMsg("获取失败", "Token获取有效用户失败, Err: "+e.Error(), c)
- return
- }
- if userInfo.UserID <= 0 {
- response.FailMsg("获取失败", "Token获取有效用户失败", c)
- return
- }
- userId := int(userInfo.UserID)
- // 获取图表信息
- //chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
- //if e != nil {
- // response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
- // return
- //}
- //if chartInfo.ChartInfoId <= 0 {
- // response.FailMsg("操作失败", "图表信息有误", c)
- // return
- //}
- // 是否已收藏
- ob := new(yb_my_chart.YbMyChart)
- cond := `user_id = ? AND unique_code = ?`
- pars := make([]interface{}, 0)
- pars = append(pars, userId, req.UniqueCode)
- exists, e := ob.FetchByCondition(cond, pars)
- if e != nil && e != utils.ErrNoRow {
- response.FailMsg("获取失败", "获取用户图表失败, Err: "+e.Error(), c)
- return
- }
- isCollect := false
- if exists != nil && exists.MyChartID > 0 {
- isCollect = true
- }
- response.OkData("获取成功", isCollect, c)
- }
- // Locate 图表在列表中的定位
- func (this *MyChartController) Locate(c *gin.Context) {
- userInfo := userService.GetInfoByClaims(c)
- userId := int(userInfo.UserID)
- var req request.MyChartCollectLocateReq
- if c.Bind(&req) != nil {
- response.Fail("参数有误", c)
- return
- }
- cond := `user_id = ?`
- pars := make([]interface{}, 0)
- pars = append(pars, userId)
- ob := new(yb_my_chart.YbMyChart)
- list, e := ob.List(cond, pars)
- if e != nil {
- response.FailMsg("获取失败", "获取用户图表列表失败, Err:"+e.Error(), c)
- return
- }
- charts := make([]*responseModel.MyChartLocateItem, 0)
- if len(list) == 0 {
- response.OkData("获取成功", charts, c)
- return
- }
- // 如果是分类下的图表, 则优先分类排序, 其次分类图表排序
- if req.ClassifyId > 0 || req.ClassifyId == -1 {
- classifyCond := `user_id = ?`
- classifyPars := make([]interface{}, 0)
- classifyPars = append(classifyPars, userId)
- classifyOB := new(yb_my_chart_classify.YbMyChartClassify)
- classies, e := classifyOB.List(classifyCond, classifyPars)
- if e != nil {
- response.FailMsg("获取失败", "获取用户图表分类失败, Err: "+e.Error(), c)
- return
- }
- // 未分类的图表排在前面
- for _, ch := range list {
- if ch.MyChartClassifyID > 0 {
- continue
- }
- v := new(responseModel.MyChartLocateItem)
- v.MyChartID = ch.MyChartID
- v.MyChartClassifyID = -1 // 未分类ID
- v.ChartInfoID = ch.ChartInfoID
- v.ChartName = ch.ChartName
- v.UniqueCode = ch.UniqueCode
- v.ChartInfoSource = ch.Source
- charts = append(charts, v)
- }
- // 已归类的图表
- for _, cl := range classies {
- for _, ch := range list {
- if ch.MyChartClassifyID != cl.MyChartClassifyID {
- continue
- }
- v := new(responseModel.MyChartLocateItem)
- v.MyChartID = ch.MyChartID
- v.MyChartClassifyID = ch.MyChartClassifyID
- v.ChartInfoID = ch.ChartInfoID
- v.ChartName = ch.ChartName
- v.UniqueCode = ch.UniqueCode
- v.ChartInfoSource = ch.Source
- charts = append(charts, v)
- }
- }
- total := len(charts)
- if total > 0 {
- last := total - 1
- for k, v := range charts {
- // 首图-首图无上一张
- if k == 0 {
- if (k + 1) <= last {
- v.NextChartInfoID = charts[k+1].ChartInfoID
- }
- continue
- }
- // 尾图-尾图无下一张
- if k == last {
- if (k - 1) >= 0 {
- v.PrevChartInfoID = charts[k-1].ChartInfoID
- }
- continue
- }
- // 中间
- if (k - 1) >= 0 {
- v.PrevChartInfoID = charts[k-1].ChartInfoID
- }
- if (k + 1) <= last {
- v.NextChartInfoID = charts[k+1].ChartInfoID
- }
- }
- }
- response.OkData("获取成功", charts, c)
- return
- }
- // 非分类列表
- if req.ClassifyId == 0 {
- for _, ch := range list {
- v := new(responseModel.MyChartLocateItem)
- v.MyChartID = ch.MyChartID
- v.MyChartClassifyID = ch.MyChartClassifyID
- v.ChartInfoID = ch.ChartInfoID
- v.ChartName = ch.ChartName
- v.UniqueCode = ch.UniqueCode
- v.ChartInfoSource = ch.Source
- charts = append(charts, v)
- }
- total := len(charts)
- if total > 0 {
- last := total - 1
- for k, v := range charts {
- // 首图-首图的上一张为尾图
- if k == 0 {
- if last > 0 {
- v.PrevChartInfoID = charts[last].ChartInfoID
- }
- if (k + 1) <= last {
- v.NextChartInfoID = charts[k+1].ChartInfoID
- }
- continue
- }
- // 尾图-尾图的下一张为首图
- if k == last {
- if (k - 1) >= 0 {
- v.PrevChartInfoID = charts[k-1].ChartInfoID
- }
- v.NextChartInfoID = charts[0].ChartInfoID
- continue
- }
- // 中间
- if (k - 1) >= 0 {
- v.PrevChartInfoID = charts[k-1].ChartInfoID
- }
- if (k + 1) <= last {
- v.NextChartInfoID = charts[k+1].ChartInfoID
- }
- }
- }
- }
- response.OkData("获取成功", charts, c)
- }
|