马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
water/goweb
- type PagedbRequest struct {
- page.PageRequest
- //表名
- TableName string `json:"table_name"`
- //字段列表,分隔
- FieldsName string `json:"fields_name"`
- //返回日期转为int64
- TimeToInt bool `json:"time_to_int"`
- Camel2Case bool `json:"-"`
- SubTable *SubTableDto `json:"sub_table,omitempty"`
- JoinTable *SubTableDto `json:"join_table,omitempty"`
- }
复制代码- type PageRequest struct {
- basedto.BaseEntity `json:"-"`
- RequestId string `json:"request_id"`
- //每页记录数
- PageSize int `json:"page_size"`
- //当前页码
- PageCurrent int `json:"current"`
- //排序字段数组
- OrderBys []*dto.OrderByDto `json:"order_by"`
- //查询字段条件
- Fields []*dto.QueryField `json:"fields"`
- EsBoolType int `json:"es_bool_type"`
- *baseconfig.DbClientDto `json:"-"`
- }
复制代码- type PageResult struct {
- basedto.BaseEntity
- Code int `json:"code"`
- Msg string `json:"msg"`
- PageSize int `json:"page_size,omitempty"`
- PageCurrent int `json:"current,omitempty"`
- Total int `json:"total,omitempty"`
- Data any `json:"data"`
-
- }
- 测试用例
复制代码- func Test013_GeneralScanTable(t *testing.T) {
- var dbRequest = Default().SetPageSize(3)
- dbRequest.TableName = "sys_dept"
- dbRequest.FieldsName = "dept_id,dept_name" //dbRequest.SetQueryAll(true)
- var result = dbRequest.GeneralScanTable()
- golog.Info(result)
- }
复制代码 2024-10-13 10:51:45.312 [INFO] {
"code": 200,
"msg": "乐成",
"page_size": 3,
"current": 1,
"total": 10,
"data": [
{
"DeptId": 100,
"DeptName": "若依科技"
},
{
"DeptId": 101,
"DeptName": "深圳总公司"
},
{
"DeptId": 102,
"DeptName": "长沙分公司"
}
],
}
代码实现
- package pagedb
- import (
- "errors"
- "gitee.com/leijmdas/gobase/goconfig/common/base/basedto"
- "gitee.com/leijmdas/gobase/goconfig/common/base/baseutils"
- "gitee.com/leijmdas/gobase/goconfig/common/base/jsonutils"
- "gitee.com/leijmdas/gobase/goconfig/common/base/stringutils"
- "gitee.com/leijmdas/gobase/goconfig/common/gocontext"
- "gitee.com/leijmdas/gobase/goconfig/common/golog"
- "gitee.com/leijmdas/gobase/goconfig/common/ichubconfig"
- "gitee.com/leijmdas/goweb/common/meta/metadata"
- "gitee.com/leijmdas/goweb/common/meta/service"
- "gitee.com/leijmdas/goweb/commonpage/page"
- "github.com/huandu/go-clone"
- "github.com/jinzhu/gorm"
- "reflect"
- "time"
- "github.com/sirupsen/logrus"
- "strings"
- )
复制代码- func (self *PagedbRequest) GeneralScanTable() *page.PageResult {
- var metadataFactroy = service.FindBeanMetadataFactroy() //(self.DbClientDto)
- var metadata = metadataFactroy.FindMetadata(self.TableName)
- if !metadata.TableExist {
- return page.ResultFailedPageResultErr(errors.New("table not exist"))
- }
- var dbentity = self.CreateDbTableStru(metadata)
- var records, err = self.ScanTable(dbentity.Addr().Interface())
- if err != nil {
- return page.ResultFailedPageResultErr(err)
- }
- var result = page.DefaultResult()
- result.PageCurrent = self.PageCurrent
- result.PageSize = self.PageSize
- result.Total, _ = self.CountTable(self.TableName)
- result.Data = records
- return result
- }
复制代码- func (self *PagedbRequest) CreateDbTableStru(meta *metadata.MetadataTable) reflect.Value {
- // logrus.Info("CreateDbTableStru meta=", meta.ToPrettyString())
- var metaColService = service.NewMetadataFactroy()
- dbFields := []reflect.StructField{}
- for _, col := range meta.Columns {
- //logrus.Info("CreateDbTableStru col=", col.ToPrettyString())
- var colType = metaColService.FindGoType(col.DataType)
- var ColTyp8 = reflect.TypeOf(int8(0))
- var ct = func(colType string) *reflect.Type {
- var ColTyp = reflect.TypeOf(int8(0))
- switch colType {
- case "float64":
- ColTyp = reflect.TypeOf(float64(0))
- case "int64":
- ColTyp = reflect.TypeOf(int64(0))
- case "int32":
- ColTyp = reflect.TypeOf(int64(0))
- case "string":
- ColTyp = reflect.TypeOf("")
- case "bool":
- ColTyp = reflect.TypeOf(true)
- case "byte":
- ColTyp = reflect.TypeOf(byte(0))
- case "[]byte":
- ColTyp = reflect.TypeOf([]byte{})
- case "time.Time":
- ColTyp = reflect.TypeOf(time.Now())
- }
- return &ColTyp
- }(colType)
- if ColTyp8 != *ct {
- var colField = reflect.StructField{
- Name: stringutils.Case2Camel(col.ColumnName),
- Type: *ct,
- }
- if self.IfExistField(col.ColumnName) {
- //colField.Tag = reflect.StructTag(fmt.Sprintf("json:"%s"", col.ColumnName))
- dbFields = append(dbFields, colField)
- }
- }
- }
- dbtableType := reflect.StructOf(dbFields)
- dbentity := reflect.New(dbtableType).Elem()
- return dbentity
- }
复制代码- func (self *PagedbRequest) IfExistField(field string) bool {
- if self.FieldsName == "" {
- return true
- }
- if strings.Contains(field, ",") {
- return false
- }
- var fields = strings.Split(self.FieldsName, ",")
- for _, v := range fields {
- if v == field {
- return true
- }
- }
- return false
- }
复制代码- func (self *PagedbRequest) ScanTable(dbentity any) (any, error) {
- var records = []any{} //reflect.New(reflect.SliceOf(dbtableType)).Elem()
- var dbc = self.FindScanTable()
- var rows, err = dbc.Rows()
- if err != nil {
- golog.Error(err)
- return records, err
- }
- defer func() {
- rows.Close()
- }()
- for rows.Next() {
- dbentity = clone.Clone(dbentity) // dbentity := reflect.New(dbtableType).Elem()
- if err := dbc.ScanRows(rows, dbentity); err != nil {
- golog.Error("should get no error, but got ", err)
- return records, err
- }
- records = append(records, dbentity)
- }
- return baseutils.ParseArray2Map(records)
- }
复制代码- func (self *PagedbRequest) FindScanTable() *gorm.DB {
- dbc := self.GetDB().Table(self.TableName)
- dbc = self.BuildWhere(dbc)
- dbc = self.Order(dbc)
- dbc = self.SetLimit(dbc)
- if self.FieldsName != "" {
- dbc = dbc.Select(strings.Split(self.FieldsName, ","))
- }
- return dbc
- }
复制代码- func ParseArray2Map(stru []any) (any, error) {
- var bytes, err = gjson.Encode(stru)
- if err != nil {
- return nil, err
- }
- logrus.Info(1)
- return gjson.Decode(bytes)
- }
复制代码- func (self *PageRequest) CountTable(table string) (int, error) {
- dbc := self.GetDB().Table(table)
- dbc = self.BuildWhere(dbc).Offset(0).Limit(1)
- var count int
- if err := dbc.Count(&count).Error; err != nil {
- logrus.Error(err)
- return 0, err
- }
- logrus.Info("\ncount=", count)
- return count, nil
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |