123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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
- }
|