test_service d3170b4d1c 1
2023-12-01 15:43:29 +08:00

410 lines
17 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\store\controller\food;
use app\store\controller\food\Controller;
use app\store\model\food\Order as OrderModel;
use app\store\model\food\ShopClerk as ShopClerkModel;
use app\store\model\food\Shop as ShopModel;
use app\store\model\food\Setting;
use app\store\model\food\Device;
use think\facade\View;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use hema\delivery\Driver as Delivery;
/**
* 订单管理
*/
class Order extends Controller
{
/**
* 全部退款订单列表
*/
public function refund_list($shop_id = 0, string $search='')
{
return $this->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');
}
}