|
|
@@ -4,6 +4,7 @@ namespace ghs\controllers;
|
|
|
|
|
|
use biz\shop\classes\ShopExtClass;
|
|
|
use bizGhs\book\classes\BookItemClass;
|
|
|
+use bizGhs\book\classes\BookItemCustomClass;
|
|
|
use bizGhs\product\classes\ProductClass;
|
|
|
use common\components\dateUtil;
|
|
|
use common\components\printUtil;
|
|
|
@@ -14,6 +15,157 @@ use common\components\util;
|
|
|
class StatBookController extends BaseController
|
|
|
{
|
|
|
|
|
|
+ //导出库存分配 ssh 20240808
|
|
|
+ public function actionExportStockAssign()
|
|
|
+ {
|
|
|
+ $mainId = $this->mainId ?? 0;
|
|
|
+ $shop = $this->shop;
|
|
|
+ $bookSn = $shop->bookSn ?? 0;
|
|
|
+ if (empty($bookSn)) {
|
|
|
+ util::fail('没有开启预订活动');
|
|
|
+ }
|
|
|
+ $productList = ProductClass::getAllByCondition(['mainId' => $mainId, 'stock>' => 0], null, '*', 'id');
|
|
|
+ $bookItemRes = BookItemClass::getAllByCondition(['bookSn' => $bookSn], null, '*', null);
|
|
|
+ if (empty($bookItemRes)) {
|
|
|
+ util::fail('没有预订花材');
|
|
|
+ }
|
|
|
+ $bookItemCustomData = BookItemCustomClass::getAllByCondition(['bookSn' => $bookSn], null, '*');
|
|
|
+ $bookItemCustomRes = [];
|
|
|
+ if (!empty($bookItemCustomData)) {
|
|
|
+ foreach ($bookItemCustomData as $bc) {
|
|
|
+ $itemId = $bc['itemId'] ?? 0;
|
|
|
+ $bookItemCustomRes[$itemId][] = $bc;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $arr = [];
|
|
|
+ foreach ($bookItemRes as $bookItemSingle) {
|
|
|
+ $productId = $bookItemSingle['itemId'] ?? 0;
|
|
|
+ $onNum = $bookItemSingle['onNum'] ?? 0;
|
|
|
+ $currentProduct = $productList[$productId] ?? [];
|
|
|
+ $stock = $currentProduct['stock'] ?? 0;
|
|
|
+ $remainNum = $stock > $onNum ? bcsub($stock, $onNum) : 0;
|
|
|
+ if (isset($bookItemCustomRes[$productId]) == false) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $currentBookItemCustom = $bookItemCustomRes[$productId];
|
|
|
+ foreach ($currentBookItemCustom as $current) {
|
|
|
+ $itemName = $current['name'] ?? '';
|
|
|
+ $bookDataName = $current['customName'] ?? '';
|
|
|
+ $seatSn = $current['seatSn'] ?? '';
|
|
|
+ $bookNum = $current['bookNum'] ?? 0;
|
|
|
+ $onNum = $current['onNum'] ?? 0;
|
|
|
+ $roadNum = $current['roadNum'] ?? 0;
|
|
|
+ $sub = bcsub($bookNum, $onNum);
|
|
|
+ $wait = bcsub($sub, $roadNum);
|
|
|
+ if ($remainNum <= 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $upNum = $remainNum >= $wait ? $wait : $remainNum;
|
|
|
+ $remainNum = bcsub($remainNum, $upNum);
|
|
|
+ $arr[] = [
|
|
|
+ 'itemName' => $itemName,
|
|
|
+ 'customName' => $bookDataName,
|
|
|
+ 'seatSn' => $seatSn,
|
|
|
+ 'bookNum' => $bookNum,
|
|
|
+ 'onNum' => $onNum,
|
|
|
+ 'roadNum' => $roadNum,
|
|
|
+ 'wait' => $upNum,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (empty($arr)) {
|
|
|
+ util::fail('没有数据要导出');
|
|
|
+ }
|
|
|
+
|
|
|
+ $phpExcelFile = Yii::getAlias("@vendor/phpoffice/phpexcel/");
|
|
|
+ require_once($phpExcelFile . 'Classes/PHPExcel.php');
|
|
|
+
|
|
|
+ $objPHPExcel = new \PHPExcel();
|
|
|
+
|
|
|
+ $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
|
|
|
+ ->setLastModifiedBy("Maarten Balliauw")
|
|
|
+ ->setTitle("Office 2007 XLSX Document")
|
|
|
+ ->setSubject("Office 2007 XLSX Document")
|
|
|
+ ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
|
|
|
+ ->setKeywords("office 2007 openxml php")
|
|
|
+ ->setCategory("file");
|
|
|
+
|
|
|
+ $ghsTitle = '供货商';
|
|
|
+ $objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader(date('n月j日') . " " . $ghsTitle);
|
|
|
+
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setTop(0.7);
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(0.1);
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.5);
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0);
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setHeader(0.1);
|
|
|
+ $objPHPExcel->getActiveSheet()->getPageMargins()->setFooter(0);
|
|
|
+
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('A1', '名称');
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('B1', '客户/货位');
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('C1', '预订数');
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('D1', '已上架');
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('E1', '路上');
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('F1', '待上库存');
|
|
|
+
|
|
|
+ //设置宽度
|
|
|
+ $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
|
|
|
+ //加粗
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(9)->setBold(true);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(9)->setBold(true);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(9)->setBold(true);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(9)->setBold(true);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(9)->setBold(true);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(9)->setBold(true);
|
|
|
+
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('C1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('D1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('E1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('F1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
+
|
|
|
+ $baseRow = 2;
|
|
|
+ foreach ($arr as $key => $bookData) {
|
|
|
+ $i = $baseRow + $key;
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $bookData['itemName']);
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $bookData['customName'].'/'.$bookData['seatSn']);
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $bookData['bookNum']);
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $bookData['onNum']);
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $bookData['roadNum']);
|
|
|
+ $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $bookData['wait']);
|
|
|
+ //居左
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
+ }
|
|
|
+ $fileName = '库存分配-' . time();
|
|
|
+ $objPHPExcel->getActiveSheet()->setTitle($fileName);
|
|
|
+ $objPHPExcel->setActiveSheetIndex(0);
|
|
|
+ $dir = './priceTable/' . $mainId;
|
|
|
+ if (file_exists($dir) == false) {
|
|
|
+ mkdir($dir, 0777, true);
|
|
|
+ }
|
|
|
+ $date = $fileName;
|
|
|
+ $file = $date . '.xls';
|
|
|
+ $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
|
|
|
+ if (file_exists($dir . '/' . $file)) {
|
|
|
+ unlink($dir . '/' . $file);
|
|
|
+ }
|
|
|
+ $objWriter->save($dir . '/' . $file);
|
|
|
+ $fileUrl = Yii::$app->params['ghsHost'] . '/priceTable/' . $mainId . '/' . $file;
|
|
|
+ util::success(['file' => $fileUrl, 'shortFile' => $file]);
|
|
|
+ }
|
|
|
+
|
|
|
public function actionList()
|
|
|
{
|
|
|
$get = Yii::$app->request->get();
|