Browse Source

Merge pull request #8952 in DESIGN/design from release/11.0 to bugfix/11.0

* commit 'b85fd56f8d20ddce8eed68ed924ee99ae1591244':
  REPORT-71563 FVS报表块不需要支持插入悬浮元素
  REPORT-70681 超长文本搜索问题
  REPORT-70888 【设计器】大屏编辑器-设计器启动时默认打开的fvs模板会报错
  REPORT-71402 fvs使用含有SQL的公式,模拟计算时,设计器卡死
  REPORT-71158 打开fvs,从远程切换到本地,设计器模板展示空白
bugfix/11.0
superman 3 years ago
parent
commit
b43271abca
  1. 3
      designer-base/src/main/java/com/fr/design/formula/FormulaPane.java
  2. 2
      designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java
  3. 30
      designer-base/src/main/java/com/fr/design/parameter/ParameterInputNoneListenerPane.java
  4. 11
      designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java
  5. 65
      designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java
  6. 9
      designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java
  7. 11
      designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java
  8. 4
      designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java
  9. 13
      designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java

3
designer-base/src/main/java/com/fr/design/formula/FormulaPane.java

@ -38,6 +38,7 @@ import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.parameter.ParameterInputNoneListenerPane;
import com.fr.design.parameter.ParameterInputPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.ComparatorUtils;
@ -964,7 +965,7 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula {
if (parameters.length < 1 && editor4CalPane.update().size() < 1) {
return parameterMap;
}
ParameterInputPane pPane = new ParameterInputPane(parameters);
ParameterInputPane pPane = new ParameterInputNoneListenerPane(parameters);
pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() {
@Override
public void doOk() {

2
designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java

@ -287,7 +287,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer {
// 悬浮元素
PropertyItem floatElement = new PropertyItem(KEY_FLOAT_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Float_Element"),
"floatelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART},
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT, PropertyMode.DUCHAMP_REPORT});
new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT});
// 控件设置
PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings"),
"widgetsettings", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_PARA_WIDGET, PropertyMode.REPORT_FLOAT, PropertyMode.FORM, PropertyMode.POLY},

30
designer-base/src/main/java/com/fr/design/parameter/ParameterInputNoneListenerPane.java

@ -0,0 +1,30 @@
package com.fr.design.parameter;
import com.fr.design.editor.ValueEditorPane;
import com.fr.stable.ParameterProvider;
/**
* 与ParameterInputPane区别在于 输入参数不会触发模板修改事件
*
* 适用于参数不需要存储在模板中的场景
*
* @author hades
* @version 11.0
* Created by hades on 2022/5/13
*/
public class ParameterInputNoneListenerPane extends ParameterInputPane {
public ParameterInputNoneListenerPane(ParameterProvider[] parameters) {
super(parameters);
}
public ParameterInputNoneListenerPane(ParameterProvider[] parameters, boolean allowBlank) {
super(parameters, allowBlank);
}
@Override
protected void initTextListener(ValueEditorPane textF) {
// 这边输入参数 不用联动模板变化激活保存按钮 相关参数并不存储在模板
// do nothing
}
}

11
designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java

