yanxuan_special.go 24 KB

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