package service import ( "encoding/json" "fmt" "github.com/wmms/wmms/internal/model" "github.com/wmms/wmms/internal/repository" ) type MaterialLogService struct { logRepo *repository.MaterialLogRepo } func NewMaterialLogService() *MaterialLogService { return &MaterialLogService{ logRepo: repository.NewMaterialLogRepo(), } } func (s *MaterialLogService) LogCreate(material *model.Material, operator string) error { newValue, _ := json.Marshal(material) log := &model.MaterialLog{ OperationType: "CREATE", MaterialID: material.ID, NewValue: string(newValue), Operator: operator, Description: fmt.Sprintf("新增物料:%s", material.Name), } return s.logRepo.Create(log) } func (s *MaterialLogService) LogUpdate(material *model.Material, oldMaterial *model.Material, operator string) error { oldValue, _ := json.Marshal(oldMaterial) newValue, _ := json.Marshal(material) log := &model.MaterialLog{ OperationType: "UPDATE", MaterialID: material.ID, OldValue: string(oldValue), NewValue: string(newValue), Operator: operator, Description: fmt.Sprintf("修改物料:%s", material.Name), } return s.logRepo.Create(log) } func (s *MaterialLogService) LogDelete(material *model.Material, operator string) error { oldValue, _ := json.Marshal(material) log := &model.MaterialLog{ OperationType: "DELETE", MaterialID: material.ID, OldValue: string(oldValue), Operator: operator, Description: fmt.Sprintf("删除物料:%s", material.Name), } return s.logRepo.Create(log) } func (s *MaterialLogService) List(operationType, materialId, startDate, endDate string, limit, offset int) ([]model.MaterialLog, int64, error) { return s.logRepo.List(operationType, materialId, startDate, endDate, limit, offset) } func (s *MaterialLogService) GetByMaterialID(materialID int64) ([]model.MaterialLog, error) { return s.logRepo.GetByMaterialID(materialID) }