442 lines
11 KiB
Go
442 lines
11 KiB
Go
|
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
|
||
|
}
|