fix(系统设置): 模板关联字段后没有设置默认值,创建新项目报错

This commit is contained in:
AgAngle 2024-02-01 21:53:33 +08:00 committed by 刘瑞斌
parent bcd1530cbc
commit 59c2116b03
6 changed files with 42 additions and 8 deletions

View File

@ -55,6 +55,7 @@ public class ProjectCustomFieldService extends BaseCustomFieldService {
customField.setName(null); customField.setName(null);
} }
customField.setScopeId(originCustomField.getScopeId()); customField.setScopeId(originCustomField.getScopeId());
customField.setScene(originCustomField.getScene());
Project project = projectService.checkResourceExist(originCustomField.getScopeId()); Project project = projectService.checkResourceExist(originCustomField.getScopeId());
checkProjectTemplateEnable(project.getOrganizationId(), originCustomField.getScene()); checkProjectTemplateEnable(project.getOrganizationId(), originCustomField.getScene());
return super.update(customField, options); return super.update(customField, options);

View File

@ -58,7 +58,7 @@ public abstract class AbstractCustomFieldResolver {
} }
protected void validateString(String name, Object v) { protected void validateString(String name, Object v) {
if (!(v instanceof String)) { if (v != null && !(v instanceof String)) {
throwValidateException(name); throwValidateException(name);
} }
} }

View File

@ -203,6 +203,7 @@ public class BaseCustomFieldService {
example.createCriteria() example.createCriteria()
.andScopeIdEqualTo(customField.getScopeId()) .andScopeIdEqualTo(customField.getScopeId())
.andIdNotEqualTo(customField.getId()) .andIdNotEqualTo(customField.getId())
.andSceneEqualTo(customField.getScene())
.andNameEqualTo(customField.getName()); .andNameEqualTo(customField.getName());
if (CollectionUtils.isNotEmpty(customFieldMapper.selectByExample(example))) { if (CollectionUtils.isNotEmpty(customFieldMapper.selectByExample(example))) {
throw new MSException(CUSTOM_FIELD_EXIST); throw new MSException(CUSTOM_FIELD_EXIST);

View File

@ -117,7 +117,6 @@ public class CreateTemplateResourceService implements CreateProjectResourceServi
.map(templateCustomField -> { .map(templateCustomField -> {
TemplateCustomFieldRequest templateCustomFieldRequest = BeanUtils.copyBean(new TemplateCustomFieldRequest(), templateCustomField); TemplateCustomFieldRequest templateCustomFieldRequest = BeanUtils.copyBean(new TemplateCustomFieldRequest(), templateCustomField);
CustomField customField = customFieldMap.get(templateCustomField.getFieldId()); CustomField customField = customFieldMap.get(templateCustomField.getFieldId());
templateCustomFieldRequest.setDefaultValue(null);
try { try {
if (StringUtils.isNotBlank(templateCustomField.getDefaultValue())) { if (StringUtils.isNotBlank(templateCustomField.getDefaultValue())) {
// 将字符串转成对应的对象方便调用统一的创建方法 // 将字符串转成对应的对象方便调用统一的创建方法
@ -126,6 +125,7 @@ public class CreateTemplateResourceService implements CreateProjectResourceServi
} }
} catch (Exception e) { } catch (Exception e) {
LogUtils.error(e); LogUtils.error(e);
templateCustomFieldRequest.setDefaultValue(null);
} }
return templateCustomFieldRequest; return templateCustomFieldRequest;
}) })

View File

@ -87,6 +87,7 @@ public class OrganizationCustomFieldService extends BaseCustomFieldService {
} }
checkOrganizationTemplateEnable(customField.getScopeId(), originCustomField.getScene()); checkOrganizationTemplateEnable(customField.getScopeId(), originCustomField.getScene());
customField.setScopeId(originCustomField.getScopeId()); customField.setScopeId(originCustomField.getScopeId());
customField.setScene(originCustomField.getScene());
OrganizationService.checkResourceExist(originCustomField.getScopeId()); OrganizationService.checkResourceExist(originCustomField.getScopeId());
// 同步创建项目级别字段 // 同步创建项目级别字段
updateRefProjectCustomField(customField, options); updateRefProjectCustomField(customField, options);
@ -109,6 +110,7 @@ public class OrganizationCustomFieldService extends BaseCustomFieldService {
customField.setId(projectField.getId()); customField.setId(projectField.getId());
customField.setScopeId(projectField.getScopeId()); customField.setScopeId(projectField.getScopeId());
customField.setRefId(orgCustomField.getId()); customField.setRefId(orgCustomField.getId());
customField.setScene(orgCustomField.getScene());
super.update(customField, options); super.update(customField, options);
}); });
} }

View File

