package youngee_talent_service import ( "context" "youngmini_server/app/dao" "youngmini_server/app/model/youngee_talent_model" "youngmini_server/app/utils" "github.com/gogf/gf/database/gdb" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/net/ghttp" ) // 获取达人默认收货地址 func GetTalentDefaultAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } res, err := g.DB().Model("youngee_talent_delivery_address").Where("talent_id = ? and default_tag = 1", tid).One() if err != nil { return &TalentHttpResult{Code: -2, Msg: err.Error()} } return &TalentHttpResult{Code: 0, Msg: "success", Data: res} } // 获取达人收货地址 func GetTalentAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } res, err := g.DB().Model("youngee_talent_delivery_address").All("talent_id", tid) if err != nil { return &TalentHttpResult{Code: -2, Msg: err.Error()} } return &TalentHttpResult{Code: 0, Msg: "success", Data: res} } // 获取单个收货地址详情 func GetSingleAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } address_id := r.Get("address_id") res, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and address_id = ?", tid, address_id) if err != nil { return &TalentHttpResult{Code: -2, Msg: err.Error()} } return &TalentHttpResult{Code: 0, Msg: "success", Data: res} } // 添加收货地址 func OnAddTalentAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Add talent address failed"} } tAddr := youngee_talent_model.TalentDeliveryAddress{} err = r.ParseForm(&tAddr) info := g.Map{ "talent_id": tid, "door_num": tAddr.DoorNumber, "detail_address": tAddr.DetailAddr, "receiver_name": tAddr.ReceiverName, "phone_number": tAddr.PhoneNumber, "default_tag": tAddr.DefaultTag, } count, err := g.DB().Model("youngee_talent_delivery_address").Where("talent_id", tid).Count() if count == 0 { // 只有在 count == 0 时,才设置 default_tag 为 1 info["default_tag"] = 1 _, err = g.DB().Model("youngee_talent_delivery_address").Data(info).Insert() _, err = g.DB().Model("youngee_talent_info").Where("talent_id", tid).Data(g.Map{"is_bind_location": 1}).Update() } if count > 0 { info["default_tag"] = 0 _, err = g.DB().Model("youngee_talent_delivery_address").Where("talent_id", tid).Data(info).Insert() } if err != nil { return &TalentHttpResult{Code: -2, Msg: err.Error()} } return &TalentHttpResult{Code: 0, Msg: "success"} } // 删除收货地址 todo func OnDeleteTalentAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } var deleteReq *youngee_talent_model.DeleteDeliveryAddress err = r.ParseForm(&deleteReq) if err != nil { return &TalentHttpResult{Code: -2, Msg: "params error"} } err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error { if deleteReq.DefaultTag == 1 { _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Limit(1).Update("default_tag = 1", "talent_id = ? and address_id <> ?", tid, deleteReq.AddressId) if err1 != nil { return err1 } } // 删除收货地址记录 _, err1 := tx.Ctx(ctx).Model("youngee_talent_delivery_address").Delete("address_id", deleteReq.AddressId) if err1 != nil { return err1 } c, err2 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Where("talent_id", tid).Count() if err2 != nil { return err2 } if c == 0 { _, err3 := tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Update("is_bind_location=0", "id", tid) if err3 != nil { return err3 } } return nil }) if err != nil { return &TalentHttpResult{Code: -3, Msg: "failed"} } return &TalentHttpResult{Code: 0, Msg: "success"} } // 修改达人收货地址 func OnUpdateTalentAddress(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Update talent address failed"} } var modifyReq *youngee_talent_model.DeliveryAddressModifyReq err = r.ParseForm(&modifyReq) if err != nil { return &TalentHttpResult{Code: -2, Msg: "params error"} } _, err = g.DB().Model("youngee_talent_delivery_address").Update(modifyReq, "address_id = ? and talent_id = ?", modifyReq.AddressId, tid) if err != nil { return &TalentHttpResult{Code: -3, Msg: "update failed"} } return &TalentHttpResult{Code: 0, Msg: "success", Data: nil} } // SetDefaultDeliveryAddr 设置默认收货地址 //func SetDefaultDeliveryAddr(r *ghttp.Request) *TalentHttpResult { // tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) // if err != nil { // return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} // } // // aid := r.GetRequestInt32("address_id", 0) // if aid == 0 { // return &TalentHttpResult{Code: -1, Msg: "Get address id error"} // } // // rec, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and default_tag = 1", tid) // if err != nil { // return &TalentHttpResult{Code: -2, Msg: "found default delivery address error"} // } // // if rec == nil { // _, err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid) // } else { // err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error { // _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 0", "address_id", rec["address_id"]) // if err1 != nil { // return err1 // } // // _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid) // if err1 != nil { // return err1 // } // // return nil // }) // } // if err != nil { // return &TalentHttpResult{Code: -3, Msg: "database error"} // } // addressInfo := model.YoungeeTalentDeliveryAddress{} // err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Where("address_id", aid).Scan(&addressInfo) // if err != nil { // return &TalentHttpResult{Code: -4, Msg: "address id error"} // } // // _, err = g.DB().Model(dao.YoungeeTalentInfo.Table). // Update("talent_phone_number = ?", "id = ?", addressInfo.PhoneNumber, tid) // if err != nil { // return &TalentHttpResult{Code: -4, Msg: "address id error"} // } // // return &TalentHttpResult{Code: 0, Msg: "success"} //} // SetDefaultDeliveryAddr 设置默认收货地址 func SetDefaultDeliveryAddr(r *ghttp.Request) *TalentHttpResult { tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"} } // Assuming you get the address ID to set as default from the request addressId := r.GetInt("address_id", 0) if addressId == 0 { return &TalentHttpResult{Code: -1, Msg: "Address ID is required"} } // Start a transaction to ensure atomicity tx, err := g.DB().Begin() if err != nil { return &TalentHttpResult{Code: -1, Msg: "Failed to begin transaction"} } defer tx.Rollback() // First, set all addresses to non-default (default_tag = 0) _, err = tx.Model("youngee_talent_delivery_address"). Where("talent_id = ?", tid). Update("default_tag", 0) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Failed to reset default addresses"} } // Then, set the chosen address as default (default_tag = 1) _, err = tx.Model("delivery_addresses"). Where("address_id = ? AND talent_id = ?", addressId, tid). Update("default_tag", 1) if err != nil { return &TalentHttpResult{Code: -1, Msg: "Failed to set default address"} } // Commit the transaction err = tx.Commit() if err != nil { return &TalentHttpResult{Code: -1, Msg: "Failed to commit transaction"} } // Return success return &TalentHttpResult{Code: 0, Msg: "Default address updated successfully"} }