WIN-2308041133\Administrator 1 month ago
parent
commit
33402e258a

+ 103 - 1
app/admin/controller/user/User.php

@@ -14,10 +14,11 @@ use crmeb\traits\CurdControllerTrait;
 use think\facade\Route as Url;
 use crmeb\basic\BaseModel;
 use app\models\user\UserLevel as Level;
+use app\models\user\UserAgentLevel as AgentLevel;
 use app\admin\model\order\StoreOrder;
 use app\admin\model\wechat\WechatMessage;
 use app\admin\model\store\{StoreVisit, StoreCouponUser};
-use app\admin\model\system\{SystemUserLevel, SystemUserTask};
+use app\admin\model\system\{SystemUserAgentLevel, SystemUserLevel, SystemUserTask};
 use crmeb\services\{FormBuilder as Form, UtilService as Util, JsonService as Json};
 use app\admin\model\user\{User as UserModel, UserBill as UserBillAdmin, UserLevel, UserGroup, UserTaskFinish};
 
@@ -110,6 +111,36 @@ class User extends AuthController
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
+    /**
+     * 赠送代理会员等级
+     * @param int $uid
+     * @return string|void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function give_agent_level($uid = 0)
+    {
+        if (!$uid) return $this->failed('缺少参数');
+        $level = AgentLevel::getUserLevel($uid);
+        //获取当前会员等级
+        if ($level === false)
+            $grade = 0;
+        else
+            $grade = AgentLevel::getUserLevelInfo($level, 'grade');
+        //查询高于当前会员的所有会员等级
+        $systemLevelList = SystemUserLevel::where('grade', '>', $grade)->where(['is_show' => 1, 'is_del' => 0])->field(['name', 'id'])->select();
+        $field[] = Form::select('level_id', '会员等级')->setOptions(function () use ($systemLevelList) {
+            $menus = [];
+            foreach ($systemLevelList as $menu) {
+                $menus[] = ['value' => $menu['id'], 'label' => $menu['name']];
+            }
+            return $menus;
+        })->filterable(1);
+        $form = Form::make_post_form('赠送会员', $field, Url::buildUrl('save_give_agent_level', ['uid' => $uid]), 2);
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
     public function edit_franchisee($uid)
     {
         if (!$uid) return $this->failed('数据不存在');
@@ -291,7 +322,78 @@ class User extends AuthController
         else
             return Json::fail('清除失败');
     }
+    /*
+      * 赠送代理会员等级
+      * @paran int $uid
+      * @return json
+      * */
+    public function save_give_agent_level($uid = 0)
+    {
+        if (!$uid) return Json::fail('缺少参数');
+        list($level_id) = Util::postMore([
+            ['level_id', 0],
+        ], $this->request, true);
+        //查询当前选择的会员等级
+        $systemLevel = SystemUserAgentLevel::where(['is_show' => 1, 'is_del' => 0, 'id' => $level_id])->find();
+        if (!$systemLevel) return Json::fail('您选择赠送的会员等级不存在!');
+        //检查是否拥有此会员等级
+        $level = \app\admin\model\user\UserAgentLevel::where(['uid' => $uid, 'level_id' => $level_id, 'is_del' => 0])->field('valid_time,is_forever')->find();
+        if ($level) if (!$level['is_forever'] && time() < $level['valid_time']) return Json::fail('此用户已有该会员等级,无法再次赠送');
+        //设置会员过期时间
+        $add_valid_time = (int)$systemLevel->valid_date * 86400;
+        UserModel::commitTrans();
+        try {
+            //保存会员信息
+            $res = \app\admin\model\user\UserAgentLevel::create([
+                'is_forever' => $systemLevel->is_forever,
+                'status' => 1,
+                'is_del' => 0,
+                'grade' => $systemLevel->grade,
+                'uid' => $uid,
+                'add_time' => time(),
+                'level_id' => $level_id,
+                'discount' => $systemLevel->discount,
+                'valid_time' => $systemLevel->discount ? $add_valid_time + time() : 0,
+                'mark' => '尊敬的用户【' . UserModel::where('uid', $uid)->value('nickname') . '】在' . date('Y-m-d H:i:s', time()) . '赠送代理会员等级成为' . $systemLevel['name'] . '会员',
+            ]);
 
+            //提取等级任务并记录完成情况
+            $levelIds = [$level_id];
+            $lowGradeLevelIds = SystemUserAgentLevel::where('grade', '<', $systemLevel->grade)->where(['is_show' => 1, 'is_del' => 0])->column('id', 'id');
+            if (count($lowGradeLevelIds)) $levelIds = array_merge($levelIds, $lowGradeLevelIds);
+//            $taskIds = SystemUserTask::where('level_id', 'in', $levelIds)->column('id', 'id');
+            $inserValue = [];
+//            foreach ($taskIds as $id) {
+//                $inserValue[] = ['uid' => $uid, 'task_id' => $id, 'status' => 1, 'add_time' => time()];
+//            }
+            $res = $res && UserModel::where('uid', $uid)->update(['level' => $level_id]);
+//            if ($inserValue) $res && UserTaskFinish::insertAll($inserValue);
+            if ($res) {
+                UserModel::commitTrans();
+                return Json::successful('赠送成功');
+            } else {
+                UserModel::rollbackTrans();
+                return Json::successful('赠送失败');
+            }
+        } catch (\Exception $e) {
+            UserModel::rollbackTrans();
+            return Json::fail('赠送失败');
+        }
+    }
+
+    /*
+     * 清除会员等级
+     * @param int $uid
+     * @return json
+     * */
+    public function del_agent_level($uid = 0)
+    {
+        if (!$uid) return Json::fail('缺少参数');
+        if (\app\admin\model\user\UserAgentLevel::cleanUpLevel($uid))
+            return Json::successful('清除成功');
+        else
+            return Json::fail('清除失败');
+    }
     /**
      * 修改user表状态
      *

+ 20 - 1
app/admin/model/user/UserAgentLevel.php

@@ -3,9 +3,9 @@
 namespace app\admin\model\user;
 
 use app\admin\model\system\SystemUserAgentLevel;
+use app\admin\model\user\User;
 use crmeb\traits\ModelTrait;
 use crmeb\basic\BaseModel;
-use app\admin\model\user\User; // 关联用户表模型
 
 /**
  * 用户代理等级 Model
@@ -121,4 +121,23 @@ class UserAgentLevel extends BaseModel
             return self::setErrorInfo($e->getMessage());
         }
     }
+    /*
+ * 清除会员等级
+ * @paran int $uid
+ * @paran boolean
+ * */
+    public static function cleanUpLevel($uid)
+    {
+        self::rollbackTrans();
+        $res = false !== self::where('uid', $uid)->update(['is_del' => 1]);
+//        $res = $res && UserTaskFinish::where('uid', $uid)->delete();
+        if ($res) {
+            User::where('uid', $uid)->update(['agent_level' => 0]);
+            self::commitTrans();
+            return true;
+        } else {
+            self::rollbackTrans();
+            return self::setErrorInfo('清除失败');
+        }
+    }
 }

