Explorar o código

下单打菜单

gorden hai 7 meses
pai
achega
ffc0913a41

+ 214 - 7
app/admin/controller/coupon/CouponController.php

@@ -6,8 +6,10 @@ use app\admin\validate\coupon\CouponValidate;
 use app\admin\validate\device\DeviceValidate;
 use app\controller\Curd;
 use app\model\Coupon;
+use app\model\CouponGoods;
 use app\model\Device;
 use app\model\SysSerial;
+use support\Db;
 use support\exception\BusinessException;
 use support\Request;
 use support\Response;
@@ -39,14 +41,54 @@ class CouponController extends Curd
         return $this->doFormat($query, $format, $limit);
     }
 
+    protected function afterQuery($items)
+    {
+        foreach ($items as &$item) {
+            if (!empty($item['coupon_json'])) {
+                $couponJson = json_decode($item['coupon_json'], true);
+                if (isset($couponJson['member'])) {
+                    if (isset($couponJson['member']['list']) && !empty($couponJson['member']['list'])) {
+                        $item['coupon_use_member'] = 'member';
+                        $item['memberList'] = $couponJson['member']['list'];
+                    }
+                    if (isset($couponJson['member']['where']) && !empty($couponJson['member']['where'])) {
+                        if (trim($couponJson['member']['where']) == '1') {
+                            $item['coupon_use_member'] = 'all';
+                        } else {
+                            $item['coupon_use_member'] = 'condition';
+                        }
+                        $where = str_replace('`', '', urldecode($couponJson['member']['where']));
+                        $whereArr = explode('=', $where);
+                        if (isset($whereArr[0]) && trim($whereArr[0]) == 'member_is_vip') {
+                            $item['condition'] = 'is_vip';
+                        } else if (isset($whereArr[0]) && trim($whereArr[1]) == 'member_classify') {
+                            if (isset($whereArr[1]) && trim($whereArr[1]) == 'MEMBER') {
+                                $item['condition'] = 'is_member';
+                            } else if (isset($whereArr[1]) && trim($whereArr[1]) == 'EMPLOY') {
+                                $item['condition'] = 'is_employ';
+                            }
+                        }
+                    }
+                }
+                if (isset($couponJson['premises'])) {
+                    $item['premises'] = $couponJson['premises'];
+                }else{
+                    $item['premises_range'] = 'all';
+                }
+            }
+        }
+
+        return $items;
+    }
+
     public function selectList()
     {
-        $coupons = Coupon::where('coupon_status','ACTIVED')
-            ->select('coupon_id','coupon_name')
+        $coupons = Coupon::where('coupon_status', 'ACTIVED')
+            ->select('coupon_id', 'coupon_name')
             ->get()
             ->toArray();
 
-        return json_success('',$coupons);
+        return json_success('', $coupons);
     }
 
 //    public function afterQuery($items)
@@ -59,12 +101,100 @@ class CouponController extends Curd
 //        return $items;
 //    }
 
