Highchars

//前台

  1. <script>
  2.  
  3. $(function () {
  4.  
  5. //showChat();
  6. initChat();
  7. showPie();
  8. initPie();
  9. })
  10.  
  11. function initChat() {
  12. var xlst = [];
  13. var ylst = [];
  14.  
  15. $.ajax({
  16.  
  17. url: "Handler1.ashx",
  18. data: {},
  19. dataType: "json",
  20. success: function (data) {
  21.  
  22. data = eval("(" + data + ")"); //序列化数据
  23. //console.log(data);
  24.  
  25. $.each(data.Table, function (i, j) {
  26.  
  27. xlst.push(parseInt(j.day)); //push 添加数据
  28. ylst.push(parseFloat(j.sum));
  29.  
  30. })
  31. showChat(xlst, ylst);
  32. //console.log(xlst);
  33. //console.log(ylst);
  34. }
  35. })
  36.  
  37. }
  38.  
  39. //第一步 加载静态样式
  40. function showChat(xlst, ylst) {
  41.  
  42. var chart = Highcharts.chart('container', {
  43. chart: {
  44. type: 'spline' //折线图
  45. //type: 'column' //柱状图
  46. },
  47. title: {
  48. text: '网站每日销售统计图'
  49. },
  50. subtitle: {
  51. text: '数据来源: 后台统计'
  52. },
  53. xAxis: {
  54. categories: xlst,
  55. crosshair: true
  56. },
  57. yAxis: {
  58. min: 0,
  59. title: {
  60. text: '销售额 (元)'
  61. }
  62. },
  63. tooltip: {
  64. // head + 每个 point + footer 拼接成完整的 table
  65. headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
  66. pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
  67. '<td style="padding:0"><b>{point.y:.1f} ¥</b></td></tr>',
  68. footerFormat: '</table>',
  69. shared: true,
  70. useHTML: true
  71. },
  72. plotOptions: {
  73. column: {
  74. borderWidth: 0
  75. }
  76. },
  77. series: [{
  78. name: '销售统计',
  79. data: ylst
  80. }, ]
  81. });
  82.  
  83. }
  84.  
  85. //饼状图
  86. function initPie() {
  87. var pieArr = [];
  88. $.ajax({
  89. url: "Handler1.ashx",
  90. data: { op: "pie" },
  91. dataType: "json",
  92. success: function (data) {
  93. data = eval("(" + data + ")"); //序列化数据
  94. console.log(data);
  95. $.each(data.Table, function (i,j) {//循环
  96.  
  97. var value = { name: j['OrdertType'], y: parseFloat(j['totalMoney']) };
  98.  
  99. pieArr.push(value);
  100.  
  101. })
  102.  
  103. //调用饼状图方法
  104. showPie(pieArr);
  105. }
  106.  
  107. })
  108.  
  109. }
  110.  
  111. //加载饼图样式
  112.  
  113. function showPie(pieArr) {
  114. console.log(pieArr);
  115. Highcharts.chart('pie', {
  116. chart: {
  117. plotBackgroundColor: null,
  118. plotBorderWidth: null,
  119. plotShadow: false,
  120. type: 'pie'
  121. },
  122. title: {
  123. text: '所有订单销售占比'
  124. },
  125. tooltip: {
  126. pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
  127. },
  128. plotOptions: {
  129. pie: {
  130. allowPointSelect: true,
  131. cursor: 'pointer',
  132. dataLabels: {
  133. enabled: true,
  134. format: '<b>{point.name}</b>: {point.percentage:.1f} %',
  135. style: {
  136. color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
  137. }
  138. }
  139. }
  140. },
  141. series: [{
  142. name: '商品类型',
  143. colorByPoint: true,
  144. data: pieArr
  145. }]
  146. });
  147.  
  148. }
  149.  
  150. </script>
  151.  
  152. //后台
  153.  
  154. public string SqlConnectionString = ConfigurationManager.ConnectionStrings["sqlString"].ConnectionString;
  155.  
  156. public void ProcessRequest(HttpContext context)
  157. {
  158. context.Response.ContentType = "text/plain";
  159. var op = context.Request.QueryString["op"];
  160. if (op == "pie")
  161. {
  162. context.Response.Write(new JavaScriptSerializer().Serialize(LoadPieData()));
  163. }
  164. else
  165. {
  166. context.Response.Write(new JavaScriptSerializer().Serialize(LoadOrderData()));
  167. }
  168.  
  169. }
  170.  
  171. public bool IsReusable
  172. {
  173. get
  174. {
  175. return false;
  176. }
  177. }
  178.  
  179. /// <summary>
  180. /// 加载曲线图
  181. /// </summary>
  182. /// <returns></returns>
  183. public string LoadOrderData()
  184. {
  185. string sql = @"select convert(int,DAY(CreateTime),120) as 'day',sum(OrderAmount)
  186. as 'sum' from OrderInfo group by convert(int,DAY(CreateTime),120)
  187. order by convert(int,DAY(CreateTime),120) asc";
  188.  
  189. DataSet ds = SqlHelper.ExecuteDataset(SqlConnectionString, CommandType.Text, sql);
  190. //调用方法将dataset转换为json格式的数据
  191. var result = GetJsonByDataset(ds);
  192.  
  193. return result;
  194. }
  195.  
  196. /// <summary>
  197. /// 统计每个订单类型的销售额
  198. /// </summary>
  199. /// <returns></returns>
  200. public string LoadPieData()
  201. {
  202. string sql = @"select SUM(OrderAmount) as totalMoney,OrdertType=Case OrdertType
  203. when 1 then '家电'
  204. when 2 then '生活用品'
  205. else '其他' end
  206. from OrderInfo group by(OrdertType)
  207. ";
  208.  
  209. DataSet ds = SqlHelper.ExecuteDataset(SqlConnectionString, CommandType.Text, sql);
  210. //调用方法将dataset转换为json格式的数据
  211. var result = GetJsonByDataset(ds);
  212. return result;
  213. }
  214.  
  215. //StringBuilder 如果是长字符串拼接就用stringbuilder(比如sql拼接,html拼接)
  216.  
  217. //string 如果是短字符串拼接就用string
  218.  
  219. /// 把dataset数据转换成json的格式
  220. /// </summary>
  221. /// <param name="ds">dataset数据集</param>
  222. /// <returns>json格式的字符串</returns>
  223. public static string GetJsonByDataset(DataSet ds)
  224. {
  225. if (ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0)
  226. {
  227. //如果查询到的数据为空则返回标记ok:false
  228. return "{\"ok\":false}";
  229. }
  230. StringBuilder sb = new StringBuilder();
  231. sb.Append("{\"ok\":true,");
  232. foreach (DataTable dt in ds.Tables)
  233. {
  234. sb.Append(string.Format("\"{0}\":[", dt.TableName));
  235.  
  236. foreach (DataRow dr in dt.Rows)
  237. {
  238. sb.Append("{");
  239. for (int i = 0; i < dr.Table.Columns.Count; i++)
  240. {
  241. sb.AppendFormat("\"{0}\":\"{1}\",", dr.Table.Columns[i].ColumnName.Replace("\"", "\\\"").Replace("\'", "\\\'"), ObjToStr(dr[i]).Replace("\"", "\\\"").Replace("\'", "\\\'")).Replace(Convert.ToString((char)13), "\\r\\n").Replace(Convert.ToString((char)10), "\\r\\n");
  242. }
  243. sb.Remove(sb.ToString().LastIndexOf(','), 1);
  244. sb.Append("},");
  245. }
  246.  
  247. sb.Remove(sb.ToString().LastIndexOf(','), 1);
  248. sb.Append("],");
  249. }
  250. sb.Remove(sb.ToString().LastIndexOf(','), 1);
  251. sb.Append("}");
  252. return sb.ToString();
  253. }
  254.  
  255. /// <summary>
  256. /// 将object转换成为string
  257. /// </summary>
  258. /// <param name="ob">obj对象</param>
  259. /// <returns></returns>
  260. public static string ObjToStr(object ob)
  261. {
  262. if (ob == null)
  263. {
  264. return string.Empty;
  265. }
  266. else
  267. return ob.ToString();
  268. }

