Order.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\shopcomponent\model;
  11. use app\model\BaseModel;
  12. use app\model\order\OrderRefund;
  13. class Order extends BaseModel
  14. {
  15. /**
  16. * 订单发货之后
  17. */
  18. public function delivery($order_id)
  19. {
  20. $order = model('order')->getInfo([ [ 'order_id', '=', $order_id ] ], 'site_id,is_video_number,pay_type,member_id,order_type');
  21. if ($order[ 'is_video_number' ] && $order[ 'pay_type' ] == 'wechatpay') {
  22. $member = model('member')->getInfo([ [ 'member_id', '=', $order[ 'member_id' ] ] ], 'weapp_openid');
  23. $weapp = new Weapp($order[ 'site_id' ]);
  24. $data = [
  25. 'out_order_id' => $order_id,
  26. 'openid' => $member[ 'weapp_openid' ],
  27. 'finish_all_delivery' => 1,
  28. 'delivery_list' => []
  29. ];
  30. if ($order[ 'order_type' ] == 1) {
  31. $package_list = model('express_delivery_package')->getList([ [ 'order_id', '=', $order_id ] ], 'express_company_name,delivery_no,order_goods_id_array');
  32. if (!empty($package_list)) {
  33. $company_list = $weapp->getCompanyList();
  34. foreach ($package_list as $item) {
  35. $delivery_id = 'OTHERS';
  36. if ($company_list[ 'code' ] == 0) {
  37. $index = array_search($item[ 'express_company_name' ], array_column($company_list[ 'data' ], 'delivery_name'));
  38. if ($index !== false && isset($company_list[ 'data' ][ $index ])) {
  39. $delivery_id = $company_list[ 'data' ][ $index ][ 'delivery_id' ];
  40. }
  41. }
  42. $order_goods_model = model('order_goods')->getList([ [ 'order_goods_id', "in", $item[ 'order_goods_id_array' ] ] ], "goods_id,sku_id,num");
  43. $goods_id_arr = [];
  44. $sku_id_arr = [];
  45. $number = 0;
  46. foreach ($order_goods_model as $order_iem) {
  47. $goods_id_arr[] = $order_iem[ 'goods_id' ];
  48. $sku_id_arr[] = $order_iem[ 'sku_id' ];
  49. $number += $order_iem[ 'num' ];
  50. }
  51. array_push($data[ 'delivery_list' ], [
  52. 'delivery_id' => $delivery_id,
  53. 'waybill_id' => $item[ 'delivery_no' ],
  54. 'product_info_list' => [
  55. [
  56. 'out_product_id' => implode(',', $goods_id_arr),
  57. 'out_sku_id' => implode(',', $sku_id_arr),
  58. 'product_cnt' => $number
  59. ]
  60. ]
  61. ]);
  62. }
  63. }
  64. }
  65. $res = $weapp->sendDelivery($data);
  66. return $res;
  67. }
  68. return $this->success();
  69. }
  70. /**
  71. * 订单收货
  72. * @param $order_id
  73. * @return array
  74. */
  75. public function takeDelivery($order_id)
  76. {
  77. $order = model('order')->getInfo([ [ 'order_id', '=', $order_id ] ], 'site_id,is_video_number,pay_type,member_id,order_type');
  78. if ($order[ 'is_video_number' ] && $order[ 'pay_type' ] == 'wechatpay') {
  79. $member = model('member')->getInfo([ [ 'member_id', '=', $order[ 'member_id' ] ] ], 'weapp_openid');
  80. $weapp = new Weapp($order[ 'site_id' ]);
  81. $res = $weapp->recieveDelivery([ 'out_order_id' => $order_id, 'openid' => $member[ 'weapp_openid' ] ]);
  82. if ($res[ 'code' ] < 0) {
  83. return $this->error('', $res[ 'message' ]);
  84. }
  85. }
  86. return $this->success();
  87. }
  88. /**
  89. * 发起退款申请
  90. * @param $param
  91. */
  92. public function refundApply($param)
  93. {
  94. $join = [
  95. [ 'order o', 'o.order_id = og.order_id', 'left' ]
  96. ];
  97. $info = model('order_goods')->getInfo([ [ 'og.order_goods_id', '=', $param[ 'order_goods_id' ] ] ], 'og.out_aftersale_id,og.order_goods_id,og.goods_id,og.sku_id,og.num,o.order_id,o.site_id,o.is_video_number,o.pay_type,o.member_id', 'og', $join);
  98. if ($info[ 'is_video_number' ] && $info[ 'pay_type' ] == 'wechatpay') {
  99. $member = model('member')->getInfo([ [ 'member_id', '=', $info[ 'member_id' ] ] ], 'weapp_openid');
  100. $data = [
  101. 'out_order_id' => (string) $info[ 'order_id' ],
  102. 'out_aftersale_id' => $info[ 'out_aftersale_id' ],
  103. 'openid' => $member[ 'weapp_openid' ],
  104. 'type' => (int) $param[ 'refund_type' ],
  105. 'product_info' => [
  106. 'out_product_id' => (string) $info[ 'goods_id' ],
  107. 'out_sku_id' => (string) $info[ 'sku_id' ],
  108. 'product_cnt' => (int) $info[ 'num' ],
  109. ],
  110. 'refund_reason' => !empty($param[ 'refund_remark' ]) ? $param[ 'refund_remark' ] : "无",
  111. 'refund_reason_type' => 12,
  112. 'orderamt' => round($param[ 'refund_apply_money' ] * 100)
  113. ];
  114. $weapp = new Weapp($info[ 'site_id' ]);
  115. $weapp->addAftersale($data);
  116. }
  117. }
  118. /**
  119. * 维权状态变更
  120. */
  121. public function refundStatusChange($param)
  122. {
  123. if ($param[ 'refund_status' ] != OrderRefund::REFUND_APPLY) {
  124. $join = [
  125. [ 'order o', 'o.order_id = og.order_id', 'left' ]
  126. ];
  127. $info = model('order_goods')->getInfo([ [ 'og.order_goods_id', '=', $param[ 'order_goods_id' ] ] ], 'og.order_goods_id,og.refund_type,o.order_id,o.site_id,o.is_video_number,o.pay_type,o.member_id', 'og', $join);
  128. if ($info[ 'is_video_number' ] && $info[ 'pay_type' ] == 'wechatpay') {
  129. $data = [
  130. 'out_order_id' => $info[ 'order_id' ],
  131. 'out_aftersale_id' => $info[ 'order_goods_id' ],
  132. 'finish_all_aftersale' => 0
  133. ];
  134. // status 0:未受理,1:用户取消,2:商家受理中,3:商家逾期未处理,4:商家拒绝退款,5:商家拒绝退货退款,6:待买家退货,7:退货退款关闭,8:待商家收货,11:商家退款中,12:商家逾期未退款,13:退款完成,14:退货退款完成
  135. switch ( $param[ 'refund_status' ] ) {
  136. case 0: // 会员取消或商家关闭
  137. $data[ 'status' ] = $param[ 'action_way' ] == 1 ? 1 : 0;
  138. break;
  139. case OrderRefund::REFUND_CONFIRM: // 同意退款
  140. $data[ 'status' ] = 2;
  141. break;
  142. case OrderRefund::REFUND_DIEAGREE: // 拒绝退款
  143. $data[ 'status' ] = $info[ 'refund_type' ] == 1 ? 4 : 5;
  144. break;
  145. case OrderRefund::REFUND_COMPLETE: // 退款完成
  146. $data[ 'status' ] = $info[ 'refund_type' ] == 1 ? 13 : 14;
  147. $order_goods_count = model('order_goods')->getCount([ [ "order_id", "=", $info[ 'order_id' ] ] ], "order_goods_id");
  148. $refund_count = model('order_goods')->getCount([ [ "order_id", "=", $info[ 'order_id' ] ], [ "refund_status", "=", OrderRefund::REFUND_COMPLETE ] ], "order_goods_id");
  149. if ($order_goods_count == $refund_count) $data[ 'finish_all_aftersale' ] = 1;
  150. break;
  151. }
  152. // if (isset($data['status'])) {
  153. // $weapp = new Weapp($info['site_id']);
  154. // $weapp->updateAftersale($data);
  155. // }
  156. }
  157. }
  158. }
  159. }