mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-04 06:26:52 +08:00
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
257 lines
7.8 KiB
PHP
257 lines
7.8 KiB
PHP
<?php
|
|
/**
|
|
* 审批流节点业务逻辑类
|
|
*
|
|
* @author shopex开发团队
|
|
* @version 2025.07.10
|
|
*/
|
|
class ticket_workflow_node extends ticket_abstract {
|
|
/**
|
|
* 验证数据
|
|
*
|
|
* @param array $params
|
|
* @return array
|
|
*/
|
|
public function checkParams(&$params)
|
|
{
|
|
$mdl = app::get('ticket')->model('workflow_node');
|
|
$userMdl = app::get('desktop')->model('users');
|
|
$templateMdl = app::get('ticket')->model('workflow_template');
|
|
|
|
// check template_id
|
|
if(empty($params['template_id'])){
|
|
$error_msg = '所属模板未选择,请检查';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// check node_name
|
|
if(empty($params['node_name'])){
|
|
$error_msg = '节点名称必须填写';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// check node_type
|
|
if(empty($params['node_type'])){
|
|
$error_msg = '节点类型未选择,请检查';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// check step_order
|
|
// if(empty($params['step_order'])){
|
|
// $error_msg = '节点顺序必须填写';
|
|
// return $this->error($error_msg);
|
|
// }
|
|
|
|
if($params['node_type'] == 'approval'){
|
|
$params['step_order'] = 2;
|
|
}elseif($params['node_type'] == 'cc'){
|
|
$params['step_order'] = 3;
|
|
}elseif($params['node_type'] == 'end'){
|
|
$params['step_order'] = 4;
|
|
}else{
|
|
$params['step_order'] = 1;
|
|
}
|
|
|
|
if(empty($params['assignee_type'])){
|
|
$error_msg = '审批人类型未选择,请检查';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
if(empty($params['assignee_id'])){
|
|
$error_msg = '审批人未选择,请检查';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// 模板信息
|
|
$templateInfo = $templateMdl->dump(array('id'=>$params['template_id'], 'is_enabled'=>'true'), '*');
|
|
if(empty($templateInfo)){
|
|
$error_msg = '选择的模板:'.$templateInfo['template_name'].'不存在或者状态异常';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
$params['template_bn'] = $templateInfo['template_bn'];
|
|
$params['template_name'] = $templateInfo['template_name'];
|
|
$params['scene_type'] = $templateInfo['scene_type'];
|
|
|
|
// 操作员信息
|
|
$userInfo = $userMdl->dump(array('user_id'=>$params['assignee_id'], 'status'=>1), '*');
|
|
if(empty($userInfo)){
|
|
$error_msg = '审批人不存在或者状态异常';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
$params['assignee_name'] = $userInfo['name'];
|
|
|
|
// check exist
|
|
if($params['id']){
|
|
$rowInfo = $mdl->dump(array('id'=>$params['id']), '*');
|
|
if(empty($rowInfo)){
|
|
$error_msg = '编辑的记录不存在,请检查!';
|
|
return $this->error($error_msg);
|
|
}
|
|
}
|
|
|
|
return $this->succ('数据验证成功');
|
|
}
|
|
|
|
/**
|
|
* 保存数据
|
|
*
|
|
* @param array $data
|
|
* @param string $error_msg
|
|
* @return bool
|
|
*/
|
|
public function saveData(&$data, &$error_msg=null)
|
|
{
|
|
$mdl = app::get('ticket')->model('workflow_node');
|
|
|
|
//data
|
|
$saveData = [
|
|
'id' => isset($data['id']) ? $data['id'] : null,
|
|
'template_id' => $data['template_id'],
|
|
'node_name' => $data['node_name'],
|
|
'node_type' => $data['node_type'],
|
|
'step_order' => $data['step_order'],
|
|
'assignee_type' => $data['assignee_type'],
|
|
'assignee_id' => $data['assignee_id'],
|
|
'assignee_name' => $data['assignee_name'],
|
|
];
|
|
|
|
//check
|
|
if(empty($saveData['template_id'])){
|
|
$error_msg = '提交的所属模板ID无效';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
if(empty($saveData['node_name'])){
|
|
$error_msg = '提交的节点名称无效';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
if(empty($saveData['node_type'])){
|
|
$error_msg = '提交的节点类型无效';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
if(empty($saveData['step_order'])){
|
|
$error_msg = '提交的节点顺序无效';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
if(empty($saveData['assignee_id'])){
|
|
$error_msg = '审批人无效';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// 检测审批人是否已经被其他审批节点占用
|
|
$filter = [
|
|
'node_type' => $saveData['node_type'],
|
|
'template_id' => $saveData['template_id'],
|
|
];
|
|
|
|
if($saveData['id']){
|
|
$filter['id|noequal'] = $saveData['id'];
|
|
}
|
|
|
|
$existNodeRow = $mdl->getList('id,node_name,node_type', $filter, 0, 1);
|
|
if($existNodeRow){
|
|
$error_msg = '审批节点['. $saveData['node_type'] .'] + 模板['.$data['template_name'].']已经存在,不允许重复添加';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// 检测审批人是否已经被其他审批节点占用
|
|
$filter = [
|
|
'template_id' => $saveData['template_id'],
|
|
'assignee_id' => $saveData['assignee_id'],
|
|
'step_order|noequal' => $saveData['step_order']
|
|
];
|
|
$existNodeRow = $mdl->getList('id,node_name,node_type', $filter, 0, 1);
|
|
if($existNodeRow){
|
|
$error_msg = '审批人['.$saveData['assignee_name'].']已经被['. $existNodeRow[0]['node_name'] .']占用,请检查';
|
|
return $this->error($error_msg);
|
|
}
|
|
|
|
// insert or update
|
|
if($saveData['id']){
|
|
// unset
|
|
unset($saveData['id']);
|
|
|
|
//update
|
|
$rs = $mdl->update($saveData, array('id'=>$data['id']));
|
|
if(is_bool($rs)) {
|
|
$error_msg = '更新数据失败或者数据无变化';
|
|
return $this->error($error_msg);
|
|
}
|
|
}else{
|
|
//insert
|
|
$rs = $mdl->insert($saveData);
|
|
if(!$rs){
|
|
$error_msg = '插入数据失败';
|
|
return $this->error($error_msg);
|
|
}
|
|
}
|
|
|
|
return $this->succ('数据保存成功');
|
|
}
|
|
|
|
/**
|
|
* 获取开始节点
|
|
*
|
|
* @param int $template_id
|
|
* @return array|null
|
|
*/
|
|
public function getStartNode($template_id=0)
|
|
{
|
|
$nodeMdl = app::get('ticket')->model('workflow_node');
|
|
|
|
// filter
|
|
$filter = ['node_type'=>'start'];
|
|
if($template_id){
|
|
$filter['template_id'] = $template_id;
|
|
}
|
|
|
|
// get current node
|
|
$currentNode = $nodeMdl->dump($filter, '*');
|
|
if(empty($currentNode)){
|
|
return null;
|
|
}
|
|
|
|
return $currentNode;
|
|
}
|
|
|
|
/**
|
|
* 获取当前节点
|
|
*
|
|
* @param int $current_node_id
|
|
* @return array
|
|
*/
|
|
public function getCurrentNode($current_node_id)
|
|
{
|
|
$nodeMdl = app::get('ticket')->model('workflow_node');
|
|
|
|
// filter
|
|
$filter = ['id'=>$current_node_id];
|
|
|
|
// get current node
|
|
$currentNode = $nodeMdl->dump($filter, '*');
|
|
if(empty($currentNode)){
|
|
return null;
|
|
}
|
|
|
|
return $currentNode;
|
|
}
|
|
|
|
/**
|
|
* 获取操作员列表
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getOperatorList()
|
|
{
|
|
$userMdl = app::get('desktop')->model('users');
|
|
|
|
$userList = $userMdl->getList('user_id,name', ['status'=>1], 0, -1);
|
|
|
|
return $userList;
|
|
}
|
|
} |