HighChar 案例的更多相关文章

  1. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  2. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  3. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  4. Yeoman 官网教学案例:使用 Yeoman 构建 WebApp

    STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...

  5. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  6. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. Redis简单案例(二) 网站最近的访问用户

    我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...

  9. springmvc+bootstrap+jquerymobile完整搭建案例(提供下载地址)

    用一张简单的截图说明下,然后提供一个下载地址. bootstrap的大部分样式官方都是写好的,所以只需要class="官方样式即可",具体可以看官方的案例,下面来个地址 http: ...

随机推荐

  1. javascript 用函数语句和表达式定义函数的区别详解

    通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) { console.log(str); }; // 表达式定义 var fnx=function(str) { ...

  2. Python2.7和3.5双版本共存和pip的使用

    1. Python2.7和3.5并存 1.1 安装 安装自不必多说,先装2.7,再装3.5. 说下安装的目录:Py3.5和Py2.7默认的安装目录是不一样的,按默认的来就好,不用管. Python2. ...

  3. ES6 中的 iterator

    [简介] 遍历器/迭代器.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作.这种数据结构是“可遍历的”(iterable). 如何判断是否可遍历? typeof target[Symb ...

  4. 节流throttle和防抖debounce

    underscore.js提供了很多很有用的函数,今天想说说其中的两个.这两个函数都用于限制函数的执行. debounce 在解释这个函数前,我们先从一个例子看下这个函数的使用场景.假设我们网站有个搜 ...

  5. linux ubuntukylin和deepin操作系统的比较及改进方向的建议

    研发中国的操作系统的需求在我看来是安全,还有就是自主.如果做的好还可以在创新上,使用体验上进行一波超越.现有的所谓的国产操作系统我了解的除了基于安卓的凤凰系统就是基于Linux的像优麒麟和deepin ...

  6. mybatis整合spring获取配置文件信息出错

    描述:mybatis整合spring加载jdbc.properties文件,然后使用里面配置的值来 配置数据源,后来发现用户变成了admin- jdbc.properties的配置: 加载配置: 报错 ...

  7. 用react重构个人网站 3-22

    问题一:import React from 'react'这个写法是怎么回事? 答案:require是common.js的写法,import是ES6的写法,主要功能都是引入模块,写法上: var mo ...

  8. HTML5 & MUI 界面样式

    垂直居中+自动换行 样式效果如下所示,当文字没有超出一行时,显示如“备注信息”,当文字超出一行时,显示如“维修地点” HTML代码如下: <div class="mui-input-r ...

  9. Python json & pickle, shelve 模块

    json 用于字符串和python的数据类型间的转换 四个功能 dumps dump loads load pickle 用于python特有的类型和python的数据类型进行转换 四个功能 dump ...

  10. BZOJ_3427_Poi2013 Bytecomputer_DP

    BZOJ_3427_Poi2013 Bytecomputer_DP Description 给定一个{-1,0,1}组成的序列,你可以进行x[i]=x[i]+x[i-1]这样的操作,求最少操作次数使其 ...