| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | |
| | | /** |
| | | * 系统公用方法 |
| | |
| | | */ |
| | | public class ContextUtil { |
| | | |
| | | public static Map<String, Boolean> l = new HashMap<>(); |
| | | //全局用户实时坐在部门 |
| | | public static Map<String, String> contextUserDept = new HashMap<>(); |
| | | /** |
| | | * 全局命令ID |
| | | */ |
| | | public static Map<String, Integer> contextOrderId = new HashMap<>(); |
| | | private static final AtomicLong sequence = new AtomicLong(0); |
| | | private static String lastTimestamp = ""; |
| | | |
| | | /** |
| | | * UUID生成规则 |
| | | * 生成顺序ID:年月日时分秒毫秒(17位) + 序列号(4位) = 21位 |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getUUID() { |
| | | return UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); |
| | | } |
| | | public static String generateId() { |
| | | String currentTimestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); |
| | | long seq; |
| | | synchronized (ContextUtil.class) { |
| | | if (currentTimestamp.equals(lastTimestamp)) { |
| | | seq = sequence.incrementAndGet(); |
| | | } else { |
| | | sequence.set(0); |
| | | seq = 0; |
| | | |
| | | public static String getBusinessID() { |
| | | return DateFormatUtils.format(new Date(), "yyyyMMdd") + String.format("%04d", RandomUtils.nextInt(0, 10000)); |
| | | } |
| | | |
| | | public static String getCurTimeMillis() { |
| | | return System.currentTimeMillis() + ""; |
| | | } |
| | | |
| | | public static String getTimeId() { |
| | | return DateFormatUtils.format(new Date(), "yyyyMMddHHmmss"); |
| | | } |
| | | |
| | | public static String getTimeId(int start, int end) { |
| | | return DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + RandomUtils.nextInt(start, end); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前年份 |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getYear() { |
| | | return DateFormatUtils.format(new Date(), "yyyyMM"); |
| | | } |
| | | |
| | | /** |
| | | * 生成资产编码ID |
| | | * @return |
| | | */ |
| | | public static String createAssetId() { |
| | | return "NO" + randomChar(4) + getYear() + randomNum(6); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 生成业务ID |
| | | * @param prefix |
| | | * @return |
| | | */ |
| | | public static String getBizId(String prefix) { |
| | | if (prefix == null) prefix = "ID"; |
| | | return prefix + getTimeId() + randomNum(4); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 随机生成大写字母 |
| | | * |
| | | * @param length 长度 |
| | | * @return |
| | | */ |
| | | public static String randomChar(int length) { |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | char randomLetter = (char) (random.nextInt(26) + 'A'); // 65-90 |
| | | sb.append(randomLetter); |
| | | lastTimestamp = currentTimestamp; |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | return String.format("%s%04d", currentTimestamp, seq); |
| | | } |
| | | |
| | | public static String UUID() { |
| | | return UUID.randomUUID().toString().replaceAll("-", ""); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 随机生成数字 |
| | | * @param length |
| | | * @return |
| | | */ |
| | | public static String randomNum(int length) { |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for (int i = 0; i < length; i++) { |
| | | int digit = random.nextInt(10); // 生成0-9的随机数 |
| | | sb.append(digit); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | |
| | | public static String getDefaultBatchId() { |
| | | return DateFormatUtils.format(new Date(), "yyyyMMddHHmm"); |
| | | } |
| | | |
| | | /** |
| | | * 根据当前登陆人获取组织编号,如果没有登陆人获取系统默认的组织编号 |
| | | * |
| | | * @return |
| | | * 默认获取登录人所在组织,如果未登录则获取系统默认组织 |
| | | * @return 组织ID |
| | | */ |
| | | public static String getCompanyId() { |
| | | return ShiroUtils.getLoginUserCompanyId(); |
| | | } |
| | | |
| | | /** |
| | | * 获取系统默认的=companyId |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getDefaultCompanyId() { |
| | | SysUser user = ShiroUtils.getSysUser(); |
| | | if (null != user) { |
| | | return user.getCompanyId(); |
| | | } else { |
| | | return FrameworkConfig.getCompanyId(); |
| | | } |
| | | if(null != user) return user.getCompanyId(); |
| | | return FrameworkConfig.getCompanyId(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 最高的编码为:组织编码,然后逐级往下,如:5013,5013_001,5013_002,5013_001_001 |
| | | * |
| | | * @param companyId 必须 |
| | | * @param parentId 可空 |
| | | * @param endId 可空 |
| | | * @param format 必须 三位传1000,四位传10000 |
| | | * @return |
| | | */ |
| | | public static String getNextId(String companyId, String parentId, |
| | | String endId, int format) { |
| | | if (parentId == null) { |
| | | return companyId; |
| | | } |
| | | try { |
| | | int endNum = 0; |
| | | if (StringUtils.isNotEmpty(endId)) { |
| | | endNum = Integer.valueOf(endId.substring(endId.length() - 3)); |
| | | } |
| | | String endStr = ("" + (endNum + format + 1)).substring(1); |
| | | |
| | | if (parentId.equals(companyId)) { |
| | | return companyId + "_" + endStr; |
| | | } |
| | | parentId = parentId.substring(parentId.lastIndexOf("_") + 1); |
| | | return companyId + "_" + parentId + "_" + endStr; |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | public static String getLoginUserName() { |
| | | return ShiroUtils.getUserName() ; |
| | | } |
| | | |
| | | /** |
| | | * 获取仓库编码 格式: |
| | | * |
| | | * @param deptId 5102_001_001 5102_001_002 |
| | | * 必须 分库编码 |
| | | * @param endId 必须 最后的仓库编码 |
| | | * @param format 必须 三位传1000,四位传10000,默认都传1000 |
| | | * @return |
| | | */ |
| | | public static String getNextDepotId(String deptId, String endId, int format) { |
| | | try { |
| | | int endNum = 0; |
| | | if (StringUtils.isNotEmpty(endId)) { |
| | | endNum = Integer.valueOf(endId.substring(endId.length() - 3)); |
| | | } |
| | | String endStr = ("" + (endNum + format + 1)).substring(1); |
| | | |
| | | endStr = deptId.substring(deptId.indexOf("_") + 1) + "_" + endStr; |
| | | |
| | | return endStr.replaceAll("_", ""); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取删除注释 |
| | | * |
| | | * @author sgj |
| | | * @date 2025/08/05 |
| | | * @param desc 删除文案描述 |
| | | */ |
| | | public static String getDeleteDesc(String desc) { |
| | | if (StringUtils.isEmpty(desc)) { |
| | | desc = "删除数据"; |
| | | } |
| | | return desc + "_" + ShiroUtils.getLoginName() + "_" + new Date(); |
| | | } |
| | | |
| | | |
| | | } |