my_chart.go 11 KB

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