From c007f0ca1785db093d48f4846cda82fe8e955765 Mon Sep 17 00:00:00 2001
From: kimi <kimi42345@gmail.com>
Date: 星期三, 27 五月 2020 09:59:29 +0800
Subject: [PATCH] merage

---
 src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java | 1150 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 982 insertions(+), 168 deletions(-)

diff --git a/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java
index ebca626..0b10b35 100644
--- a/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java
+++ b/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java
@@ -4,25 +4,25 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.highdatas.mdm.entity.Character;
 import com.highdatas.mdm.entity.*;
 import com.highdatas.mdm.mapper.TableInfoMapper;
 import com.highdatas.mdm.pojo.*;
 import com.highdatas.mdm.service.*;
-import com.highdatas.mdm.util.Constant;
-import com.highdatas.mdm.util.ContentBuilder;
-import com.highdatas.mdm.util.DbUtils;
+import com.highdatas.mdm.util.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.mybatis.spring.SqlSessionTemplate;
+import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.text.MessageFormat;
 import java.util.*;
 import java.util.stream.Collectors;
-
 /**
  * @author kimi
  * @description
@@ -30,6 +30,7 @@
  */
 
 @Service
+@Slf4j
 public class MasterDataServiceImpl implements MasterDataService {
     @Autowired
     IMenuMappingService menuMappingService;
@@ -44,9 +45,27 @@
     @Autowired
     IFlowsService flowsService;
     @Autowired
-
+    RedisClient redisClient;
+    @Autowired
+    IMaintainFieldService maintainFieldService;
+    @Autowired
+    IMasterAuthorService masterAuthorService;
+    @Autowired
+    SqlSessionFactory sqlSessionFactory;
     @Resource
-    protected SqlSessionTemplate sqlSessionTemplate;
+    protected DataSource dataSource;
+    @Autowired
+    AntianaphylaxisClient antianaphylaxisClient;
+
+
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕鍜宨d鑾峰彇鏁版嵁
+     * @param tableName 琛ㄥ悕
+     * @param id 鏁版嵁id
+     * @return: 鏁版嵁
+     *
+     */
     @Override
     public Result selectById(String tableName, String id) {
         try{
@@ -70,43 +89,85 @@
             return Result.error(CodeMsg.SELECT_ERROR);
         }
     }
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛鍜岃〃鍚嶈幏鍙栨暟鎹�
+     * @param tableName 琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName) {
-        return selectList(tableName, null,null, (maintainService.getNowVersion(tableName).getVersion()));
+    public Result selectList(Character character, String tableName) {
+        return selectList(character, tableName, null,null, (maintainService.getNowVersion(tableName).getVersion()));
     }
 
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛鍜岃〃鍚嶏紝绛涢�夋潯浠惰幏鍙栨暟鎹�
+     * @param tableName 琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName, String whereSegment) {
-        return selectList(tableName, whereSegment, (maintainService.getNowVersion(tableName).getVersion()));
+    public Result selectList(Character character, String tableName, String whereSegment) {
+        return selectList(character,tableName, whereSegment, (maintainService.getNowVersion(tableName).getVersion()));
     }
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛鍜岃〃鍚嶏紝绛涢�夋潯浠讹紝鏁版嵁鐗堟湰鑾峰彇鏁版嵁
+     * @param tableName 琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param version 鏁版嵁鐗堟湰
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName, String whereSegment, String version) {
-        return selectList(tableName, null, whereSegment, version);
+    public Result selectList(Character character,String tableName, String whereSegment, String version) {
+        return selectList(character, tableName, null, whereSegment, version);
     }
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛锛屽瓧娈碉紝琛ㄥ悕锛岀瓫閫夋潯浠惰幏鍙栨暟鎹�
+     * @param tableName 琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param fieldList 瀛楁
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName, List<String> fieldList, String whereSegment) {
-        return selectList(tableName, fieldList, whereSegment, maintainService.getNowVersion(tableName).getVersion());
+    public Result selectList(Character character, String tableName, List<String> fieldList, String whereSegment) {
+        return selectList(character, tableName, fieldList, whereSegment, maintainService.getNowVersion(tableName).getVersion());
     }
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛锛屽瓧娈碉紝琛ㄥ悕锛岀瓫閫夋潯浠讹紝鏁版嵁鐗堟湰鑾峰彇鏁版嵁
+     * @param tableName 琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param fieldList 瀛楁
+     * @param version 鏁版嵁鐗堟湰
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName,List<String> fieldList, String whereSegment, String version) {
+    public Result selectList(Character character, String tableName,List<String> fieldList, String whereSegment, String version) {
         try{
             JSONObject object = new JSONObject();
-
+            //TODO only add  version
+            Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
             String fields;
             if (fieldList == null || fieldList.size() == 0) {
-                fields = getFields(tableName);
+                fields = getFields(character, tableName, maintainFromVersion);
             } else {
                 fields = fieldList.stream().collect(Collectors.joining(Constant.COMMA));
             }
             //std
             List<Map<String, Object>> select = mapper.select(tableName, fields, whereSegment);
-            //TODO only add  version
-            Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
 
             List<Map<String, Object>> maps = maintainService.selectVersionOperatorByType(tableName, maintainFromVersion.getId(), Operate.create);
 
@@ -119,12 +180,27 @@
         }
     }
 
-
+    /**
+     *
+     * @description:  鏍规嵁鐢ㄦ埛锛屽瓧娈碉紝琛ㄥ悕鑾峰彇鏁版嵁
+     * @param tableName 琛ㄥ悕
+     * @param fieldList 瀛楁
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁
+     *
+     */
     @Override
-    public Result selectList(String tableName, List<String> fields) {
-        return selectList(tableName,fields,Constant.WHERE_DEFAULT,(maintainService.getNowVersion(tableName).getVersion()));
+    public Result selectList(Character character, String tableName, List<String> fields) {
+        return selectList(character, tableName,fields,Constant.WHERE_DEFAULT,(maintainService.getNowVersion(tableName).getVersion()));
     }
-
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕锛岀瓫閫夋潯浠惰幏鍙栨暟鎹潯鏁�
+     * @param tableName 琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @return: 鏁版嵁鏉℃暟
+     *
+     */
     public Long getCount(String tableName, String whereSegment) {
         try{
             if (StringUtils.isEmpty(whereSegment)) {
@@ -138,20 +214,71 @@
             return null;
         }
     }
-    public Long getCountByVersion (String maintainId, String tableName,String tableTempName,Integer fromOrderNo, Integer toOrderNo, String whereSegment) {
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁鏉℃暟
+     * @param maintainId 鏁版嵁鐗堟湰
+     * @param tableName 琛ㄥ悕
+     * @param tableTempName 涓存椂琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param fieldList 瀛楁
+     * @param version 鏁版嵁鐗堟湰
+     * @param character 鐢ㄦ埛
+     * @param fromOrderNo 浠庡摢涓増鏈紑濮嬪線鍓嶆帹
+     * @param toOrderNo 鍒板摢涓増鏈粨鏉熷線鍓嶆帹
+     * @return: 鏁版嵁鏉℃暟
+     *
+     */
+    @Override
+    public Long getCountByVersion (Character character, String maintainId, String tableName,String tableTempName,Integer fromOrderNo, Integer toOrderNo, String whereSegment) {
         try{
             Maintain maintain = maintainService.selectById(maintainId);
+            String fields = getFields(character,tableName, maintain);
+            String tempFields = getTempFields(character, tableName, Constant.A1, maintain);
+            String A1fields = getFields(character, tableName, Constant.A1, maintain);
 
-            String fields = getFields(tableName, maintain);
-            String Hfields = getFields(tableName, Constant.H, maintain);
-            String tempFields = getTempFields(tableName, maintain);
-            String A1fields = getFields(tableName, Constant.A1, maintain);
-            String A2fields = getFields(tableName, Constant.A2, maintain);
-            String tempHFields = getTempFields(tableName, Constant.H, maintain);
             if (StringUtils.isEmpty(whereSegment)) {
                 whereSegment = Constant.WHERE_DEFAULT;
             }
-            Long count = mapper.getCountByVersion(tableName, tableTempName, fields, tempFields, Hfields, A1fields,A2fields,tempHFields, fromOrderNo, toOrderNo, DbUtils.quotedStr(maintainId), whereSegment);
+            Long count;
+            if (StringUtils.isEmpty(fields)) {
+                return 0L;
+            }
+            count = mapper.getCountByVersion(tableName, tableTempName, fields, tempFields, A1fields,fromOrderNo, toOrderNo, whereSegment);
+            return count;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏈�澶х増鏈殑鏁版嵁鏉℃暟
+     * @param maintainId 鏁版嵁鐗堟湰
+     * @param tableName 琛ㄥ悕
+     * @param tableTempName 涓存椂琛ㄥ悕
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param fieldList 瀛楁
+     * @param version 鏁版嵁鐗堟湰
+     * @param character 鐢ㄦ埛
+     * @return: 鏁版嵁鏉℃暟
+     *
+     */
+    public Long getCountByMaxVersion (Character character, String maintainId, String tableName,String tableTempName,Integer fromOrderNo, String whereSegment) {
+        try{
+            Maintain maintain = maintainService.selectById(maintainId);
+
+            String fields = getFields(character, tableName, maintain);
+
+            String tempFields = getTempFields(character, tableName, Constant.A1, maintain);
+            String A1fields = getFields(character, tableName, Constant.A1, maintain);
+
+            if (StringUtils.isEmpty(whereSegment)) {
+                whereSegment = Constant.WHERE_DEFAULT;
+            }
+
+            Long count = mapper.getCountByMaxVersion(tableName, tableTempName, fields, tempFields, A1fields, fromOrderNo, whereSegment);
             return count;
         }
         catch (Exception e) {
@@ -160,40 +287,54 @@
         }
     }
 
-    public Long getCountByMaxVersion (String maintainId, String tableName,String tableTempName,Integer fromOrderNo, Integer toOrderNo, String whereSegment) {
-        try{
-            Maintain maintain = maintainService.selectById(maintainId);
-
-            String fields = getFields(tableName, maintain);
-            String Hfields = getFields(tableName, Constant.H, maintain);
-            String tempFields = getTempFields(tableName, maintain);
-            String A1fields = getFields(tableName, Constant.A1, maintain);
-            String A2fields = getFields(tableName, Constant.A2, maintain);
-            String tempHFields = getTempFields(tableName, Constant.H, maintain);
-            if (StringUtils.isEmpty(whereSegment)) {
-                whereSegment = Constant.WHERE_DEFAULT;
-            }
-            Long count = mapper.getCountByMaxVersion(tableName, tableTempName, fields, tempFields, Hfields, A1fields,A2fields,tempHFields, fromOrderNo, toOrderNo, DbUtils.quotedStr(maintainId), whereSegment);
-            return count;
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-    }
-
-
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕鑾峰彇瀛楁sql
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁sql
+     *
+     */
     @Override
     public String getFields(String tableName) {
-        return getFields(tableName, Constant.EMPTY);
+        return getFields(tableName, Constant.EMPTY_Str);
     }
-
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇瀛楁sql
+     * @param tableName 琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getFields(String tableName, Maintain maintain) {
+    public String getFields(Character character, String tableName, Maintain maintain) {
 
-        return getFields(tableName, null, maintain);
+        return getFields(character, tableName, null, maintain);
     }
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇瀛楁sql
+     * @param tableName 琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @param uuid 璇锋眰鍞竴鏍囪瘑锛宭og涓煡璇㈡椂闂翠娇鐢�
+     * @return: 瀛楁sql
+     *
+     */
+    @Override
+    public String getFields(Character character, String tableName, Maintain maintain, String uuid) {
 
+        return getFields(character, tableName, null, maintain, uuid);
+    }
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰缁勮 casewhen 瀛楁sql
+     * @param tableName 琛ㄥ悕
+
+     * @return: 瀛楁sql
+     *
+     */
     private String getCaseWhenFields(String tableName) {
         List<TableSchemaResult> tableField = mapper.getTableField(tableName);
         ContentBuilder contentBuilder = new ContentBuilder(Constant.COMMA);
@@ -207,6 +348,14 @@
         }
         return contentBuilder.toString();
     }
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 锛岃幏鍙栧瓧娈祍ql骞舵坊鍔犲埆鍚�
+     * @param tableName 琛ㄥ悕
+     * @param alias 鍒悕
+     * @return: 瀛楁sql
+     *
+     */
     @Override
     public String getFields(String tableName, String alias) {
         List<TableSchemaResult> tableField = mapper.getTableField(tableName);
@@ -226,11 +375,43 @@
         }
         return contentBuilder.toString();
     }
-
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇瀛楁sql锛屽苟娣诲姞鍒悕
+     * @param tableName 琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @param alias 鍒悕
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getFields(String tableName, String alias, Maintain maintain) {
-        List<SysField> fields = fieldService.getFieldByMaintain(maintain.getId());
+    public String getFields(Character character, String tableName, String alias, Maintain maintain) {
+        return getFields(character, tableName, alias, maintain, null);
+    }
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇瀛楁sql锛屽苟娣诲姞鍒悕
+     * @param tableName 琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @param alias 鍒悕
+     * @param uuid 璇锋眰鍞竴鏍囪瘑锛宭og涓煡璇㈡椂闂翠娇鐢�
+     * @return: 瀛楁sql
+     *
+     */
+    @Override
+    public String getFields(Character character, String tableName, String alias, Maintain maintain, String uuid) {
+        List<SysField> fields;
+        if (character == null) {
+            fields = fieldService.getFieldByMaintain(maintain.getId());
+        }else {
+            fields = masterAuthorService.getField(character, maintain.getId(), uuid);
+        }
         ContentBuilder contentBuilder = new ContentBuilder(Constant.COMMA);
+        if (fields == null) {
+            return Constant.EMPTY_Str;
+        }
         if (!fields.contains(Constant.ID)) {
             fields.add(new SysField().setField(Constant.ID));
         }
@@ -252,18 +433,45 @@
         return contentBuilder.toString();
     }
 
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇涓存椂琛ㄥ瓧娈祍ql锛屽苟娣诲姞鍒悕
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getTempFields(String tableName, Maintain maintain) {
-        return getTempFields(tableName, null, maintain);
+    public String getTempFields(Character character, String tableName, Maintain maintain) {
+        return getTempFields(character, tableName, null, maintain);
     }
 
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇涓存椂琛ㄥ瓧娈祍ql锛屽苟娣诲姞鍒悕
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getTempFields(String tableName) {
-        return getTempFields(tableName, Constant.EMPTY);
+    public String getTempFields(Character character, String tableName) {
+        return getTempFields(character, tableName, Constant.EMPTY_Str);
     }
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛鑾峰彇涓存椂琛ㄥ瓧娈祍ql锛屽苟娣诲姞鑷畾涔夊埆鍚�
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param alias 鍒悕
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getTempFields(String tableName, String alias) {
+    public String getTempFields(Character character, String tableName, String alias) {
         List<TableSchemaResult> tableField = mapper.getTableField(tableName);
+
         ContentBuilder contentBuilder = new ContentBuilder(Constant.COMMA);
         for (TableSchemaResult tableSchemaResult : tableField) {
             String fieldName = tableSchemaResult.getFieldName();
@@ -283,14 +491,32 @@
         }
         return contentBuilder.toString();
     }
-
+    /**
+     *
+     * @description:  鏍规嵁琛ㄥ悕 鐢ㄦ埛锛� 鐗堟湰鑾峰彇涓存椂琛ㄥ瓧娈祍ql锛屽苟娣诲姞鑷畾涔夊埆鍚�
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param maintain 鐗堟湰
+     * @param alias 鍒悕
+     * @return: 瀛楁sql
+     *
+     */
     @Override
-    public String getTempFields(String tableName, String alias, Maintain maintain) {
-        List<SysField> fields = fieldService.getFieldByMaintain(maintain.getId());
+    public String getTempFields(Character character, String tableName, String alias, Maintain maintain) {
+        List<SysField> fields;
+        if (character == null) {
+            fields = fieldService.getFieldByMaintain(maintain.getId());
+        }else {
+            fields = masterAuthorService.getField(character, maintain.getId());
+        }
+        if (fields == null) {
+            return Constant.EMPTY_Str;
+        }
         ContentBuilder contentBuilder = new ContentBuilder(Constant.COMMA);
         if (!fields.contains(Constant.ID)) {
             fields.add(new SysField().setField(Constant.ID));
         }
+        List<String> joinFieldList = getJoinFieldList();
 
         for (SysField field : fields) {
             String fieldName = field.getField();
@@ -298,60 +524,379 @@
                 if (StringUtils.isEmpty(alias)) {
                     contentBuilder.append(MessageFormat.format("{0} as id", Constant.STD_ID));
                 } else {
-                    contentBuilder.append(MessageFormat.format("{0}.{1} as id", alias, Constant.STD_ID));
+                    if (joinFieldList.contains(fieldName)) {
+                        contentBuilder.append(MessageFormat.format("{0}.{1} as id", alias, Constant.STD_ID));
+                    } else {
+                        contentBuilder.append(MessageFormat.format("{0} as id", Constant.STD_ID));
+                    }
+
                 }
                 continue;
             }
             if (StringUtils.isEmpty(alias)) {
                 contentBuilder.append(fieldName);
             } else {
-                contentBuilder.append(MessageFormat.format(Constant.Alias,alias,fieldName));
+                if (joinFieldList.contains(fieldName)) {
+                    contentBuilder.append(MessageFormat.format(Constant.Alias,alias,fieldName));
+                } else {
+                    contentBuilder.append(fieldName);
+                }
             }
         }
         return contentBuilder.toString();
     }
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, Integer pageNo, Integer pageSize, boolean findMax) {
-        return selectListByPageByVersion(tableName,Constant.WHERE_DEFAULT,pageNo,pageSize, findMax);
+    private List<String> getJoinFieldList() {
+        List<TableSchemaResult> fieldList = new ArrayList<>();
+        List<TableSchemaResult> maintainList = mapper.getTableField("maintain");
+        if (maintainList != null) {
+            fieldList.addAll(maintainList);
+        }
+        List<TableSchemaResult> flows = mapper.getTableField("flows");
+        if (flows != null) {
+            fieldList.addAll(flows);
+        }
+        List<TableSchemaResult> maintain_detail = mapper.getTableField("maintain_detail");
+        if (maintain_detail != null) {
+            fieldList.addAll(maintain_detail);
+        }
+        return fieldList.stream().map(tableSchemaResult -> tableSchemaResult.getFieldName()).collect(Collectors.toList());
     }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁版嵁閲�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, Integer pageNo, Integer pageSize, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,Constant.WHERE_DEFAULT,pageNo,pageSize, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁版嵁閲�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, String whereSegment, Integer pageNo, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null, whereSegment,pageNo, null, String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param pageNo 椤垫暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @param uuid 璇锋眰鍞竴鏍囪瘑锛宭og涓煡璇㈡椂闂翠娇鐢�
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, Integer pageNo, String version, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null,Constant.WHERE_DEFAULT,pageNo, null, version, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param pageNo 椤垫暟
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, Integer pageNo, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null,Constant.WHERE_DEFAULT,pageNo, null, String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁版嵁閲�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, String whereSegment, Integer pageNo, Integer pageSize, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null,whereSegment,pageNo,pageSize, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param fieldList 绛涢�夊瓧娈�
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁版嵁閲�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, List<String> fieldList, String whereSegment, Integer pageNo, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null,whereSegment,pageNo, null, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param fieldList 瀛楁鍒楄〃
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, List<String> fieldList, Integer pageNo, boolean findMax) {
+        return selectListByPageByVersion(character, tableName,null,Constant.WHERE_DEFAULT,pageNo, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, String whereSegment, Integer pageNo, String version, boolean findMax) {
+        return selectListByPageByVersion(character, tableName, null,whereSegment, pageNo, null,version, findMax);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @param uuid 鏃ュ織浣跨敤
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, String whereSegment, Integer pageNo, String version, boolean findMax, String uuid) {
+        return selectListByPageByVersion(character, tableName, null,whereSegment, pageNo, null,version, findMax, uuid);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public List<Map<String, Object>> selectListByVersion(Character character, String tableName, List<String> fieldList, String whereSegment, String version, boolean findMax) {
+        Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
+        Maintain nowVersionMaintain = maintainService.getNowVersion(tableName);
+        boolean isMax = maintainService.checkdMaxVersion(maintainFromVersion.getId());
+        boolean isNow = maintainService.checkNowVersion(maintainFromVersion.getId());
+        boolean isFirst = maintainService.checkFirstVersion(maintainFromVersion.getId());
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, String whereSegment, Integer pageNo, boolean findMax) {
-        return selectListByPageByVersion(tableName,null, whereSegment,pageNo, null, String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
-    }
+        Integer fromVersionOrderNo = maintainFromVersion.getOrderNo();
+        Integer nowVersionOrderNo = 0;
+        if (nowVersionMaintain != null) {
+            nowVersionOrderNo = nowVersionMaintain.getOrderNo();
+        }
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, Integer pageNo, String version, boolean findMax) {
-        return selectListByPageByVersion(tableName,null,Constant.WHERE_DEFAULT,pageNo, null, version, findMax);
-    }
-    @Override
-    public Result selectListByPageByVersion(String tableName, Integer pageNo, boolean findMax) {
-        return selectListByPageByVersion(tableName,null,Constant.WHERE_DEFAULT,pageNo, null, String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
-    }
+        String tableTempName = tableName + Constant.RECORD;
+        List<Map<String, Object>> result = null;
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, String whereSegment, Integer pageNo, Integer pageSize, boolean findMax) {
-        return selectListByPageByVersion(tableName,null,whereSegment,pageNo,pageSize, findMax);
-    }
+        String fields;
+        String tempFields;
+        String A1Fields;
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, List<String> fieldList, String whereSegment, Integer pageNo, boolean findMax) {
-        return selectListByPageByVersion(tableName,null,whereSegment,pageNo, null, findMax);
-    }
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, List<String> fieldList, Integer pageNo, boolean findMax) {
-        return selectListByPageByVersion(tableName,null,Constant.WHERE_DEFAULT,pageNo, findMax);
-    }
-    @Override
-    public Result selectListByPageByVersion(String tableName, String whereSegment, Integer pageNo, String version, boolean findMax) {
-        return selectListByPageByVersion(tableName, null,whereSegment, pageNo, null,version, findMax);
-    }
+        if (fieldList == null || fieldList.size() == 0) {
+            fields = getFields(character, tableName, maintainFromVersion);
+            A1Fields = getFields(character, tableName, Constant.A1, maintainFromVersion);
+            tempFields = getTempFields(character, tableName, Constant.A1, maintainFromVersion);
+        } else {
+            fields = fieldList.stream().collect(Collectors.joining(Constant.COMMA));
+            A1Fields = fieldList.stream()
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s))
+                    .collect(Collectors.joining(Constant.COMMA));
+            tempFields = fieldList.stream()
+                    .map(s ->
+                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{0} as id",Constant.STD_ID): s)
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s))
+                    .collect(Collectors.joining(Constant.COMMA));
 
-    @Override
-    public Result selectListByPageByVersion(String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version, boolean findMax) {
+        }
+        if (isNow && !findMax){
+            result = mapper.selectByPage(tableName, fields, whereSegment, null);
+        }
+        else if (isMax && findMax) {
+            ContentBuilder builder = new ContentBuilder(Constant.COMMA);
+            if (nowVersionMaintain == null) {
+                builder.append(DbUtils.quotedStr(maintainFromVersion.getId()));
+            }else {
+                List<String> maintainIds = maintainService.getCompareVersionMaintains(nowVersionMaintain, maintainFromVersion);
+                long con = maintainIds.stream().map(s -> builder.append(DbUtils.quotedStr(s))).count();
+            }
 
+            result = mapper.selectByPageByMaxVersion(tableName,tableTempName,fields, A1Fields, tempFields,  nowVersionOrderNo,  whereSegment, null);
+
+        }else {
+            result = mapper.selectByPageByVersion(tableName,tableTempName,fields, A1Fields, tempFields, nowVersionOrderNo, fromVersionOrderNo, whereSegment,  null);
+        }
+
+        return result;
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁sql璇彞
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁sql璇彞
+     *
+     */
+    @Override
+    public String selectByVersionSql(Character character, String tableName, List<String> fieldList, String whereSegment, String version, boolean findMax) {
+        Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
+        Maintain nowVersionMaintain = maintainService.getNowVersion(tableName);
+        boolean isMax = maintainService.checkdMaxVersion(maintainFromVersion.getId());
+        boolean isNow = maintainService.checkNowVersion(maintainFromVersion.getId());
+        boolean isFirst = maintainService.checkFirstVersion(maintainFromVersion.getId());
+
+        Integer fromVersionOrderNo = maintainFromVersion.getOrderNo();
+        Integer nowVersionOrderNo = 0;
+        if (nowVersionMaintain != null) {
+            nowVersionOrderNo = nowVersionMaintain.getOrderNo();
+        }
+
+        String tableTempName = tableName + Constant.RECORD;
+        String result = null;
+
+        String fields;
+        String tempFields;
+        String Hfields;
+        String A1fields;
+        String A2fields;
+
+        String tempHfields;
+        if (fieldList == null || fieldList.size() == 0) {
+            fields = getFields(null, tableName, maintainFromVersion);
+            Hfields = getFields(null, tableName,Constant.H, maintainFromVersion);
+            A1fields = getFields(null, tableName,Constant.A1, maintainFromVersion);
+            A2fields = getFields(null, tableName,Constant.A2, maintainFromVersion);
+            tempFields = getTempFields(null, tableName, maintainFromVersion);
+            tempHfields = getTempFields(null, tableName, Constant.H, maintainFromVersion);
+        } else {
+            fields = fieldList.stream().collect(Collectors.joining(Constant.COMMA));
+            Hfields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.H, s)).collect(Collectors.joining(Constant.COMMA));
+            A1fields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s)).collect(Collectors.joining(Constant.COMMA));
+            A2fields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.A2, s)).collect(Collectors.joining(Constant.COMMA));
+            tempFields = fieldList.stream()
+                    .map(s ->
+                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{0} as id",Constant.STD_ID): s)
+                    .collect(Collectors.joining(Constant.COMMA));
+
+            tempHfields =  fieldList.stream()
+                    .map(s ->
+                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{0} as id",Constant.STD_ID): s)
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.H,s))
+                    .collect(Collectors.joining(Constant.COMMA));
+
+        }
+        MyBatisSql ibatisSql = new MyBatisSql();
+        Map<String, Object> parameterMap = new HashMap<>();
+        if (isNow && !findMax){
+            parameterMap.put("tableName", tableName);
+            parameterMap.put("fields", fields);
+            parameterMap.put("where", whereSegment);
+            parameterMap.put("limit", null);
+            result = DbUtils.getMyBatisSql("selectByPage", parameterMap, sqlSessionFactory).getSql();
+        }
+        else if (isMax && findMax) {
+            ContentBuilder builder = new ContentBuilder(Constant.COMMA);
+            if (nowVersionMaintain == null) {
+                builder.append(DbUtils.quotedStr(maintainFromVersion.getId()));
+            }else {
+                List<String> maintainIds = maintainService.getCompareVersionMaintains(nowVersionMaintain, maintainFromVersion);
+                long con = maintainIds.stream().map(s -> builder.append(DbUtils.quotedStr(s))).count();
+            }
+            parameterMap.put("tableName", tableName);
+            parameterMap.put("tableTempName", tableTempName);
+            parameterMap.put("fields", fields);
+            parameterMap.put("tempFields", tempFields);
+            parameterMap.put("Hfields", Hfields);
+            parameterMap.put("A1fields", A1fields);
+            parameterMap.put("A2fields", A2fields);
+            parameterMap.put("tempHFields", tempHfields);
+            parameterMap.put("fromOrderNo", fromVersionOrderNo);
+            parameterMap.put("toOrderNo", nowVersionOrderNo);
+            parameterMap.put("maintainId", DbUtils.quotedStr(maintainFromVersion.getId()));
+            parameterMap.put("where", whereSegment);
+            parameterMap.put("limit", null);
+            result = DbUtils.getMyBatisSql("selectByPageByMaxVersion", parameterMap, sqlSessionFactory).getSql();
+
+        }else {
+            parameterMap.put("tableName", tableName);
+            parameterMap.put("tableTempName", tableTempName);
+            parameterMap.put("fields", fields);
+            parameterMap.put("tempFields", tempFields);
+            parameterMap.put("Hfields", Hfields);
+            parameterMap.put("A1fields", A1fields);
+            parameterMap.put("A2fields", A2fields);
+            parameterMap.put("tempHFields", tempHfields);
+            parameterMap.put("fromOrderNo", fromVersionOrderNo);
+            parameterMap.put("toOrderNo", nowVersionOrderNo);
+            parameterMap.put("maintainId", DbUtils.quotedStr(maintainFromVersion.getId()));
+            parameterMap.put("where", whereSegment);
+            parameterMap.put("limit", null);
+            result = DbUtils.getMyBatisSql("selectByPageByVersion", parameterMap, sqlSessionFactory).getSql();
+        }
+
+        return result;
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁閲�
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁閲�
+     *
+     */
+    @Override
+    public Long getCountByVersion(Character character, String tableName, String whereSegment,  String version, boolean findMax) {
         Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
         Maintain nowVersionMaintain = maintainService.getNowVersion(tableName);
         boolean isMax = maintainService.checkdMaxVersion(maintainFromVersion.getId());
@@ -368,61 +913,182 @@
 
         Long count;
 
-       if (isNow && !findMax){
+        if (isNow && !findMax){
+            count = getCount(tableName, whereSegment);
+        }
+        else if (isMax && findMax) {
+            if (isFirst && nowVersionMaintain == null) {
+                nowVersionOrderNo = nowVersionOrderNo - 1;
+            }
+
+            count = getCountByMaxVersion(character, maintainFromVersion.getId(), tableName, tableTempName,  nowVersionOrderNo,  whereSegment);
+        }else {
+            count = getCountByVersion(character, maintainFromVersion.getId(), tableName, tableTempName, nowVersionOrderNo, fromVersionOrderNo, whereSegment);
+        }
+        return count;
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏉℃暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version, boolean findMax) {
+        return selectListByPageByVersion(character, tableName, fieldList, whereSegment, pageNo, pageSize, version, findMax, null);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param fieldList 瀛楁鍒楄〃
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏉℃暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version, boolean findMax, String uuid) {
+        return selectListByPageByVersion(character, tableName, fieldList, whereSegment, pageNo, pageSize, version, findMax, uuid, null);
+    }
+    /**
+     *
+     * @description:  鏍规嵁鏉′欢鑾峰彇鏁版嵁
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param character 鐢ㄦ埛
+     * @param whereSegment 绛涢�夋潯浠�
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏉℃暟
+     * @param version 鐗堟湰鍙�
+     * @param findMax 鏄惁鏌ヨ鐨勬渶澶х増鏈殑鏁版嵁
+     * @param uuid 渚涙棩蹇椾娇鐢�
+     * @param page 宸茬粡璁$畻濂界殑鍒嗛〉瀵硅薄
+     * @return: 鏁版嵁
+     *
+     */
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version, boolean findMax, String uuid, Page page) {
+        String fieldStr = "";
+        if (fieldList == null || fieldList.isEmpty()) {
+            fieldStr = "";
+        } else {
+            fieldList.stream().collect(Collectors.joining(Constant.UnderLine));
+        }
+        String key;
+        if (page == null) {
+            key = DbUtils.StrJoinLink(Constant.UnderLine, character.getId(), tableName,  whereSegment, String.valueOf(pageNo), String.valueOf(pageSize), version, String.valueOf(findMax));
+
+        } else {
+            key = DbUtils.StrJoinLink(Constant.UnderLine, character.getId(), tableName,  whereSegment, String.valueOf(pageNo), String.valueOf(pageSize), version, String.valueOf(findMax), page.getLimitSQL());
+        }
+
+        if (!findMax) {
+            Object redisValObj = redisClient.getRedisValObj(key);
+            if (redisValObj != null) {
+                JSONObject object = (JSONObject) redisValObj;
+                Result result = JSONObject.parseObject(object.toJSONString(), Result.class);
+                return result;
+            }
+        }
+
+        Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
+        Maintain nowVersionMaintain = maintainService.getNowVersion(tableName);
+        boolean isMax = maintainService.checkdMaxVersion(maintainFromVersion.getId());
+        boolean isNow = maintainService.checkNowVersion(maintainFromVersion.getId());
+        boolean isFirst = maintainService.checkFirstVersion(maintainFromVersion.getId());
+
+        Integer fromVersionOrderNo = maintainFromVersion.getOrderNo();
+        Integer nowVersionOrderNo = 0;
+        if (nowVersionMaintain != null) {
+            nowVersionOrderNo = nowVersionMaintain.getOrderNo();
+        }
+
+        String tableTempName = tableName + Constant.RECORD;
+
+        Long count;
+        Date startDate = new Date();
+        if (isNow && !findMax){
             count = getCount(tableName, whereSegment);
         }
         else if (isMax && findMax) {
            if (isFirst && nowVersionMaintain == null) {
                nowVersionOrderNo = nowVersionOrderNo - 1;
            }
-            count = getCountByMaxVersion(maintainFromVersion.getId(), tableName, tableTempName, fromVersionOrderNo, nowVersionOrderNo,  whereSegment);
-        }else {
-            count = getCountByVersion(maintainFromVersion.getId(), tableName, tableTempName, nowVersionOrderNo, fromVersionOrderNo, whereSegment);
-        }
 
+            count = getCountByMaxVersion(character, maintainFromVersion.getId(), tableName, tableTempName, nowVersionOrderNo,  whereSegment);
+        }else {
+            count = getCountByVersion(character, maintainFromVersion.getId(), tableName, tableTempName, nowVersionOrderNo, fromVersionOrderNo, whereSegment);
+        }
+        Date endDate = new Date();
+        log.info(MessageFormat.format("master tag:{0} MASTER-- select count:{1} ms",uuid, (endDate.getTime() - startDate.getTime())));
+
+        if (page != null && count != null) {
+            page.setRecordCount(count.intValue());
+        }
+        if (count == null || count == 0) {
+            return Result.success(null);
+        }
         //mapper.selectByPageByVersion(tableName, tableTempName, fieldList, whereSegment,);
-        Page page = new Page(count);
-        if (pageSize != null && pageSize.compareTo(1) != -1) {
-            page.setPageSize(pageSize);
-        }
         List<Map<String, Object>> result = null;
-        if (page.getPageCount() < pageNo) {
-            return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND);
+
+        if (page == null) {
+            page = new Page(count);
+            if (pageSize != null && pageSize.compareTo(1) != -1) {
+                page.setPageSize(pageSize);
+            }
+
+            if (page.getPageCount() < pageNo) {
+                return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND);
+            }
+            page.setPageNo(pageNo);
         }
-        page.setPageNo(pageNo);
 
         String limitSQL = page.getLimitSQL();
         String fields;
         String tempFields;
-        String Hfields;
-        String A1fields;
-        String A2fields;
 
-        String tempHfields;
+        String A1Fields;
+
         if (fieldList == null || fieldList.size() == 0) {
-            fields = getFields(tableName, maintainFromVersion);
-            Hfields = getFields(tableName,Constant.H, maintainFromVersion);
-            A1fields = getFields(tableName,Constant.A1, maintainFromVersion);
-            A2fields = getFields(tableName,Constant.A2, maintainFromVersion);
-            tempFields = getTempFields(tableName, maintainFromVersion);
-            tempHfields = getTempFields(tableName, Constant.H, maintainFromVersion);
-        } else {
-            fields = fieldList.stream().collect(Collectors.joining(Constant.COMMA));
-            Hfields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.H, s)).collect(Collectors.joining(Constant.COMMA));
-            A1fields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s)).collect(Collectors.joining(Constant.COMMA));
-            A2fields = fieldList.stream().map(s -> MessageFormat.format(Constant.Alias,Constant.A2, s)).collect(Collectors.joining(Constant.COMMA));
-            tempFields = fieldList.stream()
+            fields = getFields(character, tableName, maintainFromVersion, uuid);
+            A1Fields = getFields(character, tableName, Constant.A1, maintainFromVersion, uuid);
+            List<String> fieldStrList = DbUtils.split(fields, Constant.COMMA);
+            tempFields = fieldStrList.stream()
                     .map(s ->
-                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{} as id",Constant.STD_ID): s)
+                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{0} as id",Constant.STD_ID): s)
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s))
                     .collect(Collectors.joining(Constant.COMMA));
 
