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
|
}
|