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