OrderIssueProcessLogController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exceptions\Exception;
  4. use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
  5. use App\OrderIssue;
  6. use App\OrderIssueProcessLog;
  7. use App\Services\OrderIssueProcessLogService;
  8. use App\User;
  9. use App\WorkOrder;
  10. use Illuminate\Http\Request;
  11. use Illuminate\Support\Facades\Auth;
  12. use Illuminate\Support\Facades\Gate;
  13. class OrderIssueProcessLogController extends Controller
  14. {
  15. /** @var OrderIssueProcessLogService $service */
  16. private $service;
  17. public function __construct()
  18. {
  19. $this->service = app(OrderIssueProcessLogService::class);
  20. }
  21. /**
  22. * 处理日志创建
  23. * @param Request $request
  24. * @return array
  25. */
  26. public function apiStore(Request $request): array
  27. {
  28. if (!Gate::allows('订单管理-问题件-编辑')) {
  29. return ['success' => false, 'fail_info' => '没有对应的权限'];
  30. }
  31. if ($request->filled(['id', 'content'])) {
  32. try {
  33. $log = OrderIssueProcessLog::query()->create([
  34. 'order_issue_id' => $request->input('id'),
  35. 'content' => $request->input('content'),
  36. 'tag' => $request->input('tag'),
  37. 'user_id' => Auth::id(),
  38. 'type' => '处理',
  39. ]);
  40. $log->loadMissing('user');
  41. return ['success' => true, 'data' => $log];
  42. } catch (Exception $e) {
  43. return ['success' => false, 'fail_info' => $e->getMessage()];
  44. }
  45. } else {
  46. return ['success' => false, 'fail_info' => '没有传入对应参数'];
  47. }
  48. }
  49. /**
  50. * 删除处理日志
  51. * @param Request $request
  52. * @return array|bool[]
  53. * @throws \Exception
  54. */
  55. public function destroyApi(Request $request): array
  56. {
  57. if (!$request->filled('id')) {
  58. return ['success' => false, 'fail_info' => '没有传入对应参数'];
  59. }
  60. /** @var OrderIssueProcessLog $orderIssueProcessLog */
  61. $orderIssueProcessLog = OrderIssueProcessLog::query()->where('id', $request->input('id'))->first();
  62. if (!$orderIssueProcessLog) return ['success' => false, 'fail_info' => '日志不存在,请刷新重试'];
  63. // 删除的如果是完结条目,将处理状态改为空
  64. if ($orderIssueProcessLog['type'] === '结束') OrderIssue::query()->where('id', $orderIssueProcessLog['order_issue_id'])->update(['final_status' => null]);
  65. $orderIssueProcessLog->delete();
  66. app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
  67. return ['success' => true];
  68. }
  69. /**
  70. * 批量完结订单
  71. * @param Request $request
  72. * @return array
  73. */
  74. public function batchStoreApi(Request $request): array
  75. {
  76. if (!Gate::allows('订单管理-问题件-编辑')) {
  77. return ['success' => false, 'fail_info' => '没有对应的权限'];
  78. }
  79. /** @var OrderIssueProcessLogService $service */
  80. $service = app(OrderIssueProcessLogService::class);
  81. try {
  82. $data = $service->batchStoreAndReturnLogs($request->all());
  83. $logs = OrderIssueProcessLog::query()
  84. ->with('user')
  85. ->whereIn('id', data_get($data, '*.id'))
  86. ->get();
  87. $result_data = [];
  88. foreach ($logs as $log) {
  89. $result_data[$log->order_issue_id] = $log;
  90. }
  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. }