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/MaintainFieldServiceImpl.java |  226 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 163 insertions(+), 63 deletions(-)

diff --git a/src/main/java/com/highdatas/mdm/service/impl/MaintainFieldServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/MaintainFieldServiceImpl.java
index 4c33f78..97bbbc4 100644
--- a/src/main/java/com/highdatas/mdm/service/impl/MaintainFieldServiceImpl.java
+++ b/src/main/java/com/highdatas/mdm/service/impl/MaintainFieldServiceImpl.java
@@ -5,19 +5,14 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
-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.highdatas.mdm.entity.*;
 import com.highdatas.mdm.mapper.MaintainFieldMapper;
 import com.highdatas.mdm.pojo.ActivitiStatus;
 import com.highdatas.mdm.pojo.Operate;
-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.highdatas.mdm.service.*;
 import com.highdatas.mdm.util.Constant;
 import com.highdatas.mdm.util.DbUtils;
+import com.highdatas.mdm.util.RedisClient;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -42,10 +37,22 @@
     IFlowsService flowsService;
     @Autowired
     ISysFieldService fieldService;
-
     @Autowired
     MaintainFieldMapper maintainFieldMapper;
-
+    @Autowired
+    IMasterAuthorService masterAuthorService;
+    @Autowired
+    IMasterAuthorDetailService masterAuthorDetailService;
+    @Autowired
+    RedisClient redisClient;
+    /**
+     *
+     * @description:  鑾峰彇涓嬩竴鐗堟湰淇℃伅
+     * @param tableName 琛ㄥ悕
+     * @param userId 鐢ㄦ埛id
+     * @return: 瀛楁鐗堟湰瀵硅薄
+     *
+     */
     @Override
     public MaintainField getNextMaintain(String tableName, String userId) {
         MaintainField maintain = this.getMaxVersion(tableName);
@@ -101,50 +108,43 @@
         }
         return nowMaintain;
     }
-
+    /**
+     *
+     * @description:  閫氳繃瀛楁鐗堟湰鑾峰彇瀵瑰簲鐨勬暟鎹増鏈琹ist
+     * @param tableName 琛ㄥ悕
+     * @return 鏁版嵁鐗堟湰鍒楄〃
+     *
+     */
     @Override
     public List<Maintain> getMaintainByMaintainField(String maintainFieldId, String tableName) {
         HashMap<String, List<Maintain>> resultMap = getMaintainFieldMapByTable(tableName);
         if (resultMap == null) {
             return null;
         }
+        if (maintainFieldId == null) {
+            return null;
+        }
+        if (maintainFieldId.equalsIgnoreCase(Constant.All)) {
+            Collection<List<Maintain>> values = resultMap.values();
+            HashSet<Maintain> maintains = new HashSet<>();
+            for (List<Maintain> value : values) {
+                maintains.addAll(value);
+            }
+
+            return new ArrayList<>(maintains);
+        }
         return resultMap.get(maintainFieldId);
     }
 
