51 lines
1.6 KiB
Go
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}
|
|
}
|