data_bus_rebo.go 7.8 KB

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