Order.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 订单管理
  7. */
  8. namespace app\fastshop\controller;
  9. use app\common\controller\Manage;
  10. class Order extends Manage{
  11. public function initialize() {
  12. parent::initialize();
  13. if(!model('auth')->getAuth($this->user->id,2)){
  14. $this->error('无权限,你非【订单管理员】');
  15. }
  16. $this->assign('pathMaps',[['name'=>'订单管理','url'=>url("fastshop/order/index")]]);
  17. }
  18. /**
  19. * 订单列表
  20. */
  21. public function index(){
  22. $starttime = empty(input('get.starttime')) ? 0 : strtotime(input('get.starttime/s'));
  23. $endtime = empty(input('get.endtime')) ? 0 : strtotime(input('get.endtime/s'));
  24. if(!empty($starttime) && !empty($endtime)){
  25. if($starttime > $endtime){
  26. $this->error('开始日期不能大于结束日期');
  27. }
  28. if($endtime-$starttime >= 518401){
  29. $this->error('只支持连续6天的查找');
  30. }
  31. $starttime = strtotime(date('Y-m-d 00:00:00',$starttime));
  32. $endtime = strtotime(date('Y-m-d 23:59:59',$endtime));
  33. }
  34. $view['keyword'] = input('get.keyword');
  35. $view['status'] = input('status/d');
  36. $path[] = ['name'=>'订单管理','url'=>url("fastshop/order/index")];
  37. switch ($view['status']) {
  38. case 1:
  39. $condition = [['paid_at','=',0],['is_del','=',0]];
  40. $path[] = ['name'=>'未付款','url'=>'javascript:;'];
  41. break;
  42. case 2:
  43. $condition = [['paid_at','=',1],['is_del','=',0]];
  44. $path[] = ['name'=>'已付款','url'=>'javascript:;'];
  45. break;
  46. case 3:
  47. $condition = [['paid_at','=',1],['express_status','=',1],['is_del','=',0]];
  48. $path[] = ['name'=>'已发货','url'=>'javascript:;'];
  49. break;
  50. case 4:
  51. $condition = [['is_del','=',1]];
  52. $path[] = ['name'=>'回收站','url'=>'javascript:;'];
  53. break;
  54. case 5:
  55. $condition = [['status','=',1],['is_del','=',0]];
  56. $path[] = ['name'=>'已结单','url'=>'javascript:;'];
  57. break;
  58. case 6:
  59. $condition = [['paid_at','=',1],['is_del','=',0],['express_status','=',0],['is_entrust','=',1]];
  60. $path[] = ['name'=>'已确认','url'=>'javascript:;'];
  61. break;
  62. case 7:
  63. $condition = [['paid_at','=',1],['is_del','=',0],['express_status','=',0],['is_entrust','=',0]];
  64. $path[] = ['name'=>'未确认','url'=>'javascript:;'];
  65. break;
  66. default:
  67. $condition = [['is_del','=',0]];
  68. break;
  69. }
  70. if(!empty($view['keyword'])){
  71. $condition = [['fastshop_order.order_no','=',trim($view['keyword'])]];
  72. }
  73. $condition[] = ['fastshop_order.member_miniapp_id','=',$this->member_miniapp_id];
  74. $view['lists'] = model('Order')->getOrderList($condition,$view['status']);
  75. $view['order'] = model('Order')->order_data($view['lists']->toArray()['data']);
  76. $view['starttime'] = empty($starttime) ? time() : $starttime;
  77. $view['endtime'] = empty($endtime) ? time() : $endtime;;
  78. $view['pathMaps'] = $path;
  79. return view()->assign($view);
  80. }
  81. /**
  82. * 导出Excel
  83. * @return void
  84. */
  85. public function excel(){
  86. $status = input('status/d');
  87. switch ($status) {
  88. case 1:
  89. $condition = [['paid_at','=',0],['is_del','=',0]];
  90. $path[] = ['name'=>'未付款','url'=>'javascript:;'];
  91. break;
  92. case 2:
  93. $condition = [['paid_at','=',1],['is_del','=',0]];
  94. $path[] = ['name'=>'已付款','url'=>'javascript:;'];
  95. break;
  96. case 3:
  97. $condition = [['paid_at','=',1],['express_status','=',1],['is_del','=',0]];
  98. $path[] = ['name'=>'已发货','url'=>'javascript:;'];
  99. break;
  100. case 4:
  101. $condition = [['is_del','=',1]];
  102. $path[] = ['name'=>'回收站','url'=>'javascript:;'];
  103. break;
  104. case 5:
  105. $condition = [['status','=',1],['is_del','=',0]];
  106. $path[] = ['name'=>'已结单','url'=>'javascript:;'];
  107. break;
  108. case 6:
  109. $condition = [['paid_at','=',1],['is_del','=',0],['express_status','=',0],['is_entrust','=',1]];
  110. $path[] = ['name'=>'已确认','url'=>'javascript:;'];
  111. break;
  112. case 7:
  113. $condition = [['paid_at','=',1],['is_del','=',0],['express_status','=',0],['is_entrust','=',0]];
  114. $path[] = ['name'=>'未确认','url'=>'javascript:;'];
  115. break;
  116. default:
  117. $condition = [['is_del','=',0]];
  118. break;
  119. }
  120. $starttime = strtotime(input('get.starttime/s'));
  121. $endtime = strtotime(input('get.endtime/s'));
  122. if(empty($starttime) || empty($endtime)){
  123. $this->error('没有输入导出范围');
  124. }else{
  125. $starttime = strtotime(date('Y-m-d 00:00:00',$starttime));
  126. $endtime = strtotime(date('Y-m-d 23:59:59',$endtime));
  127. $condition[] = ['order_starttime','>=',$starttime];
  128. $condition[] = ['order_starttime','<=',$endtime];
  129. }
  130. if(input('?get.keyword')){
  131. $condition = [['fastshop_order.order_no','=',trim(input('get.keyword','','htmlspecialchars'))]];
  132. }
  133. $condition[] = ['fastshop_order.member_miniapp_id','=',$this->member_miniapp_id];
  134. header("Content-type: text/plain");
  135. header("Accept-Ranges: bytes");
  136. header("Content-type:application/vnd.ms-excel");
  137. header("Content-Disposition:attachment;filename=order_".date('Y-m-d').".xls");
  138. header("Pragma: no-cache");
  139. header("Expires: 0");
  140. $view['lists'] = model('Order')->getOrderListNopage($condition,$status);
  141. $view['order'] = model('Order')->order_data($view['lists']->toArray());
  142. return view()->assign($view);
  143. }
  144. /**
  145. * 订单预览
  146. */
  147. public function view($order_no){
  148. $view['order'] = model('Order')->getOrder($order_no,0,0);
  149. return view()->assign($view);
  150. }
  151. /**
  152. * 发货
  153. */
  154. public function sendgoods(){
  155. if(request()->isAjax()){
  156. $data = [
  157. 'order_no' => input('post.order_no/d'),
  158. 'express_company' => input('post.express_company/s'),
  159. 'express_no' => trim(input('post.express_no/s')),
  160. ];
  161. $validate = $this->validate($data,'Order.sendgoods');
  162. if(true !== $validate){
  163. return json(['code'=>0,'msg'=>$validate]);
  164. }
  165. //判断当前商品是否完成
  166. $result = model('Order')->where(['paid_at' => 1,'order_no' => $data['order_no']])->where('is_entrust','>',0)->find();
  167. if(empty($result)){
  168. return json(['code'=>0,'msg'=>'商品没有满足发货条件']);
  169. }
  170. $data['express_company'] = trim($data['express_company']);
  171. $data['express_no'] = trim($data['express_no']);
  172. $data['express_status'] = 1;
  173. $data['express_starttime'] = time();
  174. $rel = model('Order')->save($data,['paid_at' => 1,'order_no' => $data['order_no']]);
  175. if($rel){
  176. return json(['code'=>200,'data' => ['url' => url('fastshop/order/view',['order_no'=>$data['order_no']])],'msg'=>'操作成功']);
  177. }else{
  178. return json(['code'=>0,'msg'=>'操作失败']);
  179. }
  180. }else{
  181. $order_no = input('get.order_no');
  182. $view['order'] = model('Order')->getOrder($order_no);
  183. if(empty($view['order'])){
  184. $this->error("404 NOT FOUND");
  185. }
  186. $view['order_no'] = $order_no;
  187. return view()->assign($view);
  188. }
  189. }
  190. /**
  191. * 后台人工修改订单为已发货
  192. */
  193. public function paid(int $order_no){
  194. $data['paid_at'] = 1;
  195. $data['payment_id'] = 0;
  196. $data['order_starttime'] = time();
  197. $data['paid_no'] = 'GM'.order_no();
  198. $result = model('Order')->update($data,['paid_at' => 0,'order_no' => $order_no]);
  199. if($result){
  200. return json(['code'=>200,'data' => ['url' => url('fastshop/order/view',['order_no' => $order_no])],'msg'=>'操作成功']);
  201. }else{
  202. return json(['code'=>0,'msg'=>'操作失败']);
  203. }
  204. }
  205. /**
  206. * 删除
  207. */
  208. public function delete($order_no){
  209. $status = input('status/d');
  210. $rel = model('Order')->where(['order_no' => $order_no])->find();
  211. if($rel){
  212. if($rel['is_del'] == 0){
  213. $result = model('Order')->update(['is_del'=>1],['order_no' => $order_no]);
  214. }else{
  215. $result = model('Order')->where(['order_no' => $order_no])->delete();
  216. if($result){
  217. model('OrderCache')->where(['order_no' => $order_no])->delete();
  218. }
  219. }
  220. if($result){
  221. return json(['code'=>200,'data' => ['url' => url('fastshop/order/index',['status' => $status])],'msg'=>'操作成功']);
  222. }
  223. }
  224. return json(['code'=>0,'msg'=>'操作失败']);
  225. }
  226. /**
  227. * 清空回收站
  228. */
  229. public function alldelete(){
  230. $status = input('status/d');
  231. $rel = model('Order')->where(['is_del'=>1])->select();
  232. if($rel){
  233. foreach ($rel as $key => $value) {
  234. model('Order')->where(['order_no' => $value['order_no']])->delete();
  235. model('OrderCache')->where(['order_no' => $value['order_no']])->delete();
  236. }
  237. return json(['code'=>200,'data' => ['url' => url('fastshop/order/index',['status' => $status])],'msg'=>'操作成功']);
  238. }
  239. return json(['code'=>0,'msg'=>'操作失败']);
  240. }
  241. /**
  242. * 确认收货
  243. */
  244. public function completion($order_no){
  245. $result = model('Order')->update(['status'=>1],['express_status'=>1,'order_no' => $order_no]);
  246. if($result){
  247. return json(['code'=>200,'data' => ['url' => url('fastshop/order/view',['order_no' => $order_no])],'msg'=>'操作成功']);
  248. }else{
  249. return json(['code'=>0,'msg'=>'操作失败']);
  250. }
  251. }
  252. /**
  253. * 订单完成
  254. */
  255. public function force_completion($order_no){
  256. $status = input('status/d');
  257. $result = model('Order')->update(['status'=>1],['order_no' => $order_no]);
  258. if($result){
  259. return json(['code'=>200,'data' => ['url' => url('fastshop/order/index',['status' => $status])],'msg'=>'操作成功']);
  260. }else{
  261. return json(['code'=>0,'msg'=>'操作失败']);
  262. }
  263. }
  264. }