my_chart.go 11 KB

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