wesmiler 2 недель назад
Родитель
Сommit
1e5c985b46

+ 2 - 0
.env

@@ -11,6 +11,8 @@ APP_URL=https://ldmp.derkj.com/
 WEB_URL=https://ldmp.derkj.com/
 LOG_CHANNEL=stack
 ORDER_REPORT_STATUS=1
+ORDER_COMPLETE_STATUS=5
+
 
 # 短信调试
 SMS_DEBUG=true

+ 34 - 17
app/Services/Api/OrderService.php

@@ -214,7 +214,7 @@ class OrderService extends BaseService
         // 用户信息
         RedisService::set($cacheLockKey, ['params' => $params, 'user_id' => $userId], rand(3, 5));
         $userInfo = MemberModel::where(['id' => $userId, 'mark' => 1])
-            ->select(['id', 'openid', 'buy_type', 'bd_score', 'status'])
+            ->select(['id', 'openid','nickname','member_level','parent_id','point_id','points', 'buy_type','property','balance', 'bd_score', 'status'])
             ->first();
         $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
         $openid = isset($userInfo['openid']) ? $userInfo['openid'] : 0;
@@ -422,10 +422,18 @@ class OrderService extends BaseService
                 if(!AccountLogModel::insertGetId($data)){
                     Db::rollBack();
                     $this->error = '付款处理失败';
+                    return false;
                 }
             }
         }
 
+        // 佣金数据
+        if(!$commission = SettleService::make()->commissionCount($order, $userInfo, $type)){
+            Db::rollBack();
+            $this->error = '订单处理失败';
+            return false;
+        }
+
         // 获取支付参数
         /* TODO 支付处理 */
         $payOrder = [
@@ -771,18 +779,19 @@ class OrderService extends BaseService
         }
 
         // 订单信息
