create_cooperation_contract.go 5.0 KB
package command

import (
	"fmt"
	"reflect"
	"strings"
	"time"

	"github.com/beego/beego/v2/core/validation"
)

type CreateDividendsIncentivesRulesCommand struct {
	DividendsIncentivesRuleId     string    `cname:"分红激励规则ID" json:"dividendsIncentivesRuleId"`
	CooperationContractNumber     string    `cname:"共创合约编号" json:"cooperationContractNumber"`
	ReferrerPercentage            float64   `cname:"推荐人抽成" json:"referrerPercentage"`
	SalesmanPercentage            float64   `cname:"业务员抽成" json:"salesmanPercentage"`
	DividendsIncentivesPercentage float64   `cname:"分红规则激励百分点" json:"dividendsIncentivesPercentage"`
	DividendsIncentivesStage      int       `cname:"分红激励阶段" json:"dividendsIncentivesStage"`
	DividendsIncentivesStageEnd   time.Time `cname:"" json:"dividendsIncentivesStageEnd"`
	DividendsIncentivesStageStart time.Time `cname:"" json:"dividendsIncentivesStageStart"`
}

type CreateMoneyIncentivesRulesCommand struct {
	MoneyIncentivesRuleIdString string    `cname:"" json:"moneyIncentivesRuleId,string"`
	CooperationContractNumber   string    `cname:"" json:"cooperationContractNumber"`
	MoneyIncentivesAmount       int       `cname:"" json:"moneyIncentivesAmount"`
	MoneyIncentivesStage        int       `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"`
}

type CreateUndertakersCommand struct {
	UserId             string `cname:"承接人UID" json:"userId"`
	ContractAttachment []struct {
		FileType string `json:"fileType"`
		Name     string `json:"name"`
		Url      string `json:"url"`
		FileSize int64  `json:"fileSize"`
	} `json:"contractAttachment"`
	ReferrerId string `json:"referrerId"`
	SalesmanId string `json:"salesmanId"`
}

type CreateRelevantPeopleCommand struct {
	UserId string `json:"userId"`
}

type CreateCooperationContractCommand struct {
	// 共创合约描述
	CooperationContractDescription string `cname:"共创合约描述" json:"cooperationContractDescription" valid:"Required"`
	// 共创项目编号
	CooperationProjectNumber string `cname:"共创项目编号" json:"cooperationProjectNumber" valid:"Required"`
	// 共创合约发起部门编码
	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"`
	// 相关人列表
	RelevantPeople []string `cname:"相关人列表" json:"relevantPeople,omitempty"`
	// 公司ID,通过集成REST上下文获取
	CompanyId int64 `cname:"公司ID" json:"companyId,string" valid:"Required"`
	// 组织机构ID
	OrgId int64 `cname:"组织机构ID" json:"orgId,string" valid:"Required"`
	// 用户ID,通过集成REST上下文获取,可翻译成发起人、承接人、推荐人、业务员
	UserId int64 `cname:"用户ID" json:"userId,string" valid:"Required"`
	// 用户基础数据id
	UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId,string" valid:"Required"`
}

func (createCooperationContractCommand *CreateCooperationContractCommand) Valid(validation *validation.Validation) {
	//validation.SetError("CustomValid", "未实现的自定义认证")
}

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
}