From 2030ec81f18f4ec9ea1800f13046acafff6d50f7 Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期四, 26 九月 2024 00:48:59 +0800 Subject: [PATCH] 添加grpc方法:客户信息维护 --- proto/crm_aps/server.go | 206 +++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 172 insertions(+), 34 deletions(-) diff --git a/proto/crm_aps/server.go b/proto/crm_aps/server.go index b626b02..abf619c 100644 --- a/proto/crm_aps/server.go +++ b/proto/crm_aps/server.go @@ -4,9 +4,14 @@ "aps_crm/constvar" "aps_crm/model" "aps_crm/model/grpc_init" - "aps_crm/proto/product_inventory" + "aps_crm/pkg/ecode" + "aps_crm/service" "context" + "errors" + "fmt" "github.com/shopspring/decimal" + "gorm.io/gorm" + "strconv" ) type Server struct { @@ -72,38 +77,38 @@ } //鎺ㄩ�佸埌wms - clientName := "" - if detail.ClientId > 0 { - first, err := model.NewClientSearch(nil).SetId(detail.ClientId).First() - if err == nil { - clientName = first.Name - } - } - wmsProducts := make([]*product_inventory.InventoryProduct, 0) - for _, product := range detail.Products { - var p product_inventory.InventoryProduct - p.Id = product.Number - p.Amount = product.Amount.String() - wmsProducts = append(wmsProducts, &p) - } - clientWms := product_inventory.NewProductInventoryServiceClient(grpc_init.ProductInventoryServiceConn) - _, err = clientWms.CreateOperation(ctx, &product_inventory.CreateOperationRequest{ - Number: detail.Number, - Addressee: detail.Addressee, - Address: detail.Address, - Phone: detail.Phone, - DeliverType: int32(detail.DeliverType), - Source: "CRM", - ClientId: int64(detail.ClientId), - ClientName: clientName, - ProductList: wmsProducts, - }) - if err != nil { - //鐘舵�佽繕鍘� - m["status"] = constvar.WaitConfirmed - _ = model.NewSalesDetailsSearch().SetNumber(detail.Number).UpdateByMap(m) - return nil, err - } + //clientName := "" + //if detail.ClientId > 0 { + // first, err := model.NewClientSearch(nil).SetId(detail.ClientId).First() + // if err == nil { + // clientName = first.Name + // } + //} + //wmsProducts := make([]*product_inventory.InventoryProduct, 0) + //for _, product := range detail.Products { + // var p product_inventory.InventoryProduct + // p.Id = product.Number + // p.Amount = product.Amount.String() + // wmsProducts = append(wmsProducts, &p) + //} + //clientWms := product_inventory.NewProductInventoryServiceClient(grpc_init.ProductInventoryServiceConn) + //_, err = clientWms.CreateOperation(ctx, &product_inventory.CreateOperationRequest{ + // Number: detail.Number, + // Addressee: detail.Addressee, + // Address: detail.Address, + // Phone: detail.Phone, + // DeliverType: int32(detail.DeliverType), + // Source: "CRM", + // ClientId: int64(detail.ClientId), + // ClientName: clientName, + // ProductList: wmsProducts, + //}) + //if err != nil { + // //鐘舵�佽繕鍘� + // m["status"] = constvar.WaitConfirmed + // _ = model.NewSalesDetailsSearch().SetNumber(detail.Number).UpdateByMap(m) + // return nil, err + //} //鎺ㄩ�佸埌aps products := make([]*SalesDetailsProduct, 0) @@ -123,10 +128,11 @@ MemberName: detail.Member.Username, SignTime: detail.SignTime, DeliveryDate: detail.DeliveryDate, - Source: detail.Source, + Source: "CRM", ProductTotal: total.IntPart(), ProjectId: req.ProjectId, Products: products, + DeliverType: int64(detail.DeliverType), }) if err != nil { //鐘舵�佽繕鍘� @@ -137,3 +143,135 @@ } return new(SendSalesDetailsAndProjectToCrmResponse), nil } + +func (s *Server) GetClientList(ctx context.Context, req *GetClientListRequest) (*GetClientListResponse, error) { + if req.Page <= 0 || req.PageSize == 0 { + return nil, errors.New("鍙傛暟閿欒") + } + clientService := new(service.ClientService) + params := map[string]interface{}{} + if req.Keyword != "" { + params["name"] = req.Keyword + } + clients, total, errCode := clientService.GetClientList(int(req.Page), int(req.PageSize), params) + if errCode != ecode.OK { + return nil, errors.New(fmt.Sprintf("鍐呴儴閿欒, code:%v", errCode)) + } + resp := new(GetClientListResponse) + resp.Total = total + resp.List = make([]*Client, 0, len(clients)) + for _, client := range clients { + resp.List = append(resp.List, &Client{ + Number: client.Number, + Name: client.Name, + Id: int64(client.Id), + }) + } + return resp, nil +} + +func (s *Server) GetClientMaxId(ctx context.Context, req *ClientMaxIdRequest) (*ClientMaxIdResponse, error) { + clientService := new(service.ClientService) + id, err := clientService.GetClientMaxId() + return &ClientMaxIdResponse{Id: int64(id)}, err +} +func (s *Server) AddClient(ctx context.Context, req *AddClientRequest) (*ClientMsgResponse, error) { + clientService := new(service.ClientService) + client := &model.Client{Id: int(req.Id), Number: req.Number, Name: req.Name, DetailAddress: req.DetailAddress, Remark: req.Remark, CreatorId: int(req.CreatorId)} + code := clientService.AddClient(client, 0) + if code != ecode.OK { + return &ClientMsgResponse{Code: int64(code), Msg: "娣诲姞澶辫触", Id: strconv.Itoa(client.Id)}, nil + } + return &ClientMsgResponse{Code: int64(code), Msg: "娣诲姞鎴愬姛", Id: strconv.Itoa(client.Id)}, nil +} +func (s *Server) EditClient(ctx context.Context, req *EditClientRequest) (*ClientMsgResponse, error) { + clientService := new(service.ClientService) + client := &model.Client{Id: int(req.Id), Number: req.Number, Name: req.Name, DetailAddress: req.DetailAddress, Remark: req.Remark, CreatorId: int(req.CreatorId)} + code := clientService.UpdateClient(client, 0) + if code != ecode.OK { + return &ClientMsgResponse{Code: int64(code), Msg: "娣诲姞澶辫触", Id: strconv.Itoa(client.Id)}, nil + } + return &ClientMsgResponse{Code: int64(code), Msg: "娣诲姞鎴愬姛", Id: strconv.Itoa(client.Id)}, nil +} +func (s *Server) DelClient(ctx context.Context, req *DelClientRequest) (*ClientMsgResponse, error) { + clientService := new(service.ClientService) + + code := clientService.DeleteClient([]int{int(req.Id)}) + if code != ecode.OK { + return &ClientMsgResponse{Code: int64(code), Msg: "鍒犻櫎澶辫触", Id: strconv.FormatInt(req.Id, 10)}, nil + } + return &ClientMsgResponse{Code: int64(code), Msg: "鍒犻櫎鎴愬姛", Id: strconv.FormatInt(req.Id, 10)}, nil +} + +func (s *Server) UpdateSalesDetail(ctx context.Context, req *UpdateSalesDetailRequest) (*UpdateSalesDetailResponse, error) { + if req.Number == "" { + return nil, errors.New("閿�鍞槑缁嗙紪鍙蜂负绌�") + } + if req.Status == 0 { + return nil, errors.New("閿�鍞槑缁嗙姸鎬佷负绌�") + } + + status := constvar.SalesDetailsStatus(int(req.Status)) + if !status.Valid() { + return nil, errors.New("閿�鍞槑缁嗙姸鎬佷笉姝g‘") + } + + salesDetail, err := model.NewSalesDetailsSearch().SetNumber(req.Number).First() + if err == gorm.ErrRecordNotFound { + return nil, errors.New("閿�鍞槑缁嗕笉瀛樺湪") + } + + salesDetail.Status = status + err = model.NewSalesDetailsSearch().SetId(salesDetail.Id).Update(salesDetail) + if err != nil { + return nil, errors.New("鏇存敼CRM閿�鍞槑缁嗗け璐�") + } + + return &UpdateSalesDetailResponse{}, nil +} + +func (s *Server) RemoveSalesDetail(ctx context.Context, req *RemoveSalesDetailRequest) (*RemoveSalesDetailResponse, error) { + if req.Number == "" { + return nil, errors.New("閿�鍞槑缁嗙紪鍙蜂负绌�") + } + + _, err := model.NewSalesDetailsSearch().SetNumber(req.Number).First() + if err == gorm.ErrRecordNotFound { + return nil, errors.New("閿�鍞槑缁嗕笉瀛樺湪") + } + + err = model.NewSalesDetailsSearch().SetNumber(req.Number).Delete() + if err == gorm.ErrRecordNotFound { + return nil, errors.New("閿�鍞槑缁嗗垹闄ゅけ璐�") + } + + return &RemoveSalesDetailResponse{}, nil +} + +func (s *Server) GetCrmSalesDetailsProductInfo(ctx context.Context, req *GetCrmSalesDetailsProductInfoRequest) (*GetCrmSalesDetailsProductInfoResponse, error) { + if req.SalesDetailsNumber == "" { + return nil, errors.New("閿�鍞槑缁嗙紪鍙蜂负绌�") + } + first, err := model.NewSalesDetailsSearch().SetPreload(true).SetNumber(req.SalesDetailsNumber).First() + if err != nil { + return nil, err + } + list := make([]*CrmSalesDetailsProductInfo, 0) + for _, product := range first.Products { + var csp CrmSalesDetailsProductInfo + csp.ProductId = product.Number + csp.ProductName = product.Name + csp.Specs = product.Specs + csp.Unit = product.Unit + csp.Amount = product.Amount.IntPart() + csp.Cost = product.Cost + csp.Price = product.Price.IntPart() + csp.Total = product.Total.IntPart() + csp.Profit = product.Profit + csp.Margin = product.Margin + list = append(list, &csp) + } + resp := new(GetCrmSalesDetailsProductInfoResponse) + resp.List = list + return resp, nil +} -- Gitblit v1.8.0