This commit is contained in:
li 2022-06-03 11:30:03 +08:00
parent a0d61387b8
commit 226143f6cd
11 changed files with 2331 additions and 20 deletions

View File

@ -482,3 +482,82 @@ func AssistantMemberPromotionList(c *gin.Context) {
RespOK(c, ret)
return
}
func AssistantMemberPromotionDetail(c *gin.Context) {
req := struct {
AssistantUid uint32 `json:"assistant_uid" binding:"required"`
Date string `json:"date" binding:"required"`
PageNum int `json:"page_num" binding:"required"`
PageSize int `json:"page_size"`
}{}
if c.ShouldBindJSON(&req) != nil {
logger.Errorf("para err")
RespJson(c, status.InternalServerError, nil)
return
}
uc := auth.GetCurrentUser(c)
if uc == nil {
logger.Error("uc is nil")
RespJson(c, status.Unauthorized, nil)
return
}
//req.AssistantUid = uc.Uid
dateTime, err := time.Parse("2006-01", req.Date)
if err != nil {
logger.Error("parse err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
req.PageNum -= 1
if req.PageNum < 0 {
req.PageNum = 0
}
if req.PageSize == 0 {
req.PageSize = 10
}
var list []model.UserInvite
qs := model.NewUserInviteQuerySet(model.DB).FromUidEq(req.AssistantUid).
MemberOpenTimeGte(dateTime).MemberOpenTimeLte(dateTime.AddDate(0, 1, 0))
count, err := qs.Count()
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
totalPage := int(count)/req.PageSize + 1
err = qs.OrderDescByMemberOpenTime().Offset(req.PageNum * req.PageSize).Limit(req.PageSize).All(&list)
if err != nil && err != model.RecordNotFound {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
//req.Assistant = model.GetUserByUid(uc.Uid)
//if req.Assistant.XcxRoleId != 2 {
// logger.Error("xcx role err:")
// RespJson(c, status.NoAuth, nil)
// return
//}
//if req.Assistant.UserType != 2 {
// logger.Error("not assistant")
// RespJson(c, status.InternalServerError, nil)
// return
//}
//list, totalPage, err := req.List()
//if err != nil {
// logger.Error("list err:", err)
// RespJson(c, status.InternalServerError, nil)
// return
//}
//model.UserInviteListSetToUser(list)
ret := &map[string]interface{}{
"list": list,
"total_page": totalPage,
"page_num": req.PageNum,
}
RespOK(c, ret)
return
}

View File

@ -288,6 +288,19 @@ func PushWXPayNotice(c *gin.Context) {
logger.Error("err:", err)
return
}
sub := model.DeliverTaskSub{
Uid: uint32(order.Uid),
UserAddressId: uint32(order.UserAddressId),
OrderType: 1,
OrderId: order.ID,
StoreId: uint32(order.StoreId),
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
err = order.InventoryReduction(begin)
if err != nil {
begin.Rollback()
@ -571,7 +584,16 @@ func PushWXPayNotice(c *gin.Context) {
if err != nil {
logger.Error("err:", err)
}
sub := model.DeliverTaskSub{
Uid: uint32(goodsOrder.Uid),
UserAddressId: uint32(goodsOrder.AddressId),
OrderType: 2,
OrderId: goodsOrder.OrderId,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
fundRecord.Uid = uint32(goodsOrder.Uid)
fundRecord.FundType = model.FundTypeBuyGoods
fundRecord.Remark = "积分兑换快递费"
@ -668,6 +690,25 @@ func PushWXPayNotice(c *gin.Context) {
if err != nil {
logger.Error("update pay state err:", err)
}
var share model.ShareCardRetrieve
err = model.NewShareCardRetrieveQuerySet(model.DB).IDEq(record.ID).One(&share)
if err != nil {
log.Error().Msgf("share card retrieve err:%#v", err)
}
if err == nil {
sub := model.DeliverTaskSub{
Uid: share.Uid,
UserAddressId: share.AddressId,
OrderType: 3,
OrderId: share.ID,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
}
fundRecord.Uid = uint32(record.Uid)
fundRecord.FundType = model.FundTypeExpressFee
fundRecord.Remark = "共享卡收回卡快递费"

View File

@ -239,6 +239,18 @@ func MallOrderCreate(c *gin.Context) {
return
}
sub := model.DeliverTaskSub{
Uid: order.Uid,
UserAddressId: order.AddressId,
OrderType: 2,
OrderId: order.OrderId,
StoreId: 0,
}
err = sub.Add()
if err != nil {
logger.Error("deliver task sub add err:", err)
}
ret := map[string]interface{}{
"order_id": order.ID,
"order": order,
@ -616,14 +628,14 @@ func MallOrderCancel(c *gin.Context) {
//}
if goodsOrder.Vm != 0 {
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm)*-1, model.VmEventBuyGoods, "购买商品积分抵扣取消")
err = model.UserVmUpdate(goodsOrder.Uid, int(goodsOrder.Vm), model.VmEventBuyGoods, "购买商品积分抵扣取消")
if err != nil {
logger.Error("err:", err)
RespJson(c, status.InternalServerError, nil)
return
}
}
model.UpdateDeliverTaskSubStateCancel(goodsOrder.OrderId)
RespOK(c, "")
return
}

View File

@ -40,7 +40,7 @@ const (
WxPayBuyGoods = "buy_goods" // 购买商品
WxPayUpgradeMember = "upgrade_member" // 多级会员
WxPayMemberExpireDelay = "member_expire_delay" // 会员过期滞纳金
WxPayShareCardRetrieve = "share_card_retrieve" //
WxPayShareCardRetrieve = "share_card_retrieve" // 收回卡
//WxPayExchangeGoods = "exchange_goods" // 兑换商品
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // 数据库配置 生产

File diff suppressed because it is too large Load Diff

View File

@ -68,7 +68,7 @@ type Goods struct {
SpecIndex string `json:"spec_index" gorm:"index"` // 1_3
//PriceVm uint32 `json:"price_vm"` // 积分价格
//PriceRm uint32 `json:"price_rm"` // 人民币价格
PriceRm uint32 `json:"price_rm"` // 人民币价格
PriceOriginal uint32 `json:"price_original"` // 市场价
DeliveryFee uint32 `json:"delivery_fee"` // 邮费
DealType uint32 `json:"deal_type"` // 1-积分兑换 2-购买 3-抵扣
@ -491,6 +491,13 @@ func (m *GoodsOrderDetailReq) OrderDetail(uid uint32) (*GoodsOrder, error) {
return nil, err
}
order.UserAddress = &userAddress
store, err := GetStore(order.DeliverStoreId)
if err != nil {
logger.Error("store err:", err)
}
order.DeliverStore = store
return &order, nil
}
@ -753,6 +760,7 @@ func (g *Goods) SetDiscount() error {
return err
}
g.GoodsDiscount = discount
return nil
}
@ -768,9 +776,9 @@ func (g *Goods) GetUserDiscount(u *User) (uint32, error) {
case MemberLevelGold:
return g.GoodsDiscount.Gold, nil
case MemberLevelPlatinum:
return g.GoodsDiscount.Gold, nil
return g.GoodsDiscount.Platinum, nil
case MemberLevelBlackGold:
return g.GoodsDiscount.Gold, nil
return g.GoodsDiscount.BlackGold, nil
}
//return 100, errors.New("member level err")
@ -840,3 +848,164 @@ func GetStore(id uint32) (*Store, error) {
}
return &store, nil
}
// 发货
const (
DeliverTaskStateOnDeliver = "on_deliver" // 待发货
DeliverTaskStateDelivered = "delivered" // 已发货
DeliverTaskStateCancel = "cancel" // 已取消
DeliverTaskStateComplete = "complete" // 已完成
)
// gen:qs
type DeliverTask struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
UserAddressId uint32 `json:"user_address_id" gorm:"index"` // 用户地址
State string `json:"state"` // 状态
StoreId uint32 `json:"store_id"` //
DeliverTime time.Time `json:"deliver_time"` // 发货时间
DeliverStoreId uint32 `json:"deliver_store_id" gorm:"index"` // 发货门店
// deliver_task
}
// gen:qs
type DeliverTaskSub struct {
Model
Uid uint32 `json:"uid"`
DeliverTaskId uint32 `json:"deliver_task_id" gorm:"index"`
UserAddressId uint32 `json:"user_address_id" gorm:"index"` // 用户地址
State string `json:"state"` // 状态
OrderType uint32 `json:"order_type"` // 1-借卡 2-商城购买 3-收回卡
OrderId uint32 `json:"order_id" gorm:"index"` // 订单id
StoreId uint32 `json:"store_id"` //
GoodsOrder *GoodsOrder `json:"goods_order" gorm:"-"`
Order *Order `json:"order" gorm:"-"`
ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
// deliver_task_sub
}
func (m *DeliverTaskSub) Add() error {
//exist, err := QueryRecordExist(
// fmt.Sprintf("SELECT * FROM deliver_task WHERE user_address_id = %d AND state='%s'",
// m.UserAddressId, DeliverTaskStateOnDeliver))
//if err != nil {
// log.Error().Msgf("deliver_task exist err:%#v", err)
// return err
//}
//var deliver DeliverTask
//if exist {
// err = NewDeliverTaskQuerySet(DB).UserAddressIdEq(m.UserAddressId).
// StateEq(DeliverTaskStateOnDeliver).One(&deliver)
// if err != nil {
// log.Error().Msgf("deliver err:%#v", err)
// return err
// }
// m.DeliverTaskId = deliver.ID
// m.State = DeliverTaskStateOnDeliver
//
// err = DB.Create(m).Error
// if err != nil {
// log.Error().Msgf("create deliver task sub err:%#v", err)
// return err
// }
// return nil
//}
var deliver DeliverTask
err := NewDeliverTaskQuerySet(DB).UserAddressIdEq(m.UserAddressId).
StateEq(DeliverTaskStateOnDeliver).One(&deliver)
if err != nil && err != RecordNotFound {
log.Error().Msgf("deliver err:%#v", err)
return err
}
if err == RecordNotFound || (deliver.StoreId != 0 && deliver.StoreId != m.StoreId) {
begin := DB.Begin()
deliver = DeliverTask{
Uid: m.Uid,
UserAddressId: m.UserAddressId,
State: DeliverTaskStateOnDeliver,
StoreId: m.StoreId,
}
err = begin.Create(&deliver).Error
if err != nil {
begin.Rollback()
log.Error().Msgf("create deliver task err:%#v", err)
return err
}
m.DeliverTaskId = deliver.ID
m.State = DeliverTaskStateOnDeliver
err = begin.Create(m).Error
if err != nil {
begin.Rollback()
log.Error().Msgf("create deliver task sub err:%#v", err)
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
log.Error().Msgf("commit deliver task sub err:%#v", err)
return err
}
return nil
}
m.DeliverTaskId = deliver.ID
m.State = DeliverTaskStateOnDeliver
err = DB.Create(m).Error
if err != nil {
log.Error().Msgf("create deliver task sub err:%#v", err)
return err
}
if deliver.StoreId == 0 {
err = NewDeliverTaskQuerySet(DB).IDEq(deliver.ID).GetUpdater().SetStoreId(m.StoreId).Update()
if err != nil {
logger.Error("deliver task err:", err)
}
}
return nil
}
func UpdateDeliverTaskSubStateCancel(orderId uint32) {
var sub DeliverTaskSub
err := DB.Table("deliver_task_sub").Where("order_id=?", orderId).Find(&sub).Error
if err != nil {
log.Error().Msgf("deliver task sub err:%#v", err)
return
}
//begin := DB.Begin()
err = DB.Table("deliver_task_sub").Where("order_id=?", orderId).
Update("state", DeliverTaskStateCancel).Error
if err != nil {
//begin.Rollback()
log.Error().Msgf("deliver task sub err:%#v", err)
return
}
exist, err := QueryRecordExist(
fmt.Sprintf("SELECT * FROM deliver_task_sub WHERE deliver_task_id=%d AND state='%s'",
sub.DeliverTaskId, DeliverTaskStateOnDeliver))
if err != nil {
//begin.Rollback()
logger.Error("deliver task sub exist err:", err)
return
}
if !exist {
err := DB.Table("deliver_task").Where("id=?", sub.DeliverTaskId).
Update("state", DeliverTaskStateCancel).Error
if err != nil {
//begin.Rollback()
log.Error().Msgf("deliver task sub err:%#v", err)
return
}
}
//err = begin.Commit().Error
//if err != nil {
// logger.Error("commit err:", err)
//}
}

View File

@ -113,6 +113,8 @@ func InitTestDB() {
&SpecValue{},
&GoodsOrder{},
&OperationLog{},
&DeliverTask{},
&DeliverTaskSub{},
)
fmt.Println("DB init success")
@ -151,7 +153,7 @@ func InitDBProd() {
//&RedeemCode{},
//&UserRedeemCode{},
//&GameCardGoods{},
//
//&UserShareCardBill{},
//&ShareCardBillGame{},
//&UserShareCard{},

View File

@ -670,6 +670,9 @@ func (m *Order) Cancel() (bool, Order, error) {
isRecede = true
}
}
if order.DeliveryType == 2 {
UpdateDeliverTaskSubStateCancel(order.ID)
}
//m.ID = order.ID
//m.Uid = order.Uid
//m.PayPrice = order.PayPrice

View File

@ -657,7 +657,7 @@ func GetUserShareCardDateVmInfo(uid uint32) (ShareCardDateVm, error) {
type ShareCardRetrieveCreateReq struct {
SerialNumbers []string `json:"serial_numbers"`
StoreId uint32 `json:"store_id"` // 门店id
RetrieveCardType uint32 `json:"retrieve_card_type"` // 1-送到门店 2-邮寄 修改
RetrieveCardType uint32 `json:"retrieve_card_type"` // 1-门店 2-邮寄 修改
AddressId uint32 `json:"address_id"` // 收货地址
Amount uint32 `json:"amount"` // 金额
Uid uint32 `json:"uid"`

View File

@ -90,6 +90,13 @@ type UserInvite struct {
ToUid uint32 `json:"to_uid"` // 被邀请用户
StoreType uint32 `json:"store_type"` // 门店类型
MemberLevel uint32 `json:"member_level"` // 会员等级
ToUser *UserLess `json:"to_user"` //
}
type UserLess struct {
Uid uint32 `json:"uid"`
MemberOpenTime time.Time `json:"member_open_time"` // 开通会员
MemberLevel uint32 `json:"member_level"` // 会员等级
}
const (
@ -540,7 +547,6 @@ func (m *UserInviteListReq) InviteUserList() (*UserInviteListResp, error) {
} else {
qs = qs.CreatedAtGte(parse)
}
}
if m.EndTime != "" {
parse, err := time.Parse(DateTimeFormat, m.EndTime)
@ -564,7 +570,8 @@ func (m *UserInviteListReq) InviteUserList() (*UserInviteListResp, error) {
resp.Count = count
var invites []UserInvite
err = qs.Offset(page * m.PageSize).Limit(m.PageSize).OrderDescByID().All(&invites)
//err = qs.Offset(page * m.PageSize).Limit(m.PageSize).OrderDescByID().All(&invites)
err = qs.Offset(page * m.PageSize).Limit(m.PageSize).OrderDescByMemberOpenTime().All(&invites)
if err != nil && err != RecordNotFound {
logger.Error("err:", err)
return resp, err
@ -976,3 +983,28 @@ func (u *User) SetVm() error {
u.UserVm = &userVm
return nil
}
func UserInviteListSetToUser(list []UserInvite) {
ids := make([]uint32, 0, len(list))
for i, _ := range list {
ids = append(ids, list[i].ToUid)
}
userMap, err := GetUserMap(ids)
if err != nil {
logger.Error("user map err:", err)
return
}
for i, _ := range list {
v, ok := userMap[list[i].ToUid]
if ok {
list[i].ToUser = &UserLess{
Uid: v.Uid,
MemberOpenTime: v.OpenMemberTime,
MemberLevel: v.MemberLevel,
}
}
}
}

View File

@ -215,7 +215,7 @@ func ConfigAppRouter(r gin.IRouter) {
shareCard.POST("retrieve_card/confirm", controller.ShareCardRetrieveConfirm) // 我的共享卡收回确认
shareCard.POST("card_issue/add", controller.CardIssueCreate) // 我的共享卡问题反馈
shareCard.POST("card_issue/cancel", controller.CardIssueCancel) // 我的共享卡问题反馈
shareCard.POST("card_issue/cancel", controller.CardIssueCancel) // 我的共享卡问题反馈取消
shareCard.POST("card_issue/list", controller.CardIssueList) // 我的共享卡问题反馈列表
shareCard.POST("card_issue/info", controller.CardIssueInfo) // 我的共享卡问题反馈详情
shareCard.POST("card_issue/deliver", controller.CardIssueDeliver) // 我的共享卡问题反馈卡发货
@ -233,6 +233,7 @@ func ConfigAppRouter(r gin.IRouter) {
cooperative.POST("goods_stock/export", controller.CooperativeExportDataGameCardGoodsStock) // 库存导出
cooperative.POST("goods_stock/goods_list", controller.CooperativeGameCardGoodsList) // 卡列表
cooperative.POST("member_promotion/assistant_list", controller.AssistantMemberPromotionList) // 店员推广 TODO
cooperative.POST("member_promotion/assistant_detail", controller.AssistantMemberPromotionDetail) // 店员推广 TODO
cooperative.POST("display_list", controller.DisplayStoreList) // 用户门店列表
cooperative.POST("invite_report", controller.InviteMemberReportList) // 用户邀请会员业绩报表