dongxiaoqin 1 год назад
Родитель
Сommit
71e36e28d8

+ 16 - 24
app/adminapi/controller/group_activity/GroupActivityController.php → app/adminapi/controller/group_activity/GroupEquityController.php

@@ -17,17 +17,17 @@ namespace app\adminapi\controller\group_activity;
 
 
 use app\adminapi\controller\BaseAdminController;
-use app\adminapi\lists\group_activity\GroupActivityLists;
-use app\adminapi\logic\group_activity\GroupActivityLogic;
-use app\adminapi\validate\group_activity\GroupActivityValidate;
+use app\adminapi\lists\group_activity\GroupEquityLists;
+use app\adminapi\logic\group_activity\GroupEquityLogic;
+use app\adminapi\validate\group_activity\GroupEquityValidate;
 
 
 /**
  * 拼团活动控制器
- * Class GroupActivityController
+ * Class GroupEquityController
  * @package app\adminapi\controller\group_activity
  */
-class GroupActivityController extends BaseAdminController
+class GroupEquityController extends BaseAdminController
 {
 
 
@@ -39,7 +39,7 @@ class GroupActivityController extends BaseAdminController
      */
     public function lists()
     {
-        return $this->dataLists(new GroupActivityLists());
+        return $this->dataLists(new GroupEquityLists());
     }
 
 
@@ -51,12 +51,12 @@ class GroupActivityController extends BaseAdminController
      */
     public function add()
     {
-        $params = (new GroupActivityValidate())->post()->goCheck('add');
-        $result = GroupActivityLogic::add($params);
+        $params = (new GroupEquityValidate())->post()->goCheck('add');
+        $result = GroupEquityLogic::add($params);
         if (true === $result) {
             return $this->success('添加成功', [], 1, 1);
         }
-        return $this->fail(GroupActivityLogic::getError());
+        return $this->fail(GroupEquityLogic::getError());
     }
 
 
@@ -68,12 +68,12 @@ class GroupActivityController extends BaseAdminController
      */
     public function edit()
     {
-        $params = (new GroupActivityValidate())->post()->goCheck('edit');
-        $result = GroupActivityLogic::edit($params);
+        $params = (new GroupEquityValidate())->post()->goCheck('edit');
+        $result = GroupEquityLogic::edit($params);
         if (true === $result) {
             return $this->success('编辑成功', [], 1, 1);
         }
-        return $this->fail(GroupActivityLogic::getError());
+        return $this->fail(GroupEquityLogic::getError());
     }
 
 
@@ -85,8 +85,8 @@ class GroupActivityController extends BaseAdminController
      */
     public function delete()
     {
-        $params = (new GroupActivityValidate())->post()->goCheck('delete');
-        GroupActivityLogic::delete($params);
+        $params = (new GroupEquityValidate())->post()->goCheck('delete');
+        GroupEquityLogic::delete($params);
         return $this->success('删除成功', [], 1, 1);
     }
 
@@ -99,17 +99,9 @@ class GroupActivityController extends BaseAdminController
      */
     public function detail()
     {
-        $params = (new GroupActivityValidate())->goCheck('detail');
-        $result = GroupActivityLogic::detail($params);
+        $params = (new GroupEquityValidate())->goCheck('detail');
+        $result = GroupEquityLogic::detail($params);
         return $this->data($result);
     }
-    /**
-     * 获取活动二维码
-     */
-    public function getQRCode()
-    {
-        $params = (new GroupActivityValidate())->post()->goCheck('detail');
-        return $this->success('',['qrcode'=>GroupActivityLogic::getQRCode($params, $this->request->domain())], 1, 1);
-    }
 
 }

+ 17 - 3
app/adminapi/lists/group_activity/GroupActivityCategoryLists.php

@@ -38,10 +38,17 @@ class GroupActivityCategoryLists extends BaseAdminDataLists implements ListsSear
     public function setSearch(): array
     {
         return [
-            '=' => ['id', 'status'],
-            '%like%' => ['title'],
+            '=' => ['id', 'status','type', 'is_simulate_form'],
+            '%like%' => ['title','area'],
         ];
     }
+    public function queryWhere(){
+        $where = [];
+        if(!empty($this->params['area'])){
+            $where[] = ['area', 'like', '%'.$this->params['area'].'%'];
+        }
+        return $where;
+    }
 
     /**
      * @notes 获取列表
@@ -55,11 +62,18 @@ class GroupActivityCategoryLists extends BaseAdminDataLists implements ListsSear
     public function lists(): array
     {
         $list = GroupActivityCategory::where($this->searchWhere)
-            ->field(['id', 'title', 'status','create_time'])
+            ->field(['id', 'title', 'start_time', 'end_time', 'participant_num', 'type', 'form_time_limit', 'is_simulate_form', 'simulate_num','area','status','create_time'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->select()
             ->toArray();
+        
+        foreach ($list as &$item) {
+            $item['participant_num'] = $item['participant_num'] ? explode(',', $item['participant_num']) : [];
+            $item['simulate_num'] = $item['simulate_num'] ? explode(',', $item['simulate_num']) : [];
+            $item['area'] = $item['area'] ? explode(',', $item['area']) : [];
+            $item['end_time'] = date('Y-m-d H:i:s', $item['end_time']);
+        }
         return $list;
     }
 

+ 9 - 26
app/adminapi/lists/group_activity/GroupActivityLists.php → app/adminapi/lists/group_activity/GroupEquityLists.php

@@ -16,16 +16,16 @@ namespace app\adminapi\lists\group_activity;
 
 
 use app\adminapi\lists\BaseAdminDataLists;
-use app\common\model\group_activity\GroupActivity;
+use app\common\model\group_activity\GroupEquity;
 use app\common\lists\ListsSearchInterface;
 
 
 /**
- * 拼团活动列表
- * Class GroupActivityLists
+ * 拼团权益卡列表
+ * Class GroupEquityLists
  * @package app\adminapi\listsgroup_activity
  */
