Fix front project draft service safeguards

This commit is contained in:
王鹏
2026-05-22 09:26:58 +08:00
parent 98cd4f7df0
commit ebb529213a
5 changed files with 51 additions and 6 deletions

View File

@@ -11,4 +11,5 @@ public interface FrontProjectGenerationMapper
public int insertFrontProjectGeneration(FrontProjectGeneration frontProjectGeneration);
public int updateFrontProjectGeneration(FrontProjectGeneration frontProjectGeneration);
public int deleteFrontProjectGenerationById(Long generationId);
public int deleteGenerationsByProjectId(Long projectId);
}

View File

@@ -27,11 +27,11 @@ public class FrontProjectConverter
genProject.setFrontFramework(project.getFrontFramework());
genProject.setBackFramework(project.getBackFramework());
genProject.setStatus(project.getStatus());
genProject.setTables(toGenTables(project.getTables()));
genProject.setTables(toGenTables(project.getTables(), project.getPackageName()));
return genProject;
}
private static List<GenTable> toGenTables(List<FrontProjectTable> tables)
private static List<GenTable> toGenTables(List<FrontProjectTable> tables, String packageName)
{
List<GenTable> genTables = new ArrayList<GenTable>();
if (tables == null)
@@ -40,18 +40,19 @@ public class FrontProjectConverter
}
for (FrontProjectTable table : tables)
{
genTables.add(toGenTable(table));
genTables.add(toGenTable(table, packageName));
}
return genTables;
}
private static GenTable toGenTable(FrontProjectTable table)
private static GenTable toGenTable(FrontProjectTable table, String packageName)
{
GenTable genTable = new GenTable();
genTable.setTableId(table.getTableId());
genTable.setTableName(table.getTableName());
genTable.setTableComment(table.getTableComment());
genTable.setClassName(table.getClassName());
genTable.setPackageName(packageName);
genTable.setModuleName(table.getModuleName());
genTable.setBusinessName(table.getBusinessName());
genTable.setFunctionName(table.getFunctionName());
@@ -59,10 +60,24 @@ public class FrontProjectConverter
genTable.setTplWebType(table.getTplWebType());
genTable.setOptions(table.getOptions());
genTable.setCreateTableSql(table.getCreateTableSql());
genTable.setColumns(toGenColumns(table.getColumns()));
List<GenTableColumn> columns = toGenColumns(table.getColumns());
genTable.setColumns(columns);
genTable.setPkColumn(findPkColumn(columns));
return genTable;
}
private static GenTableColumn findPkColumn(List<GenTableColumn> columns)
{
for (GenTableColumn column : columns)
{
if ("1".equals(column.getIsPk()))
{
return column;
}
}
return null;
}
private static List<GenTableColumn> toGenColumns(List<FrontProjectColumn> columns)
{
List<GenTableColumn> genColumns = new ArrayList<GenTableColumn>();

View File

@@ -16,6 +16,8 @@ import com.ruoyi.generator.domain.front.dto.DatabaseTableDesign;
import com.ruoyi.generator.domain.front.dto.FrontProjectCreateRequest;
import com.ruoyi.generator.domain.front.dto.FrontProjectUpdateRequest;
import com.ruoyi.generator.mapper.front.FrontProjectColumnMapper;
import com.ruoyi.generator.mapper.front.FrontProjectFileMapper;
import com.ruoyi.generator.mapper.front.FrontProjectGenerationMapper;
import com.ruoyi.generator.mapper.front.FrontProjectMapper;
import com.ruoyi.generator.mapper.front.FrontProjectTableMapper;
@@ -28,11 +30,16 @@ public class FrontProjectServiceImpl implements IFrontProjectService
private FrontProjectTableMapper frontProjectTableMapper;
@Autowired
private FrontProjectColumnMapper frontProjectColumnMapper;
@Autowired
private FrontProjectFileMapper frontProjectFileMapper;
@Autowired
private FrontProjectGenerationMapper frontProjectGenerationMapper;
@Override
public FrontProject createProject(Long userId, FrontProjectCreateRequest request)
{
if (userId == null || request == null || StringUtils.isEmpty(request.getProjectName()))
assertFrontUserLoggedIn(userId);
if (request == null || StringUtils.isEmpty(request.getProjectName()))
{
throw new ServiceException("项目名称不能为空");
}
@@ -56,6 +63,7 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Override
public List<FrontProject> listProjects(Long userId)
{
assertFrontUserLoggedIn(userId);
FrontProject query = new FrontProject();
query.setUserId(userId);
return frontProjectMapper.selectFrontProjectList(query);
@@ -64,6 +72,7 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Override
public FrontProject getProject(Long userId, Long projectId)
{
assertFrontUserLoggedIn(userId);
FrontProject project = frontProjectMapper.selectFrontProjectByUserAndId(userId, projectId);
if (project == null)
{
@@ -75,6 +84,7 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Override
public int updateProject(Long userId, Long projectId, FrontProjectUpdateRequest request)
{
assertFrontUserLoggedIn(userId);
if (request == null)
{
throw new ServiceException("项目参数不能为空");
@@ -95,7 +105,10 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Transactional
public int deleteProject(Long userId, Long projectId)
{
assertFrontUserLoggedIn(userId);
getProject(userId, projectId);
frontProjectFileMapper.deleteFilesByProjectId(projectId);
frontProjectGenerationMapper.deleteGenerationsByProjectId(projectId);
frontProjectColumnMapper.deleteColumnsByProjectId(projectId);
frontProjectTableMapper.deleteTablesByProjectId(projectId);
return frontProjectMapper.deleteFrontProjectByUserAndId(userId, projectId);
@@ -104,6 +117,7 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Override
public DatabaseDesignResponse getDatabase(Long userId, Long projectId)
{
assertFrontUserLoggedIn(userId);
getProject(userId, projectId);
DatabaseDesignResponse response = new DatabaseDesignResponse();
response.setProjectId(projectId);
@@ -127,6 +141,7 @@ public class FrontProjectServiceImpl implements IFrontProjectService
@Transactional
public DatabaseDesignResponse saveDatabase(Long userId, Long projectId, DatabaseDesignResponse request)
{
assertFrontUserLoggedIn(userId);
getProject(userId, projectId);
frontProjectColumnMapper.deleteColumnsByProjectId(projectId);
frontProjectTableMapper.deleteTablesByProjectId(projectId);
@@ -153,6 +168,14 @@ public class FrontProjectServiceImpl implements IFrontProjectService
return getDatabase(userId, projectId);
}
private void assertFrontUserLoggedIn(Long userId)
{
if (userId == null)
{
throw new ServiceException("前台用户未登录");
}
}
private String toProjectFileName(String projectName)
{
return StringUtils.defaultString(projectName).trim().replaceAll("\\s+", "-").toLowerCase();

View File

@@ -92,4 +92,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<delete id="deleteFrontProjectGenerationById" parameterType="Long">
delete from front_project_generation where generation_id = #{generationId}
</delete>
<delete id="deleteGenerationsByProjectId" parameterType="Long">
delete from front_project_generation where project_id = #{projectId}
</delete>
</mapper>

View File

@@ -51,6 +51,8 @@ public class FrontProjectConverterTest
assertEquals("com.easycode.vehicle", genProject.getPackageName());
assertEquals(1, genProject.getTables().size());
assertEquals("car_info", genProject.getTables().get(0).getTableName());
assertEquals("com.easycode.vehicle", genProject.getTables().get(0).getPackageName());
assertEquals("carId", genProject.getTables().get(0).getColumns().get(0).getJavaField());
assertEquals("carId", genProject.getTables().get(0).getPkColumn().getJavaField());
}
}