| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <?php
- namespace App\Services;
- use App\OrderIssue;
- use App\Traits\ServiceAppAop;
- use App\User;
- use App\WorkOrder;
- use App\WorkOrderDetail;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Support\Facades\Auth;
- class WorkOrderProcessLogService
- {
- use ServiceAppAop;
- /**
- * 创建 处理日志
- * @param WorkOrderDetail $detail
- * @param $params
- * @param User|null $user
- * @return Model
- */
- public function createProcessLog(WorkOrderDetail $detail, $params, User $user = null): Model
- {
- $user = $user ?? Auth::user();
- $process_log = $detail->processLogs()->create([
- 'work_order_detail_id' => $detail->id,
- 'work_order_id' => $detail->work_order_id,
- 'content' => $params['content'],
- 'user_id' => Auth::id(),
- 'tag' => $params['tag'] ?? 0,
- ]);
- /** @var WorkOrder $work_order */
- $work_order = $detail->workOrder;
- if (in_array($work_order->status, ['宝时处理', '宝时终审'])
- && $work_order->bao_shi_tag != WorkOrder::$NO_STATE_TAG) {
- $detail->workOrder()->whereIn('status', [1, 4])->update(['bao_shi_tag' => WorkOrder::$NO_STATE_TAG]);
- } else if (in_array($work_order->status, ['承运商处理'])
- && $work_order->logistic_tag != WorkOrder::$NO_STATE_TAG) {
- $detail->workOrder()->where('status', 3)->update(['logistic_tag' => WorkOrder::$NO_STATE_TAG]);
- } else if (in_array($work_order->status, ['货主处理', '待货主完结'])
- && $work_order->owner_tag != WorkOrder::$NO_STATE_TAG) {
- $detail->workOrder()->whereIn('status', [2, 6])->update(['owner_tag' => 1]);
- }
- $process_log->setAttribute('user', $user);
- return $process_log;
- }
- /**
- * 批量创建处理日志
- * @param $workOrders
- * @param $params
- * @return array
- */
- public function batchCreateProcessLog($workOrders, $params): array
- {
- $user = Auth::user();
- $process_logs = [];
- /** @var WorkOrder $workOrder */
- foreach ($workOrders as $workOrder) {
- /** @var WorkOrderDetail $detail */
- $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->orderByDesc('created_at')->first();
- if (!$detail) continue;
- $process_logs[] = $this->createProcessLog($detail, $params, $user);
- }
- return $process_logs;
- }
- /**
- * 将工单的处理结果同步到问题件的处理结果
- * @param OrderIssue $orderIssue
- * @param WorkOrderDetail $detail
- */
- public function syncOrderIssue(OrderIssue $orderIssue, WorkOrderDetail $detail)
- {
- $logs = $detail->processLogs()->where('status', '未同步')->get();
- $orderIssue->logs()->insert($logs->map(function ($log) use ($orderIssue) {
- return [
- 'order_issue_id' => $orderIssue->id,
- 'context' => $log->context,
- 'user_id' => $log->user_id,
- 'create_at' => $log->created_at,
- ];
- })->toArray());
- }
- }
|