mirror of
https://github.com/ZSCNetSupportDept/scheduler.git
synced 2025-10-28 20:45:05 +08:00
现在getAssignment可以带一个参数date,可以指定生成的日期的值班表
This commit is contained in:
@@ -2,6 +2,7 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
//"fmt"
|
//"fmt"
|
||||||
|
"errors"
|
||||||
"github.com/gocarina/gocsv"
|
"github.com/gocarina/gocsv"
|
||||||
"github.com/golang-module/carbon/v2"
|
"github.com/golang-module/carbon/v2"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
@@ -18,8 +19,23 @@ var mutex sync.RWMutex //lock for data
|
|||||||
var err error
|
var err error
|
||||||
|
|
||||||
// /api/getAssignment GET 获取当日值班表,返回html
|
// /api/getAssignment GET 获取当日值班表,返回html
|
||||||
|
// 接受参数date,是需要生成值班表的日期
|
||||||
func GetAssignment(i echo.Context) error {
|
func GetAssignment(i echo.Context) error {
|
||||||
|
|
||||||
|
//如果指定了参数,则生成参数指定的
|
||||||
|
if date := i.QueryParam("date"); date != "" {
|
||||||
|
mutex.Lock()
|
||||||
|
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()
|
||||||
@@ -34,7 +50,7 @@ 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.Render(http.StatusOK, "table.html", data)
|
||||||
mutex.RUnlock()
|
mutex.RUnlock()
|
||||||
@@ -44,13 +60,17 @@ func GetAssignment(i echo.Context) error {
|
|||||||
|
|
||||||
// 根据指定的时间来生成对应的值班表
|
// 根据指定的时间来生成对应的值班表
|
||||||
func generateTable(time carbon.Carbon) (*[7][]*model.Member, error) {
|
func generateTable(time carbon.Carbon) (*[7][]*model.Member, error) {
|
||||||
|
|
||||||
table := [7][]*model.Member{} //结果放入这里
|
table := [7][]*model.Member{} //结果放入这里
|
||||||
members := []*model.Member{} //包含所有成员信息的切片
|
members := []*model.Member{} //包含所有成员信息的切片
|
||||||
today := []*model.Member{} //今天值班的人
|
today := []*model.Member{} //今天值班的人
|
||||||
female := []*model.Member{} //今天的女生
|
female := []*model.Member{} //今天的女生
|
||||||
male := []*model.Member{} //今天的男生
|
male := []*model.Member{} //今天的男生
|
||||||
week, dayOfWeek := getWorkDay(time)
|
week, dayOfWeek := getWorkDay(time)
|
||||||
|
//检查传入时间有没有问题
|
||||||
|
//TODO:这里好像有bug(对日期是否在值班时间内的判断部分),不过不怎么影响使用
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
|
||||||
// 为了实现更换值班的片区,写的一个闭包切片访问器
|
// 为了实现更换值班的片区,写的一个闭包切片访问器
|
||||||
iter := func(array []*model.Member, i int) *model.Member {
|
iter := func(array []*model.Member, i int) *model.Member {
|
||||||
|
|||||||
Reference in New Issue
Block a user