1.修复缺陷,优化代码:

(1)优化店员的增删改查逻辑;
(2)店员绩效新增角色字段及其复选查询;
(3)零售明细相关金额调整;
(4)零售销售时扫码逻辑优化,非本地库存不支持销售,非本店销售不支持退货;
This commit is contained in:
chenlin 2024-05-23 15:30:20 +08:00
parent 4bf39f8cdb
commit c2c2782a7b
15 changed files with 434 additions and 248 deletions

View File

@ -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())
}

View File

@ -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())

View File

@ -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())

View File

@ -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, "删除成功")
}

View File

@ -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

View File

@ -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

View File

@ -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] + "商品非所选门店库存,请检查")
}
}

View File

@ -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)}

View File

@ -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

View File

@ -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 + "%'")
}

View File

@ -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
}

View File

@ -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)

View File

@ -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",

View File

@ -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",

View File

@ -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'