-            tempHfields =  fieldList.stream()
+        } else {
+            if (!fieldList.contains(Constant.ID)) {
+                fieldList.add(Constant.ID);
+            }
+            fields = fieldList.stream().collect(Collectors.joining(Constant.COMMA));
+            A1Fields = fieldList.stream()
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s))
+                    .collect(Collectors.joining(Constant.COMMA));
+            tempFields = fieldList.stream()
                     .map(s ->
-                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{} as id",Constant.STD_ID): s)
-                    .map(s -> MessageFormat.format(Constant.Alias,Constant.H,s))
+                            s.equalsIgnoreCase(Constant.ID) ? MessageFormat.format("{0} as id",Constant.STD_ID): s)
+                    .map(s -> MessageFormat.format(Constant.Alias,Constant.A1, s))
                     .collect(Collectors.joining(Constant.COMMA));
 
         }
+        startDate = new Date();
+        log.info(MessageFormat.format("master tag:{0} MASTER-- select field :{1} ms",uuid, (startDate.getTime() - endDate.getTime())));
+
+
          if (isNow && !findMax){
             result = mapper.selectByPage(tableName, fields, whereSegment, page.getLimitSQL());
         }
@@ -435,15 +1101,17 @@
                 long con = maintainIds.stream().map(s -> builder.append(DbUtils.quotedStr(s))).count();
             }
 
