From 59a340c13240dca42ee905e463ac195d7eefbed3 Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Thu, 18 Aug 2022 20:11:36 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-75093=20=E8=BF=90=E8=90=A5=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=8C=96=E4=BA=8C=E6=9C=9F=201=E3=80=81=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=AE=BE=E8=AE=A1=E5=99=A8id=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=BF=87=E6=BB=A4=202=E3=80=81=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E8=B5=84=E6=BA=90=E4=B8=8B=E8=BD=BD=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=203=E3=80=81=E6=B7=BB=E5=8A=A0=E5=9F=8B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alphafine/AlphaFineConstants.java | 10 ++- .../alphafine/action/StartUseAction.java | 2 +- .../alphafine/component/AlphaFineFrame.java | 59 +++++++++------- .../alphafine/component/ProductNewsList.java | 16 +++-- .../alphafine/model/ProductNews.java | 47 ++++++------- .../preview/TemplateResourceDetailPane.java | 8 ++- .../alphafine/preview/TemplateShopPane.java | 16 +++-- .../search/helper/FineMarketClientHelper.java | 29 ++++++-- .../impl/ProductNewsSearchManager.java | 68 ++++++++++++++++++- 9 files changed, 177 insertions(+), 78 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java index 8de2a0d63..4bd765169 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/AlphaFineConstants.java @@ -5,8 +5,9 @@ import com.fr.base.svg.IconUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.utils.DesignUtils; import com.fr.general.CloudCenter; - import com.fr.general.IOUtils; + +import javax.swing.Icon; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -14,7 +15,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; -import javax.swing.Icon; /** @@ -154,7 +154,11 @@ public class AlphaFineConstants { public static final String ALPHA_PREVIEW = CloudCenter.getInstance().acquireUrlByKind("af.preview"); - public static final String ALPHA_CID = CloudCenter.getInstance().acquireUrlByKind("af.cid", "https://cid.fanruan.com/api/nav/alphafine"); + public static final String ALPHA_CID = CloudCenter.getInstance().acquireUrlByKind("af.cid", "https://cid.fanruan.com/api/alphafine/indexlist"); + + public static final String ALPHA_CID_USER_GROUP_INFO = CloudCenter.getInstance().acquireUrlByKind("af.cid.user.group.info", "https://cid.fanruan.com/api/alphafine/viewlist"); + + public static final String SEARCH_BY_ID = "?id="; private static final String DEFAULT_RECOMMEND = "[ { \"name\":\"快速入门指南\", \"link\":\"https://help.fanruan.com/finereport/doc-view-1335.html?source=3\" }, { \"name\":\"报表应用学习路径\", \"link\":\"https://help.fanruan.com/finereport/doc-view-1336.html?source=3\" }, { \"name\":\"参数应用学习路径\", \"link\":\"https://help.fanruan.com/finereport/doc-view-4219.html?source=3\" }, { \"name\":\"填报学习路径\", \"link\":\"https://help.fanruan.com/finereport/doc-view-4103.html?source=3\" }, { \"name\":\"API接口汇总\", \"link\":\"https://help.fanruan.com/finereport/doc-view-4327.html?source=3\" }, { \"name\":\"文档月刊\", \"link\":\"https://help.fanruan.com/finereport/doc-view-4613.html?source=3\" } ]"; diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java index eb2454532..d8ddfe27b 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java @@ -22,7 +22,7 @@ public class StartUseAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - String url = FineMarketClientHelper.getInstance().getTemplateDownLoadUrl(resourceDetail.getRoot()); + String url = FineMarketClientHelper.getInstance().getResourceDownloadUrl(resourceDetail.getRoot()); if (url == null) { // 如果获取失败,跳转到所有模板页面 url = FineMarketClientHelper.getInstance().getFineMarketTemplateUrl(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java index 32bf05e3c..deab122e7 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java @@ -506,32 +506,8 @@ public class AlphaFineFrame extends JFrame { tabPane.repaint(); // 选中事件 - switch (selectedLabel.getCellType()) { - case PRODUCT_NEWS: - readLabel.setVisible(true); - switchType(CellType.PRODUCT_NEWS); - break; - case ACTION: - currentSearchWorkerManager = settingSearchWorkerManager; - switchType(CellType.ACTION); - break; - case FILE: - currentSearchWorkerManager = fileSearchWorkerManager; - switchType(CellType.FILE); - break; - case DOCUMENT: - currentSearchWorkerManager = documentWorkerManager; - switchType(CellType.DOCUMENT); - break; - case PLUGIN: - currentSearchWorkerManager = pluginSearchWorkerManager; - switchType(CellType.PLUGIN); - break; - case TEMPLATE_SHOP: - TemplateShopPane.getInstance().showPagePane(); - switchType(CellType.TEMPLATE_SHOP); - break; - } + switchTab(selectedLabel.getCellType(), readLabel); + if (currentSearchWorkerManager != null) { AlphaFineList alphaFineList = currentSearchWorkerManager.getSearchResultList(); if (alphaFineList != null) { @@ -555,6 +531,37 @@ public class AlphaFineFrame extends JFrame { }; } + + // 方便记埋点 + private void switchTab(CellType cellType, UILabel readLabel) { + switch (cellType) { + case PRODUCT_NEWS: + readLabel.setVisible(true); + switchType(CellType.PRODUCT_NEWS); + break; + case ACTION: + currentSearchWorkerManager = settingSearchWorkerManager; + switchType(CellType.ACTION); + break; + case FILE: + currentSearchWorkerManager = fileSearchWorkerManager; + switchType(CellType.FILE); + break; + case DOCUMENT: + currentSearchWorkerManager = documentWorkerManager; + switchType(CellType.DOCUMENT); + break; + case PLUGIN: + currentSearchWorkerManager = pluginSearchWorkerManager; + switchType(CellType.PLUGIN); + break; + case TEMPLATE_SHOP: + TemplateShopPane.getInstance().showPagePane(); + switchType(CellType.TEMPLATE_SHOP); + break; + } + } + private List createSelectedLabelList() { List selectedLabelList = new ArrayList<>(); AlphaFineConfigManager alphaFineConfigManager = DesignerEnvManager.getEnvManager().getAlphaFineConfigManager(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/ProductNewsList.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/ProductNewsList.java index 1a8e0a2a2..48dfa4b86 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/ProductNewsList.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/ProductNewsList.java @@ -5,18 +5,15 @@ import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.model.ProductNews; import com.fr.design.utils.BrowseUtils; -import com.fr.log.FineLoggerFactory; +import javax.swing.DefaultListModel; +import javax.swing.JList; +import javax.swing.ListModel; import java.awt.Cursor; -import java.awt.Desktop; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; -import java.net.URI; -import javax.swing.DefaultListModel; -import javax.swing.JList; -import javax.swing.ListModel; /** * @author hades @@ -64,11 +61,16 @@ public class ProductNewsList extends JList { private void dealWithClick() { ProductNews productNews = getSelectedValue(); - BrowseUtils.browser(productNews.getUrl()); + openNewsInBrowser(productNews.getUrl()); DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().getReadSet().add(productNews.getId()); AlphaFineHelper.getAlphaFineDialog().repaint(); } + // 方便埋点 + private void openNewsInBrowser(String url) { + BrowseUtils.browser(url); + } + public int getHoverIndex() { return hoverIndex; } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/ProductNews.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/ProductNews.java index aea152da2..1673f3bb8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/ProductNews.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/ProductNews.java @@ -1,8 +1,12 @@ package com.fr.design.mainframe.alphafine.model; import com.fr.design.i18n.Toolkit; + import java.awt.Image; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; /** * 产品动态 @@ -17,7 +21,9 @@ public class ProductNews { private String title; private Tag tag; - private Target target; + + // 推送对象,对象为 list<用户组id> + private List target; private Status status; private String url; @@ -26,6 +32,8 @@ public class ProductNews { private Date pushDate; + public static final String ALL_USER_TARGET = "0"; + /** * 创建cid的用户 */ @@ -58,11 +66,11 @@ public class ProductNews { return this; } - public Target getTarget() { + public List getTarget() { return target; } - public ProductNews setTarget(Target target) { + public ProductNews setTarget(List target) { this.target = target; return this; } @@ -172,29 +180,18 @@ public class ProductNews { } } - public enum Target { - ALL_USER(0); - - private final int code; - - Target(int code) { - this.code = code; - } - - public int getCode() { - return code; - } - - public static Target parseCode(int code) { - for (Target target : values()) { - if (target.code == code) { - return target; - } - } - throw new IllegalArgumentException(); + /** + * 将接口中的target字段转换一下 + * 原始数据是字符串,例如:"1,2,3,4" + * 转换为 List{1,2,3,4} + * */ + public static List ParseTarget(String s) { + List list = new ArrayList<>(); + if (s != null) { + String[] targets = s.split(","); + list.addAll(Arrays.asList(targets)); } - + return list; } - } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java index 7f4bc1981..4433754f9 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java @@ -117,13 +117,17 @@ public class TemplateResourceDetailPane extends JPanel { @Override public void mouseClicked(MouseEvent e) { super.mouseClicked(e); - String url = data.getResourceUrl(); - BrowseUtils.browser(url); + openResourceUrl(data.getResourceUrl()); } }); return linkLabel; } + // 方便埋点 + void openResourceUrl(String url) { + BrowseUtils.browser(url); + } + JButton createStartUseButton() { JButton starUseButton = new JButton(START_USE); starUseButton.addActionListener(new StartUseAction(data)); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java index fc1ebc35f..9ccc3b064 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java @@ -20,12 +20,12 @@ public class TemplateShopPane extends JPanel { return INSTANCE; } - - private static final String DEFAULT_PAGE_PANEL = "defaultPagePane"; - private static final String PAGE_PANEL = "pagePane"; - private static final String DETAIL_PANEL = "detailPane"; - private static final String LOADING_PANEL = "loadingPane"; - private String currentCard = Strings.EMPTY; + // public 方便埋点 + public static final String DEFAULT_PAGE_PANEL = "defaultPagePane"; + public static final String PAGE_PANEL = "pagePane"; + public static final String DETAIL_PANEL = "detailPane"; + public static final String LOADING_PANEL = "loadingPane"; + public String currentCard = Strings.EMPTY; private CardLayout cardLayout = new CardLayout(); @@ -99,6 +99,10 @@ public class TemplateShopPane extends JPanel { } + // 方便埋点,勿删 + public String getCurrentCard() { + return currentCard; + } private JPanel createContentPane(List templateResources) { return new TemplateResourcePageGridPane(templateResources); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java index 56a4528cd..97e31609a 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java @@ -22,6 +22,7 @@ public class FineMarketClientHelper { public static final String FINE_MARKET_TEMPLATE_INFO = CloudCenter.getInstance().acquireUrlByKind("market.template.info", "https://market.fanruan.com/templates/"); public static final String FINE_MARKET_TEMPLATE_URL = CloudCenter.getInstance().acquireUrlByKind("market.template.url", "https://market.fanruan.com/template/"); public static final String FILE_DOWNLOAD = "file/"; + public static final String PACKAGE_DOWNLOAD = "package/download/"; public static final String TEMPLATES_PARENT_PACKAGE = "parent/"; public static final String TEMPLATES_TAGS = "filter"; public static final String NAME_SEARCH = "?searchKeyword="; @@ -39,17 +40,33 @@ public class FineMarketClientHelper { /** - * 获取模板的下载链接 + * 获取模板资源的下载链接 * */ - public String getTemplateDownLoadUrl(TemplateResource templateResource) { - String url = FINE_MARKET_TEMPLATE_INFO + FILE_DOWNLOAD; - if (templateResource != null) { - return url + templateResource.getId(); + public String getResourceDownloadUrl(TemplateResource templateResource) { + if (TemplateResource.Type.SCENARIO_SOLUTION.equals(templateResource.getType())) { + return getPackageDownloadUrl(templateResource.getId()); } else { - return null; + return getFileDownLoadUrl(templateResource.getId()); } + + } + + /** + * 打开浏览器,打包并下载模板资源包,可能会很慢 + * */ + private String getPackageDownloadUrl(String id) { + return FINE_MARKET_TEMPLATE_INFO + PACKAGE_DOWNLOAD + id; } + /** + * 打开浏览器,下载单一模板 + * */ + private String getFileDownLoadUrl(String id) { + return FINE_MARKET_TEMPLATE_INFO + FILE_DOWNLOAD + id; + } + + + /** * 获取帆软市场模板资源页面链接 * */ diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java index 205735ab3..deee28c35 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.alphafine.search.manager.impl; import com.fr.concurrent.NamedThreadFactory; +import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.model.ProductNews; @@ -12,17 +13,19 @@ import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import org.jetbrains.annotations.Nullable; +import javax.imageio.ImageIO; import java.awt.Image; import java.net.URL; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import javax.imageio.ImageIO; public class ProductNewsSearchManager { @@ -91,7 +94,7 @@ public class ProductNewsSearchManager { setImage(getCoverImage(obj.getString("pic"))). setUrl(obj.getString("url")).setTag(ProductNews.Tag.parseCode(obj.getInt("tag"))). setStatus(ProductNews.Status.parseCode(obj.getInt("status"))).setTarget( - ProductNews.Target.parseCode(obj.getInt("target"))). + ProductNews.ParseTarget(obj.getString("target"))). setCreator(obj.getInt("creator")).setPushDate(new Date(obj.getLong("push_time"))); Date currentDate = new Date(System.currentTimeMillis()); // 推送时间check @@ -100,9 +103,70 @@ public class ProductNewsSearchManager { idSet.add(productNews.getId()); } } + + filterByDesignerId(productNewsList); + return productNewsList; } + + /** + * 将productNews根据设计器id进行过滤 + * productNews有个target字段,代表推送对象用户组,检查设计器id是否在用户组中来进行过滤 + * */ + private List filterByDesignerId(List list) { + //设计器id + String designId = DesignerEnvManager.getEnvManager().getUUID(); + + HashMap> userGroupInfoCache = new HashMap<>(); + //遍历资源,获取target下的所有用户组信息,检查是否包含设计器id + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + List targets = iterator.next().getTarget(); + + boolean targetsContainDesignerId = false; + + // 每条推送可能推送至多个用户组,需要逐一判断 + for (String userGroupId : targets) { + // 没有记录的用户组信息需要请求一下 + if (!userGroupInfoCache.containsKey(userGroupId)) { + userGroupInfoCache.put(userGroupId, searchUserGroupInfo(userGroupId)); + } + + // 判断设计器id是否在这个用户组中,在则退出判断,不在则继续 + if (userGroupInfoCache.get(userGroupId).contains(designId) || userGroupId.equals(ProductNews.ALL_USER_TARGET)) { + targetsContainDesignerId = true; + break; + } + } + + + if (!targetsContainDesignerId) { + iterator.remove(); + } + } + return list; + } + + /** + * 根据用户组id,查询用户组信息(改用户组中的所有设计器id) + * */ + private Set searchUserGroupInfo(String userGroupId) { + String url = AlphaFineConstants.ALPHA_CID_USER_GROUP_INFO + AlphaFineConstants.SEARCH_BY_ID + userGroupId; + Set idSet = new HashSet<>(); + try { + String jsonStr = HttpToolbox.get(url); + JSONObject jsonObject = new JSONObject(jsonStr); + JSONArray idArray = jsonObject.getJSONArray("data"); + for (int i = 0; i < idArray.length(); i++) { + idSet.add(idArray.getJSONObject(i).getString("userid")); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + return idSet; + } + public List getCachedProductNewsList() { return productNewsList; }