'已付款', 2=>'已转让', 3=>'提货', 4=>'已取消', 5=>'完成']; public $order_status = [ '-1' => '全部', self::Paid => '已付款', self::Transferred => '转让中', self::Shipped => '提货', self::Closure => '关闭', self::Freeze => '质押', ]; //抢购下单:未选择地区购买 public static function setPopularNoAreaOrder($num, $orderId, $price, $productId, $uid, $typeId): bool { $data = []; //抢购订单 $time = time(); $is_popular = ($typeId == self::Popular) ? self::Paid : 0; for ($i = 0; $i < $num; $i++) { $data[] = [ 'order_id' => $orderId, 'product_id' => $productId, 'type_id' => $typeId, 'status' => self::Paid, 'area_id' => 0, 'price' => $price, 'popular_price' => $price, 'fees' => 0, 'num' => 1, 'user_id' => $uid, 'order_no' => getOrderSN('R' . $i), 'is_popular' => $is_popular, 'create_time' => $time, 'update_time' => $time ]; } return self::insertAll($data); } //抢购下单:选择地区购买 public static function setPopularAreaOrder($areaArr, $orderId, $price, $productId, $uid, $typeId): bool { $result = true; foreach ($areaArr as $item) { // 生成订单 $order_arr['price'] = $price; $order_arr['product_id'] = $productId; $order_arr['area_id'] = $item; self::setCreateOrder($orderId, $order_arr, $typeId, $uid, 0, getOrderSN('R'), 0, $price); } //修改区域状态 $count = ProductArea::whereIn('id', $areaArr)->setField('status', ProductLists::Stop); if ($count != count($areaArr)) $result = false; return $result; } /** * @param int $orderId 订单id * @param array $orderInfo 订单详情 * @param int $typeId 订单类型 * @param int $userId 用户id * @param int $fromUser 来源id * @param float $fees 手续费 * @param float $price 抢购价 */ public static function setCreateOrder(int $orderId, $orderInfo, $typeId, $userId, $fromUser, string $orderNo, float $fees, float $price): object { $data = [ 'order_id' => $orderId, 'product_id' => $orderInfo['product_id'], 'type_id' => $typeId, 'status' => self::Paid, 'area_id' => $orderInfo['area_id'], 'order_no' => $orderNo, 'user_id' => $userId, 'from_user' => $fromUser, 'price' => $orderInfo['price'], 'popular_price' => $price, 'fees' => $fees, 'num' => 1 ]; //抢购订单 if ($typeId == self::Popular) $data['is_popular'] = self::Paid; return self::create($data); } //判断是否购买持有产品 public function isBuyHoldProduct(array $productId, int $uid) { return self::where('user_id', $uid)->whereIn('product_id', $productId)->whereIn('status', [self::Paid, self::Transferred, self::Freeze])->count(); } //获取持有持有产品数量 public static function getHoldProductNum(string $productId) { return self::whereIn('product_id', $productId)->whereIn('status', [self::Paid, self::Transferred, self::Freeze]) ->field('user_id,sum(num) as num') ->group('user_id') ->select(); } //获取抢购触发产品次数 public static function getTripPopularProduct(string $productId) { return self::where('product_id', $productId)->where('is_popular', self::Paid)->whereTime('create_time', 'yesterday')->sum('num'); } //获取持有产品数量 public static function getByOrderProductNum($productId, $num, $uid) { if (empty($productId)) return (object)[]; foreach ($productId as &$item) { $item['num'] = $num; $count = self::getUserOrderNum($uid, $item['id']); //if(empty($count)) $count = 0; $item['hold_num'] = $count; } return $productId; } //空投产品向达到一定持有量的用户 public static function getUserOrderByProductId(int $rwaProductId, int $rwaNum) { return ProductOrder::alias('a') ->join('product_list b', 'a.product_id = b.id', 'left') ->where('b.is_show', ProductLists::Normal) ->whereIn('a.status', [self::Paid, self::Transferred, self::Freeze]) ->where('a.product_id', $rwaProductId) ->group('a.user_id')->having('total_num>=' . $rwaNum) ->field('a.id,a.user_id,count(a.num) as total_num') ->select(); } //获取持有产品数量订单 public static function getUserOrderByProductNum(int $uid, int $product_id, int $totalNum): array { return self::where('user_id', $uid)->where('product_id', $product_id)->where('status', self::Paid)->limit($totalNum)->column('id'); } //获取持有产品数量 private static function getUserOrderNum(int $uid, int $product_id): int { return self::alias('a') ->join('product_list b', 'a.product_id = b.id', 'left') ->where('b.is_show', ProductLists::Normal) ->where('a.user_id', $uid) ->where('a.product_id', $product_id) ->where('a.status', '=', self::Paid) ->sum('a.num'); } // 获取订单状态 public static function getProductOrder($orderId, $status, string $field) { return self::alias('a')->where('a.id', $orderId) ->join("product_list b", "a.product_id = b.id", "left") ->field('a.*,' . $field) ->where('a.status', $status) ->find(); } // 获取新人福利领取订单记录 public static function getUserWelfare($uid, $typeId) { return self::where('user_id', $uid)->where('type_id', $typeId)->order('create_time desc')->find(); } public static function getStatusList() { return [self::Paid => __('已付款'), self::Transferred => __('已转让'), self::Shipped => __('提货'), self::Cancelled => __('已取消'), self::Closure => __('关闭'), self::Freeze => __('质押')]; } //全部类型: public static function getStatusAll() { return [ ['type_id' => self::Popular, 'status' => self::Paid, 'text' => __('已购买')], ['type_id' => self::Popular, 'status' => self::Closure, 'text' => __('已关闭')], ['type_id' => self::Transfer, 'status' => self::Transferred, 'text' => __('转让中')], ['type_id' => self::Giveaway, 'status' => self::Closure, 'text' => __('已赠送')], ['type_id' => self::Giveaway, 'status' => self::Paid, 'text' => __('受赠')], ['type_id' => self::Transfer, 'status' => self::Closure, 'text' => __('已转让')], ['type_id' => self::Popular, 'status' => self::Shipped, 'text' => __('已提货')], ['type_id' => self::Transfer, 'status' => self::Cancelled, 'text' => __('已取消')], ['type_id' => self::Popular, 'status' => self::Freeze, 'text' => __('质押')], ['type_id' => self::Transfer, 'status' => self::Paid, 'text' => __('购买寄售')], ['type_id' => self::Airdrop, 'status' => self::Paid, 'text' => __('空投')], ['type_id' => self::Airdrop, 'status' => self::Closure, 'text' => __('空投关闭')], ['type_id' => self::Synthesi, 'status' => self::Paid, 'text' => __('合成')], ['type_id' => self::Synthesi, 'status' => self::Closure, 'text' => __('合成关闭')], ['type_id' => self::Buying, 'status' => self::Paid, 'text' => __('求购')], ['type_id' => self::Buying, 'status' => self::Closure, 'text' => __('求购关闭')], ['type_id' => self::Newbie, 'status' => self::Paid, 'text' => __('新人茶权')], ['type_id' => self::Newbie, 'status' => self::Closure, 'text' => __('新人茶权关闭')], ['type_id' => self::Super, 'status' => self::Paid, 'text' => __('新人福利')], ['type_id' => self::Super, 'status' => self::Closure, 'text' => __('新人福利关闭')], ['type_id' => self::RwaExchange, 'status' => self::Paid, 'text' => __('Rwa兑换')], ['type_id' => self::RwaExchange, 'status' => self::Closure, 'text' => __('Rwa兑换关闭')], ['type_id' => self::TeacExchange, 'status' => self::Paid, 'text' => __('Teac兑换')], ['type_id' => self::TeacExchange, 'status' => self::Closure, 'text' => __('Teac兑换关闭')], ]; } //产品 public function products() { return $this->hasOne('ProductLists', 'id', 'product_id', [], 'LEFT')->setEagerlyType(0); } //用户 user_id public function users() { return $this->hasOne('UserModel', 'id', 'user_id', [], 'LEFT')->setEagerlyType(0); } //区域 public function areas() { return $this->hasOne('ProductArea', 'id', 'area_id', [], 'LEFT')->setEagerlyType(0); } //提货地址 public function address() { return $this->hasOne('UserArea', 'order_id', 'id', [], 'LEFT')->setEagerlyType(0); } public function getCreateTimeTextAttr($value, $data) { $value = $value ? $value : (isset($data['create_time']) ? $data['create_time'] : ''); return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } public function getUpdateTimeTextAttr($value, $data) { $value = $value ? $value : (isset($data['update_time']) ? $data['update_time'] : ''); return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value; } protected function setCreateTimeAttr($value) { return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value); } protected function setUpdateTimeAttr($value) { return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value); } //抢购下单:未选择地区购买 public static function setGiverwagoods($orderId, $price, $productId, $uid, $typeId): bool { //抢购订单 $time = time(); $is_popular = 0; $data = [ 'order_id' => $orderId, 'product_id' => $productId, 'type_id' => $typeId, 'status' => 1, 'area_id' => 0, 'price' => $price, 'popular_price' => $price, 'fees' => 0, 'num' => 1, 'user_id' => $uid, 'order_no' => getOrderSN('R'), 'is_popular' => $is_popular, 'create_time' => $time, 'update_time' => $time ]; return self::insert($data); } }