liujiandao
2024-03-15 38e5627134a81c831d4867ef4085b2bda9291b24
获取信息修改
3个文件已删除
6个文件已修改
618 ■■■■ 已修改文件
api/v1/product.go 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/salesDetails.go 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/grpc_init/crm_aps_init.go 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
model/response/salesDetails.go 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/crm_srm.proto 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/crm_srm/crm_srm.pb.go 300 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
proto/crm_srm/crm_srm_grpc.pb.go 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/salesDetails.go 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/v1/product.go
@@ -156,6 +156,31 @@
        ctx.Ok()
        return
    }
    first, err := model.NewSalesDetailsSearch().SetPreload(true).SetNumber(number).First()
    if err != nil {
        ctx.FailWithMsg(ecode.DBErr, "查询销售明细出错")
        return
    }
    productInfo := make([]response.SalesDetailsProductInfo, 0)
    amountMap := make(map[string]int64)
    overMap := make(map[string]int64)
    for _, p := range first.Products {
        amountMap[p.Number] = 0
        overMap[p.Number] = 0
        var sdpi response.SalesDetailsProductInfo
        sdpi.ProductId = p.Number
        sdpi.ProductName = p.Name
        sdpi.Specs = p.Specs
        sdpi.Unit = p.Unit
        sdpi.Amount = p.Amount
        sdpi.Cost = p.Cost
        sdpi.Price = p.Price
        sdpi.Total = p.Total
        sdpi.Profit = p.Profit
        sdpi.Margin = p.Margin
        productInfo = append(productInfo, sdpi)
    }
    client := product.NewProductServiceClient(grpc_init.CrmApsGrpcServiceConn)
    info, err := client.GetProductOrder(ctx.GetCtx(), &product.GetProductOrderRequest{SalesDetailsNumber: number})
    if err != nil {
@@ -164,6 +189,7 @@
        return
    }
    var result response.Info
    //制造信息
    var list []response.WorkOrderInfo
    for _, orderInfo := range info.List {
        var wo response.WorkOrderInfo
@@ -179,10 +205,20 @@
        wo.Unit = orderInfo.Unit
        wo.Amount = orderInfo.Amount
        wo.FinishAmount = orderInfo.FinishAmount
        amountMap[orderInfo.ProductId] = amountMap[orderInfo.ProductId] + orderInfo.Amount
        overMap[orderInfo.ProductId] = overMap[orderInfo.ProductId] + orderInfo.FinishAmount
        list = append(list, wo)
    }
    for i := 0; i < len(productInfo); i++ {
        productInfo[i].MakeAmount = amountMap[productInfo[i].ProductId]
        amountMap[productInfo[i].ProductId] = 0
        productInfo[i].MakeFinishAmount = overMap[productInfo[i].ProductId]
        productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
        overMap[productInfo[i].ProductId] = 0
    }
    result.MakeInfo = list
    //采购信息
    var purchaseInfo []response.Purchase
    for _, pl := range info.PurchaseList {
        var p response.Purchase
@@ -197,10 +233,20 @@
        p.Unit = pl.Unit
        p.Amount = pl.Amount
        p.FinishAmount = pl.FinishAmount
        amountMap[pl.ProductId] = amountMap[pl.ProductId] + pl.Amount
        overMap[pl.ProductId] = overMap[pl.ProductId] + pl.FinishAmount
        purchaseInfo = append(purchaseInfo, p)
    }
    for i := 0; i < len(productInfo); i++ {
        productInfo[i].PurchaseAmount = amountMap[productInfo[i].ProductId]
        amountMap[productInfo[i].ProductId] = 0
        productInfo[i].PurchaseFinishAmount = overMap[productInfo[i].ProductId]
        productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
        overMap[productInfo[i].ProductId] = 0
    }
    result.PurchaseInfo = purchaseInfo
    //委外信息
    var outsourcingList []response.OutsourcingInfo
    for _, outsourcingInfo := range info.OutsourcingList {
        var oi response.OutsourcingInfo
@@ -215,8 +261,18 @@
        oi.Unit = outsourcingInfo.Unit
        oi.Amount = outsourcingInfo.Amount
        oi.FinishAmount = outsourcingInfo.FinishAmount
        amountMap[outsourcingInfo.ProductId] = amountMap[outsourcingInfo.ProductId] + outsourcingInfo.Amount
        overMap[outsourcingInfo.ProductId] = overMap[outsourcingInfo.ProductId] + outsourcingInfo.FinishAmount
        outsourcingList = append(outsourcingList, oi)
    }
    for i := 0; i < len(productInfo); i++ {
        productInfo[i].OutsourcingAmount = amountMap[productInfo[i].ProductId]
        amountMap[productInfo[i].ProductId] = 0
        productInfo[i].OutsourcingFinishAmount = overMap[productInfo[i].ProductId]
        productInfo[i].FinishAmount = productInfo[i].FinishAmount + overMap[productInfo[i].ProductId]
        overMap[productInfo[i].ProductId] = 0
    }
    result.OutsourcingInfo = outsourcingList
    result.ProductInfo = productInfo
    ctx.OkWithDetailed(result)
}
api/v1/salesDetails.go
@@ -11,7 +11,6 @@
    "aps_crm/pkg/logx"
    "aps_crm/pkg/structx"
    "aps_crm/proto/crm_aps"
    "aps_crm/proto/crm_srm"
    "aps_crm/proto/product_inventory"
    "aps_crm/utils"
    "github.com/gin-gonic/gin"
