啊鑫
2025-02-12 076dd23c615e66b2c495bb123aadf041940f03b2
协客云的三个接口初稿
已添加20个文件
已修改5个文件
1304 ■■■■■ 文件已修改
src/main/java/com/gs/xky/config/ApiResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/config/BodyParam.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/config/XkyCommonParam.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/dto/BarcodeDeliveryNo.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/dto/CustomsData.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/dto/LineList.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/dto/XkyDetail.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/entity/DeliveryNotice.java 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/entity/DeliveryNoticeDetail.java 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/entity/TblBarcodeInformation.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/mapper/DeliveryNoticeDetailMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/mapper/TblBarcodeInformationMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/DeliveryNoticeDetailService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/DeliveryNoticeService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/Impl/DeliveryNoticeDetailServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/Impl/TblBarcodeInformationServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/TblBarcodeInformationService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/service/XkyService.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DeliveryNoticeDetailMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DeliveryNoticeMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TblBarcodeInformationMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/gs/xky/XkyApplicationTests.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gs/xky/config/ApiResponse.java
@@ -1,5 +1,6 @@
package com.gs.xky.config;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -10,6 +11,7 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApiResponse<T> {
    private int result;
@@ -17,6 +19,8 @@
    private String errorCode;
    private String errorMsg;
    private T data;
    private List<T> dataList; // Add this field to match the response
}
src/main/java/com/gs/xky/config/BodyParam.java
@@ -29,4 +29,8 @@
    private int[] status;
    private int logisticsStatus;
    private String deliveryNo;
    private int returnVerifyFlag;
}
src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java
@@ -4,23 +4,20 @@
public class DataAcquisitionConfiguration {
    //测试环境
    public static final String TEST_COMPANY_CODE =
            "55958795";
    public static final String TEST_COMPANY_CODE = "55958795";
    public static final String TEST_APP_KEY =
            "ab2d86b6dffabcc81dca6855c727c246";
    public static final String TEST_APP_KEY = "ab2d86b6dffabcc81dca6855c727c246";
    public static final String TEST_APP_SECRET =
            "01b17babe2a96d5ebd802e67709f33d1";
    public static final String TEST_APP_SECRET = "01b17babe2a96d5ebd802e67709f33d1";
    public static final String TEST_ERP_CODE = "Z106";
    //正式环境
    public static final String COMPANY_CODE =
            "72505985";
    public static final String COMPANY_CODE = "72505985";
    public static final String APP_KEY =
            "a2866f03bb7f76387bfb1a98001f0e31";
    public static final String APP_KEY = "a2866f03bb7f76387bfb1a98001f0e31";
    public static final String APP_SECRET =
            "f13bd1bcb130f0090ed92dc021e5f4e1";
    public static final String APP_SECRET = "f13bd1bcb130f0090ed92dc021e5f4e1";
    public static final String ERP_CODE = "Z106";
}
src/main/java/com/gs/xky/config/XkyCommonParam.java
@@ -1,5 +1,6 @@
package com.gs.xky.config;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -12,4 +13,28 @@
    private ApiCommonParam commonParam;
    private BodyParam body;
    public static XkyCommonParam GetInit() {
        long currentTimeMillis = System.currentTimeMillis();
        ApiCommonParam apiParam = new ApiCommonParam();
        apiParam.setAppKey(DataAcquisitionConfiguration.TEST_APP_KEY);//发携客云提供的appKey
        apiParam.setVersion("1.0");//接口版本
        apiParam.setOperateCompanyCode(DataAcquisitionConfiguration.TEST_COMPANY_CODE);//操作者所属公司编码
        apiParam.setOwnerCompanyCode(DataAcquisitionConfiguration.TEST_COMPANY_CODE);//数据所属公司编码,非集团公司默认赋值为操作公司
        apiParam.setTimestamps(currentTimeMillis / 1000);//当前时间对应的时间戳(秒数)
        String appSecret = DataAcquisitionConfiguration.TEST_APP_SECRET;//携客云提供的appSecret
        String sign = SignUtils.buildCurrentSign(JSON.toJSONString(apiParam), appSecret);
        apiParam.setSign(sign);
        XkyCommonParam commonParam = new XkyCommonParam();
        commonParam.setCommonParam(apiParam);
        return commonParam;
    }
}
src/main/java/com/gs/xky/dto/BarcodeDeliveryNo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.gs.xky.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BarcodeDeliveryNo {
    private String productCode;  //产品编码
    private String smallBarcode;  //小包条码
    private String bigBarcode;  //大包条码
    private String outerBarcode;  //外箱条码
    private String includeQty;  //当前小包条码包含的数量
    private String smallPackageLength;  //小包条码-长
    private String smallPackageWidth;  //小包条码-宽
    private String smallPackageHeight;  //小包条码-高
    private String bigPackageLength;  //大包条码-长
    private String bigPackageWidth;  //大包条码-宽
    private String bigPackageHeight;  //大包条码-高
    private String outerPackageLength;  //外箱条码-长
    private String outerPackageWidth;  //外箱条码-宽
    private String outerPackageHeight;  //外箱条码-高
    private String smallPackageSn;  //当前小包条码的流水码
    private String bigPackageSn;  //当前大包条码的流水码
    private String outPackageSn;  //当前外箱条码的流水码
    private String dynamicData;  //条码规则中对应的动态字段的值, key对应的取值为dynamicDescList.field的值;如果企业调整了条码规则,请根据dynamicDescList返回的结果,了解各动态数据的含义
    private String packLevel;  //包装层级
}
src/main/java/com/gs/xky/dto/CustomsData.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.gs.xky.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomsData {
    private String dnXkNo; //送货通知单据号
    private String dnInnerNo; //内部单据号
    private String billLadingXkNo; //报单号码
    private String customsTypeCode; //报关类型编码
    private String customsTypeName; //报关类型名称
    private String destinationPortTypeCode; //目的港编码
    private String destinationPortTypeName; //目的港名称
    private String portLoadingTypeCode; //装运港编码
    private String portLoadingTypeName; //装运港名称
    private String originalCountryCode; //原产国编码
    private String originalCountryName; //原产国名称
    private String externalInvoiceXkNo; //外部发票号码
    private String externalInvoiceDate; //外部发票日期
}
src/main/java/com/gs/xky/dto/LineList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.gs.xky.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class LineList {
    private String lineNo; //项次号
    private String poErpNo; //ERP采购单号
    private String purchaseType; //采购单类型 1:一般采购;2:委外采购
    private String poLineNo; //采购单项次
    private String productCode; //产品编码
    private String productName; //产品名称
    private String productScale; //产品规格
    private String deliveryUnitCode; //出货单位编码
    private String deliveryUnitName; //出货单位名称
    private String deliveryQty; //出货数量
    private String deliveryValuationQty; //出货计价数量
    private String price; //出货产品单价
    private String taxPrice; //出货产品含税单价
    private String schDynamicValue; //排程自定义项的值
    private String scheduleBatchNo; //排程批次号
    private String scheduleOrderNo; //排程单号
    private String scheduleDetailNo; //对应排程ItemDetail的主键列
    private String urgentFlag; //是否急料 0:否 ; 1:是
    private String srcBillType; //原始单据类型1:订单;2:排程; 3:按退货 4:按备品
    private String purchaseDesc; //采购项次的采购说明信息
    private String srcOrderLineRemark; //单据备注,srcBillType=1 å¯¹åº”采购订单单身的备注; srcBillType=2 å¯¹åº”排程项次的备注
    private String status; //状态(1:待签收;2:签收中;3: å·²å®Œæˆï¼›ï¼‰
    private String receiveStatus; //收货状态(0-未收货;1-部分收货;2-全部收货)
    private String grossWeight; //整单毛重
    private String netWeight; //整单净重
    private String unitWeightCode; //重量单位编码
    private String unitWeightName; //重量单位名称
    private String packingQty; //包装数
    private String brandName; //品牌
    private String otherExtend; //其它说明
    private String originalCountryCode; //原产国编码
    private String originalCountryName; //原产国名称
    private String remark; //送货通知单身备注
    private String extendN01; //扩展字段1
    private String extendN02; //扩展字段2
    private String extendN03; //扩展字段3
    private String extendN04; //扩展字段4
    private String extendN05; //扩展字段5
    private String extendN06; //扩展字段6
    private String storeCode; //仓库编码
    private String storeName; //仓库名称
    private String verifyQty; //送检数量
    private String allowQty; //允许收货数量
    private String compromiseQty; //让步收货数量
    private String refusedQty; //拒收数量
    private String rtoErpNo; //退货单ERP单号
    private String rtoLineNo; //退货项次号
    private String prodLength; //长
    private String prodWidth; //宽
    private String prodHeight; //高
    private String buyerName; //采购员
    private String expectedDate; //订单交期(以时间戳形式)
    private String answerDate; //排定交期(以时间戳形式)
    private String currencyCode; //币别编码
    private String currencyName; //币别名称
    private String sendVerifyStatus; //送检状态(0:未送检;1:部分送检;2:全部送检 3免检)
    private String resultFlag; //检验结果标识(0:免检 1:全部合格;2:部分合格;3:拒收)
    private String applyDeliveryQty; //申请出货数量
    private String applyDeliveryValuationQty; //申请出货计价数量
    private String batchNumber; //批号
    private String receiveQty; //收货数量
    private String storageQty; //入库数量
    private String returnQty; //退货数量
    private String firstCheck; //优先检验 0 æ­£å¸¸ï¼Œ1 ä¼˜å…ˆï¼Œ2 ç´§æ€¥
    private String poLineNoShow; //平台展示采购单项次
}
src/main/java/com/gs/xky/dto/XkyDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.gs.xky.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class XkyDetail {
    private String deliveryNo; //送货单号
    private String innerVendorCode; //供应商编码
    private String innerVendorName; //供应商名称
    private String deliveryType; //送货类型 ï¼Œ 1 :普通(正常出货) 2:补货(先入库,后补出货单) 3: å¤‡å“ 4:样品 5:VMI
    private String deliveryDate; //送货日期(以时间戳形式)
    private String planArrivedDate; //预计送达日期(以时间戳形式)
    private String contactPersion; //送货联系人
    private String contactMobile; //送货人联系电话
    private String addressCode; //内部收货地点编码
    private String addressInfo; //收货明细地址
    private String deliveryCarNo; //送货车牌号
    private String remark; //送货通知单身备注
    private String status; //送货单状态 1: å¾…签收; 2: ç­¾æ”¶ä¸­ï¼› 3: å·²å®Œæˆï¼› 4: æ’¤å›žï¼› 8: å·²ä½œåºŸï¼›ç‰ˆæœ¬2.0新增 5:申请中, 7:同意, 9:部分同意 10: å·²å†»ç»“ 11: ç”³è¯·æ’¤å›ž
    private String directDeliveryFlag; //直运标识 1:是;0否
    private String logisticsStatus; //物流状态 0:未发出;1:已发货;2:已到货
    private String publishTime; //最后一次发布时间
    private String updateTime; //最后一次更新时间
    private String profitCenterCode; //利润中心(或收货部门)编码
    private String grossWeight; //整单毛重
    private String netWeight; //整单净重
    private String unitWeightCode; //重量单位编码
    private String unitWeightName; //重量单位名称
    private String totalPackingQty; //总包装数
    private String totalPackageQuantity; //手工填写,总包数
    private String transportTypeCode; //运输方式编码
    private String transportTypeName; //运输方式名称
    private String packingWayCode; //包装方式编码
    private String packingWayName; //包装方式名称
    private String extendN01; //扩展字段1
    private String extendN02; //扩展字段2
    private String extendN03; //扩展字段3
    private String platformExtendN04; //扩展字段4
    private String platformExtendN05; //扩展字段5
    private String platformExtendN06; //扩展字段6
    private String platformExtendN07; //扩展字段7
    private String platformExtendN08; //扩展字段8
    private String cargoDeliveryTime; //货物送达日期(以时间戳形式)
    private String logisticsType; //物流方式数字形式(1-供应商送货2-快递3-采购方自提)
    private String logisticsTypeShow; //物流方式中文展示
    private String logisticsNumber; //物流单号
    private String firstCheck; //优先检验 0 æ­£å¸¸ï¼Œ1 ä¼˜å…ˆï¼Œ2 ç´§æ€¥
    //    private List<CustomsData> customsData;//报关资料
    private List<LineList> lineList;//送货单身列表
}
src/main/java/com/gs/xky/entity/DeliveryNotice.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
package com.gs.xky.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * é€è´§é€šçŸ¥å•主表
 *
 * @TableName DELIVERY_NOTICE
 */
