ShopOrderController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. <?php
  2. namespace App\Http\Controllers\Admin\Dwbs;
  3. use App\Exports\Dwbs\ShopOrderExport;
  4. use App\Http\Controllers\Controller;
  5. use App\Jobs\Dwbs\ImportShopOrderWuLiuJob;
  6. use App\Repositories\Enums\CheckStatusEnum;
  7. use App\Repositories\Enums\Dwbs\ShopOrderStatusEnum;
  8. use App\Repositories\Enums\ResponseCodeEnum;
  9. use App\Repositories\Models\Base\Resource;
  10. use App\Repositories\Models\Dwbs\ShopOrder;
  11. use App\Services\Dwbs\ShopOrderService;
  12. use App\Support\Sdk\Express\Express;
  13. use Illuminate\Http\Request;
  14. use Illuminate\Support\Facades\Crypt;
  15. use Maatwebsite\Excel\Facades\Excel;
  16. /**
  17. * 礼品兑换订单管理
  18. */
  19. class ShopOrderController extends Controller
  20. {
  21. /**
  22. * @var ShopOrderService
  23. */
  24. private $service;
  25. /**
  26. * ShopOrderController constructor.
  27. *
  28. * @param ShopOrderService $shopOrderService
  29. */
  30. public function __construct(ShopOrderService $service)
  31. {
  32. parent::__construct();
  33. // $this->middleware('checkUserPermission');
  34. $this->service = $service;
  35. }
  36. /**
  37. * 列表
  38. * @param Request $request
  39. *
  40. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  41. * @throws \Prettus\Repository\Exceptions\RepositoryException
  42. */
  43. public function index(Request $request)
  44. {
  45. $lists = $this->service->handleList($request);
  46. return $this->response->success($lists);
  47. }
  48. /**
  49. * 新增
  50. * @param Request $request
  51. *
  52. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  53. * @throws \Prettus\Validator\Exceptions\ValidatorException
  54. */
  55. public function store(Request $request)
  56. {
  57. $data = $this->validateData($request, [
  58. 'name' => 'required|string|max:200',
  59. 'sort' => 'required|integer',
  60. 'status' => 'required|integer',
  61. ], []);
  62. $model = $this->service->handleStore($data);
  63. return $this->response->created($model, '创建成功');
  64. }
  65. /**
  66. * 详情
  67. * @param Request $request
  68. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  69. */
  70. public function show(Request $request)
  71. {
  72. $this->validate($request, ['id' => 'required|integer']);
  73. $model = $this->service->handleProfile($request->get('id'));
  74. return $this->response->success($model);
  75. }
  76. /**
  77. * 更新
  78. * @param Request $request
  79. *
  80. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  81. * @throws \Prettus\Validator\Exceptions\ValidatorException
  82. */
  83. public function update(Request $request)
  84. {
  85. $data = $this->validateData($request, [
  86. 'id' => 'required|integer',
  87. 'wuliu_no' => 'required|string',
  88. 'wuliu_type' => 'required|string',
  89. 'remark' => 'nullable|string',
  90. ], [
  91. 'wuliu_no' => '快递编号',
  92. 'wuliu_type' => '快递公司',
  93. 'remark' => '备注',
  94. ]);
  95. $data['status'] = ShopOrderStatusEnum::wait_shou;
  96. $model = $this->service->handleUpdate($data);
  97. return $this->response->success($model, '更新成功');
  98. }
  99. /**
  100. * 更新
  101. * @param Request $request
  102. *
  103. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  104. * @throws \Prettus\Validator\Exceptions\ValidatorException
  105. */
  106. public function updateAddress(Request $request)
  107. {
  108. $data = $this->validateData($request, [
  109. 'id' => 'required|integer',
  110. 'sjr_name' => 'required|string',
  111. 'sjr_mobile' => 'required|mobile',
  112. 'sjr_mobile_code' => 'required',
  113. 'sjr_address_province' => 'required|string',
  114. 'sjr_address_city' => 'required|string',
  115. 'sjr_address_area' => 'required|string',
  116. 'sjr_address' => 'required|string',
  117. 'remark' => 'nullable|string',
  118. ], [
  119. 'sjr_name' => '收件人姓名',
  120. 'sjr_mobile' => '收件人手机号',
  121. 'sjr_mobile_code' => '收件人手机号-区码',
  122. 'sjr_address_province' => '收件人地址-省',
  123. 'sjr_address_city' => '收件人地址-市',
  124. 'sjr_address_area' => '收件人地址-县',
  125. 'sjr_address' => '收件人地址',
  126. 'remark' => '备注',
  127. ]);
  128. if (strpos('*', $data['sjr_mobile']) === false) {
  129. $area_code = $request->get('sjr_mobile_code', '+86');
  130. switch ($area_code) {
  131. case "+886":
  132. //中国台湾
  133. $this->validateData($request, [
  134. 'sjr_mobile' => 'required|mobile_TW',
  135. ], ['sjr_mobile' => '手机号']);
  136. break;
  137. case "+853":
  138. //中国澳门
  139. $this->validateData($request, [
  140. 'sjr_mobile' => 'required|mobile_OM',
  141. ], ['sjr_mobile' => '手机号']);
  142. break;
  143. case "+852":
  144. //中国香港
  145. $this->validateData($request, [
  146. 'sjr_mobile' => 'required|mobile_XG',
  147. ], ['sjr_mobile' => '手机号']);
  148. break;
  149. case '+86':
  150. default:
  151. //大陆
  152. $this->validateData($request, [
  153. 'sjr_mobile' => 'required|mobile',
  154. ], ['sjr_mobile' => '手机号']);
  155. $data['sjr_mobile_code'] = '+86';
  156. break;
  157. }
  158. $data['sjr_mobile_encryption'] = Crypt::encryptString($data['sjr_mobile']);
  159. $data['sjr_mobile'] = mobile_hidden($data['sjr_mobile']);
  160. }
  161. $model = $this->service->handleUpdate($data);
  162. return $this->response->success($model, '更新成功');
  163. }
  164. /**
  165. * 删除
  166. * @param Request $request
  167. */
  168. public function destroy(Request $request)
  169. {
  170. $this->validate($request, ['id' => 'required|integer']);
  171. $re = $this->service->handleDelete($request->get('id'));
  172. if ($re) {
  173. return $this->response->ok('删除成功');
  174. }
  175. return $this->response->fail('删除失败');
  176. }
  177. /**
  178. * 批量删除
  179. * @param Request $request
  180. */
  181. public function batchDelete(Request $request)
  182. {
  183. $ids = $this->validateData($request, ['ids' => 'required|array']);
  184. $re = $this->service->handleBatchDelete($ids);
  185. if ($re) {
  186. return $this->response->ok('删除成功');
  187. }
  188. return $this->response->fail('删除失败');
  189. }
  190. /**
  191. * 选项
  192. * @must
  193. * @param Request $request
  194. */
  195. public function selectOptions(Request $request)
  196. {
  197. $lists = $this->service->handleSelectOptions($request);
  198. return $this->response->success($lists);
  199. }
  200. /**
  201. * 批量审核
  202. * @param Request $request
  203. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  204. * @throws \Illuminate\Validation\ValidationException
  205. */
  206. public function batchCheck(Request $request)
  207. {
  208. $data = $this->validateData($request, [
  209. 'ids' => 'required|array',
  210. // 'check_status' => 'required|integer',
  211. 'check_remark' => 'nullable',
  212. ], [
  213. 'check_status' => '审核结果',
  214. 'check_remark' => '审核意见',
  215. ]);
  216. // $ids = $this->service->handleIds($request);
  217. $ids = $data['ids'];
  218. $data['check_status'] = CheckStatusEnum::SUCCESS;
  219. $this->service->handleBatchCheck($ids, $data);
  220. return $this->response->ok('操作成功');
  221. }
  222. /**
  223. * 导出
  224. * @param Request $request
  225. * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
  226. * @throws \Illuminate\Validation\ValidationException
  227. */
  228. public function export(Request $request)
  229. {
  230. $ids = $this->service->handleIds($request);
  231. $fields = $request->get('fields', array_keys(ShopOrderExport::BaseFields));
  232. $file_name = time() . '.xlsx';
  233. return Excel::download(new ShopOrderExport($ids, $fields), $file_name);
  234. }
  235. /**
  236. * 导入
  237. * @param Request $request
  238. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource|void
  239. * @throws \Illuminate\Validation\ValidationException
  240. */
  241. public function importWuLiu(Request $request)
  242. {
  243. $this->validate($request, [
  244. 'id' => 'required|integer'
  245. ]);
  246. $resource = Resource::query()->where('id', $request->get('id'))->first();
  247. if (!$resource) {
  248. abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该资源');
  249. return;
  250. }
  251. $this->dispatch(new ImportShopOrderWuLiuJob($resource, login_admin_id()));
  252. return $this->response->ok('正在导入,请稍后');
  253. }
  254. /**
  255. * 查询快递
  256. * @param Request $request
  257. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  258. */
  259. public function express(Request $request)
  260. {
  261. $data = $this->validateData($request, [
  262. 'id' => 'required|integer',
  263. ], [
  264. 'id' => '订单 id',
  265. ]);
  266. $order = ShopOrder::query()->where('id', $data['id'])->where('user_id', login_user_id())->select(['id', 'status', 'wuliu_no', 'wuliu_type'])->first();
  267. if (!$order) abort(ResponseCodeEnum::SERVICE_OPERATION_ERROR, '找不到该订单');
  268. $data = false;
  269. $isOk = false;
  270. try {
  271. if (in_array($order->status, [ShopOrderStatusEnum::wait_shou, ShopOrderStatusEnum::complete])) {
  272. $code = Express::nameToCode($order['wuliu_type']);
  273. if ($code) {
  274. $data = (new Express())->search($order['wuliu_no'], $code);
  275. if (array_key_exists('Traces', $data)) {
  276. if ((int)$data['State'] === (int)3) {
  277. //签收完成
  278. $order->status = ShopOrderStatusEnum::complete;
  279. $order->save();
  280. }
  281. $isOk = true;
  282. }
  283. }
  284. }
  285. if (!$isOk) {
  286. $data['State'] = false;
  287. }
  288. } catch (\Exception $exception) {
  289. $this->exception($exception, '获取物流信息失败');
  290. }
  291. return $this->response->success($data);
  292. }
  293. /**
  294. * 作废订单
  295. * @param Request $request
  296. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  297. * @throws \Illuminate\Validation\ValidationException
  298. */
  299. public function closeOrder(Request $request)
  300. {
  301. $data = $this->validateData($request, [
  302. 'id' => 'required|integer',
  303. 'close_order_reason' => 'required|string',
  304. ], [
  305. 'id' => '订单 id',
  306. 'close_order_reason' => '作废原因',
  307. ]);
  308. $this->service->handleCloseOrder($data['id'], $data['close_order_reason']);
  309. return $this->response->ok('作废成功');
  310. }
  311. }