当前位置:   article > 正文

工具类总结_java获取某天最后一秒

java获取某天最后一秒

1、双循环查询

  1. public class ProcessInPageUtils {
  2. private ProcessInPageUtils() {
  3. }
  4. public static <T> void doInPage(int pageSize, QueryListCallBack<T> queryListCallBack,
  5. Processor<T> processor) {
  6. int currentPage = 1;
  7. List<T> ts = queryListCallBack.queryList(currentPage, pageSize);
  8. while (ts != null && !ts.isEmpty()) {
  9. ts.forEach(processor::process);
  10. currentPage++;
  11. ts = queryListCallBack.queryList(currentPage, pageSize);
  12. }
  13. }
  14. public interface QueryListCallBack<T> {
  15. List<T> queryList(int currentPage, int pageSize);
  16. }
  17. public interface Processor<T>{
  18. void process(T t);
  19. }
  20. }
  21. //使用方法 适用于双循环的查询
  22. ProcessInPageUtils.doInPage(PAGE_SIZE,
  23. (curPage, pageSize) -> this.productItemRepository.selectByBrandId(brandId, curPage, pageSize),
  24. attributeDO -> replenishmentManager.replenishCalculated(attributeDO.getItemCode(), dateStr, channelId, brandId));

2、DESUtils

  1. package com.hema.cloud.util;
  2. import java.security.Key;
  3. import java.util.Base64;
  4. import java.util.Random;
  5. import javax.crypto.Cipher;
  6. import javax.crypto.SecretKeyFactory;
  7. import javax.crypto.spec.DESKeySpec;
  8. import javax.crypto.spec.IvParameterSpec;
  9. import lombok.extern.slf4j.Slf4j;
  10. /**
  11. * @Author lh
  12. * @Date 2020/4/1
  13. * @Description
  14. */
  15. @Slf4j
  16. public class DESUtil {
  17. /**
  18. * 偏移变量,固定占8位字节
  19. */
  20. private final static String IV_PARAMETER = "12345678";
  21. /**
  22. * 密钥算法
  23. */
  24. private static final String ALGORITHM = "DES";
  25. /**
  26. * 加密/解密算法-工作模式-填充模式
  27. */
  28. private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
  29. /**
  30. * 默认编码
  31. */
  32. private static final String CHARSET = "utf-8";
  33. /**
  34. * 盐值长度
  35. */
  36. private static final Integer SALT_LENGTH = 6;
  37. /**
  38. * 0-9、a~z和A~Z的随机数
  39. */
  40. public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  41. /**
  42. * DES加密字符串
  43. *
  44. * @param password 加密密码,长度不能够小于8位
  45. * @param data 待加密字符串
  46. * @return 加密后内容
  47. */
  48. public static String encrypt(String password, String data) {
  49. if (password == null || password.length() < 8) {
  50. throw new RuntimeException("加密失败,key不能小于8位");
  51. }
  52. if (data == null) {
  53. return null;
  54. }
  55. try {
  56. Key secretKey = generateKey(password);
  57. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  58. IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
  59. cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
  60. byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
  61. //JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
  62. //Android平台可以使用android.util.Base64
  63. return new String(Base64.getEncoder().encode(bytes));
  64. } catch (Exception e) {
  65. return null;
  66. }
  67. }
  68. /**
  69. * DES解密字符串
  70. *
  71. * @param password r
  72. * @param data 待解密字符串
  73. * @return 解密后内容
  74. */
  75. public static String decrypt(String password, String data) {
  76. if (password == null || password.length() < 8) {
  77. throw new RuntimeException("加密失败,key不能小于8位");
  78. }
  79. if (data == null) {
  80. return null;
  81. }
  82. try {
  83. Key secretKey = generateKey(password);
  84. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  85. IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
  86. cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
  87. return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
  88. } catch (Exception e) {
  89. return null;
  90. }
  91. }
  92. /**
  93. * 生成key
  94. *
  95. * @param password
  96. * @return
  97. * @throws Exception
  98. */
  99. private static Key generateKey(String password) throws Exception {
  100. DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
  101. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
  102. return keyFactory.generateSecret(dks);
  103. }
  104. /**
  105. * 生成盐值,纯字符
  106. *
  107. * @return
  108. */
  109. public static String generateSalt() {
  110. StringBuilder code = new StringBuilder();
  111. Random random = new Random();
  112. for (int i = 0; i < SALT_LENGTH; i++) {
  113. code.append((char) ('a' + random.nextInt(26)));
  114. }
  115. return code.toString();
  116. }
  117. public static String generateRandomKey(int length){
  118. StringBuilder code = new StringBuilder();
  119. Random random = new Random();
  120. for (int i = 0; i < length; i++) {
  121. code.append(allChar.charAt(random.nextInt(allChar.length())));
  122. }
  123. return code.toString();
  124. }
  125. }
  126. 在config中配置前段和后段的加解秘key
  127. /**
  128. * 账户密码后端DES加解密的key
  129. */
  130. String PASSWORD_DES_PROVIDER_KEY = "lfdnas13io";
  131. /**
  132. * 账户密码前端DES加解密的key
  133. */
  134. String PASSWORD_DES_CLIENT_KEY = "lwqinyw887";
  135. // 解密处理逻辑
  136. String decryptedPwd = DESUtil.decrypt(PASSWORD_DES_CLIENT_KEY, request.getPassword());
  137. assertPasswordValid(decryptedPwd);
  138. request.setPassword(decryptedPwd);
  139. //加密处理逻辑
  140. String salt = DESUtil.generateSalt();
  141. accountDO.setSalt(salt);
  142. accountDO.setPassword(encryptPassword(accountDto.getPassword(), salt));
  143. public static String encryptPassword(String password, String salt) {
  144. return DESUtil.encrypt(PASSWORD_DES_PROVIDER_KEY, password + CommonConstant.SEPARATE + salt);
  145. }

