| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- <?php
- namespace addons\Store\common\models;
- use common\enums\StatusEnum;
- use common\enums\UserWalletEnum;
- use common\helpers\StringHelper;
- use common\models\base\BaseActiveRecord;
- use common\models\order\Order;
- use common\models\order\OrderRefund;
- use services\common\UserWalletService;
- use Yii;
- /**
- * This is the model class for table "qimall_addons_store_order_credit".
- *
- * @property int $id
- * @property int $mall_id
- * @property int $store_id 门店id
- * @property int $user_id 会员id
- * @property string $order_id 门店订单id
- * @property int $is_repayment 是否还款:0:否;1:是
- * @property int $type 类型[1:门店商品订单;2:收银台订单]
- * @property float $down_payments 首付金额
- * @property float $credit_money 赊账金额
- * @property int $status 状态[0禁用 1启用 -1删除]
- * @property int $created_at 创建时间
- * @property int $updated_at 修改时间
- * @property string $order_no 还款生成的支付订单编号
- * @property string $extra 额外信息
- */
- class StoreOrderCredit extends BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%addons_store_order_credit}}';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'store_id', 'user_id', 'is_repayment', 'status', 'created_at', 'updated_at', 'order_id', 'type'], 'integer'],
- [['down_payments', 'credit_money'], 'number'],
- [['order_no'], 'string'],
- [['extra'], 'string'],
- ];
- }
- /**
- * {@inheritdoc}
- */
- public function attributeLabels()
- {
- return [
- 'id' => '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;
- }
- }
- }
|