OrderService.php 27 KB

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