物品领用审核

This commit is contained in:
2026-01-07 17:23:03 +08:00
parent 5a7a6a45d4
commit 7cafb61797
21 changed files with 460 additions and 35 deletions
@@ -4,6 +4,7 @@ namespace app\common\service;
use app\common\model\InvRequisition;
use app\common\model\InvRequisitionItem;
use app\common\model\InvRequisitionReturn;
use app\common\validate\InvRequisitionItemReturnValidate;
use app\common\traits\crud\CrudServiceTrait;
use app\common\model\InvRequisitionItemReturn;
@@ -13,6 +14,7 @@ use support\exception\BusinessException;
use app\common\service\UserService;
use Illuminate\Database\Eloquent\Model;
use app\common\model\InvRequisitionItemReturnAttachment;
use function Symfony\Component\String\u;
class InvRequisitionItemReturnService
{
@@ -91,7 +93,7 @@ class InvRequisitionItemReturnService
// ];
// 获取所有申请项ID
$reqItemIds = array_column($data, 'requisition_item_id');
$reqItemIds = array_column($data['items'], 'requisition_item_id');
// 参数校验
if (empty($reqItemIds)) {
@@ -99,7 +101,9 @@ class InvRequisitionItemReturnService
}
// 将申请项按 ID 重组为关联数组
$newReqItems = $this->groupArrayByKey($data, 'requisition_item_id');
$newReqItems = $this->groupArrayByKey($data['items'], 'requisition_item_id');
$data['return_at'] = is_int($data['return_at']) ? $data['return_at']: strtotime($data['return_at']);
// 获取申请项明细
$reqItemsArr = InvRequisitionItem::whereIn('id', $reqItemIds)->get()->toArray();
@@ -112,10 +116,12 @@ class InvRequisitionItemReturnService
// 获取用户信息
$userService = new UserService();
$user = $userService->getUserInfo($request->user->uid, '');
$data['applicant_id'] = $user['user']['id'];
$data['applicant_name'] = $user['user']['name'];
$reqItemId = $data['requisition_id'];
$arr = [];
foreach ($reqItemsArr as $reqItem) {
$reqItemId = $reqItem['id'];
// 检查是否有对应的新申请项数据
if (!isset($newReqItems[$reqItemId])) {
@@ -123,19 +129,21 @@ class InvRequisitionItemReturnService
}
$arr[] = [
'requisition_id' => $reqItem['requisition_id'],
'requisition_item_id' => $reqItemId,
'requisition_id' => $data['requisition_id'],
'requisition_item_id' => $reqItem['id'],
'item_id' => $reqItem['item_id'],
'apply_user_id' => $user['user']['id'],
'apply_user_name' => $user['user']['name'],
'return_qty' => $newReqItems[$reqItemId]['return_qty'],
'return_qty' => $newReqItems[$reqItemId]['return_qty'] ?: '1',
'apply_remark' => $newReqItems[$reqItemId]['apply_remark'] ?? '',
'attachment' => $newReqItems[$reqItemId]['attachment'],
'return_at' => time()
//'attachment' => $newReqItems[$reqItemId]['attachment'],
//'return_at' => time(),
'return_at' => $data['return_at'],
];
}
$data['items'] =$arr;
return $arr;
return $data;
} catch (BusinessException $e) {
throw $e;
} catch (\Throwable $th) {
@@ -156,15 +164,24 @@ class InvRequisitionItemReturnService
// 关联表增加事务处理
return Db::transaction(function () use ($request, $data) {
$data = $this->preProcess('Store', $data, $request);
$dl = $this->getDataLimitFromRequest($request);
foreach ($data as $item) {
$created = $this->logicCreate($item, $dl);
$this->processRequisitionItemReturnAttachment($created, $item['attachment']);
//$dl = $this->getDataLimitFromRequest($request);
$items = $data['items'];
$attachment = $data['attachment'];
unset($data['items']);
unset($data['attachment']);
$data['order_no'] = $this->generateOrderNo();
$res = InvRequisitionReturn::create($data);
$created = [];
foreach ($items as $item) {
//$created = $this->logicCreate($item, $dl);
$created = $this->logicCreate($item);
}
$this->processRequisitionItemReturnAttachment($res, $attachment);
return $this->postProcess('Store', $created);
});
} catch (\Throwable $e) {
throw new BusinessException("创建物品申请失败:" . $e->getMessage());
throw new BusinessException("创建物品申请失败:" . $e->getMessage().$e->getTraceAsString());
}
}
@@ -446,4 +463,14 @@ class InvRequisitionItemReturnService
return $config;
}
/**
* 生成申请单号
*
* @return string
*/
private function generateOrderNo(): string
{
return 'RR' . date('Ymd') . strtoupper(substr(uniqid(), -6));
}
}