工具类包(2)-通用模块-Saas多租户平台开发

工具类包(2)-通用模块-Saas多租户平台开发


目录




内容

2.3、通用查询类

  • Query.java

     package com.ihrm.common.utils;
    
     import com.baomidou.mybatisplus.core.metadata.IPage;
     import com.baomidou.mybatisplus.core.metadata.OrderItem;
     import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
     import org.apache.commons.lang3.StringUtils;
    
    
     import java.util.Map;
    
     /**
      * 查询参数
      */
     public class Query<T> {
    
     	public IPage<T> getPage(Map<String, Object> params) {
     		return this.getPage(params, null, false);
     	}
    
     	public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
     		//分页参数
     		long curPage = 1;
     		long limit = 10;
    
     		if(params.get(Constant.PAGE) != null){
     			curPage = Long.parseLong((String)params.get(Constant.PAGE));
     		}
     		if(params.get(Constant.LIMIT) != null){
     			limit = Long.parseLong((String)params.get(Constant.LIMIT));
     		}
    
     		//分页对象
     		Page<T> page = new Page<>(curPage, limit);
    
     		//分页参数
     		params.put(Constant.PAGE, page);
    
     		//排序字段
     		//防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
     //        String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
     		String orderField = (String)params.get(Constant.ORDER_FIELD);
     		String order = (String)params.get(Constant.ORDER);
    
     		//前端字段排序
     		if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
     			if(Constant.ASC.equalsIgnoreCase(order)) {
     				return  page.addOrder(OrderItem.asc(orderField));
     			}else {
     				return page.addOrder(OrderItem.desc(orderField));
     			}
     		}
    
     		//没有排序字段,则不排序
     		if(StringUtils.isBlank(defaultOrderField)){
     			return page;
     		}
    
     		//默认排序
     		if(isAsc) {
     			page.addOrder(OrderItem.asc(defaultOrderField));
     		}else {
     			page.addOrder(OrderItem.desc(defaultOrderField));
     		}
    
     		return page;
     	}
     }
    
    • 关于防止XSS注入部分,后续添加,此处暂时不做处理

3、日志相关

3.1、IP工具类

+IPUtils.java

	package com.ihrm.common.utils;


	import org.apache.commons.lang3.StringUtils;
	import org.slf4j.Logger;
	import org.slf4j.LoggerFactory;

	import javax.servlet.http.HttpServletRequest;

	/**
	 * IP地址
	 */
	public class IPUtils {
		private static Logger logger = LoggerFactory.getLogger(IPUtils.class);

		/**
		 * 获取IP地址
		 * 
		 * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
		 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
		 */
		public static String getIpAddr(HttpServletRequest request) {
			String ip = null;
			try {
				ip = request.getHeader("x-forwarded-for");
				if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("Proxy-Client-IP");
				}
				if (StringUtils.isBlank(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("WL-Proxy-Client-IP");
				}
				if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("HTTP_CLIENT_IP");
				}
				if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
					ip = request.getHeader("HTTP_X_FORWARDED_FOR");
				}
				if (StringUtils.isBlank(ip) || "unknown".equalsIgnoreCase(ip)) {
					ip = request.getRemoteAddr();
				}
			} catch (Exception e) {
				logger.error("IPUtils ERROR ", e);
			}

			//使用代理,则获取第一个IP地址
			if(StringUtils.isNoneBlank(ip) && ip.length() > 15) {
				if(ip.indexOf(",") > 0) {
					ip = ip.substring(0, ip.indexOf(","));
				}
			}

			return ip;
		}

	}

4、Spring相关

4、Spring上下文工具类

  • SpringContextUtils.java

      package com.ihrm.common.utils;
    
      import org.springframework.beans.BeansException;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.ApplicationContextAware;
      import org.springframework.stereotype.Component;
    
      /**
       * Spring Context 工具类
       */
      @Component
      public class SpringContextUtils implements ApplicationContextAware {
      	public static ApplicationContext applicationContext;
    
      	@Override
      	public void setApplicationContext(ApplicationContext applicationContext)
      			throws BeansException {
      		SpringContextUtils.applicationContext = applicationContext;
      	}
    
      	public static Object getBean(String name) {
      		return applicationContext.getBean(name);
      	}
    
      	public static <T> T getBean(String name, Class<T> requiredType) {
      		return applicationContext.getBean(name, requiredType);
      	}
    
      	public static boolean containsBean(String name) {
      		return applicationContext.containsBean(name);
      	}
    
      	public static boolean isSingleton(String name) {
      		return applicationContext.isSingleton(name);
      	}
    
      	public static Class<? extends Object> getType(String name) {
      		return applicationContext.getType(name);
      	}
    
      }
    
    • 用途:通过beanName获取IOC容器中的对象,结合反射,执行后续操作

5、杂项

