* @version 1.0 vopick.php 2017-02-23 */ class console_ctl_admin_vopstockout extends desktop_controller{ var $workground = "console_purchasecenter"; function _views() { $pickObj = app::get('console')->model('pick_stockout_bills'); $base_filter = array(); $sub_menu = array( 0 => array('label'=>__('全部'),'filter'=>$base_filter), 1 => array('label'=>__('未审核'),'filter'=>array('confirm_status'=>1), 'optional'=>false), 2 => array('label'=>__('已审核'),'filter'=>array('confirm_status'=>2), 'optional'=>false), 3 => array('label'=>__('同步唯品会失败'),'filter'=>array('confirm_status'=>2, 'status'=>3, 'rsp_code|than'=>0), 'optional'=>false), ); foreach($sub_menu as $k => $v) { $sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null; $sub_menu[$k]['addon'] = $pickObj->viewcount($v['filter']); $sub_menu[$k]['href'] = 'index.php?app=console&ctl=admin_vopstockout&act=index&view='. $k; } return $sub_menu; } function index() { $this->title = '出库单列表'; $actions = array(); switch($_GET['view']) { case '2': $actions = array( array( 'label'=>app::get('console')->_('推送单据至WMS'), 'submit'=>"index.php?app=console&ctl=admin_vopstockout&act=batch_stockout", 'confirm'=>'你确定要对勾选的出库单发送至第三方吗?', 'target' => 'refresh', ), ); break; case '3': $actions = array( array( 'label'=>app::get('console')->_('批量重试'), 'submit'=>"index.php?app=console&ctl=admin_vopstockout&act=batch_sync", 'confirm'=>'你确定要对勾选的出库单,批量重试回传唯品会吗?', 'target' => 'refresh', ), ); break; default: break; } $params = array( 'actions' => $actions, 'title'=>$this->title, 'use_buildin_set_tag'=>false, 'use_buildin_filter'=>true, 'use_buildin_export'=>true, 'use_buildin_import'=>false, 'use_buildin_recycle'=>false, ); $this->finder('console_mdl_pick_stockout_bills', $params); } /** * 编辑出库单 */ function edit($stockout_id) { if(empty($stockout_id)){ $error_msg = '无效操作,请检查!'; header("content-type:text/html; charset=utf-8"); echo ""; exit; } $pickObj = app::get('purchase')->model('pick_bills'); $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $stockLib = kernel::single('purchase_purchase_stockout'); //出库单 $row = $stockoutObj->dump(array('stockout_id'=>$stockout_id, 'status'=>1, 'confirm_status'=>1, 'o_status'=>1), '*'); if(empty($row)) { $error_msg = '没有相关记录,请检查!'; header("content-type:text/html; charset=utf-8"); echo ""; exit; } //出库仓 $branchObj = app::get('ome')->model('branch'); $branchInfo = $branchObj->dump(array('branch_id'=>$row['branch_id']), 'name'); $row['branch_name'] = $branchInfo['name']; //关联拣货单 $sql = "SELECT b.pick_no, b.po_id, b.to_branch_bn FROM sdb_purchase_pick_stockout AS a LEFT JOIN sdb_purchase_pick_bills AS b ON a.bill_id=b.bill_id WHERE a.stockout_id=". $stockout_id; $pickInfo = $stockoutObj->db->selectrow($sql); if($pickInfo['to_branch_bn']) { $purchaseLib = kernel::single('purchase_purchase_order'); $branchInfo = $purchaseLib->getWarehouse($pickInfo['to_branch_bn']); $pickInfo['to_branch_name'] = $branchInfo['branch_name']; } $this->pagedata['pickInfo'] = $pickInfo; //获取shop_id $sql = "SELECT shop_id FROM sdb_purchase_order WHERE po_id=". $pickInfo['po_id']; $poInfo = $stockoutObj->db->selectrow($sql); $shop_id = $poInfo['shop_id']; //出库单明细 $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $dataList = $stockoutItemsObj->getList('*', array('stockout_id'=>$stockout_id)); $stockoutItemIdArr = array_column($dataList, 'stockout_item_id'); $labelList = kernel::single('ome_bill_label')->getLabelFromOrder($stockoutItemIdArr, 'pick_stockout_bill_item'); foreach ($dataList as $key => $val) { $bill_id = $val['bill_id']; $pickInfo = $pickObj->dump(array('bill_id'=>$bill_id), 'pick_no, po_bn'); $val['pick_no'] = $pickInfo['pick_no']; $val['po_bn'] = $pickInfo['po_bn']; //仓库可用库存 $val['store'] = $stockLib->getBranchStoreByBn($val['bn'], $row['branch_id']); if ($labelList[$val['stockout_item_id']]) { $val['order_label'] = ''; foreach ($labelList[$val['stockout_item_id']] as $lk => $lv) { $val['order_label'] .= sprintf("%s", $lv['label_name'], $lv['label_color'], $lv['label_name']); } } $dataList[$key] = $val; } $this->pagedata['dataList'] = $dataList; //状态值 $dly_mode = $stockLib->getDlyMode();//配送方式 $carrier_code = $stockLib->getCarrierCode($shop_id);//承运商 $delivery_time = $stockLib->getDeliveryTime();//送货批次 $this->pagedata['dly_mode'] = $dly_mode; $this->pagedata['carrier_code'] = $carrier_code; $this->pagedata['json_delivery_time'] = json_encode($delivery_time); //已选择的送货批次 $sel_delivery_hour = $delivery_time[$row['dly_mode']]; $this->pagedata['sel_delivery_hour'] = $sel_delivery_hour; //送货批次时间 $row['delivery_date'] = date('Y-m-d', time()); if($delivery_time) { $temp = explode(' ', $row['delivery_time']); $row['delivery_date'] = $temp[0]; $row['delivery_hour'] = $temp[1]; } //要求到货时间 $tempDeliveryTime = array(); $sel_dly_mode = $row['dly_mode']; if($sel_dly_mode && $row['delivery_time']){ $temp_data = explode(' ', $row['delivery_time']); $sel_delivery_date = $temp_data[0]; $sel_delivery_hour = $temp_data[1]; $tempDeliveryTime = $stockLib->reckonArrivalTime($sel_dly_mode, $sel_delivery_date, $sel_delivery_hour); } $this->pagedata['arrival_time_list'] = $tempDeliveryTime; $this->pagedata['data'] = $row; $this->singlepage("admin/vop/stockout_edit.html"); } /** * 编辑保存 */ function doEdit() { $this->begin('index.php?app=console&ctl=admin_vopstockout&act=index'); $stockLib = kernel::single('purchase_purchase_stockout'); $stockout_id = intval($_POST['stockout_id']); $dly_mode = intval($_POST['dly_mode']);//配送方式 $carrier_code = $_POST['carrier_code']; $delivery_date = $_POST['delivery_date'];//送货批次日期 $delivery_hour = $_POST['delivery_hour'];//送货批次时间点 $is_air_embargo = $_POST['is_air_embargo'];//送货批次时间点 $arrival_time = $_POST['arrival_time'];//要求到货时间 $delivery_time = $delivery_date .' '. $delivery_hour; if(empty($stockout_id) || empty($dly_mode) || empty($carrier_code)) { $this->end(false, "无效操作,请检查"); } if(empty($delivery_date) || empty($delivery_hour) || empty($arrival_time)) { $this->end(false, "请选择送货批次和要求到货时间"); } //检查推算出来的送货时间是否正确 $tempDeliveryTime = $stockLib->reckonArrivalTime($dly_mode, $delivery_date, $delivery_hour); if(empty($tempDeliveryTime)){ $this->end(false, "推算要求到货时间失败!"); } $flag = false; foreach ($tempDeliveryTime as $key => $val){ if($val == $arrival_time){ $flag = true; } } if(!$flag){ $this->end(false, "要求到货时间错误,保存失败!"); } //出库单 $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $row = $stockoutObj->dump(array('stockout_id'=>$stockout_id, 'status'=>1, 'confirm_status'=>1, 'o_status'=>1), '*'); if(empty($row)) { $this->end(false, "出库单不存在"); } //时间范围 $min_time = strtotime(date('Y-m-d', time()));//今天零晨时间戳 $max_time = strtotime("+30 day");//后30天时间戳 $max_time = strtotime(date('Y-m-d', $max_time)); //检查送货批次 $temp_time = strtotime($delivery_date); if($temp_time < $min_time) { $this->end(false, '送货批次时间:不能小于当天零时时间'); } if($temp_time > $max_time) { $this->end(false, '送货批次时间:不能大于当天时间超过30天'); } $temp_time = strtotime($delivery_time); if($temp_time <= time()) { $this->end(false, '送货批次:不能小于当前时间'); } //检查要求到货时间 $temp_data = explode(' ', $arrival_time); $temp_time = strtotime($temp_data[0]); if($temp_time < $min_time) { $this->end(false, '要求到货时间:不能小于当天零时时间'); } if($temp_time > $max_time) { $this->end(false, '要求到货时间:不能大于当天时间超过30天'); } $temp_time = strtotime($arrival_time); if($temp_time <= time()) { $this->end(false, '要求到货时间:不能小于当前时间'); } //格式化时间(YY-mm-dd HH:ii:ss) $delivery_time = strtotime($delivery_time); $delivery_time = date('Y-m-d H:i', $delivery_time); $arrival_time = strtotime($arrival_time); $arrival_time = date('Y-m-d H:i', $arrival_time); //检查申请出库数量 if(empty($_POST['item_num'])) { $this->end(false, '出库单明细无效,请检查!'); } $error_msg = ''; $item_list = $stockLib->check_edit_items($_POST, $error_msg); if(!$item_list) { $this->end(false, $error_msg); } //更新出库单明细 $result = $stockLib->update_edit_items($item_list, $error_msg); if(!$result) { $this->end(false, $error_msg); } //统计拣货数量 $sql = "SELECT sum(num) AS pick_num FROM sdb_purchase_pick_stockout_bill_items WHERE stockout_id=". $stockout_id ." AND is_del='false'"; $pick_num = $stockoutObj->db->selectrow($sql); //更新出库单 $data = array( 'stockout_id' => $stockout_id, 'dly_mode' => $dly_mode, 'carrier_code' => $carrier_code, 'delivery_time' => $delivery_time, 'arrival_time' => $arrival_time, 'pick_num' => $pick_num['pick_num'], 'is_air_embargo' => $is_air_embargo, ); $result = $stockLib->update_stockout($data); if(!$result) { $this->end(false, "更新出库单失败"); } $this->end(true, '更新出库单成功'); } /** * 审核 */ function check($stockout_id) { if(empty($stockout_id)){ $error_msg = '无效操作,请检查!'; header("content-type:text/html; charset=utf-8"); echo ""; exit; } $pickObj = app::get('purchase')->model('pick_bills'); //状态值 $stockLib = kernel::single('purchase_purchase_stockout'); //出库单 $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $row = $stockoutObj->dump(array('stockout_id'=>$stockout_id, 'status'=>1, 'confirm_status'=>1, 'o_status'=>1), '*'); if(empty($row)) { $error_msg = '没有相关记录,请检查!'; header("content-type:text/html; charset=utf-8"); echo ""; exit; } //出库仓 $branchObj = app::get('ome')->model('branch'); $branchInfo = $branchObj->dump(array('branch_id'=>$row['branch_id']), 'name'); $row['branch_name'] = $branchInfo['name']; //关联拣货单 $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $sql = "SELECT b.pick_no, b.po_id, b.to_branch_bn FROM sdb_purchase_pick_stockout AS a LEFT JOIN sdb_purchase_pick_bills AS b ON a.bill_id=b.bill_id WHERE a.stockout_id=". $stockout_id; $pickInfo = $stockoutObj->db->selectrow($sql); if($pickInfo['to_branch_bn']) { $purchaseLib = kernel::single('purchase_purchase_order'); $branchInfo = $purchaseLib->getWarehouse($pickInfo['to_branch_bn']); $pickInfo['to_branch_name'] = $branchInfo['branch_name']; } $this->pagedata['pickInfo'] = $pickInfo; //出库单明细 $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $dataList = $stockoutItemsObj->getList('*', array('stockout_id'=>$stockout_id, 'is_del'=>'false')); $stockoutItemIdArr = array_column($dataList, 'stockout_item_id'); $labelList = kernel::single('ome_bill_label')->getLabelFromOrder($stockoutItemIdArr, 'pick_stockout_bill_item'); foreach ($dataList as $key => $val) { $bill_id = $val['bill_id']; $pickInfo = $pickObj->dump(array('bill_id'=>$bill_id), 'pick_no, po_bn'); $val['pick_no'] = $pickInfo['pick_no']; $val['po_bn'] = $pickInfo['po_bn']; //仓库可用库存 $val['store'] = $stockLib->getBranchStoreByBn($val['bn'], $row['branch_id']); if ($labelList[$val['stockout_item_id']]) { $val['order_label'] = ''; foreach ($labelList[$val['stockout_item_id']] as $lk => $lv) { $val['order_label'] .= sprintf("%s", $lv['label_name'], $lv['label_color'], $lv['label_name']); } } $dataList[$key] = $val; } $this->pagedata['dataiList'] = $dataList; //配送方式 if($row['dly_mode']) { $row['dly_mode'] = $stockLib->getDlyMode($row['dly_mode']); } //承运商 if($row['carrier_code']) { $row['carrier_code'] = $stockLib->getCarrierCode('', $row['carrier_code']); } $this->pagedata['data'] = $row; $this->singlepage('admin/vop/stockout_check.html'); } /** * 保存审核 */ function doCheck() { $this->begin('index.php?app=console&ctl=admin_vopstockout&act=index'); $stockout_id = $_POST['stockout_id']; $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $stockLib = kernel::single('purchase_purchase_stockout'); //出库单 $row = $stockoutObj->dump(array('stockout_id'=>$stockout_id, 'status'=>1, 'o_status'=>1, 'confirm_status'=>1), '*'); if(empty($row)) { $this->end(false, "出库单不存在"); } if(empty($row['dly_mode'])) { $this->end(false, "配送方式未填写"); } if(empty($row['carrier_code'])) { $this->end(false, "承运商未填写"); } if(empty($row['delivery_time'])) { $this->end(false, "送货批次未填写"); } if(empty($row['arrival_time'])) { $this->end(false, "要求到货时间未填写"); } //检查货品对应出库仓库存 $error_msg = ''; $result = $stockLib->checkBranchStock($stockout_id, $row['branch_id'], $error_msg); if(!$result) { $this->end(false, $error_msg); } //请求vop创建出库单 $storage_no = $row['storage_no']; if(empty($storage_no)) { $is_multiple = false; $to_branch_bn = ''; $po_bns = array(); $po_id = 0; //关联拣货单 $sql = "SELECT b.pick_no, b.po_id, b.po_bn, b.to_branch_bn FROM sdb_purchase_pick_stockout AS a LEFT JOIN sdb_purchase_pick_bills AS b ON a.bill_id=b.bill_id WHERE a.stockout_id=". $stockout_id; $pickList = $stockoutObj->db->select($sql); foreach ($pickList as $key => $val) { $po_bns[] = $val['po_bn']; $to_branch_bn = $val['to_branch_bn']; $po_id = $val['po_id']; } $is_multiple = (count($po_bns)>1 ? true : false); $po_bns = implode(',', $po_bns); //承运商 if($row['carrier_code']) { $row['carrier_name'] = $stockLib->getCarrierCode('', $row['carrier_code']); } //PO单店铺shop_id $sql = "SELECT shop_id FROM sdb_purchase_order WHERE po_id=". $po_id; $poInfo = $stockoutObj->db->selectrow($sql); $shop_id = $poInfo['shop_id']; //格式化时间 $row['delivery_time'] = $row['delivery_time'] .':00'; $row['arrival_time'] = $row['arrival_time'] .':00'; $branch = kernel::single('ome_branch')->getBranchInfo($row['branch_id'],'branch_bn'); $branch_rel = app::get('ome')->model('branch_relation')->dump(array ('branch_id'=>$row['branch_id'],'type' => 'vopjitx')); //API创建出库单 $param = array( 'po_no'=>$po_bns,//po号 'delivery_no'=>$row['stockout_no'],//运单号 'logistics_no' => 'VOP'.time(), 'warehouse'=>$to_branch_bn,//送货仓库 'delivery_method'=>$row['dly_mode'],//配送方式 'carrier_name'=>$row['carrier_name'],//承运商名称 'carrier_code'=>$row['carrier_code'],//承运商编码 'delivery_time'=>$row['delivery_time'],//送货批次 'arrival_time'=>$row['arrival_time'],//要求到货时间 'is_air_embargo'=>$row['is_air_embargo'], 'delivery_warehouse' => $branch_rel['relation_branch_bn'] ? $branch_rel['relation_branch_bn'] : $branch['branch_bn'], ); //超时请求3次 $requestCount = 0; do { $rsp = kernel::single('erpapi_router_request')->set('shop', $shop_id)->purchase_createDelivery($param); //判断是否请求超时 if ($rsp['rsp'] != 'fail' || ($rsp['res_ltype'] != 1 && $rsp['res_ltype'] != 2)) { break; } $requestCount++; } while ($requestCount<3); if($rsp['rsp'] == 'fail') { $rsp['err_msg'] = json_decode($rsp['err_msg'], true); $error_msg = $rsp['err_msg']['returnMessage']; $error_msg = ($error_msg ? $error_msg : '创建出仓单失败'); $this->end(false, $error_msg); } //防止出库单号没有创建成功 $storage_no = $rsp['delivery']['storage_no']; if($rsp['rsp'] == 'succ' && empty($storage_no)) { $this->end(false, "没有创建出仓单号"); } } $delivery = array ( 'storage_no' => $storage_no, ); if ($stockLib->is_vopcp($row['carrier_code'])) { if ($rsp['delivery']['arrival_time']) { $delivery['arrival_time'] = $rsp['delivery']['arrival_time']; } if ($rsp['delivery']['logistics_no']) { $delivery['delivery_no'] = $rsp['delivery']['logistics_no']; } if ($rsp['delivery']['delivery_method']) { $delivery['dly_mode'] = $rsp['delivery']['delivery_method']; } } //更新为已审核 $data = array('action'=>'is_check', 'stockout_id'=>$stockout_id, 'storage_no'=>$storage_no, 'confirm_status'=>2); $data = array_merge($delivery, $data); // 更新拣货单并释放拣货单冻结 $result = $stockLib->update_stockout($data); if(!$result) { $this->end(false, "更新出库单失败"); } //库存冻结 $result = $stockLib->freeze($stockout_id, $row['branch_id'], $error_msg); if(!$result) { $this->end(false, $error_msg); } //推送出库信息给仓库 kernel::single('console_event_trigger_vopstockout')->create(array('iso_id'=>$stockout_id), false); // 推送信息给唯品会时效订单结果反馈 kernel::single('console_event_trigger_vopstockout')->occupied_order_feedback(['stockout_id'=>$stockout_id], false); $this->end(true, '审核成功'); } /** * 人工确认出库 */ public function confirm($stockout_id) { @set_time_limit(0); @ini_set('memory_limit','128M'); $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $stockItemObj = app::get('purchase')->model('pick_stockout_bill_items'); $pickObj = app::get('purchase')->model('pick_bills'); $branchObj = app::get('ome')->model('branch'); $logObj = app::get('ome')->model('operation_log'); $finder_id = $_GET['finder_id']; $url = 'javascript:finderGroup["'. $finder_id .'"].refresh();'; //出库单 $row = $stockoutObj->dump(array('stockout_id'=>$stockout_id, 'confirm_status'=>2, 'receive_status'=>console_const::_FINISH_CODE), '*'); if(empty($row)) { $this->splash('error', $url, '没有相关记录!'); } if($row['o_status'] == 3) { $this->splash('error', $url, '此单据已出库不能再次操作!'); } //出库状态 $io_status = 'FINISH';//全部出库 //出库类型 $iostock_instance = kernel::single('siso_receipt_iostock'); $iso_type_id = $iostock_instance::VOP_STOCKOUT; //出库单信息 $iostockData = array( 'iso_id'=>$row['stockout_id'], 'stockout_id'=>$row['stockout_id'], 'type_id'=>$iso_type_id, 'iso_bn'=>$row['stockout_no'], 'branch_id'=>$row['branch_id'], 'memo'=>$row['memo'], 'operate_time'=>time(), ); //出库单明细 $iso_item = array(); $temp_bn_num = array(); $dataList = $stockItemObj->getList('*', array('stockout_id'=>$stockout_id, 'is_del'=>'false')); foreach ($dataList as $key => $val) { $bn = $val['bn']; $num = $val['actual_num']; //货品product_id $sql = "SELECT product_id FROM sdb_ome_products WHERE bn='". $bn ."'"; $tempInfo = $stockoutObj->db->selectRow($sql); $product_id = $tempInfo['product_id']; //实际出库数量 $temp_bn_num[$bn] += $num; //组织数据 $iso_item[$bn] = array( 'bn'=>$bn, 'price'=>$val['price'], 'iso_items_id'=>$val['stockout_item_id'], 'product_id'=>$product_id, 'nums'=>$temp_bn_num[$bn], 'actual_num'=>$temp_bn_num[$bn], 'effective_num'=>$temp_bn_num[$bn], ); } $iostockData['items'] = $iso_item; //开启事务 $stockoutObj->db->beginTransaction(); //生成出入库明细 $stockLib = kernel::single('siso_receipt_iostock_vopstockout'); if($iostockData['items']) { $data = $iostockData; $data['io_status'] = $io_status; $result = $stockLib->create($iostockData, $data, $msg); if (!$result){ $stockoutObj->db->rollBack(); $msg = '手动确认出库出入库失败!'. $msg; $this->splash('error', $url, $msg); } } else { $stockoutObj->db->rollBack(); $msg = '出库单明细为空!'. $msg; $this->splash('error', $url, $msg); } $stockObj = kernel::single('console_receipt_vopstock'); if($stockObj->checkExist($row['stockout_no'])) { //更新出库单 $save_flag = $stockObj->update_stockout($io_status, $msg); if(!$save_flag) { $stockoutObj->db->rollBack(); $this->splash('error', $url, $msg); } //更新人工介入标识receive_status $stockoutObj->update(array('receive_status'=>0), array('stockout_id'=>$stockout_id)); //提交事务 $stockoutObj->db->commit(); //释放冻结 $stockObj->clear_stockout_store_freeze($iostockData, $io_status); } else { $stockoutObj->db->rollBack(); $msg = '出库单异常!' . $row['stockout_no'] . $msg; $this->splash('error', $url, $msg); } //[全部出库]回写唯品会三个接口 $syncLib = kernel::single('purchase_purchase_sync'); $error_msg = ''; $result = $syncLib->_initStockoutIfo($stockout_id, $error_msg);//初始化信息 if(!$result) { $this->splash('error', $url, '确认出库成功,初始化唯品会接口数据出错:'. $error_msg); } //editDelivery $result = $syncLib->editDelivery($error_msg); if(!$result) { $this->splash('error', $url, '确认出库成功,同步唯品会接口出错:'. $error_msg); } //importDeliveryDetail $result = $syncLib->importDeliveryDetail($error_msg); if(!$result) { $this->splash('error', $url, '确认出库成功,同步唯品会接口出错:'. $error_msg); } //confirmDelivery $result = $syncLib->confirmDelivery($error_msg); if(!$result) { $this->splash('error', $url, '确认出库成功,同步唯品会接口出错:'. $error_msg); } //更新回传状态 $stockoutObj->update(array('rsp_code'=>0), array('stockout_id'=>$stockout_id)); //增加回传成功日志 $logObj->write_log('update_stockout_bills@ome', $stockout_id, '回传唯品会出仓单成功'); $this->splash('success', $url, '确认出库成功!'); } /** * 批量重试回传唯品会出仓单 * * 回写唯品会三个接口editDelivery、importDeliveryDetail、confirmDelivery */ function batch_sync() { $this->begin('index.php?app=console&ctl=admin_vopstockout&act=index&view=4'); $logObj = app::get('ome')->model('operation_log'); $ids = $_POST['stockout_id']; if($ids) { $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $syncLib = kernel::single('purchase_purchase_sync'); $error_msg = ''; foreach ($ids as $key => $val) { $stockout_id = $val; $stockout_info = $stockoutObj->dump(array('stockout_id'=>$stockout_id), 'stockout_no, rsp_code'); $rsp_code = $stockout_info['rsp_code']; if(empty($stockout_info) || $rsp_code == 0) { continue; } //初始化信息 $result = $syncLib->_initStockoutIfo($stockout_id, $error_msg); if(!$result) { $this->end(false, '出库单号:'. $stockout_info['stockout_no'] .','. $error_msg); } //editDelivery if($rsp_code <= 1) { $result = $syncLib->editDelivery($error_msg); if(!$result) { $this->end(false, '出库单号:'. $stockout_info['stockout_no'] .','. $error_msg); } } //importDeliveryDetail if($rsp_code <= 3) { $result = $syncLib->importDeliveryDetail($error_msg); if(!$result) { $this->end(false, '出库单号:'. $stockout_info['stockout_no'] .','. $error_msg); } } //confirmDelivery if($rsp_code <= 7) { $result = $syncLib->confirmDelivery($error_msg); if(!$result) { $this->end(false, '出库单号:'. $stockout_info['stockout_no'] .','. $error_msg); } } //更新回传状态 $stockoutObj->update(array('rsp_code'=>0), array('stockout_id'=>$stockout_id)); //增加回传成功日志 $logObj->write_log('update_stockout_bills@ome', $stockout_id, '回传唯品会出仓单成功'); } } $this->end(true, '命令已经发送成功!'); } /** * 单据发送至第三方 */ function batch_stockout() { // $this->begin(''); $ids = $_POST['stockout_id']; $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $dataList = $stockoutObj->getList('stockout_id', array('confirm_status'=>2, 'status'=>1, 'o_status'=>1)); //已审核单据 if (!empty($dataList)) { foreach($dataList as $key => $val) { //推送出库信息给仓库 kernel::single('console_event_trigger_vopstockout')->create(array('iso_id'=>$val['stockout_id']), false); // 推送信息给唯品会时效订单结果反馈 kernel::single('console_event_trigger_vopstockout')->occupied_order_feedback(['stockout_id'=>$val['stockout_id']], false); } } $this->splash('success', null, '命令已经被成功发送!!'); } /** * 差异查看 */ function difference($stockout_id) { if(empty($stockout_id)){ $error_msg = '无效操作,请检查!'; header("content-type:text/html; charset=utf-8"); echo ""; exit; } $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $pickObj = app::get('purchase')->model('pick_bills'); //出库单信息 $billInfo = $stockoutObj->dump(array('stockout_id'=>$stockout_id), '*'); //详情 $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $dataList = $stockoutItemsObj->getList('*', array('stockout_id'=>$stockout_id)); foreach ($dataList as $key => $val) { $bill_id = $val['bill_id']; $pickInfo = $pickObj->dump(array('bill_id'=>$bill_id), 'pick_no, po_bn'); $val['pick_no'] = $pickInfo['pick_no']; $val['po_bn'] = $pickInfo['po_bn']; $dataList[$key] = $val; } $this->pagedata['billInfo'] = $billInfo; $this->pagedata['dataList'] = $dataList; $this->pagedata['stockout_id'] = $stockout_id; $this->singlepage('admin/vop/stockout_difference.html'); } /** * Ajax计算要求到货时间 */ function ajax_arrival_time() { $delivery_date = $_POST['delivery_date']; $delivery_date = $delivery_date[0]; $delivery_hour = $_POST['delivery_hour']; $dly_mode = $_POST['dly_mode']; if(empty($delivery_date) || empty($delivery_hour) || empty($dly_mode)) { echo json_encode(array('res'=>'error')); exit; } $stockLib = kernel::single('purchase_purchase_stockout'); $arrival_time = $stockLib->reckonArrivalTime($dly_mode, $delivery_date, $delivery_hour); echo json_encode(array('res'=>'succ', 'arrival_time'=>$arrival_time)); exit; } /** * 获取StockoutBillsCheckItems * @param mixed $stockout_id ID * @return mixed 返回结果 */ public function getStockoutBillsCheckItems($stockout_id) { if(empty($stockout_id)){ return ''; } $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $pickItemObj = app::get('purchase')->model('pick_bill_check_items'); $stockoutItems = $stockoutItemsObj->getList('*', ['stockout_id'=>$stockout_id]); $billIdArr = array_unique(array_column($stockoutItems, 'bill_id')); $barcodeList = array_unique(array_column($stockoutItems, 'barcode')); $dataList = $pickItemObj->getList('*', array('bill_id|in'=>$billIdArr)); foreach ($dataList as $k => $v) { if (!in_array($v['barcode'], $barcodeList)) { unset($dataList[$k]); continue; } if ($pickItemObj->order_label[$v['order_label']]) { $dataList[$k]['order_label'] = $pickItemObj->order_label[$v['order_label']]; } } echo(json_encode($dataList)); } /** * 获取出库单明细 */ function getStockoutBillItems($stockout_id) { $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $pickObj = app::get('purchase')->model('pick_bills'); if(empty($stockout_id)) { return ''; } //出库单明细 $dataList = $stockoutItemsObj->getList('*', array('stockout_id'=>$stockout_id)); $stockoutItemIdArr = array_column($dataList, 'stockout_item_id'); $labelList = kernel::single('ome_bill_label')->getLabelFromOrder($stockoutItemIdArr, 'pick_stockout_bill_item'); foreach ($dataList as $key => $val) { $bill_id = $val['bill_id']; $pickInfo = $pickObj->dump(array('bill_id'=>$bill_id), 'pick_no, po_bn'); $val['pick_no'] = $pickInfo['pick_no']; $val['po_bn'] = $pickInfo['po_bn']; //是否删除状态 if($val['is_del'] == 'true') { $val['item_del'] = 'item_del'; } if ($labelList[$val['stockout_item_id']]) { $val['order_label'] = ''; foreach ($labelList[$val['stockout_item_id']] as $lk => $lv) { $val['order_label'] .= sprintf("%s", $lv['label_name'], $lv['label_color'], $lv['label_name']); } } $dataList[$key] = $val; } echo(json_encode($dataList)); } /** * 获取装箱明细 */ function getBillItemBoxs($stockout_id) { $pickObj = app::get('purchase')->model('pick_bills'); $stockItemObj = app::get('purchase')->model('pick_stockout_bill_items'); if(empty($stockout_id)) { return ''; } //装箱明细 $sql = "SELECT a.*, b.bn, b.barcode, b.product_name FROM sdb_purchase_pick_stockout_bill_item_boxs AS a LEFT JOIN sdb_purchase_pick_stockout_bill_items AS b ON a.stockout_item_id=b.stockout_item_id WHERE a.stockout_id=". $stockout_id; $dataList = $stockItemObj->db->select($sql); if(empty($dataList)) { return ''; } foreach ($dataList as $key => $val) { $bill_id = $val['bill_id']; $pickInfo = $pickObj->dump(array('bill_id'=>$bill_id), 'pick_no, po_bn'); $val['pick_no'] = $pickInfo['pick_no']; $val['po_bn'] = $pickInfo['po_bn']; $dataList[$key] = $val; } echo(json_encode($dataList)); } }