OrderService.php 27 KB

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