作者 唐旭辉

更新

  1 +package factory
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain/service"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/domainService"
  6 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction"
  7 +)
  8 +
  9 +func CreateBusinessBonusService(options map[string]interface{}) (service.BusinessBonusService, error) {
  10 + var transactionContext *transaction.TransactionContext
  11 + if value, ok := options["transactionContext"]; ok {
  12 + transactionContext = value.(*transaction.TransactionContext)
  13 + }
  14 + return domainService.NewBusinessBonusService(transactionContext), nil
  15 +}
@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/partnerInfo/command" 8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/partnerInfo/command"
9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/partnerInfo/query" 9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/partnerInfo/query"
10 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" 10 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  11 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain/service"
11 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/dao" 12 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/dao"
12 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/lib" 13 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/lib"
13 ) 14 )
@@ -91,6 +92,17 @@ func (PartnerInfoService *PartnerInfoService) CreatePartnerInfo(cmd *command.Cre @@ -91,6 +92,17 @@ func (PartnerInfoService *PartnerInfoService) CreatePartnerInfo(cmd *command.Cre
91 if err = partnerInfoRepository.Save(&newPartnerInfo); err != nil { 92 if err = partnerInfoRepository.Save(&newPartnerInfo); err != nil {
92 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 93 return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
93 } 94 }
  95 + var businessBonusSrv service.BusinessBonusService
  96 + if businessBonusSrv, err = factory.CreateBusinessBonusService(map[string]interface{}{
  97 + "transactionContext": transactionContext,
  98 + }); err != nil {
  99 + return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  100 + }
  101 + err = businessBonusSrv.EnableOrDisable(newPartnerInfo.Partner.Id)
  102 + if err != nil {
  103 + e := fmt.Sprintf("更新业务分红(partner_id=%d)数据失败:%s", newPartnerInfo.Partner.Id, err)
  104 + return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
  105 + }
94 err = transactionContext.CommitTransaction() 106 err = transactionContext.CommitTransaction()
95 return newPartnerInfo, nil 107 return newPartnerInfo, nil
96 } 108 }
@@ -202,6 +214,17 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd @@ -202,6 +214,17 @@ func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(cmd *command.Upd
202 if err = partnerInfoRepository.Save(partnerInfo); err != nil { 214 if err = partnerInfoRepository.Save(partnerInfo); err != nil {
203 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) 215 return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
204 } 216 }
  217 + var businessBonusSrv service.BusinessBonusService
  218 + if businessBonusSrv, err = factory.CreateBusinessBonusService(map[string]interface{}{
  219 + "transactionContext": transactionContext,
  220 + }); err != nil {
  221 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error())
  222 + }
  223 + err = businessBonusSrv.EnableOrDisable(partnerInfo.Partner.Id)
  224 + if err != nil {
  225 + e := fmt.Sprintf("更新业务分红(partner_id=%d)数据失败:%s", partnerInfo.Partner.Id, err)
  226 + return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e)
  227 + }
