itemId ?? 0; $son->delete(); $productId = $son->productId ?? 0; $cgId = $order->purchaseId ?? 0; $cg = PurchaseClass::getById($cgId, true); if (empty($cg)) { util::fail('没有采购单'); } $cgOrderSn = $cg->orderSn ?? ''; $cgList = PurchaseItemClass::getAllByCondition(['orderSn' => $cgOrderSn], null, '*', null, true); if (empty($cgList)) { util::fail('没有采购的花材'); } $cgHasDelOk = 0; foreach ($cgList as $cgIt) { $itemId = $cgIt->itemId ?? 0; if ($itemId == $ptItemId) { $cgIt->delete(); $cgHasDelOk = 1; } } if ($cgHasDelOk == 0) { util::fail('删除失败'); } //删除预订 $num = $son->xhNum ?? 0; $delData = [['productId' => $productId, 'num' => $num, 'last' => 0]]; BookItemClass::delBathItem($delData, $order, $params); } //预订单添加花材项 ssh 20240123 public static function addBookItemFn($order, $itemList, $params = []) { $orderSn = $order->orderSn ?? ''; $addIds = array_column($itemList, 'productId'); $existList = self::getAllByCondition(['orderSn' => $orderSn], null, '*'); foreach ($existList as $ex) { $productId = $ex['productId'] ?? 0; $name = $ex['name'] ?? ''; if (in_array($productId, $addIds)) { util::fail($name . ' 已经存在'); } } $addInfo = ProductClass::getByIds($addIds, null, 'id'); if (empty($addInfo)) { util::fail('没有花材'); } $productList = []; $thisBookData = []; foreach ($itemList as $item) { $num = $item['num'] ?? 0; $price = $item['price'] ?? 0; $productId = $item['productId'] ?? 0; $info = $addInfo[$productId] ?? []; $current = []; $current['name'] = $info['name'] ?? ''; $current['cover'] = $info['cover'] ?? ''; $current['orderSn'] = $orderSn; $ptItemId = $info['itemId'] ?? 0; $current['itemId'] = $ptItemId; $current['productId'] = $productId; $classId = $info['classId'] ?? 0; $current['classId'] = $classId; $current['variety'] = $info['variety'] ?? 0; $current['shopId'] = $info['shopId'] ?? 0; $current['mainId'] = $info['mainId'] ?? 0; $current['smallUnit'] = $info['smallUnit'] ?? 0; $current['bigUnit'] = $info['bigUnit'] ?? 0; $current['price'] = 0; $current['unitWeight'] = $info['weight'] ?? 0; $current['cost'] = $info['cost'] ?? 0; $current['num'] = $num; $current['bigNum'] = $num; $current['preNum'] = $num; $current['preBigNum'] = $num; $current['ratio'] = $info['ratio'] ?? 0; $current['variety'] = $info['variety'] ?? 0; $current['xhNum'] = $num; $current['xhUnitName'] = $info['bigUnit'] ?? ''; $current['xhUnitType'] = 0; $current['xhPreNum'] = $num; $current['xhPreUnitName'] = $info['bigUnit'] ?? ''; $current['xhPreUnitType'] = 0; if ($price > 0) { $current['xhUnitPrice'] = $price; $current['xhPreUnitPrice'] = $price; } $current['itemInfo'] = ''; $belongCost = $info['belongCost'] ?? 0; $current['belongCost'] = $belongCost; self::add($current); $productList[] = [ 'productId' => $productId, 'num' => $num, 'bigNum' => $num, 'smallNum' => 0, 'classId' => $classId, 'itemId' => $ptItemId, 'userPrice' => 0, ]; $thisBookData[] = ['productId' => $productId, 'num' => $num, 'lastNum' => $num]; } BookItemClass::addBatchItem($thisBookData, $order, $params); $cgId = $order->purchaseId ?? 0; $cg = PurchaseClass::getById($cgId, true); if (empty($cg)) { util::fail('没有采购信息'); } $shopId = $cg->shopId ?? 0; $sjId = $cg->sjId ?? 0; $mainId = $cg->mainId ?? 0; $ghsId = $cg->ghsId ?? 0; $ghs = GhsClass::getById($ghsId, true); if (empty($ghs)) { util::fail('供货商无效'); } $productList = ProductClass::toggleProductList($productList, $shopId, $sjId, $mainId, $ghs); $cgProductIds = array_column($productList, 'productId'); $cgProductInfoList = ProductClass::getByIds($cgProductIds, null, 'id'); $cgOrderSn = $cg->orderSn ?? ''; foreach ($productList as $key => $val) { $productId = $val['productId'] ?? 0; $num = $val['num'] ?? 0; $ghsProductId = $val['ghsProductId'] ?? 0; $thisInfo = $cgProductInfoList[$productId] ?? []; $newItem = []; $name = $thisInfo['name'] ?? ''; $cover = $thisInfo['cover'] ?? ''; $newItem['name'] = $name; $newItem['cover'] = $cover; $newItem['orderSn'] = $cgOrderSn; $newItem['productId'] = $productId; $newItem['itemId'] = $thisInfo['itemId'] ?? 0; $newItem['mainId'] = $cg->mainId ?? 0; $newItem['ghsId'] = $ghsId; $newItem['itemNum'] = $num; $newItem['preItemNum'] = $num; $newItem['ghsProductId'] = $ghsProductId; $ratio = $thisInfo['ratio'] ?? 0; $bigUnit = $thisInfo['bigUnit'] ?? ''; $smallUnit = $thisInfo['smallUnit'] ?? ''; $newItem['ratio'] = $ratio; $newItem['price'] = 0; $newItem['variety'] = $thisInfo['variety'] ?? 0; $newItem['unitWeight'] = $thisInfo['weight'] ?? 0; $newItem['xhNum'] = $num; $newItem['xhUnitName'] = $thisInfo['bigUnit'] ?? ''; $newItem['xhUnitType'] = 0; $newItem['xhPreNum'] = $num; $newItem['xhPreUnitName'] = $thisInfo['bigUnit'] ?? ''; $newItem['xhPreUnitType'] = 0; $newItem['itemInfo'] = ''; $itemInfo = [ 'itemName' => $name, 'itemCover' => $cover, 'bigNum' => $num, 'smallNum' => 0, 'bigNumStock' => 0, 'smallNumStock' => 0, 'itemUnit' => $ratio ? 2 : 1, 'ratio' => $ratio, 'rank' => '', 'bigUnit' => $bigUnit, 'smallUnit' => $smallUnit, ]; $newItem['itemInfo'] = json_encode($itemInfo); PurchaseItemClass::add($newItem); } } public static function giveItem($order, $orderItem, $product, $num, $data) { $productId = $product->id ?? 0; $ptItemId = $product->itemId ?? 0; $name = $product->name ?? ''; $cover = $product->cover ?? ''; $ratio = $product->ratio ?? 20; $ratioType = $product->ratioType ?? 0; $mainId = $product->mainId ?? 0; $targetId = $order->id ?? 0; $targetSonId = $orderItem->id ?? 0; $orderItem->giveNum = bcadd($orderItem->giveNum, $num); $orderItem->save(); $orderSn = orderSn::getGiveSn(); $giveData = [ 'orderSn' => $orderSn, 'mainId' => $mainId, 'productId' => $productId, 'name' => $name, 'cover' => $cover, 'ratio' => $ratio, 'ratioType' => $ratioType, 'ptItemId' => $ptItemId, 'giveNum' => $num, 'targetId' => $targetId, 'targetSonId' => $targetSonId, 'staffId' => $data['staffId'] ?? 0, 'staffName' => $data['staffName'] ?? '', 'ghsId' => $order->ghsId ?? 0, 'customId' => $order->customId ?? 0, 'customName' => $order->customName ?? '', 'customNamePy' => $order->customNamePy ?? '', 'customAvatar' => $order->customAvatar ?? '', 'customMobile' => $order->customMobile ?? '', ]; $giveInfo = GiveClass::add($giveData, true); $stockInfo = ProductClass::decreaseStock($productId, $num, 0, true); $oldStock = $stockInfo['oldStock']; $newStock = $stockInfo['newStock']; $stockItem = [[ 'productId' => $productId, 'itemId' => $ptItemId, 'itemNum' => $num, 'oldStock' => $oldStock, 'itemStock' => $oldStock, 'newStock' => $newStock, 'bigNum' => $num, 'smallNum' => 0, ]]; $stockData = []; $stockData['shopId'] = $data['shopId']; $stockData['relateName'] = $data['staffName'] ?? ''; $stockData['ptStyle'] = dict::getDict('ptStyle', 'ghs'); $stockData['orderSn'] = $orderSn; $stockData['sjId'] = $data['sjId'] ?? 0; $stockData['itemInfo'] = $stockItem; $stockData['relateName'] = $order->customName ?? ''; StockRecordClass::addRecordByOrder($stockData, StockRecordClass::STOCK_RECORD_TYPE_GIVE); return $giveInfo; } //获取订单的花材 ssh 2021.3.2 public static function getOrderItem($orderSn) { $list = self::getAllByCondition(['orderSn' => $orderSn], 'id ASC', '*'); return self::groupInfo($list); } //组合信息 ssh 2021.3.2 public static function groupInfo($list) { if (empty($list)) { return []; } $productIds = array_unique(array_filter(array_column($list, 'productId'))); $productData = ProductClass::getProductByIds($productIds); $productData = array_column($productData, NULL, 'id'); foreach ($list as $key => $val) { $shortCover = $val['cover'] ?? ''; $list[$key]['cover'] = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_130,w_130"; $list[$key]['bigCover'] = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_700,w_700"; if (!$val['ratio']) { $ratio = $productData[$val['productId']]['ratio'] ?? 1; $list[$key]['ratio'] = $ratio; } //保存实时成本,预订单到货时使用 $list[$key]['currentCost'] = $productData[$val['productId']]['cost'] ?? 0; } return $list; } /** * 替换订单(orderSn)下所有商品项为指定的 product 列表,并根据参数处理附加商详(如每支鲜花 xj)、校验及扣减库存、更新限购等。 * * 步骤说明: * 1. 根据 customId 获取客户等级和属性,格式化 products 信息; * 2. 先删除该订单下历史商品项,再批量插入新 products 项; * 3. 若包含 xj(每支鲜花)信息,批量关联并校验单支库存、同步写入; * 4. 处理每项商品的限购、本次扣减库存(如 stockMayChange 为 true),并记录出库流水。 * 5. 返回本次批量插入及处理后的汇总结果(带总重量)。 * * 用于订单商品整体替换的核心业务方法。 * @param $orderSn * @param $products * @param null $post * @param bool $stockMayChange * @param array $moreParams * @return array|void * @throws \Exception */ public static function replaceItem($orderSn, $products, $post = null, $stockMayChange = false, $moreParams = []) { $customId = intval($post['customId']); $custom = CustomClass::getById($customId, true); if (empty($custom)) { return util::fail('没有找到客户'); } $level = $custom->level ?? 0; $live = isset($custom->live) ? $custom->live : 1; $shopId = $post['shopId'] ?? 0; $skipLimitBuy = false; if (!empty($shopId)) { $shop = ShopClass::getById($shopId, true, 'id, skCustomId'); $skipLimitBuy = !empty($shop->skCustomId) && intval($shop->skCustomId) == $customId; } $moreParams['skipLimitBuy'] = $skipLimitBuy; $respond = ProductClass::formatProductInfo($products, $level, $live, $moreParams); $products = $respond['product']; $weight = 0; $mainId = $post['mainId'] ?? 0; // --- 开始:死锁预防机制 --- // 为了防止在高并发场景下,不同订单包含相同商品但顺序不同导致交叉死锁 // 我们提前提取所有涉及的花材ID,按照ID升序排列后统一加锁(SELECT FOR UPDATE) if ($stockMayChange == true) { $lockProductIds = []; foreach ($products as $p) { if (!empty($p['productId'])) { $lockProductIds[] = $p['productId']; } } if (!empty($lockProductIds)) { $lockProductIds = array_unique($lockProductIds); sort($lockProductIds); foreach ($lockProductIds as $lockPId) { ProductClass::getLockById($lockPId); } } // 同样为多颜色(xj)库存扣减做死锁预防 if (!empty($post['xj']) && is_array($post['xj'])) { $lockXjIds = []; foreach ($post['xj'] as $xjArr) { if (is_array($xjArr)) { foreach ($xjArr as $xjItem) { if (!empty($xjItem['id'])) { $lockXjIds[] = $xjItem['id']; } } } } if (!empty($lockXjIds)) { $lockXjIds = array_unique($lockXjIds); sort($lockXjIds); foreach ($lockXjIds as $lockXjId) { XjClass::getLockById($lockXjId); } } } } // --- 结束:死锁预防机制 --- self::deleteByCondition(['orderSn' => $orderSn]); foreach ($products as $key => $p) { $p['orderSn'] = $orderSn; $p['mainId'] = $mainId; $item = self::add($p, true); $currentPtItemId = $item->itemId; $unitPrice = $p['unitPrice']; if (isset($post['xj'][$currentPtItemId]) && !empty($post['xj'][$currentPtItemId])) { $xjArr = $post['xj'][$currentPtItemId]; if (is_array($xjArr)) { $ids = array_column($xjArr, 'id'); $sjInfo = XjClass::getByIds($ids, null, 'id'); $xjData = []; foreach ($xjArr as $xjItem) { $id = $xjItem['id'] ?? 0; $num = $xjItem['num'] ?? 0; $name = $sjInfo[$id]['name'] ?? ''; $cover = $sjInfo[$id]['cover'] ?? ''; $stock = $sjInfo[$id]['stock'] ?? -1; if ($stock == -1) { } else { if ($stock < $num) { util::fail($name . ' 库存不足 ' . $num); } else { $newStock = bcsub($stock, $num); $status = $newStock == 0 ? 2 : 1; XjClass::updateById($id, ['stock' => $newStock, 'status' => $status]); } } $xjData[] = ['xjId' => $id, 'name' => $name, 'ptItemId' => $currentPtItemId, 'num' => $num, 'price' => $unitPrice, 'itemId' => $item->id, 'cover' => $cover]; } OrderXjClass::batchAdd($xjData); $item->variety = 1; $item->save(); } } $productId = $p['productId'] ?? 0; if (!empty($post['treeData'][$currentPtItemId])) { $treeData = $post['treeData'][$currentPtItemId]; if (is_array($treeData)) { foreach ($treeData as $treeItem) { $treeNum = $treeItem['num'] ?? 0; $treeParam = [ 'orderSn' => $orderSn, 'productId' => $productId, 'num' => $treeNum, ]; OrderTreeClass::add($treeParam); } $dishNum = count($treeData); $item->dishNum = $dishNum; $item->save(); } } $ratio = $p['ratio'] ?? 0; $bigNum = $p['bigNum'] ?? 0; $smallNum = $p['smallNum'] ?? 0; $itemNum = ProductClass::mergeItemNum($bigNum, $smallNum, $ratio); $w = bcmul($itemNum, $p['weight'], 2); $weight = bcadd($w, $weight, 2); $limitBuy = $p['limitBuy']; if ($limitBuy > 0 && $skipLimitBuy == false) { ProductClass::handleLimitBuy($p, $customId, floatval($itemNum)); } if ($stockMayChange == true) { if ($itemNum > 0) { $productId = $p['productId']; $checkStock = true; //如果是虚拟客户,说明自己也是虚拟批发店,虚拟批发店不用考虑库存 if ($live == 0) { $checkStock = false; } $stockInfo = ProductClass::decreaseStock($productId, $bigNum, $smallNum, $checkStock); $recordData = []; $recordData['sjId'] = $post['sjId'] ?? 0; $recordData['shopId'] = $post['shopId'] ?? 0; $recordData['mainId'] = $post['mainId'] ?? 0; $recordData['itemId'] = $p['itemId'] ?? 0; $recordData['itemNum'] = $itemNum; $recordData['oldStock'] = $stockInfo['oldStock']; $recordData['newStock'] = $stockInfo['newStock']; $recordData['productId'] = $productId; $recordData['orderSn'] = $orderSn; $recordData['relateName'] = $post['customName'] ?? ''; $recordData['ptStyle'] = dict::getDict('ptStyle', 'ghs'); StockRecordClass::addSellStockOrderRecord($recordData); } } } $respond['weight'] = $weight; return $respond; } public static function getOrderInfoList($where) { $respond = self::getList('orderSn,id', $where, 'id DESC'); if (isset($respond['list']) && !empty($respond['list'])) { $orderSnData = array_unique(array_filter(array_column($respond['list'], 'orderSn'))); $orderInfoList = OrderClass::getOrderInfoBySnList($orderSnData); foreach ($respond['list'] as $key => $val) { $orderSn = $val['orderSn'] ?? ''; $orderInfo = $orderInfoList[$orderSn] ?? []; $respond['list'][$key]['orderInfo'] = $orderInfo; } } return $respond; } public static function refreshBelongCost() { $customerCachedKey = 'change_belong_cost_item_list'; $belongList = []; while ($count = Yii::$app->redis->executeCommand('LLEN', [$customerCachedKey])) { $string = Yii::$app->redis->executeCommand('RPOP', [$customerCachedKey]); $arr = explode('_', $string); if (count($arr) == 2) { $belongList[] = ['id' => $arr[0], 'belongCost' => $arr[1]]; } } if (empty($belongList)) { return false; } foreach ($belongList as $info) { $id = $info['id']; $belongCost = $info['belongCost']; noticeUtil::push('变更单独统计' . $id . ' ' . $belongCost, '15280215347'); self::updateByCondition(['productId' => $id], ['belongCost' => $belongCost]); PurchaseOrderItemClass::updateByCondition(['productId' => $id], ['belongCost' => $belongCost]); \bizHd\order\classes\OrderItemClass::updateByCondition(['itemId' => $id], ['belongCost' => $belongCost]); } } //导出excel ssh 20241127 public static function exportExcel($order, $orderList, $mainId) { $customName = $order->customName ?? ''; $orderSn = $order->orderSn ?? ''; $fileTitle = $customName . '_' . $orderSn; if (empty($orderList)) { 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()->getColumnDimension('A')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15); $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(20); $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(16); $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(16); $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(16); //加粗 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('C1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('F1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('G1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('H1')->getFont()->setSize(13)->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('I1')->getFont()->setSize(13)->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('H1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I1')->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); $objPHPExcel->getActiveSheet()->getStyle('H1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objPHPExcel->getActiveSheet()->setCellValue('A1', '花材ID'); $objPHPExcel->getActiveSheet()->setCellValue('B1', '花材名称'); $objPHPExcel->getActiveSheet()->setCellValue('C1', '数量'); $objPHPExcel->getActiveSheet()->setCellValue('D1', '单价'); $objPHPExcel->getActiveSheet()->setCellValue('E1', '总价'); $objPHPExcel->getActiveSheet()->setCellValue('F1', '备注'); $objPHPExcel->getActiveSheet()->setCellValue('G1', '预留1'); $objPHPExcel->getActiveSheet()->setCellValue('H1', '预留2'); $objPHPExcel->getActiveSheet()->setCellValue('I1', '预留3'); $baseRow = 2; foreach ($orderList as $key => $order) { $i = $baseRow + $key; $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $order['productId']); $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $order['name']); $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $order['xhNum']); $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $order['xhUnitPrice']); $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $order['xhPrice']); $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $order['remark']); $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, ''); $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, ''); $objPHPExcel->getActiveSheet()->setCellValue('I' . $i, ''); //居中 $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); $objPHPExcel->getActiveSheet()->getStyle('H' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $objPHPExcel->getActiveSheet()->getStyle('A' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('B' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('C' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('D' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('E' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('F' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('G' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('H' . $i)->getFont()->setSize(13); $objPHPExcel->getActiveSheet()->getStyle('I' . $i)->getFont()->setSize(13); } $fileName = $fileTitle; $objPHPExcel->getActiveSheet()->setTitle($fileName); $objPHPExcel->setActiveSheetIndex(0); $dir = './orderItemExcel/' . $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'] . '/orderItemExcel/' . $mainId . '/' . $file; util::success(['file' => $fileUrl, 'shortFile' => $file]); } }