| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571 |
- <?php
- namespace bizGhs\item\classes;
- use biz\item\classes\PtItemCatClass;
- use biz\item\classes\PtItemCatRelateClass;
- use biz\item\classes\PtItemClass;
- use biz\shop\classes\ShopExtClass;
- use bizGhs\base\classes\BaseClass;
- use bizGhs\book\classes\BookItemClass;
- use bizGhs\order\classes\CheckOrderClass;
- use bizGhs\product\classes\ProductClass;
- use common\components\imgUtil;
- use common\components\util;
- use common\services\xhItemService;
- class ItemClass extends BaseClass
- {
- public static $baseFile = '\bizGhs\item\models\Item';
- public static function moveLose($outItem, $num, $shop, $params)
- {
- $sjId = $shop->sjId;
- $mainId = $shop->mainId;
- $adminId = $params['adminId'] ?? 0;
- $staffName = $params['staffName'] ?? '';
- $remark = $params['remark'] ?? '';
- $shopId = $shop->id;
- $ext = ShopExtClass::getByCondition(['shopId' => $shopId], true);
- $getItemId = $ext->losingItem ?? 0;
- if (empty($getItemId)) {
- util::fail('没有设置处理区花材');
- }
- $getItem = ItemClass::getById($getItemId, true);
- if (empty($getItem)) {
- util::fail('没有设置处理区花材哈');
- }
- //出口
- $outStock = bcsub($outItem->stock, $num, 2);
- if ($outStock < 0) {
- util::fail('剩余' . $outItem->stock . '可挪动');
- }
- $outRatio = $outItem->ratio ?? 0;
- $formNum = ProductClass::formatStock($outStock, $outRatio);
- $ghsItemInfo = [['productId' => $outItem->id, 'bigNum' => $formNum['bigNum'], 'smallNum' => $formNum['smallNum']]];
- $pdData = [];
- $pdData['itemInfo'] = $ghsItemInfo;
- $pdData['sjId'] = $sjId;
- $pdData['shopId'] = $shopId;
- $pdData['adminId'] = $adminId;
- $pdData['mainId'] = $mainId;
- $pdData['staffName'] = $staffName;
- $pdData['remark'] = $remark;
- CheckOrderClass::opOrder($pdData, false, false);
- //进口
- $inRatio = $getItem->ratio ?? 0;
- $inStock = bcadd($getItem->stock, $num, 2);
- $format = ProductClass::formatStock($inStock, $inRatio);
- $ghsItemInfo = [['productId' => $getItem->id, 'bigNum' => $format['bigNum'], 'smallNum' => $format['smallNum']]];
- $pdData = [];
- $pdData['itemInfo'] = $ghsItemInfo;
- $pdData['sjId'] = $sjId;
- $pdData['shopId'] = $shopId;
- $pdData['adminId'] = $adminId;
- $pdData['mainId'] = $mainId;
- $pdData['staffName'] = $staffName;
- $pdData['remark'] = $remark;
- CheckOrderClass::opOrder($pdData, false, false);
- }
- //增加和减少半扎 ssh 20250417
- public static function modifyHalf($shop, $product, $params, $add)
- {
- $stock = $product->stock;
- if ($add == 0) {
- $newStock = bcsub($stock, 0.5, 2);
- } else {
- $newStock = bcadd($stock, 0.5, 2);
- }
- if ($newStock < 0) {
- util::fail('库存不足');
- }
- $mainId = $shop->mainId;
- $shopId = $shop->id;
- $sjId = $shop->sjId;
- $adminId = $params['adminId'] ?? 0;
- $staffName = $params['staffName'] ?? '';
- $remark = $params['remark'] ?? '';
- $ratio = $product->ratio ?? 0;
- $formNum = ProductClass::formatStock($newStock, $ratio);
- $ghsItemInfo = [['productId' => $product->id, 'bigNum' => $formNum['bigNum'], 'smallNum' => $formNum['smallNum']]];
- $pdData = [];
- $pdData['itemInfo'] = $ghsItemInfo;
- $pdData['sjId'] = $sjId;
- $pdData['shopId'] = $shopId;
- $pdData['adminId'] = $adminId;
- $pdData['mainId'] = $mainId;
- $pdData['staffName'] = $staffName;
- $pdData['remark'] = $remark;
- CheckOrderClass::opOrder($pdData, false, false);
- }
- public static function getLoanList($where, $shop)
- {
- $bookSn = $shop->bookSn ?? 0;
- $bookData = [];
- if (!empty($bookSn)) {
- $booList = BookItemClass::getAllByCondition(['bookSn' => $bookSn], null, '*', null, true);
- if (!empty($booList)) {
- foreach ($booList as $book) {
- $onNum = $book->onNum ?? 0;
- $bookNum = $book->bookNum ?? 0;
- $roadNum = $book->roadNum ?? 0;
- $itemId = $book->itemId ?? 0;
- $needCgNum = $book->needCgNum ?? 0;
- $bookData[$itemId] = ['onNum' => $onNum, 'bookNum' => $bookNum, 'roadNum' => $roadNum, 'needCgNum' => $needCgNum];
- }
- }
- }
- $data = self::getList('*', $where);
- if (isset($data['list']) && !empty($data['list'])) {
- foreach ($data['list'] as $key => $val) {
- $data['list'][$key]['bigCount'] = '';
- $data['list'][$key]['smallCount'] = '';
- $shortCover = $val['cover'] ?? '';
- $smallCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_130,w_130";
- $bigCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_700,w_700";
- $data['list'][$key]['shortCover'] = $shortCover;
- $data['list'][$key]['cover'] = $smallCover;
- $data['list'][$key]['smallCover'] = $smallCover;
- $data['list'][$key]['bigCover'] = $bigCover;
- //前端使用字段
- $data['list'][$key]['showUsePrice'] = '';
- $productId = $val['id'] ?? 0;
- $stock = $val['stock'] ?? 0;
- $couldLoan = 0;
- if (isset($bookData[$productId])) {
- $bookNum = $bookData[$productId] && $bookData[$productId]['bookNum'] ? $bookData[$productId]['bookNum'] : 0;
- if ($bookNum > 0) {
- $roadNum = $bookData[$productId] && $bookData[$productId]['roadNum'] ? $bookData[$productId]['roadNum'] : 0;
- $needCgNum = $bookData[$productId] && $bookData[$productId]['needCgNum'] ? $bookData[$productId]['needCgNum'] : 0;
- $unReachNum = bcadd($roadNum, $needCgNum, 2);
- $useStock = bcsub($bookNum, $unReachNum, 2);
- if ($stock > $useStock) {
- $couldLoan = bcsub($stock, $useStock, 2);
- }
- } else {
- $couldLoan = $stock;
- }
- } else {
- $couldLoan = $stock;
- }
- $data['list'][$key]['stock'] = $couldLoan;
- }
- }
- return $data;
- }
- public static function getSimpleList($where, $num)
- {
- $data = self::getList('id,name,price,stock,frontHide,cover', $where);
- if (isset($data['list']) && !empty($data['list'])) {
- foreach ($data['list'] as $key => $val) {
- $data['list'][$key]['bigCount'] = '';
- if ($num > 0) {
- $data['list'][$key]['bigCount'] = $num;
- }
- $data['list'][$key]['smallCount'] = '';
- $shortCover = $val['cover'] ?? '';
- $smallCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_130,w_130";
- $bigCover = imgUtil::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_700,w_700";
- $data['list'][$key]['shortCover'] = $shortCover;
- $data['list'][$key]['cover'] = $smallCover;
- $data['list'][$key]['smallCover'] = $smallCover;
- $data['list'][$key]['bigCover'] = $bigCover;
- //前端使用字段
- $data['list'][$key]['showUsePrice'] = '';
- }
- }
- return $data;
- }
- public static function errorPrice($shop)
- {
- $mainId = $shop->mainId ?? 0;
- $itemList = ItemClass::getAllByCondition(['mainId' => $mainId, 'delStatus' => 0, 'status' => 1], null, 'id,name,price,skPrice,hjPrice');
- $arr = [];
- $map = [];
- if (!empty($itemList)) {
- foreach ($itemList as $item) {
- $name = $item['name'] ?? '';
- $productId = $item['id'] ?? 0;
- $price = $item['price'] ?? 0;
- $skPrice = $item['skPrice'] ?? 0;
- $hjPrice = $item['hjPrice'] ?? 0;
- $name = trim(strtolower($name));
- $name = str_replace(" ", "", $name);
- $hasLevel = true;
- $pfKeyName = '';
- $lsKeyName = '';
- $dkKeyName = '';
- $keyLevel = '';
- if (strstr($name, "a级")) {
- $pfKeyName = str_replace("a级", "-批发", $name);
- $lsKeyName = str_replace("a级", "-零售", $name);
- $dkKeyName = str_replace("a级", "-大客", $name);
- $keyLevel = 'a';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "b级")) {
- $pfKeyName = str_replace("b级", "-批发", $name);
- $lsKeyName = str_replace("b级", "-零售", $name);
- $dkKeyName = str_replace("b级", "-大客", $name);
- $keyLevel = 'b';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "c级")) {
- $pfKeyName = str_replace("c级", "-批发", $name);
- $lsKeyName = str_replace("c级", "-零售", $name);
- $dkKeyName = str_replace("c级", "-大客", $name);
- $keyLevel = 'c';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "d级")) {
- $pfKeyName = str_replace("d级", "-批发", $name);
- $lsKeyName = str_replace("d级", "-零售", $name);
- $dkKeyName = str_replace("d级", "-大客", $name);
- $keyLevel = 'd';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "a")) {
- $pfKeyName = str_replace("a", "-批发", $name);
- $lsKeyName = str_replace("a", "-零售", $name);
- $dkKeyName = str_replace("a", "-大客", $name);
- $keyLevel = 'a';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "b")) {
- $pfKeyName = str_replace("b", "-批发", $name);
- $lsKeyName = str_replace("b", "-零售", $name);
- $dkKeyName = str_replace("b", "-大客", $name);
- $keyLevel = 'b';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "c")) {
- $pfKeyName = str_replace("c", "-批发", $name);
- $lsKeyName = str_replace("c", "-零售", $name);
- $dkKeyName = str_replace("c", "-大客", $name);
- $keyLevel = 'c';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } elseif (strstr($name, "d")) {
- $pfKeyName = str_replace("d", "-批发", $name);
- $lsKeyName = str_replace("d", "-零售", $name);
- $dkKeyName = str_replace("d", "-大客", $name);
- $keyLevel = 'd';
- $map[$pfKeyName . $keyLevel] = $productId;
- $map[$lsKeyName . $keyLevel] = $productId;
- $map[$dkKeyName . $keyLevel] = $productId;
- } else {
- $hasLevel = false;
- }
- if ($hasLevel) {
- $arr[$pfKeyName][$keyLevel] = $price;
- $arr[$lsKeyName][$keyLevel] = $skPrice;
- $arr[$dkKeyName][$keyLevel] = $hjPrice;
- }
- }
- }
- $error = [];
- if (!empty($arr)) {
- foreach ($arr as $key => $it) {
- if (isset($it['a']) && isset($it['b']) && $it['b'] > $it['a']) {
- $error[$key] = $it;
- }
- if (isset($it['b']) && isset($it['c']) && $it['c'] > $it['b']) {
- $error[$key] = $it;
- }
- if (isset($it['c']) && isset($it['d']) && $it['d'] > $it['c']) {
- $error[$key] = $it;
- }
- if (isset($it['a']) && isset($it['c']) && $it['c'] > $it['a']) {
- $error[$key] = $it;
- }
- }
- }
- $data = [];
- if (!empty($error)) {
- foreach ($error as $name => $val) {
- $data[] = array_merge(['name' => $name], $val);
- }
- }
- return ['data' => $data, 'map' => $map];
- }
- //初始化花材 lqh 2021.4.12 modify ssh 20210711
- public static function initUpdateItem($mainId)
- {
- //删除原有分类
- ItemClassClass::updateByCondition(['mainId' => $mainId], ['mainId' => 0]);
- //增加默认分类
- $classData = ['mainId' => $mainId, 'name' => '默认分类', 'inTurn' => -1, 'isDefault' => 1,];
- $default = ItemClassClass::add($classData, true);
- $defaultId = $default->id ?? 0;
- //将原花材分类设置为默认分类
- ProductClass::updateByCondition(['mainId' => $mainId], ['classId' => $defaultId]);
- $hasExistsProduct = ProductClass::getAllByCondition(['mainId' => $mainId], null, '*', 'itemId', true);
- $ptClass = PtItemCatClass::getAllList("*", ['type' => 0], 'inTurn desc');
- if (empty($ptClass)) {
- return false;
- }
- $hasClassIds = array_column($ptClass, 'id');
- $relate = PtItemCatRelateClass::getAllByCondition(['catId' => ['in', $hasClassIds]], null, '*');
- $relateInfo = [];
- $hasItemIds = [];
- if (!empty($relate)) {
- foreach ($relate as $key => $val) {
- $catId = $val['catId'] ?? 0;
- $itemId = $val['itemId'] ?? 0;
- $relateInfo[$catId][] = $itemId;
- $hasItemIds[] = $itemId;
- }
- $hasItemIds = array_unique(array_filter($hasItemIds));
- }
- $itemInfo = PtItemClass::getAllByCondition(['id' => ['in', $hasItemIds]], null, '*', 'id');
- foreach ($ptClass as $v) {
- $classId = $v['id'];
- $className = $v['name'];
- $inTurn = $v['inTurn'];
- $cover = $v['cover'] ?? '';
- $classData = [
- 'mainId' => $mainId,
- 'name' => $className,
- 'inTurn' => $inTurn,
- 'cover' => $cover,
- ];
- //初始化花材分类
- $addClassRespond = ItemClassClass::add($classData);
- $ghsClassId = $addClassRespond['id'];
- if (isset($relateInfo[$classId]) == false) {
- continue;
- }
- $itemAddData = [];
- $productAddData = [];
- foreach ($relateInfo[$classId] as $currentId) {
- if (isset($itemInfo[$currentId]) == false) {
- continue;
- }
- $currentItem = $itemInfo[$currentId] ?? [];
- $ptItemId = $currentItem['id'];
- //零售开批发店,已经存在的花材,不需要重复新建,只要修改分类
- if (isset($hasExistsProduct[$ptItemId])) {
- $hasExists = $hasExistsProduct[$ptItemId];
- $hasExists->classId = $ghsClassId;
- $hasExists->save();
- continue;
- }
- unset($currentItem['addTime']);
- unset($currentItem['updateTime']);
- $itemData = $currentItem;
- $itemData['classId'] = $ghsClassId;
- $itemData['itemId'] = $currentItem['id'];
- unset($itemData['id']);
- $itemData['rank'] = 'A';
- $itemAddData[] = $itemData;
- $productData = $currentItem;
- $productData['mainId'] = $mainId;
- $productData['itemId'] = $currentItem['id'];
- $productData['classId'] = $ghsClassId;
- unset($productData['id']);
- $productData['rank'] = 'B';
- $productData['price'] = bcadd($currentItem['cost'], $currentItem['addPrice'], 2);
- //花材默认是下架状态
- $productData['status'] = 2;
- $productData['property'] = 1;
- $productAddData[] = $productData;
- }
- if (empty($itemAddData)) {
- continue;
- }
- ProductClass::batchAdd($productAddData);
- }
- }
- //从首店复制花材和分类 ssh 20220522
- public static function copyItem($oldMainId, $newMainId)
- {
- $classList = ItemClassClass::getAllByCondition(['mainId' => $oldMainId], null, '*');
- $classMap = [];
- if (!empty($classList)) {
- foreach ($classList as $class) {
- $preId = $class['id'] ?? 0;
- $class['mainId'] = $newMainId;
- $class['shopId'] = 0;
- unset($class['addTime']);
- unset($class['updateTime']);
- unset($class['id']);
- $ret = ItemClassClass::add($class, true);
- $newId = $ret->id ?? 0;
- $classMap[$preId] = $newId;
- }
- }
- $itemList = self::getAllByCondition(['mainId' => $oldMainId], null, '*');
- if (!empty($itemList)) {
- foreach ($itemList as $item) {
- unset($item['stock']);
- unset($item['addTime']);
- unset($item['updateTime']);
- unset($item['id']);
- $preId = $item['classId'] ?? 0;
- $newId = $classMap[$preId] ?? 0;
- $item['classId'] = $newId;
- $item['mainId'] = $newMainId;
- $item['shopId'] = 0;
- $item['status'] = 2;
- self::add($item);
- }
- }
- }
- public static function getShowList($where, $custom)
- {
- $level = $custom->level ?? 1;
- $field = 'id,cover,name,cost,itemId,classId,py,property,skPrice,variety,price,hjPrice,discountPrice,skDiscountPrice,hjDiscountPrice,stock,stockWarning,presell,reachNum,reachNumDiscount,ratioType,smallRatio,smallUnit,bigUnit,ratio,hjAddPrice,addPrice,limitBuy';
- $list = self::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], $field);
- if (empty($list)) {
- return $list;
- }
- $list = ProductClass::groupProductInfo($list, $level, $custom);
- $data = [];
- $data['-1'] = [];
- foreach ($list as $it) {
- $classId = $it['classId'] ?? 0;
- $data[$classId][] = $it;
- //特价,今日推荐
- if (isset($it['discountPrice']) && $it['discountPrice'] > 0) {
- $data['-1'][] = $it;
- }
- //预售
- if (isset($it['presell']) && $it['presell'] == 1) {
- $data['-3'][] = $it;
- }
- //满减
- $reachNum = $it['reachNum'] ?? 0;
- $reachNumDiscount = $it['reachNumDiscount'] ?? 0;
- if ($reachNum > 0 && $reachNumDiscount > 0) {
- $data['-2'][] = $it;
- }
- }
- return $data;
- }
- //列表数据
- public static function getGhsItemList($where)
- {
- $data = self::getList('*', $where, 'addTime DESC');
- $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : [];
- if (empty($list)) {
- return $data;
- }
- foreach ($list as $k => $v) {
- $list[$k]['itemName'] = $list[$k]['name'] ?? '';
- $cover = $list[$k]['cover'] ?? '';
- $list[$k]['cover'] = imgUtil::groupImg($cover);
- }
- $data['list'] = $list;
- if (isset($where['classId'])) {
- $class = ItemClassClass::getById($where['classId']);
- $data['className'] = $class['name'] ?? '';
- }
- return $data;
- }
- //批量新增花材(初始化使用)
- public static function batchAddGhsItem($data)
- {
- return true;
- }
- //修改花材的信息(库存预警、每扎加价、每扎重量)
- public static function updateGshItem($id, $stockWarning, $addPrice, $weight, $cost)
- {
- $data['stockWarning'] = $stockWarning;
- $data['addPrice'] = $addPrice;
- $data['weight'] = $weight;
- $data['cost'] = $cost;
- self::updateById($id, $data);
- return true;
- }
- //删除花材
- public static function deleteGhsItem($id)
- {
- self::deleteById($id);
- return true;
- }
- //根据花材分类ID,获取itemIds
- public static function getItemIdsByClassId($sjId, $classId)
- {
- $where = [
- 'classId' => $classId,
- 'sjId' => $sjId,
- ];
- $data = self::getAllList("itemId", $where);
- if ($data) {
- $data = array_column($data, 'itemId');
- }
- return $data;
- }
- //获取当前供货商下的所有item
- public static function getGhsItemAll($sjId, $select = "*")
- {
- $where = [
- 'sjId' => $sjId
- ];
- $data = self::getAllList($select, $where);
- return $data;
- }
- //根据拼音名称,获取itemIds
- public static function getItemIdsByPyName($pyName)
- {
- //统一转小写
- $pyName = strtolower($pyName);
- $where = ['py' => $pyName];
- $data = xhItemService::getAllByCondition($where, null, 'id');
- if ($data) {
- $data = array_column($data, 'id');
- }
- return $data;
- }
- //获取某个花材的信息 lqh 2021.1.28
- public static function getItemData($itemId, $sjId)
- {
- return self::getByCondition(['itemId' => $itemId, 'sjId' => $sjId]);
- }
- //修改某个花材的成本价(采购之后要用到) lqh 2021.1.28 (废弃不用,更新product)
- public static function changeCost($itemId, $sjId, $cost)
- {
- return self::updateByCondition(['itemId' => $itemId, 'sjId' => $sjId], ['cost' => $cost]);
- }
- }
|