TblContractController.java 10.3 KB
package com.ruoyi.compliancemanagement.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Arrays;
import java.util.Map;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.businessworkflow.domain.bo.TblBusinessWorkflowBo;
import com.ruoyi.common.businessworkflow.service.ITblBusinessWorkflowService;
import com.ruoyi.compliancemanagement.domain.TblContract;
import com.ruoyi.compliancemanagement.model.TblContractModel;
import com.ruoyi.flowable.common.constant.ProcessConstants;
import com.ruoyi.flowable.common.enums.ProcessStatus;
import com.ruoyi.workflow.service.IWfProcessService;
import lombok.RequiredArgsConstructor;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.flowable.engine.HistoryService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.compliancemanagement.domain.vo.TblContractVo;
import com.ruoyi.compliancemanagement.domain.bo.TblContractBo;
import com.ruoyi.compliancemanagement.service.ITblContractService;
import com.ruoyi.common.core.page.TableDataInfo;

/**
 * 【请填写功能名称】
 *
 * @author ruoyi
 * @date 2024-07-05
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/system/contract")
public class TblContractController extends BaseController {

    private final ITblContractService iTblContractService;
    private final  IWfProcessService iWfProcessService;
    private final ITblBusinessWorkflowService iTblBusinessWorkflowService;

    @Resource
    protected HistoryService historyService;
    /**
     * 查询【合同审批】列表
     */
    @SaCheckPermission("system:contract:list")
    @GetMapping("/list")
    public TableDataInfo<TblContractModel> list(TblContractBo bo, PageQuery pageQuery) {
        return iTblContractService.queryPageList(bo, pageQuery);
    }

    /**
     * 查询【归档合同】列表
     */
    @SaCheckPermission("system:contract:listSealContract")
    @GetMapping("/listSealContract")
    public TableDataInfo<TblContractModel> listSealContract(TblContractBo bo, PageQuery pageQuery) {
        return iTblContractService.queryPageListSealContract(bo, pageQuery);
    }

    /**
     * 导出【请填写功能名称】列表
     */
    @SaCheckPermission("system:contract:export")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(TblContractBo bo, HttpServletResponse response) {
        List<TblContractVo> list = iTblContractService.queryList(bo);
        ExcelUtil.exportExcel(list, "【请填写功能名称】", TblContractVo.class, response);
    }

    /**
     * 获取【请填写功能名称】详细信息
     *
     * @param id 主键
     */
    @SaCheckPermission("system:contract:query")
    @GetMapping("/{id}")
    public R<TblContractVo> getInfo(@NotNull(message = "主键不能为空")
                                     @PathVariable Long id) {
        return R.ok(iTblContractService.queryById(id));
    }

    /**
     * 新增【请填写功能名称】
     */
//    @SaCheckPermission("system:contract:add")
//    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
//    @RepeatSubmit()
//    @PostMapping()
//    public R<Void> add(@Validated(AddGroup.class) @RequestBody TblContractBo bo) {
//        return toAjax(iTblContractService.insertByBo(bo));
//    }

    /**
     * 新增合同起草数据并启动流程
     */