@TableName(value = "DELIVERY_NOTICE")
@Data
@KeySequence(value = "SEQ_XKY", dbType = DbType.ORACLE)
public class DeliveryNotice implements Serializable {
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * SEQ_XKY
     */
    @TableId
    private Long id;
    /**
     * é€è´§å•号
     */
    private String deliveryNo;
    /**
     * ä¾›åº”商编码
     */
    private String innerVendorCode;
    /**
     * ä¾›åº”商名称
     */
    private String innerVendorName;
    /**
     * é€è´§ç±»åž‹ï¼š1-普通 2-补货 3-备品 4-样品 5-VMI
     */
    private String deliveryType;
    /**
     * é€è´§æ—¥æœŸ(时间戳)
     */
    private String deliveryDate;
    /**
     * é¢„计送达日期(时间戳)
     */
    private String planArrivedDate;
    /**
     * é€è´§è”系人
     */
    private String contactPersion;
    /**
     * é€è´§äººè”系电话
     */
    private String contactMobile;
    /**
     * å†…部收货地点编码
     */
    private String addressCode;
    /**
     * æ”¶è´§æ˜Žç»†åœ°å€
     */
    private String addressInfo;
    /**
     * é€è´§è½¦ç‰Œå·
     */
    private String deliveryCarNo;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    /**
     * çŠ¶æ€:1-待签收 2-签收中 3-已完成 4-撤回 8-已作废 5-申请中 7-同意 9-部分同意 10-已冻结 11-申请撤回
     */
    private String status;
    /**
     * ç›´è¿æ ‡è¯†:1-是 0-否
     */
    private String directDeliveryFlag;
    /**
     * ç‰©æµçŠ¶æ€:0-未发出 1-已发货 2-已到货
     */
    private String logisticsStatus;
    /**
     * æœ€åŽä¸€æ¬¡å‘布时间
     */
    private String publishTime;
    /**
     * æœ€åŽä¸€æ¬¡æ›´æ–°æ—¶é—´
     */
    private String updateTime;
    /**
     * åˆ©æ¶¦ä¸­å¿ƒç¼–码
     */
    private String profitCenterCode;
    /**
     * æ•´å•毛重
     */
    private String grossWeight;
    /**
     * æ•´å•净重
     */
    private String netWeight;
    /**
     * é‡é‡å•位编码
     */
    private String unitWeightCode;
    /**
     * é‡é‡å•位名称
     */
    private String unitWeightName;
    /**
     * æ€»åŒ…装数
     */
    private String totalPackingQty;
    /**
     * æ‰‹å·¥å¡«å†™æ€»åŒ…æ•°
     */
    private String totalPackageQuantity;
    /**
     * è¿è¾“方式编码
     */
    private String transportTypeCode;
    /**
     * è¿è¾“方式名称
     */
    private String transportTypeName;
    /**
     * åŒ…装方式编码
     */
    private String packingWayCode;
    /**
     * åŒ…装方式名称
     */
    private String packingWayName;
    /**
     * æ‰©å±•字段1
     */
    private String extendN01;
    /**
     * æ‰©å±•字段2
     */
    private String extendN02;
    /**
     * æ‰©å±•字段3
     */
    private String extendN03;
    /**
     * æ‰©å±•字段4
     */
    private String platformExtendN04;
    /**
     * æ‰©å±•字段5
     */
    private String platformExtendN05;
    /**
     * æ‰©å±•字段6
     */
    private String platformExtendN06;
    /**
     * æ‰©å±•字段7
     */
    private String platformExtendN07;
    /**
     * æ‰©å±•字段8
     */
    private String platformExtendN08;
    /**
     * è´§ç‰©é€è¾¾æ—¥æœŸ(时间戳)
     */
    private Date cargoDeliveryTime;
    /**
     * ç‰©æµæ–¹å¼:1-供应商送货 2-快递 3-采购方自提
     */
    private String logisticsType;
    /**
     * ç‰©æµæ–¹å¼ä¸­æ–‡å±•示
     */
    private String logisticsTypeShow;
    /**
     * ç‰©æµå•号
     */
    private String logisticsNumber;
    /**
     * ä¼˜å…ˆæ£€éªŒ:0-正常 1-优先 2-紧急
     */
    private String firstCheck;
}
src/main/java/com/gs/xky/entity/DeliveryNoticeDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,298 @@
package com.gs.xky.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
/**
 * é€è´§é€šçŸ¥å•据明细表
 *
 * @TableName DELIVERY_NOTICE_DETAIL
 */
@TableName(value = "DELIVERY_NOTICE_DETAIL")
@Data
@KeySequence(value = "SEQ_XKY", dbType = DbType.ORACLE)
public class DeliveryNoticeDetail implements Serializable {
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * SEQ_XKY
     */
    @TableId
    private Long id;
    private Long pid;
    /**
     * é¡¹æ¬¡å·
     */
    private String lineNo;
    /**
     * ERP采购单号
     */
    private String poErpNo;
    /**
     * é‡‡è´­å•类型 1:一般采购;2:委外采购
     */
    private String purchaseType;
    /**
     * é‡‡è´­å•项次
     */
    private String poLineNo;
    /**
     * äº§å“ç¼–码
     */
    private String productCode;
    /**
     * äº§å“åç§°
     */
    private String productName;
    /**
     * äº§å“è§„æ ¼
     */
    private String productScale;
    /**
     * å‡ºè´§å•位编码
     */
    private String deliveryUnitCode;
    /**
     * å‡ºè´§å•位名称
     */
    private String deliveryUnitName;
    /**
     * å‡ºè´§æ•°é‡
     */
    private String deliveryQty;
    /**
     * å‡ºè´§è®¡ä»·æ•°é‡
     */
    private String deliveryValuationQty;
    /**
     * å‡ºè´§äº§å“å•ä»·
     */
    private String price;
    /**
     * å‡ºè´§äº§å“å«ç¨Žå•ä»·
     */
    private String taxPrice;
    /**
     * æŽ’程自定义项的值
     */
    private String schDynamicValue;
    /**
     * æŽ’程批次号
     */
    private String scheduleBatchNo;
    /**
     * æŽ’程单号
     */
    private String scheduleOrderNo;
    /**
     * å¯¹åº”排程ItemDetail的主键列
     */
    private String scheduleDetailNo;
    /**
     * æ˜¯å¦æ€¥æ–™ 0:否 ; 1:是
     */
    private String urgentFlag;
    /**
     * åŽŸå§‹å•æ®ç±»åž‹1:订单;2:排程; 3:按退货 4:按备品
     */
    private String srcBillType;
    /**
     * é‡‡è´­é¡¹æ¬¡çš„采购说明信息
     */
    private String purchaseDesc;
    /**
     * å•据备注,srcBillType=1 å¯¹åº”采购订单单身的备注; srcBillType=2 å¯¹åº”排程项次的备注
     */
    private String srcOrderLineRemark;
    /**
     * çŠ¶æ€ï¼ˆ1:待签收;2:签收中;3: å·²å®Œæˆï¼›ï¼‰
     */
    private String status;
    /**
     * æ”¶è´§çŠ¶æ€ï¼ˆ0-未收货;1-部分收货;2-全部收货)
     */
    private String receiveStatus;
    /**
     * æ•´å•毛重
     */
    private String grossWeight;
    /**
     * æ•´å•净重
     */
    private String netWeight;
    /**
     * é‡é‡å•位编码
     */
    private String unitWeightCode;
    /**
     * é‡é‡å•位名称
     */
    private String unitWeightName;
    /**
     * åŒ…装数
     */
    private String packingQty;
    /**
     * å“ç‰Œ
     */
    private String brandName;
    /**
     * å…¶å®ƒè¯´æ˜Ž
     */
    private String otherExtend;
    /**
     * åŽŸäº§å›½ç¼–ç 
     */
    private String originalCountryCode;
    /**
     * åŽŸäº§å›½åç§°
     */
    private String originalCountryName;
    /**
     * é€è´§é€šçŸ¥å•身备注
     */
    private String remark;
    /**
     * æ‰©å±•字段1
     */
    private String extendN01;
    /**
     * æ‰©å±•字段2
     */
    private String extendN02;
    /**
     * æ‰©å±•字段3
     */
    private String extendN03;
    /**
     * æ‰©å±•字段4
     */
    private String extendN04;
    /**
     * æ‰©å±•字段5
     */
    private String extendN05;
    /**
     * æ‰©å±•字段6
     */
    private String extendN06;
    /**
     * ä»“库编码
     */
    private String storeCode;
    /**
     * ä»“库名称
     */
    private String storeName;
    /**
     * é€æ£€æ•°é‡
     */
    private String verifyQty;
    /**
     * å…è®¸æ”¶è´§æ•°é‡
     */
    private String allowQty;
    /**
     * è®©æ­¥æ”¶è´§æ•°é‡
     */
    private String compromiseQty;
    /**
     * æ‹’收数量
     */
    private String refusedQty;
    /**
     * é€€è´§å•ERP单号
     */
    private String rtoErpNo;
    /**
     * é€€è´§é¡¹æ¬¡å·
     */
    private String rtoLineNo;
    /**
     * é•¿
     */
    private String prodLength;
    /**
     * å®½
     */
    private String prodWidth;
    /**
     * é«˜
     */
    private String prodHeight;
    /**
     * é‡‡è´­å‘˜
     */
    private String buyerName;
    /**
     * è®¢å•交期(以时间戳形式)
     */
    private String expectedDate;
    /**
     * æŽ’定交期(以时间戳形式)
     */
    private String answerDate;
    /**
     * å¸åˆ«ç¼–码
     */
    private String currencyCode;
    /**
     * å¸åˆ«åç§°
     */
    private String currencyName;
    /**
     * é€æ£€çŠ¶æ€ï¼ˆ0:未送检;1:部分送检;2:全部送检 3免检)
     */
    private String sendVerifyStatus;
    /**
     * æ£€éªŒç»“果标识(0:免检 1:全部合格;2:部分合格;3:拒收)
     */
    private String resultFlag;
    /**
     * ç”³è¯·å‡ºè´§æ•°é‡
     */
    private String applyDeliveryQty;
    /**
     * ç”³è¯·å‡ºè´§è®¡ä»·æ•°é‡
     */
    private String applyDeliveryValuationQty;
    /**
     * æ‰¹å·
     */
    private String batchNumber;
    /**
     * æ”¶è´§æ•°é‡
     */
    private String receiveQty;
    /**
     * å…¥åº“数量
     */
    private String storageQty;
    /**
     * é€€è´§æ•°é‡
     */
    private String returnQty;
    /**
     * ä¼˜å…ˆæ£€éªŒ 0 æ­£å¸¸ï¼Œ1 ä¼˜å…ˆï¼Œ2 ç´§æ€¥
     */
    private String firstCheck;
    /**
     * å¹³å°å±•示采购单项次
     */
    private String poLineNoShow;
    /**
     * å¤‡æ³¨
     */
    private String remarks;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private String createTime;
    /**
     * æ›´æ–°æ—¶é—´
     */
    private String updateTime;
}
src/main/java/com/gs/xky/entity/TblBarcodeInformation.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
package com.gs.xky.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
 * æ¡ç ä¿¡æ¯è¡¨
 *
 * @TableName TBL_BARCODE_INFORMATION
 */
@TableName(value = "TBL_BARCODE_INFORMATION")
@Data
@KeySequence(value = "SEQ_XKY", dbType = DbType.ORACLE)
public class TblBarcodeInformation implements Serializable {
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     * SEQ_XKY
     */
    @TableId
    private Long id;
    /**
     * é€è´§å•号
     */
    private String deliveryNo;
    /**
     * äº§å“ç¼–码
     */
    private String productCode;
    /**
     * å°åŒ…条码
     */
    private String smallBarcode;
    /**
     * å¤§åŒ…条码
     */
    private String bigBarcode;
    /**
     * å¤–箱条码
     */
    private String outerBarcode;
    /**
     * å½“前小包条码包含的数量
     */
    private String includeQty;
    /**
     * å°åŒ…条码-长
     */
    private String smallPackageLength;
    /**
     * å°åŒ…条码-宽
     */
    private String smallPackageWidth;
    /**
     * å°åŒ…条码-高
     */
    private String smallPackageHeight;
    /**
     * å¤§åŒ…条码-长
     */
    private String bigPackageLength;
    /**
     * å¤§åŒ…条码-宽
     */
    private String bigPackageWidth;
    /**
     * å¤§åŒ…条码-高
     */
    private String bigPackageHeight;
    /**
     * å¤–箱条码-长
     */
    private String outerPackageLength;
    /**
     * å¤–箱条码-宽
     */
    private String outerPackageWidth;
    /**
     * å¤–箱条码-高
     */
    private String outerPackageHeight;
    /**
     * å½“前小包条码的流水码
     */
    private String smallPackageSn;
    /**
     * å½“前大包条码的流水码
     */
    private String bigPackageSn;
    /**
     * å½“前外箱条码的流水码
     */
    private String outPackageSn;
    /**
     * æ¡ç è§„则中对应的动态字段的值
     */
    private String dynamicData;
    /**
     * åŒ…装层级
     */
    private String packLevel;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    private Date createTime;
    /**
     * æ›´æ–°æ—¶é—´
     */
    private Date updateTime;
}
src/main/java/com/gs/xky/mapper/DeliveryNoticeDetailMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.gs.xky.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gs.xky.entity.DeliveryNoticeDetail;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE_DETAIL(送货通知单据明细表)】的数据库操作Mapper
 * @createDate 2025-02-11 22:30:01
 * @Entity com.gs.xky.entity.DeliveryNoticeDetail
 */
public interface DeliveryNoticeDetailMapper extends BaseMapper<DeliveryNoticeDetail> {
}
src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.gs.xky.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gs.xky.entity.DeliveryNotice;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE(送货通知单主表)】的数据库操作Mapper
 * @createDate 2025-02-11 20:55:22
 * @Entity com.gs.xky.entity.DeliveryNotice
 */
public interface DeliveryNoticeMapper extends BaseMapper<DeliveryNotice> {
    long getNextVal();
}
src/main/java/com/gs/xky/mapper/TblBarcodeInformationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.gs.xky.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gs.xky.entity.TblBarcodeInformation;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€TBL_BARCODE_INFORMATION(条码信息表)】的数据库操作Mapper
 * @createDate 2025-02-12 12:52:06
 * @Entity com.gs.xky.entity.TblBarcodeInformation
 */
public interface TblBarcodeInformationMapper extends BaseMapper<TblBarcodeInformation> {
}
src/main/java/com/gs/xky/service/DeliveryNoticeDetailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.gs.xky.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gs.xky.entity.DeliveryNoticeDetail;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE_DETAIL(送货通知单据明细表)】的数据库操作Service
 * @createDate 2025-02-11 22:30:01
 */
public interface DeliveryNoticeDetailService extends IService<DeliveryNoticeDetail> {
}
src/main/java/com/gs/xky/service/DeliveryNoticeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.gs.xky.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gs.xky.dto.XkyDetail;
import com.gs.xky.entity.DeliveryNotice;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE(送货通知单主表)】的数据库操作Service
 * @createDate 2025-02-11 20:55:22
 */