-            result = mapper.selectByPageByMaxVersion(tableName,tableTempName,fields,tempFields, Hfields, A1fields, A2fields, tempHfields, fromVersionOrderNo, nowVersionOrderNo, DbUtils.quotedStr(maintainFromVersion.getId()),  whereSegment, limitSQL);
+            result = mapper.selectByPageByMaxVersion(tableName,tableTempName,fields, A1Fields, tempFields, nowVersionOrderNo, whereSegment, limitSQL);
 
         }else {
-            result = mapper.selectByPageByVersion(tableName,tableTempName,fields,tempFields, Hfields, A1fields, A2fields, tempHfields, nowVersionOrderNo, fromVersionOrderNo, DbUtils.quotedStr(maintainFromVersion.getId()), whereSegment,  limitSQL);
+            result = mapper.selectByPageByVersion(tableName,tableTempName,fields, A1Fields, tempFields,  nowVersionOrderNo, fromVersionOrderNo, whereSegment,  limitSQL);
         }
+        endDate = new Date();
+        log.info(MessageFormat.format("master tag:{0} MASTER-- select dataMap :{1} ms",uuid, (endDate.getTime() - startDate.getTime())));
 
         EntityWrapper<SysField> sysFieldEntityWrapper = new EntityWrapper<>();
         sysFieldEntityWrapper.eq("table_name", tableName);
