Orderrefund.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\shop\controller;
  11. use app\model\order\OrderCommon;
  12. use app\model\order\OrderRefund as OrderRefundModel;
  13. use app\model\order\OrderExport;
  14. use app\model\member\Member;
  15. use app\model\system\UserGroup;
  16. /**
  17. * 订单维权
  18. * Class Orderrefund
  19. * @package app\shop\controller
  20. */
  21. class Orderrefund extends BaseShop
  22. {
  23. /**
  24. * 维权订单列表
  25. * @return mixed
  26. */
  27. public function lists()
  28. {
  29. $refund_status = input("refund_status", "");//退款状态
  30. $sku_name = input("sku_name", '');//商品名称
  31. $refund_type = input("refund_type", '');//退款方式
  32. $start_time = input("start_time", '');//开始时间
  33. $end_time = input("end_time", '');//结束时间
  34. $order_no = input("order_no", '');//订单编号
  35. $delivery_status = input("delivery_status", '');//物流状态
  36. $refund_no = input("refund_no", '');//退款编号
  37. $delivery_no = input("delivery_no", '');//物流编号
  38. $refund_delivery_no = input("refund_delivery_no", '');//退款物流编号
  39. $refund_mode = input("refund_mode", '');//退款类型
  40. $order_refund_model = new OrderRefundModel();
  41. if (request()->isAjax()) {
  42. $page_index = input('page', 1);
  43. $page_size = input('page_size', PAGE_LIST_ROWS);
  44. $condition = [
  45. [ "nop.site_id", "=", $this->site_id ]
  46. ];
  47. //退款状态
  48. if ($refund_status != "") {
  49. $condition[] = [ "nop.refund_status", "=", $refund_status ];
  50. } else {
  51. $condition[] = [ "nop.refund_status", "<>", 0 ];
  52. }
  53. //物流状态
  54. if ($delivery_status != "") {
  55. $condition[] = [ "nop.delivery_status", "=", $delivery_status ];
  56. }
  57. //商品名称
  58. if ($sku_name != "") {
  59. $condition[] = [ "nop.sku_name", "like", "%$sku_name%" ];
  60. }
  61. //退款方式
  62. if ($refund_type != "") {
  63. $condition[] = [ "nop.refund_type", "=", $refund_type ];
  64. }
  65. //退款编号
  66. if ($refund_no != "") {
  67. $condition[] = [ "nop.refund_no", "like", "%$refund_no%" ];
  68. }
  69. //订单编号
  70. if ($order_no != "") {
  71. $condition[] = [ "nop.order_no", "like", "%$order_no%" ];
  72. }
  73. //物流编号
  74. if ($delivery_no != "") {
  75. $condition[] = [ "nop.delivery_no", "like", "%$delivery_no%" ];
  76. }
  77. //退款物流编号
  78. if ($refund_delivery_no != "") {
  79. $condition[] = [ "nop.refund_delivery_no", "like", "%$refund_delivery_no%" ];
  80. }
  81. //退款类型
  82. if ($refund_mode == 1) {
  83. $condition[] = [ "nop.refund_mode", "in", [ 0, 1 ] ];
  84. } else if ($refund_mode == 2) {
  85. $condition[] = [ "nop.refund_mode", "=", 2 ];
  86. }
  87. if (!empty($start_time) && empty($end_time)) {
  88. $condition[] = [ "nop.refund_action_time", ">=", date_to_time($start_time) ];
  89. } elseif (empty($start_time) && !empty($end_time)) {
  90. $condition[] = [ "nop.refund_action_time", "<=", date_to_time($end_time) ];
  91. } elseif (!empty($start_time) && !empty($end_time)) {
  92. $condition[] = [ 'nop.refund_action_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  93. }
  94. $store_id_arr = [];
  95. $userGroupModel = new UserGroup();
  96. $userInfo = $this->user_info;
  97. $userGroupWhere['uid'] = $userInfo['uid'];
  98. $userGroupList = $userGroupModel->getUserList($userGroupWhere,'uid,store_id');
  99. $store_id_arr = array_column($userGroupList['data'],'store_id');
  100. if(!empty($store_id_arr) && !$userInfo['is_admin']){
  101. $condition[] = [ "nop.store_id", "in", $store_id_arr];
  102. }
  103. $list = $order_refund_model->getRefundOrderGoodsPageList($condition, $page_index, $page_size, "nop.refund_action_time desc");
  104. return $list;
  105. } else {
  106. $refund_status_list = $order_refund_model->order_refund_status;
  107. $this->assign("refund_status_list", $refund_status_list);//退款状态
  108. $this->assign("refund_type_list", $order_refund_model->refund_type);//退款方式
  109. return $this->fetch("orderrefund/lists");
  110. }
  111. }
  112. /**
  113. * 维权订单详情
  114. * @return mixed
  115. */
  116. public function detail()
  117. {
  118. $order_goods_id = input("order_goods_id", 0);
  119. //维权订单项信息
  120. $order_refund_model = new OrderRefundModel();
  121. $detail_result = $order_refund_model->getRefundDetail($order_goods_id);
  122. $detail = $detail_result[ "data" ];
  123. if (empty($detail))
  124. $this->error("未获取到维权信息", addon_url('shop/orderrefund/lists'));
  125. $order_common_model = new OrderCommon();
  126. // $order_info_result = $order_common_model->getOrderInfo([["order_id", "=", $detail["order_id"]]]);
  127. $order_info_result = $order_common_model->getOrderDetail($detail[ "order_id" ]);
  128. $order_info = $order_info_result[ "data" ];
  129. if (empty($order_info))
  130. $this->error("未获取到维权信息", addon_url('shop/orderrefund/lists'));
  131. $template = "orderrefund/detail";
  132. if ($order_info[ "order_type" ] == 4) {
  133. $template = "orderrefund/virtualdetail";
  134. }
  135. //添加会员昵称
  136. $member = new Member();
  137. $member_info = $member->getMemberInfo([ [ "member_id", '=', $order_info[ 'member_id' ] ] ], 'nickname')['data'] ?? [];
  138. $order_info[ 'nickname' ] = $member_info[ 'nickname' ] ?? '';
  139. $this->assign("detail", $detail);
  140. $this->assign("order_info", $order_info);
  141. return $this->fetch($template);
  142. }
  143. /**
  144. * 维权拒绝
  145. * @return mixed
  146. */
  147. public function refuse()
  148. {
  149. $order_goods_id = input("order_goods_id", 0);
  150. $refund_refuse_reason = input("refund_refuse_reason", '');
  151. $order_refund_model = new OrderRefundModel();
  152. $data = array (
  153. "order_goods_id" => $order_goods_id,
  154. "refund_refuse_reason" => $refund_refuse_reason
  155. );
  156. $log_data = [
  157. 'uid' => $this->user_info[ 'uid' ],
  158. 'nick_name' => $this->user_info[ 'username' ],
  159. 'action' => '商家拒绝了维权',
  160. 'action_way' => 2
  161. ];
  162. $res = $order_refund_model->orderRefundRefuse($data, $this->user_info, $refund_refuse_reason, $log_data);
  163. return $res;
  164. }
  165. /**
  166. * 维权同意
  167. * @return mixed
  168. */
  169. public function agree()
  170. {
  171. $order_goods_id = input("order_goods_id", 0);
  172. $order_refund_model = new OrderRefundModel();
  173. $data = array (
  174. "order_goods_id" => $order_goods_id
  175. );
  176. $res = $order_refund_model->orderRefundConfirm($data, $this->user_info);
  177. return $res;
  178. }
  179. /**
  180. * 维权收货
  181. * @return mixed
  182. */
  183. public function receive()
  184. {
  185. $order_goods_id = input("order_goods_id", 0);
  186. $is_refund_stock = input("is_refund_stock", 0);//是否入库
  187. $order_refund_model = new OrderRefundModel();
  188. $data = array (
  189. "order_goods_id" => $order_goods_id,
  190. "is_refund_stock" => $is_refund_stock
  191. );
  192. $res = $order_refund_model->orderRefundTakeDelivery($data, $this->user_info);
  193. return $res;
  194. }
  195. /**
  196. * 维权通过
  197. * @return mixed
  198. */
  199. public function complete()
  200. {
  201. $order_goods_id = input("order_goods_id", 0);
  202. $refund_money_type = input('refund_money_type', '');
  203. $shop_refund_remark = input('shop_refund_remark', '');
  204. $refund_real_money = input('refund_real_money', 0);
  205. $is_deposit_back = input('is_deposit_back', 1);
  206. $order_refund_model = new OrderRefundModel();
  207. $data = array (
  208. "order_goods_id" => $order_goods_id,
  209. 'refund_money_type' => $refund_money_type,
  210. 'shop_refund_remark' => $shop_refund_remark,
  211. 'refund_real_money' => $refund_real_money,
  212. 'is_deposit_back' => $is_deposit_back
  213. );
  214. $log_data = [
  215. 'uid' => $this->user_info[ 'uid' ],
  216. 'nick_name' => $this->user_info[ 'username' ],
  217. 'action' => '商家对维权进行了转账,维权结束',
  218. 'action_way' => 2
  219. ];
  220. $res = $order_refund_model->orderRefundFinish($data, $this->user_info, $log_data);
  221. return $res;
  222. }
  223. /**
  224. * 订单导出(维权订单)
  225. */
  226. public function exportRefundOrder()
  227. {
  228. $refund_status = input("refund_status", "");//退款状态
  229. $sku_name = input("sku_name", '');//商品名称
  230. $refund_type = input("refund_type", '');//退款方式
  231. $start_time = input("start_time", '');//开始时间
  232. $end_time = input("end_time", '');//结束时间
  233. $order_no = input("order_no", '');//订单编号
  234. $delivery_status = input("delivery_status", '');//物流状态
  235. $refund_no = input("refund_no", '');//退款编号
  236. $order_refund_model = new OrderRefundModel();
  237. $delivery_no = input("delivery_no", '');//物流编号
  238. $refund_delivery_no = input("refund_delivery_no", '');//退款物流编号
  239. $condition_desc = [];
  240. $condition[] = [ 'og.site_id', '=', $this->site_id ];
  241. //退款状态
  242. $refund_status_list = $order_refund_model->order_refund_status;
  243. $refund_status_name = '全部';
  244. if ($refund_status != "") {
  245. $condition[] = [ "og.refund_status", "=", $refund_status ];
  246. $refund_status_name = $refund_status_list[ $refund_status ][ 'name' ] ?? '';
  247. } else {
  248. $condition[] = [ "og.refund_status", "<>", 0 ];
  249. }
  250. $condition_desc[] = [ 'name' => '维权状态', 'value' => $refund_status_name ];
  251. //物流状态
  252. if ($delivery_status != "") {
  253. $condition[] = [ "og.delivery_status", "=", $delivery_status ];
  254. }
  255. //商品名称
  256. $sku_name_value = '';
  257. if ($sku_name != "") {
  258. $condition[] = [ "og.sku_name", "like", "%$sku_name%" ];
  259. $sku_name_value = $sku_name;
  260. }
  261. $condition_desc[] = [ 'name' => '商品名称', 'value' => $sku_name_value ];
  262. //退款方式
  263. $refund_type_name = '全部';
  264. if ($refund_type != "") {
  265. $condition[] = [ "og.refund_type", "=", $refund_type ];
  266. $refund_type_name = $order_refund_model->refund_type[ $refund_type ];
  267. }
  268. $condition_desc[] = [ 'name' => '退款方式', 'value' => $refund_type_name ];
  269. //退款编号
  270. if ($refund_no != "") {
  271. $condition[] = [ "og.refund_no", "like", "%$refund_no%" ];
  272. }
  273. $condition_desc[] = [ 'name' => '退款编号', 'value' => $refund_no ];
  274. //订单编号
  275. if ($order_no != "") {
  276. $condition[] = [ "og.order_no", "like", "%$order_no%" ];
  277. }
  278. $condition_desc[] = [ 'name' => '订单编号', 'value' => $order_no ];
  279. //物流编号
  280. if ($delivery_no != "") {
  281. $condition[] = [ "og.delivery_no", "like", "%$delivery_no%" ];
  282. }
  283. //退款物流编号
  284. if ($refund_delivery_no != "") {
  285. $condition[] = [ "og.refund_delivery_no", "like", "%$refund_delivery_no%" ];
  286. }
  287. $time_name = '';
  288. if (!empty($start_time) && empty($end_time)) {
  289. $condition[] = [ "og.refund_action_time", ">=", date_to_time($start_time) ];
  290. $time_name = $start_time . '起';
  291. } elseif (empty($start_time) && !empty($end_time)) {
  292. $condition[] = [ "og.refund_action_time", "<=", date_to_time($end_time) ];
  293. $time_name = '至' . $end_time;
  294. } elseif (!empty($start_time) && !empty($end_time)) {
  295. $condition[] = [ 'og.refund_action_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  296. $time_name = $start_time . ' 至 ' . $end_time;
  297. }
  298. $condition_desc[] = [ 'name' => '申请时间', 'value' => $time_name ];
  299. $order_export_model = new OrderExport();
  300. $result = $order_export_model->orderRefundExport($condition, $condition_desc, $this->site_id);
  301. return $result;
  302. }
  303. /**
  304. * 订单导出记录
  305. * @return mixed
  306. */
  307. public function export()
  308. {
  309. if (request()->isAjax()) {
  310. $page_index = input('page', 1);
  311. $page_size = input('page_size', PAGE_LIST_ROWS);
  312. $export_model = new OrderExport();
  313. $condition = array (
  314. [ 'site_id', '=', $this->site_id ]
  315. );
  316. $result = $export_model->getRefundExportPageList($condition, $page_index, $page_size, 'create_time desc', '*');
  317. return $result;
  318. } else {
  319. return $this->fetch("orderrefund/export");
  320. }
  321. }
  322. /**
  323. * 删除订单导出记录
  324. */
  325. public function deleteExport()
  326. {
  327. if (request()->isAjax()) {
  328. $export_ids = input('export_ids', '');
  329. $export_model = new OrderExport();
  330. $condition = array (
  331. [ 'site_id', '=', $this->site_id ],
  332. [ 'export_id', 'in', (string) $export_ids ]
  333. );
  334. $result = $export_model->deleteRefundExport($condition);
  335. return $result;
  336. }
  337. }
  338. /**
  339. * 关闭维权
  340. * @return \app\model\order\multitype
  341. */
  342. public function close()
  343. {
  344. if (request()->isAjax()) {
  345. $order_goods_id = input("order_goods_id", 0);
  346. $order_refund_model = new OrderRefundModel();
  347. $res = $order_refund_model->orderRefundClose($order_goods_id, $this->site_id, $this->user_info);
  348. return $res;
  349. }
  350. }
  351. /**
  352. * 获取订单项退款信息
  353. */
  354. public function getOrderGoodsRefundInfo()
  355. {
  356. if (request()->isAjax()) {
  357. $order_goods_id = input('order_goods_id', '');
  358. $order_refund_model = new OrderRefundModel();
  359. $res = $order_refund_model->getOrderGoodsRefundInfo($order_goods_id, $this->site_id);
  360. return $res;
  361. }
  362. }
  363. /**
  364. * 主动退款
  365. * @return mixed
  366. */
  367. public function shopActiveRefund()
  368. {
  369. $order_goods_id = input("order_goods_id", 0);
  370. $refund_money_type = input('refund_money_type', '');
  371. $shop_refund_remark = input('shop_refund_remark', '');
  372. $do_refund_money = input('do_refund_money', '');
  373. $order_refund_model = new OrderRefundModel();
  374. $params = array (
  375. 'site_id' => $this->site_id,
  376. 'app_module' => $this->app_module,
  377. 'refund_money_type' => $refund_money_type,
  378. 'shop_refund_remark' => $shop_refund_remark,
  379. 'user_info' => $this->user_info,
  380. 'order_goods_id' => $order_goods_id,
  381. 'do_refund_money' => $do_refund_money
  382. );
  383. $res = $order_refund_model->doOrderOrderRefund($params);
  384. return $res;
  385. }
  386. }