From ccb933362251344091a3881a4950dcab33c5008f Mon Sep 17 00:00:00 2001
From: kimi <kimi42345@gmail.com>
Date: 星期六, 28 三月 2020 11:47:55 +0800
Subject: [PATCH] no message

---
 src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java |  130 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 122 insertions(+), 8 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 eb850ad..9759a82 100644
--- a/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java
+++ b/src/main/java/com/highdatas/mdm/service/impl/MasterDataServiceImpl.java
@@ -45,6 +45,8 @@
     IFlowsService flowsService;
     @Autowired
     RedisClient redisClient;
+    @Autowired
+    IMaintainFieldService maintainFieldService;
     @Resource
     protected DataSource dataSource;
 
@@ -352,6 +354,74 @@
         return selectListByPageByVersion(tableName, null,whereSegment, pageNo, null,version, findMax);
     }
 
+    @Override
+    public List<Map<String, Object>> selectListByVersion(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;
+        List<Map<String, Object>> result = null;
+
+        String fields;
+        String tempFields;
+        String Hfields;
+        String A1fields;
+        String A2fields;
+
+        String tempHfields;
+        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()
+                    .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));
+
+        }
+        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,tempFields, Hfields, A1fields, A2fields, tempHfields, fromVersionOrderNo, nowVersionOrderNo, DbUtils.quotedStr(maintainFromVersion.getId()),  whereSegment, null);
+
+        }else {
+            result = mapper.selectByPageByVersion(tableName,tableTempName,fields,tempFields, Hfields, A1fields, A2fields, tempHfields, nowVersionOrderNo, fromVersionOrderNo, DbUtils.quotedStr(maintainFromVersion.getId()), whereSegment,  null);
+        }
+
+        return result;
+    }
     @Override
     public Result selectListByPageByVersion(String tableName, List<String> fieldList, String whereSegment, Integer pageNo, Integer pageSize, String version, boolean findMax) {
 
@@ -910,34 +980,78 @@
     }
 
     @Override
-    public Result getFieldValByTable(String tableName, String field) {
+    public Set<String> getFieldValByTable(String tableName, String field) {
         //鏌ョ紦瀛�
         String key = DbUtils.getFieldRedisKey(tableName,field);
         String redisVal = redisClient.getRedisVal(key);
         if (!StringUtils.isEmpty(redisVal)) {
             List<String> valList = DbUtils.split(redisVal);
             if (valList != null)  {
-                return Result.success(valList);
+                return new HashSet<String>(valList);
             }
         }
         // 璇绘暟鎹簱
+        String tempTableName = tableName + Constant.RECORD;
+        List<Map<String, Object>> maps = mapper.selectByPage(tableName, MessageFormat.format(Constant.DISTINCT, field), Constant.WHERE_DEFAULT, null);
 
-        return null;
+        List<Map<String, Object>> tempMaps = mapper.selectByPage(tempTableName, MessageFormat.format(Constant.DISTINCT, field), Constant.WHERE_DEFAULT, null);
+        maps.addAll(tempMaps);
+        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());
+        return result;
     }
 
     @Override
-    public Result getFieldValByMaintainField(String tableName, String field) {
+    public Set<String> getFieldValByMaintainField(String maintainFieldId, String field, String tableName) {
         //鏌ョ紦瀛�
-        String key = DbUtils.getFieldRedisKey(tableName,field);
+        MaintainField maintainField = maintainFieldService.selectById(maintainFieldId);
+
+        String key = DbUtils.getFieldRedisKey(tableName, field);
         String redisVal = redisClient.getRedisVal(key);
         if (!StringUtils.isEmpty(redisVal)) {
             List<String> valList = DbUtils.split(redisVal);
             if (valList != null)  {
-                return Result.success(valList);
+                HashSet<String> strings = new HashSet<>(valList);
+                return strings;
             }
         }
         // 璇绘暟鎹簱
-
-        return null;
+        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);
+        List<Map<String, Object>> maps = selectListByVersion(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));
+        redisClient.putRedisVal(key, val);
+        return result;
     }
 }

--
Gitblit v1.8.0