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