| | |
| | | package com.ycl.common.util; |
| | | |
| | | |
| | | import com.ycl.mapper.common.GeneratedCodeMapper; |
| | | import com.ycl.utils.common.RandomUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class UtilNumber { |
| | | private GeneratedCodeMapper generatedCodeMapper; |
| | | |
| | | @Autowired |
| | | public void setGeneratedCodeMapper(GeneratedCodeMapper generatedCodeMapper) { |
| | | this.generatedCodeMapper = generatedCodeMapper; |
| | | } |
| | | |
| | | public static String getCode(String type ,int n) { |
| | | String code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+RandomStringUtil.getRandomString(n,RandomStringUtil.ALL); |
| | | return code; |
| | | } |
| | | public static String getNumber(String type ,int n) { |
| | | String code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())+RandomNumberGenerator.generateNumber(n); |
| | | return code; |
| | | } |
| | | public static String getApplicationCode(String type ,int n) { |
| | | String code = type+getApplicationSecret(n); |
| | | return code; |
| | | } |
| | | public static String getApplicationSecret(int n) { |
| | | String code = RandomStringUtil.getRandomString(n,RandomStringUtil.CAPITAL_NUM_LOWER); |
| | | return code; |
| | | } |
| | | public static String getRqUID(String channel) { |
| | | // 6位随机数,用于生成订单号 |
| | | public static String getCode(String type, int n) { |
| | | String code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomStringUtil.getRandomString(n, RandomStringUtil.ALL); |
| | | return code; |
| | | } |
| | | |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | public static String getNumber(String type, int n) { |
| | | String code = type + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomNumberGenerator.generateNumber(n); |
| | | return code; |
| | | } |
| | | |
| | | String rqUID = channel + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand1 + rand2; |
| | | return rqUID; |
| | | } |
| | | public static String getRqTradeNo(String channel) { |
| | | // 6位随机数,用于生成交易号 |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | String rqUID = channel + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand2; |
| | | return rqUID; |
| | | } |
| | | public static String getSettleAccount(String memberId) { |
| | | // md5 |
| | | String subStr = memberId.substring(memberId.length() - 12, |
| | | memberId.length()); |
| | | String md5Str = Md5.md5(Md5.md5(subStr)); |
| | | public static String getApplicationCode(String type, int n) { |
| | | String code = type + getApplicationSecret(n); |
| | | return code; |
| | | } |
| | | |
| | | public static String getApplicationSecret(int n) { |
| | | String code = RandomStringUtil.getRandomString(n, RandomStringUtil.CAPITAL_NUM_LOWER); |
| | | return code; |
| | | } |
| | | |
| | | public static String getRqUID(String channel) { |
| | | // 6位随机数,用于生成订单号 |
| | | |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | |
| | | String rqUID = channel + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand1 + rand2; |
| | | return rqUID; |
| | | } |
| | | |
| | | public static String getRqTradeNo(String channel) { |
| | | // 6位随机数,用于生成交易号 |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | String rqUID = channel + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand2; |
| | | return rqUID; |
| | | } |
| | | |
| | | public static String getSettleAccount(String memberId) { |
| | | // md5 |
| | | String subStr = memberId.substring(memberId.length() - 12, |
| | | memberId.length()); |
| | | String md5Str = Md5.md5(Md5.md5(subStr)); |
| | | // String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | // String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | String merchantId = subStr + md5Str.substring(0, 3); |
| | | return merchantId; |
| | | String merchantId = subStr + md5Str.substring(0, 3); |
| | | return merchantId; |
| | | |
| | | } |
| | | } |
| | | |
| | | public static String getShopQRCode(String memberId) { |
| | | // md5 |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | String shopQRCode = Md5.md5(memberId.substring(0, 12) + rand1 + rand2); |
| | | return shopQRCode; |
| | | public static String getShopQRCode(String memberId) { |
| | | // md5 |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(6); |
| | | String shopQRCode = Md5.md5(memberId.substring(0, 12) + rand1 + rand2); |
| | | return shopQRCode; |
| | | |
| | | } |
| | | } |
| | | |
| | | public static String getMsgId() { |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(4); |
| | | public static String getMsgId() { |
| | | String rand1 = RandomNumberGenerator.generateNumber(4); |
| | | String rand2 = RandomNumberGenerator.generateNumber(4); |
| | | |
| | | String msgId = "merchant" |
| | | + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand1 + rand2; |
| | | return msgId; |
| | | String msgId = "merchant" |
| | | + DateUtils.getNowDate("yyyyMMdd") |
| | | + DateUtils.getNowDate("HHmmss") + rand1 + rand2; |
| | | return msgId; |
| | | |
| | | } |
| | | } |
| | | |
| | | public static String toSignStr(Object obj, Class<?> clazz) { |
| | | if (obj == null) { |
| | | return ""; |
| | | } |
| | | List<String> listStr = new ArrayList<String>(); |
| | | public static String toSignStr(Object obj, Class<?> clazz) { |
| | | if (obj == null) { |
| | | return ""; |
| | | } |
| | | List<String> listStr = new ArrayList<String>(); |
| | | |
| | | Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得 |
| | | try { |
| | | for (Field f : fields) { |
| | | f.setAccessible(true); // 设置些属性是可以访问的 |
| | | Object val = f.get(obj); // 得到此属性的值 |
| | | String name = f.getName(); // 得到此属性的名称 |
| | | if (!name.equals("sign") && CommonUtils.isNotEmpty(val)) { |
| | | listStr.add(name + "=" + val); |
| | | } |
| | | } |
| | | Field[] fields = clazz.getDeclaredFields();// 根据Class对象获得属性 私有的也可以获得 |
| | | try { |
| | | for (Field f : fields) { |
| | | f.setAccessible(true); // 设置些属性是可以访问的 |
| | | Object val = f.get(obj); // 得到此属性的值 |
| | | String name = f.getName(); // 得到此属性的名称 |
| | | if (!name.equals("sign") && CommonUtils.isNotEmpty(val)) { |
| | | listStr.add(name + "=" + val); |
| | | } |
| | | } |
| | | |
| | | } catch (IllegalAccessException e) { |
| | | } |
| | | // 节点间以&符连接,形成最终待签名字符串 |
| | | Collections.sort(listStr); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < listStr.size(); i++) { |
| | | String msg = listStr.get(i); |
| | | if (i > 0) { |
| | | sb.append("&"); |
| | | } |
| | | sb.append(msg); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | } catch (IllegalAccessException e) { |
| | | } |
| | | // 节点间以&符连接,形成最终待签名字符串 |
| | | Collections.sort(listStr); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < listStr.size(); i++) { |
| | | String msg = listStr.get(i); |
| | | if (i > 0) { |
| | | sb.append("&"); |
| | | } |
| | | sb.append(msg); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 功能描述:去除字符串首部为"0"字符 |
| | | * |
| | | * @param str |
| | | * 传入需要转换的字符串 |
| | | * @return 转换后的字符串 |
| | | */ |
| | | public static String removeZero(String str) { |
| | | char ch; |
| | | String result = ""; |
| | | if (str != null && str.trim().length() > 0 |
| | | && !str.trim().equalsIgnoreCase("null")) { |
| | | try { |
| | | for (int i = 0; i < str.length(); i++) { |
| | | ch = str.charAt(i); |
| | | if (ch != '0') { |
| | | result = str.substring(i); |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | result = ""; |
| | | } |
| | | } else { |
| | | result = ""; |
| | | } |
| | | return result; |
| | | /** |
| | | * 功能描述:去除字符串首部为"0"字符 |
| | | * |
| | | * @param str 传入需要转换的字符串 |
| | | * @return 转换后的字符串 |
| | | */ |
| | | public static String removeZero(String str) { |
| | | char ch; |
| | | String result = ""; |
| | | if (str != null && str.trim().length() > 0 |
| | | && !str.trim().equalsIgnoreCase("null")) { |
| | | try { |
| | | for (int i = 0; i < str.length(); i++) { |
| | | ch = str.charAt(i); |
| | | if (ch != '0') { |
| | | result = str.substring(i); |
| | | break; |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | result = ""; |
| | | } |
| | | } else { |
| | | result = ""; |
| | | } |
| | | return result; |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 功能描述:金额字符串转换:单位分转成单元 |
| | | * |
| | | * @param str |
| | | * 传入需要转换的金额字符串 |
| | | * @return 转换后的金额字符串 |
| | | */ |
| | | public static String fenToYuan(Object o) { |
| | | if (o == null) |
| | | return "0.00"; |
| | | String s = o.toString(); |
| | | int len = -1; |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) { |
| | | s = removeZero(s); |
| | | if (s != null && s.trim().length() > 0 |
| | | && !s.equalsIgnoreCase("null")) { |
| | | len = s.length(); |
| | | int tmp = s.indexOf("-"); |
| | | if (tmp >= 0) { |
| | | if (len == 2) { |
| | | sb.append("-0.0").append(s.substring(1)); |
| | | } else if (len == 3) { |
| | | sb.append("-0.").append(s.substring(1)); |
| | | } else { |
| | | sb.append(s.substring(0, len - 2)).append(".") |
| | | .append(s.substring(len - 2)); |
| | | } |
| | | } else { |
| | | if (len == 1) { |
| | | sb.append("0.0").append(s); |
| | | } else if (len == 2) { |
| | | sb.append("0.").append(s); |
| | | } else { |
| | | sb.append(s.substring(0, len - 2)).append(".") |
| | | .append(s.substring(len - 2)); |
| | | } |
| | | } |
| | | } else { |
| | | sb.append("0.00"); |
| | | } |
| | | } else { |
| | | sb.append("0.00"); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | /** |
| | | * 功能描述:金额字符串转换:单位分转成单元 |
| | | * |
| | | * @param str 传入需要转换的金额字符串 |
| | | * @return 转换后的金额字符串 |
| | | */ |
| | | public static String fenToYuan(Object o) { |
| | | if (o == null) |
| | | return "0.00"; |
| | | String s = o.toString(); |
| | | int len = -1; |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) { |
| | | s = removeZero(s); |
| | | if (s != null && s.trim().length() > 0 |
| | | && !s.equalsIgnoreCase("null")) { |
| | | len = s.length(); |
| | | int tmp = s.indexOf("-"); |
| | | if (tmp >= 0) { |
| | | if (len == 2) { |
| | | sb.append("-0.0").append(s.substring(1)); |
| | | } else if (len == 3) { |
| | | sb.append("-0.").append(s.substring(1)); |
| | | } else { |
| | | sb.append(s.substring(0, len - 2)).append(".") |
| | | .append(s.substring(len - 2)); |
| | | } |
| | | } else { |
| | | if (len == 1) { |
| | | sb.append("0.0").append(s); |
| | | } else if (len == 2) { |
| | | sb.append("0.").append(s); |
| | | } else { |
| | | sb.append(s.substring(0, len - 2)).append(".") |
| | | .append(s.substring(len - 2)); |
| | | } |
| | | } |
| | | } else { |
| | | sb.append("0.00"); |
| | | } |
| | | } else { |
| | | sb.append("0.00"); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 功能描述:金额字符串转换:单位元转成单分 |
| | | * |
| | | * @param str |
| | | * 传入需要转换的金额字符串 |
| | | * @return 转换后的金额字符串 |
| | | */ |
| | | public static String yuanToFen(Object o) { |
| | | if (o == null) |
| | | return "0"; |
| | | String s = o.toString(); |
| | | int posIndex = -1; |
| | | String str = ""; |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) { |
| | | posIndex = s.indexOf("."); |
| | | if (posIndex > 0) { |
| | | int len = s.length(); |
| | | if (len == posIndex + 1) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append("00"); |
| | | } else if (len == posIndex + 2) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str) |
| | | .append(s.substring(posIndex + 1, posIndex + 2)) |
| | | .append("0"); |
| | | } else if (len == posIndex + 3) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append( |
| | | s.substring(posIndex + 1, posIndex + 3)); |
| | | } else { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append( |
| | | s.substring(posIndex + 1, posIndex + 3)); |
| | | } |
| | | } else { |
| | | sb.append(s).append("00"); |
| | | } |
| | | } else { |
| | | sb.append("0"); |
| | | } |
| | | str = removeZero(sb.toString()); |
| | | if (str != null && str.trim().length() > 0 |
| | | && !str.trim().equalsIgnoreCase("null")) { |
| | | return str; |
| | | } else { |
| | | return "0"; |
| | | } |
| | | } |
| | | /** |
| | | * 功能描述:金额字符串转换:单位元转成单分 |
| | | * |
| | | * @param str 传入需要转换的金额字符串 |
| | | * @return 转换后的金额字符串 |
| | | */ |
| | | public static String yuanToFen(Object o) { |
| | | if (o == null) |
| | | return "0"; |
| | | String s = o.toString(); |
| | | int posIndex = -1; |
| | | String str = ""; |
| | | StringBuilder sb = new StringBuilder(); |
| | | if (s != null && s.trim().length() > 0 && !s.equalsIgnoreCase("null")) { |
| | | posIndex = s.indexOf("."); |
| | | if (posIndex > 0) { |
| | | int len = s.length(); |
| | | if (len == posIndex + 1) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append("00"); |
| | | } else if (len == posIndex + 2) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str) |
| | | .append(s.substring(posIndex + 1, posIndex + 2)) |
| | | .append("0"); |
| | | } else if (len == posIndex + 3) { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append( |
| | | s.substring(posIndex + 1, posIndex + 3)); |
| | | } else { |
| | | str = s.substring(0, posIndex); |
| | | if (str == "0") { |
| | | str = ""; |
| | | } |
| | | sb.append(str).append( |
| | | s.substring(posIndex + 1, posIndex + 3)); |
| | | } |
| | | } else { |
| | | sb.append(s).append("00"); |
| | | } |
| | | } else { |
| | | sb.append("0"); |
| | | } |
| | | str = removeZero(sb.toString()); |
| | | if (str != null && str.trim().length() > 0 |
| | | && !str.trim().equalsIgnoreCase("null")) { |
| | | return str; |
| | | } else { |
| | | return "0"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 创建商铺编号 |
| | | * 店铺编号:年月日 + 序号 例:202210100001 |
| | | * |
| | | * @param |
| | | * @return java.lang.String |
| | | * @author AI |
| | | * @date 2022-10-10 15:43 |
| | | */ |
| | | public String createShopCode() { |
| | | String ymd = getYMD(); |
| | | Integer number = generatedCodeMapper.createNumber(ymd, "shop"); |
| | | String numberStr = RandomUtils.formatSign(number, 4); |
| | | return getYMD() + numberStr; |
| | | } |
| | | |
| | | /** |
| | | * 创建案件编号 |
| | | * 案件编号规则:年份 + 区县编号 + 月日 + 序号 例:202233112310100001 |
| | | * |
| | | * @param |
| | | * @return java.lang.String |
| | | * @author AI |
| | | * @date 2022-10-10 15:43 |
| | | */ |
| | | public String createCaseCode() { |
| | | String ymd = getYMD(); |
| | | Integer number = generatedCodeMapper.createNumber(ymd, "case"); |
| | | String numberStr = RandomUtils.formatSign(number, 4); |
| | | String year = String.valueOf(LocalDateTime.now().getYear()); |
| | | String areaCode = "331123"; |
| | | DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("MMdd"); |
| | | String md = dtf2.format(LocalDateTime.now()); |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | stringBuilder.append(year); |
| | | stringBuilder.append(areaCode); |
| | | stringBuilder.append(md); |
| | | stringBuilder.append(numberStr); |
| | | return stringBuilder.toString(); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | System.out.println(getRqUID("1")); |
| | | private static String getYMD() { |
| | | DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyyMMdd"); |
| | | return dtf2.format(LocalDateTime.now()); |
| | | } |
| | | |
| | | } |
| | | public static void main(String[] args) { |
| | | |
| | | } |
| | | } |