Merge branch 'oa' into dev

main
jhc 1 year ago
commit 4d7f3a672f

File diff suppressed because it is too large Load Diff

@ -330,7 +330,8 @@ message CreateRequest {
string TypeName = 28 [json_name = "typeName"]; string TypeName = 28 [json_name = "typeName"];
string GroupName = 29 [json_name = "groupName"]; string GroupName = 29 [json_name = "groupName"];
BundlePayPrice BundlePayPrice = 30 [json_name = "bundlePayPrice"]; BundlePayPrice BundlePayPrice = 30 [json_name = "bundlePayPrice"];
FinancialForm FinancialForm = 31 [json_name = "financialForm"]; ApprovalOA ApprovalOA = 31 [json_name = "approvalOA"];
FinancialForm FinancialForm = 32 [json_name = "financialForm"];
} }
message WorkFlow { message WorkFlow {
@ -422,6 +423,132 @@ message SettingResponse {
bool Success=2 [json_name = "success"]; bool Success=2 [json_name = "success"];
} }
// oa
message ApplyTime {
string Date = 1 [json_name = "date"];
string Hour = 2 [json_name = "hour"];
string M = 3 [json_name = "m"];
}
message ApprovalOA {
uint64 ID=1 [json_name = "ID"];
uint64 DeletedAt=2 [json_name = "deletedAt"];
string CreatedAt=3 [json_name = "createdAt"];
string UpdatedAt=4 [json_name = "updatedAt"];
uint64 ApprovalID=5 [json_name = "approvalID"];
LeaveApply LeaveApply = 6 [json_name = "leaveApply"];
OutWorkApply OutWork = 7 [json_name = "outWork"];
MakeUpApply MakeUp = 8 [json_name = "makeUp"];
TurnoverApply Turnover = 9 [json_name = "turnover"];
OverTimeApply OverTime = 10 [json_name = "overTime"];
Leave Leave = 11 [json_name = "leave"];
}
message LeaveApply {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
string Reason = 10 [json_name = "reason"];
repeated string VerifyFile = 11 [json_name = "verifyFile"];
repeated CopyUser CopyUsers = 12 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 13 [json_name = "approvalUsers"];
}
message OutWorkApply {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"];
string Reason = 12 [json_name = "reason"];
float Hours = 13 [json_name = "hours"];
string OutWorkAddress = 14 [json_name = "outWorkAddress"];
string Vehicle = 15 [json_name = "vehicle"];
repeated CopyUser CopyUsers = 16 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 17 [json_name = "approvalUsers"];
}
message MakeUpApply {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"];
string Reason = 12 [json_name = "reason"];
repeated CopyUser CopyUsers = 13 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 14 [json_name = "approvalUsers"];
}
message TurnoverApply {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
string HandoverUID = 10 [json_name = "handoverUID"];
string HandoverName = 11 [json_name = "handoverName"];
repeated ApplyTime ApplyTimes = 12 [json_name = "applyTimes"];
string Reason = 13 [json_name = "reason"];
repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 15 [json_name = "approvalUsers"];
}
message OverTimeApply {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"];
string Reason = 12 [json_name = "reason"];
float Hours = 13 [json_name = "hours"];
repeated CopyUser CopyUsers = 14 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 15 [json_name = "approvalUsers"];
}
message Leave {
string UUID = 1 [json_name = "UUID"];
string StaffUID = 2 [json_name = "staffUID"];
string StaffNum = 3 [json_name = "staffNum"];
string StaffName = 4 [json_name = "staffName"];
string DepartmentUID = 5 [json_name = "departmentUID"];
string ApplyType = 6 [json_name = "applyType"];
string ActionTime = 7 [json_name = "actionTime"];
string ApprovalID = 8 [json_name = "approvalID"];
int32 Status = 9 [json_name = "status"];
repeated ApplyTime ApplyTimes = 10 [json_name = "applyTimes"];
string Reason = 12 [json_name = "reason"];
float Hours = 13 [json_name = "hours"];
float Days = 14 [json_name = "days"];
repeated CopyUser CopyUsers = 15 [json_name = "copyUsers"];
repeated ApprovalUser ApprovalUsers = 16 [json_name = "approvalUsers"];
}
// //
message GetNameRequest { message GetNameRequest {
@ -448,6 +575,7 @@ message FinancialForm {
repeated InvoiceInfo InvoiceInfo = 13 [json_name = "invoiceInfo"]; repeated InvoiceInfo InvoiceInfo = 13 [json_name = "invoiceInfo"];
} }
message CostInfo { message CostInfo {
string Description = 1 [json_name = "description"]; string Description = 1 [json_name = "description"];
string UnitPrice = 2 [json_name = "unitPrice"]; string UnitPrice = 2 [json_name = "unitPrice"];

@ -263,6 +263,11 @@ func (this *CreateRequest) Validate() error {
return github_com_mwitkow_go_proto_validators.FieldError("BundlePayPrice", err) return github_com_mwitkow_go_proto_validators.FieldError("BundlePayPrice", err)
} }
} }
if this.ApprovalOA != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.ApprovalOA); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalOA", err)
}
}
if this.FinancialForm != nil { if this.FinancialForm != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.FinancialForm); err != nil { if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.FinancialForm); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("FinancialForm", err) return github_com_mwitkow_go_proto_validators.FieldError("FinancialForm", err)
@ -330,6 +335,179 @@ func (this *DetailSettingRequest) Validate() error {
func (this *SettingResponse) Validate() error { func (this *SettingResponse) Validate() error {
return nil return nil
} }
func (this *ApplyTime) Validate() error {
return nil
}
func (this *ApprovalOA) Validate() error {
if this.LeaveApply != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.LeaveApply); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("LeaveApply", err)
}
}
if this.OutWork != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.OutWork); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("OutWork", err)
}
}
if this.MakeUp != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.MakeUp); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("MakeUp", err)
}
}
if this.Turnover != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Turnover); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("Turnover", err)
}
}
if this.OverTime != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.OverTime); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("OverTime", err)
}
}
if this.Leave != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Leave); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("Leave", err)
}
}
return nil
}
func (this *LeaveApply) Validate() error {
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *OutWorkApply) Validate() error {
for _, item := range this.ApplyTimes {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err)
}
}
}
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *MakeUpApply) Validate() error {
for _, item := range this.ApplyTimes {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err)
}
}
}
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *TurnoverApply) Validate() error {
for _, item := range this.ApplyTimes {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err)
}
}
}
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *OverTimeApply) Validate() error {
for _, item := range this.ApplyTimes {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err)
}
}
}
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *Leave) Validate() error {
for _, item := range this.ApplyTimes {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApplyTimes", err)
}
}
}
for _, item := range this.CopyUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("CopyUsers", err)
}
}
}
for _, item := range this.ApprovalUsers {
if item != nil {
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil {
return github_com_mwitkow_go_proto_validators.FieldError("ApprovalUsers", err)
}
}
}
return nil
}
func (this *GetNameRequest) Validate() error { func (this *GetNameRequest) Validate() error {
return nil return nil
} }

