Order.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Cash\Lib;
  3. use Dever;
  4. class Order
  5. {
  6. # 更新结算单
  7. public function up($order, $jstype = 1, $audit = 1, $refund = false)
  8. {
  9. Dever::config('base')->hook = true;
  10. if (!$order) {
  11. return false;
  12. }
  13. if ($audit == 2) {
  14. $status = 2;
  15. } else {
  16. $status = 1;
  17. }
  18. if ($jstype == 1) {
  19. $audit_type = 1;
  20. } else {
  21. $audit_type = 2;
  22. }
  23. $where['source_order_id'] = $order['id'];
  24. $where['jstype'] = $jstype;
  25. if (!$refund) {
  26. $where['refund_id'] = -1;
  27. } else {
  28. $where['refund_id'] = $refund['id'];
  29. }
  30. $where['clear'] = true;
  31. $info = Dever::db('cash/order')->find($where);
  32. $update = $where;
  33. $update['type'] = $order['type'];
  34. $update['type_id'] = $order['type_id'];
  35. if ($order['source_type']) {
  36. $update['source_type'] = $order['source_type'];
  37. $update['source_id'] = $order['source_id'];
  38. }
  39. $update['status'] = $status;
  40. $update['audit'] = $audit;
  41. $update['audit_type'] = $audit_type;
  42. if ($update['status'] == 2) {
  43. $update['operdate'] = time();
  44. $update['fdate'] = $update['operdate'];
  45. if (isset($order['fdate']) && $order['fdate'] && ($order['status'] == 5 || $order['status'] == 6)) {
  46. $update['fdate'] = $order['fdate'];
  47. }
  48. }
  49. $update['source_order_num'] = $order['order_num'];
  50. $update['num'] = $order['num'];
  51. if ($refund) {
  52. $update['cash'] = $refund['cash'];
  53. $update['p_cash'] = isset($refund['p_cash']) ? $refund['p_cash'] : 0;
  54. } else {
  55. $update['cash'] = $order['price'];
  56. $update['p_cash'] = $order['p_price'];
  57. }
  58. if ($jstype == 2) {
  59. $update['cash'] = -1*$update['cash'];
  60. $update['p_cash'] = -1*$update['p_cash'];
  61. $update['num'] = -1*$update['num'];
  62. }
  63. if ($info) {
  64. $update['where_id'] = $info['id'];
  65. $state = Dever::db('cash/order')->update($update);
  66. } else {
  67. $update['order_num'] = $this->getOrderId();
  68. $state = Dever::db('cash/order')->insert($update);
  69. }
  70. if ($state && $jstype == 2 && $status == 2 && isset($order['status']) && $order['status'] == 8) {
  71. # 如果是退款结算,同时要把主订单也结算
  72. $where = array();
  73. $where['source_order_id'] = $order['id'];
  74. $where['jstype'] = 1;
  75. $where['audit'] = 1;
  76. $where['clear'] = true;
  77. $info = Dever::db('cash/order')->find($where);
  78. if ($info) {
  79. $set['status'] = 2;
  80. $set['audit'] = 2;
  81. $set['where_id'] = $info['id'];
  82. $set['operdate'] = time();
  83. $set['fdate'] = time();
  84. Dever::db('cash/order')->update($set);
  85. }
  86. }
  87. }
  88. # 生成订单号
  89. public function getOrderId()
  90. {
  91. $where['order_num'] = Dever::order('JS');
  92. $state = Dever::db('cash/order')->one($where);
  93. if (!$state) {
  94. return $where['order_num'];
  95. } else {
  96. return $this->getOrderId();
  97. }
  98. }
  99. }