123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package finishtime
- import (
- _ "log"
- "qfw/util"
- "time"
- "github.com/tealeg/xlsx"
- )
- /*
- time_two 紧急程度的时间的时间戳
- timeNow 当前时间戳
- unix_time 零点时间戳
- finishtime 完成时间
- timeInt
- time_twelve
- time_thirteen_thirty
- */
- var time_two, timeNow, ret, unix_time, finishtime, time_twelve, time_eight_thirty, time_ten_thirty, time_thirteen_thirty, time_fitteen_thirty, time_eightten, time_dvalueS int64
- var finishdate, date string
- var err error
- var Holiday []map[string]interface{}
- //初始数据
- func init() {
- timeNow = time.Now().Unix() //当前时间戳
- time_two = 7200
- date = time.Unix(timeNow, 0).Format("2006-01-02")
- the_time, err := time.ParseInLocation("2006-01-02", date, time.Local)
- if err == nil {
- unix_time = the_time.Unix()
- }
- time_eight_thirty = unix_time + 30600 //当前日期08:30的时间戳
- time_ten_thirty = unix_time + 37800 //当前日期10:30的时间戳
- time_twelve = unix_time + 43200 //当前日期12:00的时间戳
- time_thirteen_thirty = unix_time + 48600 //当前日期13:30的时间戳
- time_fitteen_thirty = unix_time + 55800 //当前日期15:30点的时间戳
- time_eightten = unix_time + 64800 //当前日期18:00点的时间戳
- }
- func LastTime(timeHour int) int64 {
- //func main() {
- var days int
- //传入时间
- //timeHour := 120
- //传入当前时间戳
- time_now := time.Now().Unix()
- if time_now <= time_eight_thirty {
- time_now = time_eight_thirty
- } else if time_now > time_twelve && time_now <= time_thirteen_thirty {
- time_now = time_thirteen_thirty
- }
- if timeHour == 2 {
- //传来2并且时间戳在12点之前 上午导入
- if time_now <= time_twelve && time_now >= time_eight_thirty {
- time_dvalueS = time_twelve - time_now - time_two
- ret = twoBeforeTwelve(time_dvalueS)
- } else if time_now >= time_thirteen_thirty && time_now < time_eightten {
- //传来2并且时间戳在13:30点之后 下午导入
- time_dvalueS = time_eightten - time_now - time_two
- ret = twoAfterTwelve(time_dvalueS)
- } else if time_now >= time_eightten {
- //18:00之后导入
- finishtime = time_ten_thirty + 86400
- ret = getDay(finishtime)
- //ret = ioExcel(finishtime)
- }
- } else if timeHour == 6 {
- //传来6并且时间戳在10:30点之前 上午导入 当天可完成
- if time_now >= time_eight_thirty && time_now <= time_ten_thirty {
- finishtime = time_eightten - time_ten_thirty + time_now
- //ret = sixBeforeTenthirty(finishtime)
- ret = finishtime
- } else if time_now > time_eight_thirty && time_now <= time_twelve {
- //传来6并且时间戳在10:30-12:00点 上午导入,第二天完成,验证是否是法定节假日
- time_dvalueS = time_twelve - time_now
- ret = sixAfterTenthirty(time_dvalueS)
- } else if time_now >= time_thirteen_thirty && time_now <= time_fitteen_thirty {
- //传来6并且时间戳在13:30-15:30点 下午导入,第二天上午完成,验证是否是法定节假日
- time_dvalueS = time_fitteen_thirty - time_now
- ret = sixBeforeFitteenthirty(time_dvalueS)
- } else if time_now > time_thirteen_thirty && time_now <= time_eightten {
- //传来6并且时间戳在15:30-18:00点 下午导入,第二天下午完成,验证是否是法定节假日
- time_dvalueS = time_now - time_fitteen_thirty
- ret = sixAfterFitteenthirty(time_dvalueS)
- }
- } else if timeHour == 48 { //2天
- days = 2
- ret = getDays(days)
- } else if timeHour == 120 { //5天
- days = 5
- ret = getDays(days)
- }
- return ret
- }
- //2小时上午开始
- func twoBeforeTwelve(time_dvalue int64) int64 {
- //10点前导入,上午下班前即可完成
- if time_dvalue > 0 {
- finishtime = time_twelve - time_dvalue
- //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
- } else {
- //10-12点之间导入,下午下班前即可完成
- finishtime = time_thirteen_thirty - time_dvalue
- //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
- }
- return finishtime
- }
- //2小时下午开始
- func twoAfterTwelve(time_dvalue int64) int64 {
- //16点前导入,下午下班前即可完成
- if time_dvalue > 0 {
- finishtime = time_eightten - time_dvalue
- finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
- } else {
- //16-18点之间导入,第二天上午即可完成,验证是否是法定节假日
- finishtime = time_eight_thirty + 86400 - time_dvalue
- //验证是否是节假日
- finishtime = getDay(finishtime)
- //finishtime = ioExcel(finishtime)
- }
- return finishtime
- }
- func getDay(finishtime int64) int64 {
- //finishtime为第二天应该完成的准确时间
- now := time.Now().UTC()
- addtime := now.AddDate(0, 0, 1)
- var index int64 = 0
- for _, v := range Holiday {
- start, _ := time.Parse("2006-01-02", v["start"].(string))
- end, _ := time.Parse("2006-01-02", v["end"].(string))
- if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) {
- addtime = addtime.AddDate(0, 0, util.IntAll(v["count"]))
- //timeUnix = addtime.Unix()
- index = index + util.Int64All(v["count"])
- }
- }
- finishtime = finishtime + index*86400
- return finishtime
- }
- //6小时 10:30-12:00导入
- func sixAfterTenthirty(time_dvalue int64) int64 {
- finishtime = time_eight_thirty + 86400 + 5400 - time_dvalue
- finishtime = getDay(finishtime)
- //finishtime = ioExcel(finishtime)
- return finishtime
- }
- //6小时 13:30-15:30导入
- func sixBeforeFitteenthirty(time_dvalue int64) int64 {
- finishtime = time_twelve + 86400 - time_dvalue
- finishtime = getDay(finishtime)
- //finishtime = ioExcel(finishtime)
- return finishtime
- }
- //6小时 15:30-18:00导入
- func sixAfterFitteenthirty(time_dvalue int64) int64 {
- finishtime = time_thirteen_thirty + 86400 + time_dvalue
- finishtime = getDay(finishtime)
- //finishtime = ioExcel(finishtime)
- return finishtime
- }
- func getDays(days int) int64 {
- var timeUnix int64
- now := time.Now()
- addtime := now.AddDate(0, 0, days)
- for _, v := range Holiday {
- start, _ := time.Parse("2006-01-02", v["start"].(string))
- end, _ := time.Parse("2006-01-02", v["end"].(string))
- if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) {
- addtime = addtime.AddDate(0, 0, util.IntAll(v["count"]))
- timeUnix = addtime.Unix()
- } else {
- timeUnix = addtime.Unix()
- }
- }
- return timeUnix
- }
- //验证法定节假日
- func ioExcel(finishtime int64) int64 {
- finishdate = time.Unix(finishtime, 0).Format("2006-01-02")
- var index int64 = 0
- var finishtimed int64
- ex, err := xlsx.OpenFile("dayOff.xlsx")
- if err == nil {
- sheet := ex.Sheets[0]
- rows := sheet.Rows
- for _, v := range rows {
- cols := v.Cells[0].Value
- if cols == finishdate {
- index = index + 1
- finishtimed = finishtime + 86400*index
- finishdate = time.Unix(finishtimed, 0).Format("2006-01-02")
- }
- }
- }
- finishtime = finishtime + index*86400
- //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
- return finishtime
- }
|