feat(aftersales): 退货申请支持客户名称文本输入(不强制关联客户档案)

- AfterSaleReturnDO / SaveReqVO 新增 customerName,customerId 改为非必填
- 列表/详情优先使用单据上的文本客户名,未填时才按客户档案回填
- SQL:after_sale_return 增加 customer_name 列,customer_id 改为可空
已修改3个文件
已添加1个文件
42 ■■■■■ 文件已修改
sql/mysql/aftersales_return_add_customer_name.sql 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/dataobject/returnobj/AfterSaleReturnDO.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/aftersales_return_add_customer_name.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
-- =============================================
-- å”®åŽé€€è´§ç”³è¯·ï¼šæ”¯æŒå®¢æˆ·åç§°æ–‡æœ¬è¾“入(不关联客户档案)
--
-- å˜æ›´ï¼šafter_sale_return å¢žåŠ  customer_name åˆ—
--   customer_id ä¿æŒå¯é€‰ï¼ˆæœªå…³è”客户档案时为 NULL)
-- è„šæœ¬å¯é‡å¤æ‰§è¡Œï¼ˆå¹‚ç­‰ï¼‰
-- =============================================
SET NAMES utf8mb4;
SET @sch := DATABASE();
SET @exists := (SELECT COUNT(*) FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'after_sale_return' AND COLUMN_NAME = 'customer_name');
SET @sql := IF(@exists = 0,
    'ALTER TABLE `after_sale_return` ADD COLUMN `customer_name` varchar(200) DEFAULT NULL COMMENT ''客户名称(文本)'' AFTER `customer_id`',
    'SELECT ''customer_name å·²å­˜åœ¨ï¼Œè·³è¿‡'' AS msg');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- å®¢æˆ·ç¼–号改为可空(支持只填客户名称、不关联客户档案)
ALTER TABLE `after_sale_return` MODIFY COLUMN `customer_id` bigint DEFAULT NULL COMMENT '客户编号(可空)';
-- æ ¸å¯¹
SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @sch AND TABLE_NAME = 'after_sale_return' AND COLUMN_NAME = 'customer_name';
SELECT '退货申请客户名称字段初始化完成' AS result;
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/AfterSaleReturnController.java
@@ -85,8 +85,11 @@
        // æ‰¹é‡åŠ è½½å®¢æˆ·åç§°
        Set<Long> customerIds = convertSet(returnList, AfterSaleReturnDO::getCustomerId);
        Map<Long, CrmCustomerRespDTO> customerMap = customerApi.getCustomerMap(customerIds);
        // æ‹¼è£…名称字段
        // æ‹¼è£…名称字段(优先使用单据上已填写的文本客户名,未填时才按客户档案回填)
        return BeanUtils.toBean(returnList, AfterSaleReturnRespVO.class, vo -> {
            if (vo.getCustomerName() != null && !vo.getCustomerName().isEmpty()) {
                return;
            }
            CrmCustomerRespDTO customer = customerMap.get(vo.getCustomerId());
            if (customer != null) vo.setCustomerName(customer.getName());
        });
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/returnobj/vo/AfterSaleReturnSaveReqVO.java
@@ -22,10 +22,12 @@
    @NotNull(message = "关联工单不能为空")
    private Long ticketId;
    @Schema(description = "客户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "客户不能为空")
    @Schema(description = "客户编号(可选,未关联客户档案时为空)", example = "1")
    private Long customerId;
    @Schema(description = "客户名称(文本输入,不关联客户档案)", example = "某某公司")
    private String customerName;
    @Schema(description = "关联销售订单编号", example = "1")
    private Long saleOrderId;
yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/dataobject/returnobj/AfterSaleReturnDO.java
@@ -43,6 +43,10 @@
     */
    private Long customerId;
    /**
     * å®¢æˆ·åç§°ï¼ˆæ–‡æœ¬ï¼Œæœªå…³è”客户档案时使用)
     */
    private String customerName;
    /**
     * å…³è”销售订单编号
     */
    private Long saleOrderId;