import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.security.GeneralSecurityException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import net.sf.json.JSONObject;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;

import com.RSAA.MD5;
import com.tyg.xxhzx.web.enums.DateVO;
import com.tyg.xxhzx.web.vo.CEnergy;
import com.tyg.xxhzx.web.vo.CEnergyR;

/**
* @title CommonUtil
* @description common utility
* @author jiangqiwen
* @date 2015-11-03
*/
public class CommonUtil {

private static Logger logger = Logger.getLogger(CommonUtil.class);
/** 完整时间 yyyy-MM-dd HH:mm:ss */
private static final String simple = "yyyy-MM-dd HH:mm:ss";

public static void main(String[] args) throws Exception {
// String str="情AA感与社a会a";
// System.out.println(insertLineBreak(str,'与'));
// System.out.println(markKeyword(str, "a"));
// System.out.println("ddd技能".length());
// System.out.println(getDayByDate(new java.util.Date(),-1));
//NumberFormat nf = NumberFormat.getNumberInstance();
//nf.setMaximumFractionDigits(1);
//nf.format(countOfPCUser.multiply(BigInteger.valueOf(100)).divide(totalCount)) + "%"
//System.out.println(nf.format(BigInteger.valueOf(12100).doubleValue()/(BigInteger.valueOf(321).doubleValue())));
// System.out.println(nf.format(BigInteger.valueOf(20000).doubleValue()/(BigInteger.valueOf(321).doubleValue())));
// System.out.println((int)(1000+Math.random()*(9999-1000+1)));
//String a = "-11#观看了视频,-12#体验了游戏,-13#阅读了文章,01#现金-充值,02#支付宝-充值,03#网银-充值,04#微信-充值,11#注册-系统赠送,21#连续签到5天-系统赠送,31#上传记录4个-系统赠送,41#分享能量-系统赠送,51#累积5条精评-系统赠送,52#产生1条精评-系统赠送";
//System.out.println(a.substring(a.indexOf("01#")+3, a.indexOf(",02#")));
// System.out.println(getMonthAge(new java.util.Date(),"2013-11-19"));
//Double d = new Double(5);
//System.out.println(-1 * d);
//System.out.println(convertStrToList("1#脏话辱骂,2#色情猥琐,3#广告诈骗,4#地域攻击,5#社会反动",",","#"));
// System.out.println(addSign4Price(-2));
// System.out.println(!isAfterValidDays(new Date(),"2017-02-22 18:36:17"));
// long current=System.currentTimeMillis();//当前时间毫秒数
// long zero=current/(1000*3600*24)*(1000*3600*24)-TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
// long twelve=zero+24*60*60*1000-1;//今天23点59分59秒的毫秒数
// long yesterday=System.currentTimeMillis()-24*60*60*1000;//昨天的这一时间的毫秒数
// System.out.println(DateFormat.convertStr(new Date(current)));//当前时间
// System.out.println(DateFormat.convertStr(new Date(yesterday)));//昨天这一时间点
// System.out.println(DateFormat.convertStr(new Date(zero)));//今天零点零分零秒
// System.out.println(DateFormat.convertStr(new Date(twelve)));//今天23点59分59秒
// System.out.println(MD5.MD5("2018042406"));
// System.out.println(MD5.MD5("2018042407"));

}

/**
* @function insertLineBreak
* @param str 需要处理的字符串
* @param ch 需要在前面插入换行符<br/>的字符位置标识
* @description 对页面上的字符串在指定位置做破行处理
* @return 处理后的字符串
* @author jiangqiwen
* @date 2015-12-29
*/
public static String insertLineBreak(String str,char ch) {
int index = str.indexOf(ch);
if(index < 0) {
return str;
}
StringBuilder sb = new StringBuilder();
sb.append(str.substring(0, index));
sb.append("<br/>" + ch);
sb.append(str.substring(index+1));
return sb.toString();
}

/**
* @function isAccessTokenValid
* @param startTime 取得凭证的时间
* @param expiresIn 证凭有效期,单位:秒
* @description 用户登录的证凭是否到期
* @return boolean
* @author jiangqiwen
* @date 2015-11-03
*/
public static boolean isAccessTokenValid(String startTime, long expiresIn) {
boolean retVal = false;
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = df.parse(startTime);
// access Token在有效期内
if ((System.currentTimeMillis()-d.getTime())/1000 < expiresIn) {
retVal = true;
}
logger.debug("isAccessTokenValid(" + startTime + "," + expiresIn + ") is called and the return value is:" + retVal);
} catch (Exception e) {
e.printStackTrace();
}
return retVal;
}

/**
* @function createLogin
* @description 随机产生用户名(5位随机数)
* @return String 产生的随机数
* @author jiangqiwen
* @date 2015-11-16
*/
public static String createLogin() {
String login = "";
int loginLength = 5;
int[] selectChar = {0,1,2,3,4,5,6,7,8,9};
for(int i=0;i<loginLength;i++){
double charIndex = Math.floor(Math.random()*10);
login +=selectChar[(int) charIndex];
}
return login;
}

