order.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package budget2
  2. import (
  3. "errors"
  4. "reflect"
  5. "zhiyuan/pkg/db"
  6. )
  7. type Order struct {
  8. ID int64
  9. PkgId int64
  10. SiteId int64
  11. Statistics []string
  12. Form Pkg
  13. }
  14. func (order Order) GetAreaId() int64 {
  15. pkgInfo, err := order.GetPkgInfo()
  16. if err != nil {
  17. return 0
  18. }
  19. return pkgInfo.AreaId
  20. }
  21. func (order Order) GetPkgInfo() (PkgInfo, error) {
  22. if _, ok := Pkgs[order.PkgId]; !ok {
  23. return PkgInfo{}, errors.New("找不到套餐")
  24. }
  25. return Pkgs[order.PkgId], nil
  26. }
  27. func (order Order) NewForm() (Pkg, error) {
  28. pkgInfo, err := order.GetPkgInfo()
  29. if err != nil {
  30. return nil, err
  31. }
  32. return reflect.New(db.Type(pkgInfo.Pkg)).Interface().(Pkg), nil
  33. }
  34. func (order Order) ReturnResult() interface{} {
  35. return order.Form.ReturnResult(order.Statistics)
  36. }
  37. func LoadOrder(id int64, pkgId int64, siteId int64, content []byte, statistics []string) (*Order, error) {
  38. order := new(Order)
  39. order.ID = id
  40. order.PkgId = pkgId
  41. order.SiteId = siteId
  42. order.Statistics = statistics
  43. var err error
  44. order.Form, err = order.NewForm()
  45. if err != nil {
  46. return nil, err
  47. }
  48. order.Form.Load(pkgId, content)
  49. /*if len(model.Content) != 0 {
  50. gzJson := bytes.NewBuffer(model.Content)
  51. gz, err := gzip.NewReader(gzJson)
  52. if err != nil {
  53. return nil, err
  54. }
  55. defer gz.Close()
  56. jsonData, err := ioutil.ReadAll(gz)
  57. if err != nil {
  58. return nil, err
  59. }
  60. decoder := json.NewDecoder(strings.NewReader(string(jsonData)))
  61. decoder.UseNumber()
  62. err = decoder.Decode(&order.Form)
  63. if err != nil {
  64. return nil, err
  65. }
  66. }*/
  67. return order, nil
  68. }
  69. func CreateOrder(pkgId int64, siteId int64, area float64, layout []int, statistics []string) (*Order, error) {
  70. order := new(Order)
  71. order.ID = 0
  72. order.PkgId = pkgId
  73. order.SiteId = siteId
  74. order.Statistics = statistics
  75. var err error
  76. order.Form, err = order.NewForm()
  77. if err != nil {
  78. return nil, err
  79. }
  80. order.Form.Init(pkgId, area, layout)
  81. return order, nil
  82. }