+ 7 - 1
app/admin/view/user/user/index.php

@@ -242,13 +242,17 @@
                                 <a href="javascript:void(0);" lay-event="give_level">
                                     <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 修改会员等级</a>
                             </li>
+                            <li>
+                                <a href="javascript:void(0);" lay-event="give_agent_level">
+                                    <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 修改代理会员等级</a>
+                            </li>
                             <li>
                                 <a href="javascript:void(0);" lay-event="set_group">
                                     <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 设置分组</a>
                             </li>
                             <li>
                                 <a href="javascript:void(0);" lay-event="franchisee">
-                                    <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 设置分组</a>
+                                    <i class="layui-icon layui-icon-star-fill" aria-hidden="true"></i> 加盟商修改</a>
                             </li>
                             {{# if(d.vip_name){ }}
                             <li>
@@ -399,6 +403,8 @@
                 break;
             case 'give_level':
                 $eb.createModalFrame(data.nickname+'-赠送会员',layList.Url({a:'give_level',p:{uid:data.uid}}),{w:500,h:300});
+            case 'give_agent_level':
+                $eb.createModalFrame(data.nickname+'-赠送代理会员',layList.Url({a:'give_agent_level',p:{uid:data.uid}}),{w:500,h:300});
                 break;
             case 'set_group':
                 $eb.createModalFrame(data.nickname+'-设置分组',layList.Url({a:'set_group',p:{uid:data.uid}}),{w:500,h:300});

+ 11 - 11
app/models/user/UserAgentLevel.php

@@ -67,20 +67,20 @@ class UserAgentLevel extends BaseModel
         if (!$user) return false;
 
         // 3. 计算有效期(支持“永久”或“按天续期”)
-        $addValidTime = (int)$agentLevel->valid_days * 86400; // 有效天数 → 秒数
+//        $addValidTime = (int)$agentLevel->valid_days * 86400; // 有效天数 → 秒数
         $userAgentInfo = self::validWhere()->where('uid', $uid)->where('level_id', $levelId)->find();
 
         if ($userAgentInfo) {
             // 若已存在该等级记录:计算剩余有效期并叠加
             $stayTime = 0;
-            if (time() < $userAgentInfo->valid_time) {
-                $stayTime = $userAgentInfo->valid_time - time();
-            }
-            $addValidTime = $stayTime + $addValidTime + time();
+//            if (time() < $userAgentInfo->valid_time) {
+//                $stayTime = $userAgentInfo->valid_time - time();
+//            }
+//            $addValidTime = $stayTime + $addValidTime + time();
 
             $data = [
                 'is_forever' => $agentLevel->is_forever,
-                'valid_time' => $addValidTime
+//                'valid_time' => $addValidTime
             ];
 
             // 更新用户表的代理等级标识(假设用户表有`agent_level`字段)
@@ -100,11 +100,11 @@ class UserAgentLevel extends BaseModel
                 'mark' => "用户【{$user['nickname']}】于" . date('Y-m-d H:i:s') . "成为【{$agentLevel['name']}】代理"
             ];
 
-            if ($data['is_forever']) {
-                $data['valid_time'] = 0; // 永久有效
-            } else {
-                $data['valid_time'] = $addValidTime + time(); // 计算过期时间戳
-            }
+//            if ($data['is_forever']) {
+//                $data['valid_time'] = 0; // 永久有效
+//            } else {
+//                $data['valid_time'] = $addValidTime + time(); // 计算过期时间戳
+//            }
 
             $res = self::create($data);
             if (!$res) return false;