// Copyright 2019 getensh.com. All rights reserved. // Use of this source code is governed by getensh.com. package suggestion import ( "context" "encoding/json" "fmt" "gorm.io/gorm" "property-garden/errors" dbmodel "property-garden/model" pb_v1 "property-garden/pb/v1" "property-garden/utils" "strings" "git.getensh.com/common/gopkgs/database" "git.getensh.com/common/gopkgs/logger" "go.uber.org/zap" "google.golang.org/grpc/status" ) func checkSuggestionOrderInfoParam(req *pb_v1.SuggestionOrderInfoRequest) error { switch { case req.GardenId == 0: return status.Error(10003, "小区不能为空") case req.Id == 0: return status.Error(10003, "id 不能为空") } return nil } func SuggestionOrderInfo(ctx context.Context, req *pb_v1.SuggestionOrderInfoRequest) (reply *pb_v1.SuggestionOrderInfoReply, err error) { reply = &pb_v1.SuggestionOrderInfoReply{} // 捕获各个task中的异常并返回给调用者 defer func() { if r := recover(); r != nil { err = fmt.Errorf("%+v", r) e := &status.Status{} if er := json.Unmarshal([]byte(err.Error()), e); er != nil { logger.Error("err", zap.String("system_err", err.Error()), zap.Stack("stacktrace")) } } }() // 参数检查 err = checkSuggestionOrderInfoParam(req) if err != nil { return nil, err } dbname := utils.GetGardenDbName(req.GardenId) p := dbmodel.NewSuggestionOrder(dbname) where := map[string]interface{}{ "id": req.Id, } err = p.Find(database.DB(), where) if err != nil && err != gorm.ErrRecordNotFound { return nil, errors.DataBaseError } if p.ID == 0 { return nil, errors.ErrRecordNotFound } // 处理流水线 pipeline := []SuggestionOrderPipelineData{} json.Unmarshal([]byte(p.Pipeline), &pipeline) uids := []int64{} for _, v := range pipeline{ if v.CurrentUid > 0 { uids = append(uids, v.CurrentUid) } if !v.LastByCompany && v.LastUid > 0 { uids = append(uids, v.LastUid) } } userInfos, err := getUserInfos(uids, req.GardenId) if err != nil { return nil, err } rspPipeline := make([]*pb_v1.SuggestionOrderPipelineData, len(pipeline)) for i, v := range pipeline { item := &pb_v1.SuggestionOrderPipelineData{ // 处理意见 Feedback:v.Feedback, // 处理时间 HandleTime:v.HandleTime, Status:SuggestionPipelineStatusM[v.Status], } switch v.Status { case SuggestionPipelineStatusCreate: item.User = p.ApplyPeople item.Feedback = p.ApplyContent item.Phone = p.ApplyPeoplePhone case SuggestionPipelineStatusSend: item.User = userInfos[v.CurrentUid].Name item.Phone = userInfos[v.CurrentUid].Phone case SuggestionPipelineStatusFinish: if !v.LastByCompany { item.User = userInfos[v.LastUid].Name item.Phone = userInfos[v.LastUid].Phone } case SuggestionPipelineStatusBack: if !v.LastByCompany { item.User = userInfos[v.LastUid].Name item.Phone = userInfos[v.LastUid].Phone } case SuggestionPipelineStatusResend: item.User = userInfos[v.CurrentUid].Name item.Phone = userInfos[v.CurrentUid].Phone } rspPipeline[i] = item } // 处理基本信息 item := &pb_v1.SuggestionOrderItem{ // 分类id SuggestionType: p.SuggestionType, // 报修人 ApplyPeople: p.ApplyPeople, // 报修人电话 ApplyPeoplePhone: p.ApplyPeoplePhone, // 处理人 CurrentUser: userInfos[p.CurrentUid].Name, // 报修内容 ApplyContent: p.ApplyContent, // 报修图片 ApplyPic: strings.Split(p.ApplyPic, ";"), // 回访内容 ReturnVisitContent: p.ReturnVisitContent, // 回访满意度 ReturnVisitLevel: p.ReturnVisitLevel, // 投诉时间 CreatedAt: p.CreatedAt.Format("2006-01-02 15:04:05"), Id: p.ID, Status:p.Status, } if !p.LastUidIsCompany { item.LastUser = userInfos[p.LastUid].Name } reply.List = rspPipeline reply.BaseInfo = item return reply, nil }