package budget2 import ( "errors" "reflect" "zhiyuan/pkg/db" ) type Order struct { ID int64 PkgId int64 SiteId int64 Statistics []string Form Pkg } func (order Order) GetAreaId() int64 { pkgInfo, err := order.GetPkgInfo() if err != nil { return 0 } return pkgInfo.AreaId } func (order Order) GetPkgInfo() (PkgInfo, error) { if _, ok := Pkgs[order.PkgId]; !ok { return PkgInfo{}, errors.New("找不到套餐") } return Pkgs[order.PkgId], nil } func (order Order) NewForm() (Pkg, error) { pkgInfo, err := order.GetPkgInfo() if err != nil { return nil, err } return reflect.New(db.Type(pkgInfo.Pkg)).Interface().(Pkg), nil } func (order Order) ReturnResult() interface{} { return order.Form.ReturnResult(order.Statistics) } func LoadOrder(id int64, pkgId int64, siteId int64, content []byte, statistics []string) (*Order, error) { order := new(Order) order.ID = id order.PkgId = pkgId order.SiteId = siteId order.Statistics = statistics var err error order.Form, err = order.NewForm() if err != nil { return nil, err } order.Form.Load(pkgId, content) /*if len(model.Content) != 0 { gzJson := bytes.NewBuffer(model.Content) gz, err := gzip.NewReader(gzJson) if err != nil { return nil, err } defer gz.Close() jsonData, err := ioutil.ReadAll(gz) if err != nil { return nil, err } decoder := json.NewDecoder(strings.NewReader(string(jsonData))) decoder.UseNumber() err = decoder.Decode(&order.Form) if err != nil { return nil, err } }*/ return order, nil } func CreateOrder(pkgId int64, siteId int64, area float64, layout []int, statistics []string) (*Order, error) { order := new(Order) order.ID = 0 order.PkgId = pkgId order.SiteId = siteId order.Statistics = statistics var err error order.Form, err = order.NewForm() if err != nil { return nil, err } order.Form.Init(pkgId, area, layout) return order, nil }