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/SysViewServiceImpl.java |  919 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 916 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/highdatas/mdm/service/impl/SysViewServiceImpl.java b/src/main/java/com/highdatas/mdm/service/impl/SysViewServiceImpl.java
index 6320c9b..1a3420d 100644
--- a/src/main/java/com/highdatas/mdm/service/impl/SysViewServiceImpl.java
+++ b/src/main/java/com/highdatas/mdm/service/impl/SysViewServiceImpl.java
@@ -1,10 +1,32 @@
 package com.highdatas.mdm.service.impl;
 
-import com.highdatas.mdm.entity.SysView;
-import com.highdatas.mdm.mapper.SysViewMapper;
-import com.highdatas.mdm.service.ISysViewService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.highdatas.mdm.entity.*;
+import com.highdatas.mdm.mapper.SysViewMapper;
+import com.highdatas.mdm.mapper.TableInfoMapper;
+import com.highdatas.mdm.pojo.*;
+import com.highdatas.mdm.pojo.kettle.UnBigDataDataSourceInfo;
+import com.highdatas.mdm.service.*;
+import com.highdatas.mdm.util.*;
+import com.highdatas.mdm.util.pool.MqEntity;
+import com.highdatas.mdm.util.pool.MqMessage;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -15,6 +37,897 @@
  * @since 2020-04-15
  */
 @Service