@ -48,6 +48,17 @@ public class AlphaFineConstants {
public static final int HOT_ITEMS = 6;
/**
* 限制搜索字符长度
*/
public static final int LEN_LIMIT = 50;
/**
* 帮助文档搜索间隔ms api限制了1s之内只能搜索一次
*
*/
public static final long DOCUMENT_SEARCH_GAP = 1000;
public static final Dimension FULL_SIZE = new Dimension(680, 460);

65
designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java

@ -146,6 +146,8 @@ public class AlphaFineFrame extends JFrame {
private UILabel clearLabel;
private JPanel tabPane;
private CellType selectedType;
private String beforeSearchStr = StringUtils.EMPTY;
@ -365,7 +367,7 @@ public class AlphaFineFrame extends JFrame {
labelPane.add(labelContentPane);
labelPane.setPreferredSize(new Dimension(AlphaFineConstants.FULL_SIZE.width, 30));
JPanel tabPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 10));
tabPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 20, 10));
tabPane.setBackground(Color.WHITE);
List<SelectedLabel> selectedLabelList = createSelectedLabelList();
selectedType = selectedLabelList.get(0).getCellType();
@ -624,6 +626,7 @@ public class AlphaFineFrame extends JFrame {
clearLabel.setVisible(true);
SearchTooltipPopup.getInstance().show(searchTextFieldWrapperPane);
}
tabPane.repaint();
});
timer.start();
@ -644,28 +647,58 @@ public class AlphaFineFrame extends JFrame {
beforeSearchStr = StringUtils.EMPTY;
return;
}
String lowerCaseSearchText = preProcessSearchText(searchTextField.getText().toLowerCase());
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isNeedSegmentationCheckbox()) {
//是高级搜索
if (searchTextField.getText().toLowerCase().startsWith(ADVANCED_SEARCH_MARK)) {
segmentationResult = SegmentationManager.getInstance().startSegmentation(getStoreText(searchTextField.getText().toLowerCase()));
}
//是普通搜索
else {
segmentationResult = SegmentationManager.getInstance().startSegmentation(searchTextField.getText().toLowerCase());
}
dealSegmentationSearch(lowerCaseSearchText);
} else {
if (StringUtils.isEmpty(getRealSearchText(searchTextField.getText()))) {
segmentationResult = null;
} else {
segmentationResult = new String[]{getRealSearchText(searchTextField.getText())};
}
dealNormalSearch();
}
DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().getHistorySearch().push(searchTextField.getText());
doSearch(searchTextField.getText().toLowerCase());
doSearch(lowerCaseSearchText);
beforeSearchStr = searchTextField.getText();
SearchTooltipPopup.getInstance().hide();
}
/**
* 普通搜索
*/
private void dealNormalSearch() {
String searchText = preProcessSearchText(searchTextField.getText());
if (StringUtils.isEmpty(getRealSearchText(searchText))) {
segmentationResult = null;
} else {
segmentationResult = new String[]{getRealSearchText(searchText)};
}
}
/**
* 分词搜索
*/
private void dealSegmentationSearch(String lowerCaseSearchText) {
//是高级搜索
if (searchTextField.getText().toLowerCase().startsWith(ADVANCED_SEARCH_MARK)) {
segmentationResult = SegmentationManager.getInstance().startSegmentation(getStoreText(lowerCaseSearchText));
}
//是普通搜索
else {
segmentationResult = SegmentationManager.getInstance().startSegmentation(lowerCaseSearchText);
}
}
/**
* 文本预处理 限制长度
*
* @param text
* @return
*/
private String preProcessSearchText(String text) {
if (text.length() > AlphaFineConstants.LEN_LIMIT) {
return text.substring(0, AlphaFineConstants.LEN_LIMIT);
} else {
return text;
}
}
private void dealWithSearchResult() {
final AlphaCellModel model = searchResultList.getSelectedValue();
if (model != null) {
@ -717,7 +750,7 @@ public class AlphaFineFrame extends JFrame {
*
*/
private void reSearch() {
String text = this.searchTextField.getText().toLowerCase();
String text = preProcessSearchText(this.searchTextField.getText().toLowerCase());
if (StringUtils.isEmpty(text)) {
return;
}

9
designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ActionSearchManager.java

@ -17,7 +17,9 @@ import com.fr.json.JSONObject;
import com.fr.stable.ArrayUtils;
import com.fr.stable.StringUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by XiaXiang on 2017/3/27.
@ -68,12 +70,17 @@ public class ActionSearchManager implements AlphaFineSearchProvider {
return lessModelList;
}
List<UpdateActionModel> updateActions = UpdateActionManager.getUpdateActionManager().getUpdateActions();
Set<String> searchKeySet = new HashSet<>();
for (UpdateActionModel updateActionModel : updateActions) {
for (int j = 0; j < searchText.length; j++) {
AlphaFineHelper.checkCancel();
if (StringUtils.isNotBlank(updateActionModel.getSearchKey())) {
if (updateActionModel.getSearchKey().contains(searchText[j]) && updateActionModel.getAction().isEnabled()) {
if (updateActionModel.getSearchKey().contains(searchText[j])
&& updateActionModel.getAction().isEnabled()
// 老alphaFine就有问题 加个去重
&& !searchKeySet.contains(updateActionModel.getSearchKey())) {
filterModelList.add(new ActionModel(updateActionModel.getActionName(), updateActionModel.getParentName(), updateActionModel.getAction()));
searchKeySet.add(updateActionModel.getSearchKey());
}
}
}

11
designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java

@ -15,6 +15,7 @@ import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ArrayUtils;
import java.util.concurrent.TimeUnit;
/**
@ -67,6 +68,7 @@ public class DocumentSearchManager implements AlphaFineSearchProvider {
}
searchResult = new SearchResult();
for (int j = 0; j < searchText.length; j++) {
long start = System.currentTimeMillis();
String url = AlphaFineConstants.DOCUMENT_SEARCH_URL + searchText[j];
try {
String result = HttpToolbox.get(url);
@ -88,6 +90,15 @@ public class DocumentSearchManager implements AlphaFineSearchProvider {
} catch (Exception e) {
FineLoggerFactory.getLogger().error("document search error: " + e.getMessage());
}
// 计算等待时间 防止1s内搜索多次
long spentTime = (System.currentTimeMillis() - start);
long waitTime = AlphaFineConstants.DOCUMENT_SEARCH_GAP - spentTime;
if (waitTime > 0 && j != searchText.length - 1) {
try {
TimeUnit.MILLISECONDS.sleep(waitTime);
} catch (Exception ignored) {
}
}
}
lessModelList.clear();
moreModelList.clear();

4
designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java

@ -124,6 +124,10 @@ public class DesignerStartup extends Activator {
listenEvent(LazyStartupEvent.INSTANCE, new Listener<Null>(Integer.MIN_VALUE) {
@Override
public void on(Event event, Null param) {
// 有可能被插件之类的 强制启动了 判断下
if (FineEmbedServer.isRunning()) {
return;
}
startEmbeddedServer();
}
});

13
designer-realize/src/main/java/com/fr/start/module/optimized/TenantDBAdapter4Designer.java

@ -9,6 +9,7 @@ import com.fr.event.Null;
import com.fr.exit.ConfigToPropMigrator;
import com.fr.stable.db.tenant.TenantDBAdapter;
import com.fr.start.event.LazyStartupEvent;
import com.fr.start.server.EmbedServerEvent;
/**
* @author hades
@ -24,7 +25,15 @@ public class TenantDBAdapter4Designer extends TenantDBAdapter {
@Override
public void on(Event event, Null param) {
TenantDBAdapter4Designer.super.start();
afterStart();
}
});
listenEvent(EmbedServerEvent.BeforeStart, new Listener<Null>() {
@Override
public void on(Event event, Null param) {
if (DaoSelectorFactory.getDaoSelector().useCacheDao()) {
beforeEmbedServerStart();
}
}
});
@ -33,7 +42,7 @@ public class TenantDBAdapter4Designer extends TenantDBAdapter {
}
}
private void afterStart() {
private void beforeEmbedServerStart() {
DesignerEnvManager.getEnvManager().setPropertiesUsable(false);
DaoSwitcher.executeSwitch();
ConfigToPropMigrator.getInstance().deletePropertiesCache();

Loading…
Cancel
Save