Pond.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <?php
  2. namespace app\api\controller;
  3. use app\admin\model\Method;
  4. use app\admin\model\method\Time;
  5. use app\admin\model\Order;
  6. use app\admin\model\Ordercode;
  7. use app\admin\model\Orderitem;
  8. use app\admin\model\Pingjia;
  9. use app\api\model\OrderCodeWriteOffLog;
  10. use app\common\controller\Api;
  11. class Pond extends Api
  12. {
  13. protected $noNeedLogin = [];
  14. protected $noNeedRight = ['*'];
  15. public function order_list()
  16. {
  17. $order_model = new Order();
  18. $order_item_model = new Orderitem();
  19. $status = input('status', 0);
  20. $stand_time = input('stand_time');
  21. $end_time = input('end_time');
  22. $phone = input('phone');
  23. $yutang_id = input('yutang_id');
  24. $type = input('type');
  25. $moshi = input('moshi');
  26. //订单状态:1=待支付,2=待核销,3=进行中,4=待评价,5=已完成,6=退款中,7=已退款,8=已取消
  27. switch ($status) {
  28. case 0:
  29. $array = [0, 1, 2, 3, 4, 5, 6, 7, 8];
  30. break;
  31. case 1:
  32. $array = [1];
  33. break;
  34. case 2:
  35. $array = [2];
  36. break;
  37. case 3:
  38. $array = [3];
  39. break;
  40. case 4:
  41. $array = [4];
  42. break;
  43. case 5:
  44. $array = [6, 7];
  45. break;
  46. case 6:
  47. $array = [8];
  48. break;
  49. }
  50. $where = [];
  51. if ($stand_time && $end_time) {
  52. $where['create_time'] = ['between', [strtotime($stand_time), strtotime($end_time)]];
  53. }
  54. if ($yutang_id) {
  55. $where['yutang_id'] = ['=', $yutang_id];
  56. }
  57. if ($type) {
  58. $where['type'] = ['=', $type];
  59. }
  60. if ($moshi) {
  61. $where['moshi'] = ['=', $moshi];
  62. }
  63. if ($phone) {
  64. $where['phone'] = ['=', $phone];
  65. }
  66. $list = $order_model->where('t_user_id', $this->auth->id)->whereIn('status', $array)->where($where)->order('id', 'desc')->paginate();
  67. foreach ($list as &$v) {
  68. $v['item'] = $order_item_model->where('order_id', $v['id'])->select();
  69. if ($v['status'] == 3) {
  70. $time = strtotime($v['end']) - strtotime(date("H:i"));
  71. if ($time <= 1800) {
  72. $v['time'] = $time;
  73. }
  74. }
  75. }
  76. $this->success('我的订单列表', $list);
  77. }
  78. public function order_detail()
  79. {
  80. $order_id = input('order_id');
  81. $order_model = new Order();
  82. $order_item = new Orderitem();
  83. $order_code = new Ordercode();
  84. $pingjia_model = new Pingjia();
  85. $order_info = $order_model->where('id', $order_id)->find();
  86. if (empty($order_info)) {
  87. $this->error('订单信息有误');
  88. }
  89. if ($order_info['status']) {
  90. $order_info['time'] = $order_info['create_time'] + 30 * 60 - time();
  91. }
  92. $order_info['item'] = $order_item->where('order_id', $order_id)->select();
  93. $order_info['code'] = $order_code->where('order_id', $order_id)->select();
  94. $order_info['pingjia'] = $pingjia_model->where('user_id', $order_info['user_id'])->where('yutang_id', $order_info['yutang_id'])->find();
  95. $this->success('订单详情', $order_info);
  96. }
  97. public function method_log()
  98. {
  99. $user_id = $this->auth->id;
  100. $user = (new \app\admin\model\User())->where('id', $user_id)->find();
  101. if ($user->pid != 0) {
  102. $user_ids = [$user_id];
  103. } else {
  104. $users = (new \app\admin\model\User())->where('pid', $user_id)->field('id')->select();
  105. $user_ids = array_merge([$user_id], array_column($users, 'id'));
  106. }
  107. $query = (new OrderCodeWriteOffLog())->with(['order' => function ($query) {
  108. $query->with('method');
  109. }])->whereIn('user_id', $user_ids)->order('id', 'desc');
  110. // 1是今日2是全部
  111. if (input('type', 1)) {
  112. $query->whereBetween('write_off_time', [date('Y-m-d OO:00:00'), date('Y-m-d 23:59:59')]);
  113. }
  114. $list = array_map(function ($item) {
  115. return $item->order->method;
  116. }, $query->limit(30)->group('order_id')->select());
  117. $this->success('我的发布', $list);
  118. }
  119. public function write_log()
  120. {
  121. $method_id = input('method_id');
  122. $type = input('type', '1');
  123. if ($type == 1) {
  124. $where['ruchang_status'] = ['=', 2];
  125. }
  126. if ($type == 2) {
  127. $where['wucan_status'] = ['=', 2];
  128. }
  129. if ($type == 3) {
  130. $where['yajin_status'] = ['=', 2];
  131. }
  132. $method_model = new Method();
  133. $item_model = new Time();
  134. $order_code_model = new Ordercode();
  135. $method_info = $method_model->where('id', $method_id)->find();
  136. $time_list = $item_model->where('m_id', $method_id)->select();
  137. foreach ($time_list as &$v) {
  138. $v['show_image'] = $method_info['show_images'];
  139. $v['yutang_name'] = $method_info['yutang_name'];
  140. $v['moshi'] = $method_info['moshi'];
  141. $v['m_type'] = $method_info['type'];
  142. $v['date'] = date('Y-m-d');
  143. $v['count'] = $order_code_model->where('time_id', $v['id'])->where($where)->count();
  144. }
  145. $this->success('核销时间段', $time_list);
  146. }
  147. public function write_list()
  148. {
  149. $method_model = new Method();
  150. $item_model = new Time();
  151. $order_code_model = new Ordercode();
  152. $time_id = input('time_id');
  153. $type = input('type', '1');
  154. if ($type == 1) {
  155. $where['ruchang_status'] = ['=', 2];
  156. }
  157. if ($type == 2) {
  158. $where['wucan_status'] = ['=', 2];
  159. }
  160. if ($type == 3) {
  161. $where['yajin_status'] = ['=', 2];
  162. }
  163. $time_info = $item_model->where('id', $time_id)->find();
  164. $time_info['desc'] = $method_model->alias('m')->join('yutang y', 'y.id=m.yutang_id')->where('m.id', $time_info['m_id'])->field('m.yutang_name,m.type,m.moshi,y.image')->find();
  165. $time_info['code'] = $order_code_model->where('time_id', $time_id)->where($where)->order('ruchang_time desc')->paginate();
  166. $this->success('已核销信息', $time_info);
  167. }
  168. /**
  169. * 塘主-午餐通知
  170. * @ApiMethod (GET)
  171. * @ApiParams (name=method_id,type="int", required=true,description="玩法id")
  172. * @ApiReturn ({"code":1,"msg":"ok","time":"1680761053"})
  173. */
  174. public function lunch_tongzhi()
  175. {
  176. $method_id = input('method_id', 0);
  177. if ($method_id == 0) {
  178. $this->error('参数错误');
  179. }
  180. $order_model = new Order();
  181. $mobiles = $order_model->where('t_user_id', $this->auth->id)
  182. // ->where('wucan_money','>',0)
  183. ->where('method_id', $method_id)
  184. ->where('eat', 2)
  185. ->whereIn('status', '2,3')
  186. ->field('id,phone,user_id,yutang,image,auto_expire,huodong_time,pay_openid')->select();
  187. if (empty($mobiles)) {
  188. $this->error('没有就餐人员');
  189. }
  190. $user = (new \app\admin\model\User())->where('id', $this->auth->id)->find();
  191. if ($user->zhannei == 1) {
  192. $message_model = new \app\admin\model\Message();
  193. foreach ($mobiles as $val) {
  194. $to_time = time();
  195. if ($to_time < $val['auto_expire'] && date('Ymd', $val['huodong_time']) == date('Ymd')) {
  196. $message_data = [
  197. 'category_id' => 3,
  198. 'user_id' => $val->user_id,
  199. 'title' => '午餐通知',
  200. 'name' => $val->yutang,
  201. 'image' => $val->image,
  202. 'description' => $val->yutang . '通知您午餐开始了',
  203. 'is_read' => 0,
  204. 'createtime' => time(),
  205. ];
  206. $message_model->insert($message_data);
  207. }
  208. }
  209. }
  210. if ($user->duanxin == 1) {
  211. $order_ids = [];
  212. foreach ($mobiles as $val) {
  213. $to_time = time();
  214. if ($to_time < $val['auto_expire'] && date('Ymd', $val['huodong_time']) == date('Ymd')) {
  215. $order_ids[] = $val['id'];
  216. }
  217. }
  218. $orderCodes = (new Ordercode())->whereIn('order_id', $order_ids)->field('phone')->select();
  219. if (count($orderCodes) > $user->sms_number) {
  220. $this->error('短信数量不足');
  221. }
  222. if (count($orderCodes) > 0) {
  223. $user->sms_number -= count($orderCodes);
  224. $user->save();
  225. $sms = new Sms();
  226. $sms->wucna_tongzhi($orderCodes, $this->auth->id);
  227. }
  228. }
  229. // // 异步立即发送
  230. // \think\Queue::push('\app\job\OrderJob@lunchSubRun', [
  231. // 'order_list' => $mobiles,
  232. // ]);
  233. (new Method())->isUpdate(true)->save(['is_lunch_send' => 2], ['id' => $method_id]);
  234. $this->success('午餐通知已发出');
  235. }
  236. /**
  237. * 塘主-午餐列表
  238. * @ApiMethod (GET)
  239. * @ApiParams (name=limit,type="int", required=false,description="每页数量")
  240. * @ApiParams (name=page,type="int", required=false,description="页数")
  241. * @ApiParams (name=status,type="int", required=true,description="0=今日进行;1=未开始;2=已结束")
  242. * @ApiReturnParams (name="lunch_num", type="int", required=true, description="午餐订购数量")
  243. * @ApiReturnParams (name="is_lunch_send", type="int", required=true, description="午餐提醒1未发送 2 已发送")
  244. * @ApiReturn ({"code":1,"msg":"ok","time":"1680759306","data":{"total":2,"per_page":15,"current_page":1,"last_page":1,"data":[{"id":444,"type":1,"show_images":"http://yutang.zhousi.hdlkeji.com/uploads/20230327/83e103697d24ea91145083aa813f1f6c.png","yutang_name":"啦啦啦1","moshi":1,"lunch_num":0,"type_text":"Type 1","put_time_text":"","tuisong_text":""}]}})
  245. */
  246. public function lunch_list()
  247. {
  248. $page = input('page', 1);
  249. $limit = input('limit');
  250. $status = input('status', 0);
  251. $method_model = new Method();
  252. $query = $method_model->field('id,type,show_images,yutang_name,moshi,huodong_time,is_lunch_send');
  253. switch ($status) {
  254. case 0:
  255. $query = $query->where('huodong_time', date('Y-m-d', time()));
  256. break;
  257. case 1:
  258. $query = $query->where('huodong_time', '>', date('Y-m-d', time()));
  259. break;
  260. case 2:
  261. $query = $query->where('huodong_time', '<', date('Y-m-d', time()));
  262. break;
  263. }
  264. $list = $query->where('user_id', $this->auth->id)
  265. ->where('eat', 2)
  266. ->order('huodong_time', 'DESC')
  267. ->paginate($limit, false, ['page' => $page]);
  268. $order_model = new Order();
  269. foreach ($list as &$v) {
  270. $v['lunch_num'] = $order_model->where('method_id', $v['id'])->where('eat', 2)->sum('number');
  271. }
  272. $this->success('ok', $list);
  273. }
  274. /**
  275. * 塘主-午餐订单
  276. * @ApiMethod (GET)
  277. * @ApiParams (name=limit,type="int", required=false,description="每页数量")
  278. * @ApiParams (name=page,type="int", required=false,description="页数")
  279. * @ApiParams (name=method_id,type="int", required=true,description="玩法id")
  280. * @ApiReturnParams (name="lunch_num", type="int", required=true, description="午餐订购数量")
  281. * @ApiReturn ({"code":1,"msg":"ok","time":"1680761053","data":{"total":1,"per_page":15,"current_page":1,"last_page":1,"data":[{"id":710,"order_no":"40012420230406102824","create_time":1680748104,"user_id":"124","phone":"18206485031","number":1,"username":"u124","create_time_text":"2023-04-06 10:28:24","status_text":"","pay_time_text":"","reson_time_text":""}]}})
  282. */
  283. public function lunch_order()
  284. {
  285. $page = input('page', 1);
  286. $limit = input('limit');
  287. $method_id = input('method_id', 0);
  288. $order_model = new Order();
  289. $list = $order_model->with(['userN'])->field('id,order_no,create_time,user_id,phone,number')
  290. ->where('t_user_id', $this->auth->id)
  291. ->where('method_id', $method_id)
  292. ->where('eat', 2)
  293. ->order('id', 'DESC')
  294. ->paginate($limit, false, ['page' => $page]);
  295. $this->success('ok', $list);
  296. }
  297. }