3、DateUtils

  1. package com.hema.cloud.util;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.apache.commons.lang3.tuple.Pair;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.time.Instant;
  7. import java.time.LocalDate;
  8. import java.time.LocalDateTime;
  9. import java.time.ZoneId;
  10. import java.time.ZonedDateTime;
  11. import java.util.Calendar;
  12. import java.util.Date;
  13. import java.util.concurrent.TimeUnit;
  14. @Slf4j
  15. public class DateUtil {
  16. public static final String DEFAULTDATEPATTERN = "yyyy-MM-dd HH:mm:ss";
  17. public static final String DATEPATTERN_YYYY_MM_DD = "yyyy-MM-dd";
  18. public static final String DATEPATTERN_YYYY_MM_DD_HH = "yyyy-MM-dd HH";
  19. public static final String DATEPATTERN_YYYY_MM = "yyyy-MM";
  20. public static final String DATEPATTERN_YYYYMMDD = "yyyyMMdd";
  21. public static final String DATEPATTERN_YYYYMM = "yyyyMM";
  22. /**
  23. * 一天的秒数
  24. */
  25. public static final Integer ONE_DAY_SECONDS = 60 * 60 * 24;
  26. /**
  27. * 24小时毫秒值
  28. */
  29. public static final long H24 = TimeUnit.HOURS.toMillis(24);
  30. /**
  31. * 1小时毫秒值
  32. */
  33. public static final long H1 = TimeUnit.HOURS.toMillis(1);
  34. public static Date parse(String string, String pattern) throws ParseException {
  35. SimpleDateFormat format = new SimpleDateFormat(pattern);
  36. return format.parse(string);
  37. }
  38. public static Date parse2(String string, String pattern){
  39. try {
  40. SimpleDateFormat format = new SimpleDateFormat(pattern);
  41. return format.parse(string);
  42. }catch (Exception e){
  43. log.error("date parse error. param1{}, param2:{}", string, pattern, e);
  44. }
  45. return null;
  46. }
  47. public static Date getDayEnd(Date day){
  48. String format = new SimpleDateFormat(DATEPATTERN_YYYY_MM_DD)
  49. .format(day);
  50. return parse2( format + " 23:59:59", DEFAULTDATEPATTERN);
  51. }
  52. public static Date getDayStart(Date day){
  53. String format = new SimpleDateFormat(DATEPATTERN_YYYY_MM_DD)
  54. .format(day);
  55. return parse2( format + " 00:00:00", DEFAULTDATEPATTERN);
  56. }
  57. public static Date getYesterdayEnd(Date day){
  58. Calendar instance = Calendar.getInstance();
  59. instance.setTime(day);
  60. instance.add(Calendar.HOUR, -24);
  61. return getDayEnd(instance.getTime());
  62. }
  63. /**
  64. * 返回自定义格式字符串
  65. */
  66. public static String dateToString(Date date, String pattern) {
  67. SimpleDateFormat formatter = new SimpleDateFormat(pattern);
  68. return formatter.format(date);
  69. }
  70. public static Date increaseDate(Date aDate, int days) {
  71. Calendar cal = Calendar.getInstance();
  72. cal.setTime(aDate);
  73. cal.add(Calendar.DAY_OF_MONTH, days);
  74. return cal.getTime();
  75. }
  76. /**
  77. * Date 转换成 LocalDate
  78. *
  79. * @param date
  80. * @return
  81. */
  82. public static LocalDate date2LocalDate(Date date) {
  83. Instant instant = date.toInstant();
  84. ZoneId zoneId = ZoneId.systemDefault();
  85. LocalDate localDate = instant.atZone(zoneId).toLocalDate();
  86. return localDate;
  87. }
  88. /**
  89. * LocalDate 转换成 Date
  90. *
  91. * @param localDate
  92. * @return
  93. */
  94. public static Date localDate2Date(LocalDate localDate) {
  95. ZoneId zoneId = ZoneId.systemDefault();
  96. ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
  97. Date date = Date.from(zdt.toInstant());
  98. return date;
  99. }
  100. /**
  101. * localDateTime 转换成 Date
  102. *
  103. * @param localDateTime
  104. * @return
  105. */
  106. public static Date localDateTime2Date(LocalDateTime localDateTime) {
  107. ZoneId zoneId = ZoneId.systemDefault();
  108. ZonedDateTime zdt = localDateTime.atZone(zoneId);
  109. Date date = Date.from(zdt.toInstant());
  110. return date;
  111. }
  112. /**
  113. * Date 转换成 LocalDateTime
  114. *
  115. * @param date
  116. */
  117. public static LocalDateTime date2LocalDateTime(Date date) {
  118. Instant instant = date.toInstant();
  119. ZoneId zoneId = ZoneId.systemDefault();
  120. LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
  121. return localDateTime;
  122. }
  123. /**
  124. * 获取指定时间当天的0点
  125. *
  126. * @return
  127. */
  128. public static LocalDateTime getFirstSecond(LocalDate localDate) {
  129. return LocalDateTime.of(localDate, LocalDateTime.MIN.toLocalTime());
  130. }
  131. /**
  132. * 获取指定时间当天的最后一秒
  133. *
  134. * @return
  135. */
  136. public static LocalDateTime getLastSecond(LocalDate localDate) {
  137. return LocalDateTime.of(localDate, LocalDateTime.MAX.toLocalTime());
  138. }
  139. /**
  140. * 计算当前时间几小时之后的时间
  141. *
  142. * @param date 日期信息
  143. * @param hours 小时信息
  144. * @return 日期格式信息
  145. */
  146. public static Date addHours(Date date, long hours) {
  147. return addMinutes(date, hours * 60);
  148. }
  149. /**
  150. * 计算当前时间几分钟之后的时间
  151. *
  152. * @param date 日期信息
  153. * @param minutes 分钟信息
  154. * @return 日期信息
  155. */
  156. public static Date addMinutes(Date date, long minutes) {
  157. return addSeconds(date, minutes * 60);
  158. }
  159. /**
  160. * 计算当前时间几秒钟之后的时间
  161. *
  162. * @param date 日期信息
  163. * @param secs 秒信息
  164. * @return 日期信息
  165. */
  166. public static Date addSeconds(Date date, long secs) {
  167. return new Date(date.getTime() + (secs * 1000));
  168. }
  169. /**
  170. * 拿到明天0点的时间
  171. * @return
  172. */
  173. public static Date getTomorrow() {
  174. Calendar calendar = Calendar.getInstance();
  175. calendar.setTime(new Date());
  176. calendar.add(Calendar.DAY_OF_YEAR, 1);
  177. calendar.set(Calendar.HOUR_OF_DAY, 0);
  178. calendar.set(Calendar.MINUTE, 0);
  179. calendar.set(Calendar.SECOND, 0);
  180. calendar.set(Calendar.MILLISECOND, 0);
  181. return calendar.getTime();
  182. }
  183. /**
  184. * 获取一周中的周一
  185. * @param date
  186. * @return
  187. */
  188. public static Date getThisWeekMonday(Date date) {
  189. Calendar cal = Calendar.getInstance();
  190. cal.setTime(date);
  191. // 获得当前日期是一个星期的第几天
  192. int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
  193. if (1 == dayWeek) {
  194. cal.add(Calendar.DAY_OF_MONTH, -1);
  195. }
  196. // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
  197. cal.setFirstDayOfWeek(Calendar.MONDAY);
  198. // 获得当前日期是一个星期的第几天
  199. int day = cal.get(Calendar.DAY_OF_WEEK);
  200. // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
  201. cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
  202. return cal.getTime();
  203. }
  204. public static void main(String[] args) {
  205. System.out.println(getThisWeekMonday(new Date()));
  206. }
  207. }

