..........

This commit is contained in:
2025-05-19 13:41:43 +08:00
parent 52a9d40792
commit a66f1c69b1
6 changed files with 73 additions and 27 deletions

View File

@@ -5,7 +5,7 @@
<body > <body >
<div align=center> <div align=center>
<h1>网维排班系统</h1> <h1>网维排班系统</h1>
<a href=/assignment.html>查看今日值班表</br></a> <a href=/testAssignment.html>查看今日值班表</br></a>
<br> <br>
<a href=/switch.html>发起换班</br></a> <a href=/switch.html>发起换班</br></a>
<a href=/repay.html>发起补班</br></a> <a href=/repay.html>发起补班</br></a>

View File

@@ -18,28 +18,21 @@ var data *[7][]*model.Member
var mutex sync.RWMutex //lock for data var mutex sync.RWMutex //lock for data
var err error var err error
// /api/getAssignment GET 获取当日值班表返回html // /api/getAssignment GET 获取当日值班表
// 接受参数date,是需要生成值班表的日期 // 接受参数date,是需要生成值班表的日期
func GetAssignment(i echo.Context) error { func GetAssignment(i echo.Context) error {
//如果没有参数,则生成当前时间
arg := carbon.Now()
//如果指定了参数,则生成参数指定的 //如果指定了参数,则生成参数指定的
if date := i.QueryParam("date"); date != "" { if date := i.QueryParam("date"); date != "" {
mutex.Lock() arg = carbon.Parse(date)
data, err = generateTable(carbon.Parse(date))
mutex.Unlock()
if err != nil {
i.String(http.StatusInternalServerError, err.Error())
return echo.ErrInternalServerError
}
goto render
} }
//如果没有参数,则生成当前时间
if (carbon.Now().ToDateString() != signals.Table.GetLastUpdated().ToDateString()) || signals.Table.IsNeedUpdate() == true { if (carbon.Now().ToDateString() != signals.Table.GetLastUpdated().ToDateString()) || signals.Table.IsNeedUpdate() == true {
mutex.Lock() mutex.Lock()
data, err = generateTable(carbon.Now()) data, err = generateTable(arg)
mutex.Unlock() mutex.Unlock()
if err != nil { if err != nil {
@@ -50,9 +43,8 @@ func GetAssignment(i echo.Context) error {
//signals.Table.SetUpdated(carbon.Now()) //signals.Table.SetUpdated(carbon.Now())
//测试时注释掉上面的状态更新方便调试 //测试时注释掉上面的状态更新方便调试
} }
render:
mutex.RLock() mutex.RLock()
i.Render(http.StatusOK, "table.html", data) i.JSON(200, data)
mutex.RUnlock() mutex.RUnlock()
return nil return nil
@@ -69,7 +61,7 @@ func generateTable(time carbon.Carbon) (*[7][]*model.Member, error) {
//检查传入时间有没有问题 //检查传入时间有没有问题
//TODO:这里好像有bug对日期是否在值班时间内的判断部分,不过不怎么影响使用 //TODO:这里好像有bug对日期是否在值班时间内的判断部分,不过不怎么影响使用
if (week < 0) || (week > config.Week) { if (week < 0) || (week > config.Week) {
return nil, errors.New("Invalid date,the date must lie in our duty period(startTime~startTime+week*7)in config file") return nil, errors.New("日期错误,日期需要在本学期的值班日期内并且格式正确")
} }
// 为了实现更换值班的片区,写的一个闭包切片访问器 // 为了实现更换值班的片区,写的一个闭包切片访问器
@@ -83,13 +75,13 @@ func generateTable(time carbon.Carbon) (*[7][]*model.Member, error) {
return nil, err return nil, err
} }
//添加标题 //添加标题
table[0] = append(table[0], &model.Member{Name: "凤翔"}) table[0] = append(table[0], &model.Member{Name: "凤翔", Access: 7})
table[1] = append(table[1], &model.Member{Name: "朝晖"}) table[1] = append(table[1], &model.Member{Name: "朝晖", Access: 7})
table[2] = append(table[2], &model.Member{Name: "香晖AB"}) table[2] = append(table[2], &model.Member{Name: "香晖AB", Access: 7})
table[3] = append(table[3], &model.Member{Name: "香晖CD"}) table[3] = append(table[3], &model.Member{Name: "香晖CD", Access: 7})
table[4] = append(table[4], &model.Member{Name: "东门"}) table[4] = append(table[4], &model.Member{Name: "东门", Access: 7})
table[5] = append(table[5], &model.Member{Name: "北门"}) table[5] = append(table[5], &model.Member{Name: "北门", Access: 7})
table[6] = append(table[6], &model.Member{Name: "歧头"}) table[6] = append(table[6], &model.Member{Name: "歧头", Access: 7})
//初始化数据 //初始化数据
for _, i := range members { for _, i := range members {

37
handler/init.go Normal file
View File

@@ -0,0 +1,37 @@
package handler
//
// import (
// "github.com/gocarina/gocsv"
// "os"
// "zsxyww.com/scheduler/config"
// //"zsxyww.com/scheduler/database"
// "zsxyww.com/scheduler/model"
// )
//
// func init() {
// allMember, err := loadMembers()
// if err != nil {
// panic(err)
// }
// _ = allMember
// }
//
// func loadMembers() ([]model.Member, error) {
// data, err := os.OpenFile(config.File, os.O_RDWR|os.O_CREATE, os.ModePerm)
// if err != nil {
// return nil, err
// }
// defer data.Close()
//
// var m []model.Member
//
// err = gocsv.UnmarshalFile(data, m)
// if err != nil {
// return nil, err
// }
// //for index, member := range *m {
// // fmt.Printf("%v:%v\n", index, member) // for debug concerns
// //}
// return m, nil
// }

View File

@@ -1,4 +1,4 @@
package handler package uo
import ( import (
"zsxyww.com/scheduler/model" "zsxyww.com/scheduler/model"
@@ -6,25 +6,41 @@ import (
// 增加一项tweak // 增加一项tweak
func (uo *uoPrototype) addTweak(in *model.Tweak) error { func (uo *uoPrototype) addTweak(in *model.Tweak) error {
_ = uo.c.Create(in)
if uo.c.Error != nil {
return uo.c.Error
}
return nil return nil
} }
// 删除一项tweak // 删除一项tweak
func (uo *uoPrototype) deleteTweak(in *model.Tweak) error { func (uo *uoPrototype) deleteTweak(in *model.Tweak) error {
if uo.c.Error != nil {
return uo.c.Error
}
return nil return nil
} }
// 查询一些tweak通过IssueID // 查询一些tweak通过IssueID
func (uo *uoPrototype) getTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) { func (uo *uoPrototype) getTweakByIssueID(in *model.Tweak) (result []*model.Tweak, err error) {
if uo.c.Error != nil {
return nil, uo.c.Error
}
return nil, nil return nil, nil
} }
// 查询一些tweak通过一个日期 // 查询一些tweak通过一个日期
func (uo *uoPrototype) getTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) { func (uo *uoPrototype) getTweakByTime(in *model.Tweak) (result []*model.Tweak, err error) {
if uo.c.Error != nil {
return nil, uo.c.Error
}
return nil, nil return nil, nil
} }
// 查询一些tweak通过一个工号 // 查询一些tweak通过一个工号
func (uo *uoPrototype) getTweakByID(in *model.Tweak) (result []*model.Tweak, err error) { func (uo *uoPrototype) getTweakByID(in *model.Tweak) (result []*model.Tweak, err error) {
if uo.c.Error != nil {
return nil, uo.c.Error
}
return nil, nil return nil, nil
} }

View File

@@ -1,4 +1,4 @@
package handler package uo
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
@@ -11,6 +11,6 @@ type uoPrototype struct {
} }
func init() { func init() {
uo := uoPrototype{c: db.Main} Uo := &uoPrototype{c: db.Main}
_ = uo _ = Uo
} }

View File

@@ -5,6 +5,7 @@ type Member struct {
Name string `csv:"姓名"` Name string `csv:"姓名"`
Sex bool `csv:"性别"` //不要把女生安排进男生宿舍male=True Sex bool `csv:"性别"` //不要把女生安排进男生宿舍male=True
FreeDay int `csv:"有空"` //哪天有空 FreeDay int `csv:"有空"` //哪天有空
FreeDay2 int `csv:"有空"`
Access int `csv:"权限"` //遵循报修系统的access enum ,用来标注管理层 Access int `csv:"权限"` //遵循报修系统的access enum ,用来标注管理层
Arranged bool `csv:"-"` //供分配程序使用的字段 Arranged bool `csv:"-"` //供分配程序使用的字段
Note int `csv:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用 Note int `csv:"-"` //正常=0,换班/补班=1,蹭班=2,供分配程序使用