diff --git a/app/api/logic/order/OrderLogic.php b/app/api/logic/order/OrderLogic.php index e033c3815..50ebcfd5e 100644 --- a/app/api/logic/order/OrderLogic.php +++ b/app/api/logic/order/OrderLogic.php @@ -15,6 +15,7 @@ use app\common\model\dict\DictData; use app\common\model\dict\DictType; use app\common\model\order\Cart; use app\common\model\store_branch_product\StoreBranchProduct; +use app\common\model\store_finance_flow\StoreFinanceFlow; use app\common\model\store_order\StoreOrder; use app\common\model\store_order_cart_info\StoreOrderCartInfo; use app\common\model\store_product\StoreProduct; @@ -405,10 +406,11 @@ class OrderLogic extends BaseLogic */ public static function writeOff($params): bool { - $data = StoreOrder::with('store')->where([ + $order = StoreOrder::with('store')->where([ 'verify_code' => $params['verify_code'] ])->find(); - if (empty($data)) { + if (empty($order)) { + self::setError('订单不存在'); return false; } Db::startTrans(); @@ -420,7 +422,7 @@ class OrderLogic extends BaseLogic 'update_time' => time(), 'store_id' => $params['store_id'], 'staff_id' => $params['staff_id']??0, - ], ['id' => $data['id']]); + ], ['id' => $order['id']]); (new StoreOrderCartInfo())->update([ 'verify_code'=>$params['verify_code'].'-1', 'writeoff_time' => time(), @@ -428,20 +430,33 @@ class OrderLogic extends BaseLogic 'store_id' => $params['store_id'], 'staff_id' => $params['staff_id']??0, 'update_time' => time(), - ], ['oid' => $data['id']]); + ], ['oid' => $order['id']]); // $financeFlow = (new StoreFinanceFlowLogic)->getStoreOrder($data['id'], $data['store_id']); // if (!empty($financeFlow)) { // $capitalFlowLogic = new CapitalFlowLogic($data->store, 'store'); // $capitalFlowLogic->storeIncome('store_order_income', 'order', $data['id'], $financeFlow['number']); // } - $order=StoreOrder::where('id',$data['id'])->find(); - // PayNotifyLogic::afterPay($order); PayNotifyLogic::descStock($order['id']); - if($order['uid'] && $order['total_price'] >= 500){ + $financeFlow=new StoreFinanceFlow(); + $financeFlowLogic=new StoreFinanceFlowLogic(); + $select_1=$financeFlow->where(['order_id'=>$order['id'],'financial_pm'=>1,'financial_type'=>['in'=>14,15],'other_uid'=>['>'=>0]])->select(); + foreach($select_1 as $k=>$v){ + $financeFlowLogic->updateStatusUser($v['id'],$v['other_uid'],$v['number'],$v['order_id']); + } + if($order['uid'] && $order['pay_price'] >= 500){ $user_number = bcmul($order['pay_price'], '0.10', 2); User::where('id', $order['uid'])->inc('integral', $user_number)->update(); UserSign::where(['uid' => $order['uid'],'order_id' => $order['order_id']])->update(['status'=>1]); } + if ($order['spread_uid'] > 0) { + $spread_number=$financeFlow->where(['order_id'=>$order['id'],'financial_pm'=>1,'financial_type'=>12,'other_uid'=>$order['spread_uid']])->value('number'); + if($spread_number){ + $financeFlowLogic->updateStatusUser($v['id'],$order['spread_uid'],$spread_number,$v['order_id']); + } + } + $deposit=$financeFlow->where(['order_id'=>$order['id'],'financial_pm'=>1,'financial_type'=>11])->value('number'); + $money=$financeFlow->where(['order_id'=>$order['id'],'financial_pm'=>1,'financial_type'=>2])->value('number'); + $financeFlowLogic->updateStatusStore($v['id'],$order['store_id'],$money,$deposit); Db::commit(); return true; diff --git a/app/common/logic/PayNotifyLogic copy.php b/app/common/logic/PayNotifyLogic copy.php new file mode 100644 index 000000000..fac778279 --- /dev/null +++ b/app/common/logic/PayNotifyLogic copy.php @@ -0,0 +1,999 @@ +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'], '', 0, $order['store_id']); + self::dealProductLog($order); +// if ($order['shipping_type'] == 3) { +// self::descStock($order['id']); +// } + self::afterPay($order); + if ($extra && $extra['store_id']) { + $params = [ + 'verify_code' => $order['verify_code'], + 'store_id' => $extra['store_id'], + 'staff_id' => $extra['staff_id'] + ]; + OrderLogic::writeOff($params); + } + // Redis::send('push-platform-print', ['id' => $order['id']], 60); + // PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); + } + + /** + * 礼品券支付 + * @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' => '订单扣除兑换券', + 'store_id' => $order['store_id'], + 'number' => $order['pay_price'], + 'financial_pm' => 0, + 'user_ship' => $user['user_ship'], + ]; + (new UserSign())->saveAll($sing); + + if ($extra && $extra['store_id']) { + $params = [ + 'verify_code' => $order['verify_code'], + 'store_id' => $extra['store_id'], + 'staff_id' => $extra['staff_id'] + ]; + OrderLogic::lessWriteOff($params); + } + 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'], '', 1, $order['store_id']); + // if ($user['user_ship'] == 1) { + // self::dealVipAmount($order, PayEnum::PURCHASE_FUNDS); + // } + // self::addUserSing($order); + self::afterPay($order); + if ($extra && $extra['store_id']) { + $params = [ + 'verify_code' => $order['verify_code'], + 'store_id' => $extra['store_id'], + 'staff_id' => $extra['staff_id'] + ]; + OrderLogic::writeOff($params); + } + self::dealProductLog($order); + // if($order['shipping_type'] == 3){ + // self::descStock($order['id']); + // } + + + // Redis::send('push-platform-print', ['id' => $order['id']], 60); + // 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, '', 1, $order['store_id']); + } + $order->save(); + self::afterPay($order, $extra['transaction_id']); + // self::addUserSing($order); + self::dealProductLog($order); + if ($order['shipping_type'] == 3) { + self::descStock($order['id']); + } + if (!empty($extra['payer']['openid']) && $order->pay_type == 7) { + Redis::send('push-delivery', ['order_id' => $order['order_id'], 'openid' => $extra['payer']['openid']], 4); + } + 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(); + + 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(); + //日志记录 + //加用户余额,采购款, 日志记录 加数量 + $user = User::where('id', $order['uid'])->findOrEmpty(); + $capitalFlowDao = new CapitalFlowLogic($user); + $deal_money = bcdiv($extra['amount']['refund'], 100, 2); + $check_user_sing = UserSign::where('order_id',$order['order_id'])->count(); + if (in_array($order['pay_type'], [PayEnum::BALANCE_PAY, PayEnum::PURCHASE_FUNDS])) { + if ($order['pay_type'] == PayEnum::BALANCE_PAY) { //用户余额 + $user->now_money = bcadd($user->now_money, $deal_money, 2); + $user->save(); + //增加数量 + self::addStock($order['id']); + //退款 + $capitalFlowDao->userIncome('system_balance_back', 'system_back', $order['id'], $deal_money); + } + if ($order['pay_type'] == PayEnum::PURCHASE_FUNDS) { //采购款 + $user->purchase_funds = bcadd($user->purchase_funds, $deal_money, 2); + $user->save(); + //增加数量 + self::addStock($order['id']); + //退款 + $capitalFlowDao->userIncome('system_purchase_back', 'system_back', $order['id'], $deal_money); + } + if($check_user_sing){ + self::descUserSing($order); + } + return true; + } + //积分 + if($check_user_sing){ + self::descUserSing($order); + } + //微信日志 user_order_refund + $capitalFlowDao->userIncome('user_order_refund', 'system_back', $order['id'], $deal_money, '', 1); + //处理财务流水退还 + self::store_finance_back($orderSn); + self::addStock($order['id']); //微信 + return true; + // self::afterPay($order,$extra['transaction_id']); + } + + //退积分 + public static function descUserSing($order) + { + $user_sing = new UserSign(); + if ($order['uid'] > 0 ) { + $user_number = bcmul($order['refund_price'], '0.10', 2); + $sing = [ + 'uid' => $order['uid'], + 'order_id' => $order['order_id'], + 'title' => '退款扣除兑换券', + 'financial_pm' => 0, + 'store_id' => $order['store_id'], + 'number' => $user_number, + ]; + $user_sing->save($sing); + $now_int = User::where('id',$order['uid'])->find(); + if($now_int){ + if($now_int['integral'] > $user_number){ + User::where('id',$order['uid'])->dec('integral',$user_number)->update(); + }else{ + User::where('id',$order['uid'])->dec('integral',$now_int['integral'])->update(); + } + + } + } + return true; + + } + + + + /** + * 财务退还金额相关 + * @param $orderSn + * @return void + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public static function store_finance_back($orderSn) + { + $data = StoreFinanceFlow::where('order_sn', $orderSn) + ->where(['financial_pm' => 1]) + ->select()->toArray(); + foreach ($data as &$value) { + unset($value['id']); + $value['financial_record_sn'] = (new StoreFinanceFlowLogic)->getSn(); + $value['financial_pm'] = 0; + $value['financial_type'] = OrderEnum::PAY_BACK; + $value['create_time'] = time(); + } + (new StoreFinanceFlow)->saveAll($data); + } + + /** + * 现金退款相关 + * @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']); + 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 addUserSing($order) + { + $user_sing = new UserSign(); + if ($order['uid'] > 0 && $order['total_price'] >= 500) { + $user_number = bcmul($order['pay_price'], '0.10', 2); + $sing = [ + 'uid' => $order['uid'], + 'order_id' => $order['order_id'], + 'title' => '购买商品获得兑换券', + 'financial_pm' => 1, + 'store_id' => $order['store_id'], + 'number' => $user_number, + ]; + $user_sing->save($sing); + } + 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(); + //用户的财务add + $capitalFlowDao = new CapitalFlowLogic($user); + $capitalFlowDao->userIncome('user_balance_recharge', 'user_recharge', $order['id'], $price); + + if ($user->isEmpty()) { + return true; + } + bcscale(2); + // $user->now_money = bcadd($user->now_money, $price, 2);//v.1 + //更新等级 + if ($price >= Config::where('name','recharge')->value('value')) { + $user->user_ship = 1; //v.1 + } + $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], 4); + } + 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->save()) { + throw new \Exception('订单保存出错'); + } + self::afterPay($order); + $cashFlowLogic = new CashFlowLogic(); + $cashFlowLogic->insert($order['store_id'], $order['pay_price']); + self::dealProductLog($order); + if ($order['shipping_type'] == 3) { + self::descStock($order['id']); + } + // 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; + $order->save(); + } else { + $extra['transaction_id'] = time(); + } + if ($order->pay_type == 9) { + $order->status = 2; + self::afterPay($order); + } + self::dealProductLog($order); + if ($order['shipping_type'] == 3) { + self::descStock($order['id']); + } + + // 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' => '您有一笔新的订单']); + // } + return true; + } + + /** + * 支付后逻辑 + * @param $order + * @return void + */ + public static function afterPay($order, $transaction_id = 0) + { + $financeLogic = new StoreFinanceFlowLogic(); + $user_sing = new UserSign(); + $off_activity = Config::where('name', 'off_activity')->value('value'); + 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']); + if ($order['uid'] > 0 && $order['total_price'] > 500 && $order['pay_type'] !=18 + && $order['pay_type'] !=3) { + $user_number = bcmul($order['pay_price'], '0.10', 2); + $sing = [ + 'uid' => $order['uid'], + 'order_id' => $order['order_id'], + 'title' => '购买商品获得兑换券', + 'financial_pm' => 1, + 'store_id' => $order['store_id'], + 'number' => $user_number, + ]; + $user_sing->save($sing); + } + return false; + } + $vipFen = 0; + if ($order['uid'] > 0) { + // 结算金额 要支付的钱减去冻结得钱去走后面得逻辑 发得兑换券也要去减去 + //用户下单该用户等级为1得时候才处理冻结金额 + $user = User::where('id', $order['uid'])->find(); + //纯在分销关系的时候要去判断分销出来的用户的采购款的额度 (只有会员按照这个逻辑拆分,其余的还是按照正常的支付金额) + if ($order['spread_uid'] > 0) { + $oldUser = User::where('id', $order['spread_uid'])->field('purchase_funds,user_ship')->find(); + if ($oldUser && $oldUser['user_ship'] == 1) { + if ($oldUser['purchase_funds'] < $order['pay_price']) { + $vipFen = $oldUser['purchase_funds']; + } + } + } elseif ($user['user_ship'] == 1 && $order['pay_type'] != PayEnum::CASH_PAY) { + $vipFrozenAmount = self::dealFrozenPrice($order['id']); + //为1的时候要去减活动价 + // $final_price = bcsub($order['pay_price'],$order['deduction_price'],2); + // d($final_price,$vipFrozenAmount); + $order['pay_price'] = bcsub($order['pay_price'], $vipFrozenAmount, 2); + self::dealVipAmount($order, $order['pay_type']); + } + if($order['total_price'] > 500 && $order['pay_type'] !=18 + && $order['pay_type'] !=3){ + $user_number = bcmul($order['pay_price'], '0.10', 2); + $sing = [ + 'uid' => $order['uid'], + 'order_id' => $order['order_id'], + 'title' => '购买商品获得兑换券', + 'financial_pm' => 1, + 'store_id' => $order['store_id'], + 'number' => $user_number, + 'status' => 0, + ]; + $user_sing->save($sing); + } + + // User::where('id', $order['uid'])->inc('integral', $user_number)->update(); + } + + + $financeLogic->order = $order; + $financeLogic->user = ['uid' => $order['uid']]; + // if ($order->pay_type != 9 || $order->pay_type != 10) { + $financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::USER_ORDER_PAY, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //用户订单支付 + $count_frees = 0; + + //平台手续费 + $fees = bcdiv(bcmul($order['pay_price'], '0.02', 2), 1, 2); + $count_frees = bcadd($count_frees, $fees, 2); + if ($fees > 0) { + $financeLogic->in($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 + $financeLogic->out($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //商户平台手续费支出 + } + // $frozen = bcsub($order->profit, $fees, 2); + //缴纳齐全了就加商户没有就加到平台 + $money_limt = SystemStore::where('id', $order['store_id'])->field('paid_deposit,security_deposit')->find(); + $deposit = bcsub($money_limt['security_deposit'], $money_limt['paid_deposit'], 2); //保证金剩余额度 + $store_profit = bcdiv(bcmul($order['pay_price'], '0.05', 2), 1, 2); + $count_frees = bcadd($count_frees, $store_profit, 2); + if ($deposit > 0) { + if ($deposit > $store_profit) { + if ($store_profit > 0) { + SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $store_profit)->update(); + $financeLogic->out($transaction_id, $store_profit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + $financeLogic->in($transaction_id, 0, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 + } + } else { + $money = bcsub($store_profit, $deposit, 2); + if ($deposit > 0) { + SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $deposit)->update(); + $financeLogic->out($transaction_id, $deposit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + } + if ($money) { + SystemStore::where('id', $order['store_id'])->inc('store_money', $money)->update(); + $financeLogic->in($transaction_id, $money, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 + } + } + } else { + if ($store_profit > 0) { + SystemStore::where('id', $order['store_id'])->inc('store_money', $store_profit)->update(); + $financeLogic->in($transaction_id, $store_profit, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 + } + } + // if ($order['is_vip'] >= 1) { + if ($order['spread_uid'] > 0) { + $financeLogic->other_arr['vip_uid'] = $order['spread_uid']; + if ($vipFen) { + $fees = bcdiv(bcmul($vipFen, '0.08', 2), 1, 2); + } else { + $fees = bcdiv(bcmul($order['pay_price'], '0.08', 2), 1, 2); + } + $count_frees = bcadd($count_frees, $fees, 2); + if ($fees > 0) { + User::where('id', $order['spread_uid'])->inc('now_money', $fees)->update(); + //记录用户余额收入 + $GiveUser = User::where('id', $order['spread_uid'])->find(); + $capitalFlowDao = new CapitalFlowLogic($GiveUser); + $capitalFlowDao->userIncome('system_balance_add', 'order', $order['id'], $fees); + + $financeLogic->in($transaction_id, $fees, OrderEnum::VIP_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //vip订单获得 + $financeLogic->out($transaction_id, $fees, OrderEnum::VIP_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + } + } + $fees = bcdiv(bcmul($order['pay_price'], '0.01', 2), 1, 2); + $count_frees = bcadd($count_frees, bcmul($fees, 3, 2), 2); + $village_uid = 0; + $brigade_uid = 0; + //查询用户对应的村长和队长 + if ($order['uid'] > 0) { + $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) { + $uid = User::where('id', 'in', $arr1)->where('user_ship', 2)->value('id'); + if ($uid) { + User::where('id', $uid)->inc('integral', $fees)->update(); + $village_uid = $uid; + } + } + $arr2 = UserAddress::where(['village' => $address['village'], 'brigade' => $address['brigade'], 'is_default' => 1])->column('uid'); + if ($arr2) { + $uid = User::where('id', 'in', $arr1)->where('user_ship', 3)->value('id'); + if ($uid) { + User::where('id', $uid)->inc('integral', $fees)->update(); + $brigade_uid = $uid; + } + } + } + } + if ($fees > 0) { + //村长获得 + // $sing = []; + + // $sing[] = [ + // 'uid' => $village_uid, + // 'order_id' => $order['order_id'], + // 'title' => '村长订单获得兑换券', + // 'store_id' => $order['store_id'], + // 'number' => $fees, + // 'financial_pm' => 1, + // 'user_ship' => 2, + // ]; + // $sing[] = [ + // 'uid' => $brigade_uid, + // 'order_id' => $order['order_id'], + // 'title' => '队长订单获得兑换券', + // 'store_id' => $order['store_id'], + // 'number' => $fees, + // 'financial_pm' => 1, + // 'user_ship' => 3, + // ]; + // $sing[] = [ + // 'uid' => $village_uid, + // 'order_id' => $order['order_id'], + // 'title' => '订单扣除兑换券', + // 'store_id' => $order['store_id'], + // 'number' => $fees, + // 'financial_pm' => 0, + // 'user_ship' => 2, + // ]; + // $sing[] = [ + // 'uid' => $brigade_uid, + // 'order_id' => $order['order_id'], + // 'title' => '订单扣除兑换券', + // 'store_id' => $order['store_id'], + // 'number' => $fees, + // 'financial_pm' => 0, + // 'user_ship' => 3, + // ]; + if ($village_uid > 0) { + SystemStore::where('id', $village_uid)->inc('store_money', $fees)->update(); + $financeLogic->other_arr['vip_uid'] = $village_uid; + } + $financeLogic->in($transaction_id, $fees, OrderEnum::VILLAGE_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); + $financeLogic->out($transaction_id, $fees, OrderEnum::VILLAGE_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + //队长获得 + if ($brigade_uid > 0) { + SystemStore::where('id', $brigade_uid)->inc('store_money', $fees)->update(); + $financeLogic->other_arr['vip_uid'] = $brigade_uid; + } + $financeLogic->in($transaction_id, $fees, OrderEnum::BRIGADE_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); + $financeLogic->out($transaction_id, $fees, OrderEnum::BRIGADE_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + // $user_sing->saveAll($sing); + //其他获得 + $financeLogic->other_arr['vip_uid'] = 0; + $financeLogic->in($transaction_id, $fees, OrderEnum::OTHER_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); + $financeLogic->out($transaction_id, $fees, OrderEnum::OTHER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + } + // } + $fees = bcsub($order['pay_price'], $count_frees, 2); + //供应链订单获得 + if ($fees > 0) { + $financeLogic->in($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); + $financeLogic->out($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); + } + // } + $financeLogic->save(); + // } + } + + /** + * 回调日志 + * @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, + '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 true; + } + + /** + * 商品统计逻辑 + * @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']; + $cart_info = StoreOrderCartInfo::where([ + 'uid' => $uid, 'old_cart_id' => $value['cart_id'], 'store_id' => $store_id + ])->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 descStock($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']] + ]; + } + } + + (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); + } +} diff --git a/app/common/logic/PayNotifyLogic.php b/app/common/logic/PayNotifyLogic.php index 5d808912e..d98d02b16 100644 --- a/app/common/logic/PayNotifyLogic.php +++ b/app/common/logic/PayNotifyLogic.php @@ -586,19 +586,6 @@ class PayNotifyLogic extends BaseLogic $financeLogic = new StoreFinanceFlowLogic(); $user_sing = new UserSign(); $off_activity = Config::where('name', 'off_activity')->value('value'); - try{ - $url=getenv('WETCHA_PUSH'); - if($url){ - $order_id=$order['order_id']; - $pay_price=$order['pay_price']; - $arr=["msgtype"=>"markdown","markdown"=>["content"=> "有新的订单请及时跟踪\n - >单号:$order_id - >金额:$pay_price"]]; - (new Curl())->post($url,$arr); - } - }catch(\Exception $e){ - Log::error('推送订单失败',['order_id'=>$order['id'],'error'=>$e->getMessage()]); - } if ($off_activity == 1) { //-----活动价结算更改 $financeLogic->order = $order; @@ -683,46 +670,35 @@ class PayNotifyLogic extends BaseLogic if ($deposit > 0) { if ($deposit > $store_profit) { if ($store_profit > 0) { - SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $store_profit)->update(); + // SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $store_profit)->update(); $financeLogic->out($transaction_id, $store_profit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); $financeLogic->in($transaction_id, 0, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 } } else { $money = bcsub($store_profit, $deposit, 2); if ($deposit > 0) { - SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $deposit)->update(); + // SystemStore::where('id', $order['store_id'])->inc('paid_deposit', $deposit)->update(); $financeLogic->out($transaction_id, $deposit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); } if ($money) { - SystemStore::where('id', $order['store_id'])->inc('store_money', $money)->update(); + // SystemStore::where('id', $order['store_id'])->inc('store_money', $money)->update(); $financeLogic->in($transaction_id, $money, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 } } } else { if ($store_profit > 0) { - SystemStore::where('id', $order['store_id'])->inc('store_money', $store_profit)->update(); + // SystemStore::where('id', $order['store_id'])->inc('store_money', $store_profit)->update(); $financeLogic->in($transaction_id, $store_profit, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //平台手续费 } } // if ($order['is_vip'] >= 1) { if ($order['spread_uid'] > 0) { - $financeLogic->other_arr['vip_uid'] = $order['spread_uid']; if ($vipFen) { $fees = bcdiv(bcmul($vipFen, '0.08', 2), 1, 2); } else { $fees = bcdiv(bcmul($order['pay_price'], '0.08', 2), 1, 2); } $count_frees = bcadd($count_frees, $fees, 2); - if ($fees > 0) { - User::where('id', $order['spread_uid'])->inc('now_money', $fees)->update(); - //记录用户余额收入 - $GiveUser = User::where('id', $order['spread_uid'])->find(); - $capitalFlowDao = new CapitalFlowLogic($GiveUser); - $capitalFlowDao->userIncome('system_balance_add', 'order', $order['id'], $fees); - - $financeLogic->in($transaction_id, $fees, OrderEnum::VIP_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); //vip订单获得 - $financeLogic->out($transaction_id, $fees, OrderEnum::VIP_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); - } } $fees = bcdiv(bcmul($order['pay_price'], '0.01', 2), 1, 2); $count_frees = bcadd($count_frees, bcmul($fees, 3, 2), 2); @@ -736,7 +712,7 @@ class PayNotifyLogic extends BaseLogic if ($arr1) { $uid = User::where('id', 'in', $arr1)->where('user_ship', 2)->value('id'); if ($uid) { - User::where('id', $uid)->inc('integral', $fees)->update(); + // User::where('id', $uid)->inc('integral', $fees)->update(); $village_uid = $uid; } } @@ -744,7 +720,7 @@ class PayNotifyLogic extends BaseLogic if ($arr2) { $uid = User::where('id', 'in', $arr1)->where('user_ship', 3)->value('id'); if ($uid) { - User::where('id', $uid)->inc('integral', $fees)->update(); + // User::where('id', $uid)->inc('integral', $fees)->update(); $brigade_uid = $uid; } } @@ -791,14 +767,14 @@ class PayNotifyLogic extends BaseLogic // 'user_ship' => 3, // ]; if ($village_uid > 0) { - SystemStore::where('id', $village_uid)->inc('store_money', $fees)->update(); + // SystemStore::where('id', $village_uid)->inc('store_money', $fees)->update(); $financeLogic->other_arr['vip_uid'] = $village_uid; } $financeLogic->in($transaction_id, $fees, OrderEnum::VILLAGE_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); $financeLogic->out($transaction_id, $fees, OrderEnum::VILLAGE_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //队长获得 if ($brigade_uid > 0) { - SystemStore::where('id', $brigade_uid)->inc('store_money', $fees)->update(); + // SystemStore::where('id', $brigade_uid)->inc('store_money', $fees)->update(); $financeLogic->other_arr['vip_uid'] = $brigade_uid; } $financeLogic->in($transaction_id, $fees, OrderEnum::BRIGADE_ORDER_OBTAINS, $order['store_id'], 0, 0, $order['pay_type']); diff --git a/app/common/logic/StoreFinanceFlowLogic.php b/app/common/logic/StoreFinanceFlowLogic.php index a65052b9a..299b9e05d 100644 --- a/app/common/logic/StoreFinanceFlowLogic.php +++ b/app/common/logic/StoreFinanceFlowLogic.php @@ -5,6 +5,7 @@ namespace app\common\logic; use app\common\enum\OrderEnum; use app\common\enum\PayEnum; use app\common\model\store_finance_flow\StoreFinanceFlow; +use app\common\model\system_store\SystemStore; use app\common\model\user\User; class StoreFinanceFlowLogic extends BaseLogic @@ -128,7 +129,7 @@ class StoreFinanceFlowLogic extends BaseLogic } /** - * 核销后更新余额 + * 核销后更新用户余额 */ public function updateStatusUser($id,$uid,$money,$order_id){ StoreFinanceFlow::where('id', $id)->update(['status' => 1]); @@ -137,6 +138,17 @@ class StoreFinanceFlowLogic extends BaseLogic $capitalFlowDao->userIncome('system_balance_add', 'order', $order_id, $money); $find->inc('now_money',$money)->update(); } - + /** + * 核销后更新门店余额 + */ + public function updateStatusStore($id,$store_id,$money,$deposit){ + StoreFinanceFlow::where('id', $id)->update(['status' => 1]); + if($money){ + SystemStore::where('id', $store_id)->inc('store_money', $money)->update(); + } + if($deposit){ + SystemStore::where('id', $store_id)->inc('paid_deposit', $deposit)->update(); + } + } }