-    @Override
-    public boolean checkNowVersion(String maintainFieldId) {
-        MaintainField maintain = selectById(maintainFieldId);
-        MaintainField maxVersion = getNowVersion(maintain.getTableName());
-        Integer compared = DbUtils.compareVersion(maxVersion, maintain);
-        if (compared != null && compared == 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
 
-    @Override
-    public boolean checkFirstVersion(String id) {
-        MaintainField maintain = selectById(id);
-        MaintainField order_no = selectOne(new EntityWrapper<MaintainField>().eq("table_name", maintain.getTableName()).orderBy("order_no"));
-        if (maintain.getId().equalsIgnoreCase(order_no.getId())) {
-            return true;
-        }
-        return false;
-    }
 
-    @Override
-    public boolean checkdMaxVersion(String maintainFieldId) {
-        MaintainField maintain = selectById(maintainFieldId);
-        MaintainField maxVersion = getMaxVersion(maintain.getTableName());
-        Integer compared = DbUtils.compareVersion(maxVersion, maintain);
-        if (compared == 0) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
+    /**
+     *
+     * @description:  鑾峰彇鏈�澶х殑瀛楁鐗堟湰
+     * @param tableName 琛ㄥ悕
+     * @return 瀛楁鐗堟湰瀵硅薄
+     *
+     */
     @Override
     public MaintainField getMaxVersion(String tableName) {
         Wrapper<MaintainField> versionWrapper = new EntityWrapper<MaintainField>().eq("table_name", tableName).orderBy("order_no desc");
@@ -152,7 +152,13 @@
         MaintainField maxVersion = this.selectOne(versionWrapper);
         return maxVersion;
     }
-
+    /**
+     *
+     * @description:  鑾峰彇鏈敓鏁堢殑鏈�澶х増鏈�
+     * @param tableName 琛ㄥ悕
+     * @return 瀛楁鐗堟湰瀵硅薄
+     *
+     */
     @Override
     public MaintainField getUnFlowMaxVersion(String tableName) {
         Wrapper<MaintainField> versionWrapper = new EntityWrapper<MaintainField>().isNull("flow_id").eq("table_name", tableName).orderBy("order_no desc");
@@ -160,7 +166,13 @@
         MaintainField maxVersion = selectOne(versionWrapper);
         return maxVersion;
     }
-
+    /**
+     *
+     * @description:  鑾峰彇褰撳墠姝e湪鐢ㄧ殑瀛楁鐗堟湰瀵硅薄
+     * @param tableName 琛ㄥ悕
+     * @return 瀛楁鐗堟湰瀵硅薄
+     *
+     */
     @Override
     public MaintainField getNowVersion(String tableName) {
         Wrapper<MaintainField> versionWrapper = new EntityWrapper<MaintainField>().eq("table_name", tableName).isNotNull("flow_id").orderBy("order_no desc");
@@ -179,12 +191,13 @@
         return null;
     }
 
-    @Override
-    public MaintainField getMaintainFromVersion(String tableName, String verison) {
-        Wrapper<MaintainField> versionWrapper = new EntityWrapper<MaintainField>().eq("version", verison).eq("table_name", tableName);
-        MaintainField maxVersion = selectOne(versionWrapper);
-        return maxVersion;
-    }
+    /**
+     *
+     * @description:  娴佺▼瀹屾垚鍚庣殑澶勭悊
+     * @param maintainId 瀛楁鐗堟湰
+     * @param status 娴佺▼鐘舵��
+     *
+     */
 
     @Override
     public void dealFlow(String maintainId, ActivitiStatus status) {
@@ -195,20 +208,73 @@
             maintainField.deleteById();
         }
         else if (status.equals(ActivitiStatus.open)) {
+
+            Integer orderNo = maintainField.getOrderNo();
+            int preNo = orderNo - 1;
+            MaintainField preMaintainField;
+            if (preNo < 0 ) {
+               preMaintainField = new MaintainField().setId(Constant.Default);
+            }else {
+                preMaintainField = selectOne(new EntityWrapper<MaintainField>()
+                        .eq("table_name", maintainField.getTableName())
+                        .eq("order_no", preNo));
+            }
+
+            if (preMaintainField == null){
+                return;
+            }
+            List<MasterAuthor> masterAuthors = masterAuthorService.selectList(
+                    new EntityWrapper<MasterAuthor>()
+                            .eq("maintain_auto", true)
+                            .eq("table_name", maintainField.getTableName())
+                            .eq("maintain_field_id", preMaintainField.getId()));
+
             List<SysField> fieldList = fieldService.selectList(new EntityWrapper<SysField>().eq("maintain_field_id", maintainField.getId()));
 
-            List<SysField> collect = fieldList.stream().filter(sysField -> Operate.delete.equals(sysField.getOperate())).collect(Collectors.toList());
-            //delete
-            for (SysField field : collect) {
+            List<SysField> deleteList = fieldList.stream().filter(sysField -> Operate.delete.equals(sysField.getOperate())).collect(Collectors.toList());
+            List<SysField> updateList = fieldList.stream().filter(sysField -> (Operate.update.equals(sysField.getOperate()))).collect(Collectors.toList());
+            List<SysField> createList = fieldList.stream().filter(sysField -> (Operate.create.equals(sysField.getOperate()))).collect(Collectors.toList());
+
+            List<String> createFieldList = createList.stream().map(sysField -> sysField.getField()).collect(Collectors.toList());
+
+
+            for (MasterAuthor masterAuthor : masterAuthors) {
+                Boolean fieldAuto = masterAuthor.getFieldAuto();
+
+                List<MasterAuthorDetail> masterAuthorDetails = masterAuthorDetailService.selectList(new EntityWrapper<MasterAuthorDetail>().eq(Constant.PARENT_ID, masterAuthor.getId()));
+
+                masterAuthor.setMaintainFieldId(maintainField.getId())
+                        .setCreateTime(new Date())
+                        .setUpdateTime(null)
+                        .setId(DbUtils.getUUID())
+                        .insert();
+
+                for (MasterAuthorDetail masterAuthorDetail : masterAuthorDetails) {
+                    long count = deleteList.stream().filter(sysField -> sysField.getField().equalsIgnoreCase(masterAuthorDetail.getField())).count();
+                    if (count > 0) {
+                        continue;
+                    }
+                    masterAuthorDetail.setParentId(masterAuthor.getId()).setId(DbUtils.getUUID()).insert();
+                }
+
+                if (fieldAuto) {
+                    for (String s : createFieldList) {
+                        new MasterAuthorDetail().setField(s).setVal(Constant.z_AllVal).setAll(true).setParentId(masterAuthor.getId()).setId(DbUtils.getUUID()).insert();
+                    }
+                }
+            }
+            //
+
+
+                      //delete
+            for (SysField field : deleteList) {
                 field.deleteById();
             }
             //update
-            List<SysField> updateList = fieldList.stream().filter(sysField -> (Operate.update.equals(sysField.getOperate()))).collect(Collectors.toList());
             for (SysField field : updateList) {
                 field.setOperate(null).updateById();
             }
-            List<SysField> createList = fieldList.stream().filter(sysField -> (Operate.create.equals(sysField.getOperate()))).collect(Collectors.toList());
-            for (SysField field : createList) {
+           for (SysField field : createList) {
                 String fieldType = field.getFieldType();
                 if (StringUtils.isEmpty(fieldType)) {
                     fieldType = Constant.varchar;
@@ -229,10 +295,25 @@
                 maintainFieldMapper.addCloumn(tableName, field.getField(), fieldTypeStr);
 
                 field.setOperate(null).updateById();
+
+               redisClient.delByField();
             }
+
+
+
         }
     }
 
+
+
+
+    /**
+     *
+     * @description:  鑾峰彇鏈敓鏁堢殑鐗堟湰鏁伴噺
+     * @param tableName 琛ㄥ悕
+     * @return 鏈敓鏁堢増鏈暟閲�
+     *
+     */
     @Override
     public int getUnFlowCount(String tableName, String userId) {
         List<MaintainField> maintainFields = selectList(new EntityWrapper<MaintainField>().eq("table_name", tableName));
@@ -252,7 +333,13 @@
         }
         return cnt;
     }
-
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇瀛楁鐗堟湰锛屾暟鎹増鏈殑map list
+     * @param tableName 琛ㄥ悕
+     * @return 瀛楁鐗堟湰锛屾暟鎹増鏈殑map list
+     *
+     */
     @Override
     public JSONArray getMaintainListByTable(String tableName) {
         HashMap<String, List<Maintain>> resultMap = getMaintainFieldMapByTable(tableName);
@@ -299,28 +386,41 @@
         }
         return array;
     }
-
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鍜屽瓧娈电増鏈幏鍙栨暟鎹増鏈琹ist
+     * @param tableName 琛ㄥ悕
+     * @param id 瀛楁鐗堟湰id
+     * @return 鏁版嵁鐗堟湰list
+     *
+     */
     @Override
     public List<Maintain> getMaintainListByMaintainField(String id, String tableName) {
         MaintainField maintainField = selectById(id);
         if (maintainField == null) {
-            if (!id.equalsIgnoreCase(Constant.Default)){
+            if (!id.equalsIgnoreCase(Constant.Default) && !id.equalsIgnoreCase(Constant.All)){
                 return null;
             }else {
-                maintainField = new MaintainField().setId(Constant.Default).setTableName(tableName);
+                maintainField = new MaintainField().setId(id).setTableName(tableName);
             }
 
         }
 
         return  getMaintainByMaintainField(maintainField.getId(), maintainField.getTableName());
     }
-
+    /**
+     *
+     * @description:  閫氳繃琛ㄥ悕鑾峰彇瀛楁鐗堟湰锛屾暟鎹増鏈殑map list
+     * @param tableName 琛ㄥ悕
+     * @return 瀛楁鐗堟湰锛屾暟鎹増鏈殑map list
+     *
+     */
     private HashMap<String, List<Maintain>> getMaintainFieldMapByTable(String tableName) {
         List<Maintain> maintainList = maintainService.selectList(new EntityWrapper<Maintain>().eq("table_name", tableName).isNotNull("flow_id").orderBy("order_no desc"));
         HashMap<String, List<Maintain>> resultMap = new HashMap<>();
         for (Maintain maintain : maintainList) {
             ActivitiStatus status = flowsService.getStatusByBusinessId(maintain.getId());
-            if (!status.equals(ActivitiStatus.open)) {
+            if (!ActivitiStatus.open.equals(status)) {
                 continue;
             }
             MaintainField maintainFieldByMaintain = fieldService.getMaintainFieldByMaintain(maintain.getId());

--
Gitblit v1.8.0