package com.fzzy.igds.util; import com.fzzy.igds.dzhwk.constant.Constant; import com.fzzy.igds.dzhwk.constant.GrainFrequence; 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.util.*; /** * 系统公用方法 * * @author Andy */ public class ContextUtil { public static Map l = new HashMap<>(); //全局用户实时坐在部门 public static Map contextUserDept = new HashMap<>(); /** * 全局用于存放SN与组织编码的关系,例如分机SN和组织编码关系 */ public static Map contextSnCompanyIdMap = new HashMap<>(); /** * 全局命令ID */ public static Map contextOrderId = new HashMap<>(); /** * UUID生成规则 * * @return */ public static String getUUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } 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); } /** * 根据参数生成 执行命令的缓存KEY * * @param companyId * @param serId * @param bizType * @return */ public static final String buildExeOrderId(String companyId, String serId, String bizType) { Integer start = contextOrderId.get("ORDER_ID") == null ? 5000 : contextOrderId.get("ORDER_ID"); contextOrderId.put("ORDER_ID", start + 1); return start + ""; } /** * 设备ID生成规则 * * @param companyId * @param depotId * @param passCode * @return */ public static final String buildDeviceId(String companyId, String depotId, int passCode) { return companyId + "_" + depotId + "_" + passCode; } /** * 设备ID生成规则 * * @param companyId * @param depotId * @param passCode * @return */ public static final String buildDeviceId(String companyId, String depotId, String serId, int passCode) { return companyId + depotId + serId + "_" + passCode; } /** * 根据信息获取INFO表的主键ID 在粮情,气体和虫害中均需要当前方法 * * @param companyId * @param depotId * @param batchId * @return */ public static String buildInfoId(String companyId, String depotId, String batchId) { return companyId + "_" + depotId + "_" + batchId; } public static String getDefaultBatchId() { return DateFormatUtils.format(new Date(), "yyyyMMddHHmm"); } /** * 根据系统配置的批次频率获取批次编号 * * @param freq * @return */ public static String getBatchIdByFireq(String freq) { // 一天一次 if (GrainFrequence.FREQ_02.getCode().equals(freq)) { return DateFormatUtils.format(new Date(), "yyyyMMdd") + "1801"; } // 一天两次 if (GrainFrequence.FREQ_03.getCode().equals(freq)) { String hour = DateFormatUtils.format(new Date(), "HH"); if (Integer.valueOf(hour) >= 0 && Integer.valueOf(hour) <= 12) { return DateFormatUtils.format(new Date(), "yyyyMMdd") + "1301"; } else { return DateFormatUtils.format(new Date(), "yyyyMMdd") + "1802"; } } return getDefaultBatchId(); } /** * 根据当前登陆人获取组织编号,如果没有登陆人获取系统默认的组织编号 * * @return */ public static String getCompanyId() { SysUser user = ShiroUtils.getSysUser(); if (null != user) { return user.getCompanyId(); } else { return "Please login first!"; } } /** * 获取系统默认的=companyId * * @return */ public static String getDefaultCompanyId() { SysUser user = ShiroUtils.getSysUser(); if (null != user) { return user.getCompanyId(); } else { return FrameworkConfig.getCompanyId(); } } /** * 获取登陆人帐号 * * @return */ public static String getLoginUserName() { SysUser user = ShiroUtils.getSysUser(); return null == user ? "SYS" : user.getLoginName(); } /** * 获取登陆人中文名称 * * @return */ public static String getLoginUserCName() { SysUser user = ShiroUtils.getSysUser(); return null == user ? "系统" : user.getUserName(); } public static SysUser getLoginUser() { return ShiroUtils.getSysUser(); } /** * 最高的编码为:组织编码,然后逐级往下,如: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 || Constant.DEFAULT_PARENT_CODE.equals(parentId)) { 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; } } /** * 获取仓库编码 格式: * * @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; } } /** * 生成TCP连接的KEY * * @param ip * @param port * @return */ public static String getServerKey(String ip, Integer port) { return ip + ":" + port; } /** * 根据当前登录人获取,获取二级部门ID,当前人所在部门的二级就是 分库ID * * @param user * @return */ public static String subDeptId(SysUser user) { if (null == user) { user = getLoginUser(); } if (null == user) { return getDefaultCompanyId() + "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 user * @return */ public static boolean isMainDept(SysUser user) { if (null == user) { user = getLoginUser(); } if (null == user){ return false; } if (user.getDeptId().equals(user.getCompanyId())) { return true; } if (user.getDeptId()>1000000) { return true; } return false; } /** * 存放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 buildDeviceStatusKey(String companyId, String serId, String passCode) { if (null == passCode) passCode = "NULL"; return companyId + "_" + serId + "_STATUS_" + passCode; } public static String buildDeviceStatusKey(String companyId, String serId, int passCode) { return companyId + "_" + serId + "_STATUS_" + passCode; } public static , V> Map sortByKey(Map map) { Map result = new LinkedHashMap<>(); map.entrySet().stream() .sorted(Map.Entry.comparingByKey()).forEachOrdered(e -> result.put(e.getKey(), e.getValue())); return result; } /** * 获取顺序号 * @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; } }