<?php
/**
* 日期:2023年10月19日
* 说明:整合定制开发过程中常用的功能
* 版本:V1.0
* 适用版本:通用版V12/PHP 7.2.34
* 依赖:OA系统数据库连接。include_once 'inc/auth.inc.php';或include_once 'inc/conn.php';
*/
class tdBpmClass{
//具体流程的表名前缀
var $tbNamePre='bpm_data_';
var $mainAndList=array();
var $flow_id=0;
var $run_id=0;
/**
*
* 参数说明
* $mainAndList=array(//此参数必须。
* 'main',//表示当前表单,固定的,必须的
* '列表控件名称1',
* '列表控件名称2'
* )
* $run_id,查询流程表单的具体数据,则此参数必须。
* $flow_id,查询流程数据表名称及表中的字段。传入$run_id时,可不填此参数
*/
function __construct(){//$mainAndList,$run_id=0,$flow_id=0
$args=func_get_args();
$argsnum=func_num_args();
switch ($argsnum) {
case 1:
$this->mainAndList=$args[0];
break;
case 2:
$this->mainAndList=$args[0];
$this->run_id=$args[1];
$data=$this->getBpmRun();
$this->flow_id=$data['FLOW_ID'];
break;
case 3:
$this->mainAndList=$args[0];
$this->run_id=$args[1];
$this->flow_id=$args[2];
break;
default:
break;
}
}
/**
* getBpmRun
* 说明:根据流水号run_id,获取流程的信息
* @return array 一维数组
*/
public function getBpmRun(){
$data=array();
$sql=sprintf('select * from bpm_run where RUN_ID=%d',$this->run_id);
$res=exequery(TD::conn(),$sql);
$data=mysqli_fetch_assoc($res);
return $data;
}
/**
*getSortAndDesc
* @return
array(
'main'=>'表单名称',
'detail_828'=>'列表控件名称'
)
*/
public function getSortAndDesc(){
$data=array();
$sql=sprintf('select * from bpm_variable_sort where FLOW_ID=%d',$this->flow_id);
$res=exequery(TD::conn(),$sql);
while ($row=mysqli_fetch_assoc($res)) {
if($row['TYPE']=='main'){
$type='main';
}else{
$type=$row['TYPE'].'_'.$row['ID'];
}
$data[$type]=$row['DESC'];
}
return $data;
}
/**
* getBpmTableAndColumn
* 说明:根据流程flow_id,获取流程的表名及字段名、列表控件的表名及字段名
* @return
array(
0=>array(//main的键值
'desc'=>'表单名称',
'tableNameArr'=>array(
'bpm_data_537',
'bpm_data_537_child'//如果表单中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18951'=>'申请日期',
'data_m18954'=>'报销人'
)
),
1=>array(//列表控件名称1键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_828',//如果存在列表控件
'bpm_data_537_list_828_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18984'=>'派车单号',
'data_m18985'=>'报告编号'
)
),
2=>array(//列表控件名称2键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_829',//如果存在列表控件
'bpm_data_537_list_829_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m19004'=>'派车单号',
'data_m19005'=>'报告编号'
)
)
)
*/
public function getBpmTableAndColumn(){
//表名前缀
$tbPre=$this->tbNamePre.$this->flow_id;
//返回数据
$data=array();
$sql=sprintf('select * from bpm_variable_sort where FLOW_ID=%d',$this->flow_id);
$res=exequery(TD::conn(),$sql);
while ($row=mysqli_fetch_assoc($res)) {
$tableName='';
$tableNameArr=array();
$tableColumArr=array();
if($row['TYPE']=='main'){
$type=array_search('main',$this->mainAndList);
$tableName=$tbPre;
}else{
$type=array_search($row['DESC'],$this->mainAndList);
$tableName=$tbPre.'_list_'.$row['ID'];
}
if($type===false){
continue;
}
array_push($tableNameArr,$tableName);
$sql2=sprintf('select * from bpm_variable where SORT_ID =%d',$row['ID']);
$res2=exequery(TD::conn(),$sql2);
$i=0;
while ($row2=mysqli_fetch_assoc($res2)) {
$tableColumArr[$row2['NAME']]=$row2['DESC'];
if($i===0&&$row2['TYPE']=='text'){ //如果有一个控件类型为text,则存在xx_child子表
$tableName=$tableName.'_child';
array_push($tableNameArr,$tableName);
$i++;
}
}
asort($tableNameArr);//确保子表_child在主表后面
ksort($tableColumArr);//字段名升序。
$data[$type]=array(
'desc'=>$row['DESC'],
'table'=>$tableNameArr,
'cols'=>$tableColumArr
);
}
ksort($data);
return $data;
}
/**
* 根据run_id,获取当前流程的表单数据
* @return
array(
0=>array(//main的键值
'desc'=>'表单名称',
'tableNameArr'=>array(
'bpm_data_537',
'bpm_data_537_child'//如果表单中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18951'=>'申请日期',
'data_m18954'=>'报销人'
),
'data'=>array(
0=>array(
'data_m18951'=>'2023年10月19日',
'data_m18954'=>'张三'
)
)
),
1=>array(//列表控件名称1键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(
'bpm_data_537_list_828',//如果存在列表控件
'bpm_data_537_list_828_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m18984'=>'派车单号',
'data_m18985'=>'报告编号'
),
'data'=>array(
0=>array(
'data_m18984'=>'PCDBH-001',
'data_m18985'=>'BGBH-001'
)
)
),
2=>array(//列表控件名称2键值
'desc'=>'列表控件名称',
'tableNameArr'=>array(