mitao
2025-03-19 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/StateProcessController.java
New file
@@ -0,0 +1,208 @@
package com.ruoyi.web.controller.api;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseModel;
import com.ruoyi.common.core.domain.BasePage;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.GlobalException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.bo.*;
import com.ruoyi.system.model.StateProcessModule;
import com.ruoyi.system.model.StateProcessTemplate;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.StateProcessModuleService;
import com.ruoyi.system.service.StateProcessTemplateService;
import com.ruoyi.system.vo.ProcessDetailVO;
import com.ruoyi.system.vo.ProcessTaskListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@Api(tags = "审批流程管理")
@RequestMapping("/state-process")
@RestController
@RequiredArgsConstructor
public class StateProcessController {
    private final StateProcessTemplateService processTemplateService;
    private final StateProcessModuleService processModuleService;
    private final ISysUserService sysUserService;
    //应用流程分页列表
    @ApiOperation("应用流程分页列表")
    @PostMapping("/module/page")
    public AjaxResult<List<StateProcessModule>> modulePage(@RequestBody BasePage basePage) {
        LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(StateProcessModule::getCategory);
        //查询应用流程列表
        List<StateProcessModule> result = processModuleService.list(queryWrapper);
        List<String> updateUserId = result.stream().map(BaseModel::getUpdateBy).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(updateUserId)){
            //根据用户id查询用户信息
            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserId);
            Map<Long, SysUser> sysUserMap;
            if (!CollectionUtils.isEmpty(sysUsers)){
                sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
            } else {
                sysUserMap = new HashMap<>();
            }
            //遍历列表,设置更新人名称
            result.forEach(e -> {
                SysUser sysUser = sysUserMap.get(e.getUpdateBy());
                if (Objects.nonNull(sysUser)){
                    e.setUpdateBy(sysUser.getNickName());
                }
            });
        }
        return AjaxResult.success(result);
    }
    //修改应用流程
    @Log(title = "审批流程管理-修改应用流程", businessType = BusinessType.UPDATE)
    @ApiOperation("修改应用流程")
    @PostMapping("/module/update")
    public AjaxResult<PageInfo<StateProcessModule>> moduleUpdate(@RequestBody ProcessModuleUpdateBO processModuleUpdateBO) {
        StateProcessTemplate stateProcessTemplate = processTemplateService.getById(processModuleUpdateBO.getTemplateId());
        if (Objects.isNull(stateProcessTemplate)) {
            return AjaxResult.success();
        }
        StateProcessModule stateProcessModule = new StateProcessModule();
        stateProcessModule.setId(processModuleUpdateBO.getId());
        stateProcessModule.setTemplateId(processModuleUpdateBO.getTemplateId());
        stateProcessModule.setTemplateName(stateProcessTemplate.getTemplateName());
        stateProcessModule.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
        stateProcessModule.setCreateTime(LocalDateTime.now());
        stateProcessModule.setUpdateTime(LocalDateTime.now());
        stateProcessModule.setRemark(processModuleUpdateBO.getRemark());
        processModuleService.updateById(stateProcessModule);
        return AjaxResult.success();
    }
    //流程模版分页
    @ApiOperation("流程模版分页")
    @PostMapping("/template/page")
    public AjaxResult<Page<StateProcessTemplate>> page(ProcessTemplatePageBO request) {
        Page<StateProcessTemplate> templatePage = processTemplateService.page(request);
        return AjaxResult.success(templatePage);
    }
    //查询流程模版
    @ApiOperation("查询流程模版")
    @GetMapping("/template/getById")
    public AjaxResult<StateProcessTemplate> selectById(@RequestParam String id) {
        return AjaxResult.success(processTemplateService.getById(id));
    }
    //修改并部署模版
    @Log(title = "审批流程管理-修改并部署模版", businessType = BusinessType.UPDATE)
    @ApiOperation("修改并部署模版")
    @PostMapping("/template/update")
    public AjaxResult<Boolean> update(@RequestBody ProcessUpdateBO processUpdateBO) {
        return AjaxResult.success(processTemplateService.update(processUpdateBO));
    }
    //删除模版
    @Log(title = "审批流程管理-删除模版", businessType = BusinessType.DELETE)
    @ApiOperation("删除模版")
    @GetMapping("/template/deleteById")
    public AjaxResult<Boolean> deleteById(@RequestParam String id) {
        StateProcessTemplate template = processTemplateService.getById(id);
        //查询是否存在使用的
        LambdaUpdateWrapper<StateProcessModule> moduleLambdaUpdateWrapper = new LambdaUpdateWrapper<>();;
        moduleLambdaUpdateWrapper.eq(StateProcessModule::getTemplateId, template.getId());
        if (processModuleService.getBaseMapper().exists(moduleLambdaUpdateWrapper)) {
            throw new GlobalException("该模版在应用流程中已使用!");
        }
        //根据key修改所有版本为已删除
        boolean result = processTemplateService.remove(Wrappers.lambdaQuery(StateProcessTemplate.class)
                .eq(StateProcessTemplate::getTemplateKey, template.getTemplateKey()));
        return AjaxResult.success(result);
    }
    //创建并部署模版
    @Log(title = "审批流程管理-创建并部署模版", businessType = BusinessType.INSERT)
    @ApiOperation("创建并部署模版")
    @PostMapping("/template/create")
    public AjaxResult<Boolean> create(@RequestBody ProcessCreateBO processCreateBO) {
        return AjaxResult.success(processTemplateService.create(processCreateBO));
    }
    //流程发起
    @Log(title = "审批流程管理-流程发起", businessType = BusinessType.INSERT)
    @ApiOperation("流程发起")
    @PostMapping("/start")
    public AjaxResult<Boolean> start(@RequestBody ProcessStartBO processStartBO) {
        return AjaxResult.success(processTemplateService.start(processStartBO));
    }
    //待办
    @ApiOperation("待办列表")
    @PostMapping("/wait/task/page")
    public AjaxResult<PageInfo<ProcessTaskListVO>> waitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
        return AjaxResult.success(processTemplateService.waitTaskPage(processTemplatePageBO));
    }
    //已办
    @ApiOperation("已办列表")
    @PostMapping("/deal/task/page")
    public AjaxResult<PageInfo<ProcessTaskListVO>> dealTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
        return AjaxResult.success(processTemplateService.dealTaskPage(processTemplatePageBO));
    }
    //待办和已办列表
    @ApiOperation("待办和已办列表")
    @PostMapping("/dealAndWait/task/page")
    public AjaxResult<PageInfo<ProcessTaskListVO>> dealAndWaitTaskPage(@RequestBody ProcessTaskListBO processTemplatePageBO) {
        return AjaxResult.success(processTemplateService.dealAndWaitTaskPage(processTemplatePageBO));
    }
    //抄送
    @ApiOperation("抄送列表")
    @PostMapping("/copy/task/page")
    public AjaxResult<PageInfo<ProcessTaskListVO>> copyTaskPage(@RequestBody ProcessTaskListBO processTaskListBO){
        return AjaxResult.success(processTemplateService.copyTaskPage(processTaskListBO));
    }
    //审核通过
    @Log(title = "审批流程管理-审核通过", businessType = BusinessType.UPDATE)
    @ApiOperation("审核通过")
    @PostMapping("/agree")
    public AjaxResult<Object> agree(@RequestBody ProcessAgreeBO processAgreeBO) {
        processTemplateService.agree(processAgreeBO);
        return AjaxResult.success();
    }
    //审核拒绝
    @Log(title = "审批流程管理-审核拒绝", businessType = BusinessType.UPDATE)
    @ApiOperation("审核拒绝")
    @PostMapping("/refuse")
    public AjaxResult<Object> refuse(@RequestBody ProcessRefuseBO processRefuseBO) {
        processTemplateService.refuse(processRefuseBO);
        return AjaxResult.success();
    }
    //审核详情
    @ApiOperation("审核详情")
    @GetMapping("/detail")
    public AjaxResult<ProcessDetailVO> detail(@RequestParam String taskId) {
        ProcessDetailVO detail = processTemplateService.detail(taskId);
        return AjaxResult.success(detail);
    }
}