public interface DeliveryNoticeService extends IService<DeliveryNotice> {
    boolean saveDeliveryNotice(XkyDetail xkyDetail);
}
src/main/java/com/gs/xky/service/Impl/DeliveryNoticeDetailServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.gs.xky.service.Impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gs.xky.entity.DeliveryNoticeDetail;
import com.gs.xky.mapper.DeliveryNoticeDetailMapper;
import com.gs.xky.service.DeliveryNoticeDetailService;
import org.springframework.stereotype.Service;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE_DETAIL(送货通知单据明细表)】的数据库操作Service实现
 * @createDate 2025-02-11 22:30:01
 */
@Service
public class DeliveryNoticeDetailServiceImpl extends ServiceImpl<DeliveryNoticeDetailMapper, DeliveryNoticeDetail>
        implements DeliveryNoticeDetailService {
}
src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
package com.gs.xky.service.Impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gs.xky.dto.LineList;
import com.gs.xky.dto.XkyDetail;
import com.gs.xky.entity.DeliveryNotice;
import com.gs.xky.entity.DeliveryNoticeDetail;
import com.gs.xky.mapper.DeliveryNoticeMapper;
import com.gs.xky.service.DeliveryNoticeDetailService;
import com.gs.xky.service.DeliveryNoticeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€DELIVERY_NOTICE(送货通知单主表)】的数据库操作Service实现
 * @createDate 2025-02-11 20:55:22
 */
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class DeliveryNoticeServiceImpl extends ServiceImpl<DeliveryNoticeMapper, DeliveryNotice>
        implements DeliveryNoticeService {
    private final DeliveryNoticeDetailService detailService;
    @Override
    public boolean saveDeliveryNotice(XkyDetail xkyDetail) {
        LambdaQueryWrapper<DeliveryNotice> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DeliveryNotice::getDeliveryNo, xkyDetail.getDeliveryNo());
        long count = count(wrapper);
        if (count > 0) {
            LambdaUpdateWrapper<DeliveryNotice> updateWrapper = new LambdaUpdateWrapper<>();
            updateWrapper.eq(DeliveryNotice::getDeliveryNo, xkyDetail.getDeliveryNo());
            remove(updateWrapper);
        }
        DeliveryNotice deliveryNotice = new DeliveryNotice();
        BeanUtil.copyProperties(xkyDetail, deliveryNotice);
        long id = baseMapper.getNextVal();
        deliveryNotice.setId(id);
        List<LineList> lineList = xkyDetail.getLineList();
        if (CollUtil.isEmpty(lineList)) {
            return true;
        }
        List<DeliveryNoticeDetail> noticeDetails = new ArrayList<>();
        for (LineList list : lineList) {
            DeliveryNoticeDetail detail = new DeliveryNoticeDetail();
            BeanUtil.copyProperties(list, detail);
            detail.setPid(id);
            noticeDetails.add(detail);
        }
        return save(deliveryNotice) && detailService.saveBatch(noticeDetails);
    }
}
src/main/java/com/gs/xky/service/Impl/TblBarcodeInformationServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.gs.xky.service.Impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gs.xky.dto.BarcodeDeliveryNo;
import com.gs.xky.entity.TblBarcodeInformation;
import com.gs.xky.mapper.TblBarcodeInformationMapper;
import com.gs.xky.service.TblBarcodeInformationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€TBL_BARCODE_INFORMATION(条码信息表)】的数据库操作Service实现
 * @createDate 2025-02-12 12:52:06
 */
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class TblBarcodeInformationServiceImpl extends ServiceImpl<TblBarcodeInformationMapper, TblBarcodeInformation>
        implements TblBarcodeInformationService {
    @Override
    public boolean SaveBarcodeInformation(List<BarcodeDeliveryNo> barcodeList, String deliveryNo) {
        if (CollUtil.isEmpty(barcodeList)) {
            return false;
        }
        List<TblBarcodeInformation> tbBarcodeInformationList = new ArrayList<TblBarcodeInformation>();
        LambdaUpdateWrapper<TblBarcodeInformation> updateWrapper = new LambdaUpdateWrapper<>();
        for (BarcodeDeliveryNo barcodeDeliveryNo : barcodeList) {
            updateWrapper.clear();
            updateWrapper.eq(TblBarcodeInformation::getSmallBarcode, barcodeDeliveryNo.getSmallBarcode());
            remove(updateWrapper);
            TblBarcodeInformation barcodeInformation = new TblBarcodeInformation();
            BeanUtil.copyProperties(barcodeDeliveryNo, barcodeInformation);
            barcodeInformation.setDeliveryNo(deliveryNo);
            tbBarcodeInformationList.add(barcodeInformation);
        }
        return saveBatch(tbBarcodeInformationList);
    }
}
src/main/java/com/gs/xky/service/TblBarcodeInformationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.gs.xky.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gs.xky.dto.BarcodeDeliveryNo;
import com.gs.xky.entity.TblBarcodeInformation;
import java.util.List;
/**
 * @author 28567
 * @description é’ˆå¯¹è¡¨ã€TBL_BARCODE_INFORMATION(条码信息表)】的数据库操作Service
 * @createDate 2025-02-12 12:52:06
 */
