wesmiler 6 napja
szülő
commit
5230cccb40

+ 2 - 1
app/Http/Controllers/Api/v1/TestController.php

@@ -22,7 +22,8 @@ class TestController extends webApp
     {
         $result = $buyCount = pow(2,7+1)-2;
 //        $result = OrderService::make()->rebuyOrder(1081,2);
-        $result = PriceService::make()->updatePrice(1);
+        $result = SettleService::make()->commissionSettle(98);
+//        $result = PriceService::make()->updatePrice(1);
 dump($result);
         return showJson(OrderService::make()->getError(), true, $result);
     }

+ 359 - 354
app/Services/Api/SettleService.php

@@ -282,360 +282,365 @@ class SettleService extends BaseService
      */
     public function commissionSettle($orderId)
     {
-        $info = OrderModel::with(['commission'])
-            ->where(['id' => $orderId, 'mark' => 1])
-            ->select(['id', 'order_no', 'type', 'user_id', 'total', 'pay_total', 'bd_score', 'pay_status', 'status', 'refund_status'])
-            ->first();
-        $info = $info ? $info->toArray() : [];
-        if (empty($info)) {
-            $this->error = '结算订单不存在';
-            return false;
-        }
-
-        if ($info['status'] <= 1 || $info['pay_status'] == 10) {
-            $this->error = '订单未支付';
-            return false;
-        }
-
-        if (in_array($info['refund_status'], [1, 2, 3])) {
-            $this->error = '订单已退款';
-            return false;
-        }
-
-        $orderType = isset($info['type']) ? $info['type'] : 1;
-        $orderNo = isset($info['order_no']) ? $info['order_no'] : '';
-        $orderUserId = isset($info['user_id']) ? $info['user_id'] : 0;
-        $commission = isset($info['commission']) ? $info['commission'] : [];
-        $commissionId = isset($commission['id']) ? $commission['id'] : 0;
-        if (empty($commission) || $commissionId <= 0) {
-            $this->error = '结算订单收益参数错误';
-            return false;
-        }
-
-        if ($commission['status'] == 1) {
-            $this->error = '订单收益已结算';
-            return false;
-        }
-
-        $cacheKey = "caches:ordersCommission:{$orderNo}_{$orderUserId}:";
-        if (RedisService::get("{$cacheKey}lock")) {
-            $this->error = '订单结算中';
-            return false;
-        }
-
-        //  创业订单
-        $logs = [];
-        RedisService::set("{$cacheKey}lock", $info, 300);
-        DB::beginTransaction();
-        if ($orderType == 2) {
-            // TODO 结算直推奖
-            $directData = isset($commission['direct_bonus']) && $commission['direct_bonus'] ? json_decode($commission['direct_bonus'], true) : [];
-            $directUserId = isset($commission['direct_uid']) ? $commission['direct_uid'] : 0;
-            $directBonus = isset($directData['bonus']) ? $directData['bonus'] : 0;
-            if ($directUserId > 0 && $directBonus > 0) {
-                $directUser = isset($commission['direct_user']) ? $commission['direct_user'] : [];
-                $directUserBalance = isset($directUser['balance']) ? $directUser['balance'] : 0;
-                if ($directUser) {
-                    $updateData = [
-                        'balance' => DB::raw("balance + {$directBonus}"),
-                        'bonus_total' => DB::raw("bonus_total + {$directBonus}"),
-                        'update_time' => time()
-                    ];
-                    if (!MemberModel::where(['id' => $directUserId])->update($updateData)) {
-                        DB::rollBack();
-                        RedisService::clear("{$cacheKey}lock");
-                        $this->error = '直推奖励结算错误';
-                        return false;
-                    }
-
-                    $data = [
-                        'user_id' => $directUserId,
-                        'source_order_no' => $orderNo,
-                        'user_type' => 1,
-                        'account_type' => 1, // 余额
-                        'type' => 8,
-                        'bonus_type' => 1,
-                        'money' => $directBonus,
-                        'after_money' => moneyFormat($directUserBalance + $directBonus, 2),
-                        'date' => date('Y-m-d'),
-                        'create_time' => time(),
-                        'remark' => '直推奖',
-                        'remark1' => "用户ID:{$orderUserId}购买礼包直推奖励",
-                        'status' => 1,
-                        'mark' => 1
-                    ];
-
-                    $logs[] = $data;
-                }
-            }
-
-            // TODO 结算见单奖+分红
-            $bonusUids = [];
-            for ($i = 1; $i <= 6; $i++) {
-                $uid = isset($commission["bonus_{$i}_uid"]) ? $commission["bonus_{$i}_uid"] : 0;
-                if ($uid) {
-                    $bonusUids[] = $uid;
-                }
-            }
-
-            $bonusUsers = MemberModel::whereIn('id', $bonusUids)
-                ->select(['id', 'openid', 'balance', 'mobile', 'nickname', 'property', 'ls_score', 'status'])
-                ->get()
-                ->keyBy('id');
-            $bonusUsers = $bonusUsers ? $bonusUsers->toArray() : [];
-            for ($i = 1; $i <= 6; $i++) {
-                $uid = isset($commission["bonus_{$i}_uid"]) ? $commission["bonus_{$i}_uid"] : 0;
-                $bonusData = isset($commission["bonus_{$i}_data"]) ? $commission["bonus_{$i}_data"] : '';
-                $bonusData = $bonusData ? json_decode($bonusData, true) : [];
-                $jdBonus = isset($bonusData['jd_bonus']) ? $bonusData['jd_bonus'] : 0;
-                $levelName = isset($bonusData['level_name']) ? $bonusData['level_name'] : '';
-                $levelBonus = isset($bonusData['level_bonus']) ? $bonusData['level_bonus'] : 0;
-                $bonusUser = isset($bonusUsers[$uid]) ? $bonusUsers[$uid] : [];
-                $bonusUserBalance = isset($bonusUser['balance']) ? $bonusUser['balance'] : 0;
-                $bonusTotal = moneyFormat($jdBonus + $levelBonus, 2);
-                if ($uid && $bonusUser && $bonusTotal > 0) {
-                    $updateData = [
-                        'balance' => DB::raw("balance + {$bonusTotal}"),
-                        'bonus_total' => DB::raw("bonus_total + {$bonusTotal}"),
-                        'update_time' => time()
-                    ];
-                    if (!MemberModel::where(['id' => $uid])->update($updateData)) {
-                        DB::rollBack();
-                        $this->error = '见单和分红奖励结算错误';
-                        RedisService::clear("{$cacheKey}lock");
-                        return false;
-                    }
-
-                    if ($jdBonus > 0) {
-                        $bonusUserBalance = moneyFormat($bonusUserBalance + $jdBonus, 2);
-                        $data = [
-                            'user_id' => $uid,
-                            'source_order_no' => $orderNo,
-                            'user_type' => 1,
-                            'account_type' => 1, // 余额
-                            'type' => 8,
-                            'bonus_type' => 2,
-                            'money' => $jdBonus,
-                            'after_money' => $bonusUserBalance,
-                            'date' => date('Y-m-d'),
-                            'create_time' => time() + $i,
-                            'remark' => '见单奖',
-                            'remark1' => "下{$i}级用户ID:{$orderUserId}购买礼包见单奖",
-                            'status' => 1,
-                            'mark' => 1
-                        ];
-
-                        $logs[] = $data;
-                    }
-
-                    if ($levelBonus > 0) {
-                        $bonusUserBalance = moneyFormat($bonusUserBalance + $levelBonus, 2);
-                        $data = [
-                            'user_id' => $uid,
-                            'source_order_no' => $orderNo,
-                            'user_type' => 1,
-                            'account_type' => 1, // 余额
-                            'type' => 8,
-                            'bonus_type' => 3,
-                            'money' => $levelBonus,
-                            'after_money' => $bonusUserBalance,
-                            'date' => date('Y-m-d'),
-                            'create_time' => time() + $i,
-                            'remark' => '分红收益',
-                            'remark1' => "下{$i}级用户ID:{$orderUserId}购买礼包等级[{$levelName}]分红收益",
-                            'status' => 1,
-                            'mark' => 1
-                        ];
-
-                        $logs[] = $data;
-                    }
-                }
-            }
-        } // 商城订单
-        else {
-            // TODO 商家结算
-            $storeInfo = isset($commission['store']) ? $commission['store'] : [];
-            $storeId = isset($commission['store_id']) ? $commission['store_id'] : 0;
-            $storeBonus = isset($commission['bonus']) ? $commission['bonus'] : 0;
-            $storeUserId = isset($storeInfo['user_id']) ? $storeInfo['user_id'] : 0;
-            $storeBalance = isset($storeInfo['balance']) ? $storeInfo['balance'] : 0;
-            if ($storeId > 0 && $storeInfo && $storeBonus > 0) {
-                $updateData = [
-                    'balance' => DB::raw("balance + {$storeBonus}"),
-                    'income' => DB::raw("income + {$storeBonus}"),
-                    'update_time' => time()
-                ];
-                if (!StoreModel::where(['id' => $storeId])->update($updateData)) {
-                    DB::rollBack();
-                    $this->error = '商家提成结算失败';
-                    RedisService::clear("{$cacheKey}lock");
-                    return false;
-                }
-
-                $storeBalance = moneyFormat($storeBalance + $storeBonus, 2);
-                $data = [
-                    'user_id' => $storeUserId,
-                    'store_id' => $storeId,
-                    'source_order_no' => $orderNo,
-                    'user_type' => 2,
-                    'account_type' => 1, // 余额
-                    'type' => 7,
-                    'bonus_type' => 0,
-                    'money' => $storeBonus,
-                    'after_money' => $storeBalance,
-                    'date' => date('Y-m-d'),
-                    'create_time' => time(),
-                    'remark' => '商家提成结算',
-                    'remark1' => "用户ID:{$orderUserId}购买商品提成结算",
-                    'status' => 1,
-                    'mark' => 1
-                ];
-
-                $logs[] = $data;
-            }
-
-            // TODO 绿色积分结算
-            $userInfo = isset($commission['user']) ? $commission['user'] : [];
-            $userId = isset($commission['user_id']) ? $commission['user_id'] : 0;
-            $userLsScore = isset($userInfo['ls_score']) ? $userInfo['ls_score'] : 0;
-            $lsScore = isset($commission['ls_score']) ? $commission['ls_score'] : 0;
-            if ($userId > 0 && $userInfo && $lsScore > 0) {
-                $updateData = [
-                    'ls_score' => DB::raw("ls_score + {$lsScore}"),
-                    'ls_score_total' => DB::raw("ls_score_total + {$lsScore}"),
-                    'update_time' => time()
-                ];
-                if (!MemberModel::where(['id' => $userId])->update($updateData)) {
-                    DB::rollBack();
-                    $this->error = '绿色积分奖励结算错误';
-                    RedisService::clear("{$cacheKey}lock");
-                    return false;
-                }
-
-                $data = [
-                    'user_id' => $userId,
-                    'store_id' => 0,
-                    'source_order_no' => $orderNo,
-                    'user_type' => 1,
-                    'account_type' => 4, // 绿色积分
-                    'type' => 8,
-                    'bonus_type' => 4,
-                    'money' => $lsScore,
-                    'after_money' => moneyFormat($userLsScore + $lsScore, 2),
-                    'date' => date('Y-m-d'),
-                    'create_time' => time(),
-                    'remark' => '绿色积分奖励',
-                    'remark1' => "用户ID:{$orderUserId}购买商品绿色积分奖励",
-                    'status' => 1,
-                    'mark' => 1
-                ];
-
-                $logs[] = $data;
-            }
-
-
-            // TODO 数字资产和底池
-            $property = isset($commission['property']) ? $commission['property'] : 0;
-            $userProperty = isset($userInfo['property']) ? $userInfo['property'] : 0;
-            if ($userId > 0 && $userInfo && $property > 0) {
-                $updateData = [
-                    'property' => DB::raw("property + {$property}"),
-                    'property_total' => DB::raw("property_total + {$property}"),
-                    'update_time' => time()
-                ];
-                if (!MemberModel::where(['id' => $userId])->update($updateData)) {
-                    DB::rollBack();
-                    $this->error = '数字资产奖励结算错误';
-                    RedisService::clear("{$cacheKey}lock");
-                    return false;
-                }
-
-                $data = [
-                    'user_id' => $userId,
-                    'store_id' => 0,
-                    'source_order_no' => $orderNo,
-                    'user_type' => 1,
-                    'account_type' => 2, // 数字资产
-                    'type' => 8,
-                    'bonus_type' => 5,
-                    'money' => $property,
-                    'after_money' => moneyFormat($userProperty + $property, 2),
-                    'date' => date('Y-m-d'),
-                    'create_time' => time(),
-                    'remark' => '数字资产奖励',
-                    'remark1' => "用户ID:{$orderUserId}购买商品数字资产奖励",
-                    'status' => 1,
-                    'mark' => 1
-                ];
-
-                $logs[] = $data;
-            }
-
-            // 平台底池结算
-            $ptAccount = PtAccountModel::where(['mark' => 1])->first();
-            $accountId = isset($ptAccount['id']) ? $ptAccount['id'] : 0;
-            $poolTotal = isset($ptAccount['pool_total']) ? $ptAccount['pool_total'] : 0;
-            $ptPool = isset($commission['pt_pool']) ? $commission['pt_pool'] : 0;
-            if ($ptAccount && ($ptPool > 0 || $property > 0)) {
-                $updateData = [
-                    'pool_total' => DB::raw("pool_total + {$ptPool}"),
-                    'today_pool' => DB::raw("today_pool + {$ptPool}"),
-                    'today_property' => DB::raw("today_property + {$property}"),
-                    'update_time' => time()
-                ];
-                if (!PtAccountModel::where(['id' => $accountId])->update($updateData)) {
-                    DB::rollBack();
-                    $this->error = '平台底池和资产结算错误';
-                    RedisService::clear("{$cacheKey}lock");
-                    return false;
-                }
-
-                // 底池明细
-                if ($ptPool > 0) {
-                    $data = [
-                        'user_id' => 0,
-                        'store_id' => 0,
-                        'source_order_no' => $orderNo,
-                        'user_type' => 0,
-                        'account_type' => 5, // 平台账户
-                        'type' => 10,
-                        'bonus_type' => 6,
-                        'money' => $ptPool,
-                        'after_money' => moneyFormat($poolTotal + $ptPool, 2),
-                        'date' => date('Y-m-d'),
-                        'create_time' => time(),
-                        'remark' => '返回底池',
-                        'remark1' => "用户ID:{$orderUserId}购买商品返回底池",
-                        'status' => 1,
-                        'mark' => 1
-                    ];
-
-                    $logs[] = $data;
-                }
-            }
-        }
-
-        // TODO 明细入表
-        RedisService::set("{$cacheKey}logs", $logs, 3600);
-        if ($logs && !AccountLogModel::insert($logs)) {
-            DB::rollBack();
-            $this->error = '奖励明细结算处理错误';
-            RedisService::clear("{$cacheKey}lock");
-            return false;
-        }
-
-        // 订单结算状态更新
-        if(!OrderCommissionModel::where(['id'=>$commissionId])->update(['status'=>1,'arrival_at'=>date('Y-m-d H:i:s'),'update_time'=>time()])){
-            DB::rollBack();
-            $this->error = '订单结算状态更新失败';
-            return false;
-        }
-
-        DB::commit();
-        $this->error = '订单结算完成';
-        RedisService::clear("{$cacheKey}lock");
-        RedisService::set("{$cacheKey}result", $info, 3600);
-        return ['id' => $orderId, 'user_id' => $orderUserId, 'logs' => $logs, 'commission' => $commission];
+       try {
+           $info = OrderModel::with(['commission'])
+               ->where(['id' => $orderId, 'mark' => 1])
+               ->select(['id', 'order_no', 'type', 'user_id', 'total', 'pay_total', 'bd_score', 'pay_status', 'status', 'refund_status'])
+               ->first();
+           $info = $info ? $info->toArray() : [];
+           if (empty($info)) {
+               $this->error = '结算订单不存在';
+               return false;
+           }
+
+           if ($info['status'] <= 1 || $info['pay_status'] == 10) {
+               $this->error = '订单未支付';
+               return false;
+           }
+
+           if (in_array($info['refund_status'], [1, 2, 3])) {
+               $this->error = '订单已退款';
+               return false;
+           }
+
+           $orderType = isset($info['type']) ? $info['type'] : 1;
+           $orderNo = isset($info['order_no']) ? $info['order_no'] : '';
+           $orderUserId = isset($info['user_id']) ? $info['user_id'] : 0;
+           $commission = isset($info['commission']) ? $info['commission'] : [];
+           $commissionId = isset($commission['id']) ? $commission['id'] : 0;
+           if (empty($commission) || $commissionId <= 0) {
+               $this->error = '结算订单收益参数错误';
+               return false;
+           }
+
+           if ($commission['status'] == 1) {
+               $this->error = '订单收益已结算';
+               return false;
+           }
+
+           $cacheKey = "caches:ordersCommission:{$orderNo}_{$orderUserId}:";
+           if (RedisService::get("{$cacheKey}lock")) {
+               $this->error = '订单结算中';
+               return false;
+           }
+
+           //  创业订单
+           $logs = [];
+           RedisService::set("{$cacheKey}lock", $info, 300);
+           DB::beginTransaction();
+           if ($orderType == 2) {
+               // TODO 结算直推奖
+               $directData = isset($commission['direct_bonus']) && $commission['direct_bonus'] ? json_decode($commission['direct_bonus'], true) : [];
+               $directUserId = isset($commission['direct_uid']) ? $commission['direct_uid'] : 0;
+               $directBonus = isset($directData['bonus']) ? $directData['bonus'] : 0;
+               if ($directUserId > 0 && $directBonus > 0) {
+                   $directUser = isset($commission['direct_user']) ? $commission['direct_user'] : [];
+                   $directUserBalance = isset($directUser['balance']) ? $directUser['balance'] : 0;
+                   if ($directUser) {
+                       $updateData = [
+                           'balance' => DB::raw("balance + {$directBonus}"),
+                           'bonus_total' => DB::raw("bonus_total + {$directBonus}"),
+                           'update_time' => time()
+                       ];
+                       if (!MemberModel::where(['id' => $directUserId])->update($updateData)) {
+                           DB::rollBack();
+                           RedisService::clear("{$cacheKey}lock");
+                           $this->error = '直推奖励结算错误';
+                           return false;
+                       }
+
+                       $data = [
+                           'user_id' => $directUserId,
+                           'source_order_no' => $orderNo,
+                           'user_type' => 1,
+                           'account_type' => 1, // 余额
+                           'type' => 8,
+                           'bonus_type' => 1,
+                           'money' => $directBonus,
+                           'after_money' => moneyFormat($directUserBalance + $directBonus, 2),
+                           'date' => date('Y-m-d'),
+                           'create_time' => time(),
+                           'remark' => '直推奖',
+                           'remark1' => "用户ID:{$orderUserId}购买礼包直推奖励",
+                           'status' => 1,
+                           'mark' => 1
+                       ];
+
+                       $logs[] = $data;
+                   }
+               }
+
+               // TODO 结算见单奖+分红
+               $bonusUids = [];
+               for ($i = 1; $i <= 6; $i++) {
+                   $uid = isset($commission["bonus_{$i}_uid"]) ? $commission["bonus_{$i}_uid"] : 0;
+                   if ($uid) {
+                       $bonusUids[] = $uid;
+                   }
+               }
+
+               $bonusUsers = MemberModel::whereIn('id', $bonusUids)
+                   ->select(['id', 'openid', 'balance', 'mobile', 'nickname', 'property', 'ls_score', 'status'])
+                   ->get()
+                   ->keyBy('id');
+               $bonusUsers = $bonusUsers ? $bonusUsers->toArray() : [];
+               for ($i = 1; $i <= 6; $i++) {
+                   $uid = isset($commission["bonus_{$i}_uid"]) ? $commission["bonus_{$i}_uid"] : 0;
+                   $bonusData = isset($commission["bonus_{$i}_data"]) ? $commission["bonus_{$i}_data"] : '';
+                   $bonusData = $bonusData ? json_decode($bonusData, true) : [];
+                   $jdBonus = isset($bonusData['jd_bonus']) ? $bonusData['jd_bonus'] : 0;
+                   $levelName = isset($bonusData['level_name']) ? $bonusData['level_name'] : '';
+                   $levelBonus = isset($bonusData['level_bonus']) ? $bonusData['level_bonus'] : 0;
+                   $bonusUser = isset($bonusUsers[$uid]) ? $bonusUsers[$uid] : [];
+                   $bonusUserBalance = isset($bonusUser['balance']) ? $bonusUser['balance'] : 0;
+                   $bonusTotal = moneyFormat($jdBonus + $levelBonus, 2);
+                   if ($uid && $bonusUser && $bonusTotal > 0) {
+                       $updateData = [
+                           'balance' => DB::raw("balance + {$bonusTotal}"),
+                           'bonus_total' => DB::raw("bonus_total + {$bonusTotal}"),
+                           'update_time' => time()
+                       ];
+                       if (!MemberModel::where(['id' => $uid])->update($updateData)) {
+                           DB::rollBack();
+                           $this->error = '见单和分红奖励结算错误';
+                           RedisService::clear("{$cacheKey}lock");
+                           return false;
+                       }
+
+                       if ($jdBonus > 0) {
+                           $bonusUserBalance = moneyFormat($bonusUserBalance + $jdBonus, 2);
+                           $data = [
+                               'user_id' => $uid,
+                               'source_order_no' => $orderNo,
+                               'user_type' => 1,
+                               'account_type' => 1, // 余额
+                               'type' => 8,
+                               'bonus_type' => 2,
+                               'money' => $jdBonus,
+                               'after_money' => $bonusUserBalance,
+                               'date' => date('Y-m-d'),
+                               'create_time' => time() + $i,
+                               'remark' => '见单奖',
+                               'remark1' => "下{$i}级用户ID:{$orderUserId}购买礼包见单奖",
+                               'status' => 1,
+                               'mark' => 1
+                           ];
+
+                           $logs[] = $data;
+                       }
+
+                       if ($levelBonus > 0) {
+                           $bonusUserBalance = moneyFormat($bonusUserBalance + $levelBonus, 2);
+                           $data = [
+                               'user_id' => $uid,
+                               'source_order_no' => $orderNo,
+                               'user_type' => 1,
+                               'account_type' => 1, // 余额
+                               'type' => 8,
+                               'bonus_type' => 3,
+                               'money' => $levelBonus,
+                               'after_money' => $bonusUserBalance,
+                               'date' => date('Y-m-d'),
+                               'create_time' => time() + $i,
+                               'remark' => '分红收益',
+                               'remark1' => "下{$i}级用户ID:{$orderUserId}购买礼包等级[{$levelName}]分红收益",
+                               'status' => 1,
+                               'mark' => 1
+                           ];
+
+                           $logs[] = $data;
+                       }
+                   }
+               }
+           } // 商城订单
+           else {
+               // TODO 商家结算
+               $storeInfo = isset($commission['store']) ? $commission['store'] : [];
+               $storeId = isset($commission['store_id']) ? $commission['store_id'] : 0;
+               $storeBonus = isset($commission['bonus']) ? $commission['bonus'] : 0;
+               $storeUserId = isset($storeInfo['user_id']) ? $storeInfo['user_id'] : 0;
+               $storeBalance = isset($storeInfo['balance']) ? $storeInfo['balance'] : 0;
+               if ($storeId > 0 && $storeInfo && $storeBonus > 0) {
+                   $updateData = [
+                       'balance' => DB::raw("balance + {$storeBonus}"),
+                       'income' => DB::raw("income + {$storeBonus}"),
+                       'update_time' => time()
+                   ];
+                   if (!StoreModel::where(['id' => $storeId])->update($updateData)) {
+                       DB::rollBack();
+                       $this->error = '商家提成结算失败';
+                       RedisService::clear("{$cacheKey}lock");
+                       return false;
+                   }
+
+                   $storeBalance = moneyFormat($storeBalance + $storeBonus, 2);
+                   $data = [
+                       'user_id' => $storeUserId,
+                       'store_id' => $storeId,
+                       'source_order_no' => $orderNo,
+                       'user_type' => 2,
+                       'account_type' => 1, // 余额
+                       'type' => 7,
+                       'bonus_type' => 0,
+                       'money' => $storeBonus,
+                       'after_money' => $storeBalance,
+                       'date' => date('Y-m-d'),
+                       'create_time' => time(),
+                       'remark' => '商家提成结算',
+                       'remark1' => "用户ID:{$orderUserId}购买商品提成结算",
+                       'status' => 1,
+                       'mark' => 1
+                   ];
+
+                   $logs[] = $data;
+               }
+
+               // TODO 绿色积分结算
+               $userInfo = isset($commission['user']) ? $commission['user'] : [];
+               $userId = isset($commission['user_id']) ? $commission['user_id'] : 0;
+               $userLsScore = isset($userInfo['ls_score']) ? $userInfo['ls_score'] : 0;
+               $lsScore = isset($commission['ls_score']) ? $commission['ls_score'] : 0;
+               if ($userId > 0 && $userInfo && $lsScore > 0) {
+                   $updateData = [
+                       'ls_score' => DB::raw("ls_score + {$lsScore}"),
+                       'ls_score_total' => DB::raw("ls_score_total + {$lsScore}"),
+                       'update_time' => time()
+                   ];
+                   if (!MemberModel::where(['id' => $userId])->update($updateData)) {
+                       DB::rollBack();
+                       $this->error = '绿色积分奖励结算错误';
+                       RedisService::clear("{$cacheKey}lock");
+                       return false;
+                   }
+
+                   $data = [
+                       'user_id' => $userId,
+                       'store_id' => 0,
+                       'source_order_no' => $orderNo,
+                       'user_type' => 1,
+                       'account_type' => 4, // 绿色积分
+                       'type' => 8,
+                       'bonus_type' => 4,
+                       'money' => $lsScore,
+                       'after_money' => moneyFormat($userLsScore + $lsScore, 2),
+                       'date' => date('Y-m-d'),
+                       'create_time' => time(),
+                       'remark' => '绿色积分奖励',
+                       'remark1' => "用户ID:{$orderUserId}购买商品绿色积分奖励",
+                       'status' => 1,
+                       'mark' => 1
+                   ];
+
+                   $logs[] = $data;
+               }
+
+
+               // TODO 数字资产和底池
+               $property = isset($commission['property']) ? $commission['property'] : 0;
+               $userProperty = isset($userInfo['property']) ? $userInfo['property'] : 0;
+               if ($userId > 0 && $userInfo && $property > 0) {
+                   $updateData = [
+                       'property' => DB::raw("property + {$property}"),
+                       'property_total' => DB::raw("property_total + {$property}"),
+                       'update_time' => time()
+                   ];
+                   if (!MemberModel::where(['id' => $userId])->update($updateData)) {
+                       DB::rollBack();
+                       $this->error = '数字资产奖励结算错误';
+                       RedisService::clear("{$cacheKey}lock");
+                       return false;
+                   }
+
+                   $data = [
+                       'user_id' => $userId,
+                       'store_id' => 0,
+                       'source_order_no' => $orderNo,
+                       'user_type' => 1,
+                       'account_type' => 2, // 数字资产
+                       'type' => 8,
+                       'bonus_type' => 5,
+                       'money' => $property,
+                       'after_money' => moneyFormat($userProperty + $property, 2),
+                       'date' => date('Y-m-d'),
+                       'create_time' => time(),
+                       'remark' => '数字资产奖励',
+                       'remark1' => "用户ID:{$orderUserId}购买商品数字资产奖励",
+                       'status' => 1,
+                       'mark' => 1
+                   ];
+
+                   $logs[] = $data;
+               }
+
+               // 平台底池结算
+               $ptAccount = PtAccountModel::where(['mark' => 1])->first();
+               $accountId = isset($ptAccount['id']) ? $ptAccount['id'] : 0;
+               $poolTotal = isset($ptAccount['pool_total']) ? $ptAccount['pool_total'] : 0;
+               $ptPool = isset($commission['pt_pool']) ? $commission['pt_pool'] : 0;
+               if ($ptAccount && ($ptPool > 0 || $property > 0)) {
+                   $updateData = [
+                       'pool_total' => DB::raw("pool_total + {$ptPool}"),
+                       'today_pool' => DB::raw("today_pool + {$ptPool}"),
+                       'today_property' => DB::raw("today_property + {$property}"),
+                       'update_time' => time()
+                   ];
+                   if (!PtAccountModel::where(['id' => $accountId])->update($updateData)) {
+                       DB::rollBack();
+                       $this->error = '平台底池和资产结算错误';
+                       RedisService::clear("{$cacheKey}lock");
+                       return false;
+                   }
+
+                   // 底池明细
+                   if ($ptPool > 0) {
+                       $data = [
+                           'user_id' => 0,
+                           'store_id' => 0,
+                           'source_order_no' => $orderNo,
+                           'user_type' => 0,
+                           'account_type' => 5, // 平台账户
+                           'type' => 10,
+                           'bonus_type' => 6,
+                           'money' => $ptPool,
+                           'after_money' => moneyFormat($poolTotal + $ptPool, 2),
+                           'date' => date('Y-m-d'),
+                           'create_time' => time(),
+                           'remark' => '返回底池',
+                           'remark1' => "用户ID:{$orderUserId}购买商品返回底池",
+                           'status' => 1,
+                           'mark' => 1
+                       ];
+
+                       $logs[] = $data;
+                   }
+               }
+           }
+
+           // TODO 明细入表
+           RedisService::set("{$cacheKey}logs", $logs, 3600);
+           if ($logs && !AccountLogModel::insert($logs)) {
+               DB::rollBack();
+               $this->error = '奖励明细结算处理错误';
+               RedisService::clear("{$cacheKey}lock");
+               return false;
+           }
+
+           // 订单结算状态更新
+           if(!OrderCommissionModel::where(['id'=>$commissionId])->update(['status'=>1,'arrival_at'=>date('Y-m-d H:i:s'),'update_time'=>time()])){
+               DB::rollBack();
+               $this->error = '订单结算状态更新失败';
+               return false;
+           }
+
+           DB::commit();
+           $this->error = '订单结算完成';
+           RedisService::clear("{$cacheKey}lock");
+           RedisService::set("{$cacheKey}result", $info, 3600);
+           return ['id' => $orderId, 'user_id' => $orderUserId, 'logs' => $logs, 'commission' => $commission];
+       } catch (\Exception $exception){
+           RedisService::set("caches:settles:{$orderId}", ['error'=>$exception->getMessage(),'trace'=>$exception->getTrace()], 7200);
+           return false;
+       }
     }
 
     /**