From 842947d7b92fb14c3e2e940e9fe7f3bf4b376c66 Mon Sep 17 00:00:00 2001 From: o2sword <171715986@qq.com> Date: Thu, 28 Apr 2022 10:25:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E5=BA=94=E7=94=A8=E5=B8=82?= =?UTF-8?q?=E5=9C=BA=E5=BC=80=E5=8F=911?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../x/base/core/project/config/Collect.java | 2 +- .../java/com/x/program/center/Business.java | 36 +- .../com/x/program/center/ThisApplication.java | 37 +- .../center/jaxrs/collect/ActionRegist.java | 7 +- .../jaxrs/collect/ActionValidateDirect.java | 7 +- .../center/jaxrs/market/ActionGet.java | 93 +-- .../jaxrs/market/ActionInstallOrUpdate.java | 547 +++++++++--------- .../center/jaxrs/market/ActionIsVip.java | 43 ++ .../jaxrs/market/ActionListCategory.java | 68 ++- .../center/jaxrs/market/ActionListPaging.java | 132 ++--- .../center/jaxrs/market/ActionSync.java | 23 - .../center/jaxrs/market/BaseAction.java | 304 +++++++++- .../center/jaxrs/market/MarketAction.java | 36 +- .../center/schedule/CollectMarket.java | 6 +- 14 files changed, 833 insertions(+), 508 deletions(-) create mode 100644 o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionIsVip.java delete mode 100644 o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionSync.java diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Collect.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Collect.java index 77985e495c..bb4f28d53b 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Collect.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Collect.java @@ -36,7 +36,7 @@ public class Collect extends ConfigObject { public static String ADDRESS_COLLECT_VALIDATE_CODE = "/o2_collect_assemble/jaxrs/unit/validate/codeanswer"; public static String ADDRESS_COLLECT_APPLICATION_LIST = "/o2_collect_assemble/jaxrs/application/list"; public static String ADDRESS_COLLECT_MARKET = "/market"; - public static String ADDRESS_COLLECT_APPLICATION_DOWN = "/o2_collect_assemble/jaxrs/application/download"; + public static String ADDRESS_COLLECT_APPLICATION_DOWN = "/o2_collect_assemble/jaxrs/application2/download"; public static String COLLECT_TOKEN = "c-token"; public static String ADDRESS_APPPACK_AUTH = "/auth/collect"; public static String ADDRESS_APPPACK_SAVE = "/pack/info/save"; diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/Business.java b/o2server/x_program_center/src/main/java/com/x/program/center/Business.java index 8482bf5d83..798d4039f7 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/Business.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/Business.java @@ -4,11 +4,10 @@ import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import com.x.base.core.project.tools.DateTools; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import com.x.base.core.container.EntityManagerContainer; @@ -34,6 +33,8 @@ public class Business { private static Logger logger = LoggerFactory.getLogger(Business.class); + private static Map tokenMap = new HashMap(); + private EntityManagerContainer emc; public Business(EntityManagerContainer emc) throws Exception { @@ -88,18 +89,23 @@ public class Business { return resp.getData(WoValidateCollect.class).getValue(); } - public String loginCollect() throws Exception { - String url = Config.collect().url(Collect.ADDRESS_COLLECT_LOGIN); - Map map = new HashMap<>(); - map.put("credential", Config.collect().getName()); - map.put("password", Config.collect().getPassword()); - ActionResponse resp = ConnectionAction.post(url, null, map); - LoginWo loginWo = resp.getData(LoginWo.class); - if(loginWo!=null) { - return loginWo.getToken(); - }else{ - return null; + public static String loginCollect() throws Exception { + String date = DateTools.compactDate(new Date()); + if(tokenMap.get(date)!=null){ + return tokenMap.get(date); + }else if (BooleanUtils.isTrue(Config.collect().getEnable())) { + String url = Config.collect().url(Collect.ADDRESS_COLLECT_LOGIN); + Map map = new HashMap<>(); + map.put("credential", Config.collect().getName()); + map.put("password", Config.collect().getPassword()); + ActionResponse resp = ConnectionAction.post(url, null, map); + LoginWo loginWo = resp.getData(LoginWo.class); + if (loginWo != null) { + tokenMap.put(date, loginWo.getToken()); + return loginWo.getToken(); + } } + return null; } public String getUnitName() throws Exception { diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/ThisApplication.java b/o2server/x_program_center/src/main/java/com/x/program/center/ThisApplication.java index 10ec33c513..13826c952a 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/ThisApplication.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/ThisApplication.java @@ -1,35 +1,15 @@ package com.x.program.center; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ArrayBlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; - import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.x.base.core.project.cache.CacheManager; import com.x.base.core.project.config.Config; -import com.x.program.center.schedule.Area; -import com.x.program.center.schedule.Cleanup; -import com.x.program.center.schedule.CleanupCode; -import com.x.program.center.schedule.CollectLog; -import com.x.program.center.schedule.CollectMarket; -import com.x.program.center.schedule.CollectPerson; -import com.x.program.center.schedule.DingdingSyncOrganization; -import com.x.program.center.schedule.DingdingSyncOrganizationTrigger; -import com.x.program.center.schedule.FireSchedule; -import com.x.program.center.schedule.QiyeweixinSyncOrganization; -import com.x.program.center.schedule.QiyeweixinSyncOrganizationTrigger; -import com.x.program.center.schedule.TriggerAgent; -import com.x.program.center.schedule.WeLinkSyncOrganization; -import com.x.program.center.schedule.WeLinkSyncOrganizationTrigger; -import com.x.program.center.schedule.ZhengwuDingdingSyncOrganization; -import com.x.program.center.schedule.ZhengwuDingdingSyncOrganizationTrigger; +import com.x.program.center.schedule.*; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; public class ThisApplication { @@ -115,7 +95,6 @@ public class ThisApplication { context().scheduleLocal(CleanupCode.class, 10, 60 * 30); context().scheduleLocal(Cleanup.class, 10, 60 * 30); context().scheduleLocal(CollectPerson.class, 10, 60 * 30); - context().scheduleLocal(CollectMarket.class, 10, 60 * 60 * 10); context().scheduleLocal(CollectLog.class, 10, 60 * 30); // 运行间隔由60秒缩减到30秒 context().scheduleLocal(TriggerAgent.class, 150, 30); @@ -134,4 +113,4 @@ public class ThisApplication { } } -} \ No newline at end of file +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionRegist.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionRegist.java index 40e5f387df..6f18a92173 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionRegist.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionRegist.java @@ -1,8 +1,5 @@ package com.x.program.center.jaxrs.collect; -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; - import com.google.gson.JsonElement; import com.x.base.core.project.annotation.FieldDescribe; import com.x.base.core.project.bean.WrapCopier; @@ -15,8 +12,9 @@ import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.jaxrs.WrapBoolean; import com.x.base.core.project.tools.StringTools; import com.x.program.center.ThisApplication; -import com.x.program.center.schedule.CollectMarket; import com.x.program.center.schedule.CollectPerson; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; class ActionRegist extends BaseAction { @@ -62,7 +60,6 @@ class ActionRegist extends BaseAction { this.configFlush(effectivePerson); // 人员和应用市场同步 ThisApplication.context().scheduleLocal(CollectPerson.class); - ThisApplication.context().scheduleLocal(CollectMarket.class); } result.setData(wo); return result; diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionValidateDirect.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionValidateDirect.java index e4df4ebf99..b435a0ff8e 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionValidateDirect.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/collect/ActionValidateDirect.java @@ -1,16 +1,14 @@ package com.x.program.center.jaxrs.collect; -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; - import com.google.gson.JsonElement; import com.x.base.core.project.config.Collect; import com.x.base.core.project.config.Config; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.jaxrs.WrapBoolean; import com.x.program.center.ThisApplication; -import com.x.program.center.schedule.CollectMarket; import com.x.program.center.schedule.CollectPerson; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; class ActionValidateDirect extends BaseAction { @@ -44,7 +42,6 @@ class ActionValidateDirect extends BaseAction { Config.flush(); /* 人员和应用市场同步 */ ThisApplication.context().scheduleLocal(CollectPerson.class); - ThisApplication.context().scheduleLocal(CollectMarket.class); } result.setData(wo); return result; diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionGet.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionGet.java index c7a091db04..88d8e2b1b7 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionGet.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionGet.java @@ -1,61 +1,86 @@ package com.x.program.center.jaxrs.market; -import java.util.ArrayList; -import java.util.List; - import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.entity.enums.CommonStatus; import com.x.base.core.project.annotation.FieldDescribe; -import com.x.base.core.project.bean.WrapCopier; -import com.x.base.core.project.bean.WrapCopierFactory; -import com.x.base.core.project.exception.ExceptionEntityNotExist; +import com.x.base.core.project.bean.NameValuePair; +import com.x.base.core.project.cache.Cache; +import com.x.base.core.project.cache.CacheManager; +import com.x.base.core.project.config.Collect; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.connection.ActionResponse; +import com.x.base.core.project.connection.ConnectionAction; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.EffectivePerson; -import com.x.program.center.core.entity.Application; -import com.x.program.center.core.entity.Attachment; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; +import com.x.program.center.Business; import com.x.program.center.core.entity.InstallLog; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; class ActionGet extends BaseAction { + private static Logger logger = LoggerFactory.getLogger(ActionGet.class); + ActionResult execute(EffectivePerson effectivePerson, String id) throws Exception { - try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - ActionResult result = new ActionResult<>(); - Application app = emc.find(id, Application.class); - if (null == app) { - throw new ExceptionEntityNotExist(id, Application.class); + if(logger.isDebugEnabled()) { + logger.debug(effectivePerson.getDistinguishedName()); + } + ActionResult result = new ActionResult<>(); + Wo wo = new Wo(); + Cache.CacheKey cacheKey = new Cache.CacheKey(ActionGet.class, id); + Optional optional = CacheManager.get(cacheCategory, cacheKey); + if (optional.isPresent()) { + wo = (Wo) optional.get(); + } else { + String token = Business.loginCollect(); + if (StringUtils.isNotEmpty(token)) { + try { + ActionResponse response = ConnectionAction.get( + Config.collect().url(COLLECT_MARKET_INFO + id), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); + wo = response.getData(Wo.class); + } catch (Exception e) { + logger.warn("get market info form o2cloud error: {}.", e.getMessage()); + } } - Wo wo = Wo.copier.copy(app); - wo.setAttList(emc.listEqual(Attachment.class, Attachment.application_FIELDNAME, wo.getId())); - - InstallLog installLog = emc.find(id, InstallLog.class); - if(installLog!=null && CommonStatus.VALID.getValue().equals(installLog.getStatus())){ - wo.setInstalledVersion(installLog.getVersion()); - }else{ - wo.setInstalledVersion(""); + if(StringUtils.isNotBlank(wo.getId())) { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + InstallLog installLog = emc.find(wo.getId(), InstallLog.class); + if (installLog != null && CommonStatus.VALID.getValue().equals(installLog.getStatus())) { + wo.setInstalledVersion(installLog.getVersion()); + } else { + wo.setInstalledVersion(""); + } + result.setData(wo); + } + CacheManager.put(cacheCategory, cacheKey, wo); } - result.setData(wo); - return result; } + result.setData(wo); + return result; } - public static class Wo extends Application { - - private static final long serialVersionUID = -4000191514240350631L; - static WrapCopier copier = WrapCopierFactory.wo(Application.class, Wo.class, null, Wo.FieldsInvisible); + public static class Wo extends Application2 { - @FieldDescribe("图片列表") - private List attList = new ArrayList<>(); + @FieldDescribe("展示图片url列表.") + private List picList = new ArrayList<>(); @FieldDescribe("已安装的版本,空表示未安装") private String installedVersion; - public List getAttList() { - return attList; + public List getPicList() { + return picList; } - public void setAttList(List attList) { - this.attList = attList; + public void setPicList(List picList) { + this.picList = picList; } public String getInstalledVersion() { @@ -66,4 +91,4 @@ class ActionGet extends BaseAction { this.installedVersion = installedVersion; } } -} \ No newline at end of file +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionInstallOrUpdate.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionInstallOrUpdate.java index 2da255de70..c943076f7e 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionInstallOrUpdate.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionInstallOrUpdate.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.x.base.core.project.connection.ActionResponse; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -62,279 +63,283 @@ import com.x.query.core.entity.wrap.WrapQuery; class ActionInstallOrUpdate extends BaseAction { - private static Logger logger = LoggerFactory.getLogger(ActionInstallOrUpdate.class); - - ActionResult execute(EffectivePerson effectivePerson, String id) throws Exception { - try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - ActionResult result = new ActionResult<>(); - Business business = new Business(emc); - Application app = emc.find(id, Application.class); - if (null == app) { - throw new ExceptionEntityNotExist(id, Application.class); - } - if (!hasAuth(effectivePerson, null)) { - throw new ExceptionAccessDenied(effectivePerson, app); - } - logger.print("{}发起安装或更新应用:{}", effectivePerson.getDistinguishedName(), app.getName()); - Wo wo = new Wo(); - wo.setValue(false); - if (BooleanUtils.isTrue(Config.collect().getEnable())) { - String token = business.loginCollect(); - if (StringUtils.isNotEmpty(token)) { - byte[] bytes = ConnectionAction.getBinary( - Config.collect().url(Collect.ADDRESS_COLLECT_APPLICATION_DOWN + "/" + id), - ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); - if ((null != bytes) && (bytes.length > 0)) { - InstallData installData = this.install(id, bytes); - wo.setValue(true); - emc.beginTransaction(InstallLog.class); - InstallLog installLog = emc.find(id, InstallLog.class); - boolean exist = true; - if (installLog == null) { - installLog = new InstallLog(); - installLog.setId(app.getId()); - exist = false; - } - installLog.setName(app.getName()); - installLog.setVersion(app.getVersion()); - installLog.setCategory(app.getCategory()); - installLog.setStatus(CommonStatus.VALID.getValue()); - installLog.setData(gson.toJson(installData)); - installLog.setInstallPerson(effectivePerson.getDistinguishedName()); - installLog.setInstallTime(new Date()); - installLog.setUnInstallPerson(null); - installLog.setUnInstallTime(null); - if (!exist) { - emc.persist(installLog); - } - emc.commit(); - } - } - } - - result.setData(wo); - return result; - } - } - - private InstallData install(String id, byte[] bytes) throws Exception { - InstallData installData = new InstallData(); - File tempFile = new File(Config.base(), "local/temp/install"); - FileTools.forceMkdir(tempFile); - FileUtils.cleanDirectory(tempFile); - File zipFile = new File(tempFile.getAbsolutePath(), id + ".zip"); - FileUtils.writeByteArrayToFile(zipFile, bytes); - File dist = new File(tempFile.getAbsolutePath(), "data"); - FileTools.forceMkdir(dist); - JarTools.unjar(zipFile, new ArrayList<>(), dist, true); - // 过滤必要的文件 + private static Logger logger = LoggerFactory.getLogger(ActionInstallOrUpdate.class); + + ActionResult execute(EffectivePerson effectivePerson, String id) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + ActionResult result = new ActionResult<>(); + Application2 app = null; + String token = Business.loginCollect(); + if (StringUtils.isNotEmpty(token)) { + try { + ActionResponse response = ConnectionAction.get( + Config.collect().url(COLLECT_MARKET_INFO + id), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); + app = response.getData(Application2.class); + } catch (Exception e) { + logger.warn("get market info form o2cloud error: {}.", e.getMessage()); + } + } + if(app != null){ + throw new ExceptionEntityNotExist(id); + } + logger.print("{}发起安装或更新应用:{}", effectivePerson.getDistinguishedName(), app.getName()); + Wo wo = new Wo(); + wo.setValue(false); + if (StringUtils.isNotEmpty(token)) { + byte[] bytes = ConnectionAction.getBinary( + Config.collect().url(Collect.ADDRESS_COLLECT_APPLICATION_DOWN + "/" + id), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); + if ((null != bytes) && (bytes.length > 0)) { + InstallData installData = this.install(id, bytes); + wo.setValue(true); + emc.beginTransaction(InstallLog.class); + InstallLog installLog = emc.find(id, InstallLog.class); + boolean exist = true; + if (installLog == null) { + installLog = new InstallLog(); + installLog.setId(app.getId()); + exist = false; + } + installLog.setName(app.getName()); + installLog.setVersion(app.getVersion()); + installLog.setCategory(app.getCategory()); + installLog.setStatus(CommonStatus.VALID.getValue()); + installLog.setData(gson.toJson(installData)); + installLog.setInstallPerson(effectivePerson.getDistinguishedName()); + installLog.setInstallTime(new Date()); + installLog.setUnInstallPerson(null); + installLog.setUnInstallTime(null); + if (!exist) { + emc.persist(installLog); + } + emc.commit(); + } + } + + result.setData(wo); + return result; + } + } + + private InstallData install(String id, byte[] bytes) throws Exception { + InstallData installData = new InstallData(); + File tempFile = new File(Config.base(), "local/temp/install"); + FileTools.forceMkdir(tempFile); + FileUtils.cleanDirectory(tempFile); + File zipFile = new File(tempFile.getAbsolutePath(), id + ".zip"); + FileUtils.writeByteArrayToFile(zipFile, bytes); + File dist = new File(tempFile.getAbsolutePath(), "data"); + FileTools.forceMkdir(dist); + JarTools.unjar(zipFile, new ArrayList<>(), dist, true); + // 过滤必要的文件 // File[] files = dist.listFiles(new FileFilter() { // public boolean accept(File pathname) { // return true; // } // }); - File[] files = dist.listFiles(path -> true); - if (null != files) { - for (File file : files) { - if (!file.isDirectory()) { - if (file.getName().toLowerCase().endsWith(".xapp")) { - String json = FileUtils.readFileToString(file, DefaultCharset.charset); - Gson gson = new Gson(); - JsonElement jsonElement = gson.fromJson(json, JsonElement.class); - WrapModule module = this.convertToWrapIn(jsonElement, WrapModule.class); - this.installModule(module); - installData.setWrapModule(module); - } else if (file.getName().toLowerCase().endsWith(".app.zip")) { - logger.print("开始安装自定义应用:{}", file.getName()); - this.installCustomApp(file.getName(), FileUtils.readFileToByteArray(file)); - installData.setCustomApp(file.getName()); - logger.print("完成自定义应用安装:{}", file.getName()); - } else if (file.getName().toLowerCase().endsWith(".zip")) { - logger.print("开始安装静态资源"); - try { - Business.dispatch(false, file.getName(), "", FileUtils.readFileToByteArray(file)); - installData.setStaticResource(file.getName()); - } catch (Exception e) { - logger.print("模块安装成功但静态资源安装失败:{}", e.getMessage()); - } - } - } - } - } - FileUtils.cleanDirectory(tempFile); - return installData; - } - - private InstallWo installModule(WrapModule module) throws Exception { - InstallWo wo = new InstallWo(); - logger.print("开始安装应用"); - if (module.getProcessPlatformList() != null) { - for (WrapProcessPlatform obj : module.getProcessPlatformList()) { - wo.getProcessPlatformList().add( - ThisApplication.context().applications().putQuery(x_processplatform_assemble_designer.class, - Applications.joinQueryUri("input", "cover"), obj).getData(WoId.class).getId()); - obj.setIcon(null); - obj.setApplicationDictList(null); - obj.setFileList(null); - obj.setFormList(null); - obj.setProcessList(null); - obj.setScriptList(null); - } - } - if (module.getCmsList() != null) { - for (WrapCms obj : module.getCmsList()) { - wo.getCmsList().add(ThisApplication.context().applications() - .putQuery(x_cms_assemble_control.class, Applications.joinQueryUri("input", "cover"), obj) - .getData(WoId.class).getId()); - obj.setAppIcon(null); - obj.setAppDictList(null); - obj.setCategoryInfoList(null); - obj.setFileList(null); - obj.setFormList(null); - obj.setScriptList(null); - } - } - if (module.getPortalList() != null) { - for (WrapPortal obj : module.getPortalList()) { - wo.getPortalList().add(ThisApplication.context().applications() - .putQuery(x_portal_assemble_designer.class, Applications.joinQueryUri("input", "cover"), obj) - .getData(WoId.class).getId()); - obj.setIcon(null); - obj.setFileList(null); - obj.setPageList(null); - obj.setScriptList(null); - obj.setWidgetList(null); - } - } - if (module.getQueryList() != null) { - for (WrapQuery obj : module.getQueryList()) { - wo.getQueryList().add(ThisApplication.context().applications() - .putQuery(x_query_assemble_designer.class, Applications.joinQueryUri("input", "cover"), obj) - .getData(WoId.class).getId()); - obj.setIcon(null); - obj.setRevealList(null); - obj.setViewList(null); - obj.setStatementList(null); - obj.setViewList(null); - obj.setTableList(null); - } - } - - if (module.getServiceModuleList() != null) { - for (WrapServiceModule obj : module.getServiceModuleList()) { - wo.getServiceModuleList() - .add(CipherConnectionAction.put(false, Config.url_x_program_center_jaxrs("input", "cover"), obj) - .getData(WoId.class).getId()); - if (obj.getAgentList() != null) { - for (WrapAgent agent : obj.getAgentList()) { - agent.setText(null); - } - } - if (obj.getInvokeList() != null) { - for (WrapInvoke invoke : obj.getInvokeList()) { - invoke.setText(null); - } - } - } - } - - return wo; - } - - private void installCustomApp(String fileName, byte[] bytes) throws Exception { - Nodes nodes = Config.nodes(); - for (String node : nodes.keySet()) { - if (nodes.get(node).getApplication().getEnable()) { - logger.print("socket deploy custom app{} to {}:{}", fileName, node, nodes.get(node).nodeAgentPort()); - try (Socket socket = new Socket(node, nodes.get(node).nodeAgentPort())) { - socket.setKeepAlive(true); - socket.setSoTimeout(10000); - try (DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); - DataInputStream dis = new DataInputStream(socket.getInputStream())) { - Map commandObject = new HashMap<>(); - commandObject.put("command", "redeploy:customZip"); - commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey())); - - dos.writeUTF(XGsonBuilder.toJson(commandObject)); - dos.flush(); - dos.writeUTF(fileName); - dos.flush(); - - try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes)) { - byte[] onceBytes = new byte[1024]; - int length = 0; - while ((length = bis.read(onceBytes, 0, onceBytes.length)) != -1) { - dos.write(onceBytes, 0, length); - dos.flush(); - } - } - } - - } - } - } - } - - public static class Wo extends WrapBoolean { - - } - - public static class InstallWo extends GsonPropertyObject { - - @FieldDescribe("流程应用") - private List processPlatformList = new ArrayList<>(); - - @FieldDescribe("门户应用") - private List portalList = new ArrayList<>(); - - @FieldDescribe("统计应用") - private List queryList = new ArrayList<>(); - - @FieldDescribe("内容管理应用") - private List cmsList = new ArrayList<>(); - - @FieldDescribe("服务管理应用") - private List serviceModuleList = new ArrayList<>(); - - public List getProcessPlatformList() { - return processPlatformList; - } - - public void setProcessPlatformList(List processPlatformList) { - this.processPlatformList = processPlatformList; - } - - public List getPortalList() { - return portalList; - } - - public void setPortalList(List portalList) { - this.portalList = portalList; - } - - public List getQueryList() { - return queryList; - } - - public void setQueryList(List queryList) { - this.queryList = queryList; - } - - public List getCmsList() { - return cmsList; - } - - public void setCmsList(List cmsList) { - this.cmsList = cmsList; - } - - public List getServiceModuleList() { - return serviceModuleList; - } - - public void setServiceModuleList(List serviceModuleList) { - this.serviceModuleList = serviceModuleList; - } - } - -} \ No newline at end of file + File[] files = dist.listFiles(path -> true); + if (null != files) { + for (File file : files) { + if (!file.isDirectory()) { + if (file.getName().toLowerCase().endsWith(".xapp")) { + String json = FileUtils.readFileToString(file, DefaultCharset.charset); + Gson gson = new Gson(); + JsonElement jsonElement = gson.fromJson(json, JsonElement.class); + WrapModule module = this.convertToWrapIn(jsonElement, WrapModule.class); + this.installModule(module); + installData.setWrapModule(module); + } else if (file.getName().toLowerCase().endsWith(".app.zip")) { + logger.print("开始安装自定义应用:{}", file.getName()); + this.installCustomApp(file.getName(), FileUtils.readFileToByteArray(file)); + installData.setCustomApp(file.getName()); + logger.print("完成自定义应用安装:{}", file.getName()); + } else if (file.getName().toLowerCase().endsWith(".zip")) { + logger.print("开始安装静态资源"); + try { + Business.dispatch(false, file.getName(), "", FileUtils.readFileToByteArray(file)); + installData.setStaticResource(file.getName()); + } catch (Exception e) { + logger.print("模块安装成功但静态资源安装失败:{}", e.getMessage()); + } + } + } + } + } + FileUtils.cleanDirectory(tempFile); + return installData; + } + + private InstallWo installModule(WrapModule module) throws Exception { + InstallWo wo = new InstallWo(); + logger.print("开始安装应用"); + if (module.getProcessPlatformList() != null) { + for (WrapProcessPlatform obj : module.getProcessPlatformList()) { + wo.getProcessPlatformList().add( + ThisApplication.context().applications().putQuery(x_processplatform_assemble_designer.class, + Applications.joinQueryUri("input", "cover"), obj).getData(WoId.class).getId()); + obj.setIcon(null); + obj.setApplicationDictList(null); + obj.setFileList(null); + obj.setFormList(null); + obj.setProcessList(null); + obj.setScriptList(null); + } + } + if (module.getCmsList() != null) { + for (WrapCms obj : module.getCmsList()) { + wo.getCmsList().add(ThisApplication.context().applications() + .putQuery(x_cms_assemble_control.class, Applications.joinQueryUri("input", "cover"), obj) + .getData(WoId.class).getId()); + obj.setAppIcon(null); + obj.setAppDictList(null); + obj.setCategoryInfoList(null); + obj.setFileList(null); + obj.setFormList(null); + obj.setScriptList(null); + } + } + if (module.getPortalList() != null) { + for (WrapPortal obj : module.getPortalList()) { + wo.getPortalList().add(ThisApplication.context().applications() + .putQuery(x_portal_assemble_designer.class, Applications.joinQueryUri("input", "cover"), obj) + .getData(WoId.class).getId()); + obj.setIcon(null); + obj.setFileList(null); + obj.setPageList(null); + obj.setScriptList(null); + obj.setWidgetList(null); + } + } + if (module.getQueryList() != null) { + for (WrapQuery obj : module.getQueryList()) { + wo.getQueryList().add(ThisApplication.context().applications() + .putQuery(x_query_assemble_designer.class, Applications.joinQueryUri("input", "cover"), obj) + .getData(WoId.class).getId()); + obj.setIcon(null); + obj.setRevealList(null); + obj.setViewList(null); + obj.setStatementList(null); + obj.setViewList(null); + obj.setTableList(null); + } + } + + if (module.getServiceModuleList() != null) { + for (WrapServiceModule obj : module.getServiceModuleList()) { + wo.getServiceModuleList() + .add(CipherConnectionAction.put(false, Config.url_x_program_center_jaxrs("input", "cover"), obj) + .getData(WoId.class).getId()); + if (obj.getAgentList() != null) { + for (WrapAgent agent : obj.getAgentList()) { + agent.setText(null); + } + } + if (obj.getInvokeList() != null) { + for (WrapInvoke invoke : obj.getInvokeList()) { + invoke.setText(null); + } + } + } + } + + return wo; + } + + private void installCustomApp(String fileName, byte[] bytes) throws Exception { + Nodes nodes = Config.nodes(); + for (String node : nodes.keySet()) { + if (nodes.get(node).getApplication().getEnable()) { + logger.print("socket deploy custom app{} to {}:{}", fileName, node, nodes.get(node).nodeAgentPort()); + try (Socket socket = new Socket(node, nodes.get(node).nodeAgentPort())) { + socket.setKeepAlive(true); + socket.setSoTimeout(10000); + try (DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); + DataInputStream dis = new DataInputStream(socket.getInputStream())) { + Map commandObject = new HashMap<>(); + commandObject.put("command", "redeploy:customZip"); + commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey())); + + dos.writeUTF(XGsonBuilder.toJson(commandObject)); + dos.flush(); + dos.writeUTF(fileName); + dos.flush(); + + try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes)) { + byte[] onceBytes = new byte[1024]; + int length = 0; + while ((length = bis.read(onceBytes, 0, onceBytes.length)) != -1) { + dos.write(onceBytes, 0, length); + dos.flush(); + } + } + } + + } + } + } + } + + public static class Wo extends WrapBoolean { + + } + + public static class InstallWo extends GsonPropertyObject { + + @FieldDescribe("流程应用") + private List processPlatformList = new ArrayList<>(); + + @FieldDescribe("门户应用") + private List portalList = new ArrayList<>(); + + @FieldDescribe("统计应用") + private List queryList = new ArrayList<>(); + + @FieldDescribe("内容管理应用") + private List cmsList = new ArrayList<>(); + + @FieldDescribe("服务管理应用") + private List serviceModuleList = new ArrayList<>(); + + public List getProcessPlatformList() { + return processPlatformList; + } + + public void setProcessPlatformList(List processPlatformList) { + this.processPlatformList = processPlatformList; + } + + public List getPortalList() { + return portalList; + } + + public void setPortalList(List portalList) { + this.portalList = portalList; + } + + public List getQueryList() { + return queryList; + } + + public void setQueryList(List queryList) { + this.queryList = queryList; + } + + public List getCmsList() { + return cmsList; + } + + public void setCmsList(List cmsList) { + this.cmsList = cmsList; + } + + public List getServiceModuleList() { + return serviceModuleList; + } + + public void setServiceModuleList(List serviceModuleList) { + this.serviceModuleList = serviceModuleList; + } + } + +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionIsVip.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionIsVip.java new file mode 100644 index 0000000000..7a695700cf --- /dev/null +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionIsVip.java @@ -0,0 +1,43 @@ +package com.x.program.center.jaxrs.market; + +import com.x.base.core.project.bean.NameValuePair; +import com.x.base.core.project.config.Collect; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.connection.ActionResponse; +import com.x.base.core.project.connection.ConnectionAction; +import com.x.base.core.project.http.ActionResult; +import com.x.base.core.project.http.EffectivePerson; +import com.x.base.core.project.jaxrs.WrapBoolean; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; +import com.x.program.center.Business; +import org.apache.commons.lang3.StringUtils; + +class ActionIsVip extends BaseAction { + + private static Logger logger = LoggerFactory.getLogger(ActionIsVip.class); + + ActionResult execute(EffectivePerson effectivePerson) throws Exception { + ActionResult result = new ActionResult<>(); + Wo wo = new Wo(); + wo.setValue(false); + String token = Business.loginCollect(); + if (StringUtils.isNotEmpty(token)) { + try { + ActionResponse response = ConnectionAction.get( + Config.collect().url(COLLECT_UNIT_IS_VIP), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); + wo = response.getData(Wo.class); + } catch (Exception e) { + logger.warn("check unit is vip form o2cloud error: {}.", e.getMessage()); + } + } + result.setData(wo); + return result; + } + + public static class Wo extends WrapBoolean { + + } +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListCategory.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListCategory.java index c7ec8087cc..2851053382 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListCategory.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListCategory.java @@ -1,42 +1,56 @@ package com.x.program.center.jaxrs.market; -import java.util.List; -import java.util.stream.Collectors; - -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - -import com.x.base.core.container.EntityManagerContainer; -import com.x.base.core.container.factory.EntityManagerContainerFactory; +import com.x.base.core.project.bean.NameValuePair; +import com.x.base.core.project.cache.Cache; +import com.x.base.core.project.cache.CacheManager; +import com.x.base.core.project.config.Collect; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.connection.ActionResponse; +import com.x.base.core.project.connection.ConnectionAction; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.jaxrs.WrapStringList; -import com.x.program.center.core.entity.Application; -import com.x.program.center.core.entity.Application_; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; +import com.x.program.center.Business; +import org.apache.commons.lang3.StringUtils; -class ActionListCategory extends BaseAction { +import java.util.Optional; - ActionResult execute(EffectivePerson effectivePerson) throws Exception { - try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - ActionResult result = new ActionResult<>(); +class ActionListCategory extends BaseAction { - EntityManager em = emc.get(Application.class); - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(String.class); - Root root = cq.from(Application.class); - cq.select(root.get(Application_.category)); - List categoryList = em.createQuery(cq).getResultList().stream().distinct().collect(Collectors.toList()); + private static Logger logger = LoggerFactory.getLogger(ActionListCategory.class); - Wo wo = new Wo(); - wo.setValueList(categoryList); - result.setData(wo); - return result; + ActionResult execute(EffectivePerson effectivePerson) throws Exception { + if(logger.isDebugEnabled()) { + logger.debug(effectivePerson.getDistinguishedName()); + } + ActionResult result = new ActionResult<>(); + Wo wo = new Wo(); + Cache.CacheKey cacheKey = new Cache.CacheKey(ActionListCategory.class); + Optional optional = CacheManager.get(cacheCategory, cacheKey); + if (optional.isPresent()) { + wo = (Wo) optional.get(); + } else { + String token = Business.loginCollect(); + if (StringUtils.isNotEmpty(token)) { + try { + ActionResponse response = ConnectionAction.get( + Config.collect().url(COLLECT_MARKET_CATEGORY), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token))); + wo = response.getData(Wo.class); + CacheManager.put(cacheCategory, cacheKey, wo); + } catch (Exception e) { + logger.warn("get market Category form o2cloud error: {}.", e.getMessage()); + } + } } + result.setData(wo); + return result; } public static class Wo extends WrapStringList { } -} \ No newline at end of file +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListPaging.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListPaging.java index c8244e23b9..b92c3c9693 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListPaging.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionListPaging.java @@ -1,96 +1,81 @@ package com.x.program.center.jaxrs.market; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.Tuple; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; - -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; - import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; -import com.x.base.core.entity.JpaObject; import com.x.base.core.entity.enums.CommonStatus; import com.x.base.core.project.annotation.FieldDescribe; -import com.x.base.core.project.bean.WrapCopier; -import com.x.base.core.project.bean.WrapCopierFactory; +import com.x.base.core.project.bean.NameValuePair; +import com.x.base.core.project.cache.Cache; +import com.x.base.core.project.cache.CacheManager; +import com.x.base.core.project.config.Collect; +import com.x.base.core.project.config.Config; +import com.x.base.core.project.connection.ActionResponse; +import com.x.base.core.project.connection.ConnectionAction; import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.EffectivePerson; -import com.x.base.core.project.tools.DateTools; -import com.x.base.core.project.tools.StringTools; +import com.x.base.core.project.logger.Logger; +import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; +import com.x.base.core.project.tools.MD5Tool; import com.x.program.center.Business; -import com.x.program.center.core.entity.Application; -import com.x.program.center.core.entity.Application_; import com.x.program.center.core.entity.InstallLog; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; class ActionListPaging extends BaseAction { + private static Logger logger = LoggerFactory.getLogger(ActionListPaging.class); + ActionResult> execute(EffectivePerson effectivePerson, Integer page, Integer size, JsonElement jsonElement) throws Exception { - try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - Business business = new Business(emc); - - ActionResult> result = new ActionResult<>(); - Wi wi = this.convertToWrapIn(jsonElement, Wi.class); - Predicate p = this.toFilterPredicate(effectivePerson, business, wi); - String orderBy = Application.createTime_FIELDNAME; - if(StringUtils.isNotEmpty(wi.getOrderBy())){ - orderBy = wi.getOrderBy(); - } - List wos = new ArrayList<>(); - if(BooleanUtils.isTrue(wi.getAsc())){ - wos = emc.fetchAscPaging(Application.class, Wo.copier, p, page, size, orderBy); - }else { - wos = emc.fetchDescPaging(Application.class, Wo.copier, p, page, size, orderBy); - } - for(Wo wo : wos){ - InstallLog installLog = emc.find(wo.getId(), InstallLog.class); - if(installLog!=null && CommonStatus.VALID.getValue().equals(installLog.getStatus())){ - wo.setInstalledVersion(installLog.getVersion()); - }else{ - wo.setInstalledVersion(""); + + ActionResult> result = new ActionResult<>(); + List wos = new ArrayList<>(); + Cache.CacheKey cacheKey = new Cache.CacheKey(ActionListPaging.class, page, size, MD5Tool.getMD5Str(gson.toJson(jsonElement))); + Optional optional = CacheManager.get(cacheCategory, cacheKey); + if (optional.isPresent()) { + wos = (List) optional.get(); + } else { + String token = Business.loginCollect(); + if (StringUtils.isNotEmpty(token)) { + try { + JsonObject jsonObject = jsonElement.getAsJsonObject(); + jsonObject.addProperty("status", "publish"); + String url = StringUtils.replaceEach(COLLECT_MARKET_LIST_INFO, new String[]{"{page}", "{size}"}, + new String[]{String.valueOf(page), String.valueOf(size)}); + ActionResponse response = ConnectionAction.post( + Config.collect().url(url), + ListTools.toList(new NameValuePair(Collect.COLLECT_TOKEN, token)), jsonObject); + wos = response.getDataAsList(Wo.class); + result.setCount(response.getCount()); + } catch (Exception e) { + logger.warn("list market form o2cloud error: {}.", e.getMessage()); } } - result.setData(wos); - result.setCount(emc.count(Application.class, p)); - return result; - } - } - private Predicate toFilterPredicate(EffectivePerson effectivePerson, Business business, Wi wi) throws Exception { - EntityManager em = business.entityManagerContainer().get(Application.class); - CriteriaBuilder cb = em.getCriteriaBuilder(); - CriteriaQuery cq = cb.createQuery(Tuple.class); - Root root = cq.from(Application.class); - Predicate p = cb.conjunction(); - - if(StringUtils.isNotEmpty(wi.getName())){ - String key = StringTools.escapeSqlLikeKey(wi.getName()); - if (StringUtils.isNotEmpty(key)) { - p = cb.and(p,cb.like(root.get(Application_.name), "%" + key + "%", StringTools.SQL_ESCAPE_CHAR)); + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + for (Wo wo : wos) { + InstallLog installLog = emc.find(wo.getId(), InstallLog.class); + if (installLog != null && CommonStatus.VALID.getValue().equals(installLog.getStatus())) { + wo.setInstalledVersion(installLog.getVersion()); + } else { + wo.setInstalledVersion(""); + } + } } - } - if(StringUtils.isNotEmpty(wi.getCategory())){ - p = cb.and(p, cb.equal(root.get(Application_.category), wi.getCategory())); - } - - if (DateTools.isDateTimeOrDate(wi.getStartTime())) { - p = cb.and(p, cb.greaterThan(root.get(Application_.createTime), DateTools.parse(wi.getStartTime()))); - } - if (DateTools.isDateTimeOrDate(wi.getEndTime())) { - p = cb.and(p, cb.lessThan(root.get(Application_.createTime), DateTools.parse(wi.getEndTime()))); + if(ListTools.isNotEmpty(wos)){ + CacheManager.put(cacheCategory, cacheKey, wos); + } } - return p; + result.setData(wos); + return result; } public class Wi extends GsonPropertyObject { @@ -162,12 +147,7 @@ class ActionListPaging extends BaseAction { } } - public static class Wo extends Application { - - private static final long serialVersionUID = 9206739553467260926L; - - static WrapCopier copier = WrapCopierFactory.wo(Application.class, Wo.class, - JpaObject.singularAttributeField(Application.class, true, false), Arrays.asList("abort", "installSteps", "describe")); + public static class Wo extends Application2 { @FieldDescribe("已安装的版本,空表示未安装") private String installedVersion; diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionSync.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionSync.java deleted file mode 100644 index ee243c4b31..0000000000 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/ActionSync.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.x.program.center.jaxrs.market; - -import com.x.base.core.project.http.ActionResult; -import com.x.base.core.project.http.EffectivePerson; -import com.x.base.core.project.jaxrs.WrapBoolean; -import com.x.program.center.ThisApplication; -import com.x.program.center.schedule.CollectMarket; - -class ActionSync extends BaseAction { - - ActionResult execute(EffectivePerson effectivePerson) throws Exception { - ActionResult result = new ActionResult<>(); - Wo wo = new Wo(); - wo.setValue(true); - result.setData(wo); - ThisApplication.context().scheduleLocal(CollectMarket.class); - return result; - } - - public static class Wo extends WrapBoolean { - } - -} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/BaseAction.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/BaseAction.java index 1200e879c4..010324f648 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/BaseAction.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/BaseAction.java @@ -1,12 +1,23 @@ package com.x.program.center.jaxrs.market; +import com.x.base.core.project.annotation.FieldDescribe; +import com.x.base.core.project.cache.Cache; import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.program.center.WrapModule; +import java.util.Date; + abstract class BaseAction extends StandardJaxrsAction { + protected static String COLLECT_MARKET_CATEGORY = "/o2_collect_assemble/jaxrs/application2/list/category"; + protected static String COLLECT_MARKET_LIST_INFO = "/o2_collect_assemble/jaxrs/application2/list/paging/{page}/size/{size}"; + protected static String COLLECT_MARKET_INFO = "/o2_collect_assemble/jaxrs/application2/"; + protected static String COLLECT_UNIT_IS_VIP = "/o2_collect_assemble/jaxrs/unit/is/vip"; + + protected Cache.CacheCategory cacheCategory = new Cache.CacheCategory(InstallData.class); + public boolean hasAuth(EffectivePerson effectivePerson, String person){ if(effectivePerson.isManager()){ return true; @@ -24,11 +35,11 @@ abstract class BaseAction extends StandardJaxrsAction { private String customApp; - public com.x.program.center.WrapModule getWrapModule() { + public WrapModule getWrapModule() { return WrapModule; } - public void setWrapModule(com.x.program.center.WrapModule wrapModule) { + public void setWrapModule(WrapModule wrapModule) { WrapModule = wrapModule; } @@ -49,4 +60,293 @@ abstract class BaseAction extends StandardJaxrsAction { } } + public static class Application2 extends GsonPropertyObject{ + + @FieldDescribe("主键.") + private String id; + + @FieldDescribe("名称.必填") + private String name; + + @FieldDescribe("分类.必填") + private String category; + + @FieldDescribe("子分类.") + private String subCategory; + + @FieldDescribe("版本.必填") + private String version; + + @FieldDescribe("价格.") + private Double price; + + @FieldDescribe("状态:draft|audit|publish|invalid.") + private String status; + + @FieldDescribe("宣传图片url链接.") + private String broadcastPic; + + @FieldDescribe("封面图片url链接.") + private String indexPic; + + @FieldDescribe("视频url链接.") + private String video; + + @FieldDescribe("依赖中间件(如:onlyOffice)") + private String middleware; + + @FieldDescribe("适配O2的版本(向上兼容)") + private String o2Version; + + @FieldDescribe("配置文件配置地址(web端)") + private String configPath; + + @FieldDescribe("描述.必填") + private String describe; + + @FieldDescribe("应用简介.必填") + private String abort; + + @FieldDescribe("应用安装步骤.必填") + private String installSteps; + + @FieldDescribe("发布者.") + private String publisher; + + @FieldDescribe("发布时间") + private Date publishTime; + + @FieldDescribe("排序号,升序排列,为空在最后") + private Integer orderNumber; + + @FieldDescribe("推荐指数") + private Integer recommend; + + @FieldDescribe("下载次数") + private Integer downloadCount; + + @FieldDescribe("最后更新时间") + private Date lastUpdateTime; + + @FieldDescribe("安装后是否需要重启") + private Boolean restart = false; + + @FieldDescribe("是否是VIP应用") + private Boolean vipApp = false; + + @FieldDescribe("创建时间.") + private Date createTime; + + @FieldDescribe("修改时间.") + private Date updateTime; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getSubCategory() { + return subCategory; + } + + public void setSubCategory(String subCategory) { + this.subCategory = subCategory; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getBroadcastPic() { + return broadcastPic; + } + + public void setBroadcastPic(String broadcastPic) { + this.broadcastPic = broadcastPic; + } + + public String getIndexPic() { + return indexPic; + } + + public void setIndexPic(String indexPic) { + this.indexPic = indexPic; + } + + public String getVideo() { + return video; + } + + public void setVideo(String video) { + this.video = video; + } + + public String getMiddleware() { + return middleware; + } + + public void setMiddleware(String middleware) { + this.middleware = middleware; + } + + public String getO2Version() { + return o2Version; + } + + public void setO2Version(String o2Version) { + this.o2Version = o2Version; + } + + public String getConfigPath() { + return configPath; + } + + public void setConfigPath(String configPath) { + this.configPath = configPath; + } + + public String getDescribe() { + return describe; + } + + public void setDescribe(String describe) { + this.describe = describe; + } + + public String getAbort() { + return abort; + } + + public void setAbort(String abort) { + this.abort = abort; + } + + public String getInstallSteps() { + return installSteps; + } + + public void setInstallSteps(String installSteps) { + this.installSteps = installSteps; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + public Date getPublishTime() { + return publishTime; + } + + public void setPublishTime(Date publishTime) { + this.publishTime = publishTime; + } + + public Integer getOrderNumber() { + return orderNumber; + } + + public void setOrderNumber(Integer orderNumber) { + this.orderNumber = orderNumber; + } + + public Integer getRecommend() { + return recommend; + } + + public void setRecommend(Integer recommend) { + this.recommend = recommend; + } + + public Integer getDownloadCount() { + return downloadCount; + } + + public void setDownloadCount(Integer downloadCount) { + this.downloadCount = downloadCount; + } + + public Date getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(Date lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } + + public Boolean getRestart() { + return restart; + } + + public void setRestart(Boolean restart) { + this.restart = restart; + } + + public Boolean getVipApp() { + return vipApp; + } + + public void setVipApp(Boolean vipApp) { + this.vipApp = vipApp; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + } + } diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/MarketAction.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/MarketAction.java index d5847c85c3..d628c64c94 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/MarketAction.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/market/MarketAction.java @@ -87,23 +87,6 @@ public class MarketAction extends StandardJaxrsAction { asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } - @JaxrsMethodDescribe(value = "同步数据.", action = ActionSync.class) - @GET - @Path("sync") - @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) - @Consumes(MediaType.APPLICATION_JSON) - public void sync(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) { - ActionResult result = new ActionResult<>(); - EffectivePerson effectivePerson = this.effectivePerson(request); - try { - result = new ActionSync().execute(effectivePerson); - } catch (Exception e) { - logger.error(e, effectivePerson, request, null); - result.error(e); - } - asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); - } - @JaxrsMethodDescribe(value = "安装或更新应用.", action = ActionInstallOrUpdate.class) @GET @Path("{flag}/install/or/update") @@ -212,4 +195,21 @@ public class MarketAction extends StandardJaxrsAction { asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } -} \ No newline at end of file + @JaxrsMethodDescribe(value = "判断注册在O2云用户是否是VIP用户.", action = ActionIsVip.class) + @GET + @Path("cloud/unit/is/vip") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void cloudUnitIsVip(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) { + ActionResult result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionIsVip().execute(effectivePerson); + } catch (Exception e) { + logger.error(e, effectivePerson, request, null); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + +} diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/schedule/CollectMarket.java b/o2server/x_program_center/src/main/java/com/x/program/center/schedule/CollectMarket.java index 4074862de2..8e344a2a0a 100644 --- a/o2server/x_program_center/src/main/java/com/x/program/center/schedule/CollectMarket.java +++ b/o2server/x_program_center/src/main/java/com/x/program/center/schedule/CollectMarket.java @@ -29,6 +29,9 @@ import com.x.program.center.Business; import com.x.program.center.core.entity.Application; import com.x.program.center.core.entity.Attachment; +/** + * @author sword + */ public class CollectMarket extends BaseAction { private static Logger logger = LoggerFactory.getLogger(CollectMarket.class); @@ -41,8 +44,7 @@ public class CollectMarket extends BaseAction { try { if (pirmaryCenter() && BooleanUtils.isTrue(Config.collect().getEnable())) { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - Business business = new Business(emc); - String token = business.loginCollect(); + String token = Business.loginCollect(); if (StringUtils.isNotEmpty(token)) { logger.info("start sync market data."); List wiList = null; -- GitLab