public interface TblBarcodeInformationService extends IService<TblBarcodeInformation> {
    boolean SaveBarcodeInformation(List<BarcodeDeliveryNo> barcodeList, String deliveryNo);
}
src/main/java/com/gs/xky/service/XkyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,110 @@
package com.gs.xky.service;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gs.xky.config.ApiResponse;
import com.gs.xky.config.BodyParam;
import com.gs.xky.config.DataAcquisitionConfiguration;
import com.gs.xky.config.XkyCommonParam;
import com.gs.xky.dto.BarcodeDeliveryNo;
import com.gs.xky.dto.XkyDetail;
import com.gs.xky.dto.XkyEntity;
import com.gs.xky.entity.DeliveryNotice;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
@RequiredArgsConstructor
public class XkyService {
    private final ApiService apiService;
    private final DeliveryNoticeService deliveryNoticeService;
    private final TblBarcodeInformationService barcodeInformationService;
    public void GetSaveDetail() throws IOException {
        long currentTimeMillis = System.currentTimeMillis();
        XkyCommonParam param = XkyCommonParam.GetInit();
        // è®¡ç®—五分钟前的时间戳
        long startDate = currentTimeMillis - (65 * 60 * 1000); // 5 åˆ†é’Ÿ = 5 * 60 * 1000 æ¯«ç§’
        // åˆ›å»º BodyParam å¯¹è±¡å¹¶èµ‹å€¼
        BodyParam bodyParam = new BodyParam();
        bodyParam.setStartDate(startDate);
        bodyParam.setEndDate(currentTimeMillis);
        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
        bodyParam.setStatus(new int[]{1});
        bodyParam.setLogisticsStatus(2);
        param.setBody(bodyParam);
        ApiResponse<XkyEntity> noList = apiService.sendListRequest(param, XkyEntity.class, "https://openapi.xiekeyun.com/delivery/getNoList.json");
//        List<String> deliveryNoList = noList.getDataList().stream().map(XkyEntity::getDeliveryNo).collect(Collectors.toList());
        List<XkyEntity> deliveryNoList = noList.getDataList();
        LambdaUpdateWrapper<DeliveryNotice> deliveryNoticeWrapper = new LambdaUpdateWrapper<>();
        deliveryNoList.forEach(deliveryNo -> {
            try {
                if ("4".equals(deliveryNo.getStatus()) || "8".equals(deliveryNo.getStatus())) {
                    deliveryNoticeWrapper.clear();
                    deliveryNoticeWrapper.eq(DeliveryNotice::getDeliveryNo, deliveryNo.getDeliveryNo());
                    deliveryNoticeService.remove(deliveryNoticeWrapper);
                }
                XkyDetail detail = getDetail(deliveryNo.getDeliveryNo());
                deliveryNoticeService.saveDeliveryNotice(detail);
                List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo());
                barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });
    }
    private XkyDetail getDetail(String deliveryNo) throws IOException {
        XkyCommonParam param = XkyCommonParam.GetInit();
        // åˆ›å»º BodyParam å¯¹è±¡å¹¶èµ‹å€¼
        BodyParam bodyParam = new BodyParam();
        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
        bodyParam.setDeliveryNo(deliveryNo);
        param.setBody(bodyParam);
        ApiResponse<XkyDetail> noList = apiService.sendListRequest(param, XkyDetail.class, "https://openapi.xiekeyun.com/delivery/getDetail.json");
        return noList.getData();
    }
    private List<BarcodeDeliveryNo> GetBarcodeInformation(String deliveryNo) throws IOException {
        XkyCommonParam param = XkyCommonParam.GetInit();
        // åˆ›å»º BodyParam å¯¹è±¡å¹¶èµ‹å€¼
        BodyParam bodyParam = new BodyParam();
        bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE);
        bodyParam.setDeliveryNo(deliveryNo);
        param.setBody(bodyParam);
        ApiResponse<BarcodeDeliveryNo> noList = apiService.sendListRequest(param, BarcodeDeliveryNo.class, "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json");
        return noList.getDataList();
    }
}
src/main/resources/mapper/DeliveryNoticeDetailMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.xky.mapper.DeliveryNoticeDetailMapper">
</mapper>
src/main/resources/mapper/DeliveryNoticeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.xky.mapper.DeliveryNoticeMapper">
    <select id="getNextVal" resultType="java.lang.Long">
        SELECT SEQ_XKY.NEXTVAL
        FROM DUAL
    </select>