/**
* @function getNameByCode4ProvinceAndCity
* @param provCode 省份编码
* @param cityCode 城市编码
* @description 获取省份及城市编码ID对应的文字
* @return String 返回格式:省份名#城市名
* @author jiangqiwen
* @date 2015-11-18
*/
public static String getNameByCode4ProvinceAndCity(int provCode, int cityCode) {
String provName="";
String cityName="";
switch(provCode) {

case 34: //安徽
provName="安徽";
//1 => "合肥", 2 => "芜湖", 3 => "蚌埠", 4 => "淮南",5 => "马鞍山", 6 => "淮北",
//7 => "铜陵", 8 => "安庆",10 => "黄山", 11 => "滁州", 12 => "阜阳", 13 => "宿州",
//14 => "巢湖", 15 => "六安", 16 => "亳州", 17 => "池州", 18 => "宣城"
switch(cityCode) {
case 1: cityName="合肥";break;
case 2: cityName="芜湖";break;
case 3: cityName="蚌埠";break;
case 4: cityName="淮南";break;
case 5: cityName="马鞍山";break;
case 6: cityName="淮北";break;
case 7: cityName="铜陵";break;
case 8: cityName="安庆";break;
case 10: cityName="黄山";break;
case 11: cityName="滁州";break;
case 12: cityName="阜阳";break;
case 13: cityName="宿州";break;
case 14: cityName="巢湖";break;
case 15: cityName="六安";break;
case 16: cityName="亳州";break;
case 17: cityName="池州";break;
case 18: cityName="宣城";break;
}
break;
case 11: //北京
provName="北京";
//1 => "东城区", 2 => "西城区", 3 => "崇文区", 4 => "宣武区", 5 => "朝阳区",
//6 => "丰台区", 7 => "石景山区", 8 => "海淀区", 9 => "门头沟区", 11 => "房山区",
//12 => "通州区", 13 => "顺义区", 14 => "昌平区", 15 => "大兴区", 16 => "怀柔区",
//17 => "平谷区", 28 => "密云县", 29 => "延庆县"
switch(cityCode) {
case 1: cityName="东城区";break;
case 2: cityName="西城区";break;
case 3: cityName="崇文区";break;
case 4: cityName="宣武区";break;
case 5: cityName="朝阳区";break;
case 6: cityName="丰台区";break;
case 7: cityName="石景山区";break;
case 8: cityName="海淀区";break;
case 9: cityName="门头沟区";break;
case 11: cityName="房山区";break;
case 12: cityName="通州区";break;
case 13: cityName="顺义区";break;
case 14: cityName="昌平区";break;
case 15: cityName="大兴区";break;
case 16: cityName="怀柔区";break;
case 17: cityName="平谷区";break;
case 28: cityName="密云县";break;
case 29: cityName="延庆县";break;
}
break;
case 50: //重庆
provName="重庆";
//1 =>"万州区", 2 => "涪陵区", 3 => "渝中区", 4 => "大渡口区", 5 => "江北区",
//6 => "沙坪坝区", 7 => "九龙坡区", 8 => "南岸区", 9 => "北碚区", 10 => "万盛区",
//11 => "双桥区", 12 => "渝北区", 13 => "巴南区", 14 => "黔江区", 15 => "长寿区",
//22 => "綦江县", 23 => "潼南县", 24 => "铜梁县", 25 => "大足县", 26 => "荣昌县",
//27 => "璧山县", 28 => "梁平县", 29 => "城口县", 30 => "丰都县", 31 => "垫江县",
//32 => "武隆县", 33 => "忠县", 34 => "开县", 35 => "云阳县", 36 => "奉节县",
//37 => "巫山县", 38 => "巫溪县", 40 => "石柱土家族自治县",
//41 => "秀山土家族苗族自治县", 42 => "酉阳土家族苗族自治县",
//43 => "彭水苗族土家族自治县", 81 => "江津市", 82 => "合川市",
//83 => "永川市", 84 => "南川市
switch(cityCode) {
case 1: cityName="万州区";break;
case 2: cityName="涪陵区";break;
case 3: cityName="渝中区";break;
case 4: cityName="大渡口区";break;
case 5: cityName="江北区";break;
case 6: cityName="沙坪坝区";break;
case 7: cityName="九龙坡区";break;
case 8: cityName="南岸区";break;
case 9: cityName="北碚区";break;
case 10: cityName="万盛区";break;
case 11: cityName="双桥区";break;
case 12: cityName="渝北区";break;
case 13: cityName="巴南区";break;
case 14: cityName="黔江区";break;
case 15: cityName="长寿区";break;
case 22: cityName="綦江县";break;
case 23: cityName="潼南县";break;
case 24: cityName="铜梁县";break;
case 25: cityName="大足县";break;
case 26: cityName="荣昌县";break;
case 27: cityName="璧山县";break;
case 28: cityName="梁平县";break;
case 29: cityName="城口县";break;
case 30: cityName="丰都县";break;
case 31: cityName="垫江县";break;
case 32: cityName="武隆县";break;
case 33: cityName="忠县";break;
case 34: cityName="开县";break;
case 35: cityName="云阳县";break;
case 36: cityName="奉节县";break;
case 37: cityName="巫山县";break;
case 38: cityName="巫溪县";break;
case 40: cityName="石柱土家族自治县";break;
case 41: cityName="秀山土家族苗族自治县";break;
case 42: cityName="酉阳土家族苗族自治县";break;
case 43: cityName="彭水苗族土家族自治县";break;
case 81: cityName="江津市";break;
case 82: cityName="合川市";break;
case 83: cityName="永川市";break;
case 84: cityName="南川市";break;
}
break;

case 35: //福建
provName="福建";
//1 => "福州", 2 => "厦门", 3 => "莆田", 4 => "三明", 5 => "泉州", 6 => "漳州",
//7 => "南平", 8 => "龙岩", 9 => "宁德"
switch(cityCode) {
case 1: cityName="福州";break;
case 2: cityName="厦门";break;
case 3: cityName="莆田";break;
case 4: cityName="三明";break;
case 5: cityName="泉州";break;
case 6: cityName="漳州";break;
case 7: cityName="南平";break;
case 8: cityName="龙岩";break;
case 9: cityName="宁德";break;
}
break;
case 62: //甘肃
provName="甘肃";
//1 => "兰州", 2 => "嘉峪关", 3 => "金昌", 4 => "白银", 5 => "天水", 6 => "武威",
//7 => "张掖", 8 => "平凉", 9 => "酒泉", 10 => "庆阳", 24 => "定西", 26 => "陇南",
//29 => "临夏", 30 => "甘南"
switch(cityCode) {
case 1: cityName="兰州";break;
case 2: cityName="嘉峪关";break;
case 3: cityName="金昌";break;
case 4: cityName="白银";break;
case 5: cityName="天水";break;
case 6: cityName="武威";break;
case 7: cityName="张掖";break;
case 8: cityName="平凉";break;
case 9: cityName="酒泉";break;
case 10: cityName="庆阳";break;
case 24: cityName="定西";break;
case 26: cityName="陇南";break;
case 29: cityName="临夏";break;
case 30: cityName="甘南";break;
}
break;

case 44: //广东
provName="广东";
//1 => "广州", 2 => "韶关", 3 => "深圳", 4 => "珠海", 5 => "汕头", 6 => "佛山",
//7 => "江门", 8 => "湛江", 9 => "茂名", 12 => "肇庆", 13 => "惠州", 14 => "梅州",
//15 => "汕尾", 16 => "河源", 17 => "阳江", 18 => "清远", 19 => "东莞", 20 => "中山",
//51 => "潮州", 52 => "揭阳", 53 => "云浮"
switch(cityCode) {
case 1: cityName="广州";break;
case 2: cityName="韶关";break;
case 3: cityName="深圳";break;
case 4: cityName="珠海";break;
case 5: cityName="汕头";break;
case 6: cityName="佛山";break;
case 7: cityName="江门";break;
case 8: cityName="湛江";break;
case 9: cityName="茂名";break;
case 12: cityName="肇庆";break;
case 13: cityName="惠州";break;
case 14: cityName="梅州";break;
case 15: cityName="汕尾";break;
case 16: cityName="河源";break;
case 17: cityName="阳江";break;
case 18: cityName="清远";break;
case 19: cityName="东莞";break;
case 20: cityName="中山";break;
case 51: cityName="潮州";break;
case 52: cityName="揭阳";break;
case 53: cityName="云浮";break;
}
break;

case 45: //广西
provName="广西";
//1 => "南宁", 2 => "柳州", 3 => "桂林", 4 => "梧州", 5 => "北海", 6 => "防城港",
//7 => "钦州", 8 => "贵港", 9 => "玉林", 10 => "百色", 11 => "贺州", 12 => "河池",
//21 => "南宁", 22 => "柳州"
switch(cityCode) {
case 1: cityName="南宁";break;
case 2: cityName="柳州";break;
case 3: cityName="桂林";break;
case 4: cityName="梧州";break;
case 5: cityName="北海";break;
case 6: cityName="防城港";break;
case 7: cityName="钦州";break;
case 8: cityName="贵港";break;
case 9: cityName="玉林";break;
case 10: cityName="百色";break;
case 11: cityName="贺州";break;
case 12: cityName="河池";break;
case 21: cityName="南宁";break;
case 22: cityName="柳州";break;
}
break;
case 52: //贵州
provName="贵州";
//1 => "贵阳", 2 => "六盘水", 3 => "遵义", 4 => "安顺", 22 => "铜仁", 23 => "黔西南",
//24 => "毕节", 26 => "黔东南", 27 => "黔南"
switch(cityCode) {
case 1: cityName="贵阳";break;
case 2: cityName="六盘水";break;
case 3: cityName="遵义";break;
case 4: cityName="安顺";break;
case 22: cityName="铜仁";break;
case 23: cityName="黔西南";break;
case 24: cityName="毕节";break;
case 26: cityName="黔东南";break;
case 27: cityName="黔南";break;
}
break;
case 46: //海南
provName="海南";
//1 => "海口", 2 => "三亚", 90 => "其他"
switch(cityCode) {
case 1: cityName="海口";break;
case 2: cityName="三亚";break;
case 90: cityName="其他";break;
}
break;
case 13: //河北
provName="河北";
//1 => "石家庄", 2 => "唐山", 3 => "秦皇岛", 4 => "邯郸", 5 => "邢台", 6 => "保定",
//7 => "张家口", 8 => "承德", 9 => "沧州", 10 => "廊坊", 11 => "衡水"
switch(cityCode) {
case 1: cityName="石家庄";break;
case 2: cityName="唐山";break;
case 3: cityName="秦皇岛";break;
case 4: cityName="邯郸";break;
case 5: cityName="邢台";break;
case 6: cityName="保定";break;
case 7: cityName="张家口";break;
case 8: cityName="承德";break;
case 9: cityName="沧州";break;
case 10: cityName="廊坊";break;
case 11: cityName="衡水";break;
}
break;
case 23: //黑龙江
provName="黑龙江";
//1 => "哈尔滨", 2 => "齐齐哈尔", 3 => "鸡西", 4 => "鹤岗", 5 => "双鸭山", 6 => "大庆",
//7 => "伊春", 8 => "佳木斯", 9 => "七台河", 10 => "牡丹江", 11 => "黑河", 12 => "绥化",
//27 => "大兴安岭"
switch(cityCode) {
case 1: cityName="哈尔滨";break;
case 2: cityName="齐齐哈尔";break;
case 3: cityName="鸡西";break;
case 4: cityName="鹤岗";break;
case 5: cityName="双鸭山";break;
case 6: cityName="大庆";break;
case 7: cityName="伊春";break;
case 8: cityName="佳木斯";break;
case 9: cityName="七台河";break;
case 10: cityName="牡丹江";break;
case 11: cityName="黑河";break;
case 12: cityName="绥化";break;
case 27: cityName="大兴安岭";break;
}
break;
case 41: //河南
provName="河南";
//1 => "郑州", 2 => "开封", 3 => "洛阳", 4 => "平顶山", 5 => "安阳", 6 => "鹤壁",
//7 => "新乡", 8 => "焦作", 9 => "濮阳", 10 => "许昌", 11 => "漯河", 12 => "三门峡",
//13 => "南阳", 14 => "商丘", 15 => "信阳", 16 => "周口", 17 => "驻马店"
switch(cityCode) {
case 1: cityName="郑州";break;
case 2: cityName="开封";break;
case 3: cityName="洛阳";break;
case 4: cityName="平顶山";break;
case 5: cityName="安阳";break;
case 6: cityName="鹤壁";break;
case 7: cityName="新乡";break;
case 8: cityName="焦作";break;
case 9: cityName="濮阳";break;
case 10: cityName="许昌";break;
case 11: cityName="漯河";break;
case 12: cityName="三门峡";break;
case 13: cityName="南阳";break;
case 14: cityName="商丘";break;
case 15: cityName="信阳";break;
case 16: cityName="周口";break;
case 17: cityName="驻马店";break;
}
break;

case 42: //湖北
provName="湖北";
//1 => "武汉", 2 => "黄石", 3 => "十堰", 5 => "宜昌", 6 => "襄樊", 7 => "鄂州",
//8 => "荆门", 9 => "孝感", 10 => "荆州", 11 => "黄冈", 12 => "咸宁", 13 => "随州",
//28 => "恩施土家族苗族自治州"
switch(cityCode) {
case 1: cityName="武汉";break;
case 2: cityName="黄石";break;
case 3: cityName="十堰";break;
case 5: cityName="宜昌";break;
case 6: cityName="襄樊";break;
case 7: cityName="鄂州";break;
case 8: cityName="荆门";break;
case 9: cityName="孝感";break;
case 10: cityName="荆州";break;
case 11: cityName="黄冈";break;
case 12: cityName="咸宁";break;
case 13: cityName="随州";break;
case 28: cityName="恩施土家族苗族自治州";break;
}
break;
case 43: //湖南
provName="湖南";
//1 => "长沙", 2 => "株洲", 3 => "湘潭", 4 => "衡阳", 5 => "邵阳", 6 => "岳阳",
//7 => "常德", 8 => "张家界", 9 => "益阳", 10 => "郴州", 11 => "永州", 12 => "怀化",
//13 => "娄底", 31 => "湘西土家族苗族自治州"
switch(cityCode) {
case 1: cityName="长沙";break;
case 2: cityName="株洲";break;
case 3: cityName="湘潭";break;
case 4: cityName="衡阳";break;
case 5: cityName="邵阳";break;
case 6: cityName="岳阳";break;
case 7: cityName="常德";break;
case 8: cityName="张家界";break;
case 9: cityName="益阳";break;
case 10: cityName="郴州";break;
case 11: cityName="永州";break;
case 12: cityName="怀化";break;
case 13: cityName="娄底";break;
case 31: cityName="湘西土家族苗族自治州";break;
}
break;

case 15: //内蒙古
provName="内蒙古";
//1 => "呼和浩特", 2 => "包头", 3 => "乌海", 4 => "赤峰", 5 => "通辽", 6 => "鄂尔多斯",
//7 => "呼伦贝尔", 22 => "兴安盟", 25 => "锡林郭勒盟", 26 => "乌兰察布盟",
//28 => "巴彦淖尔盟", 29 => "阿拉善盟"
switch(cityCode) {
case 1: cityName="呼和浩特";break;
case 2: cityName="包头";break;
case 3: cityName="乌海";break;
case 4: cityName="赤峰";break;
case 5: cityName="通辽";break;
case 6: cityName="鄂尔多斯";break;
case 7: cityName="呼伦贝尔";break;
case 22: cityName="兴安盟";break;
case 25: cityName="锡林郭勒盟";break;
case 26: cityName="乌兰察布盟";break;
case 28: cityName="巴彦淖尔盟";break;
case 29: cityName="阿拉善盟";break;
}
break;

case 32: //江苏
provName="江苏";
//1 => "南京", 2 => "无锡", 3 => "徐州", 4 => "常州", 5 => "苏州", 6 => "南通",
//7 => "连云港", 8 => "淮安", 9 => "盐城", 10 => "扬州", 11 => "镇江",
//12 => "泰州", 13 => "宿迁"
switch(cityCode) {
case 1: cityName="南京";break;
case 2: cityName="无锡";break;
case 3: cityName="徐州";break;
case 4: cityName="常州";break;
case 5: cityName="苏州";break;
case 6: cityName="南通";break;
case 7: cityName="连云港";break;
case 8: cityName="淮安";break;
case 9: cityName="盐城";break;
case 10: cityName="扬州";break;
case 11: cityName="镇江";break;
case 12: cityName="泰州";break;
case 13: cityName="宿迁";break;
}
break;
case 36: //江西
provName="江西";
//1 => "南昌", 2 => "景德镇", 3 => "萍乡", 4 => "九江", 5 => "新余", 6 => "鹰潭",
//7 => "赣州", 8 => "吉安", 9 => "宜春", 10 => "抚州", 11 => "上饶"
switch(cityCode) {
case 1: cityName="南昌";break;
case 2: cityName="景德镇";break;
case 3: cityName="萍乡";break;
case 4: cityName="九江";break;
case 5: cityName="新余";break;
case 6: cityName="鹰潭";break;
case 7: cityName="赣州";break;
case 8: cityName="吉安";break;
case 9: cityName="宜春";break;
case 10: cityName="抚州";break;
case 11: cityName="上饶";break;
}
break;
case 22: //吉林
provName="吉林";
//1 => "长春", 2 => "吉林", 3 => "四平", 4 => "辽源", 5 => "通化", 6 => "白山",
//7 => "松原", 8 => "白城", 24 => "延边朝鲜族自治州"
switch(cityCode) {
case 1: cityName="长春";break;
case 2: cityName="吉林";break;
case 3: cityName="四平";break;
case 4: cityName="辽源";break;
case 5: cityName="通化";break;
case 6: cityName="白山";break;
case 7: cityName="松原";break;
case 8: cityName="白城";break;
case 24: cityName="延边朝鲜族自治州";break;
}
break;
case 21: //辽宁
provName="辽宁";
//1 => "沈阳", 2 => "大连", 3 => "鞍山", 4 => "抚顺", 5 => "本溪", 6 => "丹东",
//7 => "锦州", 8 => "营口", 9 => "阜新", 10 => "辽阳", 11 => "盘锦", 12 => "铁岭",
//13 => "朝阳", 14 => "葫芦岛"
switch(cityCode) {
case 1: cityName="沈阳";break;
case 2: cityName="大连";break;
case 3: cityName="鞍山";break;
case 4: cityName="抚顺";break;
case 5: cityName="本溪";break;
case 6: cityName="丹东";break;
case 7: cityName="锦州";break;
case 8: cityName="营口";break;
case 9: cityName="阜新";break;
case 10: cityName="辽阳";break;
case 11: cityName="盘锦";break;
case 12: cityName="铁岭";break;
case 13: cityName="朝阳";break;
case 14: cityName="葫芦岛";break;
}
break;
case 64: //宁夏
provName="宁夏";
//1 => "银川", 2 => "石嘴山", 3 => "吴忠", 4 => "固原"
switch(cityCode) {
case 1: cityName="银川";break;
case 2: cityName="石嘴山";break;
case 3: cityName="吴忠";break;
case 4: cityName="固原";break;
}
break;
case 63: //青海
provName="青海";
//1 => "西宁", 21 => "海东", 22 => "海北", 23 => "黄南", 25 => "海南",
//26 => "果洛", 27 => "玉树", 28 => "海西"
switch(cityCode) {
case 1: cityName="西宁";break;
case 21: cityName="海东";break;
case 22: cityName="海北";break;
case 23: cityName="黄南";break;
case 25: cityName="海南";break;
case 26: cityName="果洛";break;
case 27: cityName="玉树";break;
case 28: cityName="海西";break;
}
break;

case 14: //山西
provName="山西";
//1 => "太原", 2 => "大同", 3 => "阳泉", 4 => "长治", 5 => "晋城", 6 => "朔州",
//7 => "晋中", 8 => "运城", 9 => "忻州", 10 => "临汾", 11 => "吕梁"
switch(cityCode) {
case 1: cityName="太原";break;
case 2: cityName="大同";break;
case 3: cityName="阳泉";break;
case 4: cityName="长治";break;
case 5: cityName="晋城";break;
case 6: cityName="朔州";break;
case 7: cityName="晋中";break;
case 8: cityName="运城";break;
case 9: cityName="忻州";break;
case 10: cityName="临汾";break;
case 11: cityName="吕梁";break;
}
break;
case 37: //山东
provName="山东";
//1 => "济南", 2 => "青岛", 3 => "淄博", 4 => "枣庄", 5 => "东营", 6 => "烟台",
//7 => "潍坊", 8 => "济宁", 9 => "泰安", 10 => "威海", 11 => "日照", 12 => "莱芜",
//13 => "临沂", 14 => "德州", 15 => "聊城", 16 => "滨州", 17 => "菏泽"
switch(cityCode) {
case 1: cityName="济南";break;
case 2: cityName="青岛";break;
case 3: cityName="淄博";break;
case 4: cityName="枣庄";break;
case 5: cityName="东营";break;
case 6: cityName="烟台";break;
case 7: cityName="潍坊";break;
case 8: cityName="济宁";break;
case 9: cityName="泰安";break;
case 10: cityName="威海";break;
case 11: cityName="日照";break;
case 12: cityName="莱芜";break;
case 13: cityName="临沂";break;
case 14: cityName="德州";break;
case 15: cityName="聊城";break;
case 16: cityName="滨州";break;
case 17: cityName="菏泽";break;
}
break;

case 31: //上海
provName="上海";
//1 => "黄浦区", 3 => "卢湾区", 4 => "徐汇区", 5 => "长宁区", 6 => "静安区",
//7 => "普陀区", 8 => "闸北区", 9 => "虹口区", 10 => "杨浦区", 12 => "闵行区",
//13 => "宝山区", 14 => "嘉定区", 15 => "浦东新区", 16 => "金山区", 17 => "松江区",
//18 => "青浦区", 19 => "南汇区", 20 => "奉贤区", 30 => "崇明县"
switch(cityCode) {
case 1: cityName="黄浦区";break;
case 3: cityName="卢湾区";break;
case 4: cityName="徐汇区";break;
case 5: cityName="长宁区";break;
case 6: cityName="静安区";break;
case 7: cityName="普陀区";break;
case 8: cityName="闸北区";break;
case 9: cityName="虹口区";break;
case 10: cityName="杨浦区";break;
case 12: cityName="闵行区";break;
case 13: cityName="宝山区";break;
case 14: cityName="嘉定区";break;
case 15: cityName="浦东新区";break;
case 16: cityName="金山区";break;
case 17: cityName="松江区";break;
case 18: cityName="青浦区";break;
case 19: cityName="南汇区";break;
case 20: cityName="奉贤区";break;
case 30: cityName="崇明县";break;
}
break;

case 51: //四川
provName="四川";
//1 => "成都", 3 => "自贡", 4 => "攀枝花", 5 => "泸州", 6 => "德阳", 7 => "绵阳",
//8 => "广元", 9 => "遂宁", 10 => "内江", 11 => "乐山", 13 => "南充", 14 => "眉山",
//15 => "宜宾", 16 => "广安", 17 => "达州", 18 => "雅安", 19 => "巴中", 20 => "资阳",
//32 => "阿坝", 33 => "甘孜", 34 => "凉山"
switch(cityCode) {
case 1: cityName="成都";break;
case 3: cityName="自贡";break;
case 4: cityName="攀枝花";break;
case 5: cityName="泸州";break;
case 6: cityName="德阳";break;
case 7: cityName="绵阳";break;
case 8: cityName="广元";break;
case 9: cityName="遂宁";break;
case 10: cityName="内江";break;
case 11: cityName="乐山";break;
case 12: cityName="通州区";break;
case 13: cityName="南充";break;
case 14: cityName="眉山";break;
case 15: cityName="宜宾";break;
case 16: cityName="广安";break;
case 17: cityName="达州";break;
case 18: cityName="雅安";break;
case 19: cityName="巴中";break;
case 20: cityName="资阳";break;
case 32: cityName="阿坝";break;
case 33: cityName="甘孜";break;
case 34: cityName="凉山";break;
}
break;
case 12: //天津
provName="天津";
//1 => "和平区", 2 => "河东区", 3 => "河西区", 4 => "南开区", 5 => "河北区",
//6 => "红桥区", 7 => "塘沽区", 8 => "汉沽区", 9 => "大港区", 10 => "东丽区",
//11 => "西青区", 12 => "津南区", 13 => "北辰区", 14 => "武清区", 15 => "宝坻区",
//21 => "宁河县", 23 => "静海县", 25 => "蓟县"
switch(cityCode) {
case 1: cityName="和平区";break;
case 2: cityName="河东区";break;
case 3: cityName="河西区";break;
case 4: cityName="南开区";break;
case 5: cityName="河北区";break;
case 6: cityName="红桥区";break;
case 7: cityName="塘沽区";break;
case 8: cityName="汉沽区";break;
case 9: cityName="大港区";break;
case 10: cityName="东丽区";break;
case 11: cityName="西青区";break;
case 12: cityName="津南区";break;
case 13: cityName="北辰区";break;
case 14: cityName="武清区";break;
case 15: cityName="宝坻区";break;
case 21: cityName="宁河县";break;
case 23: cityName="静海县";break;
case 25: cityName="蓟县";break;
}
break;
case 54: //西藏
provName="西藏";
//1 => "拉萨", 21 => "昌都", 22 => "山南", 23 => "日喀则", 24 => "那曲",
//25 => "阿里", 26 => "林芝"
switch(cityCode) {
case 1: cityName="拉萨";break;
case 21: cityName="昌都";break;
case 22: cityName="山南";break;
case 23: cityName="日喀则";break;
case 24: cityName="那曲";break;
case 25: cityName="阿里";break;
case 26: cityName="林芝";break;
}
break;
case 65: //新疆
provName="新疆";
//1 => "乌鲁木齐", 2 => "克拉玛依", 21 => "吐鲁番", 22 => "哈密", 23 => "昌吉",
//27 => "博尔塔拉", 28 => "巴音郭楞", 29 => "阿克苏", 30 => "克孜勒苏",
//31 => "喀什", 32 => "和田", 40 => "伊犁", 42 => "塔城", 43 => "阿勒泰"
switch(cityCode) {
case 1: cityName="乌鲁木齐";break;
case 2: cityName="克拉玛依";break;
case 21: cityName="吐鲁番";break;
case 22: cityName="哈密";break;
case 23: cityName="昌吉";break;
case 27: cityName="博尔塔拉";break;
case 28: cityName="巴音郭楞";break;
case 29: cityName="阿克苏";break;
case 30: cityName="克孜勒苏";break;
case 31: cityName="喀什";break;
case 32: cityName="和田";break;
case 40: cityName="伊犁";break;
case 42: cityName="塔城";break;
case 43: cityName="阿勒泰";break;
}
break;
case 53: //云南
provName="云南";
//1 => "昆明", 3 => "曲靖", 4 => "玉溪", 5 => "保山", 6 => "昭通",7 => "丽江", 8 => "普洱",9 => "临沧",10 => "昭通",
//23 => "楚雄", 25 => "红河", 26 => "文山", 27 => "思茅", 28 => "西双版纳",
//29 => "大理", 31 => "德宏", 33 => "怒江", 34 => "迪庆"
switch(cityCode) {
case 1: cityName="昆明";break;
case 3: cityName="曲靖";break;
case 4: cityName="玉溪";break;
case 5: cityName="保山";break;
case 6: cityName="昭通";break;
case 7: cityName="丽江";break;
case 8: cityName="普洱";break;
case 9: cityName="临沧";break;
case 10: cityName="昭通";break;
case 23: cityName="楚雄";break;
case 25: cityName="红河";break;
case 26: cityName="文山";break;
case 27: cityName="思茅";break;
case 28: cityName="西双版纳";break;
case 29: cityName="大理";break;
case 31: cityName="德宏";break;
case 33: cityName="怒江";break;
case 34: cityName="迪庆";break;
}
break;
case 33: //浙江
provName="浙江";
//1 => "杭州", 2 => "宁波", 3 => "温州", 4 => "嘉兴", 5 => "湖州", 6 => "绍兴",
//7 => "金华", 8 => "衢州", 9 => "舟山", 10 => "台州", 11 => "丽水"
switch(cityCode) {
case 1: cityName="杭州";break;
case 2: cityName="宁波";break;
case 3: cityName="温州";break;
case 4: cityName="嘉兴";break;
case 5: cityName="湖州";break;
case 6: cityName="绍兴";break;
case 7: cityName="金华";break;
case 8: cityName="衢州";break;
case 9: cityName="舟山";break;
case 10: cityName="台州";break;
case 11: cityName="丽水";break;
}
break;
case 61: //陕西
provName="陕西";
//1 => "西安", 2 => "铜川", 3 => "宝鸡", 4 => "咸阳", 5 => "渭南", 6 => "延安",
//7 => "汉中", 8 => "榆林", 9 => "安康", 10 => "商洛"
switch(cityCode) {
case 1: cityName="西安";break;
case 2: cityName="铜川";break;
case 3: cityName="宝鸡";break;
case 4: cityName="咸阳";break;
case 5: cityName="渭南";break;
case 6: cityName="延安";break;
case 7: cityName="汉中";break;
case 8: cityName="榆林";break;
case 9: cityName="安康";break;
case 10: cityName="商洛";break;
}
break;
case 71: //台湾
provName="台湾";
//1 => "台北", 2 => "高雄", 90 => "其他"
switch(cityCode) {
case 1: cityName="台北";break;
case 2: cityName="高雄";break;
case 90: cityName="其他";break;
}
break;
case 81: //香港
provName="香港";
//1 => "香港"
switch(cityCode) {
case 1: cityName="香港";break;
}
break;
case 82: //澳门
provName="澳门";
//1 => "澳门"
switch(cityCode) {
case 1: cityName="澳门";break;
}
break;
case 400: //海外
provName="海外";
//1 => "美国", 2 => "英国", 3 => "法国", 4 => "俄罗斯", 5 => "加拿大",
//6 => "巴西", 7 => "澳大利亚", 8 => "印尼", 9 => "泰国", 10 => "马来西亚",
//11 => "新加坡", 12 => "菲律宾", 13 => "越南", 14 => "印度", 15 => "日本", 16 => "其他"
switch(cityCode) {
case 1: cityName="美国";break;
case 2: cityName="英国";break;
case 3: cityName="法国";break;
case 4: cityName="俄罗斯";break;
case 5: cityName="加拿大";break;
case 6: cityName="巴西";break;
case 7: cityName="澳大利亚";break;
case 8: cityName="印尼";break;
case 9: cityName="泰国";break;
case 10: cityName="马来西亚";break;
case 11: cityName="新加坡";break;
case 12: cityName="菲律宾";break;
case 13: cityName="越南";break;
case 14: cityName="印度";break;
case 15: cityName="日本";break;
case 16: cityName="其他";break;
}
break;
case 100: //其他
provName="其他";
cityName="";
break;
}
return provName+"#"+cityName;
}

