diff --git a/app/admin/controller/ApprovalRecordsController.php b/app/admin/controller/ApprovalRecordsController.php index 2506845..c7a6b30 100644 --- a/app/admin/controller/ApprovalRecordsController.php +++ b/app/admin/controller/ApprovalRecordsController.php @@ -112,7 +112,7 @@ class ApprovalRecordsController extends BaseController 'instance_id' => $record['instance_id'], 'biz_id' => $record['instance']['biz_id'], - 'biz_desc' => '备货单号【'.$record['instance']['bizInfo']['order_no'].'】', + 'biz_desc' => '业务单号【'.$record['instance']['bizInfo']['order_no'].'】', 'biz_type' => $record['instance']['flow_type'], 'initiator_name' => $record['instance']['initiator']['name'], diff --git a/app/common/controller/PurchaseOrdersController.php b/app/common/controller/PurchaseOrdersController.php index 5c87198..3e550ac 100644 --- a/app/common/controller/PurchaseOrdersController.php +++ b/app/common/controller/PurchaseOrdersController.php @@ -36,7 +36,7 @@ class PurchaseOrdersController extends BaseController } $result = [ 'id' => $record['id'], - 'po_no' => $record['po_no'], + 'order_no' => $record['order_no'], 'pi_no' => $record['pi_no'], 'buyer_id' => $record['buyer_id'], 'buyer_name' => $record['buyer_name'], @@ -44,8 +44,8 @@ class PurchaseOrdersController extends BaseController 'contract_file_url' => $contractFileUrl, 'status' => $record['status'], 'remark' => $record['remark'], - 'created_at' => date('Y-m-d H:i:s', strtotime($record['created_at'])), - 'updated_at' => date('Y-m-d H:i:s', strtotime($record['updated_at'])), + 'created_at' => date('Y-m-d H:i:s', $record['created_at']), + 'updated_at' => date('Y-m-d H:i:s', $record['updated_at']), ]; $record = $result; } @@ -71,7 +71,7 @@ class PurchaseOrdersController extends BaseController } $result = [ 'id' => $data['id'], - 'po_no' => $data['po_no'], + 'order_no' => $data['order_no'], 'pi_no' => $data['pi_no'], 'buyer_id' => $data['buyer_id'], 'buyer_name' => $data['buyer_name'], @@ -117,4 +117,20 @@ class PurchaseOrdersController extends BaseController return $this->error($e->getMessage()); } } + + /** + * 重提 + * + * @param Request $request + * @return mixed + */ + public function resubmit(Request $request) + { + try { + $raw = $this->service->serviceResubmit($request, $request->all()); + return $raw === true ? $this->success('提交成功') : $this->error('提交失败'); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/common/model/ApprovalInstances.php b/app/common/model/ApprovalInstances.php index 51188b5..882fa8e 100644 --- a/app/common/model/ApprovalInstances.php +++ b/app/common/model/ApprovalInstances.php @@ -73,7 +73,8 @@ class ApprovalInstances extends Model // ====== ====== ====== 映射业务表 ====== ====== ====== protected const BIZ_CLASS = [ - 'stock_orders' => \app\common\model\StockOrders::class + 'stock_orders' => \app\common\model\StockOrders::class, + 'purchase_orders' => \app\common\model\PurchaseOrders::class, ]; public function getBizTypeAttribute($value) diff --git a/app/common/model/PurchaseOrders.php b/app/common/model/PurchaseOrders.php index eae4990..c03619e 100644 --- a/app/common/model/PurchaseOrders.php +++ b/app/common/model/PurchaseOrders.php @@ -44,7 +44,7 @@ class PurchaseOrders extends Model /** * 允许自动填充模型字段 */ - protected $fillable = ['id', 'po_no', 'pi_no', 'buyer_id', 'buyer_name', 'contract_file', 'status', 'remark', 'created_at', 'updated_at']; + protected $fillable = ['id', 'order_no', 'pi_no', 'buyer_id', 'buyer_name', 'contract_file', 'status', 'remark', 'created_at', 'updated_at']; /** * 不允许自动填充模型字段 diff --git a/app/common/service/ApprovalRecordsService.php b/app/common/service/ApprovalRecordsService.php index b2af9a7..8fc6aff 100644 --- a/app/common/service/ApprovalRecordsService.php +++ b/app/common/service/ApprovalRecordsService.php @@ -57,7 +57,7 @@ class ApprovalRecordsService if ($p['scene'] === 'todo') { // if (!in_array(1, $request->user->role_ids)) { - $config['where']['approver_id'] = $request->user->uid; + // $config['where']['approver_id'] = $request->user->uid; // } $config['where']['status'] = 'pending'; $config['where']['instance.status'] = 'processing'; diff --git a/app/common/service/PurchaseOrdersService.php b/app/common/service/PurchaseOrdersService.php index fe624e4..5ed8f6f 100644 --- a/app/common/service/PurchaseOrdersService.php +++ b/app/common/service/PurchaseOrdersService.php @@ -9,6 +9,7 @@ use app\common\logic\PurchaseOrdersLogic; use app\common\model\PurchaseOrderItems; use app\common\model\User; use support\Db; +use support\exception\BusinessException; use support\Request; class PurchaseOrdersService @@ -70,7 +71,7 @@ class PurchaseOrdersService public function beforeServiceStore(array $data, Request $request) { - $data['po_no'] = generateStockNo('CG'); + $data['order_no'] = generateStockNo('CG'); $data['buyer_id'] = $request->user->uid; $data['buyer_name'] = User::where('id', $request->user->uid)->value('name'); return $data; @@ -165,6 +166,7 @@ class PurchaseOrdersService case 'index': $config['order']['id'] = 'desc'; break; + case 'show': case 'update': $config['where']['id'] = $p['id'] ?? 0; break; @@ -190,7 +192,7 @@ class PurchaseOrdersService // 使用事务确保数据一致性 return Db::transaction(function () use ($request) { // 构建查询条件 - $config = $this->buildQueryConfig($request, 'update'); + $config = $this->buildQueryConfig($request, 'show'); // 软删除采购单明细 $order = $this->logicShow($config); @@ -201,9 +203,46 @@ class PurchaseOrdersService } // 软删除采购单主表 - $order->delete(); + $res = $order->delete(); - return $this->postProcess('Destroy', $order); + return $this->postProcess('Destroy', $res); }); } + + /** + * 创建采购单成功后处理 + */ + protected function afterServiceStore($res) + { + if ($res->status == 1) { + $this->startApproval($res, ['resubmitted'=>0]); + } + return $res; + } + + public function startApproval($item, $formData) + { + $appro = new \app\common\utils\approval\service\ApprovalFlowService(); + $appro->start('purchase_orders', 'purchase_orders', $item->id, ['resubmitted'=>0], $item->buyer_id); + } + + + public function serviceResubmit(Request $request, array $data = []) + { + $info = $this->logicShow($this->buildQueryConfig($request, 'show')); + if ($info->status == 3) { + $instance = \app\common\model\ApprovalInstances::where('biz_id', $info->id)->where('flow_type', 'purchase_orders')->first(); + if ( $instance === null) { + new BusinessException('未找到审批实例'); + } + // 审批服务 + $appro = new \app\common\utils\approval\service\ApprovalFlowService(); + // 重新提交 + $appro->resubmit($instance->id, $instance->initiator_id, ['resubmitted'=>1], $data['remark']); + // 添加到讨论 + $appro->postDiscussion($instance->id, $instance->initiator_id, $data['remark'], true, [], 'name'); + return true; + } + return false; + } } \ No newline at end of file diff --git a/app/common/utils/approval/service/ApprovalFlowService.php b/app/common/utils/approval/service/ApprovalFlowService.php index 200580d..e9832ac 100644 --- a/app/common/utils/approval/service/ApprovalFlowService.php +++ b/app/common/utils/approval/service/ApprovalFlowService.php @@ -594,8 +594,6 @@ class ApprovalFlowService // 业务标题/内容 $approvalType = array_flip(\app\common\service\SysDictService::pluckKeyValueByCode('approval_type')); - // $title = $prefix.'审批通知'; - // $content = "{$prefix}你有一条审批 {$text}:类型 {$instance->flow_type},业务ID {$instance->biz_id}"; switch ($instance->flow_type) { case 'stock_orders': @@ -610,6 +608,15 @@ class ApprovalFlowService case 'stock_orders_nullify': // 备货单作废 break; + case 'purchase_orders': + // 采购单 + $purchaseOrder = \app\common\model\PurchaseOrders::find($instance->biz_id); + if ($purchaseOrder) { + $title = $prefix."采购单:{$purchaseOrder->order_no}"; + $flowTxt = $approvalType[$instance->flow_type] ?? $instance->flow_type; + $content = "{$prefix}你有一条审批 {$text}:类型 {$flowTxt},业务单号 {$purchaseOrder->order_no}"; + } + break; case 'purchase_order': // 采购单 break; diff --git a/config/route.php b/config/route.php index e11f354..6f42d42 100644 --- a/config/route.php +++ b/config/route.php @@ -360,6 +360,7 @@ Route::group('/admin', function () { Route::any('/store', [app\common\controller\PurchaseOrdersController::class, 'store']); Route::any('/update', [app\common\controller\PurchaseOrdersController::class, 'update']); Route::any('/destroy', [app\common\controller\PurchaseOrdersController::class, 'destroy']); + Route::any('/resubmit', [app\common\controller\PurchaseOrdersController::class, 'resubmit']); }); });