talent_address.go 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. package youngee_talent_service
  2. import (
  3. "context"
  4. "youngmini_server/app/dao"
  5. "youngmini_server/app/model/youngee_talent_model"
  6. "youngmini_server/app/utils"
  7. "github.com/gogf/gf/database/gdb"
  8. "github.com/gogf/gf/frame/g"
  9. "github.com/gogf/gf/net/ghttp"
  10. )
  11. // 获取达人默认收货地址
  12. func GetTalentDefaultAddress(r *ghttp.Request) *TalentHttpResult {
  13. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  14. if err != nil {
  15. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  16. }
  17. res, err := g.DB().Model("youngee_talent_delivery_address").Where("talent_id = ? and default_tag = 1", tid).One()
  18. if err != nil {
  19. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  20. }
  21. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  22. }
  23. // 获取达人收货地址
  24. func GetTalentAddress(r *ghttp.Request) *TalentHttpResult {
  25. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  26. if err != nil {
  27. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  28. }
  29. res, err := g.DB().Model("youngee_talent_delivery_address").All("talent_id", tid)
  30. if err != nil {
  31. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  32. }
  33. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  34. }
  35. // 获取单个收货地址详情
  36. func GetSingleAddress(r *ghttp.Request) *TalentHttpResult {
  37. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  38. if err != nil {
  39. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  40. }
  41. address_id := r.Get("address_id")
  42. res, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and address_id = ?", tid, address_id)
  43. if err != nil {
  44. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  45. }
  46. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  47. }
  48. // 添加收货地址
  49. func OnAddTalentAddress(r *ghttp.Request) *TalentHttpResult {
  50. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  51. if err != nil {
  52. return &TalentHttpResult{Code: -1, Msg: "Add talent address failed"}
  53. }
  54. tAddr := youngee_talent_model.TalentDeliveryAddress{}
  55. err = r.ParseForm(&tAddr)
  56. info := g.Map{
  57. "talent_id": tid,
  58. "door_num": tAddr.DoorNumber,
  59. "detail_address": tAddr.DetailAddr,
  60. "receiver_name": tAddr.ReceiverName,
  61. "phone_number": tAddr.PhoneNumber,
  62. "default_tag": tAddr.DefaultTag,
  63. }
  64. count, err := g.DB().Model("youngee_talent_delivery_address").Where("talent_id", tid).Count()
  65. if count == 0 {
  66. // 只有在 count == 0 时,才设置 default_tag 为 1
  67. info["default_tag"] = 1
  68. _, err = g.DB().Model("youngee_talent_delivery_address").Data(info).Insert()
  69. _, err = g.DB().Model("youngee_talent_info").Where("talent_id", tid).Data(g.Map{"is_bind_location": 1}).Update()
  70. }
  71. if count > 0 {
  72. info["default_tag"] = 0
  73. _, err = g.DB().Model("youngee_talent_delivery_address").Where("talent_id", tid).Data(info).Insert()
  74. }
  75. if err != nil {
  76. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  77. }
  78. return &TalentHttpResult{Code: 0, Msg: "success"}
  79. }
  80. // 删除收货地址 todo
  81. func OnDeleteTalentAddress(r *ghttp.Request) *TalentHttpResult {
  82. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  83. if err != nil {
  84. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  85. }
  86. var deleteReq *youngee_talent_model.DeleteDeliveryAddress
  87. err = r.ParseForm(&deleteReq)
  88. if err != nil {
  89. return &TalentHttpResult{Code: -2, Msg: "params error"}
  90. }
  91. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  92. if deleteReq.DefaultTag == 1 {
  93. _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Limit(1).Update("default_tag = 1", "talent_id = ? and address_id <> ?", tid, deleteReq.AddressId)
  94. if err1 != nil {
  95. return err1
  96. }
  97. }
  98. // 删除收货地址记录
  99. _, err1 := tx.Ctx(ctx).Model("youngee_talent_delivery_address").Delete("address_id", deleteReq.AddressId)
  100. if err1 != nil {
  101. return err1
  102. }
  103. c, err2 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Where("talent_id", tid).Count()
  104. if err2 != nil {
  105. return err2
  106. }
  107. if c == 0 {
  108. _, err3 := tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Update("is_bind_location=0", "id", tid)
  109. if err3 != nil {
  110. return err3
  111. }
  112. }
  113. return nil
  114. })
  115. if err != nil {
  116. return &TalentHttpResult{Code: -3, Msg: "failed"}
  117. }
  118. return &TalentHttpResult{Code: 0, Msg: "success"}
  119. }
  120. // 修改达人收货地址
  121. func OnUpdateTalentAddress(r *ghttp.Request) *TalentHttpResult {
  122. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  123. if err != nil {
  124. return &TalentHttpResult{Code: -1, Msg: "Update talent address failed"}
  125. }
  126. var modifyReq *youngee_talent_model.DeliveryAddressModifyReq
  127. err = r.ParseForm(&modifyReq)
  128. if err != nil {
  129. return &TalentHttpResult{Code: -2, Msg: "params error"}
  130. }
  131. _, err = g.DB().Model("youngee_talent_delivery_address").Update(modifyReq, "address_id = ? and talent_id = ?", modifyReq.AddressId, tid)
  132. if err != nil {
  133. return &TalentHttpResult{Code: -3, Msg: "update failed"}
  134. }
  135. return &TalentHttpResult{Code: 0, Msg: "success", Data: nil}
  136. }
  137. // SetDefaultDeliveryAddr 设置默认收货地址
  138. //func SetDefaultDeliveryAddr(r *ghttp.Request) *TalentHttpResult {
  139. // tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  140. // if err != nil {
  141. // return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  142. // }
  143. //
  144. // aid := r.GetRequestInt32("address_id", 0)
  145. // if aid == 0 {
  146. // return &TalentHttpResult{Code: -1, Msg: "Get address id error"}
  147. // }
  148. //
  149. // rec, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and default_tag = 1", tid)
  150. // if err != nil {
  151. // return &TalentHttpResult{Code: -2, Msg: "found default delivery address error"}
  152. // }
  153. //
  154. // if rec == nil {
  155. // _, err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid)
  156. // } else {
  157. // err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  158. // _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 0", "address_id", rec["address_id"])
  159. // if err1 != nil {
  160. // return err1
  161. // }
  162. //
  163. // _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid)
  164. // if err1 != nil {
  165. // return err1
  166. // }
  167. //
  168. // return nil
  169. // })
  170. // }
  171. // if err != nil {
  172. // return &TalentHttpResult{Code: -3, Msg: "database error"}
  173. // }
  174. // addressInfo := model.YoungeeTalentDeliveryAddress{}
  175. // err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Where("address_id", aid).Scan(&addressInfo)
  176. // if err != nil {
  177. // return &TalentHttpResult{Code: -4, Msg: "address id error"}
  178. // }
  179. //
  180. // _, err = g.DB().Model(dao.YoungeeTalentInfo.Table).
  181. // Update("talent_phone_number = ?", "id = ?", addressInfo.PhoneNumber, tid)
  182. // if err != nil {
  183. // return &TalentHttpResult{Code: -4, Msg: "address id error"}
  184. // }
  185. //
  186. // return &TalentHttpResult{Code: 0, Msg: "success"}
  187. //}
  188. // SetDefaultDeliveryAddr 设置默认收货地址
  189. func SetDefaultDeliveryAddr(r *ghttp.Request) *TalentHttpResult {
  190. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  191. if err != nil {
  192. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  193. }
  194. // Assuming you get the address ID to set as default from the request
  195. addressId := r.GetInt("address_id", 0)
  196. if addressId == 0 {
  197. return &TalentHttpResult{Code: -1, Msg: "Address ID is required"}
  198. }
  199. // Start a transaction to ensure atomicity
  200. tx, err := g.DB().Begin()
  201. if err != nil {
  202. return &TalentHttpResult{Code: -1, Msg: "Failed to begin transaction"}
  203. }
  204. defer tx.Rollback()
  205. // First, set all addresses to non-default (default_tag = 0)
  206. _, err = tx.Model("youngee_talent_delivery_address").
  207. Where("talent_id = ?", tid).
  208. Update("default_tag", 0)
  209. if err != nil {
  210. return &TalentHttpResult{Code: -1, Msg: "Failed to reset default addresses"}
  211. }
  212. // Then, set the chosen address as default (default_tag = 1)
  213. _, err = tx.Model("delivery_addresses").
  214. Where("address_id = ? AND talent_id = ?", addressId, tid).
  215. Update("default_tag", 1)
  216. if err != nil {
  217. return &TalentHttpResult{Code: -1, Msg: "Failed to set default address"}
  218. }
  219. // Commit the transaction
  220. err = tx.Commit()
  221. if err != nil {
  222. return &TalentHttpResult{Code: -1, Msg: "Failed to commit transaction"}
  223. }
  224. // Return success
  225. return &TalentHttpResult{Code: 0, Msg: "Default address updated successfully"}
  226. }