|
@@ -28,7 +28,7 @@ class GoodsService
|
|
|
'running' => function ($query) {
|
|
|
$query->select('join_running_goods_id', 'goods_running_storage');
|
|
|
}
|
|
|
- ])->select('goods_id', 'join_goods_category_id', 'join_goods_device_id', 'goods_status', 'goods_sales_price', 'goods_category', 'goods_name', 'goods_title', 'goods_cover', 'goods_sort', 'goods_addtimes')
|
|
|
+ ])->select('goods_id', 'join_goods_category_id', 'join_goods_device_ledger_id', 'goods_status', 'goods_sales_price', 'goods_category', 'goods_name', 'goods_title', 'goods_cover', 'goods_sort', 'goods_addtimes')
|
|
|
->when($goodsName != '', function ($query) use ($goodsName) {
|
|
|
$query->where(function ($q) use ($goodsName) {
|
|
|
$q->where('goods_name', 'like', '%' . $goodsName . '%')
|
|
@@ -66,28 +66,96 @@ class GoodsService
|
|
|
{
|
|
|
try {
|
|
|
// 商品主表
|
|
|
- $main = Goods::where('goods_id', $goodsId)->first()->toArray();
|
|
|
+ $main = Goods::where('goods_id', $goodsId)->first();
|
|
|
+ if (!empty($main)) {
|
|
|
+ $main = $main->toArray();
|
|
|
+ $main['goods_sku_json'] = json_decode($main['goods_sku_json'], true);
|
|
|
+ $main['specList'] = [];
|
|
|
+ foreach ($main['goods_sku_json'] as $key => $sku) {
|
|
|
+ $main['specList'][] = [
|
|
|
+ 'label' => $key,
|
|
|
+ 'tags' => $sku
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ $main = [];
|
|
|
+ }
|
|
|
// 详情表
|
|
|
- $detail = GoodsDetail::where('join_detail_goods_id', $goodsId)->first()->toArray();
|
|
|
+ $detail = GoodsDetail::where('join_detail_goods_id', $goodsId)->first();
|
|
|
+ if (!empty($detail)) {
|
|
|
+ $detail = $detail->toArray();
|
|
|
+ } else {
|
|
|
+ $detail = [];
|
|
|
+ }
|
|
|
// 标签表
|
|
|
- $label = GoodsLabel::where('join_label_goods_id', $goodsId)->first()->toArray();
|
|
|
+ $label = GoodsLabel::where('join_label_goods_id', $goodsId)->first();
|
|
|
+ if (!empty($label)) {
|
|
|
+ $label = $label->toArray();
|
|
|
+ } else {
|
|
|
+ $label = [];
|
|
|
+ }
|
|
|
// Running表
|
|
|
- $running = GoodsRunning::where('join_running_goods_id', $goodsId)->first()->toArray();
|
|
|
+ $running = GoodsRunning::where('join_running_goods_id', $goodsId)->first();
|
|
|
+ if (!empty($running)) {
|
|
|
+ $running = $running->toArray();
|
|
|
+ } else {
|
|
|
+ $running = [];
|
|
|
+ }
|
|
|
+ // Sku表
|
|
|
+ $skus = GoodsSku::where('join_sku_goods_id', $goodsId)->get();
|
|
|
+ if (!empty($running)) {
|
|
|
+ $skus = $skus->toArray();
|
|
|
+ $submitList = [];
|
|
|
+ foreach ($skus as $key => $sku) {
|
|
|
+ $skuSpecsJson = json_decode($sku['goods_sku_specs_json'], true);
|
|
|
+ $skuSpecs = '';
|
|
|
+ $skuNameValue = [];
|
|
|
+ $i = 1;
|
|
|
+ foreach ($skuSpecsJson as $k => $item) {
|
|
|
+// dump($item);
|
|
|
+ $skuSpecs = $skuSpecs . $item . ',';
|
|
|
+ $skuNameKey = 'skuName' . $i;
|
|
|
+ $skuValueKey = 'skuValue' . $i;
|
|
|
+ $skuNameValue[$skuNameKey] = $k;
|
|
|
+ $skuNameValue[$skuValueKey] = $item;
|
|
|
+ $skuNameValue[$k] = $item;
|
|
|
+ $i++;
|
|
|
+ }
|
|
|
+ $storage = json_decode($sku['goods_sku_storage_json'], true);
|
|
|
+ $priceStorage = [
|
|
|
+ 'sku' => rtrim($skuSpecs, ','),
|
|
|
+ 'stock' => $storage['storage'],
|
|
|
+ 'price' => $sku['goods_sku_sales_price'],
|
|
|
+ ];
|
|
|
+
|
|
|
+ $submitList[] = array_merge($skuNameValue, $priceStorage);
|
|
|
+ }
|
|
|
+ $skus['submitList'] = $submitList;
|
|
|
+ } else {
|
|
|
+ $skus = [];
|
|
|
+ }
|
|
|
+
|
|
|
// 合并数据
|
|
|
- $data = array_merge($main, $detail, $label, $running);
|
|
|
+ $data = array_merge($main, $detail, $label, $running, ['sku' => $skus]);
|
|
|
+ $data['goods_sku_json_label'] = [];
|
|
|
|
|
|
- $data['goods_label'] = !empty($data['goods_label']) ? explode(',', $data['goods_label']) : '';
|
|
|
+ $data['goods_label'] = !empty($data['goods_label']) ? explode(',', $data['goods_label']) : [];
|
|
|
$data['goods_cover'] = getenv('STORAGE_DOMAIN') . $data['goods_cover'];
|
|
|
- $data['goods_detail_slider_json'] = json_decode($data['goods_detail_slider_json'], true);
|
|
|
- $slider = '';
|
|
|
- foreach ($data['goods_detail_slider_json'] as $item) {
|
|
|
- $slider .= getenv('STORAGE_DOMAIN') . $item . ',';
|
|
|
+ if (!empty($data['goods_detail_slider_json'])) {
|
|
|
+ $data['goods_detail_slider_json'] = json_decode($data['goods_detail_slider_json'], true);
|
|
|
+ $slider = '';
|
|
|
+ foreach ($data['goods_detail_slider_json'] as $item) {
|
|
|
+ $slider .= getenv('STORAGE_DOMAIN') . $item . ',';
|
|
|
+ }
|
|
|
+ $data['goods_detail_slider_json'] = rtrim($slider, ',');
|
|
|
}
|
|
|
- $data['goods_detail_slider_json'] = rtrim($slider, ',');
|
|
|
+
|
|
|
$data['goods_on_addtimes'] = date('Y-m-d\TH:i:s.u\Z', $data['goods_on_addtimes'] - 60 * 60 * 8);
|
|
|
|
|
|
return json_success('', $data);
|
|
|
} catch (\Exception $e) {
|
|
|
+ dump($e->getTrace());
|
|
|
return json_fail("查询错误~");
|
|
|
}
|
|
|
}
|
|
@@ -114,6 +182,8 @@ class GoodsService
|
|
|
self::labelInsert($params);
|
|
|
// 产品运行控制信息表
|
|
|
self::goodsRunningInsert($params);
|
|
|
+ // sku表
|
|
|
+ self::goodsSkuSet($params, 'insert');
|
|
|
|
|
|
Db::commit();
|
|
|
} catch (\PDOException $e) {
|
|
@@ -122,6 +192,7 @@ class GoodsService
|
|
|
return json_fail('数据写入失败~');
|
|
|
} catch (BusinessException $e) {
|
|
|
Db::rollBack();
|
|
|
+ dump($e->getMessage());
|
|
|
return json_fail($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
|
Db::rollBack();
|
|
@@ -144,6 +215,8 @@ class GoodsService
|
|
|
self::labelUpdate($params);
|
|
|
// 产品运行控制信息表
|
|
|
self::goodsRunningUpdate($params);
|
|
|
+ // sku表
|
|
|
+ self::goodsSkuSet($params, 'update');
|
|
|
|
|
|
Db::commit();
|
|
|
} catch (BusinessException $e) {
|
|
@@ -214,7 +287,7 @@ class GoodsService
|
|
|
$model->goods_name = $params['goods_name'];
|
|
|
$model->goods_market_price = $params['goods_market_price'] ?? '';
|
|
|
$model->goods_sales_price = $params['goods_sales_price'] ?? '';
|
|
|
- $model->goods_sku_json = !empty($params['goods_sku_json']) ? $params['goods_sku_json'] : '{}';
|
|
|
+ $model->goods_sku_json = !empty($params['goods_sku_json_label']) ? json_encode($params['goods_sku_json_label']) : json_encode(['规格' => []]);
|
|
|
$model->goods_attribute_json = !empty($params['goods_attribute_json']) ? $params['goods_attribute_json'] : '{}';
|
|
|
$model->goods_service_json = !empty($params['goods_service_json']) ? $params['goods_service_json'] : '{}';
|
|
|
$model->goods_title = $params['goods_title'] ?? '';
|
|
@@ -361,11 +434,13 @@ class GoodsService
|
|
|
$data['goods_cover'] = str_replace(getenv('STORAGE_DOMAIN'), '', $data['goods_cover']);
|
|
|
}
|
|
|
$data['goods_on_addtimes'] = strtotime($data['goods_on_addtimes']);
|
|
|
+ $data['goods_sku_json'] = !empty($params['goods_sku_json_label']) ? json_encode($params['goods_sku_json_label']) : json_encode(['规格' => []]);
|
|
|
|
|
|
self::doUpdate($data['goods_id'], $data, new Goods());
|
|
|
} catch (BusinessException $e) {
|
|
|
throw new BusinessException($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
|
+ dump($e->getTrace());
|
|
|
throw new BusinessException('数据更新异常~1');
|
|
|
}
|
|
|
}
|
|
@@ -389,7 +464,9 @@ class GoodsService
|
|
|
}
|
|
|
// 根据goods_id 查详情ID
|
|
|
$detail = GoodsDetail::where('join_detail_goods_id', $params['goods_id'])->first();
|
|
|
- self::doUpdate($detail->goods_detail_id, $data, new GoodsDetail());
|
|
|
+ if ($detail) {
|
|
|
+ self::doUpdate($detail->goods_detail_id, $data, new GoodsDetail());
|
|
|
+ }
|
|
|
} catch (BusinessException $e) {
|
|
|
throw new BusinessException($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
@@ -413,7 +490,9 @@ class GoodsService
|
|
|
$data = self::inputFilter($params, new GoodsLabel());
|
|
|
// 根据goods_id 查详情ID
|
|
|
$detail = GoodsLabel::where('join_label_goods_id', $params['goods_id'])->first();
|
|
|
- self::doUpdate($detail->goods_label_id, $data, new GoodsLabel());
|
|
|
+ if ($detail) {
|
|
|
+ self::doUpdate($detail->goods_label_id, $data, new GoodsLabel());
|
|
|
+ }
|
|
|
} catch (BusinessException $e) {
|
|
|
throw new BusinessException($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
@@ -436,7 +515,9 @@ class GoodsService
|
|
|
$data = self::inputFilter($params, new GoodsRunning());
|
|
|
// 根据goods_id 查详情ID
|
|
|
$detail = GoodsRunning::where('join_running_goods_id', $params['goods_id'])->first();
|
|
|
- self::doUpdate($detail->goods_running_id, $data, new GoodsRunning());
|
|
|
+ if ($detail) {
|
|
|
+ self::doUpdate($detail->goods_running_id, $data, new GoodsRunning());
|
|
|
+ }
|
|
|
} catch (BusinessException $e) {
|
|
|
throw new BusinessException($e->getMessage());
|
|
|
} catch (\Exception $e) {
|
|
@@ -444,6 +525,54 @@ class GoodsService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @Desc sku 设置
|
|
|
+ * @Author Gorden
|
|
|
+ * @Date 2024/4/10 10:43
|
|
|
+ *
|
|
|
+ * @param $params
|
|
|
+ * @return void
|
|
|
+ * @throws BusinessException
|
|
|
+ */
|
|
|
+ public static function goodsSkuSet($params, $operation = 'insert')
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ Db::beginTransaction();
|
|
|
+ if ($operation == 'update') {
|
|
|
+ // 删掉原有的
|
|
|
+ GoodsSku::where('join_sku_goods_id', $params['goods_id'])->delete();
|
|
|
+ }
|
|
|
+ // 入新的
|
|
|
+ if (!empty($params['goods_sku_json_value'])) {
|
|
|
+ foreach ($params['goods_sku_json_value'] as $item) {
|
|
|
+ $skus = explode(',', $item['sku']);
|
|
|
+ $skuArr = [];
|
|
|
+ for ($i = 1; $i <= count($skus); $i++) {
|
|
|
+ $skuName = "skuName" . $i;
|
|
|
+ $key = $item[$skuName];
|
|
|
+ $skuArr[$key] = $skus[$i - 1];
|
|
|
+ }
|
|
|
+
|
|
|
+ $model = new GoodsSku();
|
|
|
+ $model->join_sku_goods_id = $params['goods_id'];
|
|
|
+ $model->goods_sku_status = $params['goods_status'];
|
|
|
+ $model->goods_sku_specs_json = json_encode($skuArr);
|
|
|
+ $model->goods_sku_title = str_replace('-', ',', $item['sku']) . $params['goods_name'];
|
|
|
+ $model->goods_sku_market_price = $params['goods_market_price'];
|
|
|
+ $model->goods_sku_sales_price = $item['price'];
|
|
|
+ $model->goods_sku_storage_json = json_encode(['storage' => $item['stock']]);
|
|
|
+ $model->save();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Db::commit();
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Db::rollBack();
|
|
|
+
|
|
|
+ throw new BusinessException('数据更新异常~5');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @Desc
|
|
|
* @Author Gorden
|
|
@@ -472,6 +601,7 @@ class GoodsService
|
|
|
$data[$col] = null;
|
|
|
}
|
|
|
if (is_array($item)) {
|
|
|
+ dump($item);
|
|
|
$data[$col] = implode(',', $item);
|
|
|
}
|
|
|
if ($item != '' && (strpos(strtolower($columns[$col]), 'varchar') || strpos(strtolower($columns[$col]), 'text'))) {
|