From 25b79d6f63b10c954fba9813f4200b2914e4b33e Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Mon, 9 Feb 2026 10:40:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E5=93=81=E9=A2=86=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/InvRequisitionService.php | 14 +- .../InvRequisitionItemReturnController.php | 138 +++++++++++++++++- .../InvRequisitionItemReturnService.php | 11 +- app/common/service/InvRequisitionService.php | 1 + .../controller/InvRequisitionController.php | 25 +++- .../InvRequisitionItemReturnController.php | 1 + config/route.php | 10 +- 7 files changed, 183 insertions(+), 17 deletions(-) diff --git a/app/admin/service/InvRequisitionService.php b/app/admin/service/InvRequisitionService.php index 20bbe1d..a5c4f1d 100644 --- a/app/admin/service/InvRequisitionService.php +++ b/app/admin/service/InvRequisitionService.php @@ -48,8 +48,20 @@ class InvRequisitionService if(isset($p['status']) && $p['status']){ $config['where']['status'] = $p['status']; } - if(isset($p['applicant_id']) && $p['applicant_id']){ + if (isset($p['applicant_id']) && $p['applicant_id'] == 'self') { //自己的领用申请 + $config['where']['applicant_id'] = $request->user->uid; + } elseif (isset($p['applicant_id']) && $p['applicant_id']) { //指定人员的申请 $config['where']['applicant_id'] = $p['applicant_id']; + } else { //审批人对应的记录 + $config['where']['approval.approver_id'] = $request->user->uid; + $config['where']['approval.action'] = 0; + } + if(isset($p['phase']) && $p['phase'] == 'approve'){//借用审批中 + $config['where']['status'] = ['in',[10,11,13]]; + }elseif(isset($p['phase']) && $p['phase'] == 'repaid'){//已全部归还 + $config['where']['status'] = 17; + }elseif(isset($p['phase']) && $p['phase'] == 'unreturned'){ //未归还 + $config['where']['status'] = ['in',[12,14,15,16,18]]; } $config['order']['id'] = 'desc'; break; diff --git a/app/common/controller/InvRequisitionItemReturnController.php b/app/common/controller/InvRequisitionItemReturnController.php index 7623719..4be066d 100644 --- a/app/common/controller/InvRequisitionItemReturnController.php +++ b/app/common/controller/InvRequisitionItemReturnController.php @@ -2,8 +2,14 @@ namespace app\common\controller; use app\common\controller\BaseController; +use app\common\model\InvItem; +use app\common\model\InvRequisitionItem; +use app\common\model\InvRequisitionItemReturn; +use app\common\model\InvRequisitionItemReturnAttachment; +use app\common\service\OssService; use app\common\traits\crud\CrudControllerTrait; use app\common\service\InvRequisitionItemReturnService; +use support\Request; class InvRequisitionItemReturnController extends BaseController { @@ -16,18 +22,134 @@ class InvRequisitionItemReturnController extends BaseController $this->service = new InvRequisitionItemReturnService(); } + /** + * 获取列表 + * + * @param Request $request 请求对象 + * @return mixed 返回分页数据及总数 + */ + public function index(Request $request) + { + try { + //$request->setGet('$request'); + $raw = $this->service->serviceList($request); + $data = $this->transformData($raw, method_exists($this, 'indexFormat') + ? [$this, 'indexFormat'] + : null); + return $this->success($data); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } + /** * 列表页数据格式化 * * @param array $data * @return array */ - // protected function indexFormat($data) - // { - // if (isset($data['created_at'])) - // $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); - // if (isset($data['updated_at'])) - // $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); - // return $data; - // } + protected function indexFormat($data) + { + if(isset($data['id'])){ + $data['return_item'] = InvRequisitionItemReturn::where('return_id', $data['id'])->get(); + foreach ($data['return_item'] as $key => $value) { + $data['return_item'][$key]['item'] = InvItem::where('id', $value['item_id'])->get(); + } + } + if (isset($data['return_at'])) + $data['return_at'] = date('Y-m-d H:i:s', $data['return_at']); + if (isset($data['created_at'])) + $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); + if (isset($data['updated_at'])) + $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); + return $data; + } + + /** + * 获取详情 + * + * @param Request $request 请求对象 + * @param int|string $id 资源 ID + * @return mixed 返回资源详情数据 + */ + public function show(Request $request) + { + try { + $raw = $this->service->serviceShow($request); + $data = $this->transformData($raw, method_exists($this, 'showFormat') + ? [$this, 'showFormat'] + : null); + return $this->success($data); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } + + /** + * 列表页数据格式化 + * + * @param array $data + * @return array + */ + protected function showFormat($data) + { + foreach ($data['item_return'] as $key => $item){ + $data['item_return'][$key]['requisition_item'] = InvRequisitionItem::where('id', $item['requisition_item_id'])->first(); + } + if (isset($data['return_at'])) + $data['return_at'] = date('Y-m-d H:i:s', $data['return_at']); + if (isset($data['id'])){ + $data['return_attachment'] = InvRequisitionItemReturnAttachment::where('return_id', $data['id'])->get(); + $ossservice = new OssService(); + foreach ($data['return_attachment'] as $item){ + $item['file_path_pull'] = $ossservice->generatePrivateUrl($item['file_path']); + + } + } + /*if (isset($data['created_at'])) + $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); + if (isset($data['updated_at'])) + $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']);*/ + return $data; + } + + + /** + * 更新 + * + * @param Request $request 请求对象 + * @return mixed 返回更新成功的数据或信息 + */ + public function update(Request $request) + { + try { + $data = $this->validate($this->service->getValidator(), $request->post(), 'update'); + $res = $this->service->serviceUpdate($request, $data); + return $this->success([], '更新成功'); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } + + + /** + * 物品归还确认 + * + * @param Request $request + * @return mixed + */ + public function returnConfirm(Request $request) + { + try { + // 验证申请数据 + $data = $this->validate($this->service->getValidator(), $request->post(), 'returnConfirm'); + + // 处理申请逻辑 + $result = $this->service->serviceReturnConfirm($request, $data, 'returnConfirm'); + + return $this->success($result, '申请提交成功'); + } catch (\Throwable $e) { + return $this->error($e->getMessage()); + } + } } \ No newline at end of file diff --git a/app/common/service/InvRequisitionItemReturnService.php b/app/common/service/InvRequisitionItemReturnService.php index 05994d3..2aa3766 100644 --- a/app/common/service/InvRequisitionItemReturnService.php +++ b/app/common/service/InvRequisitionItemReturnService.php @@ -429,6 +429,8 @@ class InvRequisitionItemReturnService // 4. 更新归还记录(状态 + 审核人 + 备注等) $updateResult = $this->logicUpdateBy($config, $data); + $resultItem = $this->logicShow($config); + InvRequisitionReturn::where('id',$resultItem['status'])->update(['status' => $data['status']]); if ($updateResult === 0) { throw new BusinessException('更新归还申请失败,可能记录不存在或已被处理'); } @@ -543,6 +545,11 @@ class InvRequisitionItemReturnService if(isset($p['status'])){ $config['where']['status'] = $p['status']; } + if(isset($p['handler_id']) && $p['handler_id']=='self'){ + $config['where']['applicant_id'] = $request->user->uid; + }else{ + $config['where']['handler_id'] = $request->user->uid; + } $config['order']['id'] = 'desc'; break; case 'show': @@ -572,8 +579,8 @@ class InvRequisitionItemReturnService public function serviceShow(Request $request, string $scene = 'show') { $id = $request->get('id'); - $return = InvRequisitionReturn::where('id', $id)->first()->toArray(); - $return['item_return'] = InvRequisitionItemReturn::where('return_id', $return['id'])->orderBy('id', 'desc')->get()->toArray(); + $return = InvRequisitionReturn::where('id', $id)->first(); + $return['item_return'] = InvRequisitionItemReturn::where('return_id', $return['id'])->orderBy('id', 'desc')->get(); return $return; } diff --git a/app/common/service/InvRequisitionService.php b/app/common/service/InvRequisitionService.php index 7b58814..a5031c1 100644 --- a/app/common/service/InvRequisitionService.php +++ b/app/common/service/InvRequisitionService.php @@ -61,6 +61,7 @@ class InvRequisitionService $config['where']['applicant_id'] = $p['applicant_id']; } else { //审批人对应的记录 $config['where']['approval.approver_id'] = $request->user->uid; + $config['where']['approval.action'] = 0; } if(isset($p['phase']) && $p['phase'] == 'approve'){//借用审批中 $config['where']['status'] = ['in',[10,11,13]]; diff --git a/app/mobile/controller/InvRequisitionController.php b/app/mobile/controller/InvRequisitionController.php index bb2f67c..3a59c75 100644 --- a/app/mobile/controller/InvRequisitionController.php +++ b/app/mobile/controller/InvRequisitionController.php @@ -54,22 +54,37 @@ class InvRequisitionController extends BaseController { try { $raw = $this->service->serviceList($request); - $data = $this->transformData($raw, method_exists($this, 'indexFormat') - ? [$this, 'indexFormat'] - : null); + $uid = $request->user->uid; + $data = $this->formatindex($raw,$uid); +// $data = $this->transformData($raw, method_exists($this, 'indexFormat') +// ? [$this, 'indexFormat'] +// : null); return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage()); } } + public function formatindex($p,$uid){ + $records = $p->getCollection() + ->map(fn($item) => $this->indexFormat($item, $uid)) + ->toArray(); + + return [ + 'records' => $records, + 'total' => $p->total(), + 'current' => $p->currentPage(), + 'size' => $p->perPage(), + ]; + } + /** * 列表页数据格式化 * * @param array $data * @return array */ - protected function indexFormat($data) + protected function indexFormat($data, $uid) { if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); @@ -80,6 +95,8 @@ class InvRequisitionController extends BaseController foreach ($data['item'] as $key => $item){ $corpId = InvItem::where('id', $item->item_id)->value('company_id'); $item['company_name'] = Corp::where('id', $corpId)->value('name'); + $aprove = InvRequisitionApprove::where('requisition_id', $data['id'])->where('approver_id', $uid)->orderBy('id','desc')->first(); + $item['approval_action'] = $aprove?$aprove['action']:3; //查询人审核状态:0待审核 1通过 2驳回 3非审核人 } } return $data; diff --git a/app/mobile/controller/InvRequisitionItemReturnController.php b/app/mobile/controller/InvRequisitionItemReturnController.php index 13160ad..8426acd 100644 --- a/app/mobile/controller/InvRequisitionItemReturnController.php +++ b/app/mobile/controller/InvRequisitionItemReturnController.php @@ -32,6 +32,7 @@ class InvRequisitionItemReturnController extends BaseController public function index(Request $request) { try { + //$request->setGet('$request'); $raw = $this->service->serviceList($request); $data = $this->transformData($raw, method_exists($this, 'indexFormat') ? [$this, 'indexFormat'] diff --git a/config/route.php b/config/route.php index 1c8cfc6..50d4480 100644 --- a/config/route.php +++ b/config/route.php @@ -520,9 +520,15 @@ Route::group('/admin', function () { Route::any('/show', [app\admin\controller\InvRequisitionController::class, 'show']); Route::any('/approve', [app\admin\controller\InvRequisitionController::class, 'approve']); }); + // 物品归还 - Route::any('/requisition/return', [app\admin\controller\InvRequisitionReturnController::class, 'store']); -// Route::any('/requisition/return', [app\admin\controller\InvRequisitionReturnController::class, 'returnConfirm']); + Route::group('/requisition/return', function () { + Route::any('/store', [app\common\controller\InvRequisitionItemReturnController::class, 'store']); + Route::any('/update', [app\common\controller\InvRequisitionItemReturnController::class, 'update']); + Route::any('/list', [app\common\controller\InvRequisitionItemReturnController::class, 'index']); + Route::any('/show', [app\common\controller\InvRequisitionItemReturnController::class, 'show']); + Route::any('/confirm', [app\common\controller\InvRequisitionItemReturnController::class, 'returnConfirm']); + }); }); });