+@Slf4j
 public class SysViewServiceImpl extends ServiceImpl<SysViewMapper, SysView> implements ISysViewService {
+    @Autowired
+    ISysViewJoinService joinService;
+    @Autowired
+    IMaintainService maintainService;
+    @Autowired
+    UnBigDataDataSourceInfo unBigDataDataSourceInfo;
+    @Autowired
+    TableInfoMapper tableInfoMapper;
+    @Autowired
+    SysViewMapper viewMapper;
+    @Autowired
+    MasterDataService masterDataService;
+    @Autowired
+    IMasterAuthorService masterAuthorService;
+    @Autowired
+    ISysMenuService menuService;
+    @Autowired
+    IMenuMappingService menuMappingService;
+    @Autowired
+    ISysFieldService fieldService;
+    @Autowired
+    DispenseService dispenseService;
+    @Autowired
+    RuleClient ruleClient;
+    @Autowired
+    AntianaphylaxisClient antianaphylaxisClient;
+    @Autowired
+    RedisClient redisClient;
+    /**
+     *
+     * @description:  閫氳繃id鑾峰彇瑙嗗浘鍒嗗彂鐨勫垎椤电殑鍥炰俊
+     * @param viewId 瑙嗗浘id
+     * @return: 鍒嗛〉瀵硅薄
+     *
+     */
+    @Override
+    public Page getInitPageInfo(String viewId) {
 
+
+        SysView sysView = selectById(viewId);
+        String userId = sysView.getUserId();
+        String realRedisKey = RedisClient.getRealRedisKey(userId + "-" + sysView.getId());
+        Object redisValObj = redisClient.getRedisValObj(realRedisKey);
+        if (redisValObj != null) {
+            JSONObject object = (JSONObject) redisValObj;
+            Page page = JSONObject.parseObject(object.toJSONString(), Page.class);
+            return page;
+        }
+
+        Page page = new Page(0);
+        String viewTableName = sysView.getViewTableName();
+        List<TableSchemaResult> tableField = tableInfoMapper.getTableField(viewTableName);
+        int totalLength = 0;
+        for (TableSchemaResult tableSchemaResult : tableField) {
+            int length = tableSchemaResult.getLength();
+            totalLength += length;
+        }
+        int pageSize = Constant.MaxDispenseSize / totalLength;
+        page.setPageSize(pageSize);
+        Long viewCount = getViewCount(sysView);
+        if (viewCount == 0) {
+            redisClient.putRedisValObj(realRedisKey, page);
+            return page;
+        }
+        page.setRecordCount(viewCount.intValue());
+        int pages;
+        if (viewCount % pageSize == 0) {
+            pages = Long.valueOf(viewCount/pageSize).intValue();
+        }else  {
+            pages =  (Long.valueOf(viewCount/pageSize).intValue())  + 1;
+        }
+        page.setPages(pages);
+
+        redisClient.putRedisValObj(realRedisKey, page);
+        return page;
+    }
+    /**
+     *
+     * @description:  鍒涘缓瑙嗗浘
+     * @param viewId 瑙嗗浘id
+     * @return: 鍒涘缓鏄惁鎴愬姛
+     *
+     */
+    @Override
+    public boolean createView(String viewId) {
+        try {
+            SysView sysView = selectById(viewId);
+
+            if (sysView == null) {
+                log.error("view not found");
+                return false;
+            }
+            String userId = sysView.getUserId();
+            TUser user = DbUtils.getUserById(userId);
+            if (user == null) {
+                log.error("user not found");
+                return false;
+            }
+
+            Maintain baseMaintain = getBaseMaintain(sysView);
+            if (baseMaintain == null) {
+                log.error("baseMaintain not found");
+                return false;
+            }
+            String baseTableName = baseMaintain.getTableName();
+            sysView.setBaseTableName(baseTableName);
+
+            List<String> totalFieldList = getTotalFieldList(sysView);
+
+            //
+            String tableName = getViewTableName(sysView);
+            log.info("View TABLE name:" + tableName);
+            totalFieldList.add(Constant.ID);
+            boolean created = dropCreateViewTable(totalFieldList, tableName);
+
+            //TODO 涓婚敭
+            if (!created) {
+                log.info("un create view table:" + tableName);
+                return false;
+            }
+            totalFieldList.remove(Constant.ID);
+            List<String> baseFieldList = getBaseFieldList(sysView);
+            //trans first
+            if (baseFieldList == null && baseFieldList.isEmpty()) {
+                log.error("base field not found:");
+                return false;
+            }
+            baseFieldList.add(Constant.ID);
+            String baseFields = baseFieldList.stream()
+                    .map(s -> Constant.ID.equalsIgnoreCase(s) ? Constant.MYSQL_UUID : s)
+                    .collect(Collectors.joining(Constant.COMMA));
+            String fixBaseFields = baseFieldList.stream()
+                    .map(s -> Constant.ID.equalsIgnoreCase(s) ? Constant.ID : changeFieldName(baseTableName, s))
+                    .collect(Collectors.joining(Constant.COMMA));
+
+            baseFieldList.remove(Constant.ID);
+
+            String filter = masterAuthorService.getFilter(user, baseMaintain.getId());
+            if (StringUtils.isEmpty(filter)) {
+                filter = Constant.WHERE_DEFAULT;
+            }
+
+            log.info("View base filter:" + filter);
+            String s = masterDataService.selectByVersionSql(null, baseTableName, baseFieldList, filter, baseMaintain.getVersion(), false);
+            log.info("View base select sql:" + s);
+            //base INSERT
+            tableInfoMapper.insertOneSelect(tableName, fixBaseFields, baseFields, s);
+
+            log.info("insert select");
+            // left insert
+            InsertJoin(sysView);
+            log.info("insert left join");
+            // change val common
+            changeValCommon(sysView);
+            log.info("changeValCommon");
+            //change logic
+
+
+            boolean checked = checkTempData(sysView);
+            if (!checked) {
+                sysView.setStatus(ViewStatus.unChecked).updateById();
+            } else {
+                sysView.setStatus(ViewStatus.working).updateById();
+            }
+
+            //
+            return true;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+    /**
+     *
+     * @description:  瑙嗗浘璐ㄩ噺妫�楠�
+     * @param sysView 瑙嗗浘
+     * @return: 鏄惁閫氳繃妫�楠�
+     *
+     */
+    private boolean checkTempData(SysView sysView) {
+        SysAssembleCheckType checkType = sysView.getCheckType();
+        if (checkType == null) {
+            return false;
+        }
+        if (checkType.equals(SysAssembleCheckType.unlimited)) {
+            return true;
+        }
+
+
+        HashMap<String,Boolean> fieldResultSet =  ruleClient.execuImmeForCollect(sysView.getViewTableName(), sysView.getUserId());
+        switch (checkType){
+            case successAdd:
+                String unSuccessFields = fieldResultSet.keySet().stream().filter(s -> !fieldResultSet.get(s)).collect(Collectors.joining(Constant.COMMA));
+                if (fieldResultSet.keySet().contains(false)) {
+                    return false;
+                }
+                break;
+            case partSuccessAdd:
+                String checkFields = sysView.getCheckField();
+                String[] split = checkFields.split(Constant.SEMICOLON);
+                for (String s : split) {
+                    Boolean checked = fieldResultSet.get(s);
+                    if (checked == null || !checked) {
+                        return false;
+                    }
+                }
+                break;
+        }
+        return true;
+    }
+    /**
+     *
+     * @description:  鎻掑叆鍏宠仈琛ㄦ暟鎹�
+     * @param sysView 瑙嗗浘
+     * @return:
+     *
+     */
+    private void InsertJoin(SysView sysView) {
+        String userId = sysView.getUserId();
+        TUser user = DbUtils.getUserById(userId);
+        String baseTableName = sysView.getBaseTableName();
+        String tableName = sysView.getViewTableName();
+        ContentBuilder joinBuilder = new ContentBuilder(Constant.EMPTY);
+        ContentBuilder updateFieldBuilder = new ContentBuilder(Constant.COMMA);
+        List<SysViewJoin> viewJoinList = sysView.getViewJoinList();
+
+        for (SysViewJoin sysViewJoin : viewJoinList) {
+            sysViewJoin.setBaseField(changeFieldName(sysView.getBaseTableName(), sysViewJoin.getBaseField()));
+            Maintain joinMaintain = getJoinMaintain(sysViewJoin);
+            String joinTableName = joinMaintain.getTableName();
+            sysViewJoin.setBaseTableName(sysView.getViewTableName());
+            String joinStr = sysViewJoin.createJoinStr();
+            if (StringUtils.isEmpty(joinStr)) {
+                continue;
+            }
+            joinBuilder.append(joinStr);
+            List<String> subFieldList = getSubFieldList(sysViewJoin, user);
+            for (String subOneField : subFieldList) {
+                String changeFieldName = changeFieldName(sysViewJoin.getJoinTableName(), subOneField);
+                String base = MessageFormat.format(Constant.Alias, sysView.getViewTableName(), changeFieldName);
+                String join = MessageFormat.format(Constant.Alias, joinTableName, subOneField);
+                Segment segment = new Segment(base, join);
+                updateFieldBuilder.append(segment.toRawString());
+            }
+        }
+        // JOIN
+        String joinSql = joinBuilder.toString();
+        if (StringUtils.isEmpty(joinSql)) {
+            log.info("sysViewJoin sql is null");
+            return;
+        }
+        tableInfoMapper.updateJoin(tableName, joinSql, updateFieldBuilder.toString(), Constant.WHERE_DEFAULT);
+    }
+    /**
+     *
+     * @description:  1瀵�1 鏁版嵁杞崲
+     * @param sysView 瑙嗗浘
+     * @return:
+     *
+     */
+    private void changeValCommon(SysView sysView) {
+        String mappingField = sysView.getMappingField();
+        String tableName = sysView.getViewTableName();
+        String mappingTable = sysView.getMappingTable();
+        mappingTable = tableInfoMapper.selectTableByName(mappingTable);
+        if (StringUtils.isEmpty(mappingTable)) {
+            return;
+        }
+        List<String> split = DbUtils.split(mappingField);
+        for (String oneMapField : split) {
+            String base = MessageFormat.format(Constant.Alias, tableName, oneMapField);
+            String join = MessageFormat.format(Constant.Alias, mappingTable, Constant.Pre);
+            String updateJoin = MessageFormat.format(Constant.Alias, mappingTable, Constant.fix);
+            Segment joinSegment = new Segment(base, join);
+            Segment updateSegment = new Segment(base, updateJoin);
+            Segment filterSegment = new Segment(MessageFormat.format(Constant.Alias, mappingTable, Constant.Code), oneMapField);
+            String changeJoinStr = MessageFormat.format(Constant.InnerJoinTemplate, ViewJoinType.inner, mappingTable, joinSegment.toRawString());
+            if (StringUtils.isEmpty(changeJoinStr)){
+                return;
+            }
+            tableInfoMapper.updateJoin(tableName, changeJoinStr, updateSegment.toRawString(), filterSegment.toString());
+        }
+    }
+    /**
+     *
+     * @description:  浠庢柊鐢熸垚瑙嗗浘琛�
+     * @param tableName 琛ㄥ悕
+     * @param totalFieldList 瀛楁鍒楄〃
+     * @return: 鐢熸垚鏄惁鎴愬姛
+     *
+     */
+    private boolean dropCreateViewTable(List<String> totalFieldList, String tableName) {
+        boolean created = unBigDataDataSourceInfo.dropData(tableName);
+        if (!created) {
+            return false;
+        }
+
+        created = unBigDataDataSourceInfo.createTable(tableName, totalFieldList);
+        if (!created) {
+            //TODO
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     *
+     * @description:  鑾峰彇瑙嗗浘鐨勭墿鐞嗚〃鍚�
+     * @param view 瑙嗗浘瀵硅薄
+     * @return: 鐗╃悊琛ㄥ悕
+     *
+     */
+    @Override
+    public String getViewTableName(SysView view) {
+        String viewTableName = view.getViewTableName();
+        if (StringUtils.isEmpty(viewTableName)) {
+            Maintain baseMaintain = getBaseMaintain(view);
+            viewTableName = Constant.VIEW + baseMaintain.getTableName() + baseMaintain.getOrderNo() + DbUtils.getUUID(5);
+            view.setViewTableName(viewTableName).updateById();
+        }
+        return viewTableName;
+    }
+    /**
+     *
+     * @description:  鑾峰彇瑙嗗浘 mapping鐨勭墿鐞嗚〃鍚�
+     * @param view 瑙嗗浘瀵硅薄
+     * @return: mapping鐨勭墿鐞嗚〃鍚�
+     *
+     */
+    @Override
+    public String getMappingTableName(SysView view) {
+        String id = view.getId();
+        String top = id.substring(0, 5);
+        String mappingTableName = Constant.VIEW + top + "mapping" + DbUtils.getUUID(4);
+        view.setMappingTable(mappingTableName).updateById();
+        return mappingTableName;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍏宠仈涓婚鐨勬湁鏉冮檺鐨勫瓧娈�
+     * @param user 鐢ㄦ埛
+     * @param join 鍏宠仈涓婚瀵硅薄
+     * @return: 鍏宠仈涓婚鐨勬湁鏉冮檺鐨勫瓧娈�
+     *
+     */
+
+    @Override
+    public List<String> getSubFieldList(SysViewJoin join, TUser user) {
+        String fieldsStr = join.getFields();
+        List<String> baseFieldList = new ArrayList<>();
+        if (Constant.All.equalsIgnoreCase(fieldsStr)) {
+            Maintain joinMaintain = getJoinMaintain(join);
+            List<SysField> fieldList = masterAuthorService.getField(user, joinMaintain.getId());
+            if (fieldList != null) {
+                baseFieldList = fieldList.stream().map(sysField -> sysField.getField()).collect(Collectors.toList());
+            }
+        }else {
+            baseFieldList = DbUtils.split(fieldsStr);
+        }
+
+        return baseFieldList;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍩哄噯涓婚鐨勬湁鏉冮檺鐨勫瓧娈�
+     * @param sysView 涓婚
+     * @return: 鍩哄噯涓婚鐨勬湁鏉冮檺鐨勫瓧娈�
+     *
+     */
+    private List<String> getBaseFieldList(SysView sysView) {
+        String fieldsStr = sysView.getFields();
+        List<String> baseFieldList = new ArrayList<>();
+        if (Constant.All.equalsIgnoreCase(fieldsStr)) {
+            String userId = sysView.getUserId();
+            TUser user = DbUtils.getUserById(userId);
+            Maintain baseMaintain = getBaseMaintain(sysView);
+            List<SysField> fieldList = masterAuthorService.getField(user, baseMaintain.getId());
+            baseFieldList = fieldList.stream().map(sysField -> sysField.getField()).collect(Collectors.toList());
+        }else {
+            baseFieldList = DbUtils.split(fieldsStr);
+        }
+
+        return baseFieldList;
+    }
+    /**
+     *
+     * @description:  鑾峰彇1瀵�1杞崲鐨勫瓧娈�
+     * @param sysView 瑙嗗浘
+     * @return: 1瀵�1杞崲鐨勫瓧娈靛垪琛�
+     *
+     */
+    @Override
+    public List<ViewMapFieldItem> getMapField(SysView sysView) {
+        List<ViewMapFieldItem> result = new ArrayList<>();
+        Maintain baseMaintain = getBaseMaintain(sysView);
+        SysMenu menuByTableName = menuMappingService.getMenuByTableName(baseMaintain.getTableName());
+        if (menuByTableName == null) {
+            return null;
+        }
+        List<String> baseFieldList = getBaseFieldList(sysView);
+
+        for (String field : baseFieldList) {
+            String changeFieldName = changeFieldName(baseMaintain.getTableName(), field);
+            SysField oneFieldByMaintainField = fieldService.getOneFieldByMaintain(baseMaintain.getId(), field);
+            if (oneFieldByMaintainField == null) {
+                continue;
+            }
+            ViewMapFieldItem viewMapFieldItem = new ViewMapFieldItem();
+            viewMapFieldItem.setChangedField(changeFieldName);
+            viewMapFieldItem.setField(field);
+            viewMapFieldItem.setFieldName(oneFieldByMaintainField.getAlias());
+            viewMapFieldItem.setMenuId(menuByTableName.getId());
+            viewMapFieldItem.setMenuName(menuByTableName.getName());
+
+            result.add(viewMapFieldItem);
+        }
+        String userId = sysView.getUserId();
+        TUser user = DbUtils.getUserById(userId);
+        List<SysViewJoin> joinList =  getJoinList(sysView);
+        for (SysViewJoin sysViewJoin : joinList) {
+            Maintain joinMaintain = getJoinMaintain(sysViewJoin);
+            SysMenu subMenu = menuMappingService.getMenuByTableName(joinMaintain.getTableName());
+            List<String> subFieldList = getSubFieldList(sysViewJoin, user);
+            for (String subField : subFieldList) {
+                String changeFieldName = changeFieldName(joinMaintain.getTableName(), subField);
+                SysField oneFieldByMaintainField = fieldService.getOneFieldByMaintain(joinMaintain.getId(), subField);
+                if (oneFieldByMaintainField == null) {
+                    continue;
+                }
+                ViewMapFieldItem viewMapFieldItem = new ViewMapFieldItem();
+                viewMapFieldItem.setChangedField(changeFieldName);
+                viewMapFieldItem.setField(subField);
+                viewMapFieldItem.setFieldName(oneFieldByMaintainField.getAlias());
+                viewMapFieldItem.setMenuId(subMenu.getId());
+                viewMapFieldItem.setMenuName(subMenu.getName());
+
+                result.add(viewMapFieldItem);
+            }
+        }
+        return result;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍏宠仈涓婚瀵硅薄
+     * @param sysView 瑙嗗浘
+     * @return: 鑾峰彇鍏宠仈涓婚瀵硅薄
+     *
+     */
+    private List<SysViewJoin> getJoinList(SysView sysView) {
+        String id = sysView.getId();
+        Wrapper<SysViewJoin> eq = new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, id);
+        List<SysViewJoin> joinList = joinService.selectList(eq);
+        return joinList;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍏ㄩ儴瀛楁鍒楄〃
+     * @param sysView 瑙嗗浘
+     * @return: 鍏ㄩ儴瀛楁鍒楄〃
+     *
+     */
+    public List<String> getTotalFieldList(SysView sysView) {
+        String userId = sysView.getUserId();
+        TUser user = DbUtils.getUserById(userId);
+
+        List<String> totalFieldList = new ArrayList<>();
+        Maintain baseMaintain = getBaseMaintain(sysView);
+        List<String> baseFieldList = getBaseFieldList(sysView);
+        totalFieldList.addAll(baseFieldList);
+
+        totalFieldList = totalFieldList.stream().map(s -> changeFieldName(baseMaintain.getTableName(), s)).collect(Collectors.toList());
+        List<SysViewJoin> sysViewJoins = joinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, sysView.getId()));
+        for (SysViewJoin sysViewJoin : sysViewJoins) {
+            Maintain joinMaintain = getJoinMaintain(sysViewJoin);
+            List<String> subFieldList = getSubFieldList(sysViewJoin, user);
+            subFieldList = subFieldList.stream().map(s -> changeFieldName(joinMaintain.getTableName(), s)).collect(Collectors.toList());
+            totalFieldList.addAll(subFieldList);
+
+            sysViewJoin.setJoinTableName(joinMaintain.getTableName());
+            sysViewJoin.setBaseTableName(baseMaintain.getTableName());
+        }
+        sysView.setViewJoinList(sysViewJoins);
+        return totalFieldList;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍩哄噯涓婚瀵硅薄
+     * @param sysView 瑙嗗浘
+     * @return: 鑾峰彇鍩哄噯涓婚瀵硅薄
+     *
+     */
+    @Override
+    public Maintain getBaseMaintain(SysView sysView) {
+
+    String baseMaintainStr = sysView.getBaseMaintain();
+    if (StringUtils.isEmpty(baseMaintainStr)) {
+        return null;
+    }
+    Maintain baseMaintain;
+    if (sysView.getNeedUpdate()) {
+        baseMaintain = maintainService.getNowVersion(baseMaintainStr);
+    }else {
+        baseMaintain = maintainService.selectById(baseMaintainStr);
+    }
+    return baseMaintain;
+    }
+    /**
+     *
+     * @description:  鑾峰彇鍏宠仈涓婚瀵硅薄
+     * @param viewJoin 瑙嗗浘鍏宠仈涓婚
+     * @return: 鑾峰彇鍏宠仈涓婚瀵硅薄
+     *
+     */
+    @Override
+    public Maintain getJoinMaintain(SysViewJoin viewJoin) {
+
+        String baseMaintainStr = viewJoin.getJoinMaintain();
+        if (StringUtils.isEmpty(baseMaintainStr)) {
+            return null;
+        }
+        Maintain baseMaintain;
+        if (viewJoin.getNeedUpdate()) {
+            baseMaintain = maintainService.getNowVersion(baseMaintainStr);
+        }else {
+            baseMaintain = maintainService.selectById(baseMaintainStr);
+        }
+        return baseMaintain;
+    }
+    /**
+     *
+     * @description:  鑾峰彇瑙嗗浘瀹為檯浣跨敤鐨勫瓧娈�
+     * @param field 涓婚瀛楁
+     * @param baseTableName 琛ㄥ悕
+     * @return: 瑙嗗浘瀹為檯浣跨敤鐨勫瓧娈�
+     *
+     */
+    @Override
+    public String changeFieldName(String baseTableName, String field) {
+        return DbUtils.StrJoinLink(Constant.EMPTY_Str, baseTableName, Constant.UnderLine, field);
+    }
+    /**
+     *
+     * @description:  瀹℃壒缁撴潫鍚庢牴鎹潯浠堕噸鏂扮敓鎴愯鍥惧苟鍒嗗彂
+     * @param maintainId 鐗堟湰id
+     * @param status 瀹℃壒鐘舵��
+     * @return:
+     *
+     */
+    @Override
+    public void dealFlow(String maintainId, ActivitiStatus status) {
+        try {
+            if (!ActivitiStatus.open.equals(status)) {
+                return;
+            }
+            Maintain maintain = maintainService.selectById(maintainId);
+            String maintainTableName = maintain.getTableName();
+
+            Wrapper<SysView> eq = new EntityWrapper<SysView>()
+                    .eq("need_update", true)
+                    .eq("base_maintain", maintainTableName);
+            List<SysView> sysViews = selectList(eq);
+            for (SysView sysView : sysViews) {
+                ViewStatus viewStatus = sysView.getStatus();
+                if (!ViewStatus.working.equals(viewStatus)) {
+                    continue;
+                }
+                createView(sysView.getId());
+
+                Boolean subscribe = sysView.getSubscribe();
+                if (!subscribe) {
+                    continue;
+                }
+                MqEntity mqEntity = new MqEntity();
+                mqEntity.setUserId(sysView.getUserId());
+                mqEntity.setMsgTopicName(Constant.View);
+                mqEntity.setType(Constant.View);
+                mqEntity.setDataId(sysView.getId());
+                mqEntity.setMsgTagName(sysView.getId());
+                mqEntity.setMsgKey(DbUtils.getUUID(16));
+                MqMessage mqMessage = new MqMessage(mqEntity);
+                dispenseService.pushActiveMq(mqMessage);
+            }
+            return;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result deleteView(String id) throws Exception {
+        SysView sysView = selectById(id);
+        if (sysView == null) {
+            return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND);
+        }
+        joinService.delete(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, id));
+        String viewTableName = sysView.getViewTableName();
+        if (!StringUtils.isEmpty(viewTableName)) {
+            unBigDataDataSourceInfo.dropData(viewTableName);
+        }
+        String mappingTable = sysView.getMappingTable();
+        if (!StringUtils.isEmpty(mappingTable)) {
+            unBigDataDataSourceInfo.dropData(mappingTable);
+        }
+        sysView.deleteById();
+        return Result.success(CodeMsg.DELETE_SUCCESS);
+    }
+
+    @Override
+    public List<ViewDictItem> getViewFieldMap(String viewId) {
+        SysView sysView = selectById(viewId);
+        if (sysView == null) {
+            return null;
+        }
+        Maintain baseMaintain = getBaseMaintain(sysView);
+        if (baseMaintain == null) {
+            return null;
+        }
+        String menuId = sysView.getMenuId();
+        SysMenu sysMenu = menuService.selectById(menuId);
+        if (sysMenu == null) {
+            return null;
+        }
+        List<String> baseFieldList = getBaseFieldList(sysView);
+        ArrayList<ViewDictItem> dictList = new ArrayList<>();
+
+        for (String field : baseFieldList) {
+            ViewDictItem viewDictItem = new ViewDictItem();
+            viewDictItem.setMenuId(sysMenu.getId());
+            viewDictItem.setRawField(field);
+            String changeFieldName = changeFieldName(baseMaintain.getTableName(), field);
+            viewDictItem.setViewField(changeFieldName);
+            dictList.add(viewDictItem);
+        }
+
+        List<SysViewJoin> sysViewJoins = joinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, sysView.getId()));
+        for (SysViewJoin sysViewJoin : sysViewJoins) {
+            String subMenuId = sysViewJoin.getMenuId();
+            SysMenu subMenu = menuService.selectById(subMenuId);
+            if (subMenu == null) {
+                continue;
+            }
+            Maintain joinMaintain = getJoinMaintain(sysViewJoin);
+            if (joinMaintain == null) {
+                continue;
+            }
+            String fields = sysViewJoin.getFields();
+
+            List<String> subFieldList = DbUtils.split(fields);
+            for (String field : subFieldList) {
+                ViewDictItem viewDictItem = new ViewDictItem();
+                viewDictItem.setMenuId(subMenu.getId());
+                viewDictItem.setRawField(field);
+                String changeFieldName = changeFieldName(joinMaintain.getTableName(), field);
+                viewDictItem.setViewField(changeFieldName);
+                dictList.add(viewDictItem);
+            }
+        }
+        return dictList;
+    }
+
+    @Override
+    public Result getMapData(SysView sysView, String changedField, Integer pageNo, int pageSize) {
+        String mappingTable = sysView.getMappingTable();
+
+        if (StringUtils.isEmpty(mappingTable) && !StringUtils.isEmpty(sysView.getMappingField())) {
+            return  Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED);
+        }
+        boolean exists = unBigDataDataSourceInfo.checkTableExists(mappingTable);
+        if (!exists) {
+            return null;
+        }
+        Segment segment = new Segment(Constant.Code, changedField);
+
+        Long count = tableInfoMapper.getCount(mappingTable, segment.toString());
+        if (count == 0) {
+            return null;
+        }
+        Page page = new Page(count);
+        page.setPageSize(pageSize);
+        page.setPageNo(pageNo);
+        ArrayList<String> fields = new ArrayList<>();
+        fields.add(Constant.Code);
+        fields.add(Constant.Pre);
+        fields.add(Constant.fix);
+        String fieldStr = fields.stream().collect(Collectors.joining(Constant.COMMA));
+        List<Map<String, Object>> maps = tableInfoMapper.selectByPage(mappingTable, fieldStr, segment.toString(), page.getLimitSQL());
+        JSONObject object = new JSONObject();
+        object.fluentPut("records", maps);
+        object.fluentPut("pages", page.getPageCount());
+        object.fluentPut("current", pageNo);
+        object.fluentPut("total", count);
+
+        return Result.success(object);
+    }
+    @Override
+    public long getViewCount(SysView sysView) {
+        String viewTableName = sysView.getViewTableName();
+        if (StringUtils.isEmpty(viewTableName)) {
+            log.info(" view table is null");
+            return  0;
+        }
+        boolean exists = unBigDataDataSourceInfo.checkTableExists(viewTableName);
+        if (!exists) {
+            log.info(" view table is not exist" + viewTableName);
+            return 0;
+        }
+
+        Long count = tableInfoMapper.getCount(viewTableName, Constant.WHERE_DEFAULT);
+        log.info(" view table count" + count);
+        if (count == null) {
+            return 0L;
+        }
+        return count;
+    }
+    @Override
+    public Result getViewData(SysView sysView, Integer pageNo, int pageSize) {
+        return getViewData(sysView, pageNo, pageSize,null);
+    }
+
+    @Override
+    public Result getViewData(SysView sysView, Integer pageNo, int pageSize, Page page) {
+        String viewTableName = sysView.getViewTableName();
+        long count = 0;
+
+        if (page == null) {
+            count = getViewCount(sysView);
+            page = new Page(count);
+            page.setPageSize(pageSize);
+            page.setPageNo(pageNo);
+        }else {
+            count = page.getRecordCount();
+        }
+
+        log.info(" view count "+count);
+        if (count == 0) {
+            return null;
+        }
+
+        List<TableSchemaResult> tableField = tableInfoMapper.getTableField(viewTableName);
+        String fields = tableField.stream().map(tableSchemaResult -> tableSchemaResult.getFieldName()).collect(Collectors.joining(Constant.COMMA));
+        log.info(" view field" + fields);
+
+        List<Map<String, Object>> maps = tableInfoMapper.selectByPage(viewTableName, fields, Constant.WHERE_DEFAULT, page.getLimitSQL());
+        if (maps == null || maps.isEmpty()) {
+            log.info(" view data is null");
+        }
+        Map<String, AntianaphylaxisResult> helpfulField = antianaphylaxisClient.getHelpfulField(fields, viewTableName);
+        antianaphylaxisClient.fixMasterData(maps,helpfulField);
+
+        JSONObject object = new JSONObject();
+        object.fluentPut("records", maps);
+        if (page == null) {
+            object.fluentPut("pages", page.getPageCount());
+            object.fluentPut("current", pageNo);
+            object.fluentPut("total", count);
+            object.fluentPut("pageSize", page.getPageSize());
+        }
+
+
+        //fields
+        ArrayList<ViewField> sysFields = new ArrayList<>();
+        Maintain baseMaintain = getBaseMaintain(sysView);
+        List<String> baseFieldList = getBaseFieldList(sysView);
+
+        for (String field : baseFieldList) {
+            SysField oneFieldByMaintain = fieldService.getOneFieldByMaintain(baseMaintain.getId(), field);
+            if (oneFieldByMaintain == null) {
+                continue;
+            }
+            String changeFieldName = changeFieldName(baseMaintain.getTableName(), field);
+            ViewField viewField = new ViewField();
+            viewField.setChangedField(changeFieldName);
+            viewField.setField(field);
+            viewField.setAlias(oneFieldByMaintain.getAlias());
+            viewField.setMenuId(sysView.getId());
+            viewField.setMenuName(sysView.getName());
+            sysFields.add(viewField);
+        }
+        String userId = sysView.getUserId();
+        TUser user = DbUtils.getUserById(userId);
+
+        List<SysViewJoin> joinList = joinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, sysView.getId()));
+        for (SysViewJoin sysViewJoin : joinList) {
+            Maintain joinMaintain = getJoinMaintain(sysViewJoin);
+            List<String> subFieldList = getSubFieldList(sysViewJoin, user);
+            for (String subField : subFieldList) {
+                SysField oneFieldByMaintain = fieldService.getOneFieldByMaintain(joinMaintain.getId(), subField);
+                if (oneFieldByMaintain == null) {
+                    continue;
+                }
+                String changeFieldName = changeFieldName(joinMaintain.getTableName(), subField);
+                ViewField viewField = new ViewField();
+                viewField.setChangedField(changeFieldName);
+                viewField.setField(subField);
+                viewField.setAlias(oneFieldByMaintain.getAlias());
+                viewField.setMenuId(sysView.getId());
+                viewField.setMenuName(sysView.getName());
+                sysFields.add(viewField);
+            }
+        }
+        object.fluentPut("fields", sysFields);
+
+        return Result.success(object);
+    }
+
+    @SneakyThrows
+    @Override
+    public void downlodMap(SysView sysView, TUser user, HttpServletResponse response,String field, String menuId) {
+        Maintain maintain = getMaintainByMenu(sysView, menuId);
+        if (maintain == null) {
+            return;
+        }
+        ArrayList<String> fields = new ArrayList<>();
+        fields.add(field);
+        fields.add(Constant.ID);
+        String filter = masterAuthorService.getFilter(user, maintain.getId());
+        if (StringUtils.isEmpty(filter)) {
+            filter = Constant.WHERE_DEFAULT;
+        }
+        String sql = masterDataService.selectByVersionSql(user, maintain.getTableName(), fields, filter, maintain.getVersion(), false);
+        String tableName = MessageFormat.format(Constant.asTempSql, sql, Constant.H);
+        String mappingTable = sysView.getMappingTable();
+        boolean exists = unBigDataDataSourceInfo.checkTableExists(mappingTable);
+        List<Map<String, Object>> maps;
+        if (exists) {
+            String changeFieldName = changeFieldName(maintain.getTableName(), field);
+            maps = viewMapper.selectMapVal(tableName, MessageFormat.format(Constant.FieldAsAlias, field, Constant.Pre), Constant.WHERE_DEFAULT, mappingTable, DbUtils.quotedStr(changeFieldName));
+
+        } else {
+            maps = tableInfoMapper.selectDistinct(tableName, MessageFormat.format(Constant.FieldAsAlias, field, Constant.Pre), Constant.WHERE_DEFAULT);
+
+        }
+        //todo 澶ф暟鎹噺浼樺寲
+        fields.remove(Constant.ID);
+        ArrayList<SysField> sysFields = new ArrayList<>();
+        sysFields.add(new SysField().setField(Constant.Pre).setAlias(Constant.PreValue));
+        sysFields.add(new SysField().setField(Constant.fix).setAlias(Constant.fixValue));
+        ExcelUtil.export(response, maps, sysFields);
+    }
+
+    @Override
+    public Maintain getMaintainByMenu(SysView sysView, String menuId) {
+        Maintain maintain = null;
+        String baseMenu = sysView.getMenuId();
+        if (baseMenu != null && baseMenu.equalsIgnoreCase(menuId)) {
+            maintain = getBaseMaintain(sysView);
+        }else {
+            List<SysViewJoin> joinList = joinService.selectList(new EntityWrapper<SysViewJoin>().eq(Constant.PARENT_ID, sysView.getId()));
+
+            for (SysViewJoin sysViewJoin : joinList) {
+                String subMenuId = sysViewJoin.getMenuId();
+                if (subMenuId != null && subMenuId.equalsIgnoreCase(menuId)) {
+                    maintain = getJoinMaintain(sysViewJoin);
+                }
+
+            }
+        }
+        return maintain;
+    }
+
+    @Override
+    public boolean deleteMapField(SysView sysView, String changedField) {
+        try {
+            Segment segment = new Segment(Constant.Code, changedField);
+            String mappingTable = sysView.getMappingTable();
+            String mappingfield = sysView.getMappingField();
+            if (StringUtils.isEmpty(mappingTable) || StringUtils.isEmpty(mappingfield)) {
+                return true;
+            }
+            mappingTable = tableInfoMapper.selectTableByName(mappingTable);
+            if (!StringUtils.isEmpty(mappingTable)){
+                tableInfoMapper.delete(mappingTable, segment.toString());
+            }
+
+            String mappingField = sysView.getMappingField();
+            List<String> split = DbUtils.split(mappingField);
+            String collect = split.stream().filter(s -> !s.equalsIgnoreCase(changedField)).collect(Collectors.joining(Constant.SEMICOLON));
+            boolean b = sysView.setMappingField(collect).updateById();
+            return b;
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
 }

--
Gitblit v1.8.0