admin.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package admin
  2. import (
  3. "errors"
  4. "github.com/gogf/gf/v2/util/gconv"
  5. "time"
  6. "zhiyuan/models"
  7. "zhiyuan/pkg/db"
  8. adminParam "zhiyuan/pkg/param/admin"
  9. "zhiyuan/pkg/utils"
  10. "zhiyuan/services/admin"
  11. "zhiyuan/services/form"
  12. )
  13. var Admin models.Admin
  14. func CheckLogin(phone string, password string) (int, error) {
  15. where := map[string]interface{}{
  16. "phone": phone,
  17. "password": utils.MD5(password),
  18. }
  19. where["state"] = 1
  20. admin, err := admin.GetOne(where, nil, nil)
  21. if err != nil || admin == nil {
  22. return 0, errors.New("用户名或密码错误1")
  23. }
  24. return admin.ID, nil
  25. }
  26. func Login(form form.WorkLogin) (string, error) {
  27. adminMap := make(map[string]interface{})
  28. if form.LoginType == 1 {
  29. adminMap = map[string]interface{}{
  30. "openid": form.OpenID,
  31. "nickname": form.NickName,
  32. "sex": form.Sex,
  33. "headimgurl": form.HeadImgUrl,
  34. }
  35. if admin_, _ := admin.GetOne(map[string]interface{}{"openid": form.OpenID}, nil, nil); admin_ != nil {
  36. db.Update(Admin.TableName(), map[string]interface{}{"id": admin_.ID}, adminMap)
  37. return admin.UpdateToken(admin_.ID, adminParam.Entry.Final)
  38. }
  39. }
  40. adminID, err := CheckLogin(form.Phone, form.Password)
  41. if err != nil {
  42. return "", err
  43. }
  44. if form.LoginType == 1 {
  45. db.Update(Admin.TableName(), map[string]interface{}{"id": adminID}, adminMap)
  46. }
  47. return admin.UpdateToken(adminID, adminParam.Entry.Final)
  48. }
  49. func Logout(id int) error {
  50. adminInfo, err := admin.GetInfoByID(id, []string{"id"}, nil)
  51. if err != nil || adminInfo == nil {
  52. return errors.New("invalid access_token")
  53. }
  54. return admin.ClearToken(adminInfo.ID, adminParam.Entry.Final)
  55. }
  56. func UnBindWeixin(id int) error {
  57. adminMap := map[string]interface{}{
  58. "openid": "",
  59. "nickname": "",
  60. "headimgurl": "",
  61. "sex": 0,
  62. }
  63. db.Update(admin.Admin.TableName(), map[string]interface{}{"id": id}, adminMap)
  64. return Logout(id)
  65. }
  66. func Password(id int, form form.Password) error {
  67. if err := admin.Password(id, form); err != nil {
  68. return err
  69. }
  70. return admin.ClearToken(id, adminParam.Entry.Final)
  71. }
  72. // CalculateEndDate 计算完工日期,包括额外的休息日天数
  73. func CalculateEndDate(holidays []time.Time, startDateStr string, duration int) (string, error) {
  74. startDate, err := time.Parse("2006-01-02", startDateStr)
  75. if err != nil {
  76. return "", err
  77. }
  78. // 初始化完工日期为起始日期加上工期天数
  79. endDate := startDate.AddDate(0, 0, duration)
  80. // 初始化一个map来记录holidays中的日期,以便快速查找
  81. holidayMap := make(map[string]bool)
  82. for _, h := range holidays {
  83. holidayMap[h.Format("2006-01-02")] = true
  84. }
  85. // 遍历从startDate到endDate(不包含endDate)的每一天,检查是否有额外的休息日需要加到完工日期上
  86. currentDate := startDate
  87. for !currentDate.After(endDate) {
  88. if _, exists := holidayMap[currentDate.Format("2006-01-02")]; exists {
  89. // 如果当前日期是休息日,则增加完工日期
  90. // 注意:这里我们直接修改endDate,因为我们要计算的是额外的休息日天数
  91. endDate = endDate.AddDate(0, 0, 1)
  92. }
  93. currentDate = currentDate.AddDate(0, 0, 1)
  94. }
  95. // 返回完工日期的字符串表示
  96. return endDate.Format("2006-01-02"), nil
  97. }
  98. type Holidays struct {
  99. HolidayDate string `json:"holiday_date"`
  100. }
  101. // 加载所有节假日到map中
  102. func LoadHolidays() []time.Time {
  103. var excludedDates []time.Time
  104. query := "select * from zy_holidays"
  105. checkList := make([]Holidays, 0)
  106. err := db.GetMultiRaw(query, nil, nil, &checkList)
  107. if err != nil {
  108. return excludedDates
  109. }
  110. for _, d := range checkList {
  111. excludedDates = append(excludedDates, gconv.Time(d.HolidayDate))
  112. }
  113. return excludedDates
  114. }