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