作者 陈志颖

feat:金额激励领域服务开发

@@ -10,10 +10,10 @@ import ( @@ -10,10 +10,10 @@ import (
10 10
11 // ConfirmMoneyIncentivesEstimateCommand 确定金额激励分红预算 11 // ConfirmMoneyIncentivesEstimateCommand 确定金额激励分红预算
12 type ConfirmMoneyIncentivesEstimateCommand struct { 12 type ConfirmMoneyIncentivesEstimateCommand struct {
13 - // 共创合约ID列表  
14 - CooperationContractIds []string `cname:"共创合约ID列表" json:"cooperationContractIds" valid:"Required"` 13 + // 共创合约ID
  14 + CooperationContractId string `cname:"共创合约ID" json:"cooperationContractId" valid:"Required"`
15 // 分红阶段 15 // 分红阶段
16 - DividendsIncentivesStage int64 `cname:"分红阶段" json:"dividendsIncentivesStage,string" valid:"Required"` 16 + DividendsIncentivesStage int32 `cname:"分红阶段" json:"dividendsIncentivesStage,string" valid:"Required"`
17 // 承接人UID 17 // 承接人UID
18 UndertakerUids []string `cname:"承接人UID列表" json:"undertakerUids" valid:"Required"` 18 UndertakerUids []string `cname:"承接人UID列表" json:"undertakerUids" valid:"Required"`
19 // 公司ID,通过集成REST上下文获取 19 // 公司ID,通过集成REST上下文获取
@@ -604,10 +604,51 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives @@ -604,10 +604,51 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives
604 defer func() { 604 defer func() {
605 _ = transactionContext.RollbackTransaction() 605 _ = transactionContext.RollbackTransaction()
606 }() 606 }()
607 - if err := transactionContext.CommitTransaction(); err != nil { 607 +
  608 + // 初始化确认金额激励分红预算领域服务
  609 + var confirmMoneyIncentivesEstimateService service.ConfirmMoneyIncentivesEstimateService
  610 + if value, err := factory.CreateConfirmMoneyIncentivesEstimateService(map[string]interface{}{
  611 + "transactionContext": transactionContext,
  612 + }); err != nil {
  613 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  614 + } else {
  615 + confirmMoneyIncentivesEstimateService = value
  616 + _ = confirmMoneyIncentivesEstimateService.Subscribe(&subscriber.DividendsEstimateSubscriber{
  617 + TransactionContext: transactionContext.(*pgTransaction.TransactionContext),
  618 + })
  619 + }
  620 +
  621 + // 共创合约仓储初始化
  622 + var cooperationContractRepository domain.CooperationContractRepository
  623 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  624 + "transactionContext": transactionContext,
  625 + }); err != nil {
  626 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  627 + } else {
  628 + cooperationContractRepository = value
  629 + }
  630 +
  631 + cooperationContractId, _ := strconv.ParseInt(confirmMoneyIncentivesEstimateCommand.CooperationContractId, 10, 64)
  632 + undertakerUIDs, _ := utils.SliceAtoi(confirmMoneyIncentivesEstimateCommand.UndertakerUids)
  633 +
  634 + // 获取共创合约
  635 + cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{"cooperationContractId": cooperationContractId})
  636 + if err != nil {
  637 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  638 + }
  639 + if cooperationContract == nil {
  640 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cooperationContractId, 10)))
  641 + }
  642 +
  643 + // 共创合约预算
  644 + if dividendsEstimateDetails, err2 := confirmMoneyIncentivesEstimateService.Confirm(cooperationContract, int64(confirmMoneyIncentivesEstimateCommand.DividendsIncentivesStage), undertakerUIDs); err2 != nil {
  645 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error())
  646 + } else {
  647 + if err3 := transactionContext.CommitTransaction(); err3 != nil {
608 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 648 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
609 } 649 }
610 - return nil, nil 650 + return dividendsEstimateDetails, nil
  651 + }
611 } 652 }
612 653
613 // GetDividendsEstimate 返回分红预算单详情 654 // GetDividendsEstimate 返回分红预算单详情
1 package service 1 package service
2 2
3 -import coreDomain "github.com/linmadan/egglib-go/core/domain" 3 +import (
  4 + coreDomain "github.com/linmadan/egglib-go/core/domain"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
  6 +)
4 7
5 type ConfirmMoneyIncentivesEstimateService interface { 8 type ConfirmMoneyIncentivesEstimateService interface {
6 coreDomain.DomainEventPublisher 9 coreDomain.DomainEventPublisher
7 - Confirm() 10 + Confirm(contract *domain.CooperationContract, stage int64, undertakerUIDs []int64) ([]*DividendsEstimateDetail, error)
8 } 11 }
@@ -4,6 +4,9 @@ import ( @@ -4,6 +4,9 @@ import (
4 "fmt" 4 "fmt"
5 coreDomain "github.com/linmadan/egglib-go/core/domain" 5 coreDomain "github.com/linmadan/egglib-go/core/domain"
6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
  9 + "time"
7 ) 10 )
8 11
9 type ConfirmMoneyIncentivesEstimateService struct { 12 type ConfirmMoneyIncentivesEstimateService struct {
@@ -11,6 +14,25 @@ type ConfirmMoneyIncentivesEstimateService struct { @@ -11,6 +14,25 @@ type ConfirmMoneyIncentivesEstimateService struct {
11 transactionContext *pgTransaction.TransactionContext 14 transactionContext *pgTransaction.TransactionContext
12 } 15 }
13 16
  17 +func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *domain.CooperationContract, stage int64, undertakerUIDs []int64) ([]*service.DividendsEstimateDetail, error) {
  18 + var dividendsEstimateDetails []*service.DividendsEstimateDetail
  19 + // 获取金额激励规则
  20 + var moneyIncentivesRuleMatched *domain.MoneyIncentivesRule
  21 + for _, moneyIncentivesRule := range contract.MoneyIncentivesRules {
  22 + if moneyIncentivesRule.MoneyIncentivesStage == stage {
  23 + moneyIncentivesRuleMatched = moneyIncentivesRule
  24 + break
  25 + }
  26 + }
  27 + // 判断分红阶段时间
  28 + currentTime := time.Now()
  29 + if moneyIncentivesRuleMatched.MoneyIncentivesStageStart.After(currentTime) {
  30 + return nil, fmt.Errorf("还未到分红时间")
  31 + }
  32 + // TODO 判断承接人在当前阶段是否已经分红
  33 + return dividendsEstimateDetails, nil
  34 +}
  35 +
14 func NewConfirmMoneyIncentivesEstimateService(transactionContext *pgTransaction.TransactionContext) (*ConfirmMoneyIncentivesEstimateService, error) { 36 func NewConfirmMoneyIncentivesEstimateService(transactionContext *pgTransaction.TransactionContext) (*ConfirmMoneyIncentivesEstimateService, error) {
15 if transactionContext == nil { 37 if transactionContext == nil {
16 return nil, fmt.Errorf("transactionContext参数不能为空") 38 return nil, fmt.Errorf("transactionContext参数不能为空")