create_cooperation_contract.go
6.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package command
import (
"fmt"
"reflect"
"strings"
"time"
"github.com/beego/beego/v2/core/validation"
)
// CreateDividendsIncentivesRulesCommand 业绩分红激励规则
type CreateDividendsIncentivesRulesCommand struct {
// 分红激励规则ID
DividendsIncentivesRuleId string `cname:"分红激励规则ID" json:"dividendsIncentivesRuleId,omitempty"`
// 共创合约编号
CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber,omitempty"`
// 推荐人抽成
ReferrerPercentage float64 `cname:"推荐人抽成" json:"referrerPercentage"`
// 业务员抽成
SalesmanPercentage float64 `cname:"业务员抽成" json:"salesmanPercentage"`
// 分红规则激励百分点
DividendsIncentivesPercentage float64 `cname:"分红规则激励百分点" json:"dividendsIncentivesPercentage"`
// 分红激励阶段
DividendsIncentivesStage int32 `cname:"分红激励阶段" json:"dividendsIncentivesStage"`
// 业绩分红阶段开始时间
DividendsIncentivesStageStart time.Time `cname:"业绩分红阶段开始时间" json:"dividendsIncentivesStageStart"`
// 业绩分红阶段结束时间
DividendsIncentivesStageEnd time.Time `cname:"业绩分红阶段结束时间" json:"dividendsIncentivesStageEnd"`
// 说明
Remarks string `cname:"说明" json:"remarks"`
}
// CreateMoneyIncentivesRulesCommand 金额激励规则
type CreateMoneyIncentivesRulesCommand struct {
// 金额激励规则ID
MoneyIncentivesRuleId string `cname:"金额激励规则ID" json:"moneyIncentivesRuleId"`
// 共创合约编号
CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber"`
// 激励金额
MoneyIncentivesAmount float64 `cname:"激励金额" json:"moneyIncentivesAmount"`
// 金额激励阶段
MoneyIncentivesStage int32 `cname:"金额激励阶段" json:"moneyIncentivesStage"`
// 金额激励结束时间
MoneyIncentivesStageEnd time.Time `cname:"金额激励结束时间" json:"moneyIncentivesStageEnd"`
// 金额激励开始时间
MoneyIncentivesStageStart time.Time `cname:"金额激励开始时间" json:"moneyIncentivesStageStart"`
// 金额激励时间
MoneyIncentivesTime time.Time `cname:"金额激励时间" json:"moneyIncentivesTime"`
// 推荐人抽成
ReferrerPercentage float64 `cname:"推荐人抽成" json:"referrerPercentage"`
// 业务员抽成
SalesmanPercentage float64 `cname:"业务员抽成" json:"salesmanPercentage"`
// 说明
Remarks string `cname:"说明" json:"remarks"`
}
// CreateUndertakersCommand 承接人
type CreateUndertakersCommand struct {
// 承接人ID
UndertakerId string `cname:"承接人ID" json:"undertakerId"`
// 承接人用户ID
UserId string `cname:"承接人UID" json:"userId"`
// 附件
ContractAttachment []struct {
// 文件类型
FileType string `cname:"文件类型" json:"fileType"`
// 文件名称
Name string `cname:"文件名称" json:"name"`
// 文件路径
Url string `cname:"文件路径" json:"url"`
// 文件大小
FileSize int64 `cname:"文件大小" json:"fileSize"`
} `cname:"附件" json:"contractAttachment"`
// 推荐人用户ID
ReferrerId string `cname:"推荐UID" json:"referrerId"`
// 业务员用户ID
SalesmanId string `cname:"业务员UID" json:"salesmanId"`
}
type CreateCooperationContractCommand struct {
// 共创合约描述
CooperationContractDescription string `cname:"共创合约描述" json:"cooperationContractDescription"`
// 共创项目编号
CooperationProjectNumber string `cname:"共创项目编号" json:"cooperationProjectNumber,omitempty"`
// 共创合约发起部门ID
DepartmentId string `cname:"共创合约发起部门ID" json:"departmentId" valid:"Required"`
// 共创合约承接对象,1员工,2共创用户,3公开
CooperationContractUndertakerTypes []int32 `cname:"共创合约承接对象" json:"cooperationContractUndertakerTypes" valid:"Required"`
// 共创合约名称
CooperationContractName string `cname:"共创合约名称" json:"cooperationContractName" valid:"Required"`
// 共创模式编码
CooperationModeNumber string `cname:"共创模式编码" json:"cooperationModeNumber" valid:"Required"`
// 共创合约发起人uid
SponsorUid string `cname:"共创合约发起人uid" json:"sponsorUid,omitempty"`
// 业绩分红激励规则列表
DividendsIncentivesRules []*CreateDividendsIncentivesRulesCommand `cname:"业绩分红激励规则列表" json:"dividendsIncentivesRules,omitempty"`
// 金额激励规则列表
MoneyIncentivesRules []*CreateMoneyIncentivesRulesCommand `cname:"金额激励规则列表" json:"moneyIncentivesRules,omitempty"`
// 承接方列表
Undertakers []*CreateUndertakersCommand `cname:"承接方列表" json:"undertakers,omitempty"`
// 相关人列表
RelevantIds []string `cname:"相关人列表" json:"relevantIds,omitempty"`
// 公司ID,通过集成REST上下文获取
CompanyId int64 `cname:"公司ID" json:"companyId" valid:"Required"`
// 组织机构ID
OrgId int64 `cname:"组织机构ID" json:"orgId" valid:"Required"`
// 用户ID,通过集成REST上下文获取,可翻译成发起人、承接人、推荐人、业务员
UserId int64 `cname:"用户ID" json:"userId" valid:"Required"`
// 用户基础数据id
UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId" valid:"Required"`
}
func (createCooperationContractCommand *CreateCooperationContractCommand) Valid(validation *validation.Validation) {
// 激励规则自定义校验
if len(createCooperationContractCommand.DividendsIncentivesRules) == 0 && len(createCooperationContractCommand.MoneyIncentivesRules) == 0 {
validation.Error("激励规则不能为空")
}
// 承接人列表校验
if len(createCooperationContractCommand.Undertakers) == 0 {
validation.Error("承接人不能为空")
}
}
func (createCooperationContractCommand *CreateCooperationContractCommand) ValidateCommand() error {
valid := validation.Validation{}
b, err := valid.Valid(createCooperationContractCommand)
if err != nil {
return err
}
if !b {
elem := reflect.TypeOf(createCooperationContractCommand).Elem()
for _, validErr := range valid.Errors {
field, isExist := elem.FieldByName(validErr.Field)
if isExist {
return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
} else {
return fmt.Errorf(validErr.Message)
}
}
}
return nil
}