package com.fzzy.igds.utils; import com.ruoyi.common.config.FrameworkConfig; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import org.apache.commons.lang3.RandomUtils; 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; /** * 系统公用方法 * * @author Andy */ public class ContextUtil { private static final AtomicLong sequence = new AtomicLong(0); private static String lastTimestamp = ""; //全局用户实时坐在部门 public static Map contextUserDept = new HashMap<>(); /** * 全局用于存放SN与组织编码的关系,例如分机SN和组织编码关系 */ public static Map contextSnCompanyIdMap = new HashMap<>(); /** * 生成顺序ID:年月日时分秒毫秒(17位) + 序列号(4位) = 21位 */ public static String generateId() { String pattern = "yyyyMMddHHmmssSSS"; return generateId(null, pattern); } /** * 生成单据编码, (格式: yyyyMMddHHmmss + 4位随机数) * @param prefix * @return */ public static String generateOrderId(String prefix) { String pattern = "yyyyMMddHHmmss"; return generateId(prefix, pattern); } /** * * * @return */ private static String generateId(String prefix, String pattern) { if (null == pattern) pattern = "yyyyMMddHHmmss"; String currentTimestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern)); long seq; synchronized (ContextUtil.class) { if (currentTimestamp.equals(lastTimestamp)) { seq = sequence.incrementAndGet(); } else { sequence.set(0); seq = 0; lastTimestamp = currentTimestamp; } } if (null == prefix) return String.format("%s%04d", currentTimestamp, seq); return prefix + "_" + String.format("%s%04d", currentTimestamp, seq); } public static String UUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } /** * 默认获取登录人所在组织,如果未登录则获取系统默认组织 * @return 组织ID */ public static String getCompanyId() { SysUser user = ShiroUtils.getSysUser(); if (null != user) return user.getCompanyId(); return FrameworkConfig.getCompanyId(); } public static String getLoginUserName() { SysUser user = ShiroUtils.getSysUser(); return null == user ? "系统" : user.getUserName(); } public static SysUser getLoginUser() { return ShiroUtils.getSysUser(); } public static String subDeptId(SysUser user) { if (null == user) { user = getLoginUser(); } if (null == user) { return getCompanyId() + "001"; } //从全局获取,如果有则取全局的默认,如果没有则取自己所属 if (null != contextUserDept.get(user.getLoginName())) { return contextUserDept.get(user.getLoginName()); } if (null == user.getDeptId()) { return user.getCompanyId(); } return user.getDeptId().toString(); } public static void updateSubDept(String userId, String deptId) { if (null == deptId) return; contextUserDept.put(userId, deptId); } /** * 获取顺序号 * @param oldOrderId 原有顺序号 * @param num 位数 * @return */ public static String getOrderId(String oldOrderId, Integer num) { Integer index3 = 1001; Integer index4 = 10001; Integer index5 = 100001; Integer index = 0; String orderId = "001"; if (StringUtils.isNotEmpty(oldOrderId)) { index = Integer.valueOf(oldOrderId); } if (3 == num) { orderId = ((index3 + index) + "").substring(1); } if (4 == num) { orderId = ((index4 + index) + "").substring(1); } if (5 == num) { orderId = ((index5 + index) + "").substring(1); } return orderId; } /** * 存放SN与所属组织的关系 * * @param sn * @param companyId */ public static void addSerCompany(String sn, String companyId) { contextSnCompanyIdMap.put(sn, companyId); } /** * 通过SN获取当前SN所属的组织 * * @param sn * @return */ public static String getCompanyIdBySn(String sn) { return contextSnCompanyIdMap.get(sn); } 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); } }