Commit 05beecd0 authored by Huang's avatar Huang
Browse files

no commit message

parent bc5dd330
/**
* Copyright &copy; 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package com.jeespring.common.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.StringUtils;
/**
* 生成随机验证码
* @author 黄炳桂 516821420@qq.com
* @version 2014-7-27
*/
@SuppressWarnings("serial")
@WebServlet(urlPatterns = "/servlet/validateCodeServlet")
public class ValidateCodeServlet extends HttpServlet {
public static final String VALIDATE_CODE = "validateCode";
//private int w = 70;
//private int h = 26;
private int w = 80;
private int h = 40;
public ValidateCodeServlet() {
super();
}
@Override
public void destroy() {
super.destroy();
}
public static boolean validate(HttpServletRequest request, String validateCode){
String code = (String)request.getSession().getAttribute(VALIDATE_CODE);
return validateCode.toUpperCase().equals(code);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String validateCode = request.getParameter(VALIDATE_CODE); // AJAX验证,成功返回true
if (StringUtils.isNotBlank(validateCode)){
response.getOutputStream().print(validate(request, validateCode)?"true":"false");
}else{
this.doPost(request, response);
}
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
createImage(request,response);
}
private void createImage(HttpServletRequest request,
HttpServletResponse response) throws IOException {
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
/*
* 得到参数高,宽,都为数字时,则使用设置高宽,否则使用默认值
*/
String width = request.getParameter("width");
String height = request.getParameter("height");
if (StringUtils.isNumeric(width) && StringUtils.isNumeric(height)) {
w = NumberUtils.toInt(width);
h = NumberUtils.toInt(height);
}
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
/*
* 生成背景
*/
createBackground(g);
/*
* 生成字符
*/
String s = createCharacter(g);
createLine(g);
request.getSession().setAttribute(VALIDATE_CODE, s);
g.dispose();
OutputStream out = response.getOutputStream();
ImageIO.write(image, "JPEG", out);
out.close();
}
private Color getRandColor(int fc,int bc) {
int f = fc;
int b = bc;
Random random=new Random();
if(f>255) {
f=255;
}
if(b>255) {
b=255;
}
return new Color(f+random.nextInt(b-f),f+random.nextInt(b-f),f+random.nextInt(b-f));
}
private void createBackground(Graphics g) {
// 填充背景
//g.setColor(getRandColor(220,250));
g.setColor(new Color(255,255,255));
g.fillRect(0, 0, w, h);
// 加入干扰线条
//干扰线条先注释
for (int i = 0; i < 20; i++) {
/*g.setColor(getRandColor(40,150));
Random random = new Random();
int x = random.nextInt(w);
int y = random.nextInt(h);
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
g.drawLine(x, y, x1, y1);*/
}
}
private void createLine(Graphics g) {
// 加入干扰线条
//干扰线条先注释
Random randomTimes = new Random();
int times=randomTimes.nextInt(25);
for (int i = 0; i <times; i++) {
//g.setColor(getRandColor(40,150));
g.setColor(new Color(255,255,255));
Random random = new Random();
int x = random.nextInt(w);
int y = random.nextInt(h);
int x1 = random.nextInt(w);
int y1 = random.nextInt(h);
g.drawLine(x, y, x1, y1);
}
}
private String createCharacter(Graphics g) {
/*char[] codeSeq = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J',
'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' };*/
char[] codeSeq = {'0','1', '2', '3', '4', '5', '6', '7', '8', '9' };
//String[] fontTypes = {"Arial","Arial Black","AvantGarde Bk BT","Calibri"};
String[] fontTypes = {"Ravie","Antique Olive Compact","Fixedsys","Wide Latin","Gill Sans Ultra Bold"};
Random random = new Random();
StringBuilder s = new StringBuilder();
for (int i = 0; i < 4; i++) {
String r = String.valueOf(codeSeq[random.nextInt(codeSeq.length)]);//random.nextInt(10));
//g.setColor(new Color(50 + random.nextInt(100), 50 + random.nextInt(100), 50 + random.nextInt(100)));
g.setColor(new Color(70, 70, 70));
//g.setFont(new Font(fontTypes[random.nextInt(fontTypes.length)],Font.BOLD,26));
g.setFont(new Font("Arial",Font.ITALIC,18));
//g.drawString(r, 15 * i + 5, 19 + random.nextInt(8));
g.drawString(r, 20 * i + 4, 26 );
s.append(r);
}
return s.toString();
}
}
package com.jeespring.common.sms;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import com.jeespring.common.security.Digests;
/*
功能: 企信通PHP HTTP接口 发送短信
修改日期: 2014-03-19
说明: http://api.cnsms.cn/?ac=send&uid=用户账号&pwd=MD5位32密码&mobile=号码&content=内容
状态:
100 发送成功
101 验证失败
102 短信不足
103 操作失败
104 非法字符
105 内容过多
106 号码过多
107 频率过快
108 号码内容空
109 账号冻结
110 禁止频繁单条发送
111 系统暂定发送
112 号码不正确
120 系统升级
*/
public class SMSUtils {
//发送短信,uid,pwd,参数值请向企信通申请, tel:发送的手机号, content:发送的内容
public static String send(String uid, String pwd, String tel, String content) throws IOException {
try{
// 创建StringBuffer对象用来操作字符串
StringBuffer sb = new StringBuffer("http://api.cnsms.cn/?");
// 向StringBuffer追加用户名
sb.append("ac=send&uid="+uid);//在此申请企信通uid,并进行配置用户名
// 向StringBuffer追加密码(密码采用MD5 32位 小写)
sb.append("&encode=utf8");
// 向StringBuffer追加密码(密码采用MD5 32位 小写)
sb.append("&pwd="+Digests.string2MD5(pwd));//在此申请企信通uid,并进行配置密码
// 向StringBuffer追加手机号码
sb.append("&mobile="+tel);
// 向StringBuffer追加消息内容转URL标准码
sb.append("&content="+URLEncoder.encode(content,"utf8"));
// 创建url对象
URL url = new URL(sb.toString());
// 打开url连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置url请求方式 ‘get’ 或者 ‘post’
connection.setRequestMethod("POST");
// 发送
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
// 返回发送结果
String inputline = in.readLine();
return inputline;
}catch (Exception e){
return "";
}
}
public static String sendPass(String tel, String password) throws IOException {
//发送内容
String content = "您的新密码是:"+password+",请登录系统,重新设置密码。";
// 创建StringBuffer对象用来操作字符串
StringBuffer sb = new StringBuffer("http://api.cnsms.cn/?");
// 向StringBuffer追加用户名
sb.append("ac=send&uid=");//设置用户名
// 向StringBuffer追加密码(密码采用MD5 32位 小写)
sb.append("&encode=utf8");
// 向StringBuffer追加密码(密码采用MD5 32位 小写)
sb.append("&pwd=");//设置密码
// 向StringBuffer追加手机号码
sb.append("&mobile="+tel);
// 向StringBuffer追加消息内容转URL标准码
sb.append("&content="+URLEncoder.encode(content,"utf8"));
// 创建url对象
URL url = new URL(sb.toString());
// 打开url连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置url请求方式 ‘get’ 或者 ‘post’
connection.setRequestMethod("POST");
// 发送
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
// 返回发送结果
String inputline = in.readLine();
return inputline;
}
}
\ No newline at end of file
package com.jeespring.common.spring;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;
/**
* spring工具类 方便在非spring管理环境中获取bean
*
* @author JeeSpring
*/
@Component
public final class SpringUtils implements BeanFactoryPostProcessor
{
/** Spring应用上下文环境 */
private static ConfigurableListableBeanFactory beanFactory;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
{
SpringUtils.beanFactory = beanFactory;
}
/**
* 获取对象
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws org.springframework.beans.BeansException
*
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException
{
return (T) beanFactory.getBean(name);
}
/**
* 获取类型为requiredType的对象
*
* @param clz
* @return
* @throws org.springframework.beans.BeansException
*
*/
public static <T> T getBean(Class<T> clz) throws BeansException
{
T result = (T) beanFactory.getBean(clz);
return result;
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public static boolean containsBean(String name)
{
return beanFactory.containsBean(name);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
{
return beanFactory.isSingleton(name);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
{
return beanFactory.getType(name);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
*
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
{
return beanFactory.getAliases(name);
}
}
package com.jeespring.common.swagger;
import com.google.common.base.Predicates;
import com.jeespring.common.web.AbstractBaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger {
@Bean("JeeSpring云接口")
public Docket createJeeSpringRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("JeeSpring云接口")
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //这里采用包含注解的方式来确定要显示的接口
//.apis(RequestHandlerSelectors.basePackage("com.jeespring.modules")) //这里采用包扫描的方式来确定要显示的接口
//.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
//.paths(PathSelectors.regex("/rest/.*"))
//.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger2构建RESTful APIs")
.description("更多JeeSpring相关文章")
.termsOfServiceUrl("http://www.jeespring.com/")
.contact("contact")
.version("1.0")
.build();
}
/*注解
@ApiOperation(value="创建用户", notes="根据User对象创建用户")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@ApiOperation("生成代码")
@ApiImplicitParams({
@ApiImplicitParam(name = "moduleName", value = "模块名称", required = true, dataType = "String"),
@ApiImplicitParam(name = "bizChName", value = "业务名称", required = true, dataType = "String"),
@ApiImplicitParam(name = "bizEnName", value = "业务英文名称", required = true, dataType = "String"),
@ApiImplicitParam(name = "path", value = "项目生成类路径", required = true, dataType = "String")
})
*/
}
\ No newline at end of file
package com.jeespring.common.tag;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.jeespring.common.config.Global;
import com.jeespring.common.utils.SpringContextHolder;
import com.jeespring.modules.sys.entity.Menu;
import com.jeespring.modules.sys.utils.UserUtils;
/**
*
* 类描述:菜单标签
*
* 刘高峰
*
* @date: 日期:2015-1-23 时间:上午10:17:45
* @version 1.0
*/
public class AceMenuTag extends TagSupport {
private static final long serialVersionUID = 1L;
protected Menu menu;// 菜单Map
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
@Override
public int doStartTag() throws JspTagException {
return EVAL_PAGE;
}
@Override
public int doEndTag() throws JspTagException {
try {
JspWriter out = this.pageContext.getOut();
String menu = (String) this.pageContext.getSession().getAttribute(
"menu");
if (menu != null) {
out.print(menu);
} else {
menu = end().toString();
out.print(menu);
}
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
public StringBuffer end() {
StringBuffer sb = new StringBuffer();
sb.append(getChildOfTree(menu, 0, UserUtils.getMenuList()));
System.out.println(sb);
return sb;
}
private static String getChildOfTree(Menu parent, int level, List<Menu> menuList) {
StringBuffer menuString = new StringBuffer();
String href = "";
if (!parent.hasPermisson()) {
return "";
}
ServletContext context = SpringContextHolder
.getBean(ServletContext.class);
if (parent.getHref() != null && parent.getHref().length() > 0) {
if (parent.getHref().endsWith(".html")
&& !parent.getHref().endsWith("ckfinder.html")) {// 如果是静态资源并且不是ckfinder.html,直接访问不加adminPath
href = context.getContextPath() + parent.getHref();
} else {
href = context.getContextPath() + Global.getAdminPath()
+ parent.getHref();
}
}
if (level > 0) {// level 为0是功能菜单
menuString.append("<li>");
if ((parent.getHref() == null || "".equals(parent.getHref().trim())) && "1".equals(parent.getIsShow())) {
menuString.append("<a href=\"" + href
+ "\" class=\"dropdown-toggle\">");
} else {
menuString.append("<a class=\"J_menuItem\" href=\"" + href
+ "\">");
}
menuString.append("<i class=\"menu-icon fa " + parent.getIcon()
+ "\"></i>");
menuString.append("<span class=\"menu-text\">"+parent.getName()+"</span>");
if ((parent.getHref() == null || "".equals(parent.getHref().trim())) && "1".equals(parent.getIsShow())) {
menuString.append("<b class=\"arrow fa fa-angle-down\"></b>");
}
menuString.append("</a>");
menuString.append("<b class=\"arrow\"></b>");
}
if ((parent.getHref() == null || "".equals(parent.getHref().trim())) && "1".equals(parent.getIsShow())) {
if (level == 0) {
menuString.append("<ul class=\"nav nav-list\">");
} else {
menuString.append("<ul class=\"submenu\">");
}
for (Menu child : menuList) {
if (child.getParentId().equals(parent.getId())&& "1".equals(child.getIsShow())) {
menuString.append(getChildOfTree(child, level + 1, menuList));
}
}
menuString.append("</ul>");
}
if (level > 0) {
menuString.append("</li>");
}
return menuString.toString();
}
}
package com.jeespring.common.tag;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import com.jeespring.common.config.Global;
import com.jeespring.common.utils.SpringContextHolder;
import com.jeespring.modules.sys.entity.Menu;
import com.jeespring.modules.sys.utils.UserUtils;
/**
*
* 类描述:菜单标签
*
*
* @date: 日期:2012-12-7 时间:上午10:17:45
* @version 1.0
*/
public class MenuTag extends TagSupport {
private static final long serialVersionUID = 1L;
protected Menu menu;//菜单Map
public Menu getMenu() {
return menu;
}
public void setMenu(Menu menu) {
this.menu = menu;
}
@Override
public int doStartTag() throws JspTagException {
return EVAL_PAGE;
}
@Override
public int doEndTag() throws JspTagException {
try {
JspWriter out = this.pageContext.getOut();
String menu = (String) this.pageContext.getSession().getAttribute("menu");
if(menu!=null){
out.print(menu);
}else{
menu=end().toString();
out.print(menu);
}
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
public StringBuffer end() {
StringBuffer sb = new StringBuffer();
sb.append(getChildOfTree(menu,0));
//System.out.println(sb);
return sb;
}
private static String getChildOfTree(Menu parent, int level) {
StringBuffer menuString = new StringBuffer();
String href = "";
if (!parent.hasPermisson()) {
return "";
}
if (level > 0) {//level 为0是功能菜单
if(parent.hasChildren())
//menu-open
{
menuString.append("<li class=\"treeview\">");
} else {
menuString.append("<li>");
}
ServletContext context = SpringContextHolder
.getBean(ServletContext.class);
if (parent.getHref() != null && parent.getHref().length() > 0) {
if(parent.getHref().endsWith(".html")&&!parent.getHref().endsWith("ckfinder.html")){//如果是静态资源并且不是ckfinder.html,直接访问不加adminPath
href = context.getContextPath() + parent.getHref();
}
else if(parent.getHref().contains("http://") || parent.getHref().contains("https://")){
href = context.getContextPath() + parent.getHref();
}
else{
href = context.getContextPath() + Global.getAdminPath()
+ parent.getHref();
}
}
}
if (parent.hasChildren()) {
if (level > 0) {
menuString
.append("<a title=\""+parent.getName()+"\" href=\"javascript:\" data-href=\"blank\" class=\"nav-link\" href=\""
+ href
+ "\"><i class=\"fa "+parent.getIcon()+"\"></i> <span class=\"nav-label\">"
+ parent.getName()
//+ "</span><span class=\"fa arrow\"></span></a>");
+ "</span><span class=\"pull-right-container\"><i class=\"fa fa-angle-left pull-right\"></i></span></a>");
}
if (level == 1) {
menuString.append("<ul class=\"nav nav-second-level treeview-menu\" >");
} else if (level == 2) {
menuString.append("<ul class=\"nav nav-third-level treeview-menu\" >");
}else if (level == 3) {
menuString.append("<ul class=\"nav nav-forth-level treeview-menu\" >");
} else if (level == 4) {
menuString.append("<ul class=\"nav nav-fifth-level treeview-menu\" >");
}
for (Menu child : parent.getChildren()) {
if ("1".equals(child.getIsShow())) {
menuString.append(getChildOfTree(child, level + 1));
}
}
if (level > 0) {
menuString.append("</ul>");
}
} else {
//javascript:
menuString.append("<a title=\""+parent.getName()+"\" class=\"nav-link\" target=\""+parent.getTarget()+"\" href=\"" + href
+ "\" data-href=\""+href+"\"><i class=\"fa "+parent.getIcon()+"\"></i> <span class=\"nav-label\">"+parent.getName()+"</span></a>");
}
if (level > 0) {
menuString.append("</li>");
}
return menuString.toString();
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
public class EChartsBarTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String subtitle;
private String xAxisName;
private String yAxisName;
private List<String> xAxisData;
private Map<String, Integer> yAxisIndex;
private Map<String, List<Double>> yAxisData;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts', 'echarts/chart/bar'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('" + id+ "'));");
// 创建GsonOption对象,即为json字符串
GsonOption option = new GsonOption();
option.tooltip().trigger(Trigger.axis);
option.title(title, subtitle);
// 工具栏
option.toolbox().show(true).feature(
Tool.mark,
Tool.dataView,
Tool.saveAsImage,
//new MagicType(Magic.line, Magic.bar,Magic.stack,Magic.tiled),
Tool.dataZoom, Tool.restore);
option.calculable(true);
option.dataZoom().show(true).realtime(true).start(0).end(100);
// X轴数据封装并解析
ValueAxis valueAxis = new ValueAxis();
for (String s : xAxisData) {
valueAxis.type(AxisType.category).data(s);
}
// X轴单位
valueAxis.name(xAxisName);
option.xAxis(valueAxis);
for (String key : yAxisData.keySet()) {
option.legend().data(key);
}
// Y轴数据封装并解析
String[] unitNameArray = yAxisName.split(",");
for (String s : unitNameArray) {
CategoryAxis categoryAxis = new CategoryAxis();
categoryAxis.type(AxisType.value);
option.yAxis(categoryAxis.name(s));
}
int i = 0;
for (String key : yAxisData.keySet()) {
// 遍历list得到数据
List<Double> list = yAxisData.get(key);
Line line = new Line().name(key);
for (Double d : list) {
// KW与MW单位的转换
// if(settingGlobal!=null&&settingGlobal.getIskw()==0){
// d = d/1000;
// }
// 数据为空的话会报错,为空则为零
if (d != null) {
line.type(SeriesType.bar).data(d);
} else {
line.type(SeriesType.bar).data(0);
}
if (yAxisIndex != null && yAxisIndex.get(key) != null) {
line.type(SeriesType.bar).yAxisIndex(yAxisIndex.get(key));
line.symbol(Symbol.none);
} else {
line.type(SeriesType.bar).yAxisIndex(0);
line.symbol(Symbol.none);
}
}
option.series(line);
i++;
}
sb.append("var option=" + option.toString() + ";");
sb.append("myChart.setOption(option);");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
System.err.print(e);
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getxAxisName() {
return xAxisName;
}
public void setxAxisName(String xAxisName) {
this.xAxisName = xAxisName;
}
public String getyAxisName() {
return yAxisName;
}
public void setyAxisName(String yAxisName) {
this.yAxisName = yAxisName;
}
public List<String> getxAxisData() {
return xAxisData;
}
public void setxAxisData(List<String> xAxisData) {
this.xAxisData = xAxisData;
}
public Map<String, Integer> getyAxisIndex() {
return yAxisIndex;
}
public void setyAxisIndex(Map<String, Integer> yAxisIndex) {
this.yAxisIndex = yAxisIndex;
}
public Map<String, List<Double>> getyAxisData() {
return yAxisData;
}
public void setyAxisData(Map<String, List<Double>> yAxisData) {
this.yAxisData = yAxisData;
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
import com.github.abel533.echarts.style.LineStyle;
public class EChartsLineDoubleNumTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String subtitle;
private String xAxisName;
private String yAxisName;
private Map<String, Integer> yAxisIndex;
private Map<String, Double[][]> axisDataArr;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@SuppressWarnings("unchecked")
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts', 'echarts/chart/line'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('" + id
+ "'));");
// 创建GsonOption对象,即为json字符串
GsonOption option = new GsonOption();
/**
* tooltip : { trigger: 'axis' }
*/
option.tooltip().trigger(Trigger.axis);
option.tooltip().axisPointer().show(true).type(PointerType.cross)
.lineStyle(new LineStyle().type(LineType.dashed).width(1));
/**
* title : { 'text':'2002全国宏观经济关联分析(GDP vs 房地产)', 'subtext':'数据来自国家统计局'
* }
*/
option.title(title, subtitle);
/**
* toolbox: { show : true, feature : { mark : {show: true}, dataZoom :
* {show: true}, dataView : {show: true}, magicType : {show: true, type:
* ['line', 'bar', 'stack', 'tiled']}, restore : {show: true},
* saveAsImage : {show: true} } }
*/
// 工具栏
option.toolbox().show(true).feature(
Tool.mark,
Tool.dataZoom,
Tool.dataView,
//new MagicType(Magic.line, Magic.bar,Magic.stack,Magic.tiled),
Tool.restore,
Tool.saveAsImage);
option.calculable(true);
option.dataZoom().show(true).realtime(true).start(0).end(100);
/**
* xAxis : [ { type: 'value' } ]
*/
// X轴数据设置类型
ValueAxis valueAxis = new ValueAxis();
valueAxis.type(AxisType.value);
valueAxis.name(xAxisName);
option.xAxis(valueAxis);
// Y轴数据设置类型
CategoryAxis categoryAxis = new CategoryAxis();
categoryAxis.type(AxisType.value);
categoryAxis.name(yAxisName);
option.yAxis(categoryAxis);
for (String xtitle : axisDataArr.keySet()) {
option.legend().data(xtitle);
}
for (String mapkey : axisDataArr.keySet()) {
Line line = new Line();
// 显示直线,而不是密密麻麻的点,一点都不好看
line.name(mapkey).type(SeriesType.line).symbol(Symbol.none);
Object[][] dataArr = (Double[][]) axisDataArr.get(mapkey);
for (int num = 0; num < dataArr.length; num++) {
line.data().add(dataArr[num]);
}
if (yAxisIndex != null && yAxisIndex.get(mapkey) != null) {
line.yAxisIndex(yAxisIndex.get(mapkey));
} else {
line.yAxisIndex(0);
}
option.series(line);
}
sb.append("var option="+option.toString()+";");
sb.append("myChart.setOption(option);");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getxAxisName() {
return xAxisName;
}
public void setxAxisName(String xAxisName) {
this.xAxisName = xAxisName;
}
public String getyAxisName() {
return yAxisName;
}
public void setyAxisName(String yAxisName) {
this.yAxisName = yAxisName;
}
public Map<String, Integer> getyAxisIndex() {
return yAxisIndex;
}
public void setyAxisIndex(Map<String, Integer> yAxisIndex) {
this.yAxisIndex = yAxisIndex;
}
public Map<String, Double[][]> getAxisDataArr() {
return axisDataArr;
}
public void setAxisDataArr(Map<String, Double[][]> axisDataArr) {
this.axisDataArr = axisDataArr;
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
public class EChartsLineTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id ;
private String title;
private String subtitle;
private String xAxisName;
private String yAxisName;
private List<String> xAxisData;
private Map<String, Integer> yAxisIndex;
private Map<String, List<Double>> yAxisData;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts', 'echarts/chart/line','echarts/chart/bar'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('"+id+"'));");
// 创建GsonOption对象,即为json字符串
GsonOption option = new GsonOption();
option.tooltip().trigger(Trigger.axis);
option.title(title, subtitle);
// 工具栏
option.toolbox().show(true).feature(
Tool.mark,
Tool.dataView,
Tool.saveAsImage,
Tool.magicType,
new MagicType(Magic.line, Magic.bar,Magic.stack,Magic.tiled),
Tool.dataZoom, Tool.restore);
option.calculable(true);
option.dataZoom().show(true).realtime(true).start(0).end(100);
// X轴数据封装并解析
ValueAxis valueAxis = new ValueAxis();
for (String s : xAxisData) {
valueAxis.type(AxisType.category).data(s);
}
// X轴单位
valueAxis.name(xAxisName);
option.xAxis(valueAxis);
for (String key : yAxisData.keySet()) {
option.legend().data(key);
}
// Y轴数据封装并解析
String[] unitNameArray = yAxisName.split(",");
for (String s : unitNameArray) {
CategoryAxis categoryAxis = new CategoryAxis();
categoryAxis.type(AxisType.value);
option.yAxis(categoryAxis.name(s));
}
int i = 0;
for (String key : yAxisData.keySet()) {
// 遍历list得到数据
List<Double> list = yAxisData.get(key);
Line line = new Line().name(key);
for (Double d : list) {
// KW与MW单位的转换
// if(settingGlobal!=null&&settingGlobal.getIskw()==0){
// d = d/1000;
// }
// 数据为空的话会报错,为空则为零
if (d != null) {
line.type(SeriesType.line).data(d);
} else {
line.type(SeriesType.line).data(0);
}
if (yAxisIndex != null && yAxisIndex.get(key) != null) {
line.type(SeriesType.line).yAxisIndex(yAxisIndex.get(key));
line.symbol(Symbol.none);
} else {
line.type(SeriesType.line).yAxisIndex(0);
//显示直线,而不是密密麻麻的点,一点都不好看
line.symbol(Symbol.none);
}
}
option.series(line);
i++;
}
sb.append("var option="+option.toString()+";");
sb.append("myChart.setOption(option);");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
System.err.print(e);
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getxAxisName() {
return xAxisName;
}
public void setxAxisName(String xAxisName) {
this.xAxisName = xAxisName;
}
public String getyAxisName() {
return yAxisName;
}
public void setyAxisName(String yAxisName) {
this.yAxisName = yAxisName;
}
public List<String> getxAxisData() {
return xAxisData;
}
public void setxAxisData(List<String> xAxisData) {
this.xAxisData = xAxisData;
}
public Map<String, Integer> getyAxisIndex() {
return yAxisIndex;
}
public void setyAxisIndex(Map<String, Integer> yAxisIndex) {
this.yAxisIndex = yAxisIndex;
}
public Map<String, List<Double>> getyAxisData() {
return yAxisData;
}
public void setyAxisData(Map<String, List<Double>> yAxisData) {
this.yAxisData = yAxisData;
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
public class EChartsLineTimeLineTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String subtitle;
private String xAxisName;
private String yAxisName;
private List<String> xAxisData;
private Map<String, Integer> yAxisIndex;
private Map<String, List<Double>> yAxisData;
private List<String> timelineData;
private List<Map<String, List<Double>>> timelineAxisData;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts', 'echarts/chart/line'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('" + id
+ "'));");
GsonOption option = new GsonOption();
GsonOption options = new GsonOption();
/**
* timeline:{ data:[
* '2002-01-01','2003-01-01','2004-01-01','2005-01-01','2006-01-01',
* '2007-01-01','2008-01-01','2009-01-01','2010-01-01','2011-01-01' ],
* label : { formatter : function(s) { return s.slice(0, 4); } },
* autoPlay : true, playInterval : 1000 },
*/
option.timeline().autoPlay(true).playInterval(1000).label()
.formatter("function(s){return s.slice(0, 4);}");
for (String key : timelineData) {
option.timeline().data(key);
}
/**
* title : { 'text':'2002全国宏观经济指标', 'subtext':'数据来自国家统计局' },
*/
options.title(title, subtitle);
/**
* tooltip : {'trigger':'axis'},
*/
options.tooltip().trigger(Trigger.axis);
/**
* legend : { x:'right', 'data':['GDP','金融','房地产','第一产业','第二产业','第三产业'],
* 'selected':{ 'GDP':true, '金融':false, '房地产':true, '第一产业':false,
* '第二产业':false, '第三产业':false } },
*/
options.legend().x(X.right);
for (String key : yAxisData.keySet()) {
options.legend().data(key);
}
/**
* toolbox : { 'show':true, orient : 'vertical', x: 'right', y:
* 'center', 'feature':{ 'mark':{'show':true},
* 'dataView':{'show':true,'readOnly':false},
* 'magicType':{'show':true,'type':['line','bar','stack','tiled']},
* 'restore':{'show':true}, 'saveAsImage':{'show':true} } }, calculable
* : true,
*/
// 工具栏
options.toolbox().orient(Orient.vertical).x(X.right).y(Y.center)
.show(true).feature(
Tool.mark,
Tool.dataView,
Tool.saveAsImage,
//new MagicType(Magic.line, Magic.bar,Magic.stack,Magic.tiled),
Tool.dataZoom, Tool.restore);
options.calculable(true);
options.dataZoom().show(true).realtime(true).start(0).end(100);
/**
* xAxis : [{ 'type':'category', 'axisLabel':{'interval':0}, 'data':[
* '北京','\n天津','河北','\n山西','内蒙古','\n辽宁','吉林','\n黑龙江',
* '上海','\n江苏','浙江','\n安徽','福建','\n江西','山东','\n河南',
* '湖北','\n湖南','广东','\n广西','海南','\n重庆','四川','\n贵州',
* '云南','\n西藏','陕西','\n甘肃','青海','\n宁夏','新疆' ] }],
*/
// X轴数据封装并解析
ValueAxis valueAxis = new ValueAxis();
for (String s : xAxisData) {
valueAxis.type(AxisType.category).data(s);
}
// X轴单位
valueAxis.name(xAxisName);
options.xAxis(valueAxis);
/**
* yAxis : [ { 'type':'value', 'name':'GDP(亿元)', 'max':53500 }, {
* 'type':'value', 'name':'其他(亿元)' } ],
*/
// Y轴数据封装并解析
String[] unitNameArray = yAxisName.split(",");
for (String s : unitNameArray) {
CategoryAxis categoryAxis = new CategoryAxis();
categoryAxis.type(AxisType.value);
options.yAxis(categoryAxis.name(s));
}
for (String key : yAxisData.keySet()) {
// 遍历list得到数据
List<Double> list = yAxisData.get(key);
Line line = new Line().name(key);
for (Double d : list) {
// KW与MW单位的转换
// if(settingGlobal!=null&&settingGlobal.getIskw()==0){
// d = d/1000;
// }
// 数据为空的话会报错,为空则为零
if (d != null) {
line.type(SeriesType.line).data(d);
} else {
line.type(SeriesType.line).data(0);
}
if (yAxisIndex != null && yAxisIndex.get(key) != null) {
line.type(SeriesType.line).yAxisIndex(yAxisIndex.get(key));
// 显示直线,而不是密密麻麻的点,一点都不好看
line.symbol(Symbol.none);
} else {
line.type(SeriesType.line).yAxisIndex(0);
line.symbol(Symbol.none);
}
}
options.series(line);
}
option.options(options);
for (int ii = 1; ii < timelineData.size(); ii++) {
Map<String, List<Double>> timelineAxisDataMap = timelineAxisData.get(ii - 1);
GsonOption timeLineOption = new GsonOption();
timeLineOption.title(timelineData.get(ii) + title.substring(4, title.length()),subtitle);
for (String key : timelineAxisDataMap.keySet()) {
// 遍历list得到数据
List<Double> list = timelineAxisDataMap.get(key);
Line line = new Line().name(key);
for (Double d : list) {
// KW与MW单位的转换
// if(settingGlobal!=null&&settingGlobal.getIskw()==0){
// d = d/1000;
// }
// 数据为空的话会报错,为空则为零
if (d != null) {
line.type(SeriesType.line).data(d);
} else {
line.type(SeriesType.line).data(0);
}
if (yAxisIndex != null && yAxisIndex.get(key) != null) {
line.type(SeriesType.line).yAxisIndex(
yAxisIndex.get(key));
// 显示直线,而不是密密麻麻的点,一点都不好看
line.symbol(Symbol.none);
} else {
line.type(SeriesType.line).yAxisIndex(0);
line.symbol(Symbol.none);
}
}
timeLineOption.series(line);
}
option.options(timeLineOption);
}
sb.append("var option=" + option.toString() + ";");
sb.append("myChart.setOption(option);");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
System.err.print(e);
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getxAxisName() {
return xAxisName;
}
public void setxAxisName(String xAxisName) {
this.xAxisName = xAxisName;
}
public String getyAxisName() {
return yAxisName;
}
public void setyAxisName(String yAxisName) {
this.yAxisName = yAxisName;
}
public List<String> getxAxisData() {
return xAxisData;
}
public void setxAxisData(List<String> xAxisData) {
this.xAxisData = xAxisData;
}
public Map<String, Integer> getyAxisIndex() {
return yAxisIndex;
}
public void setyAxisIndex(Map<String, Integer> yAxisIndex) {
this.yAxisIndex = yAxisIndex;
}
public Map<String, List<Double>> getyAxisData() {
return yAxisData;
}
public void setyAxisData(Map<String, List<Double>> yAxisData) {
this.yAxisData = yAxisData;
}
public List<String> getTimelineData() {
return timelineData;
}
public void setTimelineData(List<String> timelineData) {
this.timelineData = timelineData;
}
public List<Map<String, List<Double>>> getTimelineAxisData() {
return timelineAxisData;
}
public void setTimelineAxisData(
List<Map<String, List<Double>>> timelineAxisData) {
this.timelineAxisData = timelineAxisData;
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.data.Data;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
public class EChartsPieTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String subtitle;
private Map<String, Object> orientData;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts','echarts/chart/pie'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('" + id+ "'));");
// 创建GsonOption对象,即为json字符串
GsonOption option = new GsonOption();
option.tooltip().trigger(Trigger.item).formatter("{a} <br/>{b} : {c} ({d}%)");
option.title(title, subtitle);
// 工具栏
option.toolbox().show(true).feature(
Tool.mark,
Tool.dataView,
Tool.saveAsImage,
//Tool.magicType,
//new MagicType(Magic.line, Magic.bar,Magic.pie,Magic.stack,Magic.tiled),
Tool.dataZoom, Tool.restore
);
option.calculable(true);
// 数据轴封装并解析
for(String xdata : orientData.keySet()) {
//option.legend().orient(Orient.horizontal).x(X.left).y(Y.bottom).data(xdata);
option.legend().orient(Orient.vertical).x(X.left).y(Y.bottom).data(xdata);
}
if (orientData != null) {
Line line = new Line();
line.name(title).type(SeriesType.pie);
for (String title : orientData.keySet()) {
Object value = orientData.get(title);
Data data = new Data().name(title);
data.value(value);
line.data(data);
}
option.series(line);
}
sb.append("var option=" + option.toString() + ";\n");
/*sb.append("option.series[0].label={\nnormal: { formatter: ' {b|{b}:}{c} {per|{d}%} ',");
sb.append("backgroundColor: '#eee',borderColor: '#aaa',borderWidth: 1,borderRadius: 4,");
sb.append("rich: {a: {color: '#999',lineHeight: 22,align: 'center'},");
sb.append("hr: {borderColor: '#aaa',width: '100%',borderWidth: 0.5,height: 0},");
sb.append("b: {fontSize: 16,lineHeight: 33},");
sb.append("per: {color: '#eee',backgroundColor: '#334455',padding: [2, 4],borderRadius: 2}");
sb.append("}}\n};\n");*/
sb.append("myChart.setOption(option);\n");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
System.err.print(e);
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public Map<String, Object> getOrientData() {
return orientData;
}
public void setOrientData(Map<String, Object> orientData) {
this.orientData = orientData;
}
}
package com.jeespring.common.tag.echarts;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTag;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.Tag;
import com.github.abel533.echarts.Polar;
import com.github.abel533.echarts.code.*;
import com.github.abel533.echarts.data.Data;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.json.GsonOption;
import com.github.abel533.echarts.series.Line;
public class EChartsRadarTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String subtitle;
private Integer polarType;
private List<Map<String, Object>> orientData;
@Override
public int doStartTag() throws JspException {
return BodyTag.EVAL_BODY_BUFFERED;
}
@Override
public int doEndTag() throws JspException {
StringBuffer sb = new StringBuffer();
sb.append("<script type='text/javascript'>");
sb.append("require([ 'echarts', 'echarts/chart/radar'], function(ec) {");
sb.append("var myChart= ec.init(document.getElementById('" + id+ "'));");
// 创建GsonOption对象,即为json字符串
GsonOption option = new GsonOption();
/**
* title: { text: '实时风向玫瑰图', subtext: '预测时间:' },
*/
option.title(title, subtitle);
/**
* tooltip: { trigger: 'axis' },
*/
option.tooltip().trigger(Trigger.axis);
/**
* polar: [ { indicator: [ { text: '正北(N)', max: 100 }, { text:
* '西北(NW)', max: 100 }, { text: '正西(W)', max: 100 }, { text: '西南(SW)',
* max: 100 }, { text: '正南(S)', max: 100 }, { text: '东南(SE)', max: 100
* }, { text: '正东(E)', max: 100 }, { text: '东北(NE)', max: 100 } ] } ]
*/
// 工具栏
option.toolbox().show(true).feature(
Tool.mark,
Tool.dataView,
Tool.saveAsImage,
//new MagicType(Magic.line, Magic.bar,Magic.stack,Magic.tiled),
Tool.dataZoom,
Tool.restore
);
Polar polar = new Polar();
if (polarType == 8) {
polar.indicator(new Data().text("正北(N)").max(100))
.indicator(new Data().text("西北(NW)").max(100))
.indicator(new Data().text("正西(W)").max(100))
.indicator(new Data().text("西南(SW)").max(100))
.indicator(new Data().text("正南(S)").max(100))
.indicator(new Data().text("东南(SE)").max(100))
.indicator(new Data().text("正东(E)").max(100))
.indicator(new Data().text("东北(NE)").max(100));
} else if (polarType == 16) {
polar.indicator(new Data().text("正北(N)").max(100))
.indicator(new Data().text("北西北(NNW)").max(100))
.indicator(new Data().text("西北(NW)").max(100))
.indicator(new Data().text("西北西(WNW)").max(100))
.indicator(new Data().text("正西(W)").max(100))
.indicator(new Data().text("西南西(WSW)").max(100))
.indicator(new Data().text("西南(SW)").max(100))
.indicator(new Data().text("南西南(SSW)").max(100))
.indicator(new Data().text("正南(S)").max(100))
.indicator(new Data().text("南东南(SSE)").max(100))
.indicator(new Data().text("东南(SE)").max(100))
.indicator(new Data().text("东南东(ESE)").max(100))
.indicator(new Data().text("正东(E)").max(100))
.indicator(new Data().text("东北东(ENE)").max(100))
.indicator(new Data().text("东北(NE)").max(100))
.indicator(new Data().text("北东北(NNE)").max(100));
}
option.polar(polar);
option.calculable(true);
/**
* legend: { orient: 'horizontal', x: 'left', y: 'bottom', data: [
* <c:forEach var="item" items="${towerList}" varStatus="status">
* '${item.tower_mater}米风向', </c:forEach> ] },
*/
if (orientData != null) {
for (Map<String, Object> legendMap : orientData) {
String title = legendMap.get("title").toString();
option.legend().orient(Orient.horizontal).x(X.left).y(Y.bottom).data(title);
Line line = new Line();
Data data = new Data().name(title);
Object[] dataArr = (Double[]) legendMap.get("dataArr");
data.value(dataArr);
line.type(SeriesType.radar).data(data);
option.series(line);
}
}
sb.append("var option="+option.toString()+";");
sb.append("myChart.setOption(option);");
sb.append("});");
sb.append("</script>");
try {
this.pageContext.getOut().write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return Tag.EVAL_PAGE;// 继续处理页面
}
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public Integer getPolarType() {
return polarType;
}
public void setPolarType(Integer polarType) {
this.polarType = polarType;
}
public List<Map<String, Object>> getOrientData() {
return orientData;
}
public void setOrientData(List<Map<String, Object>> orientData) {
this.orientData = orientData;
}
}
package com.jeespring.common.utils;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jeespring.common.utils.http.HttpUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* 获取地址类
*
* @author JeeSpring
*/
public class AddressUtils
{
private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
public static final String IP_URL = "http://ip.taobao.com/service/getIpInfo.php";
/** 获取地址开关 */
private static boolean addressEnabled=false;
public static String getRealAddressByIP(String ip)
{
String address = "";
try
{
if (addressEnabled) {
address = HttpUtils.sendPost(IP_URL, "ip=" + ip);
JSONObject json = JSONObject.parseObject(address);
JSONObject object = json.getObject("data", JSONObject.class);
String region = object.getString("region");
String city = object.getString("city");
address = region + " " + city;
}
}
catch (Exception e)
{
log.error("获取地理位置异常:", e.getMessage());
}
return address;
}
}
package com.jeespring.common.utils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by zhangwenchao on 2017/9/29.
* 本地或者网络图片资源转为Base64字符串
*/
public class Base64ImageUtils {
/**
* @Title: GetImageStrFromUrl
* @Description: 将一张网络图片转化成Base64字符串
* @param imgURL 网络资源位置
* @return Base64字符串
*/
public static String GetImageStrFromUrl(String imgURL) {
byte[] data = null;
try {
// 创建URL
URL url = new URL(imgURL);
// 创建链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5 * 1000);
InputStream inStream = conn.getInputStream();
data = new byte[inStream.available()];
inStream.read(data);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
// 返回Base64编码过的字节数组字符串
return encoder.encode(data);
}
/**
* @Title: GetImageStrFromPath
* @Description: (将一张本地图片转化成Base64字符串)
* @param imgPath
* @return
*/
public static String GetImageStrFromPath(String imgPath) {
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
// 返回Base64编码过的字节数组字符串
return encoder.encode(data);
}
/**
* @Title: GenerateImage
* @Description: base64字符串转化成图片
* @param imgStr
* @param imgFilePath 图片文件名,如“E:/tmp.jpg”
* @return
*/
public static boolean saveImage(String imgStr,String imgFilePath) {
if (imgStr == null) // 图像数据为空
{
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
// 生成jpeg图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package com.jeespring.common.utils;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheManager;
/**
* Cache工具类
*
* @author 黄炳桂 516821420@qq.com
* @version 2013-5-29
*/
public class CacheUtils {
private static CacheManager cacheManager = SpringContextHolder.getBean(CacheManager.class);
private static final String SYS_CACHE = "sysCache";
/**
* 获取SYS_CACHE缓存
*
* @param key
* @return
*/
public static Object get(String key) {
return get(SYS_CACHE, key);
}
/**
* 获取SYS_CACHE缓存
*
* @param key
* @param defaultValue
* @return
*/
public static Object get(String key, Object defaultValue) {
Object value = get(key);
return value != null ? value : defaultValue;
}
/**
* 写入SYS_CACHE缓存
*
* @param key
* @return
*/
public static void put(String key, Object value) {
put(SYS_CACHE, key, value);
}
/**
* 从SYS_CACHE缓存中移除
*
* @param key
* @return
*/
public static void remove(String key) {
remove(SYS_CACHE, key);
}
/**
* 获取缓存
*
* @param cacheName
* @param key
* @return
*/
public static Object get(String cacheName, String key) {
return getCache(cacheName).get(key);
}
/**
* 获取缓存
*
* @param cacheName
* @param key
* @param defaultValue
* @return
*/
public static Object get(String cacheName, String key, Object defaultValue) {
Object value = get(cacheName, key);
return value != null ? value : defaultValue;
}
/**
* 写入缓存
*
* @param cacheName
* @param key
* @param value
*/
public static void put(String cacheName, String key, Object value) {
getCache(cacheName).put(key, value);
}
/**
* 从缓存中移除
*
* @param cacheName
* @param key
*/
public static void remove(String cacheName, String key) {
getCache(cacheName).remove(key);
}
/**
* 获得一个Cache,没有则显示日志。
*
* @param cacheName
* @return
*/
private static Cache<String, Object> getCache(String cacheName) {
Cache<String, Object> cache = cacheManager.getCache(cacheName);
if (cache == null) {
throw new RuntimeException("当前系统中没有定义“" + cacheName + "”这个缓存。");
}
return cache;
}
}
package com.jeespring.common.utils;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* 字符集工具类
*
* @author JeeSpring
*
*/
public class CharsetKit
{
/** ISO-8859-1 */
public static final String ISO_8859_1 = "ISO-8859-1";
/** UTF-8 */
public static final String UTF_8 = "UTF-8";
/** GBK */
public static final String GBK = "GBK";
/** ISO-8859-1 */
public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
/** UTF-8 */
public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
/** GBK */
public static final Charset CHARSET_GBK = Charset.forName(GBK);
/**
* 转换为Charset对象
*
* @param charset 字符集,为空则返回默认字符集
* @return Charset
*/
public static Charset charset(String charset)
{
return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, String srcCharset, String destCharset)
{
return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, Charset srcCharset, Charset destCharset)
{
if (null == srcCharset)
{
srcCharset = StandardCharsets.ISO_8859_1;
}
if (null == destCharset)
{
srcCharset = StandardCharsets.UTF_8;
}
if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
{
return source;
}
return new String(source.getBytes(srcCharset), destCharset);
}
/**
* @return 系统字符集编码
*/
public static String systemCharset()
{
return Charset.defaultCharset().name();
}
}
/**
* Copyright (c) 2005-2012 springside.org.cn
*/
package com.jeespring.common.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
/**
* Collections工具集.
* 在JDK的Collections和Guava的Collections2后, 命名为Collections3.
* @author calvin
* @version 2013-01-15
*/
@SuppressWarnings("rawtypes")
public class Collections3 {
/**
* 提取集合中的对象的两个属性(通过Getter函数), 组合成Map.
*
* @param collection 来源集合.
* @param keyPropertyName 要提取为Map中的Key值的属性名.
* @param valuePropertyName 要提取为Map中的Value值的属性名.
*/
@SuppressWarnings("unchecked")
public static Map extractToMap(final Collection collection, final String keyPropertyName,
final String valuePropertyName) {
Map map = new HashMap(collection.size());
try {
for (Object obj : collection) {
map.put(PropertyUtils.getProperty(obj, keyPropertyName),
PropertyUtils.getProperty(obj, valuePropertyName));
}
} catch (Exception e) {
throw Reflections.convertReflectionExceptionToUnchecked(e);
}
return map;
}
/**
* 提取集合中的对象的一个属性(通过Getter函数), 组合成List.
*
* @param collection 来源集合.
* @param propertyName 要提取的属性名.
*/
@SuppressWarnings("unchecked")
public static List extractToList(final Collection collection, final String propertyName) {
List list = new ArrayList(collection.size());
try {
for (Object obj : collection) {
list.add(PropertyUtils.getProperty(obj, propertyName));
}
} catch (Exception e) {
throw Reflections.convertReflectionExceptionToUnchecked(e);
}
return list;
}
/**
* 提取集合中的对象的一个属性(通过Getter函数), 组合成由分割符分隔的字符串.
*
* @param collection 来源集合.
* @param propertyName 要提取的属性名.
* @param separator 分隔符.
*/
public static String extractToString(final Collection collection, final String propertyName, final String separator) {
List list = extractToList(collection, propertyName);
return StringUtils.join(list, separator);
}
/**
* 转换Collection所有元素(通过toString())为String, 中间以 separator分隔。
*/
public static String convertToString(final Collection collection, final String separator) {
return StringUtils.join(collection, separator);
}
/**
* 转换Collection所有元素(通过toString())为String, 每个元素的前面加入prefix,后面加入postfix,如<div>mymessage</div>。
*/
public static String convertToString(final Collection collection, final String prefix, final String postfix) {
StringBuilder builder = new StringBuilder();
for (Object o : collection) {
builder.append(prefix).append(o).append(postfix);
}
return builder.toString();
}
/**
* 判断是否为空.
*/
public static boolean isEmpty(Collection collection) {
return (collection == null || collection.isEmpty());
}
/**
* 取得Collection的第一个元素,如果collection为空返回null.
*/
public static <T> T getFirst(Collection<T> collection) {
if (isEmpty(collection)) {
return null;
}
return collection.iterator().next();
}
/**
* 获取Collection的最后一个元素 ,如果collection为空返回null.
*/
public static <T> T getLast(Collection<T> collection) {
if (isEmpty(collection)) {
return null;
}
//当类型为List时,直接取得最后一个元素 。
if (collection instanceof List) {
List<T> list = (List<T>) collection;
return list.get(list.size() - 1);
}
//其他类型通过iterator滚动到最后一个元素.
Iterator<T> iterator = collection.iterator();
while (true) {
T current = iterator.next();
if (!iterator.hasNext()) {
return current;
}
}
}
/**
* 返回a+b的新List.
*/
public static <T> List<T> union(final Collection<T> a, final Collection<T> b) {
List<T> result = new ArrayList<T>(a);
result.addAll(b);
return result;
}
/**
* 返回a-b的新List.
*/
public static <T> List<T> subtract(final Collection<T> a, final Collection<T> b) {
List<T> list = new ArrayList<T>(a);
for (T element : b) {
list.remove(element);
}
return list;
}
/**
* 返回a与b的交集的新List.
*/
public static <T> List<T> intersection(Collection<T> a, Collection<T> b) {
List<T> list = new ArrayList<T>();
for (T element : a) {
if (b.contains(element)) {
list.add(element);
}
}
return list;
}
}
package com.jeespring.common.utils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.NumberFormat;
import java.util.Set;
/**
* 类型转换器
*
* @author JeeSpring
*
*/
public class Convert
{
/**
* 转换为字符串<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static String toStr(Object value, String defaultValue)
{
if (null == value)
{
return defaultValue;
}
if (value instanceof String)
{
return (String) value;
}
return value.toString();
}
/**
* 转换为字符串<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static String toStr(Object value)
{
return toStr(value, null);
}
/**
* 转换为字符<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Character toChar(Object value, Character defaultValue)
{
if (null == value)
{
return defaultValue;
}
if (value instanceof Character)
{
return (Character) value;
}
final String valueStr = toStr(value, null);
return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
}
/**
* 转换为字符<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Character toChar(Object value)
{
return toChar(value, null);
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Byte toByte(Object value, Byte defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Byte)
{
return (Byte) value;
}
if (value instanceof Number)
{
return ((Number) value).byteValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Byte.parseByte(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Byte toByte(Object value)
{
return toByte(value, null);
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Short toShort(Object value, Short defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Short)
{
return (Short) value;
}
if (value instanceof Number)
{
return ((Number) value).shortValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Short.parseShort(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Short toShort(Object value)
{
return toShort(value, null);
}
/**
* 转换为Number<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Number toNumber(Object value, Number defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Number)
{
return (Number) value;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return NumberFormat.getInstance().parse(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为Number<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Number toNumber(Object value)
{
return toNumber(value, null);
}
/**
* 转换为int<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Integer toInt(Object value, Integer defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Integer)
{
return (Integer) value;
}
if (value instanceof Number)
{
return ((Number) value).intValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Integer.parseInt(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为int<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Integer toInt(Object value)
{
return toInt(value, null);
}
/**
* 转换为Integer数组<br>
*
* @param split 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String str)
{
return toIntArray(",", str);
}
/**
* 转换为Long数组<br>
*
* @param split 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String str)
{
return toLongArray(",", str);
}
/**
* 转换为Integer数组<br>
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String split, String str)
{
if (StringUtils.isEmpty(str))
{
return new Integer[] {};
}
String[] arr = str.split(split);
final Integer[] ints = new Integer[arr.length];
for (int i = 0; i < arr.length; i++)
{
final Integer v = toInt(arr[i], 0);
ints[i] = v;
}
return ints;
}
/**
* 转换为Long数组<br>
*
* @param isIgnoreConvertError 是否忽略转换错误,忽略则给值null
* @param values 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String split, String str)
{
if (StringUtils.isEmpty(str))
{
return new Long[] {};
}
String[] arr = str.split(split);
final Long[] longs = new Long[arr.length];
for (int i = 0; i < arr.length; i++)
{
final Long v = toLong(arr[i], null);
longs[i] = v;
}
return longs;
}
/**
* 转换为String数组<br>
*
* @param split 被转换的值
* @return 结果
*/
public static String[] toStrArray(String str)
{
return toStrArray(",", str);
}
/**
* 转换为String数组<br>
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static String[] toStrArray(String split, String str)
{
return str.split(split);
}
/**
* 转换为long<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Long toLong(Object value, Long defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Long)
{
return (Long) value;
}
if (value instanceof Number)
{
return ((Number) value).longValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
// 支持科学计数法
return new BigDecimal(valueStr.trim()).longValue();
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为long<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Long toLong(Object value)
{
return toLong(value, null);
}
/**
* 转换为double<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Double toDouble(Object value, Double defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Double)
{
return (Double) value;
}
if (value instanceof Number)
{
return ((Number) value).doubleValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
// 支持科学计数法
return new BigDecimal(valueStr.trim()).doubleValue();
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为double<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Double toDouble(Object value)
{
return toDouble(value, null);
}
/**
* 转换为Float<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Float toFloat(Object value, Float defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Float)
{
return (Float) value;
}
if (value instanceof Number)
{
return ((Number) value).floatValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Float.parseFloat(valueStr.trim());
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为Float<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Float toFloat(Object value)
{
return toFloat(value, null);
}
/**
* 转换为boolean<br>
* String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Boolean toBool(Object value, Boolean defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof Boolean)
{
return (Boolean) value;
}
String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
valueStr = valueStr.trim().toLowerCase();
switch (valueStr)
{
case "true":
return true;
case "false":
return false;
case "yes":
return true;
case "ok":
return true;
case "no":
return false;
case "1":
return true;
case "0":
return false;
default:
return defaultValue;
}
}
/**
* 转换为boolean<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Boolean toBool(Object value)
{
return toBool(value, null);
}
/**
* 转换为Enum对象<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
*
* @param clazz Enum的Class
* @param value 值
* @param defaultValue 默认值
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (clazz.isAssignableFrom(value.getClass()))
{
@SuppressWarnings("unchecked")
E myE = (E) value;
return myE;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return Enum.valueOf(clazz, valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为Enum对象<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
*
* @param clazz Enum的Class
* @param value 值
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value)
{
return toEnum(clazz, value, null);
}
/**
* 转换为BigInteger<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof BigInteger)
{
return (BigInteger) value;
}
if (value instanceof Long)
{
return BigInteger.valueOf((Long) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return new BigInteger(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为BigInteger<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigInteger toBigInteger(Object value)
{
return toBigInteger(value, null);
}
/**
* 转换为BigDecimal<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
{
if (value == null)
{
return defaultValue;
}
if (value instanceof BigDecimal)
{
return (BigDecimal) value;
}
if (value instanceof Long)
{
return new BigDecimal((Long) value);
}
if (value instanceof Double)
{
return new BigDecimal((Double) value);
}
if (value instanceof Integer)
{
return new BigDecimal((Integer) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr))
{
return defaultValue;
}
try
{
return new BigDecimal(valueStr);
}
catch (Exception e)
{
return defaultValue;
}
}
/**
* 转换为BigDecimal<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value)
{
return toBigDecimal(value, null);
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @return 字符串
*/
public static String utf8Str(Object obj)
{
return str(obj, CharsetKit.CHARSET_UTF_8);
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charsetName 字符集
* @return 字符串
*/
public static String str(Object obj, String charsetName)
{
return str(obj, Charset.forName(charsetName));
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charset 字符集
* @return 字符串
*/
public static String str(Object obj, Charset charset)
{
if (null == obj)
{
return null;
}
if (obj instanceof String)
{
return (String) obj;
}
else if (obj instanceof byte[] || obj instanceof Byte[])
{
return str((Byte[]) obj, charset);
}
else if (obj instanceof ByteBuffer)
{
return str((ByteBuffer) obj, charset);
}
return obj.toString();
}
/**
* 将byte数组转为字符串
*
* @param bytes byte数组
* @param charset 字符集
* @return 字符串
*/
public static String str(byte[] bytes, String charset)
{
return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
}
/**
* 解码字节码
*
* @param data 字符串
* @param charset 字符集,如果此字段为空,则解码的结果取决于平台
* @return 解码后的字符串
*/
public static String str(byte[] data, Charset charset)
{
if (data == null)
{
return null;
}
if (null == charset)
{
return new String(data);
}
return new String(data, charset);
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, String charset)
{
if (data == null)
{
return null;
}
return str(data, Charset.forName(charset));
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, Charset charset)
{
if (null == charset)
{
charset = Charset.defaultCharset();
}
return charset.decode(data).toString();
}
// ----------------------------------------------------------------------- 全角半角转换
/**
* 半角转全角
*
* @param input String.
* @return 全角字符串.
*/
public static String toSBC(String input)
{
return toSBC(input, null);
}
/**
* 半角转全角
*
* @param input String
* @param notConvertSet 不替换的字符集合
* @return 全角字符串.
*/
public static String toSBC(String input, Set<Character> notConvertSet)
{
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
{
// 跳过不替换的字符
continue;
}
if (c[i] == ' ')
{
c[i] = '\u3000';
}
else if (c[i] < '\177')
{
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
/**
* 全角转半角
*
* @param input String.
* @return 半角字符串
*/
public static String toDBC(String input)
{
return toDBC(input, null);
}
/**
* 替换全角为半角
*
* @param text 文本
* @param notConvertSet 不替换的字符集合
* @return 替换后的字符
*/
public static String toDBC(String text, Set<Character> notConvertSet)
{
char[] c = text.toCharArray();
for (int i = 0; i < c.length; i++)
{
if (null != notConvertSet && notConvertSet.contains(c[i]))
{
// 跳过不替换的字符
continue;
}
if (c[i] == '\u3000')
{
c[i] = ' ';
}
else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
{
c[i] = (char) (c[i] - 65248);
}
}
String returnString = new String(c);
return returnString;
}
/**
* 数字金额大写转换 先写个完整的然后将如零拾替换成零
*
* @param n 数字
* @return 中文大写数字
*/
public static String digitUppercase(double n)
{
String[] fraction = { "角", "分" };
String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
String head = n < 0 ? "负" : "";
n = Math.abs(n);
String s = "";
for (int i = 0; i < fraction.length; i++)
{
s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1)
{
s = "整";
}
int integerPart = (int) Math.floor(n);
for (int i = 0; i < unit[0].length && integerPart > 0; i++)
{
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++)
{
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$",
"零元整");
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package com.jeespring.common.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Cookie工具类
* @author 黄炳桂 516821420@qq.com
* @version 2013-01-15
*/
public class CookieUtils {
/**
* 设置 Cookie(生成时间为1天)
* @param name 名称
* @param value 值
*/
public static void setCookie(HttpServletResponse response, String name, String value) {
setCookie(response, name, value, 60*60*24);
}
/**
* 设置 Cookie
* @param name 名称
* @param value 值
* @param maxAge 生存时间(单位秒)
* @param uri 路径
*/
public static void setCookie(HttpServletResponse response, String name, String value, String path) {
setCookie(response, name, value, path, 60*60*24);
}
/**
* 设置 Cookie
* @param name 名称
* @param value 值
* @param maxAge 生存时间(单位秒)
* @param uri 路径
*/
public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {
setCookie(response, name, value, "/", maxAge);
}
/**
* 设置 Cookie
* @param name 名称
* @param value 值
* @param maxAge 生存时间(单位秒)
* @param uri 路径
*/
public static void setCookie(HttpServletResponse response, String name, String value, String path, int maxAge) {
Cookie cookie = new Cookie(name, null);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
try {
cookie.setValue(URLEncoder.encode(value, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.addCookie(cookie);
}
/**
* 获得指定Cookie的值
* @param name 名称
* @return 值
*/
public static String getCookie(HttpServletRequest request, String name) {
return getCookie(request, null, name, false);
}
/**
* 获得指定Cookie的值,并删除。
* @param name 名称
* @return 值
*/
public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name) {
return getCookie(request, response, name, true);
}
/**
* 获得指定Cookie的值
* @param request 请求对象
* @param response 响应对象
* @param name 名字
* @param isRemove 是否移除
* @return 值
*/
public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name, boolean isRemove) {
String value = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
try {
value = URLDecoder.decode(cookie.getValue(), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (isRemove) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
}
return value;
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
*/
package com.jeespring.common.utils;
import java.text.ParseException;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
/**
* 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
* @author 黄炳桂 516821420@qq.com
* @version 2014-4-15
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
/**
* 得到当前日期字符串 格式(yyyy-MM-dd)
*/
public static String getDate() {
return getDate("yyyy-MM-dd");
}
/**
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
}
return formatDate;
}
/**
* 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss)
*/
public static String formatDateTime(Date date) {
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前时间字符串 格式(HH:mm:ss)
*/
public static String getTime() {
return formatDate(new Date(), "HH:mm:ss");
}
/**
* 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)
*/
public static String getDateTime() {
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前年份字符串 格式(yyyy)
*/
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
/**
* 得到当前月份字符串 格式(MM)
*/
public static String getMonth() {
return formatDate(new Date(), "MM");
}
/**
* 得到当天字符串 格式(dd)
*/
public static String getDay() {
return formatDate(new Date(), "dd");
}
/**
* 得到当前星期字符串 格式(E)星期几
*/
public static String getWeek() {
return formatDate(new Date(), "E");
}
/**
* 日期型字符串转化为日期 格式
* { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
* "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
*/
public static Date parseDate(Object str) {
if (str == null){
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取过去的天数
* @param date
* @return
*/
public static long pastDays(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(24*60*60*1000);
}
/**
* 获取过去的小时
* @param date
* @return
*/
public static long pastHour(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*60*1000);
}
/**
* 获取过去的分钟
* @param date
* @return
*/
public static long pastMinutes(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*1000);
}
/**
* 转换为时间(天,时:分:秒.毫秒)
* @param timeMillis
* @return
*/
public static String formatDateTime(long timeMillis){
long day = timeMillis/(24*60*60*1000);
long hour = (timeMillis/(60*60*1000)-day*24);
long min = ((timeMillis/(60*1000))-day*24*60-hour*60);
long s = (timeMillis/1000-day*24*60*60-hour*60*60-min*60);
long sss = (timeMillis-day*24*60*60*1000-hour*60*60*1000-min*60*1000-s*1000);
return (day>0?day+",":"")+hour+":"+min+":"+s+"."+sss;
}
/**
* 获取两个日期之间的天数
*
* @param before
* @param after
* @return
*/
public static double getDistanceOfTwoDate(Date before, Date after) {
long beforeTime = before.getTime();
long afterTime = after.getTime();
return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
}
/**
* @param args
* @throws ParseException
*/
// public static void main(String[] args) throws ParseException {
// System.out.println(formatDate(parseDate("2010/3/6")));
// System.out.println(getDate("yyyy年MM月dd日 E"));
// long time = new Date().getTime()-parseDate("2012-11-19").getTime();
// System.out.println(time/(24*60*60*1000));
// }
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment