search_keyword.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package cygx
  2. import (
  3. "fmt"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "github.com/tealeg/xlsx"
  6. "hongze/hz_crm_api/controllers"
  7. "hongze/hz_crm_api/models"
  8. "hongze/hz_crm_api/models/cygx"
  9. "hongze/hz_crm_api/utils"
  10. "os"
  11. "path/filepath"
  12. "strconv"
  13. "strings"
  14. "time"
  15. )
  16. // 报告管理
  17. type SearchKeywordController struct {
  18. controllers.BaseAuthController
  19. }
  20. // @Title 7天热词
  21. // @Description 获取7天热词列表接口
  22. // @Param PageSize query int true "每页数据条数"
  23. // @Param CurrentIndex query int true "当前页页码,从1开始"
  24. // @Success 200 {object} cygx.CygxReportMappingListRep
  25. // @router /hostKeyword/list [get]
  26. func (this *SearchKeywordController) HostKeywordList() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. sysUser := this.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. return
  37. }
  38. pageSize, _ := this.GetInt("PageSize")
  39. currentIndex, _ := this.GetInt("CurrentIndex")
  40. var startSize int
  41. if pageSize <= 0 {
  42. pageSize = utils.PageSize20
  43. }
  44. if currentIndex <= 0 {
  45. currentIndex = 1
  46. }
  47. startSize = utils.StartIndex(currentIndex, pageSize)
  48. var condition string
  49. var pars []interface{}
  50. currentTime := time.Now()
  51. starTime := currentTime.AddDate(0, 0, -8).Format("2006-01-02") + " 00:00:00"
  52. endTime := currentTime.AddDate(0, 0, -1).Format("2006-01-02") + " 23:59:59"
  53. condition += ` AND create_time < ` + "'" + endTime + "'" + `AND create_time > ` + "'" + starTime + "'"
  54. total, err := cygx.GetSearchKeyWordCount(condition, pars)
  55. if err != nil {
  56. br.Msg = "获取失败"
  57. br.ErrMsg = "获取失败,Err:" + err.Error()
  58. return
  59. }
  60. if total > 60 {
  61. total = 60
  62. }
  63. list, err := cygx.GetSearchKeyWordList(condition, pars, startSize, pageSize)
  64. if err != nil {
  65. br.Msg = "获取失败"
  66. br.ErrMsg = "获取失败,Err:" + err.Error()
  67. return
  68. }
  69. for k := range list {
  70. list[k].Sort = (currentIndex-1)*pageSize + k + 1
  71. }
  72. page := paging.GetPaging(currentIndex, pageSize, total)
  73. resp := new(cygx.SearchKeyWordListResp)
  74. resp.Paging = page
  75. resp.List = list
  76. br.Ret = 200
  77. br.Success = true
  78. br.Msg = "获取成功"
  79. br.Data = resp
  80. }
  81. // @Title 7天热词下载明细
  82. // @Description 获取7天热词下载明细列表接口
  83. // @Success Ret=200
  84. // @router /hostKeyword/download [get]
  85. func (this *SearchKeywordController) HostKeywordDownload() {
  86. br := new(models.BaseResponse).Init()
  87. defer func() {
  88. this.Data["json"] = br
  89. this.ServeJSON()
  90. }()
  91. sysUser := this.SysUser
  92. if sysUser == nil {
  93. br.Msg = "请登录"
  94. br.ErrMsg = "请登录,SysUser Is Empty"
  95. return
  96. }
  97. resp := new(cygx.CanDownload)
  98. if sysUser.Role == "admin" || sysUser.Role == "researcher" {
  99. resp.IsCanDownload = true
  100. }
  101. var pars []interface{}
  102. currentTime := time.Now()
  103. starTime := currentTime.AddDate(0, 0, -7).Format("2006-01-02") + " 00:00:00"
  104. endTime := currentTime.AddDate(0, 0, -1).Format("2006-01-02") + " 23:59:59"
  105. fmt.Println(starTime)
  106. fmt.Println(endTime)
  107. var list []*cygx.KeyWordListDownload
  108. var err error
  109. fmt.Println(sysUser.AdminId)
  110. fmt.Println(sysUser)
  111. if resp.IsCanDownload == false {
  112. //if sysUser.RoleTypeCode == "rai_group" {
  113. if sysUser.Authority == 2 {
  114. //组长查看本组所有组员
  115. //fmt.Println("组长")
  116. sqlStr := ` AND kw.user_id IN (SELECT user_id FROM user_seller_relation WHERE seller_id IN (SELECT admin_id FROM admin WHERE group_id = (SELECT group_id FROM admin WHERE admin_id = ` + strconv.Itoa(sysUser.AdminId) + ` ) )) `
  117. listSeller, errSeller := cygx.GetSearchKeyWordListDownloadSeller(starTime, endTime, sqlStr)
  118. list = listSeller
  119. err = errSeller
  120. } else {
  121. //组员查看自己
  122. //fmt.Println("组员")
  123. sqlStr := ` AND kw.user_id IN (SELECT user_id FROM user_seller_relation WHERE seller_id = ` + strconv.Itoa(sysUser.AdminId) + `) `
  124. listSeller, errSeller := cygx.GetSearchKeyWordListDownloadSeller(starTime, endTime, sqlStr)
  125. list = listSeller
  126. err = errSeller
  127. }
  128. } else {
  129. listAdmin, errAdmin := cygx.GetSearchKeyWordListDownload(starTime, endTime)
  130. list = listAdmin
  131. err = errAdmin
  132. }
  133. if err != nil {
  134. br.Msg = "获取失败"
  135. br.ErrMsg = "获取失败,Err:" + err.Error()
  136. return
  137. }
  138. listComPany, err := cygx.GetCompanyProductMoreOneList(starTime, endTime)
  139. var strId string
  140. for _, v := range listComPany {
  141. strId += strconv.Itoa(v.CompanyId) + ","
  142. }
  143. companyProductNameAndSellerList, err := cygx.GetCompanyProductNameAndSellerAllList(pars, strings.TrimRight(strId, ","))
  144. if err != nil {
  145. br.Msg = "获取失败"
  146. br.ErrMsg = "获取失败,Err:" + err.Error()
  147. return
  148. }
  149. for k, v := range list {
  150. if v.Mobile == "" {
  151. list[k].Mobile = v.Email
  152. }
  153. var productNamestr string
  154. var sellerNamestr string
  155. for _, v2 := range companyProductNameAndSellerList {
  156. if v.CompanyId == v2.CompanyId {
  157. productNamestr += v2.ProductName + "/"
  158. sellerNamestr += v2.SellerName + "/"
  159. }
  160. }
  161. list[k].ProductName = strings.TrimRight(productNamestr, "/")
  162. list[k].SellerName = strings.TrimRight(sellerNamestr, "/")
  163. }
  164. //创建excel
  165. dir, err := os.Executable()
  166. exPath := filepath.Dir(dir)
  167. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  168. xlsxFile := xlsx.NewFile()
  169. if err != nil {
  170. br.Msg = "生成文件失败"
  171. br.ErrMsg = "生成文件失败"
  172. return
  173. }
  174. style := xlsx.NewStyle()
  175. alignment := xlsx.Alignment{
  176. Horizontal: "center",
  177. Vertical: "center",
  178. WrapText: true,
  179. }
  180. style.Alignment = alignment
  181. style.ApplyAlignment = true
  182. sheet, err := xlsxFile.AddSheet("关键词搜索统计")
  183. if err != nil {
  184. br.Msg = "新增Sheet失败"
  185. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  186. return
  187. }
  188. //标头
  189. rowTitle := sheet.AddRow()
  190. cellA := rowTitle.AddCell()
  191. cellA.Value = "搜索词"
  192. cellB := rowTitle.AddCell()
  193. cellB.Value = "手机号/邮箱"
  194. cellC := rowTitle.AddCell()
  195. cellC.Value = "姓名"
  196. cellD := rowTitle.AddCell()
  197. cellD.Value = "公司名"
  198. cellE := rowTitle.AddCell()
  199. cellE.Value = "客户类型"
  200. cellF := rowTitle.AddCell()
  201. cellF.Value = "所属销售"
  202. cellG := rowTitle.AddCell()
  203. cellG.Value = "搜索时间"
  204. for _, item := range list {
  205. row := sheet.AddRow()
  206. cellA := row.AddCell()
  207. cellA.Value = item.KeyWord
  208. cellB := row.AddCell()
  209. cellB.Value = item.Mobile
  210. cellC := row.AddCell()
  211. cellC.Value = item.RealName
  212. cellD := row.AddCell()
  213. cellD.Value = item.CompanyName
  214. cellE := row.AddCell()
  215. cellE.Value = item.ProductName
  216. cellF := row.AddCell()
  217. cellF.Value = item.SellerName
  218. cellG := row.AddCell()
  219. cellG.Value = item.CreateTime
  220. }
  221. err = xlsxFile.Save(downLoadnFilePath)
  222. if err != nil {
  223. br.Msg = "保存文件失败"
  224. br.ErrMsg = "保存文件失败"
  225. return
  226. }
  227. randStr := time.Now().Format(utils.FormatDateTimeUnSpace)
  228. downloadFileName := "关键词搜索统计列表" + randStr + ".xlsx"
  229. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  230. defer func() {
  231. os.Remove(downLoadnFilePath)
  232. }()
  233. br.Ret = 200
  234. br.Success = true
  235. br.Msg = "导出成功"
  236. }
  237. // @Title 是否可以下载
  238. // @Description 获取是否可以下载接口
  239. // @Success Ret=200 {object} cygx.CanDownload
  240. // @router /hostKeyword/canDownload [get]
  241. func (this *SearchKeywordController) CnaDownload() {
  242. br := new(models.BaseResponse).Init()
  243. defer func() {
  244. this.Data["json"] = br
  245. this.ServeJSON()
  246. }()
  247. sysUser := this.SysUser
  248. if sysUser == nil {
  249. br.Msg = "请登录"
  250. br.ErrMsg = "请登录,SysUser Is Empty"
  251. return
  252. }
  253. resp := new(cygx.CanDownload)
  254. if sysUser.Authority == 1 || sysUser.Authority == 3 {
  255. resp.IsCanDownload = true
  256. }
  257. if sysUser.Role == "admin" {
  258. resp.IsCanDownload = true
  259. }
  260. if sysUser.RoleTypeCode == "rai_admin" || sysUser.RoleTypeCode == "ficc_admin" || sysUser.RoleTypeCode == "admin" {
  261. resp.IsCanDownload = true
  262. }
  263. br.Ret = 200
  264. br.Success = true
  265. br.Msg = "获取成功"
  266. br.Data = resp
  267. }