1.修复缺陷,优化代码:
(1)优化店员的增删改查逻辑; (2)店员绩效新增角色字段及其复选查询; (3)零售明细相关金额调整; (4)零售销售时扫码逻辑优化,非本地库存不支持销售,非本店销售不支持退货;
This commit is contained in:
parent
4bf39f8cdb
commit
c2c2782a7b
|
@ -100,6 +100,8 @@ func ErpOrderList(c *gin.Context) {
|
|||
logger.Error("erp commodity list err:", logger.Field("err", err))
|
||||
if err.Error() == "库存已有该串码商品" {
|
||||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||||
} else if err.Error() == "非当前门店所售商品,需前往对应门店退货" {
|
||||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||||
} else {
|
||||
app.Error(c, http.StatusInternalServerError, err, "查询失败:"+err.Error())
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ func GetInventoryDetail(c *gin.Context) {
|
|||
}
|
||||
|
||||
if req.ScanCode != "" { // 当扫码时需要对返回的数据做校验
|
||||
err = models.CheckScanCodeResp(req.ScanCode, list)
|
||||
err = models.CheckScanCodeResp(req.ScanCode, req.StoreId, list)
|
||||
if err != nil {
|
||||
//logger.Error("erp stock err:", err)
|
||||
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
||||
|
|
|
@ -718,7 +718,7 @@ func ErpPurchaseDemandGet(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
resp, err := model.GetErpPurchaseDemand(req)
|
||||
resp, err := model.GetErpPurchaseDemand(req, c)
|
||||
if err != nil {
|
||||
logger.Error("GetErpPurchaseDemand err:", logger.Field("err", err))
|
||||
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
||||
|
|
|
@ -232,6 +232,8 @@ func InsertSysUser(c *gin.Context) {
|
|||
tools.HasError(err, "数据解析失败", 500)
|
||||
}
|
||||
sysUser.StoreData = string(storeDataJSON)
|
||||
} else {
|
||||
sysUser.StoreData = ""
|
||||
}
|
||||
begin := orm.Eloquent.Begin()
|
||||
sysUser.CreateBy = tools.GetUserIdStr(c)
|
||||
|
@ -239,7 +241,7 @@ func InsertSysUser(c *gin.Context) {
|
|||
|
||||
// 如果添加了小程序id,则需要更新user表的user_type字段为2-店员
|
||||
if req.Uid != 0 {
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant)
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("UpdateUserType err:", logger.Field("err", err))
|
||||
|
@ -332,6 +334,8 @@ func UpdateSysUser(c *gin.Context) {
|
|||
tools.HasError(err, "数据解析失败", 500)
|
||||
}
|
||||
data.StoreData = string(storeDataJSON)
|
||||
} else {
|
||||
data.StoreData = ""
|
||||
}
|
||||
|
||||
begin := orm.Eloquent.Begin()
|
||||
|
@ -341,22 +345,24 @@ func UpdateSysUser(c *gin.Context) {
|
|||
|
||||
// 判断是否修改了uid
|
||||
if sysInfo.Uid == 0 && req.Uid != 0 { // 新增uid,直接更新为2即可
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant)
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
|
||||
} else if sysInfo.Uid != 0 {
|
||||
if sysInfo.Uid != req.Uid {
|
||||
if req.Uid != 0 {
|
||||
// 原uid的状态更新为1
|
||||
err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeConsumer)
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("UpdateUserType err:", logger.Field("err", err))
|
||||
app.Error(c, http.StatusInternalServerError, err, "修改失败")
|
||||
return
|
||||
}
|
||||
// 原uid的状态更新为1
|
||||
err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeConsumer, 0)
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("UpdateUserType err:", logger.Field("err", err))
|
||||
app.Error(c, http.StatusInternalServerError, err, "修改失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 新uid状态更新为2
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant)
|
||||
if req.Uid != 0 {
|
||||
// 新uid状态更新为2
|
||||
err = models.UpdateUserType(begin, req.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
|
||||
}
|
||||
} else if sysInfo.Uid == req.Uid && sysInfo.RoleId != req.RoleId { // 更改了用户角色
|
||||
err = models.UpdateUserType(begin, sysInfo.Uid, models.UserTypeShopAssistant, uint32(req.RoleId))
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
|
@ -377,6 +383,7 @@ func UpdateSysUser(c *gin.Context) {
|
|||
app.OK(c, result, "修改成功")
|
||||
}
|
||||
|
||||
// DeleteSysUser
|
||||
// @Summary 删除用户数据
|
||||
// @Description 删除数据
|
||||
// @Tags system/用户
|
||||
|
@ -388,8 +395,36 @@ func DeleteSysUser(c *gin.Context) {
|
|||
var data models.SysUser
|
||||
data.UpdateBy = tools.GetUserIdStr(c)
|
||||
IDS := tools.IdsStrToIdsIntGroup("userId", c)
|
||||
result, err := data.BatchDelete(IDS)
|
||||
tools.HasError(err, "删除失败", 500)
|
||||
|
||||
begin := orm.Eloquent.Begin()
|
||||
for _, item := range IDS {
|
||||
data.UserId = item
|
||||
result, err := data.Get()
|
||||
if err != nil {
|
||||
tools.HasError(err, "删除失败", 500)
|
||||
}
|
||||
err = models.UpdateUserType(begin, result.Uid, models.UserTypeConsumer, 0)
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("DeleteSysUser UpdateUserType err:", logger.Field("err", err))
|
||||
tools.HasError(err, "删除失败", 500)
|
||||
}
|
||||
}
|
||||
|
||||
result, err := data.BatchDelete(begin, IDS)
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("DeleteSysUser BatchDelete err:", logger.Field("err", err))
|
||||
tools.HasError(err, "删除失败", 500)
|
||||
}
|
||||
|
||||
err = begin.Commit().Error
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("DeleteSysUser commit err:", logger.Field("err", err))
|
||||
tools.HasError(err, "删除失败", 500)
|
||||
}
|
||||
|
||||
app.OK(c, result, "删除成功")
|
||||
}
|
||||
|
||||
|
|
|
@ -1491,6 +1491,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id AND erp_stock.store_id = ?", m.StoreId).
|
||||
//Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Group("erp_commodity.id").
|
||||
//Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId).
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
|
@ -1500,6 +1501,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id AND erp_stock.store_id = ?", m.StoreId).
|
||||
//Joins("LEFT JOIN erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("LEFT JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Group("erp_commodity.id").
|
||||
//Where("erp_stock.count = 0 AND erp_stock.store_id = ?", m.StoreId).
|
||||
Order("CASE WHEN c.pid = 0 THEN CAST(c.number AS SIGNED) " +
|
||||
"ELSE CAST(SUBSTRING(c.number, 1, 3) AS SIGNED) END, " +
|
||||
|
@ -1508,7 +1510,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
if len(storeList) == 0 {
|
||||
qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
|
@ -1517,7 +1519,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, " +
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock GROUP BY erp_commodity_id) " +
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id").
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
|
@ -1527,7 +1529,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
} else {
|
||||
qs = qs.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
|
@ -1536,7 +1538,7 @@ func (m *ErpStockListReq) stockIsEmptyList(c *gin.Context) (*ErpStockListResp, e
|
|||
"CAST(c.pid AS SIGNED), CAST(SUBSTRING(erp_commodity.serial_number, -4) AS SIGNED)")
|
||||
es = es.Select("erp_commodity.*, COALESCE(erp_stock.count, 0) AS total_count, "+
|
||||
"COALESCE(SUM(erp_stock.dispatch_count), 0) AS total_dispatch_count").
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
Joins("LEFT JOIN (SELECT erp_commodity_id, SUM(count) AS count, SUM(dispatch_count) AS dispatch_count FROM erp_stock WHERE store_id IN (?) GROUP BY erp_commodity_id) "+
|
||||
"erp_stock ON erp_commodity.id = erp_stock.erp_commodity_id", storeList).
|
||||
Joins("JOIN erp_category c ON erp_commodity.erp_category_id = c.id").
|
||||
Where("erp_stock.count IS NULL OR erp_stock.count = 0").
|
||||
|
@ -2110,16 +2112,18 @@ func (m *ErpStockCommodityListReq) GetDetailList(c *gin.Context) (*ErpStockCommo
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func CheckScanCodeResp(scanCode string, req *ErpStockCommodityListResp) error {
|
||||
func CheckScanCodeResp(scanCode string, storeId uint32, req *ErpStockCommodityListResp) error {
|
||||
if req.Total == 1 { // 串码商品,只有1个;条码商品,刚好也只有1个
|
||||
if req.List[0].IMEI == scanCode { // 串码商品,只有1个
|
||||
if req.List[0].StoreId != storeId && storeId != 0 {
|
||||
return errors.New(req.List[0].ErpCommodityName + "商品非所选门店库存,请检查")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
if req.List[0].ErpBarcode == scanCode && req.List[0].IMEI != "" {
|
||||
return errors.New("串码类商品,请直接输入串码")
|
||||
}
|
||||
|
||||
} else { // 条码商品,数量多
|
||||
var barCodeList []ErpStockCommodity
|
||||
var imeiLst []ErpStockCommodity
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"go-admin/logger"
|
||||
"go-admin/tools"
|
||||
"go-admin/tools/config"
|
||||
"math"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
@ -128,7 +129,7 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
for _, commodityName := range m.CommodityName {
|
||||
commodityNames = append(commodityNames, commodityName)
|
||||
}
|
||||
qs = qs.Where("commodity_name IN (?)", commodityNames)
|
||||
qs = qs.Where("erp_commodity_name IN (?)", commodityNames)
|
||||
}
|
||||
|
||||
if len(m.CategoryID) > 0 { // 商品分类id
|
||||
|
@ -136,7 +137,7 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
for _, category := range m.CategoryID {
|
||||
categoryIDs = append(categoryIDs, category)
|
||||
}
|
||||
qs = qs.Where("category_id IN (?)", categoryIDs)
|
||||
qs = qs.Where("erp_category_id IN (?)", categoryIDs)
|
||||
}
|
||||
|
||||
var count int64
|
||||
|
@ -147,11 +148,12 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
}
|
||||
|
||||
var commodities []ErpStock
|
||||
if m.IsExport == 1 { // 导出excel
|
||||
err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error
|
||||
} else {
|
||||
err = qs.Order("erp_commodity_id, store_id desc").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error
|
||||
}
|
||||
err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error
|
||||
//if m.IsExport == 1 { // 导出excel
|
||||
// err = qs.Order("erp_commodity_id, store_id desc").Find(&commodities).Error
|
||||
//} else {
|
||||
// err = qs.Order("erp_commodity_id, store_id desc").Offset(page * m.PageSize).Limit(m.PageSize).Find(&commodities).Error
|
||||
//}
|
||||
if err != nil && err != RecordNotFound {
|
||||
logger.Error("查询无库存列表失败", logger.Field("err", err))
|
||||
return nil, err
|
||||
|
@ -247,14 +249,17 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
sumData.TotalEndStock += data.EndStock
|
||||
sumData.TotalEndAmount += data.EndAmount
|
||||
|
||||
sumData.TotalBeginAmount = math.Round(sumData.TotalBeginAmount*100) / 100
|
||||
sumData.TotalEndAmount = math.Round(sumData.TotalEndAmount*100) / 100
|
||||
|
||||
reportList = append(reportList, data)
|
||||
}
|
||||
|
||||
resp.SumData = sumData
|
||||
resp.Total = len(reportList)
|
||||
resp.List = reportList
|
||||
resp.Total = int(count)
|
||||
|
||||
if m.IsExport == 1 {
|
||||
resp.List = reportList
|
||||
resp.ExportUrl, err = reportDecisionExport(resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -262,6 +267,19 @@ func (m *ErpDecisionReportReq) DecisionReportList(c *gin.Context) (*ErpDecisionR
|
|||
resp.Total = 0
|
||||
resp.List = nil
|
||||
resp.SumData = DecisionSumData{}
|
||||
} else {
|
||||
// 分页处理
|
||||
startIdx := (resp.PageIndex - 1) * resp.PageSize
|
||||
endIdx := resp.PageIndex * resp.PageSize
|
||||
|
||||
// 确保不超出索引范围
|
||||
if startIdx >= len(reportList) {
|
||||
resp.List = []DecisionReportData{}
|
||||
} else if endIdx > len(reportList) {
|
||||
resp.List = reportList[startIdx:]
|
||||
} else {
|
||||
resp.List = reportList[startIdx:endIdx]
|
||||
}
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
|
|
|
@ -487,7 +487,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) {
|
|||
}
|
||||
|
||||
if m.ScanCode != "" { // 扫描了串码,需要查询已售的商品数据
|
||||
return QueryListByScanCode(m.ScanCode, showConfig.ShowAll, c)
|
||||
return QueryListByScanCode(m.StoreId, m.ScanCode, showConfig.ShowAll, c)
|
||||
}
|
||||
|
||||
if m.CommodityName != "" { // 输入了商品名称进行查询
|
||||
|
@ -599,7 +599,7 @@ func (m *ErpOrderListReq) List(c *gin.Context) (*ErpOrderListResp, error) {
|
|||
}
|
||||
|
||||
// QueryListByScanCode 通过扫描串码查询列表
|
||||
func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrderListResp, error) {
|
||||
func QueryListByScanCode(storeId uint32, scanCode, showConfig string, c *gin.Context) (*ErpOrderListResp, error) {
|
||||
resp := &ErpOrderListResp{}
|
||||
|
||||
// 查询扫码串码的零售销售订单的商品信息
|
||||
|
@ -660,6 +660,10 @@ func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrder
|
|||
return &ErpOrderListResp{}, errors.New("您没有该门店权限")
|
||||
}
|
||||
}
|
||||
|
||||
if orders[0].StoreId != storeId && storeId != 0 {
|
||||
return &ErpOrderListResp{}, errors.New("非当前门店所售商品,需前往对应门店退货")
|
||||
}
|
||||
}
|
||||
|
||||
// 添加付款、销售员、商品信息
|
||||
|
@ -667,6 +671,7 @@ func QueryListByScanCode(scanCode, showConfig string, c *gin.Context) (*ErpOrder
|
|||
erpOrderListSetCashier(orders)
|
||||
erpOrderListSetSalesman(orders)
|
||||
|
||||
orders[0].Commodities = commodity
|
||||
if len(orders) != 0 {
|
||||
// 查询该串码商品是否已经退过货
|
||||
resp.List = append(resp.List, orders[0])
|
||||
|
@ -3685,7 +3690,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
|||
|
||||
if req.RetailType == RetailTypeSale {
|
||||
// 校验商品是否有库存,是否是对应门店库存商品
|
||||
err = checkOrderCommodityStock(req, sysUser)
|
||||
err = checkOrderCommodityStock(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -3833,11 +3838,14 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
|||
// 更新订单表总退款金额和数量 备注:2024-03-12 订单表没有退款金额的字段,默认都使用订单金额字段,根据订单类型判断是零售或退款
|
||||
//erpOrder.RejectedTotalAmount += req.ErpOrderCommodities[i].RejectedAmount
|
||||
//erpOrder.RejectedTotalCount += req.ErpOrderCommodities[i].RejectedCount
|
||||
erpOrder.TotalAmount += req.ErpOrderCommodities[i].ReceivedAmount
|
||||
erpOrder.TotalAmount += v.RejectedAmount
|
||||
erpOrder.TotalCount += int32(req.ErpOrderCommodities[i].Count)
|
||||
|
||||
// 订单总优惠
|
||||
erpOrder.TotalDiscount += v.MemberDiscount + v.SaleDiscount
|
||||
|
||||
// 销售毛利 // todo 待测试核实 备注:产品说有亏本销售的情况,不用判断毛利是否<0
|
||||
salesProfit := v.ReceivedAmount - float64(int32(v.WholesalePrice)*v.Count)
|
||||
salesProfit := v.RejectedAmount - float64(int32(v.WholesalePrice)*v.Count)
|
||||
//if salesProfit < 0 {
|
||||
// logger.Error("rejected salesProfit less than 0")
|
||||
// return nil, errors.New("商品销售毛利小于0,请检查")
|
||||
|
@ -3971,15 +3979,18 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
|||
return nil, errors.New("操作失败:" + err.Error())
|
||||
}
|
||||
erpOrder.StorePer = erpOrder.TotalStaffProfit * (store.SalesCommRate / 100)
|
||||
erpOrder.StorePer = math.Round(erpOrder.StorePer*100) / 100
|
||||
|
||||
// 订单总优惠
|
||||
erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount
|
||||
if req.RetailType == RetailTypeSale {
|
||||
erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount
|
||||
}
|
||||
|
||||
return erpOrder, nil
|
||||
}
|
||||
|
||||
// 校验商品是否有库存
|
||||
func checkOrderCommodityStock(req *ErpOrderCreateReq, sysUser *SysUser) error {
|
||||
func checkOrderCommodityStock(req *ErpOrderCreateReq) error {
|
||||
if len(req.ErpOrderCommodities) != 0 {
|
||||
// 统计串码和非串码商品信息
|
||||
commodityMap := make(map[uint32]uint32) // 记录非串码商品id及其数量
|
||||
|
@ -4032,7 +4043,7 @@ func checkOrderCommodityStock(req *ErpOrderCreateReq, sysUser *SysUser) error {
|
|||
return errors.New("商品" + "[" + commodityNameMap[commodityId] + "]库存不足")
|
||||
}
|
||||
|
||||
if !CheckUserStore(imeiStockCommodity.StoreId, sysUser) {
|
||||
if imeiStockCommodity.StoreId != req.StoreId {
|
||||
return errors.New(commodityNameMap[commodityId] + "商品非所选门店库存,请检查")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3186,8 +3186,8 @@ func (r *CooperativeExportMemberPromotionReq) Export() string {
|
|||
}
|
||||
}
|
||||
|
||||
list = InviteMemberReportListSetUser(list)
|
||||
list = InviteMemberReportListSetStore(list)
|
||||
//list = InviteMemberReportListSetUser(list)
|
||||
//list = InviteMemberReportListSetStore(list)
|
||||
|
||||
//if len(storeIds) == 1 {
|
||||
// var store Store
|
||||
|
@ -3225,8 +3225,8 @@ func MemberReportFile(memberReports []InviteMemberReport, fileName string) strin
|
|||
}
|
||||
var row []interface{}
|
||||
for rowId := 0; rowId < len(memberReports); rowId++ {
|
||||
row = []interface{}{fmt.Sprintf("%d", memberReports[rowId].Store.ID), memberReports[rowId].Store.Name,
|
||||
fmt.Sprintf("%d", memberReports[rowId].User.Uid), memberReports[rowId].User.ShopAssistantName,
|
||||
row = []interface{}{fmt.Sprintf("%d", memberReports[rowId].SystemUser.StoreList[0].StoreID), memberReports[rowId].SystemUser.StoreList[0].StoreName,
|
||||
fmt.Sprintf("%d", memberReports[rowId].SystemUser.Uid), memberReports[rowId].SystemUser.NickName,
|
||||
fmt.Sprintf("%d", memberReports[rowId].GoldCount), fmt.Sprintf("%d", memberReports[rowId].PlatinumCount),
|
||||
fmt.Sprintf("%d", memberReports[rowId].BlackGoldCount)}
|
||||
|
||||
|
|
|
@ -1522,9 +1522,9 @@ func checkPurchaseInventory(req *ErpPurchaseInventoryReq) error {
|
|||
req.Inventories[i].ErpCategoryID = erpCommodity.ErpCategoryId // 分类id,入库的时候前端没传,后端补充
|
||||
req.Inventories[i].ErpCategoryName = erpCommodity.ErpCategoryName // 分类名称,入库的时候前端没传,后端补充
|
||||
|
||||
if inventory.EmployeePrice == 0 { // 没有传入员工成本价,则默认按照商品资料设置的员工成本价加价金额
|
||||
req.Inventories[i].EmployeePrice = inventory.ImplementationPrice + float64(erpCommodity.StaffCostPrice)
|
||||
}
|
||||
//if inventory.EmployeePrice == 0 { // 没有传入员工成本价,则默认按照商品资料设置的员工成本价加价金额
|
||||
// req.Inventories[i].EmployeePrice = inventory.ImplementationPrice + float64(erpCommodity.StaffCostPrice)
|
||||
//}
|
||||
}
|
||||
|
||||
// 入库的商品信息有误,不在之前的商品列表中
|
||||
|
@ -2408,13 +2408,13 @@ func FinishErpPurchaseDemand(req *FinishErpPurchaseDemandReq, sysUser *SysUser)
|
|||
//}
|
||||
|
||||
// GetErpPurchaseDemand 获取采购需求
|
||||
func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) {
|
||||
func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) {
|
||||
var err error
|
||||
resp := new(GetErpPurchaseDemandResp)
|
||||
if req.HideFlag == "ON" { // 隐藏无采购需求的商品
|
||||
resp, err = getErpPurchaseDemandHide(req)
|
||||
resp, err = getErpPurchaseDemandHide(req, c)
|
||||
} else { // 展示所有
|
||||
resp, err = getErpPurchaseDemandAll(req)
|
||||
resp, err = getErpPurchaseDemandAll(req, c)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -2424,7 +2424,7 @@ func GetErpPurchaseDemand(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandRe
|
|||
}
|
||||
|
||||
// 展示所有采购需求
|
||||
func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) {
|
||||
func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) {
|
||||
page := req.PageIndex - 1
|
||||
if page < 0 {
|
||||
page = 0
|
||||
|
@ -2469,7 +2469,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDeman
|
|||
SortCommodities(commodities)
|
||||
|
||||
// 批量查询门店信息
|
||||
stores, err := GetOnlineStores()
|
||||
stores, err := GetOnlineStores(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -2516,7 +2516,7 @@ func getErpPurchaseDemandAll(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDeman
|
|||
}
|
||||
|
||||
// 隐藏无采购需求的商品
|
||||
func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDemandResp, error) {
|
||||
func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq, c *gin.Context) (*GetErpPurchaseDemandResp, error) {
|
||||
page := req.PageIndex - 1
|
||||
if page < 0 {
|
||||
page = 0
|
||||
|
@ -2599,7 +2599,7 @@ func getErpPurchaseDemandHide(req *GetErpPurchaseDemandReq) (*GetErpPurchaseDema
|
|||
resp.List = nil
|
||||
} else {
|
||||
// 批量查询门店信息
|
||||
stores, err := GetOnlineStores()
|
||||
stores, err := GetOnlineStores(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -2879,9 +2879,15 @@ func GetLastMonthRange() (time.Time, time.Time) {
|
|||
}
|
||||
|
||||
// GetOnlineStores 查询所有在线门店信息
|
||||
func GetOnlineStores() ([]Store, error) {
|
||||
func GetOnlineStores(c *gin.Context) ([]Store, error) {
|
||||
sysUser, err := GetSysUserByCtx(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var stores []Store
|
||||
err := orm.Eloquent.Table("store").Where("is_online = ?", 1).Find(&stores).Error
|
||||
err = orm.Eloquent.Table("store").Where("is_online = ? and cooperative_business_id = ? ", 1,
|
||||
sysUser.CooperativeBusinessId).Find(&stores).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -3482,11 +3488,14 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if reportByOrderData.CommodityData == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
//if reportByOrderData.CommodityData == nil {
|
||||
// continue
|
||||
//}
|
||||
|
||||
reportByOrderData.Amount = nAmount
|
||||
reportByOrderData.Count = nCount
|
||||
if nCount != 0 {
|
||||
|
@ -3497,9 +3506,8 @@ func getReportByOrderFromCommon(req *ErpPurchaseReportByOrderReq, c *gin.Context
|
|||
nTotalCount += nCount
|
||||
}
|
||||
|
||||
resp.Total = len(reportByOrderDataList)
|
||||
|
||||
if req.ErpCategoryID != 0 || req.ErpCommodityName != "" {
|
||||
resp.Total = len(reportByOrderDataList)
|
||||
// 计算分页所需的切片索引
|
||||
startIndex := page * req.PageSize
|
||||
endIndex := (page + 1) * req.PageSize
|
||||
|
|
|
@ -114,7 +114,7 @@ func (m *GetStoreReq) List() ([]Store, int64, error) {
|
|||
// }
|
||||
// m.CooperativeBusinessId = sysUser.CooperativeBusinessId
|
||||
//}
|
||||
qs := orm.Eloquent.Table("store")
|
||||
qs := orm.Eloquent.Table("store").Where("member_service = ?", 1)
|
||||
if m.Name != "" {
|
||||
qs = qs.Where("name LIKE '%" + m.Name + "%'")
|
||||
}
|
||||
|
|
|
@ -6,7 +6,9 @@ import (
|
|||
"fmt"
|
||||
"gorm.io/gorm"
|
||||
"log"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
|
@ -395,12 +397,12 @@ func (e *SysUser) Update(begin *gorm.DB, id int) (update SysUser, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func (e *SysUser) BatchDelete(id []int) (Result bool, err error) {
|
||||
if err = orm.Eloquent.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil {
|
||||
return
|
||||
func (e *SysUser) BatchDelete(begin *gorm.DB, id []int) (Result bool, err error) {
|
||||
if err = begin.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil {
|
||||
return false, err
|
||||
}
|
||||
Result = true
|
||||
return
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (e *SysUser) SetPwd(pwd SysUserPwd) (Result bool, err error) {
|
||||
|
@ -430,11 +432,12 @@ func GetUserById(id uint32) *SysUserB {
|
|||
}
|
||||
|
||||
// UpdateUserType 更新uid的user_type为2
|
||||
func UpdateUserType(begin *gorm.DB, uid, nType uint32) error {
|
||||
func UpdateUserType(begin *gorm.DB, uid, nType, roleId uint32) error {
|
||||
// 更新库存表
|
||||
err := begin.Table("user").Where("uid = ?", uid).
|
||||
Updates(map[string]interface{}{
|
||||
"user_type": nType,
|
||||
"user_type": nType,
|
||||
"xcx_role_id": roleId,
|
||||
}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -442,3 +445,58 @@ func UpdateUserType(begin *gorm.DB, uid, nType uint32) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetUserEffectiveStore 获取店员当前的有效门店(邀请客户时使用)
|
||||
func GetUserEffectiveStore(uid uint32) ([]StoreInfo, error) {
|
||||
user := new(SysUser)
|
||||
err := orm.Eloquent.Table("sys_user").Where("uid", uid).Find(&user).Error
|
||||
if err != nil {
|
||||
log.Println("Error:", err, "UID:", uid)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 解析门店数据
|
||||
if err := json.Unmarshal([]byte(user.StoreData), &user.StoreList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(user.StoreList) == 0 {
|
||||
return nil, errors.New("no stores found")
|
||||
}
|
||||
|
||||
// 当前时间
|
||||
now := time.Now()
|
||||
|
||||
// 过滤掉过期的门店
|
||||
validStores := make([]StoreInfo, 0)
|
||||
for _, store := range user.StoreList {
|
||||
expireTime, err := time.Parse(StoreDateTimeFormat, store.ExpireTime)
|
||||
if err != nil {
|
||||
log.Println("Error parsing time:", err, "ExpireTime:", store.ExpireTime)
|
||||
continue
|
||||
}
|
||||
|
||||
// 包含当天有效时间
|
||||
expireTime = expireTime.Add(24*time.Hour - time.Second)
|
||||
if expireTime.After(now) {
|
||||
validStores = append(validStores, store)
|
||||
}
|
||||
}
|
||||
|
||||
if len(validStores) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 按有效时间和 store_id 排序
|
||||
sort.Slice(validStores, func(i, j int) bool {
|
||||
timeI, _ := time.Parse(StoreDateTimeFormat, validStores[i].ExpireTime)
|
||||
timeJ, _ := time.Parse(StoreDateTimeFormat, validStores[j].ExpireTime)
|
||||
|
||||
if timeI.Equal(timeJ) {
|
||||
return validStores[i].StoreID < validStores[j].StoreID
|
||||
}
|
||||
return timeI.Before(timeJ)
|
||||
})
|
||||
|
||||
return validStores, nil
|
||||
}
|
||||
|
|
|
@ -1029,8 +1029,10 @@ type InviteMemberReport struct {
|
|||
InviteUpgradePlatinumToBlackCount uint32 `json:"invite_upgrade_platinum_to_black_count" gorm:"default:0"` // 升级:白金->黑金数量(干预)
|
||||
|
||||
// invite_member_report
|
||||
User *UserInfo `json:"user" gorm:"-"`
|
||||
Store *Store `json:"store" gorm:"-"` // 门店
|
||||
SystemUser *SysUser `json:"system_user" gorm:"-"` // 系统用户
|
||||
//User *UserInfo `json:"user" gorm:"-"` //
|
||||
//Store *Store `json:"store" gorm:"-"` // 门店
|
||||
|
||||
}
|
||||
|
||||
type UserInviteListReq struct {
|
||||
|
@ -1308,6 +1310,7 @@ type UserInviteRecord struct {
|
|||
|
||||
ToUid uint32 `json:"to_uid"` // 用户ID
|
||||
FromUid uint32 `json:"from_uid"` // 邀请人ID
|
||||
StoreId uint64 `json:"store_id"` // 门店id 邀请用户门店
|
||||
Action uint32 `json:"action"` // 1-未激活 2-激活邀请
|
||||
SpendType uint32 `json:"spend_type"` // 1-未开通 2-开通会员 3-续费 4-升级
|
||||
MemberLevel uint32 `json:"member_level"` // 会员等级 0-未开通 1-普通 2-黄金 3-短期 4-白金 5-黑金
|
||||
|
@ -1442,11 +1445,12 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
resp := new(UserInviteRecordListResp)
|
||||
var records []struct {
|
||||
UserInviteRecord
|
||||
StoreId uint32
|
||||
InviteUserName string
|
||||
UserTel string
|
||||
CreateTime time.Time
|
||||
MemberExpire time.Time
|
||||
StoreId uint32
|
||||
InviteUserName string
|
||||
UserTel string
|
||||
CreateTime time.Time
|
||||
MemberExpire time.Time
|
||||
UserMemberLevel uint32
|
||||
}
|
||||
err := UpdateUserInviteRecordRenewHide()
|
||||
if err != nil {
|
||||
|
@ -1479,14 +1483,14 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
|
||||
qs := orm.Eloquent.Table("user_invite_record").Where("action=2")
|
||||
countQuery := orm.Eloquent.Table("user_invite_record").Where("action=2").
|
||||
Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire").
|
||||
Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid")
|
||||
|
||||
if m.StoreId != 0 {
|
||||
qs = qs.Where("B1.store_id=?", m.StoreId)
|
||||
countQuery = countQuery.Where("B1.store_id=?", m.StoreId)
|
||||
qs = qs.Where("store_id=?", m.StoreId)
|
||||
countQuery = countQuery.Where("store_id=?", m.StoreId)
|
||||
}
|
||||
if m.InviteUserName != "" {
|
||||
qs = qs.Where("B1.Shop_assistant_name=?", m.InviteUserName)
|
||||
|
@ -1662,8 +1666,8 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
countQuery = countQuery.Where("action_time < ?", m.RecordEndTime)
|
||||
}
|
||||
if m.MemberLevel != 0 {
|
||||
qs = qs.Where("user_invite_record.member_level = ?", m.MemberLevel)
|
||||
countQuery = countQuery.Where("user_invite_record.member_level = ?", m.MemberLevel)
|
||||
qs = qs.Where("user.member_level = ?", m.MemberLevel)
|
||||
countQuery = countQuery.Where("user.member_level = ?", m.MemberLevel)
|
||||
}
|
||||
|
||||
var count int64
|
||||
|
@ -1674,9 +1678,9 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
}
|
||||
|
||||
if m.IsExport == 1 { // 导出excel
|
||||
err = qs.Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire").
|
||||
Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid").
|
||||
Order("action_time DESC").
|
||||
Find(&records).Error
|
||||
|
@ -1685,9 +1689,9 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
return nil, err
|
||||
}
|
||||
} else {
|
||||
err = qs.Select("user_invite_record.*, B1.store_id, B1.Shop_assistant_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire").
|
||||
Joins("JOIN user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
err = qs.Select("user_invite_record.*, B1.nick_name AS InviteUserName, " +
|
||||
"B2.tel AS UserTel, B2.created_at AS CreateTime, B2.member_expire AS MemberExpire, B2.member_level AS UserMemberLevel").
|
||||
Joins("JOIN sys_user B1 ON user_invite_record.from_uid = B1.uid").
|
||||
Joins("JOIN user B2 ON user_invite_record.to_uid = B2.uid").
|
||||
Order("action_time DESC").
|
||||
Offset(page * pageSize).
|
||||
|
@ -1711,7 +1715,7 @@ func (m *NewUserInviteRecordReq) NewList() (*UserInviteRecordListResp, error) {
|
|||
CreateTime: item.CreateTime,
|
||||
RecordType: uint32(CalculateMemberType(item.SpendType, item.RenewHide, item.MemberGenre, item.MemberLevel)),
|
||||
RecordTime: item.ActionTime,
|
||||
MemberLevel: item.MemberLevel,
|
||||
MemberLevel: item.UserMemberLevel,
|
||||
MemberExpire: item.MemberExpire,
|
||||
}
|
||||
listData = append(listData, data)
|
||||
|
@ -1942,6 +1946,7 @@ func CalculateMemberType(spendType, renewHide, memberGenre, memberLevel uint32)
|
|||
return Unknown
|
||||
}
|
||||
|
||||
// UpdateUserInviteRecordRenewHide 更新用户邀请记录:如果不是店员干预的续费用户,则更新为1-自动续费
|
||||
func UpdateUserInviteRecordRenewHide() error {
|
||||
err := orm.Eloquent.Exec("UPDATE user_invite_record SET renew_hide=1 WHERE spend_type=3 AND scan=0 AND renew_hide!=1;").Error
|
||||
if err != nil {
|
||||
|
@ -2737,7 +2742,8 @@ func CreateInviteMemberReport() {
|
|||
|
||||
func (m *CooperativeBusiness) InviteMemberReport() {
|
||||
var users []UserInfo
|
||||
err := orm.Eloquent.Table("user").Where("cooperative_business_id=?", m.ID).Where("user_type=2").Find(&users).Error
|
||||
err := orm.Eloquent.Table("user").Where("cooperative_business_id=?", m.ID).
|
||||
Where("user_type=?", UserTypeShopAssistant).Find(&users).Error
|
||||
if err != nil {
|
||||
logger.Error("cooperative err:", logger.Field("err", err))
|
||||
return
|
||||
|
@ -2839,15 +2845,16 @@ func GetSysUser(suid interface{}) (SysUser, error) {
|
|||
}
|
||||
|
||||
type AssistantInviteMemberReportReq struct {
|
||||
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
|
||||
StoreId uint32 `json:"store_id"` // 门店id
|
||||
Uid uint32 `json:"uid"` // 店员小程序id
|
||||
InviteName string `json:"invite_name"` // 邀请人昵称
|
||||
Date string `json:"date"` // 日期
|
||||
PageIndex int `json:"pageIndex"` // 页码
|
||||
PageSize int `json:"pageSize"` // 每页数量
|
||||
IsExport uint32 `json:"is_export"` // 1-导出
|
||||
SysUser SysUser `json:"sys_user"` //
|
||||
RoleId []uint32 `json:"roleId"` // 角色id
|
||||
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
|
||||
StoreId uint32 `json:"store_id"` // 门店id
|
||||
Uid uint32 `json:"uid"` // 店员小程序id
|
||||
InviteName string `json:"invite_name"` // 邀请人昵称
|
||||
Date string `json:"date"` // 日期
|
||||
PageIndex int `json:"pageIndex"` // 页码
|
||||
PageSize int `json:"pageSize"` // 每页数量
|
||||
IsExport uint32 `json:"is_export"` // 1-导出
|
||||
SysUser SysUser `json:"sys_user"` //
|
||||
}
|
||||
|
||||
type AssistantInviteMemberReportListResp struct {
|
||||
|
@ -2861,28 +2868,41 @@ type AssistantInviteMemberReportListResp struct {
|
|||
func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportListResp, error) {
|
||||
resp := new(AssistantInviteMemberReportListResp)
|
||||
var memberReport []InviteMemberReport
|
||||
var users []UserInfo
|
||||
err := orm.Eloquent.Table("user").Where("user_type=2").Find(&users).Error
|
||||
var users []SysUser
|
||||
us := orm.Eloquent.Table("sys_user").Where("uid != 0")
|
||||
if len(m.RoleId) != 0 {
|
||||
us = us.Where("role_id in (?)", m.RoleId)
|
||||
}
|
||||
err := us.Find(&users).Error
|
||||
if err != nil {
|
||||
logger.Error("err:", logger.Field("err", err))
|
||||
return nil, err
|
||||
}
|
||||
uids := make(map[string]uint32, 0)
|
||||
ids := make(map[string]uint32, 0)
|
||||
sysUserMap := make(map[uint32]*SysUser, 0)
|
||||
var uidList []uint32
|
||||
for i, _ := range users {
|
||||
uids[users[i].ShopAssistantName] = users[i].Uid
|
||||
ids[users[i].NickName] = users[i].Uid
|
||||
uidList = append(uidList, users[i].Uid)
|
||||
sysUserMap[users[i].Uid] = &users[i]
|
||||
}
|
||||
|
||||
qs := orm.Eloquent.Table("invite_member_report")
|
||||
if len(uidList) != 0 {
|
||||
qs = qs.Where("uid in (?)", uidList)
|
||||
}
|
||||
|
||||
if m.SysUser.UserId != 1 {
|
||||
qs = qs.Where("cooperative_business_id=?", m.SysUser.CooperativeBusinessId)
|
||||
} else {
|
||||
qs = qs.Where("cooperative_business_id=?", m.CooperativeBusinessId)
|
||||
}
|
||||
//if len(uids) > 0 {
|
||||
// qs = qs.Where("uid NOT IN (?)", uids)
|
||||
//if len(ids) > 0 {
|
||||
// qs = qs.Where("uid NOT IN (?)", ids)
|
||||
//}
|
||||
|
||||
if m.InviteName != "" {
|
||||
m.Uid = uids[m.InviteName]
|
||||
m.Uid = ids[m.InviteName]
|
||||
if m.Uid == 0 {
|
||||
qs = qs.Where("uid=?", m.Uid)
|
||||
}
|
||||
|
@ -2926,25 +2946,21 @@ func (m *AssistantInviteMemberReportReq) List() (*AssistantInviteMemberReportLis
|
|||
}
|
||||
}
|
||||
|
||||
//assistant := GetUserByUid(m.Uid)
|
||||
//cooperative := new(CooperativeBusiness)
|
||||
//cooperative.ID = assistant.CooperativeBusinessId
|
||||
//cooperative.SetAssistantMemberDeductConfig(uint32(assistant.StoreId))
|
||||
//fmt.Println("CooperativeBusinessId:", assistant.CooperativeBusinessId, assistant.StoreId)
|
||||
//fmt.Println("CooperativeAssistantMemberDeduct:", cooperative.CooperativeAssistantMemberDeduct)
|
||||
//if len(memberReport) > 0 {
|
||||
// memberReport[len(memberReport)-1].GoldDeduct = cooperative.CooperativeAssistantMemberDeduct.GoldDeduct
|
||||
// memberReport[len(memberReport)-1].PlatinumDeduct = cooperative.CooperativeAssistantMemberDeduct.PlatinumDeduct
|
||||
// memberReport[len(memberReport)-1].BlackGoldDeduct = cooperative.CooperativeAssistantMemberDeduct.BlackGoldDeduct
|
||||
//
|
||||
// report := memberReport[len(memberReport)-1]
|
||||
// fmt.Println("report:", report)
|
||||
// memberReport[len(memberReport)-1].DeductAmount += report.GoldCount * report.GoldDeduct
|
||||
// memberReport[len(memberReport)-1].DeductAmount += report.PlatinumCount * report.PlatinumDeduct
|
||||
// memberReport[len(memberReport)-1].DeductAmount += report.BlackGoldCount * report.BlackGoldDeduct
|
||||
//}
|
||||
memberReport = InviteMemberReportListSetUser(memberReport)
|
||||
memberReport = InviteMemberReportListSetStore(memberReport)
|
||||
for i, item := range memberReport {
|
||||
memberReport[i].SystemUser = sysUserMap[item.Uid]
|
||||
|
||||
storeInfo, _ := GetUserEffectiveStore(item.Uid)
|
||||
memberReport[i].SystemUser.StoreList = storeInfo
|
||||
if len(storeInfo) != 0 {
|
||||
memberReport[i].StoreId = uint32(storeInfo[0].StoreID)
|
||||
}
|
||||
|
||||
memberReport[i].CooperativeBusinessId = sysUserMap[item.Uid].CooperativeBusinessId
|
||||
memberReport[i].CooperativeName = sysUserMap[item.Uid].CooperativeName
|
||||
}
|
||||
|
||||
//memberReport = InviteMemberReportListSetUser(memberReport)
|
||||
//memberReport = InviteMemberReportListSetStore(memberReport)
|
||||
|
||||
if m.IsExport == 1 {
|
||||
fileName, err := inviteMemberReport(memberReport)
|
||||
|
@ -3005,12 +3021,17 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) {
|
|||
|
||||
for i := 0; i < len(list); i++ {
|
||||
storeName := ""
|
||||
if list[i].Store != nil {
|
||||
storeName = list[i].Store.Name
|
||||
if list[i].SystemUser.StoreList != nil {
|
||||
for _, item := range list[i].SystemUser.StoreList {
|
||||
if storeName != "" {
|
||||
storeName += ","
|
||||
}
|
||||
storeName += item.StoreName
|
||||
}
|
||||
}
|
||||
shopAssistantName := ""
|
||||
if list[i].User != nil {
|
||||
shopAssistantName = list[i].User.ShopAssistantName
|
||||
if list[i].SystemUser != nil {
|
||||
shopAssistantName = list[i].SystemUser.NickName
|
||||
}
|
||||
|
||||
row = []interface{}{
|
||||
|
@ -3100,57 +3121,57 @@ func inviteMemberReport(list []InviteMemberReport) (string, error) {
|
|||
return url + fileName, nil
|
||||
}
|
||||
|
||||
func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport {
|
||||
ids := make([]uint32, 0, len(list))
|
||||
for i, _ := range list {
|
||||
ids = append(ids, list[i].Uid)
|
||||
}
|
||||
if len(ids) == 0 {
|
||||
return list
|
||||
}
|
||||
|
||||
infoMap, err := GetUserInfoMap(ids)
|
||||
if err != nil {
|
||||
logger.Error("user info map err:", logger.Field("err", err))
|
||||
return list
|
||||
}
|
||||
|
||||
for i, _ := range list {
|
||||
v, ok := infoMap[list[i].Uid]
|
||||
if ok {
|
||||
list[i].User = &v
|
||||
}
|
||||
fmt.Println("UserInfo:", v)
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
|
||||
func InviteMemberReportListSetStore(list []InviteMemberReport) []InviteMemberReport {
|
||||
ids := make([]uint32, 0, len(list))
|
||||
for i, _ := range list {
|
||||
ids = append(ids, list[i].StoreId)
|
||||
}
|
||||
if len(ids) == 0 {
|
||||
return list
|
||||
}
|
||||
storeMap := GetStoreMapByIds(ids)
|
||||
//infoMap, err := GetUserInfoMap(ids)
|
||||
//if err != nil {
|
||||
// logger.Error("user info map err:",logger.Field("err",err))
|
||||
// return list
|
||||
//}
|
||||
|
||||
for i, _ := range list {
|
||||
v, ok := storeMap[uint64(list[i].StoreId)]
|
||||
if ok {
|
||||
list[i].Store = v
|
||||
}
|
||||
fmt.Println("UserInfo:", v)
|
||||
}
|
||||
|
||||
return list
|
||||
}
|
||||
//func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport {
|
||||
// ids := make([]uint32, 0, len(list))
|
||||
// for i, _ := range list {
|
||||
// ids = append(ids, list[i].Uid)
|
||||
// }
|
||||
// if len(ids) == 0 {
|
||||
// return list
|
||||
// }
|
||||
//
|
||||
// infoMap, err := GetUserInfoMap(ids)
|
||||
// if err != nil {
|
||||
// logger.Error("user info map err:", logger.Field("err", err))
|
||||
// return list
|
||||
// }
|
||||
//
|
||||
// for i, _ := range list {
|
||||
// v, ok := infoMap[list[i].Uid]
|
||||
// if ok {
|
||||
// list[i].User = &v
|
||||
// }
|
||||
// fmt.Println("UserInfo:", v)
|
||||
// }
|
||||
//
|
||||
// return list
|
||||
//}
|
||||
//
|
||||
//func InviteMemberReportListSetStore(list []InviteMemberReport) []InviteMemberReport {
|
||||
// ids := make([]uint32, 0, len(list))
|
||||
// for i, _ := range list {
|
||||
// ids = append(ids, list[i].StoreId)
|
||||
// }
|
||||
// if len(ids) == 0 {
|
||||
// return list
|
||||
// }
|
||||
// storeMap := GetStoreMapByIds(ids)
|
||||
// //infoMap, err := GetUserInfoMap(ids)
|
||||
// //if err != nil {
|
||||
// // logger.Error("user info map err:",logger.Field("err",err))
|
||||
// // return list
|
||||
// //}
|
||||
//
|
||||
// for i, _ := range list {
|
||||
// v, ok := storeMap[uint64(list[i].StoreId)]
|
||||
// if ok {
|
||||
// list[i].Store = v
|
||||
// }
|
||||
// fmt.Println("UserInfo:", v)
|
||||
// }
|
||||
//
|
||||
// return list
|
||||
//}
|
||||
|
||||
func GetCooperativeBusinessId(c *gin.Context) (uint32, error) {
|
||||
data, _ := c.Get(jwtauth.JwtPayloadKey)
|
||||
|
|
62
docs/docs.go
62
docs/docs.go
|
@ -6345,6 +6345,13 @@ const docTemplate = `{
|
|||
"description": "每页数量",
|
||||
"type": "integer"
|
||||
},
|
||||
"roleId": {
|
||||
"description": "角色id",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
|
@ -7967,6 +7974,14 @@ const docTemplate = `{
|
|||
"description": "金额(采购价)",
|
||||
"type": "number"
|
||||
},
|
||||
"category_id": {
|
||||
"description": "分类id",
|
||||
"type": "integer"
|
||||
},
|
||||
"category_name": {
|
||||
"description": "分类名称",
|
||||
"type": "string"
|
||||
},
|
||||
"commodity_id": {
|
||||
"description": "商品id",
|
||||
"type": "integer"
|
||||
|
@ -8690,7 +8705,7 @@ const docTemplate = `{
|
|||
},
|
||||
"retail_price": {
|
||||
"description": "指导零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sale_discount": {
|
||||
"description": "零售优惠",
|
||||
|
@ -8698,7 +8713,7 @@ const docTemplate = `{
|
|||
},
|
||||
"sale_price": {
|
||||
"description": "零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sales_profit": {
|
||||
"description": "销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价",
|
||||
|
@ -8737,8 +8752,7 @@ const docTemplate = `{
|
|||
"store_id",
|
||||
"store_name",
|
||||
"tel",
|
||||
"total_count",
|
||||
"total_retail_price"
|
||||
"total_count"
|
||||
],
|
||||
"properties": {
|
||||
"bill_sn": {
|
||||
|
@ -8795,7 +8809,7 @@ const docTemplate = `{
|
|||
"type": "integer"
|
||||
},
|
||||
"total_retail_price": {
|
||||
"description": "订单总指导零售价",
|
||||
"description": "订单总指导零售价:如果是赠送商品,金额可以为0",
|
||||
"type": "number"
|
||||
},
|
||||
"vm_count": {
|
||||
|
@ -12258,18 +12272,18 @@ const docTemplate = `{
|
|||
"description": "续费白金会员数量(自动)",
|
||||
"type": "integer"
|
||||
},
|
||||
"store": {
|
||||
"description": "门店",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.Store"
|
||||
}
|
||||
]
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
},
|
||||
"system_user": {
|
||||
"description": "invite_member_report",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.SysUser"
|
||||
}
|
||||
]
|
||||
},
|
||||
"uid": {
|
||||
"description": "店员uid",
|
||||
"type": "integer"
|
||||
|
@ -12285,14 +12299,6 @@ const docTemplate = `{
|
|||
"upgrade_platinum_to_black_count": {
|
||||
"description": "升级:白金-\u003e黑金数量(自动)",
|
||||
"type": "integer"
|
||||
},
|
||||
"user": {
|
||||
"description": "invite_member_report",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.UserInfo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -13428,6 +13434,10 @@ const docTemplate = `{
|
|||
"description": "退货金额",
|
||||
"type": "number"
|
||||
},
|
||||
"serial_number": {
|
||||
"description": "入库编号",
|
||||
"type": "string"
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
|
@ -13956,7 +13966,7 @@ const docTemplate = `{
|
|||
},
|
||||
"retail_price": {
|
||||
"description": "指导零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sale_discount": {
|
||||
"description": "零售优惠",
|
||||
|
@ -13964,7 +13974,7 @@ const docTemplate = `{
|
|||
},
|
||||
"sale_price": {
|
||||
"description": "零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sales_profit": {
|
||||
"description": "销售毛利",
|
||||
|
@ -13980,7 +13990,7 @@ const docTemplate = `{
|
|||
},
|
||||
"staff_price": {
|
||||
"description": "员工成本价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"staff_profit": {
|
||||
"description": "员工毛利",
|
||||
|
@ -14028,7 +14038,7 @@ const docTemplate = `{
|
|||
},
|
||||
"wholesale_price": {
|
||||
"description": "采购单价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -15210,7 +15220,7 @@ const docTemplate = `{
|
|||
},
|
||||
"order_amount": {
|
||||
"description": "消费金额",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"order_cards": {
|
||||
"type": "array",
|
||||
|
|
|
@ -6334,6 +6334,13 @@
|
|||
"description": "每页数量",
|
||||
"type": "integer"
|
||||
},
|
||||
"roleId": {
|
||||
"description": "角色id",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
|
@ -7956,6 +7963,14 @@
|
|||
"description": "金额(采购价)",
|
||||
"type": "number"
|
||||
},
|
||||
"category_id": {
|
||||
"description": "分类id",
|
||||
"type": "integer"
|
||||
},
|
||||
"category_name": {
|
||||
"description": "分类名称",
|
||||
"type": "string"
|
||||
},
|
||||
"commodity_id": {
|
||||
"description": "商品id",
|
||||
"type": "integer"
|
||||
|
@ -8679,7 +8694,7 @@
|
|||
},
|
||||
"retail_price": {
|
||||
"description": "指导零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sale_discount": {
|
||||
"description": "零售优惠",
|
||||
|
@ -8687,7 +8702,7 @@
|
|||
},
|
||||
"sale_price": {
|
||||
"description": "零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sales_profit": {
|
||||
"description": "销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价",
|
||||
|
@ -8726,8 +8741,7 @@
|
|||
"store_id",
|
||||
"store_name",
|
||||
"tel",
|
||||
"total_count",
|
||||
"total_retail_price"
|
||||
"total_count"
|
||||
],
|
||||
"properties": {
|
||||
"bill_sn": {
|
||||
|
@ -8784,7 +8798,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"total_retail_price": {
|
||||
"description": "订单总指导零售价",
|
||||
"description": "订单总指导零售价:如果是赠送商品,金额可以为0",
|
||||
"type": "number"
|
||||
},
|
||||
"vm_count": {
|
||||
|
@ -12247,18 +12261,18 @@
|
|||
"description": "续费白金会员数量(自动)",
|
||||
"type": "integer"
|
||||
},
|
||||
"store": {
|
||||
"description": "门店",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.Store"
|
||||
}
|
||||
]
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
},
|
||||
"system_user": {
|
||||
"description": "invite_member_report",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.SysUser"
|
||||
}
|
||||
]
|
||||
},
|
||||
"uid": {
|
||||
"description": "店员uid",
|
||||
"type": "integer"
|
||||
|
@ -12274,14 +12288,6 @@
|
|||
"upgrade_platinum_to_black_count": {
|
||||
"description": "升级:白金-\u003e黑金数量(自动)",
|
||||
"type": "integer"
|
||||
},
|
||||
"user": {
|
||||
"description": "invite_member_report",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/models.UserInfo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -13417,6 +13423,10 @@
|
|||
"description": "退货金额",
|
||||
"type": "number"
|
||||
},
|
||||
"serial_number": {
|
||||
"description": "入库编号",
|
||||
"type": "string"
|
||||
},
|
||||
"store_id": {
|
||||
"description": "门店id",
|
||||
"type": "integer"
|
||||
|
@ -13945,7 +13955,7 @@
|
|||
},
|
||||
"retail_price": {
|
||||
"description": "指导零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sale_discount": {
|
||||
"description": "零售优惠",
|
||||
|
@ -13953,7 +13963,7 @@
|
|||
},
|
||||
"sale_price": {
|
||||
"description": "零售价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"sales_profit": {
|
||||
"description": "销售毛利",
|
||||
|
@ -13969,7 +13979,7 @@
|
|||
},
|
||||
"staff_price": {
|
||||
"description": "员工成本价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"staff_profit": {
|
||||
"description": "员工毛利",
|
||||
|
@ -14017,7 +14027,7 @@
|
|||
},
|
||||
"wholesale_price": {
|
||||
"description": "采购单价",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -15199,7 +15209,7 @@
|
|||
},
|
||||
"order_amount": {
|
||||
"description": "消费金额",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"order_cards": {
|
||||
"type": "array",
|
||||
|
|
|
@ -324,6 +324,11 @@ definitions:
|
|||
pageSize:
|
||||
description: 每页数量
|
||||
type: integer
|
||||
roleId:
|
||||
description: 角色id
|
||||
items:
|
||||
type: integer
|
||||
type: array
|
||||
store_id:
|
||||
description: 门店id
|
||||
type: integer
|
||||
|
@ -1503,6 +1508,12 @@ definitions:
|
|||
amount:
|
||||
description: 金额(采购价)
|
||||
type: number
|
||||
category_id:
|
||||
description: 分类id
|
||||
type: integer
|
||||
category_name:
|
||||
description: 分类名称
|
||||
type: string
|
||||
commodity_id:
|
||||
description: 商品id
|
||||
type: integer
|
||||
|
@ -2037,13 +2048,13 @@ definitions:
|
|||
type: string
|
||||
retail_price:
|
||||
description: 指导零售价
|
||||
type: integer
|
||||
type: number
|
||||
sale_discount:
|
||||
description: 零售优惠
|
||||
type: number
|
||||
sale_price:
|
||||
description: 零售价
|
||||
type: integer
|
||||
type: number
|
||||
sales_profit:
|
||||
description: 销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价
|
||||
type: number
|
||||
|
@ -2105,7 +2116,7 @@ definitions:
|
|||
description: 订单商品数量
|
||||
type: integer
|
||||
total_retail_price:
|
||||
description: 订单总指导零售价
|
||||
description: 订单总指导零售价:如果是赠送商品,金额可以为0
|
||||
type: number
|
||||
vm_count:
|
||||
description: 使用会员积分
|
||||
|
@ -2120,7 +2131,6 @@ definitions:
|
|||
- store_name
|
||||
- tel
|
||||
- total_count
|
||||
- total_retail_price
|
||||
type: object
|
||||
models.ErpOrderDeleteReq:
|
||||
properties:
|
||||
|
@ -4631,13 +4641,13 @@ definitions:
|
|||
renewal_platinum_count:
|
||||
description: 续费白金会员数量(自动)
|
||||
type: integer
|
||||
store:
|
||||
allOf:
|
||||
- $ref: '#/definitions/models.Store'
|
||||
description: 门店
|
||||
store_id:
|
||||
description: 门店id
|
||||
type: integer
|
||||
system_user:
|
||||
allOf:
|
||||
- $ref: '#/definitions/models.SysUser'
|
||||
description: invite_member_report
|
||||
uid:
|
||||
description: 店员uid
|
||||
type: integer
|
||||
|
@ -4650,10 +4660,6 @@ definitions:
|
|||
upgrade_platinum_to_black_count:
|
||||
description: 升级:白金->黑金数量(自动)
|
||||
type: integer
|
||||
user:
|
||||
allOf:
|
||||
- $ref: '#/definitions/models.UserInfo'
|
||||
description: invite_member_report
|
||||
type: object
|
||||
models.Login:
|
||||
properties:
|
||||
|
@ -5463,6 +5469,9 @@ definitions:
|
|||
reject_amount:
|
||||
description: 退货金额
|
||||
type: number
|
||||
serial_number:
|
||||
description: 入库编号
|
||||
type: string
|
||||
store_id:
|
||||
description: 门店id
|
||||
type: integer
|
||||
|
@ -5851,13 +5860,13 @@ definitions:
|
|||
type: number
|
||||
retail_price:
|
||||
description: 指导零售价
|
||||
type: integer
|
||||
type: number
|
||||
sale_discount:
|
||||
description: 零售优惠
|
||||
type: number
|
||||
sale_price:
|
||||
description: 零售价
|
||||
type: integer
|
||||
type: number
|
||||
sales_profit:
|
||||
description: 销售毛利
|
||||
type: number
|
||||
|
@ -5869,7 +5878,7 @@ definitions:
|
|||
type: number
|
||||
staff_price:
|
||||
description: 员工成本价
|
||||
type: integer
|
||||
type: number
|
||||
staff_profit:
|
||||
description: 员工毛利
|
||||
type: number
|
||||
|
@ -5905,7 +5914,7 @@ definitions:
|
|||
type: number
|
||||
wholesale_price:
|
||||
description: 采购单价
|
||||
type: integer
|
||||
type: number
|
||||
type: object
|
||||
models.RetailMarginData:
|
||||
properties:
|
||||
|
@ -6761,7 +6770,7 @@ definitions:
|
|||
type: string
|
||||
order_amount:
|
||||
description: 消费金额
|
||||
type: integer
|
||||
type: number
|
||||
order_cards:
|
||||
items:
|
||||
$ref: '#/definitions/models.OrderCard'
|
||||
|
|
Loading…
Reference in New Issue
Block a user