db->beginTransaction(); try { // 预约 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 { $result = $this->setAttr($goods_info); if ($result['code']) { throw new \Exception($result['msg']); } } catch(\Exception $e){ return [ 'code' => 1, 'msg' => $e->getMessage() ]; } // if ($goods_info['cat_id'] && count($goods_info['cat_id'])) { // if ($goods_info['id'] > 0) { // GoodsCat::deleteAll(['goods_id' => $goods_info['id']]); // } // $goodsCatForm = new GoodsCat(); // foreach ($goods_info['cat_id'] as $cat_id) { // $goodsCat = clone $goodsCatForm; // $goodsCat->goods_id = $goods_info['id']; // $goodsCat->cat_id = $cat_id; // $goodsCat->store_id = $goods_info['store_id']; // if (!$goodsCat->save()) { // throw new \Exception('保存失败'); // } // } // } // if ($goods_info['goods_pic_list']) { // if ($goods_info['id'] > 0) { // GoodsPic::deleteAll(['goods_id' => $goods_info['id']]); // } // $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 { $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'], 'integral_price' => $goods_info['integral_price'], 'cost_price' => $goods->cost_price, 'no' => $goods_info['goods_no'], 'sku_id' => '', 'original_price' => $goods->original_price, ], ]; } 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']; $goods_info['attr'][0]['integral_price'] = intval($goods_info['integral_price']) ?: 0; $goods_info['attr'][0]['cost_price'] = doubleval($goods_info['integral_price']) ?: 0; $goods_info['attr'][0]['original_price'] = doubleval($goods->original_price) ?: 0; } } 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'] : '', 'cost_price' => sprintf('%.2f', $item['cost_price'] ?? $item['price']), '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' => get_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 = get_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_id = array_column($new_attr_item['attr_list'], 'attr_id'); sort($new_attr_id); $goods_attr = json_decode($goods->attr, true); if ($goods_attr) { foreach ($goods_attr as $goods_attr_item) { $goods_attr_item_attr_id = array_column($goods_attr_item['attr_list'], 'attr_id'); sort($goods_attr_item_attr_id); if (!array_diff($goods_attr_item_attr_id, $new_attr_id)) { $new_attr_item['cost_price'] = $goods_attr_item['cost_price']; } } } $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 = '规格'; $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 = get_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]; } }