shinnosuke
2026-08-13 42bcf19c431f815d90452bda81d2970f56de8204
fix(merchant): 允许公寓商家地址为空
1个文件已添加
3个文件已修改
37 ■■■■■ 已修改文件
talent-card-admin/src/views/MerchantCreateView.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/admin/MerchantCreateRequest.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/admin/AdminBusinessServiceTests.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-admin/src/views/MerchantCreateView.vue
@@ -203,7 +203,7 @@
const merchantRules = computed<FormRules>(() => ({
  merchantName: [{ required: true, message: '请输入商家名称', trigger: 'blur' }],
  contactMobile: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
  address: [{ required: true, message: '请输入商家地址', trigger: 'blur' }],
  address: isApartmentMerchant.value ? [] : [{ required: true, message: '请输入商家地址', trigger: 'blur' }],
  coverUrl: [{ required: true, message: '请上传商家封面图', trigger: 'change' }],
  businessHours: [{
    validator: (_rule, _value, callback) => isApprovalMerchant.value || hasValidBusinessHours()
talent-card-server/src/main/java/com/talentcard/server/business/admin/AdminBusinessService.java
@@ -328,6 +328,7 @@
    @Transactional
    public Map<String, Object> createMerchant(MerchantCreateRequest request) {
        validateMerchantAddress(request.merchantType(), request.address());
        validateScenicMerchantCreate(request);
        jdbcTemplate.update("""
                insert into merchant(merchant_name, merchant_type, contact_name, contact_mobile, address,
@@ -374,6 +375,12 @@
        return one("select * from merchant where id = ?", id);
    }
    void validateMerchantAddress(String merchantType, String address) {
        if (!"公寓租赁".equals(merchantType) && (address == null || address.isBlank())) {
            throw new BusinessException(ErrorCode.BAD_REQUEST, "请输入商家地址");
        }
    }
    private boolean hasMerchantAppAccess(MerchantCreateRequest request) {
        return ("餐饮服务".equals(request.merchantType()) || "景区服务".equals(request.merchantType()))
                && (request.canLoginMerchantApp() == null || request.canLoginMerchantApp() == 1);
talent-card-server/src/main/java/com/talentcard/server/business/admin/MerchantCreateRequest.java
@@ -19,7 +19,6 @@
        @NotBlank(message = "请输入联系电话")
        @Size(max = 20)
        String contactMobile,
        @NotBlank(message = "请输入商家地址")
        @Size(max = 255)
        String address,
        String logoUrl,
talent-card-server/src/test/java/com/talentcard/server/business/admin/AdminBusinessServiceTests.java
New file
@@ -0,0 +1,27 @@
package com.talentcard.server.business.admin;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.Mockito.mock;
import com.talentcard.server.common.BusinessException;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
class AdminBusinessServiceTests {
    private final AdminBusinessService service = new AdminBusinessService(mock(JdbcTemplate.class));
    @Test
    void apartmentMerchantAllowsBlankAddress() {
        assertThatCode(() -> service.validateMerchantAddress("公寓租赁", ""))
                .doesNotThrowAnyException();
    }
    @Test
    void otherMerchantTypesStillRequireAddress() {
        assertThatThrownBy(() -> service.validateMerchantAddress("酒店服务", " "))
                .isInstanceOf(BusinessException.class)
                .hasMessageContaining("请输入商家地址");
    }
}