my_chart.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  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. exists.Source = chartInfo.Source
  164. updateCols := []string{"ChartName", "ChartImage", "ReportID", "ReportChapterID", "ModifyTime"}
  165. if e = exists.Update(updateCols); e != nil {
  166. response.FailMsg("操作失败", "更新收藏失败, Err: "+e.Error(), c)
  167. return
  168. }
  169. collectId = exists.MyChartID
  170. } else {
  171. // 查询客户信息
  172. companyName := "潜在客户"
  173. companyStatus := "潜在"
  174. sellerId := 0
  175. if userInfo.CompanyID > 0 {
  176. //查询ficc产品信息和ficc销售信息
  177. companyInfo, e := company_product.GetByCompany2ProductId(userInfo.CompanyID, 1)
  178. if e != nil && e != utils.ErrNoRow {
  179. response.FailMsg("获取客户信息失败", "获取客户信息失败, Err: "+e.Error(), c)
  180. return
  181. }
  182. if companyInfo != nil && companyInfo.CompanyID > 0 {
  183. companyStatus = companyInfo.Status
  184. companyName = companyInfo.CompanyName
  185. sellerId = companyInfo.SellerID
  186. }
  187. }
  188. // 新增收藏
  189. ob.ChartInfoID = chartInfo.ChartInfoId
  190. ob.ChartName = chartInfo.ChartName
  191. ob.UniqueCode = chartInfo.UniqueCode
  192. ob.ChartImage = chartInfo.ChartImage
  193. ob.UserID = userId
  194. ob.CompanyID = int(userInfo.CompanyID)
  195. ob.CompanyStatus = companyStatus
  196. ob.CompanyName = companyName
  197. ob.RealName = userInfo.RealName
  198. ob.SellerID = sellerId
  199. ob.ReportID = req.ReportId
  200. ob.ReportChapterID = req.ReportChapterId
  201. ob.CreateTime = nowTime
  202. ob.ModifyTime = nowTime
  203. ob.Source = chartInfo.Source
  204. if e = ob.Create(); e != nil {
  205. response.FailMsg("操作失败", "新增收藏失败, Err: "+e.Error(), c)
  206. return
  207. }
  208. collectId = ob.MyChartID
  209. }
  210. response.OkData("操作成功", collectId, c)
  211. }
  212. // CollectCancel 取消收藏
  213. func (this *MyChartController) CollectCancel(c *gin.Context) {
  214. var req request.MyChartCollectCancelReq
  215. if c.ShouldBind(&req) != nil {
  216. response.Fail("参数有误", c)
  217. return
  218. }
  219. if req.Authorization == "" {
  220. response.Fail("用户身份有误", c)
  221. return
  222. }
  223. if req.UniqueCode == "" {
  224. response.Fail("请选择图表", c)
  225. return
  226. }
  227. // 获取用户信息
  228. userInfo, e := userService.GetUserInfoByToken(req.Authorization)
  229. if e != nil {
  230. response.FailMsg("操作失败", "Token获取有效用户失败, Err: "+e.Error(), c)
  231. return
  232. }
  233. if userInfo.UserID <= 0 {
  234. response.FailMsg("操作失败", "Token获取有效用户失败", c)
  235. return
  236. }
  237. userId := int(userInfo.UserID)
  238. // 获取图表信息
  239. //chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
  240. //if e != nil {
  241. // response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
  242. // return
  243. //}
  244. //if chartInfo.ChartInfoId <= 0 {
  245. // response.FailMsg("操作失败", "图表信息有误", c)
  246. // return
  247. //}
  248. cond := `user_id = ? AND unique_code = ?`
  249. pars := make([]interface{}, 0)
  250. pars = append(pars, userId, req.UniqueCode)
  251. ob := new(yb_my_chart.YbMyChart)
  252. // 此处可能出现同一个报告两个同样的图表均有"取消收藏"按钮,点击第一个取消之后再点击第二个会报错,此时进行一个友好的提示"已取消收藏"
  253. item, e := ob.FetchByCondition(cond, pars)
  254. if e != nil {
  255. response.FailMsg("已取消收藏", "获取用户图表失败, Err: "+e.Error(), c)
  256. return
  257. }
  258. if e = item.Delete(); e != nil {
  259. response.FailMsg("已取消收藏", "取消用户图表收藏失败, Err: "+e.Error(), c)
  260. return
  261. }
  262. response.Ok("操作成功", c)
  263. }
  264. // RelateClassify 加入分类
  265. func (this *MyChartController) RelateClassify(c *gin.Context) {
  266. userInfo := userService.GetInfoByClaims(c)
  267. userId := int(userInfo.UserID)
  268. if userId <= 0 {
  269. response.Fail("请登录后操作", c)
  270. return
  271. }
  272. var req request.MyChartRelateClassifyReq
  273. if c.ShouldBind(&req) != nil {
  274. response.Fail("参数有误", c)
  275. return
  276. }
  277. if req.MyChartId <= 0 {
  278. response.Fail("请选择图表", c)
  279. return
  280. }
  281. if req.ClassifyId <= 0 {
  282. response.Fail("请选择分类", c)
  283. return
  284. }
  285. ob := new(yb_my_chart.YbMyChart)
  286. item, e := ob.Fetch(req.MyChartId)
  287. if e != nil {
  288. response.FailMsg("图表信息有误", "获取用户图表失败, Err: "+e.Error(), c)
  289. return
  290. }
  291. if item.UserID != userId {
  292. response.Fail("无权操作", c)
  293. return
  294. }
  295. item.MyChartClassifyID = req.ClassifyId
  296. item.ModifyTime = time.Now().Local()
  297. if e = item.Update([]string{"MyChartClassifyID", "ModifyTime"}); e != nil {
  298. response.FailMsg("操作失败", "更新用户图表关联分类失败, Err: "+e.Error(), c)
  299. return
  300. }
  301. response.Ok("操作成功", c)
  302. }
  303. // IsCollect 是否已收藏
  304. func (this *MyChartController) IsCollect(c *gin.Context) {
  305. var req request.MyChartIsCollectReq
  306. if c.Bind(&req) != nil {
  307. response.Fail("参数有误", c)
  308. return
  309. }
  310. if req.Authorization == "" {
  311. response.Fail("用户身份有误", c)
  312. return
  313. }
  314. if req.UniqueCode == "" {
  315. response.Fail("请选择图表", c)
  316. return
  317. }
  318. // 获取用户信息
  319. userInfo, e := userService.GetUserInfoByToken(req.Authorization)
  320. if e != nil {
  321. response.FailMsg("获取失败", "Token获取有效用户失败, Err: "+e.Error(), c)
  322. return
  323. }
  324. if userInfo.UserID <= 0 {
  325. response.FailMsg("获取失败", "Token获取有效用户失败", c)
  326. return
  327. }
  328. userId := int(userInfo.UserID)
  329. // 获取图表信息
  330. //chartInfo, e := chartInfoModel.GetChartInfoViewByUniqueCode(req.UniqueCode)
  331. //if e != nil {
  332. // response.FailMsg("操作失败", "UniqueCode获取图表信息失败, Err:"+e.Error(), c)
  333. // return
  334. //}
  335. //if chartInfo.ChartInfoId <= 0 {
  336. // response.FailMsg("操作失败", "图表信息有误", c)
  337. // return
  338. //}
  339. // 是否已收藏
  340. ob := new(yb_my_chart.YbMyChart)
  341. cond := `user_id = ? AND unique_code = ?`
  342. pars := make([]interface{}, 0)
  343. pars = append(pars, userId, req.UniqueCode)
  344. exists, e := ob.FetchByCondition(cond, pars)
  345. if e != nil && e != utils.ErrNoRow {
  346. response.FailMsg("获取失败", "获取用户图表失败, Err: "+e.Error(), c)
  347. return
  348. }
  349. isCollect := false
  350. if exists != nil && exists.MyChartID > 0 {
  351. isCollect = true
  352. }
  353. response.OkData("获取成功", isCollect, c)
  354. }