文件
mashangyoujiu/Application/Make/Business/MakeOrder.class.php

228 行
7.6 KiB
PHP
可执行文件

<?php
namespace Make\Business;
use Common\Business\Export;
use Common\Model\RetailStoreModel;
use Make\Model\MakeOrderModel;
/**
* 配送订单类
* Class MakeOrder
* [
* 下载压缩包 downloadZip
* 生成导出文件 createExportFile
* 配送订单记录 orderRecord
* ]
* @package Make\Business
*/
class MakeOrder
{
/**
* 下载压缩包
* @param $param
*/
public function downloadZip($param)
{
$ExportClass = new Export();
$directory_name = I('get.directory_name');
if (is_dir($directory_name)) {
$zip = new \ZipArchive();
$dir = ltrim($directory_name, './');
$arr = explode('/', $dir);
unset($arr[count($arr) - 1]);
$zipName = implode('/', $arr);
$name = "码科订单导出";
$zip_url = './' . $zipName . '/' . $name . date('Y-m-d_H_i_s') . '.zip';
if ($zip->open($zip_url, \ZipArchive::CREATE) === TRUE) {
$ExportClass->addFileToZip($dir, $zip, $name); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
$zip->close(); //关闭处理的zip文件
if (!file_exists($zip_url)) { //判断文件是否存在
echo "文件不存在";
exit();
}
$file = fopen($zip_url, "r");
Header("Content-type:application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . filesize($zip_url));
header("Content-Disposition: attachment; filename={$name}" . date('Y-m-d_H:i:s') . ".zip");
echo fread($file, filesize($zip_url));
fclose($file);
$ExportClass->delDirFile($directory_name); //删除文件夹下的所有文件
rmdir($directory_name); //删除当前文件夹
unlink($zip_url); //删除压缩包
}
} else {
echo '文件不存在';
}
}
/**
* 生成导出文件
* @param $param
* @return mixed
* @throws \PHPExcel_Exception
* @throws \PHPExcel_Reader_Exception
* @throws \PHPExcel_Writer_Exception
*/
public function createExportFile($param)
{
$page = $param['page'] ? $param['page'] : 1;
$limit = $param['limit'] ? $param['limit'] : 10;
$orderResult = $this->orderRecord($param);
$data = $orderResult['data']['list'] ? $orderResult['data']['list'] : [];
$directory_name = $param['directory_name'];
$filename = "码科订单导出";
$headArr = array(
array('id', 'ID'),
array('bill_order_number', '门店订单'),
array('order_number', '码科订单'),
array('storetag', '门店名称'),
array('rider_name', '骑手姓名'),
array('rider_mobile', '骑手手机号'),
array('distance', '配送距离'),
array('total_price', '配送费'),
array('accept_time', '接单时间'),
array('complete_time', '送达时间'),
array('status_name', ' 状态')
);
$str = $filename . ' 表格生成时间:' . date('Y-m-d H:i:s');
if (empty($directory_name)) {
$directory_name = "./Uploads/MakeExport/{$param['merchant_id']}/";
}
$parameter = [
'expTitle'=>$filename,
'expCellName'=>$headArr,
'expTableData'=>$data,
'common'=>$str,
'directory_name'=>$directory_name,
'page'=>$page,
];
$ExportClass = new Export();
$result = $ExportClass->generateXLS($parameter);
$res = array(
'status' => 1,
'type' => 1,
'directory_name' => $result['directory_name'],
'msg' => '请继续生成文件'
);
if(count($data) < $limit){
$res['type'] = 2;
$res['msg'] = '数据生成完毕';
}
return callBack(statusCode()['success'], $res['msg'], $res);
}
/**
* 配送订单记录
* @param $param
* [
* merchant_id
* store_id
* ]
* @return mixed
*/
public function orderRecord($param)
{
$page = $param['page'];
$limit = $param['limit'];
$where = $this->orderRecordTerm($param);
try {
$MakeOrderModel = new MakeOrderModel();
$list = $MakeOrderModel->getSelect($where, '*', 'id desc', $page . ',' . $limit);
} catch (\Exception $e) {
return [];
}
if (!empty($list)) {
$count = $MakeOrderModel->getCount($where);
$StoreModel = new RetailStoreModel();
foreach ($list as $key => &$val) {
$val['index'] = $key + 1;
if (!empty($val['accept_time'])) {
$val['accept_time'] = date('Y-m-d H:i:s', $val['accept_time']);
}
if (!empty($val['complete_time'])) {
$val['complete_time'] = date('Y-m-d H:i:s', $val['complete_time']);
}
switch ($val['status']) {
case 'cancel':
$val['status_name'] = '订单已取消';
break;
case 'payed':
$val['status_name'] = '待接单';
break;
case 'accepted':
$val['status_name'] = '待取件';
break;
case 'geted':
$val['status_name'] = '配送中';
break;
case 'gotoed':
$val['status_name'] = '已完成';
break;
case 'completed':
$val['status_name'] = '已完成';
break;
}
$val['storetag'] = $StoreModel->getFindField([
'id' => $val['store_id']
], 'storetag');
}
}
return callBack(statusCode()['success'], "查询成功", ['list' => $list, 'count' => $count ? $count : 0]);
}
/**
* 配送订单记录的查询条件
* @param $param
* [
* merchant_id
* store_id
* add_time
* status
* order_number
* ]
* @return mixed
*/
public function orderRecordTerm($param)
{
if (!empty($param['add_time'])) {
$start_time = strtotime($param['add_time'][0]);
$end_time = strtotime($param['add_time'][1]);
$where['add_time'] = ['between', [$start_time, $end_time]];
}
if (!empty($param['status'])) {
switch ($param['status']) {
case 1:
$where['status'] = 'payed';
break;
case 2:
$where['status'] = 'accepted';
break;
case 3:
$where['status'] = 'geted';
break;
case 4:
$where['status'] = ['in', 'gotoed, completed'];
break;
case 5:
$where['status'] = 'cancel';
break;
}
}
if (!empty($param['order_number'])) {
$where['bill_order_number'] = $param['order_number'];
}
if (!empty($param['store_id'])) {
$where['store_id'] = $param['store_id'];
}
$where['merchant_id'] = $param['merchant_id'];
return $where;
}
}