time() - 300, 'last_modify|than' => strtotime('-5 days'), 'obj_type' => $objType, 'fail_times|lthan' => '15', 'status' => 'fail', 'filter_sql' => ' err_msg REGEXP "'.implode('|',$retryError).'" and not (err_msg REGEXP "'.implode('|',$notRetryError).'")', ); $apiFailModel = app::get('erpapi')->model('api_fail'); $apiFailModel->defaultOrder = 'last_modify DESC,fail_times ASC'; $rows = $apiFailModel->getList('*', $filter, 0, 50); foreach ($rows as $key => $value) { $apiFailModel->retry($value); } // 订单退款回传平台 $filter = array( 'last_modify|sthan' => time() - 300, 'last_modify|than' => strtotime('-5 days'), 'obj_type' => ['bookingrefund_back'], 'fail_times|lthan' => '15', 'status' => 'fail', ); $rows = $apiFailModel->getList('*', $filter, 0, 30); foreach ($rows as $key => $value) { $apiFailModel->retry($value); } // 仓储单据轮训查 $retryType = array( 'search_inpurchase', 'search_delivery', 'search_outpurchase_return', 'search_inallcoate', 'search_outallcoate', 'search_indefective', 'search_outdefective', 'search_inother', 'search_outother', 'search_indirect', 'search_outdirect', ); $filter = array( 'last_modify|sthan' => time()-1800, 'obj_type' => $retryType ); $rows = $apiFailModel->getList('*',$filter,0,100); foreach($rows as $row) { $apiFailModel->retry($row); } // //重试推送请求WMS失败的发货单 // $deliveryLib = kernel::single('console_delivery'); // $result = $deliveryLib->auto_retry_wms_delivery(); } /** * hour * @return mixed 返回值 */ public function hour() { $apiFailModel = app::get('erpapi')->model('api_fail'); // 物流回写重试 $filter = array ( 'last_modify|sthan' => time()-300, 'last_modify|than' => strtotime('-5 days'), 'obj_type' => array ('deliveryBack'), 'err_msg|has' => 'e00053', ); $rows = $apiFailModel->getList('*',$filter,0,100,'last_modify DESC,fail_times ASC'); foreach ($rows as $key => $value) { $apiFailModel->retry($value); } //[重试]发货单处理发货完成流程失败 //@todo报错文字:订单状态更新失败!、仓库货品冻结释放失败; $apiFailObj = app::get('erpapi')->model('api_fail'); $receiveLib = kernel::single('ome_event_receive_delivery'); $sql = "SELECT * FROM sdb_erpapi_api_fail WHERE obj_type='deliveryship' AND create_time>" . strtotime('-1 days'); $sql .= " ORDER BY id ASC LIMIT 0,500"; $dataList = $apiFailObj->db->select($sql); if ($dataList) { foreach ($dataList as $key => $val) { $delivery_bn = $val['obj_bn']; //重试失败次数 if ($val['fail_times'] > 10) { continue; } $params = $val['params'] ? json_decode($val['params'], true) : array(); if (empty($params)) { continue; } //running $apiFailObj->update(array('status' => 'running'), array('id' => $val['id'])); //处理发货逻辑 $params['status'] = 'delivery'; $result = $receiveLib->update($params); if ($result['rsp'] == 'succ') { $apiFailObj->db->exec("DELETE FROM sdb_erpapi_api_fail WHERE id=" . $val['id']); } else { $apiFailObj->update(array('status' => 'fail', 'fail_times' => $val['fail_times'] + 1), array('id' => $val['id'])); } //@todo:一定要延迟1秒,防止同货号并发释放冻结和更新订单发货状态失败 // sleep(1); } } } /** * day * @return mixed 返回值 */ public function day() { // 清除一个月之前的失败 $apiFailModel = app::get('erpapi')->model('api_fail'); $filter = array( 'create_time|sthan' => strtotime('-2 month'), ); $apiFailModel->delete($filter); } }