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<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);
|
}
|
}
|
|
} 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) {
|
|
}
|
}
|