Browse Source

完善功能

gorden 11 months ago
parent
commit
1ff255a72c

+ 6 - 1
app/admin/controller/order/WholeController.php

@@ -154,7 +154,7 @@ class WholeController extends Curd
             $model->order_express_goods = $sheet;
             $model->order_express_type = $params['order_express_type'];
             $model->order_express_code = $params['order_express_code'];
-            $model->order_express_city = $params['order_express_city'];
+            $model->order_express_city = implode("-",$params['order_express_city']);
             $model->order_express_address = $params['order_express_address'];
             $model->order_express_mobile = $params['order_express_mobile'];
             $model->order_express_telephone = $params['order_express_telephone'] ?? null;
@@ -163,6 +163,11 @@ class WholeController extends Curd
             $model->order_express_addtimes = time();
             $model->save();
 
+            // 15天后自动确认收货
+            $redis = Redis::connection();
+            $key = Order::AUTOMATIC_RECEIPT_PREFIX . date('Ymd',strtotime("+15 days"));
+            $redis->sadd($key,$params['order_id']);
+
             Db::commit();
 
             return json_success('发货成功');

+ 80 - 9
app/admin/service/goods/GoodsService.php

@@ -138,7 +138,7 @@ class GoodsService
      * @param Request $request
      * @return Response
      */
