Newer
Older
casic-metering / casic-metering-api / src / main / java / com / casic / missiles / controller / MeterFileController.java
wangpeng on 5 Dec 2022 5 KB flowable集成
package com.casic.missiles.controller;

import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.IdDTO;
import com.casic.missiles.dto.IdsDTO;
import com.casic.missiles.dto.ReturnDTO;
import com.casic.missiles.dto.ReturnUtil;
import com.casic.missiles.dto.meter.FileListRequest;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.enums.ExportEnum;
import com.casic.missiles.exception.BusinessException;
import com.casic.missiles.model.MeterFile;
import com.casic.missiles.model.exception.enums.CoreExceptionEnum;
import com.casic.missiles.service.IMeterFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import java.util.Objects;

/**
 * @Description: 计量文件
 * @Author: wangpeng
 * @Date: 2022/11/21 17:47
 */
@Api(tags = "计量文件管理接口")
@Controller
@RequestMapping("/meter/file")
public class MeterFileController extends ExportController {
    @Autowired
    private IMeterFileService meterFileService;

    /**
     * 文件列表,列表中查的是文件表中已通过的
     * 质量文件(计量法规、质量手册、程序文件、作业文件、技术能力、CNAS文件)、计量管理规章制度、计量管理办法、校准检测办法、计量规程
     */
    @ApiOperation("文件列表/详情(分页)")
    @PostMapping("/listPage")
    @ResponseBody
    public ReturnDTO<PageInfoBT<MeterFile>> listPage(@RequestBody FileListRequest request) {
        Page<MeterFile> page = PageFactory.defaultPage();
        return ReturnUtil.success(super.packForBT(meterFileService.listPage(page, request)));
    }

    @ApiOperation("文件列表(不分页)")
    @PostMapping("/list")
    @ResponseBody
    public ReturnDTO<List<MeterFile>> list(@RequestBody FileListRequest request) {
        return ReturnUtil.success(meterFileService.list(request));
    }

    @ApiOperation("文件导出")
    @PostMapping("/listExport")
    @ResponseBody
    public void export(@RequestBody FileListRequest request) throws IOException {
        super.exportExcel(MeterFile.class, meterFileService.list(request), ExportEnum.FILE_EXPORT.getSheetName());
    }

    /**
     * 流程:审批人列表要随着流程图信息一起上传
     *      前后端交互两种方案:1、json转bpmn
     *                       2、前端直接传bpmn文件或bpmn的xml文件(使用BpmnXMLConverter类的方法)
     * 文件的审批状态字段要更新,保证文件表的状态及时更新,供各列表使用
     */
    @ApiOperation("文件新建")
    @PostMapping("/add")
    @ResponseBody
    public ReturnDTO add(@RequestBody @Valid MeterFile meterFile, BindingResult bindingResult) {
        if(bindingResult.hasErrors()){
            throw new BusinessException(CoreExceptionEnum.REQUEST_NULL.getCode(), bindingResult.getFieldError().getDefaultMessage());
        }
        return meterFileService.addFile(meterFile);
    }

    @ApiOperation("文件更新为已废止")
    @PostMapping("/update")
    @ResponseBody
    public ReturnDTO update(@RequestBody IdDTO idDTO) {
        Assert.isFalse(Objects.isNull(idDTO.getId()), () -> {
            throw new BusinessException(BusinessExceptionEnum.ID_NULL);
        });
        return meterFileService.updateFile(idDTO.getId());
    }

    @ApiOperation("文件删除")
    @PostMapping("/delete")
    @ResponseBody
    public ReturnDTO delete(@RequestBody @Valid IdDTO idDTO) {
        Assert.isFalse(Objects.isNull(idDTO.getId()), () -> {
            throw new BusinessException(BusinessExceptionEnum.ID_NULL);
        });
        return meterFileService.deleteFile(idDTO.getId());
        // TODO: 2022/11/26 考虑activiti流程数据除脏
    }

    @ApiOperation("文件批量删除")
    @PostMapping("/batchDelete")
    @ResponseBody
    public ReturnDTO batchDelete(@RequestBody @Valid IdsDTO idsDTO) {
        Assert.isFalse(CollectionUtils.isEmpty(idsDTO.getIds()), () -> {
            throw new BusinessException(BusinessExceptionEnum.ID_NULL);
        });
        return meterFileService.deleteBatchFile(idsDTO.getIds());
    }

    /**
     * 文件审批,各审批状态的列表都是查文件表,和activiti中获取任务中businessKey关联,参考查询我的待办任务列表接口,里面的TaskInfo类比文件表实体
     *          全部:所有状态的单据
     *          草稿箱:发起者已保存,但未提交的单据
     *          待审批:流程到该审批者用户,用户要去审批的单据(采用activiti自己待办任务列表实现)
     *          审批中:管理员角色可以查看所有的未完成的任务(activiti查看所有待办任务列表实现),发起者可查看自己的(google工作流有收藏查看发起者自己的流程方法)
     *          已通过:管理员角色可以查看所有的,发起者可查看自己的,审批者可查看流程中有自己的(google工作流有收藏查看有参与的流程方法)
     *          未通过:同已通过
     *          已取消:发起者取消的单据
     */
}