WIN-2308041133\Administrator 1 ヶ月 前
コミット
ce0bc098a5

+ 4 - 0
app/admin/controller/order/StoreOrder.php

@@ -10,6 +10,7 @@ namespace app\admin\controller\order;
 use app\admin\controller\AuthController;
 use app\admin\model\order\StoreOrderCartInfo;
 use app\admin\model\system\Express;
+use app\admin\model\system\SystemAdmin;
 use crmeb\repositories\OrderRepository;
 use crmeb\repositories\ShortLetterRepositories;
 use crmeb\services\{
@@ -91,6 +92,9 @@ class StoreOrder extends AuthController
             ['limit', 20],
             ['excel', 0]
         ]);
+        $admin_id=$this->adminId;
+        $mer_id = SystemAdmin::where('id', $admin_id)->value('mer_id');
+        $where['mer_id'] = $mer_id;
         return Json::successlayui(StoreOrderModel::OrderList($where));
     }
 

+ 8 - 2
app/admin/controller/user/UserLevel.php

@@ -34,11 +34,14 @@ class UserLevel extends AuthController
         if ($id) $vipinfo = SystemUserLevel::get($id);
         $field[] = Form::input('name', '等级名称', isset($vipinfo) ? $vipinfo->name : '')->col(Form::col(24));
         $field[] = Form::radio('is_forever', '是否为永久', isset($vipinfo) ? $vipinfo->is_forever : 0)->options([['label' => '永久', 'value' => 1], ['label' => '非永久', 'value' => 0]])->col(24);
-        //$field[]= Form::number('money','等级价格',isset($vipinfo) ? $vipinfo->money : 0)->min(0)->col(24);
-        //$field[]= Form::radio('is_pay','是否需要购买',isset($vipinfo) ? $vipinfo->is_pay : 0)->options([['label'=>'需要','value'=>1],['label'=>'免费','value'=>0]])->col(24);
+        $field[]=  Form::number('money','等级价格',isset($vipinfo) ? $vipinfo->money : 0)->min(0)->col(24);
+        $field[]=  Form::radio('is_pay','是否需要购买',isset($vipinfo) ? $vipinfo->is_pay : 0)->options([['label'=>'需要','value'=>1],['label'=>'免费','value'=>0]])->col(24);
         $field[] = Form::number('valid_date', '有效时间(天)', isset($vipinfo) ? $vipinfo->valid_date : 0)->min(0)->col(8);
         $field[] = Form::number('grade', '等级', isset($vipinfo) ? $vipinfo->grade : 0)->min(0)->col(8);
         $field[] = Form::number('discount', '享受折扣', isset($vipinfo) ? $vipinfo->discount : 0)->min(0)->col(8);
+        $field[] = Form::number('integral', '赠送积分', isset($vipinfo) ? $vipinfo->integral : 0)->min(0)->col(8);
+        $field[] = Form::radio('is_spread', '是否限定邀请', isset($vipinfo) ? $vipinfo->is_spread : 0)->options([['label' => '限定邀请', 'value' => 1], ['label' => '非限定', 'value' => 0]])->col(24);
+        $field[] = Form::number('rebates', '邀请返利(%)', isset($vipinfo) ? $vipinfo->rebates : 0)->min(0)->col(8);
         $field[] = Form::frameImageOne('icon', '图标', Url::buildUrl('admin/widget.images/index', array('fodder' => 'icon')), isset($vipinfo) ? $vipinfo->icon : '')->icon('image')->width('100%')->height('500px');
         $field[] = Form::frameImageOne('image', '会员背景', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')), isset($vipinfo) ? $vipinfo->image : '')->icon('image')->width('100%')->height('500px');
         $field[] = Form::radio('is_show', '是否显示', isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])->col(8);
@@ -63,6 +66,9 @@ class UserLevel extends AuthController
             ['valid_date', 0],
             ['grade', 0],
             ['discount', 0],
+            ['rebates', 0],
+            ['integral', 0],
+            ['is_spread', 0],
             ['icon', ''],
             ['image', ''],
             ['integral', 0],

+ 11 - 10
app/api/controller/user/UserLevelController.php

@@ -85,27 +85,28 @@ class UserLevelController
             $isChannel = 2;
 
 
-        $order = UserLevelOrder::CreateOrder($request->uid(), $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, false, $isChannel, $shipping_type, $real_name, $phone, $storeId);
-        if ($order === false) return app('json')->fail(StoreOrder::getErrorInfo('订单生成失败'));
+        $order = UserLevelOrder::CreateOrder($request->uid(), $addressId, $payType);
+        if ($order === false) return app('json')->fail(UserLevelOrder::getErrorInfo('订单生成失败'));
         $orderId = $order['order_id'];
