|
@@ -0,0 +1,190 @@
|
|
|
|
|
+package repositories
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "errors"
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+ "time"
|
|
|
|
|
+ "xorm.io/xorm"
|
|
|
|
|
+ "xps/datamodels"
|
|
|
|
|
+ "xps/viewmodels"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+type DataBusRepo struct {
|
|
|
|
|
+ engine *xorm.Engine
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func NewDataBusRepo(engine *xorm.Engine) *DataBusRepo {
|
|
|
|
|
+ return &DataBusRepo{
|
|
|
|
|
+ engine: engine,
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) GetPage(sqlSelect, sqlFrom, sqlWhere, sqlOrderBy string, m map[string]interface{}) (*viewmodels.PageResult, error) {
|
|
|
|
|
+ limit := m["limit"].(int)
|
|
|
|
|
+ page := m["page"].(int)
|
|
|
|
|
+
|
|
|
|
|
+ sqlCount := ` SELECT COUNT(*) `
|
|
|
|
|
+ _, err1 := d.engine.Exec(sqlCount + sqlFrom + sqlWhere)
|
|
|
|
|
+ if err1 != nil {
|
|
|
|
|
+ return nil, err1
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ pageStart := (page - 1) * limit
|
|
|
|
|
+ sqlLimit := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
|
|
|
|
|
+
|
|
|
|
|
+ datalist := make([]datamodels.App, 0)
|
|
|
|
|
+ err2 := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
|
|
|
|
|
+ if err2 != nil {
|
|
|
|
|
+ return nil, err2
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ pageResult := &viewmodels.PageResult{}
|
|
|
|
|
+ pageResult.Data = datalist
|
|
|
|
|
+ pageResult.Total = 0
|
|
|
|
|
+ pageResult.PageSize = limit
|
|
|
|
|
+ pageResult.Page = page
|
|
|
|
|
+ return pageResult, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) GetList(sqlSelect, sqlFrom, sqlWhere, sqlOrderBy string, m map[string]interface{}) ([]map[string]interface{}, error) {
|
|
|
|
|
+ results, err := d.engine.QueryInterface(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ return results, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) GetById(statement string, fields map[string]interface{})(map[string]interface{}, error){
|
|
|
|
|
+
|
|
|
|
|
+ sql := statement
|
|
|
|
|
+ sql += " WHERE 1 = 1"
|
|
|
|
|
+
|
|
|
|
|
+ for fieldName, fieldValue := range fields {
|
|
|
|
|
+ sql += fmt.Sprintf(" AND %v = %v", fieldName, fieldValue)
|
|
|
|
|
+ }
|
|
|
|
|
+ results, err := d.engine.QueryInterface(sql)
|
|
|
|
|
+
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ if len(results) > 1 {
|
|
|
|
|
+ return nil, errors.New(" 主键不唯一")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return results[0], nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) Create(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
|
|
|
|
|
+ tableName := object.ObjectCode
|
|
|
|
|
+
|
|
|
|
|
+ sql := "INSERT INTO" + fmt.Sprintf(" %s ", tableName)
|
|
|
|
|
+ sqlFields := "( "
|
|
|
|
|
+ sqlValues := "( "
|
|
|
|
|
+ for idx, field := range fields {
|
|
|
|
|
+ fieldName := field.AttrCode
|
|
|
|
|
+ fieldValue, ok := values[fieldName]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if idx > 1 {
|
|
|
|
|
+ sqlFields += ","
|
|
|
|
|
+ sqlValues += ","
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ sqlFields += fieldName + ""
|
|
|
|
|
+ sqlValues += fmt.Sprintf("%v", fieldValue) + ""
|
|
|
|
|
+ }
|
|
|
|
|
+ sqlFields += ") "
|
|
|
|
|
+ sqlValues += ") "
|
|
|
|
|
+
|
|
|
|
|
+ _, err := d.engine.Exec(sql + sqlFields + sqlValues)
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) Update(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
|
|
|
|
|
+ tableName := object.ObjectCode
|
|
|
|
|
+
|
|
|
|
|
+ sql := fmt.Sprintf("UPDATE table %s ", tableName)
|
|
|
|
|
+
|
|
|
|
|
+ sqlFieldSets := "SET "
|
|
|
|
|
+ sqlWhere := "WHERE 1 = 1"
|
|
|
|
|
+ for idx, field := range fields {
|
|
|
|
|
+ fieldName := field.AttrCode
|
|
|
|
|
+ fieldValue, ok := values[fieldName]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if idx > 1 {
|
|
|
|
|
+ sqlFieldSets += ","
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if field.IsPKey <= 0 {
|
|
|
|
|
+ sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) Patch(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
|
|
|
|
|
+ tableName := object.ObjectCode
|
|
|
|
|
+
|
|
|
|
|
+ sql := fmt.Sprintf("UPDATE table %s ", tableName)
|
|
|
|
|
+
|
|
|
|
|
+ sqlFieldSets := "SET "
|
|
|
|
|
+ sqlWhere := "WHERE 1 = 1"
|
|
|
|
|
+ for idx, field := range fields {
|
|
|
|
|
+ fieldName := field.AttrCode
|
|
|
|
|
+ fieldValue, ok := values[fieldName]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if idx > 1 {
|
|
|
|
|
+ sqlFieldSets += ","
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if field.IsPKey <= 0 {
|
|
|
|
|
+ sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sqlWhere += fmt.Sprintf(" AND %s = %v ", fieldName, fieldValue) + ""
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+func (d *DataBusRepo) Delete(object datamodels.Object, fields []datamodels.ObjectAttr, values map[string]interface{}) error {
|
|
|
|
|
+ tableName := object.ObjectCode
|
|
|
|
|
+ deletedBy := values["deletedBy"].(int64)
|
|
|
|
|
+
|
|
|
|
|
+ sql := fmt.Sprintf("UPDATE table %s ", tableName)
|
|
|
|
|
+ sqlFieldSets := fmt.Sprintf("SET deleted_flag = 1 AND deleted_by = %d AND deleted_at = %s", deletedBy, time.Now().String())
|
|
|
|
|
+
|
|
|
|
|
+ sqlWhere := "WHERE 1 = 1"
|
|
|
|
|
+ for idx, field := range fields {
|
|
|
|
|
+ fieldName := field.AttrCode
|
|
|
|
|
+ fieldValue, ok := values[fieldName]
|
|
|
|
|
+ if !ok {
|
|
|
|
|
+ return nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if idx > 1 {
|
|
|
|
|
+ sqlFieldSets += ","
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if field.IsPKey >= 1 {
|
|
|
|
|
+ sqlFieldSets += fmt.Sprintf(" %s = %v ", fieldName, fieldValue) + ""
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err := d.engine.Exec(sql + sqlFieldSets + sqlWhere)
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|