UtilHttpRequestMap.java 4.77 KB
package com.taover.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class UtilHttpRequestMap {
	/**
	 * 将requestMap上的String[]转换为String
	 * @param requestMap
	 * @return
	 */
	public static Map<String, Object> getMapValueStringByRequestMap(Map<String, String[]> requestMap){
		Map<String, Object> result = new HashMap<String, Object>();
		Iterator<String> keyIter = requestMap.keySet().iterator();
		while(keyIter.hasNext()){
			String keyName = keyIter.next();
			result.put(keyName, requestMap.get(keyName)[0]);
		}
		return result;
	}
	
	/**
	 * 
	 * @param requestMap
	 * @param entityClass
	 * @param exceptColumnList
	 * @return
	 */
	public static List<Object[]> getSqlConditionListByRequestMap(Map<String, String[]> requestMap, Class entityClass, String exceptColumnList){
		Iterator<String> keyIter = requestMap.keySet().iterator();
		List<Object[]> result = new ArrayList<Object[]>();
		while (keyIter.hasNext()) {
			String keyName = keyIter.next();
			if(exceptColumnList != null && exceptColumnList.contains(keyName)){
				continue;
			}
			String camelName = UtilString.camelName(keyName);
			try {
				Field camelField = entityClass.getDeclaredField(camelName);
				camelField.setAccessible(true);				
				result.add(getSqlConditionArrayByStringArray(camelField, keyName, requestMap.get(keyName)));
			} catch (Exception e) {
				UtilLog.infoForException(e, UtilHttpRequestMap.class);
			}
		}
		return result;
	}
	
	/**
	 * 通过Map数据构造bean
	 * @param dataMap
	 * @param beanClass
	 * @param isCopyNull
	 * @param exceptColumnList
	 * @return
	 * @throws Exception
	 */
	public static <T> T getBeanByMap(Map<String, Object> dataMap, Class<T> beanClass, boolean isCopyNull, String exceptColumnList) throws Exception{
		if(beanClass == null){
			return null;
		}
		T result = beanClass.newInstance();
		Iterator<String> keyIter = dataMap.keySet().iterator();
		while(keyIter.hasNext()){
			String keyName = keyIter.next();
			String camelName = UtilString.camelName(keyName);
			Object keyValue = dataMap.get(keyName);
			
			if(isCopyNull && keyValue == null){
				continue;
			}
			
			Field keyField = beanClass.getDeclaredField(camelName);
			keyField.setAccessible(true);
			String keyFieldTypeName = keyField.getType().getSimpleName();
			if(keyValue == null){
				keyField.set(result, null);
			}else{
				String keyValueClassName = keyValue.getClass().getSimpleName();
				if(keyValueClassName.equals(keyFieldTypeName)){
					keyField.set(result, keyValue);	
				}else{
					if(keyFieldTypeName.equals("String")){
						keyField.set(result, keyValue.toString());
					}else if(keyFieldTypeName.equals("Integer")){
						keyField.set(result, Integer.valueOf(keyValue.toString()));
					}
				}
			}
		}
		return result;
	}
	
	/**
	 * 通过requestMap的String[]构造Sql Condition条件
	 * @param camelField
	 * @param keyName
	 * @param data
	 * @return
	 * @throws Exception
	 */
	private static Object[] getSqlConditionArrayByStringArray(Field camelField, String keyName, String[] data) throws Exception{
		if(data == null || data.length == 0){
			throw new Exception("data is null");
		}
		String colName = UtilString.underscoreName(keyName).toLowerCase();
		if(data.length == 1){
			if(data[0] == null || "".equals(data[0].trim())){
				throw new Exception("data[0] is empty");
			}
			String typeName = camelField.getType().getSimpleName();
			if(typeName.equals("String")){
				return new Object[]{colName, "like", "%"+data[0]+"%"};
			}else if(typeName.equals("Date")){
				return new Object[]{"datediff(`"+colName+"`, '"+data+"')=0"};
			}else{
				return new Object[]{colName, "=", data[0]};	
			}			
		}
		String sql = colName+" in ('"+data[0]+"'";
		for(int i=1; i<data.length; ++i){
			sql += ", '"+data[i]+"'";
		}
		sql += ") ";
		return new Object[]{sql};
	}

	/**
	 * 通过RequestMap获取更新数据的结构数组
	 * @param requestMap
	 * @param entityClass
	 * @param exceptColumnList
	 * @return
	 */
	public static List<Object[]> getUpdateListByRequestMap(Map<String, String[]> requestMap, Class entityClass, String exceptColumnList){
		Iterator<String> keyIter = requestMap.keySet().iterator();
		List<Object[]> result = new ArrayList<Object[]>();
		while (keyIter.hasNext()) {
			String keyName = keyIter.next();
			if(exceptColumnList != null && exceptColumnList.contains(keyName)){
				continue;
			}
			String camelName = UtilString.camelName(keyName);
			try {
				Field camelField = entityClass.getDeclaredField(camelName);
				camelField.setAccessible(true);
				result.add(new Object[]{UtilString.underscoreName(keyName).toLowerCase(), requestMap.get(keyName)[0]});
			} catch (Exception e) {
				UtilLog.infoForException(e, UtilHttpRequestMap.class);
			}
		}
		return result;
	}
}