'ID', 'mall_id' => 'Mall ID', 'store_id' => 'Store ID', 'user_id' => 'User ID', 'order_id' => 'Order ID', 'type' => 'Type', 'is_repayment' => 'Is Repayment', 'down_payments' => 'Down Payments', 'credit_money' => 'Credit Money', 'status' => 'Status', 'created_at' => 'Created At', 'updated_at' => 'Updated At', ]; } public static function setData($params) { try { $model = new self(); $model->loadDefaultValues(); if (!$model->load($params, '') || !$model->save()) throw new \PHPUnit\Util\Exception($model->getErrorMessage()); return $model; } catch (\Exception $e) { self::$static_error = $e->getMessage(); return false; } } /** * @desc: * @Author: hua * @Date: 2022/7/28 * @Time: 18:49 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $order_id * @param string $type 1:门店商品订单;2:收银台订单 * @return bool * @throws \Exception */ public static function repayment($order_id, $type = '1') { $order_credit_model = self::findOne(['order_id' => $order_id, 'type' => $type]); if(empty($order_credit_model)) return true; if (!empty($order_credit_model['is_repayment'])) throw new \Exception('该订单已还款'); $credit_money = $order_credit_model['credit_money'];//还款金额 $insert_wallet [] = [ 'mall_id' => $order_credit_model['mall_id'], 'user_id' => $order_credit_model['user_id'], 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => -$credit_money, 'desc' => '赊账订单还款', 'source_table' => self::tableName(), 'source_table_id' => $order_id, 'from_type' => UserWalletEnum::FROM_STORE, 'capital_type' => UserWalletEnum::REPAYMENT, ]; $res = UserWalletService::batchHandleByQueue($insert_wallet); if ($res == false) throw new \Exception(UserWalletService::getStaticError()); $order_credit_model->is_repayment = 1; $res = $order_credit_model->save(); if ($res == false) throw new \Exception('还款失败'); return true; } public static function repaymentByPay($order_id, $type = '1') { try { $order_credit_model = self::findOne(['order_id' => $order_id, 'type' => $type]); $order_no = StringHelper::generateOrderNo('re'); $order_credit_model->order_no = $order_no; $order_credit_model->save(); $store_order = StoreOrder::findOne(['id'=>$order_id]); $main_order = Order::findOne(['order_no'=>$store_order['order_no']]); $refund_list = OrderRefund::lists([ 'where'=>[ ['order_id'=>$main_order['id']], ['type'=>[1,2]], ['refund_status'=>1] ], ]); $goods_ids = []; $order_detail_ids = []; if(!empty($refund_list)){ foreach ($refund_list as $item){ $order_detail_ids[]=$item['order_detail_id']; } if(!empty($order_detail_ids)){ $store_order_detail_list = StoreOrderDetail::lists([ 'where'=>[ ['main_order_detail_id'=>$order_detail_ids], ], ]); $goods_ids = array_column($store_order_detail_list,'goods_id'); } } $extra = json_decode($order_credit_model['extra'],true); $no_credit_money = 0; if(!empty($extra)){ foreach ($extra as $goods_id=>$val){ if(in_array($goods_id,$goods_ids)){ $no_credit_money += $val['credit_money']; } } } $order_trade_info[] = [ 'order_no' => $order_no, 'amount' => bcsub($order_credit_model['credit_money'],$no_credit_money,2), 'title' => '还款', 'notify_class' => 'addons\Store\common\logic\notify\CreditNotify', 'order_type' => 'credit_order', ]; $res = \Yii::$app->services->pay->createTrade($order_credit_model['mall_id'], $order_credit_model['user_id'], $order_trade_info); if ($res == false) throw new \Exception('生成支付流水失败'); $res['order_ids'] = ''; $arr['transaction'] = $res; $arr['pay_success_page'] = Yii::$app->services->setting->mall->get($order_credit_model['mall_id'], 'order.pay_after_link'); // 支付成功后跳转的地址 $payment_expire_time = Yii::$app->services->setting->mall->get($order_credit_model['mall_id'], 'order.payment_expire_time'); $arr['surplus_second'] = 30 * 60; //剩余秒数 if ($payment_expire_time) { $arr['surplus_second'] = intval($payment_expire_time) * 60; //剩余秒数 } return $arr; } catch (\Exception $e) { self::$static_error = $e->getMessage(); return false; } } }