superset:util:SupersetUtil

    xiaoxiao2023-06-22  84

    package com.tzb.myspringboot.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.tzb.myspringboot.dao.entity.SupersetMapEntity; import com.tzb.myspringboot.dao.repository.SupersetMapRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Component public class SupersetUtil { @Autowired SupersetMapRepository supersetMapRepository; ============================返回组装好的iframe================================== /** * 获取组装好的iframe图表 * @return */ public String getSupersetIframe(Integer id, String startTime, String endTime, String filterFieldName, String filterFieldValue) { String res = null; StringBuilder iframe = new StringBuilder(""); try { //LogUtil.print("接收消息: "+json); //解析json消息 // JSONObject jsonobj = JSONObject.parseObject(json); // if(!jsonobj.containsKey("id")){ // return "" ; // } // Integer id = jsonobj.getInteger("id"); if (null == id) { return ""; } //开始时间 结束时间//"time_range":"2019-04-10T00:00:00 : 2019-04-23T00:00:00", String timeRange = "" ; if(StringUtil.isNotBlank(startTime) && StringUtil.isNotBlank(endTime)){ try { timeRange = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new SimpleDateFormat("yyyyMMddHHmmss").parse(startTime)) + " : " + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new SimpleDateFormat("yyyyMMddHHmmss").parse(endTime)); } catch (ParseException e) { e.printStackTrace(); } } Map<String,Object> filterItem = null; if(StringUtil.isNotBlank(filterFieldValue)){ filterItem = new HashMap<>(); String[] valueArr = filterFieldValue.split(","); filterItem.put("expressionType","SIMPLE"); filterItem.put("operator","in"); filterItem.put("comparator",valueArr); filterItem.put("clause","WHERE"); filterItem.put("sqlExpression",null); filterItem.put("fromFormData",true); filterItem.put("filterOptionName","filter_m9dix8z3omk_35n0yvwzuls"); } SupersetMapEntity entity = supersetMapRepository.findById(id.longValue()).get(); if (null != entity) { iframe.append("<iframe "); iframe.append(" width=\"" + entity.getIframe_width() + "\""); iframe.append(" height=\"" + entity.getIframe_height() + "\""); iframe.append(" seamless "); iframe.append(" frameBorder=\"" + entity.getIframe_frameBorder() + "\""); iframe.append(" scrolling=\"" + entity.getIframe_scrolling() + "\""); String url = "" + entity.getIframe_src_url(); JSONObject formJson = JSON.parseObject(entity.getIframe_src_form_data()); if(StringUtil.isNotBlank(timeRange)){//覆盖原有的time_range formJson.put("time_range",timeRange); } if(null != filterItem){ if(StringUtil.isBlank(filterFieldName)){ if(formJson.containsKey("groupby") && formJson.getJSONArray("groupby").size() > 0){ filterItem.put("subject",formJson.getJSONArray("groupby").get(0)); }else{ //此处按说为错误 } }else{ filterItem.put("subject",filterFieldName); } if(formJson.containsKey("adhoc_filters")){ formJson.getJSONArray("adhoc_filters").add(filterItem); } } url += URLEncoder.encode( JSONObject.toJSONString(formJson, SerializerFeature.WriteMapNullValue),"UTF-8"); url += "&height=" + entity.getIframe_src_height(); url += "&standalone=" + (entity.getIframe_src_standalone() ? "true" : "false"); iframe.append(" src=\"" + url + "\""); iframe.append("></iframe>"); } } catch (Exception e) { // e.printStackTrace(); LogUtil.error(DateUtil.fmtDateToStr(new Date(), "yyyy-MM-dd HH:mm:ss") + "http接口异常", e.getMessage(), e); } return iframe.toString(); } ==================================返回url======================================= /** * 获取组装好的iframe图表src url * @return */ public String getSupersetIframeUrl(Integer id, String startTime, String endTime, String filterFieldName, String filterFieldValue) { if (null == id) { return ""; } //开始时间 结束时间//"time_range":"2019-04-10T00:00:00 : 2019-04-23T00:00:00", String timeRange = "" ; if(StringUtil.isNotBlank(startTime) && StringUtil.isNotBlank(endTime)){ try { timeRange = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new SimpleDateFormat("yyyyMMddHHmmss").parse(startTime)) + " : " + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new SimpleDateFormat("yyyyMMddHHmmss").parse(endTime)); } catch (ParseException e) { e.printStackTrace(); } } Map<String,Object> filterItem = null; if(StringUtil.isNotBlank(filterFieldValue)){ filterItem = new HashMap<>(); String[] valueArr = filterFieldValue.split(","); filterItem.put("expressionType","SIMPLE"); filterItem.put("operator","in"); filterItem.put("comparator",valueArr); filterItem.put("clause","WHERE"); filterItem.put("sqlExpression",null); filterItem.put("fromFormData",true); filterItem.put("filterOptionName","filter_m9dix8z3omk_35n0yvwzuls"); } SupersetMapEntity entity = supersetMapRepository.findById(id.longValue()).get(); if (null != entity) { String url = "" + entity.getIframe_src_url(); JSONObject formJson = JSON.parseObject(entity.getIframe_src_form_data()); if(StringUtil.isNotBlank(timeRange)){//覆盖原有的time_range formJson.put("time_range",timeRange); } if(null != filterItem){ if(StringUtil.isBlank(filterFieldName)){ if(formJson.containsKey("groupby") && formJson.getJSONArray("groupby").size() > 0){ filterItem.put("subject",formJson.getJSONArray("groupby").get(0)); }else{ //此处按说为错误 } }else{ filterItem.put("subject",filterFieldName); } if(formJson.containsKey("adhoc_filters")){ formJson.getJSONArray("adhoc_filters").add(filterItem); } } try { url += URLEncoder.encode( JSONObject.toJSONString(formJson, SerializerFeature.WriteMapNullValue),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } url += "&height=" + entity.getIframe_src_height(); url += "&standalone=" + (entity.getIframe_src_standalone() ? "true" : "false"); return url ; } return null ; } ========================================================================== /** * 获取图表id配置数据 * @param id * @return */ public SupersetMapEntity getSupersetEntityById(Integer id) { try { SupersetMapEntity entity = supersetMapRepository.findById(id.longValue()).get(); return entity; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 通过页面标识查询标签页所有id * @param pageFlag * @return */ public List<Long> getSupersetPageIds(String pageFlag) { List<Long> idlis = null; try { List<SupersetMapEntity> list = supersetMapRepository.getSupersetPageIds(pageFlag); idlis = new ArrayList<>(); for (SupersetMapEntity sm:list) { idlis.add(sm.getId()); } return idlis; } catch (Exception e) { e.printStackTrace(); } return idlis; } }

    注意我的库表格式为下图,我这里是先取出来url,然后进行里面的条件的替换,然后再次进行编码(用UTF-8),然后返回前端展示即可。

    之前遇到一个错误就是编码问题,之前我指定UTF-8编码,导致编码出问题了。

    看这篇:https://blog.csdn.net/weixin_38750084/article/details/90499846

    最新回复(0)