my_chart.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. package my_chart
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "hongze/hongze_yb/controller/response"
  6. "hongze/hongze_yb/models/request"
  7. responseModel "hongze/hongze_yb/models/response"
  8. chartInfoModel "hongze/hongze_yb/models/tables/chart_info"
  9. "hongze/hongze_yb/models/tables/company_product"
  10. "hongze/hongze_yb/models/tables/yb_config"
  11. "hongze/hongze_yb/models/tables/yb_my_chart"
  12. "hongze/hongze_yb/services"
  13. userService "hongze/hongze_yb/services/user"
  14. "hongze/hongze_yb/utils"
  15. "strconv"
  16. "time"
  17. )
  18. // MyChartController 用户-我的图表
  19. type MyChartController struct{}
  20. // List 我的图表列表
  21. func (this *MyChartController) List(c *gin.Context) {
  22. userInfo := userService.GetInfoByClaims(c)
  23. userId := int(userInfo.UserID)
  24. var req request.MyChartCollectListReq
  25. if c.Bind(&req) != nil {
  26. response.Fail("参数有误", c)
  27. return
  28. }
  29. cond := `user_id = ?`
  30. pars := make([]interface{}, 0)
  31. pars = append(pars, userId)
  32. if req.Keyword != "" {
  33. kw := fmt.Sprint("%", req.Keyword, "%")
  34. cond += ` AND chart_name LIKE ?`
  35. pars = append(pars, kw)
  36. }
  37. if req.ClassifyId > 0 {
  38. cond += ` AND my_chart_classify_id = ?`
  39. pars = append(pars, req.ClassifyId)
  40. }
  41. pageIndex := services.GetCurrPageByClaims(c)
  42. pageSize := services.GetPageSizeByClaims(c)
  43. ob := new(yb_my_chart.YbMyChart)
  44. chartTotal, e := ob.Count(cond, pars)
  45. if e != nil {
  46. response.FailMsg("获取失败", "获取用户图表列表总数失败, Err:"+e.Error(), c)
  47. return
  48. }
  49. total := int(chartTotal)
  50. list, e := ob.PageList(cond, pars, pageIndex, pageSize)
  51. if e != nil {
  52. response.FailMsg("获取失败", "获取用户图表列表失败, Err:"+e.Error(), c)
  53. return
  54. }
  55. respList := make([]*responseModel.MyChartItem, 0)
  56. for i := range list {
  57. respList = append(respList, &responseModel.MyChartItem{
  58. MyChartID: list[i].MyChartID,
  59. MyChartClassifyID: list[i].MyChartClassifyID,
  60. ChartInfoID: list[i].ChartInfoID,
  61. ChartName: list[i].ChartName,
  62. UniqueCode: list[i].UniqueCode,
  63. ChartImage: list[i].ChartImage,
  64. UserID: list[i].UserID,
  65. ReportID: list[i].ReportID,
  66. ReportChapterID: list[i].ReportChapterID,
  67. CreateTime: utils.TimeTransferString(utils.FormatDateTime, list[i].CreateTime),
  68. })
  69. }
  70. response.OkData("获取成功", &responseModel.MyChartListResp{
  71. List: respList,
  72. Paging: responseModel.GetPaging(pageIndex, pageSize, total),
  73. }, c)
  74. }
  75. // Collect 收藏图表
  76. func (this *MyChartController) Collect(c *gin.Context) {
  77. var req request.MyChartCollectReq
  78. if c.ShouldBind(&req) != nil {
  79. response.Fail("参数有误", c)
  80. return
  81. }
  82. if req.Authorization == "" {
  83. response.Fail("用户身份有误", c)
  84. return
  85. }
  86. if req.UniqueCode == "" {
  87. response.Fail("请选择图表", c)
  88. return
  89. }
  90. if req.ReportId <= 0 {
  91. response.Fail("请选择报告", c)
  92. return
  93. }
  94. // 获取用户信息
  95. userInfo, e := userService.GetUserInfoByToken(req.Authorization)
  96. if e != nil {
  97. response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
  98. return
  99. }
  100. if userInfo.UserID <= 0 {
  101. response.FailMsg("操作失败", "Token获取有效用户失败", c)
  102. return
  103. }
  104. userId := int(userInfo.UserID)
  105. // 获取图表信息
  106. chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
  107. if e != nil {
  108. response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
  109. return
  110. }
  111. if chartInfo.ChartInfoId <= 0 {
  112. response.FailMsg("操作失败", "图表信息有误", c)
  113. return
  114. }
  115. // 图表收藏上限
  116. ob := new(yb_my_chart.YbMyChart)
  117. countCond := `user_id = ?`
  118. countPars := make([]interface{}, 0)
  119. countPars = append(countPars, userId)
  120. count, e := ob.Count(countCond, countPars)
  121. if e != nil {
  122. response.FailMsg("操作失败", "获取用户图表收藏数量失败, Err: "+e.Error(), c)
  123. return
  124. }
  125. // 获取图表收藏上限配置
  126. configCond := `config_code = ?`
  127. configPars := make([]interface{}, 0)
  128. configPars = append(configPars, yb_config.UserChartCollectMax)
  129. confOB := new(yb_config.YbConfig)
  130. conf, e := confOB.Fetch(configCond, configPars)
  131. if e != nil {
  132. response.FailMsg("操作失败", "获取图表收藏上限配置失败, Err: "+e.Error(), c)
  133. return
  134. }
  135. max, e := strconv.Atoi(conf.ConfigValue)
  136. if e != nil {
  137. response.FailMsg("操作失败", "图表收藏上限配置有误, Err: "+e.Error(), c)
  138. return
  139. }
  140. if int(count) >= max {
  141. response.Fail(fmt.Sprintf("图表最多可收藏%d张", max), c)
  142. return
  143. }
  144. // 是否已收藏
  145. cond := `user_id = ? AND chart_info_id = ?`
  146. pars := make([]interface{}, 0)
  147. pars = append(pars, userId, chartInfo.ChartInfoId)
  148. exists, e := ob.FetchByCondition(cond, pars)
  149. if e != nil && e != utils.ErrNoRow {
  150. response.FailMsg("操作失败", "获取用户图表失败, Err: "+e.Error(), c)
  151. return
  152. }
  153. nowTime := time.Now().Local()
  154. collectId := 0
  155. if exists != nil && exists.MyChartID > 0 {
  156. // 更新收藏信息
  157. exists.ChartName = chartInfo.ChartName
  158. exists.ChartImage = chartInfo.ChartImage
  159. exists.ReportID = req.ReportId
  160. exists.ReportChapterID = req.ReportChapterId
  161. exists.ModifyTime = nowTime
  162. updateCols := []string{"ChartName", "ChartImage", "ReportID", "ReportChapterID", "ModifyTime"}
  163. if e = exists.Update(updateCols); e != nil {
  164. response.FailMsg("操作失败", "更新收藏失败, Err: "+e.Error(), c)
  165. return
  166. }
  167. collectId = exists.MyChartID
  168. } else {
  169. // 查询客户信息
  170. companyName := "潜在客户"
  171. companyStatus := "潜在"
  172. sellerId := 0
  173. if userInfo.CompanyID > 0 {
  174. //查询ficc产品信息和ficc销售信息
  175. companyInfo, e := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
  176. if e != nil && e != utils.ErrNoRow {
  177. response.FailMsg("获取客户信息失败", "获取客户信息失败, Err: " + e.Error(), c)
  178. return
  179. }
  180. if companyInfo != nil && companyInfo.CompanyID > 0 {
  181. companyStatus = companyInfo.Status
  182. companyName = companyInfo.CompanyName
  183. sellerId = companyInfo.SellerID
  184. }
  185. }
  186. // 新增收藏
  187. ob.ChartInfoID = chartInfo.ChartInfoId
  188. ob.ChartName = chartInfo.ChartName
  189. ob.UniqueCode = chartInfo.UniqueCode
  190. ob.ChartImage = chartInfo.ChartImage
  191. ob.UserID = userId
  192. ob.CompanyID = int(userInfo.CompanyID)
  193. ob.CompanyStatus = companyStatus
  194. ob.CompanyName = companyName
  195. ob.RealName = userInfo.RealName
  196. ob.SellerID = sellerId
  197. ob.ReportID = req.ReportId
  198. ob.ReportChapterID = req.ReportChapterId
  199. ob.CreateTime = nowTime
  200. ob.ModifyTime = nowTime
  201. if e = ob.Create(); e != nil {
  202. response.FailMsg("操作失败", "新增收藏失败, Err: "+e.Error(), c)
  203. return
  204. }
  205. collectId = ob.MyChartID
  206. }
  207. response.OkData("操作成功", collectId, c)
  208. }
  209. // 取消收藏 CollectCancel
  210. func (this *MyChartController) CollectCancel(c *gin.Context) {
  211. var req request.MyChartCollectCancelReq
  212. if c.ShouldBind(&req) != nil {
  213. response.Fail("参数有误", c)
  214. return
  215. }
  216. if req.Authorization == "" {
  217. response.Fail("用户身份有误", c)
  218. return
  219. }
  220. if req.UniqueCode == "" {
  221. response.Fail("请选择图表", c)
  222. return
  223. }
  224. // 获取用户信息
  225. userInfo, e := userService.GetUserInfoByToken(req.Authorization)
  226. if e != nil {
  227. response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
  228. return
  229. }
  230. if userInfo.UserID <= 0 {
  231. response.FailMsg("操作失败", "Token获取有效用户失败", c)
  232. return
  233. }
  234. userId := int(userInfo.UserID)
  235. // 获取图表信息
  236. chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
  237. if e != nil {
  238. response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
  239. return
  240. }
  241. if chartInfo.ChartInfoId <= 0 {
  242. response.FailMsg("操作失败", "图表信息有误", c)
  243. return
  244. }
  245. cond := `user_id = ? AND chart_info_id = ?`
  246. pars := make([]interface{}, 0)
  247. pars = append(pars, userId, chartInfo.ChartInfoId)
  248. ob := new(yb_my_chart.YbMyChart)
  249. // 此处可能出现同一个报告两个同样的图表均有"取消收藏"按钮,点击第一个取消之后再点击第二个会报错,此时进行一个友好的提示"已取消收藏"
  250. item, e := ob.FetchByCondition(cond, pars)
  251. if e != nil {
  252. response.FailMsg("已取消收藏", "获取用户图表失败, Err: "+e.Error(), c)
  253. return
  254. }
  255. if e = item.Delete(); e != nil {
  256. response.FailMsg("已取消收藏", "取消用户图表收藏失败, Err: "+e.Error(), c)
  257. return
  258. }
  259. response.Ok("操作成功", c)
  260. }
  261. // RelateClassify 加入分类
  262. func (this *MyChartController) RelateClassify(c *gin.Context) {
  263. userInfo := userService.GetInfoByClaims(c)
  264. userId := int(userInfo.UserID)
  265. if userId <= 0 {
  266. response.Fail("请登录后操作", c)
  267. return
  268. }
  269. var req request.MyChartRelateClassifyReq
  270. if c.ShouldBind(&req) != nil {
  271. response.Fail("参数有误", c)
  272. return
  273. }
  274. if req.MyChartId <= 0 {
  275. response.Fail("请选择图表", c)
  276. return
  277. }
  278. if req.ClassifyId <= 0 {
  279. response.Fail("请选择分类", c)
  280. return
  281. }
  282. ob := new(yb_my_chart.YbMyChart)
  283. item, e := ob.Fetch(req.MyChartId)
  284. if e != nil {
  285. response.FailMsg("图表信息有误", "获取用户图表失败, Err: "+e.Error(), c)
  286. return
  287. }
  288. if item.UserID != userId {
  289. response.Fail("无权操作", c)
  290. return
  291. }
  292. item.MyChartClassifyID = req.ClassifyId
  293. item.ModifyTime = time.Now().Local()
  294. if e = item.Update([]string{"MyChartClassifyID", "ModifyTime"}); e != nil {
  295. response.FailMsg("操作失败", "更新用户图表关联分类失败, Err: "+e.Error(), c)
  296. return
  297. }
  298. response.Ok("操作成功", c)
  299. }
  300. // IsCollect 是否已收藏
  301. func (this *MyChartController) IsCollect(c *gin.Context) {
  302. var req request.MyChartIsCollectReq
  303. if c.Bind(&req) != nil {
  304. response.Fail("参数有误", c)
  305. return
  306. }
  307. if req.Authorization == "" {
  308. response.Fail("用户身份有误", c)
  309. return
  310. }
  311. if req.UniqueCode == "" {
  312. response.Fail("请选择图表", c)
  313. return
  314. }
  315. // 获取用户信息
  316. userInfo, e := userService.GetUserInfoByToken(req.Authorization)
  317. if e != nil {
  318. response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
  319. return
  320. }
  321. if userInfo.UserID <= 0 {
  322. response.FailMsg("操作失败", "Token获取有效用户失败", c)
  323. return
  324. }
  325. userId := int(userInfo.UserID)
  326. // 获取图表信息
  327. chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
  328. if e != nil {
  329. response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
  330. return
  331. }
  332. if chartInfo.ChartInfoId <= 0 {
  333. response.FailMsg("操作失败", "图表信息有误", c)
  334. return
  335. }
  336. // 是否已收藏
  337. ob := new(yb_my_chart.YbMyChart)
  338. cond := `user_id = ? AND chart_info_id = ?`
  339. pars := make([]interface{}, 0)
  340. pars = append(pars, userId, chartInfo.ChartInfoId)
  341. exists, e := ob.FetchByCondition(cond, pars)
  342. if e != nil && e != utils.ErrNoRow {
  343. response.FailMsg("操作失败", "获取用户图表失败, Err: "+e.Error(), c)
  344. return
  345. }
  346. isCollect := false
  347. if exists != nil && exists.MyChartID > 0 {
  348. isCollect = true
  349. }
  350. response.OkData("获取成功", isCollect, c)
  351. }