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);
}
}