diff --git a/ccdi-info-collection/pom.xml b/ccdi-info-collection/pom.xml
index 34473cc6..8158c290 100644
--- a/ccdi-info-collection/pom.xml
+++ b/ccdi-info-collection/pom.xml
@@ -29,6 +29,12 @@
ruoyi-system
+
+ com.ruoyi
+ ccdi-lsfx
+ 3.9.1
+
+
com.alibaba
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiCreditNegativeInfo.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiCreditNegativeInfo.java
new file mode 100644
index 00000000..c490fd28
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiCreditNegativeInfo.java
@@ -0,0 +1,39 @@
+package com.ruoyi.info.collection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 员工征信负面信息对象 ccdi_credit_negative_info
+ */
+@Data
+@TableName("ccdi_credit_negative_info")
+public class CcdiCreditNegativeInfo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.AUTO)
+ private Long negativeId;
+
+ private String personId;
+ private String personName;
+ private Date queryDate;
+ private Integer civilCnt;
+ private Integer enforceCnt;
+ private Integer admCnt;
+ private BigDecimal civilLmt;
+ private BigDecimal enforceLmt;
+ private BigDecimal admLmt;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiDebtsInfo.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiDebtsInfo.java
new file mode 100644
index 00000000..eff8bd56
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/CcdiDebtsInfo.java
@@ -0,0 +1,40 @@
+package com.ruoyi.info.collection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 员工征信负债明细对象 ccdi_debts_info
+ */
+@Data
+@TableName("ccdi_debts_info")
+public class CcdiDebtsInfo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.AUTO)
+ private Long debtId;
+
+ private String personId;
+ private String personName;
+ private Date queryDate;
+ private String debtMainType;
+ private String debtSubType;
+ private String creditorType;
+ private String debtName;
+ private BigDecimal principalBalance;
+ private BigDecimal debtTotalAmount;
+ private String debtStatus;
+ private String createBy;
+ private Date createTime;
+ private String updateBy;
+ private Date updateTime;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiCreditInfoQueryDTO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiCreditInfoQueryDTO.java
new file mode 100644
index 00000000..3554cb93
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/dto/CcdiCreditInfoQueryDTO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.info.collection.domain.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 征信维护查询 DTO
+ */
+@Data
+public class CcdiCreditInfoQueryDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private String name;
+ private String staffId;
+ private String idCard;
+ private String maintained;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoDetailVO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoDetailVO.java
new file mode 100644
index 00000000..6983eb09
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoDetailVO.java
@@ -0,0 +1,24 @@
+package com.ruoyi.info.collection.domain.vo;
+
+import com.ruoyi.info.collection.domain.CcdiDebtsInfo;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 征信详情聚合 VO
+ */
+@Data
+public class CreditInfoDetailVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private String personId;
+ private String personName;
+ private String idCard;
+ private CreditInfoNegativeVO negativeInfo;
+ private List debtList;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoListVO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoListVO.java
new file mode 100644
index 00000000..8c7017e1
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoListVO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.info.collection.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 征信维护列表 VO
+ */
+@Data
+public class CreditInfoListVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private Long staffId;
+ private String name;
+ private String idCard;
+ private String deptName;
+ private Date queryDate;
+ private Long debtCount;
+ private BigDecimal debtTotalAmount;
+ private Integer civilCnt;
+ private Integer enforceCnt;
+ private Integer admCnt;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoNegativeVO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoNegativeVO.java
new file mode 100644
index 00000000..aca1233b
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoNegativeVO.java
@@ -0,0 +1,28 @@
+package com.ruoyi.info.collection.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 征信负面信息展示 VO
+ */
+@Data
+public class CreditInfoNegativeVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private String personId;
+ private String personName;
+ private Date queryDate;
+ private Integer civilCnt;
+ private Integer enforceCnt;
+ private Integer admCnt;
+ private BigDecimal civilLmt;
+ private BigDecimal enforceLmt;
+ private BigDecimal admLmt;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadFailureVO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadFailureVO.java
new file mode 100644
index 00000000..7085fd11
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadFailureVO.java
@@ -0,0 +1,21 @@
+package com.ruoyi.info.collection.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 征信上传失败结果 VO
+ */
+@Data
+public class CreditInfoUploadFailureVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private String fileName;
+ private String personId;
+ private String personName;
+ private String reason;
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadResultVO.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadResultVO.java
new file mode 100644
index 00000000..8920214f
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/domain/vo/CreditInfoUploadResultVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.info.collection.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 征信上传结果 VO
+ */
+@Data
+public class CreditInfoUploadResultVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ private Integer totalCount;
+ private Integer successCount;
+ private Integer failureCount;
+ private List failures = new ArrayList<>();
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditInfoQueryMapper.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditInfoQueryMapper.java
new file mode 100644
index 00000000..aa610a98
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditInfoQueryMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.info.collection.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.info.collection.domain.dto.CcdiCreditInfoQueryDTO;
+import com.ruoyi.info.collection.domain.vo.CreditInfoDetailVO;
+import com.ruoyi.info.collection.domain.vo.CreditInfoListVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 征信维护聚合查询 Mapper
+ */
+public interface CcdiCreditInfoQueryMapper {
+
+ Page selectCreditInfoPage(@Param("page") Page page,
+ @Param("query") CcdiCreditInfoQueryDTO queryDTO);
+
+ CreditInfoListVO selectCreditInfoSummaryByPersonId(@Param("personId") String personId);
+
+ CreditInfoDetailVO selectCreditInfoDetailByPersonId(@Param("personId") String personId);
+
+ List selectCreditInfoList(@Param("query") CcdiCreditInfoQueryDTO queryDTO);
+
+ LocalDate selectLatestQueryDate(@Param("personId") String personId);
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditNegativeInfoMapper.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditNegativeInfoMapper.java
new file mode 100644
index 00000000..ce399847
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiCreditNegativeInfoMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.info.collection.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.info.collection.domain.CcdiCreditNegativeInfo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 员工征信负面信息 Mapper
+ */
+public interface CcdiCreditNegativeInfoMapper extends BaseMapper {
+
+ CcdiCreditNegativeInfo selectByPersonId(@Param("personId") String personId);
+
+ int deleteByPersonId(@Param("personId") String personId);
+}
diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiDebtsInfoMapper.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiDebtsInfoMapper.java
new file mode 100644
index 00000000..9ceaf8b0
--- /dev/null
+++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/mapper/CcdiDebtsInfoMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.info.collection.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.info.collection.domain.CcdiDebtsInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 员工征信负债明细 Mapper
+ */
+public interface CcdiDebtsInfoMapper extends BaseMapper {
+
+ List selectByPersonId(@Param("personId") String personId);
+
+ int deleteByPersonId(@Param("personId") String personId);
+
+ int insertBatch(@Param("list") List list);
+}
diff --git a/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiCreditInfoServiceImplTest.java b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiCreditInfoServiceImplTest.java
new file mode 100644
index 00000000..323c8480
--- /dev/null
+++ b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiCreditInfoServiceImplTest.java
@@ -0,0 +1,18 @@
+package com.ruoyi.info.collection.service;
+
+import com.ruoyi.info.collection.domain.dto.CcdiCreditInfoQueryDTO;
+import com.ruoyi.info.collection.domain.vo.CreditInfoUploadResultVO;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+class CcdiCreditInfoServiceImplTest {
+
+ @Test
+ void shouldCompileCreditInfoContracts() {
+ CcdiCreditInfoQueryDTO queryDTO = new CcdiCreditInfoQueryDTO();
+ CreditInfoUploadResultVO resultVO = new CreditInfoUploadResultVO();
+ assertNotNull(queryDTO);
+ assertNotNull(resultVO);
+ }
+}