审查视图

pkg/port/consumer/handle/business_admin.go 3.5 KB
tangxvhui authored
1 2 3 4
package handle

import (
	"encoding/json"
庄敏学 authored
5
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/position/service"
tangxvhui authored
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
	"strconv"

	"github.com/Shopify/sarama"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/company"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/department"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log"
)

func SyncDataBusinessAdmin(msgData *sarama.ConsumerMessage) error {
	var receivedMsg domain.ReceivedMessage
	err := json.Unmarshal(msgData.Value, &receivedMsg)
	if err != nil {
tangxvhui authored
21
		log.Logger.Error("解析ReceivedMessage 失败" + err.Error())
tangxvhui authored
22 23
		return err
	}
庄敏学 authored
24
	log.Logger.Debug("解析message:", map[string]interface{}{"data": receivedMsg})
tangxvhui authored
25 26 27 28
	transactionContext, err := factory.CreateTransactionContext(nil)
	if err != nil {
		return err
	}
tangxvhui authored
29 30
	_ = transactionContext.StartTransaction()
tangxvhui authored
31
	defer func() {
tangxvhui authored
32 33 34

		_ = transactionContext.RollbackTransaction()
tangxvhui authored
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
	}()

	msgRepo := factory.CreateReceivedMessageRepository(map[string]interface{}{
		"transactionContext": transactionContext,
	})
	oldMsg, err := msgRepo.FindMessage(receivedMsg.MessageId)
	if err != nil {
		log.Logger.Error(" 查询旧消息发生错误  " + err.Error())
		log.Logger.Info("异常消息message_id=" + strconv.FormatInt(receivedMsg.MessageId, 10))
		return err
	}
	if oldMsg.MessageId == receivedMsg.MessageId {
		log.Logger.Info("消息重复,message_id=" + strconv.FormatInt(receivedMsg.MessageId, 10))
		return nil
	}
	var msgBody domain.MessageBody
	err = json.Unmarshal([]byte(receivedMsg.MessageBody), &msgBody)
	if err != nil {
		log.Logger.Error("解析messageBody发生错误" + err.Error())
		return err
	}

	switch msgBody.Module {
	case "company":
		companySrv := company.SyncDataCompanyService{}
		err = companySrv.FromBusinessAdmin(&msgBody)
		if err != nil {
			log.Logger.Error("处理company消息失败"+err.Error(), map[string]interface{}{
庄敏学 authored
63 64 65
				"module": msgBody.Module,
				"action": msgBody.Action,
				"data":   string(msgBody.Data),
tangxvhui authored
66 67 68 69 70 71 72 73
			})
			return err
		}
	case "department":
		departmentSrv := department.SyncDataDepartmentService{}
		err = departmentSrv.FromBusinessAdmin(&msgBody)
		if err != nil {
			log.Logger.Error("处理department消息失败"+err.Error(), map[string]interface{}{
庄敏学 authored
74 75 76
				"module": msgBody.Module,
				"action": msgBody.Action,
				"data":   string(msgBody.Data),
tangxvhui authored
77 78 79 80 81 82 83 84
			})
			return err
		}
	case "employee":
		employeeSrv := user.SyncDataUserService{}
		err = employeeSrv.FromBusinessAdmin(&msgBody)
		if err != nil {
			log.Logger.Error("处理employee消息失败"+err.Error(), map[string]interface{}{
庄敏学 authored
85 86 87
				"module": msgBody.Module,
				"action": msgBody.Action,
				"data":   string(msgBody.Data),
tangxvhui authored
88 89 90
			})
			return err
		}
庄敏学 authored
91
	case "position":
庄敏学 authored
92 93 94 95 96 97 98 99 100 101
		positionSrv := service.SyncDataPositionService{}
		err = positionSrv.FromBusinessAdmin(&msgBody)
		if err != nil {
			log.Logger.Error("处理position消息失败"+err.Error(), map[string]interface{}{
				"module": msgBody.Module,
				"action": msgBody.Action,
				"data":   string(msgBody.Data),
			})
			return err
		}
tangxvhui authored
102 103 104 105 106 107
	}
	err = msgRepo.SaveMessage(&receivedMsg)
	if err != nil {
		log.Logger.Error(" 保存新消息发生错误  " + err.Error())
		log.Logger.Info("异常消息message_id=" + strconv.FormatInt(receivedMsg.MessageId, 10))
	}
tangxvhui authored
108
	_ = transactionContext.CommitTransaction()
tangxvhui authored
109 110
	return nil
}