OrderIssueProcessLogController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exceptions\Exception;
  4. use App\OrderIssue;
  5. use App\OrderIssueProcessLog;
  6. use App\Services\OrderIssueProcessLogService;
  7. use App\User;
  8. use App\WorkOrder;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. use Illuminate\Support\Facades\Gate;
  12. class OrderIssueProcessLogController extends Controller
  13. {
  14. /** @var OrderIssueProcessLogService $service */
  15. private $service;
  16. public function __construct()
  17. {
  18. $this->service = app(OrderIssueProcessLogService::class);
  19. }
  20. /**
  21. * 处理日志创建
  22. * @param Request $request
  23. * @return array
  24. */
  25. public function apiStore(Request $request): array
  26. {
  27. if (!Gate::allows('订单管理-问题件-编辑')) {
  28. return ['success' => false, 'fail_info' => '没有对应的权限'];
  29. }
  30. if ($request->filled(['id', 'content'])) {
  31. try {
  32. $log = OrderIssueProcessLog::query()->create([
  33. 'order_issue_id' => $request->input('id'),
  34. 'content' => $request->input('content'),
  35. 'tag' => $request->input('tag'),
  36. 'user_id' => Auth::id(),
  37. 'type' => '处理',
  38. ]);
  39. $log->loadMissing('user');
  40. return ['success' => true, 'data' => $log];
  41. } catch (Exception $e) {
  42. return ['success' => false, 'fail_info' => $e->getMessage()];
  43. }
  44. } else {
  45. return ['success' => false, 'fail_info' => '没有传入对应参数'];
  46. }
  47. }
  48. /**
  49. * 删除处理日志
  50. * @param Request $request
  51. * @return array|bool[]
  52. * @throws \Exception
  53. */
  54. public function destroyApi(Request $request): array
  55. {
  56. if (!$request->filled('id')) {
  57. return ['success' => false, 'fail_info' => '没有传入对应参数'];
  58. }
  59. /** @var OrderIssueProcessLog $orderIssueProcessLog */
  60. $orderIssueProcessLog = OrderIssueProcessLog::query()->where('id', $request->input('id'))->first();
  61. if (!$orderIssueProcessLog) return ['success' => false, 'fail_info' => '日志不存在,请刷新重试'];
  62. // 删除的如果是完结条目,将处理状态改为空
  63. if ($orderIssueProcessLog['type'] === '结束') OrderIssue::query()->where('id', $orderIssueProcessLog['order_issue_id'])->update(['final_status' => null]);
  64. $orderIssueProcessLog->delete();
  65. app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
  66. return ['success' => true];
  67. }
  68. /**
  69. * 批量完结订单
  70. * @param Request $request
  71. * @return array
  72. */
  73. public function batchStoreApi(Request $request)
  74. {
  75. if (!Gate::allows('订单管理-问题件-编辑')) {
  76. return ['success' => false, 'fail_info' => '没有对应的权限'];
  77. }
  78. /** @var OrderIssueProcessLogService $service */
  79. $service = app(OrderIssueProcessLogService::class);
  80. try {
  81. $data = $service->batchStoreAndReturnLogs($request->all());
  82. $logs = OrderIssueProcessLog::query()
  83. ->with('user')
  84. ->whereIn('id', data_get($data, '*.id'))
  85. ->get();
  86. $result_data = [];
  87. foreach ($logs as $log) {
  88. $result_data[$log->order_issue_id] = $log;
  89. }
  90. app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
  91. return ['success' => true, 'logs' => $result_data];
  92. } catch (\Exception $e) {
  93. app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . '||' . $e->getMessage() . "||" . $e->getTraceAsString());
  94. return ['success' => false, $e->getMessage()];
  95. }
  96. }
  97. // 标记处理记录
  98. public function tagApi(Request $request): array
  99. {
  100. if (Gate::denies('订单管理-问题件-编辑'))
  101. return ['success' => false, 'fail_info' => '没有对应的权限'];
  102. OrderIssueProcessLog::query()->where('id', $request['id'])->update(['tag' => 1]);
  103. return ['success' => true];
  104. }
  105. /**
  106. * 工单为问题批量添加处理日志
  107. * @param Request $request
  108. * @return array
  109. */
  110. public function workOrderCreateLogApi(Request $request): array
  111. {
  112. if (!Gate::allows('订单管理-问题件-编辑')) {
  113. return ['success' => false, 'message' => '没有对应的权限'];
  114. }
  115. $workOrderQuery = WorkOrder::query()->select('order_id')->whereIn('id', $request->input('ids'));
  116. $orderIssues = OrderIssue::query()->whereIn('order_id', $workOrderQuery)->get();
  117. if (count($orderIssues) !== count($request->input('ids'))) {
  118. return ['success' => false, 'message' => '部分工单没有对应的问题件,请检查后重试'];
  119. }
  120. $params = ['content' => $request->input('content'), 'orderIssueIds' => $orderIssues->map(function ($item) {
  121. return $item->id;
  122. })];
  123. $data = $this->service->batchStoreAndReturnLogs($params);
  124. $data = OrderIssueProcessLog::query()->with('user')->whereIn('id', data_get($data, "*.id"))->get();
  125. return ['success' => true, 'data' => $data];
  126. }
  127. }