商品多规格参数处理

    /**
     * 添加时商品规格处理
     * @param $goods_id
     * @param $data
     * @return array
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function insertGoodsSpecificationHandel($goods_id, $data)
    {
        Db::name('goods_spec')->where('goods_id', $goods_id)->delete(true);
        Db::name('goods_spec_info')->where('goods_id', $goods_id)->delete(true);
        Db::name('goods_spec_value')->where('goods_id', $goods_id)->delete(true);

        $spec = array_unique($data['specifications_name']);     //规格名去重
        $spec_count = count($spec);     // 规格个数
        if(count($data['specifications_name']) != $spec_count){
            return ['code'=>11, 'msg'=>'规格名重复'];
        }
        //  规格值按规格名分组, 每一组对应一个完整的商品规格记录
        $spec_value_chunk = array_chunk($data['specifications_value'], $spec_count);
        if(count($spec_value_chunk) != count(array_unique($spec_value_chunk, SORT_REGULAR))){
            return ['code'=>11, 'msg'=>'规格值组合不能有完全重复的值'];
        }
        $spec_value_count = count($spec_value_chunk);   //规格值分组个数
        $spec_value_with_name_index = [];   //带有规格名索引的规格值数组
        foreach($spec as $spec_name_key=>$spec_name_value){
            foreach($spec_value_chunk as $chunk_key=>$chunk_value){
                $spec_value_with_name_index[$spec[$spec_name_key]][] = $chunk_value[$spec_name_key];
            }
        }
        // 判断规格值行数与规格图片对应
        $spec_info_count = count($data['specifications_price']);   // 规格值组行数
        $spv_image_array = [];
        for ($i=0; $i<$spec_info_count; $i++) {
            if(!empty($data['size'.($i+1).'_image'])){
                array_push($spv_image_array, $data['size'.($i+1).'_image']);
            }
        }
        if(count($spv_image_array) != $spec_info_count){
            return ['code'=>11, 'msg' => '规格图片组图片数量与规格值数量不一致'];
        }

        try{
            // 添加规格
            $spec_data = [];
            for ($i=0; $i<$spec_count; $i++) {
                $spec_value_data = array_unique($spec_value_with_name_index[$spec[$i]]);
                $spec_value_data = array_values($spec_value_data);
                $spec_value_data_count = count($spec_value_data);
                $spec_value_array = [];
                for ($j=0; $j<$spec_value_data_count; $j++) {
                    $spec_value_array[$j]['name'] = $spec_value_data[$j];
                }
                $spec_data[$i] = [
                    'goods_id'=>$goods_id,
                    'spec_name'=>$spec[$i],
                    'spec_value'=>json_encode($spec_value_array),
                    'createtime'=> time(),
                ];
            }
            Db::name('goods_spec')->insertAll($spec_data);
            //规格详情添加    商品规格值添加
            for($i=0; $i < $spec_value_count; $i++){
                // 售价不能低于本金
                if ($data['specifications_price'][$i] <= $data['specifications_original_price'][$i]) {
                    return ['code'=>111, 'msg' => '售价不能低于本金'];
                }
                $spec_info_id = Db::name('goods_spec_info')->insertGetId([
                    'goods_id'=>$goods_id,
                    'price'=>$data['specifications_price'][$i],
                    'stock'=>$data['specifications_number'][$i],
                    'weight'=>$data['specifications_weight'][$i],
                    'original_price'=>$data['specifications_original_price'][$i],
                    'spv_image'=>$data['size'.($i+1).'_image'],
                    'createtime'=>time(),
                ]);
                for ($j=0; $j<$spec_count; $j++) {
                    Db::name('goods_spec_value')->insert([
                        'goods_id'=>  $goods_id,
                        'goods_spec_info_id'=> $spec_info_id,
                        'spec_value'=> $spec_value_chunk[$i][$j],
                        'createtime'=> time(),
                    ]);
                }
            }
        } catch (\Exception $e) {
            echo $e;
            return ['code'=>1, 'msg' => $e->getMessage()];
        }

        return ['code'=>0, 'msg'=>'success'];
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值