</mapper>
src/main/resources/mapper/TblBarcodeInformationMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gs.xky.mapper.TblBarcodeInformationMapper">
</mapper>
src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -1,9 +1,6 @@
package com.gs.xky;
import com.alibaba.fastjson.JSON;
import com.gs.xky.config.*;
import com.gs.xky.dto.XkyEntity;
import com.gs.xky.service.ApiService;
import com.gs.xky.service.XkyService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@@ -15,45 +12,12 @@
    @Autowired
    private ApiService apiService;
    private XkyService xkyService;
    @Test
    void contextLoads() throws IOException {
        long currentTimeMillis = System.currentTimeMillis();
        ApiCommonParam apiParam = new ApiCommonParam();
        apiParam.setAppKey(DataAcquisitionConfiguration.TEST_APP_KEY);//发携客云提供的appKey
        apiParam.setVersion("1.0");//接口版本
        apiParam.setOperateCompanyCode(DataAcquisitionConfiguration.TEST_COMPANY_CODE);//操作者所属公司编码
        apiParam.setOwnerCompanyCode(DataAcquisitionConfiguration.TEST_COMPANY_CODE);//数据所属公司编码,非集团公司默认赋值为操作公司
        apiParam.setTimestamps(currentTimeMillis / 1000);//当前时间对应的时间戳(秒数)
        String appSecret = DataAcquisitionConfiguration.TEST_APP_SECRET;//携客云提供的appSecret
        String sign = SignUtils.buildCurrentSign(JSON.toJSONString(apiParam), appSecret);
        apiParam.setSign(sign);
        // è®¡ç®—五分钟前的时间戳
        long startDate = currentTimeMillis - (65 * 60 * 1000); // 5 åˆ†é’Ÿ = 5 * 60 * 1000 æ¯«ç§’
        // åˆ›å»º BodyParam å¯¹è±¡å¹¶èµ‹å€¼
        BodyParam bodyParam = new BodyParam();
        bodyParam.setStartDate(startDate);
        bodyParam.setEndDate(currentTimeMillis);
        bodyParam.setErpCode("Z106");
        bodyParam.setStatus(new int[]{1});
        bodyParam.setLogisticsStatus(2);
        XkyCommonParam param = new XkyCommonParam();
        param.setCommonParam(apiParam);
        param.setBody(bodyParam);
        ApiResponse<XkyEntity> xkyEntityApiResponse = apiService.sendListRequest(param, XkyEntity.class, "https://openapi.xiekeyun.com/delivery/getNoList.json");
        System.out.println(JSON.toJSONString(xkyEntityApiResponse));
        xkyService.GetSaveDetail();
    }
}
}