From 0505a6dbd495cee698b4d2571287dbcf027a23c7 Mon Sep 17 00:00:00 2001
From: unknown <627433532@qq.com>
Date: Tue, 29 Jul 2025 15:53:22 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A2=84=E6=8E=88=E6=9D=83?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF/=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA?=
=?UTF-8?q?=E4=B9=B1=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../finance/agent/api/FetchActor.java | 337 +++++++++---------
.../model/lbs.floor/entity.json | 38 ++
2 files changed, 207 insertions(+), 168 deletions(-)
diff --git a/Zero.Extension.Commerce.Finance.DB/src/main/java/io/zerows/extension/commerce/finance/agent/api/FetchActor.java b/Zero.Extension.Commerce.Finance.DB/src/main/java/io/zerows/extension/commerce/finance/agent/api/FetchActor.java
index 81107edb..ae93bcbe 100644
--- a/Zero.Extension.Commerce.Finance.DB/src/main/java/io/zerows/extension/commerce/finance/agent/api/FetchActor.java
+++ b/Zero.Extension.Commerce.Finance.DB/src/main/java/io/zerows/extension/commerce/finance/agent/api/FetchActor.java
@@ -1,168 +1,169 @@
-package io.zerows.extension.commerce.finance.agent.api;
-
-import io.zerows.extension.commerce.finance.domain.tables.daos.FBillDao;
-import io.zerows.extension.commerce.finance.domain.tables.daos.FBillItemDao;
-import io.zerows.extension.commerce.finance.domain.tables.daos.FTransDao;
-import io.zerows.extension.commerce.finance.domain.tables.daos.FTransItemDao;
-import io.zerows.extension.commerce.finance.domain.tables.pojos.FBill;
-import io.zerows.extension.commerce.finance.agent.service.BookStub;
-import io.zerows.extension.commerce.finance.agent.service.FetchStub;
-import io.zerows.extension.commerce.finance.agent.service.end.SettleRStub;
-import io.zerows.extension.commerce.finance.agent.service.end.TransStub;
-import io.vertx.core.Future;
-import io.vertx.core.json.JsonArray;
-import io.vertx.core.json.JsonObject;
-import io.zerows.extension.commerce.finance.domain.tables.pojos.FSettlement;
-import io.zerows.extension.commerce.finance.domain.tables.pojos.FTrans;
-import io.zerows.extension.commerce.finance.domain.tables.pojos.FTransItem;
-import io.zerows.extension.commerce.finance.eon.Addr;
-import io.vertx.up.annotations.Address;
-import io.vertx.up.annotations.Queue;
-import io.vertx.up.eon.KName;
-import io.vertx.up.fn.Fn;
-import io.vertx.up.unity.Ux;
-import io.vertx.up.util.Ut;
-import io.zerows.extension.commerce.finance.atom.BillData;
-import jakarta.inject.Inject;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * @author Lang
- */
-@Queue
-public class FetchActor {
- @Inject
- private transient FetchStub fetchStub;
- @Inject
- private transient BookStub bookStub;
- @Inject
- private transient SettleRStub qrStub;
-
- @Inject
- private transient TransStub transStub;
-
- @Address(Addr.BillItem.FETCH_AGGR)
- public Future fetchAggr(final String orderId) {
- final BillData data = new BillData();
- /* 按照 orderId 查询账单集合信息 */
- return this.fetchStub.fetchByOrder(orderId)
- .compose(data::bill)
-
-
- /* 根据账单查询 账单明细 信息 */
- .compose(bills -> this.fetchStub.fetchByBills(bills))
- .compose(data::items)
-
-
- /* 根据账单明细查询 结算单 信息 */
- .compose(this.fetchStub::fetchSettlements)
- .compose(data::settlement)
-
- /*
- * 旧版本多查询了一步,但实际这个步骤查询下来没有任何用
- * 根据结算单查询 交易明细 信息
- */
- .compose(nil -> data.response(false));
- }
-
-
- @Address(Addr.Bill.FETCH_BILLS)
- public Future fetchBills(final JsonObject query) {
- // Search Bills by Pagination ( Qr Engine )
- return Ux.Jooq.on(FBillDao.class).searchAsync(query).compose(response -> {
- final JsonArray bill = Ut.valueJArray(response, KName.LIST);
- final Set bills = Ut.valueSetString(bill, KName.KEY);
- return Ux.Jooq.on(FBillItemDao.class).fetchJInAsync("billId", Ut.toJArray(bills))
- .compose(items -> {
- final ConcurrentMap grouped = Ut.elementGroup(items, "billId");
- Ut.itJArray(bill).forEach(json -> {
- final String key = json.getString(KName.KEY);
- if (grouped.containsKey(key)) {
- json.put(KName.ITEMS, grouped.getOrDefault(key, new JsonArray()));
- } else {
- json.put(KName.ITEMS, new JsonArray());
- }
- });
- response.put(KName.LIST, bill);
- return Ux.future(response);
- });
- });
- // return Ux.Jooq.on(FBillDao.class).searchAsync(query);
- }
-
- @Address(Addr.Bill.FETCH_BILL)
- public Future fetchByKey(final String key) {
- // Fetch Bill details
- /*
- * {
- * "items":
- * "settlements":
- * }
- */
- final JsonObject response = new JsonObject();
- return Ux.Jooq.on(FBillDao.class).fetchByIdAsync(key).compose(bill -> {
- if (Objects.isNull(bill)) {
- return Ux.futureJ();
- }
- response.mergeIn(Ux.toJson(bill));
- final List bills = new ArrayList<>();
- bills.add(bill);
- return this.fetchStub.fetchByBills(bills).compose(items -> {
- response.put(KName.ITEMS, Ux.toJson(items));
- return this.fetchStub.fetchSettlements(items);
- }).compose(settlements -> {
- Set serial = null;
- for (FSettlement item : settlements) {
- serial = Set.of("ST:" + item.getSerial());
- }
- return Ux.Jooq.on(FTransDao.class).fetchAsync("NAME", serial)
- .compose(fTrans -> {
- Set seria = null;
- for (FTrans item : fTrans) {
- seria = Set.of(item.getKey());
- }
- return Ux.Jooq.on(FTransItemDao.class).fetchAsync("TRANSACTION_ID", seria);
- }).compose(fTransItems -> {
- final JsonArray settlementJ = Ux.toJson(settlements);
- final JsonArray newSettlements = new JsonArray();
- settlementJ.forEach(item -> {
- final JsonObject entries = Ux.toJson(item);
- entries.put("payment", Ux.toJson(fTransItems));
- newSettlements.add(entries);
- });
- response.put("settlements", newSettlements);
- return Ux.future(response);
- });
- }).otherwise(Ux.otherwise(new JsonObject()));
- });
- }
-
- @Address(Addr.BillItem.FETCH_BOOK)
- public Future fetchBooks(final String orderId) {
- return this.bookStub.fetchByOrder(orderId)
- .compose(books -> this.bookStub.fetchAuthorize(books)
- .compose(authorized -> {
- // Books Joined into PreAuthorize
- final JsonArray bookArray = Ux.toJson(books);
- final JsonArray authArray = Ux.toJson(authorized);
- final ConcurrentMap grouped = Ut.elementGroup(authArray, "bookId");
- Ut.itJArray(bookArray).forEach(bookJson -> {
- final String key = bookJson.getString(KName.KEY);
- bookJson.put("authorize", grouped.getOrDefault(key, new JsonArray()));
- });
- return Ux.future(bookArray);
- })
- );
- }
-
- @Address(Addr.BillItem.FETCH_BOOK_BY_KEY)
- public Future fetchBook(final String bookId) {
- // Null Prevent
- return Fn.ofJObject(this.bookStub::fetchByKey).apply(bookId);
- }
-}
+package io.zerows.extension.commerce.finance.agent.api;
+
+import io.zerows.extension.commerce.finance.domain.tables.daos.*;
+import io.zerows.extension.commerce.finance.domain.tables.pojos.*;
+import io.zerows.extension.commerce.finance.agent.service.BookStub;
+import io.zerows.extension.commerce.finance.agent.service.FetchStub;
+import io.zerows.extension.commerce.finance.agent.service.end.SettleRStub;
+import io.zerows.extension.commerce.finance.agent.service.end.TransStub;
+import io.vertx.core.Future;
+import io.vertx.core.json.JsonArray;
+import io.vertx.core.json.JsonObject;
+import io.zerows.extension.commerce.finance.eon.Addr;
+import io.vertx.up.annotations.Address;
+import io.vertx.up.annotations.Queue;
+import io.vertx.up.eon.KName;
+import io.vertx.up.fn.Fn;
+import io.vertx.up.unity.Ux;
+import io.vertx.up.util.Ut;
+import io.zerows.extension.commerce.finance.atom.BillData;
+import jakarta.inject.Inject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * @author Lang
+ */
+@Queue
+public class FetchActor {
+ @Inject
+ private transient FetchStub fetchStub;
+ @Inject
+ private transient BookStub bookStub;
+ @Inject
+ private transient SettleRStub qrStub;
+
+ @Inject
+ private transient TransStub transStub;
+
+ @Address(Addr.BillItem.FETCH_AGGR)
+ public Future fetchAggr(final String orderId) {
+ final BillData data = new BillData();
+ /* 按照 orderId 查询账单集合信息 */
+ return this.fetchStub.fetchByOrder(orderId)
+ .compose(data::bill)
+
+
+ /* 根据账单查询 账单明细 信息 */
+ .compose(bills -> this.fetchStub.fetchByBills(bills))
+ .compose(data::items)
+
+
+ /* 根据账单明细查询 结算单 信息 */
+ .compose(this.fetchStub::fetchSettlements)
+ .compose(data::settlement)
+
+ /*
+ * 旧版本多查询了一步,但实际这个步骤查询下来没有任何用
+ * 根据结算单查询 交易明细 信息
+ */
+ .compose(nil -> data.response(false))
+ /*
+ * 查询预授权信息
+ */
+ .compose(dataSouse-> Ux.Jooq.on(FPreAuthorizeDao.class).fetchAsync("orderId",orderId).compose(item->{
+ dataSouse.put("preAuthorize", item.isEmpty() ?new JsonArray(): Ux.toJson(item));
+ return Ux.future(dataSouse);
+ }));
+ }
+
+
+ @Address(Addr.Bill.FETCH_BILLS)
+ public Future fetchBills(final JsonObject query) {
+ // Search Bills by Pagination ( Qr Engine )
+ return Ux.Jooq.on(FBillDao.class).searchAsync(query).compose(response -> {
+ final JsonArray bill = Ut.valueJArray(response, KName.LIST);
+ final Set bills = Ut.valueSetString(bill, KName.KEY);
+ return Ux.Jooq.on(FBillItemDao.class).fetchJInAsync("billId", Ut.toJArray(bills))
+ .compose(items -> {
+ final ConcurrentMap grouped = Ut.elementGroup(items, "billId");
+ Ut.itJArray(bill).forEach(json -> {
+ final String key = json.getString(KName.KEY);
+ if (grouped.containsKey(key)) {
+ json.put(KName.ITEMS, grouped.getOrDefault(key, new JsonArray()));
+ } else {
+ json.put(KName.ITEMS, new JsonArray());
+ }
+ });
+ response.put(KName.LIST, bill);
+ return Ux.future(response);
+ });
+ });
+ // return Ux.Jooq.on(FBillDao.class).searchAsync(query);
+ }
+
+ @Address(Addr.Bill.FETCH_BILL)
+ public Future fetchByKey(final String key) {
+ // Fetch Bill details
+ /*
+ * {
+ * "items":
+ * "settlements":
+ * }
+ */
+ final JsonObject response = new JsonObject();
+ return Ux.Jooq.on(FBillDao.class).fetchByIdAsync(key).compose(bill -> {
+ if (Objects.isNull(bill)) {
+ return Ux.futureJ();
+ }
+ response.mergeIn(Ux.toJson(bill));
+ final List bills = new ArrayList<>();
+ bills.add(bill);
+ return this.fetchStub.fetchByBills(bills).compose(items -> {
+ response.put(KName.ITEMS, Ux.toJson(items));
+ return this.fetchStub.fetchSettlements(items);
+ }).compose(settlements -> {
+ Set serial = null;
+ for (FSettlement item : settlements) {
+ serial = Set.of("ST:" + item.getSerial());
+ }
+ return Ux.Jooq.on(FTransDao.class).fetchAsync("NAME", serial)
+ .compose(fTrans -> {
+ Set seria = null;
+ for (FTrans item : fTrans) {
+ seria = Set.of(item.getKey());
+ }
+ return Ux.Jooq.on(FTransItemDao.class).fetchAsync("TRANSACTION_ID", seria);
+ }).compose(fTransItems -> {
+ final JsonArray settlementJ = Ux.toJson(settlements);
+ final JsonArray newSettlements = new JsonArray();
+ settlementJ.forEach(item -> {
+ final JsonObject entries = Ux.toJson(item);
+ entries.put("payment", Ux.toJson(fTransItems));
+ newSettlements.add(entries);
+ });
+ response.put("settlements", newSettlements);
+ return Ux.future(response);
+ });
+ }).otherwise(Ux.otherwise(new JsonObject()));
+ });
+ }
+
+ @Address(Addr.BillItem.FETCH_BOOK)
+ public Future fetchBooks(final String orderId) {
+ return this.bookStub.fetchByOrder(orderId)
+ .compose(books -> this.bookStub.fetchAuthorize(books)
+ .compose(authorized -> {
+ // Books Joined into PreAuthorize
+ final JsonArray bookArray = Ux.toJson(books);
+ final JsonArray authArray = Ux.toJson(authorized);
+ final ConcurrentMap grouped = Ut.elementGroup(authArray, "bookId");
+ Ut.itJArray(bookArray).forEach(bookJson -> {
+ final String key = bookJson.getString(KName.KEY);
+ bookJson.put("authorize", grouped.getOrDefault(key, new JsonArray()));
+ });
+ return Ux.future(bookArray);
+ })
+ );
+ }
+
+ @Address(Addr.BillItem.FETCH_BOOK_BY_KEY)
+ public Future fetchBook(final String bookId) {
+ // Null Prevent
+ return Fn.ofJObject(this.bookStub::fetchByKey).apply(bookId);
+ }
+}
diff --git a/Zero.Extension.Commerce.LBS.DB/src/main/resources/plugins/zero-extension-commerce-lbs/model/lbs.floor/entity.json b/Zero.Extension.Commerce.LBS.DB/src/main/resources/plugins/zero-extension-commerce-lbs/model/lbs.floor/entity.json
index d5e90d19..65d6caef 100644
--- a/Zero.Extension.Commerce.LBS.DB/src/main/resources/plugins/zero-extension-commerce-lbs/model/lbs.floor/entity.json
+++ b/Zero.Extension.Commerce.LBS.DB/src/main/resources/plugins/zero-extension-commerce-lbs/model/lbs.floor/entity.json
@@ -8,5 +8,43 @@
"sigma"
]
]
+ },
+ "transform": {
+ "fabric": {
+ "source": [
+ {
+ "source": "ASSIST",
+ "key": "location.tents",
+ "component": "io.zerows.extension.commerce.lbs.osgi.spi.TentDict"
+ },
+ {
+ "source": "ASSIST",
+ "key": "location.floors",
+ "component": "io.zerows.extension.commerce.lbs.osgi.spi.FloorDict"
+ },
+ {
+ "source": "ASSIST",
+ "key": "room.types",
+ "component": "com.needee.spi.dict.RoomTypeDict"
+ }
+ ],
+ "epsilon": {
+ "tentId": {
+ "source": "location.tents",
+ "in": "name",
+ "out": "key"
+ },
+ "floorId": {
+ "source": "location.floors",
+ "in": "name",
+ "out": "key"
+ },
+ "roomTypeId": {
+ "source": "room.types",
+ "in": "name",
+ "out": "key"
+ }
+ }
+ }
}
}
\ No newline at end of file
--
Gitee