From 454ca91760fe09b0535eee9309cc7f7bb3fef77f Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Sat, 1 Aug 2026 01:22:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AE=A2=E5=95=86=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/entity/CustomerArchive.java | 11 +- .../pojo/entity/CustomerContact.java | 12 ++ .../pojo/entity/CustomerCreditScore.java | 12 ++ .../entity/CustomerCreditScoreDetail.java | 3 + .../pojo/entity/CustomerInvoiceInfo.java | 12 ++ .../pojo/entity/CustomerReceiptAccount.java | 6 + .../pojo/vo/CustomerCreditScoreVO.java | 8 + .../impl/RailwayStationServiceImpl.java | 32 ++-- .../transport/mapper/CommonAddressMapper.xml | 8 +- .../mapper/CustomerArchiveMapper.xml | 6 + .../impl/CustomerArchiveServiceImpl.java | 146 +++++++++++++++--- doc/sql/transport/blade_customer_archive.sql | 26 +++- ...stomer_contact_material_patch_20260731.sql | 26 ++++ ...e_customer_credit_score_patch_20260731.sql | 6 + ...tomer_credit_score_save_patch_20260731.sql | 7 + 15 files changed, 280 insertions(+), 41 deletions(-) create mode 100644 doc/sql/transport/blade_customer_contact_material_patch_20260731.sql create mode 100644 doc/sql/transport/blade_customer_credit_score_patch_20260731.sql create mode 100644 doc/sql/transport/blade_customer_credit_score_save_patch_20260731.sql diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java index 9170e97..c0a94e0 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerArchive.java @@ -71,6 +71,12 @@ public class CustomerArchive extends TenantEntity { @Schema(description = "注册/实际经营地址") private String registeredAddress; + @Schema(description = "注册地址行政区划") + private String registeredRegionName; + + @Schema(description = "注册地址详细地址") + private String registeredDetailAddress; + @Schema(description = "法人/负责人") private String legalPerson; @@ -80,6 +86,9 @@ public class CustomerArchive extends TenantEntity { @Schema(description = "所属组织ID") private Long deptId; + @Schema(description = "所属组织ID集合") + private String deptIds; + @Schema(description = "所属组织") private String deptName; @@ -116,7 +125,7 @@ public class CustomerArchive extends TenantEntity { @Schema(description = "备注") private String remark; - @Schema(description = "资质附件JSON") + @Schema(description = "客商材料JSON") private String qualificationAttachments; @Schema(description = "准入类型:temporary/formal") diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerContact.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerContact.java index e0c5631..4753429 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerContact.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerContact.java @@ -59,6 +59,18 @@ public class CustomerContact extends TenantEntity { @Schema(description = "邮箱") private String email; + @Schema(description = "行政区划") + private String regionName; + + @Schema(description = "详细地址") + private String detailAddress; + + @Schema(description = "联系地址") + private String contactAddress; + + @Schema(description = "所属分公司/事业部") + private String branchName; + @Schema(description = "职务") private String positionName; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScore.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScore.java index 3307ce3..c7beeef 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScore.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScore.java @@ -68,6 +68,9 @@ public class CustomerCreditScore extends TenantEntity { @Schema(description = "最终得分") private BigDecimal finalScore; + @Schema(description = "得分率") + private BigDecimal scoreRate; + @Schema(description = "信用等级") private String creditLevel; @@ -77,6 +80,15 @@ public class CustomerCreditScore extends TenantEntity { @Schema(description = "拟申请总资金使用额度(万元)") private BigDecimal applyCreditLimit; + @Schema(description = "临时申请额度(万元)") + private BigDecimal tempApplyCreditLimit; + + @Schema(description = "临时额度开始日期") + private LocalDate tempCreditStartDate; + + @Schema(description = "临时额度结束日期") + private LocalDate tempCreditEndDate; + @Schema(description = "自评状态") private String selfStatus; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScoreDetail.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScoreDetail.java index 2e388c0..1e6fc4a 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScoreDetail.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerCreditScoreDetail.java @@ -80,6 +80,9 @@ public class CustomerCreditScoreDetail extends TenantEntity { @Schema(description = "得分说明") private String scoreDescription; + @Schema(description = "评分项目配置最高得分") + private BigDecimal score; + @Schema(description = "自评得分") private BigDecimal selfScore; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerInvoiceInfo.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerInvoiceInfo.java index 88cda22..ee9a300 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerInvoiceInfo.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerInvoiceInfo.java @@ -68,6 +68,12 @@ public class CustomerInvoiceInfo extends TenantEntity { @Schema(description = "注册地址") private String registeredAddress; + @Schema(description = "注册地址行政区划") + private String registeredRegionName; + + @Schema(description = "注册地址详细地址") + private String registeredDetailAddress; + @Schema(description = "邮箱") private String email; @@ -80,6 +86,12 @@ public class CustomerInvoiceInfo extends TenantEntity { @Schema(description = "收件人地址") private String receiverAddress; + @Schema(description = "收件人地址行政区划") + private String receiverRegionName; + + @Schema(description = "收件人详细地址") + private String receiverDetailAddress; + @Schema(description = "是否默认") private Integer isDefault; diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerReceiptAccount.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerReceiptAccount.java index ccf07ab..e491a21 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerReceiptAccount.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/entity/CustomerReceiptAccount.java @@ -53,6 +53,9 @@ public class CustomerReceiptAccount extends TenantEntity { @Schema(description = "收款方名称") private String accountName; + @Schema(description = "开户人姓名") + private String accountHolderName; + @Schema(description = "开户行名称") private String bankName; @@ -71,4 +74,7 @@ public class CustomerReceiptAccount extends TenantEntity { @Schema(description = "是否默认") private Integer isDefault; + @Schema(description = "备注") + private String remark; + } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerCreditScoreVO.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerCreditScoreVO.java index 45f55ee..6f54a69 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerCreditScoreVO.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/pojo/vo/CustomerCreditScoreVO.java @@ -49,4 +49,12 @@ public class CustomerCreditScoreVO extends CustomerCreditScore { @Schema(description = "评分明细") private List details = new ArrayList<>(); + @TableField(exist = false) + @Schema(description = "证明材料") + private Object attachments; + + @TableField(exist = false) + @Schema(description = "评估标准") + private List standards = new ArrayList<>(); + } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java index 424b835..590113a 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RailwayStationServiceImpl.java @@ -73,7 +73,7 @@ public class RailwayStationServiceImpl extends BaseServiceImpl 0) { - throw new ServiceException(name + ("经度".equals(name) ? "范围为 -180 到 180" : "范围为 -90 到 90")); + throw new ServiceException(name + "范围不正确"); } } diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CommonAddressMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CommonAddressMapper.xml index 4fc3ae9..d59bcf2 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CommonAddressMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CommonAddressMapper.xml @@ -110,8 +110,8 @@ id AS source_id, code AS site_code, name AS address_name, - CONCAT_WS('', country, city) AS region_name, - region_code, + CONCAT_WS('', country, city, district_name) AS region_name, + district_code AS region_code, detail_address, longitude, latitude @@ -154,8 +154,8 @@ id AS source_id, code AS site_code, name AS address_name, - CONCAT_WS('', country, city) AS region_name, - region_code, + CONCAT_WS('', country, city, district_name) AS region_name, + district_code AS region_code, detail_address, longitude, latitude diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CustomerArchiveMapper.xml b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CustomerArchiveMapper.xml index fd79cee..cc33aae 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CustomerArchiveMapper.xml +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/mapper/CustomerArchiveMapper.xml @@ -20,9 +20,12 @@ + + + @@ -62,9 +65,12 @@ customer_type, project_name, registered_address, + registered_region_name, + registered_detail_address, legal_person, contact_phone, dept_id, + dept_ids, dept_name, invoice_tax_rate, business_scope, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java index 88ed6da..1adb0dd 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/CustomerArchiveServiceImpl.java @@ -63,6 +63,7 @@ import org.springblade.transport.pojo.vo.CustomerChangeRecordVO; import org.springblade.transport.pojo.vo.CustomerContactVO; import org.springblade.transport.pojo.vo.CustomerCreditScoreDetailVO; import org.springblade.transport.pojo.vo.CustomerCreditScoreVO; +import org.springblade.transport.pojo.vo.CreditRatingStandardVO; import org.springblade.transport.pojo.vo.CustomerInvoiceInfoVO; import org.springblade.transport.pojo.vo.CustomerReceiptAccountVO; import org.springblade.transport.service.ICustomerArchiveService; @@ -73,14 +74,12 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.stream.Collectors; /** @@ -101,8 +100,6 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl CUSTOMER_NATURES = Set.of("有限公司", "个体工商户"); - private static final Set CUSTOMER_TYPES = Set.of("客户", "承运商"); private final CustomerContactMapper contactMapper; private final CustomerReceiptAccountMapper receiptAccountMapper; @@ -258,8 +255,13 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl typeList = Arrays.stream(customerType.replace(",", ",").split(",")) + List typeList = Func.toStrList(customerType.replace(",", ",")) + .stream() .map(String::trim) .filter(Func::isNotEmpty) .toList(); if (Func.isEmpty(typeList)) { throw new ServiceException("客商类型不能为空"); } - for (String type : typeList) { - if (!CUSTOMER_TYPES.contains(type)) { - throw new ServiceException("客商类型只能选择客户或承运商"); - } - } } private void validateApproval(CustomerArchiveVO customer) { if (Objects.equals(customer.getAccessType(), ACCESS_FORMAL)) { if (Func.isEmpty(customer.getQualificationAttachments())) { - throw new ServiceException("正式客商提交审核前必须上传资质附件"); + throw new ServiceException("正式客商提交审核前必须上传客商材料"); } boolean hasCompletedScore = customer.getScores().stream() .anyMatch(score -> "已完成".equals(score.getSelfStatus()) || "已完成".equals(score.getReviewStatus()) || Func.isNotEmpty(score.getFinalScore())); @@ -403,6 +401,8 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl details = scoreVO.getDetails() == null ? new ArrayList<>() : scoreVO.getDetails(); for (int detailIndex = 0; detailIndex < details.size(); detailIndex++) { - CustomerCreditScoreDetail detail = Objects.requireNonNull(BeanUtil.copyProperties(details.get(detailIndex), CustomerCreditScoreDetail.class)); + CustomerCreditScoreDetailVO detailVO = details.get(detailIndex); + if (Func.isEmpty(detailVO.getScore())) { + detailVO.setScore(resolveFullScore(detailVO.getOptionsJson())); + } + CustomerCreditScoreDetail detail = Objects.requireNonNull(BeanUtil.copyProperties(detailVO, CustomerCreditScoreDetail.class)); detail.setId(IdWorker.getId()); detail.setScoreId(scoreId); detail.setQuantificationId(score.getQuantificationId()); @@ -477,7 +482,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl loadScores(Long customerId) { List scores = creditScoreMapper.selectList(Wrappers.lambdaQuery() .eq(CustomerCreditScore::getCustomerId, customerId) - .eq(CustomerCreditScore::getIsDeleted, 0) + .and(wrapper -> wrapper.eq(CustomerCreditScore::getIsDeleted, 0).or().isNull(CustomerCreditScore::getIsDeleted)) .orderByDesc(CustomerCreditScore::getScoreDate) .orderByDesc(CustomerCreditScore::getCreateTime)); if (Func.isEmpty(scores)) { @@ -486,18 +491,45 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl scoreIds = scores.stream().map(CustomerCreditScore::getId).toList(); Map> detailMap = creditScoreDetailMapper.selectList(Wrappers.lambdaQuery() .in(CustomerCreditScoreDetail::getScoreId, scoreIds) - .eq(CustomerCreditScoreDetail::getIsDeleted, 0) + .and(wrapper -> wrapper.eq(CustomerCreditScoreDetail::getIsDeleted, 0).or().isNull(CustomerCreditScoreDetail::getIsDeleted)) .orderByAsc(CustomerCreditScoreDetail::getSort)) .stream() .map(detail -> Objects.requireNonNull(BeanUtil.copyProperties(detail, CustomerCreditScoreDetailVO.class))) .collect(Collectors.groupingBy(CustomerCreditScoreDetailVO::getScoreId)); return scores.stream().map(score -> { CustomerCreditScoreVO scoreVO = Objects.requireNonNull(BeanUtil.copyProperties(score, CustomerCreditScoreVO.class)); + scoreVO.setAttachments(parseScoreAttachments(score.getProofAttachments())); scoreVO.setDetails(detailMap.getOrDefault(score.getId(), new ArrayList<>())); + scoreVO.setStandards(loadStandards(score.getQuantificationId())); return scoreVO; }).toList(); } + private String normalizeScoreProofAttachments(CustomerCreditScoreVO scoreVO) { + if (Func.isNotEmpty(scoreVO.getProofAttachments())) { + return trimToNull(scoreVO.getProofAttachments()); + } + Object attachments = scoreVO.getAttachments(); + if (Func.isEmpty(attachments)) { + return null; + } + if (attachments instanceof String attachmentText) { + return trimToNull(attachmentText); + } + return JsonUtil.toJson(attachments); + } + + private Object parseScoreAttachments(String value) { + if (Func.isEmpty(value)) { + return new ArrayList<>(); + } + try { + return JsonUtil.parse(value, List.class); + } catch (Exception exception) { + return new ArrayList<>(); + } + } + private List loadChangeRecords(Long customerId) { return changeRecordMapper.selectList(Wrappers.lambdaQuery() .eq(CustomerChangeRecord::getCustomerId, customerId) @@ -549,7 +581,9 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl()))); + List itemOptions = optionMap.getOrDefault(item.getId(), new ArrayList<>()); + detail.setScore(resolveFullScore(itemOptions)); + detail.setOptionsJson(buildOptionsJson(itemOptions)); detail.setSelfScore(BigDecimal.ZERO); detail.setReviewScore(BigDecimal.ZERO); details.add(detail); @@ -570,6 +604,61 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl loadStandards(Long quantificationId) { + if (Func.isEmpty(quantificationId)) { + return new ArrayList<>(); + } + return standardMapper.selectList(Wrappers.lambdaQuery() + .eq(CreditRatingStandard::getQuantificationId, quantificationId) + .eq(CreditRatingStandard::getIsDeleted, 0) + .orderByAsc(CreditRatingStandard::getSort)) + .stream() + .map(standard -> Objects.requireNonNull(BeanUtil.copyProperties(standard, CreditRatingStandardVO.class))) + .toList(); + } + + private BigDecimal resolveFullScore(List options) { + return options.stream() + .map(CreditScoreItemOption::getScore) + .filter(Objects::nonNull) + .max(BigDecimal::compareTo) + .orElse(BigDecimal.ZERO); + } + + private BigDecimal resolveFullScore(String optionsJson) { + if (Func.isEmpty(optionsJson)) { + return BigDecimal.ZERO; + } + try { + Object value = JsonUtil.parse(optionsJson, List.class); + if (!(value instanceof List options)) { + return BigDecimal.ZERO; + } + return options.stream() + .map(this::resolveOptionScore) + .filter(Objects::nonNull) + .max(BigDecimal::compareTo) + .orElse(BigDecimal.ZERO); + } catch (Exception exception) { + return BigDecimal.ZERO; + } + } + + private BigDecimal resolveOptionScore(Object option) { + if (!(option instanceof Map optionMap)) { + return null; + } + Object score = optionMap.get("score"); + if (score == null) { + return null; + } + try { + return new BigDecimal(String.valueOf(score)); + } catch (NumberFormatException exception) { + return null; + } + } + private String nextCustomerCode() { CustomerArchive latest = list(Wrappers.lambdaQuery() .likeRight(CustomerArchive::getCustomerCode, CUSTOMER_CODE_PREFIX) @@ -650,6 +739,25 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl 0) { + throw new ServiceException(message); + } + } + + private String buildRegisteredAddress(CustomerArchiveVO customer) { + return buildAddress(customer.getRegisteredRegionName(), customer.getRegisteredDetailAddress(), customer.getRegisteredAddress()); + } + + private String buildAddress(String regionNameValue, String detailAddressValue, String fallbackAddress) { + String regionName = trimToEmpty(regionNameValue); + String detailAddress = trimToEmpty(detailAddressValue); + if (Func.isNotEmpty(regionName) || Func.isNotEmpty(detailAddress)) { + return regionName + detailAddress; + } + return trimToNull(fallbackAddress); + } + private String trimToEmpty(String value) { return value == null ? "" : value.trim(); } diff --git a/doc/sql/transport/blade_customer_archive.sql b/doc/sql/transport/blade_customer_archive.sql index 3d73a8f..2104eed 100644 --- a/doc/sql/transport/blade_customer_archive.sql +++ b/doc/sql/transport/blade_customer_archive.sql @@ -12,10 +12,13 @@ CREATE TABLE `blade_customer_archive` ( `unified_credit_code` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '统一社会信用代码', `customer_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '客商类型', `project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属项目', - `registered_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册/实际经营地址', + `registered_address` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册/实际经营地址', + `registered_region_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址行政区划', + `registered_detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址详细地址', `legal_person` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '法人/负责人', `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '联系电话', `dept_id` bigint NULL DEFAULT NULL COMMENT '所属组织ID', + `dept_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属组织ID集合', `dept_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所属组织', `invoice_tax_rate` decimal(6,2) NULL DEFAULT NULL COMMENT '开票税点', `business_scope` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '经营范围', @@ -28,7 +31,7 @@ CREATE TABLE `blade_customer_archive` ( `max_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '最大资金使用额度(万元)', `apply_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '申请总资金使用额度(万元)', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', - `qualification_attachments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '资质附件JSON', + `qualification_attachments` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '客商材料JSON', `access_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'temporary' COMMENT '准入类型:temporary临时,formal正式', `approval_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'draft' COMMENT '审批状态:draft草稿,reviewing审核中,approved审核通过,rejected审核不通过', `current_node` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '当前节点', @@ -59,6 +62,10 @@ CREATE TABLE `blade_customer_contact` ( `contact_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系人姓名', `contact_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话', `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `region_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '行政区划', + `detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址', + `contact_address` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系地址', + `branch_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属分公司/事业部', `position_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职务', `is_default` int NULL DEFAULT 0 COMMENT '是否默认', `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', @@ -82,12 +89,14 @@ CREATE TABLE `blade_customer_receipt_account` ( `tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户ID', `customer_id` bigint NOT NULL COMMENT '客商ID', `account_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收款方名称', + `account_holder_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '开户人姓名', `bank_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '开户行名称', `bank_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行账号', `registered_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册电话', `registered_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址', `tax_no` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '纳税人识别号', `is_default` int NULL DEFAULT 0 COMMENT '是否默认', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门', `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', @@ -112,11 +121,15 @@ CREATE TABLE `blade_customer_invoice_info` ( `bank_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '开户行名称', `registered_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册电话', `bank_account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '银行账号', - `registered_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址', + `registered_address` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址', + `registered_region_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址行政区划', + `registered_detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '注册地址详细地址', `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱', `receiver_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人姓名', `receiver_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人电话', - `receiver_address` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人地址', + `receiver_address` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人地址', + `receiver_region_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人地址行政区划', + `receiver_detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人详细地址', `is_default` int NULL DEFAULT 0 COMMENT '是否默认', `create_user` bigint NULL DEFAULT NULL COMMENT '创建人', `create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门', @@ -142,9 +155,13 @@ CREATE TABLE `blade_customer_credit_score` ( `self_score` decimal(10,2) NULL DEFAULT NULL COMMENT '自评得分', `review_score` decimal(10,2) NULL DEFAULT NULL COMMENT '复评得分', `final_score` decimal(10,2) NULL DEFAULT NULL COMMENT '最终得分', + `score_rate` decimal(10,2) NULL DEFAULT NULL COMMENT '得分率', `credit_level` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '信用等级', `max_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '最大资金使用额度(万元)', `apply_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '拟申请总资金使用额度(万元)', + `temp_apply_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '临时申请额度(万元)', + `temp_credit_start_date` date NULL DEFAULT NULL COMMENT '临时额度开始日期', + `temp_credit_end_date` date NULL DEFAULT NULL COMMENT '临时额度结束日期', `self_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '未完成' COMMENT '自评状态', `review_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '未完成' COMMENT '复评状态', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', @@ -178,6 +195,7 @@ CREATE TABLE `blade_customer_credit_score_detail` ( `options_json` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '选项JSON', `selected_option` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '已选选项', `score_description` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '得分说明', + `score` decimal(10,2) NULL DEFAULT NULL COMMENT '评分项目配置最高得分', `self_score` decimal(10,2) NULL DEFAULT NULL COMMENT '自评得分', `review_score` decimal(10,2) NULL DEFAULT NULL COMMENT '复评得分', `sort` int NULL DEFAULT 0 COMMENT '排序', diff --git a/doc/sql/transport/blade_customer_contact_material_patch_20260731.sql b/doc/sql/transport/blade_customer_contact_material_patch_20260731.sql new file mode 100644 index 0000000..8625133 --- /dev/null +++ b/doc/sql/transport/blade_customer_contact_material_patch_20260731.sql @@ -0,0 +1,26 @@ +-- 客商档案:联系人地址与客商材料字段补丁 + +ALTER TABLE `blade_customer_contact` + ADD COLUMN `region_name` varchar(100) DEFAULT NULL COMMENT '行政区划' AFTER `email`, + ADD COLUMN `detail_address` varchar(255) DEFAULT NULL COMMENT '详细地址' AFTER `region_name`, + ADD COLUMN `contact_address` varchar(400) DEFAULT NULL COMMENT '联系地址' AFTER `detail_address`, + ADD COLUMN `branch_name` varchar(100) DEFAULT NULL COMMENT '所属分公司/事业部' AFTER `contact_address`; + +ALTER TABLE `blade_customer_archive` + ADD COLUMN `registered_region_name` varchar(100) DEFAULT NULL COMMENT '注册地址行政区划' AFTER `registered_address`, + ADD COLUMN `registered_detail_address` varchar(255) DEFAULT NULL COMMENT '注册地址详细地址' AFTER `registered_region_name`, + ADD COLUMN `dept_ids` varchar(500) DEFAULT NULL COMMENT '所属组织ID集合' AFTER `dept_id`, + MODIFY COLUMN `registered_address` varchar(400) DEFAULT NULL COMMENT '注册/实际经营地址', + MODIFY COLUMN `qualification_attachments` text COMMENT '客商材料JSON'; + +ALTER TABLE `blade_customer_receipt_account` + ADD COLUMN `account_holder_name` varchar(50) DEFAULT NULL COMMENT '开户人姓名' AFTER `account_name`, + ADD COLUMN `remark` varchar(200) DEFAULT NULL COMMENT '备注' AFTER `is_default`; + +ALTER TABLE `blade_customer_invoice_info` + ADD COLUMN `registered_region_name` varchar(100) DEFAULT NULL COMMENT '注册地址行政区划' AFTER `registered_address`, + ADD COLUMN `registered_detail_address` varchar(255) DEFAULT NULL COMMENT '注册地址详细地址' AFTER `registered_region_name`, + ADD COLUMN `receiver_region_name` varchar(100) DEFAULT NULL COMMENT '收件人地址行政区划' AFTER `receiver_address`, + ADD COLUMN `receiver_detail_address` varchar(255) DEFAULT NULL COMMENT '收件人详细地址' AFTER `receiver_region_name`, + MODIFY COLUMN `registered_address` varchar(400) DEFAULT NULL COMMENT '注册地址', + MODIFY COLUMN `receiver_address` varchar(400) DEFAULT NULL COMMENT '收件人地址'; diff --git a/doc/sql/transport/blade_customer_credit_score_patch_20260731.sql b/doc/sql/transport/blade_customer_credit_score_patch_20260731.sql new file mode 100644 index 0000000..da69800 --- /dev/null +++ b/doc/sql/transport/blade_customer_credit_score_patch_20260731.sql @@ -0,0 +1,6 @@ +-- 客商评分记录:临时额度字段补丁 + +ALTER TABLE `blade_customer_credit_score` + ADD COLUMN `temp_apply_credit_limit` decimal(18,2) NULL DEFAULT NULL COMMENT '临时申请额度(万元)' AFTER `apply_credit_limit`, + ADD COLUMN `temp_credit_start_date` date NULL DEFAULT NULL COMMENT '临时额度开始日期' AFTER `temp_apply_credit_limit`, + ADD COLUMN `temp_credit_end_date` date NULL DEFAULT NULL COMMENT '临时额度结束日期' AFTER `temp_credit_start_date`; diff --git a/doc/sql/transport/blade_customer_credit_score_save_patch_20260731.sql b/doc/sql/transport/blade_customer_credit_score_save_patch_20260731.sql new file mode 100644 index 0000000..3bdbb8f --- /dev/null +++ b/doc/sql/transport/blade_customer_credit_score_save_patch_20260731.sql @@ -0,0 +1,7 @@ +-- 客商评分记录保存字段补丁 + +ALTER TABLE `blade_customer_credit_score` + ADD COLUMN `score_rate` decimal(10,2) NULL DEFAULT NULL COMMENT '得分率' AFTER `final_score`; + +ALTER TABLE `blade_customer_credit_score_detail` + ADD COLUMN `score` decimal(10,2) NULL DEFAULT NULL COMMENT '评分项目配置最高得分' AFTER `score_description`;