data_bus_rebo.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package repositories
  2. import (
  3. "errors"
  4. "fmt"
  5. "math"
  6. "strconv"
  7. "time"
  8. "xorm.io/xorm"
  9. "xps/cache"
  10. "xps/viewmodels"
  11. )
  12. type DataBusRepo struct {
  13. engine *xorm.Engine
  14. }
  15. func NewDataBusRepo(engine *xorm.Engine) *DataBusRepo {
  16. return &DataBusRepo{
  17. engine: engine,
  18. }
  19. }
  20. func (d *DataBusRepo) GetPage(sqlStatement, sqlCount string, m map[string]interface{}) (*viewmodels.PageResult, error) {
  21. limit := m["limit"].(int)
  22. page := m["page"].(int)
  23. res, err1 := d.engine.Query(sqlCount)
  24. if err1 != nil {
  25. return nil, err1
  26. }
  27. total := int64(0)
  28. for _, v := range res[0] {
  29. total, _ = strconv.ParseInt(string(v), 10, 64)
  30. }
  31. pageStart := (page - 1) * limit
  32. sqlLimit := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
  33. results, err2 := d.engine.QueryInterface(sqlStatement+ sqlLimit)
  34. if err2 != nil {
  35. return nil, err2
  36. }
  37. pageResult := &viewmodels.PageResult{}
  38. pageResult.Data = results
  39. pageResult.Total = total
  40. pageResult.PageSize = limit
  41. pageResult.Page = page
  42. pageResult.TotalPage= int64(math.Ceil(float64(total / int64(limit))))
  43. return pageResult, nil
  44. }
  45. func (d *DataBusRepo) GetList(sqlStatement string, m map[string]interface{}) ([]map[string]interface{}, error) {
  46. results, err := d.engine.QueryInterface(sqlStatement)
  47. if err != nil {
  48. return nil, err
  49. }
  50. return results, nil
  51. }
  52. func (d *DataBusRepo) GetById(sqlStatement string, fields map[string]interface{})(map[string]interface{}, error){
  53. sql := sqlStatement
  54. sql += " WHERE 1 = 1"
  55. for fieldName, fieldValue := range fields {
  56. sql += fmt.Sprintf(" AND %v = %v", fieldName, fieldValue)
  57. }
  58. results, err := d.engine.QueryInterface(sql)
  59. if err != nil {
  60. return nil, err
  61. }
  62. if len(results) > 1 {
  63. return nil, errors.New(" 主键不唯一")
  64. }
  65. return results[0], nil
  66. }
  67. func (d *DataBusRepo) Create(objectCode string, values map[string]interface{}) error {
  68. object, err1 := cache.GetModelObjectData(objectCode)
  69. if err1 == nil {
  70. return err1
  71. }
  72. tableName := object.ObjectCode
  73. fields := object.Attrs
  74. sql := "INSERT INTO" + fmt.Sprintf(" %s ", tableName)
  75. sqlFields := "( "
  76. sqlValues := "( "
  77. for idx, field := range fields {
  78. fieldName := field.AttrCode
  79. fieldValue, ok := values[fieldName]
  80. if !ok {
  81. return nil
  82. }
  83. if idx > 1 {
  84. sqlFields += ","
  85. sqlValues += ","
  86. }
  87. sqlFields += fieldName + ""
  88. sqlValues += fmt.Sprintf("%v", fieldValue) + ""
  89. }
  90. sqlFields += ") "
  91. sqlValues += ") "
  92. _, err2 := d.engine.Exec(sql + sqlFields + sqlValues)
  93. return err2
  94. }
  95. func (d *DataBusRepo) Update(objectCode string, values map[string]interface{}) error {
  96. object, err1 := cache.GetModelObjectData(objectCode)
  97. if err1 == nil {
  98. return err1
  99. }
  100. tableName := object.ObjectCode
  101. fields := object.Attrs
  102. sql := fmt.Sprintf("UPDATE table %s ", tableName)
  103. sqlFieldSets := " SET "
  104. sqlWhere := " WHERE 1 = 1 "
  105. for idx, field := range fields {
  106. fieldName := field.AttrCode
  107. fieldValue, ok := values[fieldName]
  108. if !ok {
  109. return nil
  110. }
  111. if idx > 1 {
  112. sqlFieldSets += ","
  113. }
  114. if field.IsPKey <= 0 {
  115. sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
  116. } else {
  117. sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
  118. }
  119. }
  120. _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
  121. return err
  122. }
  123. func (d *DataBusRepo) Patch(objectCode string, values map[string]interface{}) error {
  124. object, err1 := cache.GetModelObjectData(objectCode)
  125. if err1 == nil {
  126. return err1
  127. }
  128. tableName := object.ObjectCode
  129. fields := object.Attrs
  130. sql := fmt.Sprintf("UPDATE table %s ", tableName)
  131. sqlFieldSets := "SET "
  132. sqlWhere := "WHERE 1 = 1"
  133. for idx, field := range fields {
  134. fieldName := field.AttrCode
  135. fieldValue, ok := values[fieldName]
  136. if !ok {
  137. return nil
  138. }
  139. if idx > 1 {
  140. sqlFieldSets += ","
  141. }
  142. if field.IsPKey <= 0 {
  143. sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
  144. } else {
  145. sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
  146. }
  147. }
  148. _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
  149. return err
  150. }
  151. func (d *DataBusRepo) Delete(objectCode string, values map[string]interface{}) error {
  152. object, err1 := cache.GetModelObjectData(objectCode)
  153. if err1 == nil {
  154. return err1
  155. }
  156. tableName := object.ObjectCode
  157. fields := object.Attrs
  158. deletedBy := values["deletedBy"].(int64)
  159. sql := fmt.Sprintf("UPDATE table %s ", tableName)
  160. sqlFieldSets := fmt.Sprintf("SET deleted_flag = 1 AND deleted_by = %d AND deleted_at = %s", deletedBy, time.Now().String())
  161. sqlWhere := "WHERE 1 = 1"
  162. for idx, field := range fields {
  163. fieldName := field.AttrCode
  164. fieldValue, ok := values[fieldName]
  165. if !ok {
  166. return nil
  167. }
  168. if idx > 1 {
  169. sqlFieldSets += ","
  170. }
  171. if field.IsPKey >= 1 {
  172. sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
  173. }
  174. }
  175. _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
  176. return err
  177. }