123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- 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"}
- }
|