diff --git a/DataRoom/dataroom-core/pom.xml b/DataRoom/dataroom-core/pom.xml index 7aa08a34..ab81adf3 100644 --- a/DataRoom/dataroom-core/pom.xml +++ b/DataRoom/dataroom-core/pom.xml @@ -6,14 +6,14 @@ com.gccloud dataroom - 1.0.1.2023092701.Alpha + 1.0.1.2023100901.Alpha dataroom-core - 8 - 8 + 1.8 + 1.8 UTF-8 @@ -24,10 +24,6 @@ dataset-core ${dataset.core.version} - - org.springframework.boot - spring-boot-starter - org.springframework.boot spring-boot-starter-web diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/entity/PageEntity.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/entity/PageEntity.java index c47d7704..12304f5a 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/entity/PageEntity.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/entity/PageEntity.java @@ -44,12 +44,6 @@ public class PageEntity extends SuperEntity implements Serializable { @ApiModelProperty(notes = "大屏首页封面") private String coverPicture; - @ApiModelProperty(notes = "页面图标") - private String icon; - - @ApiModelProperty(notes = "图标颜色") - private String iconColor; - @ApiModelProperty(notes = "具体组件配置、JSON格式") @TableField(typeHandler = BasePageDTOTypeHandler.class) private BasePageDTO config; diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/service/IBasePageService.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/service/IBasePageService.java index 343b3b42..b6917eb6 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/service/IBasePageService.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/basic/service/IBasePageService.java @@ -71,11 +71,12 @@ public interface IBasePageService extends ISuperService { default boolean checkNameRepeat(PageEntity entity) { AssertUtils.isTrue(StringUtils.isNotBlank(entity.getName()), "名称不能为空"); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(PageEntity::getId); queryWrapper.eq(StringUtils.isNotBlank(entity.getAppCode()), PageEntity::getAppCode, entity.getAppCode()) .eq(PageEntity::getName, entity.getName()) .eq(PageEntity::getType, entity.getType()) .ne(StringUtils.isNotBlank(entity.getId()), PageEntity::getId, entity.getId()); - return getBaseMapper().selectCount(queryWrapper) > 0; + return getBaseMapper().selectList(queryWrapper).size() > 0; } /** @@ -89,11 +90,12 @@ public interface IBasePageService extends ISuperService { default boolean checkNameRepeat(String appCode, String name, String id, String type) { AssertUtils.isTrue(StringUtils.isNotBlank(name), "名称不能为空"); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(PageEntity::getId); queryWrapper.eq(StringUtils.isNotBlank(appCode), PageEntity::getAppCode, appCode) .eq(PageEntity::getName, name) .eq(PageEntity::getType, type) .ne(StringUtils.isNotBlank(id), PageEntity::getId, id); - return getBaseMapper().selectCount(queryWrapper) > 0; + return getBaseMapper().selectList(queryWrapper).size() > 0; } @@ -105,11 +107,12 @@ public interface IBasePageService extends ISuperService { default boolean checkCodeRepeat(PageEntity entity) { AssertUtils.isTrue(StringUtils.isNotBlank(entity.getCode()), "编码不能为空"); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(PageEntity::getId); queryWrapper.eq(StringUtils.isNotBlank(entity.getAppCode()), PageEntity::getAppCode, entity.getAppCode()) .eq(PageEntity::getCode, entity.getCode()) .eq(PageEntity::getType, entity.getType()) .ne(StringUtils.isNotBlank(entity.getId()), PageEntity::getId, entity.getId()); - return getBaseMapper().selectCount(queryWrapper) > 0; + return getBaseMapper().selectList(queryWrapper).size() > 0; } } diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/controller/BizComponentController.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/controller/BizComponentController.java index 525ec945..511ddf8f 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/controller/BizComponentController.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/controller/BizComponentController.java @@ -1,6 +1,8 @@ package com.gccloud.dataroom.core.module.biz.component.controller; import com.gccloud.common.permission.ApiPermission; +import com.gccloud.common.utils.BeanConvertUtils; +import com.gccloud.dataroom.core.module.biz.component.dto.BizComponentDTO; import com.gccloud.dataroom.core.module.biz.component.dto.BizComponentSearchDTO; import com.gccloud.dataroom.core.module.biz.component.entity.BizComponentEntity; import com.gccloud.dataroom.core.module.biz.component.service.IBizComponentService; @@ -46,7 +48,8 @@ public class BizComponentController { @ApiPermission(permissions = {Permission.Component.ADD}) @PostMapping("/add") @ApiOperation(value = "新增", notes = "新增", produces = MediaType.APPLICATION_JSON_VALUE) - public R add(@ApiParam(name = "新增", value = "传入新增的业务条件", required = true) @RequestBody BizComponentEntity entity) { + public R add(@ApiParam(name = "新增", value = "传入新增的业务条件", required = true) @RequestBody BizComponentDTO dto) { + BizComponentEntity entity = BeanConvertUtils.convert(dto, BizComponentEntity.class); String code = bizComponentService.add(entity); return R.success(code); } @@ -55,7 +58,8 @@ public class BizComponentController { @ApiPermission(permissions = {Permission.Component.UPDATE}) @PostMapping("/update") @ApiOperation(value = "修改", notes = "修改", produces = MediaType.APPLICATION_JSON_VALUE) - public R update(@ApiParam(name = "修改", value = "传入修改的业务条件", required = true) @RequestBody BizComponentEntity entity) { + public R update(@ApiParam(name = "修改", value = "传入修改的业务条件", required = true) @RequestBody BizComponentDTO dto) { + BizComponentEntity entity = BeanConvertUtils.convert(dto, BizComponentEntity.class); bizComponentService.update(entity); return R.success(); } @@ -87,8 +91,8 @@ public class BizComponentController { @ApiPermission(permissions = {Permission.Component.VIEW}) @PostMapping("/name/repeat") @ApiOperation(value = "名称查重", notes = "名称查重", produces = MediaType.APPLICATION_JSON_VALUE) - public R nameRepeat(@RequestBody BizComponentEntity entity) { - return R.success(bizComponentService.checkName(entity.getId(), entity.getName())); + public R nameRepeat(@RequestBody BizComponentDTO dto) { + return R.success(bizComponentService.checkName(dto.getId(), dto.getName())); } } diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/dto/BizComponentDTO.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/dto/BizComponentDTO.java new file mode 100644 index 00000000..0ce65a72 --- /dev/null +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/dto/BizComponentDTO.java @@ -0,0 +1,49 @@ +package com.gccloud.dataroom.core.module.biz.component.dto; + +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gccloud.common.utils.EmptyAsNullDeserializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author hongyang + * @version 1.0 + * @date 2023/6/5 11:41 + */ +@Data +public class BizComponentDTO { + + @JsonDeserialize(using = EmptyAsNullDeserializer.class) + @ApiModelProperty(notes = "主键") + private String id; + + @ApiModelProperty(notes = "业务组件中文名称") + private String name; + + @ApiModelProperty(notes = "业务组件编码,页面唯一标识符") + @TableField(updateStrategy = FieldStrategy.NEVER) + private String code; + + @ApiModelProperty(notes = "业务组件所属分组") + private String type; + + @ApiModelProperty(notes = "组件封面") + private String coverPicture; + + @ApiModelProperty(notes = "vue组件内容") + private String vueContent; + + @ApiModelProperty(notes = "组件配置内容") + private String settingContent; + + @ApiModelProperty(notes = "备注") + private String remark; + + @ApiModelProperty(notes = "排序") + private Integer orderNum; + + @ApiModelProperty(notes = "模块编码") + private String moduleCode; +} diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java index abe2503c..4d856111 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/biz/component/service/impl/BizComponentServiceImpl.java @@ -248,10 +248,11 @@ public class BizComponentServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(BizComponentEntity::getId); queryWrapper.eq(BizComponentEntity::getName, name); if (StringUtils.isNotBlank(id)) { queryWrapper.ne(BizComponentEntity::getId, id); } - return this.count(queryWrapper) > 0; + return this.list(queryWrapper).size() > 0; } } diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/bean/Chart.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/bean/Chart.java index 2f1e0db0..c4d3ad54 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/bean/Chart.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/chart/bean/Chart.java @@ -91,4 +91,7 @@ public class Chart { @ApiModelProperty(notes = "计算表达式") private String expression; + @ApiModelProperty(notes = "表达式关联的组件的code集合") + private List expressionCodes; + } diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/file/service/impl/DataRoomFileServiceImpl.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/file/service/impl/DataRoomFileServiceImpl.java index 8920e5fe..dba0863e 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/file/service/impl/DataRoomFileServiceImpl.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/file/service/impl/DataRoomFileServiceImpl.java @@ -32,9 +32,6 @@ public class DataRoomFileServiceImpl extends ServiceImpl aliasMap = Maps.newHashMap(); - aliasMap.put("space", "size"); - QueryWrapperUtils.wrapperSort(null, DataRoomFileEntity.class, queryWrapper, searchDTO, aliasMap, DataRoomFileEntity::getOriginalName, DataRoomFileEntity::getCreateDate, DataRoomFileEntity::getSize, DataRoomFileEntity::getDownloadCount); return page(searchDTO, queryWrapper); } diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/dto/DataRoomPageDTO.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/dto/DataRoomPageDTO.java index 7e0c323d..5a47715e 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/dto/DataRoomPageDTO.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/manage/dto/DataRoomPageDTO.java @@ -1,10 +1,12 @@ package com.gccloud.dataroom.core.module.manage.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gccloud.common.utils.EmptyAsNullDeserializer; +import com.gccloud.common.validator.group.Insert; +import com.gccloud.common.validator.group.Update; import com.gccloud.dataroom.core.constant.PageDesignConstant; import com.gccloud.dataroom.core.module.basic.dto.BasePageDTO; import com.gccloud.dataroom.core.module.chart.bean.Chart; -import com.gccloud.common.validator.group.Insert; -import com.gccloud.common.validator.group.Update; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -20,6 +22,7 @@ import java.util.List; @Data public class DataRoomPageDTO extends BasePageDTO { + @JsonDeserialize(using = EmptyAsNullDeserializer.class) @NotBlank(message = "id不能为空", groups = Update.class) @ApiModelProperty(notes = "主键id") private String id; diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/dto/DataRoomMapDTO.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/dto/DataRoomMapDTO.java index 8e30df45..265b1088 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/dto/DataRoomMapDTO.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/map/dto/DataRoomMapDTO.java @@ -1,5 +1,7 @@ package com.gccloud.dataroom.core.module.map.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gccloud.common.utils.EmptyAsNullDeserializer; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,6 +13,7 @@ import lombok.Data; @Data public class DataRoomMapDTO { + @JsonDeserialize(using = EmptyAsNullDeserializer.class) @ApiModelProperty(notes = "主键") private String id; diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/template/dto/PageTemplateDTO.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/template/dto/PageTemplateDTO.java index 0ed35a79..9fcb5f31 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/template/dto/PageTemplateDTO.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/template/dto/PageTemplateDTO.java @@ -1,5 +1,7 @@ package com.gccloud.dataroom.core.module.template.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gccloud.common.utils.EmptyAsNullDeserializer; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,6 +13,7 @@ import lombok.Data; @Data public class PageTemplateDTO { + @JsonDeserialize(using = EmptyAsNullDeserializer.class) @ApiModelProperty(notes = "主键") private String id; diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/dto/TypeDTO.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/dto/TypeDTO.java index b0026525..98e70029 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/dto/TypeDTO.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/dto/TypeDTO.java @@ -1,5 +1,7 @@ package com.gccloud.dataroom.core.module.type.dto; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.gccloud.common.utils.EmptyAsNullDeserializer; import com.gccloud.dataroom.core.constant.PageDesignConstant; import com.gccloud.common.validator.group.Insert; import com.gccloud.common.validator.group.Update; @@ -17,6 +19,7 @@ import javax.validation.constraints.NotBlank; public class TypeDTO { @ApiModelProperty(notes = "主键") + @JsonDeserialize(using = EmptyAsNullDeserializer.class) @NotBlank(message = "id不能为空", groups = Update.class) private String id; diff --git a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/service/impl/TypeServiceImpl.java b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/service/impl/TypeServiceImpl.java index afd69768..85e7075e 100644 --- a/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/service/impl/TypeServiceImpl.java +++ b/DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/module/type/service/impl/TypeServiceImpl.java @@ -79,18 +79,20 @@ public class TypeServiceImpl extends ServiceImpl im @Override public boolean checkCodeRepeat(String id, String type, String code) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(TypeEntity::getId); queryWrapper.eq(TypeEntity::getType, type); queryWrapper.eq(TypeEntity::getCode, code); queryWrapper.ne(StringUtils.isNotBlank(id), TypeEntity::getId, id); - return this.count(queryWrapper) > 0; + return this.list(queryWrapper).size() > 0; } @Override public boolean checkNameRepeat(String id, String type, String name) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(TypeEntity::getId); queryWrapper.eq(TypeEntity::getName, name); queryWrapper.eq(TypeEntity::getType, type); queryWrapper.ne(StringUtils.isNotBlank(id), TypeEntity::getId, id); - return this.count(queryWrapper) > 0; + return this.list(queryWrapper).size() > 0; } } diff --git a/DataRoom/dataroom-server/pom.xml b/DataRoom/dataroom-server/pom.xml index 422a5d93..dad9ffdc 100644 --- a/DataRoom/dataroom-server/pom.xml +++ b/DataRoom/dataroom-server/pom.xml @@ -6,15 +6,16 @@ com.gccloud dataroom - 1.0.1.2023092701.Alpha + 1.0.1.2023100901.Alpha dataroom-server - 8 - 8 + 1.8 + 1.8 UTF-8 + true @@ -29,7 +30,7 @@ com.gccloud dataroom-core - 1.0.1.2023092701.Alpha + ${project.parent.version} @@ -51,7 +52,6 @@ org.springframework.boot spring-boot-starter-test - 2.3.12.RELEASE diff --git a/DataRoom/dataroom-server/src/main/java/com/gccloud/DataRoomApplication.java b/DataRoom/dataroom-server/src/main/java/com/gccloud/DataRoomApplication.java index 0250d3fa..ff0812ae 100644 --- a/DataRoom/dataroom-server/src/main/java/com/gccloud/DataRoomApplication.java +++ b/DataRoom/dataroom-server/src/main/java/com/gccloud/DataRoomApplication.java @@ -1,6 +1,7 @@ package com.gccloud; -import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.gccloud.common.constant.CommonConst; import com.gccloud.dataroom.core.constant.DataRoomConst; import com.gccloud.dataset.constant.DatasetConstant; @@ -28,10 +29,12 @@ public class DataRoomApplication { /** * 分页插件 * - * @return + * @return PaginationInterceptor */ @Bean - public PaginationInterceptor paginationInterceptor() { - return new PaginationInterceptor(); + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + return interceptor; } } diff --git a/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/CorsBeanConfig.java b/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/CorsBeanConfig.java index 9aa25d97..f7ecdbde 100644 --- a/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/CorsBeanConfig.java +++ b/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/CorsBeanConfig.java @@ -22,7 +22,8 @@ public class CorsBeanConfig implements WebMvcConfigurer { Cors cors = new Cors(); CorsRegistration corsRegistration = registry.addMapping(cors.getMapping()); corsRegistration - .allowedOrigins(cors.getAllowedOrigins().toArray(new String[cors.getAllowedOrigins().size()])) + // change 由allowedOrigins改为allowedOriginPatterns,springboot新版本中allowedOrigins不允许设置*,只能设置具体的域名 + .allowedOriginPatterns(cors.getAllowedOrigins().toArray(new String[cors.getAllowedOrigins().size()])) .allowCredentials(cors.getAllowCredentials()) .allowedMethods(cors.getAllowedMethods().toArray(new String[cors.getAllowedMethods().size()])) .maxAge(cors.getMaxAge()); @@ -34,4 +35,4 @@ public class CorsBeanConfig implements WebMvcConfigurer { corsRegistration.exposedHeaders(exposedHeaders.toArray(new String[exposedHeaders.size()])); } } -} \ No newline at end of file +} diff --git a/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/SwaggerBootstrapConfig.java b/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/SwaggerBootstrapConfig.java index 3191d93a..6a79d3c8 100644 --- a/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/SwaggerBootstrapConfig.java +++ b/DataRoom/dataroom-server/src/main/java/com/gccloud/dataroom/config/SwaggerBootstrapConfig.java @@ -6,12 +6,17 @@ import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrap import com.google.common.base.Predicates; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -20,9 +25,12 @@ import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ResponseMessage; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.lang.reflect.Field; import java.util.List; +import java.util.stream.Collectors; /** * Swagger2 @@ -81,4 +89,41 @@ public class SwaggerBootstrapConfig implements WebMvcConfigurer { registry.addResourceHandler("doc.html") .addResourceLocations("classpath:/META-INF/resources/"); } + + // NOTE 解决springfox与springboot新版本不兼容问题 + @Bean + public BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider ) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings(List mappings) { + List copy = mappings.stream() + .filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + assert field != null; + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + + } diff --git a/DataRoom/dataroom-server/src/main/resources/application.yml b/DataRoom/dataroom-server/src/main/resources/application.yml index 2f457e18..30a49ace 100644 --- a/DataRoom/dataroom-server/src/main/resources/application.yml +++ b/DataRoom/dataroom-server/src/main/resources/application.yml @@ -17,6 +17,7 @@ spring: # 字符串转允许List,否则导致 @RequestBody List list 类型无法解析 ACCEPT_SINGLE_VALUE_AS_ARRAY: true resources: + # 自springboot 2.5.5之后,该属性已经被废弃,使用web.resources.static-locations代替 static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:${gc.starter.file.basePath} # 静态资源配置 mvc: @@ -26,6 +27,11 @@ spring: view: prefix: classpath:/static/ suffix: .html + pathmatch: + matching-strategy: ANT_PATH_MATCHER + web: + resources: + static-locations: classpath:/static/,classpath:/META-INF/resources/,classpath:/META-INF/resources/webjars/,file:${gc.starter.file.basePath} mybatis-plus: # mybatis plus xml配置文件扫描,多个通过分号隔开 @@ -35,4 +41,4 @@ mybatis-plus: global-config: db-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"唯一ID"; - id-type: 0 + id-type: AUTO diff --git a/DataRoom/doc/init.sql b/DataRoom/doc/init.sql index 9f403161..290faf41 100644 --- a/DataRoom/doc/init.sql +++ b/DataRoom/doc/init.sql @@ -29,15 +29,11 @@ CREATE TABLE `big_screen_page` `name` varchar(100) NOT NULL DEFAULT '' COMMENT '页面中文名称', `code` varchar(255) NOT NULL DEFAULT '' COMMENT '页面编码,页面唯一标识符', `cover_picture` varchar(255) NOT NULL DEFAULT '' COMMENT '封面图片文件路径', - `icon` varchar(100) NOT NULL DEFAULT '' COMMENT '页面图标', - `icon_color` varchar(100) NOT NULL DEFAULT '' COMMENT '图标颜色', `type` varchar(100) NOT NULL DEFAULT 'custom' COMMENT '页面类型', - `layout` varchar(255) NOT NULL DEFAULT '' COMMENT '组件布局,记录组件的相对位置和顺序', `config` longtext COMMENT '页面配置', `parent_code` varchar(255) NOT NULL DEFAULT '' COMMENT '父级目录编码', `order_num` bigint(64) NOT NULL DEFAULT '0' COMMENT '排序', `remark` varchar(100) NOT NULL DEFAULT '' COMMENT '备忘', - `model_code` varchar(255) NOT NULL DEFAULT '' COMMENT '模型编码', `app_code` varchar(255) NOT NULL DEFAULT '' COMMENT '所属应用编码', `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', diff --git a/DataRoom/doc/update.sql b/DataRoom/doc/update.sql index 24c5cce8..5d946583 100644 --- a/DataRoom/doc/update.sql +++ b/DataRoom/doc/update.sql @@ -143,4 +143,10 @@ CREATE TABLE `big_screen_page_preview` `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4 COMMENT ='页面预览缓存表,每日定时删除'; \ No newline at end of file + DEFAULT CHARSET = utf8mb4 COMMENT ='页面预览缓存表,每日定时删除'; + +# 20231009 移除大屏页面表中的冗余字段 +alter table big_screen_page drop column icon; +alter table big_screen_page drop column icon_color; +alter table big_screen_page drop column layout; +alter table big_screen_page drop column model_code; \ No newline at end of file diff --git a/DataRoom/pom.xml b/DataRoom/pom.xml index abaa9188..c8952996 100644 --- a/DataRoom/pom.xml +++ b/DataRoom/pom.xml @@ -3,18 +3,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.3.12.RELEASE - - - com.gccloud dataroom - 1.0.1.2023092701.Alpha + 1.0.1.2023100901.Alpha pom + dataroom 基于G2Plot、Echarts的大屏设计服务端,具备设计、预览能力,支持MySQL、Oracle、PostgreSQL、Groovy等数据集接入 https://github.com/gcpaas/DataRoom @@ -26,7 +20,16 @@ http://www.apache.org/licenses/LICENSE-2.0.txt - + + https://github.com/gcpaas/DataRoom + + + + gcpaas + gcpaas + tech@ustcinfo.com + + dataroom-core dataroom-server @@ -36,42 +39,15 @@ 1.8 UTF-8 UTF-8 - 2.3.12.RELEASE - 1.5.20 - 1.9.6 + 2.7.16 2.9.2 1.5.21 - 3.3.2 - 3.5.6 - 2.0.6 - 3.10 - 4.1 - 3.2.2 - portable-1.7.8 - 5.3.1 - 20.0 2.13.3 20220320 - 1.2.11 - 3.9.0 - 12.2.0.1 - 5.1.49 - 42.3.3 - 0.3.2 - 2.2 - 4.9.1 - 1.0.1.2023092201.Alpha + 1.0.1.2023100901.Alpha + 2.22.2 - - - - com.alibaba - easyexcel - 2.2.5 - - - diff --git a/data-room-ui/packages/BigScreenList/EditForm.vue b/data-room-ui/packages/BigScreenList/EditForm.vue index d25dddea..12aa81df 100644 --- a/data-room-ui/packages/BigScreenList/EditForm.vue +++ b/data-room-ui/packages/BigScreenList/EditForm.vue @@ -67,6 +67,22 @@ class="bs-el-input-number" /> + + + + + { + this.$dataRoomAxios.get('/bigScreen/type/list/bigScreenCatalog').then((resp) => { + this.catalogList = resp + }) if (code) { this.$dataRoomAxios.get(`/bigScreen/design/info/code/${code}`).then((resp) => { this.$set(this, 'title', resp.name) diff --git a/data-room-ui/packages/ComponentList/EditForm.vue b/data-room-ui/packages/ComponentList/EditForm.vue index 052f0ec9..65358648 100644 --- a/data-room-ui/packages/ComponentList/EditForm.vue +++ b/data-room-ui/packages/ComponentList/EditForm.vue @@ -89,6 +89,40 @@ class="bs-el-input-number" /> + +
+ + + +
+
+ + + +
+
{ if (value) { - this.$dataRoomAxios.post('/bigScreen/design/name/repeat', { + const reqUrl = { + component: '/bigScreen/design/name/repeat', + bizComponent: '/bigScreen/bizComponent/name/repeat' + } + this.$dataRoomAxios.post(reqUrl[this.type], { name: value, type: this.type, id: this.dataForm.id @@ -229,7 +269,7 @@ export default { callback() } }, - trigger: 'change' + trigger: ['blur', 'change'] } ] }, @@ -289,6 +329,9 @@ export default { const code = nodeData ? nodeData.code : '' this.formVisible = true this.$nextTick(() => { + this.$dataRoomAxios.get('/bigScreen/type/list/bizComponentCatalog').then((resp) => { + this.catalogList = resp + }) if (code) { this.$dataRoomAxios.get(`/bigScreen/bizComponent/info/${code}`).then((resp) => { this.$set(this, 'title', resp.name) @@ -297,6 +340,7 @@ export default { this.$set(this.dataForm, 'orderNum', nodeData.orderNum) this.$set(this.dataForm, 'type', resp.type) this.$set(this.dataForm, 'id', resp.id) + this.$set(this.dataForm, 'parentCode', resp.parentCode) }) } else { this.$set(this.dataForm, 'name', '') @@ -304,6 +348,7 @@ export default { this.$set(this.dataForm, 'type', parentCode) this.$set(this.dataForm, 'orderNum', 0) this.$set(this.dataForm, 'id', '') + this.$set(this.dataForm, 'parentCode', parentCode) } }) }, @@ -312,6 +357,9 @@ export default { const code = nodeData ? nodeData.code : '' this.formVisible = true this.$nextTick(() => { + this.$dataRoomAxios.get('/bigScreen/type/list/componentCatalog').then((resp) => { + this.catalogList = resp + }) if (code) { this.$dataRoomAxios.get(`/bigScreen/design/info/code/${code}`).then((resp) => { this.$set(this, 'title', resp.name) @@ -328,6 +376,7 @@ export default { this.$set(this.dataForm, 'orderNum', nodeData.orderNum) this.$set(this.dataForm, 'pageTemplateId', resp?.pageTemplateId) this.$set(this.dataForm, 'pageConfig', resp?.pageConfig) + this.$set(this.dataForm, 'parentCode', resp?.parentCode) const { w, h } = resp.pageConfig this.resolutionRatio.w = w this.resolutionRatio.h = h diff --git a/data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue b/data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue index bb0bd674..8af93990 100644 --- a/data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue +++ b/data-room-ui/packages/DataSetManagement/src/CustomEditForm.vue @@ -192,7 +192,7 @@ @@ -289,7 +289,7 @@
@@ -708,20 +708,32 @@ align="center" > 取消 + > + 取消 + 确定 + > + 确定 + @@ -891,6 +907,22 @@ export default { tableColumnObject[item.fieldName] = '' }) return tableColumnObject + }, + // 输出字段根据orderNum排序 + sortedStructurePreviewList () { + const list = this.structurePreviewList + list.sort((a, b) => { + return a.orderNum - b.orderNum + }) + return list + }, + sortedTablePreviewList () { + const tableList = this.dataPreviewList[0] ? this.dataPreviewList[0] : this.noDataTableDisplayFields + const list = Object.keys(tableList) + list.sort((a, b) => { + return this.structurePreviewListCopy.findIndex(item => item.fieldName === a) - this.structurePreviewListCopy.findIndex(item => item.fieldName === b) + }) + return list } }, watch: { @@ -963,6 +995,13 @@ export default { this.datasetTest(false) }) }, + getRules (row) { + return [{ + required: row.require === 1, + message: '参数值不能为空', + trigger: ['blur', 'change'] + }] + }, /** * 获取数据源列表 */ @@ -1014,6 +1053,13 @@ export default { * 保存参数设置 */ setParam () { + for (let i = 0; i < this.paramsListCopy.length; i++) { + const row = this.paramsListCopy[i] + if (row.require === 1 && (row.value === '' || row.value === null)) { + this.$message.error(`第${i + 1}行参数值不能为空`) + return + } + } this.dataForm.paramsList = cloneDeep(this.paramsListCopy) if (this.isTest) { this.datasetTest() @@ -1232,6 +1278,9 @@ export default { }) } this.structurePreviewListCopy = cloneDeep(this.structurePreviewList) + this.structurePreviewListCopy = this.structurePreviewListCopy.sort((a, b) => { + return a.orderNum - b.orderNum + }) let paramsNameCheck = false this.dataForm.paramsList.forEach(param => { const checkList = this.structurePreviewList.filter(item => item.fieldName === param.name) @@ -1419,16 +1468,30 @@ export default { .bs-pagination { padding: 16px !important; position: unset !important; + ::v-deep .el-input__inner { width: 110px !important; border: none; background: var(--bs-el-background-1); } } -.bs-el-select{ + +.bs-el-select { width: 100% !important; } -::v-deep .el-input__inner{ + +::v-deep .el-input__inner { width: 100% !important; } + +::v-deep .el-table__row { + height: 58px; + + .cell { + width: 100%; + margin: 0 auto; + position: absolute; + top: 8px; + } +} diff --git a/data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue b/data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue index cc1fb352..ced98d00 100644 --- a/data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue +++ b/data-room-ui/packages/DataSetManagement/src/StoredProcedureEditForm.vue @@ -310,27 +310,28 @@
数据预览
-
+
+ -
+
数据预览中,存储过程仅展示20条数据
diff --git a/data-room-ui/packages/MapDataManagement/src/index.vue b/data-room-ui/packages/MapDataManagement/src/index.vue index d7e4a567..e742a8dc 100644 --- a/data-room-ui/packages/MapDataManagement/src/index.vue +++ b/data-room-ui/packages/MapDataManagement/src/index.vue @@ -272,19 +272,24 @@ export default { }, getDataList() { this.lazyResolveMap.clear() - this.searchLoading = true - this.loadingText = '正在加载地图数据...' - mapList(this.searchForm).then(res => { - this.mapList = res - this.searchLoading = false - }).catch(err => { - this.searchLoading = false + this.$nextTick(() => { + this.mapList = [] + }) + this.$nextTick(() => { + this.searchLoading = true + this.loadingText = '正在加载地图数据...' + mapList(this.searchForm).then(res => { + this.mapList = res + this.searchLoading = false + }).catch(err => { + this.searchLoading = false + }) + // 清除展开状态 + for (let i = 0; i < this.lazyResolveIds.length; i++) { + this.$refs.table.store.states.treeData[this.lazyResolveIds[i]].loaded = false; + this.$refs.table.store.states.treeData[this.lazyResolveIds[i]].expanded = false + } }) - // 清除展开状态 - for (let i = 0; i < this.lazyResolveIds.length; i++) { - this.$refs.table.store.states.treeData[this.lazyResolveIds[i]].loaded = false; - this.$refs.table.store.states.treeData[this.lazyResolveIds[i]].expanded = false - } }, /** * 新增、删除、修改等操作成功后刷新数据,不改变展开状态 @@ -295,7 +300,6 @@ export default { if (this.lazyResolveMap.get(parentId)) { // 刷新父节点 const { data, treeNode, resolve } = this.lazyResolveMap.get(parentId) - // debugger this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, []) this.load(data, treeNode, resolve) return @@ -312,6 +316,8 @@ export default { const { data, treeNode, resolve } = this.lazyResolveMap.get(parentId) this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, []) this.load(data, treeNode, resolve) + // 展开该父节点 + this.$refs.table.toggleRowExpansion(parentId, true); } else { // 刷新根节点 this.getDataList() @@ -330,8 +336,20 @@ export default { this.lazyResolveIds.push(data.id) mapList({ parentId: data.id - }).then(res => { - resolve(res) + }).then(childList => { + // 解决同一页中同一条数据同时出现,如果懒加载中存在,那么将之前查询出来的数据删除 + let deleteIdList = [] + childList.forEach((child) => { + this.mapList.forEach((mapInfo) => { + if (mapInfo.id === child.id) { + deleteIdList.push(mapInfo.id) + } + }) + }) + this.mapList = this.mapList.filter((map) => { + return deleteIdList.indexOf(map.id) === -1 + }) + resolve(childList) }).catch(err => { resolve([]) }) diff --git a/data-room-ui/packages/assets/style/common/index.scss b/data-room-ui/packages/assets/style/common/index.scss index 51f5cae1..cfdc478b 100644 --- a/data-room-ui/packages/assets/style/common/index.scss +++ b/data-room-ui/packages/assets/style/common/index.scss @@ -148,12 +148,12 @@ $--font-path: "~element-ui/lib/theme-chalk/fonts"; /* 滚动条样式设置*/ .el-table__body-wrapper::-webkit-scrollbar { - width: 12px !important; - height: 12px !important; - } + width: 6px !important; + height: 6px !important; + } .el-table__body-wrapper::-webkit-scrollbar-corner { - background: transparent !important; + background: #444851 !important; } .el-table__body-wrapper::-webkit-scrollbar-track { @@ -163,9 +163,9 @@ $--font-path: "~element-ui/lib/theme-chalk/fonts"; .el-table__body-wrapper::-webkit-scrollbar-thumb { min-height: 20px !important; background-clip: content-box !important; - border: 2px solid transparent !important; - border-radius: 10px !important; - // background-color: #ddd; + border: 1px solid #444851 !important; + border-radius: 6px !important; + background: #444851 !important; } .el-table__fixed::before, diff --git a/data-room-ui/packages/assets/style/settingWrap.scss b/data-room-ui/packages/assets/style/settingWrap.scss index c68de7b5..b4ef3dce 100644 --- a/data-room-ui/packages/assets/style/settingWrap.scss +++ b/data-room-ui/packages/assets/style/settingWrap.scss @@ -242,15 +242,28 @@ margin-right: 10px; } +// 表格边框 + ::v-deep .el-table { background: var(--bs-el-background-1); - border-bottom: 1px solid var(--bs-el-title); + // 底部 + border-bottom: 0 solid var(--bs-el-border); } ::v-deep .el-table__cell { background: var(--bs-el-background-1) !important; color: var(--bs-el-title) !important; - border-color: var(--bs-el-text) !important; + // 中间边框 + border-width: 2px; + border-color: var(--bs-background-2) !important; +} +.el-table--group::after, .el-table--border::after, .el-table::before { + // 右侧、底部边框 + background-color: var(--bs-el-border); +} + +.el-table--group, .el-table--border { + border: var(--bs-el-border); } ::v-deep .el-select {