getMessage() . ',lien:' . $e->getLine() . ',file:' . $e->getFile()); throw new \Exception($e->getMessage()); } } /** * 余额支付 * @param $orderSn * @param $extra * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function balancePay($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); $user = User::where('id', $order['uid'])->find(); if ($user['now_money'] < $order['pay_price']) { throw new \Exception('余额不足'); } // $order->money = $order['pay_price']; $order->paid = 1; $order->pay_time = time(); if (!$order->save()) { throw new \Exception('订单保存出错'); } if ($order['is_storage'] == 1) { $order->status = 2; UserProductStorageLogic::add($order); } // 减去余额 $user->now_money = bcsub($user['now_money'], $order['pay_price'], 2); $user->save(); if ($order['spread_uid'] > 0 && $user['user_ship'] == 1) { $oldUser = User::where('id', $order['spread_uid'])->value('purchase_funds'); if ($oldUser < $order['pay_price']) { $order['pay_price'] = $oldUser; } } // self::addUserSing($order); $capitalFlowDao = new CapitalFlowLogic($user); $capitalFlowDao->userExpense('user_order_balance_pay', 'order', $order['id'], $order['pay_price'], '', 3, $order['store_id']); self::dealProductLog($order); self::afterPay($order); if ($order['reservation'] == 1 && in_array($order['shipping_type'], [1, 2])) { $checkArr = [ 'cart_id' => $order['cart_id'], 'store_id' => $order['store_id'], ]; self::dealGoodsLeft($checkArr, $order['uid'], $order['id']); } if ($order && $order['store_id'] && $order['reservation'] != 1 && $order['source'] == 1) { $params = [ 'verify_code' => $order['verify_code'], 'store_id' => $order['store_id'], 'staff_id' => $order['staff_id'] ]; OrderLogic::writeOff($params); } if (in_array($order['shipping_type'], [1, 2])) { PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); } return true; // Redis::send('push-platform-print', ['id' => $order['id']], 60); } /** * 礼品券支付 * @param $orderSn * @param $extra * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function gift_pay($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); $user = User::where('id', $order['uid'])->find(); if ($user['integral'] < $order['pay_price']) { throw new \Exception('礼品券不足'); } $order->money = $order['pay_price']; $order->paid = 1; $order->pay_time = time(); if (!$order->save()) { throw new \Exception('订单保存出错'); } // 减去礼品券 $user->integral = bcsub($user['integral'], $order['pay_price'], 2); $user->save(); //入礼品券表扣款记录 $sing = [ 'uid' => $order['uid'], 'order_id' => $order['order_id'], // 'title' => '订单扣除兑换券', 'title' => 5, 'financial_pm' => 0, 'status' => 1, 'store_id' => $order['store_id'], 'number' => $order['pay_price'], 'user_ship' => $user['user_ship'], ]; UserSign::create($sing); self::dealProductLog($order); } /** * 采购款支付 * @param $orderSn * @param $extra * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function purchase_funds($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); $user = User::where('id', $order['uid'])->find(); if ($user['purchase_funds'] < $order['pay_price']) { throw new \Exception('采购款不足'); } $order->money = $order['pay_price']; $order->paid = 1; $order->pay_time = time(); if (!$order->save()) { throw new \Exception('订单保存出错'); } if ($order['is_storage'] == 1) { $order->status = 2; UserProductStorageLogic::add($order); } // 减去采购款 $user->purchase_funds = bcsub($user['purchase_funds'], $order['pay_price'], 2); $user->save(); $capitalFlowDao = new CapitalFlowLogic($user); $capitalFlowDao->userExpense('user_order_purchase_pay', 'order', $order['id'], $order['pay_price'], '', 18, $order['store_id']); // if ($user['user_ship'] == 1) { // self::dealVipAmount($order, PayEnum::PURCHASE_FUNDS); // } // self::addUserSing($order); self::afterPay($order); if ($order && $order['store_id'] && $order['reservation'] != 1 && $order['source'] == 1) { $params = [ 'verify_code' => $order['verify_code'], 'store_id' => $order['store_id'], 'staff_id' => $order['staff_id'] ]; OrderLogic::writeOff($params); } self::dealProductLog($order); if ($order['reservation'] == 1 && in_array($order['shipping_type'], [1, 2])) { $checkArr = [ 'cart_id' => $order['cart_id'], 'store_id' => $order['store_id'], ]; self::dealGoodsLeft($checkArr, $order['uid'], $order['id']); } // Redis::send('push-platform-print', ['id' => $order['id']], 60); if (in_array($order['shipping_type'], [1, 2])) { PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); } } /** * @notes 微信通用回调 * @param $orderSn * @param array $extra * @date 2023/2/27 15:28 */ public static function wechat_common($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { return true; } $order->status = 1; $order->paid = 1; $order->pay_time = time(); if ($order['is_storage'] == 1) { $order->status = 2; UserProductStorageLogic::add($order); } if ($order->pay_type != 10) { $order->pay_price = bcdiv($extra['amount']['payer_total'], 100, 2); } else { $extra['transaction_id'] = time(); } $user = User::where('id', $order['uid'])->find(); if ($order->pay_type == OrderEnum::CASHIER_ORDER_PAY || $order->pay_type == OrderEnum::CASHIER_ORDER_ALI_PAY) { //收银台支付 $order->status = 2; } else { $capitalFlowDao = new CapitalFlowLogic($user); //微信支付和用户余额无关 $capitalFlowDao->userExpense('user_order_pay', 'order', $order['id'], $order->pay_price, '', 0, $order['store_id']); } $order->save(); if ($order['reservation'] == 1 && in_array($order['shipping_type'], [1, 2])) { $checkArr = [ 'cart_id' => $order['cart_id'], 'store_id' => $order['store_id'], ]; self::dealGoodsLeft($checkArr, $order['uid'], $order['id']); } self::afterPay($order, $extra['transaction_id']); // self::addUserSing($order); self::dealProductLog($order); if (!empty($extra['payer']['openid']) && $order->pay_type == 7) { Redis::send('push-delivery', ['order_id' => $order['order_id'], 'openid' => $extra['payer']['openid'], 'logistics_type' => 4]); } if ($order['pay_type'] == 9) { Db::name('wechat_micropay')->where(['order_id' => $order['order_id']])->delete(); PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'cash_register', 'msg' => '您有一笔订单已支付', 'data' => $extra]); } return true; } //退款 public static function refund($orderSn, $extra = []) { //更新状态 $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->status == OrderEnum::REFUND_PAY) { //充值 $orderRe = UserRecharge::where('order_id', $orderSn)->findOrEmpty(); if ($orderRe->isEmpty() || $orderRe->status == -1) { return true; } $orderRe->status = -1; $orderRe->refund_price = $orderRe->price; $orderRe->refund_time = time(); $orderRe->remarks = ''; $orderRe->save(); $purchase_funds = User::where('id', $orderRe['uid'])->value('purchase_funds'); $user = User::where('id', $orderRe['uid'])->find(); $capitalFlowDao = new CapitalFlowLogic($user); if ($purchase_funds >= $orderRe['price']) { User::where('id', $orderRe['uid'])->dec('purchase_funds', $orderRe['refund_price'])->update(); $capitalFlowDao->userExpense('user_balance_recharge_refund', 'order', $orderRe['id'], $orderRe['refund_price'], '', 0, $orderRe['store_id']); } else { User::where('id', $orderRe['uid'])->dec('purchase_funds', $purchase_funds)->update(); $capitalFlowDao->userExpense('user_balance_recharge_refund', 'order', $orderRe['id'], $purchase_funds, '', 0, $orderRe['store_id']); } //退还 充值得兑换券 UserSignLogic::RefundRecharge($orderRe); return true; } $order->status = OrderEnum::REFUND_PAY; $order->refund_status = OrderEnum::REFUND_STATUS_FINISH; $order->refund_price = bcdiv($extra['amount']['refund'], 100, 2); $order->refund_reason_time = time(); $order->refund_num += 1; $order->save(); // $deal_money = bcdiv($extra['amount']['refund'], 100, 2); //对应比例得退礼品券逻辑 // $discount = self::getDiscount($user->user_ship); // $total_price = bcmul($order->refund_price, $discount, 2); //订单购物详情 StoreOrderCartInfo::where('oid', $order['id'])->update(['status' => OrderEnum::REFUND_STATUS_FINISH]); //处理财务流水退还 (new StoreFinanceFlowLogic())->store_finance_back($orderSn); if (in_array($order['pay_type'], [PayEnum::BALANCE_PAY, PayEnum::PURCHASE_FUNDS])) { if ($order['pay_type'] == PayEnum::BALANCE_PAY) { //用户余额支付 $user = User::where('id', $order['uid'])->findOrEmpty(); $capitalFlowDao = new CapitalFlowLogic($user); $user->now_money = bcadd($user['now_money'], $order['pay_price'], 2); $user->save(); //增加数量 self::addStock($order['id']); //退款 $capitalFlowDao->userIncome('system_balance_add', 'system_back', $order['id'], $order['pay_price']); } if ($order['pay_type'] == PayEnum::PURCHASE_FUNDS) { //采购款支付 $user = User::where('id', $order['uid'])->findOrEmpty(); $capitalFlowDao = new CapitalFlowLogic($user); $user->purchase_funds = bcadd($user['purchase_funds'], $order['pay_price'], 2); $user->save(); //增加数量 self::addStock($order['id']); //退款 $capitalFlowDao->userIncome('system_purchase_back', 'system_back', $order['id'], $order['pay_price']); } UserSignLogic::RefundOrder($order); return true; } //积分 UserSignLogic::RefundOrder($order); //微信日志 user_order_refund $user = User::where('id', $order['uid'])->findOrEmpty(); $capitalFlowDao = new CapitalFlowLogic($user); $capitalFlowDao->userIncome('user_order_refund', 'system_back', $order['id'], $order['pay_price'], '', 1); self::addStock($order['id']); //微信 return true; // self::afterPay($order,$extra['transaction_id']); } /** * 现金退款相关 * @param $orderSn * @param $extra * @return true * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function cash_refund($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->status == OrderEnum::REFUND_PAY) { return true; } $order->refund_status = OrderEnum::REFUND_STATUS_FINISH; $order->refund_price = $order->pay_price; $order->refund_reason_time = time(); $order->refund_num += 1; $order->save(); //日志记录 $model = new StoreCashFinanceFlow(); $model->store_id = $order['store_id'] ?? 0; $model->cash_price = $order->pay_price; $model->receivable = $order->pay_price; $model->remark = '退款'; $model->type = 1; $model->status = YesNoEnum::YES; $model->save(); //增加数量 self::addStock($order['id']); StoreOrderCartInfo::where('oid', $order['id'])->update(['status' => OrderEnum::REFUND_STATUS_FINISH]); return true; } /** * 充值现金退款相关 * @param $orderId * @param $extra * @return true */ public static function recharge_cash_refund($orderId, $extra = []) { $order = UserRecharge::where('id', $orderId)->findOrEmpty(); if ($order->isEmpty() || $order->status == -1) { return true; } $order->status = -1; $order->refund_price = $order->price; $order->refund_time = time(); $order->remarks = ''; $order->save(); return true; } /** * 充值 */ public static function recharge($orderSn, $extra = [], $type = 'wechat') { $order = UserRecharge::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { return true; } if ($type == 'wechat') { $price = bcdiv($extra['amount']['payer_total'], 100, 2); } else { $price = $extra['buyer_pay_amount']; } $order->price = $price; $order->paid = 1; $order->pay_time = time(); $order->save(); $uid = $order->uid; $user = User::where('id', $uid)->findOrEmpty(); //check store_id if ($user->store_id == 0) { $user->store_id = $order['store_id']; } //用户的财务add $capitalFlowDao = new CapitalFlowLogic($user); $capitalFlowDao->userIncome('user_balance_recharge', 'user_recharge', $order['id'], $price, [], 1); if ($user->isEmpty()) { return true; } bcscale(2); UserSignLogic::dealRechargeFrozen($user, $order, $order['user_ship']); //更新等级 $user->user_ship = $order['user_ship']; if ($user['vip_time'] == null) { $user->vip_time = time(); } $user->purchase_funds = bcadd($user->purchase_funds, $price, 2); $user->total_recharge_amount = bcadd($user->total_recharge_amount, $price, 2); $user->save(); if ($order['other_uid'] > 0) { $uid = $order['other_uid']; } PushService::push('wechat_mmp_' . $uid, $uid, ['type' => 'INDUSTRYMEMBERS', 'msg' => '订单支付成功', 'data' => ['id' => $order['id'], 'paid' => 1]]); PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'INDUSTRYMEMBERS', 'msg' => '订单支付成功', 'data' => ['id' => $order['id'], 'paid' => 1]]); if (!empty($extra['payer']['openid'])) { Redis::send('push-delivery', ['order_id' => $order['order_id'], 'openid' => $extra['payer']['openid'], 'logistics_type' => 3]); } Db::name('wechat_micropay')->where(['order_id' => $order['order_id']])->delete(); return true; } /** * 现金支付 */ public static function cash_pay($orderSn) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { return true; } $order->paid = 1; $order->pay_time = time(); $order->status = 2; if ($order['reservation'] == 1) { $order->status = 1; } if (!$order->save()) { throw new \Exception('订单保存出错'); } self::afterPay($order); if ($order['is_storage'] == 1) { UserProductStorageLogic::add($order); } $cashFlowLogic = new CashFlowLogic(); $cashFlowLogic->insert($order['store_id'], $order['pay_price']); self::dealProductLog($order); if ($order && $order['store_id'] && $order['reservation'] != 1) { $params = [ 'verify_code' => $order['verify_code'], 'store_id' => $order['store_id'], 'staff_id' => $order['staff_id'] ]; OrderLogic::writeOff($params); } // Redis::send('push-platform-print', ['id' => $order['id']]); return true; } /** * @notes 阿里回调 * @param $orderSn * @param array $extra * @author 段誉 * @date 2023/2/27 15:28 */ public static function alipay_cashier($orderSn, $extra = []) { $order = StoreOrder::where('order_id', $orderSn)->findOrEmpty(); if ($order->isEmpty() || $order->paid == PayEnum::ISPAID) { return true; } if ($order->pay_type != 10) { $order->money = $extra['buyer_pay_amount']; $order->paid = 1; $order->pay_time = time(); $order->status = 1; } else { $extra['transaction_id'] = time(); } if ($order->pay_type == 13) { $order->status = 2; // UserProductStorageLogic::add($order); } $order->save(); self::afterPay($order); self::dealProductLog($order); // if ($order->pay_type == 9) { // $extra['create_time'] = $order['create_time']; PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'cash_register', 'msg' => '您有一笔订单已支付', 'data' => $extra]); // Redis::send('push-platform-print', ['id' => $order['id']]); // } // else { // PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); // } if ($order->pay_type == 13) { $params = [ 'verify_code' => $order['verify_code'], 'store_id' => $order['store_id'], 'staff_id' => $order['staff_id'] ]; OrderLogic::writeOff($params); } return true; } /** * 支付后逻辑 * @param $order * @return void */ public static function afterPay($order, $transaction_id = 0) { StoreOrderCartInfo::where('oid', $order['id'])->update(['is_pay' => 1]); $financeLogic = new StoreFinanceFlowLogic(); $off_activity = Config::where('name', 'off_activity')->value('value'); $village_uid = 0; $brigade_uid = 0; $user_ship = 0; $order['dealVipAmount'] = 0; try { if ($order['uid'] != 1) { Redis::send('order_wetcha_push_send', ['order' => $order]); } } catch (\Exception $e) { Log::error('订单推送失败:' . $e->getMessage()); // 异常处理代码,例如记录日志或发送通知等。 } if ($order['uid'] > 0) { // 结算金额 要支付的钱减去冻结得钱去走后面得逻辑 发得兑换券也要去减去 //用户下单该用户等级为1得时候才处理冻结金额 $user = User::where('id', $order['uid'])->find(); $user_ship = $user['user_ship']; } //积分写入 if (isset($user) && $user['user_ship'] == 0) { UserSignLogic::OrderWrite($order); } if ($off_activity == 1) { //-----活动价结算更改 $financeLogic->order = $order; $financeLogic->user = ['uid' => $order['uid']]; $financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::USER_ORDER_PAY, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //用户订单支付 $financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); $financeLogic->out($transaction_id, $order['pay_price'], OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); $financeLogic->save(); return false; } //如果是会员需要返回会员金额 // if ($user_ship>0 && $order['pay_type'] != PayEnum::CASH_PAY && $off_activity !=1) { // $order['dealVipAmount']= self::dealVipAmount($order, $order['pay_type']); // } if ($order['spread_uid'] > 0 || $user_ship > 0) { if ($order['spread_uid'] > 0 && $user_ship == 0) { $user_ship = User::where('id', $order['spread_uid'])->value('user_ship'); if ($user_ship == 2) { $village_uid = $order['spread_uid']; $address = UserAddress::where(['uid' => $order['spread_uid'], 'is_default' => 1])->find(); if ($address) { $arr2 = UserAddress::where(['village' => $address['village'], 'brigade' => $address['brigade'], 'is_default' => 1])->column('uid'); if ($arr2) { $brigade_uid = User::where('id', 'in', $arr2)->where('user_ship', 3)->value('id') ?? 0; } } } elseif ($user_ship == 3) { $brigade_uid = $order['spread_uid']; $address = UserAddress::where(['uid' => $order['spread_uid'], 'is_default' => 1])->find(); if ($address) { $arr1 = UserAddress::where(['village' => $address['village'], 'is_default' => 1])->column('uid'); if ($arr1) { $village_uid = User::where('id', 'in', $arr1)->where('user_ship', 2)->value('id') ?? 0; } } } else { $address = UserAddress::where(['uid' => $order['spread_uid'], 'is_default' => 1])->find(); if ($address) { $arr1 = UserAddress::where(['village' => $address['village'], 'is_default' => 1])->column('uid'); if ($arr1) { $village_uid = User::where('id', 'in', $arr1)->where('user_ship', 2)->value('id') ?? 0; } $arr2 = UserAddress::where(['village' => $address['village'], 'brigade' => $address['brigade'], 'is_default' => 1])->column('uid'); if ($arr2) { $brigade_uid = User::where('id', 'in', $arr2)->where('user_ship', 3)->value('id') ?? 0; } } } } else { //查询用户对应的村长和队长 $address = UserAddress::where(['uid' => $order['uid'], 'is_default' => 1])->find(); if ($address) { $arr1 = UserAddress::where(['village' => $address['village'], 'is_default' => 1])->column('uid'); if ($arr1) { $village_uid = User::where('id', 'in', $arr1)->where('user_ship', 2)->value('id') ?? 0; } $arr2 = UserAddress::where(['village' => $address['village'], 'brigade' => $address['brigade'], 'is_default' => 1])->column('uid'); if ($arr2) { $brigade_uid = User::where('id', 'in', $arr2)->where('user_ship', 3)->value('id') ?? 0; } } } if (isset($user) && $order['store_id'] == getenv('ACTIVITY_STORE_ID') && !in_array($user['user_ship'], [4, 6, 7])) { try { $info = StoreOrderCartInfo::where('oid', $order['id'])->field('store_id,product_id,cart_num')->select(); $comm = new CommissionProductLogic(); foreach ($info as $k => $v) { $comm->calculate_product_flow($v, $order, $village_uid, $brigade_uid, $user_ship); } CommissionnLogic::setStore($order, $village_uid, $brigade_uid, $transaction_id); return true; } catch (\Exception $e) { Log::error('活动分润报错' . $e->getMessage()); return false; } } switch ($user_ship) { case 1: // 厨师 //case 4: // 商户 //case 5: // 种养殖 // case 6: // 酒店 // case 7: // 食堂 case 8: // 一条龙 CommissionLogic::setCook($order, $village_uid, $brigade_uid, $transaction_id); break; case 2: // 村长 CommissionLogic::setVillage($order, $village_uid, $brigade_uid, $transaction_id); break; case 3: // 队长 CommissionLogic::setBrigade($order, $village_uid, $brigade_uid, $transaction_id); break; default: CommissionLogic::setStore($order, $transaction_id); break; } } else { if (isset($user) && $order['store_id'] == getenv('ACTIVITY_STORE_ID') && !in_array($user['user_ship'], [4, 6, 7])) { try { $info = StoreOrderCartInfo::where('oid', $order['id'])->field('store_id,product_id,cart_num')->select(); $comm = new CommissionProductLogic(); foreach ($info as $k => $v) { $comm->calculate_product_flow($v, $order, $village_uid, $brigade_uid, $user_ship); } CommissionnLogic::setStore($order, $village_uid, $brigade_uid, $transaction_id); return true; } catch (\Exception $e) { Log::error('活动分润报错' . $e->getMessage()); return false; } } CommissionLogic::setStore($order, $transaction_id); } } /** * 回调日志 * @param $order * @param $extra * @return void */ public static function notifyLog($order, $extra) { $data = [ 'pay_type' => 'wechat', 'type' => OrderEnum::PAY, 'amount' => $extra['amount']['payer_total'], //分 'order_sn' => $order, 'out_trade_no' => $extra['transaction_id'], 'attach' => $extra['attach'], 'create_time' => date('Y-m-d H:i:s', time()), ]; PayNotify::create($data); } /** * 冻结金额 * @param $oid * @return int|mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function dealFrozenPrice($oid) { $detail = StoreOrderCartInfo::where('oid', $oid)->select()->toArray(); $total_vip = 0; foreach ($detail as $value) { $total_vip += $value['cart_info']['vip_frozen_price']; } return $total_vip; } /** * 处理用户为vip1时得冻结资金 * @param $order * @param $pay_type * @param $transaction_id * @return true * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function dealVipAmount($order, $pay_type = 1, $transaction_id = 0) { $total_vip = self::dealFrozenPrice($order['id']); $data = [ 'order_id' => $order['id'], 'transaction_id' => $transaction_id ?? 0, 'order_sn' => $order['order_id'], 'user_id' => $order['uid'], 'number' => $total_vip, 'all' => $order['pay_price'], 'pay_type' => $pay_type ?? 1, 'status' => 0, 'store_id' => $order['store_id'], 'staff_id' => $order['staff_id'], 'create_time' => time() ]; Db::name('vip_flow')->insert($data); return $total_vip; } /** * 商品统计逻辑 * @param $order * @return true * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function dealProductLog($order) { $store_id = $order['store_id']; $cart_id = $order['cart_id']; $uid = $order['uid']; if ($uid && $cart_id && $store_id) { $cart_id = explode(',', $cart_id); $productLog = StoreProductLog::where([ 'uid' => $uid ])->whereIn('cart_id', $cart_id) ->select()->toArray(); foreach ($productLog as &$value) { $value['pay_uid'] = $uid; $value['oid'] = $order['id']; $value['store_id'] = $store_id; $cart_info = StoreOrderCartInfo::where([ 'uid' => $uid, 'old_cart_id' => $value['cart_id'], 'oid' => $value['oid'] ])->find(); $value['order_num'] = $cart_info['cart_num'] ?? 1; $value['pay_num'] = $cart_info['cart_num'] ?? 1; $value['pay_price'] = $cart_info['price'] ?? 0; $value['cost_price'] = $cart_info['cart_info']['cost'] ?? 0; $value['update_time'] = time(); unset($value['create_time'], $value['delete_time']); } (new StoreProductLog())->saveAll($productLog); } return true; } public static function descSwap($oid) { $updateData = []; $goods_list = StoreOrderCartInfo::where('oid', $oid)->select()->toArray(); foreach ($goods_list as $v) { $StoreBranchProduct = StoreBranchProduct::where( [ 'store_id' => $v['store_id'], 'product_id' => $v['product_id'], ] )->withTrashed()->find(); $updateData[] = [ 'id' => $StoreBranchProduct['id'], 'swap' => $StoreBranchProduct['swap'] - $v['cart_num'], 'sales' => ['inc', $v['cart_num']] ]; } (new StoreBranchProduct())->saveAll($updateData); } /** * 加库存 * @param $oid * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function addStock($oid) { $updateData = []; $goods_list = StoreOrderCartInfo::where('oid', $oid)->select()->toArray(); foreach ($goods_list as $v) { $StoreBranchProduct = StoreBranchProduct::where( [ 'store_id' => $v['store_id'], 'product_id' => $v['product_id'], ] )->withTrashed()->find(); if ($StoreBranchProduct) { $updateData[] = [ 'id' => $StoreBranchProduct['id'], 'stock' => $StoreBranchProduct['stock'] + $v['cart_num'], // 'sales' => ['inc', $v['cart_num']] // 'sales' => ['inc', $v['cart_num']] ]; } } (new StoreBranchProduct())->saveAll($updateData); } /** * 处理商品缺失新增到缺失列表 * @param $cart_id //购物车ids * @param $uid //用户id * @param $oid //订单id * @return void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function dealGoodsLeft($cart_id, $uid, $oid) { if (is_array($cart_id)) { $cart_id['cart_id'] = $cart_id; } else { $cart_id['cart_id'] = explode(',', $cart_id); } $data = OrderLogic::checkLeft($cart_id, $uid, 1); $format = $data['detail']; foreach ($format as &$value) { $value['oid'] = $oid; $value['create_time'] = time(); } Db::name('store_product_miss')->insertAll($format); } /** * 会员等级对应得折扣比例 * @param $level * @return float|mixed */ public static function getDiscount($level) { switch ($level) { case 0: //普通 return Config::where('name', 'ordinary_member')->value('value') ?? 0.1; case 1: //vip return Config::where('name', 'vip_member')->value('value') ?? 0.1; case 4: //商户 return Config::where('name', 'merchant')->value('value') ?? 0.1; default: return 0.1; } } }