4、retryUtils

  1. package com.hema.cloud.util;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.apache.commons.lang3.tuple.Pair;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.time.Instant;
  7. import java.time.LocalDate;
  8. import java.time.LocalDateTime;
  9. import java.time.ZoneId;
  10. import java.time.ZonedDateTime;
  11. import java.util.Calendar;
  12. import java.util.Date;
  13. import java.util.concurrent.TimeUnit;
  14. @Slf4j
  15. public class DateUtil {
  16. public static final String DEFAULTDATEPATTERN = "yyyy-MM-dd HH:mm:ss";
  17. public static final String DATEPATTERN_YYYY_MM_DD = "yyyy-MM-dd";
  18. public static final String DATEPATTERN_YYYY_MM_DD_HH = "yyyy-MM-dd HH";
  19. public static final String DATEPATTERN_YYYY_MM = "yyyy-MM";
  20. public static final String DATEPATTERN_YYYYMMDD = "yyyyMMdd";
  21. public static final String DATEPATTERN_YYYYMM = "yyyyMM";
  22. /**
  23. * 一天的秒数
  24. */
  25. public static final Integer ONE_DAY_SECONDS = 60 * 60 * 24;
  26. /**
  27. * 24小时毫秒值
  28. */
  29. public static final long H24 = TimeUnit.HOURS.toMillis(24);
  30. /**
  31. * 1小时毫秒值
  32. */
  33. public static final long H1 = TimeUnit.HOURS.toMillis(1);
  34. public static Date parse(String string, String pattern) throws ParseException {
  35. SimpleDateFormat format = new SimpleDateFormat(pattern);
  36. return format.parse(string);
  37. }
  38. public static Date parse2(String string, String pattern){
  39. try {
  40. SimpleDateFormat format = new SimpleDateFormat(pattern);
  41. return format.parse(string);
  42. }catch (Exception e){
  43. log.error("date parse error. param1{}, param2:{}", string, pattern, e);
  44. }
  45. return null;
  46. }
  47. public static Date getDayEnd(Date day){
  48. String format = new SimpleDateFormat(DATEPATTERN_YYYY_MM_DD)
  49. .format(day);
  50. return parse2( format + " 23:59:59", DEFAULTDATEPATTERN);
  51. }
  52. public static Date getDayStart(Date day){
  53. String format = new SimpleDateFormat(DATEPATTERN_YYYY_MM_DD)
  54. .format(day);
  55. return parse2( format + " 00:00:00", DEFAULTDATEPATTERN);
  56. }
  57. public static Date getYesterdayEnd(Date day){
  58. Calendar instance = Calendar.getInstance();
  59. instance.setTime(day);
  60. instance.add(Calendar.HOUR, -24);
  61. return getDayEnd(instance.getTime());
  62. }
  63. /**
  64. * 返回自定义格式字符串
  65. */
  66. public static String dateToString(Date date, String pattern) {
  67. SimpleDateFormat formatter = new SimpleDateFormat(pattern);
  68. return formatter.format(date);
  69. }
  70. public static Date increaseDate(Date aDate, int days) {
  71. Calendar cal = Calendar.getInstance();
  72. cal.setTime(aDate);
  73. cal.add(Calendar.DAY_OF_MONTH, days);
  74. return cal.getTime();
  75. }
  76. /**
  77. * Date 转换成 LocalDate
  78. *
  79. * @param date
  80. * @return
  81. */
  82. public static LocalDate date2LocalDate(Date date) {
  83. Instant instant = date.toInstant();
  84. ZoneId zoneId = ZoneId.systemDefault();
  85. LocalDate localDate = instant.atZone(zoneId).toLocalDate();
  86. return localDate;
  87. }
  88. /**
  89. * LocalDate 转换成 Date
  90. *
  91. * @param localDate
  92. * @return
  93. */
  94. public static Date localDate2Date(LocalDate localDate) {
  95. ZoneId zoneId = ZoneId.systemDefault();
  96. ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
  97. Date date = Date.from(zdt.toInstant());
  98. return date;
  99. }
  100. /**
  101. * localDateTime 转换成 Date
  102. *
  103. * @param localDateTime
  104. * @return
  105. */
  106. public static Date localDateTime2Date(LocalDateTime localDateTime) {
  107. ZoneId zoneId = ZoneId.systemDefault();
  108. ZonedDateTime zdt = localDateTime.atZone(zoneId);
  109. Date date = Date.from(zdt.toInstant());
  110. return date;
  111. }
  112. /**
  113. * Date 转换成 LocalDateTime
  114. *
  115. * @param date
  116. */
  117. public static LocalDateTime date2LocalDateTime(Date date) {
  118. Instant instant = date.toInstant();
  119. ZoneId zoneId = ZoneId.systemDefault();
  120. LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
  121. return localDateTime;
  122. }
  123. /**
  124. * 获取指定时间当天的0点
  125. *
  126. * @return
  127. */
  128. public static LocalDateTime getFirstSecond(LocalDate localDate) {
  129. return LocalDateTime.of(localDate, LocalDateTime.MIN.toLocalTime());
  130. }
  131. /**
  132. * 获取指定时间当天的最后一秒
  133. *
  134. * @return
  135. */
  136. public static LocalDateTime getLastSecond(LocalDate localDate) {
  137. return LocalDateTime.of(localDate, LocalDateTime.MAX.toLocalTime());
  138. }
  139. /**
  140. * 计算当前时间几小时之后的时间
  141. *
  142. * @param date 日期信息
  143. * @param hours 小时信息
  144. * @return 日期格式信息
  145. */
  146. public static Date addHours(Date date, long hours) {
  147. return addMinutes(date, hours * 60);
  148. }
  149. /**
  150. * 计算当前时间几分钟之后的时间
  151. *
  152. * @param date 日期信息
  153. * @param minutes 分钟信息
  154. * @return 日期信息
  155. */
  156. public static Date addMinutes(Date date, long minutes) {
  157. return addSeconds(date, minutes * 60);
  158. }
  159. /**
  160. * 计算当前时间几秒钟之后的时间
  161. *
  162. * @param date 日期信息
  163. * @param secs 秒信息
  164. * @return 日期信息
  165. */
  166. public static Date addSeconds(Date date, long secs) {
  167. return new Date(date.getTime() + (secs * 1000));
  168. }
  169. /**
  170. * 拿到明天0点的时间
  171. * @return
  172. */
  173. public static Date getTomorrow() {
  174. Calendar calendar = Calendar.getInstance();
  175. calendar.setTime(new Date());
  176. calendar.add(Calendar.DAY_OF_YEAR, 1);
  177. calendar.set(Calendar.HOUR_OF_DAY, 0);
  178. calendar.set(Calendar.MINUTE, 0);
  179. calendar.set(Calendar.SECOND, 0);
  180. calendar.set(Calendar.MILLISECOND, 0);
  181. return calendar.getTime();
  182. }
  183. /**
  184. * 获取一周中的周一
  185. * @param date
  186. * @return
  187. */
  188. public static Date getThisWeekMonday(Date date) {
  189. Calendar cal = Calendar.getInstance();
  190. cal.setTime(date);
  191. // 获得当前日期是一个星期的第几天
  192. int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
  193. if (1 == dayWeek) {
  194. cal.add(Calendar.DAY_OF_MONTH, -1);
  195. }
  196. // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
  197. cal.setFirstDayOfWeek(Calendar.MONDAY);
  198. // 获得当前日期是一个星期的第几天
  199. int day = cal.get(Calendar.DAY_OF_WEEK);
  200. // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
  201. cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
  202. return cal.getTime();
  203. }
  204. public static void main(String[] args) {
  205. System.out.println(getThisWeekMonday(new Date()));
  206. }
  207. }

