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

+ 83 - 76
app/adminapi/lists/group_activity/GroupActivityLists.php

@@ -1,77 +1,84 @@
-<?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\lists\group_activity;
-
-
-use app\adminapi\lists\BaseAdminDataLists;
-use app\common\model\group_activity\GroupActivity;
-use app\common\lists\ListsSearchInterface;
-
-
-/**
- * 拼团活动列表
- * Class GroupActivityLists
- * @package app\adminapi\listsgroup_activity
- */
-class GroupActivityLists extends BaseAdminDataLists implements ListsSearchInterface
-{
-
-
-    /**
-     * @notes 设置搜索条件
-     * @return \string[][]
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public function setSearch(): array
-    {
-        return [
-            '=' => ['title', 'start_time', 'end_time', 'participant_num', 'type', 'form_time_limit', 'is_online_join', 'is_simulate_form', 'simulate_num', 'is_preheat', 'is_support_refund'],

-        ];
-    }
-
-
-    /**
-     * @notes 获取拼团活动列表
-     * @return array
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public function lists(): array
-    {
-        return GroupActivity::where($this->searchWhere)
-            ->field(['id', 'title', 'start_time', 'end_time', 'participant_num', 'type', 'form_time_limit', 'is_online_join', 'is_simulate_form', 'simulate_num', 'is_preheat', 'is_support_refund'])
-            ->limit($this->limitOffset, $this->limitLength)
-            ->order(['id' => 'desc'])
-            ->select()
-            ->toArray();
-    }
-
-
-    /**
-     * @notes 获取拼团活动数量
-     * @return int
-     * @author likeadmin
-     * @date 2025/03/13 10:31
-     */
-    public function count(): int
-    {
-        return GroupActivity::where($this->searchWhere)->count();
-    }
-
+<?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\lists\group_activity;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\group_activity\GroupActivity;
+use app\common\lists\ListsSearchInterface;
+
+
+/**
+ * 拼团活动列表
+ * Class GroupActivityLists
+ * @package app\adminapi\listsgroup_activity
+ */
+class GroupActivityLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['type', 'is_simulate_form'],
+            '%like%' => ['title'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取拼团活动列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public function lists(): array
+    {
+        $list = GroupActivity::where($this->searchWhere)
+            ->field(['id', 'title', 'image','equity_id','origin_price','price','start_time', 'end_time', 'participant_num', 'type', 'form_time_limit', 'is_simulate_form', 'simulate_num'])
+            ->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']) : [];
+        }
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取拼团活动数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public function count(): int
+    {
+        return GroupActivity::where($this->searchWhere)->count();
+    }
+
 }

+ 36 - 4
app/adminapi/logic/group_activity/GroupActivityLogic.php

@@ -40,16 +40,32 @@ class GroupActivityLogic extends BaseLogic
     {
         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'] = '';
+            }
             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' => is_array($params['participant_num']) ? implode(",",$params['participant_num']) : $params['participant_num'],
+                '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' => isset($params['simulate_num']) ?? 0,
+                'simulate_num' => $params['simulate_num'],
                 'is_preheat' => $params['is_preheat'],
                 'is_support_refund' => $params['is_support_refund'],
             ]);
@@ -75,16 +91,32 @@ class GroupActivityLogic extends BaseLogic
     {
         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'] = '';
+            }
             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' => is_array($params['participant_num']) ? implode(",",$params['participant_num']) : $params['participant_num'],
+                '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' => isset($params['simulate_num']) ?? 0,
+                'simulate_num' => $params['simulate_num'],
                 'is_preheat' => $params['is_preheat'],
                 'is_support_refund' => $params['is_support_refund'],
             ]);

+ 118 - 0
app/adminapi/validate/group_activity/GroupActivityValidate.php

