OrderService.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <?php
  2. namespace App\JsonRpc;
  3. use App\Model\Ad;
  4. use App\Model\AdPlace;
  5. use App\Model\Order;
  6. use App\Model\OrderAd;
  7. use App\Tools\Result;
  8. use Hyperf\RpcServer\Annotation\RpcService;
  9. use Carbon\Carbon;
  10. use Hamcrest\Arrays\IsArray;
  11. use DateTime;
  12. use DateInterval;
  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. // $ads = [];
  24. // $orderads = [];
  25. $where = [
  26. 'ad_place.width' => $data['width'],
  27. 'ad_place.height' => $data['height']
  28. ];
  29. $start=Carbon::parse($data['starttime']);
  30. $end=Carbon::parse($data['endtime']);
  31. $status = [
  32. 0=>'1',
  33. 1=>'4',
  34. 2=>'6'
  35. ];
  36. $ads = Ad::where('fromtime','<=',$start)->where('totime','>=',$end)->select('pid')->get()->all();
  37. $orderads = OrderAd::where('fromtime','<=',$start)->where('totime','>=',$end)->whereIn('status',$status)->select('pid')->get()->all();
  38. $pids = array_merge($ads, $orderads);
  39. $ad_pids = array_unique($pids);
  40. // $ad_pid = [1,2,3];
  41. if(!empty($ad_pids)){
  42. $pid = [];
  43. foreach($ad_pids as $val){
  44. array_push($pid,$val['pid']);
  45. }
  46. $placeids = AdPlace::whereNotIn('id',$pid)->where($where)->select('id')->get()->all();
  47. $place_id = [];
  48. foreach($placeids as $val){
  49. array_push($place_id,$val['id']);
  50. }
  51. $rep = AdPlace::whereIn('ad_place.id',$place_id)
  52. ->leftJoin('website','ad_place.website_id','website.id')
  53. ->select('ad_place.*','website.website_name','website.id')
  54. ->selectSub('website.id', 'webid')
  55. ->selectSub('ad_place.id', 'pid')
  56. ->orderBy("website.id","asc")
  57. ->limit($data['pageSize'])
  58. ->offset(($data['page']-1)*$data['pageSize'])
  59. ->get();
  60. }else{
  61. $rep = AdPlace::where($where)
  62. ->leftJoin('website','ad_place.website_id','website.id')
  63. ->select('ad_place.*','website.website_name','website.id')
  64. ->selectSub('website.id', 'webid')
  65. ->selectSub('ad_place.id', 'pid')
  66. ->orderBy("website.id","asc")
  67. ->limit($data['pageSize'])
  68. ->offset(($data['page']-1)*$data['pageSize'])
  69. ->get();
  70. }
  71. $count = count($rep);
  72. $data = [
  73. 'rows'=>$rep->toArray(),
  74. 'count'=>$count
  75. ];
  76. if(empty($rep)){
  77. return Result::error("暂时没有符合您条件的广告位");
  78. }
  79. return Result::success($rep);
  80. }
  81. /**
  82.  * 添加广告订单
  83.  * @param
  84.  * @return void
  85. */
  86. public function addAD(array $data): array
  87. {
  88. date_default_timezone_set('Asia/Shanghai');
  89. $time = time();
  90. $timestamp = date('YmdHis',$time);
  91. $catetime = date('Y-m-d H:i:s',$time);
  92. $randomNumber = mt_rand(1000, 9999);
  93. $ordernum = $randomNumber . $timestamp; // 时间戳与随机数拼接
  94. // var_dump(($time));
  95. $order = [
  96. 'order_num' => $ordernum,
  97. 'sttime' => $data['starttime'],
  98. 'edtime' => $data['endtime'],
  99. 'user_id' => $data['user_id'],
  100. 'cttime' => $catetime,
  101. 'height' => $data['height'],
  102. 'width' => $data['width']
  103. ];
  104. $orderid = Order::insertGetId($order);
  105. $adplace = $data['pid'];
  106. if(is_array($data['pid'])){
  107. $adplace = AdPlace::whereIn('id',$data['pid'])->select('website_id','id')->get();
  108. foreach($adplace as $key => $ads){
  109. $order_ad[$key] = [
  110. 'order_id' => $orderid,
  111. 'order_num' => $ordernum,
  112. 'name' => $data['name'],
  113. 'fromtime' => $data['starttime'],
  114. 'totime' => $data['endtime'],
  115. 'image_src' => $data['imgsrc'],
  116. 'image_url' => $data['imgurl'],
  117. 'pid' => $ads['id'],
  118. 'website_id' => $ads['website_id']
  119. ];
  120. // $log = [
  121. // 'order_id' => $orderid,
  122. // 'user_id' => $data['user_id'],
  123. // 'pid' => $ads['id'],
  124. // 'website_id' => $ads['website_id'],
  125. // 'action' => '添加',
  126. // 'time' => $catetime
  127. // ];
  128. }
  129. }else{
  130. $order_ad = [
  131. 'order_id' => $orderid,
  132. 'order_num' => $ordernum,
  133. 'name' => $data['name'],
  134. 'website_id' => $adplace['website_id'],
  135. 'fromtime' => $data['starttime'],
  136. 'totime' => $data['endtime'],
  137. 'image_src' => $data['imgsrc'],
  138. 'image_url' => $data['imgurl'],
  139. 'pid' => $adplace
  140. ];
  141. // $log = [
  142. // 'order_id' => $orderid,
  143. // 'user_id' => $data['user_id'],
  144. // 'pid' => $ads['id'],
  145. // 'website_id' => $ads['website_id'],
  146. // 'action' => '添加',
  147. // 'time' => $catetime
  148. // ];
  149. }
  150. $orderad_id = OrderAd::insert($order_ad);
  151. // $log = AdLog::insert($log);
  152. if(empty($orderid) || !$orderad_id){
  153. return Result::error("添加失败");
  154. }
  155. $result = [
  156. 'order_id' => $orderid,
  157. 'orderad_id' => $orderad_id,
  158. 'name' => $data['name'],
  159. 'name' => $data['name'],
  160. ];
  161. return Result::success($result);
  162. }
  163. /**
  164.  * 获取订单列表
  165.  * @param
  166.  * @return void
  167. */
  168. public function getOrderList(array $data): array
  169. {
  170. $where = [
  171. 'user_id' => $data['user_id'],
  172. 'user_del' => 2
  173. ];
  174. if(isset($data['status'])){
  175. $where['status'] = $data['status'];
  176. }
  177. $orders = Order::where($where)
  178. ->orderBy("id","asc")
  179. ->limit($data['pageSize'])
  180. ->offset(($data['page']-1)*$data['pageSize'])
  181. ->get();
  182. if(empty($orders)){
  183. return Result::error("您暂时还没有下单");
  184. }else{
  185. foreach($orders as $key => $order){
  186. $startTime = strtotime($order['sttime']);
  187. $endTime = strtotime($order['edtime']);
  188. $days = ($endTime - $startTime)/(24 * 60 * 60);
  189. $orders[$key]['days'] = $days;
  190. }
  191. $count = count($orders);
  192. $data = [
  193. 'rows'=>$orders->toArray(),
  194. 'count'=>$count
  195. ];
  196. }
  197. return Result::success($data);
  198. }
  199. /**
  200.  * 获取订单详情
  201.  * @param
  202.  * @return void
  203. */
  204. public function getOrderDetail(array $data): array
  205. {
  206. $order = Order::where('id',$data['order_id'])->first();
  207. $startTime = strtotime($order['sttime']);
  208. $endTime = strtotime($order['edtime']);
  209. $days = ($endTime - $startTime)/(24 * 60 * 60);
  210. $order['days'] = $days;
  211. $orderads = OrderAd::where('order_ad.order_id',$data['order_id'])
  212. ->leftJoin('website','order_ad.website_id','website.id')
  213. ->select('order_ad.*','website.website_name','website.id')
  214. ->selectSub('website.id', 'webid')
  215. ->selectSub('order_ad.id', 'oid')
  216. ->orderBy("website.id","asc")
  217. ->limit($data['pageSize'])
  218. ->offset(($data['page']-1)*$data['pageSize'])
  219. ->get();
  220. if(empty($order)){
  221. return Result::error("订单id错误");
  222. }
  223. $result = [
  224. 'order' => $order,
  225. 'orderads' => $orderads
  226. ];
  227. return Result::success($result);
  228. }
  229. /**
  230.  * 撤回订单
  231.  * @param
  232.  * @return void
  233. */
  234. public function cancelOrder(array $data): array
  235. {
  236. date_default_timezone_set('Asia/Shanghai');
  237. $time = time();
  238. $timestamp = date('YmdHis',$time);
  239. $time = ['edtime','>=',$timestamp];
  240. $order = Order::where('id',$data['order_id'])->where('status',6)->where('edtime','<=',$timestamp)->update(['status' => 3]);
  241. $ads = OrderAd::where('order_id',$data['order_id'])->where('status',6)->where('totime','<=',$timestamp)->update(['status' => 3]);
  242. if(!$order || !$ads){
  243. return Result::error("订单id错误");
  244. }
  245. $result = [
  246. 'order' => $order,
  247. 'ads' => $ads
  248. ];
  249. return Result::success($result);
  250. }
  251. /**
  252.  * 删除订单
  253.  * @param
  254.  * @return void
  255. */
  256. public function delOrderAD(array $data): array
  257. {
  258. $data['status'] = [
  259. 0 => 2,
  260. 1 => 3
  261. ];
  262. date_default_timezone_set('Asia/Shanghai');
  263. $time = time();
  264. $timestamp = date('YmdHis',$time);
  265. $where = [
  266. ['user_id','=',$data['user_id']],
  267. ['id','=',$data['order_id']]
  268. ];
  269. $time = [['edtime','<=',$timestamp]];
  270. $order = Order::where($where)->where($time)->update(['user_del' => 1]);
  271. if(empty($order)){
  272. $order = Order::where($where)->whereIn('status',$data['status'])->update(['user_del' => 1]);
  273. }
  274. //
  275. if($order == 0){
  276. return Result::error("订单id错误");
  277. }
  278. return Result::success($order);
  279. }
  280. }