<?php
namespace Gdoo\Model;
use XMLReader;
use DB;
use Request;
use Validator;
use URL;
use View;
use Auth;
use App\Support\AES;
use App\Support\Hook;
use App\Support\License;
use Gdoo\Model\Models\Bill;
use Gdoo\Model\Models\Model;
use Gdoo\Model\Models\Field;
use Gdoo\Model\Models\Permission;
use Gdoo\Model\Models\Template;
use Gdoo\Model\Models\Step;
use Gdoo\Model\Models\StepLog;
use Gdoo\Index\Models\Attachment;
use Gdoo\Index\Models\Access;
use Gdoo\Index\Services\AttachmentService;
use Gdoo\User\Models\User;
use Gdoo\User\Models\UserAsset;
use Gdoo\Model\Models\Run;
use Gdoo\Model\Models\RunStep;
use Gdoo\Model\Models\RunLog;
use Gdoo\Model\Services\FieldService;
use Gdoo\Model\Services\ModuleService;
use Gdoo\Index\Services\NotificationService;
use Gdoo\Model\Services\StepService;
use Gdoo\User\Services\UserAssetService;
use Gdoo\User\Services\UserService;
use Illuminate\Support\Arr;
class Form
{
/**
* 关联字段处理
*/
public static function fieldRelated($table, &$field, &$join, &$select, &$links)
{
if ($field['data_type']) {
$data_type = $field['data_type'];
$data_field = $field['data_field'];
$data_link = $field['data_link'];
$_table = $data_link.'_'.$data_type;
if ($field['type']) {
$join[$_table] = [$data_type.' as '.$_table, $_table.'.id', '=', $table.'.'.$data_link, $table, 1];
}
$links[$data_link][$data_link] = 'id';
if ($field['field'] == $data_link) {
$column = $field['field'].'_'.$data_field;
} else {
$column = $field['field'];
}
$field_count = mb_substr_count($data_field, ':');
if ($field_count > 0) {
$var1 = explode(':', $data_field);
list($_v1, $_v2) = explode('.', $var1[0]);
list($_t1, $_t2) = explode('.', $var1[1]);
if ($field['type']) {
$_table = $data_link.'_'.$_t1;
} else {
$_table = $field['field'].'_'.$_t1;
}
$join[$_table] = [$_t1.' as '.$_table, $_table.'.id', '=', $data_link.'_'.$data_type.'.'.$_v2, $data_link.'_'.$data_type, 1];
$index = $_table.'.'.$_t2;
if ($field['field'] == $data_link) {
$column = $field['field'].'_'.$_v1;
// 这里本地字段和右表字段一样时,直接取右表名称
$links[$data_link][$column] = $_v1;
} else {
// $_v2 右表关联字段,$_t2 右表映射字段
if ($field['type']) {
$links[$data_link][$column] = $_v2;
// 右表 id_name
$links[$data_link][$column.'_'.$_t2] = $_v2.'_'.$_t2;
$field['dest_column'] = $column.'_'.$_t2;
$column = $column.'_'.$_t2;
} else {
$links[$data_link][$column] = $_v2.'_'.$_t2;
}
}
} else {
if ($field['type']) {
if ($field['field'] == $data_link) {
$index = $data_link.'_'.$data_type.'.'.$data_field;
} else {
$index = $table.'.'.$field['field'];
}
} else {
$index = $data_link.'_'.$data_type.'.'.$data_field;
}
$links[$data_link][$column] = $data_field;
}
$field['_column'] = $column;
$select[] = $index. ' as '.$column;
}
}
public static function make($options)
{
$assets = UserAssetService::getNowRoleAssets();
// 权限查询类型
$code = $options['code'];
$bill = Bill::where('code', $code)->first();
// 表数据
$flow = DB::table('model')
->where('id', $bill['model_id'])
->first();
// 主表字段
$fields = DB::table('model_field')
->where('model_id', $bill['model_id'])
->orderBy('sort', 'asc')
->get()->keyBy('field');
$table = $flow['table'];
// 查询主表数据
$join = $select = $links = [];
$select[] = $table.'.*';
foreach($fields as $field) {
static::fieldRelated($table, $field, $join, $select, $links);
}
$join = Grid::sortJoin($join);
$q = DB::table($table)
->where($table.'.id', (int)$options['id']);
foreach($join as $j) {
$q->leftJoin($j[0], $j[1], $j[2], $j[3]);
}
$row = $q->select($select)->first();
$auth = auth()->user();
$action = $options['action'];
if ($action == 'show') {
$tpl = 'show';
$type_sql = '(' . join(' or ', [db_instr('type', $tpl)]) . ')';
} else {
$tpl = $row['id'] > 0 ? 'edit' : 'create';
$type_sql = '(' . join(' or ', [db_instr('type', $tpl)]) . ')';
}
if ($action == 'print') {
$type_sql = '(' . join(' or ', [db_instr('type', 'print')]) . ')';
}
$key = AES::encrypt($bill['id'].'.'.(int)$row['id'], config('app.key'));
$run_id = 0;
$step_id = 0;
$run_log_id = 0;
$run_step_id = 0;
$recall_log_id = 0;
$recall_btn = $audit_btn = $abort_btn = $read_btn = false;
if ($bill['audit_type'] == 1) {
$run = DB::table('model_run')
->where('bill_id', $bill['id'])
->where('data_id', $row['id'])
->first();
// 流程是新建的
if (empty($run)) {
$step = DB::table('model_step')
->where('bill_id', $bill['id'])
->where('type', 'start')
->first();
$step_id = $step['id'];
} else {
$step = DB::table('model_run_log')
->leftJoin('model_run_step', 'model_run_step.id', '=', 'model_run_log.run_step_id')
->where('model_run_log.run_id', $run['id'])
->where('model_run_log.user_id', $auth['id'])
->where('model_run_log.status', 0)
->orderBy('model_run_log.id', 'asc')
->first([
'model_run_log.*',
'model_run_step.type as step_type',
'model_run_step.step_id',
'model_run_step.permission_id'
]);
$run_id = $run['id'];
$step_id = $step['step_id'];
$run_step_id = $step['run_step_id'];
$run_log_id = $step['id'];
$option = $step['option'];
// 判断是有审核权限
$audit_status = $step['user_id'] == auth()->id();
if ($option == 1) {
$audit_btn = $audit_status;
} else {
$read_btn = $audit_status;
}
}
if ($row['status'] == '0') {
$audit_btn = 1;
}
if ($row['status'] == '1') {
$abort_btn = 1;
}
// 获取表单操作权限
$_permission = DB::table('model_permission')
->permission('receive_id')
->where('id', $step['permission_id'])
->first();
// 获取最后已转交节点
$passed = DB::table('model_run_log')
->where('run_id', $run['id'])
->where('user_id', $auth['id'])
->where('status', '>', 0)
->orderBy('id', 'desc')
->first();
if ($passed) {
$recall_log_id = $passed['id'];
$nodes = DB::table('model_run_log
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Gdoo是基于PHP Laravel的开源OA/协同办公平台,包含销售管理、日程安排,进销存、数据分析,强大的自定义能力。改进销售管理模式,提升企业执行效率。进销存功能、营销管理功能、简单生产计划、业务员销售团队分级管理、支持客户任务和业务员任务进度统计、支持客户自主下单。特别注重销售管理、业绩分析。主要为食品行业生产型和贸易企业定制开发。包括强大的自定义功能,模型字段(自定义跨表映射功能、视图管理、流程管理、字段权限管理)
资源推荐
资源详情
资源评论
收起资源包目录
基于PHP Laravel的开源OA/协同办公平台,包含销售管理、日程安排,进销存、数据分析,强大的自定义能力 (1390个子文件)
artisan 2KB
vendor.min.css 371KB
index.css 257KB
bootstrap.css 128KB
reset.css 80KB
ag-theme-balham.css 80KB
gdoo.min.css 79KB
layui.css 65KB
bootstrap-icons.css 64KB
ag-grid.css 64KB
ueditor.css 43KB
gdoo.css 37KB
dhtmlxgantt.css 36KB
ueditor.min.css 33KB
font-awesome.min.css 30KB
fullcalendar.css 27KB
ui.fancytree.css 26KB
video-js.css 22KB
menu.css 20KB
ui.fancytree.min.css 20KB
animate.css 19KB
image.css 19KB
select2.css 18KB
glyphicon.css 17KB
video.css 15KB
attachment.css 15KB
index.min.css 14KB
layer.css 14KB
layer.css 14KB
video-js.min.css 11KB
tempusdominus-bootstrap.css 11KB
console.css 11KB
aggrid.css 10KB
app.css 10KB
layui.mobile.css 10KB
viewer.css 9KB
demo.css 8KB
toastr.css 7KB
laydate.css 7KB
shCoreDefault.css 7KB
fontawesome-iconpicker.min.css 6KB
fullcalendar.print.css 5KB
layer.css 5KB
datepicker.css 5KB
scrawl.css 4KB
cropper.min.css 4KB
timeline.css 3KB
codemirror.css 3KB
charts.css 3KB
background.css 2KB
workflow.css 2KB
emotion.css 2KB
dialogbase.css 2KB
music.css 2KB
edittable.css 1KB
code.css 1KB
template.css 1KB
icon.css 719B
webuploader.css 515B
webuploader.css 500B
help.css 395B
iframe.css 42B
app.css 0B
fontawesome-webfont.eot 162KB
iconfont.eot 40KB
glyphicons-halflings-regular.eot 22KB
vjs.eot 3KB
.env.example 1KB
wface.gif 49KB
jxface2.gif 40KB
yface.gif 28KB
bface.gif 27KB
icons.gif 20KB
file-icons.gif 20KB
file-icons.gif 20KB
tface.gif 19KB
fface.gif 18KB
cface.gif 8KB
loading-0.gif 6KB
loading-0.gif 6KB
icons-rtl.gif 5KB
icons.gif 5KB
icons-all.gif 4KB
loading.gif 3KB
loading-2.gif 2KB
loading-2.gif 2KB
loading.gif 2KB
videologo.gif 2KB
indicator.gif 2KB
indicator.gif 2KB
forum.gif 1KB
cancelbutton.gif 1KB
button-bg.gif 1KB
lock.gif 1KB
alignicon.gif 1KB
word.gif 1019B
icon_doc.gif 1012B
icon_psd.gif 1009B
icon_rar.gif 1007B
icon_xls.gif 1005B
共 1390 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论
- sczzc12082023-09-29简直是宝藏资源,实用价值很高,支持!
- Q7067078412024-03-28发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6649
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 解决未在远程桌面会话中捕获到鼠标,vmguest.iso软件分享给大家
- JSP+SQL基于WEB的开放性实验管理系统设计与实现(源代码+论文+开题报告+中英文献+答辩PPT).rar
- log4net配置文件!!!!!!!!!!!!!!!!!
- 河南统计面板数据集(2010-2022年).xlsx
- OrcaleDBHelper帮助类!!!!!!!!!!!!
- log4net帮助类,用来写日志!!!!!!!!!!!!!
- Windows10时间同步源
- 信呼OA系统2.1.7版源码
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功