From 094ef7098974093c279eb79d70c7c8ba8422a19c Mon Sep 17 00:00:00 2001 From: chenlin Date: Wed, 6 Mar 2024 10:07:55 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E9=87=87=E8=B4=AD=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=8CV1.3.0?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=BC=80=E5=8F=91=E5=AE=8C=E6=88=90=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/purchasemanage/purchase.go | 108 ++ app/admin/models/purchase.go | 2047 ++++++++++++++++++++- app/admin/router/purchasemanage.go | 25 +- docs/docs.go | 990 +++++++++- docs/swagger.json | 990 +++++++++- docs/swagger.yaml | 718 +++++++- 6 files changed, 4812 insertions(+), 66 deletions(-) diff --git a/app/admin/apis/purchasemanage/purchase.go b/app/admin/apis/purchasemanage/purchase.go index a9b6c4d..fa88242 100644 --- a/app/admin/apis/purchasemanage/purchase.go +++ b/app/admin/apis/purchasemanage/purchase.go @@ -590,3 +590,111 @@ func ErpPurchaseDemandFinish(c *gin.Context) { app.OK(c, nil, "操作成功") return } + +// ErpPurchaseReportByOrder 采购报表(按单) +// @Summary 采购报表(按单) +// @Tags 采购报表, V1.3.0 +// @Produce json +// @Accept json +// @Param request body models.ErpPurchaseReportByOrderReq true "采购报表(按单)模型" +// @Success 200 {object} models.ErpPurchaseReportByOrderResp +// @Router /api/v1/erp_purchase/report/order [post] +func ErpPurchaseReportByOrder(c *gin.Context) { + req := new(model.ErpPurchaseReportByOrderReq) + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error("ShouldBindJSON err:", logger.Field("err", err)) + app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") + return + } + + resp, err := model.GetReportByOrder(req) + if err != nil { + logger.Error("GetReportByOrder err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) + return + } + + app.OK(c, resp, "查询成功") + return +} + +// ErpPurchaseReportByCommodity 采购报表(按商品) +// @Summary 采购报表(按商品) +// @Tags 采购报表, V1.3.0 +// @Produce json +// @Accept json +// @Param request body models.ErpPurchaseReportByCommodityReq true "采购报表(按商品)模型" +// @Success 200 {object} models.ErpPurchaseReportByCommodityResp +// @Router /api/v1/erp_purchase/report/commodity [post] +func ErpPurchaseReportByCommodity(c *gin.Context) { + req := new(model.ErpPurchaseReportByCommodityReq) + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error("ShouldBindJSON err:", logger.Field("err", err)) + app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") + return + } + + resp, err := model.GetReportByCommodity(req) + if err != nil { + logger.Error("GetReportByCommodity err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) + return + } + + app.OK(c, resp, "查询成功") + return +} + +// ErpPurchaseReportBySupplier 供应商采购汇总 +// @Summary 供应商采购汇总 +// @Tags 采购报表, V1.3.0 +// @Produce json +// @Accept json +// @Param request body models.ErpPurchaseReportBySupplierReq true "供应商采购汇总模型" +// @Success 200 {object} models.ErpPurchaseReportBySupplierResp +// @Router /api/v1/erp_purchase/report/supplier [post] +func ErpPurchaseReportBySupplier(c *gin.Context) { + req := new(model.ErpPurchaseReportBySupplierReq) + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error("ShouldBindJSON err:", logger.Field("err", err)) + app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") + return + } + + resp, err := model.GetReportBySupplier(req) + if err != nil { + logger.Error("GetReportBySupplier err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) + return + } + + app.OK(c, resp, "查询成功") + return +} + +// ErpPurchaseReportDetail 采购明细 +// @Summary 采购明细 +// @Tags 采购报表, V1.3.0 +// @Produce json +// @Accept json +// @Param request body models.ErpPurchaseReportDetailReq true "采购明细模型" +// @Success 200 {object} models.ErpPurchaseReportDetailResp +// @Router /api/v1/erp_purchase/report/detail [post] +func ErpPurchaseReportDetail(c *gin.Context) { + req := new(model.ErpPurchaseReportDetailReq) + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error("ShouldBindJSON err:", logger.Field("err", err)) + app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") + return + } + + resp, err := model.GetReportDetail(req) + if err != nil { + logger.Error("GetReportBySupplier err:", logger.Field("err", err)) + app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error()) + return + } + + app.OK(c, resp, "查询成功") + return +} diff --git a/app/admin/models/purchase.go b/app/admin/models/purchase.go index 6175443..bc09aba 100644 --- a/app/admin/models/purchase.go +++ b/app/admin/models/purchase.go @@ -9,6 +9,8 @@ import ( "go-admin/tools/config" "gorm.io/gorm" "math/rand" + "sort" + "strconv" "strings" "sync" "time" @@ -94,6 +96,8 @@ type ErpPurchaseInventory struct { ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 CommoditySerialNumber string `json:"commodity_serial_number" gorm:"index"` // 商品编号 + ErpCategoryID uint32 `json:"erp_category_id" gorm:"index"` // 商品分类id + ErpCategoryName string `json:"erp_category_name"` // 商品分类名称 IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码 IMEI string `json:"imei"` // 商品串码 Count uint32 `json:"count"` // 执行数量 @@ -102,41 +106,44 @@ type ErpPurchaseInventory struct { EmployeePrice float64 `json:"employee_price"` // 员工成本价 } +// ErpPurchaseCreateReq 新建采购订单入参 type ErpPurchaseCreateReq struct { - PurchaseType string `json:"purchase_type" binding:"required"` // 采购类型:procure-采购 reject-退货 - PurchaseOrderSn string `json:"purchase_order_sn"` // 采购退货订单号 - StoreId uint32 `json:"store_id"` // 门店id - DeliveryAddress string `json:"delivery_address"` // 交货地址 - HandlerId uint32 `json:"handler_id" gorm:"index"` // 经手人id - HandlerName string `json:"handler_name"` // 经手人名称 - ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id - ErpCashierId uint32 `json:"erp_cashier_id"` // 付款方式 - AccountHolder string `json:"account_holder"` // 收款人 - OpeningBank string `json:"opening_bank" ` // 开户行 - BankAccount string `json:"bank_account" ` // 银行卡号 - DeliveryTime string `json:"delivery_time" ` // 交货日期 - Remark string `json:"remark"` // 备注 - ErpPurchaseCommodities []ErpPurchaseCommodity `json:"erp_purchase_commodities" binding:"required"` // 采购商品信息 + PurchaseType string `json:"purchase_type" binding:"required"` // 采购类型:procure-采购 reject-退货 + PurchaseOrderSn string `json:"purchase_order_sn"` // 采购退货订单号 + StoreId uint32 `json:"store_id"` // 门店id + DeliveryAddress string `json:"delivery_address"` // 交货地址 + HandlerId uint32 `json:"handler_id" gorm:"index"` // 经手人id + HandlerName string `json:"handler_name"` // 经手人名称 + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + ErpCashierId uint32 `json:"erp_cashier_id"` // 付款方式 + AccountHolder string `json:"account_holder"` // 收款人 + OpeningBank string `json:"opening_bank" ` // 开户行 + BankAccount string `json:"bank_account" ` // 银行卡号 + DeliveryTime string `json:"delivery_time" ` // 交货日期 + Remark string `json:"remark"` // 备注 + ErpPurchaseCommodities []ErpPurchaseCommodity `json:"erp_purchase_commodity" binding:"required"` // 采购商品信息 } +// ErpPurchaseEditReq 编辑采购订单入参 type ErpPurchaseEditReq struct { - ErpPurchaseOrderId uint32 `json:"erp_purchase_order_id" binding:"required"` // 采购订单id - PurchaseType string `json:"purchase_type" binding:"required"` // 采购类型:procure-采购 reject-退货 - PurchaseOrderSn string `json:"purchase_order_sn"` // 采购退货订单号 - StoreId uint32 `json:"store_id" binding:"required"` // 门店id - DeliveryAddress string `json:"delivery_address" binding:"required"` // 交货地址 - HandlerId uint32 `json:"handler_id" gorm:"index"` // 经手人id - HandlerName string `json:"handler_name"` // 经手人名称 - ErpSupplierId uint32 `json:"erp_supplier_id" binding:"required"` // 供应商id - ErpCashierId uint32 `json:"erp_cashier_id" binding:"required"` // 付款方式 - AccountHolder string `json:"account_holder"` // 收款人 - OpeningBank string `json:"opening_bank" validate:"required"` // 开户行 - BankAccount string `json:"bank_account" validate:"required"` // 银行卡号 - DeliveryTime string `json:"delivery_time" binding:"required"` // 交货日期 - Remark string `json:"remark"` // 备注 - ErpPurchaseCommodities []ErpPurchaseCommodity `json:"erp_purchase_commodities" binding:"required"` // 采购商品信息 + ErpPurchaseOrderId uint32 `json:"erp_purchase_order_id" binding:"required"` // 采购订单id + PurchaseType string `json:"purchase_type" binding:"required"` // 采购类型:procure-采购 reject-退货 + PurchaseOrderSn string `json:"purchase_order_sn"` // 采购退货订单号 + StoreId uint32 `json:"store_id" binding:"required"` // 门店id + DeliveryAddress string `json:"delivery_address" binding:"required"` // 交货地址 + HandlerId uint32 `json:"handler_id" gorm:"index"` // 经手人id + HandlerName string `json:"handler_name"` // 经手人名称 + ErpSupplierId uint32 `json:"erp_supplier_id" binding:"required"` // 供应商id + ErpCashierId uint32 `json:"erp_cashier_id" binding:"required"` // 付款方式 + AccountHolder string `json:"account_holder"` // 收款人 + OpeningBank string `json:"opening_bank" validate:"required"` // 开户行 + BankAccount string `json:"bank_account" validate:"required"` // 银行卡号 + DeliveryTime string `json:"delivery_time" binding:"required"` // 交货日期 + Remark string `json:"remark"` // 备注 + ErpPurchaseCommodities []ErpPurchaseCommodity `json:"erp_purchase_commodity" binding:"required"` // 采购商品信息 } +// ErpPurchaseOrderListReq 查询采购订单列表入参 type ErpPurchaseOrderListReq struct { SerialNumber string `json:"serial_number"` // 单据编号 PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 @@ -144,11 +151,13 @@ type ErpPurchaseOrderListReq struct { ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id AuditTimeStart string `json:"audit_time_start"` // 审核开始时间 AuditTimeEnd string `json:"audit_time_end"` // 审核结束时间 - State uint32 `json:"state"` // 状态:1-待审核 2-待入库 3-待退货 4-已完成 + AuditFlag string `json:"audit_flag"` // 审核标记(默认展示所有):ON-订单只展示已审核的采购入库订单,含待入库/已终止/已完成 + State uint32 `json:"state"` // 状态:1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 PageIndex int `json:"pageIndex"` // 页码 PageSize int `json:"pageSize"` // 页面条数 } +// ErpPurchaseOrderListResp 查询采购订单列表出参 type ErpPurchaseOrderListResp struct { List []ErpPurchaseOrder `json:"list"` Total int `json:"total"` // 总条数 @@ -156,6 +165,7 @@ type ErpPurchaseOrderListResp struct { PageSize int `json:"pageSize"` // 页面条数 } +// ErpPurchaseDetailReq 查询采购订单详情入参 type ErpPurchaseDetailReq struct { ErpPurchaseOrderId uint32 `json:"erp_purchase_order_id" binding:"required"` // 采购订单id } @@ -185,6 +195,7 @@ type ErpPurchaseExecuteResp struct { Total int `json:"total"` // 总条数 } +// ExecuteData 库存执行数据 type ExecuteData struct { ErpPurchaseOrderId uint32 `json:"erp_purchase_order_id" gorm:"index"` // 商品采购订单id ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id @@ -197,6 +208,7 @@ type ExecuteData struct { EmployeePrice float64 `json:"employee_price"` // 员工成本价 } +// ErpPurchaseDemand 库存执行表 type ErpPurchaseDemand struct { Model ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id @@ -212,16 +224,7 @@ type ErpPurchaseDemand struct { Remark string `json:"remark"` // 备注 } -type ErpPurchaseDemandRecord struct { - Model - ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id - StoreId uint32 `json:"store_id" binding:"required"` // 门店id - StoreName string `json:"store_name" binding:"required"` // 门店名称 - Count uint32 `json:"count"` // 数量 - MakerId uint32 `json:"maker_id" gorm:"index"` // 制单人id - State uint32 `json:"state"` // 1-待采购 2-已采购 -} - +// GetErpPurchaseDemandReq 获取采购需求入参 type GetErpPurchaseDemandReq struct { ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类id ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号 @@ -232,6 +235,7 @@ type GetErpPurchaseDemandReq struct { IsExport uint32 `json:"is_export"` // 1-导出 } +// DemandData 采购需求数据 type DemandData struct { ErpCommodityID uint32 `json:"erp_commodity_id"` // 商品id ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号 @@ -252,6 +256,7 @@ type DemandData struct { } `json:"store_list"` } +// GetErpPurchaseDemandResp 获取采购需求出参 type GetErpPurchaseDemandResp struct { List []DemandData `json:"list"` Total int64 `json:"total"` // 数据总条数 @@ -260,6 +265,7 @@ type GetErpPurchaseDemandResp struct { ExportUrl string `json:"export_url"` // 文件路径 } +// CreateErpPurchaseDemandReq 创建采购需求入参 type CreateErpPurchaseDemandReq struct { ErpCommodityID uint32 `json:"erp_commodity_id"` // 商品id ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号 @@ -272,10 +278,234 @@ type CreateErpPurchaseDemandReq struct { } `json:"list"` } +// FinishErpPurchaseDemandReq 完成采购需求入参 type FinishErpPurchaseDemandReq struct { ErpCommodityID uint32 `json:"erp_commodity_id" binding:"required"` // 商品id } +// ErpPurchaseReportByOrderReq 采购报表(按单)入参 +type ErpPurchaseReportByOrderReq struct { + SerialNumber string `json:"serial_number"` // 单据编号 + PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + StoreId uint32 `json:"store_id"` // 门店id + HandlerId uint32 `json:"handler_id"` // 经手人id + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + State uint32 `json:"state"` // 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + AuditTimeStart string `json:"audit_time_start"` // 审核开始时间 + AuditTimeEnd string `json:"audit_time_end"` // 审核结束时间 + IsExport uint32 `json:"is_export"` // 1-导出 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 +} + +// ErpPurchaseReportByOrderResp 采购报表(按单)出参 +type ErpPurchaseReportByOrderResp struct { + Total int `json:"total"` // 总条数 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + Amount float64 `json:"amount"` // 已执行金额 + Count uint32 `json:"count"` // 已执行数量 + ExportUrl string `json:"export_url"` // 导出excel路径 + List []ReportByOrderData `json:"list"` // 采购报表信息 +} + +type ReportByOrderData struct { + CommonData + State uint32 `json:"state"` // 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + Remark string `json:"remark"` // 备注 + Amount float64 `json:"amount"` // 已执行金额 + Price float64 `json:"price"` // 执行单价 + Count uint32 `json:"count"` // 已执行数量 + CommodityData []ErpPurchaseCommodityData `json:"commodity_data"` // 商品信息 +} + +type CommodityData struct { + ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + ErpCategoryName string `json:"erp_category_name"` // 商品分类名称 +} + +type CommonData struct { + SerialNumber string `json:"serial_number"` // 单据编号 + PurchaseType string `json:"purchase_type"` // 单据类型:procure-采购 reject-退货 + StoreId uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + ErpSupplierName string `json:"erp_supplier_name"` // 供应商名称 + HandlerId uint32 `json:"handler_id"` // 经手人id + HandlerName string `json:"handler_name"` // 经手人名称 + MakerTime time.Time `json:"maker_time"` // 制单时间 + MakerId uint32 `json:"maker_id"` // 制单人id + MakerName string `json:"maker_name"` // 制单人名称 + AuditTime time.Time `json:"audit_time"` // 审核时间 + AuditorId uint32 `json:"auditor_id"` // 审核人id + AuditorName string `json:"auditor_name"` // 审核人名称 +} + +// ErpPurchaseCommodityData 采购订单商品信息 +type ErpPurchaseCommodityData struct { + CommodityData + Amount float64 `json:"amount"` // 已执行金额 + Price float64 `json:"price"` // 已执行单价 + Count uint32 `json:"count"` // 已执行数量 +} + +// ErpPurchaseReportByCommodityReq 采购报表(按商品)入参 +type ErpPurchaseReportByCommodityReq struct { + SerialNumber string `json:"serial_number"` // 单据编号 + PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + StoreId uint32 `json:"store_id"` // 门店id + HandlerId uint32 `json:"handler_id"` // 经手人id + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + State uint32 `json:"state"` // 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + AuditTimeStart string `json:"audit_time_start"` // 审核开始时间 + AuditTimeEnd string `json:"audit_time_end"` // 审核结束时间 + IsExport uint32 `json:"is_export"` // 1-导出 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 +} + +// ErpPurchaseReportByCommodityResp 采购报表(按商品)出参 +type ErpPurchaseReportByCommodityResp struct { + Total int `json:"total"` // 总条数 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + PurchaseData + ExportUrl string `json:"export_url"` // 导出excel路径 + List []ReportByCommodityData `json:"list"` // 采购报表信息 +} + +type ReportByCommodityData struct { + CommodityData + PurchaseData + OrderInfo []ErpCommodityPurchaseOrderData `json:"order_info"` // 采购订单信息 +} + +// ErpCommodityPurchaseOrderData 采购商品的订单信息 +type ErpCommodityPurchaseOrderData struct { + CommonData + PurchaseData +} + +type TempData struct { + CommodityData + ErpCommodityPurchaseOrderData +} + +// PurchaseData 采购金额和数量 +type PurchaseData struct { + OrderId uint32 `json:"order_id"` // 采购订单id + PlanCount uint32 `json:"plan_count"` // 计划采购数量 + PlanPrice float64 `json:"plan_price"` // 计划采购单价 + PlanAmount float64 `json:"plan_amount"` // 计划采购金额 + Amount float64 `json:"amount"` // 已执行金额 + Price float64 `json:"price"` // 已执行单价 + Count uint32 `json:"count"` // 已执行数量 + NonExecutionAmount float64 `json:"non_execution_amount"` // 未执行金额 + NonExecutionCount uint32 `json:"non_execution_count"` // 未执行数量 +} + +// ErpPurchaseReportBySupplierReq 供应商采购汇总入参 +type ErpPurchaseReportBySupplierReq struct { + PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + StartTime string `json:"startTime"` // 入/出库,开始时间 + EndTime string `json:"endTime"` // 入/出库,结束时间 + IsExport uint32 `json:"is_export"` // 1-导出 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + StoreList []struct { + StoreID uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + } `json:"store_list"` // 门店复选 +} + +// ErpPurchaseReportBySupplierResp 供应商采购汇总出参 +type ErpPurchaseReportBySupplierResp struct { + Total int `json:"total"` // 总条数 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + Count uint32 `json:"count"` // 采购数量 + Amount float64 `json:"amount"` // 采购金额 + RejectAmount float64 `json:"reject_amount"` // 退货金额 + Difference float64 `json:"difference"` // 差额 + ExportUrl string `json:"export_url"` // 导出excel路径 + List []struct { + ErpPurchaseOrderId uint32 `json:"erp_purchase_order_id"` // 采购订单id + StoreId uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + ErpSupplierName string `json:"erp_supplier_name"` // 供应商名称 + ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + ErpCategoryName string `json:"erp_category_name"` // 商品分类名称 + Count uint32 `json:"count"` // 采购数量 + Amount float64 `json:"amount"` // 采购金额 + RejectAmount float64 `json:"reject_amount"` // 退货金额 + Difference float64 `json:"difference"` // 差额 + } `json:"list"` // 供应商采购汇总信息 +} + +// ErpPurchaseReportDetailReq 采购明细入参 +type ErpPurchaseReportDetailReq struct { + SerialNumber string `json:"serial_number"` // 单据编号 + PurchaseType string `json:"purchase_type"` // 采购类型:procure-采购 reject-退货 + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + StartTime string `json:"startTime"` // 入/出库,开始时间 + EndTime string `json:"endTime"` // 入/出库,结束时间 + IsExport uint32 `json:"is_export"` // 1-导出 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + StoreList []struct { + StoreID uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + } `json:"store_list"` // 门店复选 + +} + +// ErpPurchaseReportDetailResp 采购明细出参 +type ErpPurchaseReportDetailResp struct { + Total int `json:"total"` // 总条数 + PageIndex int `json:"pageIndex"` // 页码 + PageSize int `json:"pageSize"` // 页面条数 + Price float64 `json:"price"` // 采购价 + EmployeePrice float64 `json:"employee_price"` // 员工成本价 + RejectPrice float64 `json:"reject_price"` // 退货价 + DifferencePrice float64 `json:"difference_price"` // 差价 + ExportUrl string `json:"export_url"` // 导出excel路径 + List []struct { + OrderSerialNumber string `json:"order_serial_number"` // 单据编号 + PurchaseType string `json:"purchase_type"` // 单据类型:procure-采购 reject-退货 + ExecuteTime *time.Time `json:"execute_time"` // 出/入库时间 + StoreId uint32 `json:"store_id"` // 门店id + StoreName string `json:"store_name"` // 门店名称 + ErpSupplierId uint32 `json:"erp_supplier_id"` // 供应商id + ErpSupplierName string `json:"erp_supplier_name"` // 供应商名称 + ErpCommodityId uint32 `json:"erp_commodity_id"` // 商品id + ErpCommodityName string `json:"erp_commodity_name"` // 商品名称 + ErpCategoryID uint32 `json:"erp_category_id"` // 商品分类id + ErpCategoryName string `json:"erp_category_name"` // 商品分类名称 + IMEIType uint32 `json:"imei_type"` // 1-无串码 2-串码 + IMEI string `json:"imei"` // 商品串码 + Price float64 `json:"price"` // 采购价 + EmployeePrice float64 `json:"employee_price"` // 员工成本价 + RejectPrice float64 `json:"reject_price"` // 退货价 + DifferencePrice float64 `json:"difference_price"` // 差价 + } `json:"list"` // 采购明细信息 +} + +// List 查询采购订单列表 func (m *ErpPurchaseOrderListReq) List() (*ErpPurchaseOrderListResp, error) { resp := &ErpPurchaseOrderListResp{ PageIndex: m.PageIndex, @@ -289,6 +519,11 @@ func (m *ErpPurchaseOrderListReq) List() (*ErpPurchaseOrderListResp, error) { m.PageSize = 10 } qs := orm.Eloquent.Table("erp_purchase_order") + var stateList []int + if m.AuditFlag == "ON" { //2-待入库 4-已完成 5-已终止 + stateList = []int{2, 4, 5} + qs = qs.Where("state IN ?", stateList) + } if m.SerialNumber != "" { qs = qs.Where("serial_number=?", m.SerialNumber) } else { @@ -318,7 +553,7 @@ func (m *ErpPurchaseOrderListReq) List() (*ErpPurchaseOrderListResp, error) { logger.Errorf("erpPurchaseOrderList err:", err) return nil, err } - parse = parse.AddDate(0, 0, 1) + //parse = parse.AddDate(0, 0, 1) qs = qs.Where("audit_time < ?", parse) } } @@ -969,7 +1204,7 @@ func ExecuteErpPurchase(req *ErpPurchaseInventoryReq) (*ErpPurchaseExecuteResp, } for _, inventory := range req.Inventories { - if inventory.IMEIType == 2 { + if inventory.IMEIType == 2 || inventory.IMEIType == 3 { // 如果是串码商品,根据 Count 拆分成对应数量的数据 for i := 0; i < int(inventory.Count); i++ { imei := "" // 默认退货单执行时不需要串码 @@ -2373,3 +2608,1731 @@ func convertLettersToColumn(letters string) int { } return result } + +// GetReportByOrder 查询采购报表(按单) +func GetReportByOrder(req *ErpPurchaseReportByOrderReq) (*ErpPurchaseReportByOrderResp, error) { + var err error + resp := new(ErpPurchaseReportByOrderResp) + if req.ErpCommodityName != "" || req.ErpCategoryID != 0 { // 商品名称、商品分类不为空 + // 先筛选商品入库信息表,然后再补充采购订单信息 + resp, err = getReportByOrderFromCommodityOrCategory(req) + } else { + // 先筛选采购订单表,再补充商品入库信息 + resp, err = getReportByOrderFromCommon(req) + } + if err != nil { + return nil, err + } + + return resp, nil +} + +// 查询采购报表(按单):先筛选商品入库信息表,然后再补充采购订单信息 +func getReportByOrderFromCommodityOrCategory(req *ErpPurchaseReportByOrderReq) (*ErpPurchaseReportByOrderResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportByOrderResp{ + PageIndex: req.PageIndex + 1, + PageSize: req.PageSize, + } + qs := orm.Eloquent.Table("erp_purchase_inventory") + if req.ErpCommodityName != "" { + qs = qs.Where("erp_commodity_name=?", req.ErpCommodityName) + } + if req.ErpCategoryID != 0 { + qs = qs.Where("erp_category_id=?", req.ErpCategoryID) + } + var inventoryList []ErpPurchaseInventory + var err error + if req.IsExport == 1 { // 导出excel + err = qs.Order("id DESC").Find(&inventoryList).Error + } else { + err = qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&inventoryList).Error + } + if err != nil && err != RecordNotFound { + logger.Error("getReportByOrderFromCommodityOrCategory erp_purchase_inventory err:", logger.Field("err", err)) + return resp, err + } + + // 创建一个 map,用于存储不同的 ErpCommodityId + commodityMap := make(map[uint32]uint32) + + // 遍历 inventoryList,将不同的 ErpCommodityId 存入 map 中 + for _, inventory := range inventoryList { + commodityMap[inventory.ErpCommodityId] = inventory.ErpPurchaseOrderId + } + // 计算不同的 ErpCommodityId 的数量 + differentCommodityCount := len(commodityMap) + + var reportOrderDataList []ReportByOrderData + var nTotalAmount float64 + var nTotalCount uint32 + // 查询采购订单信息 + for _, v := range commodityMap { + var purchaseOrder ErpPurchaseOrder + var commodityList []ErpPurchaseCommodityData + err = orm.Eloquent.Table("erp_purchase_order").Where("id = ?", v).Find(&purchaseOrder).Error + if err != nil { + return nil, err + } + var reportByOrderData ReportByOrderData + reportByOrderData.SerialNumber = purchaseOrder.SerialNumber + reportByOrderData.PurchaseType = purchaseOrder.PurchaseType + reportByOrderData.StoreId = purchaseOrder.StoreId + reportByOrderData.StoreName = purchaseOrder.StoreName + reportByOrderData.ErpSupplierId = purchaseOrder.ErpSupplierId + reportByOrderData.ErpSupplierName = purchaseOrder.ErpSupplierName + reportByOrderData.HandlerId = purchaseOrder.HandlerId + reportByOrderData.HandlerName = purchaseOrder.HandlerName + reportByOrderData.MakerTime = purchaseOrder.MakerTime + reportByOrderData.MakerId = purchaseOrder.MakerId + reportByOrderData.MakerName = purchaseOrder.MakerName + reportByOrderData.AuditorId = purchaseOrder.AuditorId + reportByOrderData.AuditTime = purchaseOrder.AuditTime + reportByOrderData.AuditorName = purchaseOrder.AuditorName + reportByOrderData.State = purchaseOrder.State + reportByOrderData.Remark = purchaseOrder.Remark + + var nAmount float64 + var nCount uint32 + for _, inventory := range inventoryList { + var commodityData ErpPurchaseCommodityData + if inventory.ErpPurchaseOrderId == purchaseOrder.ID { + commodityData.ErpCommodityId = inventory.ErpCommodityId + commodityData.ErpCommodityName = inventory.ErpCommodityName + commodityData.ErpCategoryID = inventory.ErpCategoryID + commodityData.ErpCategoryName = inventory.ErpCategoryName + commodityData.Amount = inventory.Amount + commodityData.Price = inventory.ImplementationPrice + commodityData.Count = inventory.Count + commodityList = append(commodityList, commodityData) + nAmount += inventory.Amount + nCount += inventory.Count + } + } + reportByOrderData.CommodityData = commodityList + reportByOrderData.Amount = nAmount + reportByOrderData.Count = nCount + if nCount != 0 { + reportByOrderData.Price = nAmount / float64(nCount) + } + reportOrderDataList = append(reportOrderDataList, reportByOrderData) + + nTotalAmount += nAmount + nTotalCount += nCount + } + + resp.Total = differentCommodityCount + resp.List = reportOrderDataList + resp.Amount = nTotalAmount + resp.Count = nTotalCount + + if req.IsExport == 1 { + filePath, err := reportByOrderExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportByOrderResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +// 查询采购报表(按单): 先筛选采购订单表,再补充商品入库信息 +func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq) (*ErpPurchaseReportByOrderResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportByOrderResp{ + PageIndex: req.PageIndex + 1, + PageSize: req.PageSize, + } + qs := orm.Eloquent.Table("erp_purchase_order") + if req.SerialNumber != "" { // 单据编号 + qs = qs.Where("serial_number=?", req.SerialNumber) + } else { + if req.PurchaseType != "" { // 采购类型 + qs = qs.Where("purchase_type=?", req.PurchaseType) + } + if req.StoreId != 0 { // 门店id + qs = qs.Where("store_id=?", req.StoreId) + } + if req.ErpSupplierId != 0 { // 供应商id + qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId) + } + if req.HandlerId != 0 { // 经手人id + qs = qs.Where("handler_id=?", req.HandlerId) + } + if req.State != 0 { // 订单状态 + qs = qs.Where("state=?", req.State) + } + if req.AuditTimeStart != "" { // 审核开始时间 + parse, err := time.Parse(QueryTimeFormat, req.AuditTimeStart) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, err + } + qs = qs.Where("audit_time > ?", parse) + } + if req.AuditTimeEnd != "" { // 审核结束时间 + parse, err := time.Parse(QueryTimeFormat, req.AuditTimeEnd) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, err + } + parse = parse.AddDate(0, 0, 1) + qs = qs.Where("audit_time < ?", parse) + } + } + + var count int64 + err := qs.Count(&count).Error + if err != nil { + logger.Error("getReportByOrderFromCommon count err:", logger.Field("err", err)) + return resp, err + } + resp.Total = int(count) + var orders []ErpPurchaseOrder + + if req.IsExport == 1 { // 导出excel + err = qs.Order("id DESC").Find(&orders).Error + } else { + err = qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&orders).Error + } + if err != nil && err != RecordNotFound { + logger.Error("getReportByOrderFromCommon erp_purchase_order err:", logger.Field("err", err)) + return resp, err + } + + var reportByOrderDataList []ReportByOrderData + var nTotalAmount float64 + var nTotalCount uint32 + for _, v := range orders { + var reportByOrderData ReportByOrderData + var nAmount float64 + var nCount uint32 + reportByOrderData.SerialNumber = v.SerialNumber + reportByOrderData.PurchaseType = v.PurchaseType + reportByOrderData.StoreId = v.StoreId + reportByOrderData.StoreName = v.StoreName + reportByOrderData.ErpSupplierId = v.ErpSupplierId + reportByOrderData.ErpSupplierName = v.ErpSupplierName + reportByOrderData.HandlerId = v.HandlerId + reportByOrderData.HandlerName = v.HandlerName + reportByOrderData.MakerTime = v.MakerTime + reportByOrderData.MakerId = v.MakerId + reportByOrderData.MakerName = v.MakerName + reportByOrderData.AuditorId = v.AuditorId + reportByOrderData.AuditTime = v.AuditTime + reportByOrderData.AuditorName = v.AuditorName + reportByOrderData.State = v.State + reportByOrderData.Remark = v.Remark + reportByOrderData.CommodityData, nAmount, nCount, err = getOrderInventoryInfo(v.ID) + if err != nil { + return nil, err + } + reportByOrderData.Amount = nAmount + reportByOrderData.Count = nCount + if nCount != 0 { + reportByOrderData.Price = nAmount / float64(nCount) + } + reportByOrderDataList = append(reportByOrderDataList, reportByOrderData) + nTotalAmount += nAmount + nTotalCount += nCount + } + resp.List = reportByOrderDataList + resp.Amount = nTotalAmount + resp.Count = nTotalCount + resp.Total = int(count) + + if req.IsExport == 1 { + filePath, err := reportByOrderExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportByOrderResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +// 查询采购订单的入库信息 +func getOrderInventoryInfo(erpPurchaseOrderId uint32) ([]ErpPurchaseCommodityData, float64, uint32, error) { + var inventoryList []ErpPurchaseInventory + err := orm.Eloquent.Table("erp_purchase_inventory").Where("erp_purchase_order_id = ?", erpPurchaseOrderId). + Find(&inventoryList).Error + if err != nil { + logger.Error("getOrderInventoryInfo err:", logger.Field("err", err)) + return nil, 0, 0, err + } + + if len(inventoryList) == 0 { + //return nil, 0, 0, errors.New("未查询到采购订单的入库信息") + return nil, 0, 0, nil + } + + var resp []ErpPurchaseCommodityData + var nAmount float64 + var nCount uint32 + for _, v := range inventoryList { + var purchaseCommodityData ErpPurchaseCommodityData + purchaseCommodityData.ErpCommodityId = v.ErpCommodityId + purchaseCommodityData.ErpCommodityName = v.ErpCommodityName + purchaseCommodityData.ErpCategoryID = v.ErpCategoryID + purchaseCommodityData.ErpCategoryName = v.ErpCategoryName + purchaseCommodityData.Amount = v.Amount + purchaseCommodityData.Price = v.ImplementationPrice + purchaseCommodityData.Count = v.Count + resp = append(resp, purchaseCommodityData) + nAmount += v.Amount + nCount += v.Count + } + + return resp, nAmount, nCount, nil +} + +// 导出采购报表(按单)excel +func reportByOrderExport(req *ErpPurchaseReportByOrderResp) (string, error) { + file := excelize.NewFile() + fSheet := "Sheet1" + + url := ExportUrl + fileName := time.Now().Format(TimeFormat) + "采购报表(按单)" + ".xlsx" + fmt.Println("url fileName:", url+fileName) + + // 组合标题栏数据 + title := []interface{}{"单据编号", "类型", "店铺名称", "备注", "供应商", "经手人", "制单人", "审核时间", "订单状态", + "商品名称", "商品分类", "已执行金额", "执行单价", "已执行数量"} + for i, _ := range title { + cell, _ := excelize.CoordinatesToCellName(1+i, 1) + err := file.SetCellValue(fSheet, cell, title[i]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + + var row1 []interface{} + var row2 []interface{} + nExcelStartRow := 0 + for _, orderData := range req.List { + var orderType string + switch orderData.PurchaseType { + case "procure": + orderType = "采购入库" + case "reject": + orderType = "采购退货" + } + + var orderStatus string + switch orderData.State { // 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + case ErpPurchaseOrderUnAudit: + orderStatus = "待审核" + case ErpPurchaseOrderWaitInventory: + orderStatus = "待入库" + case ErpPurchaseOrderWaitReject: + orderStatus = "待退货" + case ErpPurchaseOrderFinished: + orderStatus = "已完成" + case ErpPurchaseOrderEnd: + orderStatus = "已终止" + } + + row1 = []interface{}{ + orderData.SerialNumber, // 单据编号 + orderType, // 类型 + orderData.StoreName, // 店铺名称 + orderData.Remark, // 备注 + orderData.ErpSupplierName, // 供应商 + orderData.HandlerName, // 经手人 + orderData.MakerName, // 制单人 + orderData.AuditTime.Format(TimeFormat), // 审核时间 + orderStatus, // 订单状态 + "--", // 商品名称 + "--", // 商品分类 + orderData.Amount, // 已执行金额 + orderData.Price, // 执行单价 + orderData.Count, // 已执行数量 + } + + for j, _ := range row1 { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, row1[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + + for _, commodity := range orderData.CommodityData { + row2 = []interface{}{ + "", // 单据编号 + "", // 类型 + "", // 店铺名称 + "", // 备注 + "", // 供应商 + "", // 经手人 + "", // 制单人 + "", // 审核时间 + "", // 订单状态 + commodity.ErpCommodityName, // 商品名称 + commodity.ErpCategoryName, // 商品分类 + commodity.Amount, // 已执行金额 + commodity.Price, // 执行单价 + commodity.Count, // 已执行数量 + } + + for j, _ := range row2 { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, row2[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + } + } + + totalData := "订单数:" + strconv.FormatInt(int64(req.Total), 10) + end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "", req.Amount, "--", req.Count} + for i, _ := range end { + cell, _ := excelize.CoordinatesToCellName(1+i, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, end[i]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + + // 设置所有单元格的样式: 居中、加边框 + style, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"}, + "border":[{"type":"left","color":"000000","style":1}, + {"type":"top","color":"000000","style":1}, + {"type":"right","color":"000000","style":1}, + {"type":"bottom","color":"000000","style":1}]}`) + + //设置单元格高度 + file.SetRowHeight("Sheet1", 1, 20) + + // 设置单元格大小 + file.SetColWidth("Sheet1", "A", "A", 13) + file.SetColWidth("Sheet1", "C", "C", 25) + file.SetColWidth("Sheet1", "H", "H", 20) + file.SetColWidth("Sheet1", "J", "J", 18) + + endRow := fmt.Sprintf("N"+"%d", nExcelStartRow+2) + // 应用样式到整个表格 + _ = file.SetCellStyle("Sheet1", "A1", endRow, style) + + fmt.Println("save fileName:", config.ExportConfig.Path+fileName) + if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil { + fmt.Println(err) + } + return url + fileName, nil +} + +// GetReportByCommodity 查询采购报表(按商品) +func GetReportByCommodity(req *ErpPurchaseReportByCommodityReq) (*ErpPurchaseReportByCommodityResp, error) { + var err error + resp := new(ErpPurchaseReportByCommodityResp) + if req.ErpCommodityName != "" || req.ErpCategoryID != 0 { // 商品名称、商品分类不为空 + // 先筛选商品入库信息表,然后再补充采购订单信息 + resp, err = getReportByCommodityFromCommodityOrCategory(req) + } else { + // 先筛选采购订单表,再补充商品入库信息 + resp, err = getReportByCommodityFromCommon(req) + } + if err != nil { + return nil, err + } + + return resp, nil +} + +// 查询采购报表(按商品):先筛选商品入库信息表,然后再补充采购订单信息 +func getReportByCommodityFromCommodityOrCategory(req *ErpPurchaseReportByCommodityReq) (*ErpPurchaseReportByCommodityResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportByCommodityResp{ + PageIndex: req.PageIndex + 1, + PageSize: req.PageSize, + } + + qs := orm.Eloquent.Table("erp_purchase_inventory") + if req.ErpCommodityName != "" { + qs = qs.Where("erp_commodity_name=?", req.ErpCommodityName) + } + if req.ErpCategoryID != 0 { + qs = qs.Where("erp_category_id=?", req.ErpCategoryID) + } + + var count int64 + err := qs.Count(&count).Error + if err != nil { + logger.Error("getReportByOrderFromCommodityOrCategory count err:", logger.Field("err", err)) + return resp, err + } + + var inventoryList []ErpPurchaseInventory + if req.IsExport == 1 { // 导出excel + err = qs.Order("id DESC").Find(&inventoryList).Error + } else { + err = qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&inventoryList).Error + } + if err != nil && err != RecordNotFound { + logger.Error("getReportByOrderFromCommodityOrCategory erp_purchase_inventory err:", logger.Field("err", err)) + return resp, err + } + + commodityIDMap := make(map[uint32]map[uint32]ErpPurchaseInventory) + // 遍历 inventoryList + for _, inventory := range inventoryList { + // 如果该商品id已经在map中,则将该订单id加入到对应的set中 + if ids, ok := commodityIDMap[inventory.ErpCommodityId]; ok { + ids[inventory.ErpPurchaseOrderId] = inventory + } else { + // 如果该商品id不在map中,则创建一个新的map并加入订单id及其对应的 ErpPurchaseInventory + commodityIDMap[inventory.ErpCommodityId] = map[uint32]ErpPurchaseInventory{ + inventory.ErpPurchaseOrderId: inventory, + } + } + } + resp.Total = len(commodityIDMap) + + var reportByCommodityDataList []ReportByCommodityData + var totalData PurchaseData + + // 遍历 map 获取去重的 ErpPurchaseOrderId + for _, orderIdSet := range commodityIDMap { + var reportByCommodityData ReportByCommodityData + if len(orderIdSet) != 0 { + reportByCommodityData.ErpCommodityId = orderIdSet[0].ErpPurchaseCommodityId + reportByCommodityData.ErpCommodityName = orderIdSet[0].ErpCommodityName + reportByCommodityData.ErpCategoryID = orderIdSet[0].ErpCategoryID + reportByCommodityData.ErpCategoryName = orderIdSet[0].ErpCategoryName + } + + var totalPurchaseData PurchaseData + var purchaseOrderDataList []ErpCommodityPurchaseOrderData + for orderId := range orderIdSet { + purchaseOrderData, err := getPurchaseOrderData(orderId) + if err != nil { + return nil, err + } + + purchaseOrderDataList = append(purchaseOrderDataList, purchaseOrderData) + + totalPurchaseData.PlanCount += purchaseOrderData.PlanCount + totalPurchaseData.PlanPrice += purchaseOrderData.PlanPrice + totalPurchaseData.PlanAmount += purchaseOrderData.PlanAmount + totalPurchaseData.Amount += purchaseOrderData.Amount + totalPurchaseData.Price += purchaseOrderData.Price + totalPurchaseData.Count += purchaseOrderData.Count + totalPurchaseData.NonExecutionAmount += purchaseOrderData.NonExecutionAmount + totalPurchaseData.NonExecutionCount += purchaseOrderData.NonExecutionCount + } + + reportByCommodityData.PlanCount = totalPurchaseData.PlanCount + reportByCommodityData.PlanPrice = totalPurchaseData.PlanPrice + reportByCommodityData.PlanAmount = totalPurchaseData.PlanAmount + reportByCommodityData.Amount = totalPurchaseData.Amount + reportByCommodityData.Price = totalPurchaseData.Price + reportByCommodityData.Count = totalPurchaseData.Count + reportByCommodityData.NonExecutionAmount = totalPurchaseData.NonExecutionAmount + reportByCommodityData.NonExecutionCount = totalPurchaseData.NonExecutionCount + + totalData.PlanCount += reportByCommodityData.PlanCount + totalData.PlanAmount += reportByCommodityData.PlanAmount + totalData.Amount += reportByCommodityData.Amount + totalData.Count += reportByCommodityData.Count + totalData.NonExecutionAmount += reportByCommodityData.NonExecutionAmount + totalData.NonExecutionCount += reportByCommodityData.NonExecutionCount + + reportByCommodityData.OrderInfo = purchaseOrderDataList + reportByCommodityDataList = append(reportByCommodityDataList, reportByCommodityData) + } + + resp.List = reportByCommodityDataList + resp.PlanCount = totalData.PlanCount + resp.PlanAmount = totalData.PlanAmount + resp.Amount = totalData.Amount + resp.Count = totalData.Count + resp.NonExecutionAmount = totalData.NonExecutionAmount + resp.NonExecutionCount = totalData.NonExecutionCount + + if req.IsExport == 1 { + filePath, err := reportByCommodityExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportByCommodityResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +// 查询采购订单信息 +func getPurchaseOrderData(orderID uint32) (ErpCommodityPurchaseOrderData, error) { + var purchaseOrderData ErpCommodityPurchaseOrderData + // 查询采购订单信息 + var purchaseOrder ErpPurchaseOrder + err := orm.Eloquent.Table("erp_purchase_order").Where("id = ?", orderID).Find(&purchaseOrder).Error + if err != nil { + return purchaseOrderData, err + } + + // 查询采购订单的计划和执行信息 + purchaseData, err := getPurchaseData(purchaseOrder.ID) + if err != nil { + return purchaseOrderData, err + } + + // 组合数据 + purchaseOrderData.SerialNumber = purchaseOrder.SerialNumber + purchaseOrderData.PurchaseType = purchaseOrder.PurchaseType + purchaseOrderData.StoreId = purchaseOrder.StoreId + purchaseOrderData.StoreName = purchaseOrder.StoreName + purchaseOrderData.ErpSupplierId = purchaseOrder.ErpSupplierId + purchaseOrderData.ErpSupplierName = purchaseOrder.ErpSupplierName + purchaseOrderData.HandlerId = purchaseOrder.HandlerId + purchaseOrderData.HandlerName = purchaseOrder.HandlerName + purchaseOrderData.MakerTime = purchaseOrder.MakerTime + purchaseOrderData.MakerId = purchaseOrder.MakerId + purchaseOrderData.MakerName = purchaseOrder.MakerName + purchaseOrderData.AuditorId = purchaseOrder.AuditorId + purchaseOrderData.AuditTime = purchaseOrder.AuditTime + purchaseOrderData.AuditorName = purchaseOrder.AuditorName + + purchaseOrderData.PlanCount = purchaseData.PlanCount + purchaseOrderData.PlanPrice = purchaseData.PlanPrice + purchaseOrderData.PlanAmount = purchaseData.PlanAmount + purchaseOrderData.Amount = purchaseData.Amount + purchaseOrderData.Price = purchaseData.Price + purchaseOrderData.Count = purchaseData.Count + purchaseOrderData.NonExecutionAmount = purchaseData.NonExecutionAmount + purchaseOrderData.NonExecutionCount = purchaseData.NonExecutionCount + + return purchaseOrderData, nil +} + +// getPurchaseData 根据 ErpPurchaseCommodity 表查询采购数据 +func getPurchaseData(erpPurchaseOrderId uint32) (PurchaseData, error) { + var purchaseData PurchaseData + + err := orm.Eloquent.Raw(` + SELECT + SUM(pc.count) AS plan_count, + AVG(pc.price) AS plan_price, + SUM(pc.amount) AS plan_amount, + SUM(pi.count) AS count, + AVG(pi.implementation_price) AS price, + SUM(pi.amount) AS amount + FROM + erp_purchase_commodity pc + JOIN + erp_purchase_inventory pi ON pc.erp_purchase_order_id = pi.erp_purchase_order_id + WHERE + pc.erp_purchase_order_id = ? + GROUP BY + pc.erp_purchase_order_id + `, erpPurchaseOrderId).Scan(&purchaseData).Error + if err != nil { + logger.Error("getPurchaseData err:", logger.Field("err", err)) + return purchaseData, err + } + + // 计算未执行金额和未执行数量 + purchaseData.NonExecutionAmount = purchaseData.PlanAmount - purchaseData.Amount + purchaseData.NonExecutionCount = purchaseData.PlanCount - purchaseData.Count + + return purchaseData, nil +} + +// 查询采购报表(按商品):先筛选采购订单表,再补充商品入库信息 +func getReportByCommodityFromCommon(req *ErpPurchaseReportByCommodityReq) (*ErpPurchaseReportByCommodityResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportByCommodityResp{ + PageIndex: page + 1, + PageSize: req.PageSize, + } + qs := orm.Eloquent.Table("erp_purchase_order") + if req.SerialNumber != "" { // 单据编号 + qs = qs.Where("serial_number=?", req.SerialNumber) + } else { + if req.PurchaseType != "" { // 采购类型 + qs = qs.Where("purchase_type=?", req.PurchaseType) + } + if req.StoreId != 0 { // 门店id + qs = qs.Where("store_id=?", req.StoreId) + } + if req.ErpSupplierId != 0 { // 供应商id + qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId) + } + if req.HandlerId != 0 { // 经手人id + qs = qs.Where("handler_id=?", req.HandlerId) + } + if req.State != 0 { // 订单状态 + qs = qs.Where("state=?", req.State) + } + if req.AuditTimeStart != "" { // 审核开始时间 + parse, err := time.Parse(QueryTimeFormat, req.AuditTimeStart) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, err + } + qs = qs.Where("audit_time > ?", parse) + } + if req.AuditTimeEnd != "" { // 审核结束时间 + parse, err := time.Parse(QueryTimeFormat, req.AuditTimeEnd) + if err != nil { + logger.Errorf("erpPurchaseOrderList err:", err) + return nil, err + } + parse = parse.AddDate(0, 0, 1) + qs = qs.Where("audit_time < ?", parse) + } + } + + var count int64 + err := qs.Count(&count).Error + if err != nil { + logger.Error("getReportByOrderFromCommon count err:", logger.Field("err", err)) + return resp, err + } + + var orders []ErpPurchaseOrder + err = qs.Order("id DESC").Find(&orders).Error + if err != nil && err != RecordNotFound { + logger.Error("getReportByOrderFromCommon erp_purchase_order err:", logger.Field("err", err)) + return resp, err + } + + // 查询所有商品id及其对应的orderId + commodityAndOrderIdMap, err := getAllOrderCommodity(page, req.PageSize, int(req.IsExport)) + if err != nil { + return nil, err + } + + tempDataMap := make(map[uint32][]TempData) + + //// 补充所有采购订单的商品信息和采购执行数量 + //for _, v := range orders { + // commodityIds := findCommodityIDsByOrderID(v.ID, commodityAndOrderIdMap) + // // 获取每个采购订单的每个商品的采购和执行信息 + // for _, commodityId := range commodityIds { + // purchaseOrderData, commodityData, err := getPurchaseOrderAndCommodityData(v.ID, commodityId) + // if err != nil { + // return nil, err + // } + // + // tempData := TempData{ + // CommodityData: commodityData, + // ErpCommodityPurchaseOrderData: purchaseOrderData, + // } + // tempDataMap[commodityId] = append(tempDataMap[commodityId], tempData) + // } + //} + + var wg sync.WaitGroup + ch := make(chan TempData, len(orders)*len(commodityAndOrderIdMap)) + + // 并发查询每个采购订单的每个商品的采购和执行信息 + for _, v := range orders { + commodityIds := findCommodityIDsByOrderID(v.ID, commodityAndOrderIdMap) + for _, commodityID := range commodityIds { + wg.Add(1) + go getPurchaseOrderAndCommodityDataAsync(v.ID, commodityID, ch, &wg) + } + } + wg.Wait() + close(ch) + + for data := range ch { + tempDataMap[data.ErpCommodityId] = append(tempDataMap[data.ErpCommodityId], data) + } + + var dataList []ReportByCommodityData + var totalData PurchaseData + // tempDataList,按照商品id进行归类 + for _, tempDataList := range tempDataMap { + var reportData ReportByCommodityData + for _, v := range tempDataList { + reportData.ErpCategoryID = v.ErpCategoryID + reportData.ErpCategoryName = v.ErpCategoryName + reportData.ErpCommodityId = v.ErpCommodityId + reportData.ErpCommodityName = v.ErpCommodityName + + reportData.PlanCount += v.PlanCount + reportData.PlanPrice += v.PlanPrice + reportData.PlanAmount += v.PlanAmount + reportData.Amount += v.Amount + reportData.Price += v.Price + reportData.Count += v.Count + reportData.NonExecutionAmount += v.NonExecutionAmount + reportData.NonExecutionCount += v.NonExecutionCount + + purchaseOrderData := ErpCommodityPurchaseOrderData{ + CommonData{ + SerialNumber: v.SerialNumber, + PurchaseType: v.PurchaseType, + StoreId: v.StoreId, + StoreName: v.StoreName, + ErpSupplierId: v.ErpSupplierId, + ErpSupplierName: v.ErpSupplierName, + HandlerId: v.HandlerId, + HandlerName: v.HandlerName, + MakerTime: v.MakerTime, + MakerId: v.MakerId, + MakerName: v.MakerName, + AuditorId: v.AuditorId, + AuditTime: v.AuditTime, + AuditorName: v.AuditorName, + }, + PurchaseData{ + PlanCount: v.PlanCount, + PlanPrice: v.PlanPrice, + PlanAmount: v.PlanAmount, + Amount: v.Amount, + Price: v.Price, + Count: v.Count, + NonExecutionAmount: v.NonExecutionAmount, + NonExecutionCount: v.NonExecutionCount, + }, + } + reportData.OrderInfo = append(reportData.OrderInfo, purchaseOrderData) + } + + dataList = append(dataList, reportData) + + totalData.PlanCount += reportData.PlanCount + totalData.PlanAmount += reportData.PlanAmount + totalData.Amount += reportData.Amount + totalData.Count += reportData.Count + totalData.NonExecutionAmount += reportData.NonExecutionAmount + totalData.NonExecutionCount += reportData.NonExecutionCount + } + + sortByCommodityIDDesc(dataList) + resp.Total = len(dataList) + resp.List = dataList + resp.PlanCount = totalData.PlanCount + resp.PlanAmount = totalData.PlanAmount + resp.Amount = totalData.Amount + resp.Count = totalData.Count + resp.NonExecutionAmount = totalData.NonExecutionAmount + resp.NonExecutionCount = totalData.NonExecutionCount + + if req.IsExport == 1 { + filePath, err := reportByCommodityExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportByCommodityResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +func getPurchaseOrderAndCommodityDataAsync(orderID, commodityID uint32, ch chan<- TempData, wg *sync.WaitGroup) { + defer wg.Done() + + purchaseOrderData, commodityData, err := getPurchaseOrderAndCommodityData(orderID, commodityID) + if err != nil { + logger.Errorf("getPurchaseOrderAndCommodityDataAsync err:", err) + return + } + + tempData := TempData{ + CommodityData: commodityData, + ErpCommodityPurchaseOrderData: purchaseOrderData, + } + ch <- tempData +} + +// 按照商品ID进行倒序排序的 less 函数 +func sortByCommodityIDDesc(dataList []ReportByCommodityData) { + sort.Slice(dataList, func(i, j int) bool { + return dataList[i].ErpCommodityId > dataList[j].ErpCommodityId + }) +} + +// 查询采购订单信息 +func getPurchaseOrderAndCommodityData(orderID, commodityId uint32) (ErpCommodityPurchaseOrderData, CommodityData, error) { + var purchaseOrderData ErpCommodityPurchaseOrderData + // 查询采购订单信息 + var purchaseOrder ErpPurchaseOrder + err := orm.Eloquent.Table("erp_purchase_order").Where("id = ?", orderID).Find(&purchaseOrder).Error + if err != nil { + return ErpCommodityPurchaseOrderData{}, CommodityData{}, err + } + + // 查询采购订单的计划和执行信息 + purchaseData, commodityData, err := getSignalPurchaseData(purchaseOrder.ID, commodityId) + if err != nil { + return ErpCommodityPurchaseOrderData{}, CommodityData{}, err + } + + // 组合数据 + purchaseOrderData.SerialNumber = purchaseOrder.SerialNumber + purchaseOrderData.PurchaseType = purchaseOrder.PurchaseType + purchaseOrderData.StoreId = purchaseOrder.StoreId + purchaseOrderData.StoreName = purchaseOrder.StoreName + purchaseOrderData.ErpSupplierId = purchaseOrder.ErpSupplierId + purchaseOrderData.ErpSupplierName = purchaseOrder.ErpSupplierName + purchaseOrderData.HandlerId = purchaseOrder.HandlerId + purchaseOrderData.HandlerName = purchaseOrder.HandlerName + purchaseOrderData.MakerTime = purchaseOrder.MakerTime + purchaseOrderData.MakerId = purchaseOrder.MakerId + purchaseOrderData.MakerName = purchaseOrder.MakerName + purchaseOrderData.AuditorId = purchaseOrder.AuditorId + purchaseOrderData.AuditTime = purchaseOrder.AuditTime + purchaseOrderData.AuditorName = purchaseOrder.AuditorName + + purchaseOrderData.PlanCount = purchaseData.PlanCount + purchaseOrderData.PlanPrice = purchaseData.PlanPrice + purchaseOrderData.PlanAmount = purchaseData.PlanAmount + purchaseOrderData.Amount = purchaseData.Amount + purchaseOrderData.Price = purchaseData.Price + purchaseOrderData.Count = purchaseData.Count + purchaseOrderData.NonExecutionAmount = purchaseData.NonExecutionAmount + purchaseOrderData.NonExecutionCount = purchaseData.NonExecutionCount + + return purchaseOrderData, commodityData, nil +} + +// getSignalPurchaseData 根据 ErpPurchaseCommodity 表查询采购数据 +func getSignalPurchaseData(erpPurchaseOrderId, commodityId uint32) (PurchaseData, CommodityData, error) { + var purchaseData PurchaseData + var commodityData CommodityData + + err := orm.Eloquent.Raw(` + SELECT + SUM(pc.count) AS plan_count, + AVG(pc.price) AS plan_price, + SUM(pc.amount) AS plan_amount, + SUM(pi.count) AS count, + AVG(pi.implementation_price) AS price, + SUM(pi.amount) AS amount + FROM + erp_purchase_commodity pc + JOIN + erp_purchase_inventory pi ON pc.erp_purchase_order_id = pi.erp_purchase_order_id + WHERE + pc.erp_purchase_order_id = ? and pc.erp_commodity_id = ? + GROUP BY + pc.erp_purchase_order_id + `, erpPurchaseOrderId, commodityId).Scan(&purchaseData).Error + if err != nil { + logger.Error("getPurchaseData err:", logger.Field("err", err)) + return PurchaseData{}, CommodityData{}, err + } + + // 计算未执行金额和未执行数量 + purchaseData.NonExecutionAmount = purchaseData.PlanAmount - purchaseData.Amount + purchaseData.NonExecutionCount = purchaseData.PlanCount - purchaseData.Count + + // 查询订单对应的商品信息 + commodityInfo, err := GetCommodity(commodityId) + if err != nil { + return PurchaseData{}, CommodityData{}, err + } + + commodityData.ErpCommodityId = commodityInfo.ID + commodityData.ErpCommodityName = commodityInfo.Name + commodityData.ErpCategoryID = commodityInfo.ErpCategoryId + commodityData.ErpCategoryName = commodityInfo.ErpCategoryName + + return purchaseData, commodityData, nil +} + +//// 查询所有商品信息 +//func getAllOrderCommodity(pageIndex, pageSize int) (map[uint32][]uint32, error) { +// qs := orm.Eloquent.Table("erp_purchase_commodity") +// +// var count int64 +// err := qs.Count(&count).Error +// if err != nil { +// logger.Error("getAllOrderCommodity count err:", logger.Field("err", err)) +// return nil, err +// } +// +// var commodityList []ErpPurchaseCommodity +// err = qs.Order("id DESC").Offset(pageIndex * pageSize).Limit(pageSize).Find(&commodityList).Error +// if err != nil && err != RecordNotFound { +// logger.Error("getAllOrderCommodity erp_purchase_commodity err:", logger.Field("err", err)) +// return nil, err +// } +// +// commodityMap := make(map[uint32][]uint32) +// for _, v := range commodityList { +// if !contains(commodityMap[v.ErpCommodityId], v.ErpPurchaseOrderId) { +// commodityMap[v.ErpCommodityId] = append(commodityMap[v.ErpCommodityId], v.ErpPurchaseOrderId) +// } +// } +// +// return commodityMap, nil +//} +// +//func contains(slice []uint32, item uint32) bool { +// for _, value := range slice { +// if value == item { +// return true +// } +// } +// return false +//} + +// 查询所有商品信息,每页展示不同商品ID及其对应的订单ID +func getAllOrderCommodity(pageIndex, pageSize, is_export int) (map[uint32][]uint32, error) { + var commodityMap = make(map[uint32][]uint32) + var query string + if is_export == 1 { //导出excel + // 执行原生 SQL 查询,联结表格,按照每个商品ID列出所有的订单ID + query = fmt.Sprintf(` + SELECT pc1.erp_commodity_id, GROUP_CONCAT(pc2.erp_purchase_order_id) AS order_ids + FROM erp_purchase_commodity pc1 + JOIN erp_purchase_commodity pc2 + ON pc1.erp_commodity_id = pc2.erp_commodity_id + GROUP BY pc1.erp_commodity_id`) + } else { + // 执行原生 SQL 查询,联结表格,按照每个商品ID列出所有的订单ID + query = fmt.Sprintf(` + SELECT pc1.erp_commodity_id, GROUP_CONCAT(pc2.erp_purchase_order_id) AS order_ids + FROM erp_purchase_commodity pc1 + JOIN erp_purchase_commodity pc2 + ON pc1.erp_commodity_id = pc2.erp_commodity_id + GROUP BY pc1.erp_commodity_id + LIMIT %d OFFSET %d + `, pageSize, pageIndex*pageSize) + } + + rows, err := orm.Eloquent.Raw(query).Rows() + if err != nil { + logger.Error("getAllOrderCommodity erp_purchase_commodity err:", logger.Field("err", err)) + return nil, err + } + defer rows.Close() + + for rows.Next() { + var commodityID uint32 + var orderIDs string + if err := rows.Scan(&commodityID, &orderIDs); err != nil { + logger.Error("getAllOrderCommodity rows scan err:", logger.Field("err", err)) + return nil, err + } + + // 将 orderIDs 字符串拆分为字符串数组 + orderIDStrList := strings.Split(orderIDs, ",") + + // 去重并转换为 uint32 数组 + var orderIDList []uint32 + seen := make(map[uint32]bool) + for _, idStr := range orderIDStrList { + id, err := strconv.ParseUint(idStr, 10, 32) + if err != nil { + logger.Error("getAllOrderCommodity parse orderID err:", logger.Field("err", err)) + return nil, err + } + + // 如果该订单ID未被添加过,则添加到列表中 + if _, ok := seen[uint32(id)]; !ok { + orderIDList = append(orderIDList, uint32(id)) + seen[uint32(id)] = true + } + } + + // 添加到 map 中 + commodityMap[commodityID] = orderIDList + } + + return commodityMap, nil +} + +func findCommodityIDsByOrderID(orderID uint32, commodityMap map[uint32][]uint32) []uint32 { + var commodityIDs []uint32 + + for commodityID, orderIDs := range commodityMap { + for _, id := range orderIDs { + if id == orderID { + commodityIDs = append(commodityIDs, commodityID) + break + } + } + } + + return commodityIDs +} + +// 导出采购报表(按商品)excel +func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, error) { + file := excelize.NewFile() + fSheet := "Sheet1" + + url := ExportUrl + fileName := time.Now().Format(TimeFormat) + "采购报表(按商品)" + ".xlsx" + fmt.Println("url fileName:", url+fileName) + + // 组合标题栏数据 + title1 := []interface{}{"商品名称", "商品分类", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间", + "计划采购", "", "", "已执行", "", "", "未执行", ""} + title2 := []interface{}{"商品名称", "商品分类", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间", + "采购金额", "采购单价", "采购数量", "已执行金额", "执行单价", "已执行数量", "未执行金额", "未执行数量"} + for i, _ := range title1 { + cell, _ := excelize.CoordinatesToCellName(1+i, 1) + err := file.SetCellValue(fSheet, cell, title1[i]) + if err != nil { + logger.Errorf("file set value err:", err) + } + } + + for i, _ := range title2 { + cell, _ := excelize.CoordinatesToCellName(1+i, 2) + err := file.SetCellValue(fSheet, cell, title2[i]) + if err != nil { + logger.Errorf("file set value err:", err) + } + } + + var row1 []interface{} + var row2 []interface{} + nExcelStartRow := 0 + for _, commodityData := range req.List { + row1 = []interface{}{ + commodityData.ErpCommodityName, // 商品名称 + commodityData.ErpCategoryName, // 商品分类 + "", // 单据编号 + "", // 类型 + "", // 店铺名称 + "", // 供应商 + "", // 经手人 + "", // 制单人 + "", // 审核时间 + commodityData.PlanAmount, // 计划采购金额 + commodityData.PlanPrice, // 计划采购单价 + commodityData.PlanCount, // 计划采购数量 + commodityData.Amount, // 已执行金额 + commodityData.Price, // 已执行单价 + commodityData.Count, // 已执行数量 + commodityData.NonExecutionAmount, // 未执行金额 + commodityData.NonExecutionCount, // 未执行数量 + } + + for j, _ := range row1 { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+3) + err := file.SetCellValue(fSheet, cell, row1[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + + for _, orderData := range commodityData.OrderInfo { + var orderType string + switch orderData.PurchaseType { + case "procure": + orderType = "采购入库" + case "reject": + orderType = "采购退货" + } + + row2 = []interface{}{ + "", // 商品名称 + "", // 商品分类 + orderData.SerialNumber, // 单据编号 + orderType, // 类型 + orderData.StoreName, // 店铺名称 + orderData.ErpSupplierName, // 供应商 + orderData.HandlerName, // 经手人 + orderData.MakerName, // 制单人 + orderData.AuditTime.Format(TimeFormat), // 审核时间 + orderData.PlanAmount, // 计划采购金额 + orderData.PlanPrice, // 计划采购单价 + orderData.PlanCount, // 计划采购数量 + orderData.Amount, // 已执行金额 + orderData.Price, // 已执行单价 + orderData.Count, // 已执行数量 + orderData.NonExecutionAmount, // 未执行金额 + orderData.NonExecutionCount, // 未执行数量 + } + + for j, _ := range row2 { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+3) + err := file.SetCellValue(fSheet, cell, row2[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + } + } + + totalData := "订单数:" + strconv.FormatInt(int64(req.Total), 10) + end := []interface{}{totalData, "", "", "", "", "", "", "", "", + req.PlanAmount, // 计划采购金额 + "--", // 计划采购单价 + req.PlanCount, // 计划采购数量 + req.Amount, // 已执行金额 + "--", // 已执行单价 + req.Count, // 已执行数量 + req.NonExecutionAmount, // 未执行金额 + req.NonExecutionCount, // 未执行数量 + } + for i, _ := range end { + cell, _ := excelize.CoordinatesToCellName(1+i, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, end[i]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + + // 设置所有单元格的样式: 居中、加边框 + style, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"}, + "border":[{"type":"left","color":"000000","style":1}, + {"type":"top","color":"000000","style":1}, + {"type":"right","color":"000000","style":1}, + {"type":"bottom","color":"000000","style":1}]}`) + + // 合并单元格 + _ = file.MergeCell(fSheet, "A1", "A2") + _ = file.MergeCell(fSheet, "B1", "B2") + _ = file.MergeCell(fSheet, "C1", "C2") + _ = file.MergeCell(fSheet, "D1", "D2") + _ = file.MergeCell(fSheet, "E1", "E2") + _ = file.MergeCell(fSheet, "F1", "F2") + _ = file.MergeCell(fSheet, "G1", "G2") + _ = file.MergeCell(fSheet, "H1", "H2") + _ = file.MergeCell(fSheet, "I1", "I2") + + _ = file.MergeCell(fSheet, "J1", "L1") + _ = file.MergeCell(fSheet, "M1", "O1") + _ = file.MergeCell(fSheet, "P1", "Q1") + + //设置单元格高度 + file.SetRowHeight("Sheet1", 1, 20) + file.SetRowHeight("Sheet1", 2, 20) + + // 设置单元格大小 + file.SetColWidth("Sheet1", "A", "A", 15) + file.SetColWidth("Sheet1", "B", "B", 10) + file.SetColWidth("Sheet1", "C", "C", 13) + file.SetColWidth("Sheet1", "E", "E", 25) + + endRow := fmt.Sprintf("Q"+"%d", nExcelStartRow+2) + // 应用样式到整个表格 + _ = file.SetCellStyle("Sheet1", "A1", endRow, style) + + fmt.Println("save fileName:", config.ExportConfig.Path+fileName) + if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil { + fmt.Println(err) + } + return url + fileName, nil +} + +// GetReportBySupplier 查询供应商采购汇总 +func GetReportBySupplier(req *ErpPurchaseReportBySupplierReq) (*ErpPurchaseReportBySupplierResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportBySupplierResp{ + PageIndex: page + 1, + PageSize: req.PageSize, + } + + // 构建查询条件 + query := orm.Eloquent.Model(&ErpPurchaseInventory{}). + Select("erp_purchase_inventory.erp_purchase_order_id, erp_purchase_inventory.purchase_type, " + + "erp_purchase_order.store_id, erp_purchase_order.store_name, erp_purchase_order.erp_supplier_id, " + + "erp_purchase_order.erp_supplier_name, " + + "erp_purchase_inventory.erp_commodity_id, erp_purchase_inventory.erp_commodity_name, " + + "erp_purchase_inventory.erp_category_id, erp_purchase_inventory.erp_category_name, " + + "SUM(erp_purchase_inventory.count) AS total_count, " + + "SUM(erp_purchase_inventory.amount) AS total_amount"). + Joins("JOIN erp_purchase_order ON erp_purchase_order.id = erp_purchase_inventory.erp_purchase_order_id"). + Group("erp_purchase_inventory.erp_purchase_order_id, erp_purchase_inventory.erp_commodity_id, " + + "erp_purchase_inventory.erp_commodity_name, erp_purchase_inventory.erp_category_id") + + // 根据请求参数过滤数据 + if req.PurchaseType != "" { + query = query.Where("erp_purchase_inventory.purchase_type = ?", req.PurchaseType) + } + if req.ErpCommodityName != "" { + query = query.Where("erp_purchase_inventory.erp_commodity_name = ?", req.ErpCommodityName) + } + if req.ErpCategoryID != 0 { + query = query.Where("erp_purchase_inventory.erp_category_id = ?", req.ErpCategoryID) + } + if req.ErpSupplierId != 0 { + query = query.Where("erp_purchase_inventory.erp_supplier_id = ?", req.ErpSupplierId) + } + if req.StartTime != "" { // 入/出库开始时间 + parse, err := time.Parse(QueryTimeFormat, req.StartTime) + if err != nil { + logger.Errorf("GetReportDetail err:", err) + return nil, err + } + query = query.Where("erp_purchase_inventory.created_at >= ?", parse) + } + if req.EndTime != "" { // 入/出库结束时间 + parse, err := time.Parse(QueryTimeFormat, req.EndTime) + if err != nil { + logger.Errorf("GetReportDetail err:", err) + return nil, err + } + query = query.Where("erp_purchase_inventory.created_at <= ?", parse) + } + + if len(req.StoreList) > 0 { + var storeIDs []uint32 + for _, store := range req.StoreList { + storeIDs = append(storeIDs, store.StoreID) + } + query = query.Where("erp_purchase_order.store_id IN (?)", storeIDs) + } + + // 获取总数 + var total int64 + query.Count(&total) + resp.Total = int(total) + + // 分页查询 + if req.IsExport == 1 { // 导出excel + query.Find(&resp.List) + } else { + query.Offset((req.PageIndex - 1) * req.PageSize).Limit(req.PageSize).Find(&resp.List) + } + + // 补充关联的供应商和店铺信息 + for i := range resp.List { + var purchaseOrder ErpPurchaseOrder + orm.Eloquent.Where("id = ?", resp.List[i].ErpPurchaseOrderId).First(&purchaseOrder) + resp.List[i].StoreId = purchaseOrder.StoreId + resp.List[i].StoreName = purchaseOrder.StoreName + resp.List[i].ErpSupplierId = purchaseOrder.ErpSupplierId + resp.List[i].ErpSupplierName = purchaseOrder.ErpSupplierName + + if resp.List[i].PurchaseType == "reject" { + resp.List[i].Amount = -resp.List[i].Amount + resp.List[i].RejectAmount = -resp.List[i].RejectAmount + resp.List[i].Difference = resp.List[i].Amount + resp.List[i].RejectAmount + } + } + + // 统计总计数量和金额 + var totalAmount float64 + var totalCount uint32 + for _, item := range resp.List { + totalAmount += item.Amount + totalCount += item.Count + } + + resp.Amount = totalAmount + resp.Count = totalCount + + if req.IsExport == 1 { + filePath, err := reportBySupplierExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportBySupplierResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +// 导出供应商采购汇总excel +func reportBySupplierExport(req *ErpPurchaseReportBySupplierResp) (string, error) { + file := excelize.NewFile() + fSheet := "Sheet1" + + url := ExportUrl + fileName := time.Now().Format(TimeFormat) + "供应商采购汇总" + ".xlsx" + fmt.Println("url fileName:", url+fileName) + + // 组合标题栏数据 + title := []interface{}{"店铺名称", "采购类型", "供应商", "商品名称", "商品分类", "采购数量", "采购金额", "退货金额", "差额"} + for i, _ := range title { + cell, _ := excelize.CoordinatesToCellName(1+i, 1) + err := file.SetCellValue(fSheet, cell, title[i]) + if err != nil { + logger.Errorf("file set value err:", err) + } + } + + var row []interface{} + nExcelStartRow := 0 + for _, supplierData := range req.List { + var orderType string + switch supplierData.PurchaseType { + case "procure": + orderType = "采购入库" + case "reject": + orderType = "采购退货" + } + row = []interface{}{ + supplierData.StoreName, // 店铺名称 + orderType, // 采购类型 + supplierData.ErpSupplierName, // 供应商 + supplierData.ErpCommodityName, // 商品名称 + supplierData.ErpCategoryName, // 商品分类 + supplierData.Count, // 采购数量 + supplierData.Amount, // 采购金额 + supplierData.RejectAmount, // 退货金额 + supplierData.Difference, // 差额 + } + + for j, _ := range row { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, row[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + } + + totalData := "记录数:" + strconv.FormatInt(int64(req.Total), 10) + end := []interface{}{"汇总", totalData, "", "", "", + req.Count, // 采购数量 + req.Amount, // 采购金额 + req.RejectAmount, // 退货金额 + req.Difference, // 差额 + } + for i, _ := range end { + cell, _ := excelize.CoordinatesToCellName(1+i, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, end[i]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + + // 设置所有单元格的样式: 居中、加边框 + style, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"}, + "border":[{"type":"left","color":"000000","style":1}, + {"type":"top","color":"000000","style":1}, + {"type":"right","color":"000000","style":1}, + {"type":"bottom","color":"000000","style":1}]}`) + + //设置单元格高度 + file.SetRowHeight("Sheet1", 1, 20) + + // 设置单元格大小 + file.SetColWidth("Sheet1", "A", "A", 25) + file.SetColWidth("Sheet1", "D", "D", 15) + + endRow := fmt.Sprintf("I"+"%d", nExcelStartRow+2) + // 应用样式到整个表格 + _ = file.SetCellStyle("Sheet1", "A1", endRow, style) + + fmt.Println("save fileName:", config.ExportConfig.Path+fileName) + if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil { + fmt.Println(err) + } + return url + fileName, nil +} + +// GetReportDetail 查询采购明细 +func GetReportDetail(req *ErpPurchaseReportDetailReq) (*ErpPurchaseReportDetailResp, error) { + page := req.PageIndex - 1 + if page < 0 { + page = 0 + } + if req.PageSize == 0 { + req.PageSize = 10 + } + resp := &ErpPurchaseReportDetailResp{ + PageIndex: page + 1, + PageSize: req.PageSize, + List: make([]struct { + OrderSerialNumber string `json:"order_serial_number"` + PurchaseType string `json:"purchase_type"` + ExecuteTime *time.Time `json:"execute_time"` + StoreId uint32 `json:"store_id"` + StoreName string `json:"store_name"` + ErpSupplierId uint32 `json:"erp_supplier_id"` + ErpSupplierName string `json:"erp_supplier_name"` + ErpCommodityId uint32 `json:"erp_commodity_id"` + ErpCommodityName string `json:"erp_commodity_name"` + ErpCategoryID uint32 `json:"erp_category_id"` + ErpCategoryName string `json:"erp_category_name"` + IMEIType uint32 `json:"imei_type"` + IMEI string `json:"imei"` + Price float64 `json:"price"` + EmployeePrice float64 `json:"employee_price"` + RejectPrice float64 `json:"reject_price"` + DifferencePrice float64 `json:"difference_price"` + }, 0), + } + + qs := orm.Eloquent.Debug().Table("erp_purchase_order"). + Select("erp_purchase_order.serial_number as order_serial_number, "+ + "erp_purchase_order.purchase_type, "+ + "erp_purchase_inventory.created_at as execute_time, "+ + "erp_purchase_order.store_id, "+ + "erp_purchase_order.store_name, "+ + "erp_purchase_order.erp_supplier_id, "+ + "erp_purchase_order.erp_supplier_name, "+ + "erp_purchase_inventory.erp_commodity_id, "+ + "erp_purchase_inventory.erp_commodity_name, "+ + "erp_purchase_inventory.erp_category_id, "+ + "erp_purchase_inventory.erp_category_name, "+ + "erp_purchase_inventory.imei_type, "+ + "erp_purchase_inventory.imei, "+ + "CASE "+ + "WHEN erp_purchase_order.purchase_type = 'procure' THEN erp_purchase_inventory.implementation_price "+ + "WHEN erp_purchase_order.purchase_type = 'reject' THEN erp_purchase_inventory.implementation_price "+ + "ELSE 0 END AS price, "+ + "CASE "+ + "WHEN erp_purchase_order.purchase_type = 'procure' THEN 0 "+ + "WHEN erp_purchase_order.purchase_type = 'reject' THEN erp_purchase_inventory.implementation_price "+ + "ELSE 0 END AS reject_price, "+ + "erp_purchase_inventory.implementation_price as price, "+ + "erp_purchase_inventory.employee_price, "+ + "(erp_purchase_inventory.implementation_price - erp_purchase_inventory.employee_price) as difference_price"). + Joins("JOIN erp_purchase_inventory ON erp_purchase_order.id = erp_purchase_inventory.erp_purchase_order_id"). + Where("erp_purchase_order.state <> ?", 5) // 排除已终止的订单 + + if req.SerialNumber != "" { + qs = qs.Where("erp_purchase_order.serial_number = ?", req.SerialNumber) + } + if req.PurchaseType != "" { + qs = qs.Where("erp_purchase_order.purchase_type = ?", req.PurchaseType) + } + if req.ErpCommodityName != "" { + qs = qs.Where("erp_purchase_inventory.erp_commodity_name LIKE ?", "%"+req.ErpCommodityName+"%") + } + if req.ErpCategoryID != 0 { + qs = qs.Where("erp_purchase_inventory.erp_category_id = ?", req.ErpCategoryID) + } + if req.ErpSupplierId != 0 { + qs = qs.Where("erp_purchase_order.erp_supplier_id = ?", req.ErpSupplierId) + } + if req.StartTime != "" { // 入/出库开始时间 + parse, err := time.Parse(QueryTimeFormat, req.StartTime) + if err != nil { + logger.Errorf("GetReportDetail err:", err) + return nil, err + } + qs = qs.Where("erp_purchase_inventory.created_at >= ?", parse) + } + if req.EndTime != "" { // 入/出库结束时间 + parse, err := time.Parse(QueryTimeFormat, req.EndTime) + if err != nil { + logger.Errorf("GetReportDetail err:", err) + return nil, err + } + qs = qs.Where("erp_purchase_inventory.created_at <= ?", parse) + } + + if len(req.StoreList) > 0 { + var storeIDs []uint32 + for _, store := range req.StoreList { + storeIDs = append(storeIDs, store.StoreID) + } + qs = qs.Where("erp_purchase_order.store_id IN (?)", storeIDs) + } + es := qs + + offset := (req.PageIndex - 1) * req.PageSize + err := qs.Order("erp_purchase_inventory.created_at desc"). + Offset(offset). + Limit(req.PageSize). + Scan(&resp.List).Error + if err != nil { + logger.Errorf("GetReportDetail scan err:", err) + return nil, err + } + + // 根据订单类型调整价格的正负性 + for i := range resp.List { + if resp.List[i].PurchaseType == "reject" { + resp.List[i].Price = -resp.List[i].Price + resp.List[i].DifferencePrice = -resp.List[i].DifferencePrice + resp.List[i].RejectPrice = -resp.List[i].RejectPrice + } + } + + var count int64 + err = es.Count(&count).Error + if err != nil { + logger.Errorf("GetReportDetail count err:", err) + return nil, err + } + + resp.Total = int(count) + resp.Price, resp.EmployeePrice, resp.RejectPrice, resp.DifferencePrice = calculatePrices(resp.List) + + if req.IsExport == 1 { + filePath, err := reportDetailExport(resp) + if err != nil { + return nil, err + } + resp = &ErpPurchaseReportDetailResp{} + resp.ExportUrl = filePath + } + + return resp, nil +} + +// 计算价格信息 +func calculatePrices(list []struct { + OrderSerialNumber string `json:"order_serial_number"` + PurchaseType string `json:"purchase_type"` + ExecuteTime *time.Time `json:"execute_time"` + StoreId uint32 `json:"store_id"` + StoreName string `json:"store_name"` + ErpSupplierId uint32 `json:"erp_supplier_id"` + ErpSupplierName string `json:"erp_supplier_name"` + ErpCommodityId uint32 `json:"erp_commodity_id"` + ErpCommodityName string `json:"erp_commodity_name"` + ErpCategoryID uint32 `json:"erp_category_id"` + ErpCategoryName string `json:"erp_category_name"` + IMEIType uint32 `json:"imei_type"` + IMEI string `json:"imei"` + Price float64 `json:"price"` + EmployeePrice float64 `json:"employee_price"` + RejectPrice float64 `json:"reject_price"` + DifferencePrice float64 `json:"difference_price"` +}) (price, employeePrice, rejectPrice, differencePrice float64) { + for _, item := range list { + price += item.Price + employeePrice += item.EmployeePrice + rejectPrice += item.RejectPrice + differencePrice += item.DifferencePrice + } + return +} + +// 导出采购明细excel +func reportDetailExport(req *ErpPurchaseReportDetailResp) (string, error) { + file := excelize.NewFile() + fSheet := "Sheet1" + + url := ExportUrl + fileName := time.Now().Format(TimeFormat) + "采购明细" + ".xlsx" + fmt.Println("url fileName:", url+fileName) + + // 组合标题栏数据 + title := []interface{}{"单据编号", "单据类型", "出/入库时间", "店铺名称", "供应商", "商品名称", "商品分类", "是否串码", "串码", + "采购价", "员工成本价", "退货价", "差价"} + for i, _ := range title { + cell, _ := excelize.CoordinatesToCellName(1+i, 1) + err := file.SetCellValue(fSheet, cell, title[i]) + if err != nil { + logger.Errorf("file set value err:", err) + } + } + + var row []interface{} + nExcelStartRow := 0 + for _, detailData := range req.List { + var orderType string + switch detailData.PurchaseType { + case "procure": + orderType = "采购入库" + case "reject": + orderType = "采购退货" + } + + var IMEIType string + switch detailData.IMEIType { + case 1: + IMEIType = "非串码" + case 2, 3: + IMEIType = "串码类" + } + + row = []interface{}{ + detailData.OrderSerialNumber, // 单据编号 + orderType, // 单据类型 + detailData.ExecuteTime.Format(TimeFormat), // 出/入库时间 + detailData.StoreName, // 店铺名称 + detailData.ErpSupplierName, // 供应商 + detailData.ErpCommodityName, // 商品名称 + detailData.ErpCategoryName, // 商品分类 + IMEIType, // 是否串码 + detailData.IMEI, // 串码 + detailData.Price, // 采购价 + detailData.EmployeePrice, // 员工成本价 + detailData.RejectPrice, // 退货价 + detailData.DifferencePrice, // 差价 + } + + for j, _ := range row { + cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, row[j]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + nExcelStartRow++ + } + + totalData := "记录数:" + strconv.FormatInt(int64(req.Total), 10) + end := []interface{}{totalData, "", "", "", "", "", "", "", "", + req.Price, // 采购价 + req.EmployeePrice, // 员工成本价 + req.RejectPrice, // 退货价 + req.DifferencePrice, // 差价 + } + for i, _ := range end { + cell, _ := excelize.CoordinatesToCellName(1+i, nExcelStartRow+2) + err := file.SetCellValue(fSheet, cell, end[i]) + if err != nil { + logger.Error("file set value err:", logger.Field("err", err)) + } + } + + // 设置所有单元格的样式: 居中、加边框 + style, _ := file.NewStyle(`{"alignment":{"horizontal":"center","vertical":"center"}, + "border":[{"type":"left","color":"000000","style":1}, + {"type":"top","color":"000000","style":1}, + {"type":"right","color":"000000","style":1}, + {"type":"bottom","color":"000000","style":1}]}`) + + //设置单元格高度 + file.SetRowHeight("Sheet1", 1, 20) + + // 设置单元格大小 + file.SetColWidth("Sheet1", "A", "A", 15) + file.SetColWidth("Sheet1", "C", "C", 20) + file.SetColWidth("Sheet1", "D", "D", 26) + file.SetColWidth("Sheet1", "F", "F", 18) + file.SetColWidth("Sheet1", "I", "I", 18) + + endRow := fmt.Sprintf("M"+"%d", nExcelStartRow+2) + // 应用样式到整个表格 + _ = file.SetCellStyle("Sheet1", "A1", endRow, style) + + fmt.Println("save fileName:", config.ExportConfig.Path+fileName) + if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil { + fmt.Println(err) + } + return url + fileName, nil +} diff --git a/app/admin/router/purchasemanage.go b/app/admin/router/purchasemanage.go index b1a2522..cab852b 100644 --- a/app/admin/router/purchasemanage.go +++ b/app/admin/router/purchasemanage.go @@ -10,16 +10,23 @@ import ( func registerErpPurchaseManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { r := v1.Group("/erp_purchase").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) - r.POST("create", purchasemanage.ErpPurchaseCreate) // 创建采购订单(入库/退货) - r.POST("edit", purchasemanage.ErpPurchaseEdit) // 编辑采购订单 - r.POST("list", purchasemanage.ErpPurchaseList) // 查询采购订单列表 - r.POST("detail", purchasemanage.ErpPurchaseDetail) // 查询采购订单详情 - r.POST("audit", purchasemanage.ErpPurchaseAudit) // 审核采购订单 - r.POST("delete", purchasemanage.ErpPurchaseDelete) // 删除采购订单 - r.POST("inventory", purchasemanage.ErpPurchaseInventory) // 入库(退货) - r.POST("terminate", purchasemanage.ErpPurchaseTerminate) // 终止 - r.POST("execute", purchasemanage.ErpPurchaseExecute) // 执行 + r.POST("create", purchasemanage.ErpPurchaseCreate) // 创建采购订单(入库/退货) + r.POST("edit", purchasemanage.ErpPurchaseEdit) // 编辑采购订单 + r.POST("list", purchasemanage.ErpPurchaseList) // 查询采购订单列表 + r.POST("detail", purchasemanage.ErpPurchaseDetail) // 查询采购订单详情 + r.POST("audit", purchasemanage.ErpPurchaseAudit) // 审核采购订单 + r.POST("delete", purchasemanage.ErpPurchaseDelete) // 删除采购订单 + r.POST("inventory", purchasemanage.ErpPurchaseInventory) // 入库(退货) + r.POST("terminate", purchasemanage.ErpPurchaseTerminate) // 终止 + r.POST("execute", purchasemanage.ErpPurchaseExecute) // 执行 + r.POST("demand/create", purchasemanage.ErpPurchaseDemandCreate) // 创建采购需求 r.POST("demand/get", purchasemanage.ErpPurchaseDemandGet) // 获取采购需求 r.POST("demand/finish", purchasemanage.ErpPurchaseDemandFinish) // 完成采购需求 + + r.POST("report/order", purchasemanage.ErpPurchaseReportByOrder) // 采购报表(按单) + r.POST("report/commodity", purchasemanage.ErpPurchaseReportByCommodity) // 采购报表(按商品) + r.POST("report/supplier", purchasemanage.ErpPurchaseReportBySupplier) // 供应商采购汇总 + r.POST("report/detail", purchasemanage.ErpPurchaseReportDetail) // 采购明细 + } diff --git a/docs/docs.go b/docs/docs.go index ab162d4..584d781 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2492,6 +2492,142 @@ const docTemplate = `{ } } }, + "/api/v1/erp_purchase/report/commodity": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购报表(按商品)", + "parameters": [ + { + "description": "采购报表(按商品)模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByCommodityReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByCommodityResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/detail": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购明细", + "parameters": [ + { + "description": "采购明细模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportDetailReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportDetailResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/order": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购报表(按单)", + "parameters": [ + { + "description": "采购报表(按单)模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByOrderReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByOrderResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/supplier": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "供应商采购汇总", + "parameters": [ + { + "description": "供应商采购汇总模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportBySupplierReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportBySupplierResp" + } + } + } + } + }, "/api/v1/erp_purchase/terminate": { "post": { "consumes": [ @@ -6478,6 +6614,103 @@ const docTemplate = `{ } } }, + "models.ErpCommodityPurchaseOrderData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "audit_time": { + "description": "审核时间", + "type": "string" + }, + "auditor_id": { + "description": "审核人id", + "type": "integer" + }, + "auditor_name": { + "description": "审核人名称", + "type": "string" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "handler_name": { + "description": "经手人名称", + "type": "string" + }, + "maker_id": { + "description": "制单人id", + "type": "integer" + }, + "maker_name": { + "description": "制单人名称", + "type": "string" + }, + "maker_time": { + "description": "制单时间", + "type": "string" + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + }, "models.ErpOrder": { "type": "object", "properties": { @@ -7504,10 +7737,43 @@ const docTemplate = `{ } } }, + "models.ErpPurchaseCommodityData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "price": { + "description": "已执行单价", + "type": "number" + } + } + }, "models.ErpPurchaseCreateReq": { "type": "object", "required": [ - "erp_purchase_commodities", + "erp_purchase_commodity", "purchase_type" ], "properties": { @@ -7531,7 +7797,7 @@ const docTemplate = `{ "description": "付款方式", "type": "integer" }, - "erp_purchase_commodities": { + "erp_purchase_commodity": { "description": "采购商品信息", "type": "array", "items": { @@ -7591,7 +7857,7 @@ const docTemplate = `{ "delivery_address", "delivery_time", "erp_cashier_id", - "erp_purchase_commodities", + "erp_purchase_commodity", "erp_purchase_order_id", "erp_supplier_id", "opening_bank", @@ -7619,7 +7885,7 @@ const docTemplate = `{ "description": "付款方式", "type": "integer" }, - "erp_purchase_commodities": { + "erp_purchase_commodity": { "description": "采购商品信息", "type": "array", "items": { @@ -7705,6 +7971,14 @@ const docTemplate = `{ "description": "员工成本价", "type": "number" }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, "erp_commodity_id": { "description": "商品id", "type": "integer" @@ -7890,6 +8164,10 @@ const docTemplate = `{ "models.ErpPurchaseOrderListReq": { "type": "object", "properties": { + "audit_flag": { + "description": "审核标记(默认展示所有):ON-订单只展示已审核的采购入库订单,含待入库/已终止/已完成", + "type": "string" + }, "audit_time_end": { "description": "审核结束时间", "type": "string" @@ -7919,7 +8197,7 @@ const docTemplate = `{ "type": "string" }, "state": { - "description": "状态:1-待审核 2-待入库 3-待退货 4-已完成", + "description": "状态:1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", "type": "integer" }, "store_id": { @@ -7951,6 +8229,556 @@ const docTemplate = `{ } } }, + "models.ErpPurchaseReportByCommodityReq": { + "type": "object", + "properties": { + "audit_time_end": { + "description": "审核结束时间", + "type": "string" + }, + "audit_time_start": { + "description": "审核开始时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByCommodityResp": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购报表信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ReportByCommodityData" + } + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByOrderReq": { + "type": "object", + "properties": { + "audit_time_end": { + "description": "审核结束时间", + "type": "string" + }, + "audit_time_start": { + "description": "审核开始时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByOrderResp": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购报表信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ReportByOrderData" + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportBySupplierReq": { + "type": "object", + "properties": { + "endTime": { + "description": "入/出库,结束时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "startTime": { + "description": "入/出库,开始时间", + "type": "string" + }, + "store_list": { + "description": "门店复选", + "type": "array", + "items": { + "type": "object", + "properties": { + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + } + } + }, + "models.ErpPurchaseReportBySupplierResp": { + "type": "object", + "properties": { + "amount": { + "description": "采购金额", + "type": "number" + }, + "count": { + "description": "采购数量", + "type": "integer" + }, + "difference": { + "description": "差额", + "type": "number" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "供应商采购汇总信息", + "type": "array", + "items": { + "type": "object", + "properties": { + "amount": { + "description": "采购金额", + "type": "number" + }, + "count": { + "description": "采购数量", + "type": "integer" + }, + "difference": { + "description": "差额", + "type": "number" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_purchase_order_id": { + "description": "采购订单id", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "reject_amount": { + "description": "退货金额", + "type": "number" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "reject_amount": { + "description": "退货金额", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportDetailReq": { + "type": "object", + "properties": { + "endTime": { + "description": "入/出库,结束时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "startTime": { + "description": "入/出库,开始时间", + "type": "string" + }, + "store_list": { + "description": "门店复选", + "type": "array", + "items": { + "type": "object", + "properties": { + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + } + } + }, + "models.ErpPurchaseReportDetailResp": { + "type": "object", + "properties": { + "difference_price": { + "description": "差价", + "type": "number" + }, + "employee_price": { + "description": "员工成本价", + "type": "number" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购明细信息", + "type": "array", + "items": { + "type": "object", + "properties": { + "difference_price": { + "description": "差价", + "type": "number" + }, + "employee_price": { + "description": "员工成本价", + "type": "number" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "execute_time": { + "description": "出/入库时间", + "type": "string" + }, + "imei": { + "description": "商品串码", + "type": "string" + }, + "imei_type": { + "description": "1-无串码 2-串码", + "type": "integer" + }, + "order_serial_number": { + "description": "单据编号", + "type": "string" + }, + "price": { + "description": "采购价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "reject_price": { + "description": "退货价", + "type": "number" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "price": { + "description": "采购价", + "type": "number" + }, + "reject_price": { + "description": "退货价", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, "models.ErpPurchaseTerminateReq": { "type": "object", "required": [ @@ -9692,6 +10520,158 @@ const docTemplate = `{ } } }, + "models.ReportByCommodityData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "order_info": { + "description": "采购订单信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpCommodityPurchaseOrderData" + } + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + } + } + }, + "models.ReportByOrderData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "audit_time": { + "description": "审核时间", + "type": "string" + }, + "auditor_id": { + "description": "审核人id", + "type": "integer" + }, + "auditor_name": { + "description": "审核人名称", + "type": "string" + }, + "commodity_data": { + "description": "商品信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpPurchaseCommodityData" + } + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "handler_name": { + "description": "经手人名称", + "type": "string" + }, + "maker_id": { + "description": "制单人id", + "type": "integer" + }, + "maker_name": { + "description": "制单人名称", + "type": "string" + }, + "maker_time": { + "description": "制单时间", + "type": "string" + }, + "price": { + "description": "执行单价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "remark": { + "description": "备注", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + }, "models.RetailDetailTotalData": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index cf654d1..51b8632 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2481,6 +2481,142 @@ } } }, + "/api/v1/erp_purchase/report/commodity": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购报表(按商品)", + "parameters": [ + { + "description": "采购报表(按商品)模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByCommodityReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByCommodityResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/detail": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购明细", + "parameters": [ + { + "description": "采购明细模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportDetailReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportDetailResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/order": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "采购报表(按单)", + "parameters": [ + { + "description": "采购报表(按单)模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByOrderReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportByOrderResp" + } + } + } + } + }, + "/api/v1/erp_purchase/report/supplier": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "采购报表", + "V1.3.0" + ], + "summary": "供应商采购汇总", + "parameters": [ + { + "description": "供应商采购汇总模型", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportBySupplierReq" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/models.ErpPurchaseReportBySupplierResp" + } + } + } + } + }, "/api/v1/erp_purchase/terminate": { "post": { "consumes": [ @@ -6467,6 +6603,103 @@ } } }, + "models.ErpCommodityPurchaseOrderData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "audit_time": { + "description": "审核时间", + "type": "string" + }, + "auditor_id": { + "description": "审核人id", + "type": "integer" + }, + "auditor_name": { + "description": "审核人名称", + "type": "string" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "handler_name": { + "description": "经手人名称", + "type": "string" + }, + "maker_id": { + "description": "制单人id", + "type": "integer" + }, + "maker_name": { + "description": "制单人名称", + "type": "string" + }, + "maker_time": { + "description": "制单时间", + "type": "string" + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + }, "models.ErpOrder": { "type": "object", "properties": { @@ -7493,10 +7726,43 @@ } } }, + "models.ErpPurchaseCommodityData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "price": { + "description": "已执行单价", + "type": "number" + } + } + }, "models.ErpPurchaseCreateReq": { "type": "object", "required": [ - "erp_purchase_commodities", + "erp_purchase_commodity", "purchase_type" ], "properties": { @@ -7520,7 +7786,7 @@ "description": "付款方式", "type": "integer" }, - "erp_purchase_commodities": { + "erp_purchase_commodity": { "description": "采购商品信息", "type": "array", "items": { @@ -7580,7 +7846,7 @@ "delivery_address", "delivery_time", "erp_cashier_id", - "erp_purchase_commodities", + "erp_purchase_commodity", "erp_purchase_order_id", "erp_supplier_id", "opening_bank", @@ -7608,7 +7874,7 @@ "description": "付款方式", "type": "integer" }, - "erp_purchase_commodities": { + "erp_purchase_commodity": { "description": "采购商品信息", "type": "array", "items": { @@ -7694,6 +7960,14 @@ "description": "员工成本价", "type": "number" }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, "erp_commodity_id": { "description": "商品id", "type": "integer" @@ -7879,6 +8153,10 @@ "models.ErpPurchaseOrderListReq": { "type": "object", "properties": { + "audit_flag": { + "description": "审核标记(默认展示所有):ON-订单只展示已审核的采购入库订单,含待入库/已终止/已完成", + "type": "string" + }, "audit_time_end": { "description": "审核结束时间", "type": "string" @@ -7908,7 +8186,7 @@ "type": "string" }, "state": { - "description": "状态:1-待审核 2-待入库 3-待退货 4-已完成", + "description": "状态:1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", "type": "integer" }, "store_id": { @@ -7940,6 +8218,556 @@ } } }, + "models.ErpPurchaseReportByCommodityReq": { + "type": "object", + "properties": { + "audit_time_end": { + "description": "审核结束时间", + "type": "string" + }, + "audit_time_start": { + "description": "审核开始时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByCommodityResp": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购报表信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ReportByCommodityData" + } + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByOrderReq": { + "type": "object", + "properties": { + "audit_time_end": { + "description": "审核结束时间", + "type": "string" + }, + "audit_time_start": { + "description": "审核开始时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportByOrderResp": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购报表信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ReportByOrderData" + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportBySupplierReq": { + "type": "object", + "properties": { + "endTime": { + "description": "入/出库,结束时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "startTime": { + "description": "入/出库,开始时间", + "type": "string" + }, + "store_list": { + "description": "门店复选", + "type": "array", + "items": { + "type": "object", + "properties": { + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + } + } + }, + "models.ErpPurchaseReportBySupplierResp": { + "type": "object", + "properties": { + "amount": { + "description": "采购金额", + "type": "number" + }, + "count": { + "description": "采购数量", + "type": "integer" + }, + "difference": { + "description": "差额", + "type": "number" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "供应商采购汇总信息", + "type": "array", + "items": { + "type": "object", + "properties": { + "amount": { + "description": "采购金额", + "type": "number" + }, + "count": { + "description": "采购数量", + "type": "integer" + }, + "difference": { + "description": "差额", + "type": "number" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_purchase_order_id": { + "description": "采购订单id", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "reject_amount": { + "description": "退货金额", + "type": "number" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "reject_amount": { + "description": "退货金额", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, + "models.ErpPurchaseReportDetailReq": { + "type": "object", + "properties": { + "endTime": { + "description": "入/出库,结束时间", + "type": "string" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "is_export": { + "description": "1-导出", + "type": "integer" + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "purchase_type": { + "description": "采购类型:procure-采购 reject-退货", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "startTime": { + "description": "入/出库,开始时间", + "type": "string" + }, + "store_list": { + "description": "门店复选", + "type": "array", + "items": { + "type": "object", + "properties": { + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + } + } + }, + "models.ErpPurchaseReportDetailResp": { + "type": "object", + "properties": { + "difference_price": { + "description": "差价", + "type": "number" + }, + "employee_price": { + "description": "员工成本价", + "type": "number" + }, + "export_url": { + "description": "导出excel路径", + "type": "string" + }, + "list": { + "description": "采购明细信息", + "type": "array", + "items": { + "type": "object", + "properties": { + "difference_price": { + "description": "差价", + "type": "number" + }, + "employee_price": { + "description": "员工成本价", + "type": "number" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "execute_time": { + "description": "出/入库时间", + "type": "string" + }, + "imei": { + "description": "商品串码", + "type": "string" + }, + "imei_type": { + "description": "1-无串码 2-串码", + "type": "integer" + }, + "order_serial_number": { + "description": "单据编号", + "type": "string" + }, + "price": { + "description": "采购价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "reject_price": { + "description": "退货价", + "type": "number" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + } + }, + "pageIndex": { + "description": "页码", + "type": "integer" + }, + "pageSize": { + "description": "页面条数", + "type": "integer" + }, + "price": { + "description": "采购价", + "type": "number" + }, + "reject_price": { + "description": "退货价", + "type": "number" + }, + "total": { + "description": "总条数", + "type": "integer" + } + } + }, "models.ErpPurchaseTerminateReq": { "type": "object", "required": [ @@ -9681,6 +10509,158 @@ } } }, + "models.ReportByCommodityData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_category_id": { + "description": "商品分类id", + "type": "integer" + }, + "erp_category_name": { + "description": "商品分类名称", + "type": "string" + }, + "erp_commodity_id": { + "description": "商品id", + "type": "integer" + }, + "erp_commodity_name": { + "description": "商品名称", + "type": "string" + }, + "non_execution_amount": { + "description": "未执行金额", + "type": "number" + }, + "non_execution_count": { + "description": "未执行数量", + "type": "integer" + }, + "order_id": { + "description": "采购订单id", + "type": "integer" + }, + "order_info": { + "description": "采购订单信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpCommodityPurchaseOrderData" + } + }, + "plan_amount": { + "description": "计划采购金额", + "type": "number" + }, + "plan_count": { + "description": "计划采购数量", + "type": "integer" + }, + "plan_price": { + "description": "计划采购单价", + "type": "number" + }, + "price": { + "description": "已执行单价", + "type": "number" + } + } + }, + "models.ReportByOrderData": { + "type": "object", + "properties": { + "amount": { + "description": "已执行金额", + "type": "number" + }, + "audit_time": { + "description": "审核时间", + "type": "string" + }, + "auditor_id": { + "description": "审核人id", + "type": "integer" + }, + "auditor_name": { + "description": "审核人名称", + "type": "string" + }, + "commodity_data": { + "description": "商品信息", + "type": "array", + "items": { + "$ref": "#/definitions/models.ErpPurchaseCommodityData" + } + }, + "count": { + "description": "已执行数量", + "type": "integer" + }, + "erp_supplier_id": { + "description": "供应商id", + "type": "integer" + }, + "erp_supplier_name": { + "description": "供应商名称", + "type": "string" + }, + "handler_id": { + "description": "经手人id", + "type": "integer" + }, + "handler_name": { + "description": "经手人名称", + "type": "string" + }, + "maker_id": { + "description": "制单人id", + "type": "integer" + }, + "maker_name": { + "description": "制单人名称", + "type": "string" + }, + "maker_time": { + "description": "制单时间", + "type": "string" + }, + "price": { + "description": "执行单价", + "type": "number" + }, + "purchase_type": { + "description": "单据类型:procure-采购 reject-退货", + "type": "string" + }, + "remark": { + "description": "备注", + "type": "string" + }, + "serial_number": { + "description": "单据编号", + "type": "string" + }, + "state": { + "description": "1-待审核 2-待入库 3-待退货 4-已完成 5-已终止", + "type": "integer" + }, + "store_id": { + "description": "门店id", + "type": "integer" + }, + "store_name": { + "description": "门店名称", + "type": "string" + } + } + }, "models.RetailDetailTotalData": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 65b150b..a402b65 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1241,6 +1241,78 @@ definitions: description: 数据总条数 type: integer type: object + models.ErpCommodityPurchaseOrderData: + properties: + amount: + description: 已执行金额 + type: number + audit_time: + description: 审核时间 + type: string + auditor_id: + description: 审核人id + type: integer + auditor_name: + description: 审核人名称 + type: string + count: + description: 已执行数量 + type: integer + erp_supplier_id: + description: 供应商id + type: integer + erp_supplier_name: + description: 供应商名称 + type: string + handler_id: + description: 经手人id + type: integer + handler_name: + description: 经手人名称 + type: string + maker_id: + description: 制单人id + type: integer + maker_name: + description: 制单人名称 + type: string + maker_time: + description: 制单时间 + type: string + non_execution_amount: + description: 未执行金额 + type: number + non_execution_count: + description: 未执行数量 + type: integer + order_id: + description: 采购订单id + type: integer + plan_amount: + description: 计划采购金额 + type: number + plan_count: + description: 计划采购数量 + type: integer + plan_price: + description: 计划采购单价 + type: number + price: + description: 已执行单价 + type: number + purchase_type: + description: 单据类型:procure-采购 reject-退货 + type: string + serial_number: + description: 单据编号 + type: string + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object models.ErpOrder: properties: audit_time: @@ -1988,6 +2060,30 @@ definitions: description: 指导零售价 type: integer type: object + models.ErpPurchaseCommodityData: + properties: + amount: + description: 已执行金额 + type: number + count: + description: 已执行数量 + type: integer + erp_category_id: + description: 商品分类id + type: integer + erp_category_name: + description: 商品分类名称 + type: string + erp_commodity_id: + description: 商品id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + price: + description: 已执行单价 + type: number + type: object models.ErpPurchaseCreateReq: properties: account_holder: @@ -2005,7 +2101,7 @@ definitions: erp_cashier_id: description: 付款方式 type: integer - erp_purchase_commodities: + erp_purchase_commodity: description: 采购商品信息 items: $ref: '#/definitions/models.ErpPurchaseCommodity' @@ -2035,7 +2131,7 @@ definitions: description: 门店id type: integer required: - - erp_purchase_commodities + - erp_purchase_commodity - purchase_type type: object models.ErpPurchaseDetailReq: @@ -2063,7 +2159,7 @@ definitions: erp_cashier_id: description: 付款方式 type: integer - erp_purchase_commodities: + erp_purchase_commodity: description: 采购商品信息 items: $ref: '#/definitions/models.ErpPurchaseCommodity' @@ -2100,7 +2196,7 @@ definitions: - delivery_address - delivery_time - erp_cashier_id - - erp_purchase_commodities + - erp_purchase_commodity - erp_purchase_order_id - erp_supplier_id - opening_bank @@ -2134,6 +2230,12 @@ definitions: employee_price: description: 员工成本价 type: number + erp_category_id: + description: 商品分类id + type: integer + erp_category_name: + description: 商品分类名称 + type: string erp_commodity_id: description: 商品id type: integer @@ -2272,6 +2374,9 @@ definitions: type: object models.ErpPurchaseOrderListReq: properties: + audit_flag: + description: 审核标记(默认展示所有):ON-订单只展示已审核的采购入库订单,含待入库/已终止/已完成 + type: string audit_time_end: description: 审核结束时间 type: string @@ -2294,7 +2399,7 @@ definitions: description: 单据编号 type: string state: - description: 状态:1-待审核 2-待入库 3-待退货 4-已完成 + description: 状态:1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 type: integer store_id: description: 门店id @@ -2316,6 +2421,409 @@ definitions: description: 总条数 type: integer type: object + models.ErpPurchaseReportByCommodityReq: + properties: + audit_time_end: + description: 审核结束时间 + type: string + audit_time_start: + description: 审核开始时间 + type: string + erp_category_id: + description: 商品分类id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_supplier_id: + description: 供应商id + type: integer + handler_id: + description: 经手人id + type: integer + is_export: + description: 1-导出 + type: integer + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + purchase_type: + description: 采购类型:procure-采购 reject-退货 + type: string + serial_number: + description: 单据编号 + type: string + state: + description: 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + type: integer + store_id: + description: 门店id + type: integer + type: object + models.ErpPurchaseReportByCommodityResp: + properties: + amount: + description: 已执行金额 + type: number + count: + description: 已执行数量 + type: integer + export_url: + description: 导出excel路径 + type: string + list: + description: 采购报表信息 + items: + $ref: '#/definitions/models.ReportByCommodityData' + type: array + non_execution_amount: + description: 未执行金额 + type: number + non_execution_count: + description: 未执行数量 + type: integer + order_id: + description: 采购订单id + type: integer + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + plan_amount: + description: 计划采购金额 + type: number + plan_count: + description: 计划采购数量 + type: integer + plan_price: + description: 计划采购单价 + type: number + price: + description: 已执行单价 + type: number + total: + description: 总条数 + type: integer + type: object + models.ErpPurchaseReportByOrderReq: + properties: + audit_time_end: + description: 审核结束时间 + type: string + audit_time_start: + description: 审核开始时间 + type: string + erp_category_id: + description: 商品分类id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_supplier_id: + description: 供应商id + type: integer + handler_id: + description: 经手人id + type: integer + is_export: + description: 1-导出 + type: integer + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + purchase_type: + description: 采购类型:procure-采购 reject-退货 + type: string + serial_number: + description: 单据编号 + type: string + state: + description: 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + type: integer + store_id: + description: 门店id + type: integer + type: object + models.ErpPurchaseReportByOrderResp: + properties: + amount: + description: 已执行金额 + type: number + count: + description: 已执行数量 + type: integer + export_url: + description: 导出excel路径 + type: string + list: + description: 采购报表信息 + items: + $ref: '#/definitions/models.ReportByOrderData' + type: array + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + total: + description: 总条数 + type: integer + type: object + models.ErpPurchaseReportBySupplierReq: + properties: + endTime: + description: 入/出库,结束时间 + type: string + erp_category_id: + description: 商品分类id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_supplier_id: + description: 供应商id + type: integer + is_export: + description: 1-导出 + type: integer + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + purchase_type: + description: 采购类型:procure-采购 reject-退货 + type: string + startTime: + description: 入/出库,开始时间 + type: string + store_list: + description: 门店复选 + items: + properties: + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object + type: array + type: object + models.ErpPurchaseReportBySupplierResp: + properties: + amount: + description: 采购金额 + type: number + count: + description: 采购数量 + type: integer + difference: + description: 差额 + type: number + export_url: + description: 导出excel路径 + type: string + list: + description: 供应商采购汇总信息 + items: + properties: + amount: + description: 采购金额 + type: number + count: + description: 采购数量 + type: integer + difference: + description: 差额 + type: number + erp_category_id: + description: 商品分类id + type: integer + erp_category_name: + description: 商品分类名称 + type: string + erp_commodity_id: + description: 商品id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_purchase_order_id: + description: 采购订单id + type: integer + erp_supplier_id: + description: 供应商id + type: integer + erp_supplier_name: + description: 供应商名称 + type: string + purchase_type: + description: 采购类型:procure-采购 reject-退货 + type: string + reject_amount: + description: 退货金额 + type: number + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object + type: array + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + reject_amount: + description: 退货金额 + type: number + total: + description: 总条数 + type: integer + type: object + models.ErpPurchaseReportDetailReq: + properties: + endTime: + description: 入/出库,结束时间 + type: string + erp_category_id: + description: 商品分类id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_supplier_id: + description: 供应商id + type: integer + is_export: + description: 1-导出 + type: integer + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + purchase_type: + description: 采购类型:procure-采购 reject-退货 + type: string + serial_number: + description: 单据编号 + type: string + startTime: + description: 入/出库,开始时间 + type: string + store_list: + description: 门店复选 + items: + properties: + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object + type: array + type: object + models.ErpPurchaseReportDetailResp: + properties: + difference_price: + description: 差价 + type: number + employee_price: + description: 员工成本价 + type: number + export_url: + description: 导出excel路径 + type: string + list: + description: 采购明细信息 + items: + properties: + difference_price: + description: 差价 + type: number + employee_price: + description: 员工成本价 + type: number + erp_category_id: + description: 商品分类id + type: integer + erp_category_name: + description: 商品分类名称 + type: string + erp_commodity_id: + description: 商品id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + erp_supplier_id: + description: 供应商id + type: integer + erp_supplier_name: + description: 供应商名称 + type: string + execute_time: + description: 出/入库时间 + type: string + imei: + description: 商品串码 + type: string + imei_type: + description: 1-无串码 2-串码 + type: integer + order_serial_number: + description: 单据编号 + type: string + price: + description: 采购价 + type: number + purchase_type: + description: 单据类型:procure-采购 reject-退货 + type: string + reject_price: + description: 退货价 + type: number + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object + type: array + pageIndex: + description: 页码 + type: integer + pageSize: + description: 页面条数 + type: integer + price: + description: 采购价 + type: number + reject_price: + description: 退货价 + type: number + total: + description: 总条数 + type: integer + type: object models.ErpPurchaseTerminateReq: properties: remark: @@ -3570,6 +4078,118 @@ definitions: description: 每页展示条数 type: integer type: object + models.ReportByCommodityData: + properties: + amount: + description: 已执行金额 + type: number + count: + description: 已执行数量 + type: integer + erp_category_id: + description: 商品分类id + type: integer + erp_category_name: + description: 商品分类名称 + type: string + erp_commodity_id: + description: 商品id + type: integer + erp_commodity_name: + description: 商品名称 + type: string + non_execution_amount: + description: 未执行金额 + type: number + non_execution_count: + description: 未执行数量 + type: integer + order_id: + description: 采购订单id + type: integer + order_info: + description: 采购订单信息 + items: + $ref: '#/definitions/models.ErpCommodityPurchaseOrderData' + type: array + plan_amount: + description: 计划采购金额 + type: number + plan_count: + description: 计划采购数量 + type: integer + plan_price: + description: 计划采购单价 + type: number + price: + description: 已执行单价 + type: number + type: object + models.ReportByOrderData: + properties: + amount: + description: 已执行金额 + type: number + audit_time: + description: 审核时间 + type: string + auditor_id: + description: 审核人id + type: integer + auditor_name: + description: 审核人名称 + type: string + commodity_data: + description: 商品信息 + items: + $ref: '#/definitions/models.ErpPurchaseCommodityData' + type: array + count: + description: 已执行数量 + type: integer + erp_supplier_id: + description: 供应商id + type: integer + erp_supplier_name: + description: 供应商名称 + type: string + handler_id: + description: 经手人id + type: integer + handler_name: + description: 经手人名称 + type: string + maker_id: + description: 制单人id + type: integer + maker_name: + description: 制单人名称 + type: string + maker_time: + description: 制单时间 + type: string + price: + description: 执行单价 + type: number + purchase_type: + description: 单据类型:procure-采购 reject-退货 + type: string + remark: + description: 备注 + type: string + serial_number: + description: 单据编号 + type: string + state: + description: 1-待审核 2-待入库 3-待退货 4-已完成 5-已终止 + type: integer + store_id: + description: 门店id + type: integer + store_name: + description: 门店名称 + type: string + type: object models.RetailDetailTotalData: properties: amount: @@ -6366,6 +6986,94 @@ paths: tags: - 采购管理 - V1.3.0 + /api/v1/erp_purchase/report/commodity: + post: + consumes: + - application/json + parameters: + - description: 采购报表(按商品)模型 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.ErpPurchaseReportByCommodityReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.ErpPurchaseReportByCommodityResp' + summary: 采购报表(按商品) + tags: + - 采购报表 + - V1.3.0 + /api/v1/erp_purchase/report/detail: + post: + consumes: + - application/json + parameters: + - description: 采购明细模型 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.ErpPurchaseReportDetailReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.ErpPurchaseReportDetailResp' + summary: 采购明细 + tags: + - 采购报表 + - V1.3.0 + /api/v1/erp_purchase/report/order: + post: + consumes: + - application/json + parameters: + - description: 采购报表(按单)模型 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.ErpPurchaseReportByOrderReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.ErpPurchaseReportByOrderResp' + summary: 采购报表(按单) + tags: + - 采购报表 + - V1.3.0 + /api/v1/erp_purchase/report/supplier: + post: + consumes: + - application/json + parameters: + - description: 供应商采购汇总模型 + in: body + name: request + required: true + schema: + $ref: '#/definitions/models.ErpPurchaseReportBySupplierReq' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/models.ErpPurchaseReportBySupplierResp' + summary: 供应商采购汇总 + tags: + - 采购报表 + - V1.3.0 /api/v1/erp_purchase/terminate: post: consumes: