feat(app-version): 加批量创建接口

This commit is contained in:
Zhou Weidong authored and trae-solo-agent committed 2026-10-23 16:45:20 +08:00
1 parent 47f19a98eb
commit 4f80a691d1
3 files changed
+69

No files matched your search

@@ -12,6 +12,8 @@ import com.fruitshorts.system.vo.AppVersionSaveReqVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
@@ -56,6 +58,17 @@ public class AppVersionAdminController {
return Result.ok(appVersionService.create(req));
}
@Operation(summary = "批量新建版本(一次事务)")
@PostMapping("/batch")
@PreAuthorize("@ss.hasPermission('app-version:create')")
@OperationLog(module = "版本管理", action = "批量新建版本")
public Result<java.util.List<Long>> batchCreate(
@NotEmpty(message = "请至少传一条")
@Size(max = 16, message = "单次不超过 16 条")
@Valid @RequestBody java.util.List<@Valid AppVersionSaveReqVO> reqs) {
return Result.ok(appVersionService.batchCreate(reqs));
}
@Operation(summary = "编辑版本")
@PutMapping("/{id}")
@PreAuthorize("@ss.hasPermission('app-version:update')")
@@ -64,6 +64,30 @@ public class AppVersionService {
return v.getId();
}
/** 批量新建:一次事务全插或全回滚。 */
@Transactional(rollbackFor = Exception.class)
public List<Long> batchCreate(List<AppVersionSaveReqVO> reqs) {
if (reqs == null || reqs.isEmpty()) {
throw new ServiceException(ErrorCode.BAD_REQUEST, "请至少传一条");
}
if (reqs.size() > 16) {
throw new ServiceException(ErrorCode.BAD_REQUEST, "单次不超过 16 条");
}
LocalDateTime now = LocalDateTime.now();
List<Long> ids = new java.util.ArrayList<>();
for (AppVersionSaveReqVO req : reqs) {
String platform = normalizePlatform(req.getPlatform());
checkDuplicate(platform, req.getVersionCode(), null);
AppVersion v = new AppVersion();
applyFields(v, req, platform);
v.setStatus(1);
v.setReleasedAt(now);
versionMapper.insert(v);
ids.add(v.getId());
}
return ids;
}
@Transactional(rollbackFor = Exception.class)
public void update(Long id, AppVersionSaveReqVO req) {
String platform = normalizePlatform(req.getPlatform());
+32
View File
@@ -0,0 +1,32 @@
-- Author: fruit.com.cn
-- 修正 App 版本管理的菜单与权限:
-- 1) 删除误加的 BUTTON 类型菜单 40-44(项目其他模块都只在 permission_code 里挂权限点,
-- 不在 sys_menu 里建按钮行,否则前端菜单渲染会多出无用条目)
-- 2) 在 sys_permission 里加 app-version 完整权限点
-- 3) 给超级管理员(role_id=1)授权这些权限点
-- 1) 删除多余的 BUTTON 菜单
DELETE FROM sys_role_menu WHERE menu_id IN (40, 41, 42, 43, 44);
DELETE FROM sys_menu WHERE id IN (40, 41, 42, 43, 44);
-- 2) 权限点(code 唯一约束兜底)
INSERT INTO sys_permission (id, code, name, group_name, type, sort) VALUES
(50000101, 'app-version:list', '版本管理-查看', 'App 版本', 'BUTTON', 1),
(50000102, 'app-version:create', '版本管理-新增', 'App 版本', 'BUTTON', 2),
(50000103, 'app-version:update', '版本管理-编辑', 'App 版本', 'BUTTON', 3),
(50000104, 'app-version:delete', '版本管理-删除', 'App 版本', 'BUTTON', 4)
ON CONFLICT (code) DO NOTHING;
-- 3) 超管授权(id 按现有 MAX+1 顺延)
INSERT INTO sys_role_permission (id, role_id, permission_id)
SELECT 50001, 1, p.id FROM sys_permission p WHERE p.code = 'app-version:list'
ON CONFLICT DO NOTHING;
INSERT INTO sys_role_permission (id, role_id, permission_id)
SELECT 50002, 1, p.id FROM sys_permission p WHERE p.code = 'app-version:create'
ON CONFLICT DO NOTHING;
INSERT INTO sys_role_permission (id, role_id, permission_id)
SELECT 50003, 1, p.id FROM sys_permission p WHERE p.code = 'app-version:update'
ON CONFLICT DO NOTHING;
INSERT INTO sys_role_permission (id, role_id, permission_id)
SELECT 50004, 1, p.id FROM sys_permission p WHERE p.code = 'app-version:delete'
ON CONFLICT DO NOTHING;