-class GroupActivityLists extends BaseAdminDataLists implements ListsSearchInterface
+class GroupEquityLists extends BaseAdminDataLists implements ListsSearchInterface
 {
 
 
@@ -38,22 +38,14 @@ class GroupActivityLists extends BaseAdminDataLists implements ListsSearchInterf
     public function setSearch(): array
     {
         return [
-            '=' => ['type', 'is_simulate_form'],
+            '=' => ['id'],
             '%like%' => ['title'],
         ];
     }
     
-    public function queryWhere(){
-        $where = [];
-        if(!empty($this->params['area'])){
-            $where[] = ['area', 'like', '%'.$this->params['area'].'%'];
-        }
-        return $where;
-    }
-
 
     /**
-     * @notes 获取拼团活动列表
+     * @notes 获取拼团权益卡列表
      * @return array
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
@@ -63,33 +55,24 @@ class GroupActivityLists extends BaseAdminDataLists implements ListsSearchInterf
      */
     public function lists(): array
     {
-        $list = GroupActivity::where($this->searchWhere)
-            ->where($this->queryWhere())
-            ->field(['id', 'title', 'image','equity_id','origin_price','price','start_time', 'end_time', 'participant_num', 'type', 'form_time_limit', 'is_simulate_form', 'simulate_num','area'])
+        $list = GroupEquity::where($this->searchWhere)
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->select()
             ->toArray();
-        foreach ($list as $key => &$item) {
-            $item['price'] = $item['price'] ? explode(',', $item['price']) : [];
-            $item['participant_num'] = $item['participant_num'] ? explode(',', $item['participant_num']) : [];
-            $item['simulate_num'] = $item['simulate_num'] ? explode(',', $item['simulate_num']) : [];
-            $item['area'] = $item['area'] ? explode(',', $item['area']) : [];
-            $item['end_time'] = date('Y-m-d H:i:s', $item['end_time']);
-        }
         return $list;
     }
 
 
     /**
-     * @notes 获取拼团活动数量
+     * @notes 获取拼团权益卡数量
      * @return int
      * @author likeadmin
      * @date 2025/03/13 10:31
      */
     public function count(): int
     {
-        return GroupActivity::where($this->searchWhere)->where($this->queryWhere())->count();
+        return GroupEquity::where($this->searchWhere)->count();
     }
 
 }

+ 6 - 6
app/adminapi/lists/group_activity/GroupOrderLists.php

@@ -66,13 +66,13 @@ class GroupOrderLists extends BaseAdminDataLists implements ListsSearchInterface
     {
         $list = GroupOrder::alias('a')->leftJoin('group_activity b', 'b.id = a.group_activity_id')
             ->leftJoin('user c', 'c.id = a.user_id')
-            ->where($this->searchWhere)
-            ->where($this->queryWhere())
+        ->where($this->searchWhere)
+        ->where($this->queryWhere())
             ->field(['a.*', 'b.title', 'b.image','c.mobile'])
-            ->limit($this->limitOffset, $this->limitLength)
-            ->order(['a.id' => 'desc'])
-            ->select()
-            ->toArray();
+        ->limit($this->limitOffset, $this->limitLength)
+        ->order(['a.id' => 'desc'])
+        ->select()
+        ->toArray();
         return $list;
     }
 

+ 124 - 10
app/adminapi/logic/group_activity/GroupActivityCategoryLogic.php

@@ -16,10 +16,11 @@ namespace app\adminapi\logic\group_activity;
 
 
 use think\Exception;
+use think\facade\Db;
 use think\facade\Log;
 use app\common\logic\BaseLogic;
-use app\common\model\group_activity\GroupActivity;
 use app\common\service\wechat\WeChatMnpService;
