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; $enough = $remainNum >= $wait ? '√' : ''; $remainNum = bcsub($remainNum, $upNum); $arr[] = [ 'itemName' => $itemName, 'customName' => $bookDataName, 'seatSn' => $seatSn, 'bookNum' => $bookNum, 'onNum' => $onNum, 'roadNum' => $roadNum, 'wait' => $upNum, 'enough'=>$enough, ]; } } 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()->setCellValue('G1', ''); //设置宽度 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18); //加粗 $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('G1')->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('G1')->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); $objPHPExcel->getActiveSheet()->getStyle('G1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $baseRow = 2; foreach ($arr as $key => $bookData) { $i = $baseRow + $key; $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $bookData['itemName']); $customName = $bookData['seatSn'] == 0 ? $bookData['customName'] : $bookData['customName'].' / '.$bookData['seatSn']; $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $customName); $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()->setCellValue('G' . $i, $bookData['enough']); //居左 $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); $objPHPExcel->getActiveSheet()->getStyle('G' . $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(); $where = []; $where['mainId'] = $this->mainId; $bookSn = $get['bookSn'] ?? ''; $itemList = ProductClass::getAllByCondition(['mainId' => $this->mainId], null, 'id,stock', 'id', true); $list = BookItemClass::getAllByCondition($where, 'time DESC', '*'); $table = []; if (!empty($list)) { foreach ($list as $key => $val) { $productId = $val['itemId'] ?? 0; $stock = 0; if (isset($itemList[$productId])) { $product = $itemList[$productId]; $stock = $product->stock; } $stock = floatval($stock); $list[$key]['stock'] = $stock; $time = $val['time']; $shortTime = substr($time, 4, 4); $list[$key]['shortTime'] = $shortTime; $table[] = [ 'shortTime' => $shortTime, 'name' => $val['name'], 'num' => $val['num'], 'stock' => $stock, 'remark' => '', ]; } } $shop = $this->shop; $title = $shop->shopName == '首店' ? $shop->merchantName : $shop->merchantName . "({$shop->shopName})"; $printData = [ 'title' => "【{$title}】预订汇总", 'table' => $table, ]; util::success(['list' => $list, 'printData' => $printData]); } //花材销量 ssh 20211021 public function actionProfile() { $get = Yii::$app->request->get(); $where = []; $where['mainId'] = $this->mainId; $bookSn = $get['bookSn'] ?? ''; $staffId = $get['staffId'] ?? 0; $search = $get['search'] ?? ''; $shop = $this->shop; if (empty($bookSn)) { $shop = $this->shop; $bookSn = $shop->bookSn ?? 0; if (empty($bookSn)) { util::success(['list' => [], 'shop' => $shop, 'hint' => 'no bookSn']); } } $where['bookSn'] = $bookSn; if (!empty($search)) { if (stringUtil::isLetter($search)) { $search = strtolower($search); $where['py'] = ['like', $search]; } else { $where['name'] = ['like', $search]; } } if (!empty($staffId)) { $where['cgStaffId'] = $staffId; } $list = BookItemClass::getAllByCondition($where, '(bookNum-onNum) DESC', '*'); if (!empty($list)) { $ids = array_column($list, 'itemId'); $productList = ProductClass::getAllByCondition(['id' => ['in', $ids]], null, '*', 'id', true); foreach ($list as $key => $val) { $productId = $val['itemId'] ?? 0; $onNum = $val['onNum'] ?? 0; $currentProduct = $productList[$productId] ?? []; $stock = $currentProduct->stock ?? 0; $remainNum = $stock > $onNum ? bcsub($stock, $onNum) : 0; $list[$key]['remainStockNum'] = $remainNum; } } util::success(['list' => $list, 'shop' => $shop]); } public function actionPrintOrder() { util::fail('开发中'); $get = Yii::$app->request->get(); $where = []; $where['mainId'] = $this->mainId; $searchTime = $get['searchTime'] ?? 'today'; if (!empty($searchTime)) { $startTime = $get['startTime'] ?? ''; $endTime = $get['endTime'] ?? ''; $period = dateUtil::formatTime($searchTime, $startTime, $endTime, true); $where['time'] = ['between', [$period['startTime'], $period['endTime']]]; } $list = BookItemClass::getAllByCondition($where, 'time DESC', '*'); if (empty($list)) { util::fail('没有花材需要打印'); } $shop = $this->shop; $num = count($list); $pageSize = 30; $ratio = ceil($num / $pageSize); if ($ratio > 1) { for ($i = 1; $i <= $ratio; $i++) { $offset = ($i - 1) * $pageSize; $current = array_slice($list, $offset, $pageSize); self::printOrder($current, $shop, $i); } } else { self::printOrder($list, $shop); } util::complete('打印成功'); } public static function printOrder($list, $shop, $order = 0) { util::fail('开发中'); $content = "预订汇总

"; if ($order > 0) { $content .= "第{$order}页

"; } $content .= '日期 / 花材 / 数量
'; $content .= '--------------------------------
'; foreach ($list as $item) { $date1 = $item['time']; $date2 = substr($date1, 4, 4); $name = $item['name'] ?? ''; $num = $item['num'] ?? 0; $content .= $date2 . ' ' . $name . ' ' . $num . '
'; $content .= '--------------------------------
'; } $content .= "


"; $shopId = $shop->id ?? 0; $ext = ShopExtClass::getByCondition(['shopId' => $shopId]); $printSn = $ext['printSn'] ?? ''; if (empty($printSn)) { util::fail('没有找到打印机'); } $p = new printUtil($printSn); $p->printMsg($content, $shop); } }