sjId ?? 0; $shopId = $shop->id ?? 0; $mainId = $shop->mainId ?? 0; $product = self::getLockById($id); if (empty($product)) { util::fail("该花材不存在"); } $upData = []; //库存可以修改 if (isset($data['stock']) && is_numeric($data['stock'])) { $preStock = $product->stock ?? 0; if ($data['stock'] != $preStock) { if ($data['stock'] < 0) { util::fail("库存不能小于0"); } //增加盘点记录 2021.7.27 $ratio = $product->ratio ?? 0; $formNum = self::formatStock($data['stock'], $ratio); $ghsItemInfo = [['productId' => $product->id, 'bigNum' => $formNum['bigNum'], 'smallNum' => $formNum['smallNum'],]]; $pdData = []; $pdData['itemInfo'] = $ghsItemInfo; $pdData['sjId'] = $sjId; $pdData['shopId'] = $shopId; $pdData['adminId'] = $data['adminId']; $pdData['mainId'] = $mainId; $pdData['staffName'] = $data['staffName'] ?? ''; CheckOrderClass::opOrder($pdData, false, false); } unset($data['stock']); } unset($data['adminId']); if (isset($data['name'])) { if (empty($data['name'])) { util::fail("请输入花材名称"); } $upData['name'] = $data['name']; } if (isset($data['py']) && !empty($data['py'])) { $upData['py'] = $data['py']; } if (isset($data['cover']) && !empty($data['cover'])) { $upData['cover'] = $data['cover']; } if (isset($data['discountPrice']) && is_numeric($data['discountPrice'])) { $discountPrice = $data['discountPrice'] ?? 0; $currentPrice = $data['price'] ?? 0; if ($discountPrice >= $currentPrice) { util::fail('特价要小于售价'); } $upData['discountPrice'] = $discountPrice; } //加价 $upData['skAddPrice'] = $data['skAddPrice'] ?? 0; //价格 $price = $data['skPrice'] ?? 0; if (is_numeric($price) == false || $price < 0) { util::fail('请填写价格'); } $upData['skPrice'] = $price; if (isset($data['stockWarning'])) { $upData['stockWarning'] = $data['stockWarning']; } //重量不可修改 unset($data['weight']); if (isset($data['inTurn'])) { $upData['inTurn'] = $data['inTurn']; } //路上库存不能直接修改 unset($data['onStock']); if (isset($data['delStatus'])) { $upData['delStatus'] = $data['delStatus']; } //分类ID if (isset($data["classId"])) { $classId = $data['classId']; $upData['classId'] = $classId; } $paramsBack = $upData; $ptItemId = $product->itemId ?? 0; //修改价格 if ($price != $product->price) { self::changeSinglePrice($shop, $ptItemId, $price); unset($upData['skPrice']); } //修改其它 self::updateById($id, $upData); if (isset($shop->default) && $shop->default == 1 && isset($shop->dataSync) && $shop->dataSync == 1) { //总店修改同步到所有门店 $chainShopList = ShopClass::getAllByCondition(['sjId' => $sjId], null, '*', null, true); foreach ($chainShopList as $chainShop) { $chainShopId = $chainShop->id ?? 0; if (isset($chainShop->join) && $chainShop->join == 1) { continue; } if ($chainShopId == $shop->id) { //前面已经添加过了 continue; } $params = $paramsBack; //所有直营店的分类、上下架、启用停用不同步 unset($params['classId']); unset($params['status']); unset($params['delStatus']); $chainMainId = $chainShop->mainId ?? 0; $chainProduct = ProductClass::getByCondition(['mainId' => $chainMainId, 'itemId' => $ptItemId], true); if (empty($chainProduct)) { continue; } if ($price != $chainProduct->price) { self::changeSinglePrice($chainShop, $ptItemId, $price); unset($params['skPrice']); } self::updateById($chainProduct->id, $params); } } } //单个价格修改 ssh 20230214 public static function changeSinglePrice($shop, $ptItemId, $skPrice, $params = []) { $mainId = $shop->mainId ?? 0; $productInfo = ProductClass::getByCondition(['itemId' => $ptItemId, 'mainId' => $mainId], true); if (empty($productInfo)) { return false; } $productInfo->skPrice = $skPrice; $productInfo->save(); $price = $productInfo->price ?? 0; $sjId = $shop->sjId ?? 0; $itemId = $productInfo->id ?? 0; $ptItemId = $productInfo->itemId ?? 0; $name = $productInfo->name ?? ''; $cover = $productInfo->cover ?? ''; $staffName = $params['staffName'] ?? ''; $changeType = $params['changeType'] ?? 'normal'; $targetId = $params['targetId'] ?? 0; $event = '修改'; $type = 0; if ($changeType == 'cg') { $event = '采购后修改'; $type = 1; } $changeData = [ 'ptStyle' => 1, 'sjId' => $sjId, 'mainId' => $mainId, 'itemId' => $itemId, 'ptItemId' => $ptItemId, 'price' => $price, 'skPrice' => $skPrice, 'staffId' => 0, 'staffName' => $staffName, 'name' => $name, 'cover' => $cover, 'event' => $event, 'type' => $type, 'targetId' => $targetId, ]; PriceChangeClass::addData($changeData); } //新增花材 public static function addItem($data, $currentShop) { $currentMainId = $currentShop->mainId ?? 0; $classId = $data['classId'] ?? 0; $mainId = $data['mainId'] ?? 0; $stockWarning = $data['stockWarning'] ?? false; $data['py'] = stringUtil::py($data['name']); $name = $data['name'] ?? false; $data['alias'] = $data['alias'] ?? ''; $data['cover'] = isset($data['cover']) && !empty($data['cover']) ? $data['cover'] : ''; $ratio = $data['ratio'] ?? false; $weight = $data['weight'] ?? false; $data['bigUnit'] = $data['bigUnit'] ?? '扎'; $data['smallUnit'] = $data['smallUnit'] ?? '支'; $data['shopId'] = $data['shopId'] ?? 0; $currentShopId = $data['shopId']; $data['sjId'] = $data['sjId'] ?? 0; if (!$data['sjId']) { util::fail("参数错误"); } $stock = 0; if (isset($data['stock']) && is_numeric($data['stock'])) { if ($data['stock'] < 0) { util::fail("库存数不能小于0"); } $stock = $data['stock']; } //没有库存则下架 $data['status'] = $stock == 0 ? 2 : 1; if (!$classId) { util::fail("请选择分类"); } if (isset($data['skPrice']) == false || is_numeric($data['skPrice']) == false || $data['skPrice'] < 0) { util::fail("请输入价格"); } if (isset($data['skAddPrice']) == false || is_numeric($data['skAddPrice']) == false) { util::fail("请输入加价"); } if ($stockWarning === false) { util::fail("请输入库存预警值"); } if ($name === false) { util::fail("请输入花材名称"); } if ($ratio === false) { util::fail("请输入花材比例"); } if ($weight === false) { util::fail("请输入花材重量"); } $cat = ItemClassClass::getById($classId, true); if (empty($cat)) { util::fail("花材分类不存在"); } if ($cat->mainId != $mainId) { util::fail('不是您的分类'); } $connection = Yii::$app->db; $transaction = $connection->beginTransaction(); try { if (isset($data['itemId']) == false || empty($data['itemId'])) { //添加新品种先在平台新增花材 $defaultInfo = PtItemClassClass::getByCondition(['isDefault' => 1]); $defaultClassId = $defaultInfo['id'] ?? 0; if (empty($defaultClassId)) { Yii::info('添加花材时没有找到默认分类'); util::fail('添加失败'); } $itemData = $data; $itemData['classId'] = $defaultClassId; $itemData['skAddPrice'] = $itemData['skAddPrice'] ?? 3; $itemData['hjAddPrice'] = $itemData['hjAddPrice'] ?? 2; $itemData['zsAddPrice'] = $itemData['zsAddPrice'] ?? 1; $ptItemInfo = PtItemClass::addItem($itemData); $data['itemId'] = $ptItemInfo['id']; } else { //从平台导入花材 $has = self::getByCondition(['mainId' => $mainId, 'itemId' => $data['itemId']], true); if (!empty($has)) { util::fail('已经导入过了哈'); } } $ptItemId = $data['itemId'] ?? 0; $res = self::add($data, true); if ($stock > 0) { //有库存数量,增加盘盈记录 2021.7.9 lqh //增加盘点订单 $pdOrderSn = orderSn::getGhsCheckSn(); $pdOrderData = []; $pdOrderData['orderSn'] = $pdOrderSn; $pdOrderData['sjId'] = $data['sjId']; $pdOrderData['shopId'] = $data['shopId']; $pdOrderData['status'] = CheckOrderClass::STATUS_COMPLETE; $pdOrderData['bigNum'] = $stock; $pdOrderData['adminId'] = $data['adminId']; $pdOrderData['smallNum'] = 0; $pdOrderData['price'] = $data['price']; $pdOrderData['remark'] = '添加花材时初始化库存'; CheckOrderClass::add($pdOrderData); $pdOrderItemData = []; $pdOrderItemData['orderSn'] = $pdOrderSn; $pdOrderItemData['productId'] = $res->id; $pdOrderItemData['itemId'] = $data['itemId']; $pdOrderItemData['itemId'] = $data['itemId']; $pdOrderItemData['itemNum'] = $stock; $pdOrderItemData['itemStock'] = 0; $pdOrderItemData['profitLostNum'] = $stock; $itemInfo = [ 'itemName' => $name, 'itemCover' => $data['cover'], 'bigNum' => $stock, 'smallNum' => 0, 'bigNumStock' => 0, 'smallNumStock' => 0, 'bigNumProfitLoss' => $stock, 'smallNumProfitLoss' => 0, 'itemUnit' => 0, 'ratio' => $ratio, 'rank' => 'A', 'bigUnit' => $data['bigUnit'], 'smallUnit' => $data['smallUnit'], ]; $pdOrderItemData['itemInfo'] = json_encode($itemInfo); $pdOrderItemData['itemPrice'] = $data['price']; $pdOrderItemData['itemCost'] = $data['cost']; CheckOrderItemClass::add($pdOrderItemData); $record = []; $record['sjId'] = $data['sjId']; $record['shopId'] = $data['shopId']; //增加中央ID $record['mainId'] = $currentMainId; $record['orderSn'] = $pdOrderSn; $record['itemId'] = $data['itemId']; $record['productId'] = $res->id; $record['itemNum'] = $stock;//盈亏数 $record['oldStock'] = 0; $record['newStock'] = $stock; //新库存直接等于盘点的数量 StockRecordClass::addCheckOrderRecord($record); } if (isset($currentShop->default) && $currentShop->default == 1) { //找到父级sj下的所有直营店,添加花材 $shopList = ShopClass::getAllByCondition(['sjId' => $data['sjId']], null, '*', null, true); foreach ($shopList as $shop) { if (isset($shop->join) && $shop->join == 1) { continue; } $shopId = $shop->id ?? 0; if ($shopId == $currentShop->id) { //前面已经添加过了 continue; } $thisMainId = $shop->mainId ?? 0; $data['shopId'] = $shopId; $data['mainId'] = $thisMainId; //不是当前门店,库存默认为0并且是下架状态 //不是当前门店,花材分类放在默认分类下 if ($currentShopId != $shopId) { $data['stock'] = 0; $data['status'] = 2; $defaultCat = ItemClassClass::getByCondition(['mainId' => $thisMainId, 'isDefault' => 1], true); $defaultCatId = $defaultCat->id ?? 0; if (empty($defaultCatId)) { util::fail($shop->shopName . "没有默认分类"); } $data['classId'] = $defaultCatId; } //已经有了不再添加 $chainHas = self::getByCondition(['mainId' => $thisMainId, 'itemId' => $ptItemId], true); if (!empty($chainHas)) { continue; } self::add($data); } } $transaction->commit(); } catch (\Exception $exception) { $transaction->rollBack(); Yii::info('失败原因:' . $exception->getMessage()); util::fail('添加失败'); } } //初始化花材 lqh 2021.4.12 modify ssh 20210711 public static function initItem($mainId) { $ptClass = PtItemCatClass::getAllList("*", ['type' => 1], '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']; $classData = [ 'mainId' => $mainId, 'name' => $className, 'inTurn' => $inTurn, ]; //初始化花材分类 $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] ?? []; 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; $productAddData[] = $productData; } if (empty($itemAddData)) { continue; } ProductClass::batchAdd($productAddData); } //增加默认分类 $classData = ['mainId' => $mainId, 'name' => '默认分类', 'inTurn' => -1, 'isDefault' => 1,]; ItemClassClass::add($classData); } //从首店复制花材和分类 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; self::add($item); } } } public static function getShowList($where) { $level = 0; $field = 'id,cover,name,cost,itemId,classId,property,py,skPrice,skMore,addPrice,variety,price,discountPrice,skDiscountPrice,stock,stockWarning,presell,reachNum,reachNumDiscount,ratioType,smallRatio,smallUnit,bigUnit,ratio'; $list = self::getAllByCondition($where, ['inTurn' => SORT_DESC, 'actualSold' => SORT_DESC], $field); if (empty($list)) { return $list; } $list = self::groupProductInfo($list, $level); $data = []; $data[ItemClassClass::TJ_CLASS_ID] = []; $data[ItemClassClass::OFTEN_CLASS_ID] = []; $data[ItemClassClass::PRESELL_CLASS_ID] = []; foreach ($list as $it) { $classId = $it['classId'] ?? 0; $data[$classId][] = $it; if (isset($it['discountPrice']) && $it['discountPrice'] > 0) { $data[ItemClassClass::TJ_CLASS_ID][] = $it; } $reachNum = $it['reachNum'] ?? 0; $reachNumDiscount = $it['reachNumDiscount'] ?? 0; if ($reachNum > 0 && $reachNumDiscount > 0) { $data[ItemClassClass::OFTEN_CLASS_ID][] = $it; } if (isset($it['presell']) && $it['presell'] == 1) { $data[ItemClassClass::PRESELL_CLASS_ID][] = $it; } } return $data; } //花材图片,名称,大小单位,小单位价格 public static function groupProductInfo($list, $level = 0) { foreach ($list as $k => $v) { $shortCover = $v['cover'] ?? ''; $cover = imgUtil::getPrefix() . 'hhb_small.png'; if (!empty($shortCover)) { $parse = parse_url(self::groupImg($shortCover)); if (empty($parse['query'])) { $cover = self::groupImg($shortCover) . "?x-oss-process=image/resize,m_fill,h_110,w_110"; } else { $cover = self::groupImg($shortCover); } } $ratio = isset($v['ratio']) && $v['ratio'] > 0 ? $v['ratio'] : 1; $stockInfo = self::formatStock($v['stock'], $ratio); $list[$k]['cover'] = $cover; $list[$k]['shortCover'] = $shortCover; $list[$k]['bigNum'] = $stockInfo['bigNum']; $list[$k]['smallNum'] = $stockInfo['smallNum']; $list[$k]['itemName'] = $v['name'] ?? ''; $skDiscountPrice = $v['skDiscountPrice'] ?? 0; if ($skDiscountPrice > 0) { $skPrice = $skDiscountPrice; } else { $skPrice = $v['skPrice'] ?? 0; } $skPrice = floatval($skPrice); $list[$k]['prePrice'] = $skPrice; $list[$k]['price'] = $skPrice; $list[$k]['bigPrice'] = $skPrice; $smallRatio = $v['smallRatio'] ?? 0; $div = bcdiv($skPrice, $ratio, 2); $smallPrice = bcmul($div, $smallRatio, 2); $list[$k]['smallPrice'] = $smallPrice; } return $list; } //花材的库存转换: 库存是小数,根据各个花材的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, ]; } //列表数据 public static function getItemList($where) { $data = self::getList('*', $where, 'inTurn DESC'); $list = isset($data['list']) && !empty($data['list']) ? $data['list'] : []; if (empty($list)) { return $data; } $itemIds = array_column($list, 'itemId'); $itemData = xhItemService::getByIds($itemIds); $itemData = array_column($itemData, null, 'id'); foreach ($list as $k => $v) { $list[$k]['itemName'] = $itemData[$v['itemId']]['name'] ?? ''; } $data['list'] = $list; return $data; } //批量新增花材(初始化使用) public static function batchAddItem($data) { return true; } //修改花材的信息(库存预警、每扎加价、每扎重量) public static function updateItem($id, $stockWarning, $addPrice, $weight, $cost) { $model = self::getById($id); if (!$model) { util::fail("该花材不存在"); } $data['stockWarning'] = $stockWarning; $data['addPrice'] = $addPrice; $data['weight'] = $weight; $data['cost'] = $cost; self::updateById($id, $data); return true; } //删除花材 public static function deleteItem($id) { self::deleteById($id); return true; } //根据花材分类ID,获取itemIds public static function getItemIdsByClassId($classId) { $data = self::getAllList("itemId", ['classId' => $classId]); if ($data) { $data = array_column($data, 'itemId'); } return $data; } //获取当前供货商下的所有item public static function getItemAll($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 public static function changeCost($itemId, $sjId, $cost) { return self::updateByCondition(['itemId' => $itemId, 'sjId' => $sjId], ['cost' => $cost]); } }