123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- package com.kingdee.eas.custom.utils;
- import com.kingdee.bos.BOSException;
- import com.kingdee.bos.Context;
- import com.kingdee.bos.dao.query.IQueryExecutor;
- import com.kingdee.bos.dao.query.QueryExecutorFactory;
- import com.kingdee.bos.framework.cache.service.CacheService;
- import com.kingdee.bos.metadata.MetaDataPK;
- import com.kingdee.bos.metadata.entity.EntityViewInfo;
- import com.kingdee.bos.metadata.entity.FilterInfo;
- import com.kingdee.bos.metadata.entity.SelectorItemCollection;
- import com.kingdee.bos.metadata.entity.SorterItemCollection;
- import com.kingdee.bos.sql.ParserException;
- import com.kingdee.eas.common.EASBizException;
- import com.kingdee.eas.framework.CoreBaseCollection;
- import com.kingdee.eas.framework.CoreBaseInfo;
- import com.kingdee.eas.framework.ICoreBase;
- import com.kingdee.shr.base.syssetting.DomainFilterFacadeFactory;
- import com.kingdee.shr.base.syssetting.IDomainFilterFacade;
- import com.kingdee.shr.base.syssetting.UIViewFactory;
- import com.kingdee.shr.base.syssetting.app.util.XMLUtil;
- import com.kingdee.shr.base.syssetting.context.SHRContext;
- import com.kingdee.shr.base.syssetting.exception.SHRWebException;
- import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
- import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
- import com.kingdee.shr.base.syssetting.model.VirtualDataFetcher;
- import com.kingdee.shr.base.syssetting.util.MetaDataUtil;
- import com.kingdee.shr.base.syssetting.util.SysSettingUIViewUtil;
- import com.kingdee.shr.base.syssetting.web.dynamic.model.ListUIViewInfo;
- import com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo;
- import com.kingdee.shr.base.syssetting.web.dynamic.util.UIViewUtil;
- import com.kingdee.shr.base.syssetting.web.dynamic.view.converter.IFragmentUIViewConverter;
- import com.kingdee.shr.base.syssetting.web.dynamic.view.converter.IUIViewConverter;
- import com.kingdee.shr.base.syssetting.web.dynamic.view.converter.UIViewConverterFactory;
- import com.kingdee.shr.ml.MLServiceFactory;
- import com.kingdee.shr.ml.ResourceType;
- import com.kingdee.util.LocaleUtils;
- import com.kingdee.util.StringUtils;
- import com.kingdee.util.Uuid;
- import org.jdom2.Document;
- import org.jdom2.Element;
- import org.jdom2.filter.Filters;
- import org.jdom2.output.XMLOutputter;
- import org.jdom2.xpath.XPathExpression;
- import org.jdom2.xpath.XPathFactory;
- import javax.xml.xpath.XPath;
- import java.text.MessageFormat;
- import java.util.*;
- public class ViewGetDataUtils {
- private UIViewInfo viewInfo = null;
- private Context context = null;
- public UIViewInfo getViewInfo() {
- return viewInfo;
- }
- public void setViewInfo(UIViewInfo viewInfo) {
- this.viewInfo = viewInfo;
- }
- public ViewGetDataUtils(Context context, String uipk){
- this.context = context;
- try {
- this.viewInfo = getUIViewInfoByUIPK( uipk);
- } catch (SHRWebException e) {
- throw new RuntimeException(e);
- }
- }
- public FilterInfo getDomainFilter(Context context) throws SHRWebException {
- ListUIViewInfo uiViewInfo = (ListUIViewInfo)viewInfo;
- String domain = uiViewInfo.getDomain();
- if (StringUtils.isEmpty(domain)) {
- domain = uiViewInfo.getDomain();
- }
- if (!StringUtils.isEmpty(domain)) {
- try {
- IDomainFilterFacade localInstance = DomainFilterFacadeFactory.getLocalInstance(context);
- FilterInfo domainFilter = localInstance.getDomainFilter(uiViewInfo.getEntityName(), domain,null);
- return domainFilter;
- } catch (Exception var5) {
- throw new SHRWebException(var5.getMessage(), var5);
- }
- } else {
- return null;
- }
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:29
- * @Params: 查询数据
- * @Return:
- */
- public List<CoreBaseInfo> getCoreBaseInfo( String uipk, String where) throws SHRWebException {
- CoreBaseCollection collection = this.initCollection(this.context, uipk, where);
- List<CoreBaseInfo> list = new ArrayList();
- int i = 0;
- for (int size = collection.size(); i < size; ++i) {
- list.add(collection.get(i));
- }
- return list;
- }
- public CoreBaseCollection initCollection(Context context, String uipk, String where) throws SHRWebException {
- EntityViewInfo entityViewInfo = this.getEntityViewInfo( uipk, where);
- try {
- CoreBaseCollection collection = this.getBizInterface().getCollection(entityViewInfo);
- return collection;
- } catch (BOSException var8) {
- throw new SHRWebException(var8.getMessage(), var8);
- }
- }
- public ICoreBase getBizInterface() throws SHRWebException {
- if (viewInfo == null) {
- return null;
- } else {
- try {
- return MetaDataUtil.getBizInterface(SHRContext.getInstance().getContext(), viewInfo.getEntityName());
- } catch (BOSException var4) {
- throw new SHRWebException(var4);
- }
- }
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:30
- * @Params: 组装EntityViewInfo
- * @Return:
- */
- public EntityViewInfo getEntityViewInfo(String uipk, String where) throws SHRWebException {
- EntityViewInfo entityViewInfo = new EntityViewInfo();
- try {
- FilterInfo filterInfo1 = new FilterInfo();
- if (!where.equals("")) {
- FilterInfo filterInfo = new FilterInfo(where);
- filterInfo1.mergeFilter(filterInfo,"AND");
- }
- FilterInfo domainFilter = getDomainFilter(this.context);
- filterInfo1.mergeFilter(domainFilter,"AND");
- entityViewInfo.setFilter(filterInfo1);
- } catch (ParserException e) {
- throw new RuntimeException(e);
- } catch (BOSException e) {
- throw new RuntimeException(e);
- }
- // filterInfo.getFilterItems().add(new FilterItemInfo(relateField, billId));
- // entityViewInfo.setFilter(filterInfo);
- entityViewInfo.setSelector(this.getSelectors( uipk));
- UIViewInfo uiViewInfo = viewInfo;
- if (uiViewInfo.getOrderBy() != null) {
- SorterItemCollection sorter = new SorterItemCollection();
- try {
- sorter.getSorter().decode("order by " + uiViewInfo.getOrderBy());
- } catch (ParserException var9) {
- throw new SHRWebException(var9.getMessage(), var9);
- }
- entityViewInfo.setSorter(sorter);
- }
- return entityViewInfo;
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 11:47
- * @Params: 获取视图配置字段
- * @Return:
- */
- public SelectorItemCollection getSelectors(String uipk) throws SHRWebException {
- UIViewInfo viewInfo = getUIViewInfoByUIPK( uipk);
- SelectorItemCollection sic = null;
- if (viewInfo != null) {
- sic = viewInfo.getSelectors();
- if (sic == null) {
- sic = UIViewUtil.assembleSelector(viewInfo);
- viewInfo.setSelectors(sic);
- }
- }
- return sic;
- }
- public boolean isRequestFragment(String uipk) {
- return uipk.indexOf("$") != -1;
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:31
- * @Params: 通过uikp 获取视图信息
- * @Return:
- */
- public UIViewInfo getUIViewInfoByUIPK(String uipk) throws SHRWebException {
- if (viewInfo == null) {
- if (isRequestFragment(uipk)) {
- String[] str = uipk.split("\\$");
- String str1 = str[1];
- if (!StringUtils.isEmpty(str1)) {
- str1 = str1.replaceAll("'", "").replaceAll("\\|", "").replaceAll("location", "").replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("=", "").replaceAll("\\\\", "").replaceAll("\\+", "").replaceAll("window", "");
- }
- viewInfo = generateUIViewFragment( str[0], str1);
- } else {
- viewInfo = generateUIView( uipk);
- }
- addUIViewInfo( uipk, viewInfo);
- }
- return viewInfo;
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:32
- * @Params: 添加视图
- * @Return:
- */
- public void addUIViewInfo( String key, UIViewInfo uiViewInfo) {
- CacheService.getInstance().put("shr.uiView", getKey(key, this.context.getLocale().toString()), uiViewInfo);
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:33
- * @Params: 生成视图
- * @Return:
- */
- public UIViewInfo generateUIView( String uipk) throws SHRWebException {
- com.kingdee.shr.base.syssetting.UIViewInfo dbUIViewInfo = getUIViewFromDB( uipk);
- if (dbUIViewInfo == null) {
- if (uipk.contains(" ")) {
- throw new ShrWebBizException(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "view_contain_blank"), uipk));
- } else {
- throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "view_not_found"));
- }
- } else {
- dealTreeNavigationElement(dbUIViewInfo);
- IUIViewConverter converter = UIViewConverterFactory.getUIViewConverter(dbUIViewInfo, this.context);
- return converter.exec();
- }
- }
- public com.kingdee.shr.base.syssetting.UIViewInfo getUIViewFromDB( String uipk) throws SHRWebException {
- try {
- if (LocaleUtils.locale_zh_CN.toString().equals(LocaleUtils.getLocaleString(LocaleUtils.getFirstOriginLocale(this.context.getLocale())))) {
- return UIViewFactory.getLocalInstance(this.context).getValueByUipk(uipk, SysSettingUIViewUtil.getUIViewSelector());
- } else {
- Map<String, Object> params = new HashMap();
- params.put("uipks", uipk);
- params.put("isConvert", true);
- Object obj = MLServiceFactory.getLocalInstance(this.context).convert(ResourceType.UIView, params);
- return null == obj ? null : (com.kingdee.shr.base.syssetting.UIViewInfo) obj;
- }
- } catch (BOSException var4) {
- throw new ShrWebBizException(var4.getMessage(), var4);
- } catch (EASBizException var5) {
- throw new ShrWebBizException(var5.getMessage(), var5);
- }
- }
- public void dealTreeNavigationElement(com.kingdee.shr.base.syssetting.UIViewInfo dbUIViewInfo) {
- String content = dealConfig(dbUIViewInfo.getContent());
- String extend = dealConfig(dbUIViewInfo.getExtend());
- if (!StringUtils.isEmpty(content)) {
- dbUIViewInfo.setContent(content);
- }
- if (!StringUtils.isEmpty(extend)) {
- dbUIViewInfo.setExtend(extend);
- }
- }
- public String dealConfig(String text) {
- if (StringUtils.isEmpty(text)) {
- return null;
- } else {
- try {
- XMLOutputter output = XMLUtil.getXMLOutputter();
- Document doc = XMLUtil.parseXML(text);
- XPathFactory xpathFac = XPathFactory.instance();
- XPathExpression<Element> xPathTreeNavigation = xpathFac.compile("//treeNavigation", Filters.element());
- XPathExpression<Element> xPathFilterItem = xpathFac.compile("//filterItem[@isAdminOrg='true']", Filters.element());
- List<Element> treeNavigations = xPathTreeNavigation.evaluate(doc);
- List<Element> filterItems = xPathFilterItem.evaluate(doc);
- if (null != treeNavigations && !treeNavigations.isEmpty()) {
- if (null != filterItems && !filterItems.isEmpty()) {
- Iterator var8 = treeNavigations.iterator();
- while(var8.hasNext()) {
- Element e = (Element)var8.next();
- Element parent = e.getParentElement();
- parent.removeContent(e);
- }
- return output.outputString(doc);
- } else {
- return null;
- }
- } else {
- return null;
- }
- } catch (Exception var11) {
- return null;
- }
- }
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:33
- * @Params: 生成视图
- * @Return:
- */
- public UIViewInfo generateUIViewFragment( String parentkey, String subType) throws SHRWebException {
- UIViewInfo parentUIViewInfo = getUIViewInfoByUIPK(parentkey);
- if (parentUIViewInfo == null) {
- throw new ShrWebBizException(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "view_not_exist"), parentkey));
- } else {
- IFragmentUIViewConverter converter = UIViewConverterFactory.getFragmentUIViewConverter(parentUIViewInfo, this.context);
- converter.setSubType(subType);
- return converter.exec();
- }
- }
- public UIViewInfo getUIViewInfoFromCache( String uipk) {
- return (UIViewInfo) CacheService.getInstance().get("shr.uiView", getKey(uipk, this.context.getLocale().toString()));
- }
- public String getKey(String key, String locale) {
- return MessageFormat.format("{0}_{1}", key, locale);
- }
- public List<Map<String, Object>> getGridDataEntity(String uipk, String where) throws SHRWebException, ShrWebBizException, ParserException, BOSException {
- ListUIViewInfo uiViewInfo = (ListUIViewInfo) viewInfo;
- String query = uiViewInfo.getQuery();
- IQueryExecutor queryExecutor = this.getQueryExecutor(uipk, where, query);
- Uuid uuid = queryExecutor.openQuery();
- VirtualDataFetcher vdf = VirtualDataFetcher.createInstance(queryExecutor, uuid, 0, 1000);
- List<Map<String, Object>> data = vdf.getData();
- return data;
- }
- /**
- * @Author: LiuYing
- * @Description:
- * @DateTime: 2025/5/14 17:37
- * @Params: 获取查询执行器
- * @Return:
- */
- public IQueryExecutor getQueryExecutor(String uipk, String where, String query) throws SHRWebException, ShrWebBizException, BOSException, ParserException {
- IQueryExecutor exec = QueryExecutorFactory.getLocalInstance(this.context, MetaDataPK.create(query));
- EntityViewInfo entityViewInfo = this.getEntityViewInfo(uipk, where);
- exec.setObjectView(entityViewInfo);
- exec.option().isIgnoreOrder = true;
- exec.option().isAutoIgnoreZero = true;
- exec.option().isAutoTranslateBoolean = true;
- exec.option().isAutoTranslateEnum = true;
- exec.option().isIgnorePermissionCheck = false;
- // Map<String, String> queryOption = (Map)modelMap.get("queryOption");
- // if (queryOption != null) {
- // String value = (String)queryOption.get("isAutoIgnoreZero");
- // if (value != null) {
- // exec.option().isAutoIgnoreZero = Boolean.parseBoolean(value);
- // }
- // }
- return exec;
- }
- }
|