+use app\common\model\group_activity\GroupActivity;
 use app\common\model\group_activity\GroupActivityCategory;
 
 /**
@@ -41,17 +42,59 @@ class GroupActivityCategoryLogic extends BaseLogic
     public static function add(array $params): bool
     {
         try {
-            $params['block_data'] = json_encode($params['block_data']);
+            if ($params['type'] == 1) {
+                $params['participant_num'] = $params['participant_num'][0];
+            } else {
+                $params['participant_num'] = implode(",",$params['participant_num']);
+            }
+            if ($params['is_simulate_form'] == 1) {
+                $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
+            } else {
+                $params['simulate_num'] = '';
+            }
+            $params['area'] = implode(",",$params['area']);
             $params['images'] = implode(",",$params['images']);
-            GroupActivityCategory::create([
+
+            Db::startTrans();
+            $category = GroupActivityCategory::create([
                 'title' => $params['title'],
                 'images' => $params['images'],
-                'block_data' => $params['block_data'],
+                'start_time' => strtotime($params['start_time']),
+                'end_time' => strtotime($params['end_time']),
+                'participant_num' => $params['participant_num'],
+                'type' => $params['type'],
+                'form_time_limit' => $params['form_time_limit'],
+                'is_simulate_form' => $params['is_simulate_form'],
+                'simulate_num' => $params['simulate_num'],
+                'area' => $params['area'],
                 'status' => $params['status'],
             ]);
 
+            foreach($params['block_data'] as $item) {
+                foreach($item['activity'] as &$activity) {
+                    if (empty($activity['origin_price']) || empty($activity['price'])) {
+                        throw new Exception('请完善拼团活动配置');
+                    }
+                    $res = GroupActivity::create([
+                        'title' => $activity['title'],
+                        'image' => $activity['image'],
+                        'equity_id' => $activity['equity_id'],
+                        'block_key' => $item['block_key'],
+                        'group_category_id' => $category['id'],
+                        'origin_price' => $activity['origin_price'],
+                        'price' => $activity['price'],
+                        'work_amount' => isset($activity['work_amount']) ? $activity['work_amount'] : 0,
+                    ]);
+                    $activity['data_id'] = $res['id'];
+                }
+            }
+
+            GroupActivityCategory::where('id',$category['id'])->update(['block_data' => json_encode($params['block_data'])]);
+        
+            Db::commit();
             return true;
         } catch (\Exception $e) {
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
@@ -68,16 +111,69 @@ class GroupActivityCategoryLogic extends BaseLogic
     public static function edit(array $params): bool
     {
         try {
-            $params['block_data'] = json_encode($params['block_data']);
+            if ($params['type'] == 1) {
+                $params['participant_num'] = $params['participant_num'][0];
+            } else {
+                $params['participant_num'] = implode(",",$params['participant_num']);
+            }
+            if ($params['is_simulate_form'] == 1) {
+                $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
+            } else {
+                $params['simulate_num'] = '';
+            }
+            
+            $params['area'] = implode(",",$params['area']);
             $params['images'] = implode(",",$params['images']);
+            
+            Db::startTrans();
+
+            $ids = [];
+            foreach($params['block_data'] as $item) {
+                foreach($item['activity'] as &$activity) {
+                    if (empty($activity['origin_price']) || empty($activity['price'])) {
+                        throw new Exception('请完善拼团活动配置');
+                    }
+                    $data = [
+                        'title' => $activity['title'],
+                        'image' => $activity['image'],
+                        'equity_id' => $activity['equity_id'],
+                        'block_key' => $item['block_key'],
+                        'group_category_id' => $params['id'],
+                        'origin_price' => $activity['origin_price'],
+                        'price' => $activity['price'],
+                        'work_amount' => isset($activity['work_amount']) ? $activity['work_amount'] : 0,
+                        'delete_time' => null,
+                    ];
+                    if (!empty($activity['data_id'])) {
+                        GroupActivity::where('id',$activity['data_id'])->update($data);
+                    } else {
+                        $res = GroupActivity::create($data);
+                        $activity['data_id'] = $res['id'];
+                    }
+                    $ids[] = $activity['data_id'];
+                }
+            }
+            
+            GroupActivity::where('group_category_id', $params['id'])->whereNotIn('id',$ids)->update(['delete_time' => time()]);
+
             GroupActivityCategory::where('id', $params['id'])->update([
                 'title' => $params['title'],
                 'images' => $params['images'],
-                'block_data' => $params['block_data'],
+                'start_time' => strtotime($params['start_time']),
+                'end_time' => strtotime($params['end_time']),
+                'participant_num' => $params['participant_num'],
+                'type' => $params['type'],
+                'form_time_limit' => $params['form_time_limit'],
+                'is_simulate_form' => $params['is_simulate_form'],
+                'simulate_num' => $params['simulate_num'],
+                'area' => $params['area'],
+                'block_data' => json_encode($params['block_data']),
                 'status' => $params['status'],
             ]);
+            Db::commit();
             return true;
         } catch (\Exception $e) {
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
@@ -93,12 +189,17 @@ class GroupActivityCategoryLogic extends BaseLogic
      */
     public static function delete(array $params): bool
     {
-        return GroupActivityCategory::destroy($params['id']);
+        $result = GroupActivityCategory::destroy($params['id']);
+        if ($result) {
+            GroupActivity::where('group_category_id',$params['id'])->update(['delete_time' => time()]);
+            return true;
+        } 
+        return $result;
     }
 
 
     /**
-     * @notes 获取拼团活动详情
+     * @notes 获取拼团分类详情
      * @param $params
      * @return array
      * @author likeadmin
@@ -106,11 +207,24 @@ class GroupActivityCategoryLogic extends BaseLogic
      */
     public static function detail($params): array
     {
+        
         $detail = GroupActivityCategory::findOrEmpty($params['id'])->toArray();
-        $detail['block_data'] = $detail['block_data'] ? json_decode($detail['block_data'],true) : [];
+        $detail['end_time'] = date('Y-m-d H:i:s',$detail['end_time']);
+        $detail['participant_num'] = explode(",",$detail['participant_num']);
+        $detail['simulate_num'] = explode(",",$detail['simulate_num']);
+        $detail['area'] = explode(",",$detail['area']);
         $detail['images'] = $detail['images'] ? explode(",",$detail['images']) : [];
-        $detail['activity'] = GroupActivity::with('goods')->field('id,equity_id,title,image')->select()->toArray();
+        $detail['block_data'] = json_decode($detail['block_data'],true);
+
+        foreach($detail['block_data'] as $key => $item) {
+            $detail['block_data'][$key]['activity'] = GroupActivity::where(['block_key' => $item['block_key'],'group_category_id' => $detail['id']])
+                    ->field('id,id as data_id,title,image,equity_id,block_key,origin_price,price,work_amount')
+                    ->select()
+                    ->toArray();
+        }
+        
         return $detail;
+    
     }
 
     /**

+ 0 - 198
app/adminapi/logic/group_activity/GroupActivityLogic.php

@@ -1,198 +0,0 @@
-<?php
-// +----------------------------------------------------------------------
-// | likeadmin快速开发前后端分离管理后台(PHP版)
-// +----------------------------------------------------------------------
-// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
-// | 开源版本可自由商用,可去除界面版权logo
-// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
-// | github下载:https://github.com/likeshop-github/likeadmin
-// | 访问官网:https://www.likeadmin.cn
-// | likeadmin团队 版权所有 拥有最终解释权
-// +----------------------------------------------------------------------
-// | author: likeadminTeam
-// +----------------------------------------------------------------------
-
-namespace app\adminapi\logic\group_activity;
-
-
-use think\Exception;
-use think\facade\Db;
-use think\facade\Log;
-use app\common\logic\BaseLogic;
-use app\common\service\wechat\WeChatMnpService;
-use app\common\model\group_activity\GroupActivity;
-
-/**
- * 拼团活动逻辑
- * Class GroupActivityLogic
- * @package app\adminapi\logic\group_activity
- */
-class GroupActivityLogic extends BaseLogic
-{
-
-
-    /**
-     * @notes 添加拼团活动
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public static function add(array $params): bool
-    {
-        Db::startTrans();
-        try {
-            if ($params['type'] == 1) {
-                $params['price'] = $params['price'][0];
-                $params['participant_num'] = $params['participant_num'][0];
-            } else {
-                $params['price'] = implode(",",$params['price']);
-                $params['participant_num'] = implode(",",$params['participant_num']);
-            }
-            if ($params['is_simulate_form'] == 1) {
-                $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
-            } else {
-                $params['simulate_num'] = '';
-            }
-            $params['area'] = implode(",",$params['area']);
-            GroupActivity::create([
-                'title' => $params['title'],
-                'image' => $params['image'],
-                'equity_id' => $params['equity_id'],
-                'origin_price' => $params['origin_price'],
-                'price' => $params['price'],
-                'start_time' => strtotime($params['start_time']),
-                'end_time' => strtotime($params['end_time']),
-                'participant_num' => $params['participant_num'],
-                'type' => $params['type'],
-                'form_time_limit' => $params['form_time_limit'],
-                'is_online_join' => $params['is_online_join'],
-                'is_simulate_form' => $params['is_simulate_form'],
-                'simulate_num' => $params['simulate_num'],
-                'is_preheat' => $params['is_preheat'],
-                'is_support_refund' => $params['is_support_refund'],
-                'area' => $params['area'],
-            ]);
-
-            Db::commit();
-            return true;
-        } catch (\Exception $e) {
-            Db::rollback();
-            self::setError($e->getMessage());
-            return false;
-        }
-    }
-
-
-    /**
-     * @notes 编辑拼团活动
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public static function edit(array $params): bool
-    {
-        Db::startTrans();
-        try {
-            if ($params['type'] == 1) {
-                $params['price'] = $params['price'][0];
-                $params['participant_num'] = $params['participant_num'][0];
-            } else {
-                $params['price'] = implode(",",$params['price']);
-                $params['participant_num'] = implode(",",$params['participant_num']);
-            }
-            if ($params['is_simulate_form'] == 1) {
-                $params['simulate_num'] = $params['type'] == 1 ? $params['simulate_num'][0] : implode(",",$params['simulate_num']);
-            } else {
-                $params['simulate_num'] = '';
-            }
-            
-            $params['area'] = implode(",",$params['area']);
-            GroupActivity::where('id', $params['id'])->update([
-                'title' => $params['title'],
-                'image' => $params['image'],
-                'equity_id' => $params['equity_id'],
-                'origin_price' => $params['origin_price'],
-                'price' => $params['price'],
-                'start_time' => strtotime($params['start_time']),
-                'end_time' => strtotime($params['end_time']),
-                'participant_num' => $params['participant_num'],
-                'type' => $params['type'],
-                'form_time_limit' => $params['form_time_limit'],
-                'is_online_join' => $params['is_online_join'],
-                'is_simulate_form' => $params['is_simulate_form'],
-                'simulate_num' => $params['simulate_num'],
-                'is_preheat' => $params['is_preheat'],
-                'is_support_refund' => $params['is_support_refund'],
-                'area' => $params['area'],
-            ]);
-
-            Db::commit();
-            return true;
-        } catch (\Exception $e) {
-            Db::rollback();
-            self::setError($e->getMessage());
-            return false;
-        }
-    }
-
-
-    /**
-     * @notes 删除拼团活动
-     * @param array $params
-     * @return bool
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public static function delete(array $params): bool
-    {
-        return GroupActivity::destroy($params['id']);
-    }
-
-
-    /**
-     * @notes 获取拼团活动详情
-     * @param $params
-     * @return array
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public static function detail($params): array
-    {
-        $detail = GroupActivity::findOrEmpty($params['id'])->toArray();
-        $detail['area'] = explode(",",$detail['area']);
-        return $detail;
-    }
-
-    /**
-     * 获取活动二维码
-     * @return string|void
-     */
-    public static function getQRCode($params,$url)
-    {
-        try {
-            $mnp_page = 'pages/web_view/group';
-            
-            $scene_page = 'active';
-            Log::info('getQRCode:'.rawurlencode($scene_page));
-            $response = (new WeChatMnpService())->getUnlimitedQRCode(
-                'page='.$scene_page.'&id='.$params['id'],
-                $mnp_page,
-                env('miniprogram.mini_env_version', 'release'),
-                false
-            );
-            Log::info('getQRCode:'.json_encode([$response]));
-            $qrcode = $response->getContent();
-            if(!is_dir('./uploads/wx_qrcode/'.date('Ymd'))){
-                mkdir('./uploads/wx_qrcode/'.date('Ymd'));
-            }
-            $file_name = 'uploads/wx_qrcode/'.date('Ymd').'/'.time().rand(1000,9999).'.png';
-            file_put_contents($file_name, $qrcode);
-            return $url.'/'.$file_name;
-        } catch (\Throwable $e) {
-            Log::info('getQRCode:'.$e->getMessage());
-            return '';
-        }
-    }
-}

