IDL定义接口

问题描述:

前端查询后端的pcs总数字段,此字段需要从mydsql的db中获取。PCS字段类型为decimal(26,6),于是打算在response中使用 BigDecimal pcs来接收

结果:

报错Thrift class ‘DTO’ field ‘pcs’ type ‘java.math.BigDecimal’ is not a supported Java type

原因:

Thrift 不支持BigDecimal

Thrif支持的数据类型

https://www.cnblogs.com/horace/p/4415748.html

解决:

需要将bigdecimal 与double转换

https://www.cnblogs.com/Wenxu/p/10341182.html

规范

  1. 属性 ID 可以顺序追加,不可更改已有属性 ID & 数据类型

  2. 参数支持的容器类型: List、Set、Map

  3. 自定义异常必须继承自 AbstractThriftException,同时重写toString方法(AbstractThriftException的toString方法不够明确)

  4. Thrift 注解代码 和IDL生成的目标代码, 不能相互引用

  5. 所有的 POJO 类属性强烈建议使用包装数据类型,如果用基础类型的话无法使用IDL方式里的isSet来判断某个属性是否被赋值过。

  6. RPC 方法的返回值必须使用包装数据类型

  7. RPC 方法的参数如果是包装数据类型(Integer、Long等),同时又传null的话,服务端收到时会分配对应的基础类型的默认值。

    (注意:如果是对象内部的字段是包装数据类型的话,客户端传null值,若定义字段时有默认值,服务端会收到此值,否则收到null值)

  8. 一个类只能有一个带有@ThriftConstructor注解的构造函数

接口|req|resp|DTO定义

include "Common.thrift"
include "SkuTag.thrift"
typedef Common.Operator Operator
typedef Common.Paging Paging
typedef Common.Status Status
typedef Common.VmiTException VmiTException
typedef SkuTag.SkuTagTModel SkuTagTModel

/**
 * @TypeDoc(description = "请求参数")
 */
struct SkuPreSellTRequest {
   

        1: string codeOrName;

        2: i64 supplierId;

        3: i64 pickDate;

        4: i64 poiId = -1;

        5: i64 skuId;

        6: string barCode;

        7: string skuName;

        8: i64 pickBeginDate;

        9: i64 pickEndDate;

        10: Paging paging;

        11: i64 categoryId;

        12: i32 temperatureLevel;

        13: list<i64> categoryIds;

        14: i32 processPlan;

        15: i32 xtTransfer;

        16: list<i64> skuIds;

        17: list<string> barCodes;

        18: i32 xtAllocate;
}

/**
 * @TypeDoc(description = "返回参数")
 */
struct SkuStockSaleInfo{
   

        1: i64 supplierId;

        2: string supplierCode;

        3: string supplierName;

        4: i64 skuId;

        5: string barCode;

        6: string skuName;

        7: string categoryName;

        8: i64 unitId;

        9: string unitName;

        10: string spec;

        11: string saleQuantity;

        12: string stock;

        13: string stockGap;

        14: string quantityShipped;

        15: i64 defaultShippingId;

        16: string reservationIntransit;

        17: i32 inSale;

        18: i32 temperatureLevel;

        19: string temperatureLevelName;

        20: i32 highValueStatus;

        21: string highValueStatusName;

        22: string maxStock;

        23: list<SkuTagTModel> skuTagList;

        24: string transferIntransit;

        25: string intransitStock;

        26: string supplierTypeNames;

        27: i32 processPlan;

        28: string pcIntransitStock;

        29: string fulfillmentGap;

        30: string signInstransitQty;

        31: i32 riskSku;

        32: i32 xtTransfer;

        33: i32 xtAllocate;
}

/**
 * @TypeDoc(description = "返回实体")
 */
struct SkuStockInfoTResponse{
   
        /**
         * @FieldDoc(
         *     description = "接口状态码,0成功,其他异常",
         *     example = {0}
         * )
         */
        1: i32 code;

        /**
         * @FieldDoc( description = "接口返回信息",  example = {"success"})
         */
        2: string msg;

        /**
         * @FieldDoc(description ="数据列表")
         */
        3: list<SkuStockSaleInfo> SkuSaleInfoList;

        /**
         * @FieldDoc(description ="总数")
         */
        4: i32 total;
}

/**
 * @TypeDoc(description = "请求参数")
 */
struct TransferForOtherStockTRequest{
   

        /**
         * @FieldDoc(description = "供应商ID")
         */
        1: i64 supplierId = -1;
        /**
         * @FieldDoc(description = "自提日期")
         */
        2: i64 pickDate;
        /**
         * @FieldDoc(description = "转运起始仓")
         */
        3: i64 originPoiId = -1;

        /**
         * @FieldDoc(description = "转运目的仓")
         */
        4: i64 targetPoiId = -1;
        /**
         * @FieldDoc(description = "skuId")
         */
        5: i64 skuId = -1;
        /**
         * @FieldDoc(description = "商品条码")
         */
        6: string barCode;
        /**
         * @FieldDoc(description = "商品名称")
         */
        7: string skuName;
        /**
         * @FieldDoc(description = "自提起始日期")
         */
        8: i64 pickBeginDate;
        /**
         * @FieldDoc(description = "自提结束日期")
         */
        9: i64 pickEndDate;
        /**
         * @FieldDoc(description = "分页参数")
         */
        10: Paging paging;
        /**
         * @FieldDoc(description = "二级品类id")
         */
        11: i64 categoryId = -1;
        /**
         * @FieldDoc(description = "储藏条件")
         */
        12: i32 temperatureLevel = -1;

        /**
         * @FieldDoc(description = "二级品类ids")
         */
        13: list<i64> categoryIds;

        /**
         * @FieldDoc(description = "操作人")
         */
        14: Operator operator;
}


/**
 *  @InterfaceDoc(
 *   displayName = "优选备货目标页相关接口",
 *   description = "备货和预约页相关接口",
 *   scenarios = "备货和预约页相关接口"
 * )
 */
service SupplierSkuTService {
   

        SkuStockInfoTResponse querySkuStock(1: SkuPreSellTRequest request) throws (1: VmiTException vmiTException);
}

相关推荐

  1. IDL定义接口

    2023-12-08 09:28:07       38 阅读
  2. 定义一个存活态 HTTP 请求接口

    2023-12-08 09:28:07       37 阅读
  3. 三、typescript 接口定义/继承/类

    2023-12-08 09:28:07       38 阅读
  4. 【ROS2】实现自定义服务接口

    2023-12-08 09:28:07       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 09:28:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 09:28:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 09:28:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 09:28:07       18 阅读

热门阅读

  1. C语言实现水仙花

    2023-12-08 09:28:07       38 阅读
  2. LeetCode 1745.分割回文串IV(动态规划)

    2023-12-08 09:28:07       31 阅读
  3. vue项目中如何引入zip压缩包之解决方案

    2023-12-08 09:28:07       42 阅读
  4. Installing GDS

    2023-12-08 09:28:07       41 阅读