说明:对V1.0版本进行重构了,拆分为两个类:根类、父类
<?php
/**
* 日期:2023年10月24日
* 说明:整合定制开发过程中常用的功能
* 版本:V2.0
* 适用版本:通用版V12/PHP 7.2.34
* 依赖:OA系统数据库连接。include_once 'inc/auth.inc.php';或include_once 'inc/conn.php';
*/
class TDOA_BpmForm{
//具体流程的表名前缀
var $tbNamePre='bpm_data_';
var $mainAndList;
var $flow_id;
var $dataMkey;
/**
*
* 参数说明
* $mainAndList=array(//此参数必须。
* 'main',//表示当前表单,固定的,必须的
* '列表控件名称1',
* '列表控件名称2'
* )
* $flow_id,查询流程数据表名称及表中的字段。传入$run_id时,可不填此参数
*/
function __construct($flow_id,$mainAndList=array('main')){
$this->flow_id=$flow_id;
$this->mainAndList=$mainAndList;
}
/**
*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();
$tableColumnArr=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)) {
$tableColumnArr[$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($tableColumnArr);//字段名升序。
$tmp_keyArr=array();
$tmpArr=array();
if(isset($this->dataMkey[$type])&&!empty($this->dataMkey[$type])){
//方案一 没找到则返回空字符串,则数组值可能都是空字符串
foreach($this->dataMkey[$type] as $k=>$v){
$key=array_search($v,$tableColumnArr);
if($key===false){
$tmpArr[$k]='';
}else{
$tmpArr[$k]=$key;
}
}
/* 方案二 会过滤掉找不到的,找到的都是有效的,但可能返回空数组
$tmp_keyArr=array_intersect($tableColumnArr,$this->dataMkey[$type]);
foreach($tmp_keyArr as $k=>$v){
$key=array_search($v,$this->dataMkey[$type]);
$tmpArr[$key]=$k;
}
*/
}
$data[$type]=array(
'desc'=>$row['DESC'],
'table'=>$tableNameArr,
'cols'=>$tableColumnArr,
'keys'=>$tmpArr
);
}
return $data;
}
}
include_once 'TDOA_BpmForm.class.php';
class TDOA_BpmRun extends TDOA_BpmForm{
var $flow_id;
var $mainAndList=array('main');
var $dataMkey;
var $run_id;
public function __construct($run_id,$flow_id=0){
$this->run_id=$run_id;
if(isset($flow_id)&&$flow_id>0){
$this->flow_id=$flow_id;
}else{
$data=$this->getBpmRun();
$this->flow_id=$data['FLOW_ID'];
}
parent::__construct($this->flow_id,$this->mainAndList);
}
/**
* 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;
}
/**
* 根据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(
'bpm_data_537_list_829',//如果存在列表控件
'bpm_data_537_list_829_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m19004'=>'姓名',
'data_m19005'=>'开始日期'
),
'data'=>array(
0=>array(
'data_m19004'=>'李四',
'data_m19005'=>'2023年10月19日'
)
)
)
)
*
*/
public function getBpmData(){
$data=$this->getBpmTableAndColumn();
$tbArr=array();
foreach($data as $k=>$v){
$tbArr=$v['table'];
$tmp_data=array();
//查询数据
$cTbArr=count($tbArr);
if($cTbArr==1){
$sql=sprintf('select * from %s where run_id=%d',$tbArr[0],$this->run_id);
}else if($cTbArr==2){
$sql=sprintf('select * from %s as a join %s as b on a.id=b.id where a.run_id=%d',$tbArr[0],$tbArr[1],$this->run_id);
}
$res=exequery(TD::conn(),$sql);
while ($rows=mysqli_fetch_assoc($res)) {
foreach($rows as $k2=>$v2){
if($v2===null){//重置值为null的空字符串
$rows[$k2]='';
}
}
$tmp_data[]=$rows;
}
$data[$k]['data']=$tmp_data;
}
return $data;
}
}
include_once 'TDOA_BpmRun.class.php';
include_once 'erkai/jindie/apiclass/JinDie_BD_Empinfo.class.php';
include_once 'erkai/jindie/apiclass/JinDie_STK_Inventory.class.php';
include_once 'erkai/jindie/apiclass/JinDie_STK_MisDelivery.class.php';
class TDOA_BF_BanGongYongPin extends TDOA_BpmRun{
var $explodeStr='```';
var $mainAndList=array(
'main'=>'main',
'list'=>'出库内容'
);
var $dataMkey=array(
'main'=>array(
'lingyong'=>'申请日期',
'sqr'=>'领用申请人',
'bumen'=>'领料部门'
),
'list'=>array(
'ypid'=>'用品ID',
'ypcode'=>'用品编号',
'ypname'=>'用品名称',
'sq_shuliang'=>'申请数量',
'sf_shuliang'=>'实发数量',
'note'=>'备注'
)
);
var $run_id;
var $formData;
var $mainData;
var $mainKeys;
var $listData;
var $listKeys;
var $JinDie_BD_Empinfo;
var $JinDie_STK_Inventory;
var $JinDie_STK_MisDelivery;
public function __construct($run_id){
$this->run_id=$run_id;
parent::__construct($run_id);
$this->formData=$this->getBpmData();
$this->mainData=$this->formData['main']['data'];
$this->mainKeys=$this->formData['main']['keys'];
$this->listData=$this->formData['list']['data'];
$this->listKeys=$this->formData['list']['keys'];
$this->JinDie_BD_Empinfo=new JinDie_BD_Empinfo();
$this->JinDie_STK_Inventory=new JinDie_STK_Inventory();
$this->JinDie_STK_MisDelivery=new JinDie_STK_MisDelivery();
//测试
$this->mainData[0][$this->mainKeys['sqr']]='王凤英';
}
//验证部门必填
public function checkBuMen(){
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array()
);
$bumen=$this->mainData[0][$this->mainKeys['bumen']];
try{
if(empty($bumen)){
$msg='领料部门必填!';
throw new Exception($msg);
}else{
$arr=explode($this->explodeStr,$bumen);
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array(
'bumen'=>$arr[0],
'number'=>$arr[1]
)
);
}
}catch(Exception $e){
$returnData=array(
'status'=>false,
'msg'=>$e->getMessage(),
'data'=>array()
);
throw new Exception($e->getMessage);
}
return $returnData;
}
//验证发起人必须在金蝶系统员工表中
public function checkJinDieYuanGong(){
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array()
);
$sqr=$this->mainData[0][$this->mainKeys['sqr']];
try{
$searchData=array("FName"=>$sqr);
$sqRdata=$this->JinDie_BD_Empinfo->queryBill($searchData);
if(count($sqRdata)!=1||$sqr!=$sqRdata[0]["FName"]){
$msg=sprintf('【%s】,在金蝶系统员工表中没有查找到对应的信息!请联系相关人员处理。',$sqr);
throw new Exception($msg);
}else{
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array(
'name'=>$name,
'number'=>$sqRdata[0]['FStaffNumber']
)
);
}
}catch(Exception $e){
$returnData=array(
'status'=>false,
'msg'=>$e->getMessage(),
'data'=>array()
);
}
return $returnData;
}
//验证物料数据
public function checkWuLiao($show_kcsl=false){
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array()
);
try{
//物料行数
if(count($this->listData)==0){
$msg='物料总行数必须大于0!';
throw new Exception($msg);
}
//按物料编号的,记录并累加数量
$sumArr=array();
$noteArr=array();
foreach ($this->listData as $k => $v) {
$v_ypname=$v[$this->listKeys['ypname']];
$v_ypcode=$v[$this->listKeys['ypcode']];
$v_sf_shuliang=floatval($v[$this->listKeys['sf_shuliang']]);
//物料编号必须填写
if(empty($v_ypcode)){
$msg=$msg.sprintf('序号%d:用品编号必须填写'
,$k+1);
continue;
}
//实发数量必须为数字,且大于0
if($v_sf_shuliang<=0){
$msg=$msg.sprintf('序号%d:物料【%s】的实发数量:%s。实发数量填写要求:【1】实发数量必须为数字,注意空格。【2】实发数量必须大于0。【3】删除多余行。
',$k+1,$v_ypname,$v[$this->listKeys['sf_shuliang']]);
continue;
}else{
//如果存在重复物料编号,则累加相同物料编号的数量
if(array_key_exists($v_ypcode,$sumArr)){
$sumArr[$v_ypcode]=$sumArr[$v_ypcode]+$v_sf_shuliang;
}else{
$sumArr[$v_ypcode]=$v_sf_shuliang;
}
$noteArr[$v_ypcode]=$v[$this->listKeys['note']];
}
}
if(empty($sumArr)){
throw new Exception($msg);
}
//按查询金蝶系统的对应的即时库存
$codeArr=array_keys($sumArr);
$codeStr=implode(",",$codeArr);
$searchData=array("FMaterialId_FNumber"=>$codeStr);
$materialData=$this->JinDie_STK_Inventory->queryBill($searchData);
if($materialData==false){//按物料编号,在金蝶系统中查询不到对应库存的记录
$msg=$msg.sprintf('在金蝶云星空系统中未查询到物料编号【%s】的即时库存记录!
',$codeStr);
throw new Exception($msg);
}
//部分物料编号在金蝶系统中查询不到对应库存的记录
$tmpKeyArr=array_column($materialData, "FMaterialId.FNumber");
$valDiff=array_diff($codeArr,$tmpKeyArr);
if(count($valDiff)>0){
$codes=implode(",",$valDiff);
$msg=$msg.sprintf('在金蝶云星空系统中未查询到物料ID【%s】的即时库存记录!
',$codes);
throw new Exception($msg);
}
//实发数量,必须小于等于即时库存
foreach($materialData as $k=>$v){
$sf_num=$sumArr[$v["FMaterialId.FNumber"]];
$note=$noteArr[$v["FMaterialId.FNumber"]];
//申请的数量大于即时库存数量
if($sf_num>$v["FBaseQty"]){
if($show_kcsl){
$msg=$msg.sprintf('物料【%s】的申请总数量:%d,超出金蝶系统中的即时库存数量:%d
',$v["FMaterialId.FName"],$sf_num,$v["FBaseQty"]);
}else{
$msg=$msg.sprintf('物料【%s】的申请总数量:%d,超出金蝶系统中的即时库存数量。
',$v["FMaterialId.FName"],$sf_num);
}
}else{
//往数组追加元素
$v['sf_num']=$sf_num;
$v['note']=$note;
$returnData['data'][]=$v;
}
}
if(!empty($msg)){
throw new Exception($msg);
}
}catch(Exception $e){
$returnData=array(
'status'=>false,
'msg'=>$e->getMessage(),
'data'=>array()
);
}
return $returnData;
}
//验证表单数据
public function checkFormData($show_kcsl=false){
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array(),
'main'=>array(),
'list'=>array()
);
try{
$retData=$this->checkBuMen();
if($retData['status']==false){
throw new Exception($retData['msg']);
}
$returnData['main']['bmNumber']=$retData['data']['number'];
//检查发起人在金蝶系统员工表是否存在
$retData=$this->checkJinDieYuanGong();
if($retData['status']==false){
throw new Exception($retData['msg']);
}
$returnData['main']['sqrNumber']=$retData['data']['number'];
$retData=$this->checkWuLiao($show_kcsl);
if($retData['status']==false){
throw new Exception($retData['msg']);
}
$returnData['list']=$retData['data'];
}catch(Exception $e){
$returnData=array(
'status'=>false,
'msg'=>$e->getMessage(),
'data'=>array()
);
}
return $returnData;
}
//传输数据到金蝶系统
public function putDataToJinDie(){
$returnData=array(
'status'=>true,
'msg'=>'',
'data'=>array()
);
try{
$data=$this->checkFormData(true);
//组装model
$model=array(
//2023年8月28日新增 //备注
"FNote"=>"OA流水号:".$this->run_id.",推送时间:".date("Y-m-d H:i:s"),
//领料人 //员工表 员工编号 //2023年8月30日新增
"FPickerId"=>array(
"FStaffNumber"=>$data['main']['sqrNumber'],
),
//领料部门 //部门表 部门编号 //2023年8月30日新增
"FDeptId"=>array(
"FNumber"=>$data['main']['bmNumber'],
),
"FDate"=>date("Y-m-d",time()),//2023年9月2日 由单据日期,调整为传输日期
"FBillTypeID"=>array(
"FNumber"=>"QTCKD01_SYS"
),
"FStockDirect"=>"GENERAL",
"FOwnerTypeIdHead"=>"BD_OwnerOrg",
"FStockOrgId"=>array(
"FNumber"=>"GJB01"
),
"FBizType"=>"0",
);
$FEntity=array();
foreach($data['list'] as $k=>$v){
$FEntity[]=array(
"FQty"=>$v['sf_num'],//实发数量
"FBaseQty"=>$v['sf_num'],//实发数量(基本单位)
"FKeeperId"=>array(
"FNumber"=>$v["FKeeperId.FNumber"]
),
"FUnitID"=>array(
"FNumber"=>$v["FBaseUnitId.FNumber"]
),
"FStockStatusId"=>array(
"FNumber"=>$v["FStockStatusId.FNumber"]
),
"FOwnerId"=>array(
"FNumber"=>$v["FOwnerId.FNumber"]
),
"FKeeperTypeId"=>"BD_KeeperOrg",
"FBaseUnitId"=>array(
"FNumber"=>$v["FBaseUnitId.FNumber"]
),
"FMaterialId"=>array(
"FNumber"=>$v["FMaterialId.FNumber"]
),
"FOwnerTypeId"=>"BD_OwnerOrg",
"FStockId"=>array(
"FNumber"=>$v["FStockId.FNumber"]
),
"FEntryNote"=>$v['note']
);
}
$model["FEntity"]=$FEntity;
/*
//保存
$ret=$this->JinDie_STK_MisDelivery->save($model);
$b_save=$ret->Result->ResponseStatus->IsSuccess;
//提交审核
$sub_data=array(
"Ids"=>$ret->Result->Id
);
$jdNumber=$ret->Result->Number;
$ret=$this->JinDie_STK_MisDelivery->submit($sub_data);
*/
}catch(Exception $e){
$returnData=array(
'status'=>false,
'msg'=>$e->getMessage(),
'data'=>array()
);
}
return $returnData;
}
}
include_once 'inc/auth.inc.php';
include_once 'TDOA_BF_BanGongYongPin.class.php';
echo ''
;
$run_id='195057';
$obj=new TDOA_BF_BanGongYongPin($run_id);
$data=$obj->checkData();
var_dump($data);
日期:2023年10月19日
新建类文件,将下面代码复制到文件中即可。
功能说明:
1、根据flow_id,可以获取流程表单相关的表名、及字段名。
2、根据run_id,可以获取流程表单相关的的表名、字段名、及流程表单中用户数据。
/**
* 日期:2023年10月19日
* 说明:整合定制开发过程中常用的功能
* 版本:V1.0
* 适用版本:通用版V12/PHP 7.2.34
* 依赖:OA系统数据库连接。include_once 'inc/auth.inc.php';或include_once 'inc/conn.php';
*/
class zztdBpmClass{
//具体流程的表名前缀
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(
'bpm_data_537_list_829',//如果存在列表控件
'bpm_data_537_list_829_child'//如果列表控件中有多行文本框时,则有子表
),
'tableColumArr'=>array(
'data_m19004'=>'姓名',
'data_m19005'=>'开始日期'
),
'data'=>array(
0=>array(
'data_m19004'=>'李四',
'data_m19005'=>'2023年10月19日'
)
)
)
)
*
*/
public function getBpmData(){
$data=$this->getBpmTableAndColumn();
$tbArr=array();
foreach($data as $k=>$v){
$tbArr=$v['table'];
$tmp_data=array();
//查询数据
$cTbArr=count($tbArr);
if($cTbArr==1){
$sql=sprintf('select * from %s where run_id=%d',$tbArr[0],$this->run_id);
}else if($cTbArr==2){
$sql=sprintf('select * from %s as a join %s as b on a.id=b.id where a.run_id=%d',$tbArr[0],$tbArr[1],$this->run_id);
}
$res=exequery(TD::conn(),$sql);
while ($rows=mysqli_fetch_assoc($res)) {
foreach($rows as $k2=>$v2){
if($v2===null){//重置值为null的空字符串
$rows[$k2]='';
}
}
$tmp_data[]=$rows;
}
$data[$k]['data']=$tmp_data;
}
return $data;
}
}
调用示例
require_once 'inc/auth.inc.php';
require_once 'zztdBpmClass.php';
echo ''
;
$run_id=196444;
//$data=$zztdBpmClass->getBpmTableAndColumn();
$arr=array(
'main',
'公车出行费用明细',
'自行出行费用明细'
);
$zztdBpmClass=new zztdBpmClass($arr,$run_id);
$data=$zztdBpmClass->getBpmData();
var_dump($data);