105 lines
4.7 KiB
Java
105 lines
4.7 KiB
Java
package com.youlai.boot.device.controller;
|
||
|
||
import com.youlai.boot.common.annotation.Log;
|
||
import com.youlai.boot.common.enums.ActionTypeEnum;
|
||
import com.youlai.boot.common.enums.LogModuleEnum;
|
||
import com.youlai.boot.common.result.PageResult;
|
||
import com.youlai.boot.common.result.Result;
|
||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||
import com.youlai.boot.device.model.vo.AppIconVO;
|
||
import com.youlai.boot.device.service.AppIconService;
|
||
import io.swagger.v3.oas.annotations.Operation;
|
||
import io.swagger.v3.oas.annotations.Parameter;
|
||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||
import lombok.RequiredArgsConstructor;
|
||
import org.springframework.web.bind.annotation.GetMapping;
|
||
import org.springframework.web.bind.annotation.PathVariable;
|
||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||
import org.springframework.web.bind.annotation.PostMapping;
|
||
import org.springframework.web.bind.annotation.RequestMapping;
|
||
import org.springframework.web.bind.annotation.RequestParam;
|
||
import org.springframework.web.bind.annotation.RequestPart;
|
||
import org.springframework.web.bind.annotation.RestController;
|
||
import org.springframework.web.multipart.MultipartFile;
|
||
|
||
import java.util.List;
|
||
|
||
/**
|
||
* 应用图标库控制层
|
||
*
|
||
* @author TTSTD
|
||
* @since 2026-08-05
|
||
*/
|
||
@Tag(name = "应用图标库")
|
||
@RestController
|
||
@RequestMapping("/api/v1/app-icons")
|
||
@RequiredArgsConstructor
|
||
public class AppIconController {
|
||
|
||
private final AppIconService appIconService;
|
||
|
||
@Operation(summary = "获取应用当前生效图标信息")
|
||
@GetMapping("/{packageName}")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.VIEW)
|
||
public Result<AppIconVO> getCurrentIcon(@PathVariable String packageName) {
|
||
return Result.success(appIconService.getCurrentIcon(packageName));
|
||
}
|
||
|
||
@Operation(summary = "获取应用图标历史版本列表(含当前,按版本倒序)")
|
||
@GetMapping("/{packageName}/history")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.LIST)
|
||
public Result<List<AppIconVO>> getHistory(@PathVariable String packageName) {
|
||
return Result.success(appIconService.getHistory(packageName));
|
||
}
|
||
|
||
@Operation(summary = "选取历史版本并锁定")
|
||
@PostMapping("/{packageName}/lock")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.LOCK_APP_ICON)
|
||
public Result<?> lock(
|
||
@Parameter(description = "应用包名") @PathVariable String packageName,
|
||
@Parameter(description = "选中图标记录ID") @RequestParam Long iconId
|
||
) {
|
||
return Result.judge(appIconService.lockIcon(packageName, iconId));
|
||
}
|
||
|
||
@Operation(summary = "解锁当前图标")
|
||
@PostMapping("/{packageName}/unlock")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.UNLOCK_APP_ICON)
|
||
public Result<?> unlock(@Parameter(description = "应用包名") @PathVariable String packageName) {
|
||
return Result.judge(appIconService.unlockIcon(packageName));
|
||
}
|
||
|
||
@Operation(summary = "上传应用图标(全局库)")
|
||
@PostMapping("/{packageName}/upload")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.UPLOAD_APP_ICON)
|
||
public Result<String> upload(
|
||
@Parameter(description = "应用包名") @PathVariable String packageName,
|
||
@Parameter(description = "应用名称(可选,不传则沿用已有名称)") @RequestParam(required = false) String appName,
|
||
@Parameter(description = "图标文件(jpg/jpeg/png/webp)") @RequestPart(value = "file") MultipartFile file
|
||
) {
|
||
return Result.success(appIconService.uploadIcon(packageName, appName, file, "admin"));
|
||
}
|
||
|
||
@Operation(summary = "删除应用图标版本")
|
||
@DeleteMapping("/{packageName}/{iconId}")
|
||
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.DELETE)
|
||
public Result<Boolean> deleteIcon(
|
||
@Parameter(description = "应用包名") @PathVariable String packageName,
|
||
@Parameter(description = "图标记录ID") @PathVariable Long iconId
|
||
) {
|
||
return Result.judge(appIconService.deleteIcon(packageName, iconId));
|
||
}
|
||
|
||
@Operation(summary = "应用图标库分页列表")
|
||
@GetMapping("/page")
|
||
public PageResult<AppIconVO> page(
|
||
@Parameter(description = "页码", example = "1") @RequestParam(defaultValue = "1") Long pageNum,
|
||
@Parameter(description = "每页条数", example = "10") @RequestParam(defaultValue = "10") Long pageSize,
|
||
@Parameter(description = "应用包名(可选,不传返回全部)") @RequestParam(required = false) String packageName
|
||
) {
|
||
IPage<AppIconVO> page = new Page<>(pageNum, pageSize);
|
||
return PageResult.success(appIconService.pageAppIcons(page, packageName));
|
||
}
|
||
}
|