+    public function insert(Request $request): Response
+    {
+        if ($this->validate && !$this->validateClass->scene('add')->check($request->post())) {
+            return json_fail($this->validateClass->getError());
+        }
+        $goods = $request->post('goodsContentList',[]);
+        if(empty($goods)){
+            return json_fail("请选择关联的产品");
+        }
+
+//        return json_fail("请选择关联的产品");
+        Db::beginTransaction();
+        try {
+            $data = $this->insertInput($request);
+            $this->doInsert($data);
+            // 关联优惠券和商品、规格
+            $this->insertCouponGoods($goods,$data['coupon_id']);
+
+            Db::commit();
+
+            return json_success('success');
+        } catch (BusinessException $customException) {
+            Db::rollBack();
+            dump($customException->getMessage());
+            return json_fail($customException->getMessage());
+        } catch (\Exception $e) {
+            Db::rollBack();
+            dump($e->getMessage());
+            return json_fail('数据写入失败');
+        }
+    }
+
+    /**
+     * @Desc 关联优惠券、产品、规格
+     * @Author Gorden
+     * @Date 2024/8/14 14:32
+     *
+     * @param $goods
+     * @param $couponId
+     * @return void
+     * @throws BusinessException
+     */
+    public function insertCouponGoods($goods, $couponId)
+    {
+        try {
+            foreach ($goods as $good){
+                CouponGoods::insert([
+                    'join_goods_coupon_id'=>$couponId,
+                    'join_coupon_goods_id'=>$good['goods_id'],
+                    'join_coupon_goods_sku_id'=>$good['sku_id'],
+                    'coupon_goods_json'=>'[]',
+                    'coupon_goods_extend_json'=>'[]',
+                    'coupon_goods_addtimes'=>time()
+                ]);
+            }
+        }catch (\Exception $e){
+            throw new BusinessException("关联产品失败");
+        }
+    }
+
     protected function insertInput(Request $request): array
     {
-        $data = $this->inputFilter($request->post());
-        $data['coupon_id'] = "CO" . str_pad(SysSerial::getSerial(), 16, '0') . random_string(8, 'up');
-        $data['coupon_begindate'] = date("Y-m-d H:i:s", strtotime($data['coupon_begindate']));
-        $data['coupon_enddate'] = date("Y-m-d H:i:s", strtotime($data['coupon_enddate']));
+        $params = $request->post();
+        $data = $this->inputFilter($params);
+        $data['coupon_id'] = "CU" . str_pad(SysSerial::getSerial(), 6, '0') . random_string(6, 'up');
+        $data['coupon_validdate_begin'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_begin']));
+        $data['coupon_validdate_end'] = date("Y-m-d H:i:s", strtotime($data['coupon_validdate_end']));
+        $couponJson = [];
+        if ($params['coupon_use_member'] == 'member' && isset($params['member_list'])) {
+            $couponJson['member']['list'] = $params['member_list'];
+        } else if ($params['coupon_use_member'] == 'condition') {
+            if (isset($params['condition']) && $params['condition'] == 'is_vip') {
+                $couponJson['member']['range'] = 'VIP会员';
+                $couponJson['member']['where'] = urlencode(" `member_is_vip` = 'Y'");
+            } elseif (isset($params['condition']) && $params['condition'] == 'is_employ') {
+                $couponJson['member']['range'] = '公司员工';
+                $couponJson['member']['where'] = urlencode(" `member_classify` = 'EMPLOY'");
+            } elseif (isset($params['condition']) && $params['condition'] == 'is_member') {
+                $couponJson['member']['range'] = '会员';
+                $couponJson['member']['where'] = urlencode(" `member_classify` = 'MEMBER'");
+            }
+        } else if ($params['coupon_use_member'] == 'all') {
+            $couponJson['member']['range'] = '不限';
+            $couponJson['member']['where'] = urlencode(" 1");
+        }
+
+        if (!empty($params['premises_range']) && $params['premises_range'] == 'all') {
+            $couponJson['premises_range'] = '所有门店可用';
+        } elseif (!empty($params['premises_range']) && $params['premises_range'] == 'part') {
+            $couponJson['premises'] = $params['premises'];
+            $couponJson['premises_range'] = '部分门店可用';
+        }
+
+        $data['coupon_json'] = json_encode($couponJson, JSON_UNESCAPED_UNICODE);
 
         return $data;
     }
@@ -83,4 +213,81 @@ class CouponController extends Curd
         unset($data[$primary_key]);
         return [$id, $data];
     }
+
+    /**
+     * 优惠券详情
+     */
+    public function info(Request $request): Response
+    {
+        $couponId = $request->get('coupon_id', '');
+        if (!$couponId) {
+            return json_fail('参数异常');
+        }
+        $coupon = Coupon::where('coupon_id', $couponId)->first();
+        if (!$coupon) {
+            return json_fail('数据异常');
+        }
+        // 拼选择的商品
+        $couponGoods = CouponGoods::with([
+            'goods' => function ($query) {
+                $query->select('goods_id', 'goods_id as id', 'goods_name as name', 'join_goods_category_id as pid', 'goods_classify', 'goods_sales_price', 'goods_cover');
+            },
+            'skus',
+            'sku'
+        ])->where('join_goods_coupon_id', $couponId)
+            ->get()
+            ->toArray();
+        $goodsIds = [];
+        $goodsContent = [];
+        /**
+         * ({goods_id:itemSub3.goods_id,sku_id:sku_id,sku_name:sku_name,goods_name:itemSub3.name,goods_classify:goods_classify,
+         * goods_sales_price:goods_sales_price,nbr:1,skus:itemSub3.sku})
+         */
+        foreach ($couponGoods as $couponGood) {
+            $goodsIds[] = $couponGood['join_coupon_goods_id'];
+            $content = [
+                'goods_id' => $couponGood['join_coupon_goods_id'],
+                'sku_id' => $couponGood['join_coupon_goods_sku_id'],
+            ];
+            if (isset($couponGood['goods'])) {
+                $content['goods_name'] = $couponGood['goods']['name'];
+                $content['goods_classify'] = $couponGood['goods']['goods_classify'];
+            }
+            if (isset($couponGood['sku']) && isset($couponGood['sku']['goods_sku_specs_json'])) {
+                $skuSpecsJson = json_decode($couponGood['sku']['goods_sku_specs_json'], true);
+                $skuName = '';
+                foreach ($skuSpecsJson as $item) {
+                    if (is_array($item)) {
+                        $item = implode('', $item);
+                    }
+                    $skuName .= $item . ',';
+                }
+                $content['sku_name'] = rtrim($skuName, ',');
+                $content['goods_sales_price'] = $couponGood['sku']['goods_sku_sales_price'];
+            }
+            if (isset($couponGood['skus'])) {
+                foreach ($couponGood['skus'] as $key => $skus) {
+                    if (!empty($skus['goods_sku_specs_json'])) {
+                        $skuName = '';
+                        foreach ($skuSpecsJson as $item) {
+                            if (is_array($item)) {
+                                $item = implode('', $item);
+                            }
+                            $skuName .= $item . ',';
+                        }
+                        $couponGood['skus'][$key]['sku_name'] = rtrim($skuName, ',');
+                    }
+                }
+                $content['skus'] = $couponGood['skus'];
+            }
+            $goodsContent[] = $content;
+        }
+
+        $data = [
+            'goods_ids' => $goodsIds,
+            'goods_content' => $goodsContent
+        ];
+
+        return json_success('', $data);
+    }
 }

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

