Browse Source

完善功能

Gorden 9 months ago
parent
commit
8386ad1ffc

+ 10 - 0
app/admin/controller/goods/EntityGoodsController.php

@@ -31,6 +31,16 @@ class EntityGoodsController
         return GoodsService::selectAll($goodsIds);
     }
 
+    public function selectAllByGoodsName(Request $request)
+    {
+        $goodsName = $request->get('goods_name', '');
+        if (!$goodsName) {
+            return json_fail("请输入要搜索的产品");
+        }
+
+        return GoodsService::selectAllByGoodsName($goodsName);
+    }
+
     public function selectAllByCategoryForRuleAddComponent(Request $request)
     {
         $category = $request->get('category', 'GOODS');

+ 90 - 1
app/admin/controller/member/BenefitController.php

@@ -3,8 +3,12 @@
 namespace app\admin\controller\member;
 
 use app\controller\Curd;
+use app\model\Appointment;
+use app\model\Member;
 use app\model\MemberBenefit;
+use support\Db;
 use support\exception\BusinessException;
+use support\Redis;
 use support\Request;
 
 class BenefitController extends Curd
@@ -58,7 +62,7 @@ class BenefitController extends Curd
             'goods' => function ($query) {
                 $query->select('goods_id', 'goods_name');
             },
-            'package' => function ($query) {
+            'goods' => function ($query) {
                 $query->select('goods_id', 'goods_name');
             },
             'order'
@@ -85,4 +89,89 @@ class BenefitController extends Curd
         unset($data[$primary_key]);
         return [$id, $data];
     }
+
+    public function writeOff(Request $request)
+    {
+        $memberId = $request->post('member_id', '');
+        $benefitId = $request->post('benefit_id', '');
+        $nbr = $request->post('nbr');
+        $times = $request->post('times', '');
+        $code = $request->post('sms_code', '');
+
+        if (!$memberId || !$benefitId) {
+            return json_fail('参数异常');
+        }
+
+        $benefit = MemberBenefit::where('member_benefit_id', $benefitId)
+            ->where('join_benefit_member_id', $memberId)
+            ->first();
+        if ($benefit->member_benefit_limit_count - $benefit->member_benefit_used_count < $nbr) {
+            return json_fail('可核销数量不足');
+        }
+        $member = Member::find($memberId);
+        $mobile = $member->member_mobile;
+        $key = "SMS:CODE:QUOTA:" . $mobile;
+        $redisCode = Redis::get($key);
+        if ($redisCode != $code) {
+            return json_fail("验证码错误,请重新输入");
+        }
+        Redis::del($key);
+        if (!$times) {
+            $times = date('Y-m-d H:i:s');
+        } else {
+            $times = date('Y-m-d H:i:s', strtotime($times));
+        }
+
+        try {
+            Db::beginTransaction();
+            // 减额度
+            $benefit->member_benefit_used_count = $benefit->member_benefit_used_count + $nbr;
+            $benefit->save();
+            // 记录核销
+            Appointment::where('join_appointment_member_benefit_id', $benefitId)
+                ->where('appointment_status', 'INIT')
+                ->limit($nbr)
+                ->update([
+                    'appointment_status' => 'DONE',
+                    'appointment_datetime' => $times,
+                    'appointment_apply_datetime' => $times,
+                    'appointment_doing_datetime' => $times,
+                    'appointment_done_datetime' => $times
+                ]);
+            Db::commit();
+
+            return json_success('核销成功');
+        } catch (\Exception $e) {
+            dump($e->getMessage());
+            Db::rollBack();
+            return json_fail('核销失败');
+        }
+    }
+
+
+    public function writeOffList(Request $request)
+    {
+        $memberId = $request->get('member_id', '');
+        $benefitId = $request->get('benefit_id', '');
+
+        $quotas = Appointment::with([
+            'member' => function ($query) {
+                $query->select('member_id', 'member_mobile');
+            },
+            'cert' => function ($query) {
+                $query->select('join_cert_member_id', 'member_cert_name');
+            },
+//            'goods' => function ($query) {
+//                $query->select('goods_id', 'goods_name');
+//            },
+            'benefit' => function ($query) {
+                $query->select('member_benefit_id','member_benefit_name');
+            }
+        ])->where('join_appointment_member_id', $memberId)
+            ->where('join_appointment_member_benefit_id', $benefitId)
+            ->where('appointment_status', 'DONE')
+            ->get();
+
+        return json_success('', $quotas);
+    }
 }