-        List<SysField> sysFields = fieldService.getFieldByMaintain(maintainFromVersion.getId());
+        List<SysField> sysFields = masterAuthorService.getField(character, maintainFromVersion.getId());
         if (isMax) {
             sysFields.add(new SysField().setAlias("鏁版嵁鐘舵��").setField("operate").setVisible(true).setFormat("operate_"));
             sysFields.add(new SysField().setAlias("瀹℃壒鐘舵��").setField("status").setVisible(true).setFormat("status_"));
@@ -451,6 +1119,11 @@
         JSONObject resultobject = new JSONObject();
 
         JSONObject object = new JSONObject();
+
+        Map<String, AntianaphylaxisResult> helpfulField = antianaphylaxisClient.getHelpfulField(fields, tableName);
+        antianaphylaxisClient.fixMasterData(result,helpfulField);
+        startDate = new Date();
+        log.info(MessageFormat.format("master tag:{0} MASTER-- antianaphy dataMap :{1} ms",uuid, (startDate.getTime() - endDate.getTime())));
 
         object.fluentPut("total", page.getRecordCount());
         object.fluentPut("size", page.getPageSize());
@@ -461,11 +1134,37 @@
         resultobject.fluentPut("grid",object);
         resultobject.fluentPut("fields",sysFields);
         resultobject.fluentPut("maintainId", maintainFromVersion.getId());
+
+
+        redisClient.putRedisValObj(key, Result.success(resultobject));
+
         return Result.success(resultobject);
     }
-
+    /**
+     *
+     * @description:  涓婁紶鏁版嵁鍚庣殑鎿嶄綔
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param uploadType 鏇存柊绫诲瀷
+     * @param userId 鐢ㄦ埛id
+     * @return: 鐢熸垚鍚庣殑鐗堟湰
+     *
+     */
     @Override
     public Maintain uploadedData(String tableName, SysAssembleUpdateType uploadType, String userId) {
+        return uploadedData(tableName, uploadType, userId, true);
+    }
+    /**
+     *
+     * @description:  涓婁紶鏁版嵁鍚庣殑鎿嶄綔
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param uploadType 鏇存柊绫诲瀷
+     * @param bigVersion 鏄惁鐢熸垚澶х増鏈�
+     * @param userId 鐢ㄦ埛id
+     * @return: 鐢熸垚鍚庣殑鐗堟湰
+     *
+     */
+    @Override
+    public Maintain uploadedData(String tableName, SysAssembleUpdateType uploadType, String userId, boolean bigVersion) {
         MenuMapping menuMapping = menuMappingService.selectOne(new EntityWrapper<MenuMapping>().eq("table_name",tableName));
         SysOperateLog operateLog = new SysOperateLog();
 
@@ -490,7 +1189,12 @@
 
                 maxVersion.deleteById();
             }else {
-                biggerVersion = DbUtils.versionAddBig(mVersion);
+                if (bigVersion) {
+                    biggerVersion = DbUtils.versionAddBig(mVersion);
+                }else {
+                    biggerVersion = DbUtils.versionAddSub(mVersion);
+                }
+
                 maintain.setOrderNo(DbUtils.getOrderNoAdd(maxVersion.getOrderNo()));
             }
         }