5.1、日期工具类

  • DateUtis.java

      package com.ihrm.common.utils;
    
      import org.apache.commons.lang3.StringUtils;
      import org.joda.time.DateTime;
      import org.joda.time.LocalDate;
      import org.joda.time.format.DateTimeFormat;
      import org.joda.time.format.DateTimeFormatter;
    
      import java.text.SimpleDateFormat;
      import java.util.Date;
    
      /**
       * 日期处理
       *
       * @author Mark [email protected]
       */
      public class DateUtils {
      	/** 时间格式(yyyy-MM-dd) */
      	public final static String DATE_PATTERN = "yyyy-MM-dd";
      	/** 时间格式(yyyy-MM-dd HH:mm:ss) */
      	public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    
      	/**
      	 * 日期格式化 日期格式为:yyyy-MM-dd
      	 * @param date  日期
      	 * @return  返回yyyy-MM-dd格式日期
      	 */
      	public static String format(Date date) {
      		return format(date, DATE_PATTERN);
      	}
    
      	/**
      	 * 日期格式化 日期格式为:yyyy-MM-dd
      	 * @param date  日期
      	 * @param pattern  格式,如:DateUtils.DATE_TIME_PATTERN
      	 * @return  返回yyyy-MM-dd格式日期
      	 */
      	public static String format(Date date, String pattern) {
      		if(date != null){
      			SimpleDateFormat df = new SimpleDateFormat(pattern);
      			return df.format(date);
      		}
      		return null;
      	}
    
      	/**
      	 * 字符串转换成日期
      	 * @param strDate 日期字符串
      	 * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
      	 */
      	public static Date stringToDate(String strDate, String pattern) {
      		if (StringUtils.isBlank(strDate)){
      			return null;
      		}
    
      		DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
      		return fmt.parseLocalDateTime(strDate).toDate();
      	}
    
      	/**
      	 * 根据周数,获取开始日期、结束日期
      	 * @param week  周期  0本周,-1上周,-2上上周,1下周,2下下周
      	 * @return  返回date[0]开始日期、date[1]结束日期
      	 */
      	public static Date[] getWeekStartAndEnd(int week) {
      		DateTime dateTime = new DateTime();
      		LocalDate date = new LocalDate(dateTime.plusWeeks(week));
    
      		date = date.dayOfWeek().withMinimumValue();
      		Date beginDate = date.toDate();
      		Date endDate = date.plusDays(6).toDate();
      		return new Date[]{beginDate, endDate};
      	}
    
      	/**
      	 * 对日期的【秒】进行加/减
      	 *
      	 * @param date 日期
      	 * @param seconds 秒数,负数为减
      	 * @return 加/减几秒后的日期
      	 */
      	public static Date addDateSeconds(Date date, int seconds) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusSeconds(seconds).toDate();
      	}
    
      	/**
      	 * 对日期的【分钟】进行加/减
      	 *
      	 * @param date 日期
      	 * @param minutes 分钟数,负数为减
      	 * @return 加/减几分钟后的日期
      	 */
      	public static Date addDateMinutes(Date date, int minutes) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusMinutes(minutes).toDate();
      	}
    
      	/**
      	 * 对日期的【小时】进行加/减
      	 *
      	 * @param date 日期
      	 * @param hours 小时数,负数为减
      	 * @return 加/减几小时后的日期
      	 */
      	public static Date addDateHours(Date date, int hours) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusHours(hours).toDate();
      	}
    
      	/**
      	 * 对日期的【天】进行加/减
      	 *
      	 * @param date 日期
      	 * @param days 天数,负数为减
      	 * @return 加/减几天后的日期
      	 */
      	public static Date addDateDays(Date date, int days) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusDays(days).toDate();
      	}
    
      	/**
      	 * 对日期的【周】进行加/减
      	 *
      	 * @param date 日期
      	 * @param weeks 周数,负数为减
      	 * @return 加/减几周后的日期
      	 */
      	public static Date addDateWeeks(Date date, int weeks) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusWeeks(weeks).toDate();
      	}
    
      	/**
      	 * 对日期的【月】进行加/减
      	 *
      	 * @param date 日期
      	 * @param months 月数,负数为减
      	 * @return 加/减几月后的日期
      	 */
      	public static Date addDateMonths(Date date, int months) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusMonths(months).toDate();
      	}
    
      	/**
      	 * 对日期的【年】进行加/减
      	 *
      	 * @param date 日期
      	 * @param years 年数,负数为减
      	 * @return 加/减几年后的日期
      	 */
      	public static Date addDateYears(Date date, int years) {
      		DateTime dateTime = new DateTime(date);
      		return dateTime.plusYears(years).toDate();
      	}
      }
    

5.2、数字工具类

  • NumberUtils.java

package com.ihrm.common.utils;

/**

  • 数字工具类
    /
    public class NumberUtils {
    /
    *
    • 获取指定位数的随机数字字符串
    • @param len 位数
    • @return 指定位数的随机数字字符串
      */
      public static String randomNumber(int len) {
      int rs = (int) ((Math.random() * 9 + 1) * Math.pow(10, len - 1));
      return String.valueOf(rs);
      }
      }

通用工具类,暂时以上这些,下面介绍写其他工具类,以及其他的通用模块包。

后记

本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785

前端项目源代码地址:https://gitee.com/gaogzhen/ihrm-parent // 前端后台管理系统
    后端JAVA源代码地址:https://gitee.com/gaogzhen/ihrm-vue // 后端项目

猜你喜欢

转载自blog.csdn.net/gaogzhen/article/details/109686149