OrderService.php 26 KB

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