package com.lqkj.link.module.zone.controller; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.lqkj.link.message.MessageBean; import com.lqkj.link.message.MessageListBean; import com.lqkj.link.module.base.service.BaseService; import com.lqkj.link.module.bulletin.domain.BulletinInfo; import com.lqkj.link.module.jwt.service.JwtService; import com.lqkj.link.module.zone.domain.ZoneInfo; import com.lqkj.link.module.zone.service.ZoneInfoService; import com.lqkj.link.util.FileUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; import java.util.UUID; import static com.lqkj.link.APIVersion.VERSION_V1; @RestController @RequestMapping("/zone") @Tag(name = "作品/模板管理", description = "作品/模板管理") public class ZoneInfoController { private final ZoneInfoService zoneInfoService; private final JwtService jwtService; private final BaseService baseService; public ZoneInfoController(ZoneInfoService zoneInfoService, JwtService jwtService, BaseService baseService) { this.zoneInfoService = zoneInfoService; this.jwtService = jwtService; this.baseService = baseService; } @Operation( summary = "5.1.3.1 模板分页接口", description = "5.1.3.1 模板分页接口", parameters = { @Parameter(name = "name", description = "搜索关键词"), @Parameter(name = "page", description = "页码"), @Parameter(name = "pageSize", description = "每页数据条数") } ) @PostMapping({"/template/pageQuery", "/" + VERSION_V1 + "/templateList"}) public MessageBean> pageQueryTemplate(@RequestParam(required = false, defaultValue = "") String name, @RequestParam(required = false, defaultValue = "0") Integer page, @RequestParam(required = false, defaultValue = "10") Integer pageSize){ return MessageBean.ok(zoneInfoService.pageQueryTemplate(name, page, pageSize), "分页查询模板"); } @Operation( summary = "5.1.3.2 模板保存接口", description = "5.1.3.2 模板保存接口", requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "请求对象", required = true, content = @Content( mediaType = "application/json", schema = @Schema(implementation = ZoneInfo.class) ) ) ) @PostMapping("/template/save") public MessageBean saveTemplate(@RequestBody ZoneInfo zoneInfo) { Map result = zoneInfoService.saveTemplate(zoneInfo); if (result.getOrDefault("msg", null) != null) return MessageBean.error((String) result.get("msg")); return MessageBean.ok((ZoneInfo) result.get("zone"), "模板保存接口"); } @Operation( summary = "5.1.3.3 模板删除接口", description = "5.1.3.3 模板删除接口", parameters = { @Parameter(name = "zoneIds", description = "模板ID", required = true) } ) @PostMapping("/template/delete") public MessageBean deleteTemplate(@RequestParam List zoneIds) { zoneInfoService.deleteTemplate(zoneIds); return MessageBean.ok(null, "模板删除接口"); } @Operation( summary = "5.1.3.4 上传模板zip文件", description = "5.1.3.4 上传模板zip文件", parameters = { @Parameter(name = "file", description = "模板zip文件", required = true, schema = @Schema(implementation = MultipartFile.class)) } ) @PostMapping("/template/uploadTemplateZip") public MessageBean uploadTemplateZip(@RequestParam MultipartFile file) { String fileName = file.getOriginalFilename(); String suffix = fileName == null ? "" : fileName.substring(fileName.lastIndexOf(".") + 1); if (!suffix.equals("zip")) return MessageBean.error("上传文件类型必须是zip压缩文件"); String newFileName = UUID.randomUUID() + ".zip"; String filePath = "./upload/template/"; FileUtils.saveFile(file, filePath, newFileName); return MessageBean.ok(filePath.substring(1) + newFileName, "上传模板zip文件"); } @Operation( summary = "5.1.3.31 模板管理上传图片", description = "5.1.3.31 模板管理上传图片", parameters = { @Parameter(name = "file", description = "图标文件", required = true) } ) @PostMapping("/template/uploadImg") public MessageBean uploadImg(@RequestParam MultipartFile file) { return baseService.uploadImg(file, "template/thumbnail/"); } @Operation( summary = "5.1.2.2 我的作品自动补全接口", description = "5.1.2.2 我的作品自动补全接口", parameters = { @Parameter(name = "keyword", description = "搜索关键词") } ) @PostMapping("/" + VERSION_V1 + "/autoCompleteMyWork") public MessageListBean autoCompleteMyWork(HttpServletRequest request, @RequestParam String keyword) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); if (StringUtils.isBlank(keyword)) return MessageListBean.error("关键词为空!"); return MessageListBean.ok(zoneInfoService.autoCompleteMyWork(userCode, keyword), "我的作品自动补全"); } @Operation( summary = "5.1.2.24 资源中心自动补全接口", description = "5.1.2.24 资源中心自动补全接口", parameters = { @Parameter(name = "keyword", description = "搜索关键词"), @Parameter(name = "searchType", description = "搜索类型,0全部,1官方,2个人") } ) @PostMapping("/" + VERSION_V1 + "/autoCompleteResource") public MessageListBean autoCompleteResource(@RequestParam String keyword, @RequestParam(required = false, defaultValue = "0") Integer searchType) { if (StringUtils.isBlank(keyword)) return MessageListBean.error("关键词为空!"); return MessageListBean.ok(zoneInfoService.autoCompleteResource(keyword, searchType), "资源中心自动补全"); } @Operation( summary = "5.1.2.25 审核中心自动补全接口", description = "5.1.2.25 审核中心自动补全接口", parameters = { @Parameter(name = "keyword", description = "搜索关键词"), @Parameter(name = "searchType", description = "搜索类型,0全部,1未审核,2已审核") } ) @PostMapping("/" + VERSION_V1 + "/autoCompleteAudit") public MessageListBean autoCompleteAudit(@RequestParam String keyword, @RequestParam(required = false, defaultValue = "0") Integer searchType) { if (StringUtils.isBlank(keyword)) return MessageListBean.error("关键词为空!"); return MessageListBean.ok(zoneInfoService.autoCompleteAudit(keyword, searchType), "审核中心自动补全"); } @Operation( summary = "5.1.2.3 我的作品接口", description = "5.1.2.3 我的作品接口", parameters = { @Parameter(name = "name", description = "作品名称"), @Parameter(name = "page", description = "页码"), @Parameter(name = "pageSize", description = "每页数据条数") } ) @PostMapping("" + VERSION_V1 + "/myWork") public MessageBean> myWork(@RequestParam(required = false, defaultValue = "") String name, @RequestParam(required = false, defaultValue = "0") Integer page, @RequestParam(required = false, defaultValue = "10") Integer pageSize, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); return MessageBean.ok(zoneInfoService.myWork(userCode, name, page, pageSize), "我的作品"); } @Operation( summary = "5.1.2.4 资源中心接口", description = "5.1.2.4 资源中心接口", parameters = { @Parameter(name = "name", description = "作品名称"), @Parameter(name = "searchType", description = "搜索类型,0全部,1官方,2个人"), @Parameter(name = "page", description = "页码"), @Parameter(name = "pageSize", description = "每页数据条数") } ) @PostMapping("/" + VERSION_V1 + "/resourceCenter") public MessageBean>> resourceCenter(@RequestParam(required = false, defaultValue = "") String name, @RequestParam(required = false, defaultValue = "0") Integer searchType, @RequestParam(required = false, defaultValue = "0") Integer orderType, @RequestParam(required = false, defaultValue = "0") Integer page, @RequestParam(required = false, defaultValue = "10") Integer pageSize, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); return MessageBean.ok(zoneInfoService.resourceCenter(name, searchType, page, pageSize, orderType, userCode), "资源中心"); } @Operation( summary = "5.1.2.16 查看接口", description = "5.1.2.16 查看接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true) } ) @PostMapping("/" + VERSION_V1 + "/view") public MessageBean view(@RequestParam Integer zoneId, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); zoneInfoService.view(zoneId, userCode); return MessageBean.ok(null, "查看"); } @Operation( summary = "5.1.2.5 分享接口", description = "5.1.2.5 分享接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true) } ) @PostMapping("/" + VERSION_V1 + "/share") public MessageBean share(@RequestParam Integer zoneId, @RequestParam("shareUserCode") String shareUserCode, @RequestParam("shareType") Integer shareType, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); return MessageBean.ok(zoneInfoService.share(zoneId, userCode, shareUserCode, shareType), "分享"); } @Operation( summary = "5.1.2.6 重命名接口", description = "5.1.2.6 重命名接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true), @Parameter(name = "newName", description = "新名称", required = true) } ) @PostMapping("/" + VERSION_V1 + "/rename") public MessageBean rename(@RequestParam Integer zoneId, @RequestParam String newName, HttpServletRequest request) { if (StringUtils.isBlank(newName)) return MessageBean.error("作品名称不能为空!"); String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); String msg = zoneInfoService.rename(zoneId, newName, userCode); if (StringUtils.isNotBlank(msg)) return MessageBean.error(msg); return MessageBean.ok(null, "重命名"); } @Operation( summary = "5.1.2.7 删除接口", description = "5.1.2.7 删除接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true) } ) @PostMapping("/" + VERSION_V1 + "/delete") public MessageBean delete(@RequestParam Integer zoneId, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); String msg = zoneInfoService.deleteWork(zoneId, userCode); if (StringUtils.isNotBlank(msg)) return MessageBean.error(msg); return MessageBean.ok(null, "删除"); } @Operation( summary = "5.1.2.9 审核中心接口", description = "5.1.2.9 审核中心接口", parameters = { @Parameter(name = "name", description = "作品名称"), @Parameter(name = "searchType", description = "搜索类型,0全部,1未审核,2已审核"), @Parameter(name = "page", description = "页码"), @Parameter(name = "pageSize", description = "每页数据条数") } ) @PostMapping("/" + VERSION_V1 + "/auditCenter") public MessageBean>> auditCenter(@RequestParam(required = false, defaultValue = "") String name, @RequestParam(required = false, defaultValue = "0") Integer searchType, @RequestParam(required = false, defaultValue = "0") Integer page, @RequestParam(required = false, defaultValue = "10") Integer pageSize) { return MessageBean.ok(zoneInfoService.auditCenter(name, searchType, page, pageSize), "审核中心"); } @Operation( summary = "5.1.2.11 创建作品", description = "5.1.2.11 创建作品", parameters = { @Parameter(name = "name", description = "作品名称", required = true), @Parameter(name = "templateId", description = "模板作品ID") } ) @PostMapping("/" + VERSION_V1 + "/create") public MessageBean create(@RequestParam String name, @RequestParam(required = false) Integer templateId, HttpServletRequest request) { String authHeader = request.getHeader("Authorization"); String userCode = jwtService.decryptUsernameWithHeader(authHeader); Map result = zoneInfoService.create(name, templateId, userCode); if (result.getOrDefault("msg", null) != null) return MessageBean.error((String) result.get("msg")); return MessageBean.ok((ZoneInfo) result.get("zone"), "创建作品"); } @Operation( summary = "5.1.2.35 保存缩略图接口", description = "5.1.2.35 保存缩略图接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true), @Parameter(name = "thumbnailPath", description = "缩略图路径", required = true) } ) @PostMapping("/" + VERSION_V1 + "/saveThumbnail") public MessageBean saveThumbnail(@RequestParam Integer zoneId, @RequestParam String thumbnailPath) { zoneInfoService.saveThumbnail(zoneId, thumbnailPath); return MessageBean.ok(null, "保存缩略图"); } @Operation( summary = "5.1.2.37 获取变换接口", description = "5.1.2.37 获取变换接口", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true) } ) @PostMapping("/" + VERSION_V1 + "/loadTrans") public MessageBean loadTrans(@RequestParam Integer zoneId) { return MessageBean.ok(zoneInfoService.readTrans(zoneId), "获取变换接口"); } /** * 检查分享状态 * * @param zoneId * @param userId */ @PostMapping("/checkShareStatus") public MessageBean save(@Parameter(name = "zoneId", description = "作品ID") Integer zoneId, @Parameter(name = "userId", description = "用户ID") Integer userId) { boolean result = zoneInfoService.checkShareStatus(zoneId, userId); return MessageBean.ok(result, "检查分享状态"); } /** * 获取分享中心数据 * @param name * @param userId * @param page * @param pageSize * @return */ @PostMapping("/getShareCenter") public MessageBean>> getShareCenter(@RequestParam(required = false, defaultValue = "") String name, @RequestParam() Integer userId, @RequestParam(required = false, defaultValue = "0") Integer page, @RequestParam(required = false, defaultValue = "10") Integer pageSize){ return MessageBean.ok(zoneInfoService.shareCenter(name, userId, page, pageSize), "获取分享中心"); } /** * 分享中心自动补全接口 * @param keyword * @param userId * @return */ @PostMapping("/autoCompleteShare") public MessageListBean autoCompleteShare(@RequestParam(required = false, defaultValue = "") String keyword, @RequestParam(required = false) Integer userId){ return MessageListBean.ok(zoneInfoService.autoCompleteShare(keyword, userId), "获取分享中心"); } /** * 接受分享 * @param zoneId * @param userId * @return */ @PostMapping("/acceptShare") public MessageBean acceptShare(@RequestParam Integer zoneId, @RequestParam Integer userId, @RequestParam Boolean acceptStatus){ zoneInfoService.acceptShare(zoneId, userId, acceptStatus); return MessageBean.ok(null, "接受分享"); } /** * 查看分享用户 * @param zoneId * @return */ @PostMapping("/viewShareUser") public MessageBean viewShareUser(@RequestParam Integer zoneId){ return MessageBean.ok(zoneInfoService.viewShareUser(zoneId), "查看分享用户"); } @PostMapping("/getSpawnPointList") public MessageBean>> getSpawnPointList(@RequestParam Integer zoneId) { return MessageBean.ok(zoneInfoService.getSpawnPointList(zoneId), "获取出生点列表"); } @Operation( summary = "保存作品", description = "保存作品", requestBody = @io.swagger.v3.oas.annotations.parameters.RequestBody( description = "通知公告信息实体", required = true, content = @Content( mediaType = "application/json", schema = @Schema(implementation = BulletinInfo.class) ) )) @PostMapping("/save") public MessageBean save(@RequestBody ZoneInfo zoneInfo) { zoneInfoService.save(zoneInfo); return MessageBean.ok(); } @Operation( summary = "作品详情", description = "作品详情", parameters = { @Parameter(name = "zoneId", description = "作品ID", required = true) } ) @PostMapping("/zoneDetails") public MessageBean zoneDetails(@RequestParam Integer zoneId) { return MessageBean.ok(zoneInfoService.zoneDetails(zoneId), "作品详情"); } }