dt_finance.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package daytask
  2. import (
  3. "encoding/json"
  4. model "go_server/model/biz_modules/daytask"
  5. "go_server/model/common/response"
  6. "go_server/service/base"
  7. "github.com/gin-gonic/gin"
  8. )
  9. // DtWithdrawOrderService 提现订单服务
  10. type DtWithdrawOrderService struct {
  11. base.BizCommonService
  12. }
  13. func (s *DtWithdrawOrderService) Get(c *gin.Context) {
  14. s.SetDbAlias("daytask")
  15. base.NewBaseHandler(model.NewDtWithdrawOrder()).Get(c, s.DB())
  16. }
  17. func (s *DtWithdrawOrderService) Find(c *gin.Context) {
  18. s.SetDbAlias("daytask")
  19. type request[T any] struct {
  20. base.ListRequest[T]
  21. Id *int64 `form:"id"`
  22. OrderNo *string `form:"orderNo"`
  23. UserId *int64 `form:"userId"`
  24. UserUid *string `form:"userUid"`
  25. Channel *string `form:"channel"`
  26. Status *int8 `form:"status"`
  27. BeginTime *int64 `form:"beginTime"`
  28. EndTime *int64 `form:"endTime"`
  29. }
  30. req := new(request[model.DtWithdrawOrder])
  31. if err := c.BindQuery(req); err != nil {
  32. response.Resp(c, err.Error())
  33. return
  34. }
  35. db := s.DB()
  36. if req.Id != nil && *req.Id != 0 {
  37. db = db.Where("id", req.Id)
  38. }
  39. if req.OrderNo != nil && *req.OrderNo != "" {
  40. db = db.Where("order_no", req.OrderNo)
  41. }
  42. if req.UserId != nil && *req.UserId != 0 {
  43. db = db.Where("user_id", req.UserId)
  44. }
  45. if req.UserUid != nil && *req.UserUid != "" {
  46. db = db.Where("user_uid", req.UserUid)
  47. }
  48. if req.Channel != nil && *req.Channel != "" {
  49. db = db.Where("channel", req.Channel)
  50. }
  51. if req.Status != nil {
  52. db = db.Where("status", req.Status)
  53. }
  54. if req.BeginTime != nil && *req.BeginTime > 0 && req.EndTime != nil && *req.EndTime > 0 {
  55. db = db.Where("created_at BETWEEN ? AND ?", *req.BeginTime, *req.EndTime)
  56. }
  57. colInfo := s.GetColumnCommentFromStruct(model.DtWithdrawOrder{})
  58. resp, err := base.NewQueryBaseHandler(model.NewDtWithdrawOrder()).List(db, req)
  59. if err != nil {
  60. response.Resp(c, err.Error())
  61. return
  62. }
  63. // 兼容旧数据:从 paymentInfo 中解析收款信息,补充到新字段
  64. type paymentInfo struct {
  65. Type string `json:"type"`
  66. Name string `json:"name"`
  67. Account string `json:"account"`
  68. BankName string `json:"bankName"`
  69. }
  70. for i := range resp.List {
  71. info := resp.List[i].PaymentInfo
  72. if info == "" {
  73. continue
  74. }
  75. var p paymentInfo
  76. if err := json.Unmarshal([]byte(info), &p); err != nil {
  77. continue
  78. }
  79. if resp.List[i].Channel == "" {
  80. resp.List[i].Channel = p.Type
  81. }
  82. if resp.List[i].ReceiveAccount == "" {
  83. resp.List[i].ReceiveAccount = p.Account
  84. }
  85. if resp.List[i].ReceiveName == "" {
  86. resp.List[i].ReceiveName = p.Name
  87. }
  88. if resp.List[i].BankName == "" {
  89. resp.List[i].BankName = p.BankName
  90. }
  91. }
  92. response.Resp(c, map[string]interface{}{
  93. "cols": colInfo,
  94. "list": resp.List,
  95. "paging": resp.Paging,
  96. })
  97. }
  98. func (s *DtWithdrawOrderService) Create(c *gin.Context) {
  99. s.SetDbAlias("daytask")
  100. base.NewBaseHandler(model.NewDtWithdrawOrder()).Create(c, s.DB())
  101. }
  102. func (s *DtWithdrawOrderService) Update(c *gin.Context) {
  103. s.SetDbAlias("daytask")
  104. base.NewBaseHandler(model.NewDtWithdrawOrder()).UpdateOne(c, s.DB())
  105. }
  106. // Audit 审核提现
  107. func (s *DtWithdrawOrderService) Audit(c *gin.Context) {
  108. s.SetDbAlias("daytask")
  109. type request struct {
  110. Id int64 `json:"id" binding:"required"`
  111. Status int8 `json:"status" binding:"required"` // 1=审核通过 4=已拒绝
  112. RejectReason string `json:"rejectReason"`
  113. Remark string `json:"remark"`
  114. }
  115. var req request
  116. if err := c.ShouldBindJSON(&req); err != nil {
  117. response.Resp(c, err.Error())
  118. return
  119. }
  120. // 只允许审核通过(1)或拒绝(4),其他状态视为参数错误
  121. if req.Status != 1 && req.Status != 4 {
  122. response.Resp(c, response.ResponseCodeParamError)
  123. return
  124. }
  125. updates := map[string]interface{}{
  126. "status": req.Status,
  127. "remark": req.Remark,
  128. "audit_time": c.GetInt64("now"),
  129. }
  130. if req.Status == 4 {
  131. updates["reject_reason"] = req.RejectReason
  132. }
  133. err := s.DB().Model(&model.DtWithdrawOrder{}).Where("id = ? AND status = 0", req.Id).Updates(updates).Error
  134. if err != nil {
  135. response.Resp(c, err.Error())
  136. return
  137. }
  138. // 使用默认成功响应(code=200,msg=操作成功)
  139. response.Resp(c)
  140. }
  141. // Pay 打款
  142. func (s *DtWithdrawOrderService) Pay(c *gin.Context) {
  143. s.SetDbAlias("daytask")
  144. type request struct {
  145. Id int64 `json:"id" binding:"required"`
  146. Txid string `json:"txid"`
  147. PayScreenshot string `json:"payScreenshot"`
  148. Remark string `json:"remark"`
  149. }
  150. var req request
  151. if err := c.ShouldBindJSON(&req); err != nil {
  152. response.Resp(c, err.Error())
  153. return
  154. }
  155. updates := map[string]interface{}{
  156. "status": 2,
  157. "txid": req.Txid,
  158. "pay_screenshot": req.PayScreenshot,
  159. "remark": req.Remark,
  160. "pay_time": c.GetInt64("now"),
  161. }
  162. db := s.DB().Model(&model.DtWithdrawOrder{}).Where("id = ? AND status = 1", req.Id).Updates(updates)
  163. if db.Error != nil {
  164. response.Resp(c, db.Error.Error())
  165. return
  166. }
  167. // 如果没有行受影响,说明当前订单不在「审核通过」状态
  168. if db.RowsAffected == 0 {
  169. response.Resp(c, response.ResponseCodeParamError)
  170. return
  171. }
  172. // 使用默认成功响应(code=200,msg=操作成功)
  173. response.Resp(c)
  174. }
  175. // DtBalanceLogService 资金流水服务
  176. type DtBalanceLogService struct {
  177. base.BizCommonService
  178. }
  179. func (s *DtBalanceLogService) Get(c *gin.Context) {
  180. s.SetDbAlias("daytask")
  181. base.NewBaseHandler(model.NewDtBalanceLog()).Get(c, s.DB())
  182. }
  183. func (s *DtBalanceLogService) Find(c *gin.Context) {
  184. s.SetDbAlias("daytask")
  185. type request[T any] struct {
  186. base.ListRequest[T]
  187. UserId *int64 `form:"userId"`
  188. UserUid *string `form:"userUid"`
  189. Type *string `form:"type"`
  190. BeginTime *int64 `form:"beginTime"`
  191. EndTime *int64 `form:"endTime"`
  192. }
  193. req := new(request[model.DtBalanceLog])
  194. if err := c.BindQuery(req); err != nil {
  195. response.Resp(c, err.Error())
  196. return
  197. }
  198. db := s.DB()
  199. if req.UserId != nil && *req.UserId != 0 {
  200. db = db.Where("user_id", req.UserId)
  201. }
  202. if req.UserUid != nil && *req.UserUid != "" {
  203. db = db.Where("user_uid", req.UserUid)
  204. }
  205. if req.Type != nil && *req.Type != "" {
  206. db = db.Where("type", req.Type)
  207. }
  208. if req.BeginTime != nil && *req.BeginTime > 0 && req.EndTime != nil && *req.EndTime > 0 {
  209. db = db.Where("created_at BETWEEN ? AND ?", *req.BeginTime, *req.EndTime)
  210. }
  211. colInfo := s.GetColumnCommentFromStruct(model.DtBalanceLog{})
  212. resp, err := base.NewQueryBaseHandler(model.NewDtBalanceLog()).List(db, req)
  213. if err != nil {
  214. response.Resp(c, err.Error())
  215. return
  216. }
  217. response.Resp(c, map[string]interface{}{
  218. "cols": colInfo,
  219. "list": resp.List,
  220. "paging": resp.Paging,
  221. })
  222. }