@@ -0,0 +1,118 @@
+<?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\validate\group_activity;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * 拼团活动验证器
+ * Class GroupActivityValidate
+ * @package app\adminapi\validate\group_activity
+ */
+class GroupActivityValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        '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',
+
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'title' => '活动名称',
+        'image' => '活动图片',
+        'equity_id' => '权益卡',
+        'origin_price' => '拼团原价',
+        'price' => '拼团价',
+        'start_time' => '活动开始时间',
+        'end_time' => '活动结束时间',
+        'participant_num' => '参团人数',
+        'type' => '活动类型',
+        'form_time_limit' => '成团时限',
+        'is_simulate_form' => '是否开启模拟成团',
+
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return GroupActivityValidate
+     * @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']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return GroupActivityValidate
+     * @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']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return GroupActivityValidate
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return GroupActivityValidate
+     * @author likeadmin
+     * @date 2025/03/13 10:31
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 30 - 0
app/api/controller/GroupActivityController.php

@@ -0,0 +1,30 @@
+<?php
+namespace app\api\controller;
+
+use app\api\logic\GroupActivityLogic;
+
+
+/**
+ * 拼团活动控制器
+ * Class UserController
+ * @package app\api\controller
+ */
+class GroupActivityController extends BaseApiController
+{
+    public array $notNeedLogin = ['detail','orderDetail'];
+
+
+    public function detail()
+    {
+        $id = $this->request->param('id');
+        $result = GroupActivityLogic::detail($id);
+        return $this->data($result);
+    }
+
+    public function orderDetail(){
+        $id = $this->request->param('id');
+        $result = GroupActivityLogic::detail($id,$this->userId);
+        return $this->data($result);
+    }
+
+}

+ 155 - 0
app/api/logic/GroupActivityLogic.php