-        $info = compact('orderId', 'key');
+//        $info = compact('orderId', 'key');
+        $info = $orderId;
         if ($orderId) {
             event('OrderCreated', [$order]); //订单创建成功事件
-            event('ShortMssageSend', [$orderId, 'AdminPlaceAnOrder']);//发送管理员通知
+//            event('ShortMssageSend', [$orderId, 'AdminPlaceAnOrder']);//发送管理员通知
             switch ($payType) {
                 case "weixin":
-                    $orderInfo = StoreOrder::where('order_id', $orderId)->find();
+                    $orderInfo = UserLevelOrder::where('order_id', $orderId)->find();
                     if (!$orderInfo || !isset($orderInfo['paid'])) return app('json')->fail('支付订单不存在!');
                     $orderInfo = $orderInfo->toArray();
                     if ($orderInfo['paid']) return app('json')->fail('支付已支付!');
                     //支付金额为0
                     if (bcsub((float)$orderInfo['pay_price'], 0, 2) <= 0) {
                         //创建订单jspay支付
-                        $payPriceStatus = StoreOrder::jsPayPrice($orderId, $uid, $formId);
+                        $payPriceStatus = UserLevelOrder::jsPayPrice($orderId, $uid, $formId);
                         if ($payPriceStatus)//0元支付成功
                             return app('json')->status('success', '微信支付成功', $info);
                         else
-                            return app('json')->status('pay_error', StoreOrder::getErrorInfo());
+                            return app('json')->status('pay_error', UserLevelOrder::getErrorInfo());
                     } else {
                         try {
                             if ($from == 'routine') {
@@ -127,10 +128,10 @@ class UserLevelController
                     }
                     break;
                 case 'yue':
-                    if (StoreOrder::yuePay($orderId, $request->uid(), $formId))
+                    if (UserLevelOrder::yuePay($orderId, $request->uid(), $formId))
                         return app('json')->status('success', '余额支付成功', $info);
                     else {
-                        $errorinfo = StoreOrder::getErrorInfo();
+                        $errorinfo = UserLevelOrder::getErrorInfo();
                         if (is_array($errorinfo))
                             return app('json')->status($errorinfo['status'], $errorinfo['msg'], $info);
                         else
@@ -141,7 +142,7 @@ class UserLevelController
                     return app('json')->status('success', '订单创建成功', $info);
                     break;
             }
-        } else return app('json')->fail(StoreOrder::getErrorInfo('订单生成失败!'));
+        } else return app('json')->fail(UserLevelOrder::getErrorInfo('订单生成失败!'));
     }
 
 }

+ 140 - 33
app/models/user/UserLevelOrder.php

@@ -2,6 +2,11 @@
 
 namespace app\models\user;
 
+use app\admin\model\user\User as UserModel;
+use app\admin\model\user\UserBill;
+use app\admin\model\user\UserBill as UserBillAdmin;
+use app\admin\model\user\UserLevel;
+use app\admin\model\user\UserTaskFinish;
 use app\models\store\StoreBargain;
 use app\models\store\StoreCart;
 use app\models\store\StoreCombination;
@@ -17,6 +22,8 @@ use app\models\system\SystemUserTask;
 use crmeb\basic\BaseModel;
 use crmeb\repositories\PaymentRepositories;
 use crmeb\repositories\UserRepository;
+use crmeb\services\JsonService as Json;
+use crmeb\services\UtilService as Util;
 use crmeb\traits\ModelTrait;
 use think\db\exception\DataNotFoundException;
 use think\db\exception\DbException;
@@ -202,10 +209,10 @@ class UserLevelOrder extends BaseModel
         self::beginTrans();
 
         $res1 = false !== User::bcDec($uid, 'now_money', $orderInfo['pay_price'], 'uid');
