mall_id * 'orders' => [order, order] * ] * @return void */ public static function minus($params) { if (empty($params['mall_id'])) { return 0; // throw new Exception('mall-id 未设置'); } $mall_id = $params['mall_id']; if (empty($params['orders'])) { return 0; // throw new Exception('orders 不存在'); } $orders = $params['orders']; if (empty($params['user_id'])) { return 0; // throw new Exception('orders 不存在'); } $user_id = $params['user_id']; // 获取设置 $setting = (new SettingService(['mall_id' => $mall_id]))->getSetting(); if (empty($setting)) { return 0; } // 减金额 if (empty($condition = $setting['condition'])) { return 0; } // 判断会员等级 $member = $setting['member']; if (!in_array(0, $member)) { $user = User::findOne(['id' => $user_id]); if (!in_array($user->level, $member)) { return 0; } } if (empty($setting['order'])) { return 0; } // 判断订单类型 foreach ($orders as $k => $order) { // 未定义订单类型的不处理 if (empty($order['order_type'])) { return 0; } // 订单类型为空时为普通订单 // $orders[$k]['order_type'] = empty($order['order_type']) ? Order::DEFAULT : $order['order_type']; if (!in_array($orders[$k]['order_type'], $setting['order'])) { return 0; } } // 订单 $total_price = 0; foreach ($orders as $order) { $total_price = bcadd($order['amount'], $total_price, 2); } // 获取随机减金额 $min = 0; $max = 0; foreach ($condition as $val) { if ($total_price >= $val['total_price']) { $min = bcmul($val['rand_min'], 100, 2); $max = bcmul($val['rand_max'], 100, 2); } } if ($min == 0 && $max == 0) { return 0; } // 随机减金额 $left = $rand_fee = bcdiv(mt_rand($min, $max), 100, 2); // 分配随机减金额 $models = []; foreach ($orders as $order) { // 分配的金额 $order_rand_fee = $rand_fee / ($total_price / $order['amount']); // 小于最小单位 $order_rand_fee = $order_rand_fee < 0.01 ? 0.01 : $order_rand_fee; // 判断剩余为0时候 不使用最小单位 $order_rand_fee = $left == 0 ? 0 : $order_rand_fee; $result = OrderModel::find()->where(['order_no'=>$order['order_no'],'user_id'=>$order['user_id'] ?? 0,'mall_id'=>$mall_id])->one(); if(!empty($result)){ $rand_fee = 0; $order_rand_fee = 0; continue; } // 创建订单 ($model = new OrderModel())->load([ 'mall_id' => $mall_id, 'order_id' => $order['order_id'] ?? 0, 'order_no' => $order['order_no'], 'user_id' => $user_id, 'rand_fee' => $order_rand_fee, // 订单随机减 'total_rand_fee' => $rand_fee, // 随机减 'order_type' => $order['order_type'], 'created_at' => time(), ], ''); $res = $model->save(); if ($res === false) throw new Exception('随机减订单生产失败'); $models[] = $model; // 减少剩余的 $left = bcsub($rand_fee, $order_rand_fee, 2); } return [$rand_fee, $models, [ sprintf('%.2f', bcdiv($min, 100, 2)), sprintf('%.2f', bcdiv($max, 100, 2)) ]]; } /** * 获取订单 * * @param array $params * @return array */ public static function orderRandFee($params) { if (empty($params['order'])) { return $params['order']; } // 状态是未付款不返回金额 if ($params['order']['pay_status'] == 0) { return $params['order']; } // 订单ID $order_id = $params['order']['id']; $rand_fee = OrderModel::find()->where(['order_id' => $order_id])->select('rand_fee')->orderBy('id desc')->scalar(); if (empty($rand_fee)) { return $params['order']; } // 实际支付 // $pay_money = bcsub($params['order']['pay_money'], $rand_fee, 2); $params['order']['rand_fee'] = $rand_fee; return $params['order']; } /** * 获取订单售后订单数据详情 * * @param array $params * [ * mall_id => ... * order_detail => ... * ] * @return void */ public static function orderRefundSubmit($params) { if (empty($params['mall_id'])) { return []; } $mall_id = $params['mall_id']; if (empty($params['order_detail'])) { return []; } $order_detail = $params['order_detail']; // 订单ID $order_id = is_array($order_detail) ? $order_detail['order_id'] : $order_detail->order_id; // 查询随机减金额 $rand_fee = OrderModel::find()->where(['order_id' => $order_id])->select('rand_fee')->orderBy('id desc')->scalar(); if (empty($rand_fee)) { return []; } // 查询订单数量 $orders = OrderDetail::find() ->where(['mall_id' => $mall_id, 'order_id' => $order_id]) ->select('id, order_id, goods_price') ->orderBy('id asc') ->all(); if (empty($orders)) { return []; } // 被扣减的随机减金额订单 $refund_detail_id = 0; foreach ($orders as $order) { // 判断当前商品支付金额是否大于随机减金,大于则此商品作为随机减金额进行减扣 if ($order->goods_price >= $rand_fee) $refund_detail_id = $order->id; } // 随机减扣除 if ($refund_detail_id == $order_detail['id']) { // 扣去随机减的金额获得该订单可退款金额 $goods_price = bcsub($order_detail['goods_price'], $rand_fee, 2); is_array($order_detail) ? $order_detail['goods_price'] = $goods_price : $order_detail->goods_price = $goods_price; } return $order_detail; } /** * 获取随机减金额 * @Author: lun * @DateTime: 2023/2/21 0021 17:53 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $payMoney * @param $orderNo * @return false|int|string */ public static function getRandFee($payMoney, $orderNo) { $rand_fee = OrderModel::find()->where(['order_no' => $orderNo])->select('rand_fee')->orderBy('id desc')->scalar(); if (empty($rand_fee)) { return $payMoney; } return $payMoney - $rand_fee; } }