Files
suixinkan_uikit/suixinkan/Features/Orders/API/OrderAPI.swift
T

353 lines
14 KiB
Swift

//
// OrderAPI.swift
// suixinkan
//
import Foundation
@MainActor
/// 订单模块 API,对齐 Android `NetworkApi` 订单区域。
final class OrderAPI {
private let client: APIClient
init(client: APIClient) {
self.client = client
}
func photographerOrderList(
scenicId: Int,
page: Int,
pageSize: Int = OrderListQueryBuilder.photographerPageSize,
orderStatus: Int = 0,
startTime: String? = nil,
endTime: String? = nil,
userPhone: String? = nil,
isRefined: Int = 0
) async throws -> OrderListResponse<OrderEntity> {
var items: [URLQueryItem] = [
URLQueryItem(name: "scenic_id", value: String(scenicId)),
URLQueryItem(name: "page", value: String(page)),
URLQueryItem(name: "page_size", value: String(pageSize)),
]
if let orderStatus = OrderListQueryBuilder.orderStatusQuery(tabIndex: orderStatus) {
items.append(URLQueryItem(name: "order_status", value: orderStatus))
}
if let startTime, !startTime.isEmpty { items.append(URLQueryItem(name: "start_time", value: startTime)) }
if let endTime, !endTime.isEmpty { items.append(URLQueryItem(name: "end_time", value: endTime)) }
if let userPhone, !userPhone.isEmpty { items.append(URLQueryItem(name: "user_phone", value: userPhone)) }
if let isRefined = OrderListQueryBuilder.isRefinedQuery(rTabIndex: isRefined) {
items.append(URLQueryItem(name: "is_refined", value: String(isRefined)))
}
return try await client.send(
APIRequest(method: .get, path: "/api/yf-handset-app/photog/order/listv2", queryItems: items)
)
}
func scenicAdminOrderList(
scenicId: Int,
page: Int,
pageSize: Int = OrderListQueryBuilder.photographerPageSize,
orderStatus: Int = 0,
startTime: String? = nil,
endTime: String? = nil,
userPhone: String? = nil,
isRefined: Int = 0
) async throws -> OrderListResponse<OrderEntity> {
var items: [URLQueryItem] = [
URLQueryItem(name: "scenic_id", value: String(scenicId)),
URLQueryItem(name: "page", value: String(page)),
URLQueryItem(name: "page_size", value: String(pageSize)),
]
if let orderStatus = OrderListQueryBuilder.orderStatusQuery(tabIndex: orderStatus) {
items.append(URLQueryItem(name: "order_status", value: orderStatus))
}
if let startTime, !startTime.isEmpty { items.append(URLQueryItem(name: "start_time", value: startTime)) }
if let endTime, !endTime.isEmpty { items.append(URLQueryItem(name: "end_time", value: endTime)) }
if let userPhone, !userPhone.isEmpty { items.append(URLQueryItem(name: "user_phone", value: userPhone)) }
if let isRefined = OrderListQueryBuilder.isRefinedQuery(rTabIndex: isRefined) {
items.append(URLQueryItem(name: "is_refined", value: String(isRefined)))
}
return try await client.send(
APIRequest(method: .get, path: "/api/app/scenic-admin/order/list", queryItems: items)
)
}
func storeOrderList(
storeId: Int?,
page: Int,
pageSize: Int = OrderListQueryBuilder.storePageSize,
userPhone: String? = nil,
orderStatus: Int? = nil,
orderType: Int? = nil,
startTime: String? = nil,
endTime: String? = nil
) async throws -> StoreOrderListData {
var items: [URLQueryItem] = [
URLQueryItem(name: "page", value: String(page)),
URLQueryItem(name: "page_size", value: String(pageSize)),
]
if let storeId { items.append(URLQueryItem(name: "store_id", value: String(storeId))) }
if let userPhone, !userPhone.isEmpty { items.append(URLQueryItem(name: "user_phone", value: userPhone)) }
if let orderStatus { items.append(URLQueryItem(name: "order_status", value: String(orderStatus))) }
if let orderType { items.append(URLQueryItem(name: "order_type", value: String(orderType))) }
if let startTime, !startTime.isEmpty { items.append(URLQueryItem(name: "start_time", value: startTime)) }
if let endTime, !endTime.isEmpty { items.append(URLQueryItem(name: "end_time", value: endTime)) }
return try await client.send(
APIRequest(method: .get, path: "/api/app/store/order/list", queryItems: items)
)
}
func orderCheckIn(jsonBody: String) async throws -> OrderSignInResponse {
try await client.sendRawJSON(
method: .post,
path: "/api/yf-handset-app/photog/order/check-in",
jsonBody: jsonBody
)
}
func orderVerify(jsonBody: String) async throws -> WriteOffOrderResponse {
try await client.sendRawJSON(
method: .post,
path: "/api/yf-handset-app/photog/order/order-verify",
jsonBody: jsonBody
)
}
func multiTravelScenicSpotList(orderNumber: String, lat: Double, lng: Double) async throws -> MultiTravelScenicSpotListResponse {
try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/order/multi-travel/scenic-spot-list",
queryItems: [
URLQueryItem(name: "order_number", value: orderNumber),
URLQueryItem(name: "lat", value: String(lat)),
URLQueryItem(name: "lng", value: String(lng)),
]
)
)
}
func multiTravelOrderVerify(_ request: MultiTravelOrderVerifyRequest) async throws -> OrderSignInResponse {
try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/order/multi-travel/order-verify",
body: request
)
)
}
func cancelOrder(_ request: CancelRequest) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(method: .post, path: "/api/yf-handset-app/photog/order/cancel", body: request)
)
}
func refundOrder(_ request: OrderRefundRequest) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(method: .post, path: "/api/yf-handset-app/photog/order/refund", body: request)
)
}
func giftRetouch(_ request: SendGiftRequest) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(method: .post, path: "/api/yf-handset-app/photog/order/gift-retouch", body: request)
)
}
func updateRefined(orderNumber: String, isRefined: Int) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/order/refined",
queryItems: [
URLQueryItem(name: "order_number", value: orderNumber),
URLQueryItem(name: "is_refined", value: String(isRefined)),
]
)
)
}
func cooperativeSalers(storeId: String?, page: String = "1", pageSize: String = "50") async throws -> CooperativeSalerListResponse {
var items = [
URLQueryItem(name: "page", value: page),
URLQueryItem(name: "page_size", value: pageSize),
]
if let storeId { items.append(URLQueryItem(name: "store_id", value: storeId)) }
return try await client.send(
APIRequest(method: .get, path: "/api/yf-handset-app/photog/cooperative-salers", queryItems: items)
)
}
func referralOrders(saleUserId: String, page: String = "1", pageSize: String = "50") async throws -> ReferralOrderListResponse {
try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/sale-user/referral-orders",
queryItems: [
URLQueryItem(name: "sale_user_id", value: saleUserId),
URLQueryItem(name: "page", value: page),
URLQueryItem(name: "page_size", value: pageSize),
]
)
)
}
func bindReferralOrder(orderNumber: String, referralOrderNo: String) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/sale-user/bind-referral-order",
queryItems: [
URLQueryItem(name: "order_number", value: orderNumber),
URLQueryItem(name: "referral_order_no", value: referralOrderNo),
]
)
)
}
func referralLeads(page: String = "1", pageSize: String = "10") async throws -> OrderListResponse<ReferralLeadEntity> {
try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/sale-user/referral-leads",
queryItems: [
URLQueryItem(name: "page", value: page),
URLQueryItem(name: "page_size", value: pageSize),
]
)
)
}
func acquisitionOrders(keyword: String? = nil, page: String = "1", pageSize: String = "10") async throws -> OrderListResponse<AcquisitionOrderEntity> {
var items = [
URLQueryItem(name: "page", value: page),
URLQueryItem(name: "page_size", value: pageSize),
]
if let keyword, !keyword.isEmpty {
items.append(URLQueryItem(name: "keyword", value: keyword))
}
return try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/sale-user/acquisition-orders",
queryItems: items
)
)
}
func saleUserInviteInfo(saleUserId: String) async throws -> SaleUserInviteInfoResponse {
try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/sale-user/invite-info",
queryItems: [URLQueryItem(name: "sale_user_id", value: saleUserId)]
)
)
}
func saleUserAcceptBind(saleUserId: Int, commissionRate: Int) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/sale-user/accept-bind",
queryItems: [
URLQueryItem(name: "sale_user_id", value: String(saleUserId)),
URLQueryItem(name: "commission_rate", value: String(commissionRate)),
]
)
)
}
func saleUserUpdateRemark(saleUserId: Int, photogRemarkName: String) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/sale-user/update-remark",
body: SaleUserUpdateRemarkRequest(saleUserId: saleUserId, photogRemarkName: photogRemarkName)
)
)
}
func saleUserCommissionRateSendSmsCode(phone: String) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/sale-user/commission-rate/send-sms-code",
body: SaleUserCommissionRateSmsRequest(phone: phone)
)
)
}
func saleUserUpdateCommissionRate(saleUserId: Int, commissionRate: Int, smsCode: String) async throws -> CooperativeSalerEntity {
try await client.send(
APIRequest(
method: .post,
path: "/api/yf-handset-app/photog/sale-user/commission-rate",
body: SaleUserCommissionRateUpdateRequest(
saleUserId: saleUserId,
commissionRate: commissionRate,
smsCode: smsCode
)
)
)
}
/// 获取指定获客员的分成比例修改记录。
func saleUserCommissionRateLogs(
saleUserId: Int,
page: Int = 1,
pageSize: Int = 10
) async throws -> CommissionRateLogListResponse {
guard saleUserId > 0 else {
throw APIError.networkFailed("获客员信息无效")
}
return try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/sale-user/commission-rate/logs",
queryItems: [
URLQueryItem(name: "sale_user_id", value: String(saleUserId)),
URLQueryItem(name: "page", value: String(max(1, page))),
URLQueryItem(name: "page_size", value: String(min(max(1, pageSize), 50))),
]
)
)
}
func shootHistory(orderNumber: String) async throws -> MultiTravelShootHistoryResponse {
try await client.send(
APIRequest(
method: .get,
path: "/api/yf-handset-app/photog/order/multi-travel/shoot-history",
queryItems: [URLQueryItem(name: "order_number", value: orderNumber)]
)
)
}
func storeOrderVerify(_ request: StoreOrderVerifyRequest) async throws -> WriteOffOrderResponse {
try await client.send(
APIRequest(method: .post, path: "/api/app/store/order/order-verify", body: request)
)
}
func storeOrderRefund(_ request: StoreOrderRefundRequest) async throws {
let _: EmptyPayload = try await client.send(
APIRequest(method: .post, path: "/api/app/store/order/refund", body: request)
)
}
func storeOrderDetail(storeId: Int, orderNumber: String) async throws -> StoreOrderDetailData {
try await client.send(
APIRequest(
method: .get,
path: "/api/app/store/order/detail",
queryItems: [
URLQueryItem(name: "store_id", value: String(storeId)),
URLQueryItem(name: "order_number", value: orderNumber),
]
)
)
}
}