package com.gxwebsoft.cms.controller; import com.gxwebsoft.common.core.web.BaseController; import com.gxwebsoft.cms.service.ManuscriptService; import com.gxwebsoft.cms.entity.Manuscript; import com.gxwebsoft.cms.param.ManuscriptParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.gxmu.service.ReviewFlowStarterService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * 稿件控制器 * * @author LX * @since 2026-03-18 12:54:31 */ @Api(tags = "稿件管理") @RestController @RequestMapping("/api/cms/manuscript") public class ManuscriptController extends BaseController { @Resource private ManuscriptService manuscriptService; @Resource private ReviewFlowStarterService reviewFlowStarterService; @ApiOperation("分页查询稿件") @GetMapping("/page") public ApiResult> page(ManuscriptParam param) { // 使用关联查询 return success(manuscriptService.pageRel(param)); } @ApiOperation("查询全部稿件") @GetMapping() public ApiResult> list(ManuscriptParam param) { // 使用关联查询 return success(manuscriptService.listRel(param)); } @ApiOperation("根据id查询稿件") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { // 使用关联查询 return success(manuscriptService.getByIdRel(id)); } @ApiOperation("添加稿件") @PostMapping() public ApiResult save(@RequestBody Manuscript manuscript) { normalizeContentFormat(manuscript); // 记录当前登录用户id User loginUser = getLoginUser(); if (loginUser != null) { manuscript.setUserId(loginUser.getUserId()); } if (manuscriptService.save(manuscript)) { // 首级审批人同样经 ReviewerResolver 解析(与其它模块同一条路径),不复制 review_user_id reviewFlowStarterService.startReview("cms_manuscript", manuscript.getId()); return success("添加成功"); } return fail("添加失败"); } @ApiOperation("修改稿件") @PutMapping() public ApiResult update(@RequestBody Manuscript manuscript) { normalizeContentFormat(manuscript); if (manuscriptService.updateById(manuscript)) { return success("修改成功"); } return fail("修改失败"); } @ApiOperation("删除稿件") @DeleteMapping("/{id}") public ApiResult remove(@PathVariable("id") Integer id) { if (manuscriptService.removeById(id)) { return success("删除成功"); } return fail("删除失败"); } /** * 正文格式兜底:客户端没带 contentFormat 时按 html 存, * 避免下游(小程序、后台列表)拿到空值又得靠内容猜格式。 * 实际上写库前正文应已统一成 HTML(后台编辑器保存时转换)。 */ private void normalizeContentFormat(Manuscript manuscript) { if (!StringUtils.hasText(manuscript.getContentFormat())) { manuscript.setContentFormat("html"); } } @ApiOperation("批量添加稿件") @PostMapping("/batch") public ApiResult saveBatch(@RequestBody List list) { if (manuscriptService.saveBatch(list)) { return success("添加成功"); } return fail("添加失败"); } @ApiOperation("批量修改稿件") @PutMapping("/batch") public ApiResult updateBatch(@RequestBody BatchParam batchParam) { if (batchParam.update(manuscriptService, "id")) { return success("修改成功"); } return fail("修改失败"); } @ApiOperation("批量删除稿件") @DeleteMapping("/batch") public ApiResult removeBatch(@RequestBody List ids) { if (manuscriptService.removeByIds(ids)) { return success("删除成功"); } return fail("删除失败"); } }