205 transactionContext.CommitTransaction() 228 transactionContext.CommitTransaction()
206 return 229 return
207 } 230 }
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "time" 6 "time"
7 7
8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" 8 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  9 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models"
9 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction" 10 "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction"
10 ) 11 )
11 12
@@ -93,3 +94,11 @@ func (dao BusinessBonusDao) CountBusinessBonus(partnerId int64, partnerNameMatch @@ -93,3 +94,11 @@ func (dao BusinessBonusDao) CountBusinessBonus(partnerId int64, partnerNameMatch
93 _, err = tx.Query(&result, sql, allParam...) 94 _, err = tx.Query(&result, sql, allParam...)
94 return result, err 95 return result, err
95 } 96 }
  97 +
  98 +func (dao BusinessBonusDao) ExistBusinessBonus(userId int64) (bool, error) {
  99 + tx := dao.transactionContext.PgTx
  100 + ok, err := tx.Model(&models.BusinessBonus{}).
  101 + Where("user_id=?", userId).
  102 + Exists()
  103 + return ok, err
  104 +}
  1 +package domainService
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain"
  5 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/dao"
  6 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction"
  7 + "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/repository"
  8 +)
  9 +
  10 +type BusinessBonusService struct {
  11 + transactionContext *transaction.TransactionContext
  12 +}
  13 +
  14 +func NewBusinessBonusService(tcx *transaction.TransactionContext) *BusinessBonusService {
  15 + return &BusinessBonusService{
  16 + transactionContext: tcx,
  17 + }
  18 +}
  19 +func (srv BusinessBonusService) EnableOrDisable(parntnerId int64) error {
  20 + var (
  21 + bonusDao, _ = dao.NewBusinessBonusDao(srv.transactionContext)
  22 + bonusReponsitory, _ = repository.NewBusinessBonusRepository(srv.transactionContext)
  23 + partnerReponsitory, _ = repository.NewPartnerInfoRepository(srv.transactionContext)
  24 +
  25 + err error
  26 + partnerHasInBonus bool
  27 + partnerData *domain.PartnerInfo
  28 + partnerHasBusinessCategory bool
  29 + )
  30 + partnerHasInBonus, err = bonusDao.ExistBusinessBonus(parntnerId)
  31 + if err != nil {
  32 + return err
  33 + }
  34 + partnerData, err = partnerReponsitory.FindOne(domain.PartnerFindOneQuery{UserId: parntnerId})
  35 + if err != nil {
  36 + return err
  37 + }
  38 + for _, v := range partnerData.PartnerCategoryInfos {
  39 + if v.Id == 2 {
  40 + partnerHasBusinessCategory = true
  41 + break
  42 + }
  43 + }
  44 + if partnerHasInBonus && partnerHasBusinessCategory {
  45 + //已存在业务分红数据况 && 是业务合伙人类型
  46 + var bonusData *domain.BusinessBonus
  47 + bonusData, err = bonusReponsitory.FindOne(domain.BusinessBonusFindOneQuery{
  48 + PartnerId: parntnerId,
  49 + })
  50 + if bonusData.IsDisable == domain.BUSINESS_BONUS_ENABLE {
  51 + return nil
  52 + }
  53 + bonusData.IsDisable = domain.BUSINESS_BONUS_ENABLE
  54 + err = bonusReponsitory.Edit(bonusData)
  55 + return err
  56 + }
  57 + if partnerHasInBonus && !partnerHasBusinessCategory {
  58 + //已存在业务分红数据况 && 不是业务合伙人类型
  59 + var bonusData *domain.BusinessBonus
  60 + bonusData, err = bonusReponsitory.FindOne(domain.BusinessBonusFindOneQuery{
  61 + PartnerId: parntnerId,
  62 + })
  63 + if bonusData.IsDisable == domain.BUSINESS_BONUS_DISABLE {
  64 + return nil
  65 + }
  66 + bonusData.IsDisable = domain.BUSINESS_BONUS_DISABLE
  67 + err = bonusReponsitory.Edit(bonusData)
  68 + return err
  69 + }
  70 +
  71 + if !partnerHasInBonus && partnerHasBusinessCategory {
  72 + //不存在业务分红数据况 && 是业务合伙人类型
  73 + newBonus := &domain.BusinessBonus{
  74 + PartnerInfoId: partnerData.Partner.Id,
  75 + IsDisable: domain.BUSINESS_BONUS_ENABLE,
  76 + CompanyId: partnerData.CompanyId,
  77 + Bonus: 0,
  78 + }
  79 + err = bonusReponsitory.Add(newBonus)
  80 + return err
  81 + }
  82 +
  83 + return nil
  84 +}