/**
* @function markKeyword
* @param input 需要处理的文本
* @param regex 要高亮显示的关键字
* @description 高亮显示关键字
* @return 处理后的字符串
* @author jiangqiwen
* @date 2016-01-21
*/
public static String markKeyword(String input ,String regex) {
if (StringUtils.isBlank(regex)) {
return input;
}
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
StringBuffer sb = new StringBuffer();
boolean result = m.find();
while (result)
{
m.appendReplacement(sb, "<m>" + m.group() + "</m>");//把搜索关键字设置为橙色
result = m.find();
}
m.appendTail(sb);
//logger.debug("input="+input +" and the word after replacment of "+ regex + " is:"+ sb.toString());
return sb.toString();
}

/**
* @function getRandomIndex
* @param nMaxInexNum 需要处理的数字
* @description 获取以时间为种子的随机数
* @return 处理后的随机数
* @author jiangqiwen
* @date 2016-04-19
*/
public static int getRandomIndex(int nMaxInexNum) {
int nIndex = 0;

if (nMaxInexNum <= 0) {
logger.debug("nMaxInexNum is not correct. nMaxInexNum=" + nMaxInexNum);
}
Random ranNum = new Random();
int randomIndex_1 = (ranNum.nextInt() % nMaxInexNum + nMaxInexNum) % nMaxInexNum;
int randomIndex_2 = (ranNum.nextInt() % nMaxInexNum + nMaxInexNum) % nMaxInexNum;
int randomIndex_3 = (ranNum.nextInt() % nMaxInexNum + nMaxInexNum) % nMaxInexNum;

nIndex = (randomIndex_1 + randomIndex_2 + randomIndex_3) % nMaxInexNum;

return nIndex;
}

/**
* @function encrypt
* @description 访问支付宝2.0接口前,对请求的业务报文进行AES加密生成密文
* 接口请求网关为:https://openapi.alipay.com/gateway.do,入参需要传入app_id,method等参数
* 查看APPID和配置秘钥入口说明:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.B2TDyr&treeId=115&articleId=104105&docType=1#s4
* @return 加密后的字符窜
* @author jiangqiwen
* @date 2016-04-28
*/
public static String encrypt() throws Exception {

String key = "开发者自己的AES秘钥";
String content = "需要加密的参数";
String charset = "项目使用的字符编码集";
String fullAlg = "AES/CBC/PKCS5Padding";

Cipher cipher = Cipher.getInstance(fullAlg);
IvParameterSpec iv = new IvParameterSpec(initIv(fullAlg));
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(Base64.decodeBase64(key.getBytes()), "AES"),iv);

byte[] encryptBytes = cipher.doFinal(content.getBytes(charset));
return new String(Base64.encodeBase64(encryptBytes));
}

/**
* @function decrypt
* @description AES解密
* @param content 密文
* @param key aes密钥
* @param charset 字符集
* @return 原文
* @throws EncryptException
* @author jiangqiwen
* @date 2016-04-28
*/
public String decrypt(String content, String key, String charset) throws Exception {

//反序列化AES密钥
SecretKeySpec keySpec = new SecretKeySpec(Base64.decodeBase64(key.getBytes()), "AES");

//128bit全零的IV向量
byte[] iv = new byte[16];
for (int i = 0; i < iv.length; i++) {
iv[i] = 0;
}
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);

