From 155adbee7b286235cc4de52228e3eed93d5df00e Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Tue, 24 Mar 2026 09:13:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BE=81=E4=BF=A1=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E6=9F=A5=E8=AF=A2=E4=B8=8E=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CcdiCreditInfoController.java | 72 ++++++++++++++++ .../impl/CcdiCreditInfoServiceImpl.java | 41 ++++++++- .../collection/CcdiCreditInfoQueryMapper.xml | 86 +++++++++++++++++++ .../CcdiCreditNegativeInfoMapper.xml | 38 ++++++++ .../info/collection/CcdiDebtsInfoMapper.xml | 50 +++++++++++ .../CcdiCreditInfoControllerTest.java | 53 ++++++++++++ 6 files changed, 339 insertions(+), 1 deletion(-) create mode 100644 ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiCreditInfoController.java create mode 100644 ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditInfoQueryMapper.xml create mode 100644 ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditNegativeInfoMapper.xml create mode 100644 ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiDebtsInfoMapper.xml create mode 100644 ccdi-info-collection/src/test/java/com/ruoyi/info/collection/controller/CcdiCreditInfoControllerTest.java diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiCreditInfoController.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiCreditInfoController.java new file mode 100644 index 00000000..4d447ffd --- /dev/null +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiCreditInfoController.java @@ -0,0 +1,72 @@ +package com.ruoyi.info.collection.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.page.TableSupport; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.info.collection.domain.dto.CcdiCreditInfoQueryDTO; +import com.ruoyi.info.collection.domain.vo.CreditInfoListVO; +import com.ruoyi.info.collection.service.ICcdiCreditInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; + +/** + * 征信维护 Controller + */ +@Tag(name = "征信维护") +@RestController +@RequestMapping("/ccdi/creditInfo") +public class CcdiCreditInfoController extends BaseController { + + @Resource + private ICcdiCreditInfoService creditInfoService; + + @Operation(summary = "上传征信 HTML") + @PreAuthorize("@ss.hasPermi('ccdi:creditInfo:upload')") + @Log(title = "征信维护", businessType = BusinessType.IMPORT) + @PostMapping("/upload") + public AjaxResult upload(@RequestParam("files") MultipartFile[] files) { + return AjaxResult.success("上传成功", creditInfoService.upload(Arrays.asList(files))); + } + + @Operation(summary = "查询征信维护列表") + @PreAuthorize("@ss.hasPermi('ccdi:creditInfo:list')") + @GetMapping("/list") + public TableDataInfo list(CcdiCreditInfoQueryDTO queryDTO) { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); + Page result = creditInfoService.selectCreditInfoPage(page, queryDTO); + return getDataTable(result.getRecords(), result.getTotal()); + } + + @Operation(summary = "查询征信维护详情") + @PreAuthorize("@ss.hasPermi('ccdi:creditInfo:query')") + @GetMapping("/{personId}") + public AjaxResult detail(@PathVariable String personId) { + return success(creditInfoService.selectDetailByPersonId(personId)); + } + + @Operation(summary = "删除征信维护数据") + @PreAuthorize("@ss.hasPermi('ccdi:creditInfo:remove')") + @Log(title = "征信维护", businessType = BusinessType.DELETE) + @DeleteMapping("/{personId}") + public AjaxResult remove(@PathVariable String personId) { + return toAjax(creditInfoService.deleteByPersonId(personId)); + } +} diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiCreditInfoServiceImpl.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiCreditInfoServiceImpl.java index e4d9f598..3aaaacba 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiCreditInfoServiceImpl.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiCreditInfoServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.info.collection.domain.CcdiDebtsInfo; 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 com.ruoyi.info.collection.domain.vo.CreditInfoNegativeVO; import com.ruoyi.info.collection.domain.vo.CreditInfoUploadFailureVO; import com.ruoyi.info.collection.domain.vo.CreditInfoUploadResultVO; import com.ruoyi.info.collection.mapper.CcdiBaseStaffMapper; @@ -96,7 +97,28 @@ public class CcdiCreditInfoServiceImpl implements ICcdiCreditInfoService { @Override public CreditInfoDetailVO selectDetailByPersonId(String personId) { - return queryMapper.selectCreditInfoDetailByPersonId(personId); + CreditInfoListVO summary = queryMapper.selectCreditInfoSummaryByPersonId(personId); + CcdiCreditNegativeInfo negative = negativeInfoMapper.selectByPersonId(personId); + List debts = debtsInfoMapper.selectByPersonId(personId); + if (summary == null && negative == null && (debts == null || debts.isEmpty())) { + return null; + } + + CreditInfoDetailVO detail = new CreditInfoDetailVO(); + detail.setPersonId(personId); + detail.setIdCard(summary != null && !isBlank(summary.getIdCard()) ? summary.getIdCard() : personId); + if (summary != null) { + detail.setPersonName(summary.getName()); + } + if (isBlank(detail.getPersonName()) && negative != null) { + detail.setPersonName(negative.getPersonName()); + } + if (isBlank(detail.getPersonName()) && debts != null && !debts.isEmpty()) { + detail.setPersonName(debts.get(0).getPersonName()); + } + detail.setNegativeInfo(toNegativeVO(negative)); + detail.setDebtList(debts == null ? List.of() : debts); + return detail; } @Override @@ -242,6 +264,23 @@ public class CcdiCreditInfoServiceImpl implements ICcdiCreditInfoService { return text == null || text.trim().isEmpty(); } + private CreditInfoNegativeVO toNegativeVO(CcdiCreditNegativeInfo negative) { + if (negative == null) { + return null; + } + CreditInfoNegativeVO negativeVO = new CreditInfoNegativeVO(); + negativeVO.setPersonId(negative.getPersonId()); + negativeVO.setPersonName(negative.getPersonName()); + negativeVO.setQueryDate(negative.getQueryDate()); + negativeVO.setCivilCnt(negative.getCivilCnt()); + negativeVO.setEnforceCnt(negative.getEnforceCnt()); + negativeVO.setAdmCnt(negative.getAdmCnt()); + negativeVO.setCivilLmt(negative.getCivilLmt()); + negativeVO.setEnforceLmt(negative.getEnforceLmt()); + negativeVO.setAdmLmt(negative.getAdmLmt()); + return negativeVO; + } + private String currentUserName() { try { return SecurityUtils.getUsername(); diff --git a/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditInfoQueryMapper.xml b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditInfoQueryMapper.xml new file mode 100644 index 00000000..a8eeb4e9 --- /dev/null +++ b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditInfoQueryMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + diff --git a/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditNegativeInfoMapper.xml b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditNegativeInfoMapper.xml new file mode 100644 index 00000000..41d67334 --- /dev/null +++ b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiCreditNegativeInfoMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM ccdi_credit_negative_info + WHERE person_id = #{personId} + + + diff --git a/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiDebtsInfoMapper.xml b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiDebtsInfoMapper.xml new file mode 100644 index 00000000..2d6ce569 --- /dev/null +++ b/ccdi-info-collection/src/main/resources/mapper/info/collection/CcdiDebtsInfoMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM ccdi_debts_info + WHERE person_id = #{personId} + + + + INSERT INTO ccdi_debts_info + (person_id, person_name, query_date, debt_main_type, debt_sub_type, creditor_type, + debt_name, principal_balance, debt_total_amount, debt_status, create_by, create_time, update_by, update_time) + VALUES + + (#{item.personId}, #{item.personName}, #{item.queryDate}, #{item.debtMainType}, #{item.debtSubType}, #{item.creditorType}, + #{item.debtName}, #{item.principalBalance}, #{item.debtTotalAmount}, #{item.debtStatus}, #{item.createBy}, NOW(), #{item.updateBy}, NOW()) + + + + diff --git a/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/controller/CcdiCreditInfoControllerTest.java b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/controller/CcdiCreditInfoControllerTest.java new file mode 100644 index 00000000..89a11801 --- /dev/null +++ b/ccdi-info-collection/src/test/java/com/ruoyi/info/collection/controller/CcdiCreditInfoControllerTest.java @@ -0,0 +1,53 @@ +package com.ruoyi.info.collection.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.info.collection.domain.dto.CcdiCreditInfoQueryDTO; +import com.ruoyi.info.collection.domain.vo.CreditInfoListVO; +import com.ruoyi.info.collection.service.ICcdiCreditInfoService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class CcdiCreditInfoControllerTest { + + @InjectMocks + private CcdiCreditInfoController controller; + + @Mock + private ICcdiCreditInfoService service; + + @Test + void list_shouldDelegateWithPageRequest() { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addParameter("pageNum", "1"); + request.addParameter("pageSize", "10"); + RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); + when(service.selectCreditInfoPage(any(), any())).thenReturn(new Page(1, 10, 0)); + + TableDataInfo result = controller.list(new CcdiCreditInfoQueryDTO()); + + assertEquals(0L, result.getTotal()); + RequestContextHolder.resetRequestAttributes(); + } + + @Test + void remove_shouldCallDeleteByPersonId() { + when(service.deleteByPersonId("330101199001010011")).thenReturn(1); + + AjaxResult result = controller.remove("330101199001010011"); + + assertEquals(200, result.get("code")); + } +}