package com.casic.missiles.controller; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.GeneralApprovalDTO; import com.casic.missiles.core.base.controller.ExportController; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.page.PageInfoBT; import com.casic.missiles.dto.*; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ApprovalRejectRequest; import com.casic.missiles.dto.resource.customer.SuggestFormApprovalListRequest; import com.casic.missiles.enums.BusinessExceptionEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.utils.DictCodeUtils; import io.swagger.annotations.ApiOperation; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; import javax.validation.Valid; import java.util.List; import java.util.Objects; /** * @Description: 通用审批Controller * O:列表响应实体类 * T:编辑请求实体类 * R:列表请求实体类 * S:提交请求实体类 * @Author: wangpeng * @Date: 2023/8/14 15:26 */ public class GeneralApprovalController<O extends GeneralApprovalDTO, T extends GeneralApprovalDTO, R extends BaseApprovalListRequest, S extends BaseApprovalSubmitRequest> extends ExportController { private final IGeneralApprovalService<O, T, R, S> baseApprovalService; public GeneralApprovalController(IGeneralApprovalService<O, T, R, S> baseApprovalService) { this.baseApprovalService = baseApprovalService; } @ApiOperation("审批列表(分页)") @PostMapping("/approval/listPage") public ReturnDTO<PageInfoBT<O>> approvalListPage(@RequestBody @Valid R request) throws Exception { Page<O> page = PageFactory.defaultPage(); page = baseApprovalService.listPage(page, request); return ReturnUtil.success(super.packForBT(page)); } @ApiOperation("草稿箱-编辑") @PostMapping("/draftUpdate") public ReturnDTO draftUpdate(@RequestBody @Valid T request) { return baseApprovalService.draftUpdate(request); } @ApiOperation("草稿箱-删除") @PostMapping("/draftDelete") public ReturnDTO draftDelete(@RequestBody @Valid IdDTO idDTO) { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); return baseApprovalService.draftDelete(idDTO.getId()); } @ApiOperation("草稿箱-批量删除") @PostMapping("/draftBatchDelete") public ReturnDTO draftBatchDelete(@RequestBody @Valid IdsDTO idsDTO) { Assert.isFalse(CollectionUtils.isEmpty(idsDTO.getIds()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); return baseApprovalService.draftBatchDelete(idsDTO.getIds()); } @ApiOperation("提交(未调用过保存接口保存至草稿箱需先调用保存接口,再调用该接口;无基本信息变更时changeFlag传1)") @PostMapping("/submit") public ReturnDTO submit(@RequestBody @Valid S request) { return baseApprovalService.submit(request); } @ApiOperation("审批-拒绝(驳回至起始节点)") @PostMapping("/approval/refuse") public ReturnDTO approvalRefuse(@RequestBody @Valid BaseApprovalRefuseRequest request) { return baseApprovalService.approvalRefuse(request); } @ApiOperation("审批操作-驳回(驳回至上一节点)") @PostMapping("/approval/reject") @ResponseBody public ReturnDTO reject(@RequestBody @Valid ApprovalRejectRequest request) { return baseApprovalService.approvalReject(request); } @ApiOperation("审批-取消(发起者撤回,表单状态更改为已取消,仅审批中状态可撤回)") @PostMapping("/approval/revoke") public ReturnDTO approvalRevoke(@RequestBody @Valid BaseApprovalRevokeRequest request) { return baseApprovalService.approvalRevoke(request); } @ApiOperation("审批-删除(已取消删除,发起者或具有删除权限的用户可以删除,已通过/未通过状态不可删除,前端控制按钮权限)") @PostMapping("/approval/delete") public ReturnDTO delete(@RequestBody @Valid ApprovalDeleteRequest request) { return baseApprovalService.approvalDelete(request); } @ApiOperation("未通过/已取消-编辑(驳回后的重新编辑)") @PostMapping("/failUpdate") public ReturnDTO failUpdate(@RequestBody @Valid T request) { return baseApprovalService.failUpdate(request); } public List<O> exportList(@RequestBody @Valid R request) throws Exception { List<O> list; if (!CollectionUtils.isEmpty(request.getIds())) { list = baseApprovalService.listExportByIds(request.getIds()); } else { if (request.getClass().equals(SuggestFormApprovalListRequest.class)) { request.setApprovalStatus(null); } else { request.setApprovalStatus(ApprovalStatusEnum.PASSED); } list = baseApprovalService.listExport(request); } for (O record : list) { DictCodeUtils.convertDictCodeToName(record); } return list; } }