getList('全部退款订单列表','refund',$shop_id,$search); } /** * 待退款订单列表 */ public function refund10_list($shop_id = 0, string $search='') { return $this->getList('待退款订单列表','refund10',$shop_id,$search); } /** * 已退款订单列表 */ public function refund20_list($shop_id = 0, string $search='') { return $this->getList('已退款订单列表','refund20',$shop_id,$search); } /** * 待收款订单列表 */ public function collection_list($shop_id = 0, string $search='') { return $this->getList('待收款订单列表','collection',$shop_id,$search); } /** * 待接单订单列表 */ public function shop_list($shop_id = 0, string $search='') { return $this->getList('待接单订单列表','shop',$shop_id,$search); } /** * 待发货订单列表 */ public function delivery_list($shop_id = 0, string $search='') { return $this->getList('待发货订单列表','delivery',$shop_id,$search); } /** * 待收货订单列表 */ public function receipt_list($shop_id = 0, string $search='') { return $this->getList('待收货订单列表','receipt',$shop_id,$search); } /** * 已完成订单列表 */ public function complete_list($shop_id = 0, string $search='') { return $this->getList('已完成订单列表','complete',$shop_id,$search); } /** * 被取消订单列表 */ public function cancel_list($shop_id = 0, string $search='') { return $this->getList('被取消订单列表','cancel',$shop_id,$search); } /** * 全部订单列表 */ public function all_list($shop_id = 0, string $search='') { return $this->getList('全部订单列表','all',$shop_id,$search); } /** * 订单列表 */ private function getList(string $title, string $dataType, $shop_id, string $search = '') { if($this->shop_mode == 10){ $shop_id = $this->shop_id; } $model = new ShopModel; $category = $model->getList(false); $model = new OrderModel; $list = $model->getList($dataType,$shop_id,0,$search); return View::fetch('index', compact('title','list','category','shop_id','search')); } /** * 订单详情 */ public function detail($id) { $detail = OrderModel::detail($id); $model = new ShopClerkModel; $clerk = $model->getAll($detail['shop_id']); $dv = new Delivery(); $company = $dv->company(); return View::fetch('detail', compact('detail','clerk','company')); } /** * 确认接单 */ public function shop($id) { $model = OrderModel::detail($id); if ($model->setShopStatus()) { return $this->renderSuccess('操作完成'); } $error = $model->getError() ?: '操作失败'; return $this->renderError($error); } /** * 设置外卖配送状态 */ public function deliveryStatus($id) { $model = OrderModel::detail($id); if ($model->setDeliveryStatus($this->postData('data'))) { return $this->renderSuccess('操作完成'); } $error = $model->getError() ?: '操作失败'; return $this->renderError($error); } /** * 确认发货 */ public function delivery($id) { $model = OrderModel::detail($id); $delivery = $this->postData('data'); !isset($delivery['shop_clerk_id']) && $delivery['shop_clerk_id'] = ''; if ($model->setDelivery($delivery['company'],$delivery['shop_clerk_id'])) { return $this->renderSuccess('操作完成'); } $error = $model->getError() ?: '操作失败'; return $this->renderError($error); } /** * 退款操作 */ public function refund($id) { $refund = $this->postData('data'); $model = OrderModel::detail($id); if ($model->refund($refund['is_refund'])) { return $this->renderSuccess('操作成功'); } $error = $model->getError() ?: '操作失败'; return $this->renderError($error); } /** * 确认收到用户付款 */ public function collection($id) { $model = OrderModel::detail($id); if ($model->collection()) { return $this->renderSuccess('操作成功'); } $error = $model->getError() ?: '操作失败'; return $this->renderError($error); } /** * 重打订单 */ public function prints($id) { $model = OrderModel::detail($id); if (Device::print($model)) { return $this->renderSuccess('操作成功'); } return $this->renderError('操作失败'); } /** * 导出订单 */ public function export_order() { $data = $this->postData('data'); $star = strtotime($data['star'].' 00:00:00'); $end = strtotime($data['end'].' 23:59:59'); $filter = []; $data['shop_id'] > 0 && $filter['shop_id'] = $data['shop_id']; $model = new OrderModel; $list = $model->with(['goods' => ['image', 'spec', 'goods'], 'address', 'shop', 'table','delivery']) ->where('create_time','>',$star) ->where('create_time','<',$end) ->where($filter) ->select(); # 实例化 Spreadsheet 对象 $spreadsheet = new Spreadsheet(); # 获取活动工作薄 $sheet = $spreadsheet->getActiveSheet(); //文字左右居中对齐 $styleArray = [ 'alignment' => [ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, ], ]; //黑色边框 $borderStyleArray = [ 'borders' => [ 'allBorders' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN//细边框 ], ], ]; $values = Setting::getItem('other',$this->applet_id); if($values['order_export'] == 'col'){ //设置单元格宽度 $sheet->getColumnDimension('A')->setWidth(8); $sheet->getColumnDimension('B')->setWidth(30); $sheet->getColumnDimension('C')->setWidth(8); $sheet->getColumnDimension('D')->setWidth(8); $sheet->getColumnDimension('E')->setWidth(8); $n = 0; foreach ($list as $vo) { $n++; $sheet->mergeCells('A'.$n.':E'.$n); //合并单元格 $sheet->getCell('A'.$n)->setValue($vo['shop']['shop_name'] . '(' . $vo['order_status']['text'] . ')'); $sheet->getStyle('A'.$n)->getFont()->setBold(true)->setSize(14);//字体加粗字号14 $sheet->getStyle('A'.$n)->applyFromArray($styleArray);//水平居中 $sheet->getRowDimension($n)->setRowHeight(30);//设置行高30 $n++; $x = $n; $sheet->mergeCells('A'.$n.':E'.$n); $sheet->getCell('A'.$n)->setValue('单号:'.$vo['order_no'].' 时间:' . $vo['create_time']); $n++; $sheet->mergeCells('A'.$n.':E'.$n); $title = $vo['source']['text'] . ' # '; if($vo['order_mode']['value']==10){ if($vo['table_id'] == 0){ $title .= '堂食'.$vo['row_no'].'号'; }else{ $title .= '堂食'.$vo['table']['table_name']; } } if($vo['order_mode']['value']==20){ $title .= '外卖'.$vo['row_no'].'号'; } if($vo['order_mode']['value']==30){ $title .= '外带'.$vo['row_no'].'号 - ' . $vo['arrive_time']['text']; } $sheet->getCell('A'.$n)->setValue($title); $n++; $sheet->setCellValue('A'.$n,'编号'); $sheet->setCellValue('B'.$n,'商品'); $sheet->setCellValue('C'.$n,'单价'); $sheet->setCellValue('D'.$n,'数量'); $sheet->setCellValue('E'.$n,'退单'); $sheet->getStyle('A'.$n.':E'.$n)->getFont()->setBold(true); $y = $n; $num = 0;//商品列表编号 foreach ($vo['goods'] as $goods) { $n++; $num++; $sheet->setCellValue('A'.$n,$num); if(empty($goods['goods_attr'])){ $name = $goods['goods_name']; }else{ $name = $goods['goods_name'] . '/' . $goods['goods_attr']; } $sheet->setCellValue('B'.$n,$name); $sheet->setCellValue('C'.$n,$goods['goods_price']); $sheet->setCellValue('D'.$n,$goods['total_num']); $sheet->setCellValue('E'.$n,$goods['refund_num']); } $sheet->getStyle('A'.$y.':E'.$n)->applyFromArray($styleArray); $n++; $sheet->mergeCells('A'.$n.':E'.$n); $sheet->getCell('A'.$n)->setValue('顾客留言:'.$vo['message']); $n++; $sheet->mergeCells('A'.$n.':E'.$n); if($vo['order_mode']['value']==20){ $title = '地址:' . $vo['address']['district'] . ' ' . $vo['address']['detail'] . ' ' . $vo['address']['name'] . ' ' .$vo['address']['phone']; }else{ $title = '用户:' . $vo['user']['nickname'] . ' ID:' . $vo['user']['user_id']; } $sheet->getCell('A'.$n)->setValue($title); $n++; $sheet->mergeCells('A'.$n.':E'.$n); $sheet->getCell('A'.$n)->setValue('付款状态:'.$vo['pay_status']['text'].' 应付金额:¥' . $vo['pay_price']); $sheet->getStyle('A'.$x.':E'.$n)->applyFromArray($borderStyleArray); } }else{ //设置单元格宽度 $sheet->getColumnDimension('A')->setWidth(16); $sheet->getColumnDimension('B')->setWidth(17); $sheet->getColumnDimension('C')->setWidth(12); $sheet->getColumnDimension('D')->setWidth(29); $sheet->getColumnDimension('E')->setWidth(5); $sheet->getColumnDimension('F')->setWidth(16); $sheet->getColumnDimension('G')->setWidth(5); $sheet->getColumnDimension('H')->setWidth(5); $sheet->getColumnDimension('I')->setWidth(5); $sheet->getColumnDimension('J')->setWidth(10); $sheet->getColumnDimension('K')->setWidth(10); $sheet->getColumnDimension('L')->setWidth(15); $sheet->getColumnDimension('M')->setWidth(40); $sheet->mergeCells('E1:I1'); //合并单元格 $sheet->setCellValue('A1','订单编号'); $sheet->setCellValue('B1','下单时间'); $sheet->setCellValue('C1','门店名称'); $sheet->setCellValue('D1','订单类型'); $sheet->setCellValue('E1','商品信息'); $sheet->setCellValue('J1','付款状态'); $sheet->setCellValue('K1','订单状态'); $sheet->setCellValue('L1','客户备注'); $sheet->setCellValue('M1','用户信息'); $sheet->getStyle('A1:M1')->getFont()->setBold(true);//字体加粗 $sheet->getStyle('A1:M1')->applyFromArray($styleArray);//水平居中 $n = 1; //表格行数 foreach ($list as $vo) { $n++; $sheet->getCell('A'.$n)->setValue((string)$vo['order_no']); $sheet->getCell('B'.$n)->setValue($vo['create_time']); $sheet->getCell('C'.$n)->setValue($vo['shop']['shop_name']); if($vo['order_mode']['value']==10){ if($vo['table_id'] == 0){ $title = '堂食'.$vo['row_no'].'号'; }else{ $title = '堂食'.$vo['table']['table_name']; } } if($vo['order_mode']['value']==20){ $title = '外卖'.$vo['row_no'].'号'; } if($vo['order_mode']['value']==30){ $title = '外带'.$vo['row_no'].'号 - ' . $vo['arrive_time']['text']; } $sheet->getCell('D'.$n)->setValue($title); $sheet->getCell('E'.$n)->setValue('编号'); $sheet->getCell('F'.$n)->setValue('名称'); $sheet->getCell('G'.$n)->setValue('单价'); $sheet->getCell('H'.$n)->setValue('数量'); $sheet->getCell('I'.$n)->setValue('退单'); $sheet->getCell('J'.$n)->setValue($vo['pay_status']['text']); $sheet->getCell('K'.$n)->setValue($vo['order_status']['text']); $sheet->getCell('L'.$n)->setValue($vo['message']); if($vo['order_mode']['value']==20){ $user = '地址:' . $vo['address']['district'] . ' ' . $vo['address']['detail'] . ' ' . $vo['address']['name'] . ' ' .$vo['address']['phone']; }else{ $user = '用户:' . $vo['user']['nickname'] . ' ID:' . $vo['user']['user_id']; } $sheet->getCell('M'.$n)->setValue($user); $sheet->getStyle('A'.$n.':M'.$n)->applyFromArray($styleArray);//水平居中 $sheet->getStyle('A'.$n.':M'.$n)->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);//垂直居中 $s = $n; //合并开始位置 $num = 0; //编号 foreach ($vo['goods'] as $goods) { $n++; $num++; $sheet->setCellValue('E'.$n,$num); if(empty($goods['goods_attr'])){ $name = $goods['goods_name']; }else{ $name = $goods['goods_name'] . '/' . $goods['goods_attr']; } $sheet->setCellValue('F'.$n,$name); $sheet->setCellValue('G'.$n,$goods['goods_price']); $sheet->setCellValue('H'.$n,$goods['total_num']); $sheet->setCellValue('I'.$n,$goods['refund_num']); $sheet->getStyle('E'.$n.':I'.$n)->applyFromArray($styleArray);//水平居中 } $sheet->mergeCells('A'.$s.':A'.$n); //合并单元格 $sheet->mergeCells('B'.$s.':B'.$n); //合并单元格 $sheet->mergeCells('C'.$s.':C'.$n); //合并单元格 $sheet->mergeCells('D'.$s.':D'.$n); //合并单元格 $sheet->mergeCells('J'.$s.':J'.$n); //合并单元格 $sheet->mergeCells('K'.$s.':K'.$n); //合并单元格 $sheet->mergeCells('L'.$s.':L'.$n); //合并单元格 $sheet->mergeCells('M'.$s.':M'.$n); //合并单元格 } $sheet->getStyle('A1:M'.$n)->applyFromArray($borderStyleArray); } # Xlsx类 将电子表格保存到文件 $writer = new Xlsx($spreadsheet); $file_name = $data['star'] . '-' .$data['end'] .'.xls'; //$writer->save('temp/' . $file_name);//保存在本地 // 客户端文件下载 header('Content-Type:application/vnd.ms-excel'); header('Content-Disposition:attachment;filename='.$file_name); header('Cache-Control:max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls'); $writer->save('php://output'); } }