OrderService.php 28 KB

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