eventLog.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. /**
  2. * admin/eventLog
  3. */
  4. var mcare_admin_eventLog = function(){
  5. //상속
  6. mcare_admin.call(this);
  7. var self = this;
  8. //변수
  9. var $search = $("#search"),
  10. $endDate = $("#endDate"),
  11. $strDate = $("#strDate"),
  12. $selectEvent = $("#select-event"),
  13. $selectOption = $("#select-option"),
  14. $chart = $("#chart"),
  15. $legend = $("#chart_legend"),
  16. $grid = $("#grid"),
  17. $crudServiceBaseUrl = contextPath + "/admin/stats";
  18. var aggDt = [],
  19. welcomeCnt = [],
  20. welcomeColor = "",
  21. inCnt = [],
  22. inColor = "",
  23. outCnt = [],
  24. outColor = "",
  25. goodByeCnt = [],
  26. goodByeColor = "",
  27. unknownCnt = [],
  28. unknownColor = "";
  29. this.searchFlag = false;
  30. var getSearchFlag = function(){
  31. return this.searchFlag;
  32. };
  33. var setSearchFlag = function( flag ){
  34. this.searchFlag = flag;
  35. };
  36. /**
  37. * 초기화
  38. */
  39. this.init = function(){
  40. initDatePicker();
  41. initDropDownList();
  42. initGrid();
  43. //initChart();
  44. addEvent();
  45. };
  46. /**
  47. * 이벤트 등록
  48. */
  49. var addEvent = function(){
  50. // 검색 이벤트
  51. $search.on( "click",function(e){
  52. //mcare_admin
  53. dataSource.read();
  54. });
  55. };
  56. /**
  57. * datapicker 초기화
  58. */
  59. var initDatePicker = function(){
  60. //mcare_admin
  61. self.datePicker( $endDate, $strDate, $selectOption );
  62. };
  63. /**
  64. * 검색조건 dropdown 초기화
  65. */
  66. var initDropDownList = function(){
  67. // mcare_admin
  68. self.dropDownList( $selectOption );
  69. self.dropDownList( $selectEvent,{} );
  70. };
  71. // 데이타소스
  72. var pieData = {};
  73. /**
  74. * 데이터소스 설정
  75. */
  76. var setDataSource = function(){
  77. var dataSource = new kendo.data.DataSource({
  78. transport: {
  79. read: {
  80. url: $crudServiceBaseUrl + "/getEventLogList.json",
  81. method: "post",
  82. dataType: "json",
  83. contentType: "application/json"
  84. },
  85. parameterMap: getParameterMap
  86. },
  87. schema: {
  88. data : getSchemaData
  89. }
  90. });
  91. /**
  92. * 데이터소스 파라미터맵
  93. * @private
  94. */
  95. function getParameterMap( options, operation ){
  96. if( $selectEvent.val() !== "" ){
  97. setSearchFlag(true);
  98. } else {
  99. setSearchFlag(false);
  100. }
  101. var param = $.extend(true, {}, options, {
  102. strDate : new Date( self.getStartDatePickerValue() ).setHours(0, 0, 0, 0),
  103. endDate : new Date( +self.getEndDatePickerValue() ).setHours(0, 0, 0, 0),
  104. searchEvent : $selectEvent.val()
  105. }, null);
  106. return self.util.stringifyJson( param );
  107. };
  108. /**
  109. * 데이터소스 스키마설정
  110. * @private
  111. */
  112. function getSchemaData(e){
  113. if( e.msg !== undefined ){
  114. alert(e.msg);
  115. return [];
  116. }
  117. var aggEventLogList = e.aggEventLogList;
  118. var accessDateArr = aggDt = new Array(),
  119. welcomeCntArr = welcomeCnt = new Array(),
  120. inCntArr = inCnt = new Array(),
  121. outCntArr = outCnt = new Array(),
  122. goodByeCntArr = goodByeCnt = new Array(),
  123. unknownCntArr = unknownCnt = new Array();
  124. var startNum = Number( self.getStartDatePickerValue() ),
  125. endNum = Number( +self.getEndDatePickerValue() + (60*60*24*1000) );
  126. for( var d = startNum, i = 0 ; d < endNum ; d += (60*60*24*1000), i++ ) {
  127. var strDate = kendo.toString( new Date(d), "yyyy-MM-dd" );
  128. accessDateArr.push( strDate );
  129. welcomeCntArr.push(0);
  130. inCntArr.push(0);
  131. outCntArr.push(0);
  132. goodByeCntArr.push(0);
  133. unknownCntArr.push(0);
  134. for( var n = 0 ; n < aggEventLogList.length ; n ++ ) {
  135. if( strDate === aggEventLogList[n].aggDt.split(" ")[0] ) {
  136. switch(aggEventLogList[n].eventName){
  137. case "WELCOME": welcomeCntArr[i] = aggEventLogList[n].hitCnt;break;
  138. case "IN": inCntArr[i] = aggEventLogList[n].hitCnt;break;
  139. case "OUT": outCntArr[i] = aggEventLogList[n].hitCnt;break;
  140. case "GOODBYE": goodByeCntArr[i] = aggEventLogList[n].hitCnt;break;
  141. case "UNKNOWN": unknownCntArr[i] = aggEventLogList[n].hitCnt;break;
  142. }
  143. }
  144. }
  145. }
  146. var param = [];
  147. for( var n = 0, size = accessDateArr.length ; n < size ; n ++ ) {
  148. param.push({
  149. "accessDate" : accessDateArr[n],
  150. "welcomeCnt" : welcomeCntArr[n],
  151. "inCnt" : inCntArr[n],
  152. "outCnt" : outCntArr[n],
  153. "goodByeCnt" : goodByeCntArr[n],
  154. "unknownCnt" : unknownCntArr[n]
  155. });
  156. }
  157. return param;
  158. };
  159. return dataSource;
  160. };
  161. var dataSource = setDataSource();
  162. /**
  163. * 그리드 초기화
  164. */
  165. var initGrid = function(){
  166. // 그리드 옵션
  167. var option = {
  168. dataSource: dataSource,
  169. //그리드 데이터 받아온 뒤 차트 초기화
  170. dataBound: initChart,
  171. pageable: false,
  172. selectable: true,
  173. height : 215,
  174. columns : [
  175. {
  176. field : "accessDate",
  177. title : "날짜",
  178. width: 100,
  179. attributes: {
  180. "class": "table-cell",
  181. style: "text-align: center;"
  182. }
  183. },
  184. {
  185. field : "welcomeCnt",
  186. title : "WELCOME",
  187. width: 100,
  188. template: "#= kendo.toString(data.welcomeCnt,'n0')# 건",
  189. attributes: {
  190. "class": "table-cell",
  191. style: "text-align: center;"
  192. }
  193. },
  194. {
  195. field : "inCnt",
  196. title : "IN",
  197. width: 100,
  198. template: "#= kendo.toString(data.inCnt,'n0')# 건",
  199. attributes: {
  200. "class": "table-cell",
  201. style: "text-align: center;"
  202. }
  203. },
  204. {
  205. field : "outCnt",
  206. title : "OUT",
  207. width: 100,
  208. template: "#= kendo.toString(data.outCnt,'n0')# 건",
  209. attributes: {
  210. "class": "table-cell",
  211. style: "text-align: center;"
  212. }
  213. },
  214. {
  215. field : "goodByeCnt",
  216. title : "GOODBYE",
  217. width: 100,
  218. template: "#= kendo.toString(data.goodByeCnt,'n0')# 건",
  219. attributes: {
  220. "class": "table-cell",
  221. style: "text-align: center;"
  222. }
  223. },
  224. {
  225. field : "unknownCnt",
  226. title : "UNKNOWN",
  227. width: 100,
  228. template: "#= kendo.toString(data.unknownCnt,'n0')# 건",
  229. attributes: {
  230. "class": "table-cell",
  231. style: "text-align: center;"
  232. }
  233. }
  234. ]
  235. };
  236. //그리드 초기화 - mcare_admin
  237. self.grid( $grid, option );
  238. };
  239. /**
  240. * 차트 초기화
  241. */
  242. var initChart = function(){
  243. var data = { labels: aggDt,
  244. datasets: getDataSet()
  245. };
  246. var option = {
  247. tooltipTemplate: "<%= value %>건"
  248. };
  249. //차트 초기화 mcare_admin
  250. self.chart( $chart, "line", option, data, $legend );
  251. };
  252. var getDataSet = function(){
  253. var colorArr = setColor( 5 );
  254. welcomeColor = colorArr[0];
  255. inColor = colorArr[1];
  256. outColor = colorArr[2];
  257. goodByeColor = colorArr[3];
  258. unknownColor = colorArr[4];
  259. var map = {
  260. "WELCOME":{
  261. label: "WELCOME",
  262. fillColor: "rgba(151,187,205,0.0)",
  263. strokeColor: welcomeColor,
  264. pointColor: welcomeColor,
  265. pointStrokeColor: "#fff",
  266. pointHighlightFill: "#fff",
  267. pointHighlightStroke: "rgba(151,187,205,1)",
  268. data: welcomeCnt
  269. },
  270. "IN":{
  271. label: "IN",
  272. fillColor: "rgba(151,187,205,0.0)",
  273. strokeColor: inColor,
  274. pointColor: inColor,
  275. pointStrokeColor: "#fff",
  276. pointHighlightFill: "#fff",
  277. pointHighlightStroke: "rgba(151,187,205,1)",
  278. data: inCnt
  279. },
  280. "OUT":{
  281. label: "OUT",
  282. fillColor: "rgba(151,187,205,0.0)",
  283. strokeColor: outColor,
  284. pointColor: outColor,
  285. pointStrokeColor: "#fff",
  286. pointHighlightFill: "#fff",
  287. pointHighlightStroke: "rgba(151,187,205,1)",
  288. data: outCnt
  289. },
  290. "GOODBYE":{
  291. label: "GOODBYE",
  292. fillColor: "rgba(151,187,205,0.0)",
  293. strokeColor: goodByeColor,
  294. pointColor: goodByeColor,
  295. pointStrokeColor: "#fff",
  296. pointHighlightFill: "#fff",
  297. pointHighlightStroke: "rgba(151,187,205,1)",
  298. data: goodByeCnt
  299. },
  300. "UNKNOWN":{
  301. label: "UNKNOWN",
  302. fillColor: "rgba(151,187,205,0.0)",
  303. strokeColor: unknownColor,
  304. pointColor: unknownColor,
  305. pointStrokeColor: "#fff",
  306. pointHighlightFill: "#fff",
  307. pointHighlightStroke: "rgba(151,187,205,1)",
  308. data: unknownCnt
  309. }
  310. };
  311. function setColor( num ){
  312. var colorArr = [
  313. "#F7464A","#46BFBD","#FDB45C" ,"#FFC870",
  314. "#008000","#3f0080","#800040","#007f80","#7f8000",
  315. "#804000","#003f80","#800000","#801900","#ff007f",
  316. "#4c8000","#00804c","#001980","#ff0000","#00ff66","#00ff7f",
  317. "#7f00ff","#feff00","#003fff","#00ffef","#7fffd4",
  318. "#4b0082","#087830","#3200ff","#7fff00","#0000ff"
  319. ],
  320. returnArray = [];
  321. for( var i = 0; i < num; i++ ){
  322. var random = Math.floor( Math.random() * ( (colorArr.length-1) + 1 ) );
  323. returnArray.push( colorArr[random] );
  324. colorArr.splice(random, 1);
  325. };
  326. return returnArray;
  327. };
  328. var arr = [];
  329. if( getSearchFlag() ){
  330. arr.push( map[$selectEvent.val()] );
  331. } else {
  332. for( var key in map) {
  333. arr.push( map[key] );
  334. }
  335. }
  336. return arr;
  337. };
  338. };