|
|
@@ -1,4 +1,5 @@
|
|
|
<?php
|
|
|
+
|
|
|
namespace bizGhs\product\classes;
|
|
|
|
|
|
|
|
|
@@ -6,218 +7,238 @@ use bizGhs\base\classes\BaseClass;
|
|
|
use common\components\business;
|
|
|
use common\components\util;
|
|
|
use common\services\xhItemService;
|
|
|
+
|
|
|
class ProductClass extends BaseClass
|
|
|
{
|
|
|
-
|
|
|
- public static $baseFile = '\bizGhs\product\models\Product';
|
|
|
-
|
|
|
- //根据itemIds获取相应的花材信息
|
|
|
- public static function getProductInfoByItemIds(array $itemIds)
|
|
|
- {
|
|
|
- $where = ['itemId'=>['in',$itemIds],'delStatus'=>0];
|
|
|
- $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'=>$itemIds];
|
|
|
- $data = xhItemService::getAllByCondition($where,null,'*');
|
|
|
- if(!empty($data)){
|
|
|
- $data = array_column($data, NULL, 'id');
|
|
|
- foreach ($list as $k=>$v){
|
|
|
- $coverInfo = business::formatOrderGoodsCover($data[$v['itemId']]);
|
|
|
- $unitNum = $data[$v['itemId']]['unitNum']??0;
|
|
|
- $stockInfo = self::formatStock($v['stock'],$unitNum);
|
|
|
- $list[$k]['cover'] = $coverInfo['coverUrl'];
|
|
|
- $list[$k]['bigNum'] = $stockInfo['bigNum'];
|
|
|
- $list[$k]['smallNum'] = $stockInfo['smallNum'];
|
|
|
- $list[$k]['itemName'] = $data[$v['itemId']]['name']??'';
|
|
|
- $list[$k]['unitCount'] = $unitNum?2:1;
|
|
|
- $list[$k]['bigUnit'] = xhItemService::getUnitName($data[$v['itemId']]['bigUnit']);
|
|
|
- $list[$k]['smallUnit'] =xhItemService::getUnitName($data[$v['itemId']]['smallUnit']);
|
|
|
- }
|
|
|
- }
|
|
|
- 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)
|
|
|
- {
|
|
|
- $stockBundle = floor($stock); // 扎
|
|
|
- $stockArr = explode('.',$stock);
|
|
|
- $stockPiece = 0; //支
|
|
|
- if(count($stockArr)===2){
|
|
|
- $stockPiece = bcdiv(bcmul($stockArr[1],$unitNum,1),100);
|
|
|
- }
|
|
|
- return [
|
|
|
- 'bigNum'=>$stockBundle,
|
|
|
- 'smallNum'=>(int)$stockPiece,
|
|
|
- ];
|
|
|
- }
|
|
|
-
|
|
|
- public static function mergeItemNumByItemId($itemNumBundle,$itemNumPiece,$itemId)
|
|
|
- {
|
|
|
- $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
- return self::mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum);
|
|
|
- }
|
|
|
-
|
|
|
- //花材扎、支 转换 统一数
|
|
|
- public static function mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum)
|
|
|
- {
|
|
|
- $stockDecimal = 0;
|
|
|
- if($unitNum > 0 ){
|
|
|
- $stockDecimal = bcdiv($itemNumPiece,$unitNum,2);
|
|
|
- }
|
|
|
- $itemNum = bcadd($itemNumBundle,$stockDecimal,2);
|
|
|
- return $itemNum;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //获取常用的itemIds
|
|
|
- public static function getOftenItemIds($merchantId)
|
|
|
- {
|
|
|
- $data = self::getAllList("itemId",['merchantId'=>$merchantId],'actualSold desc');
|
|
|
- if($data){
|
|
|
- $data = array_column($data,'itemId');
|
|
|
- }
|
|
|
- return $data;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //加库存,允许负库存,负数数量(盘点时)
|
|
|
-
|
|
|
- /**
|
|
|
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
- * @param $itemNumBundle 花材数量(扎)
|
|
|
- * @param $itemNumPiece 花材数量(支)
|
|
|
- * @return bool
|
|
|
- */
|
|
|
- public static function addStock($productId,$itemNumBundle,$itemNumPiece)
|
|
|
- {
|
|
|
- $productData =self::getById($productId);
|
|
|
- if(!$productData){
|
|
|
- util::fail("花材不存在");
|
|
|
- }
|
|
|
- $itemId = $productData['itemId'];
|
|
|
- $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
- //转成小数,加库存
|
|
|
- $itemNum = self::mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum);
|
|
|
- $newStock = bcadd($productData['stock'],$itemNum,2);
|
|
|
- self::updateById($productId,['stock'=>$newStock]);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- //根据数量加库存
|
|
|
- public static function addStockByItemNum($productId,$itemNum)
|
|
|
- {
|
|
|
- $productData =self::getById($productId,true);
|
|
|
- if(!$productData){
|
|
|
- util::fail("花材不存在");
|
|
|
- }
|
|
|
- $newStock = bcadd($productData->stock,$itemNum,2);
|
|
|
- $productData->stock = $newStock;
|
|
|
- $productData->save();
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- //减库存,允许负库存,负数数量(盘点时)
|
|
|
- /**
|
|
|
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
- * @param $itemNumBundle 花材数量(扎)
|
|
|
- * @param $itemNumPiece 花材数量(支)
|
|
|
- * @return bool
|
|
|
- */
|
|
|
- public static function decreaseStock($productId,$itemNumBundle,$itemNumPiece)
|
|
|
- {
|
|
|
- $productData =self::getById($productId,true);
|
|
|
- if(!$productData){
|
|
|
- util::fail("花材不存在");
|
|
|
- }
|
|
|
- $itemId = $productData['itemId'];
|
|
|
- $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
- //转成小数,更新库存
|
|
|
- $itemNum = self::mergeItemNum($itemNumBundle,$itemNumPiece,$unitNum);
|
|
|
- $newStock = bcsub($productData->stock,$itemNum,2);
|
|
|
- $productData->stock = $newStock;
|
|
|
- $productData->save();
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- //根据数量加库存
|
|
|
- public static function decreaseStockByItemNum($productId,$itemNum)
|
|
|
- {
|
|
|
- $productData =self::getById($productId);
|
|
|
- if(!$productData){
|
|
|
- util::fail("花材不存在");
|
|
|
- }
|
|
|
- $newStock = bcsub($productData['stock'],$itemNum,2);
|
|
|
- self::updateById($productId,['stock'=>$newStock]);
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- //计算价格
|
|
|
- /**
|
|
|
- * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
- * @param $itemNumBundle 花材数量(扎)
|
|
|
- * @param $itemNumPiece 花材数量(支)
|
|
|
- * @return bool
|
|
|
- */
|
|
|
- public static function computedPrice($productId,$itemNumBundle,$itemNumPiece)
|
|
|
- {
|
|
|
- //获取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,$itemNumPiece,2);
|
|
|
- }
|
|
|
- $bundlePrice = bcmul($price,$itemNumBundle,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;
|
|
|
- }
|
|
|
+
|
|
|
+ public static $baseFile = '\bizGhs\product\models\Product';
|
|
|
+
|
|
|
+ //根据itemIds获取相应的花材信息
|
|
|
+ public static function getProductInfoByItemIds(array $itemIds)
|
|
|
+ {
|
|
|
+ $where = ['itemId' => ['in', $itemIds], 'delStatus' => 0];
|
|
|
+ $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' => $itemIds];
|
|
|
+ $data = xhItemService::getAllByCondition($where, null, '*');
|
|
|
+ if (!empty($data)) {
|
|
|
+ $data = array_column($data, NULL, 'id');
|
|
|
+ foreach ($list as $k => $v) {
|
|
|
+ $coverInfo = business::formatOrderGoodsCover($data[$v['itemId']]);
|
|
|
+ $unitNum = $data[$v['itemId']]['unitNum']??0;
|
|
|
+ $stockInfo = self::formatStock($v['stock'], $unitNum);
|
|
|
+ $list[$k]['cover'] = $coverInfo['coverUrl'];
|
|
|
+ $list[$k]['bigNum'] = $stockInfo['bigNum'];
|
|
|
+ $list[$k]['smallNum'] = $stockInfo['smallNum'];
|
|
|
+ $list[$k]['itemName'] = $data[$v['itemId']]['name']??'';
|
|
|
+ $list[$k]['unitCount'] = $unitNum ? 2 : 1;
|
|
|
+ $list[$k]['bigUnit'] = xhItemService::getUnitName($data[$v['itemId']]['bigUnit']);
|
|
|
+ $list[$k]['smallUnit'] = xhItemService::getUnitName($data[$v['itemId']]['smallUnit']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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)
|
|
|
+ {
|
|
|
+ $stockBundle = floor($stock); // 扎
|
|
|
+ $stockArr = explode('.', $stock);
|
|
|
+ $stockPiece = 0; //支
|
|
|
+ if (count($stockArr) === 2) {
|
|
|
+ $stockPiece = bcdiv(bcmul($stockArr[1], $unitNum, 1), 100);
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ 'bigNum' => $stockBundle,
|
|
|
+ 'smallNum' => (int)$stockPiece,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function mergeItemNumByItemId($itemNumBundle, $itemNumPiece, $itemId)
|
|
|
+ {
|
|
|
+ $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
+ return self::mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum);
|
|
|
+ }
|
|
|
+
|
|
|
+ //花材扎、支 转换 统一数
|
|
|
+ public static function mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum)
|
|
|
+ {
|
|
|
+ $stockDecimal = 0;
|
|
|
+ if ($unitNum > 0) {
|
|
|
+ $stockDecimal = bcdiv($itemNumPiece, $unitNum, 2);
|
|
|
+ }
|
|
|
+ $itemNum = bcadd($itemNumBundle, $stockDecimal, 2);
|
|
|
+ return $itemNum;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //获取常用的itemIds
|
|
|
+ public static function getOftenItemIds($merchantId)
|
|
|
+ {
|
|
|
+ $data = self::getAllList("itemId", ['merchantId' => $merchantId], 'actualSold desc');
|
|
|
+ if ($data) {
|
|
|
+ $data = array_column($data, 'itemId');
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //加库存,允许负库存,负数数量(盘点时)
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
+ * @param $itemNumBundle 花材数量(扎)
|
|
|
+ * @param $itemNumPiece 花材数量(支)
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public static function addStock($productId, $itemNumBundle, $itemNumPiece)
|
|
|
+ {
|
|
|
+ $productData = self::getById($productId);
|
|
|
+ if (!$productData) {
|
|
|
+ util::fail("花材不存在");
|
|
|
+ }
|
|
|
+ $itemId = $productData['itemId'];
|
|
|
+ $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
+ //转成小数,加库存
|
|
|
+ $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum);
|
|
|
+ $newStock = bcadd($productData['stock'], $itemNum, 2);
|
|
|
+ self::updateById($productId, ['stock' => $newStock]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //根据数量加库存
|
|
|
+ public static function addStockByItemNum($productId, $itemNum)
|
|
|
+ {
|
|
|
+ $productData = self::getById($productId, true);
|
|
|
+ if (!$productData) {
|
|
|
+ util::fail("花材不存在");
|
|
|
+ }
|
|
|
+ $newStock = bcadd($productData->stock, $itemNum, 2);
|
|
|
+ $productData->stock = $newStock;
|
|
|
+ $productData->save();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //减库存,允许负库存,负数数量(盘点时)
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
+ * @param $itemNumBundle 花材数量(扎)
|
|
|
+ * @param $itemNumPiece 花材数量(支)
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public static function decreaseStock($productId, $itemNumBundle, $itemNumPiece)
|
|
|
+ {
|
|
|
+ $productData = self::getById($productId, true);
|
|
|
+ if (!$productData) {
|
|
|
+ util::fail("花材不存在");
|
|
|
+ }
|
|
|
+ $itemId = $productData['itemId'];
|
|
|
+ $unitNum = xhItemService::getItemUnitNum($itemId);
|
|
|
+ //转成小数,更新库存
|
|
|
+ $itemNum = self::mergeItemNum($itemNumBundle, $itemNumPiece, $unitNum);
|
|
|
+ $newStock = bcsub($productData->stock, $itemNum, 2);
|
|
|
+ $productData->stock = $newStock;
|
|
|
+ $productData->save();
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //根据数量加库存
|
|
|
+ public static function decreaseStockByItemNum($productId, $itemNum)
|
|
|
+ {
|
|
|
+ $productData = self::getById($productId);
|
|
|
+ if (!$productData) {
|
|
|
+ util::fail("花材不存在");
|
|
|
+ }
|
|
|
+ $newStock = bcsub($productData['stock'], $itemNum, 2);
|
|
|
+ self::updateById($productId, ['stock' => $newStock]);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //计算价格
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $productId 门店下的花材ID(xhGhsItemInfo 主键ID)
|
|
|
+ * @param $itemNumBundle 花材数量(扎)
|
|
|
+ * @param $itemNumPiece 花材数量(支)
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public static function computedPrice($productId, $itemNumBundle, $itemNumPiece)
|
|
|
+ {
|
|
|
+ //获取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, $itemNumPiece, 2);
|
|
|
+ }
|
|
|
+ $bundlePrice = bcmul($price, $itemNumBundle, 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ //有效花材判断,包括id有效、同个门店等 shish 2021.1.19
|
|
|
+ public static function valid($ids, $shopId)
|
|
|
+ {
|
|
|
+ $ids = is_numeric($ids) ? [$ids] : $ids;
|
|
|
+ $productList = self::getByIds($ids);
|
|
|
+ if (!empty($productList)) {
|
|
|
+ foreach ($productList as $product) {
|
|
|
+ if (isset($product['shopId']) == false || $product['shopId'] != $shopId) {
|
|
|
+ util::fail('只能选择同家的花材');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (count($productList) != count($ids)) {
|
|
|
+ util::fail('存在无效花材');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|