增加测试类
This commit is contained in:
@@ -4,13 +4,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.idgen;
|
package com.jeesite.common.idgen;
|
||||||
|
|
||||||
|
import com.jeesite.common.codec.EncodeUtils;
|
||||||
|
import com.jeesite.common.lang.StringUtils;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import com.jeesite.common.codec.EncodeUtils;
|
|
||||||
import com.jeesite.common.lang.StringUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 封装各种生成唯一性ID算法的工具类.
|
* 封装各种生成唯一性ID算法的工具类.
|
||||||
* @author ThinkGem
|
* @author ThinkGem
|
||||||
@@ -87,38 +87,5 @@ public class IdGen {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// System.out.println(nextCode("8") + " = 9");
|
|
||||||
// System.out.println(nextCode("09") + " = 10");
|
|
||||||
// System.out.println(nextCode("009") + " = 010");
|
|
||||||
// System.out.println(nextCode("T09") + " = T10");
|
|
||||||
// System.out.println(nextCode("TG09") + " = TG10");
|
|
||||||
// System.out.println(nextCode("TG0101") + " = TG0102");
|
|
||||||
// System.out.println(nextCode("TG0109") + " = TG0110");
|
|
||||||
// System.out.println(nextCode("TG02T03") + " = TG02T04");
|
|
||||||
// System.out.println(nextCode("TG02T099") + " = TG02T100");
|
|
||||||
// System.out.println(nextCode("TG02T100") + " = TG02T101");
|
|
||||||
// System.out.println(nextCode("TG02T10A") + " = TG02T10A001");
|
|
||||||
// System.out.println(nextCode("1123117153417957377") + " = 1123117153417957379");
|
|
||||||
// System.out.println(nextCode("0040009") + " = 0040010");
|
|
||||||
// System.out.println(uuid());
|
|
||||||
// System.out.println(nextId());
|
|
||||||
// // 数值型ID重复验证测试
|
|
||||||
// Set<String> set = SetUtils.newHashSet();
|
|
||||||
// try{
|
|
||||||
// for (int i=0; i<100; i++){
|
|
||||||
// String id = String.valueOf(nextId());
|
|
||||||
// if (set.contains(id)){
|
|
||||||
// throw new Exception(id + " exists");
|
|
||||||
// }
|
|
||||||
// set.add(id);
|
|
||||||
// System.out.println(id);
|
|
||||||
// Thread.sleep(100);
|
|
||||||
// }
|
|
||||||
// }catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.idgen;
|
package com.jeesite.common.idgen;
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
|
* 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
|
||||||
* 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
|
* 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
|
||||||
@@ -124,51 +124,5 @@ public class IdWorker {
|
|||||||
private long timeGen() {
|
private long timeGen() {
|
||||||
return System.currentTimeMillis();
|
return System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
// //////////// test ////////////
|
|
||||||
//
|
|
||||||
// public static void main(String[] args) throws Exception {
|
|
||||||
// final Set<Long> set = SetUtils.newHashSet();
|
|
||||||
//
|
|
||||||
// final IdWorker w1 = new IdWorker(-1, -1);
|
|
||||||
// final IdWorker w2 = new IdWorker(-1, -1);
|
|
||||||
// final CyclicBarrier cdl = new CyclicBarrier(100);
|
|
||||||
//
|
|
||||||
// for (int i = 0; i < 1000; i++) {
|
|
||||||
// new Thread(new Runnable() {
|
|
||||||
// @Override
|
|
||||||
// public void run() {
|
|
||||||
// try {
|
|
||||||
// cdl.await();
|
|
||||||
// } catch (InterruptedException e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// } catch (BrokenBarrierException e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // id
|
|
||||||
// Long id = w1.nextId();
|
|
||||||
// if (set.contains(id)){
|
|
||||||
// System.out.println(id + " exists");
|
|
||||||
// }
|
|
||||||
// set.add(id);
|
|
||||||
// System.out.println(id);
|
|
||||||
//
|
|
||||||
// // id2
|
|
||||||
// Long id2 = w2.nextId();
|
|
||||||
// if (set.contains(id2)){
|
|
||||||
// System.out.println(id2 + " exists");
|
|
||||||
// }
|
|
||||||
// set.add(id2);
|
|
||||||
// System.out.println(id2);
|
|
||||||
// }
|
|
||||||
// }).start();
|
|
||||||
// }
|
|
||||||
// try {
|
|
||||||
// TimeUnit.SECONDS.sleep(5);
|
|
||||||
// } catch (InterruptedException e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,20 +4,17 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.image;
|
package com.jeesite.common.image;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.jeesite.common.io.FileUtils;
|
||||||
import java.io.File;
|
import com.jeesite.common.lang.StringUtils;
|
||||||
import java.io.IOException;
|
import net.coobird.thumbnailator.Thumbnails;
|
||||||
|
import net.coobird.thumbnailator.Thumbnails.Builder;
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.jeesite.common.io.FileUtils;
|
import javax.imageio.ImageIO;
|
||||||
import com.jeesite.common.lang.StringUtils;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
import net.coobird.thumbnailator.Thumbnails;
|
import java.io.IOException;
|
||||||
import net.coobird.thumbnailator.Thumbnails.Builder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片处理工具类
|
* 图片处理工具类
|
||||||
@@ -26,7 +23,7 @@ import net.coobird.thumbnailator.Thumbnails.Builder;
|
|||||||
*/
|
*/
|
||||||
public class ImageUtils {
|
public class ImageUtils {
|
||||||
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(ImageUtils.class);
|
private static final Logger logger = LoggerFactory.getLogger(ImageUtils.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缩略图生成,处理一些较大的图片,防止占用太多的网络资源
|
* 缩略图生成,处理一些较大的图片,防止占用太多的网络资源
|
||||||
|
|||||||
@@ -4,26 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.image;
|
package com.jeesite.common.image;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import com.google.zxing.*;
|
||||||
import java.io.File;
|
|
||||||
import java.util.Hashtable;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
|
|
||||||
import com.google.zxing.BarcodeFormat;
|
|
||||||
import com.google.zxing.BinaryBitmap;
|
|
||||||
import com.google.zxing.DecodeHintType;
|
|
||||||
import com.google.zxing.EncodeHintType;
|
|
||||||
import com.google.zxing.LuminanceSource;
|
|
||||||
import com.google.zxing.MultiFormatReader;
|
|
||||||
import com.google.zxing.MultiFormatWriter;
|
|
||||||
import com.google.zxing.Result;
|
|
||||||
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
|
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
|
||||||
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
||||||
import com.google.zxing.common.BitMatrix;
|
import com.google.zxing.common.BitMatrix;
|
||||||
import com.google.zxing.common.HybridBinarizer;
|
import com.google.zxing.common.HybridBinarizer;
|
||||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 条形码和二维码编码解码
|
* 条形码和二维码编码解码
|
||||||
* @author ThinkGem
|
* @author ThinkGem
|
||||||
@@ -33,7 +25,7 @@ public class ZxingUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 条形码编码
|
* 条形码编码
|
||||||
*
|
*
|
||||||
* @param contents
|
* @param contents
|
||||||
* @param width
|
* @param width
|
||||||
* @param height
|
* @param height
|
||||||
@@ -56,7 +48,7 @@ public class ZxingUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 条形码解码
|
* 条形码解码
|
||||||
*
|
*
|
||||||
* @param imgPath
|
* @param imgPath
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
@@ -80,7 +72,7 @@ public class ZxingUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码编码
|
* 二维码编码
|
||||||
*
|
*
|
||||||
* @param contents
|
* @param contents
|
||||||
* @param width
|
* @param width
|
||||||
* @param height
|
* @param height
|
||||||
@@ -102,7 +94,7 @@ public class ZxingUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码解码
|
* 二维码解码
|
||||||
*
|
*
|
||||||
* @param imgPath
|
* @param imgPath
|
||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
@@ -126,32 +118,4 @@ public class ZxingUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
//
|
|
||||||
// // 条形码
|
|
||||||
// String imgPath = "target\\zxing_EAN13.png";
|
|
||||||
// String contents = "6923450657713";
|
|
||||||
// int width = 105, height = 50;
|
|
||||||
//
|
|
||||||
// ZxingUtils.encode(contents, width, height, imgPath);
|
|
||||||
// System.out.println("finished zxing EAN-13 encode.");
|
|
||||||
//
|
|
||||||
// String decodeContent = ZxingUtils.decode(imgPath);
|
|
||||||
// System.out.println("解码内容如下:" + decodeContent);
|
|
||||||
// System.out.println("finished zxing EAN-13 decode.");
|
|
||||||
//
|
|
||||||
// // 二维码
|
|
||||||
// String imgPath2 = "target\\zxing.png";
|
|
||||||
// String contents2 = "Hello Gem, welcome to Zxing!" + "\nBlog [ http://thinkgem.iteye.com ]" + "\nEMail [ thinkgem@163.com ]";
|
|
||||||
// int width2 = 300, height2 = 300;
|
|
||||||
//
|
|
||||||
// ZxingUtils.encode2(contents2, width2, height2, imgPath2);
|
|
||||||
// System.out.println("finished zxing encode.");
|
|
||||||
//
|
|
||||||
// String decodeContent2 = ZxingUtils.decode2(imgPath2);
|
|
||||||
// System.out.println("解码内容如下:" + decodeContent2);
|
|
||||||
// System.out.println("finished zxing decode.");
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -829,7 +829,7 @@ public class FileUtils extends org.apache.commons.io.FileUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取文件扩展名(返回小写)
|
* 获取文件扩展名(返回小写)
|
||||||
* @param pathname 文件名
|
* @param fileName 文件名
|
||||||
* @return 例如:test.jpg 返回: jpg
|
* @return 例如:test.jpg 返回: jpg
|
||||||
*/
|
*/
|
||||||
public static String getFileExtension(String fileName) {
|
public static String getFileExtension(String fileName) {
|
||||||
|
|||||||
@@ -20,13 +20,13 @@ public class IOUtils extends org.apache.commons.io.IOUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据文件路径创建文件输入流处理 以字节为单位(非 unicode )
|
* 根据文件路径创建文件输入流处理 以字节为单位(非 unicode )
|
||||||
* @param path
|
* @param filePath
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static FileInputStream getFileInputStream(String filepath) {
|
public static FileInputStream getFileInputStream(String filePath) {
|
||||||
FileInputStream fileInputStream = null;
|
FileInputStream fileInputStream = null;
|
||||||
try {
|
try {
|
||||||
fileInputStream = new FileInputStream(filepath);
|
fileInputStream = new FileInputStream(filePath);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
System.out.println("错误信息:文件不存在");
|
System.out.println("错误信息:文件不存在");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -36,7 +36,7 @@ public class IOUtils extends org.apache.commons.io.IOUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据文件对象创建文件输入流处理 以字节为单位(非 unicode )
|
* 根据文件对象创建文件输入流处理 以字节为单位(非 unicode )
|
||||||
* @param path
|
* @param file
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static FileInputStream getFileInputStream(File file) {
|
public static FileInputStream getFileInputStream(File file) {
|
||||||
@@ -69,14 +69,14 @@ public class IOUtils extends org.apache.commons.io.IOUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据文件路径创建文件输出流处理 以字节为单位(非 unicode )
|
* 根据文件路径创建文件输出流处理 以字节为单位(非 unicode )
|
||||||
* @param path
|
* @param filePath
|
||||||
* @param append true:文件以追加方式打开,false:则覆盖原文件的内容
|
* @param append true:文件以追加方式打开,false:则覆盖原文件的内容
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static FileOutputStream getFileOutputStream(String filepath, boolean append) {
|
public static FileOutputStream getFileOutputStream(String filePath, boolean append) {
|
||||||
FileOutputStream fileOutputStream = null;
|
FileOutputStream fileOutputStream = null;
|
||||||
try {
|
try {
|
||||||
fileOutputStream = new FileOutputStream(filepath, append);
|
fileOutputStream = new FileOutputStream(filePath, append);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
System.out.println("错误信息:文件不存在");
|
System.out.println("错误信息:文件不存在");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ import java.util.Properties;
|
|||||||
public class PropertyLoader implements org.springframework.boot.env.PropertySourceLoader, Ordered{
|
public class PropertyLoader implements org.springframework.boot.env.PropertySourceLoader, Ordered{
|
||||||
|
|
||||||
private static boolean isLoadJeeSitePropertySource = false;
|
private static boolean isLoadJeeSitePropertySource = false;
|
||||||
private PropertiesPropertySourceLoader propertiesPropertySourceLoader = new PropertiesPropertySourceLoader();
|
private final PropertiesPropertySourceLoader propertiesPropertySourceLoader = new PropertiesPropertySourceLoader();
|
||||||
private YamlPropertySourceLoader yamlPropertySourceLoader = new YamlPropertySourceLoader();
|
private final YamlPropertySourceLoader yamlPropertySourceLoader = new YamlPropertySourceLoader();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getFileExtensions() {
|
public String[] getFileExtensions() {
|
||||||
|
|||||||
@@ -4,17 +4,16 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.io;
|
package com.jeesite.common.io;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.jeesite.common.codec.EncodeUtils;
|
||||||
import java.io.InputStream;
|
import com.jeesite.common.lang.ExceptionUtils;
|
||||||
|
|
||||||
import org.springframework.core.io.DefaultResourceLoader;
|
import org.springframework.core.io.DefaultResourceLoader;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||||
import org.springframework.core.io.support.ResourcePatternResolver;
|
import org.springframework.core.io.support.ResourcePatternResolver;
|
||||||
|
|
||||||
import com.jeesite.common.codec.EncodeUtils;
|
import java.io.IOException;
|
||||||
import com.jeesite.common.lang.ExceptionUtils;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 资源供给类
|
* 资源供给类
|
||||||
@@ -23,8 +22,8 @@ import com.jeesite.common.lang.ExceptionUtils;
|
|||||||
*/
|
*/
|
||||||
public class ResourceUtils extends org.springframework.util.ResourceUtils {
|
public class ResourceUtils extends org.springframework.util.ResourceUtils {
|
||||||
|
|
||||||
private static ResourceLoader resourceLoader;
|
private static final ResourceLoader resourceLoader;
|
||||||
private static ResourcePatternResolver resourceResolver;
|
private static final ResourcePatternResolver resourceResolver;
|
||||||
static{
|
static{
|
||||||
resourceLoader = new DefaultResourceLoader();
|
resourceLoader = new DefaultResourceLoader();
|
||||||
resourceResolver = new PathMatchingResourcePatternResolver(resourceLoader);
|
resourceResolver = new PathMatchingResourcePatternResolver(resourceLoader);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import java.util.Date;
|
|||||||
*/
|
*/
|
||||||
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
||||||
|
|
||||||
private static String[] parsePatterns = {
|
private static final String[] parsePatterns = {
|
||||||
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH", "yyyy-MM",
|
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH", "yyyy-MM",
|
||||||
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy/MM",
|
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy/MM",
|
||||||
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM",
|
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM",
|
||||||
@@ -316,14 +316,4 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
|||||||
return new Date[]{beginDate, endDate};
|
return new Date[]{beginDate, endDate};
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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));
|
|
||||||
// System.out.println(getWeekOfYear(new Date()));
|
|
||||||
// System.out.println(formatDate(getOfDayFirst(parseDate("2015/3/6")),"yyyy-MM-dd HH:mm:ss.sss"));
|
|
||||||
// System.out.println(formatDate(getOfDayLast(parseDate("2015/6/6")),"yyyy-MM-dd HH:mm:ss.sss"));
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -406,16 +406,4 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 测试代码
|
|
||||||
// * @param args
|
|
||||||
// */
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// String html = "<p style=\"text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px 宋体, tahoma, arial, sans-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px\">__eol__ 科技日报讯 (通讯员辛志向 记者王建高)日前,青岛高新区国家级生态工业示范园区通过了由国家环保部及科技部、商务部三部门联合组织的国家正式验收。</p>__eol__<p style=\"text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px 宋体, tahoma, arial, sans-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px\">__eol__ 青岛市委常委、红岛经济区工委书记、管委主任陈飞介绍,建立国家生态工业示范园区是青岛高新区深化和拓展生态创建成果,加快结构调整,推进转型发展,进而辐射带动红岛经济区生态建设的重要抓手。</p>__eol__<p style=\"text-align: left; padding-bottom: 0px; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; margin: 0px; padding-left: 0px; letter-spacing: normal; padding-right: 0px; font: 14px/25px 宋体, tahoma, arial, sans-serif; white-space: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px\">__eol__ 自2007年经国家三部委批准创建以来,青岛高新区高度重视,强化措施,始终按照创建工作要求,坚持生态、生活、生产“三生共融”理念,以生态环境的优化带动经济的发展。创建过程中,坚持“科学性规划,高水平建设,生态化发展”的原则,实施“国际化、高端化、低碳化”三大战略,逐步建立起适应循环经济发展的产业体系和政策体系,形成了完善的生态工业园建设框架和循环经济发展机制,实现了经济高速发展与环境持续改善的良性循环。随着发展环境和核心竞争力的不断提升,通过了ISO14001环境管理体系认证,获得了中国最具投资潜力经济园区、国家科技兴贸创新基地、山东省海外高层次人才创新创业基地等称号,在国家级高新区综合评价中连续多年跻身前列,已经成为山东半岛乃至环渤海区域快速成长、极具创新活力和竞争力的蓝色经济特色高科技产业园区。</p>";
|
|
||||||
// html += "<div style=\"text-indent: 32pt\">__eol__ <span style=\"line-height: 20px; font-size: 20px\"><span style=\"font-family: 宋体\">我市积极支持和引导企业、高校院所“走出去”开展国际科技合作,在国外集聚和利用各种创新资源,增强我市企业和科研院所竞争实力。</span></span></div>__eol__<div align=\"left\" style=\"text-align: left; text-indent: 32pt; text-autospace: \">__eol__ <span style=\"line-height: 20px; font-size: 20px\"><span style=\"font-family: 宋体\">一是在国外设立研发中心。通过合资、并购、控股等方式,在国外设立研发中心和产业园,传播中国文化,提升青岛声誉。如,软控在斯洛伐克设立的研发中心成为我国与中东欧国家合作的成功样板。南车青岛四方积极筹建与泰国等高铁联合研发中心,将成为我国高端成套装备出口的重要研发基地。<span style=\"color: black\">2013</span><span style=\"color: black\">年,我市企业与大学科研机构与国外共建7家联合研发中心。 </span></span></span></div>__eol__<div style=\"text-indent: 32pt\">__eol__ <span style=\"line-height: 20px; font-size: 20px\"><span style=\"font-family: 宋体\"><span style=\"color: black\">二是利用科技资源和渠道助推中小科技企业“走出去”开发新兴市场。</span><span style=\"color: black\">利用尼日利亚总统访华契机,积极向尼方政府代表团推介我市现代农业技术和先进制造业企业。引导我市科技型企业输出技术,拓展西非共同体市场,推动企业转型升级,拓宽“走出去”渠道</span><span style=\"color: black\">。</span></span></span></div>";
|
|
||||||
// html += "<p style='TEXT-ALIGN: center' class=\"sdfasf\"><strong>蓝海技术加以</strong></p><p style='TEXT-ALIGN: center'><em>蓝海技术加以</em></p><p style='TEXT-ALIGN: center'><span style='TEXT-DECORATION: underline'>蓝海技术加以</span></p><p style='TEXT-ALIGN: center'>蓝海技术加以</p><p></p>";
|
|
||||||
// html = html.replaceAll("__eol__", "");
|
|
||||||
// System.out.println(replaceMobileHtml(html));
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,29 +106,5 @@ public class WorkDayUtils {
|
|||||||
public int getHolidays(Calendar d1, Calendar d2) {
|
public int getHolidays(Calendar d1, Calendar d2) {
|
||||||
return this.getDaysBetween(d1, d2) - this.getWorkingDay(d1, d2);
|
return this.getDaysBetween(d1, d2) - this.getWorkingDay(d1, d2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// try {
|
|
||||||
// String strDateStart = "2013-08-01";
|
|
||||||
// String strDateEnd = "2014-08-31";
|
|
||||||
//
|
|
||||||
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
||||||
// Date date_start = sdf.parse(strDateStart);
|
|
||||||
// Date date_end = sdf.parse(strDateEnd);
|
|
||||||
// WorkDayUtils app = new WorkDayUtils();
|
|
||||||
// Calendar cal_start = Calendar.getInstance();
|
|
||||||
// Calendar cal_end = Calendar.getInstance();
|
|
||||||
// cal_start.setTime(date_start);
|
|
||||||
// cal_end.setTime(date_end);
|
|
||||||
// System.out.println("开始日:" + cal_start.get(Calendar.YEAR) + "-" + (cal_start.get(Calendar.MONTH) + 1)
|
|
||||||
// + "-" + cal_start.get(Calendar.DAY_OF_MONTH) + " " + app.getChineseWeek(cal_start));
|
|
||||||
// System.out.println("结束日:" + cal_end.get(Calendar.YEAR) + "-" + (cal_end.get(Calendar.MONTH) + 1)
|
|
||||||
// + "-" + cal_end.get(Calendar.DAY_OF_MONTH) + " " + app.getChineseWeek(cal_end));
|
|
||||||
// System.out.println("工作日:" + app.getWorkingDay(cal_start, cal_end));
|
|
||||||
// System.out.println("休息日:" + app.getHolidays(cal_start, cal_end));
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,24 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.mapper;
|
package com.jeesite.common.mapper;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
||||||
|
import com.fasterxml.jackson.core.JsonGenerator;
|
||||||
|
import com.fasterxml.jackson.core.JsonParser.Feature;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.*;
|
||||||
|
import com.fasterxml.jackson.databind.introspect.Annotated;
|
||||||
|
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
||||||
|
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
||||||
|
import com.fasterxml.jackson.databind.util.JSONPObject;
|
||||||
|
import com.jeesite.common.collect.ListUtils;
|
||||||
|
import com.jeesite.common.io.PropertiesUtils;
|
||||||
|
import com.jeesite.common.lang.DateUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.AnnotatedElement;
|
import java.lang.reflect.AnnotatedElement;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@@ -12,30 +30,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude.Include;
|
|
||||||
import com.fasterxml.jackson.core.JsonGenerator;
|
|
||||||
import com.fasterxml.jackson.core.JsonParser.Feature;
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
||||||
import com.fasterxml.jackson.databind.JavaType;
|
|
||||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
|
||||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
|
||||||
import com.fasterxml.jackson.databind.introspect.Annotated;
|
|
||||||
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
|
|
||||||
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
|
||||||
import com.fasterxml.jackson.databind.util.JSONPObject;
|
|
||||||
import com.jeesite.common.collect.ListUtils;
|
|
||||||
import com.jeesite.common.io.PropertiesUtils;
|
|
||||||
import com.jeesite.common.lang.DateUtils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 简单封装Jackson,实现JSON String<->Java Object的Mapper.
|
* 简单封装Jackson,实现JSON String<->Java Object的Mapper.
|
||||||
* 封装不同的输出风格, 使用不同的builder函数创建实例.
|
* 封装不同的输出风格, 使用不同的builder函数创建实例.
|
||||||
@@ -292,30 +286,5 @@ public class JsonMapper extends ObjectMapper {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// List<Map<String, Object>> list = ListUtils.newArrayList();
|
|
||||||
// Map<String, Object> map = MapUtils.newHashMap();
|
|
||||||
// map.put("id", 1);
|
|
||||||
// map.put("pId", -1);
|
|
||||||
// map.put("name", "根节点");
|
|
||||||
// list.add(map);
|
|
||||||
// map = MapUtils.newHashMap();
|
|
||||||
// map.put("id", 2);
|
|
||||||
// map.put("pId", 1);
|
|
||||||
// map.put("name", "你好");
|
|
||||||
// map.put("open", true);
|
|
||||||
// list.add(map);
|
|
||||||
// String json = JsonMapper.toJson(list);
|
|
||||||
// System.out.println(json);
|
|
||||||
// List<Map<String, Object>> map2 = JsonMapper.fromJson(json, List.class);
|
|
||||||
// System.out.println(map2);
|
|
||||||
// Map<String, Object> map3 = JsonMapper.fromJson("{extendS1:{title:'站牌号',"
|
|
||||||
// + "sort:1,type:'text',maxlength:0,maxlength:30},extendS2:{title:'规模分类',"
|
|
||||||
// + "sort:2,type:'dict',dictType:'scope_category'}}", Map.class);
|
|
||||||
// System.out.println(map3);
|
|
||||||
// List<String> list2 = fromJson("[1,2]", List.class);
|
|
||||||
// System.out.println(list2);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,19 +4,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.mapper;
|
package com.jeesite.common.mapper;
|
||||||
|
|
||||||
import java.io.IOException;
|
import com.fasterxml.jackson.databind.JavaType;
|
||||||
import java.util.TimeZone;
|
import com.jeesite.common.io.PropertiesUtils;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JavaType;
|
import java.io.IOException;
|
||||||
import com.jeesite.common.io.PropertiesUtils;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XML <-> Map、Object
|
* 简单封装Jackson,实现XML String<->Java Object的Mapper.
|
||||||
* @author ThinkGem
|
* @author ThinkGem
|
||||||
* @version 2016-9-2
|
* @version 2016-9-2
|
||||||
*/
|
*/
|
||||||
@@ -24,7 +23,7 @@ public class XmlMapper extends com.fasterxml.jackson.dataformat.xml.XmlMapper{
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(XmlMapper.class);
|
private static final Logger logger = LoggerFactory.getLogger(XmlMapper.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前类的实例持有者(静态内部类,延迟加载,懒汉式,线程安全的单例模式)
|
* 当前类的实例持有者(静态内部类,延迟加载,懒汉式,线程安全的单例模式)
|
||||||
@@ -275,38 +274,4 @@ public class XmlMapper extends com.fasterxml.jackson.dataformat.xml.XmlMapper{
|
|||||||
// return map;
|
// return map;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// public static void main(String[] args) throws Exception {
|
|
||||||
//
|
|
||||||
// File file = new File(FileUtils.getProjectPath()
|
|
||||||
// + "/../modules/core/src/main/resources/spring/spring-context-core.xml");
|
|
||||||
// String xml = FileUtils.readFileToString(file, Charset.defaultCharset());
|
|
||||||
//
|
|
||||||
// System.out.println(xmlToMap(xml, true));
|
|
||||||
// System.out.println(xmlToMapWithAttr(xml, true));
|
|
||||||
//
|
|
||||||
// XmlMapper m = XmlMapper.getInstance();
|
|
||||||
// System.out.println(m.readValue(xml, List.class));
|
|
||||||
// System.out.println(m.readValue(xml, Map.class));
|
|
||||||
//
|
|
||||||
// List<Map<String, Object>> list = ListUtils.newArrayList();
|
|
||||||
// Map<String, Object> map = MapUtils.newHashMap();
|
|
||||||
// map.put("id", 1);
|
|
||||||
// map.put("pId", -1);
|
|
||||||
// map.put("name", "根节点");
|
|
||||||
// list.add(map);
|
|
||||||
// map = MapUtils.newHashMap();
|
|
||||||
// map.put("id", 2);
|
|
||||||
// map.put("pId", 1);
|
|
||||||
// map.put("name", "你好");
|
|
||||||
// map.put("open", true);
|
|
||||||
// list.add(map);
|
|
||||||
//
|
|
||||||
// String s = XmlMapper.getInstance().writeValueAsString(list);
|
|
||||||
// System.out.println(s);
|
|
||||||
//
|
|
||||||
// list = XmlMapper.getInstance().readValue(s, List.class);
|
|
||||||
// System.out.println(list);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -435,22 +435,4 @@ public class VideoUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
//// VideoUtils.setFfmpegFile("d:/tools/video/ffmpeg-4.9/bin/ffmpeg.exe");
|
|
||||||
// VideoUtils.setFfmpegFile("d:/tools/video/libav-10.6-win64/bin/avconv.exe");
|
|
||||||
// VideoUtils.setMencoderFile("d:/tools/video/mencoder-4.9/mencoder.exe");
|
|
||||||
// VideoUtils.setQtFaststartFile("d:/tools/video/qt-faststart/qt-faststart.exe");
|
|
||||||
// final VideoUtils v = new VideoUtils("e:/Users/Administrator/Desktop/mp4/20150001.mp4");
|
|
||||||
//// new Thread(new Runnable() {
|
|
||||||
//// @Override
|
|
||||||
//// public void run() {
|
|
||||||
// System.out.println("img:转换" + (v.cutPic()?"成功":"失败"));
|
|
||||||
// System.out.println("file:转换" + (v.convert()?"成功":"失败"));
|
|
||||||
//// }
|
|
||||||
//// }).start();
|
|
||||||
// System.out.println("inputFile: " + v.getInputFile());
|
|
||||||
// System.out.println("imageFile: " + v.getImgFile());
|
|
||||||
// System.out.println("outputFile: " + v.getOutputFile());
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -188,25 +188,5 @@ public class MacUtils {
|
|||||||
}
|
}
|
||||||
return mac == null ? "" : mac;
|
return mac == null ? "" : mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 测试用的main方法.
|
|
||||||
*
|
|
||||||
* @param argc 运行参数.
|
|
||||||
*/
|
|
||||||
public static void main(String[] argc) {
|
|
||||||
String os = getOSName();
|
|
||||||
System.out.println("os: " + os);
|
|
||||||
if (os.startsWith("windows")) {
|
|
||||||
String mac = getWindowsMACAddress();
|
|
||||||
System.out.println("mac: " + mac);
|
|
||||||
} else if (os.startsWith("linux")) {
|
|
||||||
String mac = getLinuxMACAddress();
|
|
||||||
System.out.println("mac: " + mac);
|
|
||||||
} else {
|
|
||||||
String mac = getUnixMACAddress();
|
|
||||||
System.out.println("mac: " + mac);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,22 +18,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.jeesite.common.text;
|
package com.jeesite.common.text;
|
||||||
|
|
||||||
|
import com.jeesite.common.codec.EncodeUtils;
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.ListIterator;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Stack;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import com.jeesite.common.codec.EncodeUtils;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions for diff, match and patch.
|
* Functions for diff, match and patch.
|
||||||
* Computes the difference between two texts to create a patch.
|
* Computes the difference between two texts to create a patch.
|
||||||
@@ -90,12 +83,12 @@ public class DiffMatchPatch {
|
|||||||
* Internal class for returning results from diff_linesToChars().
|
* Internal class for returning results from diff_linesToChars().
|
||||||
* Other less paranoid languages just use a three-element array.
|
* Other less paranoid languages just use a three-element array.
|
||||||
*/
|
*/
|
||||||
protected static class LinesToCharsResult {
|
public static class LinesToCharsResult {
|
||||||
protected String chars1;
|
public String chars1;
|
||||||
protected String chars2;
|
public String chars2;
|
||||||
protected List<String> lineArray;
|
public List<String> lineArray;
|
||||||
|
|
||||||
protected LinesToCharsResult(String chars1, String chars2,
|
public LinesToCharsResult(String chars1, String chars2,
|
||||||
List<String> lineArray) {
|
List<String> lineArray) {
|
||||||
this.chars1 = chars1;
|
this.chars1 = chars1;
|
||||||
this.chars2 = chars2;
|
this.chars2 = chars2;
|
||||||
@@ -362,7 +355,7 @@ public class DiffMatchPatch {
|
|||||||
* @param deadline Time at which to bail if not yet complete.
|
* @param deadline Time at which to bail if not yet complete.
|
||||||
* @return LinkedList of Diff objects.
|
* @return LinkedList of Diff objects.
|
||||||
*/
|
*/
|
||||||
protected LinkedList<Diff> diff_bisect(String text1, String text2,
|
public LinkedList<Diff> diff_bisect(String text1, String text2,
|
||||||
long deadline) {
|
long deadline) {
|
||||||
// Cache the text lengths to prevent multiple calls.
|
// Cache the text lengths to prevent multiple calls.
|
||||||
int text1_length = text1.length();
|
int text1_length = text1.length();
|
||||||
@@ -509,7 +502,7 @@ public class DiffMatchPatch {
|
|||||||
* the List of unique strings. The zeroth element of the List of
|
* the List of unique strings. The zeroth element of the List of
|
||||||
* unique strings is intentionally blank.
|
* unique strings is intentionally blank.
|
||||||
*/
|
*/
|
||||||
protected LinesToCharsResult diff_linesToChars(String text1, String text2) {
|
public LinesToCharsResult diff_linesToChars(String text1, String text2) {
|
||||||
List<String> lineArray = new ArrayList<String>();
|
List<String> lineArray = new ArrayList<String>();
|
||||||
Map<String, Integer> lineHash = new HashMap<String, Integer>();
|
Map<String, Integer> lineHash = new HashMap<String, Integer>();
|
||||||
// e.g. linearray[4] == "Hello\n"
|
// e.g. linearray[4] == "Hello\n"
|
||||||
@@ -566,7 +559,7 @@ public class DiffMatchPatch {
|
|||||||
* @param diffs LinkedList of Diff objects.
|
* @param diffs LinkedList of Diff objects.
|
||||||
* @param lineArray List of unique strings.
|
* @param lineArray List of unique strings.
|
||||||
*/
|
*/
|
||||||
protected void diff_charsToLines(LinkedList<Diff> diffs,
|
public void diff_charsToLines(LinkedList<Diff> diffs,
|
||||||
List<String> lineArray) {
|
List<String> lineArray) {
|
||||||
StringBuilder text;
|
StringBuilder text;
|
||||||
for (Diff diff : diffs) {
|
for (Diff diff : diffs) {
|
||||||
@@ -621,7 +614,7 @@ public class DiffMatchPatch {
|
|||||||
* @return The number of characters common to the end of the first
|
* @return The number of characters common to the end of the first
|
||||||
* string and the start of the second string.
|
* string and the start of the second string.
|
||||||
*/
|
*/
|
||||||
protected int diff_commonOverlap(String text1, String text2) {
|
public int diff_commonOverlap(String text1, String text2) {
|
||||||
// Cache the text lengths to prevent multiple calls.
|
// Cache the text lengths to prevent multiple calls.
|
||||||
int text1_length = text1.length();
|
int text1_length = text1.length();
|
||||||
int text2_length = text2.length();
|
int text2_length = text2.length();
|
||||||
@@ -671,7 +664,7 @@ public class DiffMatchPatch {
|
|||||||
* suffix of text1, the prefix of text2, the suffix of text2 and the
|
* suffix of text1, the prefix of text2, the suffix of text2 and the
|
||||||
* common middle. Or null if there was no match.
|
* common middle. Or null if there was no match.
|
||||||
*/
|
*/
|
||||||
protected String[] diff_halfMatch(String text1, String text2) {
|
public String[] diff_halfMatch(String text1, String text2) {
|
||||||
if (Diff_Timeout <= 0) {
|
if (Diff_Timeout <= 0) {
|
||||||
// Don't risk returning a non-optimal diff if we have unlimited time.
|
// Don't risk returning a non-optimal diff if we have unlimited time.
|
||||||
return null;
|
return null;
|
||||||
@@ -1580,7 +1573,7 @@ public class DiffMatchPatch {
|
|||||||
* @param loc The location to search around.
|
* @param loc The location to search around.
|
||||||
* @return Best match index or -1.
|
* @return Best match index or -1.
|
||||||
*/
|
*/
|
||||||
protected int match_bitap(String text, String pattern, int loc) {
|
public int match_bitap(String text, String pattern, int loc) {
|
||||||
assert (Match_MaxBits == 0 || pattern.length() <= Match_MaxBits)
|
assert (Match_MaxBits == 0 || pattern.length() <= Match_MaxBits)
|
||||||
: "Pattern too long for this application.";
|
: "Pattern too long for this application.";
|
||||||
|
|
||||||
@@ -1698,7 +1691,7 @@ public class DiffMatchPatch {
|
|||||||
* @param pattern The text to encode.
|
* @param pattern The text to encode.
|
||||||
* @return Hash of character locations.
|
* @return Hash of character locations.
|
||||||
*/
|
*/
|
||||||
protected Map<Character, Integer> match_alphabet(String pattern) {
|
public Map<Character, Integer> match_alphabet(String pattern) {
|
||||||
Map<Character, Integer> s = new HashMap<Character, Integer>();
|
Map<Character, Integer> s = new HashMap<Character, Integer>();
|
||||||
char[] char_pattern = pattern.toCharArray();
|
char[] char_pattern = pattern.toCharArray();
|
||||||
for (char c : char_pattern) {
|
for (char c : char_pattern) {
|
||||||
@@ -1722,7 +1715,7 @@ public class DiffMatchPatch {
|
|||||||
* @param patch The patch to grow.
|
* @param patch The patch to grow.
|
||||||
* @param text Source text.
|
* @param text Source text.
|
||||||
*/
|
*/
|
||||||
protected void patch_addContext(Patch patch, String text) {
|
public void patch_addContext(Patch patch, String text) {
|
||||||
if (text.length() == 0) {
|
if (text.length() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package com.jeesite.common.text;
|
package com.jeesite.common.text;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import net.sourceforge.pinyin4j.PinyinHelper;
|
import net.sourceforge.pinyin4j.PinyinHelper;
|
||||||
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
||||||
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
||||||
@@ -9,6 +7,8 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
|||||||
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
|
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
|
||||||
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼音工具类
|
* 拼音工具类
|
||||||
* @author ThinkGem
|
* @author ThinkGem
|
||||||
@@ -153,13 +153,5 @@ public class PinyinUtils {
|
|||||||
}
|
}
|
||||||
return new String(c);
|
return new String(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
// String str = "你好,123,🅻🅾🆅🅴、世界abc,~!#$_Sdf,女;hello!-";
|
|
||||||
// String str = "你好,123,世界abc,~!#$_Sdf,女;hello!-";
|
|
||||||
// System.out.println(getFirstSpell(str));
|
|
||||||
// System.out.println(getFirstSpell(str, false));
|
|
||||||
// System.out.println(getFullSpell(str));
|
|
||||||
// System.out.println(getFullSpell(str, false));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,235 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
|
||||||
* No deletion without permission, or be held responsible to law.
|
|
||||||
*/
|
|
||||||
package com.jeesite.common.utils.excel;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
|
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
|
||||||
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
|
||||||
import org.apache.poi.xssf.model.SharedStringsTable;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
|
||||||
import org.xml.sax.Attributes;
|
|
||||||
import org.xml.sax.InputSource;
|
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
import org.xml.sax.XMLReader;
|
|
||||||
import org.xml.sax.helpers.DefaultHandler;
|
|
||||||
import org.xml.sax.helpers.XMLReaderFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Excel超大数据读取,抽象Excel2007读取器,excel2007的底层数据结构是xml文件,采用SAX的事件驱动的方法解析
|
|
||||||
* xml,需要继承DefaultHandler,在遇到文件内容时,事件会触发,这种做法可以大大降低 内存的耗费,特别使用于大数据量的文件。
|
|
||||||
* @version 2014-9-2
|
|
||||||
*/
|
|
||||||
public abstract class ExcelReader extends DefaultHandler {
|
|
||||||
|
|
||||||
// 共享字符串表
|
|
||||||
private SharedStringsTable sst;
|
|
||||||
|
|
||||||
// 上一次的内容
|
|
||||||
private String lastContents;
|
|
||||||
private boolean nextIsString;
|
|
||||||
|
|
||||||
private int sheetIndex = -1;
|
|
||||||
private List<String> rowList = new ArrayList<String>();
|
|
||||||
|
|
||||||
// 当前行
|
|
||||||
private int curRow = 0;
|
|
||||||
// 当前列
|
|
||||||
private int curCol = 0;
|
|
||||||
// 日期标志
|
|
||||||
private boolean dateFlag;
|
|
||||||
// 数字标志
|
|
||||||
private boolean numberFlag;
|
|
||||||
|
|
||||||
private boolean isTElement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 遍历工作簿中所有的电子表格
|
|
||||||
* @param filename
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public void process(String filename) throws Exception {
|
|
||||||
OPCPackage pkg = OPCPackage.open(filename);
|
|
||||||
XSSFReader r = new XSSFReader(pkg);
|
|
||||||
SharedStringsTable sst = r.getSharedStringsTable();
|
|
||||||
XMLReader parser = fetchSheetParser(sst);
|
|
||||||
Iterator<InputStream> sheets = r.getSheetsData();
|
|
||||||
while (sheets.hasNext()) {
|
|
||||||
curRow = 0;
|
|
||||||
sheetIndex++;
|
|
||||||
InputStream sheet = sheets.next();
|
|
||||||
InputSource sheetSource = new InputSource(sheet);
|
|
||||||
parser.parse(sheetSource);
|
|
||||||
sheet.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 只遍历一个电子表格,其中sheetId为要遍历的sheet索引,从1开始,1-3
|
|
||||||
* @param filename
|
|
||||||
* @param sheetId
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public void process(String filename, int sheetId) throws Exception {
|
|
||||||
OPCPackage pkg = OPCPackage.open(filename);
|
|
||||||
XSSFReader r = new XSSFReader(pkg);
|
|
||||||
SharedStringsTable sst = r.getSharedStringsTable();
|
|
||||||
XMLReader parser = fetchSheetParser(sst);
|
|
||||||
// 根据 rId# 或 rSheet# 查找sheet
|
|
||||||
InputStream sheet2 = r.getSheet("rId" + sheetId);
|
|
||||||
sheetIndex++;
|
|
||||||
InputSource sheetSource = new InputSource(sheet2);
|
|
||||||
parser.parse(sheetSource);
|
|
||||||
sheet2.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public XMLReader fetchSheetParser(SharedStringsTable sst)
|
|
||||||
throws SAXException {
|
|
||||||
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
|
|
||||||
this.sst = sst;
|
|
||||||
parser.setContentHandler(this);
|
|
||||||
return parser;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void startElement(String uri, String localName, String name,
|
|
||||||
Attributes attributes) throws SAXException {
|
|
||||||
|
|
||||||
// System.out.println("startElement: " + localName + ", " + name + ", " + attributes);
|
|
||||||
|
|
||||||
// c => 单元格
|
|
||||||
if ("c".equals(name)) {
|
|
||||||
// 如果下一个元素是 SST 的索引,则将nextIsString标记为true
|
|
||||||
String cellType = attributes.getValue("t");
|
|
||||||
if ("s".equals(cellType)) {
|
|
||||||
nextIsString = true;
|
|
||||||
} else {
|
|
||||||
nextIsString = false;
|
|
||||||
}
|
|
||||||
// 日期格式
|
|
||||||
String cellDateType = attributes.getValue("s");
|
|
||||||
if ("1".equals(cellDateType)) {
|
|
||||||
dateFlag = true;
|
|
||||||
} else {
|
|
||||||
dateFlag = false;
|
|
||||||
}
|
|
||||||
String cellNumberType = attributes.getValue("s");
|
|
||||||
if ("2".equals(cellNumberType)) {
|
|
||||||
numberFlag = true;
|
|
||||||
} else {
|
|
||||||
numberFlag = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 当元素为t时
|
|
||||||
if ("t".equals(name)) {
|
|
||||||
isTElement = true;
|
|
||||||
} else {
|
|
||||||
isTElement = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 置空
|
|
||||||
lastContents = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void endElement(String uri, String localName, String name)
|
|
||||||
throws SAXException {
|
|
||||||
|
|
||||||
// System.out.println("endElement: " + localName + ", " + name);
|
|
||||||
|
|
||||||
// 根据SST的索引值的到单元格的真正要存储的字符串
|
|
||||||
// 这时characters()方法可能会被调用多次
|
|
||||||
if (nextIsString) {
|
|
||||||
try {
|
|
||||||
int idx = Integer.parseInt(lastContents);
|
|
||||||
lastContents = new XSSFRichTextString(sst.getEntryAt(idx))
|
|
||||||
.toString();
|
|
||||||
} catch (Exception e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// t元素也包含字符串
|
|
||||||
if (isTElement) {
|
|
||||||
String value = lastContents.trim();
|
|
||||||
rowList.add(curCol, value);
|
|
||||||
curCol++;
|
|
||||||
isTElement = false;
|
|
||||||
// v => 单元格的值,如果单元格是字符串则v标签的值为该字符串在SST中的索引
|
|
||||||
// 将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符
|
|
||||||
} else if ("v".equals(name)) {
|
|
||||||
String value = lastContents.trim();
|
|
||||||
value = "".equals(value) ? " " : value;
|
|
||||||
try {
|
|
||||||
// 日期格式处理
|
|
||||||
if (dateFlag) {
|
|
||||||
Date date = HSSFDateUtil.getJavaDate(Double.valueOf(value));
|
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
|
|
||||||
value = dateFormat.format(date);
|
|
||||||
}
|
|
||||||
// 数字类型处理
|
|
||||||
if (numberFlag) {
|
|
||||||
BigDecimal bd = new BigDecimal(value);
|
|
||||||
value = bd.setScale(3, BigDecimal.ROUND_UP).toString();
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
// 转换失败仍用读出来的值
|
|
||||||
}
|
|
||||||
rowList.add(curCol, value);
|
|
||||||
curCol++;
|
|
||||||
} else {
|
|
||||||
// 如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法
|
|
||||||
if ("row".equals(name)) {
|
|
||||||
getRows(sheetIndex + 1, curRow, rowList);
|
|
||||||
rowList.clear();
|
|
||||||
curRow++;
|
|
||||||
curCol = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void characters(char[] ch, int start, int length)
|
|
||||||
throws SAXException {
|
|
||||||
// 得到单元格内容的值
|
|
||||||
lastContents += new String(ch, start, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取行数据回调
|
|
||||||
* @param sheetIndex
|
|
||||||
* @param curRow
|
|
||||||
* @param rowList
|
|
||||||
*/
|
|
||||||
public abstract void getRows(int sheetIndex, int curRow, List<String> rowList);
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 测试方法
|
|
||||||
// */
|
|
||||||
// public static void main(String[] args) throws Exception {
|
|
||||||
//
|
|
||||||
// String file = "E:/销售数据导入.xlsx";
|
|
||||||
//
|
|
||||||
// ExcelReader reader = new ExcelReader() {
|
|
||||||
// @Override
|
|
||||||
// public void getRows(int sheetIndex, int curRow, List<String> rowList) {
|
|
||||||
//
|
|
||||||
// System.out.println("Sheet:" + sheetIndex + ", Row:" + curRow + ", Data:" +rowList);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// reader.process(file, 1);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,343 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
|
||||||
* No deletion without permission, or be held responsible to law.
|
|
||||||
*/
|
|
||||||
package com.jeesite.common.utils.excel;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipFile;
|
|
||||||
import java.util.zip.ZipOutputStream;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.util.CellReference;
|
|
||||||
import org.apache.poi.ss.usermodel.DateUtil;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Excel超大数据写入,抽象excel2007读入器,先构建.xlsx一张模板,改写模板中的sheet.xml,
|
|
||||||
* 使用这种方法 写入.xlsx文件,不需要太大的内存
|
|
||||||
* @version 2014-9-2
|
|
||||||
*/
|
|
||||||
public abstract class ExcelWriter {
|
|
||||||
|
|
||||||
private SpreadsheetWriter sw;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 写入电子表格的主要流程
|
|
||||||
*
|
|
||||||
* @param fileName
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("resource")
|
|
||||||
public void process(String fileName) throws Exception {
|
|
||||||
|
|
||||||
// 建立工作簿和电子表格对象
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
|
||||||
XSSFSheet sheet = wb.createSheet("sheet1");
|
|
||||||
|
|
||||||
// 持有电子表格数据的xml文件名 例如 /xl/worksheets/sheet1.xml
|
|
||||||
String sheetRef = sheet.getPackagePart().getPartName().getName();
|
|
||||||
|
|
||||||
// 保存模板
|
|
||||||
FileOutputStream os = new FileOutputStream("template.xlsx");
|
|
||||||
wb.write(os);
|
|
||||||
os.close();
|
|
||||||
|
|
||||||
// 生成xml文件
|
|
||||||
File tmp = File.createTempFile("sheet", ".xml");
|
|
||||||
Writer fw = new FileWriter(tmp);
|
|
||||||
sw = new SpreadsheetWriter(fw);
|
|
||||||
generate();
|
|
||||||
fw.close();
|
|
||||||
|
|
||||||
// 使用产生的数据替换模板
|
|
||||||
File templateFile = new File("template.xlsx");
|
|
||||||
FileOutputStream out = new FileOutputStream(fileName);
|
|
||||||
substitute(templateFile, tmp, sheetRef.substring(1), out);
|
|
||||||
out.close();
|
|
||||||
// 删除文件之前调用一下垃圾回收器,否则无法删除模板文件
|
|
||||||
System.gc();
|
|
||||||
// 删除临时模板文件
|
|
||||||
if (templateFile.isFile() && templateFile.exists()) {
|
|
||||||
templateFile.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 类使用者应该使用此方法进行写操作
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public abstract void generate() throws Exception;
|
|
||||||
|
|
||||||
public void beginSheet() throws IOException {
|
|
||||||
sw.beginSheet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void insertRow(int rowNum) throws IOException {
|
|
||||||
sw.insertRow(rowNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, String value) throws IOException {
|
|
||||||
sw.createCell(columnIndex, value, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, double value) throws IOException {
|
|
||||||
sw.createCell(columnIndex, value, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void endRow() throws IOException {
|
|
||||||
sw.endRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void endSheet() throws IOException {
|
|
||||||
sw.endSheet();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param zipfile the template file
|
|
||||||
* @param tmpfile the XML file with the sheet data
|
|
||||||
* @param entry the name of the sheet entry to substitute, e.g. xl/worksheets/sheet1.xml
|
|
||||||
* @param out the stream to write the result to
|
|
||||||
*/
|
|
||||||
private static void substitute(File zipfile, File tmpfile, String entry,
|
|
||||||
OutputStream out) throws IOException {
|
|
||||||
ZipFile zip = null;
|
|
||||||
ZipOutputStream zos = null;
|
|
||||||
InputStream is = null;
|
|
||||||
try{
|
|
||||||
zip = new ZipFile(zipfile);
|
|
||||||
zos = new ZipOutputStream(out);
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
|
|
||||||
while (en.hasMoreElements()) {
|
|
||||||
ZipEntry ze = en.nextElement();
|
|
||||||
if (!ze.getName().equals(entry)) {
|
|
||||||
zos.putNextEntry(new ZipEntry(ze.getName()));
|
|
||||||
InputStream is2 = null;
|
|
||||||
try{
|
|
||||||
is2 = zip.getInputStream(ze);
|
|
||||||
copyStream(is2, zos);
|
|
||||||
}finally {
|
|
||||||
if (is2 != null){
|
|
||||||
is2.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
zos.putNextEntry(new ZipEntry(entry));
|
|
||||||
is = new FileInputStream(tmpfile);
|
|
||||||
copyStream(is, zos);
|
|
||||||
}finally {
|
|
||||||
if (is != null){
|
|
||||||
is.close();
|
|
||||||
}
|
|
||||||
if (zos != null){
|
|
||||||
zos.close();
|
|
||||||
}
|
|
||||||
if (zip != null){
|
|
||||||
zip.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void copyStream(InputStream in, OutputStream out)
|
|
||||||
throws IOException {
|
|
||||||
byte[] chunk = new byte[1024];
|
|
||||||
int count;
|
|
||||||
while ((count = in.read(chunk)) >= 0) {
|
|
||||||
out.write(chunk, 0, count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 在写入器中写入电子表格
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static class SpreadsheetWriter {
|
|
||||||
private final Writer _out;
|
|
||||||
private int _rownum;
|
|
||||||
private static String LINE_SEPARATOR = System
|
|
||||||
.getProperty("line.separator");
|
|
||||||
|
|
||||||
public SpreadsheetWriter(Writer out) {
|
|
||||||
_out = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void beginSheet() throws IOException {
|
|
||||||
_out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
|
||||||
+ "<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">");
|
|
||||||
_out.write("<sheetData>" + LINE_SEPARATOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void endSheet() throws IOException {
|
|
||||||
_out.write("</sheetData>");
|
|
||||||
_out.write("</worksheet>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插入新行
|
|
||||||
*
|
|
||||||
* @param rownum
|
|
||||||
* 以0开始
|
|
||||||
*/
|
|
||||||
public void insertRow(int rownum) throws IOException {
|
|
||||||
_out.write("<row r=\"" + (rownum + 1) + "\">" + LINE_SEPARATOR);
|
|
||||||
this._rownum = rownum;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插入行结束标志
|
|
||||||
*/
|
|
||||||
public void endRow() throws IOException {
|
|
||||||
_out.write("</row>" + LINE_SEPARATOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插入新列
|
|
||||||
*
|
|
||||||
* @param columnIndex
|
|
||||||
* @param value
|
|
||||||
* @param styleIndex
|
|
||||||
* @throws IOException
|
|
||||||
*/
|
|
||||||
public void createCell(int columnIndex, String value, int styleIndex)
|
|
||||||
throws IOException {
|
|
||||||
String ref = new CellReference(_rownum, columnIndex)
|
|
||||||
.formatAsString();
|
|
||||||
_out.write("<c r=\"" + ref + "\" t=\"inlineStr\"");
|
|
||||||
if (styleIndex != -1) {
|
|
||||||
_out.write(" s=\"" + styleIndex + "\"");
|
|
||||||
}
|
|
||||||
_out.write(">");
|
|
||||||
_out.write("<is><t>" + encoderXML(value) + "</t></is>");
|
|
||||||
_out.write("</c>");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, String value)
|
|
||||||
throws IOException {
|
|
||||||
createCell(columnIndex, value, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, double value, int styleIndex)
|
|
||||||
throws IOException {
|
|
||||||
String ref = new CellReference(_rownum, columnIndex)
|
|
||||||
.formatAsString();
|
|
||||||
_out.write("<c r=\"" + ref + "\" t=\"n\"");
|
|
||||||
if (styleIndex != -1) {
|
|
||||||
_out.write(" s=\"" + styleIndex + "\"");
|
|
||||||
}
|
|
||||||
_out.write(">");
|
|
||||||
_out.write("<v>" + value + "</v>");
|
|
||||||
_out.write("</c>");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, double value)
|
|
||||||
throws IOException {
|
|
||||||
createCell(columnIndex, value, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createCell(int columnIndex, Calendar value, int styleIndex)
|
|
||||||
throws IOException {
|
|
||||||
createCell(columnIndex, DateUtil.getExcelDate(value, false),
|
|
||||||
styleIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// XML Encode
|
|
||||||
private static final String[] xmlCode = new String[256];
|
|
||||||
|
|
||||||
static {
|
|
||||||
// Special characters
|
|
||||||
xmlCode['\''] = "'";
|
|
||||||
xmlCode['\"'] = "\""; // double quote
|
|
||||||
xmlCode['&'] = "&"; // ampersand
|
|
||||||
xmlCode['<'] = "<"; // lower than
|
|
||||||
xmlCode['>'] = ">"; // greater than
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Encode the given text into xml.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @param string the text to encode
|
|
||||||
* @return the encoded string
|
|
||||||
*/
|
|
||||||
public static String encoderXML(String string) {
|
|
||||||
if (string == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
int n = string.length();
|
|
||||||
char character;
|
|
||||||
String xmlchar;
|
|
||||||
StringBuffer buffer = new StringBuffer();
|
|
||||||
// loop over all the characters of the String.
|
|
||||||
for (int i = 0; i < n; i++) {
|
|
||||||
character = string.charAt(i);
|
|
||||||
// the xmlcode of these characters are added to a StringBuffer
|
|
||||||
// one by one
|
|
||||||
try {
|
|
||||||
xmlchar = xmlCode[character];
|
|
||||||
if (xmlchar == null) {
|
|
||||||
buffer.append(character);
|
|
||||||
} else {
|
|
||||||
buffer.append(xmlCode[character]);
|
|
||||||
}
|
|
||||||
} catch (ArrayIndexOutOfBoundsException aioobe) {
|
|
||||||
buffer.append(character);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return buffer.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * 测试方法
|
|
||||||
// */
|
|
||||||
// public static void main(String[] args) throws Exception {
|
|
||||||
//
|
|
||||||
// String file = "E:/测试导出数据.xlsx";
|
|
||||||
//
|
|
||||||
// ExcelWriter writer = new ExcelWriter() {
|
|
||||||
// @Override
|
|
||||||
// public void generate() throws Exception {
|
|
||||||
//
|
|
||||||
// // 电子表格开始
|
|
||||||
// this.beginSheet();
|
|
||||||
//
|
|
||||||
// for (int rownum = 0; rownum < 100; rownum++) {
|
|
||||||
// // 插入新行
|
|
||||||
// this.insertRow(rownum);
|
|
||||||
//
|
|
||||||
// // 建立新单元格,索引值从0开始,表示第一列
|
|
||||||
// this.createCell(0, "第 " + rownum + " 行");
|
|
||||||
// this.createCell(1, 34343.123456789);
|
|
||||||
// this.createCell(2, "23.67%");
|
|
||||||
// this.createCell(3, "12:12:23");
|
|
||||||
// this.createCell(4, "2014-10-11 12:12:23");
|
|
||||||
// this.createCell(5, "true");
|
|
||||||
// this.createCell(6, "false");
|
|
||||||
//
|
|
||||||
// // 结束行
|
|
||||||
// this.endRow();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 电子表格结束
|
|
||||||
// this.endSheet();
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// writer.process(file);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
52
common/src/test/java/com/jeesite/test/idgen/IdGenTest.java
Normal file
52
common/src/test/java/com/jeesite/test/idgen/IdGenTest.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.idgen;
|
||||||
|
|
||||||
|
import com.jeesite.common.collect.SetUtils;
|
||||||
|
import com.jeesite.common.idgen.IdGen;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID算法测试类.
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class IdGenTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
System.out.println(IdGen.nextCode("8") + " = 9");
|
||||||
|
System.out.println(IdGen.nextCode("09") + " = 10");
|
||||||
|
System.out.println(IdGen.nextCode("009") + " = 010");
|
||||||
|
System.out.println(IdGen.nextCode("T09") + " = T10");
|
||||||
|
System.out.println(IdGen.nextCode("TG09") + " = TG10");
|
||||||
|
System.out.println(IdGen.nextCode("TG0101") + " = TG0102");
|
||||||
|
System.out.println(IdGen.nextCode("TG0109") + " = TG0110");
|
||||||
|
System.out.println(IdGen.nextCode("TG02T03") + " = TG02T04");
|
||||||
|
System.out.println(IdGen.nextCode("TG02T099") + " = TG02T100");
|
||||||
|
System.out.println(IdGen.nextCode("TG02T100") + " = TG02T101");
|
||||||
|
System.out.println(IdGen.nextCode("TG02T10A") + " = TG02T10A001");
|
||||||
|
System.out.println(IdGen.nextCode("1123117153417957377") + " = 1123117153417957379");
|
||||||
|
System.out.println(IdGen.nextCode("0040009") + " = 0040010");
|
||||||
|
System.out.println(IdGen.uuid());
|
||||||
|
System.out.println(IdGen.nextId());
|
||||||
|
// 数值型ID重复验证测试
|
||||||
|
Set<String> set = SetUtils.newHashSet();
|
||||||
|
try{
|
||||||
|
for (int i=0; i<100; i++){
|
||||||
|
String id = String.valueOf(IdGen.nextId());
|
||||||
|
if (set.contains(id)){
|
||||||
|
throw new Exception(id + " exists");
|
||||||
|
}
|
||||||
|
set.add(id);
|
||||||
|
System.out.println(id);
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
}catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.idgen;
|
||||||
|
|
||||||
|
import com.jeesite.common.collect.SetUtils;
|
||||||
|
import com.jeesite.common.idgen.IdWorker;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.BrokenBarrierException;
|
||||||
|
import java.util.concurrent.CyclicBarrier;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* snowflake的id生成测试类
|
||||||
|
*/
|
||||||
|
public class IdWorkerTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
final Set<Long> set = SetUtils.newHashSet();
|
||||||
|
|
||||||
|
final IdWorker w1 = new IdWorker(-1, -1);
|
||||||
|
final IdWorker w2 = new IdWorker(-1, -1);
|
||||||
|
final CyclicBarrier cdl = new CyclicBarrier(100);
|
||||||
|
|
||||||
|
for (int i = 0; i < 1000; i++) {
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
cdl.await();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (BrokenBarrierException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
// id
|
||||||
|
Long id = w1.nextId();
|
||||||
|
if (set.contains(id)){
|
||||||
|
System.out.println(id + " exists");
|
||||||
|
}
|
||||||
|
set.add(id);
|
||||||
|
System.out.println(id);
|
||||||
|
|
||||||
|
// id2
|
||||||
|
Long id2 = w2.nextId();
|
||||||
|
if (set.contains(id2)){
|
||||||
|
System.out.println(id2 + " exists");
|
||||||
|
}
|
||||||
|
set.add(id2);
|
||||||
|
System.out.println(id2);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
TimeUnit.SECONDS.sleep(5);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
25
common/src/test/java/com/jeesite/test/image/ImageTest.java
Normal file
25
common/src/test/java/com/jeesite/test/image/ImageTest.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.image;
|
||||||
|
|
||||||
|
import com.jeesite.common.image.ImageUtils;
|
||||||
|
import com.jeesite.common.io.FileUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 图片压缩测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class ImageTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String baseDir = FileUtils.getProjectPath();
|
||||||
|
String imgPath2 = baseDir + "\\target\\zxing.png";
|
||||||
|
ImageUtils.thumbnails(new File(imgPath2), 100, 100, "jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.image;
|
||||||
|
|
||||||
|
import com.jeesite.common.image.ZxingUtils;
|
||||||
|
import com.jeesite.common.io.FileUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 条形码和二维码编码解码
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class ZxingUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String baseDir = FileUtils.getProjectPath();
|
||||||
|
|
||||||
|
// 条形码
|
||||||
|
String imgPath = baseDir + "\\target\\zxing_EAN13.png";
|
||||||
|
String contents = "6923450657713";
|
||||||
|
int width = 105, height = 50;
|
||||||
|
|
||||||
|
ZxingUtils.encode(contents, width, height, imgPath);
|
||||||
|
System.out.println("finished zxing EAN-13 encode.");
|
||||||
|
|
||||||
|
String decodeContent = ZxingUtils.decode(imgPath);
|
||||||
|
System.out.println("解码内容如下:" + decodeContent);
|
||||||
|
System.out.println("finished zxing EAN-13 decode.");
|
||||||
|
|
||||||
|
// 二维码
|
||||||
|
String imgPath2 = baseDir + "\\target\\zxing.png";
|
||||||
|
String contents2 = "Hello Gem, welcome to Zxing!\nEMail [ thinkgem@163.com ]";
|
||||||
|
int width2 = 300, height2 = 300;
|
||||||
|
|
||||||
|
ZxingUtils.encode2(contents2, width2, height2, imgPath2);
|
||||||
|
System.out.println("finished zxing encode.");
|
||||||
|
|
||||||
|
String decodeContent2 = ZxingUtils.decode2(imgPath2);
|
||||||
|
System.out.println("解码内容如下:" + decodeContent2);
|
||||||
|
System.out.println("finished zxing decode.");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.lang;
|
||||||
|
|
||||||
|
import com.jeesite.common.lang.DateUtils;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日期工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class DateUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws ParseException {
|
||||||
|
System.out.println(DateUtils.formatDate(DateUtils.parseDate("2023/3/6")));
|
||||||
|
System.out.println(DateUtils.getDate("yyyy年MM月dd日 E"));
|
||||||
|
long time = new Date().getTime()-DateUtils.parseDate("2023-11-19").getTime();
|
||||||
|
System.out.println(time/(24*60*60*1000));
|
||||||
|
System.out.println(DateUtils.getWeekOfYear(new Date()));
|
||||||
|
System.out.println(DateUtils.formatDate(DateUtils.getOfDayFirst(DateUtils.parseDate("2023/3/6")),"yyyy-MM-dd HH:mm:ss.sss"));
|
||||||
|
System.out.println(DateUtils.formatDate(DateUtils.getOfDayLast(DateUtils.parseDate("2023/6/6")),"yyyy-MM-dd HH:mm:ss.sss"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.jeesite.test.lang;
|
||||||
|
|
||||||
|
import com.jeesite.common.lang.WorkDayUtils;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工作日计算工具类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class WorkDayUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
String strDateStart = "2023-08-01";
|
||||||
|
String strDateEnd = "2024-08-31";
|
||||||
|
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
Date date_start = sdf.parse(strDateStart);
|
||||||
|
Date date_end = sdf.parse(strDateEnd);
|
||||||
|
WorkDayUtils app = new WorkDayUtils();
|
||||||
|
Calendar cal_start = Calendar.getInstance();
|
||||||
|
Calendar cal_end = Calendar.getInstance();
|
||||||
|
cal_start.setTime(date_start);
|
||||||
|
cal_end.setTime(date_end);
|
||||||
|
System.out.println("开始日:" + cal_start.get(Calendar.YEAR) + "-" + (cal_start.get(Calendar.MONTH) + 1)
|
||||||
|
+ "-" + cal_start.get(Calendar.DAY_OF_MONTH) + " " + app.getChineseWeek(cal_start));
|
||||||
|
System.out.println("结束日:" + cal_end.get(Calendar.YEAR) + "-" + (cal_end.get(Calendar.MONTH) + 1)
|
||||||
|
+ "-" + cal_end.get(Calendar.DAY_OF_MONTH) + " " + app.getChineseWeek(cal_end));
|
||||||
|
System.out.println("工作日:" + app.getWorkingDay(cal_start, cal_end));
|
||||||
|
System.out.println("休息日:" + app.getHolidays(cal_start, cal_end));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.mapper;
|
||||||
|
|
||||||
|
import com.jeesite.common.collect.ListUtils;
|
||||||
|
import com.jeesite.common.collect.MapUtils;
|
||||||
|
import com.jeesite.common.mapper.JsonMapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Json工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class JsonMapperTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
List<Map<String, Object>> list = ListUtils.newArrayList();
|
||||||
|
Map<String, Object> map = MapUtils.newHashMap();
|
||||||
|
map.put("id", 1);
|
||||||
|
map.put("pId", -1);
|
||||||
|
map.put("name", "根节点");
|
||||||
|
list.add(map);
|
||||||
|
map = MapUtils.newHashMap();
|
||||||
|
map.put("id", 2);
|
||||||
|
map.put("pId", 1);
|
||||||
|
map.put("name", "你好");
|
||||||
|
map.put("open", true);
|
||||||
|
list.add(map);
|
||||||
|
String json = JsonMapper.toJson(list);
|
||||||
|
System.out.println(json);
|
||||||
|
List<Map<String, Object>> map2 = JsonMapper.fromJson(json, List.class);
|
||||||
|
System.out.println(map2);
|
||||||
|
Map<String, Object> map3 = JsonMapper.fromJson("{extendS1:{title:'站牌号',"
|
||||||
|
+ "sort:1,type:'text',maxlength:0,maxlength:30},extendS2:{title:'规模分类',"
|
||||||
|
+ "sort:2,type:'dict',dictType:'scope_category'}}", Map.class);
|
||||||
|
System.out.println(map3);
|
||||||
|
List<String> list2 = JsonMapper.fromJson("[1,2]", List.class);
|
||||||
|
System.out.println(list2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.mapper;
|
||||||
|
|
||||||
|
import com.jeesite.common.collect.ListUtils;
|
||||||
|
import com.jeesite.common.collect.MapUtils;
|
||||||
|
import com.jeesite.common.io.FileUtils;
|
||||||
|
import com.jeesite.common.mapper.XmlMapper;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* XML工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class XmlMapperTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
File file = new File(FileUtils.getProjectPath()
|
||||||
|
+ "/../modules/core/src/main/resources/config/logger-core.xml");
|
||||||
|
String xml = FileUtils.readFileToString(file, Charset.defaultCharset());
|
||||||
|
|
||||||
|
XmlMapper m = XmlMapper.getInstance();
|
||||||
|
System.out.println(m.readValue(xml, List.class));
|
||||||
|
System.out.println(m.readValue(xml, Map.class));
|
||||||
|
|
||||||
|
List<Map<String, Object>> list = ListUtils.newArrayList();
|
||||||
|
Map<String, Object> map = MapUtils.newHashMap();
|
||||||
|
map.put("id", 1);
|
||||||
|
map.put("pId", -1);
|
||||||
|
map.put("name", "根节点");
|
||||||
|
list.add(map);
|
||||||
|
map = MapUtils.newHashMap();
|
||||||
|
map.put("id", 2);
|
||||||
|
map.put("pId", 1);
|
||||||
|
map.put("name", "你好");
|
||||||
|
map.put("open", true);
|
||||||
|
list.add(map);
|
||||||
|
|
||||||
|
String s = m.writeValueAsString(list);
|
||||||
|
System.out.println(s);
|
||||||
|
|
||||||
|
list = m.readValue(s, List.class);
|
||||||
|
System.out.println(list);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.jeesite.test.media;
|
||||||
|
|
||||||
|
import com.jeesite.common.media.VideoUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class VideoUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// VideoUtils.setFfmpegFile("e:/jeesite/tools/video/ffmpeg-4.9/bin/ffmpeg.exe");
|
||||||
|
VideoUtils.setFfmpegFile("e:/jeesite/tools/video/libav-10.6-win64/bin/avconv.exe");
|
||||||
|
VideoUtils.setMencoderFile("e:/jeesite/tools/video/mencoder-4.9/mencoder.exe");
|
||||||
|
VideoUtils.setQtFaststartFile("e:/jeesite/tools/video/qt-faststart/qt-faststart.exe");
|
||||||
|
final VideoUtils v = new VideoUtils("d:/dfdf.mp4");
|
||||||
|
new Thread(() -> {
|
||||||
|
System.out.println("img:转换" + (v.cutPic()?"成功":"失败"));
|
||||||
|
System.out.println("file:转换" + (v.convert()?"成功":"失败"));
|
||||||
|
}).start();
|
||||||
|
System.out.println("inputFile: " + v.getInputFile());
|
||||||
|
System.out.println("imageFile: " + v.getImgFile());
|
||||||
|
System.out.println("outputFile: " + v.getOutputFile());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
|
* No deletion without permission, or be held responsible to law.
|
||||||
|
*/
|
||||||
|
package com.jeesite.test.network;
|
||||||
|
|
||||||
|
import com.jeesite.common.network.MacUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MAC地址工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class MacUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] argc) {
|
||||||
|
String os = MacUtils.getOSName();
|
||||||
|
System.out.println("os: " + os);
|
||||||
|
if (os.startsWith("windows")) {
|
||||||
|
String mac = MacUtils.getWindowsMACAddress();
|
||||||
|
System.out.println("mac: " + mac);
|
||||||
|
} else if (os.startsWith("linux")) {
|
||||||
|
String mac = MacUtils.getLinuxMACAddress();
|
||||||
|
System.out.println("mac: " + mac);
|
||||||
|
} else {
|
||||||
|
String mac = MacUtils.getUnixMACAddress();
|
||||||
|
System.out.println("mac: " + mac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
* Copyright (c) 2013-Now http://jeesite.com All rights reserved.
|
||||||
* No deletion without permission, or be held responsible to law.
|
* No deletion without permission, or be held responsible to law.
|
||||||
*/
|
*/
|
||||||
package com.jeesite.test;
|
package com.jeesite.test.reflect;
|
||||||
|
|
||||||
import com.jeesite.common.lang.DateUtils;
|
import com.jeesite.common.lang.DateUtils;
|
||||||
import com.jeesite.common.lang.ObjectUtils;
|
import com.jeesite.common.lang.ObjectUtils;
|
||||||
@@ -16,23 +16,42 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package com.jeesite.common.text;
|
package com.jeesite.test.test;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
|
|
||||||
|
import com.jeesite.common.io.FileUtils;
|
||||||
|
import com.jeesite.common.text.DiffMatchPatch;
|
||||||
import com.jeesite.common.text.DiffMatchPatch.Diff;
|
import com.jeesite.common.text.DiffMatchPatch.Diff;
|
||||||
import com.jeesite.common.text.DiffMatchPatch.LinesToCharsResult;
|
import com.jeesite.common.text.DiffMatchPatch.LinesToCharsResult;
|
||||||
import com.jeesite.common.text.DiffMatchPatch.Patch;
|
import com.jeesite.common.text.DiffMatchPatch.Patch;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 差异工具分析工具类
|
||||||
|
* @author ThinkGem
|
||||||
|
*/
|
||||||
public class DiffMatchPatchTest {
|
public class DiffMatchPatchTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
// DiffMatchPatchTest d = new DiffMatchPatchTest();
|
||||||
|
// d.testDiffCleanupEfficiency();
|
||||||
|
// d.testDiffPrettyHtml();
|
||||||
|
|
||||||
|
String text1 = "花<b>一样</b>的你,花一样的我,花一样的年华,花一样的世界,花一样的未来。";
|
||||||
|
String text2 = "花<b>一</b>样的你,花一样的年华,花一样的我,花一样的未来,花一样的世界。";
|
||||||
|
|
||||||
|
DiffMatchPatch dmp = new DiffMatchPatch();
|
||||||
|
|
||||||
|
LinkedList<Diff> diffs = dmp.diff_main(text1, text2);
|
||||||
|
String result = dmp.diff_prettyHtml(diffs);
|
||||||
|
|
||||||
|
FileUtils.writeToFile("x:\\test.html", result, false);
|
||||||
|
System.out.println(result);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private DiffMatchPatch dmp;
|
private DiffMatchPatch dmp;
|
||||||
private DiffMatchPatch.Operation DELETE = DiffMatchPatch.Operation.DELETE;
|
private DiffMatchPatch.Operation DELETE = DiffMatchPatch.Operation.DELETE;
|
||||||
private DiffMatchPatch.Operation EQUAL = DiffMatchPatch.Operation.EQUAL;
|
private DiffMatchPatch.Operation EQUAL = DiffMatchPatch.Operation.EQUAL;
|
||||||
@@ -878,8 +897,7 @@ public class DiffMatchPatchTest {
|
|||||||
assertEquals(error_msg, list_a, list_b);
|
assertEquals(error_msg, list_a, list_b);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertLinesToCharsResultEquals(String error_msg,
|
private void assertLinesToCharsResultEquals(String error_msg, LinesToCharsResult a, LinesToCharsResult b) {
|
||||||
LinesToCharsResult a, LinesToCharsResult b) {
|
|
||||||
assertEquals(error_msg, a.chars1, b.chars1);
|
assertEquals(error_msg, a.chars1, b.chars1);
|
||||||
assertEquals(error_msg, a.chars2, b.chars2);
|
assertEquals(error_msg, a.chars2, b.chars2);
|
||||||
assertEquals(error_msg, a.lineArray, b.lineArray);
|
assertEquals(error_msg, a.lineArray, b.lineArray);
|
||||||
@@ -931,24 +949,5 @@ public class DiffMatchPatchTest {
|
|||||||
private static void fail(String message) {
|
private static void fail(String message) {
|
||||||
Assert.fail(message);
|
Assert.fail(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public static void main(String[] args) {
|
|
||||||
//
|
|
||||||
//// DiffMatchPatchTest d = new DiffMatchPatchTest();
|
|
||||||
//// d.testDiffCleanupEfficiency();
|
|
||||||
//// d.testDiffPrettyHtml();
|
|
||||||
//
|
|
||||||
// String text1 = "花<b>一样</b>的你,花一样的我,花一样的年华,花一样的世界,花一样的未来。";
|
|
||||||
// String text2 = "花<b>一</b>样的你,花一样的年华,花一样的我,花一样的未来,花一样的世界。";
|
|
||||||
//
|
|
||||||
// DiffMatchPatch dmp = new DiffMatchPatch();
|
|
||||||
//
|
|
||||||
// LinkedList<Diff> diffs = dmp.diff_main(text1, text2);
|
|
||||||
// String result = dmp.diff_prettyHtml(diffs);
|
|
||||||
//
|
|
||||||
// FileUtils.writeToFile("x:\\test.html", result, false);
|
|
||||||
// System.out.println(result);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.jeesite.test.test;
|
||||||
|
|
||||||
|
import com.jeesite.common.text.PinyinUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼音工具测试类
|
||||||
|
* @author ThinkGem
|
||||||
|
*/
|
||||||
|
public class PinyinUtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String str = "你好,123,世界abc,~!#$_Sdf,女;hello!-";
|
||||||
|
System.out.println(PinyinUtils.getFirstSpell(str));
|
||||||
|
System.out.println(PinyinUtils.getFirstSpell(str, false));
|
||||||
|
System.out.println(PinyinUtils.getFullSpell(str));
|
||||||
|
System.out.println(PinyinUtils.getFullSpell(str, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package com.jeesite.test.utils.word;
|
||||||
|
|
||||||
|
import com.jeesite.common.io.FileUtils;
|
||||||
|
import com.jeesite.common.utils.word.WordExport;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Word导出测试类
|
||||||
|
* @version 2023-6-9
|
||||||
|
*/
|
||||||
|
public class WordExportTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
WordExport export = new WordExport();
|
||||||
|
|
||||||
|
String fileName = "classpath:" + StringUtils.substringBeforeLast(StringUtils.replace(
|
||||||
|
WordExport.class.getName(), ".", "/"), "/") + "/Word模版.docx";
|
||||||
|
export.setTemplate(fileName);
|
||||||
|
|
||||||
|
Map<String, String> content = new HashMap<String, String>();
|
||||||
|
content.put("Principles", "格式规范、标准统一、利于阅览");
|
||||||
|
content.put("Purpose", "规范会议操作、提高会议质量");
|
||||||
|
content.put("Scope", "公司会议、部门之间业务协调会议");
|
||||||
|
|
||||||
|
content.put("customerName", "**有限公司");
|
||||||
|
content.put("address", "机场路2号");
|
||||||
|
content.put("userNo", "3021170207");
|
||||||
|
content.put("tradeName", "水泥制造");
|
||||||
|
content.put("price1", "1.085");
|
||||||
|
content.put("price2", "0.906");
|
||||||
|
content.put("price3", "0.433");
|
||||||
|
content.put("numPrice", "0.675");
|
||||||
|
|
||||||
|
content.put("company_name", "**有限公司");
|
||||||
|
content.put("company_address", "机场路2号");
|
||||||
|
export.replaceBookMark(content);
|
||||||
|
|
||||||
|
// 替换表格标签
|
||||||
|
List<Map<String, String>> content2 = new ArrayList<Map<String, String>>();
|
||||||
|
Map<String, String> table1 = new HashMap<String, String>();
|
||||||
|
|
||||||
|
table1.put("MONTH", "*月份");
|
||||||
|
table1.put("SALE_DEP", "75分");
|
||||||
|
table1.put("TECH_CENTER", "80分");
|
||||||
|
table1.put("CUSTOMER_SERVICE", "85分");
|
||||||
|
table1.put("HUMAN_RESOURCES", "90分");
|
||||||
|
table1.put("FINANCIAL", "95分");
|
||||||
|
table1.put("WORKSHOP", "80分");
|
||||||
|
table1.put("TOTAL", "85分");
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
content2.add(table1);
|
||||||
|
}
|
||||||
|
export.fillTableAtBookMark("Table", content2);
|
||||||
|
export.fillTableAtBookMark("month", content2);
|
||||||
|
|
||||||
|
// 表格中文本的替换
|
||||||
|
Map<String, String> table = new HashMap<String, String>();
|
||||||
|
table.put("CUSTOMER_NAME", "**有限公司");
|
||||||
|
table.put("ADDRESS", "机场路2号");
|
||||||
|
table.put("USER_NO", "3021170207");
|
||||||
|
table.put("tradeName", "水泥制造");
|
||||||
|
table.put("PRICE_1", "1.085");
|
||||||
|
table.put("PRICE_2", "0.906");
|
||||||
|
table.put("PRICE_3", "0.433");
|
||||||
|
table.put("NUM_PRICE", "0.675");
|
||||||
|
export.replaceText(table, "Table2");
|
||||||
|
|
||||||
|
// 保存替换后的 Word
|
||||||
|
String outFileName = FileUtils.getProjectPath() + "/target/export.docx";
|
||||||
|
export.saveAs(outFileName);
|
||||||
|
System.out.println("模板:" + fileName);
|
||||||
|
System.out.println("输出:" + outFileName);
|
||||||
|
System.out.println("用时:" + (System.currentTimeMillis() - startTime));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user