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.
441 lines
11 KiB
441 lines
11 KiB
package signmodel |
|
|
|
import ( |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/admin/main/up/util/now" |
|
"go-common/library/log" |
|
xtime "go-common/library/time" |
|
) |
|
|
|
const ( |
|
// TableSignPay table name |
|
TableSignPay = "sign_pay" |
|
// TableSignUp table name |
|
TableSignUp = "sign_up" |
|
// TableSignTask table name |
|
TableSignTask = "sign_task" |
|
// TableSignContract table name |
|
TableSignContract = "sign_contract" |
|
// TableSignTaskAbsence table name |
|
TableSignTaskAbsence = "sign_task_absence" |
|
// TableSignTaskHistory table name |
|
TableSignTaskHistory = "sign_task_history" |
|
// TableSignViolationHistory table name |
|
TableSignViolationHistory = "sign_violation_history" |
|
) |
|
|
|
const ( |
|
// DateDefualtFromDB . |
|
DateDefualtFromDB = -28800 |
|
// DateDefualt . |
|
DateDefualt = "0000-00-00" |
|
) |
|
|
|
const ( |
|
//TaskTypeAccumulate 0 |
|
TaskTypeAccumulate = 0 |
|
//TaskTypeDay 1 |
|
TaskTypeDay = 1 |
|
//TaskTypeWeek 2 |
|
TaskTypeWeek = 2 |
|
//TaskTypeMonth 3 |
|
TaskTypeMonth = 3 |
|
//TaskTypeQuarter 4 季度 |
|
TaskTypeQuarter = 4 |
|
) |
|
|
|
const ( |
|
//TaskStateRunning 0 |
|
TaskStateRunning = 0 |
|
//TaskStateExpire 1 |
|
TaskStateExpire = 1 |
|
//TaskStateFinish 2 |
|
TaskStateFinish = 2 |
|
) |
|
|
|
// const . |
|
const ( |
|
SignUpMidAdd = 1 |
|
SignUpMidUpdate = 2 |
|
) |
|
|
|
// const 。 |
|
const ( |
|
NotContainEconomic = 1 |
|
ContainEconomic = 2 |
|
) |
|
|
|
const ( |
|
// SignUpLogBizID 签约up信息修改日志 |
|
SignUpLogBizID int = 261 |
|
) |
|
|
|
const ( |
|
//SignTaskStateInit init |
|
SignTaskStateInit = 0 |
|
//SignTaskStateRunning task running |
|
SignTaskStateRunning = 1 |
|
//SignTaskStateFinish finish |
|
SignTaskStateFinish = 2 |
|
//SignTaskStateDelete delete |
|
SignTaskStateDelete = 100 |
|
) |
|
|
|
// const 变更类型. |
|
const ( |
|
// 年龄 |
|
ChangeSexHistory = iota + 1 |
|
// 用户id |
|
ChangeMidHistory |
|
// 签约周期 |
|
ChangeSignDateHistory |
|
// 地区 |
|
ChangeAreaHistory |
|
// 组织 |
|
ChangeOrganizationHistory |
|
// 签约类型 |
|
ChangeSignTypeHistory |
|
// 年龄 |
|
ChangeAgeHistory |
|
// 居住地 |
|
ChangeResidenceHistory |
|
// 身份证 |
|
ChangeIDCardHistory |
|
// 联系方式 |
|
ChangePhoneHistory |
|
// QQ |
|
ChangeQQHistory |
|
// 微信 |
|
ChangeWechatHistory |
|
// 经济公司 |
|
ChangeEconomicHistory |
|
// 签约付款周期 |
|
ChangeSignPayHistory |
|
// 签约任务 |
|
ChangeSignTaskHistory |
|
// 签约合同 |
|
ChangeSignContractHistory |
|
// 签约备注 |
|
ChangeSignNoteHistory |
|
) |
|
|
|
const ( |
|
//EmailStateNotSend 0 |
|
EmailStateNotSend = 0 |
|
//EmailStateSendSucc 1 |
|
EmailStateSendSucc = 1 |
|
) |
|
|
|
const ( |
|
// AttrYes on |
|
AttrYes = int64(1) |
|
// AttrNo off |
|
AttrNo = int64(0) |
|
|
|
// AttrBitIsBusinessArchive bit |
|
AttrBitIsBusinessArchive = uint(0) |
|
) |
|
|
|
// SignUpOnlyID struct |
|
type SignUpOnlyID struct { |
|
ID uint32 |
|
} |
|
|
|
// SignUpOnlySignID struct |
|
type SignUpOnlySignID struct { |
|
SignID uint32 |
|
} |
|
|
|
// SignUp struct |
|
type SignUp struct { |
|
ID int64 |
|
Sex int8 |
|
Mid int64 |
|
BeginDate xtime.Time |
|
EndDate xtime.Time |
|
State int8 |
|
Country string |
|
Province string |
|
City string |
|
Note string |
|
AdminID int |
|
AdminName string |
|
EmailState int8 |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
Organization int8 |
|
SignType int8 |
|
Age int8 |
|
Residence string |
|
IDCard string `gorm:"column:id_card"` |
|
Phone string |
|
QQ int64 `gorm:"column:qq"` |
|
Wechat string `gorm:"column:wechat"` |
|
IsEconomic int8 |
|
EconomicCompany string |
|
EconomicBegin xtime.Time |
|
EconomicEnd xtime.Time |
|
TaskState int8 |
|
LeaveTimes int |
|
ViolationTimes int |
|
ActiveTid int16 |
|
} |
|
|
|
// Diff . |
|
func (su *SignUp) Diff(oriSu *SignUp, fields map[int8]struct{}) { |
|
if oriSu.Sex != su.Sex { |
|
fields[ChangeSexHistory] = struct{}{} |
|
} |
|
if oriSu.Mid != su.Mid { |
|
fields[ChangeMidHistory] = struct{}{} |
|
} |
|
if oriSu.BeginDate != su.BeginDate || oriSu.EndDate != su.EndDate { |
|
fields[ChangeSignDateHistory] = struct{}{} |
|
} |
|
if !strings.EqualFold(oriSu.Country, su.Country) || !strings.EqualFold(oriSu.Province, su.Province) || !strings.EqualFold(oriSu.City, su.City) { |
|
fields[ChangeAreaHistory] = struct{}{} |
|
} |
|
if oriSu.Organization != su.Organization { |
|
fields[ChangeOrganizationHistory] = struct{}{} |
|
} |
|
if oriSu.SignType != su.SignType { |
|
fields[ChangeSignTypeHistory] = struct{}{} |
|
} |
|
if oriSu.Age != su.Age { |
|
fields[ChangeAgeHistory] = struct{}{} |
|
} |
|
if oriSu.Residence != su.Residence { |
|
fields[ChangeResidenceHistory] = struct{}{} |
|
} |
|
if oriSu.IDCard != su.IDCard { |
|
fields[ChangeIDCardHistory] = struct{}{} |
|
} |
|
if oriSu.Phone != su.Phone { |
|
fields[ChangePhoneHistory] = struct{}{} |
|
} |
|
if oriSu.QQ != su.QQ { |
|
fields[ChangeQQHistory] = struct{}{} |
|
} |
|
if oriSu.Wechat != su.Wechat { |
|
fields[ChangeWechatHistory] = struct{}{} |
|
} |
|
if oriSu.EconomicBegin == DateDefualtFromDB { |
|
oriSu.EconomicBegin = 0 |
|
} |
|
if oriSu.EconomicEnd == DateDefualtFromDB { |
|
oriSu.EconomicEnd = 0 |
|
} |
|
if oriSu.IsEconomic != su.IsEconomic || !strings.EqualFold(oriSu.EconomicCompany, su.EconomicCompany) || |
|
oriSu.EconomicBegin != su.EconomicBegin || oriSu.EconomicEnd != su.EconomicEnd { |
|
fields[ChangeEconomicHistory] = struct{}{} |
|
} |
|
if !strings.EqualFold(oriSu.Note, su.Note) { |
|
fields[ChangeSignNoteHistory] = struct{}{} |
|
} |
|
su.State = oriSu.State |
|
su.EmailState = oriSu.EmailState |
|
su.TaskState = oriSu.TaskState |
|
su.LeaveTimes = oriSu.LeaveTimes |
|
su.ViolationTimes = oriSu.ViolationTimes |
|
su.ActiveTid = oriSu.ActiveTid |
|
su.Ctime = oriSu.Ctime |
|
} |
|
|
|
// SignPay struct |
|
type SignPay struct { |
|
ID int64 |
|
Mid int64 |
|
SignID int64 |
|
DueDate xtime.Time |
|
PayValue int64 |
|
State int8 |
|
Note string |
|
EmailState int8 |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
InTax int8 |
|
} |
|
|
|
// Diff . |
|
func (sp *SignPay) Diff(mOriSp map[int64]*SignPay, fields map[int8]struct{}) { |
|
var ( |
|
ok bool |
|
oriSp *SignPay |
|
) |
|
if oriSp, ok = mOriSp[sp.ID]; !ok { |
|
fields[ChangeSignPayHistory] = struct{}{} |
|
return |
|
} |
|
if sp.DueDate != oriSp.DueDate || sp.PayValue != oriSp.PayValue || sp.InTax != oriSp.InTax { |
|
fields[ChangeSignPayHistory] = struct{}{} |
|
} |
|
sp.Mid = oriSp.Mid |
|
sp.SignID = oriSp.SignID |
|
sp.State = oriSp.State |
|
sp.Note = oriSp.Note |
|
sp.EmailState = oriSp.EmailState |
|
sp.Ctime = oriSp.Ctime |
|
} |
|
|
|
// SignTask struct |
|
type SignTask struct { |
|
ID int64 `gorm:"column:id"` |
|
Mid int64 `gorm:"column:mid"` |
|
SignID int64 `gorm:"column:sign_id"` |
|
TaskType int8 `gorm:"column:task_type"` |
|
TaskCounter int `gorm:"column:task_counter"` |
|
TaskCondition int `gorm:"column:task_condition"` |
|
TaskData string `gorm:"column:task_data"` |
|
State int8 `gorm:"column:state"` |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
Attribute int64 `gorm:"column:attribute"` |
|
FinishNote string `gorm:"column:finish_note"` |
|
} |
|
|
|
// Diff . |
|
func (st *SignTask) Diff(mOriSt map[int64]*SignTask, fields map[int8]struct{}) { |
|
var ( |
|
ok bool |
|
oriSt *SignTask |
|
) |
|
if oriSt, ok = mOriSt[st.ID]; !ok { |
|
fields[ChangeSignTaskHistory] = struct{}{} |
|
return |
|
} |
|
if st.TaskType != oriSt.TaskType || st.TaskCondition != oriSt.TaskCondition || |
|
st.AttrVal(AttrBitIsBusinessArchive) != oriSt.AttrVal(AttrBitIsBusinessArchive) { |
|
fields[ChangeSignTaskHistory] = struct{}{} |
|
} |
|
st.Mid = oriSt.Mid |
|
st.SignID = oriSt.SignID |
|
st.TaskCounter = oriSt.TaskCounter |
|
st.TaskData = oriSt.TaskData |
|
st.State = oriSt.State |
|
st.Ctime = oriSt.Ctime |
|
} |
|
|
|
// AttrVal get attribute value. |
|
func (st *SignTask) AttrVal(bit uint) int64 { |
|
return (st.Attribute >> bit) & int64(1) |
|
} |
|
|
|
// AttrSet set attribute value. |
|
func (st *SignTask) AttrSet(v int64, bit uint) { |
|
st.Attribute = st.Attribute&(^(1 << bit)) | (v << bit) |
|
} |
|
|
|
// SignTaskHistory . |
|
type SignTaskHistory struct { |
|
ID int64 `gorm:"column:id"` |
|
Mid int64 `gorm:"column:mid"` |
|
SignID int64 `gorm:"column:sign_id"` |
|
TaskTemplateID int `gorm:"column:task_template_id"` |
|
TaskType int8 `gorm:"column:task_type"` |
|
TaskCounter int `gorm:"column:task_counter"` |
|
TaskCondition int `gorm:"column:task_condition"` |
|
TaskData string `gorm:"column:task_data"` |
|
Attribute int64 `gorm:"column:attribute"` |
|
State int `gorm:"column:state"` |
|
GenerateDate xtime.Time `gorm:"column:generate_date"` |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
} |
|
|
|
// AttrVal get attribute value. |
|
func (sth *SignTaskHistory) AttrVal(bit uint) int64 { |
|
return (sth.Attribute >> bit) & int64(1) |
|
} |
|
|
|
// AttrSet set attribute value. |
|
func (sth *SignTaskHistory) AttrSet(v int64, bit uint) { |
|
sth.Attribute = sth.Attribute&(^(1 << bit)) | (v << bit) |
|
} |
|
|
|
//SignContract struct |
|
type SignContract struct { |
|
ID int64 `gorm:"column:id"` |
|
Mid int64 |
|
SignID int64 |
|
Filename string |
|
Filelink string |
|
State int8 |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
} |
|
|
|
// Diff . |
|
func (sc *SignContract) Diff(mOriSc map[int64]*SignContract, fields map[int8]struct{}) { |
|
var ( |
|
ok bool |
|
oriSc *SignContract |
|
) |
|
if oriSc, ok = mOriSc[sc.ID]; !ok { |
|
log.Error("OriSc(%d) no exsits", sc.ID) |
|
fields[ChangeSignContractHistory] = struct{}{} |
|
return |
|
} |
|
if !strings.EqualFold(sc.Filelink, oriSc.Filelink) { |
|
log.Error("file(%s)----orc_file(%s) no exsits", sc.Filelink, oriSc.Filelink) |
|
fields[ChangeSignContractHistory] = struct{}{} |
|
} |
|
if !strings.EqualFold(sc.Filename, oriSc.Filename) { |
|
log.Error("filename(%s)----orc_filename(%s) no exsits", sc.Filename, oriSc.Filename) |
|
fields[ChangeSignContractHistory] = struct{}{} |
|
} |
|
sc.Mid = oriSc.Mid |
|
sc.SignID = oriSc.SignID |
|
sc.State = oriSc.State |
|
sc.Ctime = oriSc.Ctime |
|
} |
|
|
|
// SignTaskAbsence struct |
|
type SignTaskAbsence struct { |
|
ID int64 `gorm:"column:id"` |
|
SignID int64 |
|
Mid int64 |
|
TaskHistoryID int64 |
|
AbsenceCount int |
|
Reason string |
|
State int8 |
|
AdminID int64 |
|
AdminName string |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
} |
|
|
|
// SignViolationHistory struct |
|
type SignViolationHistory struct { |
|
ID int64 `gorm:"column:id"` |
|
SignID int64 |
|
Mid int64 |
|
AdminID int64 |
|
AdminName string |
|
ViolationReason string |
|
State int8 |
|
Ctime xtime.Time `gorm:"column:ctime"` |
|
Mtime xtime.Time `gorm:"column:mtime"` |
|
} |
|
|
|
// GetTaskDuration this will return task duration, [startDate, endDate) |
|
func GetTaskDuration(date time.Time, taskType int8) (startDate, endDate time.Time) { |
|
var ndate = now.New(date) |
|
now.WeekStartDay = time.Monday |
|
switch taskType { |
|
case TaskTypeDay: |
|
var begin = ndate.BeginningOfDay() |
|
return begin, begin.AddDate(0, 0, 1) |
|
case TaskTypeWeek: |
|
var begin = ndate.BeginningOfWeek() |
|
return begin, begin.AddDate(0, 0, 7) |
|
case TaskTypeMonth: |
|
var begin = ndate.BeginningOfMonth() |
|
return begin, begin.AddDate(0, 1, 0) |
|
case TaskTypeQuarter: |
|
var begin = ndate.BeginningOfQuarter() |
|
return begin, begin.AddDate(0, 3, 0) |
|
} |
|
return |
|
}
|
|
|