流程转交插件触发另一个流程发起,回写初始值并删除本流程,父子流程功能

23 阅读1分钟

<?php

namespace app\flow\plug;

use app\common\bpm\exception\FlowErrorException;
use app\common\bpm\logic\FlowRun;
use app\common\bpm\logic\FlowRunPrcs;
use app\common\bpm\logic\manager\DeleteWork;
use app\common\bpm\logic\manager\FlowMsg;
use app\common\bpm\Scope;
use app\common\bpm\traits\FlowAction;
use app\lowcode\plug\Base;
use think\Db;
use think\Exception;
use think\exception\HttpResponseException;

//转来信
class TransferLetter extends Base
{
    public $data;
    public $type = 1;
    public function execute()
    {
   
        $data = $this->data;
        $d9 = $data['d9'];//提案委意见 立案/不立案
        
        // error($d9);
        if (empty($d9) || $d9 == '立案') {
            return true;
        }
        Scope::getInstance("flow");
        $user = auth()->user();
        $prcsId = null;
        $runPrcsId = null;
        $flowData = [
            'flow_id' => 458,
            'flowData' => [
                'flow_id' => 458,
                'd1' => $data['d1'],
                'd2' => $data['d2'],
                'd4' => $data['d4'],
                'd5' => $data['d5'],
                'd6' => $data['d6'],
                'd7' => $data['d7'],
                'd12' => $data['d12'],
                'd12_array' => $data['d12_array']
            ]
        ];
        
        $FlowRun = new FlowRun($user);
        Db::startTrans();
        try {
            //先调用保存接口 保存数据  没有runId 则为新建的数据
            $runData = $FlowRun->createWork($flowData);
            $runId = $runData['id'];
            logs()->setType(FlowAction::$logTypeCreate);
            if (!$runData) {
                throw  new FlowErrorException('流程不存在');
            }
            $FlowRun->saveData($flowData, $runId, $prcsId, $runData['flow_id']);
                          
            Db::commit();
        } catch (\Exception $e) {
            Db::rollback();
            error($e->getMessage(), config("app_trace") ? $e->getTrace() : null);
        }
        //保存和转交独立进行
        Db::startTrans();
        try {
            $FlowMsg = new FlowMsg();
            $FlowMsg->runPrcsId = $runPrcsId;
            $FlowMsg->getDataFromRunId($runId, $user, false, $prcsId);
            //删除本流程
            DeleteWork::DeleteWork($data['flow_run_id'],1,false);
            Db::commit();
        } catch (HttpResponseException $e) {
            throw $e;
        } catch (\Exception $e) {
            Db::rollback();
            error($e->getMessage(), config("app_trace") ? $e->getTrace() : null);
        }
        return true;
    }

}