/**
* 添加时商品规格处理
* @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'];
}
10-24
3145
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
01-07
3538
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)