2025-03-12 11:19:42 +08:00

329 lines
14 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\common\service\xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use Webman\Exception\BusinessException;
/**
* 订单出库
*/
class OrderOutbound
{
public function export($data,$order,$other_data)
{
$title='供 投 里 海 农 特 产 品 出 库 结 算 单';
$title2='供投里海农特产品出库结算单-';
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 合并单元格A1到K1
$sheet->mergeCells('A1:I1');
$sheet->mergeCells('D2:E2');
$sheet->mergeCells('H2:I2');
$sheet->mergeCells('G2:I2');
$sheet->mergeCells('H3:I3');
$sheet->setCellValue('A1', $title);
$sheet->setCellValue('A2', '姓名:');
$sheet->setCellValue('B2', $other_data->nickname??'');
$sheet->getColumnDimension('B')->setWidth(16);
$sheet->getColumnDimension('H')->setAutoSize(true);
$sheet->setCellValue('C2', '电话:');
$sheet->setCellValue('D2', $other_data->phone??'');
$sheet->setCellValue('F2', '订单编号:');
$sheet->setCellValue('G2', $order['order_id']??'');
$sheet->setCellValue('A3', '编号');
$sheet->setCellValue('B3', '品名');
$sheet->setCellValue('C3', '单位');
$sheet->setCellValue('D3', '净重(约)');
$sheet->setCellValue('E3', '数量');
$sheet->setCellValue('F3', '单价');
$sheet->setCellValue('G3', '金额');
$sheet->setCellValue('H3', '备注');
// 设置默认的单元格样式
$defaultStyle = [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
];
// 应用默认样式到整个工作表
$spreadsheet->getDefaultStyle()->applyFromArray($defaultStyle);
foreach ($data as $k => $v) {
$sheet->setCellValue('A' . ($k + 4), $v['product_id']);
$sheet->setCellValue('B' . ($k + 4), $v['store_name']);
$sheet->setCellValue('C' . ($k + 4), $v['unit_name']);
$sheet->setCellValue('D' . ($k + 4), $v['gross_weight']);
$sheet->setCellValue('E' . ($k + 4), $v['nums']);
$sheet->setCellValue('F' . ($k + 4), $v['price']);
$sheet->setCellValue('G' . ($k + 4), $v['total_price']);
$sheet->mergeCells('H' . ($k + 4) . ':I' . $k + 4);
$sheet->setCellValue('H' . ($k + 4), $v['mark']);
}
$count = count($data);
$sheet->setCellValue('A' . ($count + 4),'合计');
$sheet->setCellValue('B' . ($count + 4),$count);
$sheet->setCellValue('A' . ($count + 5),'累计接单:');
$sheet->setCellValue('C' . ($count + 5),'预收金额:');
$sheet->setCellValue('D' . ($count + 5),0);
$sheet->setCellValue('E' . ($count + 5),'预收押金:');
$sheet->setCellValue('G' . ($count + 5),'合计预收:');
$sheet->setCellValue('H' . ($count + 5),0);
$sheet->setCellValue('A' . ($count + 6),'出库合计:');
$sheet->setCellValue('C' . ($count + 6),'出库金额:');
$sheet->setCellValue('D' . ($count + 6),$order['pay_price']==0?$order['total_price']:$order['pay_price']);
$sheet->setCellValue('E' . ($count + 6),'实收押金:');
$sheet->setCellValue('G' . ($count + 6),'合计:');
$sheet->setCellValue('H' . ($count + 6),$order['pay_price']==0?$order['total_price']:$order['pay_price']);
$sheet->setCellValue('A' . ($count + 7),'应收:');
$sheet->setCellValue('B' . ($count + 7),$order['pay_price']==0?$order['total_price']:$order['pay_price']);
$sheet->setCellValue('C' . ($count + 7),'应退:');
$sheet->setCellValue('F' . ($count + 7),'门店:');
$sheet->mergeCells('G' . ($count + 7) . ':I' . $count + 7);
$sheet->setCellValue('G' . ($count + 7),$order['system_store_name']);
$sheet->mergeCells('B' . ($count + 8) . ':C' . $count + 8);
$sheet->setCellValue('A'. ($count + 8), '收货地址:');
$sheet->mergeCells('E' . ($count + 8) . ':F' . $count + 8);
$sheet->setCellValue('D'. ($count + 8), '下单时间:');
$sheet->setCellValue('E'. ($count + 8), $order['create_time']);
$sheet->setCellValue('G'. ($count + 8), '送货时间:');
$sheet->mergeCells('H' . ($count + 8) . ':I' . $count + 8);
$sheet->setCellValue('H'. ($count + 8), $other_data->arrival_time??'');
$sheet->setCellValue('B'. ($count + 8), $other_data->address??'');
$sheet->mergeCells('B' . ($count + 9) . ':E' . $count + 9);
$sheet->setCellValue('A' . $count + 9, '销售地址:',);
$sheet->setCellValue('B' . $count + 9, '泸州市海吉星农产品商贸物流园122栋',);
$sheet->setCellValue('F' . $count + 9, '电话:',);
$sheet->setCellValue('G' . $count + 9, '08302669767',);
$sheet->setCellValue('H' . $count + 9, '签收:',);
$sheet->mergeCells('A' . ($count + 10) . ':I' . ($count + 10));
$sheet->setCellValue('A' . ($count + 10), '退货政策说明:');
$sheet->mergeCells('A' . ($count + 11) . ':I' . ($count + 11));
$title3 = '1、冻货、生鲜、散装农产品等商品:由于此类商品是客户专项订购、无法重复销售,';
$sheet->setCellValue('A' . ($count + 11), $title3);
$sheet->mergeCells('A' . ($count + 12) . ':I' . ($count + 12));
$title3 ='一旦出库,恕不退换货,请务必在购买前确认商品信息及需求。';
$sheet->setCellValue('A' . ($count + 12), $title3);
$sheet->mergeCells('A' . ($count + 13) . ':I' . ($count + 13));
$title4 = '2、其余商品出库之日起10日内退货数量不得超过该商品购买数量的30%';
$sheet->setCellValue('A' . ($count + 13), $title4);
$sheet->mergeCells('A' . ($count + 14) . ':I' . ($count + 14));
$title4 = '上述要求旨在保障库存管理及商品周转的合理性。';
$sheet->setCellValue('A' . ($count + 14), $title4);
// 设置单元格的样式
$styleArray = [
'font' => [
'bold' => true,
'size' => 16,
],
];
$sheet->getStyle('A1')->applyFromArray($styleArray);
// 定义线框样式
$styleArray = [
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN, // 线框样式
'color' => ['argb' => '000000'], // 线框颜色
],
],
];
$sheet->getStyle('A1:I' . ($count + 14))->applyFromArray($styleArray);
// 保存文件到 public 下
$writer = new Xlsx($spreadsheet);
$dir=public_path().'/export/'.date('Y-m');
if (!file_exists($dir)) {
// 尝试创建目录
if (!mkdir($dir)) {
throw new BusinessException('创建目录失败:/export/' . date('Y-m'));
}
}
$file_path = $dir . '/' .$title2.date('Y-m-d H:i') . '.xlsx';
$url = '/export/' . date('Y-m') . '/' .$title2.date('Y-m-d H:i') . '.xlsx';
// 保存文件到 public 下
$writer->save($file_path);
return getenv('APP_URL').$url;
}
/**
* 无价格供货单
*/
public function exportWithoutPrice($data,$order,$other_data)
{
$title='供 投 里 海 农 特 产 品 出 库 供 货 单';
$title2='供投里海农特产品出库供货单-';
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 合并单元格
$sheet->mergeCells('A1:I1');
$sheet->mergeCells('D2:E2');
$sheet->mergeCells('G2:I2');
$sheet->mergeCells('F3:I3');
$sheet->setCellValue('A1', $title);
$sheet->setCellValue('A2', '姓名:');
$sheet->setCellValue('B2', $other_data->nickname??'');
$sheet->getColumnDimension('B')->setWidth(16);
$sheet->getColumnDimension('H')->setAutoSize(true);
$sheet->setCellValue('C2', '电话:');
$sheet->setCellValue('D2', $other_data->phone??'');
$sheet->setCellValue('F2', '订单编号:');
$sheet->setCellValue('G2', $order['order_id']??'');
$sheet->setCellValue('A3', '编号');
$sheet->setCellValue('B3', '品名');
$sheet->setCellValue('C3', '单位');
$sheet->setCellValue('D3', '净重(约)');
$sheet->setCellValue('E3', '数量');
$sheet->setCellValue('F3', '备注');
// 设置默认的单元格样式
$defaultStyle = [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
];
// 应用默认样式到整个工作表
$spreadsheet->getDefaultStyle()->applyFromArray($defaultStyle);
foreach ($data as $k => $v) {
$sheet->setCellValue('A' . ($k + 4), $v['product_id']);
$sheet->setCellValue('B' . ($k + 4), $v['store_name']);
$sheet->setCellValue('C' . ($k + 4), $v['unit_name']);
$sheet->setCellValue('D' . ($k + 4), $v['gross_weight']);
$sheet->setCellValue('E' . ($k + 4), $v['nums']);
$sheet->mergeCells('F' . ($k + 4) . ':I' . $k + 4);
$sheet->setCellValue('F' . ($k + 4), $v['mark']);
}
$count = count($data);
$sheet->setCellValue('A' . ($count + 4),'合计');
$sheet->setCellValue('B' . ($count + 4),$count);
$sheet->setCellValue('A' . ($count + 5),'累计接单:');
$sheet->setCellValue('C' . ($count + 5),'预收金额:');
$sheet->setCellValue('D' . ($count + 5),0);
$sheet->setCellValue('E' . ($count + 5),'预收押金:');
$sheet->setCellValue('G' . ($count + 5),'合计预收:');
$sheet->setCellValue('H' . ($count + 5),0);
$sheet->setCellValue('A' . ($count + 6),'出库合计:');
$sheet->setCellValue('C' . ($count + 6),'出库金额:');
$sheet->setCellValue('D' . ($count + 6),0);
$sheet->setCellValue('E' . ($count + 6),'实收押金:');
$sheet->setCellValue('G' . ($count + 6),'合计:');
$sheet->setCellValue('H' . ($count + 6),0);
$sheet->setCellValue('A' . ($count + 7),'应收:');
$sheet->setCellValue('B' . ($count + 7),0);
$sheet->setCellValue('C' . ($count + 7),'应退:');
$sheet->setCellValue('F' . ($count + 7),'门店:');
$sheet->mergeCells('G' . ($count + 7) . ':I' . $count + 7);
$sheet->setCellValue('G' . ($count + 7),$order['system_store_name']);
$sheet->mergeCells('B' . ($count + 8) . ':C' . $count + 8);
$sheet->setCellValue('A'. ($count + 8), '收货地址:');
$sheet->mergeCells('E' . ($count + 8) . ':F' . $count + 8);
$sheet->setCellValue('D'. ($count + 8), '下单时间:');
$sheet->setCellValue('E'. ($count + 8), $order['create_time']);
$sheet->setCellValue('G'. ($count + 8), '送货时间:');
$sheet->mergeCells('H' . ($count + 8) . ':I' . $count + 8);
$sheet->setCellValue('H'. ($count + 8), $other_data->arrival_time??'');
$sheet->setCellValue('B'. ($count + 8), $other_data->address??'');
$sheet->mergeCells('B' . ($count + 9) . ':E' . $count + 9);
$sheet->setCellValue('A' . $count + 9, '销售地址:',);
$sheet->setCellValue('B' . $count + 9, '泸州市海吉星农产品商贸物流园122栋',);
$sheet->setCellValue('F' . $count + 9, '电话:',);
$sheet->setCellValue('G' . $count + 9, '08302669767',);
$sheet->setCellValue('H' . $count + 9, '签收:',);
$sheet->mergeCells('A' . ($count + 10) . ':I' . ($count + 10));
$sheet->setCellValue('A' . ($count + 10), '退货政策说明:');
$sheet->mergeCells('A' . ($count + 11) . ':I' . ($count + 11));
$title3 = '1、冻货、生鲜、散装农产品等商品:由于此类商品是客户专项订购、无法重复销售,';
$sheet->setCellValue('A' . ($count + 11), $title3);
$sheet->mergeCells('A' . ($count + 12) . ':I' . ($count + 12));
$title3 ='一旦出库,恕不退换货,请务必在购买前确认商品信息及需求。';
$sheet->setCellValue('A' . ($count + 12), $title3);
$sheet->mergeCells('A' . ($count + 13) . ':I' . ($count + 13));
$title4 = '2、其余商品出库之日起10日内退货数量不得超过该商品购买数量的30%';
$sheet->setCellValue('A' . ($count + 13), $title4);
$sheet->mergeCells('A' . ($count + 14) . ':I' . ($count + 14));
$title4 = '上述要求旨在保障库存管理及商品周转的合理性。';
$sheet->setCellValue('A' . ($count + 14), $title4);
// 设置单元格的样式
$styleArray = [
'font' => [
'bold' => true,
'size' => 16,
],
];
$sheet->getStyle('A1')->applyFromArray($styleArray);
// 定义线框样式
$styleArray = [
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN, // 线框样式
'color' => ['argb' => '000000'], // 线框颜色
],
],
];
$sheet->getStyle('A1:I' . ($count + 14))->applyFromArray($styleArray);
// 保存文件到 public 下
$writer = new Xlsx($spreadsheet);
$dir=public_path().'/export/'.date('Y-m');
if (!file_exists($dir)) {
// 尝试创建目录
if (!mkdir($dir)) {
throw new BusinessException('创建目录失败:/export/' . date('Y-m'));
}
}
$file_path = $dir . '/' .$title2.date('Y-m-d H:i') . '.xlsx';
$url = '/export/' . date('Y-m') . '/' .$title2.date('Y-m-d H:i') . '.xlsx';
// 保存文件到 public 下
$writer->save($file_path);
return getenv('APP_URL').$url;
}
}