开发v1.4.1需求:

(1)优化采购需求接口,增加入参区分店员和采购视角;
(2)优化供应商接口,开户行改成列表;
This commit is contained in:
chenlin 2024-06-14 15:15:39 +08:00
parent f5b6024028
commit f754f9ccd2
14 changed files with 695 additions and 163 deletions

View File

@ -1,6 +1,7 @@
package basic
import (
"encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
@ -14,26 +15,27 @@ import (
)
type SupplierCreateRequest struct {
Name string `json:"name" validate:"required"` //供应商名称
Contact string `json:"contact" validate:"required"` //联系人
Tel string `json:"tel" validate:"required"` //手机号
Address string `json:"address" validate:"required"` //地址
OpeningBank string `json:"opening_bank" validate:"required"` //开户行
AccountHolder string `json:"account_holder"` //开户人
BankAccount string `json:"bank_account" validate:"required"` //银行卡号
PaymentCycle uint32 `json:"payment_cycle" validate:"required"` //支付周期
TaxNumber string `json:"tax_number"` //税点
Landline string `json:"landline"` //固话
Email string `json:"email"` //邮箱
CompanyWebsite string `json:"company_website"` //网站
Province string `json:"province" validate:"required"` //省份
City string `json:"city" validate:"required"` //城市
Area string `json:"area" validate:"required"` //地区
Name string `json:"name" validate:"required"` // 供应商名称
Contact string `json:"contact"` // 联系人
Tel string `json:"tel"` // 手机号
Address string `json:"address"` // 地址
OpeningBank string `json:"opening_bank"` // 开户行
AccountHolder string `json:"account_holder"` // 开户人
BankAccount string `json:"bank_account"` // 银行卡号
PaymentCycle uint32 `json:"payment_cycle" ` // 支付周期
TaxNumber string `json:"tax_number"` // 税点
Landline string `json:"landline"` // 固话
Email string `json:"email"` // 邮箱
CompanyWebsite string `json:"company_website"` // 网站
Province string `json:"province"` // 省份
City string `json:"city"` // 城市
Area string `json:"area"` // 地区
BankList []models.SupplierBankInfo `json:"bank_list" validate:"required"` // 开户银行信息列表
}
// SupplierCreate 添加供应商
// @Summary 创建供应商
// @Tags 供应商管理
// @Tags 供应商管理V1.4.1
// @Produce json
// @Accept json
// @Param request body SupplierCreateRequest true "供应商模型"
@ -72,6 +74,17 @@ func SupplierCreate(c *gin.Context) {
AccountHolder: req.AccountHolder,
}
if len(req.BankList) != 0 {
// 将 BankList 转换为 JSON 字符串
bankDataJSON, err := json.Marshal(req.BankList)
if err != nil {
tools.HasError(err, "数据解析失败", 500)
}
supplier.BankData = string(bankDataJSON)
} else {
supplier.BankData = ""
}
err = orm.Eloquent.Create(supplier).Error
if err != nil {
logger.Error("[SupplierCreate]:create supplier err", logger.Field("err", err))
@ -90,7 +103,7 @@ type SupplierUpdateRequest struct {
// SupplierUpdate 更新供应商
// @Summary 更新供应商
// @Tags 供应商管理
// @Tags 供应商管理V1.4.1
// @Produce json
// @Accept json
// @Param request body SupplierUpdateRequest true "供应商模型"
@ -119,6 +132,18 @@ func SupplierUpdate(c *gin.Context) {
Area: req.Area,
AccountHolder: req.AccountHolder,
}
if len(req.BankList) != 0 {
// 将 BankList 转换为 JSON 字符串
bankDataJSON, err := json.Marshal(req.BankList)
if err != nil {
tools.HasError(err, "数据解析失败", 500)
}
supplier.BankData = string(bankDataJSON)
} else {
supplier.BankData = ""
}
err := orm.Eloquent.Where("id", req.Id).Updates(supplier).Error
if err != nil {
logger.Error("update supplier err :", logger.Field("err", err), logger.Field("s", supplier))
@ -136,7 +161,7 @@ type SupplierListRequest struct {
// SupplierList 供应商列表
// @Summary 供应商列表
// @Tags 供应商管理
// @Tags 供应商管理V1.4.1
// @Produce json
// @Accept json
// @Param request body SupplierListRequest true "供应商查询模型"
@ -165,7 +190,7 @@ func SupplierList(c *gin.Context) {
// SupplierDetail 供应商详情
// @Summary 供应商详情
// @Tags 供应商管理
// @Tags 供应商管理V1.4.1
// @Produce json
// @Param id path int true "供应商id"
// @Success 200 {object} models.Supplier
@ -181,13 +206,18 @@ func SupplierDetail(c *gin.Context) {
return
}
if supplier.BankData != "" {
supplier.BankList = models.DeserializeBankData(supplier.BankData)
supplier.BankData = ""
}
app.OK(c, supplier, "ok")
return
}
// SupplierDel 删除供应商
// @Summary 删除供应商
// @Tags 供应商管理
// @Tags 供应商管理V1.4.1
// @Produce json
// @Param id path int true "供应商id"
// @Success 200 {object} app.Response

View File

@ -11,7 +11,7 @@ import (
// ErpDecisionReport 进销存报表
// @Summary 进销存报表
// @Tags 决策中心, V1.4.0
// @Tags 决策中心V1.4.0
// @Produce json
// @Accept json
// @Param request body models.ErpDecisionReportReq true "进销存报表模型"

View File

@ -281,8 +281,7 @@ func InventoryAllotDetail(c *gin.Context) {
// 校验入参门店是否包含在用户所有门店中,是否过期
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
if !models.CheckUserStore(allotOrder.ReceiveStoreId, sysUser) &&
!models.CheckUserStore(allotOrder.DeliverStoreId, sysUser) {
if !models.CheckUserStore(allotOrder.DeliverStoreId, sysUser) {
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"),
"操作失败:您没有该门店权限")
return

View File

@ -670,7 +670,7 @@ func ErpPurchaseExecute(c *gin.Context) {
// ErpPurchaseDemandCreate 创建采购需求
// @Summary 创建采购需求
// @Tags 采购需求, V1.3.0
// @Tags 采购需求V1.4.1
// @Produce json
// @Accept json
// @Param request body models.CreateErpPurchaseDemandReq true "创建采购需求模型"
@ -704,7 +704,7 @@ func ErpPurchaseDemandCreate(c *gin.Context) {
// ErpPurchaseDemandGet 获取采购需求
// @Summary 获取采购需求
// @Tags 采购需求, V1.3.0
// @Tags 采购需求V1.4.1
// @Produce json
// @Accept json
// @Param request body models.GetErpPurchaseDemandReq true "获取采购需求模型"
@ -731,7 +731,7 @@ func ErpPurchaseDemandGet(c *gin.Context) {
// ErpPurchaseDemandFinish 完成采购需求
// @Summary 完成采购需求
// @Tags 采购需求, V1.3.0
// @Tags 采购需求V1.4.1
// @Produce json
// @Accept json
// @Param request body models.FinishErpPurchaseDemandReq true "完成采购需求模型"

View File

@ -357,7 +357,7 @@ func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) {
}
// 按商品编号进行排序
SortCommodities(commodities)
SortCommoditiesAsc(commodities)
if m.IsExport == 1 {
listExport, err := ErpCommodityListExport(commodities)
@ -430,8 +430,8 @@ func SortStockCommodities(commodities []ErpStock) {
sort.SliceStable(commodities, less)
}
// SortCommodities 对商品数组进行排序
func SortCommodities(commodities []ErpCommodity) {
// SortCommoditiesAsc 对商品数组进行排序(升序)
func SortCommoditiesAsc(commodities []ErpCommodity) {
// 定义排序函数
less := func(i, j int) bool {
// 解析商品编号,提取分类编号和商品编号的数字部分
@ -460,6 +460,36 @@ func SortCommodities(commodities []ErpCommodity) {
sort.SliceStable(commodities, less)
}
// SortCommoditiesDesc 对商品数组进行排序(降序)
func SortCommoditiesDesc(commodities []ErpCommodity) {
// 定义排序函数
less := func(i, j int) bool {
// 解析商品编号,提取分类编号和商品编号的数字部分
catNumI, subCatNumI, threeSubCatNumI, itemNumI := parseSerialNumber(commodities[i].SerialNumber)
catNumJ, subCatNumJ, threeSubCatNumJ, itemNumJ := parseSerialNumber(commodities[j].SerialNumber)
// 按照分类编号从大到小排序
if catNumI != catNumJ {
return catNumI > catNumJ
}
// 如果分类编号相同,按照具体分类下的商品编号递增排序
if subCatNumI != subCatNumJ {
return subCatNumI > subCatNumJ
}
if threeSubCatNumI != threeSubCatNumJ {
return threeSubCatNumI > threeSubCatNumJ
}
// 如果具体分类编号也相同,按照商品编号递增排序
return itemNumI > itemNumJ
}
// 调用排序函数进行排序
sort.SliceStable(commodities, less)
}
// SortReportByAllotDataCommodities 对商品数组进行排序
func SortReportByAllotDataCommodities(commodities []ReportByAllotData) {
// 定义排序函数

View File

@ -391,17 +391,18 @@ type ErpOrderReceiptDataResp struct {
Time time.Time `json:"time"` // 审核时间
CollectS string `json:"collectS"` // 收银人员:制单人
ChandiseObj map[string]TableData `json:"chandiseObj"` // 商品信息
TotalRetailP float64 `json:"totalRetailP"` //零售价合计
TotalNum uint32 `json:"totalNum"` //数量合计
TotalAmount float64 `json:"totalAmount"` //零售优惠总金额
MembersAmount float64 `json:"membersAmount"` //会员优惠总金额
IntegrationAmount float64 `json:"integrationAmount"` //积分抵扣总金额
ToDealWith float64 `json:"toDealWith"` //零售价合计 - 零售优惠总额 - 会员优惠总和 - 积分抵扣总额
TotalRetailP float64 `json:"totalRetailP"` // 零售价合计
TotalNum uint32 `json:"totalNum"` // 数量合计
TotalAmount float64 `json:"totalAmount"` // 零售优惠总金额
MembersAmount float64 `json:"membersAmount"` // 会员优惠总金额
IntegrationAmount float64 `json:"integrationAmount"` // 积分抵扣总金额
ToDealWith float64 `json:"toDealWith"` // 零售价合计 - 零售优惠总额 - 会员优惠总和 - 积分抵扣总额
ModeOfPayment map[string]ErpOrderCashier `json:"modeOfPayment"` // 支付信息
ActualPayment float64 `json:"actualPayment"` //所有支付方式金额总和
Tel string `json:"tel"` //买家电话
StoreTel string `json:"storeTel"` //卖家电话
StoreAddress string `json:"storeAddress"` //店铺地址
ActualPayment float64 `json:"actualPayment"` // 所有支付方式金额总和
Tel string `json:"tel"` // 买家电话
StoreTel string `json:"storeTel"` // 卖家电话
StoreAddress string `json:"storeAddress"` // 店铺地址
Uid int `json:"uid"` // 用户id
}
type TableData struct {
@ -3723,6 +3724,7 @@ func QueryReceiptData(req *ErpOrderDeleteReq, c *gin.Context) (*ErpOrderReceiptD
resp.ModeOfPayment = cashierMap
resp.ActualPayment = order.TotalAmount
resp.Tel = order.Tel
resp.Uid = order.Uid
resp.StoreTel = storeInfo.Tel
resp.StoreAddress = storeInfo.Address

View File

@ -796,24 +796,26 @@ func (m *InventoryReportByAllotReq) ReportAllotList(c *gin.Context) (*InventoryR
// 按照商品编号排序
SortReportByAllotDataCommodities(summaryList)
// 计算分页所需的切片索引
startIndex := page * m.PageSize
endIndex := (page + 1) * m.PageSize
if endIndex > len(summaryList) {
endIndex = len(summaryList)
}
resp.Total = len(summaryList)
resp.TotalAllotCount = nTotalAllotCount
resp.TotalAllotAmount = nTotalAllotAmount
resp.List = summaryList[startIndex:endIndex]
if m.IsExport == 1 {
resp.List = summaryList
resp.ExportUrl, err = reportAllotExport(resp)
if err != nil {
return nil, err
}
resp.List = []ReportByAllotData{}
} else {
// 计算分页所需的切片索引
startIndex := page * m.PageSize
endIndex := (page + 1) * m.PageSize
if endIndex > len(summaryList) {
endIndex = len(summaryList)
}
resp.List = summaryList[startIndex:endIndex]
}
return resp, nil

View File

@ -241,6 +241,7 @@ type ErpPurchaseDemand struct {
ErpCommodityId uint32 `json:"erp_commodity_id" gorm:"index"` // 商品id
ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号
ErpCommodityName string `json:"erp_commodity_name" gorm:"index"` // 商品名称
ErpSupplierId uint32 `json:"erp_supplier_id" gorm:"index"` // 主供应商id
StoreId uint32 `json:"store_id"` // 门店id
StoreName string `json:"store_name"` // 门店名称
Count uint32 `json:"count"` // 需采购数量
@ -263,6 +264,7 @@ type ErpPurchaseDemandRemark struct {
// GetErpPurchaseDemandReq 获取采购需求入参
type GetErpPurchaseDemandReq struct {
ErpSupplierId uint32 `json:"erp_supplier_id"` // 主供应商id
ErpCategoryId uint32 `json:"erp_category_id"` // 商品分类id
ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号
ErpCommodityName string `json:"erp_commodity_name"` // 商品名称
@ -270,10 +272,15 @@ type GetErpPurchaseDemandReq struct {
PageIndex int `json:"pageIndex"` // 页码
PageSize int `json:"pageSize"` // 每页展示数据条数
IsExport uint32 `json:"is_export"` // 1-导出
CallType int `json:"call_type"` // 调用类型1-采购视角2-店员视角
SortField string `json:"sort_field"` // 排序字段:主供应商 erp_supplier_id 商品编号 erp_commodity_serial_number
SortType string `json:"sort_type"` // 排序类型desc 降序、asc 升序
}
// DemandData 采购需求数据
type DemandData struct {
ErpSupplierId uint32 `json:"erp_supplier_id"` // 主供应商id
ErpSupplierName string `json:"erp_supplier_name" gorm:"-"` // 主供应商名称
ErpCommodityID uint32 `json:"erp_commodity_id"` // 商品id
ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号
ErpCommodityName string `json:"erp_commodity_name"` // 商品名称
@ -307,6 +314,7 @@ type CreateErpPurchaseDemandReq struct {
ErpCommodityID uint32 `json:"erp_commodity_id"` // 商品id
ErpCommoditySerialNumber string `json:"erp_commodity_serial_number"` // 商品编号
ErpCommodityName string `json:"erp_commodity_name"` // 商品名称
ErpSupplierId uint32 `json:"erp_supplier_id"` // 主供应商id
Remark string `json:"remark"` // 备注
List []struct {
StoreID uint32 `json:"store_id"` // 门店id
@ -1118,7 +1126,7 @@ func InventoryErpPurchase(req *ErpPurchaseInventoryReq, c *gin.Context) error {
}
}
err = checkPurchaseInventory(req)
err = checkPurchaseInventory(req, true)
if err != nil {
logger.Error("checkPurchaseInventoryReq err:", logger.Field("err", err))
return err
@ -1490,7 +1498,7 @@ func InventoryErpPurchaseUpdateRejectStock(gdb *gorm.DB, list []ErpPurchaseInven
}
// 校验入参数据,执行数量是否超过总数;串码商品的串码是否重复
func checkPurchaseInventory(req *ErpPurchaseInventoryReq) error {
func checkPurchaseInventory(req *ErpPurchaseInventoryReq, imeiCheckFlag bool) error {
// 查询现有的零售订单信息
var commodities []ErpPurchaseCommodity
err := orm.Eloquent.Table("erp_purchase_commodity").Where("erp_purchase_order_id = ?", req.ErpPurchaseOrderId).Find(&commodities).Error
@ -1506,6 +1514,12 @@ func checkPurchaseInventory(req *ErpPurchaseInventoryReq) error {
}
countMap[inventory.ErpCommodityId] += inventory.Count
if imeiCheckFlag {
if inventory.IMEIType != NoIMEICommodity && inventory.IMEI == "" {
return fmt.Errorf("商品[%s]串码为空", inventory.ErpCommodityName)
}
}
// 如果该商品是串码商品,判断其串码是否会重复
if inventory.IMEI != "" {
exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_stock_commodity WHERE FIND_IN_SET(%s, imei) > 0", inventory.IMEI))
@ -1614,7 +1628,7 @@ func ExecuteErpPurchase(req *ErpPurchaseExecuteReq, c *gin.Context) (*ErpPurchas
PurchaseType: req.PurchaseType,
Inventories: req.Inventories,
}
err = checkPurchaseInventory(reqParam)
err = checkPurchaseInventory(reqParam, false)
if err != nil {
logger.Error("checkPurchaseInventoryReq err:", logger.Field("err", err))
return nil, err
@ -1698,6 +1712,7 @@ func CreateErpPurchaseDemand(req *CreateErpPurchaseDemandReq, sysUser *SysUser)
demandInfo.ErpCommodityId = req.ErpCommodityID
demandInfo.ErpCommoditySerialNumber = req.ErpCommoditySerialNumber
demandInfo.ErpCommodityName = req.ErpCommodityName
demandInfo.ErpSupplierId = req.ErpSupplierId
demandInfo.State = ErpDemandStateWait // 待采购
for _, v := range req.List {
demandInfo.StoreId = v.StoreID
@ -2460,6 +2475,9 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
if req.ErpCommodityName != "" {
qs = qs.Where("name=?", req.ErpCommodityName)
}
if req.ErpSupplierId != 0 {
qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId)
}
var count int64
if err := qs.Count(&count).Error; err != nil {
@ -2473,8 +2491,46 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
return resp, err
}
// 按商品编号进行排序
SortCommodities(commodities)
if req.SortField == "erp_commodity_serial_number" {
switch req.SortType {
case "desc":
SortCommoditiesDesc(commodities)
case "asc":
SortCommoditiesAsc(commodities)
default:
SortCommoditiesAsc(commodities)
}
} else {
// 商品编号排序
SortCommoditiesAsc(commodities)
}
if req.CallType != 2 {
if req.SortField == "erp_supplier_id" {
switch req.SortType {
case "desc":
// 排序规则主供应商id大
sort.Slice(commodities, func(i, j int) bool {
return commodities[i].ErpSupplierId > commodities[j].ErpSupplierId
})
case "asc":
// 排序规则主供应商id小
sort.Slice(commodities, func(i, j int) bool {
return commodities[i].ErpSupplierId < commodities[j].ErpSupplierId
})
default:
// 排序规则主供应商id小
sort.Slice(commodities, func(i, j int) bool {
return commodities[i].ErpSupplierId < commodities[j].ErpSupplierId
})
}
} else {
// 排序规则主供应商id小
sort.Slice(commodities, func(i, j int) bool {
return commodities[i].ErpSupplierId < commodities[j].ErpSupplierId
})
}
}
// 批量查询门店信息
stores, err := GetOnlineStores(c)
@ -2505,7 +2561,11 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*Get
if len(demandDataList) == 0 {
return nil, errors.New("未查询到数据")
}
resp.ExportUrl, err = demandDataExport(demandDataList)
if req.CallType == 2 { // 店员视角
resp.ExportUrl, err = demandDataExportOnShopAssistant(demandDataList)
} else { // 采购视角
resp.ExportUrl, err = demandDataExport(demandDataList)
}
if err != nil {
return nil, err
}
@ -2572,6 +2632,9 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge
if req.ErpCommodityName != "" {
qs = qs.Where("name=?", req.ErpCommodityName)
}
if req.ErpSupplierId != 0 {
qs = qs.Where("erp_supplier_id=?", req.ErpSupplierId)
}
var count int64
if err := qs.Count(&count).Error; err != nil {
@ -2580,16 +2643,20 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge
}
var commodities []ErpCommodity
if req.IsExport == 1 { // 导出excel
err := qs.Order("id DESC").Find(&commodities).Error
if err != nil && err != RecordNotFound {
return resp, err
}
} else {
err := qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&commodities).Error
if err != nil && err != RecordNotFound {
return resp, err
}
//if req.IsExport == 1 { // 导出excel
// err := qs.Order("id DESC").Find(&commodities).Error
// if err != nil && err != RecordNotFound {
// return resp, err
// }
//} else {
// err := qs.Order("id DESC").Offset(page * req.PageSize).Limit(req.PageSize).Find(&commodities).Error
// if err != nil && err != RecordNotFound {
// return resp, err
// }
//}
err = qs.Order("id DESC").Find(&commodities).Error
if err != nil && err != RecordNotFound {
return resp, err
}
// 匹配商品id有则继续查询返回数据没有则不返回
@ -2606,6 +2673,48 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge
if len(matchedCommodities) == 0 {
resp.List = nil
} else {
// 排序
if req.SortField == "erp_commodity_serial_number" {
switch req.SortType {
case "desc":
SortCommoditiesDesc(matchedCommodities)
case "asc":
SortCommoditiesAsc(matchedCommodities)
default:
SortCommoditiesAsc(matchedCommodities)
}
} else {
// 商品编号排序
SortCommoditiesAsc(matchedCommodities)
}
if req.CallType != 2 {
if req.SortField == "erp_supplier_id" {
switch req.SortType {
case "desc":
// 排序规则主供应商id大
sort.Slice(matchedCommodities, func(i, j int) bool {
return matchedCommodities[i].ErpSupplierId > matchedCommodities[j].ErpSupplierId
})
case "asc":
// 排序规则主供应商id小
sort.Slice(matchedCommodities, func(i, j int) bool {
return matchedCommodities[i].ErpSupplierId < matchedCommodities[j].ErpSupplierId
})
default:
// 排序规则主供应商id小
sort.Slice(matchedCommodities, func(i, j int) bool {
return matchedCommodities[i].ErpSupplierId < matchedCommodities[j].ErpSupplierId
})
}
} else {
// 排序规则主供应商id小
sort.Slice(matchedCommodities, func(i, j int) bool {
return matchedCommodities[i].ErpSupplierId < matchedCommodities[j].ErpSupplierId
})
}
}
// 批量查询门店信息
stores, err := GetOnlineStores(c)
if err != nil {
@ -2635,12 +2744,22 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*Ge
if len(demandDataList) == 0 {
return nil, errors.New("未查询到数据")
}
resp.ExportUrl, err = demandDataExport(demandDataList)
if req.CallType == 2 { // 店员视角
resp.ExportUrl, err = demandDataExportOnShopAssistant(demandDataList)
} else { // 采购视角
resp.ExportUrl, err = demandDataExport(demandDataList)
}
if err != nil {
return nil, err
}
} else {
resp.List = demandDataList
// 计算分页所需的切片索引
startIndex := page * req.PageSize
endIndex := (page + 1) * req.PageSize
if endIndex > len(demandDataList) {
endIndex = len(demandDataList)
}
resp.List = demandDataList[startIndex:endIndex]
resp.Total = int64(len(matchedCommodities))
}
}
@ -2660,6 +2779,8 @@ func convertToDemandData(commodity ErpCommodity, stores []Store) (DemandData, er
}
demandData := DemandData{
ErpSupplierId: commodity.ErpSupplierId,
ErpSupplierName: commodity.ErpSupplierName,
ErpCommodityID: commodity.ID,
ErpCommoditySerialNumber: commodity.SerialNumber,
ErpCommodityName: commodity.Name,
@ -3014,7 +3135,7 @@ func UpdateRetailPrice(begin *gorm.DB, commodityId uint32, retailPrice float64)
return nil
}
// 导出采购需求excel
// 导出采购需求excel-采购视角
func demandDataExport(list []DemandData) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
@ -3024,7 +3145,7 @@ func demandDataExport(list []DemandData) (string, error) {
fmt.Println("url fileName:", url+fileName)
// 组合标题栏第一行数据
title1 := []interface{}{"品编号", "商品名称", "商品分类", "指导零售价", "最近采购价"}
title1 := []interface{}{"主供应商", "商品名称", "商品编号", "商品分类", "指导零售价", "最近采购价"}
storeCount := len(list[0].StoreList)
var mergeCells []string // 存储需要合并的单元格范围
@ -3036,8 +3157,8 @@ func demandDataExport(list []DemandData) (string, error) {
for i := 0; i < storeCount; i++ {
// 计算每个商户名称的起始和结束单元格
startCol, _ := excelize.ColumnNumberToName(6 + i*3) // 从第6列开始每个商户占3列
endCol, _ := excelize.ColumnNumberToName(8 + i*3)
startCol, _ := excelize.ColumnNumberToName(7 + i*3) // 从第7列开始每个商户占3列
endCol, _ := excelize.ColumnNumberToName(9 + i*3)
mergeCell := startCol + "1:" + endCol + "1"
mergeCells = append(mergeCells, mergeCell)
}
@ -3053,7 +3174,7 @@ func demandDataExport(list []DemandData) (string, error) {
}
// 组合标题栏第二行数据
title2 := []interface{}{"品编号", "商品名称", "商品分类", "指导零售价", "最近采购价"}
title2 := []interface{}{"主供应商", "商品名称", "商品编号", "商品分类", "指导零售价", "最近采购价"}
for _, _ = range list[0].StoreList {
title2 = append(title2, "上月销售数")
title2 = append(title2, "库存数量")
@ -3083,8 +3204,9 @@ func demandDataExport(list []DemandData) (string, error) {
nExcelStartRow := 0
for i := 0; i < len(list); i++ {
row = []interface{}{
list[i].ErpCommoditySerialNumber, // 商品编号
list[i].ErpSupplierName, // 主供应商名称
list[i].ErpCommodityName, // 商品名称
list[i].ErpCommoditySerialNumber, // 商品编号
list[i].ErpCategoryName, // 商品分类名称
list[i].RetailPrice, // 指导零售价
list[i].LastWholesalePrice, // 最近采购价
@ -3111,7 +3233,7 @@ func demandDataExport(list []DemandData) (string, error) {
}
// 合并 "需采购总数量""需采购总金额" 和 "备注" 列的单元格
strTotalCountCol, strTotalAmountCol, strRemarkCol := computeExtraColumns("E", storeCount)
strTotalCountCol, strTotalAmountCol, strRemarkCol := computeExtraColumns("F", storeCount)
_ = file.MergeCell(fSheet, strTotalCountCol+"1", strTotalCountCol+"2")
_ = file.MergeCell(fSheet, strTotalAmountCol+"1", strTotalAmountCol+"2")
_ = file.MergeCell(fSheet, strRemarkCol+"1", strRemarkCol+"2")
@ -3132,6 +3254,123 @@ func demandDataExport(list []DemandData) (string, error) {
_ = file.MergeCell(fSheet, "C1", "C2")
_ = file.MergeCell(fSheet, "D1", "D2")
_ = file.MergeCell(fSheet, "E1", "E2")
_ = file.MergeCell(fSheet, "F1", "F2")
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
}
// 导出采购需求excel-店员视角
func demandDataExportOnShopAssistant(list []DemandData) (string, error) {
file := excelize.NewFile()
fSheet := "Sheet1"
url := ExportUrl
fileName := time.Now().Format(TimeFormat) + "采购需求" + ".xlsx"
fmt.Println("url fileName:", url+fileName)
// 组合标题栏第一行数据
title1 := []interface{}{"商品名称", "商品编号", "商品分类", "指导零售价"}
storeCount := len(list[0].StoreList)
var mergeCells []string // 存储需要合并的单元格范围
for _, v := range list[0].StoreList {
for i := 0; i < 3; i++ {
title1 = append(title1, v.StoreName)
}
}
for i := 0; i < storeCount; i++ {
// 计算每个商户名称的起始和结束单元格
startCol, _ := excelize.ColumnNumberToName(5 + i*3) // 从第5列开始每个商户占3列
endCol, _ := excelize.ColumnNumberToName(7 + i*3)
mergeCell := startCol + "1:" + endCol + "1"
mergeCells = append(mergeCells, mergeCell)
}
title1 = append(title1, "备注")
// 合并单元格
for _, mergeCell := range mergeCells {
startCell, endCell := splitMergeCellCoordinates(mergeCell)
_ = file.MergeCell(fSheet, startCell, endCell)
}
// 组合标题栏第二行数据
title2 := []interface{}{"商品名称", "商品编号", "商品分类", "指导零售价"}
for _, _ = range list[0].StoreList {
title2 = append(title2, "上月销售数")
title2 = append(title2, "库存数量")
title2 = append(title2, "需采购数")
}
title2 = append(title2, "备注")
for i, _ := range title1 {
cell, _ := excelize.CoordinatesToCellName(1+i, 1)
err := file.SetCellValue(fSheet, cell, title1[i])
if err != nil {
logger.Error("file set value err:", logger.Field("err", err))
}
}
for i, _ := range title2 {
cell, _ := excelize.CoordinatesToCellName(1+i, 2)
err := file.SetCellValue(fSheet, cell, title2[i])
if err != nil {
logger.Error("file set value err:", logger.Field("err", err))
}
}
var row []interface{}
nExcelStartRow := 0
for i := 0; i < len(list); i++ {
row = []interface{}{
list[i].ErpCommodityName, // 商品名称
list[i].ErpCommoditySerialNumber, // 商品编号
list[i].ErpCategoryName, // 商品分类名称
list[i].RetailPrice, // 指导零售价
}
for _, v := range list[i].StoreList {
row = append(row, v.LastMonthSales) // 上月销售数
row = append(row, v.StockCount) // 库存数量
row = append(row, v.NeedCount) // 需采购数
}
row = append(row, list[i].Remark) // 备注
for j, _ := range row {
cell, _ := excelize.CoordinatesToCellName(1+j, nExcelStartRow+3)
err := file.SetCellValue(fSheet, cell, row[j])
if err != nil {
logger.Error("file set value err:", logger.Field("err", err))
}
}
nExcelStartRow++
}
// 合并 "需采购总数量""需采购总金额" 和 "备注" 列的单元格
strTotalCountCol, _, _ := computeExtraColumns("D", storeCount)
_ = file.MergeCell(fSheet, strTotalCountCol+"1", strTotalCountCol+"2")
// 设置所有单元格的样式: 居中、加边框
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}]}`)
endRow := fmt.Sprintf(strTotalCountCol+"%d", nExcelStartRow+2)
// 应用样式到整个表格
_ = file.SetCellStyle("Sheet1", "A1", endRow, style)
_ = file.MergeCell(fSheet, "A1", "A2")
_ = file.MergeCell(fSheet, "B1", "B2")
_ = file.MergeCell(fSheet, "C1", "C2")
_ = file.MergeCell(fSheet, "D1", "D2")
fmt.Println("save fileName:", config.ExportConfig.Path+fileName)
if err := file.SaveAs(config.ExportConfig.Path + fileName); err != nil {
@ -5048,26 +5287,27 @@ func GetReportBySupplier(req *ErpPurchaseReportBySupplierReq, c *gin.Context) (
return false // 默认情况下相等
})
// 分页处理
startIdx := (resp.PageIndex - 1) * resp.PageSize
endIdx := resp.PageIndex * resp.PageSize
// 确保不超出索引范围
if startIdx >= len(mergedData) {
resp.List = []PurchaseReportData{}
} else if endIdx > len(mergedData) {
resp.List = mergedData[startIdx:]
} else {
resp.List = mergedData[startIdx:endIdx]
}
if req.IsExport == 1 {
resp.List = mergedData
filePath, err := reportBySupplierExport(resp)
if err != nil {
return nil, err
}
resp = &ErpPurchaseReportBySupplierResp{}
resp.ExportUrl = filePath
} else {
// 分页处理
startIdx := (resp.PageIndex - 1) * resp.PageSize
endIdx := resp.PageIndex * resp.PageSize
// 确保不超出索引范围
if startIdx >= len(mergedData) {
resp.List = []PurchaseReportData{}
} else if endIdx > len(mergedData) {
resp.List = mergedData[startIdx:]
} else {
resp.List = mergedData[startIdx:endIdx]
}
}
return resp, nil

View File

@ -114,7 +114,8 @@ func (m *GetStoreReq) List() ([]Store, int64, error) {
// }
// m.CooperativeBusinessId = sysUser.CooperativeBusinessId
//}
qs := orm.Eloquent.Table("store").Where("member_service = ?", 1)
//qs := orm.Eloquent.Table("store").Where("member_service = ?", 1)
qs := orm.Eloquent.Table("store")
if m.Name != "" {
qs = qs.Where("name LIKE '%" + m.Name + "%'")
}

View File

@ -11,23 +11,32 @@ import (
type Supplier struct {
Model
Number string `json:"number" gorm:"index"` //编号
Name string `json:"name"` //供应商名称
Contact string `json:"contact"` //联系人
Tel string `json:"tel"` //手机号
Province string `json:"province"` //省
City string `json:"city"` //市
Area string `json:"area"` //区
Address string `json:"address"` //详细地址
AccountHolder string `json:"account_holder"` //开户人
OpeningBank string `json:"opening_bank"` //开户银行
BankAccount string `json:"bank_account"` //银行账号
PaymentCycle uint32 `json:"payment_cycle"` //支付周期
TaxNumber string `json:"tax_number"` //税号
Landline string `json:"landline"` //固定电话
Email string `json:"email"` //邮件
CompanyWebsite string `json:"company_website"` //网站
CooperativeBusinessId uint32 `json:"cooperative_business_id"` //合作商id
Number string `json:"number" gorm:"index"` // 编号
Name string `json:"name"` // 供应商名称
Province string `json:"province"` // 省
City string `json:"city"` // 市
Area string `json:"area"` // 区
Address string `json:"address"` // 详细地址
Contact string `json:"contact"` // 联系人
Tel string `json:"tel"` // 手机号
Landline string `json:"landline"` // 座机电话
Email string `json:"email"` // 电子邮件
CompanyWebsite string `json:"company_website"` // 公司网址
PaymentCycle uint32 `json:"payment_cycle"` // 付款周期/天
TaxNumber string `json:"tax_number"` // 税号
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
AccountHolder string `json:"account_holder"` // 开户人
OpeningBank string `json:"opening_bank"` // 开户银行
BankAccount string `json:"bank_account"` // 银行账号
BankData string `gorm:"type:json" json:"bank_data,omitempty"` // 开户银行信息
BankList []SupplierBankInfo `json:"bank_list" gorm:"-" ` // 开户银行信息列表
}
// SupplierBankInfo 开户银行信息列表
type SupplierBankInfo struct {
AccountHolder string `json:"account_holder"` // 开户人
OpeningBank string `json:"opening_bank"` // 开户银行
BankAccount string `json:"bank_account"` // 银行账号
}
func (s *Supplier) TableName() string {
@ -75,5 +84,13 @@ func GetSupplier(req GetSupplierRequest) ([]*Supplier, error) {
return nil, err
}
// 反序列化 BankData
for i, v := range list {
if list[i].BankData != "" {
list[i].BankList = DeserializeBankData(v.BankData)
list[i].BankData = ""
}
}
return list, nil
}

View File

@ -340,6 +340,16 @@ func deserializeStoreData(storeData string) []StoreInfo {
return StoreData
}
// DeserializeBankData 反序列化 BankData
func DeserializeBankData(bankData string) []SupplierBankInfo {
var BankData []SupplierBankInfo
if err := json.Unmarshal([]byte(bankData), &BankData); err != nil {
// 可以根据实际情况处理反序列化失败的情况
log.Println("反序列化 BankData 失败:", err)
}
return BankData
}
// 加密
func (e *SysUser) Encrypt() (err error) {
if e.Password == "" {

View File

@ -1151,8 +1151,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"决策中心",
"V1.4.0"
"决策中心V1.4.0"
],
"summary": "进销存报表",
"parameters": [
@ -2286,8 +2285,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "创建采购需求",
"parameters": [
@ -2320,8 +2318,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "完成采购需求",
"parameters": [
@ -2354,8 +2351,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "获取采购需求",
"parameters": [
@ -5246,7 +5242,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "创建供应商",
"parameters": [
@ -5276,7 +5272,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "删除供应商",
"parameters": [
@ -5304,7 +5300,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "供应商详情",
"parameters": [
@ -5335,7 +5331,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "供应商列表",
"parameters": [
@ -5371,7 +5367,7 @@ const docTemplate = `{
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "更新供应商",
"parameters": [
@ -6300,6 +6296,13 @@ const docTemplate = `{
"description": "银行卡号",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "城市",
"type": "string"
@ -6391,6 +6394,13 @@ const docTemplate = `{
"description": "银行卡号",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "城市",
"type": "string"
@ -7432,6 +7442,10 @@ const docTemplate = `{
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"list": {
"type": "array",
"items": {
@ -7648,6 +7662,10 @@ const docTemplate = `{
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"last_wholesale_price": {
"description": "最近采购价",
"type": "number"
@ -9007,11 +9025,11 @@ const docTemplate = `{
},
"staff_cost_price": {
"description": "员工成本价加价加价50不是加价后的价格",
"type": "integer"
"type": "number"
},
"staff_price": {
"description": "员工成本价",
"type": "integer"
"type": "number"
},
"staff_profit": {
"description": "员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价",
@ -9023,7 +9041,7 @@ const docTemplate = `{
},
"wholesale_price": {
"description": "指导采购价",
"type": "integer"
"type": "number"
}
}
},
@ -9320,6 +9338,10 @@ const docTemplate = `{
"totalRetailP": {
"description": "零售价合计",
"type": "number"
},
"uid": {
"description": "用户id",
"type": "integer"
}
}
},
@ -11545,6 +11567,10 @@ const docTemplate = `{
"models.GetErpPurchaseDemandReq": {
"type": "object",
"properties": {
"call_type": {
"description": "调用类型1-采购视角2-店员视角",
"type": "integer"
},
"erp_category_id": {
"description": "商品分类id",
"type": "integer"
@ -11557,6 +11583,10 @@ const docTemplate = `{
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"hide_flag": {
"description": "隐藏标记默认关闭ON-开启隐藏无采购需求的商品OFF-关闭,展示所有",
"type": "string"
@ -11572,6 +11602,14 @@ const docTemplate = `{
"pageSize": {
"description": "每页展示数据条数",
"type": "integer"
},
"sort_field": {
"description": "排序字段:主供应商 erp_supplier_id 商品编号 erp_commodity_serial_number",
"type": "string"
},
"sort_type": {
"description": "排序类型desc 降序、asc 升序",
"type": "string"
}
}
},
@ -12996,6 +13034,10 @@ const docTemplate = `{
"description": "描述",
"type": "string"
},
"erp_order_id": {
"description": "零售订单id",
"type": "integer"
},
"event": {
"description": "事件",
"type": "string"
@ -14537,6 +14579,10 @@ const docTemplate = `{
"description": "商品名称",
"type": "string"
},
"commodity_serial_number": {
"description": "商品编号",
"type": "string"
},
"count": {
"description": "数量",
"type": "integer"
@ -15045,12 +15091,23 @@ const docTemplate = `{
"description": "银行账号",
"type": "string"
},
"bank_data": {
"description": "开户银行信息",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "市",
"type": "string"
},
"company_website": {
"description": "网站",
"description": "公司网址",
"type": "string"
},
"contact": {
@ -15066,7 +15123,7 @@ const docTemplate = `{
"type": "string"
},
"email": {
"description": "邮件",
"description": "电子邮件",
"type": "string"
},
"id": {
@ -15074,7 +15131,7 @@ const docTemplate = `{
"type": "integer"
},
"landline": {
"description": "固定电话",
"description": "座机电话",
"type": "string"
},
"name": {
@ -15090,7 +15147,7 @@ const docTemplate = `{
"type": "string"
},
"payment_cycle": {
"description": "付周期",
"description": "周期/天",
"type": "integer"
},
"province": {
@ -15107,6 +15164,23 @@ const docTemplate = `{
}
}
},
"models.SupplierBankInfo": {
"type": "object",
"properties": {
"account_holder": {
"description": "开户人",
"type": "string"
},
"bank_account": {
"description": "银行账号",
"type": "string"
},
"opening_bank": {
"description": "开户银行",
"type": "string"
}
}
},
"models.SysCategory": {
"type": "object",
"properties": {

View File

@ -1140,8 +1140,7 @@
"application/json"
],
"tags": [
"决策中心",
"V1.4.0"
"决策中心V1.4.0"
],
"summary": "进销存报表",
"parameters": [
@ -2275,8 +2274,7 @@
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "创建采购需求",
"parameters": [
@ -2309,8 +2307,7 @@
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "完成采购需求",
"parameters": [
@ -2343,8 +2340,7 @@
"application/json"
],
"tags": [
"采购需求",
"V1.3.0"
"采购需求V1.4.1"
],
"summary": "获取采购需求",
"parameters": [
@ -5235,7 +5231,7 @@
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "创建供应商",
"parameters": [
@ -5265,7 +5261,7 @@
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "删除供应商",
"parameters": [
@ -5293,7 +5289,7 @@
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "供应商详情",
"parameters": [
@ -5324,7 +5320,7 @@
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "供应商列表",
"parameters": [
@ -5360,7 +5356,7 @@
"application/json"
],
"tags": [
"供应商管理"
"供应商管理V1.4.1"
],
"summary": "更新供应商",
"parameters": [
@ -6289,6 +6285,13 @@
"description": "银行卡号",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "城市",
"type": "string"
@ -6380,6 +6383,13 @@
"description": "银行卡号",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "城市",
"type": "string"
@ -7421,6 +7431,10 @@
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"list": {
"type": "array",
"items": {
@ -7637,6 +7651,10 @@
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"last_wholesale_price": {
"description": "最近采购价",
"type": "number"
@ -8996,11 +9014,11 @@
},
"staff_cost_price": {
"description": "员工成本价加价加价50不是加价后的价格",
"type": "integer"
"type": "number"
},
"staff_price": {
"description": "员工成本价",
"type": "integer"
"type": "number"
},
"staff_profit": {
"description": "员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价",
@ -9012,7 +9030,7 @@
},
"wholesale_price": {
"description": "指导采购价",
"type": "integer"
"type": "number"
}
}
},
@ -9309,6 +9327,10 @@
"totalRetailP": {
"description": "零售价合计",
"type": "number"
},
"uid": {
"description": "用户id",
"type": "integer"
}
}
},
@ -11534,6 +11556,10 @@
"models.GetErpPurchaseDemandReq": {
"type": "object",
"properties": {
"call_type": {
"description": "调用类型1-采购视角2-店员视角",
"type": "integer"
},
"erp_category_id": {
"description": "商品分类id",
"type": "integer"
@ -11546,6 +11572,10 @@
"description": "商品编号",
"type": "string"
},
"erp_supplier_id": {
"description": "主供应商id",
"type": "integer"
},
"hide_flag": {
"description": "隐藏标记默认关闭ON-开启隐藏无采购需求的商品OFF-关闭,展示所有",
"type": "string"
@ -11561,6 +11591,14 @@
"pageSize": {
"description": "每页展示数据条数",
"type": "integer"
},
"sort_field": {
"description": "排序字段:主供应商 erp_supplier_id 商品编号 erp_commodity_serial_number",
"type": "string"
},
"sort_type": {
"description": "排序类型desc 降序、asc 升序",
"type": "string"
}
}
},
@ -12985,6 +13023,10 @@
"description": "描述",
"type": "string"
},
"erp_order_id": {
"description": "零售订单id",
"type": "integer"
},
"event": {
"description": "事件",
"type": "string"
@ -14526,6 +14568,10 @@
"description": "商品名称",
"type": "string"
},
"commodity_serial_number": {
"description": "商品编号",
"type": "string"
},
"count": {
"description": "数量",
"type": "integer"
@ -15034,12 +15080,23 @@
"description": "银行账号",
"type": "string"
},
"bank_data": {
"description": "开户银行信息",
"type": "string"
},
"bank_list": {
"description": "开户银行信息列表",
"type": "array",
"items": {
"$ref": "#/definitions/models.SupplierBankInfo"
}
},
"city": {
"description": "市",
"type": "string"
},
"company_website": {
"description": "网站",
"description": "公司网址",
"type": "string"
},
"contact": {
@ -15055,7 +15112,7 @@
"type": "string"
},
"email": {
"description": "邮件",
"description": "电子邮件",
"type": "string"
},
"id": {
@ -15063,7 +15120,7 @@
"type": "integer"
},
"landline": {
"description": "固定电话",
"description": "座机电话",
"type": "string"
},
"name": {
@ -15079,7 +15136,7 @@
"type": "string"
},
"payment_cycle": {
"description": "付周期",
"description": "周期/天",
"type": "integer"
},
"province": {
@ -15096,6 +15153,23 @@
}
}
},
"models.SupplierBankInfo": {
"type": "object",
"properties": {
"account_holder": {
"description": "开户人",
"type": "string"
},
"bank_account": {
"description": "银行账号",
"type": "string"
},
"opening_bank": {
"description": "开户银行",
"type": "string"
}
}
},
"models.SysCategory": {
"type": "object",
"properties": {

View File

@ -135,6 +135,11 @@ definitions:
bank_account:
description: 银行卡号
type: string
bank_list:
description: 开户银行信息列表
items:
$ref: '#/definitions/models.SupplierBankInfo'
type: array
city:
description: 城市
type: string
@ -203,6 +208,11 @@ definitions:
bank_account:
description: 银行卡号
type: string
bank_list:
description: 开户银行信息列表
items:
$ref: '#/definitions/models.SupplierBankInfo'
type: array
city:
description: 城市
type: string
@ -968,6 +978,9 @@ definitions:
erp_commodity_serial_number:
description: 商品编号
type: string
erp_supplier_id:
description: 主供应商id
type: integer
list:
items:
properties:
@ -1126,6 +1139,9 @@ definitions:
erp_commodity_serial_number:
description: 商品编号
type: string
erp_supplier_id:
description: 主供应商id
type: integer
last_wholesale_price:
description: 最近采购价
type: number
@ -2120,10 +2136,10 @@ definitions:
type: number
staff_cost_price:
description: 员工成本价加价加价50不是加价后的价格
type: integer
type: number
staff_price:
description: 员工成本价
type: integer
type: number
staff_profit:
description: 员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价
type: number
@ -2132,7 +2148,7 @@ definitions:
type: number
wholesale_price:
description: 指导采购价
type: integer
type: number
type: object
models.ErpOrderCreateReq:
properties:
@ -2349,6 +2365,9 @@ definitions:
totalRetailP:
description: 零售价合计
type: number
uid:
description: 用户id
type: integer
type: object
models.ErpOrderRetailDetailReq:
properties:
@ -3962,6 +3981,9 @@ definitions:
type: object
models.GetErpPurchaseDemandReq:
properties:
call_type:
description: 调用类型1-采购视角2-店员视角
type: integer
erp_category_id:
description: 商品分类id
type: integer
@ -3971,6 +3993,9 @@ definitions:
erp_commodity_serial_number:
description: 商品编号
type: string
erp_supplier_id:
description: 主供应商id
type: integer
hide_flag:
description: 隐藏标记默认关闭ON-开启隐藏无采购需求的商品OFF-关闭,展示所有
type: string
@ -3983,6 +4008,12 @@ definitions:
pageSize:
description: 每页展示数据条数
type: integer
sort_field:
description: 排序字段:主供应商 erp_supplier_id 商品编号 erp_commodity_serial_number
type: string
sort_type:
description: 排序类型desc 降序、asc 升序
type: string
type: object
models.GetErpPurchaseDemandResp:
properties:
@ -5007,6 +5038,9 @@ definitions:
describe:
description: 描述
type: string
erp_order_id:
description: 零售订单id
type: integer
event:
description: 事件
type: string
@ -6108,6 +6142,9 @@ definitions:
commodity_name:
description: 商品名称
type: string
commodity_serial_number:
description: 商品编号
type: string
count:
description: 数量
type: integer
@ -6476,11 +6513,19 @@ definitions:
bank_account:
description: 银行账号
type: string
bank_data:
description: 开户银行信息
type: string
bank_list:
description: 开户银行信息列表
items:
$ref: '#/definitions/models.SupplierBankInfo'
type: array
city:
description:
type: string
company_website:
description: 网站
description: 公司网址
type: string
contact:
description: 联系人
@ -6492,13 +6537,13 @@ definitions:
description: 创建时间
type: string
email:
description: 邮件
description: 电子邮件
type: string
id:
description: 数据库记录编号
type: integer
landline:
description: 固定电话
description: 座机电话
type: string
name:
description: 供应商名称
@ -6510,7 +6555,7 @@ definitions:
description: 开户银行
type: string
payment_cycle:
description: 付周期
description: 周期/天
type: integer
province:
description:
@ -6522,6 +6567,18 @@ definitions:
description: 手机号
type: string
type: object
models.SupplierBankInfo:
properties:
account_holder:
description: 开户人
type: string
bank_account:
description: 银行账号
type: string
opening_bank:
description: 开户银行
type: string
type: object
models.SysCategory:
properties:
createBy:
@ -8402,8 +8459,7 @@ paths:
$ref: '#/definitions/models.ErpDecisionReportResp'
summary: 进销存报表
tags:
- 决策中心
- V1.4.0
- 决策中心V1.4.0
/api/v1/dept:
post:
consumes:
@ -9119,8 +9175,7 @@ paths:
$ref: '#/definitions/app.Response'
summary: 创建采购需求
tags:
- 采购需求
- V1.3.0
- 采购需求V1.4.1
/api/v1/erp_purchase/demand/finish:
post:
consumes:
@ -9141,8 +9196,7 @@ paths:
$ref: '#/definitions/app.Response'
summary: 完成采购需求
tags:
- 采购需求
- V1.3.0
- 采购需求V1.4.1
/api/v1/erp_purchase/demand/get:
post:
consumes:
@ -9163,8 +9217,7 @@ paths:
$ref: '#/definitions/models.GetErpPurchaseDemandResp'
summary: 获取采购需求
tags:
- 采购需求
- V1.3.0
- 采购需求V1.4.1
/api/v1/erp_purchase/detail:
post:
consumes:
@ -11004,7 +11057,7 @@ paths:
$ref: '#/definitions/models.Supplier'
summary: 创建供应商
tags:
- 供应商管理
- 供应商管理V1.4.1
/api/v1/supplier/delete/{id}:
delete:
parameters:
@ -11022,7 +11075,7 @@ paths:
$ref: '#/definitions/app.Response'
summary: 删除供应商
tags:
- 供应商管理
- 供应商管理V1.4.1
/api/v1/supplier/detail/{id}:
get:
parameters:
@ -11040,7 +11093,7 @@ paths:
$ref: '#/definitions/models.Supplier'
summary: 供应商详情
tags:
- 供应商管理
- 供应商管理V1.4.1
/api/v1/supplier/list:
post:
consumes:
@ -11063,7 +11116,7 @@ paths:
type: array
summary: 供应商列表
tags:
- 供应商管理
- 供应商管理V1.4.1
/api/v1/supplier/update:
post:
consumes:
@ -11084,7 +11137,7 @@ paths:
$ref: '#/definitions/app.Response'
summary: 更新供应商
tags:
- 供应商管理
- 供应商管理V1.4.1
/api/v1/sys/tables/info:
post:
consumes: