package com.yc.action.grid; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.TypeAdapter; import com.google.gson.internal.LinkedTreeMap; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import com.yc.exception.ApplicationException; import com.yc.utils.DateUtil; import com.yc.utils.SessionKey; import org.apache.commons.lang3.StringUtils; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GridUtils { public static int prossRowSetDataType_Int(Map map,String key){ return map.get(key)==null?0:("".equalsIgnoreCase(map.get(key)+"")?0:Integer.parseInt((map.get(key)+""))); } public static Integer prossRowSetDataType_Integer(Map map,String key){ return map.get(key)==null?null:("".equalsIgnoreCase(map.get(key)+"")?null:(Integer)map.get(key)); } public static String toJson(Object obj){ if(obj==null){ return "";} GsonBuilder gb = new GsonBuilder(); gb.registerTypeAdapter(String.class, new StringConverter()); gb.setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping().serializeNulls(); Gson gson = gb.create(); return gson.toJson(obj); } public static String toJsonNotNull(Object obj){//obj的null属性不输出 if(obj==null){ return "";} GsonBuilder gb = new GsonBuilder(); gb.registerTypeAdapter(String.class, new StringConverter()); gb.setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping(); Gson gson = gb.create(); return gson.toJson(obj); } public static Map fromJson(String obj){//obj的null属性不输出 if(obj==null||"".equalsIgnoreCase(obj)){ return null;} GsonBuilder gb = new GsonBuilder(); gb.registerTypeAdapter(String.class, new StringConverter()); gb.setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping(); Gson gson = gb.create(); return gson.fromJson(obj,HashMap.class); } public static T fromJson(String obj,Class tClass){//obj的null属性不输出 if(obj==null||"".equalsIgnoreCase(obj)){ return null;} GsonBuilder gb = new GsonBuilder(); gb.registerTypeAdapter(String.class, new StringConverter()); gb.setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping(); Gson gson = gb.create(); return gson.fromJson(obj,tClass); } public static Map fromJsonByJackson(String json) { if(json==null||"".equalsIgnoreCase(json)){ return null;} ObjectMapper mapper = new ObjectMapper(); try { return mapper.readValue(json,Map.class); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 用在拼接sql参数,避免写入数据库出现'null'情况 * @param parm * @return */ public static String prossSqlParm(String parm){ return StringUtils.isBlank(parm)?null:" '"+parm.replaceAll("'","''")+"' "; } public static String toJsonisExpose(Object obj){//obj有Expose注解的才输出 if(obj==null){ return "";} GsonBuilder gb = new GsonBuilder(); gb.registerTypeAdapter(String.class, new StringConverter()); gb.setDateFormat("yyyy-MM-dd HH:mm:ss") .disableHtmlEscaping() .excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性 .enableComplexMapKeySerialization() ; Gson gson = gb.create(); return gson.toJson(obj); } public static String prossRowSetDataType_String(Map map,String key){ return map.get(key)==null?"":((map.get(key)+"")); } public static Date prossRowSetDataType_Date(Map map, String key){ return map.get(key)==null?null:(Date)(map.get(key)); } public static String prossRowSetDataType_StringByReplaceBlank(Map map,String key){ return replaceBlank(prossRowSetDataType_String(map,key)); } /** * 把内容的单引号替换成二个单引号,用在拼接sql * @param map * @param key * @return */ public static String prossRowSetDataType_StringByAddTwoQuotes(Map map,String key){ return prossRowSetDataType_String(map,key).replaceAll("'","''"); } public static double prossRowSetDataType_Double(Map map,String key){ return map.get(key)==null?0d:("".equalsIgnoreCase(map.get(key)+"")?0d:Double.parseDouble((map.get(key)+""))); } public static float prossRowSetDataType_Float(Map map,String key){ return map.get(key)==null?0f:("".equalsIgnoreCase(map.get(key)+"")?0f:Float.parseFloat((map.get(key)+""))); } public static boolean prossRowSetDataType_Boolean(Map map,String key){ return map.get(key)==null?false:("".equalsIgnoreCase(map.get(key)+"")?false:("0".equalsIgnoreCase((map.get(key)+""))?false:true)); } // 去除字符串中的换行符等 public static String replaceBlank(String str) { if (str == null || str == "") { return ""; } Matcher m = null; try { Pattern p = Pattern.compile("\t|\r|\n"); m = p.matcher(str); } catch (Exception e) { e.printStackTrace(); throw new ApplicationException(str + "-解析出错,存在有特殊字符"); } return m.replaceAll(" ").replaceAll("\\$", "\\\\\\$"); } public static HashMap getSessionAttributes(HttpSession session, int formid, String doccode, boolean flag) { HashMap env = new HashMap(); env.put("@formid", formid + ""); env.put("@user", (String) session.getAttribute(SessionKey.USERCODE)); env.put("user", (String) session.getAttribute(SessionKey.USERCODE)); env.put(SessionKey.USERCODE, (String) session.getAttribute(SessionKey.USERCODE)); env.put(SessionKey.USERNAME, (String) session.getAttribute(SessionKey.USERNAME)); if(flag){ env.put("@today", "DateUtil.toDayDate()"); env.put("@now", "DateUtil.toDay()"); env.put("@day", "DateUtil.toDayDate()"); env.put("@space", " "); env.put("@date", "DateUtil.toDayDate()"); }else{ env.put("@today", DateUtil.toDayDate()); env.put("@now", DateUtil.toDay()); env.put("@day", DateUtil.toDayDate()); env.put("@space", " "); env.put("@date", DateUtil.toDayDate()); } env.put("@doccode", doccode); env.put("@treename", "");// TODO 树节点 env.put("@host", "");// TODO 主机名 env.put(SessionKey.LOADER_NAME, (String) session.getAttribute(SessionKey.LOADER_NAME)); env.put(SessionKey.IP_ADDRESS, (String) session.getAttribute(SessionKey.IP_ADDRESS)); env.put(SessionKey.HOSTNAME, (String) session.getAttribute(SessionKey.HOSTNAME)); env.put(SessionKey.MAC_ADDRESS, (String) session.getAttribute(SessionKey.MAC_ADDRESS)); env.put(SessionKey.ROLE_NAME, (String) session.getAttribute(SessionKey.ROLE_NAME)); env.put(SessionKey.HRNAME, (String) session.getAttribute(SessionKey.HRNAME)); env.put(SessionKey.HRCODE, (String) session.getAttribute(SessionKey.HRCODE)); env.put(SessionKey.CCNAME, (String) session.getAttribute(SessionKey.CCNAME)); env.put(SessionKey.CCCODE, (String) session.getAttribute(SessionKey.CCCODE)); env.put(SessionKey.COMPANY_ID, (String) session.getAttribute(SessionKey.COMPANY_ID)); env.put(SessionKey.COMPANY_NAME, (String) session.getAttribute(SessionKey.COMPANY_NAME)); env.put(SessionKey.DATA_BASE_ID, (String) session.getAttribute(SessionKey.DATA_BASE_ID)); env.put(SessionKey.DEFAULT_ACCTCODE, (String) session.getAttribute(SessionKey.DEFAULT_ACCTCODE)); env.put(SessionKey.UserCodePermission, (String) session.getAttribute(SessionKey.UserCodePermission)); env.put(SessionKey.DEFAULT_STCODE, (String) session.getAttribute(SessionKey.DEFAULT_STCODE)); env.put(SessionKey.HAsP_sHOPCOUNT, session.getAttribute(SessionKey.HAsP_sHOPCOUNT)+""); env.put(SessionKey.OPEN_ID, session.getAttribute(SessionKey.OPEN_ID)+""); env.put(SessionKey.CURRENCY, session.getAttribute(SessionKey.CURRENCY)+""); env.put(SessionKey.SHOP_CCCDOE, session.getAttribute(SessionKey.SHOP_CCCDOE)+""); env.put(SessionKey.COMPANY_PERMISSION, session.getAttribute(SessionKey.COMPANY_PERMISSION)+""); env.put(SessionKey.DEFAULT_BRAND, session.getAttribute(SessionKey.DEFAULT_BRAND)+""); env.put(SessionKey.CCCODEPERMISSION, session.getAttribute(SessionKey.CCCODEPERMISSION)+""); env.put(SessionKey.ISMODIFYPRICEWHENSCANQRCODE, session.getAttribute(SessionKey.ISMODIFYPRICEWHENSCANQRCODE)+""); env.put(SessionKey.ISMODIFYPRICEWHENSALESORDER, session.getAttribute(SessionKey.ISMODIFYPRICEWHENSALESORDER)+""); env.put(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER, session.getAttribute(SessionKey.ISMODIFYPRICEWHENPURCHASEORDER)+""); env.put(SessionKey.SWITCHTOPAGEWHENLOGONAPP, session.getAttribute(SessionKey.SWITCHTOPAGEWHENLOGONAPP)+""); env.put(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED, session.getAttribute(SessionKey.SELECTNEXTDOCUMENTWHENAPPROVED)+""); env.put(SessionKey.ISSTARTUPPOPUPMESSAGES, session.getAttribute(SessionKey.ISSTARTUPPOPUPMESSAGES)+""); env.put(SessionKey.USERTYPE, session.getAttribute(SessionKey.USERTYPE)+""); env.put(SessionKey.DEPARTMENT, session.getAttribute(SessionKey.DEPARTMENT)+""); return env; } public static class MapTypeAdapter extends TypeAdapter { @Override public Object read(JsonReader in) throws IOException { JsonToken token = in.peek(); switch (token) { case BEGIN_ARRAY: List list = new ArrayList(); in.beginArray(); while (in.hasNext()) { list.add(read(in)); } in.endArray(); return list; case BEGIN_OBJECT: Map map = new LinkedTreeMap(); in.beginObject(); while (in.hasNext()) { map.put(in.nextName(), read(in)); } in.endObject(); return map; case STRING: return in.nextString(); case NUMBER: /** * 改写数字的处理逻辑,将数字值分为整型与浮点型。 */ double dbNum = in.nextDouble(); // 数字超过long的最大值,返回浮点类型 if (dbNum > Long.MAX_VALUE) { return dbNum; } // 判断数字是否为整数值 long lngNum = (long) dbNum; if (dbNum == lngNum) { return lngNum; } else { return dbNum; } case BOOLEAN: return in.nextBoolean(); case NULL: in.nextNull(); return null; default: throw new IllegalStateException(); } } @Override public void write(JsonWriter out, Object value) throws IOException { // 序列化无需实现 } } }