Przeglądaj źródła

feat(customer): 添加企查查集成和快递100工具类

- 新增企查查工具类QccUtils实现企业工商信息查询功能
- 添加多个企查查相关实体类包括ARContact、Area、Branch、ChangeRecord等
- 新增快递100工具类Kd100Util实现物流跟踪查询功能
- 添加快递100相关实体类QueryTrackDTO和TrackVO
- 在订单模块pom.xml中引入快递100 SDK依赖
- 实现企查查API调用的企业信息获取功能
- 集成快递100实时物流查询接口
肖路 2 miesięcy temu
rodzic
commit
f143262af2
22 zmienionych plików z 1949 dodań i 0 usunięć
  1. 54 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/QccUtils.java
  2. 47 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ARContact.java
  3. 47 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Area.java
  4. 86 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Branch.java
  5. 60 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ChangeRecord.java
  6. 62 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/CompanyInfoResponse.java
  7. 49 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ContactInfo.java
  8. 34 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/DesignatedRepresentative.java
  9. 47 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Employee.java
  10. 112 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Industry.java
  11. 34 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/OriginalName.java
  12. 296 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Partner.java
  13. 12 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/RelatedOrg.java
  14. 60 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/RelatedProduct.java
  15. 673 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Result.java
  16. 34 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Tag.java
  17. 34 0
      ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Website.java
  18. 6 0
      ruoyi-modules/ruoyi-order/pom.xml
  19. 64 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/Kd100Util.java
  20. 38 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/QueryTrackDTO.java
  21. 37 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/TrackData.java
  22. 63 0
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/TrackVO.java

+ 54 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/QccUtils.java

@@ -0,0 +1,54 @@
+package org.dromara.customer.utils.qcc;
+
+import cn.hutool.crypto.SecureUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import lombok.extern.log4j.Log4j2;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.customer.utils.qcc.domain.CompanyInfoResponse;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 企查查工具类
+ * @author
+ * @date 2026/1/20 上午11:25
+ */
+@Slf4j
+public class QccUtils {
+
+    private final static String key = "323495053afe4529891db8e81a435456";
+    private final static String SecretKey = "9A3C050A46673CCC81C3B53EF14AF0B0";
+    private final static String url = "https://api.qichacha.com";
+
+    /**
+    * 获取企业工商信息
+    * */
+    public static CompanyInfoResponse getCompanyInfo(String companyName) {
+        HttpRequest request = HttpUtil.createGet(url + "/ECIV4/GetBasicDetailsByName");
+        //获取秒级时间戳
+        long timestamp = System.currentTimeMillis() / 1000;
+        String signStr = key + timestamp+ SecretKey;
+        String Token = SecureUtil.md5(signStr).toUpperCase();
+        request.header("Token",Token);
+        request.header("Timespan",String.valueOf(timestamp));
+        Map<String, Object> map = new HashMap<>();
+        map.put("key", key);
+        map.put("keyword", companyName);
+        request.form(map);
+        HttpResponse httpResponse = request.execute();
+        String body = httpResponse.body();
+        log.info("企查查返回结果:{}",body);
+        CompanyInfoResponse response = JSONUtil.toBean(body, CompanyInfoResponse.class);
+        return response;
+    }
+
+    public static void main(String[] args) {
+        QccUtils qccUtils = new QccUtils();
+        CompanyInfoResponse companyInfo = qccUtils.getCompanyInfo("湖北赢派科技有限公司");
+    }
+
+}

+ 47 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ARContact.java

@@ -0,0 +1,47 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * AR联系方式实体
+ * 描述企业的应收账款或客户服务联系方式
+ */
+public class ARContact {
+
+    /**
+     * 联系电话
+     */
+    private String ContactNo;
+    
+    /**
+     * 邮箱地址
+     */
+    private String EmailAddress;
+    
+    /**
+     * 联系地址
+     */
+    private String Address;
+
+    public String getContactNo() {
+        return ContactNo;
+    }
+
+    public void setContactNo(String contactNo) {
+        ContactNo = contactNo;
+    }
+
+    public String getEmailAddress() {
+        return EmailAddress;
+    }
+
+    public void setEmailAddress(String emailAddress) {
+        EmailAddress = emailAddress;
+    }
+
+    public String getAddress() {
+        return Address;
+    }
+
+    public void setAddress(String address) {
+        Address = address;
+    }
+}

+ 47 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Area.java

@@ -0,0 +1,47 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 地区信息实体
+ * 描述企业的地理位置信息
+ */
+public class Area {
+
+    /**
+     * 省份名称
+     */
+    private String Province;
+    
+    /**
+     * 城市名称
+     */
+    private String City;
+    
+    /**
+     * 区县名称
+     */
+    private String County;
+
+    public String getProvince() {
+        return Province;
+    }
+
+    public void setProvince(String province) {
+        Province = province;
+    }
+
+    public String getCity() {
+        return City;
+    }
+
+    public void setCity(String city) {
+        City = city;
+    }
+
+    public String getCounty() {
+        return County;
+    }
+
+    public void setCounty(String county) {
+        County = county;
+    }
+}

+ 86 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Branch.java

