Files
xk-of-api/internal/service/order.go
2026-07-18 05:58:41 +08:00

51 lines
1.6 KiB
Go

package service
import (
"errors"
"fmt"
"time"
"xk-of-api/internal/model"
)
// OrderService 负责套餐订购和订单状态查询。
type OrderService struct{}
// Order 暴露订单服务单例。
var Order = OrderService{}
// Create 创建套餐订单;金额根据套餐和周期计算。
func (s OrderService) Create(order model.Order) (model.Order, error) {
if order.TenantName == "" || order.ContactName == "" || order.Phone == "" {
return model.Order{}, errors.New("请补全诊所名称、联系人和手机号")
}
plan, ok := Pricing.FindByCode(order.PlanCode)
if !ok {
return model.Order{}, errors.New("套餐不存在")
}
if order.BillingCycle == "year" {
order.Amount = plan.YearlyFee
} else {
order.BillingCycle = "month"
order.Amount = plan.MonthlyFee
}
order.OrderNo = fmt.Sprintf("XK%d", time.Now().UnixNano())
order.Status = "pending"
return order, nil
}
// Detail 返回订单详情占位数据,后续改为读取 nl_order。
func (s OrderService) Detail(orderNo string) model.Order {
return model.Order{OrderNo: orderNo, TenantName: "萧康示例诊所", ContactName: "王医生", Phone: "13800000000", PlanCode: "growth", BillingCycle: "year", Amount: 399000, Status: "pending"}
}
// List 返回后台订单列表占位数据。
func (s OrderService) List() []model.Order {
return []model.Order{s.Detail("XK202607040001")}
}
// Notify 处理支付渠道回调占位逻辑,真实渠道验签在后续适配器完成。
func (s OrderService) Notify(channel string, payload map[string]interface{}) map[string]interface{} {
return map[string]interface{}{"channel": channel, "notify_status": "received", "payload": payload}
}