go-common/app/admin/main/up/model/signmodel/sign_up.go
2019-04-22 18:49:16 +08:00

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
}