-        $info = $this->model->with(['orderGoods'])->where(['id' => $id, 'mark' => 1])
-            ->select(['id', 'order_no', 'user_id', 'store_id', 'meeting_id', 'pay_total', 'bonus', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
+        $info = $this->model->with(['orderGoods','commission'])->where(['id' => $id, 'mark' => 1])
+            ->select(['id', 'order_no','type', 'user_id', 'store_id', 'total', 'pay_total', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
             ->first();
         $orderNo = isset($info['order_no']) ? $info['order_no'] : '';
         $deliveryNo = isset($info['delivery_no']) ? $info['delivery_no'] : '';
         $deliverCompany = isset($info['delivery_company']) ? $info['delivery_company'] : '';
         $orderUserId = isset($info['user_id']) ? $info['user_id'] : 0;
         $storeId = isset($info['store_id']) ? $info['store_id'] : 0;
-        $meetingId = isset($info['meeting_id']) ? $info['meeting_id'] : 0;
-        $orderTotal = isset($info['pay_total']) ? $info['pay_total'] : 0;
-        $bonus = isset($info['bonus']) ? $info['bonus'] : 0;
+        $orderType = isset($info['type']) ? $info['type'] : 0;
+        $orderTotal = isset($info['total']) ? $info['total'] : 0;
         $status = isset($info['status']) ? $info['status'] : 0;
+        $commission = isset($info['commission']) ? $info['commission'] : [];
+        $bonus = isset($commission['bonus'])?$commission['bonus'] : 0;
         $orderGoods = isset($info['order_goods']) ? $info['order_goods'] : [];
         if (empty($info) || empty($orderNo)) {
             $this->error = '订单信息不存在';
@@ -806,7 +815,8 @@ class OrderService extends BaseService
         }
 
         DB::beginTransaction();
-        $updateData = ['status' => 4, 'complete_at' => date('Y-m-d H:i:s'), 'update_time' => time()];
+        $completeStatus = env('ORDER_COMPLETE_STATUS', 5);
+        $updateData = ['status' => $completeStatus, 'complete_at' => date('Y-m-d H:i:s'), 'update_time' => time()];
         if (!$check) {
             $updateData['is_complete'] = 1;
             $updateData['complete_remark'] = '自动收货';
@@ -833,22 +843,29 @@ class OrderService extends BaseService
         }
 
         // 结算商家收益
-        if (SettleService::make()->storeBonus($storeId, $bonus, $info) < 0) {
+        if ($bonus && SettleService::make()->storeBonus($storeId, $bonus, $info) < 0) {
             DB::rollBack();
             $this->error = SettleService::make()->getError();
             RedisService::clear($cacheLockKey);
             return false;
         }
 
-        // 关联会议统计
-        if ($meetingId) {
-            // 会议成交统计
-            $updateData = ['order_count' => DB::raw('order_count+1'), 'order_total' => DB::raw("order_total + {$orderTotal}")];
-            MeetingModel::where(['id' => $meetingId])->update($updateData);
-
-            // 签到用户成交统计
-            $updateData = ['order_count' => DB::raw('order_count+1'), 'order_total' => DB::raw("order_total + {$orderTotal}")];
-            MeetingRecordsModel::where(['meeting_id' => $meetingId, 'user_id' => $orderUserId])->update($updateData);
+        if($orderType==2){
+            // 创业礼包结算
+            if (SettleService::make()->businessBonus($orderUserId, $orderTotal, $commission, $info) < 0) {
+                DB::rollBack();
+                $this->error = SettleService::make()->getError();
+                RedisService::clear($cacheLockKey);
+                return false;
+            }
+        }else{
+            // 商城奖励结算
+            if (SettleService::make()->shopBonus($orderUserId, $orderTotal,$commission, $info) < 0) {
+                DB::rollBack();
+                $this->error = SettleService::make()->getError();
+                RedisService::clear($cacheLockKey);
+                return false;
+            }
         }
 
 

+ 58 - 1
app/Services/Api/SettleService.php

@@ -13,8 +13,8 @@ namespace App\Services\Api;
 
 use App\Models\AccountLogModel;
 use App\Models\CouponModel;
-use App\Models\MeetingModel;
 use App\Models\MemberCouponModel;
+use App\Models\OrderCommissionModel;
 use App\Models\StoreModel;
 use App\Services\BaseService;
 use App\Services\ConfigService;
@@ -104,6 +104,63 @@ class SettleService extends BaseService
         return $result;
     }
 
+    public function businessBonus($userId, $total, $commission, $order)
+    {
+
+    }
+
+    public function shopBonus($userId, $total, $commission, $order)
+    {
+
+    }
+
+    /**
+     * @param $order
+     * @param int $orderType
+     */
+    public function commissionCount($order, $userInfo, $orderType=1)
+    {
+        $userId = isset($order['user_id'])?$order['user_id']:0;
+        $orderNo = isset($order['order_no'])?$order['order_no']:'';
+        $data = [
+            'user_id'=> $userId,
+            'order_no'=> $orderNo,
+            'store_id'=> isset($order['store_id'])?$order['store_id']:0,
+            'create_time'=>time(),
+            'status'=>2,
+            'mark'=>1,
+        ];
+        if($orderType==2){
+            // 计算直推奖
+            $parentId = isset($userInfo['parent_id'])
+
+
+            // 计算见单奖
+
+            // 计算分红奖励
+
+        }else{
+            // 计算商家佣金
+
+
+            // 计算绿色积分奖励
+
+            // 计算数字资产+底池金额
+
+        }
+
+        // 佣金数据入库
+        if(!$cid = OrderCommissionModel::where(['order_no'=>$orderNo])->value('id')){
+            $cid = OrderCommissionModel::insertGetId($data);
+        }else{
+            OrderCommissionModel::where(['id'=>$cid])->update($data);
+        }
+
+        $this->error = '佣金计算成功';
+        $data['id'] = $cid;
+        return $data;
+    }
+
     /**
      * 新人注册奖励
      * @param $userId

+ 71 - 4
app/Services/Common/OrderService.php

@@ -11,7 +11,9 @@
 
 namespace App\Services\Common;
 
+use App\Models\AccountLogModel;
 use App\Models\ActionLogModel;
+use App\Models\MemberModel;
 use App\Models\OrderModel;
 use App\Services\BaseService;
 use App\Services\MpService;
@@ -597,7 +599,8 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '参数错误'];
         }
 
-        $order = $this->model->find($id);
+        $order = $this->model->with(['user'])->find($id);
+        $userInfo = isset($order['user'])?$order['user']:[];
         if (!$order) {
             return ['code' => 1, 'msg' => '订单不存在'];
         }
@@ -613,6 +616,34 @@ class OrderService extends BaseService
 
         $result = $this->model->where('id', $id)->update($updateData);
 
+        // 是否支付了积分
+        if($order->type==2 && in_array($order->pay_status,[20,30])){
+            $bdScore = isset($userInfo['bd_score'])?$userInfo['bd_score']:0;
+            if(!MemberModel::where(['id'=>$order->user_id])->update(['bd_score'=>DB::raw("bd_score+{$order->bd_score}"),'update_time'=>time()])){
+                DB::rollBack();
+                return ['code' => 1, 'msg' => '退还报单积分失败'];
+            }
+
+            $data = [
+                'user_id'=>$order->user_id,
+                'source_order_no'=>$order->order_no,
+                'user_type'=> 1,
+                'account_type'=> 3, // 报单积分
+                'type'=> 3,
+                'money'=> $order->bd_score,
+                'after_money'=>moneyFormat($bdScore + $order->bd_score,2),
+                'date'=>date('Y-m-d'),
+                'create_time'=>time(),
+                'remark'=> '订单退款返还积分',
+                'status'=>1,
+                'mark'=>1
+            ];
+            if(!AccountLogModel::insertGetId($data)){
+                Db::rollBack();
+                return ['code' => 1, 'msg' => '退还报单积分账户处理失败'];
+            }
+        }
+
         if ($result) {
             ActionLogModel::setTitle("取消订单");
             ActionLogModel::record();
@@ -741,7 +772,8 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '请输入退款金额'];
         }
 
-        $order = $this->model->find($id);
+        $order = $this->model->with(['user'])->find($id);
+        $userInfo = isset($order['user'])?$order['user']:[];
         if (!$order) {
             return ['code' => 1, 'msg' => '订单不存在'];
         }
@@ -751,10 +783,17 @@ class OrderService extends BaseService
             return ['code' => 1, 'msg' => '该订单状态不允许退款'];
         }
 
-        if ($refundAmount > floatval($order->pay_total + $order->delivery_fee)) {
-            return ['code' => 1, 'msg' => '退款金额不能大于订单支付金额'];
+        if($order->type==2){
+            if ($refundAmount > floatval($order->pay_money + $order->delivery_fee)) {
+                return ['code' => 1, 'msg' => '退款金额不能大于订单在线支付金额'];
+            }
+        }else{
+            if ($refundAmount > floatval($order->pay_total + $order->delivery_fee)) {
+                return ['code' => 1, 'msg' => '退款金额不能大于订单在线支付金额'];
+            }
         }
 
+
         // 使用事务
         DB::beginTransaction();
         try {
@@ -784,6 +823,34 @@ class OrderService extends BaseService
 
             $result = $this->model->where('id', $id)->update($updateData);
 
+            // 退还报单积分
+            if($order->type == 2 && $order->bd_score>0){
+                $bdScore = isset($userInfo['bd_score'])?$userInfo['bd_score']:0;
+                if(!MemberModel::where(['id'=>$order->user_id])->update(['bd_score'=>DB::raw("bd_score+{$order->bd_score}"),'update_time'=>time()])){
+                    DB::rollBack();
+                    return ['code' => 1, 'msg' => '退还报单积分失败'];
+                }
+
+                $data = [
+                    'user_id'=>$order->user_id,
+                    'source_order_no'=>$order->order_no,
+                    'user_type'=> 1,
+                    'account_type'=> 3, // 报单积分
+                    'type'=> 3,
+                    'money'=> $order->bd_score,
+                    'after_money'=>moneyFormat($bdScore + $order->bd_score,2),
+                    'date'=>date('Y-m-d'),
+                    'create_time'=>time(),
+                    'remark'=> '订单退款返还积分',
+                    'status'=>1,
+                    'mark'=>1
+                ];
+                if(!AccountLogModel::insertGetId($data)){
+                    Db::rollBack();
+                    return ['code' => 1, 'msg' => '退还报单积分账户处理失败'];
+                }
+            }
+
             if ($result) {
                 DB::commit();
                 ActionLogModel::setTitle("确认退款");

+ 1 - 1
app/Services/PaymentService.php

@@ -509,7 +509,7 @@ class PaymentService extends BaseService
 
                 // 创业订单
                 if($orderType==2){
-                    $updateData = ['pay_at' => $payAt, 'transaction_id' => $transactionId, 'status' => 2, 'update_time' => time()];
+                    $updateData = ['pay_at' => $payAt,'pay_status'=>20, 'transaction_id' => $transactionId, 'status' => 2, 'update_time' => time()];
                     if (!OrderModel::where(['main_no' => $orderNo, 'mark' => 1])->update($updateData)) {
                         $this->error = 2633;
                         DB::rollBack();