theatre_analysis.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. var name = '',mediaName='', theatreTime=0, season='';
  2. function search(){
  3. getProgramAnalysisList(1);
  4. getRankList();
  5. }
  6. /**
  7. * 获取与验证对标对象
  8. */
  9. function itemCheck(o){
  10. var item = $("input[name='item']:checked"), ids = [];
  11. if(item.length > 3){
  12. alert("最多选择三部电视剧");
  13. $(o).attr("checked", false);
  14. $.checkbox();
  15. return false;
  16. }
  17. var errorMsg = "";
  18. item.each(function(){
  19. var id = $(this).attr('data-tvid');
  20. if (id.isEmpty() || id == 0){
  21. errorMsg = "当前剧在剧库中不存在";
  22. return false;
  23. }
  24. ids.push(id);
  25. });
  26. if (!errorMsg.isEmpty()){
  27. alert(errorMsg);
  28. $(o).attr("checked", false);
  29. $.checkbox();
  30. return false;
  31. }
  32. if((new Set(ids)).size != ids.length){
  33. alert("已存在,请选择不同的电视剧");
  34. $(o).attr("checked", false);
  35. $.checkbox();
  36. return false;
  37. }
  38. }
  39. /**
  40. * 打开对标页
  41. * @returns {Boolean}
  42. */
  43. function setBenchmark(){
  44. var item = $("input[name='item']:checked"), ids = [];
  45. if (item.length <= 0){
  46. alert("请至少选择一部电视剧");
  47. return false;
  48. }
  49. if (item.length > 3){
  50. alert("最多选择三部电视剧");
  51. return false;
  52. }
  53. var errorMsg = "";
  54. item.each(function(index){
  55. var id = $(this).attr('data-tvid');
  56. if (id.isEmpty() || id == 0){
  57. errorMsg = "第 " + (index+1) + " 项在剧库中不存在";
  58. return false;
  59. }
  60. ids.push(id);
  61. });
  62. if (!errorMsg.isEmpty()){
  63. alert(errorMsg);
  64. return false;
  65. }
  66. if((new Set(ids)).size != ids.length){
  67. alert("已存在,请选择不同的电视剧");
  68. return false;
  69. }
  70. window.open("benchmarking.do?ids="+encodeURIComponent(ids.join(",")),"new");
  71. }
  72. /**
  73. * 切换时间
  74. */
  75. function changeTab(day){
  76. var end_date = '', start_date = '';
  77. if(day > 0){
  78. end_date = new Date().addDate(-1).Format("yyyy-MM-dd"),
  79. start_date = new Date(end_date).addDate(-day).Format("yyyy-MM-dd");
  80. $('#start_time').val(start_date);
  81. $('#end_time').val(end_date);
  82. }else{
  83. $('#start_time').val('');
  84. $('#end_time').val('');
  85. }
  86. $(".text").input();
  87. search();
  88. }
  89. /**
  90. * 切换节目
  91. * @param program
  92. */
  93. function changeProgram(program){
  94. getPlacementDetail();
  95. }
  96. /**
  97. * 搜索后,点击一个后的所有图标展示
  98. */
  99. function getPlacementDetail(){
  100. changeTagName();
  101. getPlacementDetailList(1);
  102. // 电视剧收视分析
  103. getTvTrendChart();
  104. // 电视剧收视区域分布
  105. getZoneNumChart();
  106. // 电视剧产品投放分析
  107. getProductChart();
  108. // 电视剧题材分析
  109. getThemeChart();
  110. }
  111. function getProgramAnalysisList(page){
  112. page = page || 1;
  113. var pageSize = "10", data = {
  114. "name": $("#keyword").val(),
  115. "mediaName":$("#mediaName").val(),
  116. "firstTheme":$("#firstTheme").val(),
  117. "secondTheme":$("#secondTheme").val(),
  118. "theatreTime":$("#theatreTime").val(),
  119. "channelSystem":$("#mediaRank").val(),
  120. "startDate": $("#start_time").val(),
  121. "endDate": $("#end_time").val(),
  122. "pageNo": page,
  123. "pageSize": pageSize
  124. }, html = "";
  125. $("#program_analysis_page, #program_analysis_list").empty();
  126. ajax("ajax_list.do",data,function(res){
  127. if(res.code == 1 && res.data.records.length > 0){
  128. $.each(res.data.records, function(index, item){
  129. html += "<tr data-name='"+item.name+"' data-medianame='"+item.mediaName+"' data-theatretime='"+item.theatreTime+"' data-season='"+(item.season)+"'>"+
  130. "<td>"+$.orderNum(page,pageSize,index)+"</td>"+
  131. "<td>"+item.name+"</td>"+
  132. "<td>"+item.mediaName+"</td>"+
  133. "<td>"+item.firstTheme+"</td>"+
  134. "<td>"+item.secondTheme+"</td>"+
  135. "<td>"+item.theatreTimeName+"</td>"+
  136. "<td>"+item.channelSystem+"</td>"+
  137. "<td>"+item.season+"</td>"+
  138. "<td>"+item.tvNum+"</td>"+
  139. "<td>"+((item.rating29==undefined)?"":item.rating29)+"</td>"+
  140. "<td>"+((item.dk29==undefined)?"":item.dk29)+"</td>"+
  141. "<td>"+item.mediaRating29+"</td>"+
  142. "<td>"+item.mediaDk29+"</td>"+
  143. "<td>"+item.effect+"</td>"+
  144. "<td><input type='checkbox' class='checkbox {click:itemCheck}' name='item' data-tvid='"+item.tvId+"' value='"+item.name+"' /><label></label></td>"+
  145. "</tr>";
  146. });
  147. $("#program_analysis_list").html(html);
  148. $.checkbox();
  149. $.radio();
  150. var newpage = new createPage(res.data.total,page,pageSize,3,"getProgramAnalysisList");
  151. $("#program_analysis_page").html(newpage.pageHtml);
  152. $('#program_analysis_count').html(res.data.total);
  153. $(".table").hoverTable(true, true);
  154. /**
  155. * 点击事件
  156. */
  157. $("#program_analysis_list>tr>td:not(td:last-child)").on("click",function(){
  158. name = $(this).closest("tr").data("name");
  159. mediaName = $(this).closest("tr").data("medianame");
  160. theatreTime = $(this).closest("tr").data("theatretime");
  161. season = $(this).closest("tr").data("season");
  162. $("#name_1").val(name);
  163. $("#mediaName_1").val(mediaName);
  164. $("#theatreTime_1").val(theatreTime);
  165. $("#season_1").val(season);
  166. $("#start_time_1").val($("#start_time").val());
  167. $("#end_time_1").val($("#end_time").val());
  168. getPlacementDetail();
  169. $(this).closest("tr").addClass("active").siblings().removeClass("active");
  170. // 电视剧及卫视剧场排名 高亮
  171. activeTvRank(name, mediaName);
  172. });
  173. $("#program_analysis_list>tr:eq(0)>td:eq(1)").click();
  174. }else{
  175. $("#placement_detail_list").info("暂无数据。");
  176. $('#placement_detail_count').html(0);
  177. $("#trend_bar, #people_bar").info("暂无数据。", true);
  178. $("#tvNum_bar, #mediaNum_bar").info("暂无数据。", true);
  179. $("#product_time_pie").info("暂无数据。", true);
  180. $("#product_freq_pie").info("暂无数据。", true);
  181. $("#tvTheme_pie").info("暂无数据。", true);
  182. $("#mediaTheme_pie").info("暂无数据。", true);
  183. $('#program_analysis_count').html(0);
  184. name = '';
  185. mediaName = '';
  186. changeTagName();
  187. }
  188. });
  189. }
  190. /**
  191. * 电视剧及卫视剧场排名 高亮
  192. * @param name 剧名
  193. * @param mediaName 媒体名
  194. */
  195. function activeTvRank(name, mediaName) {
  196. // 剧场电视剧收视排名
  197. $("#rank_char_1").find("tr").each(function(){
  198. var temp_name = $(this).attr('data-name');
  199. var temp_mediaName = $(this).attr('data-mediaName');
  200. $(this).removeClass("active");
  201. if (name == temp_name && mediaName == temp_mediaName){
  202. $(this).addClass("active");
  203. }
  204. });
  205. $("#rank_char_2").find("tr").each(function(){
  206. var temp_mediaName = $(this).attr('data-mediaName');
  207. $(this).removeClass("active");
  208. if (mediaName == temp_mediaName){
  209. $(this).addClass("active");
  210. }
  211. });
  212. }
  213. function getPlacementDetailList(page){
  214. page = page || 1;
  215. var pageSize = "10",beginDate = $("#start_time").val(),
  216. endDate = $("#end_time").val(),data = {
  217. "pageNo": page,
  218. "pageSize": pageSize,
  219. "name":name,
  220. "mediaName" : mediaName,
  221. "theatreTime": theatreTime,
  222. "season": season,
  223. "startDate": beginDate,
  224. "endDate": endDate
  225. }, html = "";
  226. $("#placement_detail_page, #placement_detail_list").empty();
  227. ajax("ajax_detail_list.do",data,function(res){
  228. if(res.code == 1 && res.data.records.length > 0){
  229. $.each(res.data.records, function(index, item){
  230. html += "<tr>"+
  231. "<td>"+$.orderNum(page,pageSize,index)+"</td>"+
  232. "<td>"+item.name+"</td>"+
  233. "<td>"+item.mediaName+"</td>"+
  234. "<td>"+item.firstTheme+"</td>"+
  235. "<td>"+item.secondTheme+"</td>"+
  236. "<td>"+item.mediaNum+"</td>"+
  237. "<td>"+item.showDate+"</td>"+
  238. "<td>"+item.showTime+"</td>"+
  239. "<td>"+
  240. ((item.productName==undefined)?"":
  241. (ztgg_analysis == 1 ? '<a class="blue" href="'+ _PUBLIC_ +'special_analysis/index.do?type='+item.type+'&keyword='+item.productName+'">'+item.productName+'</a>'
  242. : '<a class="blue" href="javascript:alert(\'您暂无权限,请联系管理员。\');">'+item.productName+'</a>' ) )+
  243. "</td>"+
  244. "<td>"+item.showDuration +"</td>"+
  245. "<td>"+((item.jinxian==undefined)?"":item.jinxian)+"</td>"+
  246. "<td>"+((item.rating29==undefined)?"":item.rating29)+"</td>"+
  247. "<td>"+((item.dk29==undefined)?"":item.dk29)+"</td>"+
  248. "<td>"+((item.rating51==undefined)?"":item.rating51) +"</td>"+
  249. "<td>"+((item.dk51==undefined)?"":item.dk51)+"</td>";
  250. html += "</tr>";
  251. });
  252. $("#placement_detail_list").html(html);
  253. $(".table").hoverTable(true, true);
  254. var newpage = new createPage(res.data.total,page,pageSize,3,"getPlacementDetailList");
  255. $("#placement_detail_page").html(newpage.pageHtml);
  256. $('#placement_detail_count').html(res.data.total);
  257. /**
  258. * 点击事件
  259. */
  260. $(".table").hoverTable(true, true);
  261. }else{
  262. $("#placement_detail_list").info("暂无数据。");
  263. $('#placement_detail_count').html(0);
  264. }
  265. });
  266. }
  267. placementDetailPageGo = getPlacementDetailList;
  268. /**
  269. * 电视剧收视分析
  270. */
  271. function getTvTrendChart(){
  272. var data = {
  273. "name" : name,
  274. "mediaName": mediaName,
  275. "startDate": $("#start_time").val(),
  276. "endDate": $("#end_time").val(),
  277. "theatreTime" : theatreTime
  278. };
  279. ajax("ajax_tv_ratio.do",data,function(res){
  280. if(res.code == 1 && res.data.trendVOS.length > 0){
  281. var xdata = [],ydata = [],platforms = [],html = "";
  282. $.each(res.data.trendVOS, function(index, item){
  283. xdata.push(item.showDate);ydata.push(item.ratio);
  284. });
  285. trendBar('收视率','收视趋势分析',xdata,ydata,'trend_bar');
  286. xdata = [],ydata = [];
  287. $.each(res.data.peopleVOS, function(index, item){
  288. xdata.push(item.type);ydata.push(item.ratio);
  289. });
  290. trendBar('比例%','人群构成',xdata,ydata,'people_bar');
  291. }else{
  292. $("#trend_bar").info("暂无数据。",true);
  293. $("#people_bar").html('');
  294. }
  295. },false);
  296. }
  297. /**
  298. * 电视剧收视区域分布
  299. */
  300. function getZoneNumChart(){
  301. var data = {
  302. "name" : name,
  303. "mediaName": mediaName,
  304. "startDate": $("#start_time").val(),
  305. "endDate": $("#end_time").val(),
  306. "theatreTime" : theatreTime
  307. };
  308. ajax("ajax_tv_zone.do",data,function(res){
  309. if(res.code == 1 && res.data.tvNum.length > 0){
  310. var xdata = [],ydata = [],platforms = [],html = "";
  311. $.each(res.data.tvNum, function(index, item){
  312. xdata.push(item.province);ydata.push(item.num);
  313. });
  314. trendBar('触达千人','触达千人',xdata,ydata,'tvNum_bar');
  315. xdata = [],ydata = [];
  316. $.each(res.data.mediaNum, function(index, item){
  317. xdata.push(item.province);ydata.push(item.num);
  318. });
  319. trendBar('触达千人','平均触达千人',xdata,ydata,'mediaNum_bar');
  320. }else{
  321. $("#tvNum_bar").info("暂无数据。",true);
  322. $("#mediaNum_bar").html('');
  323. }
  324. },false);
  325. }
  326. /**
  327. * 电视剧产品投放分析
  328. */
  329. function getProductChart(){
  330. var data = {
  331. "name" : name,
  332. "mediaName": mediaName,
  333. "startDate": $("#start_time").val(),
  334. "endDate": $("#end_time").val(),
  335. "theatreTime" : theatreTime
  336. };
  337. ajax("ajax_tv_product.do",data,function(res){
  338. if(res.code == 1 && res.data.length > 0){
  339. var legend= [], series = [],xdata = [],ydata = [];
  340. var xOther = 0, yOther = 0;
  341. data1 = res.data.sort(function(a,b){
  342. return b.duration-a.duration;
  343. });
  344. $.each(data1, function(index, item){
  345. if (index >= 10){
  346. yOther += item.duration;
  347. return true;
  348. }
  349. legend.push(item.name);
  350. // 时长
  351. var lv2 = {
  352. value: item.duration,
  353. name : item.name
  354. };
  355. ydata.push(lv2);
  356. });
  357. data2 = res.data.sort(function(a,b){
  358. return b.total-a.total;
  359. });
  360. $.each(data2, function(index, item){
  361. if (index >= 10){
  362. xOther += item.total;
  363. return true;
  364. }
  365. legend.push(item.name);
  366. // 频次
  367. var lv1 = {
  368. value: item.total,
  369. name : item.name
  370. };
  371. xdata.push(lv1);
  372. });
  373. // 其它
  374. if (xOther > 0){
  375. var temp = {
  376. value: xOther,
  377. name : '其它'
  378. };
  379. xdata.push(temp);
  380. }
  381. if (yOther > 0){
  382. var temp = {
  383. value: yOther,
  384. name : '其它'
  385. };
  386. ydata.push(temp);
  387. }
  388. drawPie("product_time_pie",ydata, "时长分布");
  389. drawPie("product_freq_pie",xdata, "频次分布");
  390. }else{
  391. $("#product_time_pie").info("暂无数据。",true);
  392. $("#product_freq_pie").info("暂无数据。",true);
  393. }
  394. },false);
  395. }
  396. /**
  397. * 电视剧题材分析
  398. */
  399. function getThemeChart(){
  400. var data = {
  401. "name" : name,
  402. "mediaName": mediaName,
  403. "startDate": $("#start_time").val(),
  404. "endDate": $("#end_time").val(),
  405. "theatreTime" : theatreTime
  406. };
  407. ajax("ajax_tv_theme.do",data,function(res){
  408. if(res.code == 1 && res.data.length > 0){
  409. var legend= [], series = [],xdata = [],ydata = [],zdata = [],html = "", data1=[];
  410. var xOther = 0;
  411. avg = res.data[res.data.length - 1];
  412. // 去掉平均值后在排序
  413. $.each(res.data, function(index, item){
  414. if (index < res.data.length - 1) {
  415. data1.push(item);
  416. }
  417. });
  418. data1 = data1.sort(function(a,b){
  419. return b.total-a.total;
  420. });
  421. $.each(data1, function(index, item){
  422. legend.push(item.firstTheme);
  423. if (index < 10) {
  424. var lv1 = {
  425. value: item.total,
  426. name : item.firstTheme
  427. };
  428. xdata.push(lv1);
  429. }
  430. if (index >= 10){
  431. xOther += item.total;
  432. return true;
  433. }
  434. });
  435. data1 = data1.sort(function(a,b){
  436. return b.ratio-a.ratio;
  437. });
  438. $.each(data1, function(index, item){
  439. if (index < res.data.length - 1) {
  440. ydata.push(item.firstTheme);
  441. zdata.push(item.ratio);
  442. }
  443. });
  444. ydata.push(avg.firstTheme);
  445. zdata.push(avg.ratio);
  446. // 其它
  447. if (xOther > 0){
  448. var temp = {
  449. value: xOther,
  450. name : '其它'
  451. };
  452. xdata.push(temp);
  453. }
  454. drawPie("tvTheme_pie",xdata,"体裁");
  455. trendBar('收视率',"题材收视",ydata, zdata,'mediaTheme_pie');
  456. }else{
  457. $("#tv_group_chart").info("暂无数据。",true);
  458. $("#net_group_chart").info("暂无数据。",true);
  459. }
  460. },false);
  461. }
  462. /**
  463. * 电视剧及卫视剧场排名
  464. */
  465. function getRankList(){
  466. var data = {
  467. "startDate": $("#start_time").val(),
  468. "theatreTime":$("#theatreTime").val(),
  469. "endDate": $("#end_time").val()
  470. },html="";
  471. ajax("ajax_topList.do",data,function(res){
  472. var colors = [];
  473. if(res.code == 1 && res.data){
  474. if(res.data.tv && res.data.tv.length > 0){
  475. var list1 = res.data.tv;
  476. $.each(list1, function(index, item){
  477. html += "<tr class='' data-name='"+item.name+"' data-mediaName='"+item.mediaName+"'>"+
  478. "<td>"+(index + 1)+"</td>"+
  479. "<td>"+item.name+"</td>"+
  480. "<td>"+item.mediaName+"</td>"+
  481. "<td>"+item.firstTheme+"</td>"+
  482. "<td>"+item.mediaNum+"</td>"+
  483. "<td>"+item.rating29+"</td>"+
  484. "<td>"+item.dk29+"</td>"+
  485. "</tr>";
  486. });
  487. $("#rank_char_1").html(html);
  488. }else{
  489. $("#rank_char_1").info("暂无数据。");
  490. }
  491. var colors2 = [];
  492. if(res.data.media && res.data.media.length > 0){
  493. var list1 = res.data.media;
  494. html = "";
  495. $.each(list1, function(index, item){
  496. html += "<tr class='' data-mediaName='"+item.mediaName+"'>"+
  497. "<td>"+(index + 1)+"</td>"+
  498. "<td>"+item.mediaName+"</td>"+
  499. "<td>"+item.mediaRank+"</td>"+
  500. "<td>"+item.mediaNum+"</td>"+
  501. "<td>"+item.rating29+"</td>"+
  502. "<td>"+item.dk29+"</td>"+
  503. "</tr>";
  504. });
  505. $("#rank_char_2").html(html);
  506. }else{
  507. $("#rank_char_2").info("暂无数据。");
  508. }
  509. // 电视剧及卫视剧场排名 高亮
  510. activeTvRank(name, mediaName);
  511. }else{
  512. $("#rank_char_1, #rank_char_2").info("暂无数据。");
  513. }
  514. },false);
  515. }
  516. function changeTagName(){
  517. $("span[name='program_tag']").html("《" + name + "》");
  518. $("span[name='type_tag']").html(mediaName);
  519. $("span[name='media_tag']").html(mediaName);
  520. $("span[name='group_title1']").html("广告投放时长分布");
  521. $("span[name='group_title2']").html("广告投放频次分布");
  522. $("span[name='net_title1']").html("电视剧体裁结构");
  523. $("span[name='net_title2']").html("电视剧体裁收视");
  524. }