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