OrderBase.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace App\Services\OrderService;
  3. use App\Http\Home\OrderService\EavSetService;
  4. use App\Http\Home\OrderService\MaterialService;
  5. use App\Jobs\SendMessage;
  6. use Illuminate\Support\Facades\Request;
  7. class OrderBase
  8. {
  9. public $userId;
  10. public function __construct($userId)
  11. {
  12. $this->userId = $userId;
  13. }
  14. #####################################################################################################
  15. ##### 退款 #########################################################################################
  16. #####################################################################################################
  17. /**
  18. * 申请退款
  19. */
  20. public function setApplyRefund()
  21. {
  22. $requestData = Request::all();
  23. $product_type = $requestData['product_type'] ?? '';
  24. $product_mid = $requestData['product_id'] ?? '';
  25. $order_no = $requestData['order_no'] ?? '';
  26. $desc = $requestData['desc'] ?? ''; //退款原因
  27. $images = $requestData['images'] ?? ''; //退款图片
  28. if (empty($order_no)) {
  29. return responseMessage(2001, '参数错误!');
  30. }
  31. if (empty($product_type) || $product_type <= 0 || $product_type > 3) {
  32. return responseMessage(2002, '非法提交,type参数错误!');
  33. }
  34. if (empty($desc)) {
  35. return responseMessage(2003, '请输入退款原因!');
  36. }
  37. if (empty($product_mid)) {
  38. return responseMessage(2004, '请选择需要退款退货的产品');
  39. }
  40. //判断该产品是否存在
  41. if ($product_type == 1) {
  42. $alias = $this->setAliasCommerceRefund;
  43. $aliasOrder = $this->setAliasCommerceOrder;
  44. $aliasOrderProduct = $this->setAliasCommerceOrderProduct;
  45. $refund_no = 'TC' . createNewOrderNo(); // 退款单号
  46. } elseif ($product_type == 2) {
  47. $alias = $this->setAliasTostoreRefund;
  48. $aliasOrder = $this->setAliasTostoreOrder;
  49. $aliasOrderProduct = $this->setAliasTostoreOrderProduct;
  50. $refund_no = 'TS' . createNewOrderNo(); // 退款单号
  51. } elseif ($product_type == 3) {
  52. $alias = $this->setAliasTakeoutRefund;
  53. $aliasOrder = $this->setAliasTakeoutOrder;
  54. $aliasOrderProduct = $this->setAliasTakeoutOrderProduct;
  55. $refund_no = 'TO' . createNewOrderNo(); // 退款单号
  56. } else {
  57. return responseMessage(2014, '参数错误,产品类型不存在!');
  58. }
  59. //判断该订单是否存在
  60. $orderService = new MaterialService(new EavSetService($aliasOrder));
  61. $orderInfo = $orderService->elasticClientService()->queryOne(['order_no' => $order_no, 'store_id' => $this->storeId, 'member_id' => $this->userId]);
  62. if (empty($orderInfo)) {
  63. return responseMessage(2005, '该订单不存在,或已删除!');
  64. }
  65. if ($orderInfo['order_status'] != 2 && $orderInfo['order_status'] != 3) {
  66. return responseMessage(2005, '该订单状态不正确,不允许退款!');
  67. }
  68. // 获取需要退款的产品信息
  69. $orderProductService = new MaterialService(new EavSetService($aliasOrderProduct));
  70. $productInfo = $orderProductService->elasticClientService()->queryOne(['order_id' => $orderInfo['id'], 'mid' => $product_mid]);
  71. if (empty($productInfo)) {
  72. return responseMessage(2006, '该产品不存在,请重试!');
  73. }
  74. // 保存售后信息
  75. // status 1 退款申请中 2 拒绝退款 3 退款完成 4 取消退款 5 退款中
  76. $refundService = new MaterialService(new EavSetService($alias));
  77. $is_success = $refundService->addProduct([
  78. 'refund_no' => $refund_no, // 退款单号
  79. 'order_id' => $orderInfo['id'],
  80. 'member_id' => $this->userId,
  81. 'store_id' => $this->storeId,
  82. 'refund_reason' => $desc,
  83. 'refund_images' => $images,
  84. 'refund_price' => $productInfo['appot_prefe_price'], // 优惠平台之后的价格
  85. 'product_id' => $productInfo['id'],
  86. 'status' => 1,
  87. ]);
  88. if ($is_success) {
  89. // 更新总订单的状态
  90. if ($orderInfo['order_status'] == 2) {
  91. $orderService->update($orderInfo['id'], ['order_status' => 6]);
  92. } elseif ($orderInfo['order_status'] == 3) {
  93. $orderService->update($orderInfo['id'], ['order_status' => 7]);
  94. }
  95. // 设置订单产品的退款状态
  96. $orderProductService->update($productInfo['id'], ['status' => 1, 'refund_id' => $is_success]);
  97. // 消息通知
  98. dispatch(new SendMessage($this->storeId, 'REFUND_APPLY', [
  99. 'orderNo' => $orderInfo['order_no']
  100. ], $this->userId));
  101. return responseMessage(1001, '操作成功');
  102. } else {
  103. return responseMessage(2007, '操作失败,请重试!');
  104. }
  105. }
  106. /**
  107. * 取消退款
  108. */
  109. public function setCancelRefund()
  110. {
  111. $requestData = Request::all();
  112. $product_type = $requestData['product_type'] ?? '';
  113. $refund_mid = $requestData['mid'] ?? '';
  114. if (empty($refund_mid)) {
  115. return responseMessage(2001, '参数错误!');
  116. }
  117. if (empty($product_type) || $product_type <= 0 || $product_type > 3) {
  118. return responseMessage(2002, '非法提交,type参数错误!');
  119. }
  120. //判断该产品是否存在
  121. if ($product_type == 1) {
  122. $alias = $this->setAliasCommerceRefund;
  123. $aliasOrder = $this->setAliasCommerceOrder;
  124. $aliasOrderProduct = $this->setAliasCommerceOrderProduct;
  125. } elseif ($product_type == 2) {
  126. $alias = $this->setAliasTostoreRefund;
  127. $aliasOrder = $this->setAliasTostoreOrder;
  128. $aliasOrderProduct = $this->setAliasTostoreOrderProduct;
  129. } elseif ($product_type == 3) {
  130. $alias = $this->setAliasTakeoutRefund;
  131. $aliasOrder = $this->setAliasTakeoutOrder;
  132. $aliasOrderProduct = $this->setAliasTakeoutOrderProduct;
  133. } else {
  134. return responseMessage(2004, '非法提交!');
  135. }
  136. $refundService = new MaterialService(new EavSetService($alias));
  137. $refundInfo = $refundService->elasticClientService()->queryOne(['mid' => $refund_mid, 'member_id' => $this->userId]);
  138. if (empty($refundInfo)) {
  139. return responseMessage(2005, '退款订单不存在,请重试!');
  140. }
  141. // status 1 退款申请中 2 拒绝退款 3 退款完成 4 取消退款
  142. if ($refundInfo['status'] == 1) {
  143. $is_success = $refundService->update($refundInfo['id'], ['status' => 4]);
  144. if ($is_success) {
  145. //更新总订单
  146. $orderService = new MaterialService(new EavSetService($aliasOrder));
  147. $orderInfo = $orderService->elasticClientService()->getInfo($refundInfo['order_id']);
  148. if ($orderInfo) {
  149. if ($orderInfo['order_status'] == 6) { // 已支付 未发货
  150. $orderService->update($orderInfo['id'], ['order_status' => 2]);
  151. } elseif ($orderInfo['order_status'] == 7) { // 已支付 已发货
  152. $orderService->update($orderInfo['id'], ['order_status' => 3]);
  153. }
  154. }
  155. // 更新订单产品
  156. $orderProductService = new MaterialService(new EavSetService($aliasOrderProduct));
  157. $orderProductService->update($refundInfo['product_id'], ['status' => 0]);
  158. return responseMessage(1001, '操作成功!');
  159. } else {
  160. return responseMessage(2007, '操作失败,请重试!');
  161. }
  162. } else {
  163. return responseMessage(2006, '非法操作!');
  164. }
  165. }
  166. }