物品归还

This commit is contained in:
2026-02-04 09:28:54 +08:00
parent 6496a40679
commit a16429ff3a
8 changed files with 192 additions and 17 deletions
@@ -0,0 +1,45 @@
<?php
namespace app\admin\controller;
use app\common\controller\BaseController;
use app\common\traits\crud\CrudControllerTrait;
use app\common\service\InvRequisitionReturnService;
use support\Request;
class InvRequisitionReturnController extends BaseController
{
use CrudControllerTrait;
protected $service;
public function __construct()
{
$this->service = new InvRequisitionReturnService();
}
// /**
// * 列表页数据格式化
// *
// * @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;
// }
public function returnConfirm(Request $request){
try {
// 处理申请逻辑
$result = $this->service->serviceReturnConfirm($request);
return $this->success($result, '申请提交成功');
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
}
@@ -178,6 +178,9 @@ class InvRequisitionItemReturnService
$created = $this->logicCreate($item); $created = $this->logicCreate($item);
} }
$this->processRequisitionItemReturnAttachment($res, $attachment); $this->processRequisitionItemReturnAttachment($res, $attachment);
InvRequisition::where('id',$request->post('requisition_id'))->update(
['status' => 14] //审批状态:10默认、11审批中、12已审批(待归还)、13拒绝、14申请归还、15归还审核中、16部分归还、17已全部归还、18已拒绝
);
$this->postProcess('Store', $created); $this->postProcess('Store', $created);
return $res; return $res;
}); });
@@ -406,6 +409,7 @@ class InvRequisitionItemReturnService
// 全部非耗材都已归还 // 全部非耗材都已归还
$affected = InvRequisition::where('id', $requisitionId)->update([ $affected = InvRequisition::where('id', $requisitionId)->update([
'is_returned' => 1, 'is_returned' => 1,
'status' => 17,
'updated_at' => time(), 'updated_at' => time(),
]); ]);
@@ -413,6 +417,12 @@ class InvRequisitionItemReturnService
if ($affected === 0) { if ($affected === 0) {
throw new BusinessException('更新领用单状态失败,可能记录不存在'); throw new BusinessException('更新领用单状态失败,可能记录不存在');
} }
}else{
// 非耗材未全部都已归还
$affected = InvRequisition::where('id', $requisitionId)->update([
'status' => 16,
'updated_at' => time(),
]);
} }
// 7. 返回处理结果(保持你原来的 postProcess 习惯) // 7. 返回处理结果(保持你原来的 postProcess 习惯)
@@ -444,13 +454,13 @@ class InvRequisitionItemReturnService
$config['where']['id'] = $p['requisition_item_return_id']; $config['where']['id'] = $p['requisition_item_return_id'];
break; break;
case 'index': case 'index':
$config['where']['status'] = 1; if(isset($p['status'])){
$config['order']['sort'] = 'desc'; $config['where']['status'] = $p['status'];
}
$config['order']['id'] = 'desc'; $config['order']['id'] = 'desc';
break; break;
case 'show': case 'show':
$config['where']['id'] = $p['id']; $config['where']['id'] = $p['id'];
$config['where']['status'] = 1;
break; break;
case 'store': case 'store':
break; break;
@@ -5,6 +5,8 @@ namespace app\common\service;
use app\common\validate\InvRequisitionReturnValidate; use app\common\validate\InvRequisitionReturnValidate;
use app\common\traits\crud\CrudServiceTrait; use app\common\traits\crud\CrudServiceTrait;
use app\common\model\InvRequisitionReturn; use app\common\model\InvRequisitionReturn;
use support\exception\BusinessException;
use support\Request;
class InvRequisitionReturnService class InvRequisitionReturnService
{ {
@@ -28,4 +30,59 @@ class InvRequisitionReturnService
{ {
return new $this->validator; return new $this->validator;
} }
public function serviceReturnConfirm(Request$request)
{
$status = $request->post('status');
if(in_array($status,[1,2])){
throw new BusinessException("状态不正确");
}
$requisitionReturn = InvRequisitionReturn::where(['id' => $request['id']])->first();
if (!$requisitionReturn && $requisitionReturn->handler_id == $request->user->uid) {
$requisitionReturn->status = $status;
return $requisitionReturn->save();
}else{
throw new BusinessException("审核示例不正确或非物品管理员");
}
}
/**
* 构建查询配置
*
* @param Request $request
* @param string $scene
* @return array
*/
protected function buildQueryConfig(Request $request, string $scene = 'default'): array
{
$p = $request->all();
$config = [];
$config['model'] = $this->modelClass;
switch ($scene) {
case 'returnConfirm':
$config['where']['id'] = $p['requisition_item_return_id'];
break;
case 'index':
if(isset($p['status'])){
$config['where']['status'] = $p['status'];
}
$config['order']['id'] = 'desc';
break;
case 'show':
$config['where']['id'] = $p['id'];
break;
case 'store':
break;
case 'update':
$config['where']['id'] = $p['id'];
break;
case 'destroy':
$config['where']['id'] = $p['id'];
break;
}
return $config;
}
} }
+9 -1
View File
@@ -52,7 +52,15 @@ class InvRequisitionService
$config['order']['id'] = 'desc'; $config['order']['id'] = 'desc';
break; break;
case 'index': case 'index':
$config['where']['applicant_id'] = $request->user->uid; if(isset($p['status']) && $p['status']){
$config['where']['status'] = $p['status'];
}
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'];
}
$config['order']['id'] = 'desc'; $config['order']['id'] = 'desc';
break; break;
case 'show': case 'show':
@@ -43,6 +43,25 @@ class InvRequisitionController extends BaseController
} }
} }
/**
* 获取列表
*
* @param Request $request 请求对象
* @return mixed 返回分页数据及总数
*/
public function index(Request $request)
{
try {
$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());
}
}
/** /**
* 列表页数据格式化 * 列表页数据格式化
* *
@@ -17,6 +17,25 @@ class InvRequisitionItemReturnController extends BaseController
$this->service = new InvRequisitionItemReturnService(); $this->service = new InvRequisitionItemReturnService();
} }
/**
* 获取列表
*
* @param Request $request 请求对象
* @return mixed 返回分页数据及总数
*/
public function index(Request $request)
{
try {
$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());
}
}
/** /**
* 列表页数据格式化 * 列表页数据格式化
* *
@@ -2,6 +2,7 @@
namespace app\mobile\controller; namespace app\mobile\controller;
use app\common\controller\BaseController; use app\common\controller\BaseController;
use app\common\model\InvRequisitionItem;
use app\common\traits\crud\CrudControllerTrait; use app\common\traits\crud\CrudControllerTrait;
use app\common\service\InvRequisitionReturnService; use app\common\service\InvRequisitionReturnService;
@@ -22,12 +23,15 @@ class InvRequisitionReturnController extends BaseController
* @param array $data * @param array $data
* @return array * @return array
*/ */
// protected function indexFormat($data) protected function indexFormat($data)
// { {
// if (isset($data['created_at'])) if (isset($data['id'])) {
// $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); $data['item'] = InvRequisitionItem::where('requisition_id', $data['id'])->get();
// if (isset($data['updated_at'])) }
// $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); if (isset($data['created_at']))
// return $data; $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;
}
} }
+18 -5
View File
@@ -520,6 +520,9 @@ Route::group('/admin', function () {
Route::any('/show', [app\admin\controller\InvRequisitionController::class, 'show']); Route::any('/show', [app\admin\controller\InvRequisitionController::class, 'show']);
Route::any('/approve', [app\admin\controller\InvRequisitionController::class, 'approve']); 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']);
}); });
}); });
@@ -652,14 +655,24 @@ Route::group('/mobile', function () {
Route::any('/item/preset', [app\mobile\controller\InvItemController::class, 'preset']); Route::any('/item/preset', [app\mobile\controller\InvItemController::class, 'preset']);
// 物品领用申请 // 物品领用申请
Route::any('/requisition/list', [app\mobile\controller\InvRequisitionController::class, 'index']); // Route::any('/requisition/list', [app\mobile\controller\InvRequisitionController::class, 'index']);
Route::any('/requisition/show', [app\mobile\controller\InvRequisitionController::class, 'show']); // Route::any('/requisition/show', [app\mobile\controller\InvRequisitionController::class, 'show']);
Route::any('/requisition/apply', [app\mobile\controller\InvRequisitionController::class, 'apply']); Route::any('/requisition/apply', [app\mobile\controller\InvRequisitionController::class, 'apply']);
Route::any('/requisition/update', [app\mobile\controller\InvRequisitionController::class, 'update']); Route::any('/requisition/update', [app\mobile\controller\InvRequisitionController::class, 'update']);
Route::group('/requisition', function () {
Route::any('/list', [app\mobile\controller\InvRequisitionController::class, 'index']);
Route::any('/show', [app\mobile\controller\InvRequisitionController::class, 'show']);
// Route::any('/approve', [app\mobile\controller\InvRequisitionController::class, 'approve']);
});
// 物品归还 // 物品归还
Route::any('/requisition/item/return', [app\mobile\controller\InvRequisitionItemReturnController::class, 'store']); Route::group('/requisition/return', function () {
Route::any('/requisition/item/return/update', [app\mobile\controller\InvRequisitionItemReturnController::class, 'update']); Route::any('/store', [app\mobile\controller\InvRequisitionItemReturnController::class, 'store']);
Route::any('/requisition/item/return/confirm', [app\mobile\controller\InvRequisitionItemReturnController::class, 'returnConfirm']); Route::any('/update', [app\mobile\controller\InvRequisitionItemReturnController::class, 'update']);
Route::any('/list', [app\mobile\controller\InvRequisitionItemReturnController::class, 'index']);
Route::any('/confirm', [app\mobile\controller\InvRequisitionItemReturnController::class, 'returnConfirm']);
});
}); });
}); });