+ 110 - 0
app/adminapi/logic/group_activity/GroupEquityLogic.php

@@ -0,0 +1,110 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\logic\group_activity;
+
+
+use think\Exception;
+use think\facade\Db;
+use app\common\logic\BaseLogic;
+use app\common\model\group_activity\GroupEquity;
+
+/**
+ * 拼团权益卡逻辑
+ * Class GroupEquityLogic
+ * @package app\adminapi\logic\group_activity
+ */
+class GroupEquityLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加拼团权益卡
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            
+            GroupEquity::create([
+                'title' => $params['title'],
+                'image' => $params['image'],
+                'equity_id' => $params['equity_id'],
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * @notes 编辑拼团权益卡
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            GroupEquity::where('id', $params['id'])->update([
+                'title' => $params['title'],
+                'image' => $params['image'],
+                'equity_id' => $params['equity_id'],
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * @notes 删除拼团权益卡
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public static function delete(array $params): bool
+    {
+        return GroupEquity::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取拼团权益卡详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public static function detail($params): array
+    {
+        $detail = GroupEquity::findOrEmpty($params['id'])->toArray();
+        return $detail;
+    }
+}

+ 14 - 2
app/adminapi/validate/group_activity/GroupActivityCategoryValidate.php

@@ -33,6 +33,12 @@ class GroupActivityCategoryValidate extends BaseValidate
     protected $rule = [
         'id' => 'require',
         'title' => 'require',
+        'start_time' => 'require',
+        'end_time' => 'require',
+        'participant_num' => 'require',
+        'type' => 'require',
+        'form_time_limit' => 'require',
+        'is_simulate_form' => 'require',
         'images' => 'require',
         'block_data' => 'require',
 
@@ -46,6 +52,12 @@ class GroupActivityCategoryValidate extends BaseValidate
     protected $field = [
         'id' => 'id',
         'title' => '活动名称',
+        'start_time' => '活动开始时间',
+        'end_time' => '活动结束时间',
+        'participant_num' => '参团人数',
+        'type' => '活动类型',
+        'form_time_limit' => '成团时限',
+        'is_simulate_form' => '是否开启模拟成团',
         'images' => '活动图片',
         'block_data' => '活动分类板块',
 
@@ -60,7 +72,7 @@ class GroupActivityCategoryValidate extends BaseValidate
      */
     public function sceneAdd()
     {
-        return $this->only(['title','images','block_data']);
+        return $this->only(['title','images','block_data','start_time','end_time','participant_num','type','form_time_limit','is_simulate_form']);
     }
 
 
@@ -72,7 +84,7 @@ class GroupActivityCategoryValidate extends BaseValidate
      */
     public function sceneEdit()
     {
-        return $this->only(['id','title','images','block_data']);
+        return $this->only(['id','title','images','block_data','start_time','end_time','participant_num','type','form_time_limit','is_simulate_form']);
     }
 
 

+ 9 - 25
app/adminapi/validate/group_activity/GroupActivityValidate.php → app/adminapi/validate/group_activity/GroupEquityValidate.php

@@ -19,11 +19,11 @@ use app\common\validate\BaseValidate;
 
 
 /**
- * 拼团活动验证器
- * Class GroupActivityValidate
+ * 拼团权益卡验证器
+ * Class GroupEquityValidate
  * @package app\adminapi\validate\group_activity
  */
-class GroupActivityValidate extends BaseValidate
+class GroupEquityValidate extends BaseValidate
 {
 
      /**
@@ -35,14 +35,6 @@ class GroupActivityValidate extends BaseValidate
         'title' => 'require',
         'image' => 'require',
         'equity_id' => 'require',
-        'origin_price' => 'require',
-        'price' => 'require',
-        'start_time' => 'require',
-        'end_time' => 'require',
-        'participant_num' => 'require',
-        'type' => 'require',
-        'form_time_limit' => 'require',
-        'is_simulate_form' => 'require',
 
     ];
 
@@ -56,45 +48,37 @@ class GroupActivityValidate extends BaseValidate
         'title' => '活动名称',
         'image' => '活动图片',
         'equity_id' => '权益卡',
-        'origin_price' => '拼团原价',
-        'price' => '拼团价',
-        'start_time' => '活动开始时间',
-        'end_time' => '活动结束时间',
-        'participant_num' => '参团人数',
-        'type' => '活动类型',
-        'form_time_limit' => '成团时限',
-        'is_simulate_form' => '是否开启模拟成团',
 
     ];
 
 
     /**
      * @notes 添加场景
-     * @return GroupActivityValidate
+     * @return GroupEquityValidate
      * @author likeadmin
      * @date 2025/03/13 10:31
      */
     public function sceneAdd()
     {
-        return $this->only(['title','equity_id','start_time','end_time','participant_num','type','form_time_limit','is_simulate_form']);
+        return $this->only(['title','equity_id']);
     }
 
 
     /**
      * @notes 编辑场景
-     * @return GroupActivityValidate
+     * @return GroupEquityValidate
      * @author likeadmin
      * @date 2025/03/13 10:31
      */
     public function sceneEdit()
     {
-        return $this->only(['id','title','equity_id','start_time','end_time','participant_num','type','form_time_limit','is_simulate_form']);
+        return $this->only(['id','title','equity_id']);
     }
 
 
     /**
      * @notes 删除场景
-     * @return GroupActivityValidate
+     * @return GroupEquityValidate
      * @author likeadmin
      * @date 2025/03/13 10:31
      */
@@ -106,7 +90,7 @@ class GroupActivityValidate extends BaseValidate
 
     /**
      * @notes 详情场景
-     * @return GroupActivityValidate
+     * @return GroupEquityValidate
      * @author likeadmin
      * @date 2025/03/13 10:31
      */

+ 2 - 1
app/api/lists/group_activity/UserOrderLists.php

@@ -33,7 +33,8 @@ class UserOrderLists extends BaseApiDataLists implements ListsSearchInterface
     {
         $lists = GroupUserOrder::alias('a')->leftJoin('group_order b','a.group_order_id=b.id')
             ->leftJoin('group_activity c','a.group_activity_id=c.id')
-            ->field('a.id,a.sn,a.group_activity_id,a.status,a.order_amount,a.paid_amount,a.pay_status,a.refund_status,a.create_time,b.goods_id,b.num,b.origin_price,b.end_time,c.title,c.image')
+            ->leftJoin('group_equity d','c.group_equity_id=d.id')
+            ->field('a.id,a.sn,a.group_activity_id,a.status,a.order_amount,a.paid_amount,a.pay_status,a.refund_status,a.create_time,b.goods_id,b.num,b.origin_price,b.end_time,d.title,d.image')
             ->where([
                 'a.user_id' => $this->userId,
             ])

+ 31 - 38
app/api/logic/GroupActivityLogic.php

@@ -32,46 +32,48 @@ class GroupActivityLogic extends BaseLogic
      */
     public static function categoryList($id,$block_key = ''){
         
-        $detail = GroupActivityCategory::where('id',$id)->where('status',1)->field('id,title,images,block_data')->findOrEmpty()->toArray();
-        if($detail) {
-            $detail['block_data'] = $detail['block_data'] ? json_decode($detail['block_data'],true) : [];
-            
-            foreach($detail['block_data'] as $item) {
-                foreach($item['activity'] as &$activity) {
-                    $activity['end_time'] = is_numeric($activity['end_time']) ? $activity['end_time'] : strtotime($activity['end_time']);
-                }
-                if ($block_key == $item['block_key']) {
-                    return $item;
-                }
-            }
-            $detail['images'] = $detail['images']? explode(",",$detail['images']) : [];
+        if ($block_key) {
+            $result = GroupActivity::getActivityList($id,$block_key);
+            return [
+                'timestamp' => time(),
+                'block_key' => $block_key,
+                'activity' => current($result['block_data']),
+            ];
+        } else {
+            $result = GroupActivity::getActivityList($id);
+            return $result;
         }
-        return $detail;
+        
     }
 
     /**
      * @notes 拼团活动详情
+     * @param $id 拼团活动ID
      */
     public static function detail($id,$userId){
-        $detail = GroupActivity::with('goods')->where(['id'=>$id])->visible([
-            'id','title','image','start_time','end_time','type','equity_id',
-            'participant_num','origin_price','price','form_time_limit','area'
-        ])->findOrEmpty()->toArray();
+        $detail = GroupActivity::getDetail($id);
 
         if(!empty($detail)){
-            $detail['area'] = explode(",",$detail['area']);
-            $detail['price'] = explode(",",$detail['price']);
-            $detail['participant_num'] = explode(",",$detail['participant_num']);
             $detail['timestamp'] = time();
-            $goods = Goods::where('id',$detail['goods']['goods_id'])->field('service_image,goods_category_id')->findOrEmpty()->toArray();
-            $detail['goods'] = array_merge($detail['goods'],$goods);
+            $detail['goods'] = self::getEquityGoods($detail['equity_id']);
             //查询用户是否已有付款订单
-            $detail['order'] = GroupUserOrder::with('group_order')->where(['user_id'=>$userId,'group_activity_id'=>$detail['id'],'pay_status'=>1,'refund_status' => 0])->field('id,status,pay_way,pay_time,pay_status,remark,create_time,group_order_id')->findOrEmpty()->toArray();
+            $detail['order'] = GroupUserOrder::with('group_order')->where(['user_id'=>$userId,'group_activity_id'=>$id,'pay_status'=>1,'refund_status' => 0])->field('id,status,pay_way,pay_time,pay_status,remark,create_time,group_order_id')->findOrEmpty()->toArray();
         }
 
         return $detail;
     }
 
+    /**
+     * 获取权益卡的商品信息
+     */
+    private static function getEquityGoods($equity_id){
+        return EquityConfig::alias('a')->leftJoin('goods b','a.goods_id=b.id')
+                        ->where('a.id',$equity_id)
+                        ->field('a.id,a.equity_name,a.number,a.day_num,a.goods_id,b.service_image,b.goods_category_id')
+                        ->findOrEmpty()
+                        ->toArray();
+    }
+
     /**
      * @notes 拼团订单详情
      */
@@ -79,13 +81,9 @@ class GroupActivityLogic extends BaseLogic
         
         $detail = GroupOrder::where(['id'=>$order_id])->findOrEmpty()->toArray();
         if(!empty($detail)){
-            $detail['activity'] = GroupActivity::with('goods')->where(['id'=>$detail['group_activity_id']])->visible([
-                'id','title','image','start_time','end_time','type','equity_id',
-                'participant_num','origin_price','price','form_time_limit','area'
-            ])->findOrEmpty()->toArray();
+            $detail['activity'] = GroupActivity::getDetail($detail['group_activity_id']);
             $detail['is_paid'] = 0;
             $detail['order_id'] = 0;
-            $detail['activity']['area'] = explode(",",$detail['activity']['area']);
 
             $detail['users'] = GroupUserOrder::alias('a')
                                 ->leftJoin('user b','a.user_id=b.id')
@@ -147,12 +145,8 @@ class GroupActivityLogic extends BaseLogic
                     $detail['is_refund'] = 1;
                 }
             }
-            $detail['activity'] = GroupActivity::with('goods')->where(['id'=>$detail['group_activity_id']])->visible([
-                'id','title','image','start_time','end_time','type','equity_id',
-                'participant_num','origin_price','price','form_time_limit','area'
-            ])->findOrEmpty()->toArray();
-            
-            $detail['activity']['area'] = explode(",",$detail['activity']['area']);
+            $detail['activity'] = GroupActivity::getDetail($detail['group_activity_id']);
+            $detail['activity']['goods'] = self::getEquityGoods($detail['activity']['equity_id']); 
             $detail['timestamp'] = time();
         }
         return $detail;
@@ -167,7 +161,6 @@ class GroupActivityLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-            
             $userOrder = GroupUserOrder::where(['group_activity_id' => $params['group_activity_id'], 'user_id' => $params['user_id'],'refund_status' => 0])->findOrEmpty()->toArray();
             if ($userOrder && $userOrder['pay_status'] == 1) {
                 throw new Exception('您已参加过该活动!');
@@ -176,8 +169,8 @@ class GroupActivityLogic extends BaseLogic
             //校验拼团活动
             if (empty($params['order_id'])) {
                 //新开团
-                $activity = GroupActivity::findOrEmpty($params['group_activity_id']); //活动详情
-                if ($activity->isEmpty()) {
+                $activity = GroupActivity::getDetail($params['group_activity_id']); //活动详情
+                if (!$activity) {
                     throw new Exception('拼团活动不存在!'); //拼团活动不存在
                 }
                 //校验活动时间

+ 47 - 10
app/common/model/group_activity/GroupActivity.php

@@ -16,7 +16,6 @@ namespace app\common\model\group_activity;
 
 use app\common\model\BaseModel;
 use think\model\concern\SoftDelete;
-use app\common\model\equity\EquityConfig;
 
 
 /**
@@ -29,19 +28,57 @@ class GroupActivity extends BaseModel
     use SoftDelete;
     protected $name = 'group_activity';
     protected $deleteTime = 'delete_time';
-    public function goods()
+    public function equity()
     {
-        return $this->hasOne(EquityConfig::class, 'id', 'equity_id')
-            ->field('id,equity_name,number,day_num,goods_id');
+        return $this->hasOne(GroupEquity::class, 'id', 'equity_id')
+            ->field('id,equity_id');
     }
 
-    public function getCreateTimeAttr($value,$data)
-    {
-        return !empty($data['create_time'])?date('Y-m-d H:i:s',$data['create_time']):'';
+    public static function getDetail($id) {
+        $detail = GroupActivity::alias('a')->leftJoin('group_activity_category b','a.group_category_id=b.id')
+                    ->where('a.id',$id)
+                    ->field('a.title,a.image,a.equity_id,a.origin_price,a.price,a.work_amount,b.start_time,b.end_time,b.area,b.participant_num,b.form_time_limit,b.is_simulate_form,b.simulate_num,b.type')
+                    ->findOrEmpty()
+                    ->toArray();
+        if(!empty($detail)){
+            $detail['start_time'] = date('Y-m-d H:i:s',$detail['start_time']);
+            $detail['area'] = explode(",",$detail['area']);
+            $detail['price'] = explode(",",$detail['price']);
+            $detail['participant_num'] = explode(",",$detail['participant_num']);
+        }
+        return $detail;
     }
-    public function getStartTimeAttr($value,$data)
-    {
-        return !empty($data['start_time'])?date('Y-m-d H:i:s',$data['start_time']):'';
+
+    public static function getActivityList($catetory_id,$block_key = ''){
+        $where['group_category_id'] = $catetory_id;
+        if ($block_key) {
+            $where['block_key'] = $block_key;
+        }
+        $detail = GroupActivityCategory::where('id',$catetory_id)
+                ->field('id,title,images,start_time,end_time,area,participant_num,form_time_limit,is_simulate_form,simulate_num,type')
+                ->findOrEmpty()
+                ->toArray();
+        $category = [
+            'id' => $detail['id'],
+            'title' => $detail['title'],
+            'images' => explode(",",$detail['images']),
+        ];
+        $detail = array_diff_key($detail,$category);
+        $detail['area'] = explode(",",$detail['area']);
+        $detail['participant_num'] = explode(",",$detail['participant_num']);
+        $activity = GroupActivity::where($where)
+            ->field('id,title,image,equity_id,block_key,origin_price,price,work_amount')
+            ->select()
+            ->toArray();
+        $list = [];
+        foreach($activity as $item) {
+            $item['price'] = explode(",",$item['price']);
+            $item = array_merge($item,$detail);
+            $list[$item['block_key']]['block_key'] = $item['block_key'];
+            $list[$item['block_key']]['activity'][] = $item;
+        }
+        $category['block_data'] = $list;
+        return $category;
     }
     
 }

+ 4 - 0
app/common/model/group_activity/GroupActivityCategory.php

@@ -33,5 +33,9 @@ class GroupActivityCategory extends BaseModel
     {
         return !empty($data['create_time'])?date('Y-m-d H:i:s',$data['create_time']):'';
     }
+    public function getStartTimeAttr($value,$data)
+    {
+        return !empty($data['start_time'])?date('Y-m-d H:i:s',$data['start_time']):'';
+    }
     
 }

+ 47 - 0
app/common/model/group_activity/GroupEquity.php

@@ -0,0 +1,47 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\group_activity;
+
+use app\common\model\BaseModel;
+use think\model\concern\SoftDelete;
+use app\common\model\equity\EquityConfig;
+
+
+/**
+ * 拼团权益卡模型
+ * Class GroupEquity
+ * @package app\common\model\group_equity
+ */
+class GroupEquity extends BaseModel
+{
+    use SoftDelete;
+    protected $name = 'group_equity';
+    protected $deleteTime = 'delete_time';
+    public function equity()
+    {
+        return $this->hasOne(EquityConfig::class, 'id', 'equity_id')
+            ->field('id,equity_name,number,day_num,goods_id');
+    }
+
+    public function getCreateTimeAttr($value,$data)
+    {
+        return !empty($data['create_time'])?date('Y-m-d H:i:s',$data['create_time']):'';
+    }
+    public function getStartTimeAttr($value,$data)
+    {
+        return !empty($data['start_time'])?date('Y-m-d H:i:s',$data['start_time']):'';
+    }
+    
+}

+ 3 - 3
config/queue.php

@@ -6,9 +6,9 @@ return [
         'redis' => [
             'type'       => 'redis',
             'queue'      => 'default',
-            'host'       => env('redis_host', '127.0.0.1'),
-            'port'       => env('redis_port', 6379),
-            'password'   => env('redis_password', ''),
+            'host'       => env('queue.redis_host', '127.0.0.1'),
+            'port'       => env('queue.redis_port', 6379),
+            'password'   => env('queue.redis_password', 'zdzz9534'),
             'select'     => 0,
             'timeout'    => 5, // 设置合理的超时时间
             'persistent' => true, // 可根据需求设置为 true 或 false