// +---------------------------------------------------------------------- declare (strict_types=1); namespace app\store\model; use app\common\library\helper; use app\common\model\GoodsPackage as GoodsPackageModel; use app\common\enum\goods\SpecType as SpecTypeEnum; /** * 商品Package模型 * Class GoodsSku * @package app\store\model */ class GoodsPackage extends GoodsPackageModel { // /** // * 获取库存总数量 (根据sku列表数据) // * @param array $skuList // * @return float|int // */ // public static function getStockTotal(array $skuList) // { // return helper::getArrayColumnSum($skuList, 'stock_num'); // } // /** // * 获取预警库存总数量 (根据sku列表数据) // * @param array $skuList // * @return float|int // */ // public static function getAlarmStockTotal(array $skuList) // { // return helper::getArrayColumnSum($skuList, 'alarm_stock_num'); // } // /** // * 获取商品价格高低区间 (根据sku列表数据) // * @param array $skuList // * @return array // */ // public static function getGoodsPrices(array $skuList) // { // $goodsPriceArr = helper::getArrayColumn($skuList, 'goods_price'); // return [min($goodsPriceArr), max($goodsPriceArr)]; // } // /** // * 获取划线价格高低区间 (根据sku列表数据) // * @param array $skuList // * @return array // */ // public static function getLinePrices(array $skuList) // { // $linePriceArr = helper::getArrayColumn($skuList, 'line_price') ?: [0.00]; // return [min($linePriceArr), max($linePriceArr)]; // } // /** // * 生成skuList数据(写入goods_sku_id) // * @param array $newSpecList // * @param array $skuList // * @return array // */ // public static function getNewSkuList(array $newSpecList, array $skuList, $goodsNo, $goodsId = 0) // { // foreach ($skuList as $key=>&$skuItem) { // $skuItem['specValueIds'] = static::getSpecValueIds($newSpecList, $skuItem['skuKeys']); // $skuItem['goodsProps'] = static::getGoodsProps($newSpecList, $skuItem['skuKeys']); // $skuItem['goods_sku_id'] = implode('_', $skuItem['specValueIds']); // if(!isset($skuItem['goods_sku_no']) || empty($skuItem['goods_sku_no'])){//如果没有设置sku编号 // $skuItem['goods_sku_no'] = Goods::makeGoodsSkuNo($goodsNo, (string)($key+1)); // } // // 获取原来的结算价 // if ($goodsId) { // $oldSkuInfo = self::where('goods_id', $goodsId)->where('goods_sku_id', $skuItem['goods_sku_id'])->find(); // $skuItem['clearing_price'] = $oldSkuInfo['clearing_price'] ?? 0; // $skuItem['platform_rate'] = $oldSkuInfo['platform_rate'] ?? 0; // } // } // return $skuList; // } // /** // * 根据$skuKeys生成规格值id集 // * @param array $newSpecList // * @param array $skuKeys // * @return array // */ // private static function getSpecValueIds(array $newSpecList, array $skuKeys) // { // $goodsSkuIdArr = []; // foreach ($skuKeys as $skuKey) { // $specValueItem = $newSpecList[$skuKey['groupKey']]['valueList'][$skuKey['valueKey']]; // $goodsSkuIdArr[] = $specValueItem['spec_value_id']; // } // return $goodsSkuIdArr; // } // /** // * 根据$skuKeys生成规格属性记录 // * @param array $newSpecList // * @param array $skuKeys // * @return array // */ // private static function getGoodsProps(array $newSpecList, array $skuKeys) // { // $goodsPropsArr = []; // foreach ($skuKeys as $skuKey) { // $groupItem = $newSpecList[$skuKey['groupKey']]; // $specValueItem = $groupItem['valueList'][$skuKey['valueKey']]; // $goodsPropsArr[] = [ // 'group' => ['name' => $groupItem['spec_name'], 'id' => $groupItem['spec_id']], // 'value' => ['name' => $specValueItem['spec_value'], 'id' => $specValueItem['spec_value_id']] // ]; // } // return $goodsPropsArr; // } /** * 新增套餐sku记录 * @param int $goodsId * @param array $newSkuList * @param int $specType * @return array|bool|false */ public static function add(int $goodsId, int $specType = SpecTypeEnum::SINGLE, array $newSkuList = []) { // 单规格模式 if ($specType === SpecTypeEnum::SINGLE) { $dataset = []; foreach ($newSkuList as $skuItem) { $dataset[] = array_merge($skuItem, [ 'goods_id' => $goodsId, 'store_id' => self::$storeId, 'rel_goods_id' => $skuItem['rel_goods_id'], 'rel_goods_sku_id' => $skuItem['rel_goods_sku_id'] ]); } return (new static)->addAll($dataset); } // 多规格模式 elseif ($specType === SpecTypeEnum::MULTI) { // 批量写入商品sku记录 // return static::increasedFroMulti($goodsId, $newSkuList); } return false; } /** * 更新商品sku记录 * @param int $goodsId * @param int $specType * @param array $skuList * @return array|bool|false */ public static function edit(int $goodsId, int $specType = SpecTypeEnum::SINGLE, array $skuList = []) { // 调用批量更改门店商品sku // (new ShopGoods())->updateAllShopGoodsSku($goodsId, $skuList); // 删除所有的sku记录 static::deleteAll(['goods_id' => $goodsId]); // 新增商品sku记录 return static::add($goodsId, $specType, $skuList); } // /** // * 批量写入商品sku记录 // * @param int $goodsId // * @param array $skuList // * @return array|false // */ // public static function increasedFroMulti(int $goodsId, array $skuList) // { // $dataset = []; // foreach ($skuList as $skuItem) { // $dataset[] = array_merge($skuItem, [ // 'goods_sku_id' => $skuItem['goods_sku_id'], // 'line_price' => $skuItem['line_price'] ?: 0.00, // 'goods_sku_no' => $skuItem['goods_sku_no'] ?: '', // 'stock_num' => $skuItem['stock_num'] ?: 0, // 'alarm_stock_num' => $skuItem['alarm_stock_num'] ?: 0, // 'goods_weight' => $skuItem['goods_weight'] ?: 0, // 'goods_gross_weight' => $skuItem['goods_gross_weight'] ?: 0, // 'goods_props' => $skuItem['goodsProps'], // 'spec_value_ids' => $skuItem['specValueIds'], // 'goods_id' => $goodsId, // 'store_id' => self::$storeId // ]); // } // return (new static)->addAll($dataset); // } // /** // * @param $prices // * @return bool // * @throws \Exception // */ // public static function updateClearingPrice($prices){ // if (!count($prices))return true; // $user = new self(); // $user->saveAll($prices); // return true; // } // /** // * @param $prices // * @return bool // * @throws \Exception // */ // public static function updatePlatformRate($prices){ // if (!count($prices))return true; // $user = new self(); // $user->saveAll($prices); // return true; // } public function goods(){ return $this->hasOne(Goods::class,'goods_id','rel_goods_id')->field('goods_id,goods_name,goods_no'); } /** * 关联商品图片表 * @return \think\model\relation\HasMany */ public function images() { return $this->hasMany('GoodsImage','goods_id','rel_goods_id')->order(['id']); } /** * 关联商品规格表 * @return \think\model\relation\HasOne */ public function skuList() { return $this->hasOne('GoodsSku','goods_sku_id','rel_goods_sku_id'); //return $this->hasMany('GoodsSku','goods_sku_id','rel_goods_sku_id')->order(['id' => 'asc']); } }