提交 0c061a3e 编写于 作者: sq3536's avatar sq3536

dict调整

上级 4c37e1aa
......@@ -9,18 +9,45 @@ import cn.ibizlab.util.dict.Catalog;
import cn.ibizlab.util.dict.CodeItem;
import cn.ibizlab.util.dict.CodeList;
import cn.ibizlab.util.dict.Option;
import cn.ibizlab.util.helper.DataObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Service
......@@ -29,117 +56,40 @@ public class DictDstService
@Autowired
private IDictCatalogService dictCatalogService;
@Autowired
@Lazy
private DictDstService proxy;
@Autowired
private IDictOptionService optionService;
@Cacheable( value="dictcatalog",key = "'dict:'+#p0")
public Catalog getDictCatalog(String code){
return getDictCatalog(code,new DictOptionSearchContext());
Catalog catalog = new Catalog();
CodeList rootCatalog=proxy.getCodeListCatalog(code);
catalog.setCode(code).setName(rootCatalog.getName()).setAdvancedSettings(rootCatalog.getAdvancedSettings()).setNodes((List)JSON.toJSON(rootCatalog.getOptions()));
return catalog;
}
public Catalog getDictCatalog(String code, DictOptionSearchContext context)
{
Catalog catalog = new Catalog();
if(code.equalsIgnoreCase("dictcatalog"))
{
catalog.setCode("DictCatalog");
catalog.setName("字典目录");
List<Option> list = new ArrayList<>();
LambdaQueryWrapper<DictCatalog> wrapper=Wrappers.lambdaQuery();
if(!StringUtils.isEmpty(context.getN_val_like()))
wrapper.like(DictCatalog::getCode,context.getN_val_like());
if(!StringUtils.isEmpty(context.getN_val_in()))
wrapper.in(DictCatalog::getCode,context.getN_val_in());
if(!StringUtils.isEmpty(context.getN_val_leftlike()))
wrapper.likeRight(DictCatalog::getCode,context.getN_val_leftlike());
if(!StringUtils.isEmpty(context.getN_val_notin()))
wrapper.notIn(DictCatalog::getCode,context.getN_val_notin());
if(!StringUtils.isEmpty(context.getN_label_like()))
wrapper.notIn(DictCatalog::getName,context.getN_label_like());
if(!StringUtils.isEmpty(context.getN_vfilter_like()))
wrapper.like(DictCatalog::getGroup,context.getN_vfilter_like());
if(!StringUtils.isEmpty(context.getN_vfilter_in()))
wrapper.in(DictCatalog::getGroup,context.getN_vfilter_in());
if(!StringUtils.isEmpty(context.getN_vfilter_leftlike()))
wrapper.likeRight(DictCatalog::getGroup,context.getN_vfilter_leftlike());
if(!StringUtils.isEmpty(context.getN_vfilter_eq()))
wrapper.eq(DictCatalog::getGroup,context.getN_vfilter_eq());
wrapper.orderByAsc(DictCatalog::getGroup, DictCatalog::getCode);
dictCatalogService.list(wrapper).forEach(item->{
list.add(new Option().setValue(item.getCode()).setId(item.getCode())
.setDisabled(false)
.setFilter(item.getGroup()).setLabel(item.getName())
);
});
catalog.setOptions(list);
}
else
{
String codeName=code;
String filter="";
String subCode="";
if(codeName.indexOf(".")>0)
{
String[] arg= codeName.split("[.]");
codeName=arg[0];
subCode=arg[1];
}
if(codeName.indexOf("-")>0)
{
String[] arg= codeName.split("-");
codeName=arg[0];
filter=arg[1];
}
DictCatalog dictCatalog = dictCatalogService.getOne(Wrappers.<DictCatalog>query().eq("ccode",codeName));
catalog.setCode(code).setName(dictCatalog.getName());
Map<String,List<Option>> map = new LinkedHashMap<>();
Option subOption=null;
for(DictOption item:optionService.list(context.getSelectCond().eq("cid",dictCatalog.getId()).orderByAsc("showorder")))
{
Map<String,Object> extension = new HashMap<>();
if(!StringUtils.isEmpty(item.getExtension()))
extension = JSONObject.parseObject(item.getExtension(),Map.class);
String pid=StringUtils.isEmpty(item.getParent())?"_root":item.getParent();
List<Option> list=null;
if(!map.containsKey(pid))
{
list=new ArrayList<>();
map.put(pid,list);
}
else
list=map.get(pid);
Option option=new Option().setValue(item.getValue()).setId(item.getValue())
.setDisabled(((item.getDisabled()!=null && item.getDisabled()==1)||(item.getExpired()!=null && item.getExpired()==1))?true:false)
.setFilter(item.getFilter()).setIconClass(item.getIconClass()).setLabel(item.getLabel()).setParent(item.getParent()).setExtension(extension);
if(option.getValue().equals(subCode))
subOption=option;
if(StringUtils.isEmpty(filter)||option.getFilterSet().contains(filter))
list.add(option);
}
List<Option> codeItemTreeList = loop(map, (StringUtils.isEmpty(subCode))?"_root":subCode);
if(subOption!=null)
{
subOption.setChildren(codeItemTreeList).setParent("");
catalog.getOptions().add(subOption);
}
else
catalog.setOptions(codeItemTreeList);
}
CodeList rootCatalog=proxy.getCodeListCatalog(code,context);
catalog.setCode(code).setName(rootCatalog.getName()).setAdvancedSettings(rootCatalog.getAdvancedSettings()).setNodes((List)JSON.toJSON(rootCatalog.getOptions()));
return catalog;
}
@CacheEvict(value="dictcatalog",key = "'dict:'+#p0")
@Caching( evict = {
@CacheEvict(value="dictcatalog",key = "'dict:'+#p0"),
@CacheEvict(value="dictcatalog",key = "'glob:dict:'+#p0+'*'")
})
public void resetDictCatalog(String code)
{
}
@Cacheable( value="dictcatalog",key = "'codelist:'+#p0")
public CodeList getCodeListCatalog(String code){
return getCodeListCatalog(code,new DictOptionSearchContext());
......@@ -147,7 +97,6 @@ public class DictDstService
public CodeList getCodeListCatalog(String code, DictOptionSearchContext context)
{
CodeList catalog = new CodeList();
if(code.equalsIgnoreCase("dictcatalog"))
{
catalog.setCode("DictCatalog");
......@@ -199,89 +148,137 @@ public class DictDstService
codeName=arg[0];
filter=arg[1];
}
QueryWrapper<DictOption> qw=context.getSelectCond();
DictCatalog dictCatalog = dictCatalogService.getOne(Wrappers.<DictCatalog>query().eq("ccode",codeName));
catalog.setCode(code).setName(dictCatalog.getName());
Map<String,List<CodeItem>> map = new LinkedHashMap<>();
List<CodeItem> alllist = new ArrayList<>();
CodeItem subOption=null;
for(DictOption item:optionService.list(context.getSelectCond().eq("cid",dictCatalog.getId()).orderByAsc("showorder"))){
Map<String,Object> extension = new HashMap<>();
if(!StringUtils.isEmpty(item.getExtension()))
extension = JSONObject.parseObject(item.getExtension(),Map.class);
String pid=StringUtils.isEmpty(item.getParent())?"_root":item.getParent();
List<CodeItem> list=null;
if(!map.containsKey(pid))
{
list=new ArrayList<>();
map.put(pid,list);
}
else
list=map.get(pid);
CodeItem option=new CodeItem().setValue(item.getValue()).setId(item.getValue())
.setDisabled(((item.getDisabled()!=null && item.getDisabled()==1)||(item.getExpired()!=null && item.getExpired()==1))?true:false)
.setFilter(item.getFilter()).setIconClass(item.getIconClass()).setLabel(item.getLabel()).setParent(item.getParent()).setExtension(extension);
if(option.getValue().equals(subCode))
subOption=option;
if(StringUtils.isEmpty(filter)||option.getFilterSet().contains(filter))
{
alllist.add(option);
list.add(option);
}
catalog.setCode(code).setName(dictCatalog.getName()).putAdvancedSettings(dictCatalog.getExtParams());
if(!StringUtils.isEmpty(catalog.getUrl()))
{
Map<String,Object> urlParams=new HashMap<>();
urlParams.putAll(context.getSessioncontext());
urlParams.putAll(context.getDatacontext());
urlParams.put("filter",filter);
urlParams.put("subCode",subCode);
urlParams.put("code",code);
urlParams.put("codeName",codeName);
catalog.setNodes((List)getRemoteDict(catalog,urlParams),filter,subCode);
}
if(subOption!=null)
else if( ((!StringUtils.isEmpty(filter))||(!StringUtils.isEmpty(subCode))) && qw.isEmptyOfWhere() )
{
List<CodeItem> codeItemTreeList = loopItem(map, subCode);
codeItemTreeList.add(0,subOption);
catalog.setOptions(codeItemTreeList);
CodeList rootCatalog=proxy.getCodeListCatalog(codeName);
catalog.setCode(code).setName(rootCatalog.getName()).setAdvancedSettings(rootCatalog.getAdvancedSettings());
catalog.setNodes((List)JSON.toJSON(rootCatalog.getOptions()),filter,subCode);
}
else
catalog.setOptions(alllist);
{
catalog.setNodes((List)JSON.toJSON(optionService.list(qw.eq("cid",dictCatalog.getId()).orderByAsc("showorder"))),filter,subCode);
}
}
return catalog;
}
@CacheEvict(value="dictcatalog",key = "'codelist:'+#p0")
@Caching( evict = {
@CacheEvict(value="dictcatalog",key = "'codelist:'+#p0"),
@CacheEvict(value="dictcatalog",key = "'glob:codelist:'+#p0+'*'")
})
public void resetCodeListCatalog(String code)
{
}
public List<Option> loop(Map<String,List<Option>> listCodeItem, Object parentValue) {
List<Option> trees = new ArrayList<Option>();
if(listCodeItem.containsKey(parentValue)) {
for (Option codeItem : listCodeItem.get(parentValue)) {
List<Option> childCodeItem = loop(listCodeItem, codeItem.getValue());
if (childCodeItem.size() > 0) {
codeItem.setChildren(childCodeItem);
}
trees.add(codeItem);
}
@Autowired
private RestTemplate remoteDictClient;
public JSONArray getRemoteDict(CodeList catalog,Map<String,Object> urlParams)
{
HttpHeaders headers = new HttpHeaders();
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if(requestAttributes!=null)
{
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String auth = request.getHeader("Authorization");
if(!StringUtils.isEmpty(auth))
headers.add("Authorization", auth);
}
return trees;
}
public List<CodeItem> loopItem(Map<String,List<CodeItem>> listCodeItem, Object parentValue) {
List<CodeItem> trees = new ArrayList<CodeItem>();
if(listCodeItem.containsKey(parentValue)) {
for (CodeItem codeItem : listCodeItem.get(parentValue)) {
trees.add(codeItem);
List<CodeItem> childCodeItem = loopItem(listCodeItem, codeItem.getValue());
if (childCodeItem.size() > 0) {
trees.addAll(childCodeItem);
String response=null;
response=remoteDictClient.exchange(catalog.getUrl(),HttpMethod.valueOf(catalog.getRequestMethod().toUpperCase()),new HttpEntity(JSON.parse(catalog.getRequestBody()),headers),String.class,urlParams).getBody();
Assert.notNull(response,"获取远程字典失败");
JSONArray items=null;
if((!StringUtils.isEmpty(catalog.getNodeProp()))||response.startsWith("{"))
{
String nodeProp=StringUtils.isEmpty(catalog.getNodeProp())?"items":catalog.getNodeProp();
JSONObject res=JSON.parseObject(response);
String pairs[] = nodeProp.split("[.]");
for(int i=0;i<pairs.length;i++)
{
String pair=pairs[i].trim();
if(StringUtils.isEmpty(pair))
{
if(i<pairs.length-1) {
res = res.getJSONObject(pair);
Assert.notNull(res, "获取远程字典失败:" + pair + "未找到");
}
else
items=res.getJSONArray(pair);
}
}
}
return trees;
else
{
items=JSON.parseArray(response);
}
Assert.notNull(items, "获取远程字典失败:数据项未找到");
return items;
}
@Bean
@LoadBalanced
public RestTemplate remoteDictClient() {
// 长连接
PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager();
// 总连接数
pollingConnectionManager.setMaxTotal(1000);
// 同路由的并发数
pollingConnectionManager.setDefaultMaxPerRoute(1000);
HttpClientBuilder httpClientBuilder = HttpClients.custom();
httpClientBuilder.setConnectionManager(pollingConnectionManager);
// 重试次数,默认是3次,没有开启
// httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3,
// true));
HttpClient httpClient = httpClientBuilder.build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(
httpClient);
// 连接超时
clientHttpRequestFactory.setConnectTimeout(60000);
// 数据读取超时时间,即SocketTimeout
clientHttpRequestFactory.setReadTimeout(60000);
// 连接不够用的等待时间,不宜过长,必须设置,比如连接不够用时,时间过长将是灾难性的
clientHttpRequestFactory.setConnectionRequestTimeout(200);
// 缓冲请求数据,默认值是true。通过POST或者PUT大量发送数据时,建议将此属性更改为false,以免耗尽内存。
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.setRequestFactory(clientHttpRequestFactory);
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
return restTemplate;
}
public String formatURI(String uri, Map<String,Object> map) {
boolean ext=uri.indexOf("$")>0;
for (Map.Entry<String,Object> entry : map.entrySet()) {
String regex = ext?"\\$":""+"\\{" + entry.getKey() + "\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(uri);
uri = matcher.replaceAll(DataObject.getStringValue(entry.getValue(),"null"));
}
return uri;
}
}
......@@ -3,6 +3,8 @@ package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.analysis.service.impl.DAChartServiceImpl;
import lombok.extern.slf4j.Slf4j;
import cn.ibizlab.core.analysis.domain.DAChart;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary;
......@@ -31,5 +33,37 @@ public class DAChartExService extends DAChartServiceImpl {
public DAChart build(DAChart et) {
return super.build(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public boolean update(DAChart et) {
return super.update(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public void updateBatch(List<DAChart> list) {
super.updateBatch(list);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public boolean save(DAChart et) {
return super.save(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public void saveBatch(List<DAChart> list) {
super.saveBatch(list);
}
}
......@@ -3,6 +3,8 @@ package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.analysis.service.impl.DAReportServiceImpl;
import lombok.extern.slf4j.Slf4j;
import cn.ibizlab.core.analysis.domain.DAReport;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary;
......@@ -31,5 +33,37 @@ public class DAReportExService extends DAReportServiceImpl {
public DAReport build(DAReport et) {
return super.build(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public boolean update(DAReport et) {
return super.update(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public void updateBatch(List<DAReport> list) {
super.updateBatch(list);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public boolean save(DAReport et) {
return super.save(et);
}
@Caching( evict = {
@CacheEvict( value="dataAnalyse",allEntries = true)
})
@Override
public void saveBatch(List<DAReport> list) {
super.saveBatch(list);
}
}
......@@ -2,8 +2,12 @@ package cn.ibizlab.util.dict;
import cn.ibizlab.util.annotation.DEField;
import cn.ibizlab.util.helper.DataObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
......@@ -13,9 +17,7 @@ import lombok.experimental.Accessors;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
@Getter
@Setter
......@@ -50,4 +52,169 @@ public class Catalog
return null;
}
private Map<String,Object> advancedSettings;
public Catalog putAdvancedSettings(String settings)
{
try
{
if(!StringUtils.isEmpty(settings))
advancedSettings= JSON.parseObject(settings,Map.class);
}catch (Exception ex){}
return this;
}
@JsonIgnore
@JSONField(serialize = false)
public String getUrl() {
return advancedSettings!=null&&advancedSettings.get("url")!=null?advancedSettings.get("url").toString():null;
}
@JsonIgnore
@JSONField(serialize = false)
public String getRequestMethod() {
return advancedSettings!=null&&advancedSettings.get("requestMethod")!=null?advancedSettings.get("requestMethod").toString():"GET";
}
@JsonIgnore
@JSONField(serialize = false)
public String getRequestBody() {
return advancedSettings!=null&&advancedSettings.get("requestBody")!=null?advancedSettings.get("requestBody").toString():"{}";
}
@JsonIgnore
@JSONField(serialize = false)
public String getNodeProp() {
return advancedSettings!=null&&advancedSettings.get("nodeProp")!=null?advancedSettings.get("nodeProp").toString():"";
}
@JsonIgnore
@JSONField(serialize = false)
public String getValueProp() {
return advancedSettings!=null&&advancedSettings.get("valueProp")!=null?advancedSettings.get("valueProp").toString():"value";
}
@JsonIgnore
@JSONField(serialize = false)
public String getLabelProp() {
return advancedSettings!=null&&advancedSettings.get("labelProp")!=null?advancedSettings.get("labelProp").toString():"label";
}
@JsonIgnore
@JSONField(serialize = false)
public String getParentProp() {
return advancedSettings!=null&&advancedSettings.get("parentProp")!=null?advancedSettings.get("parentProp").toString():"parent";
}
@JsonIgnore
@JSONField(serialize = false)
public String getChildrenProp() {
return advancedSettings!=null&&advancedSettings.get("childrenProp")!=null?advancedSettings.get("childrenProp").toString():"children";
}
@JsonIgnore
@JSONField(serialize = false)
public String getDisabledProp() {
return advancedSettings!=null&&advancedSettings.get("disabledProp")!=null?advancedSettings.get("disabledProp").toString():"disabled";
}
@JsonIgnore
@JSONField(serialize = false)
public String getFilterProp() {
return advancedSettings!=null&&advancedSettings.get("filterProp")!=null?advancedSettings.get("filterProp").toString():"filter";
}
@JsonIgnore
@JSONField(serialize = false)
public String getExpiredProp() {
return advancedSettings!=null&&advancedSettings.get("expiredProp")!=null?advancedSettings.get("expiredProp").toString():"expired";
}
@JsonIgnore
@JSONField(serialize = false)
public String getIconClassProp() {
return advancedSettings!=null&&advancedSettings.get("iconClassProp")!=null?advancedSettings.get("iconClassProp").toString():"iconClass";
}
public Catalog setNodes(List<Map> nodes)
{
return setNodes(nodes,null,null);
}
public Catalog setNodes(List<Map> nodes, String filter, String subCode)
{
Map<String,List<Option>> map = new LinkedHashMap<>();
Option subOption=null;
for(Map item:unfoldList(nodes,null))
{
Map<String,Object> extension = new HashMap<>();
if(!StringUtils.isEmpty(item.get("extension")))
extension = JSONObject.parseObject(item.get("extension").toString(),Map.class);
String pid= DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),"_root"));
if(StringUtils.isEmpty(pid))pid="_root";
List<Option> list=null;
if(!map.containsKey(pid))
{
list=new ArrayList<>();
map.put(pid,list);
}
else
list=map.get(pid);
Option option=new Option().setValue(DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null)))
.setId(DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null)))
.setDisabled(DataObject.getBooleanValue(item.get(this.getDisabledProp()),false)||DataObject.getBooleanValue(item.get(this.getExpiredProp()),false))
.setFilter(DataObject.getStringValue(item.get(this.getFilterProp()),null)).setIconClass(DataObject.getStringValue(item.get(this.getIconClassProp()),null))
.setLabel(DataObject.getStringValue(item.get(this.getLabelProp()),DataObject.getStringValue(item.get("text"),"")))
.setParent(DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),""))).setExtension(extension);
if(option.getValue().equals(subCode))
subOption=option;
if(StringUtils.isEmpty(filter)||option.getFilterSet().contains(filter))
list.add(option);
}
List<Option> codeItemTreeList = loop(map, (StringUtils.isEmpty(subCode))?"_root":subCode);
if(subOption!=null)
{
subOption.setChildren(codeItemTreeList).setParent("");
this.getOptions().add(subOption.setParent(null));
}
else
this.setOptions(codeItemTreeList);
return this;
}
public List<Map> unfoldList(List<Map> nodes,String parent)
{
List<Map> unfoldList = new ArrayList<>();
for(Map item:nodes)
{
if((!StringUtils.isEmpty(parent))&&StringUtils.isEmpty(DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),null))))
item.put(this.getParentProp(),parent);
String value = DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null));
unfoldList.add(item);
Object child=item.get(this.getChildrenProp());
if(!ObjectUtils.isEmpty(child))
{
if(child instanceof List && ((List) child).get(0) instanceof Map)
unfoldList.addAll(unfoldList((List)child,value));
item.remove(this.getChildrenProp());
}
}
return unfoldList;
}
public List<Option> loop(Map<String,List<Option>> listCodeItem, Object parentValue) {
List<Option> trees = new ArrayList<Option>();
if(listCodeItem.containsKey(parentValue)) {
for (Option codeItem : listCodeItem.get(parentValue)) {
List<Option> childCodeItem = loop(listCodeItem, codeItem.getValue());
if (childCodeItem.size() > 0)
codeItem.setChildren(childCodeItem);
trees.add(codeItem);
}
}
return trees;
}
}
package cn.ibizlab.util.dict;
import cn.ibizlab.util.helper.DataObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
@Getter
@Setter
......@@ -53,4 +58,167 @@ public class CodeList
resultCodeItem.setChildren(children);
return resultCodeItem;
}
private Map<String,Object> advancedSettings;
public CodeList putAdvancedSettings(String settings)
{
try
{
if(!StringUtils.isEmpty(settings))
advancedSettings= JSON.parseObject(settings,Map.class);
}catch (Exception ex){}
return this;
}
@JsonIgnore
@JSONField(serialize = false)
public String getUrl() {
return advancedSettings!=null&&advancedSettings.get("url")!=null?advancedSettings.get("url").toString():null;
}
@JsonIgnore
@JSONField(serialize = false)
public String getRequestMethod() {
return advancedSettings!=null&&advancedSettings.get("requestMethod")!=null?advancedSettings.get("requestMethod").toString():"GET";
}
@JsonIgnore
@JSONField(serialize = false)
public String getRequestBody() {
return advancedSettings!=null&&advancedSettings.get("requestBody")!=null?advancedSettings.get("requestBody").toString():"{}";
}
@JsonIgnore
@JSONField(serialize = false)
public String getNodeProp() {
return advancedSettings!=null&&advancedSettings.get("nodeProp")!=null?advancedSettings.get("nodeProp").toString():"";
}
@JsonIgnore
@JSONField(serialize = false)
public String getValueProp() {
return advancedSettings!=null&&advancedSettings.get("valueProp")!=null?advancedSettings.get("valueProp").toString():"value";
}
@JsonIgnore
@JSONField(serialize = false)
public String getLabelProp() {
return advancedSettings!=null&&advancedSettings.get("labelProp")!=null?advancedSettings.get("labelProp").toString():"label";
}
@JsonIgnore
@JSONField(serialize = false)
public String getParentProp() {
return advancedSettings!=null&&advancedSettings.get("parentProp")!=null?advancedSettings.get("parentProp").toString():"parent";
}
@JsonIgnore
@JSONField(serialize = false)
public String getChildrenProp() {
return advancedSettings!=null&&advancedSettings.get("childrenProp")!=null?advancedSettings.get("childrenProp").toString():"children";
}
@JsonIgnore
@JSONField(serialize = false)
public String getDisabledProp() {
return advancedSettings!=null&&advancedSettings.get("disabledProp")!=null?advancedSettings.get("disabledProp").toString():"disabled";
}
@JsonIgnore
@JSONField(serialize = false)
public String getFilterProp() {
return advancedSettings!=null&&advancedSettings.get("filterProp")!=null?advancedSettings.get("filterProp").toString():"filter";
}
@JsonIgnore
@JSONField(serialize = false)
public String getExpiredProp() {
return advancedSettings!=null&&advancedSettings.get("expiredProp")!=null?advancedSettings.get("expiredProp").toString():"expired";
}
@JsonIgnore
@JSONField(serialize = false)
public String getIconClassProp() {
return advancedSettings!=null&&advancedSettings.get("iconClassProp")!=null?advancedSettings.get("iconClassProp").toString():"iconClass";
}
public CodeList setNodes(List<Map> nodes, String filter, String subCode)
{
Map<String,List<CodeItem>> map = new LinkedHashMap<>();
List<CodeItem> alllist = new ArrayList<>();
CodeItem subOption=null;
for(Map item:unfoldList(nodes,null))
{
Map<String,Object> extension = new HashMap<>();
if(!StringUtils.isEmpty(item.get("extension")))
extension = JSONObject.parseObject(item.get("extension").toString(),Map.class);
String pid= DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),"_root"));
if(StringUtils.isEmpty(pid))pid="_root";
List<CodeItem> list=null;
if(!map.containsKey(pid))
{
list=new ArrayList<>();
map.put(pid,list);
}
else
list=map.get(pid);
CodeItem option=new CodeItem().setValue(DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null)))
.setId(DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null)))
.setDisabled(DataObject.getBooleanValue(item.get(this.getDisabledProp()),false)||DataObject.getBooleanValue(item.get(this.getExpiredProp()),false))
.setFilter(DataObject.getStringValue(item.get(this.getFilterProp()),null)).setIconClass(DataObject.getStringValue(item.get(this.getIconClassProp()),null))
.setLabel(DataObject.getStringValue(item.get(this.getLabelProp()),DataObject.getStringValue(item.get("text"),"")))
.setParent(DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),""))).setExtension(extension);
if(option.getValue().equals(subCode))
subOption=option;
if(StringUtils.isEmpty(filter)||option.getFilterSet().contains(filter)) {
alllist.add(option);
list.add(option);
}
}
if(subOption!=null)
{
List<CodeItem> codeItemTreeList = loop(map, (StringUtils.isEmpty(subCode))?"_root":subCode);
codeItemTreeList.add(0,subOption.setParent(null));
this.setOptions(codeItemTreeList);
}
else
this.setOptions(alllist);
return this;
}
public List<Map> unfoldList(List<Map> nodes,String parent)
{
List<Map> unfoldList = new ArrayList<>();
for(Map item:nodes)
{
if((!StringUtils.isEmpty(parent))&&StringUtils.isEmpty(DataObject.getStringValue(item.get(this.getParentProp()),DataObject.getStringValue(item.get("pvalue"),null))))
item.put(this.getParentProp(),parent);
String value = DataObject.getStringValue(item.get(this.getValueProp()),DataObject.getStringValue(item.get("id"),null));
unfoldList.add(item);
Object child=item.get(this.getChildrenProp());
if(!ObjectUtils.isEmpty(child))
{
if(child instanceof List && ((List) child).get(0) instanceof Map)
unfoldList.addAll(unfoldList((List)child,value));
item.remove(this.getChildrenProp());
}
}
return unfoldList;
}
public List<CodeItem> loop(Map<String,List<CodeItem>> listCodeItem, Object parentValue) {
List<CodeItem> trees = new ArrayList<CodeItem>();
if(listCodeItem.containsKey(parentValue)) {
for (CodeItem codeItem : listCodeItem.get(parentValue)) {
trees.add(codeItem);
List<CodeItem> childCodeItem = loop(listCodeItem, codeItem.getValue());
if (childCodeItem.size() > 0)
trees.addAll(childCodeItem);
}
}
return trees;
}
}
......@@ -159,7 +159,7 @@ public class DataObject {
if (objValue instanceof Boolean) {
return (Boolean) objValue;
}
return objValue.toString().equalsIgnoreCase("true")||objValue.toString().equals("1")||objValue.toString().equals("y");
return objValue.toString().equalsIgnoreCase("true")||objValue.toString().equals("1")||objValue.toString().equalsIgnoreCase("y");
}
final static public char[] getCharacterValue(Object objValue,char[] cDefault) {
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册