Compare commits

...
5 changed files with 121 additions and 8 deletions
@@ -0,0 +1,97 @@
package me.iiv.agent.entity.m1;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 应收单主表(m1.sale_receivable_order)。
* 金额列为 legacy BigDecimal(元),公开契约层统一换算为分(*_minor)。
*/
@Getter
@Setter
@ToString
@TableName("sale_receivable_order")
public class SaleReceivableOrder implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/** 创建时间 */
private Date createTime;
/** 修改时间 */
private Date modifyTime;
/** 数据状态 */
private Integer softDelete;
/** 创建人(销售人员)ID */
private Long createId;
/** 创建人(销售人员)姓名 */
private String createName;
/** 应收单编号 */
private String receivableNo;
/** 订单编号 */
private String orderNo;
/** 客户名称 */
private String custerName;
/** 代理ID */
private Long agentId;
/** 物业ID */
private Long propertyId;
/** 下单公司 */
private String agentName;
/** 物业名称 */
private String propertyName;
/** 销售公司 */
private String saleCompany;
/** 订单时间 */
private Date orderTime;
/** 应收单时间 */
private Date receivableTime;
/** 已收款金额 */
private BigDecimal receivableMoney;
/** 收款状态0:未收款;1:全部收款;2:部分收款 */
private Integer receivableState;
/** 已开发票金额 */
private BigDecimal invoiceMoney;
/** 开票状态0:未开票;1:全部开票;2:部分开票 */
private Integer invoiceState;
/** 金蝶客户名称 */
private String jindieName;
/** 开票名称 */
private String invoiceName;
/** 未开发票金额 */
private BigDecimal notInvoiceMoney;
/** 开票中金额 */
private BigDecimal invoicingProgressMoney;
}
@@ -0,0 +1,11 @@
package me.iiv.agent.mapper.m1;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import me.iiv.agent.entity.m1.SaleReceivableOrder;
/**
* 应收单 Mapper 接口
*/
public interface SaleReceivableOrderMapper extends BaseMapper<SaleReceivableOrder> {
}
@@ -2,8 +2,8 @@ package me.iiv.agent.mcp.sync;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import me.iiv.agent.entity.m0.User; import me.iiv.agent.entity.m0.User;
import me.iiv.iivframework.beans.b1.SaleReceivableOrder; import me.iiv.agent.entity.m1.SaleReceivableOrder;
import me.iiv.iivframework.mapper.m1.SaleReceivableOrderMapper; import me.iiv.agent.mapper.m1.SaleReceivableOrderMapper;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -5,6 +5,7 @@ import me.iiv.agent.mcp.McpErrorCode;
import me.iiv.agent.mcp.ToolCallException; import me.iiv.agent.mcp.ToolCallException;
import me.iiv.agent.mcp.XqTool; import me.iiv.agent.mcp.XqTool;
import me.iiv.agent.mcp.sync.BatteryFaultsSyncEntity; import me.iiv.agent.mcp.sync.BatteryFaultsSyncEntity;
import me.iiv.agent.mcp.sync.BuildingsSyncEntity;
import me.iiv.agent.mcp.sync.ChangesEngine; import me.iiv.agent.mcp.sync.ChangesEngine;
import me.iiv.agent.mcp.sync.ContractsSyncEntity; import me.iiv.agent.mcp.sync.ContractsSyncEntity;
import me.iiv.agent.mcp.sync.DeviceLifecyclesSyncEntity; import me.iiv.agent.mcp.sync.DeviceLifecyclesSyncEntity;
@@ -34,9 +35,9 @@ import java.util.Map;
/** /**
* 增量同步工具(REQ-20260911-0013;P2 域扩展于 REQ-20260902-0002): * 增量同步工具(REQ-20260911-0013;P2 域扩展于 REQ-20260902-0002):
* users/properties/contracts/repayment-targets/repayment-details/mall-orders/ * users/properties/buildings/contracts/repayment-targets/repayment-details/mall-orders/
* device-lifecycles/battery-faults/devices/withdraw-orders/relocation-orders/ * device-lifecycles/battery-faults/devices/withdraw-orders/relocation-orders/
* install-orders 十二个 changes 工具, * install-orders 十三个 changes 工具,
* 协议(snapshot/cursor/tombstone/sync_token)由 ChangesEngine 统一实现。 * 协议(snapshot/cursor/tombstone/sync_token)由 ChangesEngine 统一实现。
* 数据域硬约束:本类不声明 tenant_id/scope 入参,数据域只能从 Token 推导; * 数据域硬约束:本类不声明 tenant_id/scope 入参,数据域只能从 Token 推导;
* GuardedToolCallback 对 *.changes.list 工具的原始入参做二次拦截,传 tenant_id/scope 一律拒绝。 * GuardedToolCallback 对 *.changes.list 工具的原始入参做二次拦截,传 tenant_id/scope 一律拒绝。
@@ -23,7 +23,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
/** /**
* 十二个 changes 工具的注册与路由(REQ-20260911-0013,P2 域扩展于 REQ-20260902-0002)。 * 十三个 changes 工具的注册与路由(REQ-20260911-0013,P2 域扩展于 REQ-20260902-0002)。
*/ */
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
class ChangesToolsTest { class ChangesToolsTest {
@@ -41,12 +41,13 @@ class ChangesToolsTest {
callback -> callback.getToolDefinition().name(), callback -> callback.getToolDefinition().name(),
callback -> callback.getToolDefinition().inputSchema())); callback -> callback.getToolDefinition().inputSchema()));
assertEquals(13, schemas.size()); assertEquals(15, schemas.size());
for (String name : new String[]{"users.changes.list", "properties.changes.list", "contracts.changes.list", for (String name : new String[]{"users.changes.list", "properties.changes.list", "buildings.changes.list",
"contracts.changes.list",
"repayment-targets.changes.list", "repayment-details.changes.list", "repayment-targets.changes.list", "repayment-details.changes.list",
"mall-orders.changes.list", "device-lifecycles.changes.list", "battery-faults.changes.list", "mall-orders.changes.list", "device-lifecycles.changes.list", "battery-faults.changes.list",
"devices.changes.list", "withdraw-orders.changes.list", "relocation-orders.changes.list", "devices.changes.list", "withdraw-orders.changes.list", "relocation-orders.changes.list",
"install-orders.changes.list"}) { "install-orders.changes.list", "sale-receivable-orders.changes.list"}) {
assertTrue(schemas.containsKey(name), "缺少工具 " + name); assertTrue(schemas.containsKey(name), "缺少工具 " + name);
String schema = schemas.get(name); String schema = schemas.get(name);
assertTrue(schema.contains("syncToken")); assertTrue(schema.contains("syncToken"));
@@ -99,6 +100,9 @@ class ChangesToolsTest {
tools.installOrdersChangesList(null, null, 80); tools.installOrdersChangesList(null, null, 80);
verify(changesEngine).execute("install-orders", null, null, 80); verify(changesEngine).execute("install-orders", null, null, 80);
tools.saleReceivableOrdersChangesList("t8", "c8", null);
verify(changesEngine).execute("sale-receivable-orders", "t8", "c8", null);
} }
@Test @Test