talent_address.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package youngee_talent_service
  2. import (
  3. "context"
  4. "youngmini_server/app/dao"
  5. "youngmini_server/app/model"
  6. "youngmini_server/app/model/youngee_talent_model"
  7. "youngmini_server/app/utils"
  8. "github.com/gogf/gf/database/gdb"
  9. "github.com/gogf/gf/frame/g"
  10. "github.com/gogf/gf/net/ghttp"
  11. )
  12. // 获取达人默认收货地址
  13. func GetTalentDefaultAddress(r *ghttp.Request) *TalentHttpResult {
  14. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  15. if err != nil {
  16. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  17. }
  18. res, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Where("talent_id = ? and default_tag = 1", tid).One()
  19. if err != nil {
  20. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  21. }
  22. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  23. }
  24. // 获取达人收货地址
  25. func GetTalentAddress(r *ghttp.Request) *TalentHttpResult {
  26. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  27. if err != nil {
  28. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  29. }
  30. res, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).All("talent_id", tid)
  31. if err != nil {
  32. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  33. }
  34. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  35. }
  36. // 获取单个收货地址详情
  37. func GetSingleAddress(r *ghttp.Request) *TalentHttpResult {
  38. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  39. if err != nil {
  40. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  41. }
  42. address_id := r.Get("address_id")
  43. res, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and address_id = ?", tid, address_id)
  44. if err != nil {
  45. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  46. }
  47. return &TalentHttpResult{Code: 0, Msg: "success", Data: res}
  48. }
  49. // 添加收货地址
  50. func OnAddTalentAddress(r *ghttp.Request) *TalentHttpResult {
  51. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  52. if err != nil {
  53. return &TalentHttpResult{Code: -1, Msg: "Add talent address failed"}
  54. }
  55. tAddr := youngee_talent_model.TalentDeliveryAddress{}
  56. err = r.ParseForm(&tAddr)
  57. if err != nil {
  58. return &TalentHttpResult{Code: -2, Msg: err.Error()}
  59. }
  60. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  61. var tErr error
  62. //等价于
  63. //UPDATE talent_info
  64. //SET is_bind_location = 1
  65. //WHERE id = ?
  66. _, tErr = tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Update("is_bind_location=1", "id", tid)
  67. if err != nil {
  68. return tErr
  69. }
  70. // 如果当前无地址则将其设为默认地址
  71. c, tErr := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Where("talent_id", tid).Count()
  72. if tErr != nil {
  73. return tErr
  74. }
  75. if c == 0 {
  76. tAddr.DefaultTag = 1
  77. }
  78. // 如果设置的是地址是默认地址,则把当前默认地址设为非默认
  79. if tAddr.DefaultTag > 0 {
  80. _, tErr = tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).
  81. Update("default_tag=0", "talent_id=? and default_tag = 1", tid)
  82. if tErr != nil {
  83. return tErr
  84. }
  85. }
  86. if tAddr.DefaultTag == 1 {
  87. _, tErr = tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).
  88. Update("talent_phone_number = ?", "id = ?", tAddr.PhoneNumber, tid)
  89. if tErr != nil {
  90. return tErr
  91. }
  92. }
  93. // 将达人id存入结构体
  94. tAddr.TalentId = tid
  95. // 插入新的收货地址记录
  96. _, tErr = tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Insert(tAddr)
  97. if tErr != nil {
  98. return tErr
  99. }
  100. return nil
  101. })
  102. if err != nil {
  103. return &TalentHttpResult{Code: -3, Msg: "failed"}
  104. }
  105. return &TalentHttpResult{Code: 0, Msg: "success"}
  106. }
  107. // 删除收货地址
  108. func OnDeleteTalentAddress(r *ghttp.Request) *TalentHttpResult {
  109. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  110. if err != nil {
  111. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  112. }
  113. var deleteReq *youngee_talent_model.DeleteDeliveryAddress
  114. err = r.ParseForm(&deleteReq)
  115. if err != nil {
  116. return &TalentHttpResult{Code: -2, Msg: "params error"}
  117. }
  118. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  119. if deleteReq.DefaultTag == 1 {
  120. _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Limit(1).Update("default_tag = 1", "talent_id = ? and address_id <> ?", tid, deleteReq.AddressId)
  121. if err1 != nil {
  122. return err1
  123. }
  124. }
  125. // 删除收货地址记录
  126. _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Delete("address_id", deleteReq.AddressId)
  127. if err1 != nil {
  128. return err1
  129. }
  130. c, err2 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Where("talent_id", tid).Count()
  131. if err2 != nil {
  132. return err2
  133. }
  134. if c == 0 {
  135. _, err3 := tx.Ctx(ctx).Model(dao.YoungeeTalentInfo.Table).Update("is_bind_location=0", "id", tid)
  136. if err3 != nil {
  137. return err3
  138. }
  139. }
  140. return nil
  141. })
  142. if err != nil {
  143. return &TalentHttpResult{Code: -3, Msg: "failed"}
  144. }
  145. return &TalentHttpResult{Code: 0, Msg: "success"}
  146. }
  147. // 修改达人收货地址
  148. func OnUpdateTalentAddress(r *ghttp.Request) *TalentHttpResult {
  149. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  150. if err != nil {
  151. return &TalentHttpResult{Code: -1, Msg: "Update talent address failed"}
  152. }
  153. var modifyReq *youngee_talent_model.DeliveryAddressModifyReq
  154. err = r.ParseForm(&modifyReq)
  155. if err != nil {
  156. return &TalentHttpResult{Code: -2, Msg: "params error"}
  157. }
  158. _, err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Update(modifyReq, "address_id = ? and talent_id = ?", modifyReq.AddressId, tid)
  159. if err != nil {
  160. return &TalentHttpResult{Code: -3, Msg: "update failed"}
  161. }
  162. return &TalentHttpResult{Code: 0, Msg: "success"}
  163. }
  164. // SetDefaultDeliveryAddr 设置默认收货地址
  165. func SetDefaultDeliveryAddr(r *ghttp.Request) *TalentHttpResult {
  166. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  167. if err != nil {
  168. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  169. }
  170. aid := r.GetRequestInt32("address_id", 0)
  171. if aid == 0 {
  172. return &TalentHttpResult{Code: -1, Msg: "Get address id error"}
  173. }
  174. rec, err := g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).One("talent_id = ? and default_tag = 1", tid)
  175. if err != nil {
  176. return &TalentHttpResult{Code: -2, Msg: "found default delivery address error"}
  177. }
  178. if rec == nil {
  179. _, err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid)
  180. } else {
  181. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  182. _, err1 := tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 0", "address_id", rec["address_id"])
  183. if err1 != nil {
  184. return err1
  185. }
  186. _, err1 = tx.Ctx(ctx).Model(dao.YoungeeTalentDeliveryAddress.Table).Update("default_tag = 1", "address_id", aid)
  187. if err1 != nil {
  188. return err1
  189. }
  190. return nil
  191. })
  192. }
  193. if err != nil {
  194. return &TalentHttpResult{Code: -3, Msg: "database error"}
  195. }
  196. addressInfo := model.YoungeeTalentDeliveryAddress{}
  197. err = g.DB().Model(dao.YoungeeTalentDeliveryAddress.Table).Where("address_id", aid).Scan(&addressInfo)
  198. if err != nil {
  199. return &TalentHttpResult{Code: -4, Msg: "address id error"}
  200. }
  201. _, err = g.DB().Model(dao.YoungeeTalentInfo.Table).
  202. Update("talent_phone_number = ?", "id = ?", addressInfo.PhoneNumber, tid)
  203. if err != nil {
  204. return &TalentHttpResult{Code: -4, Msg: "address id error"}
  205. }
  206. return &TalentHttpResult{Code: 0, Msg: "success"}
  207. }