@@ -0,0 +1,155 @@
+<?php
+namespace app\api\logic;
+
+use app\common\logic\BaseLogic;
+use app\common\model\group_activity\GroupActivity;
+use think\facade\Db;
+
+
+/**
+ * 拼团活动逻辑处理
+ * Class GroupActivityLogic
+ * @package app\api\logic
+ */
+class GroupActivityLogic extends BaseLogic
+{
+
+    /**
+     * @notes 拼团活动详情
+     */
+    public static function detail($id){
+        $detail = GroupActivity::where(['id'=>$id])->visible([
+            'id','title','image','start_time','end_time','type','equity_id',
+            'participant_num','origin_price','price','form_time_limit','is_simulate_form','simulate_num'
+        ])->select()->toArray();
+
+        if(!empty($detail)){
+            $detail['price'] = explode(",",$detail['price']);
+            $detail['participant_num'] = explode(",",$detail['participant_num']);
+            $detail['simulate_num'] = $detail['simulate_num'] ? explode(",",$detail['simulate_num']) : [];
+        }
+
+        return $detail;
+    }
+
+    public static function orderDetail($id,$userId){
+        $goods = GroupOrder::where(['id'=>$id, 'user_id' => $userId])->visible([
+                'id','sn','group_activity_id','status','create_time','sell_num','base_service_fee',
+                'service_total','service_fee','service_image','fee_schedule','warranty_period','goods_payment_type','goods_category_id'
+            ])->select()
+            ->each(function (&$item, $key) use ($userId){
+                //判定是否存在可使用的用户优惠券,存在的话直接更新展示价格
+                if($userId!=0){
+                    $result = UserCouponLogic::categoryWithAmountLists(['user_id'=>$userId,'amount'=>$item['service_fee'],'goods_category_id'=>$item['goods_category_id'],'goods_id'=>$item['id']]);
+                    if(!empty($result[0]['amount'])){
+                        $item['base_service_fee'] = '券后'.($item['base_service_fee'] - $result[0]['amount']);
+                    }
+                }
+            })->toArray();
+
+        if(!empty($goods)){
+            $data = [];
+            foreach ($goods as $key => $value) {
+                if($value['goods_payment_type'] == '2'){
+                    $coupon = ($value['service_total']-$value['service_fee'])>0?'立减'.$value['service_total']-$value['service_fee']:'';
+                }
+                if($value['goods_payment_type'] == '3'){
+                    $coupon = '首付'.$value['service_fee'];
+                }
+                $data[] = [
+                    'id'=>$value['id'],
+                    'goods_image'=>$value['goods_image'],
+                    'goods_name'=>$value['goods_name'],
+                    'good_unit'=>$value['good_unit'],
+                    'goods_banners'=>!empty($value['goods_banners']) ? $value['goods_banners'] : [],
+                    'goods_payment_type'=>$value['goods_payment_type'],
+                    'sell_num'=>$value['sell_num'],
+                    'base_service_fee'=>$value['base_service_fee'],
+                    'service_total'=>$value['service_total'],
+                    'service_fee'=>$value['service_fee'],
+                    'coupon'=>!empty($coupon)?$coupon:'',
+                    'service_image'=>$value['service_image'],
+                    'warranty_period'=>$value['warranty_period'],
+                    'fee_schedule'=>$value['fee_schedule'],
+                    'goods_category_id'=>$value['goods_category_id']
+                ];
+            }
+
+            $goods = $data;
+        }
+
+        return $goods;
+    }
+
+    public static function getHotData()
+    {
+        return Goods::where(['user_id'=>0,'is_hot'=>1,'platform_value'=>0])
+            ->with('goodsCategory')
+            ->visible(['id','goods_name','goods_image'])
+            ->order(['top_weight' => 'desc', 'id' => 'desc'])
+            ->select()->toArray();
+    }
+
+    public static function sync(array $params,int $userId): bool
+    {
+        Db::startTrans();
+        try {
+            if(isset($params['id'])){
+                $model = Goods::findOrEmpty($params['id']);
+                if($model->isEmpty()){
+                    throw new \Exception('数据异常');
+                }
+            } else{
+                $model = new Goods();
+            }
+            $params['goods_category_id'] = end($params['goods_category_ids']);
+            $model->goods_category_id = $params['goods_category_id'];
+            $model->category_type = GoodsCategory::where('id',$params['goods_category_id'])->value('category_type');
+            $model->goods_category_ids =  $params['goods_category_ids'];
+            $model->goods_category_id = $params['goods_category_id'];
+            $model->goods_name = $params['goods_name'];
+            $model->goods_image = $params['goods_image'];
+            $model->goods_video = $params['goods_video'];
+            $model->goods_banners = $params['goods_banners'];
+            $model->goods_number = $params['goods_number'];
+            $model->good_unit = $params['good_unit'];
+            $model->goods_size = $params['goods_size'];
+            $model->goods_type = $params['goods_type'];
+            $model->goods_brand = $params['goods_brand'];
+            $model->install_guide = $params['install_guide'];
+            $model->goods_payment_type = $params['goods_payment_type'];
+            $model->base_service_fee = $params['base_service_fee'];
+            $model->service_total = $params['service_total'];
+            $model->service_fee = $params['service_fee'];
+            $model->service_image = $params['service_image'];
+            $model->warranty_period = $params['warranty_period'];
+            $model->fee_schedule = $params['fee_schedule'];
+            $model->goods_status = $params['goods_status'];
+            $model->user_id = $userId;
+            $model->save();
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+    public static function firmGoodsDetail($params){
+        try{
+            $data= Goods::where('id',$params['id'])
+            ->where('user_id',$params['user_id'])
+            ->with('goodsCategory')
+            ->withoutField(['is_recommend','recommend_weight','is_top','top_weight','is_hot','hot_weight'])
+            ->findOrEmpty()->toArray();
+            if(!empty($data['goods_category_ids'])) {
+                $data['goods_category_ids'] = array_map("intval", $data['goods_category_ids']);
+            }
+             return $data;
+        }catch(\Exception $e){
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+}

+ 12 - 1
app/common/model/group_activity/GroupActivity.php

@@ -30,5 +30,16 @@ class GroupActivity extends BaseModel
     protected $name = 'group_activity';
     protected $deleteTime = 'delete_time';
 
-    
+    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']):'';
+    }
+    public function getEndTimeAttr($value,$data)
+    {
+        return !empty($data['end_time'])?date('Y-m-d H:i:s',$data['end_time']):'';
+    }
 }