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/SysFieldServiceImpl.java |  316 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 286 insertions(+), 30 deletions(-)

diff --git a/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java
index 1d31b43..1002586 100644
--- a/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java
+++ b/src/main/java/com/highdatas/mdm/service/impl/SysFieldServiceImpl.java
@@ -1,31 +1,28 @@
 package com.highdatas.mdm.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
-import com.highdatas.mdm.entity.Flows;
-import com.highdatas.mdm.entity.Maintain;
-import com.highdatas.mdm.entity.MaintainField;
-import com.highdatas.mdm.entity.SysField;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.highdatas.mdm.entity.*;
 import com.highdatas.mdm.mapper.MaintainFieldMapper;
 import com.highdatas.mdm.mapper.SysFieldMapper;
+import com.highdatas.mdm.mapper.TableInfoMapper;
 import com.highdatas.mdm.pojo.ActivitiStatus;
 import com.highdatas.mdm.pojo.Operate;
+import com.highdatas.mdm.pojo.Page;
 import com.highdatas.mdm.pojo.Result;
 import com.highdatas.mdm.service.IFlowsService;
 import com.highdatas.mdm.service.IMaintainFieldService;
 import com.highdatas.mdm.service.IMaintainService;
 import com.highdatas.mdm.service.ISysFieldService;
-import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.highdatas.mdm.util.Constant;
 import com.highdatas.mdm.util.DbUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -48,15 +45,16 @@
     MaintainFieldMapper maintainFieldMapper;
     @Autowired
     IFlowsService flowsService;
+    @Autowired
+    TableInfoMapper tableInfoMapper;
 
 
-    @Override
-    public List<SysField> getFieldByMaintain(String maintainId) {
+    public MaintainField getMaintainFieldByMaintainId(String maintainId) {
         MaintainField maintainField;
         List<SysField> fieldList = null;
 
         if (StringUtils.isEmpty(maintainId)) {
-          return null;
+            return null;
         }
         Maintain maintain = maintainService.selectById(maintainId);
         if (maintain == null) {
@@ -66,22 +64,38 @@
         maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("maintain_id", maintainId).orderBy("order_no desc"));
         if (maintainField == null) {
             //瀵瑰簲鐗堟湰鎵句笉鍒� 寰�鍓嶆壘
-            String maintainFieldId = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo());
-            if (StringUtils.isEmpty(maintainFieldId)) {
-                fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no"));
-                return fieldList;
+            Map<String, String> maintainFieldMap = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo());
+            if (maintainFieldMap == null) {
+               return null;
             }
+            String maintainFieldId = maintainFieldMap.get(Constant.ID);
             maintainField = maintainFieldService.selectById(maintainFieldId);
-            if (maintainField == null){
-                //鏃犲搴旂増鏈�
-                fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no"));
-                return fieldList;
-            }
+        }
+        return maintainField;
+    }
+
+    /**
+     *
+     * @description:  閫氳繃鐗堟湰鑾峰彇瀛楁鍒楄〃
+     * @param maintainId 鐗堟湰id
+     * @return: 瀛楁鍒楄〃
+     *
+     */
+    @Override
+    public List<SysField> getFieldByMaintain(String maintainId) {
+        List<SysField> fieldList;
+        Maintain maintain = maintainService.selectById(maintainId);
+        if (maintain == null) {
+            return null;
         }
 
+        MaintainField maintainField = getMaintainFieldByMaintain(maintainId);
+        if (maintainField == null || Constant.Default.equalsIgnoreCase(maintainField.getId())) {
+            fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no"));
+            return fieldList;
+        }
         String maintainFieldId = maintainField.getId();
         String tableName = maintainField.getTableName();
-        //TODO  鍒ゆ柇鐗堟湰
         ActivitiStatus status = flowsService.getStatusByBusinessId(maintainFieldId);
         if (status != null && status.equals(ActivitiStatus.open)) {
             fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId).eq("table_name", tableName).orderBy("order_no"));