4、convertUtils模型转化工具

  1. package com.wdk.ums.nlp.utils.convert;
  2. import java.util.List;
  3. import java.util.function.Supplier;
  4. import java.util.stream.Collectors;
  5. import org.springframework.beans.BeanUtils;
  6. /**
  7. * pojo转换工具类
  8. *
  9. * @author lich.wangy
  10. * @date 2018-11-08
  11. */
  12. public class ModelConvertUtils {
  13. /**
  14. * 把source对象的属性复制到result对象中
  15. *
  16. * 例如将A a 转为B b
  17. * B b = PojoConvertUtils.convert(a,B.class);
  18. *
  19. * @param source
  20. * @param s
  21. * @param <R>
  22. * @param <S>
  23. * @return
  24. * @throws IllegalAccessException
  25. * @throws InstantiationException
  26. */
  27. public static <R, S> R convert(S source, Supplier<R> s) {
  28. if (source == null) {
  29. return null;
  30. }
  31. R result = s.get();
  32. BeanUtils.copyProperties(source, result);
  33. return result;
  34. }
  35. /**
  36. * 把source对象列表复制到result对象列表
  37. * * 例如将List<A> a 转为List<B> b
  38. * List<B> b = PojoConvertUtils.convert(a,B.class);
  39. *
  40. * @param sourceList
  41. * @param supplier
  42. * @param <R>
  43. * @param <S>
  44. * @return
  45. * @throws IllegalAccessException
  46. * @throws InstantiationException
  47. */
  48. public static <R, S> List<R> convert(List<S> sourceList, Supplier<R> supplier) {
  49. if (sourceList == null) {
  50. return null;
  51. }
  52. return sourceList.stream().map(each -> convert(each, supplier)).collect(Collectors.toList());
  53. }
  54. }

