diff --git a/zero-fm/src/main/java/cn/vertxup/fm/api/FetchActor.java b/zero-fm/src/main/java/cn/vertxup/fm/api/FetchActor.java index 4d57afedb03f8d9f4095146bf704d2df45d96ac8..04340ea63f535be1d2f61d1845ee51abe8f237ed 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/api/FetchActor.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/api/FetchActor.java @@ -62,7 +62,7 @@ public class FetchActor { * 旧版本多查询了一步,但实际这个步骤查询下来没有任何用 * 根据结算单查询 交易明细 信息 */ - .compose(nil -> data.response(true)); + .compose(nil -> data.response(false)); } diff --git a/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyActor.java b/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyActor.java index 66cd3b1c9007f3c372b12aa7836f6e4d81601c9e..10923926fb75d6a1272af4f049176d5598f5494e 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyActor.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyActor.java @@ -46,7 +46,10 @@ public class VarietyActor { public Future upRevert(final String key, final JsonObject data) { return Maker.upBI().buildAsync(data, key).compose(item -> { final FBillItem to = Ux.fromJson(data.getJsonObject("item"), FBillItem.class); - return this.varietyStub.revertAsync(item, to); + return this.varietyStub.revertAsync(item, to).compose(json->{ + json.put("realname",data.getString("realname")); + return Ux.future(json); + }); }); } diff --git a/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyAgent.java b/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyAgent.java index 40040278cdf85c23114d1e34c7b2e395c95009fe..bd3556603e5228e5f9a033f7ffd085c177d88d55 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyAgent.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/api/income/VarietyAgent.java @@ -4,6 +4,7 @@ import io.vertx.core.json.JsonObject; import io.vertx.mod.fm.cv.Addr; import io.vertx.up.annotations.Address; import io.vertx.up.annotations.EndPoint; +import io.vertx.up.annotations.Off; import io.vertx.up.eon.KName; import jakarta.ws.rs.BodyParam; import jakarta.ws.rs.PUT; @@ -42,6 +43,7 @@ public interface VarietyAgent { @PUT @Path("/bill-item/revert/:key") @Address(Addr.BillItem.UP_REVERT) + @Off(address = Addr.Notify.REVERSAL_ORDER) JsonObject upRevert(@PathParam(KName.KEY) String key, @BodyParam JsonObject data); /** diff --git a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/interfaces/IFBill.java b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/interfaces/IFBill.java index 7f34bf4e495f908743bfe120d371005e8fc92761..d1c219e94cf11ba0c5edff673a1a4706bde30bee 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/interfaces/IFBill.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/interfaces/IFBill.java @@ -250,58 +250,58 @@ public interface IFBill extends VertxPojo, Serializable { */ public E into(E into); - @Override - public default IFBill fromJson(io.vertx.core.json.JsonObject json) { - setOrThrow(this::setKey,json::getString,"KEY","java.lang.String"); - setOrThrow(this::setName,json::getString,"NAME","java.lang.String"); - setOrThrow(this::setCode,json::getString,"CODE","java.lang.String"); - setOrThrow(this::setSerial,json::getString,"SERIAL","java.lang.String"); - setOrThrow(this::setType,json::getString,"TYPE","java.lang.String"); - setOrThrow(this::setCategory,json::getString,"CATEGORY","java.lang.String"); - setOrThrow(this::setAmount,key -> {String s = json.getString(key); return s==null?null:new java.math.BigDecimal(s);},"AMOUNT","java.math.BigDecimal"); - setOrThrow(this::setIncome,json::getBoolean,"INCOME","java.lang.Boolean"); - setOrThrow(this::setComment,json::getString,"COMMENT","java.lang.String"); - setOrThrow(this::setOrderId,json::getString,"ORDER_ID","java.lang.String"); - setOrThrow(this::setBookId,json::getString,"BOOK_ID","java.lang.String"); - setOrThrow(this::setModelId,json::getString,"MODEL_ID","java.lang.String"); - setOrThrow(this::setModelKey,json::getString,"MODEL_KEY","java.lang.String"); - setOrThrow(this::setSigma,json::getString,"SIGMA","java.lang.String"); - setOrThrow(this::setLanguage,json::getString,"LANGUAGE","java.lang.String"); - setOrThrow(this::setActive,json::getBoolean,"ACTIVE","java.lang.Boolean"); - setOrThrow(this::setMetadata,json::getString,"METADATA","java.lang.String"); - setOrThrow(this::setCreatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CREATED_AT","java.time.LocalDateTime"); - setOrThrow(this::setCreatedBy,json::getString,"CREATED_BY","java.lang.String"); - setOrThrow(this::setUpdatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"UPDATED_AT","java.time.LocalDateTime"); - setOrThrow(this::setUpdatedBy,json::getString,"UPDATED_BY","java.lang.String"); - return this; - } - - - @Override - public default io.vertx.core.json.JsonObject toJson() { - io.vertx.core.json.JsonObject json = new io.vertx.core.json.JsonObject(); - json.put("KEY",getKey()); - json.put("NAME",getName()); - json.put("CODE",getCode()); - json.put("SERIAL",getSerial()); - json.put("TYPE",getType()); - json.put("CATEGORY",getCategory()); - json.put("AMOUNT",getAmount()==null?null:getAmount().toString()); - json.put("INCOME",getIncome()); - json.put("COMMENT",getComment()); - json.put("ORDER_ID",getOrderId()); - json.put("BOOK_ID",getBookId()); - json.put("MODEL_ID",getModelId()); - json.put("MODEL_KEY",getModelKey()); - json.put("SIGMA",getSigma()); - json.put("LANGUAGE",getLanguage()); - json.put("ACTIVE",getActive()); - json.put("METADATA",getMetadata()); - json.put("CREATED_AT",getCreatedAt()==null?null:getCreatedAt().toString()); - json.put("CREATED_BY",getCreatedBy()); - json.put("UPDATED_AT",getUpdatedAt()==null?null:getUpdatedAt().toString()); - json.put("UPDATED_BY",getUpdatedBy()); - return json; - } + @Override + public default IFBill fromJson(io.vertx.core.json.JsonObject json) { + setOrThrow(this::setKey,json::getString,"KEY","java.lang.String"); + setOrThrow(this::setName,json::getString,"NAME","java.lang.String"); + setOrThrow(this::setCode,json::getString,"CODE","java.lang.String"); + setOrThrow(this::setSerial,json::getString,"SERIAL","java.lang.String"); + setOrThrow(this::setType,json::getString,"TYPE","java.lang.String"); + setOrThrow(this::setCategory,json::getString,"CATEGORY","java.lang.String"); + setOrThrow(this::setAmount,key -> {String s = json.getString(key); return s==null?null:new java.math.BigDecimal(s);},"AMOUNT","java.math.BigDecimal"); + setOrThrow(this::setIncome,json::getBoolean,"INCOME","java.lang.Boolean"); + setOrThrow(this::setComment,json::getString,"COMMENT","java.lang.String"); + setOrThrow(this::setOrderId,json::getString,"ORDER_ID","java.lang.String"); + setOrThrow(this::setBookId,json::getString,"BOOK_ID","java.lang.String"); + setOrThrow(this::setModelId,json::getString,"MODEL_ID","java.lang.String"); + setOrThrow(this::setModelKey,json::getString,"MODEL_KEY","java.lang.String"); + setOrThrow(this::setSigma,json::getString,"SIGMA","java.lang.String"); + setOrThrow(this::setLanguage,json::getString,"LANGUAGE","java.lang.String"); + setOrThrow(this::setActive,json::getBoolean,"ACTIVE","java.lang.Boolean"); + setOrThrow(this::setMetadata,json::getString,"METADATA","java.lang.String"); + setOrThrow(this::setCreatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CREATED_AT","java.time.LocalDateTime"); + setOrThrow(this::setCreatedBy,json::getString,"CREATED_BY","java.lang.String"); + setOrThrow(this::setUpdatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"UPDATED_AT","java.time.LocalDateTime"); + setOrThrow(this::setUpdatedBy,json::getString,"UPDATED_BY","java.lang.String"); + return this; + } + + + @Override + public default io.vertx.core.json.JsonObject toJson() { + io.vertx.core.json.JsonObject json = new io.vertx.core.json.JsonObject(); + json.put("KEY",getKey()); + json.put("NAME",getName()); + json.put("CODE",getCode()); + json.put("SERIAL",getSerial()); + json.put("TYPE",getType()); + json.put("CATEGORY",getCategory()); + json.put("AMOUNT",getAmount()==null?null:getAmount().toString()); + json.put("INCOME",getIncome()); + json.put("COMMENT",getComment()); + json.put("ORDER_ID",getOrderId()); + json.put("BOOK_ID",getBookId()); + json.put("MODEL_ID",getModelId()); + json.put("MODEL_KEY",getModelKey()); + json.put("SIGMA",getSigma()); + json.put("LANGUAGE",getLanguage()); + json.put("ACTIVE",getActive()); + json.put("METADATA",getMetadata()); + json.put("CREATED_AT",getCreatedAt()==null?null:getCreatedAt().toString()); + json.put("CREATED_BY",getCreatedBy()); + json.put("UPDATED_AT",getUpdatedAt()==null?null:getUpdatedAt().toString()); + json.put("UPDATED_BY",getUpdatedBy()); + return json; + } } diff --git a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/pojos/FBill.java b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/pojos/FBill.java index 95a8dcdd94c240d010db9484918769374053af84..61d5eae61d56bb3f59a8f9ea218f8164c0287b60 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/pojos/FBill.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/pojos/FBill.java @@ -70,27 +70,27 @@ public class FBill implements VertxPojo, IFBill { } public FBill( - String key, - String name, - String code, - String serial, - String type, - String category, - BigDecimal amount, - Boolean income, - String comment, - String orderId, - String bookId, - String modelId, - String modelKey, - String sigma, - String language, - Boolean active, - String metadata, - LocalDateTime createdAt, - String createdBy, - LocalDateTime updatedAt, - String updatedBy + String key, + String name, + String code, + String serial, + String type, + String category, + BigDecimal amount, + Boolean income, + String comment, + String orderId, + String bookId, + String modelId, + String modelKey, + String sigma, + String language, + Boolean active, + String metadata, + LocalDateTime createdAt, + String createdBy, + LocalDateTime updatedAt, + String updatedBy ) { this.key = key; this.name = name; @@ -115,10 +115,10 @@ public class FBill implements VertxPojo, IFBill { this.updatedBy = updatedBy; } - public FBill(io.vertx.core.json.JsonObject json) { - this(); - fromJson(json); - } + public FBill(io.vertx.core.json.JsonObject json) { + this(); + fromJson(json); + } /** * Getter for ZDB.F_BILL.KEY. 「key」- 账单主键 diff --git a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/records/FBillRecord.java b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/records/FBillRecord.java index 0d05b0abeeec09ea1761200a9fdd63f0e8838ef0..ff1fb67a24687fb3aa0586ef63a65716c711a0e5 100644 --- a/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/records/FBillRecord.java +++ b/zero-fm/src/main/java/cn/vertxup/fm/domain/tables/records/FBillRecord.java @@ -990,8 +990,8 @@ public class FBillRecord extends UpdatableRecordImpl implements Ver } } - public FBillRecord(io.vertx.core.json.JsonObject json) { - this(); - fromJson(json); - } + public FBillRecord(io.vertx.core.json.JsonObject json) { + this(); + fromJson(json); + } } diff --git a/zero-fm/src/main/modulat/io/vertx/mod/fm/cv/Addr.java b/zero-fm/src/main/modulat/io/vertx/mod/fm/cv/Addr.java index 6256ad8f11d145f2a593eb95877d7a4b818a5e6e..c49dc4a4029b910cb26f99d6b9d168c677f68e6e 100644 --- a/zero-fm/src/main/modulat/io/vertx/mod/fm/cv/Addr.java +++ b/zero-fm/src/main/modulat/io/vertx/mod/fm/cv/Addr.java @@ -57,4 +57,7 @@ public interface Addr { String FETCH_BY_KEY = Prefix._EVENT + "TRANS-BY/KEY"; } + interface Notify { + String REVERSAL_ORDER = Prefix._EVENT + "NOTIFY/REVERSAL/ORDER"; + } } diff --git a/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalOrder.java b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalOrder.java new file mode 100644 index 0000000000000000000000000000000000000000..a6e0da0ce6e51116f71be131120071b8448fcb98 --- /dev/null +++ b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalOrder.java @@ -0,0 +1,50 @@ +package io.vertx.mod.fm.uca.notification; + +import cn.vertxup.fm.domain.tables.daos.FBillDao; +import cn.vertxup.fm.domain.tables.pojos.FBill; +import io.horizon.spi.feature.Transit; +import io.vertx.core.Future; +import io.vertx.core.json.JsonObject; +import io.vertx.mod.fm.cv.Addr; +import io.vertx.up.annotations.Address; +import io.vertx.up.annotations.Subscribe; +import io.vertx.up.commune.config.XHeader; +import io.vertx.up.eon.KName; +import io.vertx.up.unity.Ux; + +/** + * 冲账提醒处理 + * + * @author lang : 2024-04-03 + */ +public class NotifyReversalOrder { + /* + * 冲账提交专用提醒模型,此处为基础站内信模式 + * 1. 如果 WebSocket 存在订阅,那么此处才会执行,若没有开浏览器,则不会执行 + * 2. 发送完成之后,消息会直接发送到浏览器中,使用回调模式来创建消息历史,只存在 SENT 和 HISTORY 两种状态 + */ + @Subscribe("reversal-order") + @Address(Addr.Notify.REVERSAL_ORDER) + public Future submitNotify(final JsonObject input, final XHeader header) { + return Ux.Jooq.on(FBillDao.class).fetchOneAsync("key",input.getString("billId")).compose(bill->{ + JsonObject entries = new JsonObject(); + entries.put(KName.Finance.AMOUNT,input.getString("amount")); + entries.put(KName.Finance.SERIAL,input.getString("serial")); + entries.put(KName.Finance.REALNAME,input.getString("realname")); + entries.put(KName.Finance.ROOMNUMBER,bill.getModelKey()); + entries.put(KName.Finance.CREATEDAT,input.getString("createdAt")); + entries.put(KName.SIGMA, header.getSigma()); + entries.put(KName.APP_ID, header.getAppId()); + entries.put(KName.Finance.NAME,"冲账"); + return Ux.future(entries); + }).compose(massger->{ + JsonObject entries = new JsonObject(); + entries.put(KName.DATA,massger); + entries.put(KName.SIGMA, header.getSigma()); + entries.put(KName.APP_ID, header.getAppId()); + entries.put(KName.MESSAGE, "NOTIFY.REVERSAL.ORDER"); + return Ux.channel(Transit.class, JsonObject::new, stub -> stub.message(entries)) + .compose(message -> Ux.future(NotifyReversalParam.response(message, input))); + }); + } +} diff --git a/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalParam.java b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalParam.java new file mode 100644 index 0000000000000000000000000000000000000000..b1df88ef90c60b3224f8e9de9d24b78803080eae --- /dev/null +++ b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/notification/NotifyReversalParam.java @@ -0,0 +1,29 @@ +package io.vertx.mod.fm.uca.notification; + +import io.vertx.core.json.JsonObject; +import io.vertx.up.commune.config.XHeader; +import io.vertx.up.eon.KName; + +import java.util.Objects; + +/** + * @author lang : 2024-04-04 + */ +class NotifyReversalParam { + + static JsonObject normalized(final JsonObject input, final XHeader header) { + final JsonObject params = new JsonObject(); + if (Objects.nonNull(header)) { + params.put(KName.SIGMA, header.getSigma()); + params.put(KName.APP_ID, header.getAppId()); + } + params.put(KName.DATA, input); + return params; + } + + static JsonObject response(final JsonObject message, final JsonObject input) { + final JsonObject response = message.copy(); + response.put("request", input); + return response; + } +} diff --git a/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/trans/Sync01Debt.java b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/trans/Sync01Debt.java index 7a87d8755446fbcd2c700588393bf789c542fb67..3f78f2b421fd6f6d410b0edd326c2366d1b004a9 100644 --- a/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/trans/Sync01Debt.java +++ b/zero-fm/src/main/modulat/io/vertx/mod/fm/uca/trans/Sync01Debt.java @@ -70,7 +70,7 @@ class Sync01Debt implements Trade { debt.setAmountBalance(amountBalance); - if (0 >= amountBalance.doubleValue()) { + if (0 == amountBalance.doubleValue()) { debt.setFinished(Boolean.TRUE); debt.setFinishedAt(nowAt); }