@ -51,6 +51,7 @@ type Approval struct {
BundlePayPrice *BundlePayPrice `gorm:"foreignKey:ApprovalID" json:"BundlePayPrice"` //关联的type BundlePayPrice *BundlePayPrice `gorm:"foreignKey:ApprovalID" json:"BundlePayPrice"` //关联的type
ExhibitionReward *ExhibitionReward `gorm:"foreignKey:ApprovalID" json:"ExhibitionReward"` //关联的type ExhibitionReward *ExhibitionReward `gorm:"foreignKey:ApprovalID" json:"ExhibitionReward"` //关联的type
ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"` ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"`
ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"oa"`
FinancialForm *FinancialForm `gorm:"foreignKey:ApprovalID" json:"financialForm"` FinancialForm *FinancialForm `gorm:"foreignKey:ApprovalID" json:"financialForm"`
} }
@ -73,7 +74,10 @@ const (
TypeBundle = "bundle" TypeBundle = "bundle"
TypeBundlePayPrice = "bundlePayPrice" TypeBundlePayPrice = "bundlePayPrice"
TypeArtExhibitionReward = "artExhibitionReward" TypeArtExhibitionReward = "artExhibitionReward"
TypeFinancialForm = "financialFormApply"
TypeOa = "oa" // oa 父类
TypeFinancialForm = "financialFormApply"
) )
const ( const (
StatusDoing = 1 StatusDoing = 1
@ -536,7 +540,8 @@ func MyAllWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ExhibitionReward.ApprovalExhibitions").
Preload("ApprovalWorkFlows"). Preload("ApprovalWorkFlows").
Preload("Exhibition.ApprovalExhibitions"). Preload("Exhibition.ApprovalExhibitions").
Preload("FinancialForm") Preload("FinancialForm").
Preload("ApprovalOA")
//我未阅读的和我未操作的 //我未阅读的和我未操作的
DB.Model(&Approval{}).Where(&Approval{Type: in.Type}).Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}).Order("id desc").Select("id").Find(&ids) DB.Model(&Approval{}).Where(&Approval{Type: in.Type}).Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}).Order("id desc").Select("id").Find(&ids)
@ -574,7 +579,8 @@ func MyApprovalWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
Preload("ApprovalType.ApprovalTypeGroup"). Preload("ApprovalType.ApprovalTypeGroup").
Preload("ApprovalWorkFlows"). Preload("ApprovalWorkFlows").
Preload("Exhibition.ApprovalExhibitions"). Preload("Exhibition.ApprovalExhibitions").
Preload("FinancialForm") Preload("FinancialForm").
Preload("ApprovalOA")
if in.Type != "" { if in.Type != "" {
modelObj = modelObj.Where(&Approval{Type: in.Type}) modelObj = modelObj.Where(&Approval{Type: in.Type})
@ -632,7 +638,8 @@ func MyWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ExhibitionReward.ApprovalExhibitions").
Preload("ApprovalWorkFlows"). Preload("ApprovalWorkFlows").
Preload("Exhibition.ApprovalExhibitions"). Preload("Exhibition.ApprovalExhibitions").
Preload("FinancialForm") Preload("FinancialForm").
Preload("ApprovalOA")
if in.Type != "" { if in.Type != "" {
modelObj = modelObj.Where(&Approval{Type: in.Type}) modelObj = modelObj.Where(&Approval{Type: in.Type})
@ -689,7 +696,8 @@ func MySubmitApprovals(in *approval.ListRequest) ([]*Approval, int64) {
Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ExhibitionReward.ApprovalExhibitions").
Preload("ApprovalType.ApprovalTypeGroup"). Preload("ApprovalType.ApprovalTypeGroup").
Preload("Exhibition.ApprovalExhibitions"). Preload("Exhibition.ApprovalExhibitions").
Preload("FinancialForm") Preload("FinancialForm").
Preload("ApprovalOA")
if in.Status != 0 { if in.Status != 0 {
modelObj = modelObj.Where(&Approval{Status: int8(in.Status)}) modelObj = modelObj.Where(&Approval{Status: int8(in.Status)})
@ -722,7 +730,8 @@ func MyReadApprovals(in *approval.ListRequest) ([]*Approval, int64) {
Preload("ExhibitionReward.ApprovalExhibitions"). Preload("ExhibitionReward.ApprovalExhibitions").
Preload("ApprovalType.ApprovalTypeGroup"). Preload("ApprovalType.ApprovalTypeGroup").
Preload("Exhibition.ApprovalExhibitions"). Preload("Exhibition.ApprovalExhibitions").
Preload("FinancialForm") Preload("FinancialForm").
Preload("ApprovalOA")
if in.Type != "" { if in.Type != "" {
modelObj = modelObj.Where(&Approval{Type: in.Type}) modelObj = modelObj.Where(&Approval{Type: in.Type})
@ -813,6 +822,10 @@ func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, erro
case TypeFinancialForm: case TypeFinancialForm:
return &FinancialForm{}, nil return &FinancialForm{}, nil
default: default:
return &Approval{}, nil if TypeMap[typeFiled] == TypeOa {
return &ApprovalOA{}, nil
} else {
return nil, errors.New("无法识别的审批类型")
}
} }
} }

@ -0,0 +1,376 @@
package model
import (
"errors"
"github.com/fonchain_enterprise/fonchain-approval/api/approval"
m2 "github.com/fonchain_enterprise/fonchain-approval/pkg/m"
"github.com/jinzhu/copier"
"gorm.io/plugin/soft_delete"
"strconv"
"time"
)
type ApprovalOA struct {
ID uint64 `gorm:"primaryKey;column:id" json:"id"` // ID
DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"` // 删除时间
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"` // 创建时间
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"` // 更新时间
ApprovalID uint64 `gorm:"column:approval_id" json:"approvalID"` // 申请的id
LeaveApply *LeaveApply `json:"leaveApply" gorm:"column:leave_apply;type:json;comment:假期余额申请"`
OutWork *OutWorkApply `json:"outWork" gorm:"column:out_work;type:json;comment:外勤"`
MakeUp *MakeUpApply `json:"makeUp" gorm:"column:make_up;type:json;comment:加班"`
Turnover *TurnoverApply `json:"turnover" gorm:"column:turnover;type:json;comment:离职"`
OverTime *OverTimeApply `json:"overTime" gorm:"column:over_time;type:json;comment:加班"`
Leave *Leave `json:"leave" gorm:"column:leave;type:json;comment:请假"`
}
// LeaveApply
// 假期额度申请
type LeaveApply struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
VerifyFile VerifyFiles `json:"verifyFile" gorm:"column:verify_file;type:json;comment:证明文件(图片|pdf)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
// OutWorkApply
// 外勤申请
type OutWorkApply struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"`
Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"`
OutWorkAddress string `json:"outWorkAddress" gorm:"column:out_work_address;type:varchar(255);comment:外勤地址"`
Vehicle string `json:"vehicle" gorm:"column:vehicle;type:varchar(255);comment:交通工具"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
// MakeUpApply
// 补卡申请
type MakeUpApply struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
// TurnoverApply
// 离职申请
type TurnoverApply struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
HandoverUID string `json:"handoverUID" gorm:"column:handover_uid;type:varchar(255);comment:交接人"`
HandoverName string `json:"handoverName" gorm:"column:handover_name;type:varchar(255);comment:交接人姓名"`
ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
// OverTimeApply
// 加班申请
type OverTimeApply struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
// Leave
// 请假
type Leave struct {
UUID string `json:"UUID" gorm:"column:uuid,type:varchar(255),primaryKey"`
StaffUID string `json:"staffUID" gorm:"column:staff_uid;type:varchar(255);comment:员工UID"` // 员工UID
StaffNum string `json:"staffNum" gorm:"column:staff_num;type:varchar(255);comment:员工编号"` // 员工编号
StaffName string `json:"staffName" gorm:"column:staff_name;type:varchar(255);comment:员工姓名"` // 员工姓名
DepartmentUID string `json:"departmentUID" gorm:"column:department_uid;type:text;comment:部门UID"` // 部门UID
ApplyType string `json:"applyType" gorm:"column:apply_type;type:varchar(255);comment:审批|请假类型"`
ActionTime string `json:"actionTime" gorm:"column:action_time;type:varchar(255);comment:操作|申请时间"`
ApprovalID string `json:"approvalID" gorm:"column:approval_id;type:varchar(255);comment:审批系统中的approvalID"`
ApplyTimes ApplyTimes `json:"applyTimes" gorm:"column:apply_times;type:json;comment:时间"`
Reason string `json:"reason" gorm:"column:reason;type:varchar(255);comment:理由"`
Hours float32 `json:"hours" gorm:"column:hours;type:decimal(10,2);comment:时长(小时)"`
Days float32 `json:"days" gorm:"column:days;type:decimal(10,2);comment:时长(天)"`
Status int32 `json:"status" gorm:"column:status;type:int;comment:状态(目前和审批系统状态同步)"`
ApprovalUsers ApprovalUsers `json:"approvalUsers" gorm:"column:approval_users;type:json;comment:审批人"`
CopyUsers CopyUsers `json:"copyUsers" gorm:"column:copy_users;type:json;comment:抄送人"`
}
type VerifyFiles []string
type ApplyTime struct {
Date string `json:"date"` // 日期 2023-05-08
Hour string `json:"hour"` // 时间 09:00
M string `json:"m"` // 上午|下午
}
type ApplyTimes []ApplyTime
var sonMap = map[string]string{
"leave": "leave", // 事假
"sick": "leave", // 病假
"annualLeave": "leave", // 年假
"dayOff": "leave", // 调休
"maritalLeave": "leave", // 婚假
"matingCheckLeave": "leave", // 孕检假
"maternityLeave": "leave", // 产假
"paternityLeave": "leave", // 陪产假
"parentalLeave": "leave", // 育儿假
"nursingLeave": "leave", // 独生子女护理假
"funeralLeave": "leave", // 丧假
"makeUp": "makeUp", // 补卡
"overTime": "overTime", // 加班
"outWork": "outWork", // 外勤
"turnover": "turnover", // 离职
"annualLeaveApply": "leaveApply", // 年假申请
"maritalLeaveApply": "leaveApply", // 婚假申请
"matingCheckLeaveApply": "leaveApply", // 孕检假申请
"maternityLeaveApply": "leaveApply", // 产假申请
"paternityLeaveApply": "leaveApply", // 陪产假申请
"parentalLeaveApply": "leaveApply", // 育儿假申请
"nursingLeaveApply": "leaveApply", // 独生子女护理假申请
}
// TableName get sql table name.获取数据库表名
func (oa *ApprovalOA) TableName() string {
return "approval_oa"
}
func (oa *ApprovalOA) GetApproval(id uint64) (*Approval, error) {
var entity *Approval
if err := DB.
Preload("ApprovalWorkFlows").
Preload("ApprovalType").
Preload("ApprovalOA").
First(&entity, id).Error; err != nil {
return entity, err
}
return entity, nil
}
func (oa *ApprovalOA) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error {
if err := oa.copyOAToModel(in, a); err != nil {
return err
}
return DB.Create(&oa).Error
}
func (oa *ApprovalOA) copyOAToModel(in *approval.CreateRequest, a *Approval) error {
copier.CopyWithOption(&oa, in.ApprovalOA, copier.Option{DeepCopy: true})
oa.ApprovalID = a.ID
if err := oa.addOtherInfoToModel(in, a); err != nil {
return err
}
return nil
}
func (oa *ApprovalOA) addOtherInfoToModel(in *approval.CreateRequest, a *Approval) error {
if v, ok := sonMap[a.ApprovalType.KeyWord]; ok {
switch v {
case "leave":
oa.Leave.ApprovalUsers = a.ApprovalUsers
oa.Leave.CopyUsers = a.CopyUsers
if oa.Leave.ApplyType != "" {
oa.Leave.ApplyType = a.ApprovalType.KeyWord
}
oa.Leave.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.Leave.Status = int32(a.Status)
applyTimes := make([]ApplyTime, 0)
for i := 0; i < len(in.ApprovalOA.Leave.ApplyTimes); i++ {
applyTimes = append(applyTimes, ApplyTime{
Date: in.ApprovalOA.Leave.ApplyTimes[i].Date,
Hour: in.ApprovalOA.Leave.ApplyTimes[i].Hour,
M: in.ApprovalOA.Leave.ApplyTimes[i].M,
})
}
oa.Leave.ApplyTimes = applyTimes
case "makeUp":
oa.MakeUp.ApprovalUsers = a.ApprovalUsers
oa.MakeUp.CopyUsers = a.CopyUsers
oa.MakeUp.ApplyType = a.ApprovalType.KeyWord
oa.MakeUp.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.MakeUp.Status = int32(a.Status)
applyTimes := make([]ApplyTime, 0)
for i := 0; i < len(in.ApprovalOA.MakeUp.ApplyTimes); i++ {
applyTimes = append(applyTimes, ApplyTime{
Date: in.ApprovalOA.MakeUp.ApplyTimes[i].Date,
Hour: in.ApprovalOA.MakeUp.ApplyTimes[i].Hour,
M: in.ApprovalOA.MakeUp.ApplyTimes[i].M,
})
}
oa.MakeUp.ApplyTimes = applyTimes
case "overTime":
oa.OverTime.ApprovalUsers = a.ApprovalUsers
oa.OverTime.CopyUsers = a.CopyUsers
oa.OverTime.ApplyType = a.ApprovalType.KeyWord
oa.OverTime.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.OverTime.Status = int32(a.Status)
applyTimes := make([]ApplyTime, 0)
for i := 0; i < len(in.ApprovalOA.OverTime.ApplyTimes); i++ {
applyTimes = append(applyTimes, ApplyTime{
Date: in.ApprovalOA.OverTime.ApplyTimes[i].Date,
Hour: in.ApprovalOA.OverTime.ApplyTimes[i].Hour,
M: in.ApprovalOA.OverTime.ApplyTimes[i].M,
})
}
oa.OverTime.ApplyTimes = applyTimes
case "outWork":
oa.OutWork.ApprovalUsers = a.ApprovalUsers
oa.OutWork.CopyUsers = a.CopyUsers
oa.OutWork.ApplyType = a.ApprovalType.KeyWord
oa.OutWork.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.OutWork.Status = int32(a.Status)
applyTimes := make([]ApplyTime, 0)
for i := 0; i < len(in.ApprovalOA.OutWork.ApplyTimes); i++ {
applyTimes = append(applyTimes, ApplyTime{
Date: in.ApprovalOA.OutWork.ApplyTimes[i].Date,
Hour: in.ApprovalOA.OutWork.ApplyTimes[i].Hour,
M: in.ApprovalOA.OutWork.ApplyTimes[i].M,
})
}
oa.OutWork.ApplyTimes = applyTimes
case "turnover":
oa.Turnover.ApprovalUsers = a.ApprovalUsers
oa.Turnover.CopyUsers = a.CopyUsers
oa.Turnover.ApplyType = a.ApprovalType.KeyWord
oa.Turnover.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.Turnover.Status = int32(a.Status)
applyTimes := make([]ApplyTime, 0)
for i := 0; i < len(in.ApprovalOA.Turnover.ApplyTimes); i++ {
applyTimes = append(applyTimes, ApplyTime{
Date: in.ApprovalOA.Turnover.ApplyTimes[i].Date,
Hour: in.ApprovalOA.Turnover.ApplyTimes[i].Hour,
M: in.ApprovalOA.Turnover.ApplyTimes[i].M,
})
}
oa.Turnover.ApplyTimes = applyTimes
case "leaveApply":
oa.LeaveApply.ApprovalUsers = a.ApprovalUsers
oa.LeaveApply.CopyUsers = a.CopyUsers
oa.LeaveApply.ApplyType = a.ApprovalType.KeyWord
oa.LeaveApply.ApprovalID = strconv.FormatUint(a.ID, 10)
oa.LeaveApply.Status = int32(a.Status)
default:
return errors.New("未找到相关审批类型")
}
}
return nil
}
func (oa *ApprovalOA) UpdateApprovalContent(in *approval.CreateRequest, a *Approval) error {
var entity *ApprovalOA
if err := DB.Where(&ApprovalOA{ApprovalID: a.ID}).First(&entity).Error; err != nil {
return errors.New(m2.ErrorNotFound)
}
oa.ID = entity.ID
if err := oa.copyOAToModel(in, a); err != nil {
return err
}
return DB.Model(&oa).Updates(oa).Error
}
func (oa *ApprovalOA) BuildResContent(a *Approval, request *approval.CreateRequest) {
if err := oa.copyOAToRpc(a, request); err != nil {
return
}
}
func (oa *ApprovalOA) copyOAToRpc(a *Approval, in *approval.CreateRequest) error {
copier.CopyWithOption(&in.ApprovalOA, a, copier.Option{DeepCopy: true})
if err := oa.addOtherInfoToRpc(a, in); err != nil {
return err
}
return nil
}
func (oa *ApprovalOA) addOtherInfoToRpc(a *Approval, in *approval.CreateRequest) error {
if oa.Leave != nil {
copier.CopyWithOption(&a.ApprovalOA.Leave.ApplyTimes, in.ApprovalOA.Leave.ApplyTimes, copier.Option{DeepCopy: true})
}
if oa.MakeUp != nil {
copier.CopyWithOption(&a.ApprovalOA.MakeUp.ApplyTimes, in.ApprovalOA.MakeUp.ApplyTimes, copier.Option{DeepCopy: true})
}
if oa.Turnover != nil {
copier.CopyWithOption(&a.ApprovalOA.Turnover.ApplyTimes, in.ApprovalOA.Turnover.ApplyTimes, copier.Option{DeepCopy: true})
}
if oa.OverTime != nil {
copier.CopyWithOption(&a.ApprovalOA.OverTime.ApplyTimes, in.ApprovalOA.OverTime.ApplyTimes, copier.Option{DeepCopy: true})
}
if oa.OutWork != nil {
copier.CopyWithOption(&a.ApprovalOA.OutWork.ApplyTimes, in.ApprovalOA.OutWork.ApplyTimes, copier.Option{DeepCopy: true})
}
return nil
}
func (oa *ApprovalOA) DeleteApproval(p *Approval) error {
return DB.Where(&ApprovalOA{ApprovalID: p.ID}).Delete(&ApprovalOA{}).Error
}

@ -40,23 +40,33 @@ var TypeMap = map[string]string{
TypeBundlePayPrice: "", TypeBundlePayPrice: "",
TypeArtExhibitionReward: "", TypeArtExhibitionReward: "",
"leave": "", // 事假 "leave": "oa", // 事假
"sick": "", // 病假 "sick": "oa", // 病假
"annualLeave": "", // 年假 "annualLeave": "oa", // 年假
"dayOff": "", // 调休 "dayOff": "oa", // 调休
"maritalLeave": "", // 婚假 "maritalLeave": "oa", // 婚假
"matingCheckLeave": "", // 孕检假 "matingCheckLeave": "oa", // 孕检假
"maternityLeave": "", // 产假 "maternityLeave": "oa", // 产假
"paternityLeave": "", // 陪产假 "paternityLeave": "oa", // 陪产假
"parentalLeave": "", // 育儿假 "parentalLeave": "oa", // 育儿假
"nursingLeave": "", // 独生子女护理假 "nursingLeave": "oa", // 独生子女护理假
"funeralLeave": "", // 丧假 "funeralLeave": "oa", // 丧假
"makeUp": "", // 补卡
"overTime": "", // 加班 "makeUp": "oa", // 补卡
"outWork": "", // 外勤 "overTime": "oa", // 加班
"turnover": "", // 离职 "outWork": "oa", // 外勤
"turnover": "oa", // 离职
"annualLeaveApply": "oa", // 年假申请
"maritalLeaveApply": "oa", // 婚假申请
"matingCheckLeaveApply": "oa", // 孕检假申请
"maternityLeaveApply": "oa", // 产假申请
"paternityLeaveApply": "oa", // 陪产假申请
"parentalLeaveApply": "oa", // 育儿假申请
"nursingLeaveApply": "oa", // 独生子女护理假申请
"financialFormApply": "", // 财务表单审批 "financialFormApply": "", // 财务表单审批
} }
var keyWordMap = map[string]string{ var keyWordMap = map[string]string{
@ -67,22 +77,34 @@ var keyWordMap = map[string]string{
"画展审批": "show", "画展审批": "show",
"画展包付款单申请": TypeBundlePayPrice, "画展包付款单申请": TypeBundlePayPrice,
"画作润格审批": TypeArtExhibitionReward, "画作润格审批": TypeArtExhibitionReward,
"事假": "leave", // 事假
"病假": "sick", // 病假 "事假": "leave", // 事假
"年假": "annualLeave", // 年假 "病假": "sick", // 病假
"调休": "dayOff", // 调休 "年假": "annualLeave", // 年假
"婚假": "maritalLeave", // 婚假 "调休": "dayOff", // 调休
"孕检假": "matingCheckLeave", // 孕检假 "婚假": "maritalLeave", // 婚假
"产假": "maternityLeave", // 产假 "孕检假": "matingCheckLeave", // 孕检假
"陪产假": "paternityLeave", // 陪产假 "产假": "maternityLeave", // 产假
"育儿假": "parentalLeave", // 育儿假 "陪产假": "paternityLeave", // 陪产假
"独生子女护理假": "nursingLeave", // 独生子女护理假 "育儿假": "parentalLeave", // 育儿假
"丧假": "funeralLeave", // 丧假 "独生子女护理假": "nursingLeave", // 独生子女护理假
"补卡": "makeUp", // 补卡 "丧假": "funeralLeave", // 丧假
"加班": "overTime", // 加班
"外勤": "outWork", // 外勤 "补卡": "makeUp", // 补卡
"离职": "turnover", // 离职 "加班": "overtime", // 加班
"财务表单审批": "financialFormApply", // 财务表单审批 "外勤": "outwork", // 外勤
"离职": "turnover", // 离职
"年假申请": "annualLeaveApply", // 年假申请
"婚假申请": "maritalLeaveApply", // 婚假申请
"孕检假申请": "matingCheckLeaveApply", // 孕检假申请
"产假申请": "maternityLeaveApply", // 产假申请
"陪产假申请": "paternityLeaveApply", // 陪产假申请
"育儿假申请": "parentalLeaveApply", // 育儿假申请
"独生子女护理假申请": "nursingLeaveApply", // 独生子女护理假申请
"财务表单审批": "financialFormApply", // 财务表单审批
} }
func DataExist(domain, keyWork, title string) bool { func DataExist(domain, keyWork, title string) bool {
@ -141,6 +163,10 @@ func IsSystemKeyWork(title string) bool {
return isOk return isOk
} }
// TODO
// 增加 逻辑 取出 value值 判断是否为 ""
// 为 "" 则为 系统
// 不为 "" 则为 自定义中特殊类型
func IsSystemType(title string) bool { func IsSystemType(title string) bool {
_, isOk := TypeMap[title] _, isOk := TypeMap[title]
return isOk return isOk

@ -14,7 +14,9 @@ func migration() {
addTable(&ApprovalReward{}) addTable(&ApprovalReward{})
addTable(&FinancialFormSetting{}) // 财务报表审批 设置信息 addTable(&FinancialFormSetting{}) // 财务报表审批 设置信息
addTable(&FinancialForm{}) // 财务报表审批 设置信息 addTable(&FinancialForm{}) // 财务报表审批
addTable(&ApprovalOA{}) // OA
//增加字段 //增加字段
addColumn(&ApprovalType{}, "is_normal") addColumn(&ApprovalType{}, "is_normal")

Loading…
Cancel
Save