OrderService.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. <?php
  2. namespace App\JsonRpc;
  3. use App\Model\Ad;
  4. use App\Model\AdPlace;
  5. use App\Model\Order;
  6. use App\Model\OrderAd;
  7. use App\Model\Website;
  8. use App\Tools\Result;
  9. use Carbon\Carbon;
  10. use Hyperf\DbConnection\Db;
  11. use Hyperf\RpcServer\Annotation\RpcService;
  12. #[RpcService(name: "OrderService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
  13. class OrderService implements OrderServiceInterface
  14. {
  15. /**
  16.  * 查询没有广告的广告位
  17.  * @param
  18.  * @return void
  19. */
  20. public function getAD(array $data): array
  21. {
  22. $where = [
  23. 'ad_place.width' => $data['width'],
  24. 'ad_place.height' => $data['height'],
  25. ];
  26. $start = Carbon::parse($data['starttime']);
  27. $end = Carbon::parse($data['endtime']);
  28. $status = [
  29. 0 => '1',
  30. 1 => '4',
  31. 2 => '6',
  32. ];
  33. $ads = Ad::where('fromtime', '<=', $start)->where('totime', '>=', $end)->select('pid')->get()->all();
  34. $orderads = OrderAd::where('fromtime', '<=', $start)->where('totime', '>=', $end)->whereIn('status', $status)->select('pid')->get()->all();
  35. $pids = array_merge($ads, $orderads);
  36. $ad_pids = array_unique($pids);
  37. // $ad_pid = [1,2,3];
  38. // 所有与用户有时间冲突的广告位
  39. if (!empty($ad_pids)) {
  40. $pid = [];
  41. foreach ($ad_pids as $val) {
  42. array_push($pid, $val['pid']);
  43. }
  44. $placeids = AdPlace::whereNotIn('id', $pid)->where($where)->select('id')->get()->all();
  45. //所有去掉与用户时间冲突的广告并且符合图片尺寸的广告位
  46. // 符合用户条件的空广告位
  47. $place_id = [];
  48. foreach ($placeids as $val) {
  49. array_push($place_id, $val['id']);
  50. }
  51. $rep = AdPlace::whereIn('ad_place.id', $place_id)
  52. ->leftJoin('website', 'ad_place.website_id', 'website.id')
  53. ->select('ad_place.*', 'website.website_name', 'website.id')
  54. ->selectSub('website.id', 'webid')
  55. ->selectSub('ad_place.id', 'pid')
  56. ->orderBy("website.id", "asc")
  57. ->limit($data['pageSize'])
  58. ->offset(($data['page'] - 1) * $data['pageSize'])
  59. ->get();
  60. } else {
  61. $rep = AdPlace::where($where)
  62. ->leftJoin('website', 'ad_place.website_id', 'website.id')
  63. ->select('ad_place.*', 'website.website_name', 'website.id')
  64. ->selectSub('website.id', 'webid')
  65. ->selectSub('ad_place.id', 'pid')
  66. ->orderBy("website.id", "asc")
  67. ->limit($data['pageSize'])
  68. ->offset(($data['page'] - 1) * $data['pageSize'])
  69. ->get();
  70. }
  71. $startTime = strtotime($data['starttime']);
  72. $endTime = strtotime($data['endtime']);
  73. $time = ($endTime - $startTime) / (24 * 60 * 60);
  74. $roundedValue = round($time, 2);
  75. $days = number_format($roundedValue, 2, '.', '');
  76. $count = count($rep);
  77. $data = [
  78. 'rows' => $rep->toArray(),
  79. 'count' => $count,
  80. 'days' => $days,
  81. ];
  82. if (empty($data['rows'])) {
  83. return Result::error("暂时没有符合您条件的广告位");
  84. }
  85. return Result::success($data);
  86. }
  87. /**
  88. * 添加订单
  89. * @param
  90. * @return void
  91. */
  92. public function addOrder(array $data): array
  93. {
  94. $ads = Ad::whereIn($data['id'])
  95. ->leftJoin('ad_place', 'ad.pid', 'ad_place.id')
  96. ->leftJoin("article_data", "article.id", "article_data.article_id")
  97. ->select("ad_place.*", "ad.*")
  98. ->orderBy("ad.id", "desc")
  99. ->limit($data['pageSize'])
  100. ->offset(($data['page'] - 1) * $data['pageSize'])->get();
  101. $count = Ad::whereIn($data['id'])->count();
  102. $data = [
  103. 'rows' => $ads->toArray(),
  104. 'count' => $count,
  105. ];
  106. if (empty($rep)) {
  107. return Result::error("没有信息数据");
  108. }
  109. return Result::success($data);
  110. }
  111. /**
  112. * 获取订单列表
  113. * @param
  114. * @return void
  115. */
  116. public function getOrderListAdmin(array $data): array
  117. {
  118. // 获取分页参数,默认每页 10 条记录
  119. $page = isset($data['page']) ? (int) $data['page'] : 1;
  120. $perPage = isset($data['pagesize']) ? (int) $data['pagesize'] : 10;
  121. // 构建查询条件
  122. $where = [
  123. 'order.status' => $data['status'], // 明确指定 order 表的 status 列
  124. ];
  125. // 添加订单号查询条件
  126. if (!empty($data['order_num'])) {
  127. $where['order.order_num'] = $data['order_num']; // 明确指定 order 表的 order_num 列
  128. }
  129. // 处理时间范围查询
  130. $start = $data['sttime'];
  131. $end = $data['edtime'];
  132. // 查询数据并分页
  133. $query = Order::where($where)
  134. ->when(!empty($start) && !empty($end), function ($q) use ($start, $end) {
  135. $q->whereBetween('order.fromtime', [$start, $end]); // 明确指定 order 表的 fromtime 列
  136. })
  137. ->when(!empty($start), function ($q) use ($start) {
  138. $q->where('order.fromtime', '>=', $start); // 明确指定 order 表的 fromtime 列
  139. })
  140. ->when(!empty($end), function ($q) use ($end) {
  141. $q->where('order.totime', '<=', $end); // 明确指定 order 表的 totime 列
  142. })
  143. ->leftJoin('user as admin_user', 'order.admin_user_id', '=', 'admin_user.id')
  144. ->leftJoin('user as user', 'order.user_id', '=', 'user.id')
  145. ->select(
  146. 'order.*',
  147. 'admin_user.user_name as admin_user_name',
  148. 'user.user_name as user_name'
  149. )
  150. ->orderBy('order.id');
  151. // 执行分页查询
  152. $result = $query->paginate($perPage, ['*'], 'page', $page);
  153. // 返回分页结果
  154. return Result::success([
  155. 'count' => $result->total(),
  156. 'current_page' => $result->currentPage(),
  157. 'last_page' => $result->lastPage(),
  158. 'pagesize' => $result->perPage(),
  159. 'rows' => $result->items(),
  160. ]);
  161. }
  162. /**
  163. * 获取订单详情
  164. * @param
  165. * @return void
  166. */
  167. public function getOrderDetailAdmin(array $data): array
  168. {
  169. $order = Order::where('order.id', $data['id'])
  170. ->leftJoin('user as admin_user', 'order.admin_user_id', '=', 'admin_user.id')
  171. ->leftJoin('user as user', 'order.user_id', '=', 'user.id')
  172. ->select(
  173. 'order.*',
  174. 'admin_user.user_name as admin_user_name',
  175. 'user.user_name as user_name'
  176. )->first();
  177. if (empty($order)) {
  178. return Result::error("没有信息数据");
  179. }
  180. $pid = $order['id'];
  181. $ad = OrderAd::where('order_id', $pid)->get();
  182. $order['ad'] = $ad;
  183. return Result::success($order);
  184. }
  185. /**
  186. * 修改订单价格
  187. * @param
  188. * @return void
  189. */
  190. public function editPriceOrderAdmin(array $data): array
  191. {
  192. $order = Order::where('id', $data['id'])->first();
  193. if (empty($order)) {
  194. return Result::error("没有信息数据");
  195. }
  196. $order->price = $data['price'];
  197. $order->save();
  198. return Result::success($order);
  199. }
  200. /**
  201. *拒绝订单
  202. * @param
  203. * @return void
  204. */
  205. public function rejectOrderAdmin(array $data): array
  206. {
  207. $order = Order::where('id', $data['id'])->first();
  208. if (empty($order)) {
  209. return Result::error("没有信息数据");
  210. }
  211. Db::beginTransaction();
  212. try {
  213. $order->status = 2; //订单状态:1:通过;2:驳回;3:撤回;4:修改;5:过期;6:待审核;7:结束
  214. $order->ad_status = 2;
  215. $order->reason = $data['reason'];
  216. $order->bhtime = date('Y-m-d H:i:s');
  217. $order->save();
  218. OrderAd::where('order_id', $data['id'])
  219. ->update(['status' => 2]);
  220. Db::commit();
  221. } catch (\Exception $e) {
  222. Db::rollBack();
  223. return Result::error("操作失败");
  224. }
  225. return Result::success($order);
  226. }
  227. /**
  228. * 结束订单
  229. * @param
  230. * @return void
  231. */
  232. public function endOrderAdmin(array $data): array
  233. {
  234. $order = Order::where('id', $data['id'])->first();
  235. if (empty($order)) {
  236. return Result::error("没有信息数据");
  237. }
  238. Db::beginTransaction();
  239. try {
  240. $order->status = 7;
  241. $order->jstime = date('Y-m-d H:i:s');
  242. $order->save();
  243. // 获取 order_ad 表中的记录
  244. $orderAds = OrderAd::where('order_id', $data['id'])
  245. ->update(['status' => 7]);
  246. // 在ad表中删除相同pid的数据
  247. Ad::where('order_id', $data['id'])->delete();
  248. Db::commit();
  249. } catch (\Exception $e) {
  250. Db::rollBack();
  251. return Result::error("操作失败" . $e->getMessage());
  252. }
  253. return Result::success($order);
  254. }
  255. /**
  256. * 删除订单
  257. * @param
  258. * @return void
  259. */
  260. public function delOrderAdmin(array $data): array
  261. {
  262. // 获取订单信息
  263. $order = Order::where('id', $data['id'])->first();
  264. if (empty($order)) {
  265. return Result::error("没有信息数据");
  266. }
  267. Db::beginTransaction();
  268. try {
  269. // 获取 order_ad 表中的记录
  270. OrderAd::where('order_id', $data['id'])->delete();
  271. // 删除 ad 表中的记录
  272. Ad::where('order_id', $data['id'])->delete();
  273. // 提交事务
  274. Db::commit();
  275. } catch (\Exception $e) {
  276. // 回滚事务
  277. Db::rollBack();
  278. // 返回错误信息
  279. return Result::error($e->getMessage());
  280. }
  281. // 返回成功信息
  282. return Result::success("删除成功");
  283. }
  284. /**
  285. * 审核订单
  286. * @param
  287. * @return void
  288. */
  289. public function applyOrderStatusAdmin(array $data): array
  290. {
  291. $order = Order::where('id', $data['id'])
  292. ->where('status', 6)
  293. ->first();
  294. if (empty($order)) {
  295. return Result::error("没有信息数据");
  296. }
  297. Db::beginTransaction();
  298. try {
  299. $order->status = 1;
  300. //判断是否在周期范围内
  301. $ad_status = 8; // 待生效
  302. if ($order->starttime < date('Y-m-d H:i:s') && date('Y-m-d H:i:s') < $order->endtime) {
  303. // 条件满足时的逻辑
  304. $ad_status = 1;
  305. }
  306. $order->ad_status = 1;
  307. $order->shtime = date('Y-m-d H:i:s');
  308. $order->save();
  309. // 批量更新 order_ad 表中的状态
  310. OrderAd::where('order_id', $data['id'])
  311. ->where('status', 6)
  312. ->update(['status' => 1]);
  313. //判断的当前时间是否在订单的开始时间之后,并且小于等于订单的结束时间
  314. if (time() >= strtotime($order->sttime) && time() < strtotime($order->edtime)) {
  315. $ad_status = 1; //审核生效
  316. } else {
  317. $ad_status = 2; //审核
  318. }
  319. $ads = [];
  320. $orderAds = OrderAd::where('order_id', $data['id'])->get();
  321. foreach ($orderAds as $orderAd) {
  322. $ads[] = [
  323. 'name' => $orderAd->name,
  324. 'pid' => $orderAd->pid,
  325. 'areaid' => $orderAd->areaid,
  326. 'amount' => $orderAd->amount,
  327. 'introduce' => $orderAd->introduce,
  328. 'hits' => $orderAd->hits,
  329. 'admin_user_id' => $orderAd->admin_user_id,
  330. 'fromtime' => $orderAd->fromtime,
  331. 'totime' => $orderAd->totime,
  332. 'text_name' => $orderAd->text_name,
  333. 'text_url' => $orderAd->text_url,
  334. 'text_title' => $orderAd->text_title,
  335. 'image_src' => $orderAd->image_src,
  336. 'image_url' => $orderAd->image_url,
  337. 'image_alt' => $orderAd->image_alt,
  338. 'video_src' => $orderAd->video_src,
  339. 'video_url' => $orderAd->video_url,
  340. 'video_auto' => $orderAd->video_auto,
  341. 'video_loop' => $orderAd->video_loop,
  342. 'status' => $ad_status,
  343. 'order_id' => $orderAd->order_id,
  344. ];
  345. }
  346. Ad::insert($ads);
  347. Db::commit();
  348. } catch (\Exception $e) {
  349. Db::rollBack();
  350. return Result::error($e->getMessage());
  351. }
  352. return Result::success($order);
  353. }
  354. /*
  355.  * 根据用户条件及网站搜索没有广告的广告位
  356.  * @param
  357.  * @return void
  358. */
  359. public function getWebsiteAd(array $data): array
  360. {
  361. $where = [
  362. 'ad_place.width' => $data['width'],
  363. 'ad_place.height' => $data['height'],
  364. ];
  365. $start = Carbon::parse($data['starttime']);
  366. $end = Carbon::parse($data['endtime']);
  367. $status = [
  368. 0 => '1',
  369. 1 => '4',
  370. 2 => '6',
  371. ];
  372. //订单状态:1:通过;2:驳回;3:撤回;4:修改;5:过期;6:待审核;7:结束
  373. $ads = Ad::where('fromtime', '<=', $start)->where('totime', '>=', $end)->select('pid')->get()->all();
  374. $orderads = OrderAd::where('fromtime', '<=', $start)->where('totime', '>=', $end)->whereIn('status', $status)->select('pid')->get()->all();
  375. $pids = array_merge($ads, $orderads);
  376. $ad_pids = array_unique($pids);
  377. //$ad_pids=所有与用户提交的时间有冲突的广告位pid
  378. if (!empty($ad_pids)) {
  379. $pid = [];
  380. foreach ($ad_pids as $val) {
  381. array_push($pid, $val['pid']);
  382. }
  383. $placeids = AdPlace::whereNotIn('id', $pid)->where($where)->select('id', 'website_id')->get()->all();
  384. //去掉时间冲突并且符合图片尺寸的广告位
  385. if (!isset($data['website_id'])) {
  386. $website_id = [];
  387. foreach ($placeids as $v) {
  388. array_push($website_id, $v['website_id']);
  389. }
  390. $rep = Website::whereIn('id', $website_id)->get();
  391. //若不存在网站id参数直接返回符合条件的广告位相关联的网站名称
  392. } else {
  393. $place_id = [];
  394. foreach ($placeids as $val) {
  395. array_push($place_id, $val['id']);
  396. }
  397. $rep = AdPlace::where($where)
  398. ->whereIn('ad_place.id', $place_id)
  399. ->where('ad_place.website_id', $data['website_id'])
  400. ->leftJoin('website', 'ad_place.website_id', 'website.id')
  401. ->select('ad_place.*', 'website.website_name', 'website.id')
  402. ->selectSub('website.id', 'webid')
  403. ->selectSub('ad_place.id', 'pid')
  404. ->orderBy("website.id", "asc")
  405. ->limit($data['pageSize'])
  406. ->offset(($data['page'] - 1) * $data['pageSize'])
  407. ->get();
  408. //若存在网站id,关联查询是需要添加website_id条件查询
  409. }
  410. } else {
  411. //若不存在有时间冲突的广告位则所有符合图片尺寸的广告位皆可以使用,只需要判断是否存在网站id参数即可
  412. if (isset($data['website_id'])) {
  413. $rep = AdPlace::where($where)
  414. ->where('ad_place.website_id', $data['website_id'])
  415. ->leftJoin('website', 'ad_place.website_id', 'website.id')
  416. ->select('ad_place.*', 'website.website_name', 'website.id')
  417. ->selectSub('website.id', 'webid')
  418. ->selectSub('ad_place.id', 'pid')
  419. ->orderBy("website.id", "asc")
  420. ->limit($data['pageSize'])
  421. ->offset(($data['page'] - 1) * $data['pageSize'])
  422. ->get();
  423. } else {
  424. $place_all = AdPlace::where($where)->select('website_id')->get()->all();
  425. $place_allads = [];
  426. foreach ($place_all as $v) {
  427. array_push($place_allads, $v['website_id']);
  428. }
  429. $rep = Website::whereIn('id', $place_allads)->get();
  430. }
  431. }
  432. if (empty($rep)) {
  433. return Result::error("暂时没有符合您条件的广告位");
  434. }
  435. $startTime = strtotime($data['starttime']);
  436. $endTime = strtotime($data['endtime']);
  437. $time = ($endTime - $startTime) / (24 * 60 * 60);
  438. $roundedValue = round($time, 2);
  439. $days = number_format($roundedValue, 2, '.', '');
  440. $count = count($rep);
  441. $result['days'] = $days;
  442. $result = [
  443. 'rows' => $rep->toArray(),
  444. 'count' => $count,
  445. ];
  446. return Result::success($result);
  447. }
  448. /**
  449.  * 添加广告订单
  450.  * @param
  451.  * @return void
  452. */
  453. public function addAD(array $data): array
  454. {
  455. date_default_timezone_set('Asia/Shanghai');
  456. $time = time();
  457. $startTime = strtotime($data['starttime']);
  458. $endTime = strtotime($data['endtime']);
  459. $con_time = ($endTime - $startTime) / (24 * 60 * 60);
  460. $roundedValue = round($con_time, 2);
  461. $days = number_format($roundedValue, 2, '.', '');
  462. $timestamp = date('YmdHis', $time);
  463. $catetime = date('Y-m-d H:i:s', $time);
  464. $randomNumber = mt_rand(1000, 9999);
  465. $ordernum = $randomNumber . $timestamp; // 时间戳与随机数拼接
  466. // var_dump(($time));
  467. Db::beginTransaction();
  468. try {
  469. $order = [
  470. 'order_num' => $ordernum,
  471. 'sttime' => $data['starttime'],
  472. 'edtime' => $data['endtime'],
  473. 'user_id' => $data['user_id'],
  474. 'cttime' => $catetime,
  475. 'height' => $data['height'],
  476. 'width' => $data['width'],
  477. 'days' => $days,
  478. 'created_at' => date('Y-m-d H:i:s', time()),
  479. 'updated_at' => date('Y-m-d H:i:s', time()),
  480. ];
  481. $orderid = Order::insertGetId($order);
  482. $adplace = $data['pid'];
  483. if (is_array($data['pid'])) {
  484. $adplace = AdPlace::whereIn('id', $data['pid'])->select('website_id', 'id')->get();
  485. foreach ($adplace as $key => $ads) {
  486. $order_ad[$key] = [
  487. 'order_id' => $orderid,
  488. 'order_num' => $ordernum,
  489. 'name' => $data['name'],
  490. 'fromtime' => $data['starttime'],
  491. 'totime' => $data['endtime'],
  492. 'image_src' => $data['imgsrc'],
  493. 'image_url' => $data['imgurl'],
  494. 'pid' => $ads['id'],
  495. 'website_id' => $ads['website_id'],
  496. ];
  497. // $log = [
  498. // 'order_id' => $orderid,
  499. // 'user_id' => $data['user_id'],
  500. // 'pid' => $ads['id'],
  501. // 'website_id' => $ads['website_id'],
  502. // 'action' => '添加',
  503. // 'time' => $catetime
  504. // ];
  505. }
  506. } else {
  507. $order_ad = [
  508. 'order_id' => $orderid,
  509. 'order_num' => $ordernum,
  510. 'name' => $data['name'],
  511. 'website_id' => $adplace['website_id'],
  512. 'fromtime' => $data['starttime'],
  513. 'totime' => $data['endtime'],
  514. 'image_src' => $data['imgsrc'],
  515. 'image_url' => $data['imgurl'],
  516. 'pid' => $adplace,
  517. 'created_at' => date('Y-m-d H:i:s', time()),
  518. 'updated_at' => date('Y-m-d H:i:s', time()),
  519. ];
  520. // $log = [
  521. // 'order_id' => $orderid,
  522. // 'user_id' => $data['user_id'],
  523. // 'pid' => $adplace,
  524. // 'website_id' => $ads['website_id'],
  525. // 'action' => '添加',
  526. // 'time' => $catetime
  527. // ];
  528. }
  529. $orderad_id = OrderAd::insert($order_ad);
  530. Db::commit();
  531. } catch (\Exception $e) {
  532. Db::rollBack();
  533. return Result::error($e->getMessage());
  534. }
  535. // $log = AdLog::insert($log);
  536. $result = [
  537. 'order_id' => $orderid,
  538. 'orderad_id' => $orderad_id,
  539. 'name' => $data['name'],
  540. '$ordernum' => $ordernum,
  541. ];
  542. return Result::success($result);
  543. }
  544. /**
  545.  * 获取订单列表
  546.  * @param
  547.  * @return void
  548. */
  549. public function getOrderList(array $data): array
  550. {
  551. $where = [
  552. 'user_id' => $data['user_id'],
  553. 'user_del' => 2,
  554. ];
  555. if (isset($data['status'])) {
  556. $where['status'] = $data['status'];
  557. }
  558. $orders = Order::where($where)
  559. ->orderBy("id", "asc")
  560. ->limit($data['pageSize'])
  561. ->offset(($data['page'] - 1) * $data['pageSize'])
  562. ->get();
  563. if (empty($orders)) {
  564. return Result::error("您暂时还没有下单");
  565. } else {
  566. $count = count($orders);
  567. $data = [
  568. 'rows' => $orders->toArray(),
  569. 'count' => $count,
  570. ];
  571. }
  572. return Result::success($data);
  573. }
  574. /**
  575.  * 获取订单详情
  576.  * @param
  577.  * @return void
  578. */
  579. public function getOrderDetail(array $data): array
  580. {
  581. $order = Order::where('id', $data['order_id'])->first();
  582. $orderads = OrderAd::where('order_ad.order_id', $data['order_id'])
  583. ->leftJoin('website', 'order_ad.website_id', 'website.id')
  584. ->select('order_ad.*', 'website.website_name', 'website.id')
  585. ->selectSub('website.id', 'webid')
  586. ->selectSub('order_ad.id', 'oid')
  587. ->orderBy("website.id", "asc")
  588. ->limit($data['pageSize'])
  589. ->offset(($data['page'] - 1) * $data['pageSize'])
  590. ->get();
  591. if (empty($order)) {
  592. return Result::error("订单id错误");
  593. }
  594. $result = [
  595. 'order' => $order,
  596. 'orderads' => $orderads,
  597. ];
  598. return Result::success($result);
  599. }
  600. /**
  601.  * 撤回订单
  602.  * @param
  603.  * @return void
  604. */
  605. public function cancelOrder(array $data): array
  606. {
  607. date_default_timezone_set('Asia/Shanghai');
  608. $time = time();
  609. $timestamp = date('YmdHis', $time);
  610. Db::beginTransaction();
  611. try {
  612. $order = Order::where('id', $data['order_id'])->where('status', 6)->where('sttime', '>=', $timestamp)->update(['status' => 3, 'ad_status' => '3']);
  613. $ads = OrderAd::where('order_id', $data['order_id'])->where('status', 6)->where('fromtime', '>=', $timestamp)->update(['status' => 3]);
  614. Db::commit();
  615. } catch (\Exception $e) {
  616. Db::rollBack();
  617. return Result::error($e->getMessage());
  618. }
  619. $result = [
  620. 'order' => $order,
  621. 'ads' => $ads,
  622. ];
  623. return Result::success($result);
  624. }
  625. /**
  626.  * 删除订单
  627.  * @param
  628.  * @return void
  629. */
  630. public function delOrderAD(array $data): array
  631. {
  632. $data['status'] = [
  633. 0 => 2,
  634. 1 => 3,
  635. 2 => 5,
  636. 3 => 7,
  637. ];
  638. //1:通过;2:驳回;3:撤回;4:修改;5:过期;6:待审核;7:结束;
  639. date_default_timezone_set('Asia/Shanghai');
  640. $time = time();
  641. $timestamp = date('YmdHis', $time);
  642. $where = [
  643. ['user_id', '=', $data['user_id']],
  644. ['id', '=', $data['order_id']],
  645. ];
  646. $time = [['edtime', '<=', $timestamp]];
  647. $order = Order::where($where)->where($time)->update(['user_del' => 1]);
  648. if (empty($order)) {
  649. $order = Order::where($where)->whereIn('status', $data['status'])->update(['user_del' => 1]);
  650. }
  651. //
  652. if ($order == 0) {
  653. return Result::error("订单id错误");
  654. }
  655. return Result::success($order);
  656. }
  657. }