Browse Source

完善功能

gorden 10 months ago
parent
commit
2a2220bfdc
2 changed files with 78 additions and 3 deletions
  1. 31 3
      app/admin/service/goods/GoodsService.php
  2. 47 0
      support/helpers.php

+ 31 - 3
app/admin/service/goods/GoodsService.php

@@ -277,6 +277,7 @@ class GoodsService
             $data['goods_sku_json_label'] = [];
 
             $data['goods_label'] = !empty($data['goods_label']) ? explode(',', $data['goods_label']) : [];
+            $data['goods_json'] = $data['goods_json'] ? json_decode($data['goods_json'], true) : [];
             $data['goods_cover'] = getenv('STORAGE_DOMAIN') . $data['goods_cover'];
             if (!empty($data['goods_detail_slider_json'])) {
                 $data['goods_detail_slider_json'] = json_decode($data['goods_detail_slider_json'], true);
@@ -314,6 +315,12 @@ class GoodsService
                     $data['appointment_times'] = $times;
                 }
             }
+            if (!empty($data['goods_json'])) {
+                foreach ($data['goods_json'] as $key => $datum) {
+                    dump($datum);
+                    $data['goods_json'][$key]['color'] = rgbToHex($datum['color']);
+                }
+            }
 
             $data['goods_on_addtimes'] = date('Y-m-d\TH:i:s.u\Z', $data['goods_on_addtimes'] - 60 * 60 * 8);
 
@@ -669,6 +676,11 @@ class GoodsService
                 $params['goods_status'] = 'ON';
             }
         }
+        $category = SysCategory::where('category_id', $params['join_goods_category_id'])->first();
+        if (!$category) {
+            throw new BusinessException("产品分类不存在~");
+        }
+
         try {
             $model = new Goods();
             $model->goods_id = $params['goods_id'];
@@ -676,8 +688,8 @@ class GoodsService
             $model->join_goods_supplier_id = $params['join_goods_supplier_id'] ?? 0;
             $model->goods_classify = $params['goods_classify'] ?? '';
             $model->goods_status = $params['goods_status'] ?? '';
-            $model->goods_category = $params['goods_category'] ?? '';
-            $model->goods_prefix = $params['goods_prefix'] ?? '';
+            $model->goods_category = $category->category_classify ?? '';
+            $model->goods_prefix = $params['goods_prefix'] ?? ($category->category_name ? '【' . $category->category_name . '】' : '');
             $model->goods_name = $params['goods_name'];
             $model->goods_market_price = $params['goods_market_price'] ?? 0;
             $model->goods_sales_price = $params['goods_sales_price'] ?? 0;
@@ -707,7 +719,6 @@ class GoodsService
                     'dates' => $params['dates'] ?? [],
                     'times' => $times
                 ]);
-                dump($model->goods_attribute_json);
             }
             if ($model->save()) {
                 return $model->goods_id;
@@ -896,6 +907,14 @@ class GoodsService
             $data['goods_sku_json'] = !empty($params['goods_sku_json_label']) ? json_encode($params['goods_sku_json_label']) : json_encode(['规格' => []]);
 
             $row = Goods::find($data['goods_id']);
+            if ($row->join_goods_category_id != $data['join_goods_category_id']) {
+                $category = SysCategory::where('category_id', $params['join_goods_category_id'])->first();
+                if (!$category) {
+                    throw new BusinessException("产品分类不存在~");
+                }
+                $data['goods_category'] = $category->category_classify ?? '';
+                $data['goods_prefix'] = $data['goods_prefix'] ?? ($category->category_name ? '【' . $category->category_name . '】' : '');
+            }
             // 上架时间有变动
             if ($data['goods_status'] == 'PENDING' && $row->goods_on_addtimes != $data['goods_on_addtimes']) {
                 $redis = Redis::connection();
@@ -921,6 +940,15 @@ class GoodsService
                     'times' => $times
                 ]);
             }
+            if (!empty($data['goods_json'])) {
+                $goodsJson = json_decode($data['goods_json'], true);
+                foreach ($goodsJson as $key => $item) {
+                    $goodsJson[$key]['color'] = hexToRgb($item['color']);
+                }
+
+                $data['goods_json'] = json_encode($goodsJson);
+            }
+
             foreach ($data as $key => $val) {
                 $row->{$key} = $val;
             }

+ 47 - 0
support/helpers.php

@@ -646,3 +646,50 @@ function _syslog($name, $operation, $operationData = false, $requestParams = fal
     $model->log_operation_data = $operationData ? json_encode($operationData) : null;
     $model->save();
 }
+
+
+/**
+ * @Desc 颜色值转RGB
+ * @Author Gorden
+ * @Date 2024/5/15 17:22
+ *
+ * @param $hexColor
+ * @return mixed
+ */
+function hexToRgb($hexColor, $type = "string")
+{
+    // 使用substr函数去掉前缀的'#'
+    $hexColor = ltrim($hexColor, '#');
+
+    // 使用hexdec函数将十六进制转换为十进制
+    $red = hexdec(substr($hexColor, 0, 2));
+    $green = hexdec(substr($hexColor, 2, 2));
+    $blue = hexdec(substr($hexColor, 4, 2));
+    if ($type == "string") {
+        // rgb(46, 209, 153)
+        return "rgb(" . $red . ", " . $green . ", " . $blue . ")";
+    }
+
+    return array('red' => $red, 'green' => $green, 'blue' => $blue);
+}
+
+function rgbToHex($rgb)
+{
+    if (substr($rgb, 0, 3) == 'rgb') {
+        $rgb = str_replace("rgb(", '', $rgb);
+        $rgb = str_replace(")", "", $rgb);
+        [$red, $green, $blue] = explode(',', $rgb);
+        $hexRed = dechex($red);
+        $hexGreen = dechex($green);
+        $hexBlue = dechex($blue);
+
+        // 如果颜色分量不足两位,前面补零
+        $hexRed = strlen($hexRed) == 1 ? '0' . $hexRed : $hexRed;
+        $hexGreen = strlen($hexGreen) == 1 ? '0' . $hexGreen : $hexGreen;
+        $hexBlue = strlen($hexBlue) == 1 ? '0' . $hexBlue : $hexBlue;
+
+        return "#" . $hexRed. $hexGreen. $hexBlue;
+    }
+
+    return "";
+}