第二代基于事件的高级计划排程引擎
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

118 lines
2.5 KiB

package service
import (
"fmt"
"log"
"reflect"
"strings"
"time"
)
// 获取两个时间点之间的天数
func GetCrossDays(t1,t2 time.Time)(days int){
var(
y1,d1,y2,d2 int
m1,m2 time.Month
date1,date2 time.Time
)
days = 0
if t1.Unix() >= t2.Unix() {
return
}
y1,m1,d1 = t1.Date()
y2,m2,d2 = t2.Date()
date1 = time.Date(y1, m1, d1, 0, 0, 0, 0, time.UTC)
date2 = time.Date(y2, m2, d2, 0, 0, 0, 0, time.UTC)
days = int(date2.Sub(date1).Hours() / 24)
return
}
// 获取时间点的日期,以年月日字符类型数据返回
func GetYMDString(t time.Time)(ymd string){
var (
y1, d1 int
m1 time.Month
)
y1,m1,d1 = t.Date()
ymd = fmt.Sprintf("%04d", y1) + fmt.Sprintf("%02d", int(m1)) + fmt.Sprintf("%02d", d1)
return
}
// 基于时间单位获取秒数
func GetTimeUomSeconds(uomId string)(seconds float64){
seconds = 0
switch strings.ToUpper(uomId) {
case TIME_UOM_WEEK:
seconds = 7 * 24 * 3600
case TIME_UOM_DAY:
seconds = 24 * 3600
case TIME_UOM_HOUR:
seconds = 3600
case TIME_UOM_MINUTE:
seconds = 60
case TIME_UOM_SECOND:
seconds = 1
}
return
}
// 设置表的更新时间
func SetTableLastModify(sp interface{},s interface{}, setMode string, lastUser string){
var (
hasLastmodify, hasLastuser, hasCreatetime bool
)
avp := reflect.ValueOf(sp)
av := reflect.ValueOf(s)
at := reflect.TypeOf(s)
// 简单判断下是否为结构体
if at.Kind() != reflect.Struct {
log.Printf("s must be a struct")
return
}
// 判断是否有LastModify
hasLastmodify = false
hasLastuser = false
hasCreatetime = false
avp = reflect.ValueOf(avp.Interface())
for i := 0; i < av.NumField(); i++ {
if at.Field(i).Name == "Lastmodify" {
hasLastmodify = true
}
if at.Field(i).Name == "Lastuser" {
hasLastuser = true
}
if at.Field(i).Name == "Createtime" {
hasCreatetime = true
}
}
if hasLastmodify && hasLastuser && hasCreatetime {
switch setMode {
case MODIFY_MODE_CREATE:
f1 := avp.Elem().FieldByName("Createtime")
f1.Set(reflect.ValueOf(time.Now()))
f2 := avp.Elem().FieldByName("Lastuser")
if lastUser != ""{
f2.Set(reflect.ValueOf(lastUser))
}else{
f2.Set(reflect.ValueOf("sys_service"))
}
case MODIFY_MODE_UPDATE:
f1 := avp.Elem().FieldByName("Lastmodify")
f1.Set(reflect.ValueOf(time.Now()))
f2 := avp.Elem().FieldByName("Lastuser")
if lastUser != ""{
f2.Set(reflect.ValueOf(lastUser))
}else{
f2.Set(reflect.ValueOf("sys_service"))
}
case MODIFY_MODE_DELETE:
}
}
}