@@ -96,21 +110,111 @@
             fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", maintain.getTableName()).isNull("maintain_field_id").orderBy("order_no"));
             return fieldList;
         }else {
-            Integer preNo = maintainFieldOrderNo--;
+            Integer preNo = maintainFieldOrderNo - 1;
             maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("table_name", maintain.getTableName()).eq("order_no", preNo));
-            fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainFieldId).eq("table_name", tableName).orderBy("order_no"));
+            fieldList = this.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainField.getId()).eq("table_name", tableName).orderBy("order_no"));
             return fieldList;
         }
 
 
     }
 
+    /**
+     *
+     * @description:  閫氳繃鐗堟湰鑾峰彇瀛楁鐗堟湰
+     * @param maintainId 鐗堟湰id
+     * @return: 瀛楁鐗堟湰
+     *
+     */
+    @Override
+    public MaintainField getMaintainFieldByMaintain(String maintainId) {
+        MaintainField maintainField = null;
+        List<SysField> fieldList = null;
+
+        if (StringUtils.isEmpty(maintainId)) {
+            return null;
+        }
+        Maintain maintain = maintainService.selectById(maintainId);
+        if (maintain == null) {
+            return null;
+        }
+        List<MaintainField> subList = maintainFieldService.selectList(new EntityWrapper<MaintainField>().eq("maintain_id", maintainId).orderBy("order_no desc, create_time desc"));
+        subList.sort(new Comparator<MaintainField>() {
+            @Override
+            public int compare(MaintainField o1, MaintainField o2) {
+
+                return o2.getOrderNo().compareTo(o1.getOrderNo());
+            }
+        });
+        if (!subList.isEmpty()) {
+            maintainField = subList.get(0);
+        }
+
+        if (maintainField == null) {
+            //瀵瑰簲鐗堟湰鎵句笉鍒� 寰�鍓嶆壘
+            Map<String, String> maintainFieldMap = maintainFieldMapper.getMappedMatintainId(DbUtils.quotedStr(maintain.getTableName()), maintain.getOrderNo());
+
+            if (maintainFieldMap == null) {
+                return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName());
+            }
+            String maintainFieldId = maintainFieldMap.get(Constant.ID);
+            maintainField = maintainFieldService.selectById(maintainFieldId);
+            if (maintainField == null){
+                return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName());
+            }
+        }
+
+        String maintainFieldId = maintainField.getId();
+        String tableName = maintainField.getTableName();
+
+        ActivitiStatus status = flowsService.getStatusByBusinessId(maintainFieldId);
+        if (status != null && status.equals(ActivitiStatus.open)) {
+            return maintainFieldService.selectById(maintainField);
+        }
+
+        // 褰撳墠鐗堟湰姝e湪瀹℃壒  鎵惧墠涓�鐗堟湰
+        Integer maintainFieldOrderNo = maintainField.getOrderNo();
+        if (maintainFieldOrderNo < 1) {
+            return new MaintainField().setId(Constant.Default).setTableName(maintain.getTableName());
+        }else {
+            Integer preNo = maintainFieldOrderNo - 1;
+            maintainField = maintainFieldService.selectOne(new EntityWrapper<MaintainField>().eq("table_name", maintain.getTableName()).eq("order_no", preNo));
+            return maintainField;
+        }
+
+
+    }
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇褰撳墠瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @return: 褰撳墠瀛楁鍒楄〃
+     *
+     */
     @Override
     public List<SysField> getFieldByTable(String tableName) {
         Maintain nowVersion = maintainService.getNowVersion(tableName);
+        if (nowVersion == null) {
+            List<SysField> fieldList = this.selectList(new EntityWrapper<SysField>().eq("table_name", tableName).isNull("maintain_field_id").orderBy("order_no"));
+            if (fieldList.size() ==0) {
+                List<TableSchemaResult> tableField = tableInfoMapper.getTableField(tableName);
+                for (TableSchemaResult tableSchemaResult : tableField) {
+                    String fieldName = tableSchemaResult.getFieldName();
+                    SysField field = new SysField().setField(fieldName);
+                    fieldList.add(field);
+                }
+            }
+            return fieldList;
+        }
         return getFieldByMaintain(nowVersion.getId());
     }
