1.修复缺陷,优化代码:
(1)V1.4.0相关接口增加数据权限校验; (2)进销存报表中零售销售数量查询规则更新; (3)零售订单商品表部分uint类型调整为float64类型; (4)管理员账号默认返回所有菜单; (5)uer_vm_record表新增erp_order_id字段,用户积分规则调整;
This commit is contained in:
parent
9207440c53
commit
f5b6024028
|
@ -134,8 +134,6 @@ func ErpOrderAudit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 需要判断是否有审核权限
|
|
||||||
|
|
||||||
var erpOrder model.ErpOrder
|
var erpOrder model.ErpOrder
|
||||||
err = orm.Eloquent.Table("erp_order").Where("bill_sn = ?", req.BillSn).Find(&erpOrder).Error
|
err = orm.Eloquent.Table("erp_order").Where("bill_sn = ?", req.BillSn).Find(&erpOrder).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -421,7 +421,7 @@ func GameCardStockAnalysis(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := models.GameCardStockList(req.Name, req.SortType, req.SortDirection, req.StoreId, req.PageNum, req.PageSize)
|
resp, err := models.GameCardStockList(req.Name, req.SortType, req.SortDirection, req.StoreId, req.PageNum, req.PageSize, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("err:", logger.Field("err", err))
|
logger.Error("err:", logger.Field("err", err))
|
||||||
app.Error(c, http.StatusInternalServerError, err, "")
|
app.Error(c, http.StatusInternalServerError, err, "")
|
||||||
|
|
|
@ -136,7 +136,7 @@ func DeliveryCargo(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := models.SetStockCommodityState(req.Id)
|
err := models.SetStockCommodityState(c, req.Id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//logger.Error("erp stock err:", err)
|
//logger.Error("erp stock err:", err)
|
||||||
app.Error(c, http.StatusInternalServerError, err, "获取失败")
|
app.Error(c, http.StatusInternalServerError, err, "获取失败")
|
||||||
|
|
|
@ -42,6 +42,15 @@ func InventoryAllotAdd(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !models.CheckUserStore(req.DeliverStoreId, sysUser) {
|
||||||
|
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"),
|
||||||
|
"操作失败:您没有该门店权限")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inventoryProductOrder, err := models.AddInventoryAllot(req, sysUser)
|
inventoryProductOrder, err := models.AddInventoryAllot(req, sysUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("InventoryAllotAdd err:", logger.Field("err", err))
|
logger.Error("InventoryAllotAdd err:", logger.Field("err", err))
|
||||||
|
@ -74,6 +83,13 @@ func InventoryAllotEdit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, req.DeliverStoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
inventoryProductOrder, err := models.EditAllotInventory(req)
|
inventoryProductOrder, err := models.EditAllotInventory(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("InventoryAllotEdit err:", logger.Field("err", err))
|
logger.Error("InventoryAllotEdit err:", logger.Field("err", err))
|
||||||
|
@ -101,14 +117,7 @@ func InventoryAllotAudit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sysUser, err := models.GetSysUserByCtx(c)
|
err := models.AuditAllotInventory(req, c)
|
||||||
if err != nil {
|
|
||||||
logger.Error("sys user err:", logger.Field("err", err))
|
|
||||||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = models.AuditAllotInventory(req, sysUser)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -140,8 +149,6 @@ func InventoryAllotDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 需要校验当前用户是否有权限
|
|
||||||
|
|
||||||
var inventoryAllotOrder models.ErpInventoryAllotOrder
|
var inventoryAllotOrder models.ErpInventoryAllotOrder
|
||||||
err = orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
err = orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
Find(&inventoryAllotOrder).Error
|
Find(&inventoryAllotOrder).Error
|
||||||
|
@ -151,6 +158,13 @@ func InventoryAllotDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, inventoryAllotOrder.DeliverStoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryAllotOrder.SerialNumber == "" {
|
if inventoryAllotOrder.SerialNumber == "" {
|
||||||
logger.Error("order is null")
|
logger.Error("order is null")
|
||||||
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
||||||
|
@ -220,7 +234,7 @@ func InventoryAllotList(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := req.List()
|
resp, err := req.List(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -258,6 +272,23 @@ func InventoryAllotDetail(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := models.GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("sys user err:", logger.Field("err", err))
|
||||||
|
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !models.CheckUserStore(allotOrder.ReceiveStoreId, sysUser) &&
|
||||||
|
!models.CheckUserStore(allotOrder.DeliverStoreId, sysUser) {
|
||||||
|
app.Error(c, http.StatusInternalServerError, errors.New("操作失败:您没有该门店权限"),
|
||||||
|
"操作失败:您没有该门店权限")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
||||||
if allotOrder.MakerTime != nil && allotOrder.MakerTime.IsZero() {
|
if allotOrder.MakerTime != nil && allotOrder.MakerTime.IsZero() {
|
||||||
allotOrder.MakerTime = nil
|
allotOrder.MakerTime = nil
|
||||||
|
@ -296,7 +327,7 @@ func InventoryAllotDeliver(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := models.DeliverAllotInventory(req)
|
err := models.DeliverAllotInventory(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -322,7 +353,7 @@ func InventoryAllotReceive(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := models.ReceiveAllotInventory(req)
|
err := models.ReceiveAllotInventory(req, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
|
|
@ -42,6 +42,13 @@ func InventoryChangeAdd(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, req.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
changeProductOrder, err := models.AddInventoryChange(req, sysUser)
|
changeProductOrder, err := models.AddInventoryChange(req, sysUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("InventoryChangeAdd err:", logger.Field("err", err))
|
logger.Error("InventoryChangeAdd err:", logger.Field("err", err))
|
||||||
|
@ -74,6 +81,13 @@ func InventoryChangeEdit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, req.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if len(req.Commodities) == 0 {
|
if len(req.Commodities) == 0 {
|
||||||
logger.Error("InventoryChangeEdit err:", logger.Field("err", err))
|
logger.Error("InventoryChangeEdit err:", logger.Field("err", err))
|
||||||
app.Error(c, http.StatusInternalServerError, errors.New("请添加商品"), "请添加商品")
|
app.Error(c, http.StatusInternalServerError, errors.New("请添加商品"), "请添加商品")
|
||||||
|
@ -107,14 +121,7 @@ func InventoryChangeAudit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sysUser, err := models.GetSysUserByCtx(c)
|
err := models.AuditChangeInventory(req, c)
|
||||||
if err != nil {
|
|
||||||
logger.Error("sys user err:", logger.Field("err", err))
|
|
||||||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = models.AuditChangeInventory(req, sysUser)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -146,8 +153,6 @@ func InventoryChangeDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 需要校验当前用户是否有权限
|
|
||||||
|
|
||||||
var inventoryChangeOrder models.ErpInventoryChangeOrder
|
var inventoryChangeOrder models.ErpInventoryChangeOrder
|
||||||
err = orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
|
err = orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
Find(&inventoryChangeOrder).Error
|
Find(&inventoryChangeOrder).Error
|
||||||
|
@ -157,6 +162,13 @@ func InventoryChangeDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, inventoryChangeOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryChangeOrder.SerialNumber == "" {
|
if inventoryChangeOrder.SerialNumber == "" {
|
||||||
logger.Error("order is null")
|
logger.Error("order is null")
|
||||||
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
||||||
|
@ -226,7 +238,7 @@ func InventoryChangeList(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := req.List()
|
resp, err := req.List(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -265,6 +277,13 @@ func InventoryChangeDetail(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, changeOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
||||||
if changeOrder.MakerTime != nil && changeOrder.MakerTime.IsZero() {
|
if changeOrder.MakerTime != nil && changeOrder.MakerTime.IsZero() {
|
||||||
changeOrder.MakerTime = nil
|
changeOrder.MakerTime = nil
|
||||||
|
|
|
@ -42,6 +42,13 @@ func ProductInventoryAdd(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, req.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
inventoryProductOrder, err := models.AddProductInventory(req, sysUser)
|
inventoryProductOrder, err := models.AddProductInventory(req, sysUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
|
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
|
||||||
|
@ -75,6 +82,13 @@ func ProductInventoryEdit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, req.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
inventoryProductOrder, err := models.EditProductInventory(req)
|
inventoryProductOrder, err := models.EditProductInventory(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
|
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
|
||||||
|
@ -102,14 +116,7 @@ func ProductInventoryAudit(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sysUser, err := models.GetSysUserByCtx(c)
|
err := models.AuditProductInventory(req, c)
|
||||||
if err != nil {
|
|
||||||
logger.Error("sys user err:", logger.Field("err", err))
|
|
||||||
app.Error(c, http.StatusInternalServerError, err, "操作失败")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = models.AuditProductInventory(req, sysUser)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -140,8 +147,6 @@ func ProductInventoryDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo 需要校验当前用户是否有权限
|
|
||||||
|
|
||||||
var inventoryProductOrder models.ErpInventoryProductOrder
|
var inventoryProductOrder models.ErpInventoryProductOrder
|
||||||
err = orm.Eloquent.Table("erp_inventory_product_order").Where("serial_number = ?", req.SerialNumber).
|
err = orm.Eloquent.Table("erp_inventory_product_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
Find(&inventoryProductOrder).Error
|
Find(&inventoryProductOrder).Error
|
||||||
|
@ -151,6 +156,13 @@ func ProductInventoryDelete(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, inventoryProductOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryProductOrder.SerialNumber == "" {
|
if inventoryProductOrder.SerialNumber == "" {
|
||||||
logger.Error("order is null")
|
logger.Error("order is null")
|
||||||
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
|
||||||
|
@ -219,7 +231,7 @@ func ProductInventoryList(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := req.List()
|
resp, err := req.List(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
|
||||||
return
|
return
|
||||||
|
@ -257,6 +269,13 @@ func ProductInventoryDetail(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = models.AuthUserStore(c, productOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
// 校验时间,如果为01-01-01 08:05,则赋值为空
|
||||||
if productOrder.MakerTime != nil && productOrder.MakerTime.IsZero() {
|
if productOrder.MakerTime != nil && productOrder.MakerTime.IsZero() {
|
||||||
productOrder.MakerTime = nil
|
productOrder.MakerTime = nil
|
||||||
|
|
|
@ -445,7 +445,7 @@ func DeliverTaskList(c *gin.Context) {
|
||||||
}
|
}
|
||||||
req.StoreId = sysUser.StoreId
|
req.StoreId = sysUser.StoreId
|
||||||
fmt.Println("StoreId:", req.StoreId)
|
fmt.Println("StoreId:", req.StoreId)
|
||||||
list, totalCount, err := req.List()
|
list, totalCount, err := req.List(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:%#v", err)
|
logger.Errorf("err:%#v", err)
|
||||||
msg := "获取发货列表失败"
|
msg := "获取发货列表失败"
|
||||||
|
|
|
@ -154,7 +154,14 @@ func DeleteMenu(c *gin.Context) {
|
||||||
// @Security Bearer
|
// @Security Bearer
|
||||||
func GetMenuRole(c *gin.Context) {
|
func GetMenuRole(c *gin.Context) {
|
||||||
var Menu models.Menu
|
var Menu models.Menu
|
||||||
result, err := Menu.SetMenuRole(tools.GetRoleName(c))
|
var result []models.Menu
|
||||||
|
var err error
|
||||||
|
if tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员" {
|
||||||
|
result, err = Menu.SetAdminMenuRole()
|
||||||
|
} else {
|
||||||
|
result, err = Menu.SetMenuRole(tools.GetRoleName(c))
|
||||||
|
}
|
||||||
|
|
||||||
tools.HasError(err, "获取失败", 500)
|
tools.HasError(err, "获取失败", 500)
|
||||||
app.OK(c, result, "")
|
app.OK(c, result, "")
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 权限检查中间件
|
// AuthCheckRole 权限检查中间件
|
||||||
func AuthCheckRole() gin.HandlerFunc {
|
func AuthCheckRole() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
data, _ := c.Get(jwtauth.JwtPayloadKey)
|
data, _ := c.Get(jwtauth.JwtPayloadKey)
|
||||||
|
|
|
@ -2377,7 +2377,7 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetStockCommodityState 更新库存状态
|
// SetStockCommodityState 更新库存状态
|
||||||
func SetStockCommodityState(id uint32) error { //更新库存状态为5,并同步扣减库存数量
|
func SetStockCommodityState(c *gin.Context, id uint32) error { //更新库存状态为5,并同步扣减库存数量
|
||||||
begin := orm.Eloquent.Begin()
|
begin := orm.Eloquent.Begin()
|
||||||
|
|
||||||
// 查询库存详情
|
// 查询库存详情
|
||||||
|
@ -2390,6 +2390,12 @@ func SetStockCommodityState(id uint32) error { //更新库存状态为5,并同
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = AuthUserStore(c, commodityInfo.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// 查询库存数据
|
// 查询库存数据
|
||||||
var record ErpStock
|
var record ErpStock
|
||||||
err = orm.Eloquent.Table("erp_stock").
|
err = orm.Eloquent.Table("erp_stock").
|
||||||
|
|
|
@ -432,29 +432,28 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision
|
||||||
func getSaleOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
|
func getSaleOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
|
||||||
var reportData DecisionReportData
|
var reportData DecisionReportData
|
||||||
|
|
||||||
qs := orm.Eloquent.Debug().Table("erp_stock_commodity")
|
qs := orm.Eloquent.Debug().Table("erp_order_commodity").
|
||||||
|
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id")
|
||||||
|
|
||||||
// 进行条件查询
|
if req.StartTime != "" { // 审核开始时间
|
||||||
if req.StartTime != "" { // 出入库开始时间
|
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("getSystemStartCount err:", err)
|
logger.Errorf("err:", err)
|
||||||
return DecisionReportData{}, err
|
|
||||||
}
|
}
|
||||||
qs = qs.Where("updated_at > ?", parse)
|
qs = qs.Where("erp_order.audit_time > ?", parse)
|
||||||
}
|
}
|
||||||
|
if req.EndTime != "" { // 审核结束时间
|
||||||
if req.EndTime != "" { // 出入库结束时间
|
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("getSystemStartCount err:", err)
|
logger.Errorf("err:", err)
|
||||||
return DecisionReportData{}, err
|
|
||||||
}
|
}
|
||||||
qs = qs.Where("updated_at > ?", parse)
|
qs = qs.Where("erp_order.audit_time < ?", parse)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := qs.Select("SUM(count) as order_sale").Where("state = ? and store_id = ? "+
|
err := qs.Select("count(*) as order_sale").Where("erp_order.retail_type = ? and erp_order.state = ? "+
|
||||||
"and erp_commodity_id = ?", SoldOut, stock.StoreId, stock.ErpCommodityId).Find(&reportData).Error
|
"and erp_order.store_id = ? and erp_order.pay_status = ? "+
|
||||||
|
"and erp_order_commodity.erp_commodity_id = ?",
|
||||||
|
RetailTypeSale, ErpOrderStateAudited, stock.StoreId, HavePaid, stock.ErpCommodityId).Find(&reportData).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return DecisionReportData{}, err
|
return DecisionReportData{}, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,12 +116,12 @@ type ErpOrderCommodity struct {
|
||||||
RejectedCount uint32 `json:"rejected_count"` // 退货数量
|
RejectedCount uint32 `json:"rejected_count"` // 退货数量
|
||||||
RejectedAmount float64 `json:"rejected_amount"` // 退货金额
|
RejectedAmount float64 `json:"rejected_amount"` // 退货金额
|
||||||
RejectedOrderCommodityId uint32 `json:"rejected_order_commodity_id"` // 退货订单商品id
|
RejectedOrderCommodityId uint32 `json:"rejected_order_commodity_id"` // 退货订单商品id
|
||||||
StaffCostPrice int32 `json:"staff_cost_price"` // 员工成本价加价(如:加价50,不是加价后的价格)
|
StaffCostPrice float64 `json:"staff_cost_price"` // 员工成本价加价(如:加价50,不是加价后的价格)
|
||||||
WholesalePrice int32 `json:"wholesale_price"` // 指导采购价
|
WholesalePrice float64 `json:"wholesale_price"` // 指导采购价
|
||||||
SalesProfit float64 `json:"sales_profit"` // 销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价
|
SalesProfit float64 `json:"sales_profit"` // 销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价
|
||||||
StaffProfit float64 `json:"staff_profit"` // 员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价
|
StaffProfit float64 `json:"staff_profit"` // 员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价
|
||||||
ErpStockCommodityID string `json:"erp_stock_commodity_id"` // 库存商品表主键id
|
ErpStockCommodityID string `json:"erp_stock_commodity_id"` // 库存商品表主键id
|
||||||
StaffPrice int32 `json:"staff_price" gorm:"-"` // 员工成本价
|
StaffPrice float64 `json:"staff_price" gorm:"-"` // 员工成本价
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErpOrderCashier 订单收款方式
|
// ErpOrderCashier 订单收款方式
|
||||||
|
@ -1026,15 +1026,27 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
||||||
|
|
||||||
event = VmEventErpOrderSale
|
event = VmEventErpOrderSale
|
||||||
vmCount = tools.RoundFloat64(erpOrder.TotalAmount)
|
vmCount = tools.RoundFloat64(erpOrder.TotalAmount)
|
||||||
} else if erpOrder.RetailType == RetailTypeRejected { // 退货订单,扣减用户积分
|
} else if erpOrder.RetailType == RetailTypeRejected { // 退货订单,扣减用户积分(需校验购物时已积分,有则扣除)
|
||||||
|
var count int64
|
||||||
|
err = orm.Eloquent.Table("user_vm_record").Where("erp_order_id = ?", erpOrder.SaleOrderId).
|
||||||
|
Count(&count).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("query user_vm_record error, erp_order_id is:", erpOrder.SaleOrderId)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 积过分才扣除
|
||||||
|
if count > 0 {
|
||||||
describe = "零售退货扣除积分"
|
describe = "零售退货扣除积分"
|
||||||
event = VmEventErpOrderReject
|
event = VmEventErpOrderReject
|
||||||
vmCount = 0 - tools.RoundFloat64(erpOrder.TotalAmount)
|
vmCount = 0 - tools.RoundFloat64(erpOrder.TotalAmount)
|
||||||
} else {
|
} else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
err = UserVmUpdate(gdb, uint32(erpOrder.Uid), vmCount, event, describe)
|
err = UserVmUpdate(gdb, erpOrder.ID, uint32(erpOrder.Uid), vmCount, event, describe)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("err:", err)
|
logger.Errorf("err:", err)
|
||||||
return err
|
return err
|
||||||
|
@ -1161,8 +1173,8 @@ func (m *ErpOrder) SetRetailDetailCommodity() {
|
||||||
|
|
||||||
orderCommodity.ErpSupplierId = stockCommodity.ErpSupplierId
|
orderCommodity.ErpSupplierId = stockCommodity.ErpSupplierId
|
||||||
orderCommodity.ErpSupplierName = stockCommodity.ErpSupplierName
|
orderCommodity.ErpSupplierName = stockCommodity.ErpSupplierName
|
||||||
orderCommodity.WholesalePrice = int32(stockCommodity.WholesalePrice)
|
orderCommodity.WholesalePrice = stockCommodity.WholesalePrice
|
||||||
orderCommodity.StaffCostPrice = int32(stockCommodity.StaffCostPrice)
|
orderCommodity.StaffCostPrice = stockCommodity.StaffCostPrice
|
||||||
orderCommodity.StaffPrice = orderCommodity.WholesalePrice + orderCommodity.StaffCostPrice
|
orderCommodity.StaffPrice = orderCommodity.WholesalePrice + orderCommodity.StaffCostPrice
|
||||||
respOrderCommodities = append(respOrderCommodities, orderCommodity)
|
respOrderCommodities = append(respOrderCommodities, orderCommodity)
|
||||||
}
|
}
|
||||||
|
@ -1188,6 +1200,75 @@ func (m *ErpOrder) SetCommodity() {
|
||||||
m.Commodities = orderCommodities
|
m.Commodities = orderCommodities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 添加订单的销售员信息
|
||||||
|
func erpOrderListSetSalesmanByRetailDetail(userId uint32, list []ErpOrder) {
|
||||||
|
for i, _ := range list {
|
||||||
|
_ = list[i].SetOrderSalesmanRetailDetail(userId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ErpOrder) SetOrderSalesmanRetailDetail(userId uint32) error {
|
||||||
|
var salesProfit, staffProfit, totalStaffProfit float64
|
||||||
|
//获取销售毛利、员工毛利数据
|
||||||
|
for _, item := range m.Commodities {
|
||||||
|
erpCommodity, err := GetCommodity(item.ErpCommodityId)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetCommodity err:", logger.Field("err", err))
|
||||||
|
}
|
||||||
|
salesProfit += item.SalesProfit * erpCommodity.Brokerage1 * 0.01
|
||||||
|
staffProfit += item.StaffProfit * erpCommodity.Brokerage2 * 0.01
|
||||||
|
totalStaffProfit += item.StaffProfit
|
||||||
|
}
|
||||||
|
// 四舍五入并保留两位小数
|
||||||
|
salesProfit = math.Round(salesProfit*100) / 100
|
||||||
|
staffProfit = math.Round(staffProfit*100) / 100
|
||||||
|
totalStaffProfit = math.Round(totalStaffProfit*100) / 100
|
||||||
|
|
||||||
|
var salesmanInfo []ErpOrderSales
|
||||||
|
err := orm.Eloquent.Model(&ErpOrderSales{}).Where("erp_order_id = ?", m.ID).Find(&salesmanInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var salesmanList []ErpOrderSales
|
||||||
|
for _, item := range salesmanInfo {
|
||||||
|
item.SalesProfitPer = salesProfit / float64(len(salesmanInfo))
|
||||||
|
item.StaffProfitPer = staffProfit / float64(len(salesmanInfo))
|
||||||
|
|
||||||
|
// 获取员工毛利
|
||||||
|
userInfo, err := GetSysUserInfoById(item.Uid)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("GetSysUserInfoByUid err:", logger.Field("err", err))
|
||||||
|
}
|
||||||
|
item.Name = userInfo.NickName
|
||||||
|
item.SalesmanPer = totalStaffProfit * userInfo.SalesCommRate * 0.01 / float64(len(salesmanInfo))
|
||||||
|
|
||||||
|
//if m.RetailType == RetailTypeRejected {
|
||||||
|
// item.SalesProfitPer = -item.SalesProfitPer
|
||||||
|
// item.StaffProfitPer = -item.StaffProfitPer
|
||||||
|
// item.SalesmanPer = -item.SalesmanPer
|
||||||
|
//}
|
||||||
|
|
||||||
|
if userId != item.Uid {
|
||||||
|
item.SalesProfitPer = 0
|
||||||
|
item.StaffProfitPer = 0
|
||||||
|
item.SalesmanPer = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
salesmanList = append(salesmanList, item)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(salesmanList) == 0 {
|
||||||
|
m.Salesman = []ErpOrderSales{}
|
||||||
|
} else {
|
||||||
|
m.Salesman = salesmanList
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SalesmanList = ""
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 添加订单的销售员信息
|
// 添加订单的销售员信息
|
||||||
func erpOrderListSetSalesman(list []ErpOrder) {
|
func erpOrderListSetSalesman(list []ErpOrder) {
|
||||||
for i, _ := range list {
|
for i, _ := range list {
|
||||||
|
@ -1264,7 +1345,7 @@ func (m *ErpOrder) SetSalesman() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
|
func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
|
||||||
var salesProfit, staffProfit float64
|
var salesProfit, staffProfit, totalStaffProfit float64
|
||||||
//获取销售毛利、员工毛利数据
|
//获取销售毛利、员工毛利数据
|
||||||
for _, item := range m.ErpOrderCommodities {
|
for _, item := range m.ErpOrderCommodities {
|
||||||
erpCommodity, err := GetCommodity(item.ErpCommodityId)
|
erpCommodity, err := GetCommodity(item.ErpCommodityId)
|
||||||
|
@ -1273,10 +1354,12 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
|
||||||
}
|
}
|
||||||
salesProfit += item.SalesProfit * erpCommodity.Brokerage1 * 0.01
|
salesProfit += item.SalesProfit * erpCommodity.Brokerage1 * 0.01
|
||||||
staffProfit += item.StaffProfit * erpCommodity.Brokerage2 * 0.01
|
staffProfit += item.StaffProfit * erpCommodity.Brokerage2 * 0.01
|
||||||
|
totalStaffProfit += item.StaffProfit
|
||||||
}
|
}
|
||||||
// 四舍五入并保留两位小数
|
// 四舍五入并保留两位小数
|
||||||
salesProfit = math.Round(salesProfit*100) / 100
|
salesProfit = math.Round(salesProfit*100) / 100
|
||||||
staffProfit = math.Round(staffProfit*100) / 100
|
staffProfit = math.Round(staffProfit*100) / 100
|
||||||
|
totalStaffProfit = math.Round(totalStaffProfit*100) / 100
|
||||||
|
|
||||||
var salesmanList []ErpOrderSales
|
var salesmanList []ErpOrderSales
|
||||||
for _, item := range m.Salesman {
|
for _, item := range m.Salesman {
|
||||||
|
@ -1289,7 +1372,8 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
|
||||||
logger.Error("GetSysUserInfoByUid err:", logger.Field("err", err))
|
logger.Error("GetSysUserInfoByUid err:", logger.Field("err", err))
|
||||||
}
|
}
|
||||||
item.Name = userInfo.NickName
|
item.Name = userInfo.NickName
|
||||||
item.SalesmanPer = staffProfit * userInfo.SalesCommRate / float64(len(m.Salesman))
|
//item.SalesmanPer = staffProfit * userInfo.SalesCommRate * 0.01 / float64(len(m.Salesman))
|
||||||
|
item.SalesmanPer = totalStaffProfit * userInfo.SalesCommRate * 0.01 / float64(len(m.Salesman))
|
||||||
|
|
||||||
salesmanList = append(salesmanList, item)
|
salesmanList = append(salesmanList, item)
|
||||||
}
|
}
|
||||||
|
@ -3147,23 +3231,30 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
}
|
}
|
||||||
|
|
||||||
qs := orm.Eloquent.Table("erp_order")
|
qs := orm.Eloquent.Table("erp_order")
|
||||||
|
totalPerQs := orm.Eloquent.Table("erp_order")
|
||||||
if showConfig.ShowAll == "OFF" {
|
if showConfig.ShowAll == "OFF" {
|
||||||
qs = qs.Where("is_print = ? or retail_type = ?", HavePrinted, RetailTypeRejected)
|
qs = qs.Where("is_print = ? or retail_type = ?", HavePrinted, RetailTypeRejected)
|
||||||
|
totalPerQs = totalPerQs.Where("is_print = ? or retail_type = ?", HavePrinted, RetailTypeRejected)
|
||||||
}
|
}
|
||||||
if req.BillSn != "" { // 订单编号
|
if req.BillSn != "" { // 订单编号
|
||||||
qs = qs.Where("bill_sn=?", req.BillSn)
|
qs = qs.Where("bill_sn=?", req.BillSn)
|
||||||
|
totalPerQs = totalPerQs.Where("bill_sn=?", req.BillSn)
|
||||||
} else {
|
} else {
|
||||||
if req.RetailType != "" { // 销售类型
|
if req.RetailType != "" { // 销售类型
|
||||||
qs = qs.Where("retail_type=?", req.RetailType)
|
qs = qs.Where("retail_type=?", req.RetailType)
|
||||||
|
totalPerQs = totalPerQs.Where("retail_type=?", req.RetailType)
|
||||||
}
|
}
|
||||||
if req.Uid != 0 { // 用户ID
|
if req.Uid != 0 { // 用户ID
|
||||||
qs = qs.Where("erp_order.uid=?", req.Uid)
|
qs = qs.Where("erp_order.uid=?", req.Uid)
|
||||||
|
totalPerQs = totalPerQs.Where("erp_order.uid=?", req.Uid)
|
||||||
}
|
}
|
||||||
if req.Tel != "" { // 用户手机号
|
if req.Tel != "" { // 用户手机号
|
||||||
qs = qs.Where("tel=?", req.Tel)
|
qs = qs.Where("tel=?", req.Tel)
|
||||||
|
totalPerQs = totalPerQs.Where("tel=?", req.Tel)
|
||||||
}
|
}
|
||||||
if req.StoreId != 0 { // 门店ID
|
if req.StoreId != 0 { // 门店ID
|
||||||
qs = qs.Where("store_id=?", req.StoreId)
|
qs = qs.Where("store_id=?", req.StoreId)
|
||||||
|
totalPerQs = totalPerQs.Where("store_id=?", req.StoreId)
|
||||||
}
|
}
|
||||||
// 非管理员才判断所属门店
|
// 非管理员才判断所属门店
|
||||||
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
@ -3177,8 +3268,10 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
if len(storeList) > 0 {
|
if len(storeList) > 0 {
|
||||||
if len(storeList) == 1 {
|
if len(storeList) == 1 {
|
||||||
qs = qs.Where("store_id = ?", storeList[0])
|
qs = qs.Where("store_id = ?", storeList[0])
|
||||||
|
totalPerQs = totalPerQs.Where("store_id = ?", storeList[0])
|
||||||
} else {
|
} else {
|
||||||
qs = qs.Where("store_id IN (?)", storeList)
|
qs = qs.Where("store_id IN (?)", storeList)
|
||||||
|
totalPerQs = totalPerQs.Where("store_id IN (?)", storeList)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.New("用户未绑定门店")
|
return nil, errors.New("用户未绑定门店")
|
||||||
|
@ -3186,6 +3279,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
}
|
}
|
||||||
if req.Salesman != 0 { // 销售员
|
if req.Salesman != 0 { // 销售员
|
||||||
qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman))
|
qs = qs.Where("JSON_CONTAINS(salesman_list, ?)", fmt.Sprintf(`{"userId":%d}`, req.Salesman))
|
||||||
|
totalPerQs = totalPerQs.Where("erp_order_sales.uid = ?", req.Salesman)
|
||||||
}
|
}
|
||||||
if req.StartTime != "" { // 审核开始时间
|
if req.StartTime != "" { // 审核开始时间
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
|
||||||
|
@ -3193,6 +3287,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
logger.Errorf("err:", err)
|
logger.Errorf("err:", err)
|
||||||
}
|
}
|
||||||
qs = qs.Where("audit_time > ?", parse)
|
qs = qs.Where("audit_time > ?", parse)
|
||||||
|
totalPerQs = totalPerQs.Where("audit_time > ?", parse)
|
||||||
}
|
}
|
||||||
if req.EndTime != "" { // 审核结束时间
|
if req.EndTime != "" { // 审核结束时间
|
||||||
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
parse, err := time.Parse(QueryTimeFormat, req.EndTime)
|
||||||
|
@ -3201,11 +3296,15 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
}
|
}
|
||||||
//parse = parse.AddDate(0, 0, 1)
|
//parse = parse.AddDate(0, 0, 1)
|
||||||
qs = qs.Where("audit_time < ?", parse)
|
qs = qs.Where("audit_time < ?", parse)
|
||||||
|
totalPerQs = totalPerQs.Where("audit_time < ?", parse)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qs.Where("erp_order.pay_status = ? or (erp_order.retail_type = ? and erp_order.state != ?)",
|
qs.Where("erp_order.pay_status = ? or (erp_order.retail_type = ? and erp_order.state != ?)",
|
||||||
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
|
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
|
||||||
|
totalPerQs.Where("erp_order.pay_status = ? or (erp_order.retail_type = ? and erp_order.state != ?)",
|
||||||
|
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
|
||||||
es := qs
|
es := qs
|
||||||
|
rejectedTotalPerQs := totalPerQs
|
||||||
|
|
||||||
// 销售订单的汇总数据
|
// 销售订单的汇总数据
|
||||||
orderSumQs := qs
|
orderSumQs := qs
|
||||||
|
@ -3228,7 +3327,6 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
|
|
||||||
// 销售订单提成汇总
|
// 销售订单提成汇总
|
||||||
var totalPerData TotalPerData
|
var totalPerData TotalPerData
|
||||||
totalPerQs := qs
|
|
||||||
totalPerData, err = getTotalPerData(totalPerQs, RetailTypeSale)
|
totalPerData, err = getTotalPerData(totalPerQs, RetailTypeSale)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("query erp_order_sales sum data err:", logger.Field("err", err))
|
logger.Error("query erp_order_sales sum data err:", logger.Field("err", err))
|
||||||
|
@ -3236,7 +3334,6 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
}
|
}
|
||||||
// 退货订单提成汇总
|
// 退货订单提成汇总
|
||||||
var rejectedTotalPerData TotalPerData
|
var rejectedTotalPerData TotalPerData
|
||||||
rejectedTotalPerQs := qs
|
|
||||||
rejectedTotalPerData, err = getTotalPerData(rejectedTotalPerQs, RetailTypeRejected)
|
rejectedTotalPerData, err = getTotalPerData(rejectedTotalPerQs, RetailTypeRejected)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("query erp_order_sales sum data err:", logger.Field("err", err))
|
logger.Error("query erp_order_sales sum data err:", logger.Field("err", err))
|
||||||
|
@ -3309,7 +3406,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
|
||||||
// 添加付款、销售员、商品信息
|
// 添加付款、销售员、商品信息
|
||||||
ErpOrderRetailDetailSetCommodity(orders)
|
ErpOrderRetailDetailSetCommodity(orders)
|
||||||
erpOrderListSetCashier(orders)
|
erpOrderListSetCashier(orders)
|
||||||
erpOrderListSetSalesman(orders)
|
erpOrderListSetSalesmanByRetailDetail(req.Salesman, orders)
|
||||||
|
|
||||||
resp.List = orders
|
resp.List = orders
|
||||||
|
|
||||||
|
@ -3819,6 +3916,26 @@ func CheckUserStore(userStoreId uint32, sysUser *SysUser) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AuthUserStore 校验是否有某个门店的权限
|
||||||
|
func AuthUserStore(c *gin.Context, storeId uint32) error {
|
||||||
|
// 非管理员才判断所属门店
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !CheckUserStore(storeId, sysUser) {
|
||||||
|
return errors.New("操作失败:您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// checkOrderData 校验订单数据
|
// checkOrderData 校验订单数据
|
||||||
func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
sysUser, err := GetSysUserByCtx(c)
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
@ -3832,6 +3949,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var rejectedOrderSaleId uint32
|
||||||
if req.RetailType == RetailTypeSale {
|
if req.RetailType == RetailTypeSale {
|
||||||
// 校验商品是否有库存,是否是对应门店库存商品
|
// 校验商品是否有库存,是否是对应门店库存商品
|
||||||
err = checkOrderCommodityStock(req)
|
err = checkOrderCommodityStock(req)
|
||||||
|
@ -3839,7 +3957,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else { // 零售退货单,需校验退货商品是否是本门店售卖商品,同一个退货单中只能添加同一销售订单的商品
|
} else { // 零售退货单,需校验退货商品是否是本门店售卖商品,同一个退货单中只能添加同一销售订单的商品
|
||||||
err = checkRejectedOrderRule(req)
|
rejectedOrderSaleId, err = checkRejectedOrderRule(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -3885,6 +4003,10 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
VmCount: req.VmAmount,
|
VmCount: req.VmAmount,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if req.RetailType == RetailTypeRejected {
|
||||||
|
erpOrder.SaleOrderId = rejectedOrderSaleId
|
||||||
|
}
|
||||||
|
|
||||||
commodityMap := make(map[uint32]ErpStockCommodity)
|
commodityMap := make(map[uint32]ErpStockCommodity)
|
||||||
imeiCommodityMap := make(map[string]ErpStockCommodity)
|
imeiCommodityMap := make(map[string]ErpStockCommodity)
|
||||||
if req.RetailType == RetailTypeSale { // 零售订单,查商品表信息
|
if req.RetailType == RetailTypeSale { // 零售订单,查商品表信息
|
||||||
|
@ -4046,8 +4168,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
req.ErpOrderCommodities[i].ErpSupplierName = v.ErpSupplierName // 供应商名称
|
req.ErpOrderCommodities[i].ErpSupplierName = v.ErpSupplierName // 供应商名称
|
||||||
req.ErpOrderCommodities[i].RetailPrice = v.RetailPrice // 指导零售价
|
req.ErpOrderCommodities[i].RetailPrice = v.RetailPrice // 指导零售价
|
||||||
req.ErpOrderCommodities[i].MemberDiscount = v.MemberDiscount // 会员优惠
|
req.ErpOrderCommodities[i].MemberDiscount = v.MemberDiscount // 会员优惠
|
||||||
req.ErpOrderCommodities[i].StaffCostPrice = int32(v.StaffCostPrice) // 员工成本价加价
|
req.ErpOrderCommodities[i].StaffCostPrice = v.StaffCostPrice // 员工成本价加价
|
||||||
req.ErpOrderCommodities[i].WholesalePrice = int32(v.WholesalePrice) // 指导采购价
|
req.ErpOrderCommodities[i].WholesalePrice = v.WholesalePrice // 指导采购价
|
||||||
|
|
||||||
if req.ErpOrderCommodities[i].PresentType == 2 && v.MinRetailPrice != 0 { // 赠送类型商品进行校验,最低零售价为0才能赠送
|
if req.ErpOrderCommodities[i].PresentType == 2 && v.MinRetailPrice != 0 { // 赠送类型商品进行校验,最低零售价为0才能赠送
|
||||||
logger.Error("PresentType is 2, MinRetailPrice no equal 0")
|
logger.Error("PresentType is 2, MinRetailPrice no equal 0")
|
||||||
|
@ -4208,23 +4330,103 @@ func checkOrderCommodityStock(req *ErpOrderCreateReq) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 退货校验
|
// 退货校验
|
||||||
// (1)校验商品是否是当前用户购买
|
// (1)校验退货商品销售时的手机号与当前填写的手机号是否相同,不匹配报错:所退商品的历史订单手机号与当前不符。
|
||||||
// (2)校验退货商品是否是本门店售卖商品
|
// (2)校验商品是否是当前用户购买
|
||||||
// (3)同一个退货单中只能添加同一销售订单的商品
|
// (3)校验退货商品是否是本门店售卖商品
|
||||||
func checkRejectedOrderRule(req *ErpOrderCreateReq) error {
|
// (4)同一个退货单中只能添加同一销售订单的商品
|
||||||
|
func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
|
||||||
if req.RetailType != RetailTypeRejected {
|
if req.RetailType != RetailTypeRejected {
|
||||||
return nil
|
return 0, errors.New("订单类型有误,非退货订单")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(req.ErpOrderCommodities) == 0 {
|
if len(req.ErpOrderCommodities) == 0 {
|
||||||
return errors.New("未添加退货商品")
|
return 0, errors.New("未添加退货商品")
|
||||||
}
|
}
|
||||||
|
|
||||||
//for _, item := range req.ErpOrderCommodities {
|
var salesId uint32
|
||||||
// // 查询退货商品之前的销售情况
|
rejectOrderSalesMap := make(map[string]bool)
|
||||||
//}
|
for _, item := range req.ErpOrderCommodities {
|
||||||
|
// 查询退货商品之前的销售情况
|
||||||
|
if item.IMEIType == NoIMEICommodity { //非串码商品
|
||||||
|
var commodities []ErpOrderCommodity
|
||||||
|
err := orm.Eloquent.Table("erp_order_commodity").
|
||||||
|
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
|
||||||
|
Where("erp_order_commodity.erp_commodity_id = ? and erp_order.store_id = ? "+
|
||||||
|
"and erp_order.retail_type = ? and erp_order.pay_status = ? and erp_order.tel = ?",
|
||||||
|
item.ErpCommodityId, req.StoreId, RetailTypeSale, HavePaid, req.Tel).
|
||||||
|
Find(&commodities).Order("audit_time DESC").Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("query erp_order_commodity err:", logger.Field("err", err))
|
||||||
|
return 0, errors.New("操作失败:" + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
if len(commodities) == 0 {
|
||||||
|
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
var orderInfo ErpOrder
|
||||||
|
err = orm.Eloquent.Table("erp_order").Where("id = ?", commodities[0].ErpOrderId).
|
||||||
|
Find(&orderInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("query erp_order err:", logger.Field("err", err))
|
||||||
|
return 0, errors.New("操作失败:" + err.Error())
|
||||||
|
}
|
||||||
|
if orderInfo.BillSn == "" {
|
||||||
|
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售订单", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
rejectOrderSalesMap[orderInfo.BillSn] = true
|
||||||
|
if len(rejectOrderSalesMap) > 1 {
|
||||||
|
return 0, errors.New("只可添加相同零售订单的商品")
|
||||||
|
}
|
||||||
|
salesId = orderInfo.ID
|
||||||
|
} else { // 串码商品
|
||||||
|
if item.IMEI == "" {
|
||||||
|
return 0, errors.New("退货商品串码为空")
|
||||||
|
}
|
||||||
|
var commodities []ErpOrderCommodity
|
||||||
|
err := orm.Eloquent.Table("erp_order_commodity").
|
||||||
|
Joins("JOIN erp_order ON erp_order_commodity.erp_order_id = erp_order.id ").
|
||||||
|
Where("erp_order_commodity.imei = ? and erp_order.retail_type = ? and erp_order.pay_status = ?",
|
||||||
|
item.IMEI, RetailTypeSale, HavePaid).
|
||||||
|
Find(&commodities).Order("audit_time DESC").Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("query erp_order_commodity err:", logger.Field("err", err))
|
||||||
|
return 0, errors.New("操作失败:" + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(commodities) == 0 {
|
||||||
|
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售情况", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
var orderInfo ErpOrder
|
||||||
|
err = orm.Eloquent.Table("erp_order").Where("id = ?", commodities[0].ErpOrderId).
|
||||||
|
Find(&orderInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("query erp_order err:", logger.Field("err", err))
|
||||||
|
return 0, errors.New("操作失败:" + err.Error())
|
||||||
|
}
|
||||||
|
if orderInfo.BillSn == "" {
|
||||||
|
return 0, errors.New(fmt.Sprintf("未查询到商品[%s]销售订单", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
if orderInfo.Tel != req.Tel {
|
||||||
|
return 0, errors.New(fmt.Sprintf("所退商品[%s]的历史订单手机号与当前不符", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
if orderInfo.StoreId != req.StoreId {
|
||||||
|
return 0, errors.New(fmt.Sprintf("[%s]非当前门店所售商品,需前往对应门店退货", item.ErpCommodityName))
|
||||||
|
}
|
||||||
|
|
||||||
|
rejectOrderSalesMap[orderInfo.BillSn] = true
|
||||||
|
if len(rejectOrderSalesMap) > 1 {
|
||||||
|
return 0, errors.New("只可添加相同零售订单的商品")
|
||||||
|
}
|
||||||
|
salesId = orderInfo.ID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return salesId, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateCommodityData 更新订单商品信息
|
// updateCommodityData 更新订单商品信息
|
||||||
|
|
|
@ -2198,7 +2198,7 @@ func (m *CooperativeGameCardStockReq) List() (*CooperativeGameCardStockResp, err
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GameCardStockList(name string, sortType, sortDirection, storeId, pageNum, pageSize uint32) (*GameCardStockListResp, error) {
|
func GameCardStockList(name string, sortType, sortDirection, storeId, pageNum, pageSize uint32, c *gin.Context) (*GameCardStockListResp, error) {
|
||||||
resp := &GameCardStockListResp{PageIndex: pageNum}
|
resp := &GameCardStockListResp{PageIndex: pageNum}
|
||||||
type GameCardCount struct {
|
type GameCardCount struct {
|
||||||
CountGame uint32 `json:"count_game"`
|
CountGame uint32 `json:"count_game"`
|
||||||
|
@ -2226,6 +2226,7 @@ func GameCardStockList(name string, sortType, sortDirection, storeId, pageNum, p
|
||||||
if storeId != 0 {
|
if storeId != 0 {
|
||||||
sqlStore = fmt.Sprintf(" AND store_id = %d", storeId)
|
sqlStore = fmt.Sprintf(" AND store_id = %d", storeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if name != "" {
|
if name != "" {
|
||||||
var gameCards []GameCard
|
var gameCards []GameCard
|
||||||
sqlName := "SELECT * FROM game_card WHERE `name` LIKE '%" + name + "%';"
|
sqlName := "SELECT * FROM game_card WHERE `name` LIKE '%" + name + "%';"
|
||||||
|
|
|
@ -3,8 +3,10 @@ package models
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
orm "go-admin/common/global"
|
orm "go-admin/common/global"
|
||||||
"go-admin/logger"
|
"go-admin/logger"
|
||||||
|
"go-admin/tools"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"time"
|
"time"
|
||||||
|
@ -433,7 +435,7 @@ func updateAllotCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryAllotE
|
||||||
}
|
}
|
||||||
|
|
||||||
// List 查询采购订单列表
|
// List 查询采购订单列表
|
||||||
func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
|
func (m *InventoryAllotListReq) List(c *gin.Context) (*InventoryAllotListResp, error) {
|
||||||
resp := &InventoryAllotListResp{
|
resp := &InventoryAllotListResp{
|
||||||
PageIndex: m.PageIndex,
|
PageIndex: m.PageIndex,
|
||||||
PageSize: m.PageSize,
|
PageSize: m.PageSize,
|
||||||
|
@ -446,6 +448,41 @@ func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
|
||||||
m.PageSize = 10
|
m.PageSize = 10
|
||||||
}
|
}
|
||||||
qs := orm.Eloquent.Table("erp_inventory_allot_order")
|
qs := orm.Eloquent.Table("erp_inventory_allot_order")
|
||||||
|
|
||||||
|
// 非管理员才判断所属门店
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回sysUser未过期的门店id列表
|
||||||
|
storeList := GetValidStoreIDs(sysUser.StoreData)
|
||||||
|
if m.DeliverStoreId != 0 || m.ReceiveStoreId != 0 {
|
||||||
|
if m.DeliverStoreId != 0 {
|
||||||
|
if !Contains(storeList, m.DeliverStoreId) {
|
||||||
|
return nil, errors.New("您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.ReceiveStoreId != 0 {
|
||||||
|
if !Contains(storeList, m.ReceiveStoreId) {
|
||||||
|
return nil, errors.New("您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if len(storeList) > 0 {
|
||||||
|
if len(storeList) == 1 {
|
||||||
|
qs = qs.Where("deliver_store_id = ? or receive_store_id=?", storeList[0], storeList[0])
|
||||||
|
} else {
|
||||||
|
qs = qs.Where("deliver_store_id IN (?) or receive_store_id IN (?)", storeList, storeList)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, errors.New("用户未绑定门店")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if m.SerialNumber != "" {
|
if m.SerialNumber != "" {
|
||||||
qs = qs.Where("serial_number=?", m.SerialNumber)
|
qs = qs.Where("serial_number=?", m.SerialNumber)
|
||||||
} else {
|
} else {
|
||||||
|
@ -509,7 +546,7 @@ func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AuditAllotInventory 审核库存调拨入库 state:1-审核,2-取消审核
|
// AuditAllotInventory 审核库存调拨入库 state:1-审核,2-取消审核
|
||||||
func AuditAllotInventory(req *InventoryAllotAuditReq, sysUser *SysUser) error {
|
func AuditAllotInventory(req *InventoryAllotAuditReq, c *gin.Context) error {
|
||||||
// 查询订单信息
|
// 查询订单信息
|
||||||
var inventoryAllotOrder ErpInventoryAllotOrder
|
var inventoryAllotOrder ErpInventoryAllotOrder
|
||||||
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
|
@ -519,6 +556,19 @@ func AuditAllotInventory(req *InventoryAllotAuditReq, sysUser *SysUser) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("sys user err:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !CheckUserStore(inventoryAllotOrder.DeliverStoreId, sysUser) {
|
||||||
|
return errors.New("操作失败:您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryAllotOrder.ID == 0 {
|
if inventoryAllotOrder.ID == 0 {
|
||||||
return errors.New("未查询到订单信息")
|
return errors.New("未查询到订单信息")
|
||||||
}
|
}
|
||||||
|
@ -889,7 +939,7 @@ func cancelAllotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOr
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeliverAllotInventory 调拨发货
|
// DeliverAllotInventory 调拨发货
|
||||||
func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
|
func DeliverAllotInventory(req *InventoryAllotDeliverReq, c *gin.Context) error {
|
||||||
// 查询订单信息
|
// 查询订单信息
|
||||||
var inventoryAllotOrder ErpInventoryAllotOrder
|
var inventoryAllotOrder ErpInventoryAllotOrder
|
||||||
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
|
@ -899,6 +949,19 @@ func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("sys user err:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !CheckUserStore(inventoryAllotOrder.DeliverStoreId, sysUser) {
|
||||||
|
return errors.New("操作失败:您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryAllotOrder.ID == 0 {
|
if inventoryAllotOrder.ID == 0 {
|
||||||
return errors.New("未查询到订单信息")
|
return errors.New("未查询到订单信息")
|
||||||
}
|
}
|
||||||
|
@ -923,7 +986,7 @@ func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReceiveAllotInventory 调拨收货
|
// ReceiveAllotInventory 调拨收货
|
||||||
func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error {
|
func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error {
|
||||||
// 查询订单信息
|
// 查询订单信息
|
||||||
var inventoryAllotOrder ErpInventoryAllotOrder
|
var inventoryAllotOrder ErpInventoryAllotOrder
|
||||||
if err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
if err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
|
@ -931,6 +994,20 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error {
|
||||||
logger.Error("order err:", logger.Field("err", err))
|
logger.Error("order err:", logger.Field("err", err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("sys user err:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验入参门店是否包含在用户所有门店中,是否过期
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
if !CheckUserStore(inventoryAllotOrder.ReceiveStoreId, sysUser) {
|
||||||
|
return errors.New("操作失败:您没有该门店权限")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryAllotOrder.ID == 0 {
|
if inventoryAllotOrder.ID == 0 {
|
||||||
return errors.New("未查询到订单信息")
|
return errors.New("未查询到订单信息")
|
||||||
}
|
}
|
||||||
|
@ -991,7 +1068,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error {
|
||||||
nowTime := time.Now()
|
nowTime := time.Now()
|
||||||
inventoryAllotOrder.State = ErpInventoryAllotOrderFinished
|
inventoryAllotOrder.State = ErpInventoryAllotOrderFinished
|
||||||
inventoryAllotOrder.ReceiveTime = &nowTime
|
inventoryAllotOrder.ReceiveTime = &nowTime
|
||||||
err := begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID).
|
err = begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID).
|
||||||
Updates(inventoryAllotOrder).Error
|
Updates(inventoryAllotOrder).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
|
|
|
@ -3,6 +3,7 @@ package models
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
orm "go-admin/common/global"
|
orm "go-admin/common/global"
|
||||||
"go-admin/logger"
|
"go-admin/logger"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
|
@ -417,7 +418,7 @@ func updateChangeCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryChang
|
||||||
}
|
}
|
||||||
|
|
||||||
// List 查询采购订单列表
|
// List 查询采购订单列表
|
||||||
func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
|
func (m *InventoryChangeListReq) List(c *gin.Context) (*InventoryChangeListResp, error) {
|
||||||
resp := &InventoryChangeListResp{
|
resp := &InventoryChangeListResp{
|
||||||
PageIndex: m.PageIndex,
|
PageIndex: m.PageIndex,
|
||||||
PageSize: m.PageSize,
|
PageSize: m.PageSize,
|
||||||
|
@ -430,6 +431,33 @@ func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
|
||||||
m.PageSize = 10
|
m.PageSize = 10
|
||||||
}
|
}
|
||||||
qs := orm.Eloquent.Table("erp_inventory_change_order")
|
qs := orm.Eloquent.Table("erp_inventory_change_order")
|
||||||
|
|
||||||
|
// 非管理员才判断所属门店
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回sysUser未过期的门店id列表
|
||||||
|
storeList := GetValidStoreIDs(sysUser.StoreData)
|
||||||
|
if m.StoreId != 0 {
|
||||||
|
if !Contains(storeList, m.StoreId) {
|
||||||
|
return nil, errors.New("您没有该门店权限")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if len(storeList) > 0 {
|
||||||
|
if len(storeList) == 1 {
|
||||||
|
qs = qs.Where("store_id = ?", storeList[0])
|
||||||
|
} else {
|
||||||
|
qs = qs.Where("store_id IN (?)", storeList)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, errors.New("用户未绑定门店")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if m.SerialNumber != "" {
|
if m.SerialNumber != "" {
|
||||||
qs = qs.Where("serial_number=?", m.SerialNumber)
|
qs = qs.Where("serial_number=?", m.SerialNumber)
|
||||||
} else {
|
} else {
|
||||||
|
@ -493,7 +521,7 @@ func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AuditChangeInventory 审核库存变动入库 state:1-审核,2-取消审核
|
// AuditChangeInventory 审核库存变动入库 state:1-审核,2-取消审核
|
||||||
func AuditChangeInventory(req *InventoryChangeAuditReq, sysUser *SysUser) error {
|
func AuditChangeInventory(req *InventoryChangeAuditReq, c *gin.Context) error {
|
||||||
// 查询订单信息
|
// 查询订单信息
|
||||||
var inventoryChangeOrder ErpInventoryChangeOrder
|
var inventoryChangeOrder ErpInventoryChangeOrder
|
||||||
err := orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
|
err := orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
|
@ -503,6 +531,18 @@ func AuditChangeInventory(req *InventoryChangeAuditReq, sysUser *SysUser) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("sys user err:", logger.Field("err", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = AuthUserStore(c, inventoryChangeOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if inventoryChangeOrder.ID == 0 {
|
if inventoryChangeOrder.ID == 0 {
|
||||||
return errors.New("未查询到订单信息")
|
return errors.New("未查询到订单信息")
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package models
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
orm "go-admin/common/global"
|
orm "go-admin/common/global"
|
||||||
"go-admin/logger"
|
"go-admin/logger"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
|
@ -430,7 +431,7 @@ func updateProductCommodityData(gdb *gorm.DB, orderId uint32, req *ProductInvent
|
||||||
}
|
}
|
||||||
|
|
||||||
// AuditProductInventory 审核产品入库 state:1-审核,2-取消审核
|
// AuditProductInventory 审核产品入库 state:1-审核,2-取消审核
|
||||||
func AuditProductInventory(req *ProductInventoryAuditReq, sysUser *SysUser) error {
|
func AuditProductInventory(req *ProductInventoryAuditReq, c *gin.Context) error {
|
||||||
// 查询订单信息
|
// 查询订单信息
|
||||||
var inventoryProductOrder ErpInventoryProductOrder
|
var inventoryProductOrder ErpInventoryProductOrder
|
||||||
err := orm.Eloquent.Table("erp_inventory_product_order").Where("serial_number = ?", req.SerialNumber).
|
err := orm.Eloquent.Table("erp_inventory_product_order").Where("serial_number = ?", req.SerialNumber).
|
||||||
|
@ -440,6 +441,17 @@ func AuditProductInventory(req *ProductInventoryAuditReq, sysUser *SysUser) erro
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验是否有入参门店权限
|
||||||
|
err = AuthUserStore(c, inventoryProductOrder.StoreId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
begin := orm.Eloquent.Begin()
|
begin := orm.Eloquent.Begin()
|
||||||
|
|
||||||
// 判断入参state:1-审核,2-取消审核
|
// 判断入参state:1-审核,2-取消审核
|
||||||
|
@ -676,7 +688,7 @@ func productAuditAndUpdateStock(gdb *gorm.DB, productOrder ErpInventoryProductOr
|
||||||
}
|
}
|
||||||
|
|
||||||
// List 查询采购订单列表
|
// List 查询采购订单列表
|
||||||
func (m *ProductInventoryListReq) List() (*ProductInventoryListResp, error) {
|
func (m *ProductInventoryListReq) List(c *gin.Context) (*ProductInventoryListResp, error) {
|
||||||
resp := &ProductInventoryListResp{
|
resp := &ProductInventoryListResp{
|
||||||
PageIndex: m.PageIndex,
|
PageIndex: m.PageIndex,
|
||||||
PageSize: m.PageSize,
|
PageSize: m.PageSize,
|
||||||
|
@ -689,6 +701,33 @@ func (m *ProductInventoryListReq) List() (*ProductInventoryListResp, error) {
|
||||||
m.PageSize = 10
|
m.PageSize = 10
|
||||||
}
|
}
|
||||||
qs := orm.Eloquent.Table("erp_inventory_product_order")
|
qs := orm.Eloquent.Table("erp_inventory_product_order")
|
||||||
|
|
||||||
|
// 非管理员才判断所属门店
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回sysUser未过期的门店id列表
|
||||||
|
storeList := GetValidStoreIDs(sysUser.StoreData)
|
||||||
|
if m.StoreId != 0 {
|
||||||
|
if !Contains(storeList, m.StoreId) {
|
||||||
|
return nil, errors.New("您没有该门店权限")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if len(storeList) > 0 {
|
||||||
|
if len(storeList) == 1 {
|
||||||
|
qs = qs.Where("store_id = ?", storeList[0])
|
||||||
|
} else {
|
||||||
|
qs = qs.Where("store_id IN (?)", storeList)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, errors.New("用户未绑定门店")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if m.SerialNumber != "" {
|
if m.SerialNumber != "" {
|
||||||
qs = qs.Where("serial_number=?", m.SerialNumber)
|
qs = qs.Where("serial_number=?", m.SerialNumber)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -4,10 +4,12 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
utils "go-admin/app/admin/models/tools"
|
utils "go-admin/app/admin/models/tools"
|
||||||
orm "go-admin/common/global"
|
orm "go-admin/common/global"
|
||||||
"go-admin/logger"
|
"go-admin/logger"
|
||||||
|
"go-admin/tools"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -1159,7 +1161,7 @@ func (r *GoodsOrderRefundSendReceiveReq) Receive() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if goodsOrder.Vm != 0 {
|
if goodsOrder.Vm != 0 {
|
||||||
err = UserVmUpdate(nil, goodsOrder.Uid, int(goodsOrder.Vm), VmEventBuyGoods, "购买商品积分抵扣取消")
|
err = UserVmUpdate(nil, 0, goodsOrder.Uid, int(goodsOrder.Vm), VmEventBuyGoods, "购买商品积分抵扣取消")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("update user vm err:", err)
|
logger.Errorf("update user vm err:", err)
|
||||||
return err
|
return err
|
||||||
|
@ -1293,7 +1295,7 @@ type DeliverTaskReq struct {
|
||||||
StoreId uint32 `json:"store_id"`
|
StoreId uint32 `json:"store_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *DeliverTaskReq) List() ([]DeliverTask, int64, error) {
|
func (m *DeliverTaskReq) List(c *gin.Context) ([]DeliverTask, int64, error) {
|
||||||
page := m.PageIdx - 1
|
page := m.PageIdx - 1
|
||||||
if page < 0 {
|
if page < 0 {
|
||||||
page = 0
|
page = 0
|
||||||
|
@ -1304,6 +1306,33 @@ func (m *DeliverTaskReq) List() ([]DeliverTask, int64, error) {
|
||||||
|
|
||||||
var list []DeliverTask
|
var list []DeliverTask
|
||||||
qs := orm.Eloquent.Table("deliver_task")
|
qs := orm.Eloquent.Table("deliver_task")
|
||||||
|
|
||||||
|
// 非管理员才判断所属门店
|
||||||
|
if !(tools.GetRoleName(c) == "admin" || tools.GetRoleName(c) == "系统管理员") {
|
||||||
|
sysUser, err := GetSysUserByCtx(c)
|
||||||
|
if err != nil {
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回sysUser未过期的门店id列表
|
||||||
|
storeList := GetValidStoreIDs(sysUser.StoreData)
|
||||||
|
if m.StoreId != 0 {
|
||||||
|
if !Contains(storeList, uint32(m.StoreId)) {
|
||||||
|
return nil, 0, errors.New("您没有该门店权限")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if len(storeList) > 0 {
|
||||||
|
if len(storeList) == 1 {
|
||||||
|
qs = qs.Where("store_id = ?", storeList[0])
|
||||||
|
} else {
|
||||||
|
qs = qs.Where("store_id IN (?)", storeList)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, 0, errors.New("用户未绑定门店")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if m.State != "" {
|
if m.State != "" {
|
||||||
qs = qs.Where("state=?", m.State)
|
qs = qs.Where("state=?", m.State)
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,6 +207,25 @@ func (e *Menu) SetMenuRole(rolename string) (m []Menu, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Menu) SetAdminMenuRole() (m []Menu, err error) {
|
||||||
|
var menulist []Menu
|
||||||
|
table := orm.Eloquent.Table(e.TableName()).Select("sys_menu.*").Where("menu_type in ('M','C')")
|
||||||
|
if err = table.Order("sort").Find(&menulist).Error; err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m = make([]Menu, 0)
|
||||||
|
for i := 0; i < len(menulist); i++ {
|
||||||
|
if menulist[i].ParentId != 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
menusInfo := DiguiMenu(&menulist, menulist[i])
|
||||||
|
|
||||||
|
m = append(m, menusInfo)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (e *MenuRole) Get() (Menus []MenuRole, err error) {
|
func (e *MenuRole) Get() (Menus []MenuRole, err error) {
|
||||||
table := orm.Eloquent.Table(e.TableName())
|
table := orm.Eloquent.Table(e.TableName())
|
||||||
if e.MenuName != "" {
|
if e.MenuName != "" {
|
||||||
|
|
|
@ -993,7 +993,7 @@ func ShareCardUserVmRecord() {
|
||||||
shareCardDateVm.TotalVm += shareCardDateVm.Vm
|
shareCardDateVm.TotalVm += shareCardDateVm.Vm
|
||||||
//fmt.Println("shareCardDateVm:", shareCardDateVm)
|
//fmt.Println("shareCardDateVm:", shareCardDateVm)
|
||||||
|
|
||||||
err = UserVmUpdate(nil, shareCardDateVm.Uid, int(shareCardDateVm.Vm), VmEventUserShareCard, "用户共享卡收益")
|
err = UserVmUpdate(nil, 0, shareCardDateVm.Uid, int(shareCardDateVm.Vm), VmEventUserShareCard, "用户共享卡收益")
|
||||||
//err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.TotalVm), VmEventUserShareCard, "用户共享卡收益")
|
//err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.TotalVm), VmEventUserShareCard, "用户共享卡收益")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("user vm update err:", logger.Field("err", err))
|
logger.Error("user vm update err:", logger.Field("err", err))
|
||||||
|
|
|
@ -43,10 +43,11 @@ type UserVmRecord struct {
|
||||||
Alter int `json:"alter"` // 数值
|
Alter int `json:"alter"` // 数值
|
||||||
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
|
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
|
||||||
Describe string `json:"describe" gorm:"type:text"` // 描述
|
Describe string `json:"describe" gorm:"type:text"` // 描述
|
||||||
|
ErpOrderId uint32 `json:"erp_order_id" gorm:"index"` // 零售订单id
|
||||||
User *UserInfo `json:"user,omitempty" gorm:"-"`
|
User *UserInfo `json:"user,omitempty" gorm:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func UserVmUpdate(gdb *gorm.DB, uid uint32, amount int, event, describe string) error {
|
func UserVmUpdate(gdb *gorm.DB, orderId, uid uint32, amount int, event, describe string) error {
|
||||||
var userVm UserVm
|
var userVm UserVm
|
||||||
err := orm.Eloquent.Table("user_vm").
|
err := orm.Eloquent.Table("user_vm").
|
||||||
Where("uid=?", uid).Find(&userVm).Error
|
Where("uid=?", uid).Find(&userVm).Error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user