package admin import ( "errors" "github.com/gogf/gf/v2/util/gconv" "time" "zhiyuan/models" "zhiyuan/pkg/db" adminParam "zhiyuan/pkg/param/admin" "zhiyuan/pkg/utils" "zhiyuan/services/admin" "zhiyuan/services/form" ) var Admin models.Admin func CheckLogin(phone string, password string) (int, error) { where := map[string]interface{}{ "phone": phone, "password": utils.MD5(password), } where["state"] = 1 admin, err := admin.GetOne(where, nil, nil) if err != nil || admin == nil { return 0, errors.New("用户名或密码错误1") } return admin.ID, nil } func Login(form form.WorkLogin) (string, error) { adminMap := make(map[string]interface{}) if form.LoginType == 1 { adminMap = map[string]interface{}{ "openid": form.OpenID, "nickname": form.NickName, "sex": form.Sex, "headimgurl": form.HeadImgUrl, } if admin_, _ := admin.GetOne(map[string]interface{}{"openid": form.OpenID}, nil, nil); admin_ != nil { db.Update(Admin.TableName(), map[string]interface{}{"id": admin_.ID}, adminMap) return admin.UpdateToken(admin_.ID, adminParam.Entry.Final) } } adminID, err := CheckLogin(form.Phone, form.Password) if err != nil { return "", err } if form.LoginType == 1 { db.Update(Admin.TableName(), map[string]interface{}{"id": adminID}, adminMap) } return admin.UpdateToken(adminID, adminParam.Entry.Final) } func Logout(id int) error { adminInfo, err := admin.GetInfoByID(id, []string{"id"}, nil) if err != nil || adminInfo == nil { return errors.New("invalid access_token") } return admin.ClearToken(adminInfo.ID, adminParam.Entry.Final) } func UnBindWeixin(id int) error { adminMap := map[string]interface{}{ "openid": "", "nickname": "", "headimgurl": "", "sex": 0, } db.Update(admin.Admin.TableName(), map[string]interface{}{"id": id}, adminMap) return Logout(id) } func Password(id int, form form.Password) error { if err := admin.Password(id, form); err != nil { return err } return admin.ClearToken(id, adminParam.Entry.Final) } // CalculateEndDate 计算完工日期,包括额外的休息日天数 func CalculateEndDate(holidays []time.Time, startDateStr string, duration int) (string, error) { startDate, err := time.Parse("2006-01-02", startDateStr) if err != nil { return "", err } // 初始化完工日期为起始日期加上工期天数 endDate := startDate.AddDate(0, 0, duration) // 初始化一个map来记录holidays中的日期,以便快速查找 holidayMap := make(map[string]bool) for _, h := range holidays { holidayMap[h.Format("2006-01-02")] = true } // 遍历从startDate到endDate(不包含endDate)的每一天,检查是否有额外的休息日需要加到完工日期上 currentDate := startDate for !currentDate.After(endDate) { if _, exists := holidayMap[currentDate.Format("2006-01-02")]; exists { // 如果当前日期是休息日,则增加完工日期 // 注意:这里我们直接修改endDate,因为我们要计算的是额外的休息日天数 endDate = endDate.AddDate(0, 0, 1) } currentDate = currentDate.AddDate(0, 0, 1) } // 返回完工日期的字符串表示 return endDate.Format("2006-01-02"), nil } type Holidays struct { HolidayDate string `json:"holiday_date"` } // 加载所有节假日到map中 func LoadHolidays() []time.Time { var excludedDates []time.Time query := "select * from zy_holidays" checkList := make([]Holidays, 0) err := db.GetMultiRaw(query, nil, nil, &checkList) if err != nil { return excludedDates } for _, d := range checkList { excludedDates = append(excludedDates, gconv.Time(d.HolidayDate)) } return excludedDates }