package service import ( "fmt" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/businessBonus/command" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/businessBonus/query" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/application/factory" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/dao" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/lib" ) type BusinessBonusService struct { } func NewBusinessBonusService(option map[string]interface{}) *BusinessBonusService { newService := new(BusinessBonusService) return newService } // ListBusinessBonus 列表 func (srv BusinessBonusService) ListBusinessBonus(queryOption query.ListBusinessBonusQuery) (int, interface{}, error) { var ( transactionContext, _ = factory.CreateTransactionContext(nil) err error ) if err = transactionContext.StartTransaction(); err != nil { return 0, nil, err } defer func() { transactionContext.RollbackTransaction() }() var ( bonusDaoao *dao.BusinessBonusDao ) if bonusDaoao, err = factory.CreateBusinessBonusDao(map[string]interface{}{ "transactionContext": transactionContext, }); err != nil { return 0, nil, lib.ThrowError(lib.TRANSACTION_ERROR, err.Error()) } result, err := bonusDaoao.SearchBusinessBonus(queryOption.PartnerId, queryOption.PartnerNameMatch, queryOption.CompanyId, queryOption.Limit, queryOption.Offset) if err != nil { return 0, nil, err } cnt, err := bonusDaoao.CountBusinessBonus(queryOption.PartnerId, queryOption.PartnerNameMatch, queryOption.CompanyId, queryOption.Limit, queryOption.Offset) if err != nil { return 0, nil, err } err = transactionContext.CommitTransaction() returnData := []map[string]interface{}{} for _, v := range result { m := map[string]interface{}{ "id": v.Id, "uncollectedDividends": v.BonusNot, "receiveDividends": v.BonusHas, "dividendsReceivable": v.Bonus, "stateOfPayment": v.BonusStatus, "stateOfPaymentName": domain.DescribeBusinessBonusStatus(v.BonusStatus), "partner": v.PartnerName, "updateTime": "", } if !v.UpdateAt.IsZero() { m["updateTime"] = v.UpdateAt.Local().Format("2006-01-02 15:04:05") } returnData = append(returnData, m) } return cnt, returnData, nil } func (srv BusinessBonusService) UpdateBusinessBonus(cmd command.UpdateBusinessBonusCommand) error { var ( transactionContext, _ = factory.CreateTransactionContext(nil) err error ) if err = transactionContext.StartTransaction(); err != nil { return err } defer func() { transactionContext.RollbackTransaction() }() var ( bonusRespository domain.BusinessBonusRepository bonusData *domain.BusinessBonus ) if bonusRespository, err = factory.CreateBusinessBonusRepository(map[string]interface{}{ "transactionContext": transactionContext, }); err != nil { return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) } bonusData, err = bonusRespository.FindOne(domain.BusinessBonusFindOneQuery{ Id: cmd.Id, CompanyId: cmd.CompanyId, }) if err != nil { e := fmt.Sprintf("获取业务分红(id=%d;company_id=%d)数据失败:%s", cmd.Id, cmd.CompanyId, err) return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) } bonusData.Bonus = cmd.Bonus switch cmd.BonusStatus { case domain.BUSINESS_BONUS_HAS_PAY: bonusData.BusinessBonusPayStatus.PayPartnerBonus(bonusData) case domain.BUSINESS_BONUS_WAIT_PAY: bonusData.BusinessBonusPayStatus.WartPayPartnerBonus(bonusData) case domain.BUSINESS_BONUS_NULL_PAY: bonusData.BusinessBonusPayStatus.NullPayPartnerBonus(bonusData) default: return lib.ThrowError(lib.BUSINESS_ERROR, "支付状态错误") } err = bonusRespository.Edit(bonusData) if err != nil { e := fmt.Sprintf("更新业务分红(id=%d)数据失败:%s", bonusData.Id, err) return lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) } err = transactionContext.CommitTransaction() return nil } //GetBusinessBonus 获取详情 func (srv BusinessBonusService) GetBusinessBonus(queryOption query.GetBusinessBonusQuery) (map[string]interface{}, error) { var ( transactionContext, _ = factory.CreateTransactionContext(nil) err error ) if err = transactionContext.StartTransaction(); err != nil { return nil, err } defer func() { transactionContext.RollbackTransaction() }() var ( bonusRespository domain.BusinessBonusRepository partnerInfoRepository domain.PartnerInfoRepository bonusData *domain.BusinessBonus partnerData *domain.PartnerInfo ) if bonusRespository, err = factory.CreateBusinessBonusRepository(map[string]interface{}{ "transactionContext": transactionContext, }); err != nil { return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) } bonusData, err = bonusRespository.FindOne(domain.BusinessBonusFindOneQuery{ Id: queryOption.Id, CompanyId: queryOption.CompanyId, }) if err != nil { e := fmt.Sprintf("获取业务分红(id=%d;company_id=%d)数据失败:%s", queryOption.Id, queryOption.CompanyId, err) return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) } if partnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{ "transactionContext": transactionContext, }); err != nil { return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, err.Error()) } partnerData, err = partnerInfoRepository.FindOne(domain.PartnerFindOneQuery{UserId: bonusData.PartnerInfoId}) if err != nil { e := fmt.Sprintf("获取合伙人(id=%d)数据失败:%s", bonusData.PartnerInfoId, err) return nil, lib.ThrowError(lib.INTERNAL_SERVER_ERROR, e) } err = transactionContext.CommitTransaction() returnData := map[string]interface{}{ "partner": partnerData.Partner.PartnerName, "dividendsReceivable": bonusData.Bonus, "receiveDividends": bonusData.BonusHas, "uncollectedDividends": bonusData.BonusNot, "updateTime": "", "stateOfPayment": bonusData.BonusStatus, "stateOfPaymentName": domain.DescribeBusinessBonusStatus(bonusData.BonusStatus), "id": bonusData.Id, } if !bonusData.UpdateAt.IsZero() { returnData["updateTime"] = bonusData.UpdateAt.Local().Format("2006-01-02 15:04:05") } return returnData, nil }