package com.ld.igds.util;
|
|
import com.bstek.bdf2.core.business.IDept;
|
import com.bstek.bdf2.core.business.IUser;
|
import com.bstek.bdf2.core.context.ContextHolder;
|
import com.bstek.bdf2.core.exception.NoneLoginException;
|
import com.ld.igds.constant.Constant;
|
import com.ld.igds.constant.GrainFrequence;
|
import com.ld.igds.data.ConfigData;
|
import org.apache.commons.lang.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<String, String> contextUserDept = new HashMap<>();
|
|
/**
|
* 全局用于存放SN与组织编码的关系,例如分机SN和组织编码关系
|
*/
|
public static Map<String, String> contextSnCompanyIdMap = new HashMap<>();
|
|
|
/**
|
* 全局命令ID
|
*/
|
public static Map<String, Integer> 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 random) {
|
return DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + "_" + RandomUtils.nextInt(0, random);
|
}
|
|
/**
|
* 根据参数生成 执行命令的缓存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() {
|
IUser user = ContextHolder.getLoginUser();
|
if (null != user) {
|
return user.getCompanyId();
|
} else {
|
throw new NoneLoginException("Please login first");
|
}
|
}
|
|
/**
|
* 获取系统默认的=companyId
|
*
|
* @return
|
*/
|
public static String getDefaultCompanyId() {
|
IUser user = ContextHolder.getLoginUser();
|
if (null != user) {
|
return user.getCompanyId();
|
} else {
|
ConfigData configData = SpringUtil.getBean(ConfigData.class);
|
return configData.getDefaultCompanyId();
|
}
|
}
|
|
/**
|
* 获取登陆人帐号
|
*
|
* @return
|
*/
|
public static String getLoginUserName() {
|
IUser user = ContextHolder.getLoginUser();
|
return null == user ? "SYS" : user.getUsername();
|
}
|
|
/**
|
* 获取登陆人中文名称
|
*
|
* @return
|
*/
|
public static String getLoginUserCName() {
|
IUser user = ContextHolder.getLoginUser();
|
return null == user ? "系统" : user.getCname();
|
}
|
|
public static IUser getLoginUser() {
|
return ContextHolder.getLoginUser();
|
}
|
|
/**
|
* 最高的编码为:组织编码,然后逐级往下,如: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(IUser user) {
|
if (null == user) user = getLoginUser();
|
|
if (null == user) {
|
return getDefaultCompanyId() + "_001";
|
}
|
|
//从全局获取,如果有则取全局的默认,如果没有则取自己所属
|
if (null != contextUserDept.get(user.getUsername())) {
|
return contextUserDept.get(user.getUsername());
|
}
|
|
if (null == user.getDeptId()) {
|
return user.getCompanyId();
|
}
|
return user.getDeptId();
|
}
|
|
public static void updateSubDept(String userId, String deptId) {
|
if (null == deptId) return;
|
contextUserDept.put(userId, deptId);
|
}
|
|
/**
|
* 验证 当前人是否在主部门,即当前人所属部门默认在最高部门
|
*
|
* @param user
|
* @return
|
*/
|
public static boolean isMainDept(IUser user) {
|
if (null == user) user = getLoginUser();
|
if (null == user)
|
return false;
|
|
List<IDept> list = user.getDepts();
|
|
if (null == list || list.isEmpty()) {
|
return false;
|
}
|
|
if (null == list.get(0).getParentId()) {
|
return true;
|
}
|
if (list.get(0).getId().equals(user.getCompanyId())) {
|
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 <K extends Comparable<? super K>, V> Map<K, V> sortByKey(Map<K, V> map) {
|
Map<K, V> result = new LinkedHashMap<>();
|
|
map.entrySet().stream()
|
.sorted(Map.Entry.<K, V>comparingByKey()).forEachOrdered(e -> result.put(e.getKey(), e.getValue()));
|
return result;
|
|
}
|
|
}
|