message_service_subscriber.go 6.1 KB
package subscriber

import (
	coreDomain "github.com/linmadan/egglib-go/core/domain"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/event"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/log"
)

type MessageServiceSubscriber struct {
	//TransactionContext *pgTransaction.TransactionContext
}

func (subscriber *MessageServiceSubscriber) HandleEvent(domainEvent coreDomain.DomainEvent) error {
	// 消息推送服务
	messageServiceGateway, err := factory.CreateMessageServiceGateway(nil)
	if err != nil {
		log.Logger.Error("消息推送服务初始化", map[string]interface{}{
			"err": err.Error(),
		})
		return nil
	}
	switch domainEvent.EventType() {
	case event.COOPERATION_APPLICATION_AGREED: // 共创申请审核通过
		cooperationApplicationAgreedEvent := domainEvent.(*event.CooperationApplicationAgreed)
		data, err1 := messageServiceGateway.AgreeCooperationApplication(
			cooperationApplicationAgreedEvent.CreationProjectId,
			cooperationApplicationAgreedEvent.CreationProjectName,
			cooperationApplicationAgreedEvent.CreationProjectNumber,
			cooperationApplicationAgreedEvent.UserId,
			cooperationApplicationAgreedEvent.UserBaseId,
			cooperationApplicationAgreedEvent.OrgId,
			cooperationApplicationAgreedEvent.CompanyId,
		)
		if err1 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err1.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	case event.CREATION_CONTRACT_INFORM_JOINT: // 共创确认
		creationContractInformJointEvent := domainEvent.(*event.CreationContractInformJoint)
		data, err2 := messageServiceGateway.InformJoinCreationContract(
			creationContractInformJointEvent.CreationContractId,
			creationContractInformJointEvent.CreationContractName,
			creationContractInformJointEvent.CreationContractNumber,
			creationContractInformJointEvent.CreationProjectId,
			creationContractInformJointEvent.CreationProjectName,
			creationContractInformJointEvent.UserId,
			creationContractInformJointEvent.UserBaseId,
			creationContractInformJointEvent.OrgId,
			creationContractInformJointEvent.CompanyId,
		)
		if err2 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err2.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	case event.COOPERATION_APPLICATION_REJECTED: // 共创申请审核拒绝
		cooperationApplicationRejectedEvent := domainEvent.(*event.CooperationApplicationRejected)
		data, err3 := messageServiceGateway.RejectCooperationApplication(
			cooperationApplicationRejectedEvent.CreationProjectId,
			cooperationApplicationRejectedEvent.CreationProjectName,
			cooperationApplicationRejectedEvent.CreationProjectNumber,
			cooperationApplicationRejectedEvent.UserId,
			cooperationApplicationRejectedEvent.UserBaseId,
			cooperationApplicationRejectedEvent.OrgId,
			cooperationApplicationRejectedEvent.CompanyId,
		)
		if err3 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err3.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	case event.CREDIT_ACCOUNT_PAID: // 账期结算支付
		creditAccountPaidEvent := domainEvent.(*event.CreditAccountPaid)
		data, err4 := messageServiceGateway.PayCreditAccount(
			creditAccountPaidEvent.CreditAccountOrderNum,
			creditAccountPaidEvent.SettlementAmount,
			creditAccountPaidEvent.CreditAccountId,
			creditAccountPaidEvent.DividendsEstimateId,
			creditAccountPaidEvent.DividendsEstimateOrderNumber,
			creditAccountPaidEvent.UserId,
			creditAccountPaidEvent.UserBaseId,
			creditAccountPaidEvent.OrgId,
			creditAccountPaidEvent.CompanyId,
		)
		if err4 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err4.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	case event.DIVIDENDS_ESTIMATED: // 账期结算
		dividendsEstimatedEvent := domainEvent.(*event.DividendsEstimated)
		data, err5 := messageServiceGateway.DividendsEstimate(
			dividendsEstimatedEvent.CreditAccountOrderNum,
			dividendsEstimatedEvent.SettlementAmount,
			dividendsEstimatedEvent.CreditAccountId,
			dividendsEstimatedEvent.DividendsEstimateId,
			dividendsEstimatedEvent.DividendsEstimateOrderNumber,
			dividendsEstimatedEvent.UserId,
			dividendsEstimatedEvent.UserBaseId,
			dividendsEstimatedEvent.OrgId,
			dividendsEstimatedEvent.CompanyId,
		)
		if err5 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err5.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	case event.DIVIDENDS_INFORM_EXPECTED: // 分红预算
		dividendsInformExpectedEvent := domainEvent.(*event.DividendsInformExpected)
		data, err6 := messageServiceGateway.InformExpectedDividends(
			dividendsInformExpectedEvent.CreationContractId,
			dividendsInformExpectedEvent.CreationContractName,
			dividendsInformExpectedEvent.CreationContractNumber,
			dividendsInformExpectedEvent.CreationProjectId,
			dividendsInformExpectedEvent.CreationProjectName,
			dividendsInformExpectedEvent.ProductName,
			dividendsInformExpectedEvent.UserId,
			dividendsInformExpectedEvent.UserBaseId,
			dividendsInformExpectedEvent.OrgId,
			dividendsInformExpectedEvent.CompanyId,
			dividendsInformExpectedEvent.DividendsEstimateId,
			dividendsInformExpectedEvent.DividendsAmount,
		)
		if err6 != nil {
			log.Logger.Error("推送消息错误", map[string]interface{}{
				"err": err6.Error(),
			})
			return nil
		} else {
			log.Logger.Info("推送数据返回", data)
		}
		break
	}
	return nil
}

func (subscriber *MessageServiceSubscriber) SubscribedToEventTypes() []string {
	return []string{
		event.COOPERATION_APPLICATION_AGREED,   // 同意共创申请
		event.CREATION_CONTRACT_INFORM_JOINT,   // 确认共创
		event.COOPERATION_APPLICATION_REJECTED, // 拒绝共创申请
		event.CREDIT_ACCOUNT_PAID,              // 账期支付
		event.DIVIDENDS_ESTIMATED,              // 账期结算
		event.DIVIDENDS_INFORM_EXPECTED,        // 分红预算
	}
}