From 5d15287b2a06f978485ac6af71e33e1a82b43a65 Mon Sep 17 00:00:00 2001 From: kimi <kimi42345@gmail.com> Date: 星期三, 15 四月 2020 16:29:55 +0800 Subject: [PATCH] fix 上传后生成版本连接池用完不释放问题 --- src/main/java/com/highdatas/mdm/util/DbUtils.java | 204 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 195 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/highdatas/mdm/util/DbUtils.java b/src/main/java/com/highdatas/mdm/util/DbUtils.java index 573e654..d315e34 100644 --- a/src/main/java/com/highdatas/mdm/util/DbUtils.java +++ b/src/main/java/com/highdatas/mdm/util/DbUtils.java @@ -2,13 +2,23 @@ import com.baomidou.mybatisplus.annotations.TableName; -import com.highdatas.mdm.entity.Maintain; -import com.highdatas.mdm.entity.MaintainField; -import com.highdatas.mdm.entity.TUser; -import com.highdatas.mdm.entity.TableSchemaResult; +import com.highdatas.mdm.entity.Character; +import com.highdatas.mdm.entity.*; +import com.highdatas.mdm.pojo.MasterAuthorType; import com.highdatas.mdm.pojo.Segment; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.mapping.ParameterMode; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.property.PropertyTokenizer; +import org.apache.ibatis.scripting.xmltags.ForEachSqlNode; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; @@ -18,6 +28,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * @author kimi @@ -26,7 +37,16 @@ */ @Slf4j +@Component public class DbUtils { + + private static UserRoleClient userRoleClient; + + @Autowired + public void setUserRoleClient(UserRoleClient userRoleClient){ + DbUtils.userRoleClient = userRoleClient; + } + private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; public static String versionAddSub (String baseVersion) { @@ -240,6 +260,38 @@ return orderNo + 1; } + public static Date getDateByStart() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date zero = calendar.getTime(); + return zero; + } + public static Date getDateByEnd() { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date zero = calendar.getTime(); + return zero; + } + + public static long getDistanceTime2Long(Date startTime, Date endTime) { + long time1 = startTime.getTime(); + long time2 = endTime.getTime(); + + long diff; + if (time1 < time2) { + diff = time2 - time1; + } else { + diff = time1 - time2; + } + return diff; + } + public static final String getChineseOrEnglishOrNumber(String str) { StringBuffer sbf = new StringBuffer(); char[] charArray = str.toCharArray(); @@ -340,13 +392,147 @@ } public static TUser getUser(HttpServletRequest request) { - return (TUser) request.getSession().getAttribute(Constant.USER); + String userId = request.getParameter("userId"); + if (StringUtils.isEmpty(userId)) { + return (TUser) request.getSession().getAttribute(Constant.USER); + } else { + return getUserById(userId); + } + } + + public static Character getCharacter(HttpServletRequest request) { + String characterType = request.getParameter("characterType"); + if (StringUtils.isEmpty(characterType)) { + return (TUser) request.getSession().getAttribute(Constant.USER); + }else { + String characterId = request.getParameter("characterId"); + MasterAuthorType type = MasterAuthorType.valueOf(characterType); + switch (type){ + case role: + return DbUtils.getRoleById(characterId); + case user: + return DbUtils.getUserById(characterId); + case groupInfo: + return DbUtils.getGroupById(characterId); + } + } + return null; + } + + private static Character getGroupById(String characterId) { + return new TUserGroup().setGroupId(characterId); + } + + private static Character getRoleById(String roleId) { + return userRoleClient.getRoleByRoleId(roleId); + } + + public static boolean addOneRole(TUser user, List<String> roleIds) { + if (user == null) { + return false; + } + return userRoleClient.addRoleByUser(user.getUserId(), roleIds, user.getUserName()); + } + + public static boolean groupAddOneRole(String userId, String groupId, List<String> roleIds) { + + return userRoleClient.addRoleByGroupId(userId, roleIds, groupId); + } + + public static boolean delOneRole(String userId, List<String> roleIds) { + return userRoleClient.deleteRoleByUser(userId, roleIds); + } + public static boolean groupDelOneRole(String groupId, List<String> roleIds) { + return userRoleClient.deleteRoleByGroupId(roleIds, groupId); + } + public static TUser getUserById(String userId) { + TUser tUserById = userRoleClient.getTUserById(userId); + return tUserById; + } + + public static Set<String> getRoleByGroup(String groupId) { + List<TRole> tRoleListByUserId = userRoleClient.getRoleListByGroupId(groupId); + if (tRoleListByUserId == null || tRoleListByUserId.isEmpty()){ + return new HashSet<>(); + } + Set<String> collect = tRoleListByUserId.stream().map(tRole -> tRole.getRoleId()).collect(Collectors.toSet()); + return collect; } public static Set<String> getRoleByUser(String userId) { - Set<String> roleIds = new HashSet<>(); - roleIds.add("R001"); - roleIds.add("R002"); - return roleIds; + List<TRole> tRoleListByUserId = userRoleClient.getTRoleListByUserId(userId); + if (tRoleListByUserId == null || tRoleListByUserId.isEmpty()){ + return new HashSet<>(); + } + Set<String> collect = tRoleListByUserId.stream().map(tRole -> tRole.getRoleId()).collect(Collectors.toSet()); + return collect; } + + public static Set<String> getGroupByUser(String userId) { + List<TUserGroup> tRoleListByUserId = userRoleClient.getUserGroupByUserId(userId); + if (tRoleListByUserId == null || tRoleListByUserId.isEmpty()){ + return new HashSet<>(); + } + Set<String> collect = tRoleListByUserId.stream().map(tRole -> tRole.getGroupId()).collect(Collectors.toSet()); + return collect; + } + + + public static MyBatisSql getMyBatisSql(String id, Map<String, Object> parameterMap, SqlSessionFactory sqlSessionFactory) { + MyBatisSql ibatisSql = new MyBatisSql(); + MappedStatement ms = sqlSessionFactory.getConfiguration().getMappedStatement(id); + BoundSql boundSql = ms.getBoundSql(parameterMap); + ibatisSql.setSql(boundSql.getSql()); + List<ParameterMapping> parameterMappings = boundSql.getParameterMappings(); + Configuration configuration = sqlSessionFactory.getConfiguration(); + if (parameterMappings != null) { + Object[] parameterArray = new Object[parameterMappings.size()]; + ParameterMapping parameterMapping = null; + Object value = null; + Object parameterObject = null; + MetaObject metaObject = null; + PropertyTokenizer prop = null; + String propertyName = null; + String[] names = null; + for (int i = 0; i < parameterMappings.size(); i++) { + parameterMapping = parameterMappings.get(i); + if (parameterMapping.getMode() != ParameterMode.OUT) { + propertyName = parameterMapping.getProperty(); + names = propertyName.split("\\."); + if (propertyName.indexOf(".") != -1 && names.length == 2) { + parameterObject = parameterMap.get(names[0]); + propertyName = names[1]; + } else if (propertyName.indexOf(".") != -1 && names.length == 3) { + parameterObject = parameterMap.get(names[0]); // map + if (parameterObject instanceof Map) { + parameterObject = ((Map) parameterObject).get(names[1]); + } + propertyName = names[2]; + } else { + parameterObject = parameterMap.get(propertyName); + } + metaObject = parameterMap == null ? null : MetaObject.forObject(parameterObject,configuration.getObjectFactory(),configuration.getObjectWrapperFactory(), configuration.getReflectorFactory()); + prop = new PropertyTokenizer(propertyName); + if (parameterObject == null) { + value = null; + } else if (ms.getConfiguration().getTypeHandlerRegistry().hasTypeHandler(parameterObject.getClass())) { + value = parameterObject; + } else if (boundSql.hasAdditionalParameter(propertyName)) { + value = boundSql.getAdditionalParameter(propertyName); + } else if (propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX) && boundSql.hasAdditionalParameter(prop.getName())) { + value = boundSql.getAdditionalParameter(prop.getName()); + if (value != null) { + value = MetaObject.forObject(value,configuration.getObjectFactory(),configuration.getObjectWrapperFactory(), configuration.getReflectorFactory()).getValue(propertyName.substring(prop.getName().length())); + } + } else { + value = metaObject == null ? null : metaObject.getValue(propertyName); + } + parameterArray[i] = value; + } + } + ibatisSql.setParameters(parameterArray); + } + return ibatisSql; + } + } -- Gitblit v1.8.0