作者 yangfu

Merge branch 'dev' of http://gitlab.fjmaimaimai.com/allied-creation/allied-creat…

…ion-cooperation into dev
... ... @@ -9,59 +9,84 @@ import (
"github.com/beego/beego/v2/core/validation"
)
// CreateDividendsIncentivesRulesCommand 业绩分红激励规则
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 int32 `cname:"分红激励阶段" json:"dividendsIncentivesStage"`
DividendsIncentivesStageEnd time.Time `cname:"业绩分红阶段结束时间" json:"dividendsIncentivesStageEnd"`
// 分红激励规则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"`
}
// CreateMoneyIncentivesRulesCommand 金额激励规则
type CreateMoneyIncentivesRulesCommand struct {
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"`
// 金额激励规则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"`
}
// CreateUndertakersCommand 承接人
type CreateUndertakersCommand struct {
UndertakerId string `cname:"承接人ID" json:"undertakerId"`
UserId string `cname:"承接人UID" json:"userId"`
// 承接人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"`
// 文件名称
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 CreateRelevantPeopleCommand struct {
UserId string `cname:"相关人UID" json:"userId"`
}
type CreateCooperationContractCommand struct {
// 共创合约描述
CooperationContractDescription string `cname:"共创合约描述" json:"cooperationContractDescription" valid:"Required"`
// 共创项目编号
CooperationProjectNumber string `cname:"共创项目编号" json:"cooperationProjectNumber" valid:"Required"`
// 共创合约发起部门编码
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"`
CooperationModeNumber string `cname:"共创模式编码" json:"cooperationModeNumber,omitempty"`
// 共创合约发起人uid
SponsorUid string `cname:"共创合约发起人uid" json:"sponsorUid,omitempty"`
// 业绩分红激励规则列表
... ...
... ... @@ -94,6 +94,26 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
organization = data
}
// 部门REST服务初始化
var departmentService service.DepartmentService
if value, err := factory.CreateDepartmentService(map[string]interface{}{}); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
departmentService = value
}
// 获取部门
var department *domain.Department
departmentId, err := strconv.ParseInt(createCooperationContractCommand.DepartmentId, 10, 64)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
if data, err := departmentService.DepartmentFrom(createCooperationContractCommand.CompanyId, departmentId); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
department = data
}
// 共创合约DAO初始化
var cooperationContractDao *dao.CooperationContractDao
if value, err := factory.CreateCooperationContractDao(map[string]interface{}{
... ... @@ -103,11 +123,13 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
} else {
cooperationContractDao = value
}
// 生成共创合约编号
contractNumber, err2 := cooperationContractDao.GenerateContractNumber()
if err2 != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error())
}
// 校验共创合约编号是否唯一
numberAvailable, _ := cooperationContractDao.CheckContractNumberAvailable(map[string]interface{}{
"companyId": createCooperationContractCommand.CompanyId,
... ... @@ -122,7 +144,10 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
var undertakers []*domain.Undertaker
for _, undertaker := range createCooperationContractCommand.Undertakers {
var undertakerDomain *domain.Undertaker
undertakerUid, _ := strconv.ParseInt(undertaker.UserId, 10, 64)
undertakerUid, err := strconv.ParseInt(undertaker.UserId, 10, 64)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "承接人UID错误")
}
if data, err := userService.UndertakerFrom(createCooperationContractCommand.CompanyId, createCooperationContractCommand.OrgId, undertakerUid); err != nil {
log.Logger.Error(err.Error())
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
... ... @@ -268,6 +293,7 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
Status: 1,
Org: organization,
Company: company,
Department: department,
Operator: operator,
DividendsIncentivesRules: dividendsIncentivesRules,
MoneyIncentivesRules: moneyIncentivesRules,
... ... @@ -339,14 +365,39 @@ func (cooperationContractService *CooperationContractService) GetCooperationCont
} else {
cooperationContractDao = value
}
// 获取可删除的承接对象类型
undertakerTypesUncheckedAvailable, err := cooperationContractDao.CheckUndertakerTypesUncheckedAvailable(map[string]interface{}{
"cooperationContractNumber": cooperationContract.CooperationContractNumber,
"cooperationContractUndertakerTypes": cooperationContract.CooperationContractUndertakerTypes,
// 可以去除勾选的承接人对象列表
var undertakerTypesUncheckedAvailable []int32
// 判断承接对象是否存在员工
gotUser, err := cooperationContractDao.CheckUndertakerTypesUncheckedAvailable(map[string]interface{}{
"cooperationContractNumber": cooperationContract.CooperationContractNumber,
"user": true,
})
if err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if !gotUser {
undertakerTypesUncheckedAvailable = append(undertakerTypesUncheckedAvailable, 1)
}
// 判断承接对象是否存在共创用户
gotPartner, err := cooperationContractDao.CheckUndertakerTypesUncheckedAvailable(map[string]interface{}{
"cooperationContractNumber": cooperationContract.CooperationContractNumber,
"partner": true,
})
if err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if !gotPartner {
undertakerTypesUncheckedAvailable = append(undertakerTypesUncheckedAvailable, 2)
}
// 判断承接人是否存在公开用户
if !gotUser && !gotPartner {
undertakerTypesUncheckedAvailable = append(undertakerTypesUncheckedAvailable, 3)
}
cooperationContractDto := &dto.CooperationContractDto{}
if err := cooperationContractDto.LoadDto(cooperationContract, undertakerTypesUncheckedAvailable); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
... ...
... ... @@ -21,7 +21,7 @@ type DividendsIncentivesEstimateDto struct {
// 订单金额
OrderAmount float64 `json:"orderAmount"`
// 订单/退货单日期
OrderDate string `json:"orderDate"`
OrderDate time.Time `json:"orderDate"`
}
func (dto *DividendsIncentivesEstimateDto) LoadDto(orderGood *domain.OrderGood, orderNumber string, originalOrderNum string, customerName string, regionName string, orderDate time.Time) error {
... ... @@ -32,6 +32,6 @@ func (dto *DividendsIncentivesEstimateDto) LoadDto(orderGood *domain.OrderGood,
dto.CustomerName = customerName
dto.RegionName = regionName
dto.OrderAmount = orderGood.OrderGoodAmount
dto.OrderDate = orderDate.String()
dto.OrderDate = orderDate
return nil
}
... ...
... ... @@ -35,10 +35,28 @@ func (dao *CooperationContractDao) GenerateContractNumber() (string, error) {
}
}
// CheckUndertakerTypesUncheckedAvailable TODO 校验合约承接对象是否可以删除
func (dao *CooperationContractDao) CheckUndertakerTypesUncheckedAvailable(queryOptions map[string]interface{}) ([]int32, error) {
return []int32{}, nil
// CheckUndertakerTypesUncheckedAvailable 校验合约承接对象是否可以删除
func (dao *CooperationContractDao) CheckUndertakerTypesUncheckedAvailable(queryOptions map[string]interface{}) (bool, error) {
tx := dao.transactionContext.PgTx
var cooperationContractUndertakerModels []*models.CooperationContractUndertaker
query := tx.Model(&cooperationContractUndertakerModels)
if cooperationContractNumber, ok := queryOptions["cooperationContractNumber"]; ok && cooperationContractNumber != "" {
query = query.Where("cooperation_contract_number = ?", cooperationContractNumber)
}
if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
query = query.Where(`cooperation_contract.company @> '{"companyId":"?"}'`, companyId)
}
if orgId, ok := queryOptions["orgId"]; ok && orgId.(int64) != 0 {
query = query.Where(`cooperation_contract.org @> '{"orgId":"?"}'`, orgId)
}
if user, ok := queryOptions["user"]; ok && user.(bool) != false {
query = query.Where("user_type = ?", 1)
}
if partner, ok := queryOptions["partner"]; ok && partner.(bool) != false {
query = query.Where("user_type = ?", 2)
}
ok, err := query.Exists()
return !ok, err
}
// CheckContractNumberAvailable 检验合约编号唯一性
... ...
... ... @@ -150,6 +150,9 @@ func (repository *CooperationModeRepository) FindOne(queryOptions map[string]int
cooperationModeModel := new(models.CooperationMode)
query := sqlbuilder.BuildQuery(tx.Model(cooperationModeModel), queryOptions)
query.SetWhereByQueryOption("cooperation_mode.cooperation_mode_id = ?", "cooperationModeId")
if cooperationModeNumber, ok := queryOptions["cooperationModeNumber"]; ok && cooperationModeNumber != "" {
query.Where("cooperation_mode_number = ?", cooperationModeNumber)
}
if err := query.First(); err != nil {
if err.Error() == "pg: no rows in result set" {
return nil, fmt.Errorf("没有此资源")
... ...
... ... @@ -272,7 +272,7 @@ func (repository *DividendsReturnedOrderRepository) Remove(dividendsReturnedOrde
} else {
// 删除分红退货单产品
var orderGoodModels []*models.OrderGood
if _, err := tx.Model(&orderGoodModels).Where("dividends_returned_order_number = ?", dividendsReturnedOrder.DividendsOrderNumber).Delete(); err != nil {
if _, err := tx.Model(&orderGoodModels).Where("dividends_returned_order_number = ?", dividendsReturnedOrder.DividendsReturnedOrderNumber).Delete(); err != nil {
return nil, err
}
}
... ...