orderSurplusPrice.go 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package controller
  2. import (
  3. . "app.yhyue.com/moapp/jybase/api"
  4. "app.yhyue.com/moapp/jybase/common"
  5. "context"
  6. "fmt"
  7. "github.com/gogf/gf/v2/frame/g"
  8. "github.com/gogf/gf/v2/net/ghttp"
  9. "github.com/gogf/gf/v2/util/gconv"
  10. "github.com/pkg/errors"
  11. "jyOrderManager/internal/model"
  12. "strings"
  13. )
  14. // OrderSurplusPrice 订单详情
  15. func OrderSurplusPrice(r *ghttp.Request) {
  16. rData, err := func() (interface{}, error) {
  17. var param model.OrdersEditBatchReturn
  18. err := gconv.Struct(r.GetBody(), &param)
  19. if err != nil || len(param.OrderArr) == 0 {
  20. return nil, errors.Wrap(err, "数据校验异常")
  21. }
  22. if param.Type == 1 { // 查保证金信息
  23. return getOrderDepositMoney(r.Context(), param)
  24. }
  25. var price int
  26. for key, value := range param.OrderArr {
  27. orderData, _ := g.DB().GetOne(r.Context(), "SELECT (IFNULL(CASE WHEN a.is_backstage_order = 1 THEN a.pay_money ELSE a.order_money END, 0) - IFNULL(a.procedures_money, 0)) - (SELECT IFNULL(SUM(b.return_money), 0) FROM return_money_record b WHERE b.order_code = a.order_code AND b.state = 1) + (SELECT IFNULL(SUM(c.refund_money), 0) FROM refund_record c WHERE c.order_code = a.order_code) + (SELECT IFNULL(SUM(payMoney), 0) FROM moneyCorrection c WHERE c.orderCode = a.order_code) AS outstandingPayment, a.* FROM dataexport_order a WHERE a.id = ?", value["orderId"])
  28. if orderData.IsEmpty() {
  29. continue
  30. }
  31. param.OrderArr[key]["money"] = common.IntAll(orderData.Map()["outstandingPayment"])
  32. price += common.IntAll(orderData.Map()["outstandingPayment"])
  33. }
  34. return map[string]interface{}{"status": true, "orderArr": param.OrderArr, "price": price}, nil
  35. }()
  36. if err != nil {
  37. g.Log().Errorf(r.Context(), "订单详情异常 %v", err)
  38. }
  39. r.Response.WriteJson(NewResult(rData, err))
  40. }
  41. func getOrderDepositMoney(ctx context.Context, param model.OrdersEditBatchReturn) (interface{}, error) {
  42. args := []string{}
  43. values := []interface{}{}
  44. for i := 0; i < len(param.OrderArr); i++ {
  45. values = append(values, param.OrderArr[i]["orderId"])
  46. args = append(args, "?")
  47. }
  48. q := fmt.Sprintf("SELECT d.id, od.money-IFNULL( odp.pay_money,0) as money FROM order_deposit od LEFT JOIN dataexport_order d on od.order_code=d.order_code left join order_deposit_payment odp on odp.order_code=od.order_code and odp.is_del=0 WHERE d.id in (%s)", strings.Join(args, ","))
  49. data, err := g.DB().Query(ctx, q, values...)
  50. if err != nil || data.IsEmpty() {
  51. g.Log().Errorf(ctx, "查询保证金异常 %v", err)
  52. return nil, err
  53. }
  54. moneyMap := map[int]interface{}{}
  55. var price int
  56. dataList := data.List()
  57. for i := 0; i < len(dataList); i++ {
  58. price += common.IntAll(dataList[i]["money"])
  59. orderId := common.IntAll(dataList[i]["id"])
  60. moneyMap[orderId] = common.IntAll(dataList[i]["money"])
  61. }
  62. // 按原有顺序处理 因为要连三个表 所以一次性查的 但是这个接口原有的返回值是按传的顺序的,所以为了保持一致
  63. for key, value := range param.OrderArr {
  64. orderId := int(gconv.Int64(value["orderId"]))
  65. if moneyTmp, ok := moneyMap[orderId]; ok {
  66. param.OrderArr[key]["money"] = moneyTmp
  67. } else {
  68. param.OrderArr[key]["money"] = 0
  69. }
  70. }
  71. return map[string]interface{}{"status": true, "orderArr": param.OrderArr, "price": price}, nil
  72. }