diff --git a/controller/user_share_card.go b/controller/user_share_card.go index 4be023d..656015b 100644 --- a/controller/user_share_card.go +++ b/controller/user_share_card.go @@ -383,15 +383,16 @@ func ShareCardRetrieveCreate(c *gin.Context) { RespJson(c, status.ShareCardRetrieveExistAppliedCard, nil) return } - req.Amount = 40 // TODO 测试数据 + //req.Amount = 40 // TODO 测试数据 retrieve, err := req.RetrieveCreate() if err != nil { logger.Error("share card retrieve create err:", err) if err.Error() == "before_6_month" { RespJson(c, status.CardRetrieveBefore6Month, nil) - return + } else { + RespJson(c, status.InternalServerError, nil) } - RespJson(c, status.InternalServerError, nil) + return } if req.RetrieveCardType == 1 { @@ -620,10 +621,12 @@ func ShareCardRetrieveConfirm(c *gin.Context) { func CardIssueCreate(c *gin.Context) { req := struct { - RelevanceId uint32 `json:"relevance_id"` // 关联id - ObtainType string `json:"obtain_type"` // 卡类型 - Problem string `json:"problem"` // 问题 - Remark string `json:"remark"` + RelevanceId uint32 `json:"relevance_id"` // 关联id + ObtainType string `json:"obtain_type"` // 卡类型 + Problem string `json:"problem"` // 问题 + Remark string `json:"remark"` + TransportType uint32 `json:"transport_type"` // 1-送卡到门店 2-邮寄 + UserAddressId uint32 `json:"user_address_id"` // 用户地址 }{} if c.ShouldBindJSON(&req) != nil { logger.Error("parameter err") @@ -635,7 +638,18 @@ func CardIssueCreate(c *gin.Context) { RespJson(c, status.Unauthorized, nil) return } - + count, err := model.NewCardIssueFeedbackQuerySet(model.DB).RelevanceIdEq(req.RelevanceId). + StateNe(model.CardIssueStateCanceled).Count() + if err != nil { + logger.Error("card issue feedback count err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if count > 0 { + logger.Error("card issue feedback exist") + RespJson(c, status.IssueFeedbackRepetition, nil) + return + } var feedback *model.CardIssueFeedback if req.ObtainType == "retrieve_card" { var shareCardRetrieveCard model.ShareCardRetrieveCard @@ -667,6 +681,8 @@ func CardIssueCreate(c *gin.Context) { Problem: req.Problem, Remark: req.Remark, State: model.CardIssueStateFollowing, + TransportType: req.TransportType, + UserAddressId: req.UserAddressId, } } else if req.ObtainType == "rent_card" { var orderCard model.OrderCard @@ -692,13 +708,21 @@ func CardIssueCreate(c *gin.Context) { Problem: req.Problem, Remark: req.Remark, State: model.CardIssueStateFollowing, + TransportType: req.TransportType, + UserAddressId: req.UserAddressId, + } + _, err = model.NewOrderCardQuerySet(model.DB).IDEq(req.RelevanceId).GetUpdater().SetIssueType(1).UpdateNum() + if err != nil { + logger.Error("order err:", err) + RespJson(c, status.InternalServerError, nil) + return } } else { logger.Error("obtain type err:") RespJson(c, status.InternalServerError, nil) return } - err := model.DB.Create(feedback).Error + err = model.DB.Create(feedback).Error if err != nil { logger.Error("create feedback err:") RespJson(c, status.InternalServerError, nil) @@ -742,7 +766,15 @@ func CardIssueCancel(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - + if cardIssueFeedback.ObtainType == model.ObtainTypeRentCard { + _, err = model.NewOrderCardQuerySet(model.DB).IDEq(cardIssueFeedback.RelevanceId).GetUpdater(). + SetIssueType(2).UpdateNum() + if err != nil { + logger.Error("order err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + } RespOK(c, nil) return } @@ -759,6 +791,9 @@ func CardIssueList(c *gin.Context) { return } uc := auth.GetCurrentUser(c) + //uc := &auth.UserClaims{ + // Uid: 49393347, + //} if uc == nil { logger.Error("user err") RespJson(c, status.Unauthorized, nil) @@ -783,7 +818,7 @@ func CardIssueList(c *gin.Context) { if req.PageSize == 0 { req.PageSize = 10 } - totalPage := count / req.PageSize + totalPage := count/req.PageSize + 1 err = qs.OrderDescByID().Offset(page * req.PageSize).Limit(req.PageSize).All(&issueFeedbacks) if err != nil && err != model.RecordNotFound { @@ -833,8 +868,16 @@ func CardIssueInfo(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } + var userAddress model.UserAddress + err = model.NewUserAddressQuerySet(model.DB).IDEq(issueFeedback.UserAddressId).One(&userAddress) + if err != nil && err != model.RecordNotFound { + logger.Error("game card err") + RespJson(c, status.InternalServerError, nil) + return + } issueFeedback.Store = &store issueFeedback.GameCard = &gameCard + issueFeedback.UserAddress = &userAddress RespOK(c, issueFeedback) return @@ -855,7 +898,7 @@ func CardIssueDeliver(c *gin.Context) { //var issueFeedback model.CardIssueFeedback _, err := model.NewCardIssueFeedbackQuerySet(model.DB).IDEq(req.CardIssueFeedbackId).GetUpdater(). SetExpressCompany(req.ExpressCompany).SetExpressCompanyNo(req.ExpressCompanyNo). - SetDeliverExpressNo(req.ExpressNo).UpdateNum() + SetExpressNo(req.ExpressNo).UpdateNum() if err != nil { logger.Error("card issue feedback err") RespJson(c, status.InternalServerError, nil) diff --git a/lib/status/status.go b/lib/status/status.go index b7f641c..211cd10 100644 --- a/lib/status/status.go +++ b/lib/status/status.go @@ -97,6 +97,7 @@ const ( ShareCardRetrieveExistAppliedCard = 500513 // 共享单状态不能取消 IssueFeedbackReceiptTimeOver48Hour = 500514 // 问题反馈 超过 48小时 CardRetrieveBefore6Month = 500515 // 用户收回卡需要半年后 + IssueFeedbackRepetition = 500516 // 问题反馈已存在,不能重复反馈 GoodsNotSale = 500508 // 商品已下架 @@ -226,6 +227,7 @@ var statusMsg = map[int]string{ ShareCardRetrieveExistAppliedCard: "存在重复申请收回的卡", IssueFeedbackReceiptTimeOver48Hour: "签收后已超过48小时", CardRetrieveBefore6Month: "收回的卡需共享满半年", + IssueFeedbackRepetition: "改卡反馈已存在,不能重复反馈", PayStateIng: "支付中", PayStateFail: "支付失败", MoneySufficient: "余额不足", diff --git a/model/autogenerated_order.go b/model/autogenerated_order.go index 214022f..9b2f9f4 100644 --- a/model/autogenerated_order.go +++ b/model/autogenerated_order.go @@ -1115,6 +1115,62 @@ func (qs OrderCardQuerySet) IDNotIn(ID ...uint32) OrderCardQuerySet { return qs.w(qs.db.Where("id NOT IN (?)", ID)) } +// IssueTypeEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeEq(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type = ?", issueType)) +} + +// IssueTypeGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeGt(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type > ?", issueType)) +} + +// IssueTypeGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeGte(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type >= ?", issueType)) +} + +// IssueTypeIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeIn(issueType ...uint32) OrderCardQuerySet { + if len(issueType) == 0 { + qs.db.AddError(errors.New("must at least pass one issueType in IssueTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("issue_type IN (?)", issueType)) +} + +// IssueTypeLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeLt(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type < ?", issueType)) +} + +// IssueTypeLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeLte(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type <= ?", issueType)) +} + +// IssueTypeNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeNe(issueType uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("issue_type != ?", issueType)) +} + +// IssueTypeNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IssueTypeNotIn(issueType ...uint32) OrderCardQuerySet { + if len(issueType) == 0 { + qs.db.AddError(errors.New("must at least pass one issueType in IssueTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("issue_type NOT IN (?)", issueType)) +} + // Limit is an autogenerated method // nolint: dupl func (qs OrderCardQuerySet) Limit(limit int) OrderCardQuerySet { @@ -1181,6 +1237,12 @@ func (qs OrderCardQuerySet) OrderAscByID() OrderCardQuerySet { return qs.w(qs.db.Order("id ASC")) } +// OrderAscByIssueType is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByIssueType() OrderCardQuerySet { + return qs.w(qs.db.Order("issue_type ASC")) +} + // OrderAscByOrderId is an autogenerated method // nolint: dupl func (qs OrderCardQuerySet) OrderAscByOrderId() OrderCardQuerySet { @@ -1307,6 +1369,12 @@ func (qs OrderCardQuerySet) OrderDescByID() OrderCardQuerySet { return qs.w(qs.db.Order("id DESC")) } +// OrderDescByIssueType is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByIssueType() OrderCardQuerySet { + return qs.w(qs.db.Order("issue_type DESC")) +} + // OrderDescByOrderId is an autogenerated method // nolint: dupl func (qs OrderCardQuerySet) OrderDescByOrderId() OrderCardQuerySet { @@ -2157,6 +2225,13 @@ func (u OrderCardUpdater) SetID(ID uint32) OrderCardUpdater { return u } +// SetIssueType is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetIssueType(issueType uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.IssueType)] = issueType + return u +} + // SetOrderId is an autogenerated method // nolint: dupl func (u OrderCardUpdater) SetOrderId(orderId uint32) OrderCardUpdater { @@ -2297,6 +2372,7 @@ var OrderCardDBSchema = struct { RevertExpressCompanyNo OrderCardDBSchemaField RevertExpressNo OrderCardDBSchemaField RevertExpressDuration OrderCardDBSchemaField + IssueType OrderCardDBSchemaField }{ ID: OrderCardDBSchemaField("id"), @@ -2320,6 +2396,7 @@ var OrderCardDBSchema = struct { RevertExpressCompanyNo: OrderCardDBSchemaField("revert_express_company_no"), RevertExpressNo: OrderCardDBSchemaField("revert_express_no"), RevertExpressDuration: OrderCardDBSchemaField("revert_express_duration"), + IssueType: OrderCardDBSchemaField("issue_type"), } // Update updates OrderCard fields by primary key @@ -2347,6 +2424,7 @@ func (o *OrderCard) Update(db *gorm.DB, fields ...OrderCardDBSchemaField) error "revert_express_company_no": o.RevertExpressCompanyNo, "revert_express_no": o.RevertExpressNo, "revert_express_duration": o.RevertExpressDuration, + "issue_type": o.IssueType, } u := map[string]interface{}{} for _, f := range fields { diff --git a/model/model_test.go b/model/model_test.go index d7d7afd..9172f1e 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -105,6 +105,7 @@ func InitTestDB() { &UserRentCard{}, &UserConsumeRecord{}, &UserMemberExpireDelay{}, + &UserShareCardBill{}, &ShareCardBillGame{}, &UserShareCard{}, @@ -155,6 +156,18 @@ func InitDBProd() { DBProd.AutoMigrate( &RedeemCode{}, &UserRedeemCode{}, + + &UserShareCardBill{}, + &ShareCardBillGame{}, + &UserShareCard{}, + &ShareCardVmRecord{}, + &UserShareCardVm{}, + &ShareCardDateVm{}, + &ShareCardGameVm{}, + &ShareCardRetrieve{}, + &ShareCardRetrieveCard{}, + &GameCardLabel{}, + &CardIssueFeedback{}, ) if err := DBProd.DB().Ping(); err != nil { @@ -164,6 +177,10 @@ func InitDBProd() { fmt.Println("DB init success") } +func TestInitProdDBModel(t *testing.T) { + InitDBProd() +} + func TestHotSearch_TableName(t *testing.T) { InitTestDB() diff --git a/model/order.go b/model/order.go index 62ad263..74951ba 100644 --- a/model/order.go +++ b/model/order.go @@ -88,16 +88,17 @@ type OrderCard struct { RevertExpressNo string `json:"revert_express_no"` // 归还物流单号 RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长 //Status uint8 `json:"status" gorm:"index"` // 1-待领取 2-游玩中 3-已归还 4-未领取 - + IssueType uint32 `json:"issue_type"` // 问题类型: 1-问题反馈 2-正常 Postage uint32 `json:"postage" gorm:"-"` // 邮费 ExpressCompany string `json:"express_company" gorm:"-"` // 物流公司 ExpressCompanyNo string `json:"express_company_no" gorm:"-"` // 物流公司编号 ExpressNo string `json:"express_no" gorm:"-"` // 物流单号 - GameName string `json:"name" gorm:"-"` // 名称 - GamePrice uint32 `json:"price" gorm:"-"` // 价格 - GameCoverImg string `json:"cover_img" gorm:"-"` // 封面 - Order *Order `json:"order" gorm:"-"` // 订单 + GameName string `json:"name" gorm:"-"` // 名称 + GamePrice uint32 `json:"price" gorm:"-"` // 价格 + GameCoverImg string `json:"cover_img" gorm:"-"` // 封面 + IssueFeedbackStoreId uint32 `json:"issue_feedback_store_id" gorm:"-"` // 问题反馈门店 + Order *Order `json:"order" gorm:"-"` // 订单 //PickupCode string `json:"pickup_code"` // 取货码 } @@ -134,35 +135,37 @@ func OrderCardListSetGameInfo(list []OrderCard) []OrderCard { return list } - fmt.Println("ids:", ids) cardMap, err := GameCardMap(ids) if err != nil { logger.Error("err:", err) return list } - bytes, _ := json.Marshal(&cardMap) - orderMapbytes, _ := json.Marshal(&orderMap) - fmt.Println("cardMap:", string(bytes)) - fmt.Println("orderMap:", string(orderMapbytes)) + + //fmt.Println("ids:", ids) + //NewCardIssueFeedbackQuerySet(DB).SerialNumberEq() + //bytes, _ := json.Marshal(&cardMap) + //orderMapbytes, _ := json.Marshal(&orderMap) + //fmt.Println("cardMap:", string(bytes)) + //fmt.Println("orderMap:", string(orderMapbytes)) for i, _ := range list { - fmt.Println("list[i].GameCardId", list[i].GameCardId) - fmt.Println("list[i].OrderId", list[i].OrderId) + //fmt.Println("list[i].GameCardId", list[i].GameCardId) + //fmt.Println("list[i].OrderId", list[i].OrderId) gameCard, ok1 := cardMap[list[i].GameCardId] order, ok2 := orderMap[list[i].OrderId] - fmt.Printf("gameCard1:%#v \n", gameCard) + //fmt.Printf("gameCard1:%#v \n", gameCard) if ok1 && ok2 { if order.CardStatus == 2 || order.CardStatus == 3 { order.CardStatus = 4 } - fmt.Printf("gameCard2:%#v \n", gameCard) + //fmt.Printf("gameCard2:%#v \n", gameCard) list[i].GameName = gameCard.Name list[i].GameCoverImg = gameCard.CoverImg list[i].GamePrice = gameCard.Price list[i].Order = &order } } - listbytes, _ := json.Marshal(&list) - fmt.Println("listbytes:", string(listbytes)) + //listbytes, _ := json.Marshal(&list) + //fmt.Println("listbytes:", string(listbytes)) return list } @@ -292,9 +295,9 @@ func (m *Order) Revert() error { // logger.Error("order card status completed") // return errors.New("order card status completed") //} - fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId) - fmt.Println("ID------:", m.ID) - fmt.Println("OrderCardId------:", m.OrderCardId) + //fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId) + //fmt.Println("ID------:", m.ID) + //fmt.Println("OrderCardId------:", m.OrderCardId) err := NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard) //err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) if err != nil { @@ -814,6 +817,7 @@ func (m *Order) CreatOrderCard(cards []CardInfo, storeId uint32, gdb *gorm.DB) e DeliveryType: m.DeliveryType, SerialNumber: "", PayStatus: m.PayStatus, + IssueType: 2, } err := gdb.Create(orderCard).Error if err != nil { diff --git a/model/share_card.go b/model/share_card.go index 4f507fc..d6a6762 100644 --- a/model/share_card.go +++ b/model/share_card.go @@ -256,10 +256,11 @@ type ShareCardRetrieveCard struct { } const ( - CardIssueStateFollowing = "following" // 处理中 - CardIssueStateFollowed = "followed" // 已处理 - CardIssueStateCompleted = "completed" // 已完成 - CardIssueStateCanceled = "canceled" // 已取消 + CardIssueStateFollowing = "following" // 处理中 + CardIssueStateFollowed = "followed" // 已处理 + CardIssueStateInDeliver = "in_deliver" // 发货中 + CardIssueStateCompleted = "completed" // 已完成 + CardIssueStateCanceled = "canceled" // 已取消 ) const ( ObtainTypeRetrieveCard = "retrieve_card" // 收回卡 @@ -296,12 +297,15 @@ type CardIssueFeedback struct { CheckSysUid string `json:"check_sys_uid" gorm:"index"` // 检测店员账号用户id ReceiptTime time.Time `json:"receipt_time"` // 签收时间 //CheckShopAssistant string `json:"check_shop_assistant" gorm:"index"` // 检测店员账号 + TransportType uint32 `json:"transport_type" gorm:"index"` // 1-送卡到门店 2-邮寄 + UserAddressId uint32 `json:"user_address_id" gorm:"index"` UserInfo *User `json:"user_info" gorm:"-"` GameCard *GameCard `json:"game_card" gorm:"-"` Store *Store `json:"store" gorm:"-"` ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"` Order *Order `json:"order" gorm:"-"` + UserAddress *UserAddress `json:"user_address" gorm:"-"` // card_issue_feedback } @@ -667,6 +671,7 @@ func (m *ShareCardRetrieveCreateReq) RetrieveCreate() (*ShareCardRetrieve, error //for i, _ := range userShareCards { // gameIds = append(gameIds, uint64(userShareCards[i].GameCardId)) //} + // TODO 共享卡半年收回 for i, _ := range userShareCards { if userShareCards[i].CreatedAt.AddDate(0, 6, 0).After(time.Now()) { logger.Error("user share before 6 month")