+ 30 - 0
app/admin/service/goods/GoodsService.php

@@ -31,6 +31,36 @@ class GoodsService
         return json_success('', $goods);
     }
 
+    public static function selectAllByGoodsName($goodsName)
+    {
+        $goods = Goods::with('sku')
+            ->where('goods_status', 'ON')
+            ->when($goodsName != '', function ($query) use ($goodsName) {
+                $query->where('goods_name', 'like', "%" . $goodsName . '%');
+            })
+            ->select('goods_id', 'goods_name')
+            ->get()
+            ->toArray();
+        foreach ($goods as &$item) {
+            if (!empty($item['sku'])) {
+                foreach ($item['sku'] as $key => $sku) {
+                    $specsJson = json_decode($sku['goods_sku_specs_json'], true);
+                    $skuTitle = '';
+                    foreach ($specsJson as $item2) {
+                        if (is_array($item2)) {
+                            $item2 = implode(',', $item2);
+                        }
+                        $skuTitle .= $item2 . '-';
+                    }
+                    $item['sku'][$key]['goods_sku_id'] = strval($item['sku'][$key]['goods_sku_id']);
+                    $item['sku'][$key]['goods_sku_title'] = rtrim($skuTitle, '-');
+                }
+            }
+        }
+
+        return json_success('', $goods);
+    }
+
     public static function selectAllByCategoryForRuleAddComponent($category = "GOODS")
     {
         $categoryIds = [];

+ 19 - 9
app/model/MemberBenefit.php

@@ -31,17 +31,27 @@ class MemberBenefit extends Model
             ->select('member_id', 'member_mobile');
     }
 
-    public function goods(){
-        return $this->hasOne(Goods::class, 'goods_id','join_benefit_goods_id')
-            ->select('goods_id','goods_cover','goods_name');
+    public function cert()
+    {
+        return $this->hasOne(MemberCert::class, 'join_cert_member_id', 'member');
+    }
+
+    public function goods()
+    {
+        return $this->hasOne(Goods::class, 'goods_id', 'join_benefit_goods_id')
+            ->select('goods_id', 'goods_cover', 'goods_name');
     }
-    public function package(){
-        return $this->hasOne(Goods::class, 'goods_id','join_benefit_package_id')
-            ->select('goods_id','goods_cover','goods_name');
+
+    public function package()
+    {
+        return $this->hasOne(Goods::class, 'goods_id', 'join_benefit_package_id')
+            ->select('goods_id', 'goods_cover', 'goods_name');
     }
-    public function order(){
-        return $this->hasOne(Order::class, 'order_id','join_benefit_order_id')
-            ->select('order_id','order_name');
+
+    public function order()
+    {
+        return $this->hasOne(Order::class, 'order_id', 'join_benefit_order_id')
+            ->select('order_id', 'order_name');
     }
 
 }

+ 1 - 0
route/admin.php

@@ -36,6 +36,7 @@ Route::group('/admin', function () {
         /* 实物商品管理 */
         Route::group('/entity', function () {
             Route::get('/selectAll', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAll']);
+            Route::get('/selectAllByGoodsName', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAllByGoodsName']);
             Route::get('/selectAllByCategoryForRuleAddComponent', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAllByCategoryForRuleAddComponent']);
             Route::get('/list', [\app\admin\controller\goods\EntityGoodsController::class, 'select']);
             Route::get('/info', [\app\admin\controller\goods\EntityGoodsController::class, 'info']);