5、mysql中扩展字段用URL编码处理方式

  1. package com.cainiao.school.management.common.utils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.cainiao.school.management.common.enums.SiteManagementFeePatternEnum;
  4. import lombok.Data;
  5. import org.apache.commons.collections.MapUtils;
  6. import org.apache.commons.lang3.BooleanUtils;
  7. import org.apache.commons.lang3.StringUtils;
  8. import java.io.UnsupportedEncodingException;
  9. import java.net.URLDecoder;
  10. import java.net.URLEncoder;
  11. import java.util.Date;
  12. import java.util.LinkedHashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * <p>Description : {todo} </p>
  17. *
  18. * @author : lierlin
  19. * @version : v1.0.0
  20. * @since : 2020/6/29 17:06
  21. **/
  22. public class FeatureUtil {
  23. public static final String SP = ";";
  24. public static final String SSP = ":";
  25. private static final String DEFAULT_CHARSET = "UTF-8";
  26. public static String getFeature(String feature,String key){
  27. Map<String,String> featureMap = toMap(feature);
  28. return featureMap.get(key);
  29. }
  30. public static boolean getFeatureBoolean(String feature,String key){
  31. Map<String,String> featureMap = toMap(feature);
  32. String res = featureMap.get(key);
  33. return BooleanUtils.toBoolean(res);
  34. }
  35. /**
  36. * map to string
  37. *
  38. * @param map the map
  39. * @return the string
  40. */
  41. public static String toString(final Map<String, String> map) {
  42. final StringBuilder featureSB = new StringBuilder(SP);
  43. if (MapUtils.isEmpty(map)) {
  44. return featureSB.toString();
  45. }
  46. for (Map.Entry<String, String> entry : map.entrySet()) {
  47. final String k = entry.getKey();
  48. final String v = entry.getValue();
  49. if (null == k || null == v) {
  50. // 过滤掉无效的kv对
  51. continue;
  52. }
  53. try {
  54. featureSB
  55. .append(encode(k, v))
  56. .append(SP)
  57. ;
  58. } catch (UnsupportedEncodingException e) {
  59. //TODO : log this
  60. }
  61. }
  62. return featureSB.toString();
  63. }
  64. /**
  65. * string to map
  66. *
  67. * @param featureString the string
  68. * @return the map
  69. */
  70. public static Map<String, String> toMap(final String featureString) {
  71. final Map<String, String> map = new LinkedHashMap<>();
  72. if (StringUtils.isBlank(featureString)) {
  73. return map;
  74. }
  75. for (String kv : StringUtils.split(featureString, SP)) {
  76. if (StringUtils.isBlank(kv)) {
  77. // 过滤掉为空的字符串片段
  78. continue;
  79. }
  80. final String[] ar = StringUtils.split(kv, SSP, 2);
  81. if (ar.length != 2) {
  82. // 过滤掉不符合K:V单目的情况
  83. continue;
  84. }
  85. final String k = ar[0];
  86. final String v = ar[1];
  87. if (StringUtils.isNotBlank(k)
  88. && StringUtils.isNotBlank(v)) {
  89. try {
  90. decode(map, k, v);
  91. } catch (UnsupportedEncodingException e) {
  92. // TODO : log this
  93. }
  94. }
  95. }
  96. return map;
  97. }
  98. private static String encode(final String k, final String v) throws UnsupportedEncodingException {
  99. return URLEncoder.encode(k, DEFAULT_CHARSET) + SSP + URLEncoder.encode(v, DEFAULT_CHARSET);
  100. }
  101. private static void decode(final Map<String, String> map, final String k, final String v) throws UnsupportedEncodingException {
  102. map.put(URLDecoder.decode(k, DEFAULT_CHARSET), URLDecoder.decode(v, DEFAULT_CHARSET));
  103. }
  104. public static void main(String args[]){
  105. String featureStr = ";iss_job_ins_id:776459745343;";
  106. String res = getFeature(featureStr,"navigator_golden_sta");
  107. boolean booleanRes = BooleanUtils.toBoolean(res);
  108. System.out.println(booleanRes);
  109. String bb = "lierlin:lidalin";
  110. System.out.println(URLEncoder.encode(bb));
  111. }
  112. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/292411
推荐阅读
相关标签
  

闽ICP备14008679号