package com.aisino.heb.utils.dao;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.rule.Pattern;
import org.omg.CORBA.PUBLIC_MEMBER;
import jxl.Workbook;
/**
*
* @author zxs
*
*/
@SuppressWarnings("unchecked")
public class Utils {
public static String createID() {
return UUID.randomUUID().toString();
}
public static Boolean isNotEmpty(Object obj){
if(obj == null){
return false;
}else{
return true;
}
}
/**
* 判断字符串是否为空值
*
* @param str
* @return 不为空返回真 ,否则为假
*/
public static Boolean isNotEmpty(String str) {
if (str != null && !"".equals(str) && !"null".equals(str)) {
return true;
}
return false;
}
/**
* 转成utf-8
*
* @param str
* @return
*/
public static String toUTF8(String str) {
try {
return new String(str.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
/**
* 导出excel文件
* @param request
* @param response
* @param fileName 文件名
* @param headerNames 表头
* @param bodyNames list每条记录的key值
* @param list 其中放map对象
* @return
* @throws Exception
*/
public static Boolean exportExcel(HttpServletRequest request,
HttpServletResponse response,String fileName, String[] headerNames,String[] bodyNames, List list) {
if (fileName == null) {
fileName = "temp";
}
if(fileName==null||headerNames.length<1){
return false;
}
// if (list == null || list.size()<=0) {
// PrintWriter out;
// try {
// out = response.getWriter();
// out.print("<script language='javascript'>alert('未找到符合条件的记录行!')");
// } catch (IOException e) {
// e.printStackTrace();
// }
// return false;
// }
fileName = fileName+".xls"; //2003-excel格式
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
try {
response.setHeader("Content-Disposition", "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
return false;
}
jxl.write.WritableWorkbook wwb = null;
try {
wwb = Workbook.createWorkbook(response.getOutputStream());
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
//头内容
// jxl.write.Label label00 = new jxl.write.Label(0, 0, "序号");
// ws.addCell(label00);
for (int i = 0; i < headerNames.length; i++) {
jxl.write.Label label01 = new jxl.write.Label(i, 0, headerNames[i]);
ws.addCell(label01);
}
//数据内容
for (int i = 0; i < list.size(); i++) {
//序号
jxl.write.Label label0 = new jxl.write.Label(0, i+1, i+1+"");
ws.addCell(label0);
Map map = (Map)list.get(i);
for (int j = 0,k=1; j < bodyNames.length; j++) {
Object object = map.get(bodyNames[j]);
String val = "";
if (object instanceof Timestamp) {
Timestamp timestamp = (Timestamp)object;
Date date = new Date();
date.setTime(timestamp.getTime());
java.text.SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
val = simpleDateFormat.format(date);
}else if (object instanceof Date) {
java.text.SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
val = simpleDateFormat.format(object);
}else {
val = String.valueOf(map.get(bodyNames[j])); //仓库代码
}
if (val == null || "null".equals(val)) {
val = "";
}
jxl.write.Label label1 = new jxl.write.Label(k++, i+1, val);
ws.addCell(label1);
}
}
// 写入Excel工作表
wwb.write();
wwb.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}finally{
// try {
// //wwb.close();
// } catch (WriteException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
return true;
}
public static String toUtf8(String target){
String rst = "";
try {
rst = new String(target.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rst;
}
/**
* 得到一个字符串的数字和非数字字符串部分
* @param string [0]:是数字部分
* @return
*/
public static String [] getNumAndChars(String string){
String [] rst = new String[2];
char [] charArrays = string.toCharArray();
int size = charArrays.length - 1;
char temp;
while(size>=0){
temp = charArrays[size];
size--;
if (String.valueOf(temp).matches("[0-9]+")) {
continue;
}else {
break;
}
}
size = size+2;
rst[0] = string.substring(size);
rst[1] = string.substring(0, size);
return rst;
}
/**
* 判断一个字符串,是否符合税号格式
* @param string
* @return
*/
public static boolean isShuiHao(String str){
return str.matches("^[A-Za-z0-9]*$");
}
/**
* 判断一个字符串长度
* @param string
* @return
*/
public static boolean getlength(String value) {
int valueLength = 0;
String chinese = "[\u0391-\uFFE5]";
/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */
for (int i = 0; i < value.length(); i++) {
/* 获取一个字符 */
String temp = value.substring(i, i + 1);
/* 判断是否为中文字符 */
if (temp.matches(chinese)) {
/* 中文字符长度为2 */
valueLength += 2;
} else {
/* 其他字符长度为1 */
valueLength += 1;
}
}
if (!(valueLength==15||valueLength==17||valueLength==18||valueLength==20)) {
return false;
}else {
return true;
}
}
/**
* 判断一个字符串,只能为浮点数字
* @param string
* @return
*/
public static boolean isNum(String str){
return str.matches("[0-9]*(\\.?)[0-9]*");
}
/**
* 判断一个字符串,如果最前面是0,计算开头有多少个0
* @param string
* @return
*/
public static int getLingshuliang(String string){
if (string.startsWith("0")) {
char [] charArrays = string.toCharArray();
int size = charArrays.length;
char temp;
int lingshuliang = 0;
for (int i = 0; i < size; i++) {
temp = charArrays[i];
if (String.valueOf(temp).equals("0")) {
lingshuliang++;
}
}
return lingshuliang;
}else {
return 0;
}
}
/**
* 指定一个字符串,将这个字符串加上sl,返回结果
* 字符串格式 :100 ,0001 , 10001
* @param target
* @param sl
* @return
*/
public static String getBulingjieguo(String target,int sl){
//得到开头零的个数
int linggeshu = getLingshuliang(target);//零的个数
//int shuziLength = target.length();//这个数字字符串的长度
int shuzhi = Integer.parseInt(target);//数值
// int shuzhiLength = String.valueOf(shuzhi).length();//数值的长度
int xiangjiarst = shuzhi + sl;//相加后的结果
if (target.length() <= String.valueOf(xiangjiarst).length() || linggeshu == 0) {
return String.valueOf(xiangjiarst);
}
//计算需要补几个零
int bulinggeshu = linggeshu - (String.valueOf(xiangjiarst).length() - String.valueOf(shuzhi).length());
String xiangjiaStr = String.valueOf(xiangjiarst);
while(bulinggeshu > 0){
bulinggeshu--;
xiangjiaStr = "0" + xiangjiaStr;
}
return xiangjiaStr;
}
/**
* 税号验证
* @param value
* @return
*/
// $.validator.addMethod("nsrsbh", function(value, element) {
// return this.optional(element) || /^[0-9a-zA-Z]{15}$|^[0-9a-zA-Z]{17}$|^[0-9a-zA-Z]{20}$/.test(value);
// }, "Please specify a valid tax number");
public static boolean iSnsrsbh(String str){
return str.matches("[0-9a-zA-Z]{15}$|^[0-9a-zA-Z]{17}$|^[0-9a-zA-Z]{20}$");
}
/**
* 相反数
* @param value
* @return
*/
public static Double xiangfanshu(Double value){
if (value > 0 ) {
return -value;
}
return Math.abs(value);
}
final static int[] PARITYBIT = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
final static int[] POWER_LIST = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
5, 8, 4, 2 };
/**
* 身份证号是否基本有效
*
* @param s
* 号码内容
* @return 是否有效,null和""都是false
*/
public static boolean isIdcard(String s) {
if (s == null || (s.length() != 15 && s.length() != 18))
return false;
final char[] cs = s.toUpperCase().toCharArray();
// (1)校验位数
int power = 0;
for (int i = 0; i < cs.length; i++) {// 循环比正则表达式更快
if (i == cs.length - 1 && cs[i] == 'X')
break;// 最后一位可以是X或者x
if (cs[i] < '0' || cs[i] > '9')
return false;
if (i < cs.length - 1)
power += (cs[i] - '0') * POWER_LIST[i];
}
// (2)校验区位码
// (3)校验年份
String year = s.length() == 15 ? "19" + s.substring(6, 8) : s
.substring(6, 10);
final int iyear = Integer.parseInt(year);
if (iyear < 1900 || iyear > Calendar.getInstance().get(Calendar.YEAR)) {
return false;// 1900年的PASS,超过今年的PASS
}
// (4)校验月份
String month = s.length() == 15 ? s.substring(8, 10) : s.substring(10,
12);
final int imonth = Integer.parseInt(month);
if (imonth < 1 || imonth > 12)
return false;
// (5)校验天数
String day = s.length() == 15 ? s.substring(10, 12) : s.substring(12,
14);
final int iday = Integer.parseInt(day);
if (iday < 1 || iday > 31)
return false;
// (6)校验一个合法的年月日
if (!validate(iyear, imonth, iday))
return false;
// (7)校验“校验码”
if (s.length() == 15)
return true;
return cs[cs.length - 1] == PARITYBIT[power % 11];
}
static boolean validate(int year, int month, int day) {
//比如考虑闰月,大小月等
return true;
}
/**
* 功能:设置地区编码
* @return Hashtable 对象
*/
@SuppressWarnings("unchecked")
private static Hashtable GetAreaCode() {
Hashtable hashtable = new Hashtable();
hashtable.put("11", "北京");
hashtable.put("12", "天津");
hashtable.put("13", "河北");
hashtable.put("14", "山西");
hashtable.put("15", "内蒙古");
hashtable.put("21", "辽宁");
hashtable.put("22", "吉林");
hashtable.put("23", "黑龙江");
hashtable.put("31", "上海");
hashtable.put("32", "江苏");
hashtable.put("33", "浙江");
hashtable.put("34", "安徽");
hashtable.put("35", "福建");
hashtable.put("36", "江西");
hashtable.put("37", "山东");
hashtable.put("41", "河南");
hashtable.put("42", "湖北");
hashtable.put("43", "湖南");
hashtable.put("44", "广东");
hashtable.put("45", "广西");
hashtable.put("46", "海南");
hashtable.put("50", "重庆");
hashtable.put("51", "四川");
hashtable.put("52", "贵州");
hashtable.put("53", "云南");
hashtable.put("54", "西藏");
hashtable.put("61", "陕西");
hashtable.put("62", "甘肃");
hashtable.put("63", "青海");
hashtable.put("64", "宁夏");
hashtable.put("65", "新疆");
hashtable.put("71", "台湾");
hashtable.put("81", "香港");
hashtable.put("82", "澳门");
hashtable.put("91", "国外");
return hashtable;
}
/**
* 递归截取上级部门代码
* @return
*/
public static void createParentBmdmsByBmdm(String bmdm, List parentBmdmList) {
if (bmdm.length() < 5) {
return;
}
String parentBmdm = bmdm.substring(0, bmdm.length()-2);
parentBmdmList.add(parentBmdm);
createParentBmdmsByBmdm(parentBmdm,parentBmdmList);
}
/**
* 根据sql查询语句,获得查询总记录数的sql语句
* 比如:
* select o from Organization o where o.parent is null
* 经过转换,可以得到:
* select count(*) from Organization o where o.parent is null
* @param sql
* @return
*/
public static String getCountQuery(String sql){
int index = sql.toUpperCase().indexOf("FROM");
if(index != -1){
/**
* 包头不包尾:
* 字符串:abcdefghijklmn
* substring(5,8) == fgh
*/
return "select count(*) "+sql.substring(index);
}
throw new RuntimeException("无效的SQL查询语句【"+sql+"】");
}
}