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

(1)V1.4.0相关接口增加数据权限校验;
(2)进销存报表中零售销售数量查询规则更新;
(3)零售订单商品表部分uint类型调整为float64类型;
(4)管理员账号默认返回所有菜单;
(5)uer_vm_record表新增erp_order_id字段,用户积分规则调整;
This commit is contained in:
chenlin 2024-06-05 10:50:15 +08:00
parent 9207440c53
commit f5b6024028
20 changed files with 600 additions and 113 deletions

View File

@ -134,8 +134,6 @@ func ErpOrderAudit(c *gin.Context) {
return
}
// todo 需要判断是否有审核权限
var erpOrder model.ErpOrder
err = orm.Eloquent.Table("erp_order").Where("bill_sn = ?", req.BillSn).Find(&erpOrder).Error
if err != nil {

View File

@ -421,7 +421,7 @@ func GameCardStockAnalysis(c *gin.Context) {
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 {
logger.Error("err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, err, "")

View File

@ -136,7 +136,7 @@ func DeliveryCargo(c *gin.Context) {
return
}
err := models.SetStockCommodityState(req.Id)
err := models.SetStockCommodityState(c, req.Id)
if err != nil {
//logger.Error("erp stock err:", err)
app.Error(c, http.StatusInternalServerError, err, "获取失败")

View File

@ -42,6 +42,15 @@ func InventoryAllotAdd(c *gin.Context) {
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)
if err != nil {
logger.Error("InventoryAllotAdd err:", logger.Field("err", err))
@ -74,6 +83,13 @@ func InventoryAllotEdit(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, req.DeliverStoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
inventoryProductOrder, err := models.EditAllotInventory(req)
if err != nil {
logger.Error("InventoryAllotEdit err:", logger.Field("err", err))
@ -101,14 +117,7 @@ func InventoryAllotAudit(c *gin.Context) {
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
}
err = models.AuditAllotInventory(req, sysUser)
err := models.AuditAllotInventory(req, c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
return
@ -140,8 +149,6 @@ func InventoryAllotDelete(c *gin.Context) {
return
}
// todo 需要校验当前用户是否有权限
var inventoryAllotOrder models.ErpInventoryAllotOrder
err = orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
Find(&inventoryAllotOrder).Error
@ -151,6 +158,13 @@ func InventoryAllotDelete(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, inventoryAllotOrder.DeliverStoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
if inventoryAllotOrder.SerialNumber == "" {
logger.Error("order is null")
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
@ -220,7 +234,7 @@ func InventoryAllotList(c *gin.Context) {
return
}
resp, err := req.List()
resp, err := req.List(c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
return
@ -258,6 +272,23 @@ func InventoryAllotDetail(c *gin.Context) {
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则赋值为空
if allotOrder.MakerTime != nil && allotOrder.MakerTime.IsZero() {
allotOrder.MakerTime = nil
@ -296,7 +327,7 @@ func InventoryAllotDeliver(c *gin.Context) {
return
}
err := models.DeliverAllotInventory(req)
err := models.DeliverAllotInventory(req, c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
return
@ -322,7 +353,7 @@ func InventoryAllotReceive(c *gin.Context) {
return
}
err := models.ReceiveAllotInventory(req)
err := models.ReceiveAllotInventory(req, c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "操作失败:"+err.Error())
return

View File

@ -42,6 +42,13 @@ func InventoryChangeAdd(c *gin.Context) {
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)
if err != nil {
logger.Error("InventoryChangeAdd err:", logger.Field("err", err))
@ -74,6 +81,13 @@ func InventoryChangeEdit(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, req.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
if len(req.Commodities) == 0 {
logger.Error("InventoryChangeEdit err:", logger.Field("err", err))
app.Error(c, http.StatusInternalServerError, errors.New("请添加商品"), "请添加商品")
@ -107,14 +121,7 @@ func InventoryChangeAudit(c *gin.Context) {
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
}
err = models.AuditChangeInventory(req, sysUser)
err := models.AuditChangeInventory(req, c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
return
@ -146,8 +153,6 @@ func InventoryChangeDelete(c *gin.Context) {
return
}
// todo 需要校验当前用户是否有权限
var inventoryChangeOrder models.ErpInventoryChangeOrder
err = orm.Eloquent.Table("erp_inventory_change_order").Where("serial_number = ?", req.SerialNumber).
Find(&inventoryChangeOrder).Error
@ -157,6 +162,13 @@ func InventoryChangeDelete(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, inventoryChangeOrder.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
if inventoryChangeOrder.SerialNumber == "" {
logger.Error("order is null")
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
@ -226,7 +238,7 @@ func InventoryChangeList(c *gin.Context) {
return
}
resp, err := req.List()
resp, err := req.List(c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
return
@ -265,6 +277,13 @@ func InventoryChangeDetail(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, changeOrder.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
// 校验时间如果为01-01-01 08:05则赋值为空
if changeOrder.MakerTime != nil && changeOrder.MakerTime.IsZero() {
changeOrder.MakerTime = nil

View File

@ -42,6 +42,13 @@ func ProductInventoryAdd(c *gin.Context) {
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)
if err != nil {
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
@ -75,6 +82,13 @@ func ProductInventoryEdit(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, req.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
inventoryProductOrder, err := models.EditProductInventory(req)
if err != nil {
logger.Error("ProductInventoryAdd err:", logger.Field("err", err))
@ -102,14 +116,7 @@ func ProductInventoryAudit(c *gin.Context) {
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
}
err = models.AuditProductInventory(req, sysUser)
err := models.AuditProductInventory(req, c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "审核失败:"+err.Error())
return
@ -140,8 +147,6 @@ func ProductInventoryDelete(c *gin.Context) {
return
}
// todo 需要校验当前用户是否有权限
var inventoryProductOrder models.ErpInventoryProductOrder
err = orm.Eloquent.Table("erp_inventory_product_order").Where("serial_number = ?", req.SerialNumber).
Find(&inventoryProductOrder).Error
@ -151,6 +156,13 @@ func ProductInventoryDelete(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, inventoryProductOrder.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
if inventoryProductOrder.SerialNumber == "" {
logger.Error("order is null")
app.Error(c, http.StatusInternalServerError, err, "删除失败:订单不存在")
@ -219,7 +231,7 @@ func ProductInventoryList(c *gin.Context) {
return
}
resp, err := req.List()
resp, err := req.List(c)
if err != nil {
app.Error(c, http.StatusInternalServerError, err, "获取失败:"+err.Error())
return
@ -257,6 +269,13 @@ func ProductInventoryDetail(c *gin.Context) {
return
}
// 校验是否有入参门店权限
err = models.AuthUserStore(c, productOrder.StoreId)
if err != nil {
app.Error(c, http.StatusBadRequest, err, err.Error())
return
}
// 校验时间如果为01-01-01 08:05则赋值为空
if productOrder.MakerTime != nil && productOrder.MakerTime.IsZero() {
productOrder.MakerTime = nil

View File

@ -445,7 +445,7 @@ func DeliverTaskList(c *gin.Context) {
}
req.StoreId = sysUser.StoreId
fmt.Println("StoreId:", req.StoreId)
list, totalCount, err := req.List()
list, totalCount, err := req.List(c)
if err != nil {
logger.Errorf("err:%#v", err)
msg := "获取发货列表失败"

View File

@ -154,7 +154,14 @@ func DeleteMenu(c *gin.Context) {
// @Security Bearer
func GetMenuRole(c *gin.Context) {
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)
app.OK(c, result, "")
}

View File

@ -11,7 +11,7 @@ import (
"go-admin/tools"
)
// 权限检查中间件
// AuthCheckRole 权限检查中间件
func AuthCheckRole() gin.HandlerFunc {
return func(c *gin.Context) {
data, _ := c.Get(jwtauth.JwtPayloadKey)

View File

@ -2377,7 +2377,7 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB) {
}
// SetStockCommodityState 更新库存状态
func SetStockCommodityState(id uint32) error { //更新库存状态为5并同步扣减库存数量
func SetStockCommodityState(c *gin.Context, id uint32) error { //更新库存状态为5并同步扣减库存数量
begin := orm.Eloquent.Begin()
// 查询库存详情
@ -2390,6 +2390,12 @@ func SetStockCommodityState(id uint32) error { //更新库存状态为5并同
return err
}
// 校验是否有入参门店权限
err = AuthUserStore(c, commodityInfo.StoreId)
if err != nil {
return err
}
// 查询库存数据
var record ErpStock
err = orm.Eloquent.Table("erp_stock").

View File

@ -432,29 +432,28 @@ func getPurchaseReturnCount(req *ErpDecisionReportReq, stock ErpStock) (Decision
func getSaleOutCount(req *ErpDecisionReportReq, stock ErpStock) (DecisionReportData, error) {
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)
if err != nil {
logger.Errorf("getSystemStartCount err:", err)
return DecisionReportData{}, err
logger.Errorf("err:", 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)
if err != nil {
logger.Errorf("getSystemStartCount err:", err)
return DecisionReportData{}, err
logger.Errorf("err:", 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 = ? "+
"and erp_commodity_id = ?", SoldOut, stock.StoreId, stock.ErpCommodityId).Find(&reportData).Error
err := qs.Select("count(*) as order_sale").Where("erp_order.retail_type = ? and erp_order.state = ? "+
"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 {
return DecisionReportData{}, err
}

View File

@ -116,12 +116,12 @@ type ErpOrderCommodity struct {
RejectedCount uint32 `json:"rejected_count"` // 退货数量
RejectedAmount float64 `json:"rejected_amount"` // 退货金额
RejectedOrderCommodityId uint32 `json:"rejected_order_commodity_id"` // 退货订单商品id
StaffCostPrice int32 `json:"staff_cost_price"` // 员工成本价加价加价50不是加价后的价格
WholesalePrice int32 `json:"wholesale_price"` // 指导采购价
StaffCostPrice float64 `json:"staff_cost_price"` // 员工成本价加价加价50不是加价后的价格
WholesalePrice float64 `json:"wholesale_price"` // 指导采购价
SalesProfit float64 `json:"sales_profit"` // 销售毛利:实际零售价-采购单价;如果为退货订单,则为实际退货价-采购单价
StaffProfit float64 `json:"staff_profit"` // 员工毛利:实际零售价-员工成本价;如果为退货订单,则为实际退货价-员工成本价
ErpStockCommodityID string `json:"erp_stock_commodity_id"` // 库存商品表主键id
StaffPrice int32 `json:"staff_price" gorm:"-"` // 员工成本价
StaffPrice float64 `json:"staff_price" gorm:"-"` // 员工成本价
}
// ErpOrderCashier 订单收款方式
@ -1026,15 +1026,27 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
event = VmEventErpOrderSale
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 = "零售退货扣除积分"
event = VmEventErpOrderReject
vmCount = 0 - tools.RoundFloat64(erpOrder.TotalAmount)
} else {
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 {
logger.Errorf("err:", err)
return err
@ -1161,8 +1173,8 @@ func (m *ErpOrder) SetRetailDetailCommodity() {
orderCommodity.ErpSupplierId = stockCommodity.ErpSupplierId
orderCommodity.ErpSupplierName = stockCommodity.ErpSupplierName
orderCommodity.WholesalePrice = int32(stockCommodity.WholesalePrice)
orderCommodity.StaffCostPrice = int32(stockCommodity.StaffCostPrice)
orderCommodity.WholesalePrice = stockCommodity.WholesalePrice
orderCommodity.StaffCostPrice = stockCommodity.StaffCostPrice
orderCommodity.StaffPrice = orderCommodity.WholesalePrice + orderCommodity.StaffCostPrice
respOrderCommodities = append(respOrderCommodities, orderCommodity)
}
@ -1188,6 +1200,75 @@ func (m *ErpOrder) SetCommodity() {
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) {
for i, _ := range list {
@ -1264,7 +1345,7 @@ func (m *ErpOrder) SetSalesman() {
}
func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
var salesProfit, staffProfit float64
var salesProfit, staffProfit, totalStaffProfit float64
//获取销售毛利、员工毛利数据
for _, item := range m.ErpOrderCommodities {
erpCommodity, err := GetCommodity(item.ErpCommodityId)
@ -1273,10 +1354,12 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
}
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 salesmanList []ErpOrderSales
for _, item := range m.Salesman {
@ -1289,7 +1372,8 @@ func (m *ErpOrderCreateReq) GetSalesmanList() (string, error) {
logger.Error("GetSysUserInfoByUid err:", logger.Field("err", err))
}
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)
}
@ -3147,23 +3231,30 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
}
qs := orm.Eloquent.Table("erp_order")
totalPerQs := orm.Eloquent.Table("erp_order")
if showConfig.ShowAll == "OFF" {
qs = qs.Where("is_print = ? or retail_type = ?", HavePrinted, RetailTypeRejected)
totalPerQs = totalPerQs.Where("is_print = ? or retail_type = ?", HavePrinted, RetailTypeRejected)
}
if req.BillSn != "" { // 订单编号
qs = qs.Where("bill_sn=?", req.BillSn)
totalPerQs = totalPerQs.Where("bill_sn=?", req.BillSn)
} else {
if req.RetailType != "" { // 销售类型
qs = qs.Where("retail_type=?", req.RetailType)
totalPerQs = totalPerQs.Where("retail_type=?", req.RetailType)
}
if req.Uid != 0 { // 用户ID
qs = qs.Where("erp_order.uid=?", req.Uid)
totalPerQs = totalPerQs.Where("erp_order.uid=?", req.Uid)
}
if req.Tel != "" { // 用户手机号
qs = qs.Where("tel=?", req.Tel)
totalPerQs = totalPerQs.Where("tel=?", req.Tel)
}
if req.StoreId != 0 { // 门店ID
qs = qs.Where("store_id=?", req.StoreId)
totalPerQs = totalPerQs.Where("store_id=?", req.StoreId)
}
// 非管理员才判断所属门店
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) == 1 {
qs = qs.Where("store_id = ?", storeList[0])
totalPerQs = totalPerQs.Where("store_id = ?", storeList[0])
} else {
qs = qs.Where("store_id IN (?)", storeList)
totalPerQs = totalPerQs.Where("store_id IN (?)", storeList)
}
} else {
return nil, errors.New("用户未绑定门店")
@ -3186,6 +3279,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
}
if req.Salesman != 0 { // 销售员
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 != "" { // 审核开始时间
parse, err := time.Parse(QueryTimeFormat, req.StartTime)
@ -3193,6 +3287,7 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
logger.Errorf("err:", err)
}
qs = qs.Where("audit_time > ?", parse)
totalPerQs = totalPerQs.Where("audit_time > ?", parse)
}
if 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)
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 != ?)",
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
totalPerQs.Where("erp_order.pay_status = ? or (erp_order.retail_type = ? and erp_order.state != ?)",
HavePaid, RetailTypeRejected, ErpOrderStateUnAudit)
es := qs
rejectedTotalPerQs := totalPerQs
// 销售订单的汇总数据
orderSumQs := qs
@ -3228,7 +3327,6 @@ func queryRetailDetailCommon(req *ErpOrderRetailDetailReq, c *gin.Context) (*Erp
// 销售订单提成汇总
var totalPerData TotalPerData
totalPerQs := qs
totalPerData, err = getTotalPerData(totalPerQs, RetailTypeSale)
if err != nil {
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
rejectedTotalPerQs := qs
rejectedTotalPerData, err = getTotalPerData(rejectedTotalPerQs, RetailTypeRejected)
if err != nil {
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)
erpOrderListSetCashier(orders)
erpOrderListSetSalesman(orders)
erpOrderListSetSalesmanByRetailDetail(req.Salesman, orders)
resp.List = orders
@ -3819,6 +3916,26 @@ func CheckUserStore(userStoreId uint32, sysUser *SysUser) bool {
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 校验订单数据
func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
sysUser, err := GetSysUserByCtx(c)
@ -3832,6 +3949,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
}
}
var rejectedOrderSaleId uint32
if req.RetailType == RetailTypeSale {
// 校验商品是否有库存,是否是对应门店库存商品
err = checkOrderCommodityStock(req)
@ -3839,7 +3957,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
return nil, err
}
} else { // 零售退货单,需校验退货商品是否是本门店售卖商品,同一个退货单中只能添加同一销售订单的商品
err = checkRejectedOrderRule(req)
rejectedOrderSaleId, err = checkRejectedOrderRule(req)
if err != nil {
return nil, err
}
@ -3885,6 +4003,10 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
VmCount: req.VmAmount,
}
if req.RetailType == RetailTypeRejected {
erpOrder.SaleOrderId = rejectedOrderSaleId
}
commodityMap := make(map[uint32]ErpStockCommodity)
imeiCommodityMap := make(map[string]ErpStockCommodity)
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].RetailPrice = v.RetailPrice // 指导零售价
req.ErpOrderCommodities[i].MemberDiscount = v.MemberDiscount // 会员优惠
req.ErpOrderCommodities[i].StaffCostPrice = int32(v.StaffCostPrice) // 员工成本价加价
req.ErpOrderCommodities[i].WholesalePrice = int32(v.WholesalePrice) // 指导采购价
req.ErpOrderCommodities[i].StaffCostPrice = v.StaffCostPrice // 员工成本价加价
req.ErpOrderCommodities[i].WholesalePrice = v.WholesalePrice // 指导采购价
if req.ErpOrderCommodities[i].PresentType == 2 && v.MinRetailPrice != 0 { // 赠送类型商品进行校验最低零售价为0才能赠送
logger.Error("PresentType is 2, MinRetailPrice no equal 0")
@ -4208,23 +4330,103 @@ func checkOrderCommodityStock(req *ErpOrderCreateReq) error {
}
// 退货校验
// 1校验商品是否是当前用户购买
// 2校验退货商品是否是本门店售卖商品
// 3同一个退货单中只能添加同一销售订单的商品
func checkRejectedOrderRule(req *ErpOrderCreateReq) error {
// 1校验退货商品销售时的手机号与当前填写的手机号是否相同不匹配报错所退商品的历史订单手机号与当前不符。
// 2校验商品是否是当前用户购买
// 3校验退货商品是否是本门店售卖商品
// 4同一个退货单中只能添加同一销售订单的商品
func checkRejectedOrderRule(req *ErpOrderCreateReq) (uint32, error) {
if req.RetailType != RetailTypeRejected {
return nil
return 0, errors.New("订单类型有误,非退货订单")
}
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 更新订单商品信息

View File

@ -2198,7 +2198,7 @@ func (m *CooperativeGameCardStockReq) List() (*CooperativeGameCardStockResp, err
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}
type GameCardCount struct {
CountGame uint32 `json:"count_game"`
@ -2226,6 +2226,7 @@ func GameCardStockList(name string, sortType, sortDirection, storeId, pageNum, p
if storeId != 0 {
sqlStore = fmt.Sprintf(" AND store_id = %d", storeId)
}
if name != "" {
var gameCards []GameCard
sqlName := "SELECT * FROM game_card WHERE `name` LIKE '%" + name + "%';"

View File

@ -3,8 +3,10 @@ package models
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"gorm.io/gorm"
"math/rand"
"time"
@ -433,7 +435,7 @@ func updateAllotCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryAllotE
}
// List 查询采购订单列表
func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
func (m *InventoryAllotListReq) List(c *gin.Context) (*InventoryAllotListResp, error) {
resp := &InventoryAllotListResp{
PageIndex: m.PageIndex,
PageSize: m.PageSize,
@ -446,6 +448,41 @@ func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
m.PageSize = 10
}
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 != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
} else {
@ -509,7 +546,7 @@ func (m *InventoryAllotListReq) List() (*InventoryAllotListResp, error) {
}
// AuditAllotInventory 审核库存调拨入库 state1-审核2-取消审核
func AuditAllotInventory(req *InventoryAllotAuditReq, sysUser *SysUser) error {
func AuditAllotInventory(req *InventoryAllotAuditReq, c *gin.Context) error {
// 查询订单信息
var inventoryAllotOrder ErpInventoryAllotOrder
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
}
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 {
return errors.New("未查询到订单信息")
}
@ -889,7 +939,7 @@ func cancelAllotAuditAndUpdateStock(gdb *gorm.DB, allotOrder ErpInventoryAllotOr
}
// DeliverAllotInventory 调拨发货
func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
func DeliverAllotInventory(req *InventoryAllotDeliverReq, c *gin.Context) error {
// 查询订单信息
var inventoryAllotOrder ErpInventoryAllotOrder
err := orm.Eloquent.Table("erp_inventory_allot_order").Where("serial_number = ?", req.SerialNumber).
@ -899,6 +949,19 @@ func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
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 {
return errors.New("未查询到订单信息")
}
@ -923,7 +986,7 @@ func DeliverAllotInventory(req *InventoryAllotDeliverReq) error {
}
// ReceiveAllotInventory 调拨收货
func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error {
func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error {
// 查询订单信息
var inventoryAllotOrder ErpInventoryAllotOrder
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))
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 {
return errors.New("未查询到订单信息")
}
@ -991,7 +1068,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq) error {
nowTime := time.Now()
inventoryAllotOrder.State = ErpInventoryAllotOrderFinished
inventoryAllotOrder.ReceiveTime = &nowTime
err := begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID).
err = begin.Model(&ErpInventoryAllotOrder{}).Where("id = ?", inventoryAllotOrder.ID).
Updates(inventoryAllotOrder).Error
if err != nil {
begin.Rollback()

View File

@ -3,6 +3,7 @@ package models
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
@ -417,7 +418,7 @@ func updateChangeCommodityData(gdb *gorm.DB, orderId uint32, req *InventoryChang
}
// List 查询采购订单列表
func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
func (m *InventoryChangeListReq) List(c *gin.Context) (*InventoryChangeListResp, error) {
resp := &InventoryChangeListResp{
PageIndex: m.PageIndex,
PageSize: m.PageSize,
@ -430,6 +431,33 @@ func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
m.PageSize = 10
}
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 != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
} else {
@ -493,7 +521,7 @@ func (m *InventoryChangeListReq) List() (*InventoryChangeListResp, error) {
}
// AuditChangeInventory 审核库存变动入库 state1-审核2-取消审核
func AuditChangeInventory(req *InventoryChangeAuditReq, sysUser *SysUser) error {
func AuditChangeInventory(req *InventoryChangeAuditReq, c *gin.Context) error {
// 查询订单信息
var inventoryChangeOrder ErpInventoryChangeOrder
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
}
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 {
return errors.New("未查询到订单信息")
}

View File

@ -3,6 +3,7 @@ package models
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
@ -430,7 +431,7 @@ func updateProductCommodityData(gdb *gorm.DB, orderId uint32, req *ProductInvent
}
// AuditProductInventory 审核产品入库 state1-审核2-取消审核
func AuditProductInventory(req *ProductInventoryAuditReq, sysUser *SysUser) error {
func AuditProductInventory(req *ProductInventoryAuditReq, c *gin.Context) error {
// 查询订单信息
var inventoryProductOrder ErpInventoryProductOrder
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
}
sysUser, err := GetSysUserByCtx(c)
if err != nil {
return err
}
// 校验是否有入参门店权限
err = AuthUserStore(c, inventoryProductOrder.StoreId)
if err != nil {
return err
}
begin := orm.Eloquent.Begin()
// 判断入参state1-审核2-取消审核
@ -676,7 +688,7 @@ func productAuditAndUpdateStock(gdb *gorm.DB, productOrder ErpInventoryProductOr
}
// List 查询采购订单列表
func (m *ProductInventoryListReq) List() (*ProductInventoryListResp, error) {
func (m *ProductInventoryListReq) List(c *gin.Context) (*ProductInventoryListResp, error) {
resp := &ProductInventoryListResp{
PageIndex: m.PageIndex,
PageSize: m.PageSize,
@ -689,6 +701,33 @@ func (m *ProductInventoryListReq) List() (*ProductInventoryListResp, error) {
m.PageSize = 10
}
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 != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
} else {

View File

@ -4,10 +4,12 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
utils "go-admin/app/admin/models/tools"
orm "go-admin/common/global"
"go-admin/logger"
"go-admin/tools"
"gorm.io/gorm"
"sort"
"strconv"
@ -1159,7 +1161,7 @@ func (r *GoodsOrderRefundSendReceiveReq) Receive() error {
}
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 {
logger.Errorf("update user vm err:", err)
return err
@ -1293,7 +1295,7 @@ type DeliverTaskReq struct {
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
if page < 0 {
page = 0
@ -1304,6 +1306,33 @@ func (m *DeliverTaskReq) List() ([]DeliverTask, int64, error) {
var list []DeliverTask
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 != "" {
qs = qs.Where("state=?", m.State)
}

View File

@ -207,6 +207,25 @@ func (e *Menu) SetMenuRole(rolename string) (m []Menu, err error) {
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) {
table := orm.Eloquent.Table(e.TableName())
if e.MenuName != "" {

View File

@ -993,7 +993,7 @@ func ShareCardUserVmRecord() {
shareCardDateVm.TotalVm += shareCardDateVm.Vm
//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, "用户共享卡收益")
if err != nil {
logger.Error("user vm update err:", logger.Field("err", err))

View File

@ -43,10 +43,11 @@ type UserVmRecord struct {
Alter int `json:"alter"` // 数值
Event string `json:"event" gorm:"type:varchar(100)"` // 事件
Describe string `json:"describe" gorm:"type:text"` // 描述
ErpOrderId uint32 `json:"erp_order_id" gorm:"index"` // 零售订单id
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
err := orm.Eloquent.Table("user_vm").
Where("uid=?", uid).Find(&userVm).Error