app->model('order_fail'); $base_filter = array('is_fail' => 'true', 'archive' => '1', 'edit_status' => 'true', 'status' => 'active'); //check shop permission $organization_permissions = kernel::single('desktop_user')->get_organization_permission(); if ($organization_permissions) { $base_filter['org_id'] = $organization_permissions; } $sub_menu = array( 0 => array('label' => app::get('base')->_('全部'), 'filter' => $base_filter, 'optional' => false), 1 => array('label' => app::get('base')->_('活动'), 'filter' => array('process_status|noequal' => 'cancel'), 'optional' => false), 2 => array('label' => app::get('base')->_('取消'), 'filter' => array('process_status' => 'cancel'), 'optional' => false), ); $i = 0; foreach ($sub_menu as $k => $v) { if (!IS_NULL($v['filter'])) { $v['filter'] = array_merge($v['filter'], $base_filter); } $sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null; $sub_menu[$k]['addon'] = $mdl_order->viewcount($v['filter']); $sub_menu[$k]['href'] = 'index.php?app=ome&ctl=' . $_GET['ctl'] . '&act=' . $_GET['act'] . '&view=' . $i++; } return $sub_menu; } public function index() { $op_id = kernel::single('desktop_user')->get_id(); $this->title = '失败订单'; $base_filter = array('is_fail' => 'true', 'archive' => '1', 'edit_status' => 'true', 'status' => array('active','finish')); //check shop permission $organization_permissions = kernel::single('desktop_user')->get_organization_permission(); if ($organization_permissions) { $base_filter['org_id'] = $organization_permissions; //post if($_POST['org_id']){ if(in_array($_POST['org_id'],$base_filter['org_id'] )){ $base_filter['org_id'] = $_POST['org_id']; }else{ $base_filter['org_id'] = -1; } } } $is_export = kernel::single('desktop_user')->has_permission('order_export'); #增加失败订单导出权限 $params = array( 'title' => $this->title, 'use_buildin_recycle' => false, 'use_buildin_filter' => true, 'use_buildin_export' => $is_export, 'actions' => array( array( 'label' => app::get('ome')->_('删除订单'), 'submit' => "index.php?app=ome&ctl=admin_order_fail&act=toDeleteFail", 'confirm' => '订单删除后无法恢复,您确定删除选择的订单吗?', 'target' => 'dialog::{width:600,height:250,title:\'删除订单(订单删除后无法恢复,可以手工重新获取订单)\'}', ), ), 'use_view_tab' => true, 'finder_aliasname' => 'order_fail' . $op_id, 'finder_cols' => 'order_bn,shop_id,shop_type,total_amount,is_cod,pay_status,createtime', 'base_filter' => $base_filter, 'object_method' => [ 'count' => 'finder_count', 'getlist' => 'finder_getList', ], 'orderBy' => 'createtime DESC' ); $this->finder('ome_mdl_order_fail', $params); } public function dosave() { $url = 'index.php?app=ome&ctl=admin_order_fail&act=index'; $pbn = $_POST['pbn']; $oldPbn = $_POST['oldPbn']; $order_id = $_POST['order_id']; //danny_freeze_stock_log define('FRST_TRIGGER_OBJECT_TYPE', '订单:失败订单恢复'); define('FRST_TRIGGER_ACTION_TYPE', 'ome_ctl_admin_order_fail:dosave'); //check if(empty($pbn) || empty($oldPbn)){ $this->splash('error', $url, '请填写调整货号'); } //修正订单项 if (kernel::single("ome_order_fail")->modifyOrderItems($order_id, $oldPbn, $pbn)) { $this->splash('success', $url, '订单处理成功'); } else { $this->splash('error', $url, '存在异常商品,订单修正失败!'); } } /** * 失败订单批量修复货号 */ public function batchsave($type = 'bn') { $pbn = $_POST['pbn']; $oldPbn = $type == 'bn' ? $_POST['oldPbn'] : $_POST['oldGoodsId']; $finder_id = $_GET['finder_id']; //check if(empty($oldPbn)){ echo ""; exit; } //type if ($type == 'bn') { $orderData = kernel::single('ome_order_fail')->getFailOrderByBn($oldPbn); } else { $orderData = kernel::single('ome_order_fail')->getFailOrderByName($oldPbn); } // check if(empty($orderData)){ echo ""; exit; } if (!$oldPbn) { echo ""; exit; } else { foreach ($oldPbn as $bn) { if (!$bn || $bn == '') { echo ""; exit; } } } /** * 处理拥有相同旧货号明细大于1,且新货号明细货号又不同的情况。 * 只能单个处理 */ $arr = array_combine($pbn, $oldPbn); // 过滤键为空 unset($arr['']); $arr_count_values = array_count_values($arr); foreach ($arr_count_values as $key => $count) { if ($key && $count > 1) { echo ""; exit; } } $GroupList = array_column($orderData, 'order_id'); $this->pagedata['oldPbn'] = base64_encode(json_encode($oldPbn)); $this->pagedata['pbn'] = base64_encode(json_encode($pbn)); $this->pagedata['modifyType'] = $type; $this->pagedata['custom_html'] = $this->fetch('admin/order/fail/batchsave.html'); $this->pagedata['request_url'] = $this->url.'&act=doBatchSave'; $this->pagedata['itemCount'] = count($GroupList); $this->pagedata['GroupList'] = json_encode($GroupList); $this->pagedata['maxNum'] = 10; $this->pagedata['startNow'] = true; parent::dialog_batch(); } public function doBatchSave() { $order_ids = explode(',', $_POST['primary_id']); $order_ids = array_filter($order_ids); if (empty($order_ids)) { echo 'Error: 请先选择订单';exit; } $oldPbn = json_decode(base64_decode($_POST['oldPbn']), true); $pbn = json_decode(base64_decode($_POST['pbn']), true); $modifyType = $_POST['modifyType']; $retArr = array( 'itotal' => count($order_ids), 'isucc' => 0, 'ifail' => 0, 'err_msg' => array(), ); foreach ($order_ids as $v) { kernel::single('ome_order_fail')->addFailOrderLog($v); $result = kernel::single('ome_order_fail')->modifyOrderItemsByBn($v, $oldPbn, $pbn, $modifyType); if ($result) { $retArr['isucc']++; } else { $retArr['ifail']++; $retArr['err_msg'][] = '订单修正失败!'; } } echo json_encode($retArr),'ok.';exit; } public function toDeleteFail() { $_POST = array_merge($_POST, array('is_fail' => 'true', 'archive' => '1', 'edit_status' => 'true')); $organization_permissions = kernel::single('desktop_user')->get_organization_permission(); if ($organization_permissions) { $_POST['org_id'] = $organization_permissions; } $this->pagedata['request_url'] = $this->url.'&act=deleteFailOrder'; parent::dialog_batch('ome_mdl_order_fail',true, 500); } #删除失败订单 public function deleteFailOrder() { parse_str($_POST['primary_id'], $postdata); if (!$postdata['f']) { echo 'Error: 请先选择订单';exit;} $retArr = array( 'itotal' => 0, 'isucc' => 0, 'ifail' => 0, 'err_msg' => array(), ); $orderMdl = app::get('ome')->model('orders'); $operLogObj = app::get('ome')->model('operation_log'); $orders = $orderMdl->getList('order_id,order_bn,pay_status,is_cod,is_fail,status', $postdata['f'], $postdata['f']['offset'], $postdata['f']['limit']); $orders = array_column($orders, null, 'order_id'); if (!$orders) {echo 'Error: 未查询到失败订单';exit;} $retArr['itotal'] = count($orders); // 排除掉正在恢复的订单 $repairOrders = app::get('base')->model('queue')->getList('params', array('status' => 'running', 'work' => 'ome_order_fail.batchModifyOrder')); if (!empty($repairOrders)) { foreach ($repairOrders as $o) { $arrRepairOrderId = $o['params']['sdfdata']['orderId']; if ( $arrRepairOrderId) { foreach($arrRepairOrderId as $roi) { if ($orders[$roi]) { $retArr['ifail']++; $retArr['err_msg'][] = sprintf('%s:删除订单中有订单在失败订单恢复队列中不能删除', $orders[$o['params']['sdfdata']['orderId']]['order_bn']); unset($orders[$roi]); } } } } } if (!$orders) { echo json_encode($retArr),'ok.';exit; } $extendOrderMdl = app::get('ome')->model('order_extend'); $invoiceOrderMdl = app::get('ome')->model('order_invoice'); $serviceOrderMdl = app::get('ome')->model('order_service'); $objectMdl = app::get('ome')->model('order_objects'); $itemMdl = app::get('ome')->model('order_items'); $pmtMdl = app::get('ome')->model('order_pmt'); $paymentMdl = app::get('ome')->model('payments'); $refundApplyMdl = app::get('ome')->model('refund_apply'); $refundMdl = app::get('ome')->model('refunds'); $tbfxOrderMdl = app::get('ome')->model('tbfx_orders'); $tbfxObjectMdl = app::get('ome')->model('tbfx_order_objects'); $tbfxItemMdl = app::get('ome')->model('tbfx_order_items'); $tbgiftItemMdl = app::get('ome')->model('tbgift_order_items'); $tbjzOrderMdl = app::get('ome')->model('tbjz_orders'); $orderAgentMdl = app::get('ome')->model('order_selling_agent'); $orderPrePcsMdl = app::get('ome')->model('order_preprocess'); $orderIdArr = array_column($orders, 'order_id'); $orderObjList = $objectMdl->getList('order_id,obj_id,goods_id', ['order_id'=>$orderIdArr]); $orderObjList = array_column($orderObjList, null, 'obj_id'); $orderItemList = []; $_order_items = $itemMdl->getList('product_id,nums,order_id,obj_id', array ('order_id' => $orderIdArr)); foreach ($_order_items as $k => $v) { $orderItemList[$v['order_id']][] = $v; unset($_order_items[$k]); } $db = kernel::database(); foreach ($orders as $o) { if ($o['order_id'] && $o['is_fail'] == 'true') { $transaction = $db->beginTransaction(); $order_items = $orderItemList[$o['order_id']]; //释放冻结 $batchList = []; foreach ($order_items as $item) { $batchList[] = [ 'bm_id' => $item['product_id'], 'sm_id' => $orderObjList[$item['obj_id']]['goods_id'], 'obj_type' => material_basic_material_stock_freeze::__ORDER, 'bill_type' => 0, 'obj_id' => $item['order_id'], 'branch_id' => 0, 'bmsq_id' => material_basic_material_stock_freeze::__SHARE_STORE, 'num' => $item['nums'], 'sync_sku' => false, ]; } $err = ''; kernel::single('material_basic_material_stock_freeze')->unfreezeBatch($batchList, __CLASS__.'::'.__FUNCTION__, $err); // 订单表信息 kernel::database()->exec('DELETE FROM `sdb_ome_orders` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_extend` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_invoice` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_service` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_objects` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_items` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_pmt` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_payments` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_refund_apply` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_refunds` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_tbfx_orders` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_tbfx_order_objects` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_tbfx_order_items` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_tbgift_order_items` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_tbjz_orders` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_selling_agent` WHERE order_id='.$o['order_id']); kernel::database()->exec('DELETE FROM `sdb_ome_order_preprocess` WHERE preprocess_order_id='.$o['order_id']); if(app::get('invoice')->is_installed()){ kernel::database()->exec('DELETE FROM `sdb_invoice_order` WHERE order_id='.$o['order_id']); } //记录操作日志 $operLogObj->write_log('order_modify@ome', $o['order_id'], '删除失败订单号:'.$o['order_bn']); $retArr['isucc']++; $db->commit($transaction); } else { $retArr['ifail']++; $retArr['err_msg'][] = sprintf('%s:非失败订单', $o['order_bn']); } } echo json_encode($retArr),'ok.';exit; } }