基于jeecgboot的大屏设计器开发——数据集设计(一)
创始人
2025-06-01 02:41:22

     通过前面设计好数据源后,就要进行数据集的设计了。

     一、还是在online在线表单进行设计,如下:

 主要是数据源与数据集类型进行关联

其中类型在字典里进行维护

 二、生成代码后前端的修改

 1、BsDataSetList.vue文件修改

列表文件主要是新增要进行修改如下,

新增SQLHTTP

同时使用NbcioListMixin,所以菜单里的删除需要修改一下,变成下面的传入参数是record,相应的下面NbcioListMixin文件也要做调整

 handleDelete(record)">删除

2、NbcioListMixin修改

增加下面两个方法:

handleAddSQL: function () {//大屏用this.$refs.modalForm.add("sql");this.$refs.modalForm.approve=false;this.$refs.modalForm.title = "新增";this.$refs.modalForm.disableSubmit = false;},handleAddHTTP: function () {//大屏用this.$refs.modalForm.add("http");this.$refs.modalForm.approve=false;this.$refs.modalForm.title = "新增";this.$refs.modalForm.disableSubmit = false;},

3、BsDataSetForm.vue修改

         增加一个测试浏览如下:,当然需要安装vue-json-editor组件与 import vueJsonEditor from "vue-json-editor";

add方法需要修改成

add (type) {this.modelDefault.setType = type;this.edit(this.modelDefault);this.model.setType = type;},

    同时测试浏览的方法如下:

async dataSetTest (tabKey) {//测试预览console.log("tab clicked : " + tabKey);if (this.model.setType == "http") {//针对http数据源console.log("http数据集" + this.httpForm);this.model.dynSentence = JSON.stringify(this.httpForm);}if (tabKey == "3") {const params = {sourceCode: this.model.sourceCode,dynSentence: this.model.dynSentence,dataSetParamDtoList: this.tableData,dataSetTransformDtoList: this.itemFilterList,setType: this.model.setType};const { code, result } = await testTransformSet(params);if (code != "200") return;this.cols = result.data;this.testMassageCode = code;}},onJsonChange(value) {},onJsonSave(value) {},

三、后端代码

   这个先增加上面说的这个测试浏览接口

/*** 测试 数据转换是否正确* @param param* @return*/@PostMapping("/testTransform")public Result testTransform(@Validated @RequestBody DataSetTestTransformParam param) {DataSetDto dto = new DataSetDto();BeanUtils.copyProperties(param, dto);return Result.OK(bsDataSetService.testTransform(dto));}

这个具体的实现代码如下:

package com.nbcio.modules.estar.bs.service.impl;import com.nbcio.modules.estar.bs.constant.JdbcConstants;
import com.nbcio.modules.estar.bs.constant.ResponseCode;
import com.nbcio.modules.estar.bs.dto.DataSetDto;
import com.nbcio.modules.estar.bs.dto.DataSetParamDto;
import com.nbcio.modules.estar.bs.dto.DataSourceDto;
import com.nbcio.modules.estar.bs.dto.OriginalDataDto;
import com.nbcio.modules.estar.bs.entity.BsDataSet;
import com.nbcio.modules.estar.bs.entity.BsDataSource;
import com.nbcio.modules.estar.bs.enums.SetTypeEnum;
import com.nbcio.modules.estar.bs.mapper.BsDataSetMapper;
import com.nbcio.modules.estar.bs.service.IBsDataSetService;
import com.nbcio.modules.estar.bs.service.IBsDataSourceService;
import com.nbcio.modules.estar.bs.service.IDataSetParamService;
import com.nbcio.modules.estar.bs.service.IDataSetTransformService;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;/*** @Description: bs_data_set* @Author: nbacheng* @Date:   2023-03-20* @Version: V1.0*/
@Service
public class BsDataSetServiceImpl extends ServiceImpl implements IBsDataSetService {@Autowiredprivate IDataSetParamService dataSetParamService;@Autowiredprivate IDataSetTransformService dataSetTransformService;@Autowiredprivate IBsDataSourceService bsDataSourceService;@Overridepublic OriginalDataDto testTransform(DataSetDto dto) {String dynSentence = dto.getDynSentence();OriginalDataDto originalDataDto = new OriginalDataDto();String sourceCode = dto.getSourceCode();//1.获取数据源BsDataSource bsDataSource;if (dto.getSetType().equals(SetTypeEnum.HTTP.getCodeValue())) {//http不需要数据源,兼容已有的逻辑,将http所需要的数据塞进DataSourcebsDataSource = new BsDataSource();bsDataSource.setConfig(dynSentence);bsDataSource.setType(JdbcConstants.HTTP);String body = JSONObject.parseObject(dynSentence).getString("body");if (StringUtils.isNotBlank(body)) {dynSentence = body;}else {dynSentence = "{}";}}else {QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("code", sourceCode);bsDataSource  = bsDataSourceService.getOne(queryWrapper);}//3.参数替换//3.1参数校验boolean verification = dataSetParamService.verification(dto.getDataSetParamDtoList(), null);if (!verification) {Result.error(ResponseCode.RULE_FIELDS_CHECK_ERROR);return originalDataDto;}dynSentence = dataSetParamService.transform(dto.getDataSetParamDtoList(), dynSentence);//4.获取数据DataSourceDto dataSourceDto = new DataSourceDto();BeanUtils.copyProperties(bsDataSource, dataSourceDto);dataSourceDto.setDynSentence(dynSentence);dataSourceDto.setContextData(setContextData(dto.getDataSetParamDtoList()));//获取total,判断DataSetParamDtoList中是否传入分页参数Map collect = dto.getDataSetParamDtoList().stream().collect(Collectors.toMap(DataSetParamDto::getParamName, DataSetParamDto::getSampleItem));if (collect.containsKey("pageNumber") && collect.containsKey("pageSize")) {dto.setContextData(collect);long total = bsDataSourceService.total(dataSourceDto, dto);originalDataDto.setTotal(total);}List data = bsDataSourceService.execute(dataSourceDto);//5.数据转换List transform = (List)dataSetTransformService.transform(dto.getDataSetTransformDtoList(), data).getResult();originalDataDto.setData(transform);return originalDataDto;}/*** dataSetParamDtoList转map* @param dataSetParamDtoList* @return*/public Map setContextData(List dataSetParamDtoList){Map map = new HashMap<>();if (null != dataSetParamDtoList && dataSetParamDtoList.size() > 0) {dataSetParamDtoList.forEach(dataSetParamDto -> map.put(dataSetParamDto.getParamName(), dataSetParamDto.getSampleItem()));}return map;}}

四、效果如下:

 

以后界面还是美化与调整。 

相关内容

热门资讯

cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...