-    public static function selectList(Request $request, $goodsClassify="SERVICE")
+    public static function selectList(Request $request, $goodsClassify = "SERVICE")
     {
         $keywords = $request->get('keywords', '');
 //        if (!$keywords){
@@ -146,8 +146,8 @@ class GoodsService
 //        }
 
         $goods = Goods::where('goods_classify', $goodsClassify)
-            ->when($keywords != '', function ($query) use($keywords) {
-                $query->where('goods_name','like',"%".$keywords."%");
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('goods_name', 'like', "%" . $keywords . "%");
             })
             ->select('goods_id', 'goods_name', 'goods_sales_price')
             ->get()
@@ -202,6 +202,10 @@ class GoodsService
             $running = GoodsRunning::where('join_running_goods_id', $goodsId)->first();
             if (!empty($running)) {
                 $running = $running->toArray();
+                if (!empty($running['goods_running_off_json']) && is_json($running['goods_running_off_json'])) {
+                    $goodsRunningOffJson = json_decode($running['goods_running_off_json'], true);
+                    $running['goods_off_addtimes'] = isset($goodsRunningOffJson['time']) ? date("Y-m-d H:i", $goodsRunningOffJson['time']) : '';
+                }
             } else {
                 $running = [];
             }
@@ -299,6 +303,10 @@ class GoodsService
             $running = GoodsRunning::where('join_running_goods_id', $goodsId)->first();
             if (!empty($running)) {
                 $running = $running->toArray();
+                if (!empty($running['goods_running_off_json']) && is_json($running['goods_running_off_json'])) {
+                    $goodsRunningOffJson = json_decode($running['goods_running_off_json'], true);
+                    $running['goods_off_addtimes'] = isset($goodsRunningOffJson['time']) ? date("Y-m-d H:i", $goodsRunningOffJson['time']) : '';
+                }
             } else {
                 $running = [];
             }
@@ -310,9 +318,13 @@ class GoodsService
                 $ids = [];
                 $contentList = [];
                 foreach ($component as $item) {
+                    if (empty($item['join_component_goods_id'])) {
+                        continue;
+                    }
                     $ids[] = $item['join_component_goods_id'];
                     $configJson = json_decode($item['goods_component_config_json'], true);
                     $contentList[] = [
+                        'goods_id' => $item['join_component_goods_id'],
                         'goods_name' => $configJson['goods_name'] ?? '',
                         'goods_sales_price' => $item['goods_component_price'],
                         'nbr' => $configJson['nbr'] ?? 0
@@ -377,6 +389,12 @@ class GoodsService
                 $key = date('YmdHi', strtotime($params['goods_on_addtimes']));
                 $redis->sAdd(Goods::LISTING_KEY_PREFIX . $key, $params['goods_id']);
             }
+            // 自动下架
+            if ($params['goods_running_off_type'] == 'T' && !empty($params['goods_off_addtimes'])) {
+                $redis = Redis::connection();
+                $key = Goods::LISTING_OFF_KEY_PREFIX . date('YmdHi', strtotime($params['goods_off_addtimes']));
+                $redis->sAdd($key, $params['goods_id']);
+            }
             Db::commit();
         } catch (\PDOException $e) {
             Db::rollBack();
@@ -684,7 +702,7 @@ class GoodsService
             $model->goods_running_storage = $params['goods_running_storage'] ?? '';
             $model->goods_running_sale = $params['goods_running_sale'] ?? '';
             $model->goods_running_off_type = $params['goods_running_off_type'] ?? '';
-            $model->goods_running_off_json = $params['goods_running_off_json'] ?? '{}';
+            $model->goods_running_off_json = $params['goods_running_off_type'] == 'T' && !empty($params['goods_off_addtimes']) ? json_encode(['time' => strtotime($params['goods_off_addtimes'])]) : '[]';
             if (!$model->save()) {
                 throw new BusinessException('数据写入失败');
             }
@@ -835,9 +853,39 @@ class GoodsService
             $data = self::inputFilter($params, new GoodsRunning());
             // 根据goods_id 查详情ID
             $detail = GoodsRunning::where('join_running_goods_id', $params['goods_id'])->first();
+            if ($params['goods_running_off_type'] == 'T') {
+                $redis = Redis::connection();
+                if (!empty($detail->goods_running_off_json)) {
+                    $goodsRunningOffJson = json_decode($detail->goods_running_off_json, true);
+                    if (isset($goodsRunningOffJson['time'])) {
+                        $oldKey = Goods::LISTING_OFF_KEY_PREFIX . date('YmdHi', $goodsRunningOffJson['time']);
+                        $goodsRunningOffJson['time'] = strtotime($params['goods_off_addtimes']);
+                        $data['goods_running_off_json'] = json_encode($goodsRunningOffJson);
+                        // 有老的下架时间,删除老的
+                        $redis->srem($oldKey, $params['goods_id']);
+                    } else {
+                        $goodsRunningOffJson['time'] = strtotime($params['goods_off_addtimes']);
+                        $data['goods_running_off_json'] = json_encode($goodsRunningOffJson);
+                    }
+                } else {
+                    $data['goods_running_off_json'] = json_encode(['time' => strtotime($params['goods_off_addtimes'])]);
+                }
+                // 加入自动下架
+                $newKey = Goods::LISTING_OFF_KEY_PREFIX . date('YmdHi', strtotime($params['goods_off_addtimes']));
+                $redis->sAdd($newKey, $params['goods_id']);
+
+            } else if ($params['goods_running_off_type'] == 'H' && $detail->goods_running_off_type == 'T') {
+                $goodsRunningOffJson = json_decode($detail->goods_running_off_json, true);
+                if (isset($goodsRunningOffJson['time'])) {
+                    $oldKey = Goods::LISTING_OFF_KEY_PREFIX . date('YmdHi', $goodsRunningOffJson['time']);
+                    $redis = Redis::connection();
+                    $redis->srem($oldKey, $params['goods_id']);
+                }
+            }
             if ($detail) {
                 self::doUpdate($detail->join_running_goods_id, $data, new GoodsRunning());
             }
+
         } catch (BusinessException $e) {
             throw new BusinessException($e->getMessage());
         } catch (\Exception $e) {
@@ -967,11 +1015,34 @@ class GoodsService
     {
         $key = Goods::LISTING_KEY_PREFIX . date('YmdHi');
         $redis = Redis::connection();
-        if ($redis->exists($key)) {
-            $goodsIds = $redis->sMembers($key);
-            if (Goods::whereIn('goods_id', $goodsIds)->update(['goods_status' => 'ON'])) {
-                $redis->del($key);
-            }
+        if (!$redis->exists($key)) {
+            return;
+        }
+
+        $goodsIds = $redis->sMembers($key);
+        if (Goods::whereIn('goods_id', $goodsIds)->update(['goods_status' => 'ON'])) {
+            $redis->del($key);
+        }
+    }
+
+    /**
+     * @Desc 自动下架
+     * @Author Gorden
+     * @Date 2024/4/26 15:26
+     *
+     * @return void
+     */
+    public static function checkOffListing()
+    {
+        $key = Goods::LISTING_OFF_KEY_PREFIX . date('YmdHi');
+        $redis = Redis::connection();
+        if (!$redis->exists($key)) {
+            return;
+        }
+
+        $goodsIds = $redis->sMembers($key);
+        if (Goods::whereIn('goods_id', $goodsIds)->update(['goods_status' => 'OFF'])) {
+            $redis->del($key);
         }
     }
 }

+ 6 - 1
app/model/Goods.php

@@ -20,7 +20,12 @@ class Goods extends Model
 
     const UPDATED_AT = null;
 
-    const LISTING_KEY_PREFIX = "GOODS:LISTING:";
+    // 自动上架
+    const LISTING_KEY_PREFIX = "GOODS:LISTING:ON:";
+
+    // 自动下架
+    const LISTING_OFF_KEY_PREFIX = "GOODS:LISTING:OFF:";
+
 
     public function serializeDate(DateTimeInterface $date)
     {

+ 2 - 0
process/Task.php

@@ -14,6 +14,8 @@ class Task
         new Crontab('0 */1 * * * *', function () {
             // 商品自动上架
             GoodsService::checkListing();
+            // 商品自动上架
+            GoodsService::checkOffListing();
         });
 
         // 每天的8点执行,注意这里省略了秒位

+ 1 - 0
route/admin.php

@@ -616,6 +616,7 @@ Route::group('/admin', function () {
             Route::get('/list', [\app\admin\controller\order\WholeController::class, 'select']);
             Route::get('/sheet', [\app\admin\controller\order\WholeController::class, 'sheet']);
             Route::get('/update', [\app\admin\controller\order\WholeController::class, 'update']);
+            Route::post('/delivery', [\app\admin\controller\order\WholeController::class, 'delivery']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);