-
+    /**
+     *
+     * @description:  閫氳繃鐗堟湰鑾峰彇鏁版嵁搴撳瓧娈靛垪琛�
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁鍒楄〃
+     *
+     */
     @Override
     public Result getTotalFields(String tableName) {
         JSONObject result = new JSONObject();
@@ -170,7 +274,71 @@
 
         return Result.success(result);
     }
+    /**
+     *
+     * @description:  list 閫氳繃鍒嗛〉瀵硅薄绛涢��
+     * @param list 鏁版嵁鍒楄〃
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁伴噺
+     * @return: 鍒嗛〉绛涢�夊悗鐨勬暟鎹垪琛�
+     *
+     */
+    @Override
+    public Result getPagedDataByList(List list, Integer pageNo, Integer pageSize) {
+        JSONObject result = new JSONObject();
+        int total = list.size();
+        Page page = new Page(total);
+        page.setPageSize(pageSize);
+        page.setPageNo(pageNo);
+        List subList = (List) list.stream().skip(page.getBeginRecordNo_1()).limit(page.getPageSize()).collect(Collectors.toList());
+        result.fluentPut("pages", page.getPageCount());
+        result.fluentPut("current", pageNo);
+        result.fluentPut("size", pageSize);
+        result.fluentPut("total", page.getRecordCount());
+        result.fluentPut("list", subList);
 
+        return Result.success(result);
+
+
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍒嗛〉鍚庣殑瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @param pageNo 椤垫暟
+     * @param pageSize 姣忛〉鏁版嵁
+     * @return: 瀛楁鍒楄〃
+     *
+     */
+    @Override
+    public Result getTotalFields(String tableName, Integer pageNo, Integer pageSize) {
+        Result totalFields = getTotalFields(tableName);
+        JSONObject result = (JSONObject) totalFields.getData();
+        JSONArray list = result.getJSONArray("list");
+        int total = list.size();
+        Page page = new Page(total);
+        page.setPageSize(pageSize);
+        page.setPageNo(pageNo);
+        List<Object> subList = list.stream().skip(page.getBeginRecordNo_1()).limit(page.getPageSize()).collect(Collectors.toList());
+        result.fluentPut("pages", page.getPageCount());
+        result.fluentPut("current", pageNo);
+        result.fluentPut("size", pageSize);
+        result.fluentPut("total", page.getRecordCount());
+        result.fluentPut("list", subList);
+
+        return Result.success(result);
+
+
+    }
+
+    /**
+     *
+     * @description:  鍒嗙被鍚庣粰鍓嶇灞曠ず
+     * @param nowFields 褰撳墠鐗堟湰瀛楁鍒楄〃
+     * @param maxFields 鍏ㄩ儴瀛楁鍒楄〃
+     * @return: 鍒嗙被鍚庣殑瀛楁鍒楄〃
+     *
+     */
     private List<SysField> packageFieldList(List<SysField> nowFields, List<SysField> maxFields) {
         //鍘熷鐨勬竻闄perate鐢ㄤ簬鍓嶇鏄剧ず
         nowFields =  nowFields.stream().map(sysField -> sysField.setOperate(null)).collect(Collectors.toList());
@@ -192,12 +360,28 @@
         Collections.sort(nowFields, new Comparator<SysField>() {
             @Override
             public int compare(SysField o1, SysField o2) {
-                return o1.getOrderNo() - o2.getOrderNo() ;
+                Integer o1OrderNo = o1.getOrderNo();
+                Integer orderNo = o2.getOrderNo();
+                if (o1OrderNo == null && orderNo == null) {
+                    return 0;
+                }else if (o1OrderNo == null) {
+                    return -1;
+                }else if  (orderNo == null) {
+                    return 1;
+                }
+                return o1OrderNo - orderNo;
             }
         });
         return nowFields;
     }
-
+    /**
+     *
+     * @description:  鏇存柊鍩虹瀛楁瀵硅薄淇℃伅
+     * @param preField 鏇存柊鍓嶇殑瀛楁瀵硅薄
+     * @param updateField 鏇存柊鍙傛暟
+     * @return: 鏄惁鏇存柊鎴愬姛
+     *
+     */
     @Override
     public boolean updateCommon(SysField preField, SysField updateField) {
         preField.setWidth(updateField.getWidth());
@@ -230,7 +414,14 @@
         preField.setOrderNo(updateField.getOrderNo());
         return preField.updateById();
     }
-
+    /**
+     *
+     * @description:  閫氳繃瀛楁鐗堟湰鑾峰彇鏌愪釜瀛楁鐨勫璞�
+     * @param maintainFieldId 瀛楁鐗堟湰
+     * @param field 瀛楁鍚嶇О
+     * @return: 瀛楁瀵硅薄
+     *
+     */
     @Override
     public SysField getOneFieldByMaintainField(String maintainFieldId, String field) {
         List<SysField> fieldByMaintain = getFieldByMaintainField(maintainFieldId);
@@ -240,12 +431,77 @@
         }
         return collect.get(0);
     }
