WorkOrderController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Filters\WorkOrderFilters;
  4. use App\Http\Requests\WorkOrder\WorkOrderRequest;
  5. use App\Logistic;
  6. use App\OrderIssue;
  7. use App\Services\OrderService;
  8. use App\Services\OwnerService;
  9. use App\Services\WorkOrderCommoditiesService;
  10. use App\Services\WorkOrderDetailService;
  11. use App\Services\WorkOrderLogService;
  12. use App\Services\WorkOrderService;
  13. use App\WorkOrder;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Gate;
  16. class WorkOrderController extends Controller
  17. {
  18. /**
  19. * @var WorkOrderService $service
  20. * @var WorkOrderCommoditiesService $commoditiesService
  21. * @var WorkOrderDetailService $detailService
  22. * @var WorkOrderLogService $logService
  23. * @var OrderService $orderService
  24. * @var OwnerService $ownerService
  25. */
  26. public $service;
  27. public $detailService;
  28. public $commoditiesService;
  29. public $logService;
  30. public $orderService;
  31. public $ownerService;
  32. public function __construct()
  33. {
  34. $this->service = app(WorkOrderService::class);
  35. $this->detailService = app('WorkOrderDetailService');
  36. $this->commoditiesService = app(WorkOrderCommoditiesService::class);
  37. $this->logService = app(WorkOrderLogService::class);
  38. $this->orderService = app(OrderService::class);
  39. $this->ownerService = app(OwnerService::class);
  40. }
  41. public function index(Request $request, WorkOrderFilters $filters)
  42. {
  43. if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
  44. $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50);
  45. $logistics = Logistic::all();
  46. $orderIssueTypes = $this->service->getIssueType();
  47. $owners = $this->ownerService->getAuthorizedOwners();
  48. $this->service->tags($workOrders);
  49. return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
  50. }
  51. /**
  52. * 工单生成问题件
  53. * @param Request $request
  54. * @return array
  55. */
  56. public function buildOrderIssueApi(Request $request): array
  57. {
  58. if (Gate::denies('订单管理-订单问题件生成'))
  59. return ['success' => false, 'message' => '没有对应权限'];
  60. $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
  61. if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
  62. if (OrderIssue::query()->whereIn('order_id', $work_orders->map(function ($item) {
  63. return $item['order_id'];
  64. }))->exists()) {
  65. return ['success' => false, 'message' => '已有对应的问题件'];
  66. }
  67. $result = $this->service->buildOrderIssue($work_orders);
  68. if (!$result['success']) return $result;
  69. $workOrders = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
  70. $this->service->tags($workOrders);
  71. return ['success' => true, 'data' => $workOrders];
  72. }
  73. /**
  74. * 创建工单
  75. * @param Request $request
  76. * @return array
  77. * @throws \Illuminate\Contracts\Container\BindingResolutionException
  78. */
  79. public function storeApi(Request $request): array
  80. {
  81. if (Gate::denies('订单管理-订单-生成工单'))
  82. return ['success' => false, 'message' => '没有对应权限'];
  83. $params = $request->all();
  84. if (count($params) == 0) return ['success' => false, 'message' => '参数异常'];
  85. app('OrderService')->syncOrderByCodes(array_map(function ($param) {
  86. return $param['order_no'];
  87. }, $params));
  88. return $this->service->build($params);
  89. }
  90. /**
  91. * 拦截工单
  92. * @param WorkOrderRequest $request
  93. * @return array|bool[]
  94. */
  95. public function interceptApi(WorkOrderRequest $request):array
  96. {
  97. if (Gate::denies('订单管理-订单-生成工单'))
  98. return ['success' => false, 'message' => '没有对应权限'];
  99. $orderNos = $request->input('orderNos',[]);
  100. $this->orderService->syncOrderByCodes($orderNos);
  101. $remark = $request->input('remark','拦截工单');
  102. foreach ($orderNos as $item) {
  103. $this->service->createInterceptWorkOrder(['order_no'=>$item,'remark' => $remark]);
  104. }
  105. return ['success' => true];
  106. }
  107. /**
  108. * 信息更改 工单
  109. * @param WorkOrderRequest $request
  110. * @return array|bool[]
  111. */
  112. public function informationChangeApi(WorkOrderRequest $request): array
  113. {
  114. if (Gate::denies('订单管理-订单-生成工单'))
  115. return ['success' => false, 'message' => '没有对应权限'];
  116. $orderNo = $request->input('order_no','');
  117. $this->orderService->syncOrderByCodes([$orderNo]);
  118. $this->service->createInformationChangeWorkOrder(['order_no'=>$orderNo,'remark' => $request->input('remark')]);
  119. return ['success' => true];
  120. }
  121. /**
  122. * 快递丢件 工单
  123. * @param WorkOrderRequest $request
  124. * @return array|bool[]
  125. */
  126. public function lossApi(WorkOrderRequest $request): array
  127. {
  128. if (Gate::denies('订单管理-订单-生成工单'))
  129. return ['success' => false, 'message' => '没有对应权限'];
  130. $orderNo = $request->input('order_no','');
  131. $this->orderService->syncOrderByCodes([$orderNo]);
  132. $this->service->createLossWorkOrder($request->all());
  133. return ['success' => true];
  134. }
  135. /**
  136. * 破损工单
  137. * @param WorkOrderRequest $request
  138. * @return array|bool[]|false[]
  139. */
  140. public function damagedApi(WorkOrderRequest $request): array
  141. {
  142. if (Gate::denies('订单管理-订单-生成工单'))
  143. return ['success' => false, 'message' => '没有对应权限'];
  144. $this->orderService->syncOrderByCodes([$request->input('order_no')]);
  145. $workOrder = $this->service->createDamagedWorkOrder($request->all());
  146. if ($workOrder) return ['success' => true];
  147. else return ['success' => false];
  148. }
  149. /**
  150. * 快递异常
  151. * @param Request $request
  152. * @return array|bool[]
  153. */
  154. public function expressAbnormalApi(Request $request): array
  155. {
  156. if (Gate::denies('订单管理-订单-生成工单'))
  157. return ['success' => false, 'message' => '没有对应权限'];
  158. $this->orderService->syncOrderByCodes([$request->input('order_no')]);
  159. $this->service->createExpressAbnormalWorkOrder($request->all());
  160. return ['success' => true];
  161. }
  162. /**
  163. * 错漏发
  164. * @param Request $request
  165. * @return array|bool[]
  166. */
  167. public function mistakeApi(Request $request): array
  168. {
  169. if (Gate::denies('订单管理-订单-生成工单'))
  170. return ['success' => false, 'message' => '没有对应权限'];
  171. $this->orderService->syncOrderByCodes([$request->input('order_no')]);
  172. $this->service->createMistakeWorkOrder($request->all());
  173. return ['success' => true];
  174. }
  175. /**
  176. * 填充丢件
  177. * @param Request $request
  178. * @return array
  179. */
  180. public function fillLossApi(Request $request): array
  181. {
  182. if (Gate::denies('订单管理-订单-宝时编辑') || Gate::denies('订单管理-订单-货主编辑')){
  183. return ['success' => false, 'message' => '没有对应权限'];
  184. }
  185. $workOrder = $this->service->find($request->input('id'));
  186. $detail = $this->detailService->find($request->input('detail_id'));
  187. $this->service->fillLossWorkOrder($workOrder,$request->all());
  188. $workOrder->loadDefaultWith();
  189. return ['success' => true,'data' => $workOrder];
  190. }
  191. /**
  192. * 商家填充丢件信息
  193. * @param Request $request
  194. * @return array
  195. */
  196. public function updateLossApi(Request $request): array
  197. {
  198. if (Gate::denies('订单管理-工单处理-货主编辑'))
  199. return ['success' => false, 'message' => '没有对应权限'];
  200. $workOrder = $this->service->find($request->input('id'));
  201. $detail = $this->detailService->find($request->input('detail_id'));
  202. if (!$workOrder || !$detail) return ['success' => false, 'message' => '参数错误,刷新重试'];
  203. $workOrder = $this->service->fillLossWorkOrder($workOrder, $detail,$request->all());
  204. $workOrder->loadDefaultWith();
  205. return ['success' => true, 'data' => $workOrder];
  206. }
  207. public function updateIssueTypeApi(Request $request): array
  208. {
  209. if (Gate::denies('订单管理-工单处理-审核'))
  210. return ['success' => false, 'message' => '没有对应权限'];
  211. WorkOrder::query()->where('id', $request['id'])->update(['order_issue_type_id' => $request['type_id']]);
  212. return ['success' => true];
  213. }
  214. public function batchUpdateIssueTypeApi(Request $request): array
  215. {
  216. if (Gate::denies('订单管理-工单处理-审核'))
  217. return ['success' => false, 'message' => '没有对应权限'];
  218. WorkOrder::query()->whereIn('id', $request['ids'])->update(['order_issue_type_id' => $request['type']]);
  219. $items = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get();
  220. $this->service->tags($items);
  221. return ['success' => true, 'data' => $items];
  222. }
  223. public function destroyApi($id): array
  224. {
  225. if (Gate::denies('订单管理-工单处理-删除'))
  226. return ['success' => false, 'message' => '没有对应权限'];
  227. $workOrder = $this->service->find($id);
  228. if (!$workOrder)
  229. return ['success' => false, 'message' => '对应工单信息未找到'];
  230. if ($workOrder->status == '已处理') {
  231. return ['success' => false, 'message' => '对应工单已处理,拒绝删除'];
  232. }
  233. WorkOrder::query()->where('id', $id)->Delete();
  234. return ['success' => true];
  235. }
  236. public function logisticEndApi(Request $request): array
  237. {
  238. if (Gate::denies('订单管理-工单处理-承运商编辑')) {
  239. return ['success' => false, 'message' => '没有对应权限'];
  240. }
  241. $workOrder = $this->service->find($request->input('id'));
  242. $detail = $this->detailService->find($request->input('detail_id'));
  243. if (!$workOrder || !$detail) return ['success' => false, 'message' => '参数错误,刷新重试'];
  244. $this->service->logisticEnd($workOrder,$detail);
  245. $workOrder->loadDefaultWith();
  246. return ['success' => true, 'data' => $workOrder];
  247. }
  248. /**
  249. * 宝时终审
  250. * @param Request $request
  251. * @return array
  252. */
  253. public function baoShiReviewApi(Request $request): array
  254. {
  255. if (Gate::denies('订单管理-工单处理-客服编辑')) {
  256. return ['success' => false, 'message' => '没有对应权限'];
  257. }
  258. $workOrder = $this->service->find($request->input('id'));
  259. $detail = $this->detailService->find($request->input('detail_id'));
  260. if (!$workOrder || !$detail) return ['success' => false, 'message' => '参数异常'];
  261. $this->service->baoShiReview($workOrder,$detail,$request->input('commodities'));
  262. $workOrder->loadDefaultWith();
  263. return ['success' => true,'data' => $workOrder];
  264. }
  265. public function checkWorkOrderApi(Request $request): array
  266. {
  267. $nos = $request->input('no','');
  268. if (is_string($nos)){
  269. $nos = [$nos];
  270. }
  271. $data = $this->service->checkWorkOrder($nos);
  272. return ['success' => true,'data' => $data];
  273. }
  274. }