| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778 |
- <?php
- namespace bizGhs\product\classes;
- use biz\item\models\PtItemClass;
- use bizGhs\base\classes\BaseClass;
- use bizGhs\item\classes\ItemClass;
- use bizGhs\item\classes\ItemClassClass;
- use bizGhs\order\traits\OrderTrait;
- use common\components\imgUtil;
- use common\components\stringUtil;
- use common\components\util;
- use common\services\xhItemService;
- use Yii;
- use yii\di\ServiceLocator;
- class ProductClass extends BaseClass
- {
- use OrderTrait;
- public static $baseFile = '\bizGhs\product\models\Product';
- const PRICE_LABEL_AUTO = 1; //自动调价
- const PRICE_LABEL_CHANGE = 2; //改价
- const LOCK_STOCK = 'lock_stock';//修改库存锁
- const LOCK_PRICE = 'lock_price'; //改价锁
- const LOCK_CHECK_STOCK = 'lock_check_stock'; //判断库存
- //根据itemIds获取相应的花材信息
- public static function getProductInfoByItemIds(array $itemIds, $shopId)
- {
- $where = ['itemId' => ['in', $itemIds], 'delStatus' => 0, 'shopId' => $shopId];
- $data = self::getAllList('*', $where);
- $data = self::groupItemBaseInfo($data);
- return $data;
- }
- //根据花材ID,获取花材名称,图片
- public static function groupItemBaseInfo($list)
- {
- //取得itemIds
- $itemIds = array_column($list, 'itemId');
- //获取相应的图片,名称,py
- $where = ['id' => ['in', $itemIds]];
- $data = xhItemService::getAllByCondition($where, null, '*');
- if (!empty($data)) {
- $data = array_column($data, NULL, 'id');
- foreach ($list as $k => $v) {
- if (isset($data[$v['itemId']]['cover']) && !empty($data[$v['itemId']]['cover'])) {
- $cover = self::groupImg($data[$v['itemId']]['cover']);
- } else {
- //没有图片时取默认图片 ssh 2021.2.18
- $cover = imgUtil::getPrefix() . '/hhb_small.png';
- }
- $unitNum = $data[$v['itemId']]['ratio'] ?? 0;
- $stockInfo = self::formatStock($v['stock'], $unitNum);
- $list[$k]['cover'] = $cover;
- $list[$k]['bigNum'] = $stockInfo['bigNum'];
- $list[$k]['smallNum'] = $stockInfo['smallNum'];
- $list[$k]['itemName'] = $data[$v['itemId']]['name'] ?? '';
- $list[$k]['py'] = $data[$v['itemId']]['py'] ?? '';
- $list[$k]['ratio'] = $unitNum ?? 0;
- //换算大小单位对应价格
- $list[$k]['bigPrice'] = $v['price']; //大单位价格就是product表存的价格
- $smallPrice = 0;
- if ($unitNum) {
- $smallPrice = bcdiv($v['price'], $unitNum, 2);
- }
- $list[$k]['smallPrice'] = $smallPrice;
- $list[$k]['bigUnit'] = $data[$v['itemId']]['bigUnit'];
- $list[$k]['smallUnit'] = $data[$v['itemId']]['smallUnit'];
- }
- }
- return $list;
- }
- //获取详情 ruidian 2021.5.3
- public static function getItemInfo($id)
- {
- $info = self::getById($id);
- if (empty($info)) {
- return $info;
- }
- $list = self::groupProductInfo([$info]);
- return current($list);
- }
- //花材图片,名称,大小单位,小单位价格
- public static function groupProductInfo($list)
- {
- foreach ($list as $k => $v) {
- if ($v['cover']) {
- $cover = self::groupImg($v['cover']);
- } else {
- $cover = imgUtil::getPrefix() . '/hhb_small.png';
- }
- $ratio = $v['ratio'];
- $stockInfo = self::formatStock($v['stock'], $ratio);
- $list[$k]['cover'] = $cover;
- $list[$k]['bigNum'] = $stockInfo['bigNum'];
- $list[$k]['smallNum'] = $stockInfo['smallNum'];
- $list[$k]['itemName'] = $v['name'] ?? '';
- //换算大小单位对应价格
- $list[$k]['bigPrice'] = $v['price']; //大单位价格就是product表存的价格
- $smallPrice = 0;
- if ($ratio) {
- $smallPrice = bcdiv($v['price'], $ratio, 2);
- }
- $list[$k]['smallPrice'] = $smallPrice;
- }
- return $list;
- }
- //根据花材ID,库存=》 计算出多少扎,多少支
- public static function formatStockByItemId($itemId, $stock)
- {
- $unitNum = xhItemService::getItemUnitNum($itemId);
- return self::formatStock($stock, $unitNum);
- }
- //花材的库存转换: 库存是小数,根据各个花材的unitNum, 计算出多少扎,多少支
- public static function formatStock($stock, $unitNum)
- {
- $pn = true; //正数
- if ($stock < 0) {
- $pn = false;
- $stock = abs($stock);
- }
- $bigNum = floor($stock); // 扎
- $stockArr = explode('.', $stock);
- $smallNum = 0; //支
- if (count($stockArr) === 2) {
- $smallNum = bcmul(($stock - $bigNum), $unitNum);
- }
- if (!$pn) {
- $bigNum *= -1;
- $smallNum *= -1;
- }
- return [
- 'bigNum' => $bigNum,
- 'smallNum' => $smallNum,
- ];
- }
- /**
- * 根据 花材ID,将花材大小数量 换算成小数
- * @param $bigNum 大单位 数量
- * @param $smallNum 小单位 数量
- * @param $itemId 花材ID
- * @return string
- */
- public static function mergeItemNumByItemId($bigNum, $smallNum, $itemId)
- {
- $unitNum = xhItemService::getItemUnitNum($itemId);
- return self::mergeItemNum($bigNum, $smallNum, $unitNum);
- }
- //花材扎、支 合并转换 小数
- /**
- * @param $bigNum 大单位 数量
- * @param $smallNum 小单位 数量
- * @param $unitNum 花材比例
- * @return string
- */
- public static function mergeItemNum($bigNum, $smallNum, $unitNum)
- {
- $stockDecimal = 0;
- if ($unitNum > 0) {
- $stockDecimal = bcdiv($smallNum, $unitNum, 2);
- }
- $itemNum = bcadd($bigNum, $stockDecimal, 2);
- return $itemNum;
- }
- //获取常用的itemIds
- public static function getOftenItemIds($shopId)
- {
- $data = self::getLimitList("itemId", ['shopId' => $shopId], 10, 'actualSold desc');
- if ($data) {
- $data = array_column($data, 'itemId');
- }
- return $data;
- }
- //加库存,允许负库存,负数数量(盘点时)
- /**
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
- * @param $itemNumBundle 花材数量(扎)
- * @param $itemNumPiece 花材数量(支)
- * @return mixed
- */
- public static function addStock($productId, $itemNumBundle, $itemNumPiece)
- {
- $key = self::LOCK_STOCK . '_' . $productId;
- $lock = util::lock($key);
- if (!$lock) {
- util::fail("系统繁忙中,请稍后再试!");
- }
- $productData = self::getById($productId);
- if (!$productData) {
- util::unlock($key);
- util::fail("花材不存在");
- }
- // $itemId = $productData['itemId'];
- $ratio = $productData['ratio'];
- //转成小数,加库存
- $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $ratio);
- $newStock = bcadd($productData['stock'], $itemNum, 2);
- self::updateStockById($productId, $newStock);
- util::unlock($key);
- return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
- }
- //todo 库存修改 加锁
- /**
- * 对商品ID 加库存
- * @param $productId 商品ID
- * @param $itemNum 数量
- * @return mixed
- */
- public static function addStockByItemNum($productId, $itemNum)
- {
- $key = self::LOCK_STOCK . '_' . $productId;
- $lock = util::lock($key);
- if (!$lock) {
- util::fail("系统繁忙中,请稍后再试!");
- }
- $productData = self::getById($productId, true);
- if (!$productData) {
- util::unlock($key);
- util::fail("花材不存在");
- }
- $newStock = bcadd($productData->stock, $itemNum, 2);
- self::updateStockById($productId, $newStock);
- util::unlock($key);
- return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
- }
- //减库存,允许负库存,负数数量(盘点时)
- //todo 库存修改 加锁
- /**
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
- * @param $itemNumBundle 花材数量(扎)
- * @param $itemNumPiece 花材数量(支)
- * @param $checkStock boolean 是否需要判断库存
- * @return mixed
- */
- public static function decreaseStock($productId, $itemNumBundle, $itemNumPiece,$checkStock=false)
- {
- $key = self::LOCK_STOCK . '_' . $productId;
- $lock = util::lock($key);
- if (!$lock) {
- util::fail("系统繁忙中,请稍后再试!");
- }
- $productData = self::getById($productId, true);
- if (!$productData) {
- util::unlock($key);
- util::fail("花材不存在");
- }
- $ratio = $productData->ratio;
- //转成小数,更新库存
- $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $ratio);
- $newStock = bcsub($productData->stock, $itemNum, 2);
- if($checkStock && $newStock < 0){
- //需要判断库存是否充足
- util::unlock($key);
- util::fail("库存不足");
- }
- self::updateStockById($productId, $newStock);
- util::unlock($key);
- return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
- }
- //根据数量减库存
- //todo 库存修改 加锁
- /**
- * @param $productId
- * @param $itemNum
- * @return mixed 返回减之前的库存,和减之后的库存
- */
- public static function decreaseStockByItemNum($productId, $itemNum,$checkStock=false)
- {
- $key = self::LOCK_STOCK . '_' . $productId;
- $lock = util::lock($key);
- if (!$lock) {
- util::fail("系统繁忙中,请稍后再试!");
- }
- $productData = self::getById($productId);
- if (!$productData) {
- util::unlock($key);
- util::fail("花材不存在");
- }
- $newStock = bcsub($productData['stock'], $itemNum, 2);
- if($checkStock && $newStock < 0){
- //需要判断库存是否充足
- util::unlock($key);
- util::fail("库存不足");
- }
- self::updateStockById($productId, $newStock);
- util::unlock($key);
- return ['oldStock'=>$productData['stock'],'newStock'=>$newStock];
- }
- //计算价格
- /**
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
- * @param $bigNum 花材数量(扎)
- * @param $smallNum 花材数量(支)
- * @return float
- */
- public static function computedPrice($productId, $bigNum, $smallNum)
- {
- //获取itemId的价格
- $productData = self::getById($productId);
- if (!$productData) {
- util::fail("花材不存在");
- }
- $price = $productData['price'];
- $itemId = $productData['itemId'];
- $unitNum = xhItemService::getItemUnitNum($itemId);
- //换算出一支多少钱
- $piecePrice = 0;
- if ($unitNum > 0) {
- //有支
- $unitPrice = bcdiv($price, $unitNum, 2);
- $piecePrice = bcmul($unitPrice, $smallNum, 2);
- }
- $bundlePrice = bcmul($price, $bigNum, 2);
- $total = bcadd($bundlePrice, $piecePrice, 2);
- return $total;
- }
- //根据门店ID, 平台花材ID, 获取门店的花材ID
- public static function getGhsProductId($shopId, $itemId)
- {
- $data = self::getGhsProductDataByItemId($shopId, $itemId);
- if ($data) {
- return $data['id'];
- }
- return 0;
- }
- public static function getGhsProductDataByItemId($shopId, $itemId)
- {
- $where = [
- 'shopId' => $shopId,
- 'itemId' => $itemId,
- ];
- $data = self::getByCondition($where);
- return $data;
- }
- //根据多个itemIds shopId 获取对应的 productId linqh 2021.1.24
- public static function getGhsProductDataByItemIds($shopId, $itemIds)
- {
- $where = ['itemId' => ['in', $itemIds], 'shopId' => $shopId];
- $data = self::getAllByCondition($where, null, "*");
- return $data;
- }
- //补全itemId (针对入库时 当前门店下无对应的花材 itemId) linqh 2021.1.24
- public static function complementProduct($sjId, $shopId, $itemInfo)
- {
- $itemIds = array_column($itemInfo, "itemId");
- $itemData = array_column($itemInfo, null, "itemId");
- $productData = self::getGhsProductDataByItemIds($shopId, $itemIds);
- if (count($productData) !== count($itemIds)) {
- $productDataItemIds = array_column($productData, 'itemId');
- //取差集
- $diffItemIds = array_diff($itemIds, $productDataItemIds);
- if ($diffItemIds) {
- //新增到product表,price = itemPrice (出库时的售价), stock=0
- foreach ($diffItemIds as $v) {
- $addData = [];
- $addData['sjId'] = $sjId;
- $addData['shopId'] = $shopId;
- $addData['itemId'] = $v;
- $addData['price'] = $itemData[$v]['itemPrice'] ?? 0;
- self::add($addData);
- }
- }
- }
- }
- //有效花材判断,包括id有效、同个门店等 ssh 2021.1.19
- public static function valid($list, $shopId)
- {
- $ids = array_unique(array_filter(array_column($list, 'productId')));
- $productList = self::getByIds($ids, null, 'id');
- if (!empty($productList)) {
- foreach ($productList as $product) {
- if (isset($product['shopId']) == false || $product['shopId'] != $shopId) {
- util::fail('只能选择同一家的商品下单');
- }
- }
- if (count($productList) != count($ids)) {
- util::fail('存在无效商品');
- }
- } else {
- util::fail('商品不存在');
- }
- }
- //通过ids 批量获取花材商品的信息
- public static function getProductByIds($ids)
- {
- return self::getByIds($ids);
- }
- //修改花材商品的库存: 统一方法
- //todo 库存修改 加锁
- public static function updateStockById($id, $stock, $adminId = 0)
- {
- $data['stock'] = $stock;
- if ($adminId) {
- $data['adminId'] = $adminId;
- }
- $res = self::updateById($id, $data);
- return $res;
- }
- //订单退回库存
- public static function backStockByOrderItemInfo($orderItemInfo)
- {
- foreach ($orderItemInfo as $v) {
- ProductClass::addStockByItemNum($v['productId'], $v['itemNum']);
- }
- }
- //库存告警的itemIds (库存数量少于告警数量) linqh 2021.1.26
- public static function getItemIdsWarning($sjId, $shopId)
- {
- //获取当前门店下的 itemId=>stock
- $productData = ProductClass::getAllList("itemId,stock", ['shopId' => $shopId]);
- $productItemStock = [];
- if ($productData) {
- foreach ($productData as $v) {
- $productItemStock[$v['itemId']] = $v['stock'];
- }
- }
- //获取sjId 下 对应的itemId=>stockWaring
- $itemData = ItemClass::getAllList("itemId,stockWarning", ['sjId' => $sjId]);
- $itemStockWaring = [];
- if ($itemData) {
- foreach ($itemData as $v) {
- $itemStockWaring[$v['itemId']] = $v['stockWarning'];
- }
- }
- //取库存数量少于告警数量 的itemId
- $itemIds = [];
- foreach ($productItemStock as $k => $v) {
- $stockWaring = $itemStockWaring[$k] ?? 0;
- if ($v <= $stockWaring) {
- $itemIds[] = $k;
- }
- }
- return $itemIds;
- }
- //获取当前门店下商品信息 linqh 2021.1.28
- public static function getProductData($id, $shopId, $obj = false)
- {
- return ProductClass::getByCondition(['id' => $id, 'shopId' => $shopId], $obj);
- }
- //修改价格 linqh 2021.1.28
- public static function changePrice($id, $shopId, $price, $priceLabel)
- {
- $res = ProductClass::updateByCondition(['id' => $id, 'shopId' => $shopId], ['price' => $price, 'priceLabel' => $priceLabel]);
- return $res;
- }
- //下单时计算商品的价格 linqh 2021.1.28
- //itemInfo : [{"classId":5,"productId":3,"bigNum":1,"smallNum":2},{"classId":5,"productId":4,"bigNum":1,"smallNum":5}]
- //返回 [{"productId":3,"price":2.1}]
- public static function formatProductInfo(array $itemInfo)
- {
- $data = [];
- if (empty($itemInfo)) {
- util::fail('请选择花材');
- }
- $itemInfo = self::mergeItemInfo($itemInfo);
- $productIds = array_column($itemInfo, 'productId');
- $productData = ProductClass::getProductByIds($productIds);
- $productData = array_column($productData, NULL, 'id');
- $totalPrice = 0;
- $totalBigNum = 0;
- $totalSmallNum = 0;
- foreach ($itemInfo as $v) {
- $productId = $v['productId'];
- $itemId = $productData[$productId]['itemId'] ?? 0;
- $ratio = $productData[$productId]['ratio'] ?? 0;
- //大小数量合并多少扎
- $itemNum = self::mergeItemNum($v['bigNum'], $v['smallNum'], $ratio);
- //售卖价格
- $itemPrice = $productData[$productId]['price'] ?? 0;
- //合计价格
- $price = bcmul($itemNum, $itemPrice, 2);
- $tmp = [];
- $tmp['productId'] = $productId;
- $tmp['price'] = $price;
- $totalPrice = bcadd($totalPrice, $price, 2);
- $tmp['name'] = $productData[$productId]['name'] ?? '';
- $tmp['smallUnit'] = $productData[$productId]['smallUnit'];
- $tmp['bigUnit'] = $productData[$productId]['bigUnit'];
- $tmp['cover'] = $productData[$productId]['cover'] ?? '';
- $tmp['itemId'] = $itemId;
- $tmp['rank'] = $productData[$productId]['rank'] ?? '';
- $tmp['unitPrice'] = $itemPrice;
- $tmp['num'] = $itemNum;
- $tmp['bigNum'] = $v['bigNum'];
- $tmp['smallNum'] = $v['smallNum'];
- $totalBigNum += $v['bigNum'];
- $totalSmallNum += $v['smallNum'];
- $data[] = $tmp;
- }
- return ['product' => $data, 'smallNum' => $totalSmallNum, 'bigNum' => $totalBigNum, 'price' => $totalPrice];
- }
- // //修改某个花材的成本价(采购之后要用到) linqh 2021.04.06
- public static function changeCost($productId, $cost)
- {
- return self::updateById($productId, ['cost' => $cost]);
- }
- //更新某个花材的加价 2021.04.06
- public static function changeAddPrice($productId, $addPrice)
- {
- return self::updateById($productId, ['addPrice' => $addPrice]);
- }
- //根据productId 计算花材的重量
- public static function getWeight($productId, $bigNum, $smallNum)
- {
- $productInfo = self::getById($productId);
- if (empty($productInfo)) {
- return 0;
- }
- $ratio = $productInfo['ratio'];
- $weight = $productInfo['weight'];
- $mergeNum = self::mergeItemNum($bigNum, $smallNum, $ratio);
- return bcmul($mergeNum, $weight, 2);
- }
- //修改product
- public static function updateProduct($data)
- {
- $id = $data['id'] ?? 0;
- $model = self::getById($id);
- if (!$model) {
- util::fail("该花材不存在");
- }
- $upData = [];
- if (isset($data['name'])) {
- if (empty($data['name'])) {
- util::fail("请输入花材名称");
- }
- $upData['name'] = $data['name'];
- $py = stringUtil::py($data['name']);
- $upData['py'] = $py;
- }
- if (isset($data['cover'])) {
- if (empty($data['cover'])) {
- util::fail("请输入花材图片");
- }
- $upData['cover'] = $data['cover'];
- }
- // if (isset($data['alias'])) {
- // if (empty($data['alias'])) {
- // util::fail("请输入花材别名");
- // }
- // $upData['alias'] = $data['alias'];
- // }
- if (isset($data['cost'])) {
- if (empty($data['cost'])) {
- util::fail("请输入花材成本价");
- }
- $upData['cost'] = $data['cost'];
- }
- if (isset($data['ratio'])) {
- if (empty($data['ratio'])) {
- util::fail("请输入花材比例");
- }
- $upData['ratio'] = $data['ratio'];
- }
- if (isset($data['weight'])) {
- $upData['weight'] = $data['weight'];
- }
- if (isset($data['addPrice'])) {
- $upData['addPrice'] = $data['addPrice'];
- }
- if (isset($data['stockWarning'])) {
- $upData['stockWarning'] = $data['stockWarning'];
- }
- if (isset($data['bigUnit'])) {
- if (empty($data['bigUnit'])) {
- util::fail("请输入花材大单位");
- }
- $upData['bigUnit'] = $data['bigUnit'];
- }
- if (isset($data['smallUnit'])) {
- if (empty($data['smallUnit'])) {
- util::fail("请输入花材小单位");
- }
- $upData['smallUnit'] = $data['smallUnit'];
- }
- if (isset($data['inTurn'])) {
- $upData['inTurn'] = $data['inTurn'];
- }
- //分类ID
- if (isset($data["classId"])) {
- $classId = $data['classId'];
- ItemClassClass::valid($classId, $model['sjId']);
- $upData['classId'] = $classId;
- }
- unset($data['id']);
- if (empty($upData)) {
- util::fail("参数错误");
- }
- self::updateById($id, $upData);
- }
- //自动改价 2021.4.14
- public static function autoPriceById($productId)
- {
- $product = self::getById($productId);
- if ($product && $product['priceLabel'] == self::PRICE_LABEL_AUTO) {
- $price = bcadd($product['cost'], $product['addPrice'], 2);
- self::changePrice($productId, $product['shopId'], $price, self::PRICE_LABEL_AUTO);
- }
- }
- //获取当前门店下所有的product
- public static function getAllProduct($sjId, $shopId, $field = "*")
- {
- $where = [
- 'sjId' => $sjId,
- 'shopId' => $shopId,
- ];
- return self::getAllByCondition($where, null, $field);
- }
- //获取当前门店下所有花材的库存数量,及成本价,库存预警的花材数量 linqh 2021-04-20
- public static function getProductStockByShopId($sjId, $shopId)
- {
- $productInfo = self::getAllProduct($sjId, $shopId, "*");
- $data = [
- 'stockBigNum' => 0,
- 'stockSmallNum' => 0,
- 'stockCost' => 0,
- 'stockWarning' => 0,
- ];
- if ($productInfo) {
- foreach ($productInfo as $v) {
- $stock = self::formatStock($v['stock'], $v['ratio']);
- $data['stockBigNum'] = bcadd($data['stockBigNum'], $stock['bigNum']);
- $data['stockSmallNum'] = bcadd($data['stockSmallNum'], $stock['smallNum']);
- $data['stockCost'] = bcadd($data['stockCost'], bcmul($v['stock'], $v['cost'], 2), 2);
- if ($v['stock'] <= $v['stockWarning']) {
- $data['stockWarning']++;
- }
- }
- }
- return $data;
- }
- //补className
- public static function groupClassName($sjId, $data)
- {
- //补className
- //获取当前商家下所有itemId=>classId
- $itemInfo = ItemClass::getGhsItemAll($sjId, "itemId,classId");
- $itemClassMap = [];
- foreach ($itemInfo as $v) {
- $itemClassMap[$v['itemId']] = $v['classId'];
- }
- //获取classId=>name
- $itemClassInfo = ItemClassClass::getAll($sjId, "id,name");
- $classNameMap = [];
- foreach ($itemClassInfo as $v) {
- $classNameMap[$v['id']] = $v['name'];
- }
- foreach ($data as $k => $v) {
- $itemId = $v['itemId'];
- $classId = $itemClassMap[$itemId] ?? 0;
- $className = $classNameMap[$classId] ?? '';
- $v['className'] = $className;
- $data[$k] = $v;
- }
- return $data;
- }
- //供货商的productId => 零售端的productId ,不存在的补productId(放在默认分类)
- //productList [{"productId":"113","bigNum":1,"smallNum":0,"classId":"-2","itemId":1}]
- public static function toggleProductList($productList, $hdShopId, $hdSjId)
- {
- $itemIds = array_column($productList, "itemId");
- $hdProductData = self::getProductInfoByItemIds($itemIds, $hdShopId);
- $hdProductData = array_column($hdProductData, null, "itemId");
- //获取默认分类ID
- $defaultClassId = ItemClassClass::getDefaultClassId($hdSjId);
- foreach ($productList as $k => $v) {
- $itemId = $v['itemId'] ?? 0;
- if (!isset($hdProductData[$itemId])) {
- //不存在,则新增
- //获取ptItem信息,写入product
- $ptItem = \biz\item\classes\PtItemClass::getById($itemId);
- unset($ptItem['addTime']);
- unset($ptItem['updateTime']);
- $productData = $ptItem;
- $productData['sjId'] = $hdSjId;
- $productData['shopId'] = $hdShopId;
- $productData['itemId'] = $itemId;
- $productData['classId'] = $defaultClassId;
- unset($productData['id']);
- $productData['rank'] = 'A';
- //计算价格
- $cost = $v['cost'] ?? 0;
- $addPrice = $v['addPrice'] ?? 0;
- $productData['price'] = bcadd($cost, $addPrice, 2);
- $addProduct = ProductClass::add($productData);
- $hdProductId = $addProduct['id'];
- } else {
- $hdProductId = $hdProductData[$itemId]['id'];
- }
- $productList[$k]['hdProductId'] = $hdProductId;
- }
- return $productList;
- }
- //供货商、零售端新开门店时,初始化花材
- public static function newShopInitProduct($sjId,$shopId,$newShopId,$adminId)
- {
- $product = self::getAllProduct($sjId, $shopId, "name,cover,classId,itemId,rank,price,priceLabel,cost,addPrice,stockWarning,weight,alias,py,ratio,bigUnit,smallUnit,bigUnitId,smallUnitId,inTurn");
- $productData = [];
- foreach ($product as $v) {
- $tmp = $v;
- $tmp['sjId'] = $sjId;
- $tmp['shopId'] = $newShopId;
- $tmp['adminId'] = $adminId;
- $productData[] = $tmp;
- }
- self::batchAdd($productData);
- }
- }
|