mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-04 14:36:50 +08:00
1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
This commit is contained in:
257
app/ticket/lib/workflow/node.php
Normal file
257
app/ticket/lib/workflow/node.php
Normal file
@@ -0,0 +1,257 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user