+    /**
+     *
+     * @description:  閫氳繃鏁版嵁鐗堟湰鑾峰彇鏌愪釜瀛楁鐨勫璞�
+     * @param maintainId 鏁版嵁鐗堟湰
+     * @param field 瀛楁鍚嶇О
+     * @return: 瀛楁瀵硅薄
+     *
+     */
+    @Override
+    public SysField getOneFieldByMaintain(String maintainId, String field) {
+        List<SysField> fieldByMaintain = getFieldByMaintain(maintainId);
+        if (fieldByMaintain == null || fieldByMaintain.isEmpty()) {
+            return null;
+        }
+        for (SysField sysField : fieldByMaintain) {
+            if (sysField.getField().equalsIgnoreCase(field)) {
+                return sysField;
+            }
+        }
+        return null;
+    }
+    /**
+     *
+     * @description:  閫氳繃瀛楁鐗堟湰鑾峰彇瀵硅薄鍒楄〃
+     * @param maintainId 瀛楁鐗堟湰
+     * @return: 瀛楁瀵硅薄鍒楄〃
+     *
+     */
     @Override
     public List<SysField> getFieldByMaintainField(String maintainId) {
         if (StringUtils.isEmpty(maintainId)) {
-            return selectList(new EntityWrapper<SysField>().isNull("maintain_field_id").orderBy("order_no"));
+            return null;
         }
         return selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainId).orderBy("order_no"));
     }
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇榛樿瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁瀵硅薄鍒楄〃
+     *
+     */
+    @Override
+    public List<SysField> getDefaultTableField(String tableName) {
+        return selectList(new EntityWrapper<SysField>().eq("table_name", tableName).isNull("maintain_field_id").orderBy("order_no"));
+    }
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇鍏ㄩ儴瀛楁鍒楄〃
+     * @param tableName 琛ㄥ悕
+     * @return: 瀛楁瀵硅薄鍒楄〃
+     *
+     */
+    @Override
+    public List<SysField> getTotalTableField(String tableName) {
+        List<TableSchemaResult> tableField = tableInfoMapper.getTableField(tableName);
+        List<SysField> result = new ArrayList<>();
+        for (TableSchemaResult tableSchemaResult : tableField) {
+            String fieldName = tableSchemaResult.getFieldName();
+            List<SysField> fieldList = selectList(new EntityWrapper<SysField>().eq("table_name", tableName).eq(Constant.FIELD, fieldName).orderBy("create_time"));
+            if (fieldList.isEmpty()) {
+                //娌℃湁涓枃鍚嶇О鐨�  搴旇灞炰簬绯荤粺鑷暀瀛楁 濡俰d
+                continue;
+            }
+            HashSet<SysField> strings = new HashSet<SysField>(fieldList);
+            String alias = strings.stream().map(SysField::getAlias).collect(Collectors.joining(Constant.SEMICOLON));
+            SysField sysField = new SysField().setField(fieldName).setAlias(alias);
+            result.add(sysField);
+        }
+
+        return result;
+    }
 
 }

--
Gitblit v1.8.0