@@ -2511,7 +2511,8 @@ class WholeController extends Curd
                                     ]
                                 ];
                                 http_post_json(getenv('VOTE_MENU_URL'),$voteData);
-                            }else if ((strpos($key,'前台') !== false || strpos($key,'后厨') !== false)){
+                            }
+                            if ((strpos($key,'前台') !== false || strpos($key,'后厨') !== false)){
                                 $voteData = [
                                     'func'=>'procActionToPrinter',
                                     'sign'=>'',

+ 2 - 1
app/admin/service/goods/GoodsService.php

@@ -2413,7 +2413,8 @@ class GoodsService
                 }
             }
             if ($operation == 'update' && !empty($skusOldIds)) {
-                GoodsSku::whereIn('goods_sku_id', $skusOldIds)->delete();
+                // GoodsSku::whereIn('goods_sku_id', $skusOldIds)->delete();
+                GoodsSku::whereIn('goods_sku_id', $skusOldIds)->update(['goods_sku_status'=>'DISABLED']);
             }
 
             Db::commit();

+ 4 - 4
app/admin/validate/coupon/CouponValidate.php

@@ -15,8 +15,8 @@ class CouponValidate extends Validate
         'coupon_status|优惠券状态' => 'require|in:ACTIVED,DISABLED',
         'coupon_category|分类' => 'max:32',
         'coupon_name|名称' => 'require|max:32',
-        'coupon_begindate|启用日期' => 'require',
-        'coupon_enddate|过期时间' => 'require',
+        'coupon_validdate_begin|启用日期' => 'require',
+        'coupon_validdate_end|过期时间' => 'require',
     ];
 
     /**
@@ -24,7 +24,7 @@ class CouponValidate extends Validate
      * @var array[]
      */
     protected $scene = [
-        'add' => ['coupon_status', 'coupon_category', 'coupon_name', 'coupon_begindate', 'coupon_enddate'],
-        'update' => ['coupon_id', 'coupon_status', 'coupon_category', 'coupon_name', 'coupon_begindate', 'coupon_enddate'],
+        'add' => ['coupon_status', 'coupon_category', 'coupon_name', 'coupon_validdate_begin', 'coupon_validdate_end'],
+        'update' => ['coupon_id', 'coupon_status', 'coupon_category', 'coupon_name', 'coupon_validdate_begin', 'coupon_validdate_end'],
     ];
 }

+ 36 - 0
app/model/CouponGoods.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace app\model;
+
+use DateTimeInterface;
+use support\Model;
+
+class CouponGoods extends Model
+{
+    protected $table = 'coupon_goods';
+
+    protected $primaryKey = 'coupon_goods_id';
+
+    protected $dateFormat = 'U';
+
+    const CREATED_AT = 'coupon_goods_addtimes';
+
+    const UPDATED_AT = null;
+
+    public function serializeDate(DateTimeInterface $date)
+    {
+        return $date->format('Y-m-d H:i:s');
+    }
+
+    public function goods(){
+        return $this->hasOne(Goods::class,'goods_id','join_coupon_goods_id');
+    }
+
+    public function skus(){
+        return $this->hasMany(GoodsSku::class,'join_sku_goods_id','join_coupon_goods_id');
+    }
+
+    public function sku(){
+        return $this->hasOne(GoodsSku::class,'goods_sku_id','join_coupon_goods_sku_id');
+    }
+}

+ 1 - 0
route/admin.php

@@ -830,6 +830,7 @@ Route::group('/admin', function () {
         Route::group('', function () {
             Route::get('/list', [\app\admin\controller\coupon\CouponController::class, 'select']);
             Route::get('/selectList', [\app\admin\controller\coupon\CouponController::class, 'selectList']);
+            Route::get('/info', [\app\admin\controller\coupon\CouponController::class, 'info']);
             Route::post('/add', [\app\admin\controller\coupon\CouponController::class, 'insert']);
             Route::post('/update', [\app\admin\controller\coupon\CouponController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\coupon\CouponController::class, 'delete']);