diff --git a/app/Gdoo/Customer/Hooks/CustomerApplyHook.php b/app/Gdoo/Customer/Hooks/CustomerApplyHook.php index 4e99cff5..9e6e49a5 100644 --- a/app/Gdoo/Customer/Hooks/CustomerApplyHook.php +++ b/app/Gdoo/Customer/Hooks/CustomerApplyHook.php @@ -110,11 +110,11 @@ class CustomerApplyHook $customer['department_code'] = $department['code']; $customer['headCode'] = $customer['code']; - $ret = plugin_sync_api('CustomerSync', $customer); - if ($ret['success'] == true) { - return $params; + $ret = plugin_sync_api('postCustomer', $customer); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); } - abort_error($ret['msg']); + return $params; } public function onBeforeDelete($params) { diff --git a/app/Gdoo/Index/Controllers/WorkflowController.php b/app/Gdoo/Index/Controllers/WorkflowController.php index 46fea5be..7bfacbbb 100644 --- a/app/Gdoo/Index/Controllers/WorkflowController.php +++ b/app/Gdoo/Index/Controllers/WorkflowController.php @@ -106,10 +106,8 @@ class WorkflowController extends DefaultController } } - // 执行模式 - $run_mode = $step_next['run_mode']; - - if ($run_mode == 1) { + // 判断单人执行模式 + if ($step_next['run_mode'] == 1) { if (count($step_user_ids) > 1) { return $this->json('单人执行不能多个审核人。'); } @@ -157,7 +155,7 @@ class WorkflowController extends DefaultController } } - $gets['run_mode'] = $run_mode; + $gets['run_mode'] = $step['run_mode']; $gets['step_user_ids'] = $step_user_ids; $step_next_inform = array_filter((array)$gets['step_next_inform']); diff --git a/app/Gdoo/Model/Form.php b/app/Gdoo/Model/Form.php index f4ca6cc4..82d288d1 100644 --- a/app/Gdoo/Model/Form.php +++ b/app/Gdoo/Model/Form.php @@ -2305,12 +2305,6 @@ class Form // 主表数据 $master = $gets[$table]; - // 审核完成时执行 - if ($gets['step_next_type'] == 'end') { - $_data = Hook::fire($table.'.onBeforeAudit', ['table' => $table, 'master' => $master, 'id' => $master['id']]); - extract($_data); - } - /* back 退回 draft 草稿 @@ -2322,21 +2316,6 @@ class Form if ($bill['audit_type'] == 1) { - if ($gets['step_next_type']) { - // 设置流程主表状态 - switch ($gets['step_next_type']) { - case 'next': - $master['status'] = '2'; - break; - case 'back': - $master['status'] = '-2'; - break; - case 'end': - $master['status'] = '1'; - break; - } - } - $run = DB::table('model_run') ->where('bill_id', $bill['id']) ->where('data_id', $id) @@ -2469,6 +2448,39 @@ class Form break; } + if ($gets['step_next_type']) { + // 设置流程主表状态 + switch ($gets['step_next_type']) { + case 'next': + $master['status'] = '2'; + break; + case 'back': + $master['status'] = '-2'; + break; + case 'end': + $master['status'] = '1'; + break; + } + } + + // 结束节点时执行 + if ($gets['step_next_type'] == 'end') { + // 结束流程时最后一个办理(针对多人执行) + if ($next_step_write) { + // 设置生效数据 + $_run['actived_id'] = $auth['id']; + $_run['actived_by'] = $auth['name']; + $_run['actived_at'] = time(); + + // 生效时执行事件 + $_data = Hook::fire($table.'.onBeforeAudit', ['table' => $table, 'master' => $master, 'id' => $master['id']]); + extract($_data); + } else { + // 结束节点不结束流程 + $master['status'] = '2'; + } + } + // 更新自己已办日志 DB::table('model_run_log') ->where('run_id', $run_id) @@ -2592,13 +2604,6 @@ class Form $_run['partner_type'] = 'supplier'; } - // 流程结束时设置运行主表 - if ($gets['step_next_type'] == 'end') { - $_run['actived_id'] = $auth['id']; - $_run['actived_by'] = $auth['name']; - $_run['actived_at'] = time(); - } - DB::table('model_run') ->where('id', $run_id) ->update($_run); diff --git a/app/Gdoo/Stock/Hooks/AllocationHook.php b/app/Gdoo/Stock/Hooks/AllocationHook.php index 828c1a38..9b2ab91c 100644 --- a/app/Gdoo/Stock/Hooks/AllocationHook.php +++ b/app/Gdoo/Stock/Hooks/AllocationHook.php @@ -44,10 +44,10 @@ class AllocationHook ->get(['stock_allocation_data.*', 'product.code as product_code']); // 同步数据到外部接口 $ret = plugin_sync_api('postTransVouch', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -56,7 +56,7 @@ class AllocationHook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'TransVouch', 'field' => 'cTVCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在其他入库单['.$master['sn'].']无法弃审。'); + abort_error('存在其他入库单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/CancelHook.php b/app/Gdoo/Stock/Hooks/CancelHook.php index 251fd09d..9d2e876b 100644 --- a/app/Gdoo/Stock/Hooks/CancelHook.php +++ b/app/Gdoo/Stock/Hooks/CancelHook.php @@ -115,10 +115,10 @@ class CancelHook // 同步数据到外部接口 $ret = plugin_sync_api('postCancelOrder', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -127,7 +127,7 @@ class CancelHook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'DispatchList', 'field' => 'cDLCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在退货申请['.$master['sn'].']无法弃审。'); + abort_error('存在退货申请['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/DeliveryHook.php b/app/Gdoo/Stock/Hooks/DeliveryHook.php index 5018b62a..9ef8a066 100644 --- a/app/Gdoo/Stock/Hooks/DeliveryHook.php +++ b/app/Gdoo/Stock/Hooks/DeliveryHook.php @@ -133,10 +133,10 @@ class DeliveryHook // 同步数据到外部接口 $ret = plugin_sync_api('postDelivery', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -145,7 +145,7 @@ class DeliveryHook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'DispatchList', 'field' => 'cDLCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在发货单['.$master['sn'].']无法弃审。'); + abort_error('存在发货单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/DirectHook.php b/app/Gdoo/Stock/Hooks/DirectHook.php index 7a8fc547..4036ae12 100644 --- a/app/Gdoo/Stock/Hooks/DirectHook.php +++ b/app/Gdoo/Stock/Hooks/DirectHook.php @@ -122,10 +122,10 @@ class DirectHook // 同步数据到外部接口 $ret = plugin_sync_api('postDeliveryZY', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -134,7 +134,7 @@ class DirectHook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'DispatchList', 'field' => 'cDLCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在发货单(直营)['.$master['sn'].']无法弃审。'); + abort_error('存在发货单(直营)['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/Record01Hook.php b/app/Gdoo/Stock/Hooks/Record01Hook.php index 5e1359c0..be55c752 100644 --- a/app/Gdoo/Stock/Hooks/Record01Hook.php +++ b/app/Gdoo/Stock/Hooks/Record01Hook.php @@ -39,10 +39,10 @@ class Record01Hook ->get(['stock_record01_data.*', 'product.code as product_code']); // 同步数据到外部接口 $ret = plugin_sync_api('postRecord01', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -51,7 +51,7 @@ class Record01Hook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'Rdrecord01', 'field' => 'cCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在采购单['.$master['sn'].']无法弃审。'); + abort_error('存在采购单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/Record08Hook.php b/app/Gdoo/Stock/Hooks/Record08Hook.php index ad5384b6..c5018111 100644 --- a/app/Gdoo/Stock/Hooks/Record08Hook.php +++ b/app/Gdoo/Stock/Hooks/Record08Hook.php @@ -48,10 +48,10 @@ class Record08Hook ->get(['stock_record08_data.*', 'product.code as product_code']); // 同步数据到外部接口 $ret = plugin_sync_api('postRecord08', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -60,7 +60,7 @@ class Record08Hook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'Rdrecord08', 'field' => 'cCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在其他入库单['.$master['sn'].']无法弃审。'); + abort_error('存在其他入库单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/Record09Hook.php b/app/Gdoo/Stock/Hooks/Record09Hook.php index 98a7ebd7..d92b7547 100644 --- a/app/Gdoo/Stock/Hooks/Record09Hook.php +++ b/app/Gdoo/Stock/Hooks/Record09Hook.php @@ -78,10 +78,10 @@ class Record09Hook } // 同步数据到外部接口 $ret = plugin_sync_api($post_type, ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); } - abort_error($ret['msg']); + return $params; } public function onBeforeAbort($params) { @@ -92,12 +92,12 @@ class Record09Hook if ($master['type_id'] == 2) { $ret = plugin_sync_api('getVouchExist', ['table' => 'DispatchList', 'field' => 'cDLCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在样品申请单['.$master['sn'].']无法弃审。'); + abort_error('存在样品申请单['.$master['sn'].']无法弃审。'); } } else { $ret = plugin_sync_api('getVouchExist', ['table' => 'Rdrecord09', 'field' => 'cCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在其他出库单['.$master['sn'].']无法弃审。'); + abort_error('存在其他出库单['.$master['sn'].']无法弃审。'); } } return $params; diff --git a/app/Gdoo/Stock/Hooks/Record10Hook.php b/app/Gdoo/Stock/Hooks/Record10Hook.php index 4a5588e3..6b191e54 100644 --- a/app/Gdoo/Stock/Hooks/Record10Hook.php +++ b/app/Gdoo/Stock/Hooks/Record10Hook.php @@ -67,11 +67,10 @@ class Record10Hook ->get(['stock_record10_data.*', 'product.code as product_code']); // 同步数据到外部接口 $ret = plugin_sync_api('postRecord10', ['master' => $master, 'rows' => $rows]); - if ($ret['success'] == true) { - return $params; + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); } - - abort_error($ret['msg']); + return $params; } public function onBeforeAbort($params) { @@ -80,7 +79,7 @@ class Record10Hook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'Rdrecord10', 'field' => 'cCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在产成品入库单['.$master['sn'].']无法弃审。'); + abort_error('存在产成品入库单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Stock/Hooks/Record11Hook.php b/app/Gdoo/Stock/Hooks/Record11Hook.php index 705c589e..384a7f5e 100644 --- a/app/Gdoo/Stock/Hooks/Record11Hook.php +++ b/app/Gdoo/Stock/Hooks/Record11Hook.php @@ -48,11 +48,10 @@ class Record11Hook ->get(['stock_record11_data.*', 'product.code as product_code']); // 同步数据到外部接口 $ret = plugin_sync_api('postRecord11', ['master' => $master, 'rows' => $rows]); - - if ($ret['success'] == true) { - return $params; - } - abort_error($ret['msg']); + if ($ret['error_code'] > 0) { + abort_error($ret['msg']); + } + return $params; } public function onBeforeAbort($params) { @@ -61,7 +60,7 @@ class Record11Hook // 检查外部接口单据是否存在 $ret = plugin_sync_api('getVouchExist', ['table' => 'Rdrecord11', 'field' => 'cCode', 'value' => $master['sn']]); if ($ret['msg'] > 0) { - abort_error('用友存在原材料出库单['.$master['sn'].']无法弃审。'); + abort_error('存在原材料出库单['.$master['sn'].']无法弃审。'); } return $params; } diff --git a/app/Gdoo/Workflow/Controllers/BillController.php b/app/Gdoo/Workflow/Controllers/BillController.php new file mode 100644 index 00000000..3e29036a --- /dev/null +++ b/app/Gdoo/Workflow/Controllers/BillController.php @@ -0,0 +1,248 @@ + '流程', + 'simple_search_form' => 1, + 'table' => 'model_bill', + 'master_table' => 'model_bill', + 'create_btn' => 1, + ]; + + $search = search_form([ + 'advanced' => '', + ], [ + ['form_type' => 'text', 'name' => '名称', 'field' => 'model_bill.name', 'value' => '', 'options' => []], + ], 'model'); + + $header['cols'] = [ + 'checkbox' => [ + 'width' => 40, + 'suppressSizeToFit' => true, + 'cellClass' => 'text-center', + 'suppressMenu' => true, + 'sortable' => false, + 'editable' => false, + 'resizable' => false, + 'filter' => false, + 'checkboxSelection' => true, + 'headerCheckboxSelection' => true, + ], + 'seq_sn' => [ + 'width' => 60, + 'headerName' => '序号', + 'suppressSizeToFit' => true, + 'cellClass' => 'text-center', + 'suppressMenu' => true, + 'sortable' => false, + 'resizable' => false, + 'editable' => false, + 'type' => 'sn', + 'filter' => false, + ], + 'name' => [ + 'field' => 'name', + 'headerName' => '名称', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-left', + 'form_type' => 'text', + 'width' => 100, + ], + 'category_name' => [ + 'field' => 'category_name', + 'headerName' => '类别', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 120, + ], + 'code' => [ + 'field' => 'code', + 'headerName' => '编码', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 100, + ], + 'sn_rule' => [ + 'field' => 'sn_rule', + 'headerName' => '编号规则', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 80, + ], + 'updated_dt' => [ + 'field' => 'updated_dt', + 'headerName' => '操作时间', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 80, + ], + 'id' => [ + 'field' => 'id', + 'headerName' => 'ID', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 40, + ], + 'actions' => [ + 'headerName' => '', + 'cellRenderer' => 'actionCellRenderer', + 'options' => [[ + 'name' => '视图', + 'action' => 'view', + 'display' => 1, + ],[ + 'name' => '流程', + 'action' => 'flow', + 'display' => 1, + ],[ + 'name' => '权限', + 'action' => 'permission', + 'display' => 1, + ],[ + 'name' => '编辑', + 'action' => 'edit', + 'display' => $this->access['edit'], + ]], + 'width' => 160, + 'cellClass' => 'text-center', + 'suppressSizeToFit' => true, + 'suppressMenu' => true, + 'sortable' => false, + 'editable' => false, + 'resizable' => false, + 'filter' => false, + ], + ]; + + $header['buttons'] = [ + ['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']], + ['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1], + ]; + + $header['search_form'] = $search; + $query = $search['query']; + + if (Request::method() == 'POST') { + + $model = Bill::leftJoin('model_bill_category', 'model_bill_category.id', '=', 'model_bill.category_id') + ->selectRaw(' + model_bill.*, + model_bill.id as master_id, + model_bill_category.name as category_name + ') + ->where('model_bill.type', 1) + ->orderBy('model_bill.id', 'desc') + ->setBy($header); + + foreach ($search['where'] as $where) { + if ($where['active']) { + $model->search($where); + } + } + $rows = $model->paginate($query['limit'])->appends($query); + + $rows->transform(function($row) { + $row['updated_dt'] = format_datetime($row['updated_at']); + $row['sn_rule'] = $row['sn_prefix'].$row['sn_rule'].($row['sn_length'] > 0 ? $row['sn_length'] : ''); + return $row; + }); + $ret = $rows->toArray(); + $ret['header'] = Grid::getColumns($header); + return $ret; + } + + return $this->display([ + 'header' => $header, + ]); + } + + public function create() + { + if (Request::method() == 'POST') { + $gets = Request::all(); + $rules = [ + 'name' => 'required', + 'code' => 'required|unique:model_bill,code,'.$gets['id'], + ]; + $v = Validator::make($gets, $rules); + + if ($v->fails()) { + return $this->json($v->errors()->first()); + } + + // 流程设置为1 + $gets['audit_type'] = 1; + $gets['type'] = 1; + + $bill = Bill::findOrNew($gets['id']); + $bill->fill($gets); + $bill->save(); + return $this->json('恭喜你,操作成功。', true); + } + + $bill_id = Request::get('id'); + $bill = Bill::find($bill_id); + $categorys = BillCategory::get(); + return $this->render([ + 'bill' => $bill, + 'categorys' => $categorys, + 'bill_id' => $bill_id, + ], 'create'); + } + + public function edit() + { + return $this->create(); + } + + public function store() + { + return $this->edit(); + } + + public function delete() + { + $ids = (array)Request::get('id'); + if (count($ids) > 0) { + Bill::whereIn('id', $ids)->delete(); + Step::whereIn('bill_id', $ids)->delete(); + Run::whereIn('bill_id', $ids)->delete(); + RunLog::whereIn('bill_id', $ids)->delete(); + RunStep::whereIn('bill_id', $ids)->delete(); + Template::whereIn('bill_id', $ids)->delete(); + return $this->json('恭喜你,操作成功。', true); + } + } +} diff --git a/app/Gdoo/Workflow/Controllers/CategoryController.php b/app/Gdoo/Workflow/Controllers/CategoryController.php new file mode 100644 index 00000000..f6ee236e --- /dev/null +++ b/app/Gdoo/Workflow/Controllers/CategoryController.php @@ -0,0 +1,207 @@ + '流程类别', + 'simple_search_form' => 1, + 'table' => 'model_bill_category', + 'master_table' => 'model_bill_category', + 'create_btn' => 1, + ]; + + $search = search_form([ + 'advanced' => '', + ], [ + ['form_type' => 'text', 'name' => '名称', 'field' => 'model_bill_category.name', 'value' => '', 'options' => []], + ], 'model'); + + $header['cols'] = [ + 'checkbox' => [ + 'width' => 40, + 'suppressSizeToFit' => true, + 'cellClass' => 'text-center', + 'suppressMenu' => true, + 'sortable' => false, + 'editable' => false, + 'resizable' => false, + 'filter' => false, + 'checkboxSelection' => true, + 'headerCheckboxSelection' => true, + ], + 'seq_sn' => [ + 'width' => 60, + 'headerName' => '序号', + 'suppressSizeToFit' => true, + 'cellClass' => 'text-center', + 'suppressMenu' => true, + 'sortable' => false, + 'resizable' => false, + 'editable' => false, + 'type' => 'sn', + 'filter' => false, + ], + 'name' => [ + 'field' => 'name', + 'headerName' => '名称', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-left', + 'form_type' => 'text', + 'width' => 100, + ], + 'remark' => [ + 'field' => 'remark', + 'headerName' => '备注', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-left', + 'form_type' => 'text', + 'width' => 0, + ], + 'sort' => [ + 'field' => 'sort', + 'headerName' => '排序', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 60, + ], + 'updated_dt' => [ + 'field' => 'updated_dt', + 'headerName' => '操作时间', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 60, + ], + 'id' => [ + 'field' => 'id', + 'headerName' => 'ID', + 'sortable' => true, + 'suppressMenu' => true, + 'cellClass' => 'text-center', + 'form_type' => 'text', + 'width' => 40, + ], + 'actions' => [ + 'headerName' => '', + 'cellRenderer' => 'actionCellRenderer', + 'options' => [[ + 'name' => '编辑', + 'action' => 'edit', + 'display' => $this->access['edit'], + ]], + 'width' => 80, + 'cellClass' => 'text-center', + 'suppressSizeToFit' => true, + 'suppressMenu' => true, + 'sortable' => false, + 'editable' => false, + 'resizable' => false, + 'filter' => false, + ], + ]; + + $header['buttons'] = [ + ['name' => '删除', 'icon' => 'fa-remove', 'action' => 'delete', 'display' => $this->access['delete']], + ['name' => '导出', 'icon' => 'fa-share', 'action' => 'export', 'display' => 1], + ]; + + $header['search_form'] = $search; + $query = $search['query']; + + if (Request::method() == 'POST') { + + $model = BillCategory::orderBy('sort', 'desc') + ->selectRaw("*, id as master_id") + ->setBy($header); + + foreach ($search['where'] as $where) { + if ($where['active']) { + $model->search($where); + } + } + $rows = $model->paginate($query['limit'])->appends($query); + + $rows->transform(function($row) { + $row['updated_dt'] = format_datetime($row['updated_at']); + return $row; + }); + $ret = $rows->toArray(); + $ret['header'] = Grid::getColumns($header); + return $ret; + } + + return $this->display([ + 'header' => $header, + ]); + } + + public function create() + { + if (Request::method() == 'POST') { + $gets = Request::all(); + $rules = [ + 'name' => 'required', + ]; + $v = Validator::make($gets, $rules); + + if ($v->fails()) { + return $this->json($v->errors()->first()); + } + $category = BillCategory::findOrNew($gets['id']); + $category->fill($gets); + $category->save(); + return $this->json('恭喜你,操作成功。', true); + } + + $category_id = Request::get('id'); + $category = BillCategory::find($category_id); + return $this->render([ + 'category' => $category, + ], 'create'); + } + + public function edit() + { + return $this->create(); + } + + public function store() + { + return $this->edit(); + } + + public function delete() + { + if (Request::method() == 'POST') { + $id = Request::get('id'); + if (empty($id)) { + return $this->json('最少选择一行记录。'); + } + + $count = Bill::whereIn('category_id', $id)->count(); + if ($count > 0) { + return $this->json('此类别存在工作数据,无法删除。'); + } + + BillCategory::whereIn('id', $id)->delete(); + return $this->json('恭喜你,操作成功。', true); + } + } +} diff --git a/app/Gdoo/Workflow/Controllers/TemplateController.php b/app/Gdoo/Workflow/Controllers/TemplateController.php new file mode 100644 index 00000000..3a7340b9 --- /dev/null +++ b/app/Gdoo/Workflow/Controllers/TemplateController.php @@ -0,0 +1,262 @@ +update(['sort' => $i]); + $i ++; + } + return $this->json('恭喜你,操作成功。', true); + } + + $bill_id = Request::get('bill_id'); + $rows = Template::where('bill_id', $bill_id) + ->orderBy('sort', 'asc') + ->get(); + + $models = DB::table('model')->where('parent_id', 0)->orderBy('lft', 'asc')->get(); + $model = Model::find($bill_id); + + return $this->display([ + 'rows' => $rows, + 'bill_id' => $bill_id, + 'models' => $models, + 'model' => $model, + ]); + } + + public function create() + { + $gets = Request::all(); + + if (Request::method() == 'POST') { + $rules = [ + 'name' => 'required', + ]; + $v = Validator::make($gets, $rules); + + if ($v->fails()) { + return $this->back()->withErrors($v)->withInput(); + } + + $gets['type'] = join(',', (array)$gets['type']); + $gets['client'] = join(',', (array)$gets['client']); + $gets['tpl'] = json_encode($gets['columns'], JSON_UNESCAPED_UNICODE); + unset($gets['columns']); + + $model = Template::findOrNew($gets['id']); + $model->fill($gets); + $model->save(); + return $this->json('恭喜你,操作成功。', url('create', ['bill_id' => $gets['bill_id'], 'id' => $gets['id']])); + } + + $bill_id = Request::get('bill_id'); + $bill = DB::table('model_bill')->find($bill_id); + + // 主模型 + $master_model = null; + + // 获取全部模型 + $models = ModelService::getModelAllFields($bill['model_id']); + $lists = []; + foreach ($models as $model) { + if ($model['parent_id'] == 0) { + $master_model = $model; + } + foreach ($model['fields'] as $field) { + $field['table'] = $model['table']; + $lists[$field['id']] = $field; + } + } + + $template = DB::table('model_template')->find($gets['id']); + $tpl = $template['tpl']; + $views = json_decode($tpl, true); + + foreach ((array)$views as $i => $view) { + $v1 = $view['fields']; + foreach ($v1 as $j => $sublist) { + $_fields = $sublist['fields']; + if ($_fields) { + foreach ($_fields as $k => $_field) { + if (empty($_field['table'])) { + $list = $lists[$_field['id']]; + $_field['table'] = $list['table']; + unset($_field['id']); + } else { + $list = $models[$_field['table']]['fields'][$_field['field']]; + } + if ($list) { + $_field['name'] = $list['name']; + } + $_fields[$k] = $_field; + + unset($models[$_field['table']]['fields'][$_field['field']]); + } + $v1[$j]['fields'] = $_fields; + } else { + if (empty($sublist['table'])) { + $list = $lists[$sublist['id']]; + $sublist['table'] = $list['table']; + unset($sublist['id']); + } else { + $sublist['table'] = $master_model['table']; + $list = $models[$master_model['table']]['fields'][$sublist['field']]; + } + if ($list) { + $sublist['name'] = $list['name']; + $sublist['field'] = $list['field']; + } + $v1[$j] = $sublist; + unset($models[$sublist['table']]['fields'][$sublist['field']]); + } + } + $views[$i]['fields'] = $v1; + } + + $_types = DB::table('model')->orderBy('lft')->get()->keyBy('id'); + $types = []; + foreach ($_types as $type) { + if ($type['parent_id']) { + $name = $_types[$type['parent_id']]['name'].'->'.$type['name']; + } else { + $name = $type['name']; + } + $types[] = ['table' => $type['table'], 'name' => $name]; + } + + $template['tpl'] = json_encode($views, JSON_UNESCAPED_UNICODE); + $template['type'] = explode(',', $template['type']); + $template['client'] = explode(',', $template['client']); + + return $this->display([ + 'template' => $template, + 'model' => $model, + 'bill_id' => $bill_id, + 'models' => $models, + 'types' => $types, + ]); + } + + public function create2() + { + $gets = Request::all(); + + if (Request::method() == 'POST') { + $rules = [ + 'name' => 'required', + ]; + $v = Validator::make($gets, $rules); + + if ($v->fails()) { + return $this->back()->withErrors($v)->withInput(); + } + + $gets['type'] = join(',', (array)$gets['type']); + $gets['client'] = join(',', (array)$gets['client']); + $gets['tpl'] = json_encode($gets['columns'], JSON_UNESCAPED_UNICODE); + unset($gets['columns']); + + $model = Template::findOrNew($gets['id']); + $model->fill($gets); + $model->save(); + return $this->json('恭喜你,操作成功。', true); + } + + $bill_id = Request::get('bill_id'); + $bill = DB::table('model_bill')->find($bill_id); + $template = DB::table('model_template')->find($gets['id']); + + $leftFields = []; + $rightFields = []; + $views = (array)json_decode($template['tpl'], true); + + // 获取所有模型 + $models = array_by(ModelService::getModels($bill['model_id']), 'id'); + foreach ($views as $view) { + if (empty($view['table'])) { + $view['table'] = $models[$view['model_id']]['table']; + } + unset($view['model_id']); + unset($view['id']); + $rightFields[$view['table'].'.'.$view['field']] = $view; + } + + $model = DB::table('model')->find($bill['model_id']); + $_fields = DB::table('model_field')->where('model_id', $model['id'])->orderBy('sort', 'asc')->get(); + foreach ($_fields as $field) { + $field_key = $model['table'].'.'.$field['field']; + $rightField = $rightFields[$field_key]; + if ($rightField) { + $rightField['name'] = $field['name']; + $rightField['table'] = $model['table']; + $rightField['field'] = $field['field']; + $rightFields[$field_key] = $rightField; + continue; + } + $leftFields[] = ['table' => $model['table'], 'field' => $field['field'], 'name' => $field['name']]; + } + + // 子模型 + $childrens = DB::table('model')->where('parent_id', $model['id'])->get(); + foreach ($childrens as $children) { + $_fields = DB::table('model_field')->where('model_id', $children['id'])->orderBy('sort', 'asc')->get(); + foreach ($_fields as $field) { + $field_key = $children['table'].'.'.$field['field']; + $rightField = $rightFields[$field_key]; + if ($rightField) { + $rightField['table'] = $children['table']; + $rightField['field'] = $field['field']; + $rightField['name'] = '['.$children['name'].']'.$field['name']; + $rightFields[$field_key] = $rightField; + continue; + } + $leftFields[] = ['table' => $children['table'], 'field' => $field['field'], 'name' => '['.$children['name'].']'.$field['name']]; + } + } + + $rightFields = array_values($rightFields); + + $models = DB::table('model')->where('parent_id', 0)->orderBy('lft', 'asc')->get(); + $template['leftFields'] = $leftFields; + $template['rightFields'] = $rightFields; + unset($template['tpl']); + $template['type'] = explode(',', $template['type']); + $template['client'] = explode(',', $template['client']); + + return $this->display([ + 'template' => $template, + 'model' => $model, + 'bill_id' => $bill_id, + 'models' => $models, + ]); + } + + public function delete() + { + $id = Request::get('id'); + if ($id > 0) { + DB::table('model_template')->where('id', $id)->delete(); + return $this->success('index', '恭喜你,操作成功。'); + } + } +} diff --git a/app/Gdoo/Workflow/Controllers/WidgetController.php b/app/Gdoo/Workflow/Controllers/WidgetController.php new file mode 100644 index 00000000..3003c801 --- /dev/null +++ b/app/Gdoo/Workflow/Controllers/WidgetController.php @@ -0,0 +1,25 @@ +render(); + } +} diff --git a/app/Gdoo/Workflow/Models/BillCategory.php b/app/Gdoo/Workflow/Models/BillCategory.php new file mode 100644 index 00000000..ae42ab9b --- /dev/null +++ b/app/Gdoo/Workflow/Models/BillCategory.php @@ -0,0 +1,8 @@ + "工作流程", + "version" => "1.0", + "description" => "流程管理。", + 'widgets' => [ + 'widget_workflow_todo' => [ + 'name' => '待办流程', + 'type' => 1, + 'url' => 'workflow/widget/index', + 'more_url' => 'workflow/workflow/index', + ], + ], + 'badges' => [ + 'workflow_workflow_index' => 'Gdoo\Workflow\Services\WorkflowService::getBadge', + ], + "controllers" => [ + "workflow" => [ + "name" => "流程列表", + "actions" => [ + "index" => [ + "name" => "列表" + ], + "view" => [ + "name" => "查看" + ], + "list" => [ + "name" => "发起" + ], + "monitor" => [ + "name" => "监控" + ], + "trash" => [ + "name" => "回收站", + ], + "query" => [ + "name" => "统计", + ], + "add" => [ + "name" => "新建" + ], + "edit" => [ + "name" => "办理" + ], + "delete" => [ + "name" => "删除" + ], + "destroy" => [ + "name" => "销毁" + ] + ] + ], + "bill" => [ + "name" => "流程管理", + "actions" => [ + "index" => [ + "name" => "列表" + ], + "show" => [ + "name" => "查看" + ], + "create" => [ + "name" => "新建" + ], + "edit" => [ + "name" => "办理" + ], + "delete" => [ + "name" => "删除" + ], + ] + ], + "category" => [ + "name" => "流程类别", + "actions" => [ + "index" => [ + "name" => "列表" + ], + "create" => [ + "name" => "新建" + ], + "edit" => [ + "name" => "办理" + ], + "delete" => [ + "name" => "删除" + ] + ] + ], + "template" => [ + "name" => "视图", + "actions" => [ + "index" => [ + "name" => "列表" + ], + "create" => [ + "name" => "新建" + ], + "edit" => [ + "name" => "编辑" + ], + "delete" => [ + "name" => "删除" + ] + ] + ], + ] +]; diff --git a/app/Gdoo/Workflow/views/bill/create.blade.php b/app/Gdoo/Workflow/views/bill/create.blade.php new file mode 100644 index 00000000..dc88ac02 --- /dev/null +++ b/app/Gdoo/Workflow/views/bill/create.blade.php @@ -0,0 +1,49 @@ +
\ No newline at end of file diff --git a/app/Gdoo/Workflow/views/bill/index.blade.php b/app/Gdoo/Workflow/views/bill/index.blade.php new file mode 100644 index 00000000..362d978c --- /dev/null +++ b/app/Gdoo/Workflow/views/bill/index.blade.php @@ -0,0 +1,81 @@ +