create_cooperation_contract.go 6.2 KB
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
}