yanxuan_special.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "github.com/tealeg/xlsx"
  7. "hongze/hz_crm_api/controllers"
  8. "hongze/hz_crm_api/models"
  9. "hongze/hz_crm_api/models/company"
  10. "hongze/hz_crm_api/models/cygx"
  11. "hongze/hz_crm_api/services"
  12. cygxService "hongze/hz_crm_api/services/cygx"
  13. "hongze/hz_crm_api/services/elastic"
  14. "hongze/hz_crm_api/utils"
  15. "os"
  16. "path/filepath"
  17. "strconv"
  18. "strings"
  19. "time"
  20. )
  21. // YanxuanSpecialController 研选专栏
  22. type YanxuanSpecialController struct {
  23. controllers.BaseAuthController
  24. }
  25. // @Title 新增研选专栏作者
  26. // @Description 新增研选专栏作者
  27. // @Param request body help_doc.AddHelpDocReq true "type json string"
  28. // @Success 200 {object} models.AddEnglishReportResp
  29. // @router /yanxuan_special/author/add [post]
  30. func (this *YanxuanSpecialController) Add() {
  31. br := new(models.BaseResponse).Init()
  32. defer func() {
  33. this.Data["json"] = br
  34. this.ServeJSON()
  35. }()
  36. sysUser := this.SysUser
  37. if sysUser == nil {
  38. br.Msg = "请登录"
  39. br.ErrMsg = "请登录,SysUser Is Empty"
  40. br.Ret = 408
  41. return
  42. }
  43. var req cygx.AddCygxYanxuanSpecialAuthorReq
  44. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  45. if err != nil {
  46. br.Msg = "参数解析异常!"
  47. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  48. return
  49. }
  50. if req.UserId <= 0 {
  51. br.Msg = "请输入用户信息"
  52. return
  53. }
  54. if req.RealName == "" {
  55. br.Msg = "请输入真实姓名"
  56. return
  57. }
  58. if req.Mobile == "" {
  59. br.Msg = "请输入手机号"
  60. return
  61. }
  62. //获取关联公司的用户信息
  63. infoUser, err := cygx.GetUserAndCompanyNameList(req.UserId)
  64. if err != nil {
  65. br.Msg = "获取失败"
  66. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  67. return
  68. }
  69. rnd := utils.GetRandInt(1, 5)
  70. item := cygx.CygxYanxuanSpecialAuthor{
  71. UserId: req.UserId,
  72. RealName: req.RealName,
  73. Mobile: req.Mobile,
  74. MobileInit: infoUser.Mobile,
  75. CompanyName: infoUser.CompanyName,
  76. CompanyId: infoUser.CompanyId,
  77. CreateTime: time.Now(),
  78. ModifyTime: time.Now(),
  79. HeadImg: utils.CYGX_YANXUAN_SPECIAL_HEAD_IMG_URL + strconv.Itoa(rnd) + ".png",
  80. BgImg: utils.CYGX_YANXUAN_SPECIAL_BG_IMG_URL + strconv.Itoa(rnd) + "a.png",
  81. BgImgDown: utils.CYGX_YANXUAN_SPECIAL_BG_IMG_URL + strconv.Itoa(rnd) + "b.png",
  82. BgImgPc: utils.CYGX_YANXUAN_SPECIAL_BG_IMG_URL_PC + strconv.Itoa(rnd) + ".png",
  83. Status: 1,
  84. }
  85. _, err = cygx.AddCygxYanxuanSpecialAuthor(&item)
  86. if err != nil {
  87. br.Msg = "新增失败"
  88. br.ErrMsg = "新增失败,Err:" + err.Error()
  89. return
  90. }
  91. br.Ret = 200
  92. br.Success = true
  93. br.Msg = "新增成功"
  94. }
  95. // @Title 禁用/启用研选专栏作者
  96. // @Description 禁用/启用研选专栏作者
  97. // @Param request body help_doc.AddHelpDocReq true "type json string"
  98. // @Success 200 {object} models.AddEnglishReportResp
  99. // @router /yanxuan_special/author/enable [post]
  100. func (this *YanxuanSpecialController) AuthorEnable() {
  101. br := new(models.BaseResponse).Init()
  102. defer func() {
  103. this.Data["json"] = br
  104. this.ServeJSON()
  105. }()
  106. sysUser := this.SysUser
  107. if sysUser == nil {
  108. br.Msg = "请登录"
  109. br.ErrMsg = "请登录,SysUser Is Empty"
  110. br.Ret = 408
  111. return
  112. }
  113. var req cygx.EnableCygxYanxuanSpecialAuthorReq
  114. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  115. if err != nil {
  116. br.Msg = "参数解析异常!"
  117. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  118. return
  119. }
  120. if req.UserId <= 0 {
  121. br.Msg = "用户id错误"
  122. return
  123. }
  124. if req.Status <= 0 {
  125. br.Msg = "参数错误"
  126. return
  127. }
  128. if tmpErr := cygx.EnableYanxuanSpecialAuthor(req.UserId, req.Status); tmpErr != nil {
  129. br.Msg = "启用/禁用作者失败"
  130. br.ErrMsg = "启用/禁用作者失败, Err:" + tmpErr.Error()
  131. return
  132. }
  133. if req.Status == 1 {
  134. br.Msg = "启用成功"
  135. } else {
  136. br.Msg = "禁用成功"
  137. }
  138. br.Ret = 200
  139. br.Success = true
  140. }
  141. // @Title 作者列表
  142. // @Description 作者列表
  143. // @Param request body help_doc.AddHelpDocReq true "type json string"
  144. // @Param PageSize query int true "每页数据条数"
  145. // @Param CurrentIndex query int true "当前页页码,从1开始"
  146. // @Param Status query string true "状态: 1:启用 、 2:禁用 。传其他默认所有"
  147. // @Param KeyWord query string false "搜索关键词"
  148. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:'CreatTime':开通时间 、 'articleNum':已发布文章 、 'pv':总Pv/Uv "
  149. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  150. // @Success 200 {object} models.AddEnglishReportResp
  151. // @router /yanxuan_special/author/list [get]
  152. func (this *YanxuanSpecialController) AuthorList() {
  153. br := new(models.BaseResponse).Init()
  154. defer func() {
  155. this.Data["json"] = br
  156. this.ServeJSON()
  157. }()
  158. sysUser := this.SysUser
  159. if sysUser == nil {
  160. br.Msg = "请登录"
  161. br.ErrMsg = "请登录,SysUser Is Empty"
  162. br.Ret = 408
  163. return
  164. }
  165. pageSize, _ := this.GetInt("PageSize")
  166. currentIndex, _ := this.GetInt("CurrentIndex")
  167. status, _ := this.GetInt("Status")
  168. keyWord := this.GetString("KeyWord")
  169. //排序参数
  170. sortParam := this.GetString("SortParam")
  171. sortType := this.GetString("SortType")
  172. var startSize int
  173. if pageSize <= 0 {
  174. pageSize = utils.PageSize20
  175. }
  176. if currentIndex <= 0 {
  177. currentIndex = 1
  178. }
  179. startSize = utils.StartIndex(currentIndex, pageSize)
  180. var condition string
  181. var pars []interface{}
  182. //作者状态处理
  183. if status == 1 || status == 2 {
  184. condition += ` AND art.status = ? `
  185. pars = append(pars, status)
  186. }
  187. //关键词搜索
  188. if keyWord != "" {
  189. keyWord = "%" + keyWord + "%"
  190. condition += ` AND art.special_name like ? `
  191. pars = append(pars, keyWord)
  192. }
  193. //排序字段以及排序方式处理
  194. var sortStr string
  195. if sortParam != "" && sortType != "" {
  196. if sortParam == "CreateTime" {
  197. if sortType == "asc" {
  198. sortStr = " ORDER BY art.create_time ASC "
  199. } else {
  200. sortStr = " ORDER BY art.create_time DESC "
  201. }
  202. }
  203. if sortParam == "ArticleNum" {
  204. if sortType == "asc" {
  205. sortStr = " ORDER BY art.article_num ASC "
  206. } else {
  207. sortStr = " ORDER BY art.article_num DESC "
  208. }
  209. }
  210. if sortParam == "pv" {
  211. if sortType == "asc" {
  212. sortStr = " ORDER BY art.pv ASC "
  213. } else {
  214. sortStr = " ORDER BY art.pv DESC "
  215. }
  216. }
  217. if sortStr == "" {
  218. sortStr = " ORDER BY a.publish_time DESC " // 兼容前端老六乱传字段
  219. }
  220. } else {
  221. sortStr = " ORDER BY art.create_time DESC "
  222. }
  223. total, err := cygx.GetYanxuanSpecialAuthorCount(condition, pars)
  224. if err != nil {
  225. br.Msg = "获取失败"
  226. br.ErrMsg = "获取失败,Err:" + err.Error()
  227. return
  228. }
  229. list, tmpErr := cygx.GetYanxuanSpecialAuthorList(condition+sortStr, pars, startSize, pageSize)
  230. if tmpErr != nil {
  231. br.Msg = "获取失败"
  232. br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
  233. return
  234. }
  235. var userIds []int
  236. var mobiles []string
  237. for _, v := range list {
  238. userIds = append(userIds, v.UserId)
  239. if v.MobileInit != "" {
  240. mobiles = append(mobiles, v.MobileInit)
  241. }
  242. }
  243. listUser, err := models.GetWxUserRaiSllerListByUserMobile(mobiles)
  244. if err != nil {
  245. br.Msg = "获取失败"
  246. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  247. return
  248. }
  249. //获取用户当前最新的公司信息
  250. mapWxUserSller := make(map[string]*models.WxUserSller)
  251. for _, v := range listUser {
  252. mapWxUserSller[v.Mobile] = v
  253. }
  254. //对权益管理员跟超管展示全部手机号
  255. var isShow bool
  256. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN {
  257. isShow = true
  258. }
  259. //获取专栏用户最新的一篇文章信息
  260. mapNewTime := cygxService.GetBestNewYanxuanSpecialByUserId(userIds)
  261. for _, v := range list {
  262. v.SpecialAuthorId = v.Id
  263. v.ArticlePublishTime = mapNewTime[v.UserId]
  264. mapItem := mapWxUserSller[v.MobileInit]
  265. if mapItem != nil {
  266. v.CompanyName = mapItem.CompanyName
  267. v.CompanyId = mapItem.CompanyId
  268. }
  269. if isShow {
  270. v.Mobile = v.MobileInit
  271. }
  272. }
  273. resp := new(cygx.GetCygxYanxuanSpecialAuthorItemResp)
  274. page := paging.GetPaging(currentIndex, pageSize, total)
  275. resp.List = list
  276. resp.Paging = page
  277. br.Data = resp
  278. br.Ret = 200
  279. br.Success = true
  280. br.Msg = "获取成功"
  281. }
  282. // @Title 审核列表
  283. // @Description 审核列表
  284. // @Param PageSize query int true "每页数据条数"
  285. // @Param CurrentIndex query int true "当前页页码,从1开始"
  286. // @Param Status query string true "状态: 1:待审核 、 2:已发布 。默认待审核"
  287. // @Param Type query int true "文章类型,1:笔记、2:观点"
  288. // @Param KeyWord query string false "搜索关键词"
  289. // @Param SortParam query string false "排序字段参数,用来排序的字段, 枚举值:'CreatTime':开通时间 、 'articleNum':已发布文章 、 'pv':总Pv/Uv "
  290. // @Param SortType query string true "如何排序,是正序还是倒序,枚举值:`asc 正序`,`desc 倒叙`"
  291. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  292. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  293. // @Success 200 {object} models.AddEnglishReportResp
  294. // @router /yanxuan_special/list [get]
  295. func (this *YanxuanSpecialController) List() {
  296. br := new(models.BaseResponse).Init()
  297. defer func() {
  298. this.Data["json"] = br
  299. this.ServeJSON()
  300. }()
  301. sysUser := this.SysUser
  302. if sysUser == nil {
  303. br.Msg = "请登录"
  304. br.ErrMsg = "请登录,SysUser Is Empty"
  305. br.Ret = 408
  306. return
  307. }
  308. userId, _ := this.GetInt("UserId", 0)
  309. pageSize, _ := this.GetInt("PageSize")
  310. currentIndex, _ := this.GetInt("CurrentIndex")
  311. status, _ := this.GetInt("Status", 1)
  312. specialType, _ := this.GetInt("Type")
  313. keyWord := this.GetString("KeyWord")
  314. //排序参数
  315. sortParam := this.GetString("SortParam")
  316. sortType := this.GetString("SortType")
  317. startDate := this.GetString("StartDate")
  318. endDate := this.GetString("EndDate")
  319. var startSize int
  320. if pageSize <= 0 {
  321. pageSize = utils.PageSize20
  322. }
  323. if currentIndex <= 0 {
  324. currentIndex = 1
  325. }
  326. startSize = utils.StartIndex(currentIndex, pageSize)
  327. var condition string
  328. var pars []interface{}
  329. if userId > 0 {
  330. condition += ` AND a.user_id = ? `
  331. pars = append(pars, userId)
  332. }
  333. if status == 1 {
  334. condition += ` AND a.status = 2 `
  335. }
  336. if status == 2 {
  337. condition += ` AND a.status = 3 `
  338. }
  339. if startDate != "" {
  340. condition += ` AND a.publish_time >= ` + "'" + startDate + " 00:00:00'"
  341. }
  342. if endDate != "" {
  343. condition += ` AND a.publish_time <= ` + "'" + endDate + " 23:59:59'"
  344. }
  345. //文章类型
  346. if specialType == 1 || specialType == 2 {
  347. condition += ` AND a.type = ? `
  348. pars = append(pars, specialType)
  349. }
  350. //关键词搜索
  351. if keyWord != "" {
  352. keyWord = "%" + keyWord + "%"
  353. condition += ` AND a.title like ? `
  354. pars = append(pars, keyWord)
  355. }
  356. //排序字段以及排序方式处理
  357. var sortStr string
  358. if sortParam != "" && sortType != "" {
  359. if sortParam == "pv" {
  360. if sortType == "asc" {
  361. sortStr = " ORDER BY a.pv ASC "
  362. } else {
  363. sortStr = " ORDER BY a.pv DESC "
  364. }
  365. }
  366. if sortStr == "" {
  367. sortStr = " ORDER BY a.publish_time DESC " // 兼容前端老六乱传字段
  368. }
  369. } else {
  370. sortStr = " ORDER BY a.publish_time DESC "
  371. }
  372. total, err := cygx.GetGetYanxuanSpecialCount(condition, pars)
  373. if err != nil {
  374. br.Msg = "获取失败"
  375. br.ErrMsg = "获取失败,Err:" + err.Error()
  376. return
  377. }
  378. list, tmpErr := cygx.GetYanxuanSpecialList(condition+sortStr, pars, startSize, pageSize)
  379. if tmpErr != nil {
  380. br.Msg = "获取失败"
  381. br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
  382. return
  383. }
  384. pars = make([]interface{}, 0)
  385. listAuthor, tmpErr := cygx.GetYanxuanSpecialAuthorList("", pars, 0, 999)
  386. if tmpErr != nil {
  387. br.Msg = "获取失败"
  388. br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
  389. return
  390. }
  391. mapUserId := make(map[int]int)
  392. for _, v := range listAuthor {
  393. mapUserId[v.UserId] = v.Id
  394. }
  395. for _, v := range list {
  396. v.SpecialAuthorId = mapUserId[v.UserId]
  397. hasImg, err := utils.ArticleHasImgUrl(v.Content)
  398. if err != nil {
  399. return
  400. }
  401. if hasImg {
  402. v.ContentHasImg = 1
  403. }
  404. if v.DocUrl != "" {
  405. var docs []cygx.Doc
  406. err := json.Unmarshal([]byte(v.DocUrl), &docs)
  407. if err != nil {
  408. br.Msg = "参数解析异常!"
  409. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  410. return
  411. }
  412. v.Docs = docs
  413. }
  414. if v.CompanyTags != "" {
  415. v.Tags += v.CompanyTags
  416. }
  417. if v.IndustryTags != "" {
  418. if v.Tags != "" {
  419. v.Tags += ","
  420. }
  421. v.Tags += v.IndustryTags
  422. }
  423. }
  424. resp := new(cygx.GetCygxYanxuanSpeciaResplItemResp)
  425. page := paging.GetPaging(currentIndex, pageSize, total)
  426. resp.List = list
  427. resp.Paging = page
  428. br.Data = resp
  429. br.Ret = 200
  430. br.Success = true
  431. br.Msg = "获取成功"
  432. }
  433. // @Title 审批研选专栏
  434. // @Description 审批研选专栏
  435. // @Param request body help_doc.AddHelpDocReq true "type json string"
  436. // @Success 200 {object} models.AddEnglishReportResp
  437. // @router /yanxuan_special/enable [post]
  438. func (this *YanxuanSpecialController) Enable() {
  439. br := new(models.BaseResponse).Init()
  440. defer func() {
  441. this.Data["json"] = br
  442. this.ServeJSON()
  443. }()
  444. sysUser := this.SysUser
  445. if sysUser == nil {
  446. br.Msg = "请登录"
  447. br.ErrMsg = "请登录,SysUser Is Empty"
  448. br.Ret = 408
  449. return
  450. }
  451. var req cygx.EnableCygxYanxuanSpecialReq
  452. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  453. if err != nil {
  454. br.Msg = "参数解析异常!"
  455. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  456. return
  457. }
  458. if req.Id <= 0 {
  459. br.Msg = "文章id错误"
  460. return
  461. }
  462. if req.Status <= 0 {
  463. br.Msg = "参数错误"
  464. return
  465. }
  466. status := 0
  467. if req.Status == 1 {
  468. status = 3
  469. } else {
  470. status = 4
  471. }
  472. if tmpErr := cygx.EnableYanxuanSpecial(req.Id, status, req.Reason, sysUser.RealName); tmpErr != nil {
  473. br.Msg = "审批失败"
  474. br.ErrMsg = "审批失败, Err:" + tmpErr.Error()
  475. return
  476. }
  477. if req.Status == 1 {
  478. go cygxService.SendWxMsgSpecialFollow(req.Id)
  479. go services.SendWxCategoryMsgSpecialFollow(req.Id)
  480. }
  481. go cygxService.SendWxMsgSpecialAuthor(req.Id, req.Status) // 研选专栏审核完成时,给提交人发送模板消息
  482. go services.SendWxCategoryMsgSpecialAuthor(req.Id, req.Status) // 研选专栏审核完成时,给提交人发送模板消息
  483. go cygxService.UpdateYanxuanSpecialResourceData(req.Id) // 写入首页最新 cygx_resource_data 表
  484. go elastic.EsAddYanxuanSpecial(req.Id) // 写入es 综合搜索
  485. br.Msg = "审批成功"
  486. br.Ret = 200
  487. br.Success = true
  488. }
  489. // @Title 收藏详情
  490. // @Description 收藏详情
  491. // @Param SpecialId query int true "每页数据条数"
  492. // @Success 200 {object} models.AddEnglishReportResp
  493. // @router /yanxuan_special/special_collect/list [get]
  494. func (this *YanxuanSpecialController) SpecialCollectList() {
  495. br := new(models.BaseResponse).Init()
  496. defer func() {
  497. this.Data["json"] = br
  498. this.ServeJSON()
  499. }()
  500. sysUser := this.SysUser
  501. if sysUser == nil {
  502. br.Msg = "请登录"
  503. br.ErrMsg = "请登录,SysUser Is Empty"
  504. br.Ret = 408
  505. return
  506. }
  507. specialId, _ := this.GetInt("SpecialId")
  508. var condition string
  509. var pars []interface{}
  510. condition += " AND yanxuan_special_id = ? ORDER BY art.create_time DESC "
  511. pars = append(pars, specialId)
  512. list, err := cygx.GetCygxYanxuanSpecialCollectList(condition, pars, 0, 100000)
  513. if err != nil {
  514. br.Msg = "获取失败"
  515. br.ErrMsg = "获取失败,Err:" + err.Error()
  516. return
  517. }
  518. resp := new(cygx.GetCygxYanxuanSpecialCollectResp)
  519. resp.List = list
  520. br.Data = resp
  521. br.Ret = 200
  522. br.Success = true
  523. br.Msg = "获取成功"
  524. }
  525. // @Title 下载PV
  526. // @Description 下载PV接口
  527. // @Param SpecialId query int true "每页数据条数"
  528. // @router /yanxuan_special/list_pv [get]
  529. func (this *YanxuanSpecialController) ListPv() {
  530. br := new(models.BaseResponse).Init()
  531. defer func() {
  532. this.Data["json"] = br
  533. this.ServeJSON()
  534. }()
  535. AdminUser := this.SysUser
  536. if AdminUser == nil {
  537. br.Msg = "请登录"
  538. br.ErrMsg = "请登录,用户信息为空"
  539. br.Ret = 408
  540. return
  541. }
  542. specialId, _ := this.GetInt("SpecialId")
  543. if specialId < 1 {
  544. br.Msg = "请输入专栏ID"
  545. return
  546. }
  547. var condition string
  548. var pars []interface{}
  549. condition = ` AND yanxuan_special_id = ? ORDER BY create_time DESC `
  550. pars = append(pars, specialId)
  551. list, err := cygx.GetCygxYanxuanSpecialRecordList(condition, pars)
  552. if err != nil {
  553. br.Msg = "获取失败"
  554. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  555. return
  556. }
  557. var companyIds []int
  558. for _, v := range list {
  559. companyIds = append(companyIds, v.CompanyId)
  560. }
  561. listCompanyProduct, err := company.GetCompanyProductListByCompanyIds(companyIds, 2)
  562. if err != nil && err.Error() != utils.ErrNoRow() {
  563. br.Msg = "获取失败"
  564. br.ErrMsg = "获取销售列表失败,Err:" + err.Error()
  565. return
  566. }
  567. mapsCompanyStatus := make(map[int]string)
  568. for _, v := range listCompanyProduct {
  569. mapsCompanyStatus[v.CompanyId] = v.Status
  570. }
  571. //创建excel
  572. dir, err := os.Executable()
  573. exPath := filepath.Dir(dir)
  574. downLoadnFilePath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  575. xlsxFile := xlsx.NewFile()
  576. if err != nil {
  577. br.Msg = "生成文件失败"
  578. br.ErrMsg = "生成文件失败"
  579. return
  580. }
  581. style := xlsx.NewStyle()
  582. alignment := xlsx.Alignment{
  583. Horizontal: "center",
  584. Vertical: "center",
  585. WrapText: true,
  586. }
  587. style.Alignment = alignment
  588. style.ApplyAlignment = true
  589. sheet, err := xlsxFile.AddSheet("阅读明细")
  590. if err != nil {
  591. br.Msg = "新增Sheet失败"
  592. br.ErrMsg = "新增Sheet失败,Err:" + err.Error()
  593. return
  594. }
  595. rowTitle := sheet.AddRow()
  596. cellA := rowTitle.AddCell()
  597. cellA.Value = "姓名"
  598. cellMobile := rowTitle.AddCell()
  599. cellMobile.Value = "手机号"
  600. cellB := rowTitle.AddCell()
  601. cellB.Value = "公司名称"
  602. cellCompanyStatus := rowTitle.AddCell()
  603. cellCompanyStatus.Value = "客户状态"
  604. cellC := rowTitle.AddCell()
  605. cellC.Value = "所属权益销售"
  606. cellD := rowTitle.AddCell()
  607. cellD.Value = "阅读时间"
  608. cellE := rowTitle.AddCell()
  609. cellE.Value = "阅读时长"
  610. for _, item := range list {
  611. row := sheet.AddRow()
  612. cellA := row.AddCell()
  613. cellA.Value = item.RealName
  614. cellMobile := row.AddCell()
  615. cellMobile.Value = item.Mobile
  616. cellB := row.AddCell()
  617. cellB.Value = item.CompanyName
  618. cellCompanyStatus := row.AddCell()
  619. cellCompanyStatus.Value = mapsCompanyStatus[item.CompanyId]
  620. cellC := row.AddCell()
  621. cellC.Value = item.SellerName
  622. cellD := row.AddCell()
  623. cellD.Value = item.CreateTime
  624. cellE := row.AddCell()
  625. cellE.Value = strconv.Itoa(item.StopTime)
  626. }
  627. err = xlsxFile.Save(downLoadnFilePath)
  628. if err != nil {
  629. br.Msg = "保存文件失败"
  630. br.ErrMsg = "保存文件失败"
  631. return
  632. }
  633. downloadFileName := time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
  634. this.Ctx.Output.Download(downLoadnFilePath, downloadFileName)
  635. defer func() {
  636. os.Remove(downLoadnFilePath)
  637. }()
  638. br.Ret = 200
  639. br.Success = true
  640. br.Msg = "导出成功"
  641. }
  642. // @Title 审批记录
  643. // @Description 审批记录接口
  644. // @Param PageSize query int true "每页数据条数"
  645. // @Param CurrentIndex query int true "当前页页码,从1开始"
  646. // @Success 200 {object} models.CygxYanxuanSpecialApprovalLogListResp
  647. // @router /yanxuan_special/approval_log_list [get]
  648. func (this *YanxuanSpecialController) ApprovalLogList() {
  649. br := new(models.BaseResponse).Init()
  650. defer func() {
  651. this.Data["json"] = br
  652. this.ServeJSON()
  653. }()
  654. sysUser := this.SysUser
  655. if sysUser == nil {
  656. br.Msg = "请登录"
  657. br.ErrMsg = "请登录,SysUser Is Empty"
  658. br.Ret = 408
  659. return
  660. }
  661. pageSize, _ := this.GetInt("PageSize")
  662. currentIndex, _ := this.GetInt("CurrentIndex")
  663. var startSize int
  664. if pageSize <= 0 {
  665. pageSize = utils.PageSize20
  666. }
  667. if currentIndex <= 0 {
  668. currentIndex = 1
  669. }
  670. startSize = utils.StartIndex(currentIndex, pageSize)
  671. var condition string
  672. var pars []interface{}
  673. //只是查询驳回状态的数据
  674. condition += ` AND a.approval_status = 2 `
  675. total, err := cygx.GetCygxYanxuanSpecialApprovalLogCount(condition, pars)
  676. if err != nil {
  677. br.Msg = "获取失败"
  678. br.ErrMsg = "获取失败,Err:" + err.Error()
  679. return
  680. }
  681. condition += ` ORDER BY create_time DESC `
  682. list, tmpErr := cygx.GetCygxYanxuanSpecialApprovalLogList(condition, pars, startSize, pageSize)
  683. if tmpErr != nil {
  684. br.Msg = "获取失败"
  685. br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
  686. return
  687. }
  688. pars = make([]interface{}, 0)
  689. listAuthor, tmpErr := cygx.GetYanxuanSpecialAuthorList("", pars, 0, 999)
  690. if tmpErr != nil {
  691. br.Msg = "获取失败"
  692. br.ErrMsg = "获取失败, Err:" + tmpErr.Error()
  693. return
  694. }
  695. mapUserId := make(map[int]int)
  696. for _, v := range listAuthor {
  697. mapUserId[v.UserId] = v.Id
  698. }
  699. for _, v := range list {
  700. v.SpecialAuthorId = mapUserId[v.UserId]
  701. }
  702. resp := new(cygx.CygxYanxuanSpecialApprovalLogListResp)
  703. page := paging.GetPaging(currentIndex, pageSize, total)
  704. resp.List = list
  705. resp.Paging = page
  706. br.Data = resp
  707. br.Ret = 200
  708. br.Success = true
  709. br.Msg = "获取成功"
  710. }
  711. // @Title 按钮是否展示接口
  712. // @Description 按钮是否展示接口
  713. // @Success 200 {object} models.AddEnglishReportResp
  714. // @router /yanxuan_special/show_button [get]
  715. func (this *YanxuanSpecialController) ShowButton() {
  716. br := new(models.BaseResponse).Init()
  717. defer func() {
  718. this.Data["json"] = br
  719. this.ServeJSON()
  720. }()
  721. sysUser := this.SysUser
  722. if sysUser == nil {
  723. br.Msg = "请登录"
  724. br.ErrMsg = "请登录,SysUser Is Empty"
  725. br.Ret = 408
  726. return
  727. }
  728. resp := new(cygx.CygxYanxuanSpecialShowButton)
  729. configCode := utils.TPL_MSG_NEI_RONG_ZU
  730. cnfNeiRong, err := cygx.GetConfigByCode(configCode)
  731. if err != nil {
  732. br.Msg = "获取失败"
  733. br.ErrMsg = "获取失败,Err:" + err.Error()
  734. return
  735. }
  736. //汪洋王芳手机号
  737. configCode = utils.TPL_MSG_WANG_FANG_WANG_YANG
  738. cnfWang, err := cygx.GetConfigByCode(configCode)
  739. if err != nil {
  740. br.Msg = "获取失败"
  741. br.ErrMsg = "获取失败,Err:" + err.Error()
  742. return
  743. }
  744. //作者管理栏,只有内容组、汪洋、王芳、超管可见
  745. if strings.Contains(cnfNeiRong.ConfigValue, sysUser.Mobile) || strings.Contains(cnfWang.ConfigValue, sysUser.Mobile) || sysUser.Role == utils.ROLE_TYPE_CODE_ADMIN {
  746. resp.IsShowSpecialAuthor = true
  747. }
  748. br.Data = resp
  749. br.Ret = 200
  750. br.Success = true
  751. br.Msg = "获取成功"
  752. }
  753. // @Title 作者粉丝列表
  754. // @Description 作者粉丝列表
  755. // @Param SpecialAuthorId query int true "作者ID"
  756. // @Success 200 {object} models.AddEnglishReportResp
  757. // @router /yanxuan_special/special_author_fans_list [get]
  758. func (this *YanxuanSpecialController) SpecialAuthorFansList() {
  759. br := new(models.BaseResponse).Init()
  760. defer func() {
  761. this.Data["json"] = br
  762. this.ServeJSON()
  763. }()
  764. sysUser := this.SysUser
  765. if sysUser == nil {
  766. br.Msg = "请登录"
  767. br.ErrMsg = "请登录,SysUser Is Empty"
  768. br.Ret = 408
  769. return
  770. }
  771. specialAuthorId, _ := this.GetInt("SpecialAuthorId")
  772. detail, err := cygx.GetCygxYanxuanSpecialAuthorItemById(specialAuthorId)
  773. if err != nil {
  774. br.Msg = "获取失败"
  775. br.ErrMsg = "获取失败,Err:" + err.Error()
  776. return
  777. }
  778. var condition string
  779. var pars []interface{}
  780. condition += " AND follow_user_id = ? ORDER BY a.create_time DESC "
  781. pars = append(pars, detail.UserId)
  782. list, err := cygx.GetCygxYanxuanSpecialFollowList(condition, pars, 0, 100000)
  783. if err != nil {
  784. br.Msg = "获取失败"
  785. br.ErrMsg = "获取失败,Err:" + err.Error()
  786. return
  787. }
  788. resp := new(cygx.GetCygxYanxuanSpecialFollowResp)
  789. resp.List = list
  790. br.Data = resp
  791. br.Ret = 200
  792. br.Success = true
  793. br.Msg = "获取成功"
  794. }
  795. func init_928() {
  796. var condition string
  797. var pars []interface{}
  798. list, err := cygx.GetYanxuanSpecialAuthorList(condition, pars, 0, 999)
  799. if err != nil {
  800. fmt.Println(err)
  801. return
  802. }
  803. for k, v := range list {
  804. fmt.Println(k)
  805. //获取关联公司的用户信息
  806. infoUser, err := cygx.GetUserAndCompanyNameList(v.UserId)
  807. if err != nil && err.Error() != utils.ErrNoRow() {
  808. fmt.Println(err)
  809. return
  810. }
  811. if infoUser == nil {
  812. continue
  813. }
  814. err = cygx.UpdateSpecialAuthormobile_init(infoUser.Mobile, infoUser.UserId)
  815. if err != nil {
  816. fmt.Println(err)
  817. return
  818. }
  819. }
  820. return
  821. }