| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673 |
- <?php
- namespace bizGhs\order\classes;
- use biz\product\classes\XjClass;
- use bizGhs\book\classes\BookItemClass;
- use bizGhs\custom\classes\CustomClass;
- use bizGhs\ghs\classes\GhsClass;
- use bizGhs\product\classes\ProductClass;
- use bizGhs\shop\classes\ShopClass;
- use bizGhs\stock\classes\StockRecordClass;
- use bizHd\purchase\classes\PurchaseClass;
- use bizHd\purchase\classes\PurchaseItemClass;
- use common\components\dict;
- use common\components\imgUtil;
- use common\components\noticeUtil;
- use common\components\orderSn;
- use common\components\util;
- use Yii;
- use bizGhs\base\classes\BaseClass;
- class OrderItemClass extends BaseClass
- {
- public static $baseFile = '\bizGhs\order\models\OrderItem';
- //预订单删除花材项 ssh 20240123
- public static function delBookItem($order, $smallId, $params = [])
- {
- $son = self::getById($smallId, true);
- if (empty($son)) {
- util::fail('没有找到花材');
- }
- $ptItemId = $son->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]);
- }
- }
|