-        $res2 = UserBill::expend('购买商品', $uid, 'now_money', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '余额支付' . floatval($orderInfo['pay_price']) . '元购买商品');
+        $res2 = UserBill::expend('购买会员', $uid, 'now_money', 'pay_level', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '余额支付' . floatval($orderInfo['pay_price']) . '元购买会员');
         $res3 = self::paySuccess($order_id, 'yue', $formId);//余额支付成功
         try {
-            PaymentRepositories::yuePayProduct($userInfo, $orderInfo);
+            PaymentRepositories::yuePayLevel($userInfo, $orderInfo);
         } catch (\Exception $e) {
             self::rollbackTrans();
             return self::setErrorInfo($e->getMessage());
@@ -233,7 +240,7 @@ class UserLevelOrder extends BaseModel
         if ($orderInfo['paid']) return self::setErrorInfo('该订单已支付!');
         $userInfo = User::getUserInfo($uid);
         self::beginTrans();
-        $res1 = UserBill::expend('购买商品', $uid, 'now_money', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '微信支付' . floatval($orderInfo['pay_price']) . '元购买商品');
+        $res1 = UserBill::expend('购买会员', $uid, 'now_money', 'pay_level', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '微信支付' . floatval($orderInfo['pay_price']) . '元购买会员');
         $res2 = self::paySuccess($order_id, 'weixin', $formId);//微信支付为0时
         $res = $res1 && $res2;
         self::checkTrans($res);
@@ -253,52 +260,152 @@ class UserLevelOrder extends BaseModel
     {
         $order = self::where('order_id', $orderId)->find();
         $resPink = true;
-        $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'pay_time' => time(), 'is_del' => 0, 'is_system_del' => 0, 'mark' => '']);//订单改为支付
-        if ($order->combination_id && $res1 && !$order->refund_status) $resPink = StorePink::createPink($order);//创建拼团
+        $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'pay_time' => time(), 'is_del' => 0]);//订单改为支付
+//        if ($order->combination_id && $res1 && !$order->refund_status) $resPink = StorePink::createPink($order);//创建拼团
         $oid = self::where('order_id', $orderId)->value('id');
-        StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
+//        StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
         $now_money = User::where('uid', $order['uid'])->value('now_money');
-        UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
+        UserBill::expend('购买会员', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买会员');
         //支付成功后
-        event('OrderPaySuccess', [$order, $formId]);
-        $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
+//        event('OrderPaySuccess', [$order, $formId]);
+        self::save_give_level($order['uid'], $order['level_id']);
+//        邀请返利
+        self::rebates($order['uid'], $order['level_id'],$order['id']);
+        $res = $res1;
+//        $res = $res1 && $resPink && UserSpread::setSpreadSure($order['uid']) && User::backOrderBrokerage($order);
         return false !== $res;
     }
+    /*
+ * 购买获得会员等级
+ * @paran int $uid
+ * @return json
+ * */
+    public static function save_give_level($uid = 0,$level_id = 0)
+    {
+        if (!$uid) return Json::fail('缺少参数');
+        //查询当前选择的会员等级
+        $systemLevel = \app\admin\model\system\SystemUserLevel::where(['is_show' => 1, 'is_del' => 0, 'id' => $level_id])->find();
+        if (!$systemLevel) return Json::fail('您选择赠送的会员等级不存在!');
+        //检查是否拥有此会员等级
+        $level = UserLevel::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 = UserLevel::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 = SystemUserLevel::where('grade', '<', $systemLevel->grade)->where(['is_show' => 1, 'is_del' => 0])->column('id', 'id');
+            if (count($lowGradeLevelIds)) $levelIds = array_merge($levelIds, $lowGradeLevelIds);
+            $taskIds = \app\admin\model\system\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);
+            $user = UserModel::where('uid', $uid)->find();
+            if ($systemLevel['integral']>0) {//赠送积分
+                    $edit['integral'] = bcadd($user['integral'], $systemLevel['integral'], 2);
+                    $res2 = UserBillAdmin::income('购买会员增加积分', $user['uid'], 'integral', 'system_add', $systemLevel['integral'], 0, $edit['integral'], '购买会员增加了' . floatval($systemLevel['integral']) . '积分');
+                    try {
+                        UserRepository::adminAddIntegral($user, $systemLevel['integral']);
+                    } catch (\Exception $e) {
+//                        BaseModel::rollbackTrans();
+                        return Json::fail($e->getMessage());
+                    }
+
+            }
+            if ($res) {
+                UserModel::commitTrans();
+                return Json::successful('购买成功');
+            } else {
+                UserModel::rollbackTrans();
+                return Json::successful('购买失败');
+            }
+        } catch (\Exception $e) {
+            UserModel::rollbackTrans();
+            return Json::fail('购买失败');
+        }
+    }
+//    邀请返利
+    public static function rebates($uid, $level_id,$order_id){
+//        $spread_id = User::where('uid', $uid)->value('spread_id');
+        $userInfo = User::getUserInfo($uid);
+        $level_info=SystemUserLevel::where('id', $level_id)->find();
+        if ($level_info['rebate']>0){
+            $brokerage = bcmul($level_info['rebate'], $level_info['money'], 2);
+            $balance = bcadd($userInfo['now_money'], $brokerage, 2);
+            $mark = $userInfo['nickname'] . '成功消费' . floatval($level_info['money']) . '元,购买会员,奖励推广佣金' . floatval($brokerage);
+            $res1 = UserBill::income('获得推广佣金', $userInfo['spread_uid'], 'now_money', 'brokerage', $brokerage, $order_id, $balance, $mark);
+            $res2 = self::bcInc($userInfo['spread_uid'], 'now_money', $brokerage, 'uid');
+        }
+        return true;
+    }
+    /**
+     * 生成订单唯一id
+     * @param $uid 用户uid
+     * @return string
+     */
+    public static function getNewOrderId()
+    {
+        do {
+            list($msec, $sec) = explode(' ', microtime());
+            $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
+            $orderId = 'hy' . $msectime . mt_rand(10000, 99999);
+        } while (self::be(['order_id' => $orderId]));// $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
+        return $orderId;
+    }
+
 //    创建会员订单