//初始化加密器并加密
Cipher deCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
deCipher.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec);
byte[] encryptedBytes = Base64.decodeBase64(content.getBytes());
byte[] bytes = deCipher.doFinal(encryptedBytes);
return new String(bytes);

}

/**
* @function initIv
* @param fullAlg 需要处理的数字
* @description 初始向量的方法, 全部为0. 这里的写法适合于其它算法,针对AES算法的话,IV值一定是128位的(16字节).
* @return
* @throws GeneralSecurityException
* @author jiangqiwen
* @date 2016-04-28
*/
private static byte[] initIv(String fullAlg) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance(fullAlg);
int blockSize = cipher.getBlockSize();
byte[] iv = new byte[blockSize];
for (int i = 0; i < blockSize; ++i) {
iv[i] = 0;
}
return iv;
}


/**
* @function formatNumber
* @param price 需要格式化为整数的浮点数
* @description 把浮点数转变成整数只保留整数部分
* @return 整数
* @throws Exception
* @author jiangqiwen
* @date 2016-05-10
*/
public static String formatNumber(String price) throws Exception {
int num = Integer.parseInt(price);
if(num == 0) {
return "免费";
} else {
return String.valueOf(num);
}
}

/**
*
* @param date 现在日期
* @param birthday 出生日期
* @return int n个月
* @throws Exception
*/
public static int getMonthAge(Date date,String birthday) throws ParseException {
int age = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = GregorianCalendar.getInstance();
try {
calendar.setTime(date);
int theYear=calendar.get(Calendar.YEAR);
int theMonth=calendar.get(Calendar.MONTH)+1;
//int theDay=calendar.get(Calendar.DATE);

calendar.setTime(sdf.parse(birthday));

int birthYear=calendar.get(Calendar.YEAR);
int birthMonth=calendar.get(Calendar.MONTH)+1;
//int birthDay=calendar.get(Calendar.DATE);

int year=theYear-birthYear;
int month=theMonth-birthMonth;
//int day=theDay-birthDay;
//int week=day%7;
age = year *12 + month;
} catch (ParseException e) {
System.out.println(e);
}
return age;
}
/**
*
* @param date 现在日期
* @param birthday 出生日期
* @return int n个年
* @throws Exception
*//*
public static int getYearAge(Date date,String birthday) throws ParseException {
int age = 0;
int bir = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = GregorianCalendar.getInstance();
try {
calendar.setTime(date);
int theYear=calendar.get(Calendar.YEAR);
int theMonth=calendar.get(Calendar.MONTH)+1;
//int theDay=calendar.get(Calendar.DATE);

calendar.setTime(sdf.parse(birthday));

int birthYear=calendar.get(Calendar.YEAR);
int birthMonth=calendar.get(Calendar.MONTH)+1;
//int birthDay=calendar.get(Calendar.DATE);

int year=theYear-birthYear;
int month=theMonth-birthMonth;
//int day=theDay-birthDay;
//int week=day%7;
age = year *12 + month;
bir = age/12;
int a = age%12;
if(a > 0 ){
bir+=1;
}
} catch (ParseException e) {
System.out.println(e);
}
return bir;
} */

