article.go 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390
  1. package controllers
  2. import (
  3. "bufio"
  4. "github.com/pdfcpu/pdfcpu/pkg/api"
  5. "github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
  6. "io"
  7. //"bufio"
  8. "encoding/json"
  9. "fmt"
  10. "github.com/medivhzhan/weapp/v2"
  11. "os"
  12. //"github.com/pdfcpu/pdfcpu/pkg/api"
  13. //"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
  14. "hongze/hongze_cygx/models"
  15. "hongze/hongze_cygx/services"
  16. "hongze/hongze_cygx/utils"
  17. "html"
  18. //"io"
  19. "io/ioutil"
  20. nhttp "net/http"
  21. //"os"
  22. "regexp"
  23. "strconv"
  24. "strings"
  25. "time"
  26. )
  27. type ArticleController struct {
  28. BaseAuthController
  29. }
  30. type ArticleCommonController struct {
  31. BaseCommonController
  32. }
  33. // @Title 获取报告详情
  34. // @Description 获取报告详情接口
  35. // @Param ArticleId query int true "报告ID"
  36. // @Success 200 {object} models.ArticleDetailResp
  37. // @router /detail [get]
  38. func (this *ArticleController) Detail() {
  39. br := new(models.BaseResponse).Init()
  40. defer func() {
  41. this.Data["json"] = br
  42. this.ServeJSON()
  43. }()
  44. user := this.User
  45. if user == nil {
  46. br.Msg = "请登录"
  47. br.ErrMsg = "请登录,用户信息为空"
  48. br.Ret = 408
  49. return
  50. }
  51. uid := user.UserId
  52. articleId, err := this.GetInt("ArticleId")
  53. if articleId <= 0 {
  54. br.Msg = "文章不存在"
  55. br.ErrMsg = "文章不存在,文章ID错误"
  56. return
  57. }
  58. detail := new(models.ArticleDetail)
  59. hasPermission := 0
  60. hasFree := 0
  61. var haveResearch bool
  62. //判断是否已经申请过
  63. applyCount, err := models.GetApplyRecordCount(uid)
  64. if err != nil && err.Error() != utils.ErrNoRow() {
  65. br.Msg = "获取信息失败"
  66. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  67. return
  68. }
  69. //`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
  70. if user.CompanyId > 1 {
  71. companyPermission, err := models.GetCompanyPermission(user.CompanyId)
  72. if err != nil {
  73. br.Msg = "获取信息失败"
  74. br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  75. return
  76. }
  77. detail, err = models.GetArticleDetailById(articleId)
  78. if err != nil {
  79. br.Msg = "获取信息失败"
  80. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  81. return
  82. }
  83. detail.Body = html.UnescapeString(detail.Body)
  84. detail.Body = strings.Replace(detail.Body, "<p data-f-id=\"pbf\" style=\"text-align: center; font-size: 14px; margin-top: 30px; opacity: 0.65; font-family: sans-serif;\">Powered by <a href=\"https://www.froala.com/wysiwyg-editor?pb=1\" title=\"Froala Editor\">Froala Editor</a></p>", "", -1)
  85. detail.Body = strings.Replace(detail.Body, "pre", "div", -1)
  86. //detail.Abstract = html.UnescapeString(detail.Abstract)
  87. detail.Abstract, _ = services.GetReportContentTextSub(detail.Abstract)
  88. if companyPermission == "" {
  89. if applyCount > 0 {
  90. hasPermission = 5
  91. } else {
  92. hasPermission = 2
  93. }
  94. hasFree = 2
  95. goto Loop
  96. } else {
  97. hasFree = 1
  98. var articlePermissionPermissionName string
  99. if detail.CategoryId > 0 {
  100. articlePermission, err := models.GetArticlePermission(detail.CategoryId)
  101. if err != nil {
  102. br.Msg = "获取信息失败"
  103. br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  104. return
  105. }
  106. if articlePermission == nil {
  107. br.Msg = "获取信息失败"
  108. br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  109. return
  110. }
  111. articlePermissionPermissionName = articlePermission.PermissionName
  112. } else {
  113. articlePermissionPermissionName = detail.CategoryName
  114. }
  115. var hasPersion bool
  116. slice := strings.Split(articlePermissionPermissionName, ",")
  117. for _, v := range slice {
  118. if strings.Contains(companyPermission, v) {
  119. hasPersion = true
  120. }
  121. }
  122. if strings.Contains(detail.CategoryName, "研选") {
  123. detail.IsResearch = true
  124. }
  125. userType, _, err := services.GetUserType(user.CompanyId)
  126. if err != nil {
  127. br.Msg = "获取信息失败"
  128. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  129. return
  130. }
  131. if userType == 1 && strings.Contains(detail.CategoryName, "研选") {
  132. hasPersion = false
  133. }
  134. if hasPersion {
  135. hasPermission = 1
  136. historyRecord := new(models.CygxArticleHistoryRecord)
  137. historyRecord.UserId = uid
  138. historyRecord.ArticleId = articleId
  139. historyRecord.CreateTime = time.Now()
  140. historyRecord.Mobile = user.Mobile
  141. historyRecord.Email = user.Email
  142. historyRecord.CompanyId = user.CompanyId
  143. historyRecord.CompanyName = user.CompanyName
  144. recordCount, _ := models.GetNoAddStoptimeArticleCount(uid, articleId)
  145. if recordCount == 0 {
  146. go models.AddCygxArticleHistoryRecord(historyRecord)
  147. } else {
  148. detailNew, err := models.GetNewArticleHistoryRecord(uid, articleId)
  149. if err != nil {
  150. br.Msg = "获取信息失败"
  151. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  152. return
  153. }
  154. if detailNew.StopTime > 0 {
  155. go models.AddCygxArticleHistoryRecord(historyRecord)
  156. }
  157. }
  158. } else { //无该行业权限
  159. hasPermission = 3
  160. }
  161. if hasPermission == 1 {
  162. key := "CYGX_ARTICLE_" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid)
  163. if !utils.Rc.IsExist(key) {
  164. //新增浏览记录
  165. record := new(models.CygxArticleViewRecord)
  166. record.UserId = uid
  167. record.ArticleId = articleId
  168. record.CreateTime = time.Now()
  169. record.Mobile = user.Mobile
  170. record.Email = user.Email
  171. record.CompanyId = user.CompanyId
  172. record.CompanyName = user.CompanyName
  173. go models.AddCygxArticleViewRecord(record)
  174. utils.Rc.Put(key, 1, 5*time.Second)
  175. models.ModifyReportLastViewTime(uid)
  176. }
  177. }
  178. }
  179. collectCount, err := models.GetArticleCollectCount(uid, articleId)
  180. if err != nil && err.Error() != utils.ErrNoRow() {
  181. br.Msg = "获取信息失败"
  182. br.ErrMsg = "判断是否已收藏失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  183. return
  184. }
  185. if collectCount > 0 {
  186. detail.IsCollect = true
  187. }
  188. interviewApplyItem, err := models.GetArticleInterviewApply(uid, articleId)
  189. if err != nil && err.Error() != utils.ErrNoRow() {
  190. br.Msg = "获取信息失败"
  191. br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  192. return
  193. }
  194. if interviewApplyItem != nil && interviewApplyItem.InterviewApplyId > 0 {
  195. detail.IsInterviewApply = true
  196. detail.InterviewApplyStatus = interviewApplyItem.Status
  197. }
  198. //获取销售手机号
  199. sellerItem, err := models.GetSellerByCompanyId(user.CompanyId)
  200. if err != nil {
  201. br.Msg = "获取信息失败"
  202. br.ErrMsg = "获取销售数据失败2,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  203. return
  204. }
  205. if sellerItem != nil {
  206. detail.SellerMobile = sellerItem.Mobile
  207. detail.SellerName = sellerItem.RealName
  208. }
  209. sellerList, err := models.GetSellerList(articleId)
  210. if err != nil {
  211. br.Msg = "获取信息失败"
  212. br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  213. return
  214. }
  215. if detail.ArticleId >= utils.SummaryArticleId && strings.Contains(detail.SellerAndMobile, "-") {
  216. strnum := strings.Index(detail.SellerAndMobile, "-")
  217. detail.SellerAndMobile = detail.SellerAndMobile[0:strnum]
  218. if strnum > 0 {
  219. nickName := detail.SellerAndMobile[0:strnum]
  220. sellerAndMobile := &models.SellerRep{
  221. SellerMobile: "",
  222. SellerName: nickName,
  223. }
  224. sellerList = append(sellerList, sellerAndMobile)
  225. }
  226. }
  227. detail.SellerList = sellerList
  228. } else { //潜在客户
  229. if applyCount > 0 {
  230. hasPermission = 5
  231. } else {
  232. hasPermission = 4
  233. }
  234. }
  235. Loop:
  236. if hasPermission != 1 {
  237. detail.Body = ""
  238. detail.BodyText = ""
  239. } else {
  240. articleFollowdetail, err := models.GetArticleFollowDetail(articleId, uid)
  241. if err != nil {
  242. br.Msg = "获取信息失败"
  243. br.ErrMsg = "获取关注信息失败,Err:" + err.Error()
  244. return
  245. }
  246. detail.FollowNum = articleFollowdetail.DNum
  247. detail.CollectionNum = articleFollowdetail.AcNum
  248. if articleFollowdetail.MdNum > 0 {
  249. detail.IsFollow = true
  250. }
  251. if detail.IsSummary == 1 {
  252. detail.IsBelongSummary = true
  253. }
  254. if detail.IsReport == 1 {
  255. detail.IsBelongReport = true
  256. }
  257. haveResearch = true
  258. }
  259. resp := new(models.ArticleDetailResp)
  260. resp.HasPermission = hasPermission
  261. resp.HaveResearch = haveResearch
  262. resp.HasFree = hasFree
  263. resp.Detail = detail
  264. if user.Mobile != "" {
  265. resp.Mobile = user.Mobile
  266. } else {
  267. resp.Mobile = user.Email
  268. }
  269. br.Ret = 200
  270. br.Success = true
  271. br.Msg = "获取成功"
  272. br.Data = resp
  273. }
  274. // @Title 收藏
  275. // @Description 收藏
  276. // @Param request body models.ArticleCollectReq true "type json string"
  277. // @Success 200 {object} models.FontsCollectResp
  278. // @router /collect [post]
  279. func (this *ArticleController) ArticleCollect() {
  280. br := new(models.BaseResponse).Init()
  281. defer func() {
  282. this.Data["json"] = br
  283. this.ServeJSON()
  284. }()
  285. user := this.User
  286. if user == nil {
  287. br.Msg = "请重新登录"
  288. br.Ret = 408
  289. return
  290. }
  291. uid := user.UserId
  292. var req models.ArticleCollectReq
  293. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  294. if err != nil {
  295. br.Msg = "参数解析异常!"
  296. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  297. return
  298. }
  299. count, err := models.GetArticleCollectCount(uid, req.ArticleId)
  300. if err != nil {
  301. br.Msg = "获取数据失败!"
  302. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  303. return
  304. }
  305. resp := new(models.ArticleCollectResp)
  306. if count <= 0 {
  307. item := new(models.CygxArticleCollect)
  308. item.ArticleId = req.ArticleId
  309. item.UserId = uid
  310. item.CreateTime = time.Now()
  311. _, err = models.AddCygxArticleCollect(item)
  312. if err != nil {
  313. br.Msg = "收藏失败"
  314. br.ErrMsg = "收藏失败,Err:" + err.Error()
  315. return
  316. }
  317. br.Msg = "收藏成功"
  318. resp.Status = 1
  319. } else {
  320. err = models.RemoveArticleCollect(uid, req.ArticleId)
  321. if err != nil {
  322. br.Msg = "取消收藏失败"
  323. br.ErrMsg = "取消收藏失败,Err:" + err.Error()
  324. return
  325. }
  326. br.Msg = "已取消收藏"
  327. resp.Status = 2
  328. }
  329. collectTotal, err := models.GetArticleCollectUsersCount(req.ArticleId)
  330. if err != nil {
  331. br.Msg = "获取数据失败"
  332. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  333. return
  334. }
  335. resp.CollectCount = collectTotal
  336. br.Ret = 200
  337. br.Success = true
  338. br.Data = resp
  339. }
  340. // @Title 访谈申请
  341. // @Description 访谈申请
  342. // @Param request body models.ArticleInterviewApplyReq true "type json string"
  343. // @Success 200 {object} models.FontsCollectResp
  344. // @router /interview/apply [post]
  345. func (this *ArticleController) InterviewApply() {
  346. br := new(models.BaseResponse).Init()
  347. defer func() {
  348. this.Data["json"] = br
  349. this.ServeJSON()
  350. }()
  351. user := this.User
  352. if user == nil {
  353. br.Msg = "请重新登录"
  354. br.Ret = 408
  355. return
  356. }
  357. uid := user.UserId
  358. var req models.ArticleInterviewApplyReq
  359. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  360. if err != nil {
  361. br.Msg = "参数解析异常!"
  362. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  363. return
  364. }
  365. article, err := models.GetArticleDetailById(req.ArticleId)
  366. if err != nil {
  367. br.Msg = "获取纪要失败!"
  368. br.ErrMsg = "获取纪要失败,Err:" + err.Error()
  369. return
  370. }
  371. count, err := models.GetArticleInterviewApplyCount(uid, req.ArticleId)
  372. if err != nil {
  373. br.Msg = "获取数据失败!"
  374. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  375. return
  376. }
  377. resp := new(models.ArticleInterviewApplyResp)
  378. if count <= 0 {
  379. item := new(models.CygxInterviewApply)
  380. item.ArticleId = req.ArticleId
  381. item.UserId = uid
  382. item.CompanyId = user.CompanyId
  383. item.Status = "待邀请"
  384. item.Sort = 1
  385. item.ArticleTitle = article.Title
  386. item.CreateTime = time.Now()
  387. item.ModifyTime = time.Now()
  388. item.ArticleIdMd5 = article.ArticleIdMd5
  389. _, err = models.AddCygxInterviewApply(item)
  390. if err != nil {
  391. br.Msg = "申请失败"
  392. br.ErrMsg = "申请失败,Err:" + err.Error()
  393. return
  394. }
  395. br.Msg = "申请成功"
  396. resp.Status = 1
  397. //发送模板消息
  398. if user.CompanyId > 1 {
  399. mobile := user.Mobile
  400. if mobile == "" {
  401. mobile = user.Email
  402. }
  403. sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
  404. if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
  405. openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
  406. fmt.Println(openIpItem)
  407. if openIpItem != nil && openIpItem.OpenId != "" {
  408. go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
  409. }
  410. }
  411. }
  412. } else {
  413. err = models.RemoveArticleInterviewApply(uid, req.ArticleId)
  414. if err != nil {
  415. br.Msg = "取消申请失败"
  416. br.ErrMsg = "取消申请失败,Err:" + err.Error()
  417. return
  418. }
  419. br.Msg = "已取消申请"
  420. resp.Status = 2
  421. if user.CompanyId > 1 {
  422. mobile := user.Mobile
  423. if mobile == "" {
  424. mobile = user.Email
  425. }
  426. sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
  427. if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" {
  428. openIpItem, _ := models.GetUserRecordByUserIdByXzs(sellerItem.Mobile, 4)
  429. fmt.Println(openIpItem)
  430. if openIpItem != nil && openIpItem.OpenId != "" {
  431. go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, openIpItem.OpenId)
  432. }
  433. }
  434. }
  435. }
  436. br.Ret = 200
  437. br.Success = true
  438. br.Data = resp
  439. }
  440. // @Title 获取报告详情
  441. // @Description 获取报告详情接口
  442. // @Param ArticleIdMd5 query int true "报告ID"
  443. // @Success 200 {object} models.ArticleDetailResp
  444. // @router /look/detail [get]
  445. func (this *ArticleCommonController) Detail() {
  446. br := new(models.BaseResponse).Init()
  447. defer func() {
  448. this.Data["json"] = br
  449. this.ServeJSON()
  450. }()
  451. articleIdMd5 := this.GetString("ArticleIdMd5")
  452. if articleIdMd5 == "" {
  453. br.Msg = "参数错误"
  454. br.ErrMsg = "参数错误"
  455. return
  456. }
  457. resp := new(models.ArticleDetailResp)
  458. detail, err := models.GetArticleDetailByIdMd5(articleIdMd5)
  459. if err != nil {
  460. br.Msg = "获取信息失败"
  461. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  462. return
  463. }
  464. detail.Body = html.UnescapeString(detail.Body)
  465. //detail.Abstract = html.UnescapeString(detail.Abstract)
  466. sellerList, err := models.GetSellerList(detail.ArticleId)
  467. if err != nil {
  468. br.Msg = "获取信息失败"
  469. br.ErrMsg = "获取销售数据失败,Err:" + err.Error() + ";articleId" + strconv.Itoa(detail.ArticleId)
  470. return
  471. }
  472. if detail.ArticleId > 1000000 {
  473. var hrefRegexp = regexp.MustCompile("[0-9]\\d*")
  474. match := hrefRegexp.FindAllString(detail.SellerAndMobile, -1)
  475. if match != nil {
  476. for _, v := range match {
  477. sellerAndMobile := &models.SellerRep{
  478. SellerMobile: v,
  479. SellerName: strings.Replace(detail.SellerAndMobile, v, "", -1),
  480. }
  481. sellerList = append(sellerList, sellerAndMobile)
  482. }
  483. }
  484. }
  485. resp.HasPermission = 1
  486. detail.Abstract, _ = services.GetReportContentTextSub(detail.Abstract)
  487. detail.SellerList = sellerList
  488. resp.Detail = detail
  489. br.Ret = 200
  490. br.Success = true
  491. br.Msg = "获取成功"
  492. br.Data = resp
  493. }
  494. // @Title 上传文章阅读时间
  495. // @Description 上传文章阅读时间接口
  496. // @Param request body models.AddStopTimeRep true "type json string"
  497. // @Success 200 {object} models.ArticleDetailResp
  498. // @router /addStopTime [post]
  499. func (this *ArticleController) AddStopTime() {
  500. br := new(models.BaseResponse).Init()
  501. defer func() {
  502. this.Data["json"] = br
  503. this.ServeJSON()
  504. }()
  505. user := this.User
  506. if user == nil {
  507. br.Msg = "请登录"
  508. br.ErrMsg = "请登录,用户信息为空"
  509. br.Ret = 408
  510. return
  511. }
  512. var req models.AddStopTimeRep
  513. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  514. if err != nil {
  515. br.Msg = "参数解析异常!"
  516. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  517. return
  518. }
  519. uid := user.UserId
  520. articleId := req.ArticleId
  521. stopTime := req.StopTime
  522. outType := req.OutType
  523. if articleId <= 0 {
  524. br.Msg = "参数错误"
  525. br.ErrMsg = "参数错误"
  526. return
  527. }
  528. if stopTime == 0 {
  529. stopTime = 1
  530. }
  531. if outType != 2 {
  532. outType = 1
  533. }
  534. detail := new(models.ArticleDetail)
  535. hasPermission := 0
  536. hasFree := 0
  537. //判断是否已经申请过
  538. applyCount, err := models.GetApplyRecordCount(uid)
  539. if err != nil && err.Error() != utils.ErrNoRow() {
  540. br.Msg = "获取信息失败"
  541. br.ErrMsg = "判断是否已申请过试用失败,Err:" + err.Error()
  542. return
  543. }
  544. //`description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,4:潜在客户,未提交过申请,5:潜在客户,已提交过申请"`
  545. if user.CompanyId > 1 {
  546. companyPermission, err := models.GetCompanyPermission(user.CompanyId)
  547. if err != nil {
  548. br.Msg = "获取信息失败"
  549. br.ErrMsg = "判断是否已申请访谈失败,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  550. return
  551. }
  552. detail, err = models.GetArticleDetailById(articleId)
  553. if err != nil {
  554. br.Msg = "获取信息失败"
  555. br.ErrMsg = "获取文章信息失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  556. return
  557. }
  558. if companyPermission == "" {
  559. if applyCount > 0 {
  560. hasPermission = 5
  561. } else {
  562. hasPermission = 2
  563. }
  564. hasFree = 2
  565. goto Loop
  566. } else {
  567. hasFree = 1
  568. var articlePermissionPermissionName string
  569. if detail.CategoryId > 0 {
  570. articlePermission, err := models.GetArticlePermission(detail.CategoryId)
  571. if err != nil {
  572. br.Msg = "获取信息失败"
  573. br.ErrMsg = "获取报告权限失败,Err:" + err.Error() + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  574. return
  575. }
  576. if articlePermission == nil {
  577. br.Msg = "获取信息失败"
  578. br.ErrMsg = "报告权限不存在,Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
  579. return
  580. }
  581. articlePermissionPermissionName = articlePermission.PermissionName
  582. } else {
  583. articlePermissionPermissionName = detail.CategoryName
  584. }
  585. var hasPersion bool
  586. slice := strings.Split(articlePermissionPermissionName, ",")
  587. for _, v := range slice {
  588. if strings.Contains(companyPermission, v) {
  589. hasPersion = true
  590. }
  591. }
  592. if hasPersion {
  593. detailNew, err := models.GetNewArticleHistoryRecord(uid, articleId)
  594. fmt.Println(detailNew)
  595. fmt.Println(err)
  596. if err == nil {
  597. fmt.Println("修改")
  598. hasPermission = 1
  599. historyRecord := new(models.AddStopTimeNewRep)
  600. historyRecord.StopTime = detailNew.StopTime + stopTime
  601. historyRecord.Id = detailNew.Id
  602. historyRecord.OutType = outType
  603. go models.UpdateArticleStopTime(historyRecord)
  604. }
  605. //不统计本公司的阅读记录、正常退出的不做时间差统计
  606. if user.CompanyId != 16 {
  607. key := "CYGX_ARTICLE_PV" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid) + "_" + strconv.Itoa(user.CompanyId) + "_" + strconv.Itoa(outType)
  608. record := new(models.CygxArticleHistoryRecordNewpv)
  609. record.UserId = uid
  610. record.ArticleId = articleId
  611. record.CreateTime = time.Now()
  612. record.ModifyTime = time.Now()
  613. record.Mobile = user.Mobile
  614. record.Email = user.Email
  615. record.CompanyId = user.CompanyId
  616. record.CompanyName = user.CompanyName
  617. record.StopTime = stopTime
  618. record.OutType = outType
  619. if !utils.Rc.IsExist(key) || outType != 2 {
  620. //新增浏览记录
  621. go models.AddCygxArticleViewRecordNewpv(record)
  622. } else {
  623. go models.UpdateCygxArticleViewRecordNewpv(record, stopTime)
  624. }
  625. utils.Rc.Put(key, 1, 10*time.Minute)
  626. }
  627. models.ModifyReportLastViewTime(uid)
  628. } else { //无该行业权限
  629. hasPermission = 3
  630. }
  631. }
  632. } else { //潜在客户
  633. if applyCount > 0 {
  634. hasPermission = 5
  635. } else {
  636. hasPermission = 4
  637. }
  638. }
  639. Loop:
  640. resp := new(models.ArticleDetailAddStopTimeRep)
  641. resp.HasPermission = hasPermission
  642. resp.HasFree = hasFree
  643. br.Ret = 200
  644. br.Success = true
  645. br.Msg = "操作成功"
  646. br.Data = resp
  647. }
  648. // @Title 文章带问
  649. // @Description 新增文章带问接口
  650. // @Param request body models.AddArticleAskRep true "type json string"
  651. // @Success Ret=200 新增成功
  652. // @router /askAdd [post]
  653. func (this *ArticleController) AskAdd() {
  654. br := new(models.BaseResponse).Init()
  655. defer func() {
  656. this.Data["json"] = br
  657. this.ServeJSON()
  658. }()
  659. user := this.User
  660. if user == nil {
  661. br.Msg = "请登录"
  662. br.ErrMsg = "请登录,SysUser Is Empty"
  663. br.Ret = 408
  664. return
  665. }
  666. var req models.AddArticleAskRep
  667. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  668. if err != nil {
  669. br.Msg = "参数解析异常!"
  670. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  671. return
  672. }
  673. if req.Content == "" {
  674. br.Msg = "建议内容不可为空"
  675. return
  676. }
  677. content := req.Content
  678. itemToken, err := services.WxGetToken()
  679. if err != nil {
  680. br.Msg = "GetWxAccessToken Err:" + err.Error()
  681. return
  682. }
  683. if itemToken.AccessToken == "" {
  684. br.Msg = "accessToken is empty"
  685. return
  686. }
  687. commerr, err := weapp.MSGSecCheck(itemToken.AccessToken, content)
  688. if err != nil {
  689. br.Msg = "内容校验失败!"
  690. br.ErrMsg = "内容校验失败,Err:" + err.Error()
  691. return
  692. }
  693. if commerr.ErrCode != 0 {
  694. br.Msg = "内容违规,请重新提交!"
  695. br.ErrMsg = "颜文字内容违规,Err:" + commerr.ErrMSG
  696. return
  697. }
  698. articleId := req.ArticleId
  699. count, _ := models.GetArticleCountById(articleId)
  700. if count == 0 {
  701. br.Msg = "操作失败"
  702. br.ErrMsg = "文章ID错误,不存在 articleId:" + strconv.Itoa(articleId)
  703. return
  704. }
  705. companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
  706. if err != nil {
  707. br.Msg = "提交失败!"
  708. br.ErrMsg = "获取客户详情失败,Err:" + err.Error()
  709. return
  710. }
  711. if companyDetail == nil {
  712. br.Msg = "提交失败!"
  713. br.ErrMsg = "客户不存在,uid:" + strconv.Itoa(user.UserId)
  714. return
  715. }
  716. item := new(models.CygxArticleAsk)
  717. item.UserId = user.UserId
  718. item.ArticleId = req.ArticleId
  719. item.CompanyId = user.CompanyId
  720. item.CompanyName = companyDetail.CompanyName
  721. item.CreateTime = time.Now()
  722. item.Mobile = user.Mobile
  723. item.Email = user.Email
  724. item.Content = content
  725. _, err = models.AddArticleAsk(item)
  726. if err != nil {
  727. br.Msg = "提交失败"
  728. br.ErrMsg = "提交失败,Err:" + err.Error()
  729. return
  730. }
  731. companyItem, err := models.GetSellerDetailAllByCompanyId(user.CompanyId)
  732. if err != nil {
  733. br.Msg = "获取信息失败"
  734. br.ErrMsg = "获取所属销售信息失败,Err:" + err.Error()
  735. return
  736. }
  737. var mobile string
  738. if utils.RunMode == "release" {
  739. //mobile = utils.WxMsgTemplateIdAskMsgMobileAll + "," + companyItem.Mobile
  740. mobile = utils.WxMsgTemplateIdAskMsgMobileAll
  741. } else {
  742. mobile = utils.WxMsgTemplateIdAskMsgMobile
  743. }
  744. openIdList, err := models.GetWxOpenIdByMobileList(mobile)
  745. if err != nil {
  746. br.Msg = "提交失败"
  747. br.ErrMsg = "提交失败,Err:" + err.Error()
  748. return
  749. }
  750. detail, err := models.GetArticleDetailById(articleId)
  751. if err != nil {
  752. br.Msg = "获取信息失败"
  753. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  754. return
  755. }
  756. companyName := user.CompanyName + "-" + user.RealName + "(" + companyItem.SellerName + ")"
  757. go services.SendWxMsgWithAsk(companyName, time.Now().Format(utils.FormatDateTime), content, detail.Title, openIdList, req.ArticleId)
  758. br.Ret = 200
  759. br.Success = true
  760. br.Msg = "提交成功"
  761. }
  762. // @Title 下载PDF打水印
  763. // @Description 下载PDF打水印接口
  764. // @Param ArticleId query int true "报告ID"
  765. // @Success 200 {object} models.ArticleDetailFileLink
  766. // @router /pdfwatermark [get]
  767. func (this *ArticleController) Pdfwatermark() {
  768. br := new(models.BaseResponse).Init()
  769. defer func() {
  770. this.Data["json"] = br
  771. this.ServeJSON()
  772. }()
  773. user := this.User
  774. if user == nil {
  775. br.Msg = "请登录"
  776. br.ErrMsg = "请登录,用户信息为空"
  777. br.Ret = 408
  778. return
  779. }
  780. articleId, err := this.GetInt("ArticleId")
  781. if articleId <= 0 {
  782. br.Msg = "文章不存在"
  783. br.ErrMsg = "文章不存在,文章ID错误"
  784. return
  785. }
  786. detail := new(models.ArticleDetail)
  787. detail, err = models.GetArticleDetailById(articleId)
  788. if err != nil {
  789. br.Msg = "获取信息失败"
  790. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  791. return
  792. }
  793. fileLink := detail.FileLink
  794. if fileLink == "" {
  795. br.Msg = "下载失败"
  796. br.ErrMsg = "下载失败,报告链接不存在"
  797. return
  798. }
  799. mobile := user.Mobile
  800. if mobile == "" {
  801. mobile = user.Email
  802. }
  803. sliceLink := strings.Split(fileLink, "/")
  804. uploadDir := "static/pdf/"
  805. //判断文件夹是否存在,不存在则创建
  806. if !utils.FileIsExist(uploadDir) {
  807. err = os.MkdirAll(uploadDir, 0755)
  808. if err != nil {
  809. br.Msg = "下载失败"
  810. br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
  811. return
  812. }
  813. }
  814. var oldFile string
  815. var newFile string
  816. //获取PDF源文件名称
  817. pdfName := sliceLink[len(sliceLink)-1]
  818. pdfName = utils.MD5(pdfName) + ".pdf"
  819. oldFile = uploadDir + pdfName
  820. //判断PDF本地是否存在,不存在则保存到本地
  821. if !utils.FileIsExist(oldFile) {
  822. res, err := nhttp.Get(fileLink)
  823. if err != nil {
  824. br.Msg = "下载失败"
  825. br.ErrMsg = "获取源文件失败,Err:" + err.Error()
  826. return
  827. }
  828. defer res.Body.Close()
  829. // 获得get请求响应的reader对象
  830. reader := bufio.NewReaderSize(res.Body, 32*1024)
  831. file, err := os.Create(oldFile)
  832. if err != nil {
  833. br.Msg = "下载失败"
  834. br.ErrMsg = "保存源文件到本地失败,Err:" + err.Error()
  835. return
  836. }
  837. //获得文件的writer对象
  838. writer := bufio.NewWriter(file)
  839. written, _ := io.Copy(writer, reader)
  840. fmt.Printf("Total length: %d", written)
  841. }
  842. newFile = uploadDir + "new_" + pdfName
  843. onTop := true
  844. wm, err := pdfcpu.ParseTextWatermarkDetails(mobile, " op:.4, pos:c ,points:16 ", onTop, 1)
  845. if err != nil {
  846. br.Msg = "下载失败"
  847. br.ErrMsg = "生成水印文件失败,Err:" + err.Error()
  848. return
  849. }
  850. err = api.AddWatermarksFile(oldFile, newFile, nil, wm, nil)
  851. if err != nil {
  852. br.Msg = "下载失败"
  853. br.ErrMsg = "生成水印PDF失败,Err:" + err.Error()
  854. return
  855. }
  856. resp := new(models.ArticleDetailFileLink)
  857. randStr := utils.GetRandStringNoSpecialChar(28)
  858. fileName := randStr + ".pdf"
  859. savePath := uploadDir + time.Now().Format("200601/20060102/")
  860. savePath += fileName
  861. //上传到阿里云
  862. err = services.UploadFileToAliyun(fileName, newFile, savePath)
  863. if err != nil {
  864. br.Msg = "下载失败"
  865. br.ErrMsg = "文件上传失败,Err:" + err.Error()
  866. return
  867. }
  868. fileHost := "https://hzstatic.hzinsights.com/"
  869. resourceUrl := fileHost + savePath
  870. defer func() {
  871. os.Remove(newFile)
  872. }()
  873. resp.FileLink = resourceUrl
  874. br.Ret = 200
  875. br.Success = true
  876. br.Msg = "获取成功"
  877. br.Data = resp
  878. }
  879. // @Title 同步策略报告内容
  880. // @Description 同步策略报告内容接口
  881. // @Param ArticleIdMd5 query int true "报告ID"
  882. // @Success 200 {object} models.ArticleDetailResp
  883. // @router /look/listApi [get]
  884. func (this *ArticleCommonController) ListApi() {
  885. br := new(models.BaseResponse).Init()
  886. defer func() {
  887. this.Data["json"] = br
  888. this.ServeJSON()
  889. }()
  890. url := "https://vmp.hzinsights.com/v2api/articles/mp?take=20&skip=0&publish_status=1"
  891. url = ""
  892. method := "GET"
  893. client := &nhttp.Client{}
  894. req, err := nhttp.NewRequest(method, url, nil)
  895. if err != nil {
  896. fmt.Println(err)
  897. return
  898. }
  899. req.Header.Add("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag")
  900. res, err := client.Do(req)
  901. if err != nil {
  902. fmt.Println(err)
  903. return
  904. }
  905. defer res.Body.Close()
  906. body, err := ioutil.ReadAll(res.Body)
  907. if err != nil {
  908. fmt.Println(err)
  909. return
  910. }
  911. var pdfResult models.ArticleResultApi
  912. err = json.Unmarshal(body, &pdfResult)
  913. if err != nil {
  914. br.Msg = "获取失败"
  915. br.ErrMsg = "Unmarshal,Err:" + err.Error()
  916. return
  917. }
  918. exitMap := make(map[int]int)
  919. listMap, err := models.GetArticleApiMap()
  920. if err != nil {
  921. br.Msg = "获取失败"
  922. br.ErrMsg = "获取映射关系失败,Err:" + err.Error()
  923. return
  924. }
  925. //新旧分类 反向隐射
  926. for _, v := range listMap {
  927. exitMap[v.Id] = v.OldId
  928. }
  929. listData := pdfResult.Data
  930. var list []*models.Tactics2
  931. var listAuthor []*models.CygxArticleAuthor
  932. for _, v := range listData {
  933. if exitMap[v.SeriesId] > 0 {
  934. item := new(models.Tactics2)
  935. itemAuthor := new(models.CygxArticleAuthor)
  936. item.ArticleId = v.ArticleId
  937. item.Title = v.Title
  938. item.TitleEn = v.TitleEn
  939. if v.Frequency == "日度" {
  940. item.UpdateFrequency = "daily"
  941. } else if v.Frequency == "周度" {
  942. item.UpdateFrequency = "weekly"
  943. } else if v.Frequency == "月度" {
  944. item.UpdateFrequency = "monthly"
  945. } else if v.Frequency == "季度" {
  946. item.UpdateFrequency = "quarterly"
  947. } else if v.Frequency == "年度" {
  948. item.UpdateFrequency = "yearly"
  949. } else {
  950. item.UpdateFrequency = "unknow"
  951. }
  952. item.CreateDate = v.CreateDate
  953. item.PublishDate = v.PublishDate
  954. item.PublishStatus = v.PublishStatus
  955. item.Body = v.Content.Body
  956. item.Abstract = v.Content.Abstract
  957. item.CategoryName = v.Industry.Name
  958. item.CategoryId = exitMap[v.SeriesId]
  959. item.SubCategoryName = v.Series.Name
  960. list = append(list, item)
  961. itemAuthor.ArticleId = v.ArticleId
  962. itemAuthor.Name = v.Author.Name
  963. itemAuthor.Mobile = v.Author.PhoneNumber
  964. listAuthor = append(listAuthor, itemAuthor)
  965. }
  966. }
  967. //同步作者
  968. for _, v := range listAuthor {
  969. count, err := models.GetActivityAuthorCount(v.ArticleId, v.Mobile)
  970. if err != nil {
  971. fmt.Println("GetCount Err:", err.Error())
  972. return
  973. }
  974. if count == 0 {
  975. _, err := models.AddCygxActivityAuthor(v)
  976. if err != nil {
  977. fmt.Println("AddCygxActivityAuthor Err:", err.Error())
  978. return
  979. }
  980. }
  981. }
  982. fmt.Println("同步文章条数:", len(list))
  983. listCustomArticle, err := models.GetCustomArticleId() //手动归类的文章,不替换文章类型
  984. if err != nil {
  985. fmt.Println("GetTacticsList Err:", err.Error())
  986. return
  987. }
  988. listGetMatchTypeName, errMatch := models.GetMatchTypeNamenNotNull() //手动归类的文章,不替换文章类型
  989. if errMatch != nil {
  990. fmt.Println("GetTacticsList Err:", errMatch.Error())
  991. return
  992. }
  993. fmt.Println("list len:", len(list))
  994. summaryCategoryIds := "28,32,45,50,57,62,72,74,79,84,86,88,90,93,95,96" //纪要库的文章类型categoty_id
  995. listSummary := strings.Split(summaryCategoryIds, ",")
  996. noSummaryArticleIds := "3454,3456,3457,3459,2449,2450,2453,2454,2459,2530,2583,2663,2670,2699,2715,2732,2748,2759,2399,2356,2870,3173,2978,2826,3470" //非纪要库类型的文章ID
  997. listNoSummaryArticleIds := strings.Split(noSummaryArticleIds, ",")
  998. listPermission, errper := models.GetPermissionMappingCategoryID()
  999. if errper != nil {
  1000. fmt.Println("GetTacticsList Err:", errper.Error())
  1001. return
  1002. }
  1003. summaryMap := make(map[int]int)
  1004. for _, vSum := range listSummary {
  1005. vSumInt, _ := strconv.Atoi(vSum)
  1006. summaryMap[vSumInt] = 1
  1007. }
  1008. for k, v := range list {
  1009. //同步匹配类型
  1010. matchTypeName := ""
  1011. for _, vMatch := range listGetMatchTypeName {
  1012. if v.CategoryId == vMatch.CategoryId {
  1013. matchTypeName = vMatch.MatchTypeName
  1014. }
  1015. }
  1016. //是否属于纪要库的数据
  1017. if _, has := summaryMap[v.CategoryId]; has {
  1018. v.IsSummary = 1
  1019. }
  1020. //排除不属于纪要库类型的文章
  1021. for _, vArt := range listNoSummaryArticleIds {
  1022. vArtInt, _ := strconv.Atoi(vArt)
  1023. if v.ArticleId == vArtInt {
  1024. v.IsSummary = 0
  1025. }
  1026. }
  1027. for _, vPer := range listPermission {
  1028. if v.CategoryId == vPer.CategoryId {
  1029. v.IsReport = 1
  1030. }
  1031. }
  1032. if v.IsReport > 0 {
  1033. //是否属于策略 策略自动归类
  1034. //是否属于行业报告 行业报告自动归类
  1035. if v.CategoryId == 7 || v.CategoryId == 9 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 52 || v.CategoryId == 64 || v.CategoryId == 80 || v.CategoryId == 87 {
  1036. v.IsClass = 1
  1037. v.ReportType = 1 //是否属于行业报告
  1038. } else {
  1039. v.ReportType = 2 //是否属于产业报告
  1040. }
  1041. }
  1042. v.Department = "弘则权益研究"
  1043. fmt.Println(k, v.ArticleId)
  1044. hh, _ := time.ParseDuration("8h")
  1045. //pDate := publishDate.Add(hh)
  1046. v.PublishDate = v.PublishDate.Add(hh)
  1047. //判断是否已经存在
  1048. if v.ArticleId < 0 {
  1049. fmt.Println("AddCygxArticle Err:")
  1050. return
  1051. }
  1052. count, err := models.GetArticleCountById(v.ArticleId)
  1053. if err != nil && err.Error() != utils.ErrNoRow() {
  1054. fmt.Println("AddCygxArticle Err:", err.Error())
  1055. return
  1056. }
  1057. v.Body = strings.Replace(v.Body, "http://vmp.hzinsights.com", "https://vmp.hzinsights.com", -1)
  1058. expertNumStr, expertContentStr, interviewDateStr, fileLink, bodyReturn := services.BodyAnalysis2(v.Body)
  1059. if strings.Index(v.Body, "报告全文(") > 0 && strings.Index(v.Body, "PDF格式报告下载.pdf") > 0 {
  1060. v.Body = strings.Replace(v.Body, "报告全文(", "", -1)
  1061. v.Body = strings.Replace(v.Body, "PDF格式报告下载.pdf", "", -1)
  1062. v.Body = strings.Replace(v.Body, "):", "", -1)
  1063. }
  1064. var titleNew string
  1065. titleNew = v.Title
  1066. // 7资金流向 、11大类资产 、51每日复盘 、80医药周报、9估值研究
  1067. if v.CategoryId == 7 || v.CategoryId == 11 || v.CategoryId == 51 || v.CategoryId == 9 {
  1068. if v.UpdateFrequency == "daily" {
  1069. var daystr string
  1070. daystr = strconv.Itoa(v.PublishDate.Day())
  1071. if len(daystr) == 1 {
  1072. daystr = "0" + daystr
  1073. }
  1074. titleNew = v.Title + "(" + strconv.Itoa(v.PublishDate.Year())[2:len(strconv.Itoa(v.PublishDate.Year()))-0] + v.PublishDate.Format("01") + daystr + ")"
  1075. } else if v.UpdateFrequency == "weekly" {
  1076. titleNew = v.Title + utils.WeekByDate(v.PublishDate)
  1077. }
  1078. }
  1079. if v.CategoryId == 80 {
  1080. titleNew = v.Title + utils.WeekByDate(v.PublishDate)
  1081. }
  1082. if count > 0 {
  1083. fmt.Println(k, v.ArticleId, "edit")
  1084. var isCustom bool
  1085. bodyText, _ := services.GetReportContentTextSub(v.Body)
  1086. updateParams := make(map[string]interface{})
  1087. //updateParams["Title"] = v.Title
  1088. updateParams["Title"] = titleNew
  1089. updateParams["TitleEn"] = v.TitleEn
  1090. updateParams["UpdateFrequency"] = v.UpdateFrequency
  1091. updateParams["CreateDate"] = v.CreateDate
  1092. updateParams["PublishDate"] = v.PublishDate
  1093. //updateParams["Body"] = html.EscapeString(v.Body)
  1094. updateParams["Body"] = html.EscapeString(bodyReturn)
  1095. updateParams["BodyText"] = bodyText
  1096. updateParams["Abstract"] = html.EscapeString(v.Abstract)
  1097. updateParams["CategoryName"] = v.CategoryName
  1098. for _, vCustom := range listCustomArticle {
  1099. if v.ArticleId == vCustom.ArticleId {
  1100. fmt.Println("手动归类的文章:" + strconv.Itoa(v.ArticleId))
  1101. isCustom = true
  1102. }
  1103. }
  1104. if isCustom == false {
  1105. updateParams["CategoryId"] = v.CategoryId
  1106. updateParams["MatchTypeName"] = matchTypeName
  1107. updateParams["IsSummary"] = v.IsSummary
  1108. updateParams["IsReport"] = v.IsReport
  1109. updateParams["ReportType"] = v.ReportType
  1110. updateParams["SubCategoryName"] = v.SubCategoryName
  1111. }
  1112. //updateParams["CategoryId"] = v.CategoryId
  1113. updateParams["PublishStatus"] = v.PublishStatus
  1114. updateParams["ExpertBackground"] = expertContentStr
  1115. updateParams["ExpertNumber"] = expertNumStr
  1116. updateParams["InterviewDate"] = interviewDateStr
  1117. //updateParams["IsClass"] = v.IsClass
  1118. if v.Department != "弘则权益研究" {
  1119. v.Department = "弘则权益研究"
  1120. }
  1121. updateParams["Department"] = v.Department
  1122. updateParams["FileLink"] = fileLink
  1123. whereParam := map[string]interface{}{"article_id": v.ArticleId}
  1124. err = models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
  1125. if err != nil {
  1126. fmt.Println("UpdateByExpr Err:" + err.Error())
  1127. }
  1128. } else {
  1129. fmt.Println(k, v.ArticleId, "add")
  1130. item := new(models.CygxArticle)
  1131. articleIdInt := v.ArticleId
  1132. item.ArticleId = articleIdInt
  1133. //item.Title = v.Title
  1134. item.Title = titleNew
  1135. item.TitleEn = v.TitleEn
  1136. item.UpdateFrequency = v.UpdateFrequency
  1137. item.CreateDate = v.CreateDate
  1138. item.PublishDate = v.PublishDate.Format(utils.FormatDateTime)
  1139. //item.Body = html.EscapeString(v.Body)
  1140. item.Body = html.EscapeString(bodyReturn)
  1141. item.Abstract = html.EscapeString(v.Abstract)
  1142. item.CategoryName = v.CategoryName
  1143. item.SubCategoryName = v.SubCategoryName
  1144. item.CategoryId = v.CategoryId
  1145. item.PublishStatus = v.PublishStatus
  1146. item.ExpertBackground = expertContentStr
  1147. item.ExpertNumber = expertNumStr
  1148. item.InterviewDate = interviewDateStr
  1149. item.Department = v.Department
  1150. item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdInt))
  1151. item.IsClass = v.IsClass
  1152. item.IsSummary = v.IsSummary
  1153. item.IsReport = v.IsReport
  1154. item.ReportType = v.ReportType
  1155. item.FileLink = fileLink
  1156. item.MatchTypeName = matchTypeName
  1157. _, err = models.AddCygxArticles(item)
  1158. if err != nil {
  1159. fmt.Println("AddCygxArticle Err:", err.Error())
  1160. return
  1161. }
  1162. }
  1163. }
  1164. br.Ret = 200
  1165. br.Success = true
  1166. br.Msg = "获取成功"
  1167. br.Data = string(body)
  1168. }
  1169. // @Title 同步参会记录
  1170. // @Description 获取报告详情接口
  1171. // @Param ArticleIdMd5 query int true "报告ID"
  1172. // @Success 200 {object} models.ArticleDetailResp
  1173. // @router /look/detaisl [get]
  1174. func (this *ArticleCommonController) Detaisl() {
  1175. br := new(models.BaseResponse).Init()
  1176. defer func() {
  1177. this.Data["json"] = br
  1178. this.ServeJSON()
  1179. }()
  1180. var condition string
  1181. fmt.Println(condition)
  1182. //
  1183. //list, err := models.GetOfflineMeetingDetailList()
  1184. //if err != nil {
  1185. // br.Msg = "获取失败"
  1186. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1187. // return
  1188. //}
  1189. //
  1190. //for _, v := range list {
  1191. // item := new(models.CygxActivityMeetDetailLog)
  1192. // item.ActivityId = v.ActivityId
  1193. // item.RealName = v.RealName
  1194. // item.Mobile = v.Mobile
  1195. // item.CompanyName = v.CompanyName
  1196. // item.CompanyId = v.CompanyId
  1197. // item.CreateTime = v.CreateTime
  1198. // newId, err := models.AddCygxActivityMeetDetailLog(item)
  1199. // if err != nil {
  1200. // br.Msg = "同步失败"
  1201. // br.ErrMsg = "新增优化建议失败,Err:" + err.Error()
  1202. // return
  1203. // }
  1204. // fmt.Println(newId)
  1205. //}
  1206. //
  1207. //list, err := models.GetActivityMeetDetailLog()
  1208. //if err != nil {
  1209. // br.Msg = "获取失败"
  1210. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1211. // return
  1212. //}
  1213. //fmt.Println(len(list))
  1214. //for _, v := range list {
  1215. // condition = ` AND company_name = '` + v.CompanyName + `' `
  1216. // total, err := models.GetActivityMeetDetailLogCount(condition)
  1217. // if err != nil {
  1218. // br.Msg = "获取失败"
  1219. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1220. // return
  1221. // }
  1222. // fmt.Println(v.CompanyName, total)
  1223. // err = models.UpdateActivityMeetDetailLog(v.CompanyName, total)
  1224. // if err != nil {
  1225. // br.Msg = "获取失败"
  1226. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1227. // return
  1228. // }
  1229. //}
  1230. //
  1231. //list1, err := models.ListActivityMeetDetailLogByUser()
  1232. //
  1233. //if err != nil {
  1234. // br.Msg = "获取失败"
  1235. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1236. // return
  1237. //}
  1238. //for _, v := range list1 {
  1239. // fmt.Println(v.ActivityName, v.ActivityId)
  1240. //
  1241. // list, err := models.GetActivityMeetDetailLogByMobile(v.ActivityId)
  1242. // if err != nil {
  1243. // br.Msg = "获取失败"
  1244. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1245. // return
  1246. // }
  1247. // for _, v := range list {
  1248. // //condition = ` AND mobile = '` + v.Mobile + `' `
  1249. // //total, err := models.GetActivityMeetDetailLogCount(condition)
  1250. // //if err != nil {
  1251. // // br.Msg = "获取失败"
  1252. // // br.ErrMsg = "获取失败,Err:" + err.Error()
  1253. // // return
  1254. // //}
  1255. // //fmt.Println(v.Mobile, total)
  1256. // //err = models.UpdateActivityMeetDetailLogByUser(v.Mobile, total)
  1257. // //if err != nil {
  1258. // // br.Msg = "获取失败"
  1259. // // br.ErrMsg = "获取失败,Err:" + err.Error()
  1260. // // return
  1261. // //}
  1262. // //
  1263. // err = models.DeleteActivityMeetDetailLogByUser(v)
  1264. // if err != nil {
  1265. // fmt.Println(err)
  1266. // }
  1267. // }
  1268. //
  1269. //}
  1270. //list, err := models.GetActivityMeetDetailLogByMobile()
  1271. //if err != nil {
  1272. // br.Msg = "获取失败"
  1273. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1274. // return
  1275. //}
  1276. //for _, v := range list {
  1277. // condition = ` AND mobile = '` + v.Mobile + `' `
  1278. // total, err := models.GetActivityMeetDetailLogCount(condition)
  1279. // if err != nil {
  1280. // br.Msg = "获取失败"
  1281. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1282. // return
  1283. // }
  1284. // fmt.Println(v.Mobile, total)
  1285. // err = models.UpdateActivityMeetDetailLogByUser(v.Mobile, total)
  1286. // if err != nil {
  1287. // br.Msg = "获取失败"
  1288. // br.ErrMsg = "获取失败,Err:" + err.Error()
  1289. // return
  1290. // }
  1291. //
  1292. //}
  1293. resp := new(models.ArticleDetailResp)
  1294. br.Ret = 200
  1295. br.Success = true
  1296. br.Msg = "获取成功"
  1297. br.Data = resp
  1298. }
  1299. // @Title 同步策略报告分类
  1300. // @Description 同步策略报告内容接口
  1301. // @Param ArticleIdMd5 query int true "报告ID"
  1302. // @Success 200 {object} models.ArticleDetailResp
  1303. // @router /look/industry [get]
  1304. func (this *ArticleCommonController) Industry() {
  1305. br := new(models.BaseResponse).Init()
  1306. defer func() {
  1307. this.Data["json"] = br
  1308. this.ServeJSON()
  1309. }()
  1310. url := "https://vmp.hzinsights.com/v2api/articles/industry"
  1311. method := "GET"
  1312. client := &nhttp.Client{}
  1313. req, err := nhttp.NewRequest(method, url, nil)
  1314. if err != nil {
  1315. fmt.Println(err)
  1316. return
  1317. }
  1318. req.Header.Add("Authorization", "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag")
  1319. res, err := client.Do(req)
  1320. if err != nil {
  1321. fmt.Println(err)
  1322. return
  1323. }
  1324. defer res.Body.Close()
  1325. body, err := ioutil.ReadAll(res.Body)
  1326. if err != nil {
  1327. fmt.Println(err)
  1328. return
  1329. }
  1330. var pdfResult models.ArticleIndustryApi
  1331. err = json.Unmarshal(body, &pdfResult)
  1332. if err != nil {
  1333. br.Msg = "获取失败"
  1334. br.ErrMsg = "Unmarshal,Err:" + err.Error()
  1335. return
  1336. }
  1337. listData := pdfResult.Data
  1338. //var list []*models.Tactics2
  1339. for _, v := range listData {
  1340. item := new(models.Tactics2)
  1341. for _, v2 := range v.Series {
  1342. fmt.Println(v2.Name)
  1343. item.Body = v2.Name
  1344. //fmt.Println(v.Name, "+", v2.Name, "+", v2.Id)
  1345. //fmt.Println(v.Name, "+", v2.Name, "+", v2.Id)
  1346. //fmt.Println(v.Name, "+", v2.Name, "+", v2.Id)
  1347. }
  1348. //list = append(list, item)
  1349. }
  1350. br.Ret = 200
  1351. br.Success = true
  1352. br.Msg = "获取成功"
  1353. br.Data = string(body)
  1354. }