Browse Source

Merge pull request #13235 in DESIGN/design from bugfix/11.0 to feature/x

* commit 'a91de0f5ce412e2401027944abe89d6b6debbecc':
  REPORT-108302 模板保存失败
feature/x
superman 12 months ago
parent
commit
c6b9ab6188
  1. 7
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  2. 20
      designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java

7
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -1951,6 +1951,13 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
@Override @Override
public void saveDirectly() { public void saveDirectly() {
if (isSaving()) {
// 处理连按ctrl+s触发多线程保存的问题
// 这里为什么可以不用加锁而直接判断isSaving:
// 实测actionPerformed有线程安全的特性,同一时间只有一个AWT线程走到这里,setSaving是线程安全的(SaveTemplateAction.actionPerformed)
// 多线程场景是因为我们用了SwingWorker子线程处理保存
return;
}
new SaveTypeWorker(getSaveTypeCallable(), this) { new SaveTypeWorker(getSaveTypeCallable(), this) {
@Override @Override
protected void done() { protected void done() {

20
designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfoCollector.java

@ -7,6 +7,7 @@ import com.fr.chartx.config.info.constant.ConfigType;
import com.fr.design.mainframe.burying.point.AbstractPointCollector; import com.fr.design.mainframe.burying.point.AbstractPointCollector;
import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TemplateProcessInfo;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLableReader; import com.fr.stable.xml.XMLableReader;
@ -184,6 +185,8 @@ public class ChartInfoCollector extends AbstractPointCollector<ChartInfo> {
*/ */
@Override @Override
public void collectInfo(String templateId, String originID, TemplateProcessInfo processInfo, int timeConsume) { public void collectInfo(String templateId, String originID, TemplateProcessInfo processInfo, int timeConsume) {
// 捕获RuntimeException,不中断保存模板核心逻辑,避免出现保存失败弹窗
try {
if (!shouldCollectInfo()) { if (!shouldCollectInfo()) {
return; return;
} }
@ -193,24 +196,33 @@ public class ChartInfoCollector extends AbstractPointCollector<ChartInfo> {
boolean testTemplate = isTestTemplate(processInfo); boolean testTemplate = isTestTemplate(processInfo);
for (ChartInfo chartInfo : pointInfoMap.values()) { for (ChartInfo chartInfo : pointInfoMap.values()) {
if (originID.equals(chartInfo.getTemplateId())) { if (chartInfo != null && originID.equals(chartInfo.getTemplateId())) {
chartInfo.setTemplateId(templateId); chartInfo.setTemplateId(templateId);
chartInfo.setTestTemplate(testTemplate); chartInfo.setTestTemplate(testTemplate);
} }
} }
for (ChartInfo chartInfo : chartInfoCacheMap.values()) { for (ChartInfo chartInfo : chartInfoCacheMap.values()) {
if (chartInfo == null) {
continue;
}
BaseBook book = chartInfo.getBook(); BaseBook book = chartInfo.getBook();
if ((book != null && templateId.equals(book.getTemplateID())) || if (accept(templateId, originID, chartInfo, book)) {
originID.equals(chartInfo.getTemplateId())) {
chartInfo.setTemplateId(templateId); chartInfo.setTemplateId(templateId);
chartInfo.setTestTemplate(testTemplate); chartInfo.setTestTemplate(testTemplate);
pointInfoMap.put(chartInfo.getChartId(), chartInfo); pointInfoMap.put(chartInfo.getChartId(), chartInfo);
} }
} }
// 每次更新之后,都同步到暂存文件中 // 每次更新之后,都同步到暂存文件中
saveInfo(); saveInfo();
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
private static boolean accept(String templateId, String originID, ChartInfo chartInfo, BaseBook book) {
return (book != null && templateId.equals(book.getTemplateID())) ||
originID.equals(chartInfo.getTemplateId());
} }
private boolean isTestTemplate(TemplateProcessInfo processInfo) { private boolean isTestTemplate(TemplateProcessInfo processInfo) {

Loading…
Cancel
Save