db->beginTransaction(); try { $store_id = $this->store_id; // 预约 if ($goods_info['product_type'] == Goods::GOODS_TYPE_DATE) { if (empty($goods_info['date_book'])) { $t->rollBack(); throw new \Exception('请检查预约日期相关配置是否正确'); } foreach ($goods_info['date_book'] as $k => $v) { if (intval($v['num']) < 0 || $v['price'] <= 0) { $t->rollBack(); throw new \Exception('请检查预约日期的价格和库存参数是否填写正确'); } } $goods_book = GoodsBook::findOne(['goods_id' => $goods_info['id']]); if (!$goods_book) { $goods_book = new GoodsBook(); } $goods_book->goods_id = $goods_info['id']; $goods_book->date_book = Json::encode($goods_info['date_book']); $goods_book->save(); } if ($goods_info['product_type'] == Goods::GOODS_TYPE_TIME) { if (empty($goods_info['service_book']) || !is_array($goods_info['service_book']) || empty($goods_info['service_book']['data'])) { $t->rollBack(); throw new \Exception('请检查服务商品预定参数'); } if (count($goods_info['service_book']['data']) != $goods_info['service_book']['date']) { $t->rollBack(); throw new \Exception('请检查是否少填写时间段和价格参数'); } $time_arr = []; foreach ($goods_info['service_book']['data'] as $val) { if (empty($val['time'])) { $t->rollBack(); throw new \Exception('请检查是否少填写时间段'); } foreach ($val['time'] as $v) { if (empty($v['start_time']) || empty($v['end_time'])) { $t->rollBack(); throw new \Exception('请检查是否少填写时间段'); } if (empty($v['times']) || !is_array($v['times'])) { $t->rollBack(); throw new \Exception('请检查时间段下是否未选择详细时间'); } foreach ($v['times'] as $m) { if (empty($m['time']) || empty($m['price'] || empty($m['num']))) { $t->rollBack(); throw new \Exception('请检查是否少填写时间点, 价格以及库存'); } } $time_arr[] = [ 'start_time' => $v['start_time'], 'end_time' => $v['end_time'], ]; } } $goods_book = GoodsBook::findOne(['goods_id' => $goods_info['id']]); if (!$goods_book) { $goods_book = new GoodsBook(); $goods_book->goods_id = $goods_info['id']; } $goods_book->service_book = Json::encode($goods_info['service_book']); $goods_book->save(); } // 设置规格 try { $this->setAttr($goods_info); } catch(\Exception $e){ return [ 'code' => 0, 'msg' => $e->getMessage() ]; } if ($goods_info['cat_id'] && count($goods_info['cat_id']) && (int)$goods_info['md_food_id'] === 0) { if ($goods_info['id'] > 0) { GoodsCat::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id'], 'is_delete' => 0]); } $goodsCatForm = new GoodsCat(); foreach ($goods_info['cat_id'] as $cat_id) { $cat = Cat::findOne(['id' => $cat_id, 'store_id' => $store_id, 'is_show' => 1]); if (!$cat) { throw new \Exception("获取分类失败"); } $goodsCat = clone $goodsCatForm; $goodsCat->goods_id = $goods_info['id']; $goodsCat->cat_id = $cat_id; $goodsCat->store_id = $store_id; if (!$goodsCat->save()) { throw new \Exception('保存失败'); } } } //判断如果规格发生改变就删除满减规则 if (!empty($goods_info['is_change_attr'])) { $res = GoodsFullMinus::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id']]); \Yii::error($res, "规格发生改变就删除满减规则"); } if ($goods_info['goods_pic_list']) { if ($goods_info['id'] > 0) { GoodsPic::updateAll(['is_delete' => 1], ['goods_id' => $goods_info['id'], 'is_delete' => 0]); } $goodsPicForm = new GoodsPic(); foreach ($goods_info['goods_pic_list'] as $pic) { $goodsPic = clone $goodsPicForm; $goodsPic->goods_id = $goods_info['id']; $goodsPic->pic_url = $pic['pic_url']; if (!$goodsPic->save()) { throw new \Exception('保存失败'); } } } queue_push(new SyncMdGoodsJob(['goods_ids' => [$goods_info['id']]]), 0, 1); $t->commit(); return [ 'code' => 0, 'msg' => "操作成功" ]; } catch (\Exception $e){ $t->rollBack(); return [ 'code' => 0, 'msg' => $e->getMessage() ]; } } //设置规格 private function setAttr($goods_info) { try { $store_id = $this->store_id; $goods = Goods::findOne($goods_info['id']); if ($goods_info['product_type'] == Goods::GOODS_TYPE_DATE || $goods_info['product_type'] == Goods::GOODS_TYPE_TIME) { $defaultAttr = '[{"attr_list":[{"attr_id":1,"attr_name":"默认"}],"num":0,"price":0,"no":"","pic":"","share_commission_first":"","share_commission_second":"","share_commission_third":""}]'; $goods->attr = $defaultAttr; $goods->save(); return; } if (!$goods_info['use_attr']) { list($default_attr, $default_attr_group) = $this->getDefaultAttr(); if (empty($goods_info['attr'])) { $goods_info['attr'] = [ [ 'attr_list' => [ [ 'attr_group_name' => $default_attr_group->attr_group_name, 'attr_id' => $default_attr->id, 'attr_name' => $default_attr->attr_name, ], ], 'num' => intval($goods_info['goods_num']) ?: 0, 'price' => $goods_info['price'], 'no' => $goods_info['goods_no'], ], ]; } else { $attr_list = [ [ 'attr_group_name' => $default_attr_group->attr_group_name, 'attr_id' => $default_attr->id, 'attr_name' => $default_attr->attr_name, ], ]; $goods_info['attr'][0]['attr_list'] = $attr_list; $goods_info['attr'][0]['num'] = intval($goods_info['goods_num']) ?: 0; $goods_info['attr'][0]['price'] = intval($goods_info['price']) ?: 0; $goods_info['attr'][0]['no'] = $goods_info['goods_no']; } } if (empty($goods_info['attr']) || !is_array($goods_info['attr'])) { return [ 'code' => 0, 'msg' => "没有规格" ]; } $new_attr = []; foreach ($goods_info['attr'] as $i => $item) { $new_attr_item = [ 'attr_list' => [], 'num' => intval($item['num']), 'price' => doubleval($item['price']), 'no' => $item['no'] ? $item['no'] : '', 'pic' => $item['pic'] ? $item['pic'] : '', 'share_commission_first' => $item['share_commission_first'] ?: '', 'share_commission_second' => $item['share_commission_second'] ?: '', 'share_commission_third' => $item['share_commission_third'] ?: '', ]; foreach ($item as $k => $v) { if (strpos($k,'member') !== false) { $new_attr_item[$k] = $v; } } foreach ($item['attr_list'] as $a) { $attr_group_model = AttrGroup::findOne(['store_id' => $store_id, 'attr_group_name' => $a['attr_group_name'], 'is_delete' => 0]); if (!$attr_group_model) { $attr_group_model = new AttrGroup(); $attr_group_model->attr_group_name = $a['attr_group_name']; $attr_group_model->store_id = $store_id; $attr_group_model->is_delete = 0; $attr_group_model->save(); } $attr_model = Attr::findOne(['attr_group_id' => $attr_group_model->id, 'attr_name' => $a['attr_name'], 'is_delete' => 0]); if (!$attr_model) { $attr_model = new Attr(); $attr_model->attr_name = $a['attr_name']; $attr_model->attr_group_id = $attr_group_model->id; $attr_model->is_delete = 0; $attr_model->save(); } \Yii::error((array)$attr_model,"今天是个好日子"); $new_attr_item['attr_list'][] = [ 'attr_id' => $attr_model->id, 'attr_name' => $attr_model->attr_name, ]; } $new_attr[] = $new_attr_item; } $goods->attr = Json::encode($new_attr); if (!$goods->save()) { throw new \Exception(json_encode($goods->errors)); } return [ 'code' => 0, 'msg' => '操作成功' ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //设置默认规格 public function getDefaultAttr() { $default_attr_name = '默认'; $default_attr_group_name = '规格'; $store_id = $this->store_id; $attr = Attr::findOne([ 'attr_name' => $default_attr_name, 'is_delete' => 0, 'is_default' => 1, ]); $attr_group = null; if (!$attr) { $attr_group = AttrGroup::findOne([ 'attr_group_name' => $default_attr_group_name, 'is_delete' => 0, ]); if (!$attr_group) { $attr_group = new AttrGroup(); $attr_group->store_id = $store_id; $attr_group->attr_group_name = $default_attr_group_name; $attr_group->is_delete = 0; $attr_group->save(false); } $attr = new Attr(); $attr->attr_group_id = $attr_group->id; $attr->attr_name = $default_attr_name; $attr->is_delete = 0; $attr->is_default = 1; $attr->save(false); } else { $attr_group = AttrGroup::findOne($attr->attr_group_id); } return [$attr, $attr_group]; } }