Browse Source

新客专享

gorden 5 months ago
parent
commit
b8d473166d

+ 40 - 5
app/admin/controller/order/NewCustomerController.php

@@ -242,6 +242,9 @@ class NewCustomerController extends Curd
             if (!empty($paidOrder)) {
                 $paidOrder->order_groupby = $params['orderGroupId'];
                 $params['orderId'] = $paidOrder->order_id;
+            }else{
+                // 检查产品配置
+                $this->checkGoodsConfig($params);
             }
             $systemStatus = 'PAYING';
             // 立即结算
@@ -320,6 +323,9 @@ class NewCustomerController extends Curd
             // 分期付完
             if ($params['goods_classify'] == 'COMBINE' && $params['order_status_payment'] == 'SUCCESS' && (!empty($paidOrder) && floatval($paidOrder->order_amount_paid) >= $paidOrder->order_amount_total || floatval($params['order_amount_pay']) >= $params['order_amount_total'])) {
                 $params['member_id'] = $params['join_order_member_id'];
+                // 完成订单
+                Event::dispatch('order.complete', $params);
+
                 Event::dispatch('order.new_custom.grant', $params);
             }
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -526,13 +532,11 @@ class NewCustomerController extends Curd
             // 分期付款完成
             if ($params['goods_classify'] == 'COMBINE' && $order->order_status_payment == 'SUCCESS' && floatval($order->order_amount_paid) >= $order->order_amount_total) {
                 $params['member_id'] = $params['join_order_member_id'];
-                Event::dispatch('order.new_custom.grant', $params);
-            }
-
-            if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 完成订单
                 Event::dispatch('order.complete', $params);
+                // 处理分期完成后的操作
+                Event::dispatch('order.new_custom.grant', $params);
             }
-
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
@@ -1150,4 +1154,35 @@ class NewCustomerController extends Curd
             return json_fail('查询失败');
         }
     }
+
+    /**
+     * @Desc 检查产品配置
+     * @Author Gorden
+     * @Date 2024/9/28 15:42
+     *
+     * @param $params
+     * @return void
+     * @throws BusinessException
+     */
+    public function checkGoodsConfig($params)
+    {
+        foreach ($params['goodsContentList'] as $goods) {
+            $goods = Goods::where('goods_id',$goods['goods_id'])->select('goods_attribute_json')->first();
+            if (!empty($goods)){
+                $goodsAttributeJson = json_decode($goods->goods_attribute_json,true);
+                // 不允许分期
+                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_installment'] == 'N'){
+                    if ($params['order_amount_total'] > $params['order_amount_pay']){
+                        throw new BusinessException('不支持分期支付');
+                    }
+                }
+                // 不允许重复购买
+                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_repeat_buy'] == 'N'){
+                    if (Order::where('join_order_member_id',$params['join_order_member_id'])->where('order_classify','COMBINE')->exists()){
+                        throw new BusinessException('仅可购买一次');
+                    }
+                }
+            }
+        }
+    }
 }

+ 6 - 9
app/admin/controller/order/PartnerController.php

@@ -324,7 +324,7 @@ class PartnerController extends Curd
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
-                return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
+                return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
             }
             _syslog("订单", "创建订单成功");
             return json_success('创建订单成功');
@@ -451,7 +451,7 @@ class PartnerController extends Curd
                 // 账户支付的金额
                 $params['order_amount_pay'] = $accountAmount;
             }
-            if ($order->order_status_payment == 'SUCCESS'){
+            if ($order->order_status_payment == 'SUCCESS') {
                 $order->order_amount_paid = $order->order_amount_paid + $params['order_amount_pay'];
                 $order->order_amount_pay = $order->order_amount_paid;
             }
@@ -521,21 +521,18 @@ class PartnerController extends Curd
 
             PayDetail::insert($payData);
 
+            Db::commit();
+
             // 分期付款完成
             if ($params['goods_classify'] == 'PARTNER' && $order->order_status_payment == 'SUCCESS' && floatval($order->order_amount_paid) >= $order->order_amount_total) {
                 $params['member_id'] = $params['join_order_member_id'];
-                Event::dispatch('order.partner.grant', $params);
-            }
-
-            Db::commit();
-
-            if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
+                Event::dispatch('order.partner.grant', $params);
             }
 
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
-                return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
+                return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
             }
             _syslog("订单", "订单支付成功");
             return json_success('支付成功');

+ 34 - 2
app/admin/service/order/CommissionService.php

@@ -10,7 +10,39 @@ use support\Log;
 
 class CommissionService
 {
-
+    /*
+    {
+        "config": {
+            "name": "名称",
+            "valid": 365, //有效天
+            "protocol": 229, //服务协议分类ID
+            "notice":["", ""] //注意事项数组
+        },
+        "goods": {
+            "goods_id": "", //产品ID
+            "goods_sku_id": 0, //产品SKUID
+            "amount": "goods_sales_price" //核算金额字段
+        },
+        "commission": {
+            "direct": 0.2, //直属提成
+            "indirect": 0.1, //间属提成
+            "relate-consum": 0.1, //消费关联提成 带客
+            "invite-non-identity": 0.05, //邀请人非身份会员达成提成
+            "agent-senior-join": 0.05, //中介加盟合伙人提成
+            "agent-senior-strategy": 0.05, //中介战略合伙人提成
+            "account":"CASH" //提成写入账户
+        },
+        "account": {
+            "account":"CASH", //达成金额进入账户 不则为空
+            "added":0.12 //达成金额增值 不则为0
+        },
+        "control": {
+            "notify": "procMemberPartnerExec", //回调函数
+            "if_installment": "N", //是否支持分期
+            "if_commission_out": "Y" //提成是否可提现
+        }
+    }
+     */
     public static function commission($config, $memberId, $orderId, $amount, $accountListCategory)
     {
         Log::info("开始处理提成", ['config' => $config, 'member_id' => $memberId, 'amount' => $amount]);
@@ -39,7 +71,7 @@ class CommissionService
             // 间属提成
             if (!empty($member2) && ($member2->member_is_partner == 'Y' || $member2->member_is_referrer == 'Y')) {
                 $accountListJson['identity'] = MemberService::getIdentity($member2->member_is_partner, $member2->member_is_referrer);
-                $member2CommissionAmount = $config['commission']['direct'] * $amount;
+                $member2CommissionAmount = $config['commission']['indirect'] * $amount;
                 self::commissionToMember($member2->member_id, $accountListJson, $member2CommissionAmount, $accountListCategory);
 
             }

+ 0 - 5
app/event/order/PartnerEvent.php

@@ -2,17 +2,12 @@
 
 namespace app\event\order;
 
-use app\admin\service\coupon\CouponDetailService;
 use app\admin\service\coupon\CouponService;
 use app\admin\service\order\CommissionService;
-use app\model\Coupon;
-use app\model\CouponDetail;
-use app\model\Goods;
 use app\model\Member;
 use app\model\MemberAccount;
 use app\model\PayDetail;
 use app\model\SysConfig;
-use app\model\SysSerial;
 use support\Db;
 use support\exception\BusinessException;
 use support\Log;