@@ -503,18 +1207,18 @@
         maintain.setTableName(tableName);
         maintain.setCreateTime(new Date());
 
-        Connection connection = sqlSessionTemplate.getConnection();
+        Connection connection = null;
         try {
+            connection = dataSource.getConnection();
+            connection.setAutoCommit(false);
             mapper.insertMatintainDetailFromTemp(DbUtils.quotedStr(maintain.getId()), maintain.getTableName() + Constant.RECORD , DbUtils.quotedStr(Operate.create.toString()));
-            connection.commit();
             mapper.updateStdId( maintain.getTableName() + Constant.RECORD);
-            connection.commit();
             Integer aLong = mapper.tempDeal(maintain.getTableName() + Constant.RECORD, DbUtils.quotedStr(maintain.getId()));
-            connection.commit();
             if (aLong == null) {
                 maintain.setDesp("涓婁紶鏁版嵁");
+            }else {
+                maintain.setDesp(MessageFormat.format("涓婁紶鏁版嵁{0}鏉�", aLong));
             }
-            maintain.setDesp(MessageFormat.format("涓婁紶鏁版嵁{0}鏉�", aLong));
 
             if (uploadType.equals(SysAssembleUpdateType.All)) {
                 List<TableSchemaResult> tableField = mapper.getTableField(tableName);
@@ -524,17 +1228,15 @@
                         .map(s -> s.equalsIgnoreCase(Constant.STD_ID) ? MessageFormat.format(Constant.FieldAsAlias, Constant.ID, Constant.STD_ID) : s).collect(Collectors.joining(Constant.COMMA));
 
                 mapper.insertRecordFromStandrad(maintain.getTableName(), maintain.getTableName() + Constant.RECORD, collect);
-                connection.commit();
                 mapper.insertMatintainDetailFromStandrad(DbUtils.quotedStr(maintain.getId()), maintain.getTableName() + Constant.RECORD);
-                connection.commit();
                 Integer standradCnt = mapper.tempDeal(maintain.getTableName() + Constant.RECORD, DbUtils.quotedStr(maintain.getId()));
-                connection.commit();
+
                 if (standradCnt != null) {
                     maintain.setDesp(maintain.getDesp() + MessageFormat.format("鍒犻櫎鍘熸暟鎹畕0}鏉�", standradCnt));
                 }else {
                     maintain.setDesp(maintain.getDesp() + "鍒犻櫎鍘熸暟鎹�");
                 }
-                maintain.setDesp(maintain.getDesp() + MessageFormat.format("鍒犻櫎鍘熸暟鎹畕0}鏉�", standradCnt));
+
             }
 
             operateLog.setCreateTime(new Date())
@@ -542,7 +1244,7 @@
                     .setId(DbUtils.getUUID())
                     .setMaintainId(menuMapping.getId())
                     .setOperate("open")
-                    .setDesp(MessageFormat.format("涓婁紶鏁版嵁{0}鏉�", aLong));
+                    .setDesp("鎵归噺涓婁紶鏁版嵁");
 
             maintain.insert();
             connection.commit();
@@ -550,21 +1252,23 @@
         catch (Exception e) {
             e.printStackTrace();
 
-
-        }
-        finally {
+        }finally {
             if (connection != null) {
                 try {
-                    connection.commit();
+                    connection.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
         }
+
         return maintain;
     }
 
+
+
     //bak
+    @Deprecated
     public Result selectListByPage(String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version) {
         Maintain maintainFromVersion = maintainService.getMaintainFromVersion(tableName, version);
         long changeCount = maintainService.countVersionOperatorByType(tableName + Constant.RECORD, whereSegment, maintainFromVersion.getId(), Operate.create);
@@ -636,8 +1340,12 @@
     }
 
     @Override
-    public Result selectListByPageByVersion(String tableName,List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, boolean findMax) {
-       return  selectListByPageByVersion(tableName, fieldList, whereSegment,pageNo,pageSize,String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
+    public Result selectListByPageByVersion(Character character, String tableName,List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, boolean findMax, String uuid) {
+       return  selectListByPageByVersion(character, tableName, fieldList, whereSegment,pageNo,pageSize,String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax, uuid);
+    }
+    @Override
+    public Result selectListByPageByVersion(Character character, String tableName,List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, boolean findMax) {
+       return  selectListByPageByVersion(character, tableName, fieldList, whereSegment,pageNo,pageSize,String.valueOf(maintainService.getNowVersion(tableName).getVersion()), findMax);
     }
 
     @Override
@@ -679,11 +1387,12 @@
 
     public Result insert(String tableName, String json) {
         try {
-            List<SysField> fieldByTable = fieldService.getFieldByTable(tableName);
-
-            List<String> fieldNameList = fieldByTable.stream().map(sysField -> sysField.getField()).collect(Collectors.toList());
-            String fields = fieldByTable.stream().map(sysField -> sysField.getField()).collect(Collectors.joining(Constant.COMMA));
-
+            JSONObject dataObject = JSON.parseObject(json);
+            Set<String> keySet = dataObject.keySet();
+            List<String> fieldNameList = new ArrayList<>(keySet);
+//            List<SysField> fieldByTable = fieldService.getFieldByTable(tableName);
+//            List<String> fieldNameList = fieldByTable.stream().map(sysField -> sysField.getField()).collect(Collectors.toList());
+            String fields =  keySet.stream().collect(Collectors.joining(Constant.COMMA));
             ContentBuilder builder = new ContentBuilder(Constant.COMMA);
             Object parse = JSON.parse(json);
             List<String> ids = new ArrayList<>();
@@ -913,6 +1622,111 @@
             return Result.error(CodeMsg.DELETE_ERROR);
         }
     }
+    /**
+     *
+     * @description:  鑾峰彇琛ㄤ腑distinct鍚庣殑鍊�
+     * @param tableName 涓存椂琛ㄥ悕
+     * @param field 瀛楁鍚�
+     * @return: 鍘婚噸鍚庣殑鏁版嵁
+     *
+     */
+    @Override
+    public Set<String> getFieldValByTable(String tableName, String field) {
+        //鏌ョ紦瀛�
+        String key = DbUtils.getFieldRedisKey(tableName,field);
+        List<Object> redisList = redisClient.getRedisList(key);
+        if (redisList != null) {
+            HashSet<String> strings = new HashSet<>();
+            for (Object o : redisList) {
+                strings.add(o.toString());
+            }
+            return strings;
+        }
+        // 璇绘暟鎹簱
+        String tempTableName = tableName + Constant.RECORD;
+        // List<Map<String, Object>> maps = mapper.selectByPage(tableName, MessageFormat.format(Constant.DISTINCT, field), Constant.WHERE_DEFAULT, null);
+
+        List<Map<String, Object>> maps = mapper.selectDistinct(tempTableName, field, Constant.WHERE_DEFAULT);
+
+        if (maps.size() == 0) {
+            return null;
+        }
+        Set<String> result = maps.stream()
+                .filter(one -> one != null)
+                .map(one -> one.get(field))
+                .filter(o -> o != null)
+                .map(o -> o.toString()).collect(Collectors.toSet());
+        redisClient.putRedisList(key, new ArrayList(result));
+        return result;
+    }
+    /**
+     *
+     * @description:  鑾峰彇琛ㄤ腑distinct鍚庣殑鍊�
+     * @param maintainFieldId 瀛楁鐗堟湰id
+     * @param tableName 琛ㄥ悕
+     * @param field 瀛楁鍚�
+     * @return: 鍘婚噸鍚庣殑鏁版嵁
+     *
+     */
+    @Override
+    public Set<String> getFieldValByMaintainField(String maintainFieldId, String field, String tableName) {
+        //鏌ョ紦瀛�
+        MaintainField maintainField = maintainFieldService.selectById(maintainFieldId);
 
 
+        // 璇绘暟鎹簱
+        List<Maintain> list = maintainFieldService.getMaintainByMaintainField(maintainFieldId, tableName);
+        Maintain max = list.stream().max(new Comparator<Maintain>() {
+            @Override
+            public int compare(Maintain o1, Maintain o2) {
+                return o1.getOrderNo() - o2.getOrderNo();
+            }
+        }).get();
+        Maintain min = list.stream().min(new Comparator<Maintain>() {
+            @Override
+            public int compare(Maintain o1, Maintain o2) {
+                return o1.getOrderNo() - o2.getOrderNo();
+            }
+        }).get();
+        ArrayList<String> fieldList = new ArrayList<>();
+        fieldList.add(field);
+        fieldList.add(Constant.ID);
+        // where
+
+        List<Map<String, Object>> maps = selectListByVersion(null, tableName, fieldList, Constant.WHERE_DEFAULT, max.getVersion(), false);
+        String tempTableName = tableName + Constant.RECORD;
+        List<Map<String, Object>> tempVals = mapper.getOneTempFieldDataByMaintainExtent(DbUtils.quotedStr(tableName), tempTableName, field, min.getOrderNo(), max.getOrderNo());
+        maps.addAll(tempVals);
+        if (maps.size() == 0) {
+            return null;
+        }
+        Set<String> result = maps.stream()
+                .filter(one -> one != null)
+                .map(one -> one.get(field))
+                .filter(o -> o != null)
+                .map(o -> o.toString()).collect(Collectors.toSet());
+        String val = result.stream().collect(Collectors.joining(Constant.SEMICOLON));
+
+        return result;
+    }
+    /**
+     *
+     * @description:  鍒涘缓绱㈠紩
+     * @param recordTableName 璁板綍琛ㄥ悕绉�
+     * @return:
+     *
+     */
+    @Override
+    public void createIdx(String recordTableName) {
+        String idxName = MessageFormat.format(Constant.IDX_TEMPLATE, recordTableName, Constant.STD_ID);
+
+        List<Map<String, Object>> maps = mapper.selectIdxByTableName(DbUtils.quotedStr(recordTableName));
+        long existsIdx = maps.stream().filter(stringObjectMap -> stringObjectMap.get("index_name") != null)
+                .map(stringObjectMap -> stringObjectMap.get("index_name").toString())
+                .filter(s -> idxName.equalsIgnoreCase(s)).count();
+        if (existsIdx == 0) {
+
+            mapper.createIdx(recordTableName, idxName, Constant.STD_ID + Constant.COMMA + Constant.DEAL);
+        }
+    }
 }

--
Gitblit v1.8.0