1、修改库存调拨入库编号生成规则;
2、修改商品资料前端入参分页错误时,接口报错的缺陷; 3、修复串码商品(手动添加)零售退货订单审核失败的缺陷; 4、优惠券增加商品编号字段; 5、取消会员时扣减积分,尊享会员优惠券更新为过期状态;
This commit is contained in:
parent
318541c3af
commit
9c72b52723
|
@ -332,6 +332,7 @@ func CancelMembers(c *gin.Context) {
|
|||
app.Error(c, http.StatusInternalServerError, err, "查询用户失败")
|
||||
return
|
||||
}
|
||||
oldMember := userInfo.MemberLevel
|
||||
userInfo.MemberLevel = 1
|
||||
//memberExpire := userInfo.MemberExpire.AddDate(-1, 0, 0)
|
||||
//userInfo.MemberExpire = memberExpire
|
||||
|
@ -353,6 +354,30 @@ func CancelMembers(c *gin.Context) {
|
|||
app.Error(c, http.StatusInternalServerError, err, "取消会员失败")
|
||||
return
|
||||
}
|
||||
|
||||
var vmCount int
|
||||
switch oldMember {
|
||||
case models.MemberLevelGold, models.MemberLevelPeriod: // 黄金会员
|
||||
if userInfo.MemberGenre == 200 { // 年费
|
||||
vmCount = -399
|
||||
} else if userInfo.MemberGenre == 201 { // 季度
|
||||
vmCount = -199
|
||||
} else if userInfo.MemberGenre == 202 { // 半年
|
||||
vmCount = -299
|
||||
}
|
||||
case models.MemberLevelPlatinum: // 白金会员
|
||||
vmCount = -699
|
||||
case models.MemberLevelBlackGold: // 黑金会员
|
||||
vmCount = -1499
|
||||
}
|
||||
|
||||
// 更新用户积分
|
||||
err = models.UserVmUpdate(nil, "", uint32(req.Uid), vmCount, models.VmEventCancelMember,
|
||||
"取消租卡会员")
|
||||
if err != nil {
|
||||
logger.Errorf("err:", err)
|
||||
}
|
||||
|
||||
app.OK(c, userInfo, "修改成功")
|
||||
}
|
||||
|
||||
|
|
|
@ -510,6 +510,10 @@ func (m *ErpCommodityListReq) List() (*ErpCommodityListResp, error) {
|
|||
|
||||
// 计算分页所需的切片索引
|
||||
startIndex := page * m.PageSize
|
||||
if (len(commodities)/m.PageSize + 1) < startIndex {
|
||||
startIndex = 0
|
||||
page = 0
|
||||
}
|
||||
endIndex := (page + 1) * m.PageSize
|
||||
if endIndex > len(commodities) {
|
||||
endIndex = len(commodities)
|
||||
|
|
|
@ -12,20 +12,21 @@ const (
|
|||
type Coupon struct {
|
||||
Model
|
||||
|
||||
Name string `json:"name"` // 优惠券名称
|
||||
Describe string `json:"describe" gorm:"type:text"` // 优惠券简介
|
||||
Rule string `json:"rule" gorm:"type:text"` // 优惠券使用规则
|
||||
CouponType string `json:"coupon_type"` //
|
||||
ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-零售销售
|
||||
ActivityId uint32 `json:"activity_id" gorm:"index"` //
|
||||
Value uint32 `json:"value"` //
|
||||
OutCount uint32 `json:"out_count"` // 用户已领取数量
|
||||
UsedCount uint32 `json:"used_count"` // 用户已使用数量
|
||||
ActiveStart time.Time `json:"active_start"` // 有效期开始
|
||||
ActiveEnd time.Time `json:"active_end"` // 有效期结束 零值永不结束
|
||||
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
|
||||
CategoryNumber string `json:"category_number"` // 可以使用该优惠券的商品分类,如果为空则表示没限制
|
||||
IsDraw bool `json:"is_draw" gorm:"-"` //
|
||||
Name string `json:"name"` // 优惠券名称
|
||||
Describe string `json:"describe" gorm:"type:text"` // 优惠券简介
|
||||
Rule string `json:"rule" gorm:"type:text"` // 优惠券使用规则
|
||||
CouponType string `json:"coupon_type"` //
|
||||
ActivityType uint32 `json:"activity_type"` // 活动类型 1-会员续费 2-零售销售
|
||||
ActivityId uint32 `json:"activity_id" gorm:"index"` //
|
||||
Value uint32 `json:"value"` //
|
||||
OutCount uint32 `json:"out_count"` // 用户已领取数量
|
||||
UsedCount uint32 `json:"used_count"` // 用户已使用数量
|
||||
ActiveStart time.Time `json:"active_start"` // 有效期开始
|
||||
ActiveEnd time.Time `json:"active_end"` // 有效期结束 零值永不结束
|
||||
MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员
|
||||
CategoryNumber string `json:"category_number"` // 可以使用该优惠券的商品分类,如果为空则表示没限制
|
||||
CommodityNumber string `json:"commodity_number"` // 可以使用该优惠券的商品编号,如果为空则表示没限制
|
||||
IsDraw bool `json:"is_draw" gorm:"-"` //
|
||||
}
|
||||
|
||||
// gen:qs
|
||||
|
@ -47,6 +48,7 @@ type UserCoupon struct {
|
|||
PromotionalSales uint32 `json:"promotional_sales"` //
|
||||
RedeemCode string `json:"redeem_code"` //
|
||||
CategoryNumber string `json:"category_number"` // 可以使用该优惠券的商品分类,如果为空则表示没限制
|
||||
CommodityNumber string `json:"commodity_number"` // 可以使用该优惠券的商品编号,如果为空则表示没限制
|
||||
Code string `json:"code"` // 优惠券券码
|
||||
Coupon *Coupon `json:"coupon" gorm:"-"` //
|
||||
UserInfo UserInfo `json:"user_info" gorm:"-"` //
|
||||
|
|
|
@ -1057,7 +1057,7 @@ func UpdateStock(gdb *gorm.DB, erpOrder ErpOrder, state, auditState int) error {
|
|||
}
|
||||
} else if erpOrder.RetailType == RetailTypeRejected { // 零售退货订单
|
||||
for i, _ := range commodities {
|
||||
if commodities[i].IMEIType == 2 { // 串码商品
|
||||
if commodities[i].IMEIType == 2 || commodities[i].IMEIType == 3 { // 串码商品
|
||||
if commodities[i].IMEI == "" {
|
||||
return errors.New("串码为空")
|
||||
}
|
||||
|
|
|
@ -760,7 +760,7 @@ func handleInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) er
|
|||
usedStockCommodityIdList := make(map[uint32][]uint32) // 记录非串码商品已使用的商品库存表主键id
|
||||
// 更新库存数量
|
||||
for i, _ := range trimCommodities {
|
||||
if trimCommodities[i].IMEIType == 2 { // 串码商品
|
||||
if trimCommodities[i].IMEIType == 2 || trimCommodities[i].IMEIType == 3 { // 串码商品
|
||||
if trimCommodities[i].IMEI == "" {
|
||||
return errors.New("串码为空")
|
||||
}
|
||||
|
@ -885,7 +885,7 @@ func handleCancelInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder)
|
|||
|
||||
// 更新库存数量
|
||||
for i, _ := range trimCommodities {
|
||||
if trimCommodities[i].IMEIType == 2 { // 串码商品
|
||||
if trimCommodities[i].IMEIType == 2 || trimCommodities[i].IMEIType == 3 { // 串码商品
|
||||
if trimCommodities[i].IMEI == "" {
|
||||
return errors.New("串码为空")
|
||||
}
|
||||
|
@ -970,7 +970,7 @@ func handleCancelInventoryReduce(gdb *gorm.DB, changeOrder ErpInventoryChangeOrd
|
|||
usedStockCommodityIdList := make(map[uint32][]uint32) // 记录非串码商品已使用的商品库存表主键id
|
||||
// 更新库存数量
|
||||
for i, _ := range trimCommodities {
|
||||
if trimCommodities[i].IMEIType == 2 { // 串码商品
|
||||
if trimCommodities[i].IMEIType == 2 || trimCommodities[i].IMEIType == 3 { // 串码商品
|
||||
if trimCommodities[i].IMEI == "" {
|
||||
return errors.New("串码为空")
|
||||
}
|
||||
|
|
|
@ -536,7 +536,7 @@ func cancelProductAuditAndUpdateStock(gdb *gorm.DB, productOrder ErpInventoryPro
|
|||
|
||||
// 更新库存数量
|
||||
for i, _ := range commodities {
|
||||
if commodities[i].IMEIType == 2 { // 串码商品
|
||||
if commodities[i].IMEIType == 2 || commodities[i].IMEIType == 3 { // 串码商品
|
||||
if commodities[i].IMEI == "" {
|
||||
return errors.New("串码为空")
|
||||
}
|
||||
|
|
|
@ -782,29 +782,63 @@ func (m *ErpPurchaseOrder) IdInit() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// GetPurchaseInventorySn 生成入库编号
|
||||
//// GetPurchaseInventorySn 生成入库编号
|
||||
//func GetPurchaseInventorySn() string {
|
||||
// count := 0
|
||||
// for {
|
||||
// if count > 5 {
|
||||
// return ""
|
||||
// }
|
||||
// nowTime := time.Now()
|
||||
// sn := nowTime.Format("060102")
|
||||
// sn += fmt.Sprintf("%d", nowTime.Unix()%100)
|
||||
// rand.Seed(nowTime.UnixNano())
|
||||
// sn += fmt.Sprintf("%d", rand.Int31n(100))
|
||||
// exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_purchase_inventory WHERE serial_number='%s'", sn))
|
||||
// if err != nil {
|
||||
// logger.Error("sn err:", logger.Field("err", err))
|
||||
// count++
|
||||
// continue
|
||||
// }
|
||||
// if err == nil && !exist {
|
||||
// return sn
|
||||
// }
|
||||
// return ""
|
||||
// }
|
||||
//}
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
// GetPurchaseInventorySn generates a unique inventory serial number
|
||||
func GetPurchaseInventorySn() string {
|
||||
count := 0
|
||||
for {
|
||||
if count > 5 {
|
||||
return ""
|
||||
}
|
||||
const maxRetries = 5
|
||||
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
for retryCount := 0; retryCount < maxRetries; retryCount++ {
|
||||
nowTime := time.Now()
|
||||
sn := nowTime.Format("060102")
|
||||
sn += fmt.Sprintf("%d", nowTime.Unix()%100)
|
||||
rand.Seed(nowTime.UnixNano())
|
||||
sn += fmt.Sprintf("%d", rand.Int31n(100))
|
||||
// 使用日期格式精确到天
|
||||
datePart := nowTime.Format("060102") // 格式为 YYMMDD
|
||||
// 生成10位随机数
|
||||
rand.Seed(nowTime.UnixNano() + int64(retryCount)) // 为了确保每次生成不同的随机数
|
||||
randomNum := rand.Int63n(1e10) // 10位随机数,范围从0到9999999999
|
||||
randomPart := fmt.Sprintf("%010d", randomNum) // 确保随机数是10位的,前面补零
|
||||
|
||||
// 拼接日期部分和随机数部分
|
||||
sn := fmt.Sprintf("%s%s", datePart, randomPart)
|
||||
|
||||
exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_purchase_inventory WHERE serial_number='%s'", sn))
|
||||
if err != nil {
|
||||
logger.Error("sn err:", logger.Field("err", err))
|
||||
count++
|
||||
continue
|
||||
}
|
||||
if err == nil && !exist {
|
||||
if !exist {
|
||||
return sn
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
return "" // 返回空字符串,如果在最大重试次数后仍未找到唯一编号
|
||||
}
|
||||
|
||||
// CheckCreateErpPurchaseOrderParam 新增采购订单-检查参数
|
||||
|
@ -5740,6 +5774,9 @@ func CancelAuditUpdateStock(begin *gorm.DB, req ErpPurchaseOrder) error {
|
|||
// Inventories: inventoryList,
|
||||
//}
|
||||
|
||||
// 赋值采购退货单号
|
||||
purchaseOrder.RejectedSerialNumber = purchaseOrder.SerialNumber
|
||||
|
||||
// 按照采购退货更新库存
|
||||
err = InventoryErpPurchaseUpdateRejectStock(begin, inventoryList, purchaseOrder)
|
||||
if err != nil {
|
||||
|
|
|
@ -80,6 +80,7 @@ type UserInfo struct {
|
|||
|
||||
Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` //
|
||||
MemberLevel uint32 `json:"member_level"` // 当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员
|
||||
MemberGenre uint32 `json:"member_genre"` // 会员类型 200-黄金年费 201-黄金季度 202-黄金半年
|
||||
MemberExpire *time.Time `json:"member_expire"` // 会员到期时间
|
||||
OpenMemberTime *time.Time `json:"open_member_time"` // 开通会员时间
|
||||
Bond uint32 `json:"bond"` // 保证金
|
||||
|
@ -4474,9 +4475,11 @@ func (m *CancelPrivilegeMembersReq) CancelPrivilegeMembers() (*PrivilegeMember,
|
|||
userInfo.MemberExpire = &nowTime
|
||||
userInfo.ExtendStatus = ExtendExpire
|
||||
|
||||
begin := orm.Eloquent.Begin()
|
||||
sql := fmt.Sprintf("UPDATE `privilege_member` SET member_level = 1,member_expire=?,updated_at=?,extend_status=1 WHERE uid = ?;")
|
||||
err = orm.Eloquent.Debug().Exec(sql, nowTime, nowTime, m.Uid).Error
|
||||
err = begin.Exec(sql, nowTime, nowTime, m.Uid).Error
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Errorf("err:", logger.Field("err", err))
|
||||
return nil, err
|
||||
}
|
||||
|
@ -4491,5 +4494,40 @@ func (m *CancelPrivilegeMembersReq) CancelPrivilegeMembers() (*PrivilegeMember,
|
|||
// return nil, err
|
||||
//}
|
||||
|
||||
// 修改尊享会员优惠券,改为过期状态
|
||||
var userCoupon []UserCoupon
|
||||
err = orm.Eloquent.Table("user_coupon").Where("uid = ? and activity_id = 6", m.Uid).Find(&userCoupon).Error
|
||||
if err != nil || err == RecordNotFound {
|
||||
logger.Errorf("err:", logger.Field("err", err))
|
||||
}
|
||||
|
||||
for i, _ := range userCoupon {
|
||||
err = begin.Table("user_coupon").Where("id = ?", userCoupon[i].ID).Updates(map[string]interface{}{
|
||||
"state": 3,
|
||||
"updated_at": time.Now(),
|
||||
}).Error
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("UpdateCoupon err:", logger.Field("err", err))
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// 更新用户积分
|
||||
err = UserVmUpdate(begin, "", uint32(m.Uid), -199, VmEventCancelPrivilegeMember,
|
||||
"取消尊享会员")
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Errorf("err:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = begin.Commit().Error
|
||||
if err != nil {
|
||||
begin.Rollback()
|
||||
logger.Error("CancelPrivilegeMember err:", logger.Field("err", err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &userInfo, nil
|
||||
}
|
||||
|
|
|
@ -10,16 +10,18 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
VmEventBuyGoods = "buy_goods" // 购买商品积分抵扣
|
||||
VmEventBuyGoodsReject = "buy_goods_reject" // 购买商品积分抵扣取消
|
||||
VmEventOpenMember = "open_member" // 开通会员奖励
|
||||
VmEventInvite1Member = "invite_1_member" // 邀请会员奖励
|
||||
VmEventInvite2Member = "invite_2_member" // 邀请会员奖励
|
||||
VmEventUserShareCard = "user_share_card" // 用户共享卡收益
|
||||
VmEventAttendance = "attendance" // 连续签到获取积分
|
||||
VmEventErpOrderSale = "erp_order_sale" // 零售销售获得积分
|
||||
VmEventErpOrderReject = "erp_order_reject" // 零售退货扣除积分
|
||||
VmEventExpired = "vm_expired" // 积分过期扣减
|
||||
VmEventBuyGoods = "buy_goods" // 购买商品积分抵扣
|
||||
VmEventBuyGoodsReject = "buy_goods_reject" // 购买商品积分抵扣取消
|
||||
VmEventOpenMember = "open_member" // 开通会员奖励
|
||||
VmEventInvite1Member = "invite_1_member" // 邀请会员奖励
|
||||
VmEventInvite2Member = "invite_2_member" // 邀请会员奖励
|
||||
VmEventUserShareCard = "user_share_card" // 用户共享卡收益
|
||||
VmEventAttendance = "attendance" // 连续签到获取积分
|
||||
VmEventErpOrderSale = "erp_order_sale" // 零售销售获得积分
|
||||
VmEventErpOrderReject = "erp_order_reject" // 零售退货扣除积分
|
||||
VmEventExpired = "vm_expired" // 积分过期扣减
|
||||
VmEventCancelMember = "cancel_member" // 取消租卡会员
|
||||
VmEventCancelPrivilegeMember = "cancel_privilege_member" // 取消尊享会员
|
||||
)
|
||||
|
||||
// 用户积分
|
||||
|
|
13
docs/docs.go
13
docs/docs.go
|
@ -6221,6 +6221,7 @@ const docTemplate = `{
|
|||
"tags": [
|
||||
"system/用户"
|
||||
],
|
||||
"summary": "登陆",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "account",
|
||||
|
@ -11480,11 +11481,11 @@ const docTemplate = `{
|
|||
},
|
||||
"total_staff_price": {
|
||||
"description": "入库员工成本价之和",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"total_wholesale_price": {
|
||||
"description": "入库采购价之和",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -16960,6 +16961,10 @@ const docTemplate = `{
|
|||
"description": "会员过期天数",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_genre": {
|
||||
"description": "会员类型 200-黄金年费 201-黄金季度 202-黄金半年",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_level": {
|
||||
"description": "当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员",
|
||||
"type": "integer"
|
||||
|
@ -17125,6 +17130,10 @@ const docTemplate = `{
|
|||
"description": "会员到期时间",
|
||||
"type": "string"
|
||||
},
|
||||
"member_genre": {
|
||||
"description": "会员类型 200-黄金年费 201-黄金季度 202-黄金半年",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_level": {
|
||||
"description": "当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员",
|
||||
"type": "integer"
|
||||
|
|
|
@ -6210,6 +6210,7 @@
|
|||
"tags": [
|
||||
"system/用户"
|
||||
],
|
||||
"summary": "登陆",
|
||||
"parameters": [
|
||||
{
|
||||
"description": "account",
|
||||
|
@ -11469,11 +11470,11 @@
|
|||
},
|
||||
"total_staff_price": {
|
||||
"description": "入库员工成本价之和",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
},
|
||||
"total_wholesale_price": {
|
||||
"description": "入库采购价之和",
|
||||
"type": "integer"
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -16949,6 +16950,10 @@
|
|||
"description": "会员过期天数",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_genre": {
|
||||
"description": "会员类型 200-黄金年费 201-黄金季度 202-黄金半年",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_level": {
|
||||
"description": "当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员",
|
||||
"type": "integer"
|
||||
|
@ -17114,6 +17119,10 @@
|
|||
"description": "会员到期时间",
|
||||
"type": "string"
|
||||
},
|
||||
"member_genre": {
|
||||
"description": "会员类型 200-黄金年费 201-黄金季度 202-黄金半年",
|
||||
"type": "integer"
|
||||
},
|
||||
"member_level": {
|
||||
"description": "当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员",
|
||||
"type": "integer"
|
||||
|
|
|
@ -3793,10 +3793,10 @@ definitions:
|
|||
type: integer
|
||||
total_staff_price:
|
||||
description: 入库员工成本价之和
|
||||
type: integer
|
||||
type: number
|
||||
total_wholesale_price:
|
||||
description: 入库采购价之和
|
||||
type: integer
|
||||
type: number
|
||||
type: object
|
||||
models.ErpStockListReq:
|
||||
properties:
|
||||
|
@ -7737,6 +7737,9 @@ definitions:
|
|||
member_expire_days:
|
||||
description: 会员过期天数
|
||||
type: integer
|
||||
member_genre:
|
||||
description: 会员类型 200-黄金年费 201-黄金季度 202-黄金半年
|
||||
type: integer
|
||||
member_level:
|
||||
description: 当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员
|
||||
type: integer
|
||||
|
@ -7858,6 +7861,9 @@ definitions:
|
|||
member_expire:
|
||||
description: 会员到期时间
|
||||
type: string
|
||||
member_genre:
|
||||
description: 会员类型 200-黄金年费 201-黄金季度 202-黄金半年
|
||||
type: integer
|
||||
member_level:
|
||||
description: 当前会员等级:10-普通用户 1-普通会员 2-黄金会员 4-白金会员 5-黑金会员
|
||||
type: integer
|
||||
|
@ -12236,6 +12242,7 @@ paths:
|
|||
}'
|
||||
schema:
|
||||
type: string
|
||||
summary: 登陆
|
||||
tags:
|
||||
- system/用户
|
||||
/logout:
|
||||
|
|
Loading…
Reference in New Issue
Block a user