@@ -385,113 +384,4 @@
        return
    }
    ctx.Ok()
}
// GetSalesDetailsProductInfo
//
// @Tags        SalesDetails
// @Summary      获取销售明细产品信息
// @Produce    application/json
// @Param        number    path        string    true    "明细编码"
// @Success    200    {object}    response.ListResponse
//
//    @Router        /api/salesDetails/getSalesDetailsProductInfo/{number} [get]
func (s *SalesDetailsApi) GetSalesDetailsProductInfo(c *gin.Context) {
    ctx, ok := contextx.NewContext(c, nil)
    if !ok {
        return
    }
    number := c.Param("number")
    first, err := model.NewSalesDetailsSearch().SetPreload(true).SetNumber(number).First()
    if err != nil {
        ctx.FailWithMsg(ecode.DBErr, "查询销售明细出错")
        return
    }
    resp := make([]response.SalesDetailsProductInfo, 0)
    amountMap := make(map[string]int64)
    overMap := make(map[string]int64)
    for _, product := range first.Products {
        amountMap[product.Number] = 0
        overMap[product.Number] = 0
        var sdpi response.SalesDetailsProductInfo
        sdpi.ProductId = product.Number
        sdpi.ProductName = product.Name
        sdpi.Specs = product.Specs
        sdpi.Unit = product.Unit
        sdpi.Amount = product.Amount
        sdpi.Cost = product.Cost
        sdpi.Price = product.Price
        sdpi.Total = product.Total
        sdpi.Profit = product.Profit
        sdpi.Margin = product.Margin
        resp = append(resp, sdpi)
    }
    srmClient := crm_srm.NewCrmAndSrmServiceClient(grpc_init.CrmSrmGrpcServiceConn)
    info, err := srmClient.CrmGetPurchaseInfo(c, &crm_srm.CrmGetPurchaseInfoRequest{SalesDetailsNumber: number})
    if err != nil {
        logx.Errorf("grpc CrmGetPurchaseInfo err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    //采购数量
    for _, purchaseInfo := range info.Info {
        amount := amountMap[purchaseInfo.ProductId]
        amount += purchaseInfo.Amount
        amountMap[purchaseInfo.ProductId] = amount
        over := overMap[purchaseInfo.ProductId]
        over += purchaseInfo.FinishAmount
        overMap[purchaseInfo.ProductId] = over
    }
    for i := 0; i < len(resp); i++ {
        resp[i].PurchaseAmount = amountMap[resp[i].ProductId]
        amountMap[resp[i].ProductId] = 0
        resp[i].PurchaseFinishAmount = overMap[resp[i].ProductId]
        resp[i].FinishAmount = resp[i].FinishAmount + overMap[resp[i].ProductId]
        overMap[resp[i].ProductId] = 0
    }
    apsClient := crm_aps.NewCrmAndApsGrpcServiceClient(grpc_init.CrmApsGrpcServiceConn)
    productInfo, err := apsClient.CrmGetMakeAndOutsourcingProductInfo(c, &crm_aps.CrmGetMakeAndOutsourcingProductInfoRequest{SalesDetailsNumber: number})
    if err != nil {
        logx.Errorf("grpc CrmGetMakeAndOutsourcingProductInfo err: %v", err.Error())
        ctx.FailWithMsg(ecode.UnknownErr, "内部错误")
        return
    }
    //制造数量
    for _, makeInfo := range productInfo.Info {
        if makeInfo.Type == 2 {
            amount := amountMap[makeInfo.ProductId]
            amount += makeInfo.Amount
            amountMap[makeInfo.ProductId] = amount
            over := overMap[makeInfo.ProductId]
            over += makeInfo.FinishAmount
            overMap[makeInfo.ProductId] = over
        }
    }
    for i := 0; i < len(resp); i++ {
        resp[i].MakeAmount = amountMap[resp[i].ProductId]
        amountMap[resp[i].ProductId] = 0
        resp[i].MakeFinishAmount = overMap[resp[i].ProductId]
        resp[i].FinishAmount = resp[i].FinishAmount + overMap[resp[i].ProductId]
        overMap[resp[i].ProductId] = 0
    }
    //委外数量
    for _, outsourcingInfo := range productInfo.Info {
        if outsourcingInfo.Type == 3 {
            amount := amountMap[outsourcingInfo.ProductId]
            amount += outsourcingInfo.Amount
            amountMap[outsourcingInfo.ProductId] = amount
            over := overMap[outsourcingInfo.ProductId]
            over += outsourcingInfo.FinishAmount
            overMap[outsourcingInfo.ProductId] = over
        }
    }
    for i := 0; i < len(resp); i++ {
        resp[i].OutsourcingAmount = amountMap[resp[i].ProductId]
        amountMap[resp[i].ProductId] = 0
        resp[i].OutsourcingFinishAmount = overMap[resp[i].ProductId]
        resp[i].FinishAmount = resp[i].FinishAmount + overMap[resp[i].ProductId]
        overMap[resp[i].ProductId] = 0
    }
    ctx.OkWithDetailed(resp)
}
main.go
@@ -54,7 +54,6 @@
    go middleware.InitUserConn()
    go grpc_init.InitProductInventoryServiceConn()
    go grpc_init.InitCrmApsGrpcServiceConn()
    go grpc_init.InitCrmSrmGrpcServiceConn()
    //启动grpc服务
    go func() {
        ln, err := net.Listen("tcp", ":"+conf.Conf.System.GrpcPort)
@@ -89,7 +88,6 @@
    grpc_init.CloseProductInventoryServiceConn()
    middleware.CloseUserConn()
    grpc_init.CloseCrmApsGrpcServiceConn()
    grpc_init.CloseCrmSrmGrpcServiceConn()
    logx.Infof("aps-crm exited...")
    os.Exit(0)
model/grpc_init/crm_aps_init.go
@@ -10,7 +10,6 @@
var (
    ProductInventoryServiceConn *grpc.ClientConn
    CrmApsGrpcServiceConn       *grpc.ClientConn
    CrmSrmGrpcServiceConn       *grpc.ClientConn
)
func InitCrmApsGrpcServiceConn() {
@@ -40,20 +39,5 @@
func CloseProductInventoryServiceConn() {
    if ProductInventoryServiceConn != nil {
        ProductInventoryServiceConn.Close()
    }
}
func InitCrmSrmGrpcServiceConn() {
    var err error
    CrmSrmGrpcServiceConn, err = grpc.Dial(conf.Conf.GrpcServiceAddr.SRM, grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        logx.Errorf("grpc dial product service error: %v", err.Error())
        return
    }
}
func CloseCrmSrmGrpcServiceConn() {
    if CrmSrmGrpcServiceConn != nil {
        CrmSrmGrpcServiceConn.Close()
    }
}
model/response/salesDetails.go
@@ -3,9 +3,10 @@
import "github.com/shopspring/decimal"
type Info struct {
    MakeInfo        []WorkOrderInfo   `json:"makeInfo"`
    PurchaseInfo    []Purchase        `json:"purchaseInfo"`
    OutsourcingInfo []OutsourcingInfo `json:"outsourcingInfo"`
    MakeInfo        []WorkOrderInfo           `json:"makeInfo"`
    PurchaseInfo    []Purchase                `json:"purchaseInfo"`
    OutsourcingInfo []OutsourcingInfo         `json:"outsourcingInfo"`
    ProductInfo     []SalesDetailsProductInfo `json:"productInfo"`
}
type WorkOrderInfo struct {
proto/crm_srm.proto
File was deleted
proto/crm_srm/crm_srm.pb.go
File was deleted
proto/crm_srm/crm_srm_grpc.pb.go
File was deleted
router/salesDetails.go
@@ -19,8 +19,7 @@
        salesDetailsRouter.POST("list", salesDetailsApi.List)                                              // 获取销售明细单列表
        salesDetailsRouter.GET("getProductInventoryInfo/:number", salesDetailsApi.GetProductInventoryInfo) // 获取产品库存信息
        //salesDetailsRouter.POST("createOperation", salesDetailsApi.CreateOperation)                           // 创建产品出库信息
        salesDetailsRouter.GET("getApsProjectList", salesDetailsApi.GetApsProjectList)                           // 获取aps项目列表
        salesDetailsRouter.POST("sendSalesDetailsToOtherSystem", salesDetailsApi.SendSalesDetailsToOtherSystem)  // 推送销售明细信息到其他系统                    // 创建产品出库信息
        salesDetailsRouter.GET("getSalesDetailsProductInfo/:number", salesDetailsApi.GetSalesDetailsProductInfo) // 获取销售明细产品信息                    // 创建产品出库信息
        salesDetailsRouter.GET("getApsProjectList", salesDetailsApi.GetApsProjectList)                          // 获取aps项目列表
        salesDetailsRouter.POST("sendSalesDetailsToOtherSystem", salesDetailsApi.SendSalesDetailsToOtherSystem) // 推送销售明细信息到其他系统                    // 创建产品出库信息
    }
}