@@ -0,0 +1,86 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 分支机构实体
+ * 描述企业的分公司或分支机构信息
+ */
+public class Branch {
+
+    /**
+     * 公司ID
+     */
+    private String CompanyId;
+    
+    /**
+     * 注册号
+     */
+    private String RegNo;
+    
+    /**
+     * 分支机构名称
+     */
+    private String Name;
+    
+    /**
+     * 所属机构(登记机关)
+     */
+    private String BelongOrg;
+    
+    /**
+     * 统一社会信用代码
+     */
+    private String CreditCode;
+    
+    /**
+     * 操作员姓名
+     */
+    private String OperName;
+
+    public String getCompanyId() {
+        return CompanyId;
+    }
+
+    public void setCompanyId(String companyId) {
+        CompanyId = companyId;
+    }
+
+    public String getRegNo() {
+        return RegNo;
+    }
+
+    public void setRegNo(String regNo) {
+        RegNo = regNo;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getBelongOrg() {
+        return BelongOrg;
+    }
+
+    public void setBelongOrg(String belongOrg) {
+        BelongOrg = belongOrg;
+    }
+
+    public String getCreditCode() {
+        return CreditCode;
+    }
+
+    public void setCreditCode(String creditCode) {
+        CreditCode = creditCode;
+    }
+
+    public String getOperName() {
+        return OperName;
+    }
+
+    public void setOperName(String operName) {
+        OperName = operName;
+    }
+}

+ 60 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ChangeRecord.java

@@ -0,0 +1,60 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 变更记录实体
+ * 描述企业工商变更历史信息
+ */
+public class ChangeRecord {
+
+    /**
+     * 变更项目名称(如:注册资本变更、名称变更等)
+     */
+    private String ProjectName;
+    
+    /**
+     * 变更前内容
+     */
+    private String BeforeContent;
+    
+    /**
+     * 变更后内容
+     */
+    private String AfterContent;
+    
+    /**
+     * 变更日期
+     */
+    private String ChangeDate;
+
+    public String getProjectName() {
+        return ProjectName;
+    }
+
+    public void setProjectName(String projectName) {
+        ProjectName = projectName;
+    }
+
+    public String getBeforeContent() {
+        return BeforeContent;
+    }
+
+    public void setBeforeContent(String beforeContent) {
+        BeforeContent = beforeContent;
+    }
+
+    public String getAfterContent() {
+        return AfterContent;
+    }
+
+    public void setAfterContent(String afterContent) {
+        AfterContent = afterContent;
+    }
+
+    public String getChangeDate() {
+        return ChangeDate;
+    }
+
+    public void setChangeDate(String changeDate) {
+        ChangeDate = changeDate;
+    }
+}

+ 62 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/CompanyInfoResponse.java

@@ -0,0 +1,62 @@
+package org.dromara.customer.utils.qcc.domain;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * 企业信息查询响应实体
+ * 对应企查查API返回的完整响应结构
+ */
+public class CompanyInfoResponse {
+
+    /**
+     * 查询结果数据主体
+     */
+    private Result Result;
+    
+    /**
+     * 响应状态码,200表示成功
+     */
+    private String Status;
+    
+    /**
+     * 响应消息,描述请求处理结果
+     */
+    private String Message;
+    
+    /**
+     * 订单编号,用于标识本次查询
+     */
+    private String OrderNumber;
+
+    public org.dromara.customer.utils.qcc.domain.Result getResult() {
+        return Result;
+    }
+
+    public void setResult(org.dromara.customer.utils.qcc.domain.Result Result) {
+        this.Result = Result;
+    }
+
+    public String getStatus() {
+        return Status;
+    }
+
+    public void setStatus(String Status) {
+        this.Status = Status;
+    }
+
+    public String getMessage() {
+        return Message;
+    }
+
+    public void setMessage(String Message) {
+        this.Message = Message;
+    }
+
+    public String getOrderNumber() {
+        return OrderNumber;
+    }
+
+    public void setOrderNumber(String OrderNumber) {
+        this.OrderNumber = OrderNumber;
+    }
+}

+ 49 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/ContactInfo.java

@@ -0,0 +1,49 @@
+package org.dromara.customer.utils.qcc.domain;
+
+import java.util.List;
+
+/**
+ * 联系信息实体
+ * 描述企业的联系方式信息
+ */
+public class ContactInfo {
+
+    /**
+     * 官网列表
+     */
+    private List<Website> WebSite;
+    
+    /**
+     * 联系电话
+     */
+    private String PhoneNumber;
+    
+    /**
+     * 联系邮箱
+     */
+    private String Email;
+
+    public List<Website> getWebSite() {
+        return WebSite;
+    }
+
+    public void setWebSite(List<Website> webSite) {
+        WebSite = webSite;
+    }
+
+    public String getPhoneNumber() {
+        return PhoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        PhoneNumber = phoneNumber;
+    }
+
+    public String getEmail() {
+        return Email;
+    }
+
+    public void setEmail(String email) {
+        Email = email;
+    }
+}

+ 34 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/DesignatedRepresentative.java

@@ -0,0 +1,34 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 指定代表实体
+ * 描述企业的指定代表信息
+ */
+public class DesignatedRepresentative {
+
+    /**
+     * 合伙人名称
+     */
+    private String PartnerName;
+    
+    /**
+     * 授权人名称
+     */
+    private String DelegatedName;
+
+    public String getPartnerName() {
+        return PartnerName;
+    }
+
+    public void setPartnerName(String partnerName) {
+        PartnerName = partnerName;
+    }
+
+    public String getDelegatedName() {
+        return DelegatedName;
+    }
+
+    public void setDelegatedName(String delegatedName) {
+        DelegatedName = delegatedName;
+    }
+}

+ 47 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Employee.java

@@ -0,0 +1,47 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 员工实体
+ * 描述企业主要人员信息(如董事、监事、高级管理人员等)
+ */
+public class Employee {
+
+    /**
+     * 企查查内部唯一标识符
+     */
+    private String KeyNo;
+    
+    /**
+     * 员工姓名
+     */
+    private String Name;
+    
+    /**
+     * 职务(如:董事长、董事等)
+     */
+    private String Job;
+
+    public String getKeyNo() {
+        return KeyNo;
+    }
+
+    public void setKeyNo(String keyNo) {
+        KeyNo = keyNo;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getJob() {
+        return Job;
+    }
+
+    public void setJob(String job) {
+        Job = job;
+    }
+}

+ 112 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Industry.java

@@ -0,0 +1,112 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 行业信息实体
+ * 描述企业的行业分类信息
+ */
+public class Industry {
+
+    /**
+     * 行业代码
+     */
+    private String IndustryCode;
+    
+    /**
+     * 行业名称
+     */
+    private String Industry;
+    
+    /**
+     * 子行业代码
+     */
+    private String SubIndustryCode;
+    
+    /**
+     * 子行业名称
+     */
+    private String SubIndustry;
+    
+    /**
+     * 中类代码
+     */
+    private String MiddleCategoryCode;
+    
+    /**
+     * 中类名称
+     */
+    private String MiddleCategory;
+    
+    /**
+     * 小类代码
+     */
+    private String SmallCategoryCode;
+    
+    /**
+     * 小类名称
+     */
+    private String SmallCategory;
+
+    public String getIndustryCode() {
+        return IndustryCode;
+    }
+
+    public void setIndustryCode(String industryCode) {
+        IndustryCode = industryCode;
+    }
+
+    public String getIndustry() {
+        return Industry;
+    }
+
+    public void setIndustry(String industry) {
+        Industry = industry;
+    }
+
+    public String getSubIndustryCode() {
+        return SubIndustryCode;
+    }
+
+    public void setSubIndustryCode(String subIndustryCode) {
+        SubIndustryCode = subIndustryCode;
+    }
+
+    public String getSubIndustry() {
+        return SubIndustry;
+    }
+
+    public void setSubIndustry(String subIndustry) {
+        SubIndustry = subIndustry;
+    }
+
+    public String getMiddleCategoryCode() {
+        return MiddleCategoryCode;
+    }
+
+    public void setMiddleCategoryCode(String middleCategoryCode) {
+        MiddleCategoryCode = middleCategoryCode;
+    }
+
+    public String getMiddleCategory() {
+        return MiddleCategory;
+    }
+
+    public void setMiddleCategory(String middleCategory) {
+        MiddleCategory = middleCategory;
+    }
+
+    public String getSmallCategoryCode() {
+        return SmallCategoryCode;
+    }
+
+    public void setSmallCategoryCode(String smallCategoryCode) {
+        SmallCategoryCode = smallCategoryCode;
+    }
+
+    public String getSmallCategory() {
+        return SmallCategory;
+    }
+
+    public void setSmallCategory(String smallCategory) {
+        SmallCategory = smallCategory;
+    }
+}

+ 34 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/OriginalName.java

@@ -0,0 +1,34 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 原始名称实体
+ * 描述企业的曾用名信息
+ */
+public class OriginalName {
+
+    /**
+     * 曾用名
+     */
+    private String Name;
+    
+    /**
+     * 变更日期
+     */
+    private String ChangeDate;
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getChangeDate() {
+        return ChangeDate;
+    }
+
+    public void setChangeDate(String changeDate) {
+        ChangeDate = changeDate;
+    }
+}

+ 296 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Partner.java

@@ -0,0 +1,296 @@
+package org.dromara.customer.utils.qcc.domain;
+
+import java.util.List;
+
+/**
+ * 合伙人/股东实体
+ * 描述企业股东或合伙人的详细信息
+ */
+public class Partner {
+
+    /**
+     * 企查查内部唯一标识符
+     */
+    private String KeyNo;
+    
+    /**
+     * 企查查编码
+     */
+    private String QccCode;
+    
+    /**
+     * 股东名称
+     */
+    private String StockName;
+    
+    /**
+     * 股东类型(如:自然人股东、企业法人等)
+     */
+    private String StockType;
+    
+    /**
+     * 持股比例
+     */
+    private String StockPercent;
+    
+    /**
+     * 应缴出资额
+     */
+    private String ShouldCapi;
+    
+    /**
+     * 认缴资本
+     */
+    private String SubscribedCapital;
+    
+    /**
+     * 认缴资本单位
+     */
+    private String SubscribedCapitalUnit;
+    
+    /**
+     * 认缴资本币种
+     */
+    private String SubscribedCapitalCCY;
+    
+    /**
+     * 应缴出资日期
+     */
+    private String ShoudDate;
+    
+    /**
+     * 投资类型
+     */
+    private String InvestType;
+    
+    /**
+     * 投资名称
+     */
+    private String InvestName;
+    
+    /**
+     * 实际出资额
+     */
+    private String RealCapi;
+    
+    /**
+     * 实缴资本
+     */
+    private String PaidUpCapital;
+    
+    /**
+     * 实缴资本单位
+     */
+    private String PaidUpCapitalUnit;
+    
+    /**
+     * 实缴资本币种
+     */
+    private String PaidUpCapitalCCY;
+    
+    /**
+     * 出资日期
+     */
+    private String CapiDate;
+    
+    /**
+     * 标签列表(如:大股东、实际控制人等)
+     */
+    private List<String> TagsList;
+    
+    /**
+     * 最终受益比例
+     */
+    private String FinalBenefitPercent;
+    
+    /**
+     * 关联产品信息
+     */
+    private RelatedProduct RelatedProduct;
+    
+    /**
+     * 关联组织信息
+     */
+    private RelatedOrg RelatedOrg;
+    
+    /**
+     * 地区信息
+     */
+    private String Area;
+
+    public String getKeyNo() {
+        return KeyNo;
+    }
+
+    public void setKeyNo(String keyNo) {
+        KeyNo = keyNo;
+    }
+
+    public String getQccCode() {
+        return QccCode;
+    }
+
+    public void setQccCode(String qccCode) {
+        QccCode = qccCode;
+    }
+
+    public String getStockName() {
+        return StockName;
+    }
+
+    public void setStockName(String stockName) {
+        StockName = stockName;
+    }
+
+    public String getStockType() {
+        return StockType;
+    }
+
+    public void setStockType(String stockType) {
+        StockType = stockType;
+    }
+
+    public String getStockPercent() {
+        return StockPercent;
+    }
+
+    public void setStockPercent(String stockPercent) {
+        StockPercent = stockPercent;
+    }
+
+    public String getShouldCapi() {
+        return ShouldCapi;
+    }
+
+    public void setShouldCapi(String shouldCapi) {
+        ShouldCapi = shouldCapi;
+    }
+
+    public String getSubscribedCapital() {
+        return SubscribedCapital;
+    }
+
+    public void setSubscribedCapital(String subscribedCapital) {
+        SubscribedCapital = subscribedCapital;
+    }
+
+    public String getSubscribedCapitalUnit() {
+        return SubscribedCapitalUnit;
+    }
+
+    public void setSubscribedCapitalUnit(String subscribedCapitalUnit) {
+        SubscribedCapitalUnit = subscribedCapitalUnit;
+    }
+
+    public String getSubscribedCapitalCCY() {
+        return SubscribedCapitalCCY;
+    }
+
+    public void setSubscribedCapitalCCY(String subscribedCapitalCCY) {
+        SubscribedCapitalCCY = subscribedCapitalCCY;
+    }
+
+    public String getShoudDate() {
+        return ShoudDate;
+    }
+
+    public void setShoudDate(String shoudDate) {
+        ShoudDate = shoudDate;
+    }
+
+    public String getInvestType() {
+        return InvestType;
+    }
+
+    public void setInvestType(String investType) {
+        InvestType = investType;
+    }
+
+    public String getInvestName() {
+        return InvestName;
+    }
+
+    public void setInvestName(String investName) {
+        InvestName = investName;
+    }
+
+    public String getRealCapi() {
+        return RealCapi;
+    }
+
+    public void setRealCapi(String realCapi) {
+        RealCapi = realCapi;
+    }
+
+    public String getPaidUpCapital() {
+        return PaidUpCapital;
+    }
+
+    public void setPaidUpCapital(String paidUpCapital) {
+        PaidUpCapital = paidUpCapital;
+    }
+
+    public String getPaidUpCapitalUnit() {
+        return PaidUpCapitalUnit;
+    }
+
+    public void setPaidUpCapitalUnit(String paidUpCapitalUnit) {
+        PaidUpCapitalUnit = paidUpCapitalUnit;
+    }
+
+    public String getPaidUpCapitalCCY() {
+        return PaidUpCapitalCCY;
+    }
+
+    public void setPaidUpCapitalCCY(String paidUpCapitalCCY) {
+        PaidUpCapitalCCY = paidUpCapitalCCY;
+    }
+
+    public String getCapiDate() {
+        return CapiDate;
+    }
+
+    public void setCapiDate(String capiDate) {
+        CapiDate = capiDate;
+    }
+
+    public List<String> getTagsList() {
+        return TagsList;
+    }
+
+    public void setTagsList(List<String> tagsList) {
+        TagsList = tagsList;
+    }
+
+    public String getFinalBenefitPercent() {
+        return FinalBenefitPercent;
+    }
+
+    public void setFinalBenefitPercent(String finalBenefitPercent) {
+        FinalBenefitPercent = finalBenefitPercent;
+    }
+
+    public RelatedProduct getRelatedProduct() {
+        return RelatedProduct;
+    }
+
+    public void setRelatedProduct(RelatedProduct relatedProduct) {
+        RelatedProduct = relatedProduct;
+    }
+
+    public RelatedOrg getRelatedOrg() {
+        return RelatedOrg;
+    }
+
+    public void setRelatedOrg(RelatedOrg relatedOrg) {
+        RelatedOrg = relatedOrg;
+    }
+
+    public String getArea() {
+        return Area;
+    }
+
+    public void setArea(String area) {
+        Area = area;
+    }
+}

+ 12 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/RelatedOrg.java

@@ -0,0 +1,12 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 关联组织实体
+ * 描述与企业相关的组织信息
+ * 注意:根据JSON示例,此字段可能为空值
+ */
+public class RelatedOrg {
+
+    // 由于JSON示例中RelatedOrg为null,这里只添加基本结构
+    // 根据实际需要添加相应属性
+}

+ 60 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/RelatedProduct.java

@@ -0,0 +1,60 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 关联产品实体
+ * 描述与企业相关的投资产品信息
+ */
+public class RelatedProduct {
+
+    /**
+     * 产品ID
+     */
+    private String Id;
+    
+    /**
+     * 产品名称
+     */
+    private String Name;
+    
+    /**
+     * 融资轮次
+     */
+    private String Round;
+    
+    /**
+     * 融资次数
+     */
+    private String FinancingCount;
+
+    public String getId() {
+        return Id;
+    }
+
+    public void setId(String id) {
+        Id = id;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getRound() {
+        return Round;
+    }
+
+    public void setRound(String round) {
+        Round = round;
+    }
+
+    public String getFinancingCount() {
+        return FinancingCount;
+    }
+
+    public void setFinancingCount(String financingCount) {
+        FinancingCount = financingCount;
+    }
+}

+ 673 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Result.java

@@ -0,0 +1,673 @@
+package org.dromara.customer.utils.qcc.domain;
+
+import java.util.List;
+
+/**
+ * 企业信息查询结果实体
+ * 包含企业的详细信息,如股东、员工、分支机构等
+ */
+public class Result {
+
+    /**
+     * 合伙人/股东列表
+     */
+    private List<Partner> Partners;
+    
+    /**
+     * 员工信息列表
+     */
+    private List<Employee> Employees;
+    
+    /**
+     * 分支机构列表
+     */
+    private List<Branch> Branches;
+    
+    /**
+     * 变更记录列表
+     */
+    private List<ChangeRecord> ChangeRecords;
+    
+    /**
+     * 联系信息
+     */
+    private ContactInfo ContactInfo;
+    
+    /**
+     * 行业信息
+     */
+    private Industry Industry;
+    
+    /**
+     * 地区信息
+     */
+    private Area Area;
+    
+    /**
+     * 地区代码
+     */
+    private String AreaCode;
+    
+    /**
+     * 新兴产业列表
+     */
+    private List<Object> EmergingIndustyList;
+    
+    /**
+     * 撤销信息
+     */
+    private Object RevokeInfo;
+    
+    /**
+     * 参保人数
+     */
+    private String InsuredCount;
+    
+    /**
+     * 英文名称
+     */
+    private String EnglishName;
+    
+    /**
+     * 人员规模范围
+     */
+    private String PersonScope;
+    
+    /**
+     * IX代码
+     */
+    private Object IXCode;
+    
+    /**
+     * 标签列表
+     */
+    private List<Tag> TagList;
+    
+    /**
+     * AR联系方式列表
+     */
+    private List<ARContact> ARContactList;
+    
+    /**
+     * 经济类型代码列表
+     */
+    private List<String> EconKindCodeList;
+    
+    /**
+     * 企查查内部唯一标识符
+     */
+    private String KeyNo;
+    
+    /**
+     * 企业名称
+     */
+    private String Name;
+    
+    /**
+     * 企业编号
+     */
+    private String No;
+    
+    /**
+     * 登记机关
+     */
+    private String BelongOrg;
+    
+    /**
+     * 企业操作员ID
+     */
+    private String OperId;
+    
+    /**
+     * 法定代表人姓名
+     */
+    private String OperName;
+    
+    /**
+     * 指定代表列表
+     */
+    private List<DesignatedRepresentative> DesignatedRepresentativeList;
+    
+    /**
+     * 成立日期
+     */
+    private String StartDate;
+    
+    /**
+     * 营业期限截止日期
+     */
+    private String EndDate;
+    
+    /**
+     * 企业状态
+     */
+    private String Status;
+    
+    /**
+     * 所在省份代码
+     */
+    private String Province;
+    
+    /**
+     * 最后更新日期
+     */
+    private String UpdatedDate;
+    
+    /**
+     * 统一社会信用代码
+     */
+    private String CreditCode;
+    
+    /**
+     * 注册资本(格式化显示)
+     */
+    private String RegistCapi;
+    
+    /**
+     * 注册资本金额
+     */
+    private String RegisteredCapital;
+    
+    /**
+     * 注册资本单位
+     */
+    private String RegisteredCapitalUnit;
+    
+    /**
+     * 注册资本币种
+     */
+    private String RegisteredCapitalCCY;
+    
+    /**
+     * 经济性质
+     */
+    private String EconKind;
+    
+    /**
+     * 企业地址
+     */
+    private String Address;
+    
+    /**
+     * 经营范围
+     */
+    private String Scope;
+    
+    /**
+     * 营业期限起始日期
+     */
+    private String TermStart;
+    
+    /**
+     * 营业期限结束日期
+     */
+    private String TermEnd;
+    
+    /**
+     * 核准日期
+     */
+    private String CheckDate;
+    
+    /**
+     * 组织机构代码
+     */
+    private String OrgNo;
+    
+    /**
+     * 是否上市标志
+     */
+    private String IsOnStock;
+    
+    /**
+     * 股票代码
+     */
+    private String StockNumber;
+    
+    /**
+     * 股票类型
+     */
+    private String StockType;
+    
+    /**
+     * 曾用名列表
+     */
+    private List<OriginalName> OriginalName;
+    
+    /**
+     * 企业logo图片URL
+     */
+    private String ImageUrl;
+    
+    /**
+     * 企业类型
+     */
+    private String EntType;
+    
+    /**
+     * 认缴资本
+     */
+    private String RecCap;
+    
+    /**
+     * 实缴资本金额
+     */
+    private String PaidUpCapital;
+    
+    /**
+     * 实缴资本单位
+     */
+    private String PaidUpCapitalUnit;
+    
+    /**
+     * 实缴资本币种
+     */
+    private String PaidUpCapitalCCY;
+
+    public List<Partner> getPartners() {
+        return Partners;
+    }
+
+    public void setPartners(List<Partner> partners) {
+        Partners = partners;
+    }
+
+    public List<Employee> getEmployees() {
+        return Employees;
+    }
+
+    public void setEmployees(List<Employee> employees) {
+        Employees = employees;
+    }
+
+    public List<Branch> getBranches() {
+        return Branches;
+    }
+
+    public void setBranches(List<Branch> branches) {
+        Branches = branches;
+    }
+
+    public List<ChangeRecord> getChangeRecords() {
+        return ChangeRecords;
+    }
+
+    public void setChangeRecords(List<ChangeRecord> changeRecords) {
+        ChangeRecords = changeRecords;
+    }
+
+    public ContactInfo getContactInfo() {
+        return ContactInfo;
+    }
+
+    public void setContactInfo(ContactInfo contactInfo) {
+        ContactInfo = contactInfo;
+    }
+
+    public Industry getIndustry() {
+        return Industry;
+    }
+
+    public void setIndustry(Industry industry) {
+        Industry = industry;
+    }
+
+    public Area getArea() {
+        return Area;
+    }
+
+    public void setArea(Area area) {
+        Area = area;
+    }
+
+    public String getAreaCode() {
+        return AreaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        AreaCode = areaCode;
+    }
+
+    public List<Object> getEmergingIndustyList() {
+        return EmergingIndustyList;
+    }
+
+    public void setEmergingIndustyList(List<Object> emergingIndustyList) {
+        EmergingIndustyList = emergingIndustyList;
+    }
+
+    public Object getRevokeInfo() {
+        return RevokeInfo;
+    }
+
+    public void setRevokeInfo(Object revokeInfo) {
+        RevokeInfo = revokeInfo;
+    }
+
+    public String getInsuredCount() {
+        return InsuredCount;
+    }
+
+    public void setInsuredCount(String insuredCount) {
+        InsuredCount = insuredCount;
+    }
+
+    public String getEnglishName() {
+        return EnglishName;
+    }
+
+    public void setEnglishName(String englishName) {
+        EnglishName = englishName;
+    }
+
+    public String getPersonScope() {
+        return PersonScope;
+    }
+
+    public void setPersonScope(String personScope) {
+        PersonScope = personScope;
+    }
+
+    public Object getIXCode() {
+        return IXCode;
+    }
+
+    public void setIXCode(Object IXCode) {
+        this.IXCode = IXCode;
+    }
+
+    public List<Tag> getTagList() {
+        return TagList;
+    }
+
+    public void setTagList(List<Tag> tagList) {
+        TagList = tagList;
+    }
+
+    public List<ARContact> getARContactList() {
+        return ARContactList;
+    }
+
+    public void setARContactList(List<ARContact> ARContactList) {
+        this.ARContactList = ARContactList;
+    }
+
+    public List<String> getEconKindCodeList() {
+        return EconKindCodeList;
+    }
+
+    public void setEconKindCodeList(List<String> econKindCodeList) {
+        EconKindCodeList = econKindCodeList;
+    }
+
+    public String getKeyNo() {
+        return KeyNo;
+    }
+
+    public void setKeyNo(String keyNo) {
+        KeyNo = keyNo;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getNo() {
+        return No;
+    }
+
+    public void setNo(String no) {
+        No = no;
+    }
+
+    public String getBelongOrg() {
+        return BelongOrg;
+    }
+
+    public void setBelongOrg(String belongOrg) {
+        BelongOrg = belongOrg;
+    }
+
+    public String getOperId() {
+        return OperId;
+    }
+
+    public void setOperId(String operId) {
+        OperId = operId;
+    }
+
+    public String getOperName() {
+        return OperName;
+    }
+
+    public void setOperName(String operName) {
+        OperName = operName;
+    }
+
+    public List<DesignatedRepresentative> getDesignatedRepresentativeList() {
+        return DesignatedRepresentativeList;
+    }
+
+    public void setDesignatedRepresentativeList(List<DesignatedRepresentative> designatedRepresentativeList) {
+        DesignatedRepresentativeList = designatedRepresentativeList;
+    }
+
+    public String getStartDate() {
+        return StartDate;
+    }
+
+    public void setStartDate(String startDate) {
+        StartDate = startDate;
+    }
+
+    public String getEndDate() {
+        return EndDate;
+    }
+
+    public void setEndDate(String endDate) {
+        EndDate = endDate;
+    }
+
+    public String getStatus() {
+        return Status;
+    }
+
+    public void setStatus(String status) {
+        Status = status;
+    }
+
+    public String getProvince() {
+        return Province;
+    }
+
+    public void setProvince(String province) {
+        Province = province;
+    }
+
+    public String getUpdatedDate() {
+        return UpdatedDate;
+    }
+
+    public void setUpdatedDate(String updatedDate) {
+        UpdatedDate = updatedDate;
+    }
+
+    public String getCreditCode() {
+        return CreditCode;
+    }
+
+    public void setCreditCode(String creditCode) {
+        CreditCode = creditCode;
+    }
+
+    public String getRegistCapi() {
+        return RegistCapi;
+    }
+
+    public void setRegistCapi(String registCapi) {
+        RegistCapi = registCapi;
+    }
+
+    public String getRegisteredCapital() {
+        return RegisteredCapital;
+    }
+
+    public void setRegisteredCapital(String registeredCapital) {
+        RegisteredCapital = registeredCapital;
+    }
+
+    public String getRegisteredCapitalUnit() {
+        return RegisteredCapitalUnit;
+    }
+
+    public void setRegisteredCapitalUnit(String registeredCapitalUnit) {
+        RegisteredCapitalUnit = registeredCapitalUnit;
+    }
+
+    public String getRegisteredCapitalCCY() {
+        return RegisteredCapitalCCY;
+    }
+
+    public void setRegisteredCapitalCCY(String registeredCapitalCCY) {
+        RegisteredCapitalCCY = registeredCapitalCCY;
+    }
+
+    public String getEconKind() {
+        return EconKind;
+    }
+
+    public void setEconKind(String econKind) {
+        EconKind = econKind;
+    }
+
+    public String getAddress() {
+        return Address;
+    }
+
+    public void setAddress(String address) {
+        Address = address;
+    }
+
+    public String getScope() {
+        return Scope;
+    }
+
+    public void setScope(String scope) {
+        Scope = scope;
+    }
+
+    public String getTermStart() {
+        return TermStart;
+    }
+
+    public void setTermStart(String termStart) {
+        TermStart = termStart;
+    }
+
+    public String getTermEnd() {
+        return TermEnd;
+    }
+
+    public void setTermEnd(String termEnd) {
+        TermEnd = termEnd;
+    }
+
+    public String getCheckDate() {
+        return CheckDate;
+    }
+
+    public void setCheckDate(String checkDate) {
+        CheckDate = checkDate;
+    }
+
+    public String getOrgNo() {
+        return OrgNo;
+    }
+
+    public void setOrgNo(String orgNo) {
+        OrgNo = orgNo;
+    }
+
+    public String getIsOnStock() {
+        return IsOnStock;
+    }
+
+    public void setIsOnStock(String isOnStock) {
+        IsOnStock = isOnStock;
+    }
+
+    public String getStockNumber() {
+        return StockNumber;
+    }
+
+    public void setStockNumber(String stockNumber) {
+        StockNumber = stockNumber;
+    }
+
+    public String getStockType() {
+        return StockType;
+    }
+
+    public void setStockType(String stockType) {
+        StockType = stockType;
+    }
+
+    public List<OriginalName> getOriginalName() {
+        return OriginalName;
+    }
+
+    public void setOriginalName(List<OriginalName> originalName) {
+        OriginalName = originalName;
+    }
+
+    public String getImageUrl() {
+        return ImageUrl;
+    }
+
+    public void setImageUrl(String imageUrl) {
+        ImageUrl = imageUrl;
+    }
+
+    public String getEntType() {
+        return EntType;
+    }
+
+    public void setEntType(String entType) {
+        EntType = entType;
+    }
+
+    public String getRecCap() {
+        return RecCap;
+    }
+
+    public void setRecCap(String recCap) {
+        RecCap = recCap;
+    }
+
+    public String getPaidUpCapital() {
+        return PaidUpCapital;
+    }
+
+    public void setPaidUpCapital(String paidUpCapital) {
+        PaidUpCapital = paidUpCapital;
+    }
+
+    public String getPaidUpCapitalUnit() {
+        return PaidUpCapitalUnit;
+    }
+
+    public void setPaidUpCapitalUnit(String paidUpCapitalUnit) {
+        PaidUpCapitalUnit = paidUpCapitalUnit;
+    }
+
+    public String getPaidUpCapitalCCY() {
+        return PaidUpCapitalCCY;
+    }
+
+    public void setPaidUpCapitalCCY(String paidUpCapitalCCY) {
+        PaidUpCapitalCCY = paidUpCapitalCCY;
+    }
+}

+ 34 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Tag.java

@@ -0,0 +1,34 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 标签实体
+ * 描述企业的各种标签信息(如高新技术企业、存续状态等)
+ */
+public class Tag {
+
+    /**
+     * 标签类型编码
+     */
+    private String Type;
+    
+    /**
+     * 标签名称
+     */
+    private String Name;
+
+    public String getType() {
+        return Type;
+    }
+
+    public void setType(String type) {
+        Type = type;
+    }
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+}

+ 34 - 0
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/utils/qcc/domain/Website.java

@@ -0,0 +1,34 @@
+package org.dromara.customer.utils.qcc.domain;
+
+/**
+ * 网站实体
+ * 描述企业官网信息
+ */
+public class Website {
+
+    /**
+     * 网站名称
+     */
+    private String Name;
+    
+    /**
+     * 网站URL地址
+     */
+    private String Url;
+
+    public String getName() {
+        return Name;
+    }
+
+    public void setName(String name) {
+        Name = name;
+    }
+
+    public String getUrl() {
+        return Url;
+    }
+
+    public void setUrl(String url) {
+        Url = url;
+    }
+}

+ 6 - 0
ruoyi-modules/ruoyi-order/pom.xml

@@ -117,6 +117,12 @@
             <artifactId>ruoyi-api-customer</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.github.kuaidi100-api</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.11</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 64 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/Kd100Util.java

@@ -0,0 +1,64 @@
+package org.dromara.order.utils.kd100;
+
+import cn.hutool.crypto.digest.DigestUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.kuaidi100.sdk.api.QueryTrack;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.pojo.HttpResult;
+import com.kuaidi100.sdk.request.QueryTrackParam;
+import com.kuaidi100.sdk.request.QueryTrackReq;
+import com.kuaidi100.sdk.utils.SignUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.order.utils.kd100.domain.QueryTrackDTO;
+import org.dromara.order.utils.kd100.domain.TrackVO;
+
+/**
+ * 快递100工具类
+ * @author
+ * @date 2026/1/20 下午2:52
+ */
+@Slf4j
+public class Kd100Util {
+
+    private final static String key = "PItbfkli5546";
+    private final static String secret = "13d914eaa36446db876f4c4a90f4879f";
+    private final static String customer = "7B5A055F85B149CC724E53961E28D0FF";
+    private final static String userId = "0205e7a47efc4f2d9107f776444d0ddd";
+    private final static String url = "https://poll.kuaidi100.com";
+
+    /**
+    * 实时快递查询
+    * */
+    public static TrackVO queryTrack(QueryTrackDTO param) {
+        try {
+            QueryTrackReq req = new QueryTrackReq();
+            QueryTrackParam trackParam = new QueryTrackParam();
+            trackParam.setPhone(param.getPhone());
+            trackParam.setCom(param.getCom());
+            trackParam.setNum(param.getNum());
+            String jsonParam = JSONObject.toJSONString(trackParam);
+            req.setParam(jsonParam);
+            req.setCustomer(customer);
+            req.setSign(SignUtils.querySign(jsonParam, key, customer));
+            IBaseClient client = new QueryTrack();
+            HttpResult execute = client.execute(req);
+            return JSONUtil.toBean(execute.getBody(), TrackVO.class);
+        } catch (Exception e) {
+            log.error("[KuaiDi100]实时快递查询,异常: ", e);
+            throw new RuntimeException("快递100查询异常!");
+        }
+    }
+
+    public static void main(String[] args) {
+        QueryTrackDTO param = QueryTrackDTO.builder()
+                .com("yunda")
+                .num("434848895994511")
+                .phone("17683851082")
+                .build();
+        TrackVO orderTracesByJson = queryTrack(param);
+        System.out.println(JSONUtil.toJsonStr(orderTracesByJson));
+    }
+}

+ 38 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/QueryTrackDTO.java

@@ -0,0 +1,38 @@
+package org.dromara.order.utils.kd100.domain;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * -- QueryTrackDTO
+ *
+ * @author lmay
+ * @since 2025/2/28 14:58
+ */
+@Data
+@Builder
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class QueryTrackDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 查询的快递公司的编码,一律用小写字母
+     */
+    private String com;
+
+    /**
+     * 查询的快递单号, 单号的最大长度是32个字符
+     */
+    private String num;
+
+    /**
+     * 收件人或寄件人的手机号或固话
+     * - 顺丰速运、顺丰快运必填,其他快递公司选填
+     */
+    private String phone;
+}

+ 37 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/TrackData.java

@@ -0,0 +1,37 @@
+package org.dromara.order.utils.kd100.domain;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * -- TrackData
+ *
+ * @author lmay
+ * @since 2025/2/28 15:11
+ */
+@Data
+@Builder
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class TrackData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 时间,原始格式
+     */
+    private String time;
+
+    /**
+     * 格式化后时间
+     */
+    private String ftime;
+
+    /**
+     * 内容
+     */
+    private String context;
+}

+ 63 - 0
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/utils/kd100/domain/TrackVO.java

@@ -0,0 +1,63 @@
+package org.dromara.order.utils.kd100.domain;
+
+import lombok.*;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * -- TrackVO
+ *
+ * @author lmay
+ * @since 2025/2/28 15:02
+ */
+@Data
+@Builder
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+public class TrackVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 消息体
+     */
+    private String message;
+
+    /**
+     * 快递单当前状态,默认为0在途,1揽收,2疑难,3签收,4退签,5派件,8清关,14拒签等10个基础物流状态
+     */
+    private String state;
+
+    /**
+     * 是否签收标记,0未签收,1已签收,请忽略,明细状态请参考state字段
+     */
+    private String ischeck;
+
+    /**
+     * 快递单明细状态标记,暂未实现,请忽略
+     */
+    private String condition;
+
+    /**
+     * 快递公司编码,一律用小写字母
+     */
+    private String com;
+
+    /**
+     * 单号
+     */
+    private String nu;
+
+    /**
+     * 通讯状态,请忽略
+     */
+    private String status;
+
+    /**
+     * 最新查询结果,数组,包含多项,全量,倒序(即时间最新的在最前),每项都是对象,对象包含字段请展开
+     */
+    private List<TrackData> data;
+}