yanxuan_special.go 26 KB

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