OrderService.php 9.9 KB

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