/**
* 随机选取对象
* @param list 列表
* @param randomSize 选取的随机对象的个数
* @return ArrayList<CEnergyR> 从列表中随机选取的对象组成的新的列表
*/
public static List<CEnergyR> drawItemsAtRandom(List<CEnergyR> list,int randomSize) {
int len, index;
ArrayList<CEnergyR> tempList = new ArrayList<CEnergyR>();
Random random = new Random();
len = list.size();
if (len >= randomSize) {
do {
index = random.nextInt(len);
CEnergyR energyRVo = (CEnergyR)list.get(index);
if(tempList.contains(energyRVo)) {
continue;
}
tempList.add(energyRVo);
} while (tempList.size() < randomSize);
return tempList;
} else {
return list;
}
}

/**
* @function getEnergyLinkURL
* @description 获取资源的链接地址
* @param energyVo 资源对象
* @param detailAddress 返回的目标页面地址
* @return
* @author jiangqiwen
* @date 2016-7-12
*/
public static String getEnergyLinkURL(CEnergy energyVo, String detailAddress) {
StringBuffer url = new StringBuffer();
//根据能量类型构建json数据
if (energyVo.getType() == 1) { //视频
url.append("energy!playVideo.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 3 || energyVo.getType() == 4) { //文章
url.append("energy!readArticle.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 2) { //游戏
url.append("energy!viewCourseware.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 5) { //图文
url.append("energy!viewImageText.action?detailAddress=" + detailAddress);
}
//返回的目标页面地址是能量补给站首页
if ("energyList".equals(detailAddress)) {
url.append("&selectedTheme=0&selectedModule=-1&selectedType=-1&selectedAge=-1&searchText=&viewTabindex=0&currentPage=1");
}
url.append("&energyId=" + energyVo.getId());
return url.toString();
}

/**
* @function getEnergyLinkURL
* @description 获取资源的链接地址
* @param energyVo 资源对象
* @param detailAddress 返回的目标页面地址
* @param startTime 返回的目标页面地址
* @param endTime 返回的目标页面地址
* @param selectedModule 收入或支出的分类标识
* @param currentPage 返回的目标页面页号
* @return
* @author jiangqiwen
* @date 2017-02-06
*/
public static String getEnergyLinkURL(CEnergy energyVo, String detailAddress, String startTime, String endTime, String selectedModule, String currentPage) {
StringBuffer url = new StringBuffer();
//根据能量类型构建json数据
if (energyVo.getType() == 1) { //视频
url.append("energy!playVideo.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 3 || energyVo.getType() == 4) { //文章
url.append("energy!readArticle.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 2) { //游戏
url.append("energy!viewCourseware.action?detailAddress=" + detailAddress);
} else if (energyVo.getType() == 5) { //图文
url.append("energy!viewImageText.action?detailAddress=" + detailAddress);
}
//返回的目标页面地址是能量补给站首页
if ("energyList".equals(detailAddress)) {
url.append("&selectedTheme=0&selectedModule=-1&selectedType=-1&selectedAge=-1&searchText=&viewTabindex=0&currentPage=1");
} else {
url.append("&startTime=" + startTime + "&endTime=" + endTime + "&selectedModule=" + selectedModule + "&currentPage=" + currentPage);
}
url.append("&energyId=" + energyVo.getId());
return url.toString();
}

/**
* @function getEnergyLinkURL
* @description 获取能量的链接地址
* @param id 能量Id
* @param type 能量类型
* @param detailAddress 返回的目标页面地址
* @param currentPage 返回的目标页面页号
* @return searchText 搜索关键字
* @author jiangqiwen
* @date 2016-7-12
*/
public static String getEnergyLinkURL(Integer id, Integer type, String detailAddress, String currentPage, String searchText) {
StringBuffer url = new StringBuffer();
//根据资源的id和类型构建json数据
if (type == 1) { //视频
url.append("energy!playVideo.action?detailAddress=" + detailAddress);
} else if (type == 3 || type == 4) { //文章
url.append("energy!readArticle.action?detailAddress=" + detailAddress);
} else if (type == 2) { //游戏
url.append("energy!viewCourseware.action?detailAddress=" + detailAddress);
} else if (type == 5) { //图文
url.append("energy!viewImageText.action?detailAddress=" + detailAddress);
}
//返回的目标页面地址是能量补给站首页
if ("energyList".equals(detailAddress)) {
url.append("&selectedTheme=0&selectedModule=-1&selectedType=-1&selectedAge=-1&searchText=&viewTabindex=0&currentPage=1");
} else {
url.append("&currentPage=" + currentPage + "&searchText=" + searchText);
}
url.append("&energyId=" + id);
return url.toString();
}

/**
* @function getEnergyURLByUUID
* @description 获取能量的链接地址(APP专用)
* @param uuid 能量唯一标识
* @param type 能量类型
* @param detailAddress 返回的目标页面地址
* @param homeAddress 返回的主页面地址(index-首页;indexmine-我的)
* @return
* @author jiangqiwen
* @date 2016-7-26
*/
public static String getEnergyURLByUUID(String uuid, Integer type, String detailAddress, String homeAddress) {
String energyURL = "energy!resourceReview.action?energy.uuid=" + uuid + "&energy.type=" + type + "&detailAddress=" + detailAddress + "&homeAddress=" + homeAddress;
return energyURL;
}

/**
* @function convertStrToList
* @description 转换字符串为键值对形式的列表
* @param str 字符串
* @param delim1 分隔符1
* @param delim2 分隔符2
* @return
* @author jiangqiwen
* @date 2016-8-3
*/
public static List<HashMap<String,String>> convertStrToList(String str,String delim1,String delim2) {
StringTokenizer st = new StringTokenizer(str, delim1);
HashMap<String,String> map;
List<HashMap<String,String>> mapList = new ArrayList<HashMap<String,String>>();
while(st.hasMoreElements()) {
String[] tokenArr = st.nextToken().split(delim2);
map = new HashMap<String,String>();
map.put("key",tokenArr[0]);
map.put("value",tokenArr[1]);
mapList.add(map);
}
return mapList;
}

/**
* @function convertToNumOfUnits
* @description 转换为带单位"万"的数量(统计每个能量的当前访问量)
* @param input 不带单位"万"的数量
* @return 带单位"万"的数量
* @author jiangqiwen
* @date 2016-10-18
*/
public static String convertToNumOfUnits(String input) {
if ("0".equals(input)) {
return input;
}
float num = Float.parseFloat(input);
String result = "";
if (num < 10000f) {
result = num/10 + "万";
} else {
result = input;
}
return result;
}

/**
* @function getVideoTheme
* @description 根据能量的模板值返回相应的视频播放主题
* @param energyPlate 能量的模板值
* @return 视频播放主题
* @author jiangqiwen
* @date 2016-10-20
*/
public static String getVideoTheme(int energyPlate) {
String theme = "";
switch (energyPlate) {
case 1: //1-自我探索能
theme = "explore";
break;
case 2: //2-亲子互动能
theme = "inter";
break;
case 3: //3-家园守护能
theme = "guard";
break;
}
return theme;
}

/**
* @function addSign4Price
* @description 为发生额添加正负符号,发生额为支出加负号,收入加正号
* @param price 交易发生额
* @return 带正负符号的价格
* @author jiangqiwen
* @date 2016-11-24
*/
public static String addSign4Price(double price) {
StringBuilder result = new StringBuilder();
int iPrice = new java.lang.Double(price).intValue();
//交易类型不是“访问能量”,添加正号
if (iPrice > 0) {
result.append("+ ");
result.append(iPrice);
}
//交易类型是”访问能量“,并且发生额为零,添加负号
else {
if (iPrice == 0) {
result.append("- ");
result.append(iPrice);
} else {
result.append("- ");
result.append(String.valueOf(iPrice).substring(1));
}
}
return result.toString();
}

/**
* @function isAfterValidDays
* @description 计算能量购买是否已过有效期
* @param strEndTime 到期时间
* @return 是否已到期
* @throws ParseException
* @author jiangqiwen
* @date 2017-01-03
*/
public static boolean isAfterValidDays(Date curTime, String strEndTime) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat(simple);
Date endTime = sdf.parse(strEndTime);
return curTime.after(endTime);
}

/**
* @function compareDate
* @description 比较日期大小
* @param date1 日期1
* @param date2 日期2
* @return int
* @author jiangqiwen
* @date 2017-02-15
*/
public static int compareDate(String date1, String date2) {
SimpleDateFormat df = new SimpleDateFormat(simple);
try {
Date dt1 = df.parse(date1);
Date dt2 = df.parse(date2);
if (dt1.getTime() > dt2.getTime()) {
//System.out.println("dt1 在dt2前");
return 1;
} else if (dt1.getTime() < dt2.getTime()) {
//System.out.println("dt1在dt2后");
return -1;
} else {
return 0;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}

/**
* @function getGrowCoinConvertRate
* @description 根据用户输入的充值金额取得相应的成长币兑换比例
* @param amount 充值金额
* @param isApplePay 是否苹果支付
* @return 成长币兑换比例
* @author jiangqiwen
* @date 2017-01-16
*/
public static String getGrowCoinConvertRate(int amount,boolean isApplePay) {
String convertRate = "";
if (isApplePay) {
if(amount > 0 && amount < 50) {
convertRate = "0.67";
} else if (amount < 108) {
convertRate = "0.70";
} else if (amount < 208) {
convertRate = "0.79";
} else if (amount < 328) {
convertRate = "0.82";
} else if (amount < 548) {
convertRate = "0.84";
} else {
convertRate = "0.88";
}
} else {
if(amount > 0 && amount < 50) {
convertRate = "1.00";
} else if (amount < 100) {
convertRate = "1.10";
} else if (amount < 200) {
convertRate = "1.15";
} else if (amount < 300) {
convertRate = "1.20";
} else if (amount < 500) {
convertRate = "1.25";
} else {
convertRate = "1.30";
}
}
return convertRate;
}

/**
* @function getAge
* @param birthday:用户孩子的生日
* @description 获取用户孩子的年龄(含年月日)
* @return DateVO:用户年龄
* @author maohuidong
* @date 2017-05-04
*/
public static DateVO getAge(String birthday){
DateVO dateVO = new DateVO();
Date birthDate = null;
try {
birthDate = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
//生日这天的日历
Calendar birthCalendar = Calendar.getInstance();
birthCalendar.setTime(birthDate);
//今天的日历
Calendar currentCalendar = Calendar.getInstance();
//计算年龄(含年月日)
Integer year = currentCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR);
Integer month = currentCalendar.get(Calendar.MONTH) - birthCalendar.get(Calendar.MONTH);
Integer day = currentCalendar.get(Calendar.DAY_OF_MONTH) - birthCalendar.get(Calendar.DAY_OF_MONTH);
if (day < 0) {
month -= 1;
currentCalendar.add(Calendar.MONTH, -1);
day = day + currentCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
if (month < 0) {
month = (month + 12) % 12;
year--;
}
dateVO.setYear(year);
dateVO.setMonth(month);
dateVO.setDay(day);
return dateVO;
}

/**
* @function getDistanceFutureTime
* @param futureTime:未来某天的时间
* @description 获取今天距离未来某天的年月日
* @return DateVO:含有年月日的时间差
* @author maohuidong
* @date 2017-06-02
*/
public static DateVO getDistanceFutureTime(Date futureTime){
DateVO dateVO = new DateVO();
if (futureTime == null) {
return dateVO;
}
//未来这天的日历
Calendar futureCalendar = Calendar.getInstance();
futureCalendar.setTime(futureTime);
//今天的日历
Calendar currentCalendar = Calendar.getInstance();
//计算年龄(含年月日)
Integer year = futureCalendar.get(Calendar.YEAR) - currentCalendar.get(Calendar.YEAR);
Integer month = futureCalendar.get(Calendar.MONTH) - currentCalendar.get(Calendar.MONTH);
Integer day = futureCalendar.get(Calendar.DAY_OF_MONTH) - currentCalendar.get(Calendar.DAY_OF_MONTH);
if (day < 0) {
month -= 1;
futureCalendar.add(Calendar.MONTH, -1);
day = day + futureCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
if (month < 0) {
month = (month + 12) % 12;
year--;
}
dateVO.setYear(year);
dateVO.setMonth(month);
dateVO.setDay(day);
return dateVO;
}

/**
* @function getDistanceTime
* @param pastTime:过去时间 futureTime:未来某天的时间
* @description 获取过去某天距离未来某天的年月日
* @return DateVO:含有年月日的时间差
* @author maohuidong
* @date 2017-06-19
*/
public static DateVO getDistanceTime(Date pastTime,Date futureTime){
DateVO dateVO = new DateVO();
if (futureTime == null) {
return dateVO;
}
//未来这天的日历
Calendar futureCalendar = Calendar.getInstance();
futureCalendar.setTime(futureTime);
//过去的日历
Calendar pastCalendar = Calendar.getInstance();
pastCalendar.setTime(pastTime);

//计算年龄(含年月日)
Integer year = futureCalendar.get(Calendar.YEAR) - pastCalendar.get(Calendar.YEAR);
Integer month = futureCalendar.get(Calendar.MONTH) - pastCalendar.get(Calendar.MONTH);
Integer day = futureCalendar.get(Calendar.DAY_OF_MONTH) - pastCalendar.get(Calendar.DAY_OF_MONTH);
if (day < 0) {
month -= 1;
futureCalendar.add(Calendar.MONTH, -1);
day = day + futureCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
if (month < 0) {
month = (month + 12) % 12;
year--;
}
dateVO.setYear(year);
dateVO.setMonth(month);
dateVO.setDay(day);
return dateVO;
}

/**
* @function streamOutput
* @param (无)
* @description ajax请求,流输出封装
* @return 无
* @author maohuidong
* @date 2017-06-07
*/
public static void streamOutput(Map<String, String> map){
HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("utf-8");
PrintWriter pWriter = null;
try {
pWriter = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
JSONObject object = JSONObject.fromObject(map);
pWriter.print(object.toString());
pWriter.flush();
pWriter.close();
}

/**
* @function randNumStr
* @param n : 产生数字随机数的位数
* @description 产生数字随机数
* @return 生成的数字随机数字符串
* @author maohuidong
* @date 2017-07-05
*/
public static String randNumStr(Integer n){
String str = "";
Random random = new Random();
for(int i = 0;i < n;i++){
int randInt = random.nextInt(10);
str += randInt;
}
return str;
}

/**
* @function convertToXml
* @param n : 待转换的对象
* @description 对象转xml
* @return 转换后的xml字符串
* @author maohuidong
* @date 2017-12-11
*/
public static String convertToXml(Object obj) {
if(obj == null){
return null;
}
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());

Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
}

posted on 2017-12-18 09:45  毛会懂  阅读(289)  评论(0编辑  收藏  举报