finishtime.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package finishtime
  2. import (
  3. _ "log"
  4. "qfw/util"
  5. "time"
  6. "github.com/tealeg/xlsx"
  7. )
  8. /*
  9. time_two 紧急程度的时间的时间戳
  10. timeNow 当前时间戳
  11. unix_time 零点时间戳
  12. finishtime 完成时间
  13. timeInt
  14. time_twelve
  15. time_thirteen_thirty
  16. */
  17. 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
  18. var finishdate, date string
  19. var err error
  20. var Holiday []map[string]interface{}
  21. //初始数据
  22. func init() {
  23. timeNow = time.Now().Unix() //当前时间戳
  24. time_two = 7200
  25. date = time.Unix(timeNow, 0).Format("2006-01-02")
  26. the_time, err := time.ParseInLocation("2006-01-02", date, time.Local)
  27. if err == nil {
  28. unix_time = the_time.Unix()
  29. }
  30. time_eight_thirty = unix_time + 30600 //当前日期08:30的时间戳
  31. time_ten_thirty = unix_time + 37800 //当前日期10:30的时间戳
  32. time_twelve = unix_time + 43200 //当前日期12:00的时间戳
  33. time_thirteen_thirty = unix_time + 48600 //当前日期13:30的时间戳
  34. time_fitteen_thirty = unix_time + 55800 //当前日期15:30点的时间戳
  35. time_eightten = unix_time + 64800 //当前日期18:00点的时间戳
  36. }
  37. func LastTime(timeHour int) int64 {
  38. //func main() {
  39. var days int
  40. //传入时间
  41. //timeHour := 120
  42. //传入当前时间戳
  43. time_now := time.Now().Unix()
  44. if time_now <= time_eight_thirty {
  45. time_now = time_eight_thirty
  46. } else if time_now > time_twelve && time_now <= time_thirteen_thirty {
  47. time_now = time_thirteen_thirty
  48. }
  49. if timeHour == 2 {
  50. //传来2并且时间戳在12点之前 上午导入
  51. if time_now <= time_twelve && time_now >= time_eight_thirty {
  52. time_dvalueS = time_twelve - time_now - time_two
  53. ret = twoBeforeTwelve(time_dvalueS)
  54. } else if time_now >= time_thirteen_thirty && time_now < time_eightten {
  55. //传来2并且时间戳在13:30点之后 下午导入
  56. time_dvalueS = time_eightten - time_now - time_two
  57. ret = twoAfterTwelve(time_dvalueS)
  58. } else if time_now >= time_eightten {
  59. //18:00之后导入
  60. finishtime = time_ten_thirty + 86400
  61. ret = getDay(finishtime)
  62. //ret = ioExcel(finishtime)
  63. }
  64. } else if timeHour == 6 {
  65. //传来6并且时间戳在10:30点之前 上午导入 当天可完成
  66. if time_now >= time_eight_thirty && time_now <= time_ten_thirty {
  67. finishtime = time_eightten - time_ten_thirty + time_now
  68. //ret = sixBeforeTenthirty(finishtime)
  69. ret = finishtime
  70. } else if time_now > time_eight_thirty && time_now <= time_twelve {
  71. //传来6并且时间戳在10:30-12:00点 上午导入,第二天完成,验证是否是法定节假日
  72. time_dvalueS = time_twelve - time_now
  73. ret = sixAfterTenthirty(time_dvalueS)
  74. } else if time_now >= time_thirteen_thirty && time_now <= time_fitteen_thirty {
  75. //传来6并且时间戳在13:30-15:30点 下午导入,第二天上午完成,验证是否是法定节假日
  76. time_dvalueS = time_fitteen_thirty - time_now
  77. ret = sixBeforeFitteenthirty(time_dvalueS)
  78. } else if time_now > time_thirteen_thirty && time_now <= time_eightten {
  79. //传来6并且时间戳在15:30-18:00点 下午导入,第二天下午完成,验证是否是法定节假日
  80. time_dvalueS = time_now - time_fitteen_thirty
  81. ret = sixAfterFitteenthirty(time_dvalueS)
  82. }
  83. } else if timeHour == 48 { //2天
  84. days = 2
  85. ret = getDays(days)
  86. } else if timeHour == 120 { //5天
  87. days = 5
  88. ret = getDays(days)
  89. }
  90. return ret
  91. }
  92. //2小时上午开始
  93. func twoBeforeTwelve(time_dvalue int64) int64 {
  94. //10点前导入,上午下班前即可完成
  95. if time_dvalue > 0 {
  96. finishtime = time_twelve - time_dvalue
  97. //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
  98. } else {
  99. //10-12点之间导入,下午下班前即可完成
  100. finishtime = time_thirteen_thirty - time_dvalue
  101. //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
  102. }
  103. return finishtime
  104. }
  105. //2小时下午开始
  106. func twoAfterTwelve(time_dvalue int64) int64 {
  107. //16点前导入,下午下班前即可完成
  108. if time_dvalue > 0 {
  109. finishtime = time_eightten - time_dvalue
  110. finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
  111. } else {
  112. //16-18点之间导入,第二天上午即可完成,验证是否是法定节假日
  113. finishtime = time_eight_thirty + 86400 - time_dvalue
  114. //验证是否是节假日
  115. finishtime = getDay(finishtime)
  116. //finishtime = ioExcel(finishtime)
  117. }
  118. return finishtime
  119. }
  120. func getDay(finishtime int64) int64 {
  121. //finishtime为第二天应该完成的准确时间
  122. now := time.Now().UTC()
  123. addtime := now.AddDate(0, 0, 1)
  124. var index int64 = 0
  125. for _, v := range Holiday {
  126. start, _ := time.Parse("2006-01-02", v["start"].(string))
  127. end, _ := time.Parse("2006-01-02", v["end"].(string))
  128. if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) {
  129. addtime = addtime.AddDate(0, 0, util.IntAll(v["count"]))
  130. //timeUnix = addtime.Unix()
  131. index = index + util.Int64All(v["count"])
  132. }
  133. }
  134. finishtime = finishtime + index*86400
  135. return finishtime
  136. }
  137. //6小时 10:30-12:00导入
  138. func sixAfterTenthirty(time_dvalue int64) int64 {
  139. finishtime = time_eight_thirty + 86400 + 5400 - time_dvalue
  140. finishtime = getDay(finishtime)
  141. //finishtime = ioExcel(finishtime)
  142. return finishtime
  143. }
  144. //6小时 13:30-15:30导入
  145. func sixBeforeFitteenthirty(time_dvalue int64) int64 {
  146. finishtime = time_twelve + 86400 - time_dvalue
  147. finishtime = getDay(finishtime)
  148. //finishtime = ioExcel(finishtime)
  149. return finishtime
  150. }
  151. //6小时 15:30-18:00导入
  152. func sixAfterFitteenthirty(time_dvalue int64) int64 {
  153. finishtime = time_thirteen_thirty + 86400 + time_dvalue
  154. finishtime = getDay(finishtime)
  155. //finishtime = ioExcel(finishtime)
  156. return finishtime
  157. }
  158. func getDays(days int) int64 {
  159. var timeUnix int64
  160. now := time.Now()
  161. addtime := now.AddDate(0, 0, days)
  162. for _, v := range Holiday {
  163. start, _ := time.Parse("2006-01-02", v["start"].(string))
  164. end, _ := time.Parse("2006-01-02", v["end"].(string))
  165. if (now.Before(start) && (addtime.After(end) || addtime.Equal(end))) || ((addtime.After(start) || addtime.Equal(start)) && (addtime.Before(end) || addtime.Equal(end))) {
  166. addtime = addtime.AddDate(0, 0, util.IntAll(v["count"]))
  167. timeUnix = addtime.Unix()
  168. } else {
  169. timeUnix = addtime.Unix()
  170. }
  171. }
  172. return timeUnix
  173. }
  174. //验证法定节假日
  175. func ioExcel(finishtime int64) int64 {
  176. finishdate = time.Unix(finishtime, 0).Format("2006-01-02")
  177. var index int64 = 0
  178. var finishtimed int64
  179. ex, err := xlsx.OpenFile("dayOff.xlsx")
  180. if err == nil {
  181. sheet := ex.Sheets[0]
  182. rows := sheet.Rows
  183. for _, v := range rows {
  184. cols := v.Cells[0].Value
  185. if cols == finishdate {
  186. index = index + 1
  187. finishtimed = finishtime + 86400*index
  188. finishdate = time.Unix(finishtimed, 0).Format("2006-01-02")
  189. }
  190. }
  191. }
  192. finishtime = finishtime + index*86400
  193. //finishdate = time.Unix(finishtime, 0).Format("2006-01-02 15:04:05")
  194. return finishtime
  195. }