From fd05f74cca085b1dca5f29e26d9684446c63a532 Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Wed, 29 Oct 2025 08:59:13 +0800 Subject: [PATCH] updated private cloud functions --- private-backend/.gitignore | 1 + private-backend/README.md | 10 +- ...er-1.5.0.jar => private-backend-1.5.0.jar} | Bin 44884587 -> 44885973 bytes private-backend/pom.xml | 2 +- .../server/businesslogic/IndexingLogic.java | 28 +++++- .../net/irext/server/utils/Constants.java | 2 +- private-console/routes/code_manage_routes.js | 1 - .../services/code_manage_service.js | 24 +---- private-console/web/code/index.html | 14 +-- .../work_unit/code_manage_logic.js | 94 +++++++++++++++++- 10 files changed, 133 insertions(+), 43 deletions(-) rename private-backend/package/{private-server-1.5.0.jar => private-backend-1.5.0.jar} (99%) diff --git a/private-backend/.gitignore b/private-backend/.gitignore index bcd3dc2..fac0b50 100644 --- a/private-backend/.gitignore +++ b/private-backend/.gitignore @@ -95,4 +95,5 @@ fabric.properties # Customized ignore files target +private-backend.iml private-server.iml diff --git a/private-backend/README.md b/private-backend/README.md index 4f8ed41..461679d 100644 --- a/private-backend/README.md +++ b/private-backend/README.md @@ -1,19 +1,19 @@ -# IRext private server +# IRext Private Backend Private server is a runtime that any user can deploy and access it with IRext restful web service call or SDK. ### Runtime environment - Java runtime 1.7 or above -- Mysql server 5.6 or above -- Redis service +- Mysql server 8.0 or above +- Redis server 4.0 or above - A Linux OS is preferred ### Deploy - Fetch or compile libirdecode_jni.so out of source code of irext/core. -- Run following command when you fetched or compiled the private-server.jar out of the private server Spring-Boot project. +- Run following command when you fetched or compiled the private-backend-.jar out of the private server Spring-Boot project. ```shell script -java -jar private-server.jar +java -jar private-backend-.jar ``` diff --git a/private-backend/package/private-server-1.5.0.jar b/private-backend/package/private-backend-1.5.0.jar similarity index 99% rename from private-backend/package/private-server-1.5.0.jar rename to private-backend/package/private-backend-1.5.0.jar index 1f1f618dd9701413ca3f8b4667a3868b39d0bb67..741cfa593688d7d8fd49d37f4938320842319d01 100644 GIT binary patch delta 47478 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