@@ -11,23 +11,23 @@ import ( @@ -11,23 +11,23 @@ import (
11 type BusinessBonus struct { 11 type BusinessBonus struct {
12 tableName struct{} `pg:"business_bonus"` 12 tableName struct{} `pg:"business_bonus"`
13 // 唯一标识 13 // 唯一标识
14 - Id int64 14 + Id int64 `pg:",pk"`
15 // 公司编号 15 // 公司编号
16 CompanyId int64 16 CompanyId int64
17 // 合伙人信息Id 17 // 合伙人信息Id
18 PartnerInfoId int64 18 PartnerInfoId int64
19 // 应收分红 19 // 应收分红
20 - Bonus float64 20 + Bonus float64 `pg:",use_zero"`
21 // 未收分红 21 // 未收分红
22 BonusNot float64 22 BonusNot float64
23 // 分红支出 23 // 分红支出
24 BonusExpense float64 24 BonusExpense float64
25 //已收分红 25 //已收分红
26 BonusHas float64 26 BonusHas float64
27 - // 是否关闭【0;否】【1:是】  
28 - IsDisable int8 27 + //是否有效【0;无效】【1:有效】
  28 + IsDisable int8 `pg:",use_zero"`
29 // 分红状态 1:待支付分红 2:已支付分红 29 // 分红状态 1:待支付分红 2:已支付分红
30 - BonusStatus int8 30 + BonusStatus int8 `pg:",use_zero"`
31 // 创建时间 31 // 创建时间
32 CreateAt time.Time 32 CreateAt time.Time
33 // 更新时间 33 // 更新时间
@@ -47,6 +47,5 @@ var _ pg.BeforeInsertHook = (*BusinessBonus)(nil) @@ -47,6 +47,5 @@ var _ pg.BeforeInsertHook = (*BusinessBonus)(nil)
47 47
48 func (bonus *BusinessBonus) BeforeInsert(ctx context.Context) (context.Context, error) { 48 func (bonus *BusinessBonus) BeforeInsert(ctx context.Context) (context.Context, error) {
49 bonus.CreateAt = time.Now() 49 bonus.CreateAt = time.Now()
50 - bonus.UpdateAt = time.Now()  
51 return ctx, nil 50 return ctx, nil
52 } 51 }
@@ -56,19 +56,7 @@ func (repository *PartnerInfoRepository) Save(dm *domain.PartnerInfo) error { @@ -56,19 +56,7 @@ func (repository *PartnerInfoRepository) Save(dm *domain.PartnerInfo) error {
56 err error 56 err error
57 tx = repository.transactionContext.PgTx 57 tx = repository.transactionContext.PgTx
58 ) 58 )
59 - m := &models.PartnerInfo{  
60 - Id: dm.Partner.Id,  
61 - PartnerName: dm.Partner.PartnerName,  
62 - Account: dm.Partner.Account,  
63 - Password: dm.Password,  
64 - Status: dm.Status,  
65 - PartnerCategory: dm.PartnerCategory,  
66 - Salesman: dm.Salesman,  
67 - RegionInfo: dm.RegionInfo,  
68 - CooperateTime: dm.CooperateTime,  
69 - CompanyId: dm.CompanyId,  
70 - // PartnerCategoryInfos: dm.PartnerCategoryInfos,  
71 - } 59 +
72 categorys := []struct{ Id int64 }{} 60 categorys := []struct{ Id int64 }{}
73 for _, v := range dm.PartnerCategoryInfos { 61 for _, v := range dm.PartnerCategoryInfos {
74 temp := struct{ Id int64 }{ 62 temp := struct{ Id int64 }{
@@ -76,7 +64,19 @@ func (repository *PartnerInfoRepository) Save(dm *domain.PartnerInfo) error { @@ -76,7 +64,19 @@ func (repository *PartnerInfoRepository) Save(dm *domain.PartnerInfo) error {
76 } 64 }
77 categorys = append(categorys, temp) 65 categorys = append(categorys, temp)
78 } 66 }
79 - m.PartnerCategoryInfos = categorys 67 + m := &models.PartnerInfo{
  68 + Id: dm.Partner.Id,
  69 + PartnerName: dm.Partner.PartnerName,
  70 + Account: dm.Partner.Account,
  71 + Password: dm.Password,
  72 + Status: dm.Status,
  73 + PartnerCategory: dm.PartnerCategory,
  74 + Salesman: dm.Salesman,
  75 + RegionInfo: dm.RegionInfo,
  76 + CooperateTime: dm.CooperateTime,
  77 + CompanyId: dm.CompanyId,
  78 + PartnerCategoryInfos: categorys,
  79 + }
80 if m.Id == 0 { 80 if m.Id == 0 {
81 err = tx.Insert(m) 81 err = tx.Insert(m)
82 dm.Partner.Id = m.Id 82 dm.Partner.Id = m.Id