Quellcode durchsuchen

值班主表的增删改查

liuyang vor 5 Jahren
Ursprung
Commit
87420fb386

+ 112 - 100
backend/src/dashoo.cn/modi_webapi/app/api/duty/duty.go

@@ -1,139 +1,151 @@
 package duty
 
 import (
-	"dashoo.cn/modi_webapi/app/service/duty"
+	"dashoo.cn/modi_webapi/app/common"
+	"dashoo.cn/modi_webapi/app/model/duty"
+	dutyService "dashoo.cn/modi_webapi/app/service/duty"
 	"dashoo.cn/modi_webapi/library/request"
 	"dashoo.cn/modi_webapi/library/response"
-	"fmt"
 	"github.com/gogf/gf/net/ghttp"
-	"github.com/gogf/gf/os/gtime"
-	"github.com/gogf/gf/util/gvalid"
 )
 
-type Controller struct {
+type DutyController struct {
 }
-//  获取值班管理列表
-func (c *Controller) GetAllDuty(r *ghttp.Request){
-	page := request.GetPageInfo(r)
-	where := ""
 
-	if year := r.GetInt("Year"); year != 0 {
-		if where == ""{
-			where = fmt.Sprintf(" Year = %v", year)
-		} else {
-			where += fmt.Sprintf(" AND Year = %v", year)
-		}
+// 分页查询
+func (c *DutyController) GetPageList(r *ghttp.Request) {
+	// tenant 租户模式
+	tenant := r.Header.Get("Tenant")
+	page := request.GetPageInfo(r)
+	// 初始化service
+	service, err := dutyService.NewDutyService(tenant)
+	if err != nil {
+		response.Json(r, 1, err.Error())
 	}
-
-	if term := r.GetString("Term"); term != ""{
-		if where == ""{
-			where = fmt.Sprintf(" Term LIKE '%%%v%%'", term)
-		} else {
-			where += fmt.Sprintf(" AND Term LIKE '%%%v%%'", term)
-		}
+	pageInfo := common.PageInfo{
+		Current:   page.Current,
+		PagesSize: page.Size,
+	}
+	selectPageReq := duty.SelectPageReq{
+		Tenant: tenant,
+		Title:  "",
+		Year:   0,
+		Term:   0,
+		Page:   &pageInfo,
+		Order:  r.GetString("order"),
+	}
+	if Title := r.GetString("Title"); Title != "" {
+		selectPageReq.Title = Title
+	}
+	if Year := r.GetInt("Year"); Year != 0 {
+		selectPageReq.Year = Year
+	}
+	if Term := r.GetInt("Term"); Term != 0 {
+		selectPageReq.Term = Term
 	}
 
-	var result []duty.Entity
-	if err := duty.GetAllDuty(page, where, &result); err != nil{
-		if err.Error() == "sql: no rows in result set"{
-			response.Json(r, 0, "")
-			return
-		}
+	if dutyList, total, err := service.GetPageList(&selectPageReq); err != nil {
 		response.Json(r, -1, err.Error())
-	}else {
-		count, err1 := duty.FindDutyCount(where)
-		if err1 != nil {
-			response.Json(r, -1, err1.Error())
-		} else {
-			var records response.PagedRecords
-			records.Size = page.Size
-			records.Current = page.Current
-			records.Total = count
-			records.Records = result
-			response.Json(r, 0, "", records)
-		}
+	} else {
+		var records response.PagedRecords
+		records.Current = page.Current
+		records.Size = page.Size
+		records.Total = total
+		records.Records = dutyList
+		response.Json(r, 0, "ok", records)
 	}
 }
 
-//  添加一条值班信息
-func (c *Controller) AddDuty(r *ghttp.Request){
-	Duty := new(duty.Entity)
-	if err := r.Parse(Duty); err != nil {
-		// 数据验证错误
-		if v, ok := err.(*gvalid.Error); ok {
-			response.Json(r, 1, v.FirstString())
-			r.ExitAll()
-		}
-		// 其他错误
-		response.Json(r, 1, err.Error())
-		r.ExitAll()
+// 添加值班
+func (c *DutyController) AddDuty(r *ghttp.Request) {
+	// tenant 租户模式
+	tenant := r.Header.Get("Tenant")
+	var entity *duty.Entity
+	// 赋值并校验参数
+	if err := r.Parse(&entity); err != nil {
+		response.Json(r, -1, err.Error())
+	}
+	// 初始化课程详情service
+	service, err := dutyService.NewDutyService(tenant)
+	if err != nil {
+		response.Json(r, -1, err.Error())
 	}
+	// 获取操作人
 	realName := r.GetParamVar("realname").String()
-	currentTime := gtime.Now()
-	Duty.CreatedTime = currentTime
-	Duty.CreatedBy = realName
-	Duty.UpdatedTime = currentTime
-	Duty.UpdatedBy = realName
-
-	if result,err := duty.Insert(Duty); err != nil {
+	entity.CreatedBy = realName
+	if newId, err := service.Add(entity); err != nil {
 		response.Json(r, 1, err.Error())
 	} else {
-		var records response.PagedRecords
-		id, _ := result.LastInsertId()
-		Duty.Id = int(id)
-		records.Records = Duty
-		response.Json(r, 0, "", records)
+		response.Json(r, 0, "新增成功", newId)
 	}
+
 }
-//  获取一条值班信息
-func (c *Controller) GetOneDuty(r *ghttp.Request){
-	id := r.GetInt("id")
-	if result, err := duty.FindOne(id); err != nil {
+
+// 获取详情
+func (c *DutyController) GetDutyById(r *ghttp.Request) {
+	// tenant 租户模式
+	tenant := r.Header.Get("Tenant")
+	Id := r.GetInt("Id")
+	// 初始化课程详情service
+	service, err := dutyService.NewDutyService(tenant)
+	if err != nil {
+		response.Json(r, -1, err.Error())
+	}
+	if duty, err := service.GetDutyById(Id); err != nil {
 		response.Json(r, 1, err.Error())
-		r.ExitAll()
-	}else {
-		var records response.PagedRecords
-		records.Records = result
-		response.Json(r, 0, "", records)
+	} else {
+		response.Json(r, 0, "ok", duty)
 	}
 
 }
 
-// 修改一条值班信息
-func (c *Controller) UpdateDuty(r *ghttp.Request){
-	Duty := new(duty.Entity)
-	if err := r.Parse(Duty); err != nil {
-		// 数据验证错误
-		if v, ok := err.(*gvalid.Error); ok {
-			response.Json(r, 1, v.FirstString())
-			r.ExitAll()
-		}
-		// 其他错误
-		response.Json(r, 1, err.Error())
-		r.ExitAll()
+// 更新
+func (c *DutyController) UpdateDuty(r *ghttp.Request) {
+	// tenant 租户模式
+	tenant := r.Header.Get("Tenant")
+	var entity *duty.Entity
+	// 赋值并校验参数
+	if err := r.Parse(&entity); err != nil {
+		response.Json(r, -1, err.Error())
 	}
-
+	// 初始化课程详情service
+	service, err := dutyService.NewDutyService(tenant)
+	if err != nil {
+		response.Json(r, -1, err.Error())
+	}
+	// 获取操作人
 	realName := r.GetParamVar("realname").String()
-	currentTime := gtime.Now()
+	entity.UpdatedBy = realName
 
-	Duty.UpdatedTime = currentTime
-	Duty.UpdatedBy = realName
-
-	if _,err := duty.Replace(Duty); err != nil {
+	if duty, err := service.Save(entity); err != nil {
 		response.Json(r, 1, err.Error())
 	} else {
-		var records response.PagedRecords
-		records.Records = Duty
-		response.Json(r, 0, "", records)
+		response.Json(r, 0, "更新成功", duty)
 	}
+
 }
- //   删除一条值班信息
-func (c *Controller) DeleteDuty(r *ghttp.Request){
-	id := r.GetInt("id")
-	if _,err := duty.Delete(fmt.Sprintf("Id=%v", id)); err != nil{
+
+// 删除
+func (c *DutyController) DeleteDuty(r *ghttp.Request) {
+	// tenant 租户模式
+	tenant := r.Header.Get("Tenant")
+	// 详情id
+	Ids := r.GetInts("ids")
+	delIdsReq := new(common.DeleteIdsReq)
+	delUpdReq := new(common.DeleteUpdReq)
+	delIdsReq.Id = Ids
+	// 获取操作人
+	realName := r.GetParamVar("realname").String()
+	delUpdReq.UpdatedBy = realName
+	// 初始化课程详情service
+	service, err := dutyService.NewDutyService(tenant)
+	if err != nil {
+		response.Json(r, -1, err.Error())
+	}
+	if err := service.DeleteById(delIdsReq, delUpdReq); err != nil {
 		response.Json(r, 1, err.Error())
-		r.ExitAll()
 	} else {
-		response.Json(r, 0, "该记录已删除!")
+		response.Json(r, 0, "删除成功")
 	}
+
 }

+ 18 - 0
backend/src/dashoo.cn/modi_webapi/app/common/utils.go

@@ -2,6 +2,7 @@ package common
 
 import (
 	"bytes"
+	"github.com/gogf/gf/os/gtime"
 	"strings"
 )
 
@@ -55,3 +56,20 @@ func UnMarshal(name string) string {
 	s := strings.ToLower(buf.String())
 	return s
 }
+
+// 分页请求
+type PageInfo struct {
+	Current   int `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"`
+	PagesSize int `protobuf:"varint,2,opt,name=pages_size,json=pagesSize,proto3" json:"pages_size,omitempty"`
+}
+
+type DeleteIdsReq struct {
+	Id []int // 批量删除,id以逗号隔开
+}
+
+// 删除详情请求
+type DeleteUpdReq struct {
+	IsDel       int         `orm:"isDel"`       // 是否删除 0未删除 1已删除
+	UpdatedBy   string      `orm:"UpdatedBy"`   // 更新人
+	UpdatedTime *gtime.Time `orm:"UpdatedTime"` // 更新时间
+}

+ 1 - 2
backend/src/dashoo.cn/modi_webapi/app/model/course/detail/detail.go

@@ -21,14 +21,13 @@ type PageInfo struct {
 
 type SelectPageReq struct {
 	Tenant     string    `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"`
-	CourseName string    `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+	CourseName string    `protobuf:"bytes,2,opt,name=CourseName,proto3" json:"CourseName,omitempty"`
 	Page       *PageInfo `protobuf:"bytes,3,opt,name=page" json:"page,omitempty"`
 	CourseId   int       `protobuf:"varint,4,opt,name=CourseId,json=CourseId,proto3" json:"CourseId,omitempty"`
 	Prop       string    `json:prop`
 	Order      string    `json:order`
 }
 
-
 // 删除详情请求
 type DeleteUpdReq struct {
 	IsDel       int         `orm:"isDel"`       // 是否删除 0未删除 1已删除

+ 35 - 0
backend/src/dashoo.cn/modi_webapi/app/model/duty/duty.go

@@ -0,0 +1,35 @@
+// ============================================================================
+// This is auto-generated by gf cli tool only once. Fill this file as you wish.
+// ============================================================================
+
+package duty
+
+import (
+	"dashoo.cn/modi_webapi/app/common"
+	"dashoo.cn/modi_webapi/library/request"
+	"github.com/gogf/gf/frame/g"
+)
+
+var (
+	recordsTable = g.DB().Table(Table).Safe()
+)
+
+func GetAllDuty(page request.PageInfo, where string, result *[]Entity) (err error) {
+	err = recordsTable.Where(where).Limit((page.Current-1)*page.Size, page.Size).Scan(result)
+	return err
+}
+
+func FindDutyCount(where string) (int, error) {
+	return recordsTable.Where(where).Count()
+}
+
+// 搜索请求
+type SelectPageReq struct {
+	Tenant string           `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"`
+	Title  string           `protobuf:"bytes,2,opt,name=Title,proto3" json:"Title,omitempty"`
+	Year   int              `protobuf:"bytes,2,opt,name=Year,proto3" json:"Year,omitempty"`
+	Term   int              `protobuf:"bytes,2,opt,name=Term,proto3" json:"Term,omitempty"`
+	Page   *common.PageInfo `protobuf:"bytes,3,opt,name=page" json:"page,omitempty"`
+	Prop   string           `json:prop`
+	Order  string           `json:order`
+}

+ 11 - 22
backend/src/dashoo.cn/modi_webapi/app/service/duty/duty_entity.go → backend/src/dashoo.cn/modi_webapi/app/model/duty/duty_entity.go

@@ -12,26 +12,16 @@ import (
 
 // Entity is the golang structure for table instrument.
 type Entity struct {
-	Id                      int           `xorm:"not null pk autoincr INT(10)"`  // id
-	Year                    int           `xorm:"not null pk autoincr INT(11)"`  // 学年
-	Term                    string        `xorm:"VARCHAR(32)"`                   // 学期
-	Title                   string        `xorm:"VARCHAR(32)"`                   // 标题
-	Local                   string        `xorm:"VARCHAR(32)"`                   // 地点
-	Time                    int           `xorm:"INT(11)"`                       // 时间段
-	Status                  string        `xorm:"VARCHAR(32)"`                   // 状态
-	People                  string        `xorm:"VARCHAR(32)"`                   // 值班人员
-	Monday                  int           `xorm:"INT(11)"`                       // 周一
-	Tuesday                 int           `xorm:"INT(11)"`                       // 周二
-	Wednesday               int           `xorm:"INT(11)"`                       // 周三
-	Thursday                int           `xorm:"INT(11)"`                       // 周四
-	Friday                  int           `xorm:"INT(11)"`                       // 周五
-	Saturday                int           `xorm:"INT(11)"`                       // 周六
-	Sunday                  int           `xorm:"INT(11)"`                       // 周日/周天
-	CreatedBy               string        `xorm:"VARCHAR(32)"`                   // 创建人
-	CreatedTime             *gtime.Time   `xorm:"DATETIME created"`              // 创建时间
-	UpdatedBy               string        `xorm:"VARCHAR(32)"`                   // 更新人
-	UpdatedTime             *gtime.Time   `xorm:"DATETIME updated"`              // 更新时间
-	IsDel                   int           `xorm:"INT(11)"`                       // 删除标志
+	Id          int         `xorm:"not null pk autoincr INT(10)"` // id
+	Year        int         `xorm:"not null pk autoincr INT(11)"` // 学年
+	Term        string      `xorm:"VARCHAR(32)"`                  // 学期
+	Title       string      `xorm:"VARCHAR(32)"`                  // 标题
+	Status      string      `xorm:"VARCHAR(32)"`                  // 状态
+	CreatedBy   string      `xorm:"VARCHAR(32)"`                  // 创建人
+	CreatedTime *gtime.Time `xorm:"DATETIME created"`             // 创建时间
+	UpdatedBy   string      `xorm:"VARCHAR(32)"`                  // 更新人
+	UpdatedTime *gtime.Time `xorm:"DATETIME updated"`             // 更新时间
+	IsDel       int         `xorm:"INT(11)"`                      // 删除标志
 
 }
 
@@ -46,7 +36,6 @@ func (r *Entity) Insert() (result sql.Result, err error) {
 	return Model.Data(r).Insert()
 }
 
-
 // Replace does "REPLACE...INTO..." statement for inserting current object into table.
 // If there's already another same record in the table (it checks using primary key or unique index),
 // it deletes it and insert this one.
@@ -71,4 +60,4 @@ func (r *Entity) Update() (result sql.Result, err error) {
 // Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
 func (r *Entity) Delete() (result sql.Result, err error) {
 	return Model.Where(gdb.GetWhereConditionOfStruct(r)).Delete()
-}
+}

+ 1 - 1
backend/src/dashoo.cn/modi_webapi/app/service/duty/duty_model.go → backend/src/dashoo.cn/modi_webapi/app/model/duty/duty_model.go

@@ -366,4 +366,4 @@ func (m *arModel) Chunk(limit int, callback func(entities []*Entity, err error)
 		return callback(entities, err)
 	})
 
-}
+}

+ 1 - 1
backend/src/dashoo.cn/modi_webapi/app/service/course/detail/detail.go

@@ -39,7 +39,7 @@ func (s CourseDetailService) Update(param *detail.Entity) (*detail.Entity, error
 	}
 	// 设置更新时间
 	param.UpdatedTime = gtime.Now()
-	if _, err = s.SafeModel.WherePri(param.Id).Update(param); err != nil {
+	if _, err = s.SafeModel.Where(param.Id).Update(param); err != nil {
 		return nil, err
 	}
 	return detail, nil

+ 90 - 14
backend/src/dashoo.cn/modi_webapi/app/service/duty/duty.go

@@ -1,23 +1,99 @@
-// ============================================================================
-// This is auto-generated by gf cli tool only once. Fill this file as you wish.
-// ============================================================================
-
 package duty
 
 import (
-	"dashoo.cn/modi_webapi/library/request"
-	"github.com/gogf/gf/frame/g"
+	"dashoo.cn/micro_libary/db"
+	"dashoo.cn/modi_webapi/app/common"
+	"dashoo.cn/modi_webapi/app/model/duty"
+	"database/sql"
+	"github.com/gogf/gf/errors/gerror"
+	"github.com/gogf/gf/os/gtime"
 )
 
-var (
-	recordsTable = g.DB().Table("duty").Safe()
-)
+// DutyService 值班定义
+type DutyService struct {
+	db.ServiceBase
+}
+
+// 初始化DutyService
+func NewDutyService(tenant string) (DutyService, error) {
+	var service DutyService
+	err := service.Init(tenant, duty.Table)
+	return service, err
+}
+
+// 分页查询值班表
+func (s DutyService) GetPageList(param *duty.SelectPageReq) (list []*duty.Entity, total int, err error) {
+	model := s.DB.Table(duty.Table)
+	if param != nil {
+		if param.Title != "" {
+			model = model.Where("Title like ?", "%"+param.Title+"%")
+		}
+		if param.Year != 0 {
+			model = model.Where("Year", param.Year)
+		}
+		if param.Term != 0 {
+			model = model.Where("Term", param.Term)
+		}
+	}
+	// 查询总数
+	total, err = model.Where("isDel", 0).Count()
+	if err != nil {
+		return nil, -1, gerror.New("读取行数失败")
+	}
+	// 排序
+	orderby := "Id asc" // 默认排序
+	// 列表查询
+	model = model.Page(int(param.Page.Current), int(param.Page.PagesSize)).Order(orderby)
+	var result []*duty.Entity
+	err = model.Struct(&result)
+	// 如果未查到列表返回空
+	if err == sql.ErrNoRows {
+		return nil, 0, nil
+	}
+	return result, total, err
+}
+
+// 新增
+func (s DutyService) Add(param *duty.Entity) (id int64, err error) {
+	param.CreatedTime = gtime.Now()
+	if result, err := s.SafeModel.Insert(param); err != nil {
+		return 0, err
+	} else {
+		id, _ = result.LastInsertId()
+	}
+	return id, nil
+}
+
+// 获取详情
+func (s DutyService) GetDutyById(id int) (res *duty.Entity, err error) {
+	model := s.SafeModel.Where("Id", id).Where("isDel", 0)
+	var result *duty.Entity
+	err = model.Struct(&result)
+	return result, nil
+}
 
-func GetAllDuty(page request.PageInfo, where string, result *[]Entity)(err error){
-	err = recordsTable.Where(where).Limit((page.Current-1)*page.Size, page.Size).Scan(result)
-	return err
+// 删除
+func (s DutyService) DeleteById(Ids *common.DeleteIdsReq, param *common.DeleteUpdReq) error {
+	//设置更新时间
+	param.UpdatedTime = gtime.Now()
+	// 修改删除状态
+	param.IsDel = 1
+	if _, err := s.SafeModel.WherePri(Ids).Update(param); err != nil {
+		return err
+	}
+	return nil
 }
 
-func FindDutyCount(where string)(int, error){
-	return recordsTable.Where(where).Count()
+// 更新
+func (s DutyService) Save(param *duty.Entity) (*duty.Entity, error) {
+	duty, err := s.GetDutyById(param.Id)
+	if err != nil {
+		return nil, err
+	}
+	// 设置更新时间
+	param.UpdatedTime = gtime.Now()
+	if _, err = s.SafeModel.Where(param.Id).Update(param); err != nil {
+		return nil, err
+	}
+	return duty, nil
 }

+ 4 - 4
backend/src/dashoo.cn/modi_webapi/router/router.go

@@ -9,12 +9,12 @@ import (
 	"dashoo.cn/modi_webapi/app/api/instrument"
 	"dashoo.cn/modi_webapi/app/api/microDemo"
 	"dashoo.cn/modi_webapi/app/api/neo"
+	"dashoo.cn/modi_webapi/app/api/personnel"
 	"dashoo.cn/modi_webapi/app/api/system/item"
 	"dashoo.cn/modi_webapi/app/api/system/itemdetail"
 	"dashoo.cn/modi_webapi/app/api/system/menu"
 	"dashoo.cn/modi_webapi/app/api/system/organize"
 	"dashoo.cn/modi_webapi/app/api/system/permission"
-	"dashoo.cn/modi_webapi/app/api/personnel"
 	"dashoo.cn/modi_webapi/app/api/system/role"
 	"dashoo.cn/modi_webapi/app/api/system/user"
 	"dashoo.cn/modi_webapi/library/gtoken"
@@ -55,7 +55,7 @@ func init() {
 		// 班级管理
 		{"All", "/class", new(class.Controller)},
 		// 值班表管理
-		{"All", "/duty", new(duty.Controller)},
+		{"All", "/duty", new(duty.DutyController)},
 		// 课程管理
 		{"All", "/course", new(course.Controller)},
 		{"All", "/course/detail", new(detail.CourseDetailController)},
@@ -87,8 +87,8 @@ func init() {
 		LoginPath:        "/login",
 		LoginBeforeFunc:  loginFunc,
 		LogoutPath:       "/logout",
-		AuthPaths:        g.SliceStr{"/api"},                                                                               // 这里是按照前缀拦截,拦截/api
-		AuthExcludePaths: g.SliceStr{"/api/class/*", "/api/student/*", "/api/micro/*", "/api/item/*", "/api/itemdetail/*","/api/information/*","/api/duty/*","/api/course/*","/api/itemdetail/*"}, // 不拦截路径
+		AuthPaths:        g.SliceStr{"/api"},                                                                                                                                                          // 这里是按照前缀拦截,拦截/api
+		AuthExcludePaths: g.SliceStr{"/api/class/*", "/api/student/*", "/api/micro/*", "/api/item/*", "/api/itemdetail/*", "/api/information/*", "/api/duty/*", "/api/course/*", "/api/itemdetail/*"}, // 不拦截路径
 	}
 	gfToken.Start()
 }

+ 125 - 15
doc/系统设计/数据库设计/data.pdman.json

@@ -459,7 +459,7 @@
       "chnname": "实验室值班人员管理",
       "entities": [
         {
-          "title": "DUTY",
+          "title": "duty_detail",
           "fields": [
             {
               "name": "Id",
@@ -471,22 +471,11 @@
               "autoIncrement": true
             },
             {
-              "name": "Year",
+              "name": "DutyId",
               "type": "Integer",
               "remark": "",
-              "chnname": "学年"
-            },
-            {
-              "name": "Term",
-              "type": "DefaultString",
-              "remark": "",
-              "chnname": "学期"
-            },
-            {
-              "name": "Title",
-              "type": "DefaultString",
-              "remark": "",
-              "chnname": "标题"
+              "chnname": "值班ID",
+              "notNull": true
             },
             {
               "name": "Local",
@@ -633,6 +622,127 @@
               "relationNoShow": true
             }
           ],
+          "chnname": "值班详情表"
+        },
+        {
+          "title": "duty",
+          "fields": [
+            {
+              "name": "Id",
+              "type": "Integer",
+              "remark": "",
+              "chnname": "主键",
+              "pk": true,
+              "notNull": true,
+              "autoIncrement": true
+            },
+            {
+              "name": "Year",
+              "type": "Integer",
+              "remark": "",
+              "chnname": "学年",
+              "notNull": true
+            },
+            {
+              "name": "Term",
+              "type": "Integer",
+              "remark": "",
+              "chnname": "学期",
+              "notNull": true
+            },
+            {
+              "name": "Title",
+              "type": "DefaultString",
+              "remark": "",
+              "chnname": "标题",
+              "notNull": true
+            },
+            {
+              "name": "Status",
+              "type": "Integer",
+              "remark": "",
+              "chnname": "状态",
+              "notNull": true
+            },
+            {
+              "name": "CreatedBy",
+              "type": "IdOrKey",
+              "remark": "",
+              "chnname": "创建人"
+            },
+            {
+              "name": "CreatedTime",
+              "type": "DateTime",
+              "remark": "",
+              "chnname": "创建时间"
+            },
+            {
+              "name": "UpdatedBy",
+              "type": "IdOrKey",
+              "remark": "",
+              "chnname": "更新人"
+            },
+            {
+              "name": "UpdatedTime",
+              "type": "DateTime",
+              "remark": "",
+              "chnname": "更新时间"
+            },
+            {
+              "name": "IsDel",
+              "type": "Integer",
+              "remark": "",
+              "chnname": "删除标志",
+              "notNull": true
+            }
+          ],
+          "indexs": [],
+          "headers": [
+            {
+              "fieldName": "chnname",
+              "relationNoShow": false
+            },
+            {
+              "fieldName": "name",
+              "relationNoShow": false
+            },
+            {
+              "fieldName": "type",
+              "relationNoShow": false
+            },
+            {
+              "fieldName": "dataType",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "remark",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "pk",
+              "relationNoShow": false
+            },
+            {
+              "fieldName": "notNull",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "autoIncrement",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "defaultValue",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "relationNoShow",
+              "relationNoShow": true
+            },
+            {
+              "fieldName": "uiHint",
+              "relationNoShow": true
+            }
+          ],
           "chnname": "值班表"
         }
       ],