3KKGyY8LB#o|V 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 ZnxIACfScg}<^X0SiHt1Rv;_3c{~uX&QHB5j diff --git a/private-backend/pom.xml b/private-backend/pom.xml index 1b96d85..5fe115d 100644 --- a/private-backend/pom.xml +++ b/private-backend/pom.xml @@ -4,7 +4,7 @@ 4.0.0 net.irext.server - private-server + private-backend 1.5.0 jar diff --git a/private-backend/src/main/java/net/irext/server/businesslogic/IndexingLogic.java b/private-backend/src/main/java/net/irext/server/businesslogic/IndexingLogic.java index cda993e..09538a9 100644 --- a/private-backend/src/main/java/net/irext/server/businesslogic/IndexingLogic.java +++ b/private-backend/src/main/java/net/irext/server/businesslogic/IndexingLogic.java @@ -6,9 +6,11 @@ import net.irext.server.request.CreateRemoteReferenceRequest; import net.irext.server.utils.Constants; import net.irext.server.mapper.*; import net.irext.server.model.*; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -199,7 +201,7 @@ public class IndexingLogic { remoteRef.setBrandName(brandName); remoteRef.setCityCode(remoteIndex.getCityCode()); remoteRef.setOperatorId(remoteIndex.getOperatorId()); - remoteRef.setRemoteCode(remoteIndex.getId().toString()); + remoteRef.setRemoteCode(""); remoteRef.setRemote(remoteIndex.getRemote()); remoteRef.setProtocol(remoteIndex.getProtocol()); remoteRef.setRemoteMap(remoteIndex.getRemoteMap()); @@ -220,11 +222,29 @@ public class IndexingLogic { .url(url) .post(body) .build(); - Response response = client.newCall(request).execute(); - return response.body().string(); + + client.newCall(request).enqueue(new Callback() { + + @Override + public void onFailure(Request request, IOException e) { + System.err.println("remoteRef request failed: " + e.getMessage()); + } + + @Override + public void onResponse(Response response) throws IOException { + try { + if (!response.isSuccessful()) { + throw new IOException("unexpected code from remoteRef response: " + response); + } + + } catch (Exception e) { + System.err.println("error processing remoteRef response: " + e.getMessage()); + } + } + }); } catch (Exception e) { e.printStackTrace(); } - return null; + return null; } } diff --git a/private-backend/src/main/java/net/irext/server/utils/Constants.java b/private-backend/src/main/java/net/irext/server/utils/Constants.java index 9b28c07..136602d 100644 --- a/private-backend/src/main/java/net/irext/server/utils/Constants.java +++ b/private-backend/src/main/java/net/irext/server/utils/Constants.java @@ -32,7 +32,7 @@ public class Constants { public static final int STATUS_INVALID = 0; public static final int STATUS_PARA_DATA = 15; - public static final String REMOTE_REF_URL = "http://192.168.75.128:8083/irext-server/remote_ref/create_remote_ref"; + public static final String REMOTE_REF_URL = "http://srv.irext.net/irext-server/remote_ref/create_remote_ref"; public enum CategoryID { AIR_CONDITIONER(1), diff --git a/private-console/routes/code_manage_routes.js b/private-console/routes/code_manage_routes.js index be8e8af..2fa0532 100644 --- a/private-console/routes/code_manage_routes.js +++ b/private-console/routes/code_manage_routes.js @@ -13,7 +13,6 @@ app.post('/irext/int/list_categories', intService.listCategories); app.post('/irext/int/list_brands', intService.listBrands); app.post('/irext/int/list_indexes', intService.listIndexes); app.post('/irext/int/list_ir_protocols', intService.listIRProtocols); -app.post('/irext/int/download_bin', intService.downloadIndex); app.post('/irext/int/list_unpublished_brands', intService.listUnpublishedBrands); app.post('/irext/int/list_unpublished_remote_indexes', intService.listUnpublishedRemoteIndexes); diff --git a/private-console/services/code_manage_service.js b/private-console/services/code_manage_service.js index 7e663b6..e22f33e 100644 --- a/private-console/services/code_manage_service.js +++ b/private-console/services/code_manage_service.js @@ -233,26 +233,6 @@ exports.searchRemoteIndexes = function (req, res) { }); }; -/* - * function : Download remote binary by post request - * parameter : remote index ID - * return : Redirect to binary download - */ -exports.downloadIndex = function (req, res) { - let remoteIndexID = req.body.index_id; - - internalLogic.downloadRemoteBinCachedWorkUnit(remoteIndexID, function (serveBinErr, filePath) { - if (errorCode.SUCCESS.code === serveBinErr.code) { - logger.info("download file located at " + filePath); - res.download(filePath, ""); - } else { - logger.info("download file failed"); - res.write(''); - res.end(); - } - }); -}; - /* * function : Download remote binary * parameter : remote index ID @@ -260,8 +240,10 @@ exports.downloadIndex = function (req, res) { */ exports.downloadRemoteIndex = function (req, res) { let remoteIndexID = req.query.remote_index_id; + let adminId = req.query.admin_id; + let token = req.query.token; - internalLogic.downloadRemoteBinCachedWorkUnit(remoteIndexID, function (serveBinErr, filePath) { + internalLogic.downloadRemoteBinCachedWorkUnit(adminId, token, remoteIndexID, function (serveBinErr, filePath) { if (errorCode.SUCCESS.code === serveBinErr.code) { logger.info("download file located at " + filePath); res.download(filePath, ""); diff --git a/private-console/web/code/index.html b/private-console/web/code/index.html index 5a21ffe..2ba4212 100644 --- a/private-console/web/code/index.html +++ b/private-console/web/code/index.html @@ -63,25 +63,25 @@


- - - - - - -
diff --git a/private-console/work_unit/code_manage_logic.js b/private-console/work_unit/code_manage_logic.js index 2e8e173..266136b 100644 --- a/private-console/work_unit/code_manage_logic.js +++ b/private-console/work_unit/code_manage_logic.js @@ -40,9 +40,10 @@ let adminAuth = new AdminAuth(REDIS_HOST, REDIS_PORT, null, REDIS_PASSWORD); // relative XML file path let PROTOCOL_PATH = "protocol"; -let contributeProtocolService = "/irext-server/contribute/contribute_protocol"; +let contributeProtocolService = "/irext-server/contribution/contribute_protocol"; let contributeBrandsService = "/irext-server/contribution/contribute_brands"; let contributeRemoteIndexesService = "/irext-server/contribution/contribute_remote_indexes"; +let createRemoteRefService = "/irext-server/remote_ref/create_remote_ref"; exports.listCategoriesWorkUnit = function (lang, from, count, callback) { let conditions = { @@ -331,7 +332,7 @@ exports.searchRemoteIndexesWorkUnit = function (lang, remoteMap, from, count, ca }); }; -exports.downloadRemoteBinCachedWorkUnit = function (remoteIndexID, callback) { +exports.downloadRemoteBinCachedWorkUnit = function (adminId, token, remoteIndexID, callback) { RemoteIndex.getRemoteIndexByID(remoteIndexID, function (getRemoteIndexErr, remoteIndex) { if (errorCode.SUCCESS.code === getRemoteIndexErr.code && null != remoteIndex) { let fileName = "irda_" + remoteIndex.protocol + "_" + remoteIndex.remote + ".bin"; @@ -342,6 +343,93 @@ exports.downloadRemoteBinCachedWorkUnit = function (remoteIndexID, callback) { fs.exists(localBinFileName, function (exists) { if (exists) { logger.info("file " + localBinFileName + " already exists, serve directly"); + // create remote reference of this remote index + let categoryId = 0; + let categoryName = ''; + let brandId = 0; + let brandName = ''; + let name = ''; + let remoteRef = null; + RemoteIndex.getRemoteIndexByID(remoteIndexID, function (getRemoteIndexErr, remoteIndex) { + if (errorCode.SUCCESS.code === getRemoteIndexErr.code) { + categoryId = remoteIndex.category_id; + brandId = remoteIndex.brand_id; + Category.getCategoryByID(categoryId, function (getCategoryErr, category) { + if (errorCode.SUCCESS.code === getCategoryErr.code) { + categoryName = category.name; + if (enums.CATEGORY_STB !== categoryId) { + Brand.getBrandByID(brandId, function (getBrandErr, brand) { + if (errorCode.SUCCESS.code === getBrandErr.code) { + brandName = brand.name; + name = brandName + categoryName; + remoteRef = { + "name": name, + "categoryId": categoryId, + "categoryName": categoryName, + "brandId": brandId, + "brandName": brandName, + "cityCode": "", + "operatorId": 0, + "remoteCode": "", + "subCate": remoteIndex.sub_cate, + "protocol": remoteIndex.protocol, + "remote": remoteIndex.remote, + "remoteMap": remoteIndex.remote_map, + } + let queryParams = new Map(); + let requestSender = + new RequestSender(EXTERNAL_SERVER_ADDRESS, + EXTERNAL_SERVER_PORT, + createRemoteRefService, + queryParams); + let createRemoteRefRequest = { + "id": adminId, + "token": token, + "remoteRef": remoteRef, + }; + requestSender.sendPostRequest(createRemoteRefRequest, + function (createRemoteRefErr, createRemoteRefResponse) { + logger.info(createRemoteRefErr); + }); + } + }); + } else { + name = categoryName + "-" + remoteIndex.city_code + "-" + remoteIndex.operator_id; + remoteRef = { + "name": name, + "categoryId": categoryId, + "categoryName": categoryName, + "brandId": 0, + "brandName": "", + "cityCode": remoteIndex.city_code, + "operatorId": remoteIndex.operator_id, + "remoteCode": "", + "subCate": remoteIndex.sub_cate, + "protocol": remoteIndex.protocol, + "remote": remoteIndex.remote, + "remoteMap": remoteIndex.remote_map, + } + let queryParams = new Map(); + let requestSender = + new RequestSender(EXTERNAL_SERVER_ADDRESS, + EXTERNAL_SERVER_PORT, + createRemoteRefService, + queryParams); + let createRemoteRefRequest = { + "id": adminId, + "token": token, + "remoteRef": remoteRef, + }; + requestSender.sendPostRequest(createRemoteRefRequest, + function (createRemoteRefErr, createRemoteRefResponse) { + logger.info(createRemoteRefErr); + }); + } + } + }); + } + }); + callback(error, localBinFileName); } else { logger.info("file " + localBinFileName + " does not exist"); @@ -848,7 +936,7 @@ exports.publishBrandsWorkUnit = function (adminID, callback) { function (contributeBrandsRequestErr, contributeBrandsResponse) { logger.info(contributeBrandsRequestErr); callback(errorCode.SUCCESS); - }); + }); callback(errorCode.SUCCESS); }); } else {