package crm_aps import ( "aps_crm/constvar" "aps_crm/model" "aps_crm/model/grpc_init" "context" "github.com/shopspring/decimal" ) type Server struct { UnimplementedCrmAndApsGrpcServiceServer } func (s *Server) GetCrmSalesDetailsList(ctx context.Context, req *GetCrmSalesDetailsListRequest) (*GetCrmSalesDetailsListResponse, error) { search := model.NewSalesDetailsSearch().Orm.Model(model.SalesDetails{}) if req.StartTime != "" && req.EndTime != "" { if req.TimeType == "签约日期" { search = search.Where("sign_time between ? and ?", req.StartTime, req.EndTime) } else if req.TimeType == "交付日期" { search = search.Where("delivery_date between ? and ?", req.StartTime, req.EndTime) } } if req.ClientName != "" { search = search.Joins("Client", "LEFT").Where("Client.name like ?", "%"+req.ClientName+"%") } search = search.Preload("Member").Preload("Client").Where("status = ?", constvar.WaitConfirmed).Where("project_id = ?", "") var records = make([]*model.SalesDetails, 0) var total int64 err := search.Count(&total).Error if err != nil { return nil, err } if req.Page*req.PageSize > 0 { search = search.Limit(int(req.PageSize)).Offset(int((req.Page - 1) * req.PageSize)) } err = search.Order("id desc").Find(&records).Error if err != nil { return nil, err } sds := make([]*CrmSalesDetails, 0) for _, record := range records { var sd CrmSalesDetails sd.Number = record.Number sd.ClientName = record.Client.Name sd.MemberName = record.Member.Username sd.SignTime = record.SignTime sd.DeliveryDate = record.DeliveryDate sds = append(sds, &sd) } resp := new(GetCrmSalesDetailsListResponse) resp.SalesDetails = sds resp.Total = total return resp, nil } func (s *Server) SendSalesDetailsAndProjectToCrm(ctx context.Context, req *SendSalesDetailsAndProjectToCrmRequest) (*SendSalesDetailsAndProjectToCrmResponse, error) { details, err := model.NewSalesDetailsSearch().SetNumbers(req.SalesDetailsNumbers).SetPreload(true).FindNotTotal() if err != nil { return nil, err } for _, detail := range details { m := make(map[string]interface{}) m["status"] = constvar.WaitOutbound m["project_id"] = req.ProjectId err := model.NewSalesDetailsSearch().SetNumber(detail.Number).UpdateByMap(m) if err != nil { return nil, err } products := make([]*SalesDetailsProduct, 0) var total decimal.Decimal for _, product := range detail.Products { var sp SalesDetailsProduct sp.ProductId = product.Number sp.Amount = product.Amount.IntPart() products = append(products, &sp) total = total.Add(product.Amount) } client := NewCrmAndApsGrpcServiceClient(grpc_init.CrmApsGrpcServiceConn) _, err = client.SendSalesDetailsToApsProject(ctx, &SendSalesDetailsToApsProjectRequest{ Number: detail.Number, ClientName: detail.Client.Name, MemberName: detail.Member.Username, SignTime: detail.SignTime, DeliveryDate: detail.DeliveryDate, Source: detail.Source, ProductTotal: total.IntPart(), ProjectId: req.ProjectId, Products: products, }) if err != nil { return nil, err } } return new(SendSalesDetailsAndProjectToCrmResponse), nil }