wesmiler 3 周之前
父节点
当前提交
0d963d5774

+ 11 - 0
app/Services/Api/AccountService.php

@@ -395,6 +395,7 @@ class AccountService extends BaseService
         $info = MemberModel::where(['id' => $userId, 'mark' => 1])
             ->select(['id', 'openid', 'mobile', 'status'])
             ->first();
+        $parentId = isset($info['parent_id']) ? $info['parent_id'] : 0;
         $openid = isset($info['openid']) ? $info['openid'] : '';
         if (!$info || $info['status'] != 1) {
             $this->error = 1045;
@@ -408,6 +409,12 @@ class AccountService extends BaseService
             return false;
         }
 
+        // 推荐消费者的佣金
+        $agentDirectBonusRate = ConfigService::make()->getConfigByCode('agent_direct_bonus_rate', 0);
+        $agentDirectBonusRate = $agentDirectBonusRate>0 && $agentDirectBonusRate<100? $agentDirectBonusRate : 0;
+        $recBonus = moneyFormat($agentDirectBonusRate * $price/100, 2);
+
+
         // 创建订单
         $orderNo = get_order_num('PR');
         $types = ['','话费充值','电费充值','燃气充值'];
@@ -425,6 +432,10 @@ class AccountService extends BaseService
             'area' => $area,
             'city' => $city,
             'ytype' => $ytype,
+            'rec_bonus_id' => $parentId,
+            'rec_bonus_rate' => $agentDirectBonusRate,
+            'rec_bonus' => $recBonus,
+            'rec_bonus_settle' => 2,
             'id_card_no' => $idCardNo,
             'create_time' => time(),
             'remark' => $remark,

+ 14 - 3
app/Services/Api/OrderService.php

@@ -11,6 +11,7 @@
 
 namespace App\Services\Api;
 
+use App\Models\AgentModel;
 use App\Models\CartModel;
 use App\Models\GoodsModel;
 use App\Models\GoodsSkuModel;
@@ -246,6 +247,7 @@ class OrderService extends BaseService
             ->select(['id', 'openid','wechat_openid', 'mobile', 'nickname', 'realname', 'balance', 'status'])
             ->first();
         $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
+        $parentId = isset($userInfo['parent_id']) ? $userInfo['parent_id'] : 0;
         $openid = isset($userInfo['openid']) ? $userInfo['openid'] : '';
         $wechatOpenid = isset($userInfo['wechat_openid']) &&$userInfo['wechat_openid'] ? $userInfo['wechat_openid'] : $openid;
         $openid = $platform=='wechat'?$wechatOpenid:$openid;
@@ -286,6 +288,10 @@ class OrderService extends BaseService
             $orderTotal = 0.1;
         }
 
+        // 推荐消费者的佣金
+        $agentDirectBonusRate = ConfigService::make()->getConfigByCode('agent_direct_bonus_rate', 0);
+        $agentDirectBonusRate = $agentDirectBonusRate>0 && $agentDirectBonusRate<100? $agentDirectBonusRate : 0;
+        $recBonus = moneyFormat($agentDirectBonusRate * $total/100, 2);
 
         // 订单数据
         $order = [
@@ -300,6 +306,10 @@ class OrderService extends BaseService
             'receiver_area' => $area,
             'receiver_address' => $address,
             'bonus' => $bonus,
+            'rec_bonus_id' => $parentId,
+            'rec_bonus_rate' => $agentDirectBonusRate,
+            'rec_bonus' => $recBonus,
+            'rec_bonus_settle' => 2,
             'create_time' => time(),
             'update_time' => time(),
             'status' => 1,
@@ -600,7 +610,6 @@ class OrderService extends BaseService
             ->select(['id', 'openid', 'mobile', 'parent_id', 'nickname', 'realname', 'balance', 'status'])
             ->first();
         $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
-        $parentId = isset($userInfo['parent_id']) ? $userInfo['parent_id'] : 0;
         if ($check && (empty($userInfo) || $status != 1)) {
             $this->error = 1045;
             RedisService::clear($cacheLockKey);
@@ -609,7 +618,7 @@ class OrderService extends BaseService
 
         // 订单信息
         $info = $this->model->with(['orderGoods'])->where(['id' => $id, 'mark' => 1])
-            ->select(['id', 'order_no', 'store_id', 'pay_total', 'bonus', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
+            ->select(['id', 'order_no', 'store_id', 'pay_total', 'bonus','rec_bonus_id','rec_bonus','rec_bonus_settle', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
             ->first();
         $orderNo = isset($info['order_no']) ? $info['order_no'] : '';
         $deliveryNo = isset($info['delivery_no']) ? $info['delivery_no'] : '';
@@ -617,7 +626,9 @@ class OrderService extends BaseService
         $storeId = isset($info['store_id']) ? $info['store_id'] : 0;
         $orderTotal = isset($info['pay_total']) ? $info['pay_total'] : 0;
         $bonus = isset($info['bonus']) ? $info['bonus'] : 0;
+        $recBonus = isset($info['rec_bonus']) ? $info['rec_bonus'] : 0;
         $status = isset($info['status']) ? $info['status'] : 0;
+        $recBonusId = isset($info['rec_bonus_id']) ? $info['status'] : 0;
         $orderGoods = isset($info['order_goods']) ? $info['order_goods'] : [];
         if (empty($info) || empty($orderNo)) {
             $this->error = '订单信息不存在';
@@ -678,7 +689,7 @@ class OrderService extends BaseService
 
 
         // 代理佣金结算
-        if (SettleService::make()->agentBonus($userId, $orderTotal, $info, $parentId) < 0) {
+        if (SettleService::make()->agentBonus($userId, $recBonus, $info, $recBonusId) < 0) {
             DB::rollBack();
             $this->error = SettleService::make()->getError();
             RedisService::clear($cacheLockKey);

+ 25 - 13
app/Services/Api/SettleService.php

@@ -14,6 +14,8 @@ namespace App\Services\Api;
 use App\Models\AccountLogModel;
 use App\Models\AgentModel;
 use App\Models\MemberModel;
+use App\Models\OrderModel;
+use App\Models\PayOrdersModel;
 use App\Models\StoreCategoryModel;
 use App\Models\StoreModel;
 use App\Services\BaseService;
@@ -107,21 +109,28 @@ class SettleService extends BaseService
     /**
      * 代理收益
      * @param $userId
-     * @param $money
+     * @param $bonus
      * @param $order
-     * @param $parentId
+     * @param $recBonusId
      * @param int $type
      * @return array|false|int
      */
-    public function agentBonus($userId, $money, $order, $parentId, $type=0)
+    public function agentBonus($userId, $bonus, $order, $recBonusId, $type=0)
     {
-        $orderNo = isset($order['order_no'])? $order['order_no'] : '';
-        if($money<=0 || $userId<=0 || $parentId<=0){
+        $orderId = isset($order['id'])? $order['id'] : 0;
+        $total = isset($order['pay_total'])? $order['pay_total'] : 0;
+        $recBonusSettle = isset($order['order_no']) && $order['rec_bonus_settle']? $order['rec_bonus_settle'] : 2;
+        if($orderId<=0 || $bonus<=0 || $userId<=0 || $recBonusId<=0){
             $this->error = '无收益可结算';
             return false;
         }
 
-        $parent = AgentModel::with(['user'])->where(['user_id'=> $parentId,'status'=>1,'mark'=>1])
+        if($recBonusSettle == 1){
+            $this->error = '收益已结算';
+            return 0;
+        }
+
+        $parent = AgentModel::with(['user'])->where(['user_id'=> $recBonusId,'status'=>1,'mark'=>1])
             ->select(['id','balance','user_id','income','status'])
             ->first();
         $agentId = isset($parent['id'])? $parent['id'] : 0;
@@ -129,13 +138,9 @@ class SettleService extends BaseService
         $parentInfo = isset($parent['user'])? $parent['user'] : [];
         $parentOneId = isset($parentInfo['parent_id'])? $parentInfo['parent_id'] :0;
 
-
         // 推荐消费者的佣金
         $logs = [];
-        $agentDirectBonusRate = ConfigService::make()->getConfigByCode('agent_direct_bonus_rate', 0);
-        $agentDirectBonusRate = $agentDirectBonusRate>0 && $agentDirectBonusRate<100? $agentDirectBonusRate : 0;
-        $bonus = moneyFormat($agentDirectBonusRate * $money/100, 2);
-        if(empty($parent) || $bonus<=0 || $agentId<=0){
+        if(empty($parent) || $agentId<=0){
             $this->error = '上级代理无效';
             return 0;
         }
@@ -146,7 +151,7 @@ class SettleService extends BaseService
         }
 
         $logs[] = [
-            'user_id'=> $parentId,
+            'user_id'=> $recBonusId,
             'source_order_no'=> isset($order['order_no'])? $order['order_no'] : '',
             'type'=> 9,
             'money'=> $bonus,
@@ -233,7 +238,14 @@ class SettleService extends BaseService
             return -1;
         }
 
-        $result = ['user_id'=>$userId,'total'=> $money,'bonus'=>$bonus,'parent_id'=>$parentId,'oneId'=>$parentOneId,'oneBonus'=>$oneBonus,'twoId'=>$parentTwoId,'twoBonus'=>$twoBonus];
+        // 更新订单结算状态
+        $model = $type>0? new PayOrdersModel() : new OrderModel();
+        if(!$model::where(['id'=>$orderId])->update(['rec_bonus_settle'=>1,'update_time'=>time()])){
+            $this->error = '收益结算状态更新失败';
+            return -1;
+        }
+        
+        $result = ['user_id'=>$userId,'total'=> $total,'bonus'=>$bonus,'parent_id'=>$recBonusId,'oneId'=>$parentOneId,'oneBonus'=>$oneBonus,'twoId'=>$parentTwoId,'twoBonus'=>$twoBonus];
         return $result;
     }
 

+ 3 - 3
app/Services/PaymentService.php

@@ -735,8 +735,8 @@ class PaymentService extends BaseService
         $orderUserId = isset($orderInfo['user_id'])? $orderInfo['user_id'] : 0;
         $status = isset($orderInfo['status'])? $orderInfo['status'] : 0;
         $total = isset($orderInfo['pay_total'])? $orderInfo['pay_total'] : 0;
-        $userInfo = isset($orderInfo['user'])? $orderInfo['user'] : [];
-        $parentId = isset($userInfo['parent_id'])?$userInfo['parent_id'] : 0;
+        $recBonusId = isset($orderInfo['rec_bonus_id'])?$orderInfo['rec_bonus_id'] : 0;
+        $recBonus = isset($orderInfo['rec_bonus'])?$orderInfo['rec_bonus'] : 0;
         if(empty($orderInfo) || $orderId<=0 || $total<=0){
             $this->error = '充值订单不存在';
             $this->saveLog("caches:payments:payNotify_{$productId}:notify_{$out_trade_num}_error", ['error'=>$this->error,'order' => $orderInfo, 'notify' => $data]);
@@ -795,7 +795,7 @@ class PaymentService extends BaseService
         if($status == 4 && $amount>0)
         {
             // 代理佣金结算
-            $result = SettleService::make()->agentBonus($orderUserId, $amount, $orderInfo, $parentId);
+            $result = SettleService::make()->agentBonus($orderUserId, $recBonus, $orderInfo, $recBonusId);
             if ($result<0) {
                 DB::rollBack();
                 $this->error = SettleService::make()->getError();