-    public static function CreateOrder($uid, $level_id)
+    public static function CreateOrder($uid, $level_id,$recharge_type)
     {
         self::beginTrans();
         try {
+//            `grade` int(10) unsigned zerofill NOT NULL COMMENT '会员等级',
+//  `price` decimal(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '充值金额',
+//  `give_price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '购买赠送金额',
+//  `recharge_type` varchar(32) NOT NULL COMMENT '充值类型',
+//  `paid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否支付0未支付1已支付',
+//  `pay_time` timestamp NULL DEFAULT NULL COMMENT '充值支付时间',
+//  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '充值时间',
+//  `refund_price` decimal(10,2) unsigned DEFAULT '0.00' COMMENT '退款金额',
+            $levelInfo = SystemUserLevel::get($level_id);
+            if ($levelInfo['is_spread']==1){ //限定邀请
+                $userSpread = \app\admin\model\user\User::where('uid', $uid)->value('spread_id');
+                if ($userSpread<=0){
+                    return self::setErrorInfo('只有受邀请用户才能购买该等级的会员', true);
+                }
+            }
             $orderInfo = [
                 'uid' => $uid,
                 'order_id' => self::getNewOrderId(),
-//                'mer_id' =>
+                'level_id' =>$level_id,
+                'grade' => $levelInfo['grade'],
+                'give_price' => $levelInfo['give_price'],
+
             ];
-            if ($shipping_type === 2) {
-                $orderInfo['verify_code'] = self::getStoreCode();
-                $orderInfo['store_id'] = SystemStore::getStoreDispose($storeId, 'id');
-                if (!$orderInfo['store_id']) return self::setErrorInfo('暂无门店无法选择门店自提!', true);
-            }
+
             $order = self::create($orderInfo);
             if (!$order) return self::setErrorInfo('订单生成失败!', true);
-            $res5 = true;
-            foreach ($cartInfo as $cart) {
-                //减库存加销量
-                if ($combinationId) $res5 = $res5 && StoreCombination::decCombinationStock($cart['cart_num'], $combinationId, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
-                else if ($seckill_id) $res5 = $res5 && StoreSeckill::decSeckillStock($cart['cart_num'], $seckill_id, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
-                else if ($bargain_id) $res5 = $res5 && StoreBargain::decBargainStock($cart['cart_num'], $bargain_id, isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
-                else $res5 = $res5 && StoreProduct::decProductStock($cart['cart_num'], $cart['productInfo']['id'], isset($cart['productInfo']['attrInfo']) ? $cart['productInfo']['attrInfo']['unique'] : '');
-            }
-            //保存购物车商品信息
-            $res4 = false !== StoreOrderCartInfo::setCartInfo($order['id'], $cartInfo);
-            //购物车状态修改
-            $res6 = false !== StoreCart::where('id', 'IN', $cartIds)->update(['is_pay' => 1]);
-            if (!$res4 || !$res5 || !$res6) return self::setErrorInfo('订单生成失败!', true);
-            //自动设置默认地址
-            UserRepository::storeProductOrderCreateEbApi($order, compact('cartInfo', 'addressId'));
-            self::clearCacheOrderInfo($uid, $key);
+
+
+
             self::commitTrans();
-            StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
+//            StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
             return $order;
         } catch (\PDOException $e) {
             self::rollbackTrans();

+ 9 - 0
crmeb/repositories/PaymentRepositories.php

@@ -42,7 +42,16 @@ class PaymentRepositories
 
 
     }
+    /**
+     * 使用余额支付订单时
+     * @param $userInfo
+     * @param $orderInfo
+     */
+    public static function yuePayLevel($userInfo, $orderInfo)
+    {
 
+
+    }
     /**
      * 订单支付成功之后
      * @param string|null $order_id 订单id