@ -6,27 +6,28 @@ import io.metersphere.project.domain.ProjectTestResourcePool;
import io.metersphere.project.domain.ProjectTestResourcePoolExample; import io.metersphere.project.domain.ProjectTestResourcePoolExample;
import io.metersphere.project.mapper.ProjectMapper; import io.metersphere.project.mapper.ProjectMapper;
import io.metersphere.project.mapper.ProjectTestResourcePoolMapper; import io.metersphere.project.mapper.ProjectTestResourcePoolMapper;
import io.metersphere.sdk.constants.InternalUserRole; import io.metersphere.sdk.constants.*;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.system.base.BaseTest; import io.metersphere.system.base.BaseTest;
import io.metersphere.system.controller.handler.ResultHolder; import io.metersphere.system.controller.handler.ResultHolder;
import io.metersphere.system.domain.User; import io.metersphere.system.domain.*;
import io.metersphere.system.domain.UserRoleRelation;
import io.metersphere.system.domain.UserRoleRelationExample;
import io.metersphere.system.dto.*; import io.metersphere.system.dto.*;
import io.metersphere.system.dto.request.OrganizationProjectRequest; import io.metersphere.system.dto.request.OrganizationProjectRequest;
import io.metersphere.system.dto.request.ProjectAddMemberRequest; import io.metersphere.system.dto.request.ProjectAddMemberRequest;
import io.metersphere.system.dto.request.ProjectMemberRequest; import io.metersphere.system.dto.request.ProjectMemberRequest;
import io.metersphere.system.dto.request.ProjectPoolRequest; import io.metersphere.system.dto.request.ProjectPoolRequest;
import io.metersphere.system.dto.sdk.request.TemplateCustomFieldRequest;
import io.metersphere.system.dto.sdk.request.TemplateUpdateRequest;
import io.metersphere.system.dto.user.UserDTO; import io.metersphere.system.dto.user.UserDTO;
import io.metersphere.system.dto.user.UserExtendDTO; import io.metersphere.system.dto.user.UserExtendDTO;
import io.metersphere.system.invoker.ProjectServiceInvoker; import io.metersphere.system.invoker.ProjectServiceInvoker;
import io.metersphere.system.log.constants.OperationLogType; import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.mapper.TemplateMapper;
import io.metersphere.system.mapper.UserMapper; import io.metersphere.system.mapper.UserMapper;
import io.metersphere.system.mapper.UserRoleRelationMapper; import io.metersphere.system.mapper.UserRoleRelationMapper;
import io.metersphere.system.service.OrganizationCustomFieldService;
import io.metersphere.system.service.OrganizationService; import io.metersphere.system.service.OrganizationService;
import io.metersphere.system.service.OrganizationTemplateService;
import io.metersphere.system.utils.Pager; import io.metersphere.system.utils.Pager;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
@ -90,6 +91,12 @@ public class OrganizationProjectControllerTests extends BaseTest {
private UserMapper userMapper; private UserMapper userMapper;
@Resource @Resource
private ProjectTestResourcePoolMapper projectTestResourcePoolMapper; private ProjectTestResourcePoolMapper projectTestResourcePoolMapper;
@Resource
private OrganizationCustomFieldService organizationCustomFieldService;
@Resource
private OrganizationTemplateService organizationTemplateService;
@Resource
protected TemplateMapper templateMapper;
private final ProjectServiceInvoker serviceInvoker; private final ProjectServiceInvoker serviceInvoker;
@Autowired @Autowired
@ -194,6 +201,28 @@ public class OrganizationProjectControllerTests extends BaseTest {
} }
public void initData() { public void initData() {
// 当前组织下创建一个字段并关联到模板测试创建项目时是否初始化成功
CustomField customField = new CustomField();
customField.setName("test create project");
customField.setScopeId(DEFAULT_ORGANIZATION_ID);
customField.setScene(TemplateScene.API.name());
customField.setType(CustomFieldType.DATE.name());
customField.setCreateUser("amdin");
customField = organizationCustomFieldService.add(customField, null);
TemplateExample example = new TemplateExample();
example.createCriteria().andScopeIdEqualTo(DEFAULT_ORGANIZATION_ID)
.andSceneEqualTo(TemplateScene.API.name());
Template template = templateMapper.selectByExample(example).get(0);
TemplateUpdateRequest updateRequest = new TemplateUpdateRequest();
TemplateCustomFieldRequest templateCustomFieldRequest = new TemplateCustomFieldRequest();
templateCustomFieldRequest.setFieldId(customField.getId());
templateCustomFieldRequest.setDefaultValue(StringUtils.EMPTY);
templateCustomFieldRequest.setRequired(false);
updateRequest.setCustomFields(List.of(templateCustomFieldRequest));
updateRequest.setId(template.getId());
organizationTemplateService.update(updateRequest);
if (projectMapper.selectByPrimaryKey("projectId") == null) { if (projectMapper.selectByPrimaryKey("projectId") == null) {
Project initProject = new Project(); Project initProject = new Project();
initProject.setId("projectId"); initProject.setId("projectId");
@ -288,6 +317,7 @@ public class OrganizationProjectControllerTests extends BaseTest {
projectMapper.insertSelective(initProject); projectMapper.insertSelective(initProject);
serviceInvoker.invokeCreateServices(initProject.getId()); serviceInvoker.invokeCreateServices(initProject.getId());
} }
} }
@Test @Test