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位随机数,用于生成订单号 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; } 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); 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 listStr = new ArrayList(); 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(); } /** * 功能描述:去除字符串首部为"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 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(); } private static String getYMD() { DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyyMMdd"); return dtf2.format(LocalDateTime.now()); } public static void main(String[] args) { } }