//    @SaCheckPermission("system:contract:addAndStart")
//    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
//    @RepeatSubmit()
//    @PostMapping()
//    public R<Void> addAnd(@Validated(AddGroup.class) @RequestBody TblContractBo bo) {
//        return toAjax(iTblContractService.insertByBo(bo));
//    }

    @Transactional(rollbackFor = Exception.class)
    @SaCheckPermission("system:contract:addAndStart")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT)
    @RepeatSubmit()
    @PostMapping()
    public R<Void> addAndStart(
                               @Validated(AddGroup.class) @RequestBody TblContractBo bo) {
//        Matter matter = new Matter();
        String procDefId = "Process_1721195856340:1:7aca8265-489a-11ef-a778-421c839c76ba";
        iTblContractService.insertByBo(bo);
        Long id = bo.getId();
        //Long id = sLeaveService.create(studentLeave,matterKey);
        if (id > 0 || id != null){
            Map<String, Object> variables = new HashMap<>();
            // fromSource用来标识此事项是提交来源是客户端还是移动端
            //合同编号
            variables.put("contractno", bo.getContractno());
            // 合同名称
            variables.put("contractName",bo.getContractName());
            // 合同类型
            variables.put("contractType",Long.valueOf(bo.getContractType()));
            // 合同金额
            variables.put("contractAmount", bo.getContractAmount());
            // 生效日期
            variables.put("effectiveDate", bo.getEffectiveDate());
            // 到期日期
            variables.put("expirationDate", bo.getExpirationDate());
            // 甲方
            variables.put("partyA", bo.getPartyA());
            // 甲方链接地址
            variables.put("partyAAddress", bo.getPartyAAddress());
            // 乙方
            variables.put("partyB", bo.getPartyB());
            // 乙方链接地址
            variables.put("partyBAddress", bo.getPartyBAddress());
            // 付款方式
            variables.put("paymentMethod", bo.getPaymentMethod());
            // 签订日期
            variables.put("signingDate", bo.getSigningDate());
            // 标的物信息
            variables.put("subjectInformation", bo.getSubjectInformation());
            // 附件
            variables.put("attachments", bo.getAttachments());
            // 变更原因
            variables.put("reasonChange", bo.getReasonChange());
            // 变更内容
            variables.put("reasonText", bo.getReasonText());
            // 启动流程
            ProcessInstance processInstance = iWfProcessService.startProcessByDefId(procDefId, variables);

            if(null != processInstance){

                // 获取流程状态
                HistoricVariableInstance processStatusVariable = historyService.createHistoricVariableInstanceQuery()
                    .processInstanceId(processInstance.getProcessInstanceId())
                    .variableName(ProcessConstants.PROCESS_STATUS_KEY)
                    .singleResult();
                String processStatus = null;
                if (ObjectUtil.isNotNull(processStatusVariable)) {
                    processStatus = Convert.toStr(processStatusVariable.getValue());
                }

                HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
                    .processDefinitionId(procDefId);
                List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.list();
                // 兼容旧流程
                if (processStatus == null) {
                    processStatus = ObjectUtil.isNull(historicProcessInstances.get(0).getEndTime()) ? ProcessStatus.RUNNING.getStatus() : ProcessStatus.COMPLETED.getStatus();
                }

                TblBusinessWorkflowBo tblBusinessWorkflowBo = new TblBusinessWorkflowBo();
                tblBusinessWorkflowBo.setBusinessId(id);
                tblBusinessWorkflowBo.setProcInsId(processInstance.getProcessInstanceId());
                tblBusinessWorkflowBo.setProcDefId(procDefId);
                tblBusinessWorkflowBo.setDeployId(processInstance.getDeploymentId());
                tblBusinessWorkflowBo.setProcessStatus(processStatus);
                TableName table = TblContract.class.getAnnotation(TableName.class);
                tblBusinessWorkflowBo.setTableName(table.value());
                iTblBusinessWorkflowService.insertByBo(tblBusinessWorkflowBo);
//                iTblContractService.updateProcInsIdById(processInstance.getProcessInstanceId(),id);
            }
            return R.ok("成功");
        }else{
            return R.fail("系统故障!");
        }

    }

    /**
     * 修改【请填写功能名称】
     */
    @SaCheckPermission("system:contract:edit")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE)
    @RepeatSubmit()
    @PutMapping()
    public R<Void> edit(@Validated(EditGroup.class) @RequestBody TblContractBo bo) {
        return toAjax(iTblContractService.updateByBo(bo));
    }

    @RepeatSubmit()
    @PostMapping("/updateSealByContractno")
    public R<Void> updateSealByContractno( @RequestBody TblContractBo bo) {
        String contractno = bo.getContractno();
        String sealContract = bo.getSealContract();
        return toAjax(iTblContractService.updateSealByContractno(contractno,sealContract));
    }


    /**
     * 删除【请填写功能名称】
     *
     * @param ids 主键串
     */
    @SaCheckPermission("system:contract:remove")
    @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public R<Void> remove(@NotEmpty(message = "主键不能为空")
                          @PathVariable Long[] ids) {
        return toAjax(iTblContractService.deleteWithValidByIds(Arrays.asList(ids), true));
    }
}