table.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package budget
  2. import (
  3. "zhiyuan/pkg/db"
  4. "zhiyuan/pkg/utils"
  5. "github.com/gin-gonic/gin"
  6. )
  7. type Table struct {
  8. ID int64 `json:"id" prop:"add:false"`
  9. QuoteId int64 `json:"quoteId" type:"int" prop:"add" search:"="`
  10. Name string `json:"name" label:"名称值" type:"string" prop:"add edit" search:"like"`
  11. Property string `json:"property" label:"属性" type:"string" prop:"edit"`
  12. OrderAt int64 `json:"order_at" prop:"add:false select:false"`
  13. DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"`
  14. CreatedAt int64 `json:"created_at" prop:"add:false select:false"`
  15. UpdatedAt int64 `json:"updated_at" prop:"add:false select:false"`
  16. Headers []QuoteData `json:"headers" prop:"ignore"`
  17. Modules []QuoteData `json:"modules" prop:"ignore"`
  18. Prop map[string]string `json:"prop" prop:"ignore"`
  19. db.BaseModel
  20. }
  21. func (Table) TableName() string {
  22. return "zy_budget_table"
  23. }
  24. func (Table) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool {
  25. return true
  26. }
  27. func (Table) OnePrivilege(c *gin.Context, id int64) bool {
  28. return true
  29. }
  30. func (Table) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error {
  31. return nil
  32. }
  33. func (Table) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error {
  34. return nil
  35. }
  36. func (Table) DelPrivilege(c *gin.Context, id int64) error {
  37. return nil
  38. }
  39. func (Table) OrderField() string {
  40. return "order_at"
  41. }
  42. func (Table) Page() bool {
  43. return false
  44. }
  45. func (Table) Count() bool {
  46. return false
  47. }
  48. func (model Table) GetProperty() map[string]string {
  49. props := make(map[string]string)
  50. utils.JsonDecode(model.Property).To(&props)
  51. return props
  52. }
  53. /*func (model Table) GetItems() []Item {
  54. return GetItemModels(map[string]interface{}{
  55. "typeId in": AllItemTypes(SilceIds(model.TypeIds)),
  56. })
  57. }*/
  58. func (model Table) GetID() int64 {
  59. return model.ID
  60. }
  61. func (model Table) GetProp(name string) (expression string, ok bool) {
  62. expression, ok = model.Prop[name]
  63. return
  64. }
  65. func (model Table) GetSubs() *[]QuoteData {
  66. return &model.Modules
  67. }
  68. func (model Table) GetName() string {
  69. return model.Name
  70. }
  71. func (model Table) GetHeaders() *[]QuoteData {
  72. return &model.Headers
  73. }
  74. func (model Table) GetItem() *Item {
  75. return nil
  76. }
  77. func (model Table) GetValue() string {
  78. return ""
  79. }
  80. func (model Table) GetQuote() *Quote {
  81. return nil
  82. }
  83. func (model Table) GetTable() *Table {
  84. return &model
  85. }
  86. func (model Table) GetHeader() *Header {
  87. return nil
  88. }
  89. func (model Table) GetModule() *Module {
  90. return nil
  91. }
  92. func (model Table) GetGroup() *Group {
  93. return nil
  94. }
  95. func (model Table) GetRow() *Row {
  96. return nil
  97. }
  98. func (model Table) GetMyItem() *Item {
  99. return nil
  100. }
  101. func CopyTables(tables []QuoteData, quoteId int64, order int64) error {
  102. for i, table := range tables {
  103. _, err := table.GetTable().Copy(quoteId, order+int64(len(tables)-i))
  104. if err != nil {
  105. return err
  106. }
  107. }
  108. return nil
  109. }
  110. func findTables(quoteId int64, list []Table, headers []Header, modulelist []Module, grouplist []Group, rowlist []Row, itemlist []Item) ([]QuoteData, []QuoteData, []QuoteData, []QuoteData) {
  111. tables := make([]QuoteData, 0)
  112. modules := make([]QuoteData, 0)
  113. groups := make([]QuoteData, 0)
  114. rows := make([]QuoteData, 0)
  115. for _, v := range list {
  116. if v.QuoteId == quoteId {
  117. v.Headers = findHeaders(v.ID, headers)
  118. vmodules, vgroups, vrows := findModules(v.ID, modulelist, grouplist, rowlist, itemlist)
  119. v.Modules = vmodules
  120. v.Prop = v.GetProperty()
  121. tables = append(tables, v)
  122. modules = append(modules, vmodules...)
  123. groups = append(groups, vgroups...)
  124. rows = append(rows, vrows...)
  125. }
  126. }
  127. return tables, modules, groups, rows
  128. }
  129. func (model Table) Copy(quoteId int64, order int64) (int64, error) {
  130. id, err := db.InsertModel(db.Type(model), map[string]interface{}{
  131. "quoteId": quoteId,
  132. "name": model.Name,
  133. "property": model.Property,
  134. "order_at": order,
  135. })
  136. if err != nil {
  137. return 0, err
  138. }
  139. err = CopyHeaders(model.Headers, quoteId, id, order)
  140. if err != nil {
  141. return id, err
  142. }
  143. err = CopyModules(model.Modules, quoteId, id, order)
  144. if err != nil {
  145. return id, err
  146. }
  147. return id, nil
  148. }