app = $app; $this->objBhc = kernel::single('base_httpclient'); $this->objBcf = kernel::single('base_certificate'); base_kvstore::instance('wms_config_test')->fetch('config', $config); $api_url = kernel::base_url(1) . kernel::url_prefix() . '/api'; $certificate = base_shopnode::node_id('ome'); $token = base_certificate::token('ome'); $this->api_url = $api_url; //api地址 $this->token = $token; //证书token } //用于显示展示页面 /** * index * @return mixed 返回值 */ public function index() { $this->page('show.html'); } //显示入库,出库 发货 退货 /** * show2 * @param mixed $flag flag * @return mixed 返回值 */ public function show2($flag = '') { $titles["stockin"] = "入库单回传"; $titles["stockout"] = "出库单回传"; $titles["delivery"] = "发货单回传"; $titles["reship"] = "退货单回传"; $titles["stockdump"] = "转储单回传"; $titles["vopstockout"] = "唯品会出库单回传"; $titles["storeprocess"] = "加工单回传"; $flag = isset($_GET['flag']) ? $_GET['flag'] : $flag; $this->title = $titles[$flag]; $base_filter['io_type'] = $flag; $params = array( 'title' => $this->title, 'use_buildin_recycle' => false, // 'use_buildin_import'=>fasle, //'base_filter' => array('otype'=>$otype), 'use_buildin_filter' => false, 'use_buildin_selectrow' => false, 'use_buildin_export' => false, 'use_buildin_selectrow' => false, 'base_filter' => $base_filter, ); $this->finder("omevirtualwms_mdl_" . $flag, $params); } /** * callback * @return mixed 返回值 */ public function callback() { $this->title = 'callback回传'; $params = array( 'title' => $this->title, 'use_buildin_recycle' => true, 'use_buildin_filter' => true, 'use_buildin_selectrow' => false, 'use_buildin_export' => false, 'use_buildin_selectrow' => true, 'orderBy' => ' createtime DESC ', ); $this->finder("omevirtualwms_mdl_callback", $params); } // 商品返回模拟页面 /** * callback_goods_html * @param mixed $msg_id ID * @param mixed $finder_id ID * @return mixed 返回值 */ public function callback_goods_html($msg_id, $finder_id) { $apilogModel = app::get('ome')->model('api_log'); $log_detail = $apilogModel->dump(array('msg_id' => $msg_id)); $params = unserialize($log_detail['params']); $items = json_decode($params[1]['item_lists'], true); $this->pagedata['items'] = $items; $this->pagedata['log_detail'] = $log_detail; $this->pagedata['finder_id'] = $finder_id; $this->display('callback_goods.html'); } // 异步返回模拟页面 /** * callback_html * @param mixed $msg_id ID * @param mixed $finder_id ID * @return mixed 返回值 */ public function callback_html($msg_id, $finder_id) { $this->pagedata['msg_id'] = $msg_id; $this->pagedata['finder_id'] = $finder_id; $this->display('callback.html'); } // 异步返回模拟处理 /** * callback_call * @param mixed $msg_id ID * @param mixed $rsp rsp * @return mixed 返回值 */ public function callback_call($msg_id, $rsp = 'succ') { $callbackModel = app::get('omevirtualwms')->model('callback'); $callback = $callbackModel->dump(array('msg_id' => $msg_id)); $url = $callback['callback_url']; $core_http = kernel::single('base_httpclient'); $res = $_POST['res'][0] ? $_POST['res'][0] : $_POST['err_msg'][0]; $err_msg = $_POST['err_msg'][0]; $data = array('wms_order_code' => $_POST['wms_order_code'][0]); $query_params = array( 'rsp' => $rsp, 'res' => $res ? $res : $err_msg, 'err_msg' => $err_msg, 'data' => json_encode($data), 'msg_id' => $msg_id, 'node_id' => $callback['params']['to_node_id'], ); $query_params['sign'] = $this->_gen_sign($query_params, $this->token); $callbacl_rs = $core_http->post($url, $query_params); $rs = json_decode($callbacl_rs, true); $response = array(); if ($rs['rsp'] == 'success') { $response['rsp'] = 'succ'; //删除任务 $callbackModel->delete(array('msg_id' => $msg_id)); } else { $response['rsp'] = 'fail'; } $response['html'] = $callbacl_rs; die(json_encode($response)); } // 商品异步返回模拟处理 /** * callback_goods_call * @param mixed $msg_id ID * @return mixed 返回值 */ public function callback_goods_call($msg_id) { $this->begin('index.php?app=omevirtualwms&ctl=admin_wms&act=callback'); $callbackModel = app::get('omevirtualwms')->model('callback'); $callback = $callbackModel->dump(array('msg_id' => $msg_id)); $url = $callback['callback_url']; $core_http = kernel::single('base_httpclient'); $res = $_POST['res'] ? $_POST['res'] : $_POST['err_msg']; $rsp = $_POST['rsp']; $err_msg = $_POST['err_msg']; $wbn = $_POST['wbn']; if ($_POST['bn']) { $data = array(); foreach ($_POST['bn'] as $bn => $status) { if ($status == 'succ') { $wms_item_code = $wbn[$bn]; $data['succ'][] = array('item_code' => $bn, 'wms_item_code' => $wms_item_code); } else { $data['error'][] = array('item_code' => $bn, 'error_code' => $status); } } } $query_params = array( 'rsp' => $rsp, 'res' => $res ? $res : $err_msg, 'err_msg' => $err_msg, 'data' => json_encode($data), 'msg_id' => $msg_id, ); $query_params['sign'] = $this->_gen_sign($query_params, $this->token); $callbacl_rs = $core_http->post($url, $query_params); $rs = json_decode($callbacl_rs, true); if ($rs['rsp'] == 'succ') { $msg = '回传成功'; //删除任务 $callbackModel->delete(array('msg_id' => $msg_id)); } else { $msg = serialize($callbacl_rs); } $this->end($rs['rsp'] == 'succ' ? true : false, $msg); } //显示所有回传菜单 /** * show * @param mixed $data 数据 * @return mixed 返回值 */ public function show($data = '') { $flag = in_array(trim($_GET['flag']), array('stockin', 'stockout', 'inventory', 'delivery', 'reship', 'account')) ? $_GET['flag'] : 'reship'; $flag = empty($data) ? $flag : $data; if ($flag == 'inventory') { $wms = kernel::single('channel_func')->getWmsChannelList(); if ($wms) { foreach ($wms as $k => $v) { if ($v['adapter'] == 'selfwms') { unset($wms[$k]); } } } sort($wms); $mdl_wms_branch = app::get('ome')->model('branch'); $branchs = $mdl_wms_branch->getlist('branch_bn,name', array('wms_id' => $wms[0]['wms_id'])); $this->pagedata['branchs'] = $branchs; $this->pagedata['wms'] = $wms; $this->pagedata['task'] = time(); $this->pagedata['inventory_bn'] = 'P' . time(); $this->pagedata['operate_time'] = date('Y-m-d H:i:s', time()); $this->page('inventory.html'); } elseif ($flag == 'account') { $wms = kernel::single('channel_func')->getWmsChannelList(); if ($wms) { foreach ($wms as $k => $v) { if ($v['adapter'] == 'selfwms') { unset($wms[$k]); } } } sort($wms); $mdl_wms_branch = app::get('ome')->model('branch'); $branchs = $mdl_wms_branch->getlist('branch_bn,name', array('wms_id' => $wms[0]['wms_id'])); $this->pagedata['logistics'] = $logistics_arr; $this->pagedata['branchs'] = $branchs; $this->pagedata['wms'] = $wms; $this->pagedata['task'] = time(); $this->pagedata['accoutn_bn'] = 'A' . time(); $this->page('account.html'); } else { $selflang = array( 'stockin' => array('title' => '入库单状态回传', 'input' => '入库编号', 'k' => 'stockin'), 'stockout' => array('title' => '出库单状态回传', 'input' => '出库编号', 'k' => 'stockout'), 'stockdump' => array('title' => '转储单状态回传', 'input' => '转储编号', 'k' => 'stockdump'), 'inventory' => array('title' => '盘点结果回传', 'input' => '申请盘点编号', 'k' => 'inventory'), 'delivery' => array('title' => '发货单状态回传', 'input' => '发货单号', 'k' => 'delivery'), 'reship' => array('title' => '退货单状态回传', 'input' => '退货单号', 'k' => 'reship'), ); $this->pagedata['show'] = $selflang[$flag]; $this->pagedata['t'] = isset($_GET['t']) && ($_GET['t'] == 1) ? '1' : ''; $this->page('check.html'); } } //处理提交过来的数据 /** * doSubmit * @param mixed $type_id ID * @return mixed 返回值 */ public function doSubmit($type_id = '') { ini_set('memory_limit','256M'); $flag = $_POST['flag']; $show = ($flag == 'account' || $flag == 'inventory') ? 'show' : 'show2'; if ($flag == 'iostock') { $url = "index.php?app=omevirtualwms&ctl=admin_wms&act=iostock"; } else { $url = "index.php?app=omevirtualwms&ctl=admin_wms&act=$show&flag=$flag"; } //取消出库单后返回的URL if ($flag == 'vopstockout') { $url = "index.php?app=omevirtualwms&ctl=admin_wms&act=show2&flag=vopstockout"; } $this->begin($url); $method = $this->_return_method($_POST['flag']); $params = $this->_return_params($_POST, $type_id); $query_params = array( 'method' => $method, 'date' => '', 'format' => 'json', 'node_id' => $_POST["node_id"], 'app_id' => 'ecos.ome', 'task' => time() . $_POST[$_POST['flag'] . '_bn'], ); // $adapter_type = kernel::single('channel_func')->getAdapterByNodeId($_POST["node_id"]); $token = ''; if (in_array($adapter_type, array('matrixwms'))) { $token = $this->token; } if (in_array($adapter_type, array('openapiwms'))) { $channel_id = kernel::single('channel_func')->getWmsIdByNodeId($_POST["node_id"]); $channel_adapter = app::get('channel')->model('adapter'); $detail = $channel_adapter->getList('config', array('channel_id' => $channel_id), 0, 1); $config = unserialize($detail[0]['config']); $node_type = $config['node_type']; if ($config['node_type'] != 'sku360') { $token = $config['private_key']; } } $query_params = array_merge((array) $params, $query_params); if ($node_type == 'sku360') { $timestamp = date('Y-m-d H:i:s'); $query_params['timestamp'] = strtotime($timestamp); $query_params['sign'] = strtoupper(md5($config['owner'] . $config['appkey'] . $timestamp)); } else { $query_params['sign'] = $this->_gen_sign($query_params, $token); } $rs = $this->objBhc->post($this->api_url, $query_params); $info = json_decode($rs, 1); //消息发送成功,插入数据状态表 if ($info['rsp'] == 'succ') { $data = array( 'bn' => $_POST[$_POST['flag'] . '_bn'], 'type' => $_POST['flag'], 'status' => $query_params['status'] ? $query_params['status'] : 'success', 'create_time' => time(), ); $this->app->model('dataStatus')->save($data); } //end $this->end($info['rsp'] == 'succ' ? true : false, $info['msg'] ? $info['msg'] : '回传成功'); } //根据传来的参数获取相应的回传信息 /** * 获取info * @param mixed $bn bn * @param mixed $method method * @param mixed $type_id ID * @return mixed 返回结果 */ public function getinfo($bn, $method, $type_id='') { $_POST["bn"] = $bn; $_POST["flag"] = $method; if (strtolower($method) == 'vopstockout') { $iostocktype = 'VOP'; } else { $iostocktype = substr($_POST['bn'], 0, 1); } if ($method == 'stockin' && $iostocktype != 'I') { $iostocktype = 'E'; } if ($method == 'stockout' && $iostocktype != 'H') { $iostocktype = 'A'; } if ($type_id == '1') { $iostocktype = 'I'; } if ($_POST['i_type'] == 'purchase_return') { $iostocktype = 'H'; } switch ($iostocktype) { case 'VOP': $type = 'vopstockout'; break; case 'I': $type = 'purchase'; break; case 'H': $type = 'purchase_return'; break; case 'T': case 'R': case 'A': case 'E': case 'F': case 'G': case 'J': case 'K': case 'D': case 'B': case 'X': $type = 'allocate'; break; default: $type = $method; } $data = $this->_getinfo($_POST, $type); $data['task'] = time() . rand(0, 100); if (!empty($data)) { $this->pagedata['data'] = $data; $this->pagedata['type_id'] = $type_id; $this->page($method . '.html'); } else { $this->show($method); echo '没有找到相关信息'; } } private function _getinfo($data, $type) { ini_set('memory_limit','256M'); $db = kernel::database(); $info = array(); switch ($type) { case 'vopstockout': //出库单 $stockoutObj = app::get('purchase')->model('pick_stockout_bills'); $stockoutInfo = $stockoutObj->dump(array('stockout_no' => $data['bn'], 'status' => 1, 'confirm_status' => array(1, 2), 'o_status' => 1), '*'); //仓库 $objOmeBranch = app::get('ome')->model('branch'); $branchInfo = $objOmeBranch->dump(array('branch_id' => $stockoutInfo['branch_id']), 'branch_bn,name'); //wms_id $wms_info = $this->getWmsInfo($stockoutInfo['branch_id']); $info = array_merge($stockoutInfo, $branchInfo); $info['bn'] = $info['stockout_no']; $info['wms_name'] = $wms_info['wms_name']; $info['node_id'] = $wms_info['node_id']; //商品明细 $stockoutItemsObj = app::get('purchase')->model('pick_stockout_bill_items'); $tempData = $stockoutItemsObj->getList('stockout_item_id,bn,product_name,barcode,num', array('stockout_id' => $stockoutInfo['stockout_id'], 'is_del' => 'false')); $productList = array(); foreach ($tempData as $key => $val) { $productList[$key] = $val; } $info['product'] = $productList; $info["time"] = date("Y-m-d H:i:s"); $info["demo"] = '唯品会出库单回传'; $info['items_count'] = count($productList); break; case 'purchase': $objStock = app::get('purchase')->model('po'); $tmp = $objStock->dump(array('po_bn' => $data['bn']), '*'); if (!empty($tmp)) { $objStockItem = app::get('purchase')->model('po_items'); $objOmeBranch = app::get('ome')->model('branch'); $tt = $objOmeBranch->dump(array('branch_id' => $tmp['branch_id']), 'branch_bn,name'); $info = array_merge($tmp, $tt); $info['bn'] = $info['po_bn']; $sql = "SELECT COUNT(*) AS _count FROM `sdb_purchase_po_items` WHERE po_id = '" . $tmp['po_id'] . "'"; $arr = $db->select($sql); $info['items_count'] = $arr[0]['_count']; if ($info['items_count'] < 3000) { $sub = $objStockItem->getList('bn,name AS product_name,num,in_num AS normal_num,defective_num', array('po_id' => $tmp['po_id'])); } $wms_info = $this->getWmsInfo($tmp['branch_id']); $info['wms_name'] = $wms_info['wms_name']; $info['node_id'] = $wms_info['node_id']; $info['product'] = $sub; $info["time"] = date("Y-m-d H:i:s"); $info["demo"] = '采购单回传'; //echo "
";print_r($info);exit;
}
break;
case 'purchase_return':
$objStock = app::get('purchase')->model('returned_purchase');
$tmp = $objStock->dump(array('rp_bn' => $data['bn']), '*');
if (!empty($tmp)) {
$objStockItem = app::get('purchase')->model('returned_purchase_items');
$objOmeBranch = app::get('ome')->model('branch');
$tt = $objOmeBranch->dump(array('branch_id' => $tmp['branch_id']), 'branch_bn,name');
$info = array_merge($tmp, $tt);
$info['bn'] = $info['rp_bn'];
$counter = $objStockItem->count(array('rp_id' => $tmp['rp_id']));
$info['items_count'] = $counter;
if ($info['items_count'] < 3000) {
$sub = $objStockItem->getList('bn,name AS product_name,num,out_num', array('rp_id' => $tmp['rp_id']));
}
$wms_info = $this->getWmsInfo($tmp['branch_id']);
$info['wms_name'] = $wms_info['wms_name'];
$info['node_id'] = $wms_info['node_id'];
$info['product'] = $sub;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = '采购退货单回传';
//echo "";print_r($info);exit;
}
break;
case 'allocate':
$objStock = app::get('taoguaniostockorder')->model('iso');
$tmp = $objStock->dump(array('iso_bn' => $data['bn']), '*');
if (!empty($tmp)) {
$objStockItem = app::get('taoguaniostockorder')->model('iso_items');
$objOmeBranch = app::get('ome')->model('branch');
$tt = $objOmeBranch->dump(array('branch_id' => $tmp['branch_id']), 'branch_bn,name');
$info = array_merge((array)$tmp, (array)$tt);
$info['bn'] = $info['iso_bn'];
$counter = $objStockItem->count(array('iso_id' => $tmp['iso_id']));
$info['items_count'] = $counter;
if ($info['items_count'] < 3000) {
$sub = $objStockItem->getList('bn,product_name,nums as num,normal_num,defective_num,normal_num AS out_num', array('iso_id' => $tmp['iso_id']));
}
$wms_info = $this->getWmsInfo($tmp['branch_id']);
$info['wms_name'] = $wms_info['wms_name'];
$info['node_id'] = $wms_info['node_id'];
$info['product'] = $sub;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = '调拨出入库单回传';
}
break;
case 'stockdump':
$objStock = app::get('console')->model('stockdump');
$tmp = $objStock->dump(array('stockdump_bn' => $data['bn']), '*');
if (!empty($tmp)) {
$objStockItem = app::get('console')->model('stockdump_items');
$objOmeBranch = app::get('ome')->model('branch');
$tt = $objOmeBranch->dump(array('branch_id' => $tmp['from_branch_id']), 'branch_bn,name');
$info = array_merge((array)$tmp, (array)$tt);
$info['bn'] = $info['stockdump_bn'];
$counter = $objStockItem->count(array('stockdump_id' => $tmp['stockdump_id']));
$info['items_count'] = $counter;
if ($info['items_count'] < 4000) {
$sub = $objStockItem->getList('*', array('stockdump_id' => $tmp['stockdump_id']));
}
$wms_info = $this->getWmsInfo($tmp['from_branch_id']);
$info['wms_name'] = $wms_info['wms_name'];
$info['node_id'] = $wms_info['node_id'];
$info['product'] = $sub;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = '转储单回传';
}
break;
case 'inventory':
//$info = $this->show_inventory($data['num']);
$info = array('t' => 't');
break;
case 'delivery':
$obj = app::get('ome')->model('delivery');
$delivery_bn = $data['bn'];
$data = $obj->dump(array('delivery_bn' => $delivery_bn), '*');
$tmp = $this->_getinfo_delivery($data['delivery_id']);
$info['product'] = $tmp['product'];
$info['wuliu'] = $tmp['wuliu'];
$info['branch'] = $tmp['branch'];
$wms_info = $this->getWmsInfo($tmp['branch']['branch_id']);
$info['wms_name'] = $wms_info['wms_name'];
$info['node_id'] = $wms_info['node_id'];
foreach ($info['wuliu'] as &$v) {
$v['wms_code'] = kernel::single('wmsmgr_func')->getWmslogiCode($wms_info['wms_id'], $v['type']);
$v['wms_code'] = $v['wms_code'] ? $v['wms_code'] : $v['type'];
}
$info['delivery_bn'] = $delivery_bn;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = "发货单回传";
$info["logi"] = '';
break;
case 'reship':
$obj_Wuliu = app::get('ome')->model('dly_corp');
$wuliu = $obj_Wuliu->getlist('*', array());
$obj = app::get('ome')->model('reship');
$data = $obj->dump(array('reship_bn' => $data['bn']), '*');
$reship_id = $data["reship_id"];
$objReship = app::get('ome')->model('reship_items');
$sql = "SELECT COUNT(*) AS _count FROM `sdb_ome_reship_items` WHERE reship_id = '" . $reship_id . "'";
$arr = $db->select($sql);
$info['items_count'] = $arr[0]['_count'];
if ($info['items_count'] < 3000) {
$sub = $objReship->getList('*', array('reship_id' => $reship_id, 'return_type' => array('return', 'refuse')));
}
$objBranch = app::get('ome')->model('branch');
$branchs = $objBranch->getList('*');
$sql = "SELECT a.channel_name as wms_name,a.node_id,c.name,c.branch_bn from sdb_channel_channel a
left JOIN sdb_ome_branch c on c.wms_id=a.channel_id LEFT
JOIN sdb_ome_reship d on d.branch_id=c.branch_id WHERE d.branch_id=" . $data['branch_id'];
$arr = $db->selectrow($sql);
$info = $data;
$info['wms_name'] = $arr['wms_name'];
$info['node_id'] = $arr['node_id'];
$info['product'] = $sub;
$info['branchs'] = $branchs;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = "退货单回传";
$info['wuliu'] = $wuliu;
$info["logi"] = time() . rand(1000, 9999);
$info['branch'] = $arr;
break;
case 'storeprocess':
$obj = app::get('console')->model('material_package');
$mp_bn = $data['bn'];
$data = $obj->dump(array('mp_bn' => $mp_bn), '*');
$items = app::get('console')->model('material_package_items')->getList('*', ['mp_id'=>$data['id']]);
$wms_info = $this->getWmsInfo($data['branch_id']);
$info = ['mp_bn'=>$mp_bn];
$info['wms_name'] = $wms_info['wms_name'];
$info['node_id'] = $wms_info['node_id'];
$info['items'] = $items;
$info["time"] = date("Y-m-d H:i:s");
$info["demo"] = "加工单回传";
break;
}
return $info;
}
private function _getinfo_delivery($delivery_id)
{
$data = app::get('ome')->model('delivery')->dump($delivery_id);
$branch_id = $data["branch_id"];
$objBranch = app::get('ome')->model('branch');
$return['branch'] = $objBranch->dump(array('branch_id' => $branch_id), '*');
$objdelivery = app::get('ome')->model('delivery_items');
$sql = "SELECT COUNT(*) AS _count FROM `sdb_ome_delivery_items` WHERE delivery_id = '" . $delivery_id . "'";
$arr = kernel::database()->select($sql);
$info['items_count'] = $arr[0]['_count'];
if ($info['items_count'] < 3000) {
$return['product'] = $objdelivery->getList('*', array('delivery_id' => $delivery_id));
}
$obj_Wuliu = app::get('ome')->model('dly_corp');
$return['wuliu'] = $obj_Wuliu->getlist('*', array());
return $return;
}
//重组并获取各个接口传递的参数
private function _return_params($data, $type_id = '')
{
if ($data['flag'] == 'iostock') {
$url = "index.php?app=omevirtualwms&ctl=admin_wms&act=iostock";
if (empty($data['product'])) {
$this->end(false, '数据不能为空');
}
}
switch ($data['flag']) {
//模拟出入库
case 'iostock':
$items = array();
foreach ($data['product'] as $k => $value) {
$items[$k]['bn'] = $value['0'];
$items[$k]['nums'] = $value['1'];
$items[$k]['price'] = $value['2'];
}
$iostock_data = array(
'original_bn' => $data['original_bn'],
'type' => $data['type'],
'warehouse' => $data['warehouse'],
'supplier' => $data['supplier'],
'iotime' => $data['iotime'],
'oper' => $data['oper'],
'memo' => $data['memo'],
'items' => $items,
);
return $iostock_data;
break;
case 'stockin':
$params = array(
'stockin_bn' => $data['stockin_bn'],
'warehouse' => $data['warehouse'],
'status' => $data['status'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ?: time(),
'type' => 'QTRK', // 其他入库
);
if ('I' == $params['stockin_bn'][0]) {
$params['type'] = 'CGRK';
}
if ($type_id == '1') {
$params['type'] = 'CGRK';
}
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'normal_num' => $v['1'],
'defective_num' => $v['2'],
'sn_list' => $v[3] ? ['sn'=>explode(',', $v[3])] : []
);
}
} else {
$this->err();
}
$params['item'] = json_encode($item);
return $params;
break;
case 'stockout':
$params = array(
'stockout_bn' => $data['stockout_bn'],
'warehouse' => $data['warehouse'],
'status' => $data['status'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ?: time(),
'type' => 'QTCK',
);
if ('H' == $params['stockout_bn'][0] || $_POST['i_type'] == 'purchase_return') {
$params['type'] = 'CGTH';
}
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'num' => $v['1'],
'sn_list' => $v[2] ? ['sn'=>explode(',', $v[2])] : []
);
}
} else {
$this->err();
}
$params['item'] = json_encode($item);
return $params;
break;
case 'stockdump':
$params = array(
'stockdump_bn' => $data['stockdump_bn'],
'warehouse' => $data['warehouse'],
'status' => $data['status'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ? $data['operate_time'] : time(),
);
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'num' => $v['1'],
);
}
} else {
$this->err();
}
$params['items'] = json_encode($item);
return $params;
break;
case 'delivery':
$params = array(
'delivery_bn' => $data['delivery_bn'],
'logistics' => $data['logistics'],
'logi_no' => $data['logi_no'],
'warehouse' => '001', //$data['warehouse'],
'status' => $data['status'],
'volume' => $data['volume'],
'weight' => $data['weight'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ? $data['operate_time'] : time(),
);
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'num' => $v['1'],
'sn_list' => $v[2] ? ['sn'=>explode(',', $v[2])] : []
);
}
} else {
//$this->err();
}
$params['item'] = json_encode($item);
return $params;
break;
case 'reship':
$params = array(
'reship_bn' => $data['reship_bn'],
'logistics' => $data['logistics'],
'logi_no' => $data['logi_no'],
'warehouse' => $data['warehouse'],
'status' => $data['status'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ? $data['operate_time'] : time(),
);
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'normal_num' => $v['1'],
'defective_num' => $v['2'],
'sn_list' => $v[3] ? ['sn'=>explode(',', $v[3])] : []
);
}
} else {
$this->err();
}
$params['item'] = json_encode($item);
return $params;
break;
case 'inventory':
$params = array(
'inventory_bn' => $data['inventory_bn'],
'warehouse' => $data['warehouse'],
'node_id' => $data['node_id'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ? $data['operate_time'] : time(),
);
$item = array();
if ($data['product']) {
foreach ($data['product'] as $k => $v) {
if (empty($v['0'])) {
continue;
}
$item[] = array(
'product_bn' => $v['0'],
'normal_num' => $v['1'],
'defective_num' => $v['2'],
'totalQty' => $v['3'],
);
}
} else {
$this->err();
}
$params['item'] = json_encode($item);
return $params;
break;
case 'account':
$items = array();
if ($data['product']) {
foreach ($data['product'] as $k => $pdu) {
if ($pdu[0] && $data['num'][$k][0]) {
$_item = array('batch' => $data['batch'], 'warehouse' => $data['warehouse'],
'order_code' => $data['order_code'],
'product_bn' => $pdu[0]);
if ($data['type'] == 'true') {
$_item['normal_num'] = $data['num'][$k][0];
$_item['defective_num'] = 0;
} elseif ($data['type'] == 'false') {
$_item['normal_num'] = 0;
$_item['defective_num'] = $data['num'][$k][0];
}
$items[] = $_item;
}
}
} else {
$this->err();
}
//if(!$items) die('请选择商品');
$params['item'] = json_encode($items);
return $params;
break;
case 'vopstockout':
$params = array(
'stockout_bn' => $data['stockout_bn'],
'warehouse' => $data['warehouse'],
'status' => $data['status'],
'remark' => $data['remark'],
'operate_time' => $data['operate_time'] ? $data['operate_time'] : time(),
);
$params['item'] = '';
return $params;
break;
case 'storeprocess':
$mpRow = app::get('console')->model('material_package')->db_dump(['mp_bn'=>$data['storeprocess_bn']], 'id,service_type');
$mpid = $mpRow['id'];
$service_type = $mpRow['service_type'];
$productitems = [];
foreach(app::get('console')->model('material_package_items')->getList('*', ['mp_id'=>$mpid]) as $v) {
$productitems[] = [
'itemCode' => $v['bm_bn'],
'quantity' => $v['number'],
];
}
$materialitems = [];
foreach(app::get('console')->model('material_package_items_detail')->getList('*', ['mp_id'=>$mpid]) as $v) {
$materialitems[] = [
'itemCode' => $v['bm_bn'],
'quantity' => $v['number'],
];
}
$params = array(
'processOrderCode' => $data['storeprocess_bn'],
'materialitems' => json_encode(['item'=>$materialitems]),
'productitems' => json_encode(['item'=>$productitems]),
);
return $params;
break;
}
}
/**
* err
* @return mixed 返回值
*/
public function err()
{
$err = <<
请添加商品!
返回
EOF;
echo $err;
exit;
}
private function getWmsInfo($branch_id)
{
$wms_id = kernel::single('ome_branch')->getWmsIdById($branch_id);
$node_id = kernel::single('channel_func')->getNodeIdByChannelId($wms_id);
$wms_name = kernel::single('channel_func')->getChannelNameById($wms_id);
$wms_bn = kernel::single('channel_func')->getWmsBnByWmsId($wms_id);
if(!$node_id){
$channel_adapter = app::get('channel')->model('channel');
$detail = $channel_adapter->db->selectrow("SELECT node_id,channel_id FROM sdb_channel_channel where channel_type='wms' and node_id!='' and node_id!='selfwms'");
$node_id = $detail['node_id'];
$wms_id = $detail['channel_id'];
}
return array('wms_id' => $wms_id, 'node_id' => $node_id, 'wms_name' => $wms_name, 'wms_bn' => $wms_bn);
}
//获取各个接口的方法名称
private function _return_method($flag)
{
switch ($flag) {
case 'stockin':
return 'wms.stockin.status_update';
break;
case 'stockout':
return 'wms.stockout.status_update';
break;
case 'stockdump':
return 'wms.stockdump.status_update';
break;
case 'inventory':
return 'wms.inventory.add';
break;
case 'delivery':
return 'wms.delivery.status_update';
break;
case 'reship':
return 'wms.reship.status_update';
break;
case 'account':
return 'wms.stock.quantity';
break;
//模拟出入库
case 'iostock':
return 'wms.iostock.add';
break;
case 'vopstockout':
return 'wms.stockout.status_update'; //唯品会JIT出库
break;
case 'storeprocess':
return 'wms.storeprocess.status_update';
break;
}
}
private function _assemble($params)
{
if (!is_array($params)) {
return null;
}
ksort($params, SORT_STRING);
$sign = '';
foreach ($params as $key => $val) {
if (is_null($val)) {
continue;
}
if (is_bool($val)) {
$val = ($val) ? 1 : 0;
}
$sign .= $key . (is_array($val) ? self::_assemble($val) : $val);
}
return $sign;
}
private function _gen_sign($params, $token)
{
return strtoupper(md5(strtoupper(md5($this->_assemble($params))) . $token));
}
/**
* config
* @return mixed 返回值
*/
public function config()
{
base_kvstore::instance('wms_config_test')->fetch('config', $config);
if ($_POST) {
if ($_POST['api_url'] && $_POST['certificate'] && $_POST['token']) {
$api_url = $_POST['api_url'];
$certificate = $_POST['certificate'];
$token = $_POST['token'];
} else {
if ($config && $config = unserialize($config)) {
$api_url = $config['api_url'];
$certificate = $config['certificate'];
$token = $config['token'];
} else {
$api_url = kernel::base_url(1) . kernel::url_prefix() . '/api';
$certificate = base_shopnode::node_id('ome');
$token = base_shopnode::token('ome');
}
}
} else {
if ($config && $config = unserialize($config)) {
$api_url = $config['api_url'];
$certificate = $config['certificate'];
$token = $config['token'];
} else {
$api_url = kernel::base_url(1) . kernel::url_prefix() . '/api';
$certificate = base_shopnode::node_id('ome');
$token = base_shopnode::token('ome');
}
}
$config = array('api_url' => $api_url, 'certificate' => $certificate, 'token' => $token);
base_kvstore::instance('wms_config_test')->store('config', serialize($config));
$this->pagedata['api_url'] = $api_url;
$this->pagedata['certificate'] = $certificate;
$this->pagedata['token'] = $token;
$this->page('config.html');
}
/**
* callback_config
* @return mixed 返回值
*/
public function callback_config()
{
if ($_POST) {
$callback = $_POST['callback'];
base_kvstore::instance('omevirtualwms')->store('callback', $callback);
#矩阵请求地址变更
$networkModel = app::get('base')->model('network');
if ($callback['status'] == '0') {
#内网
#异步
$update_sdf = array('node_url' => 'http://rpc.ex-sandbox.com');
$filter = array('node_id' => '1');
$networkModel->update($update_sdf, $filter);
} elseif ($callback['status'] == '2') {
#外网
#异步
$update_sdf = array('node_url' => MATRIX_URL);
$filter = array('node_id' => '1');
$networkModel->update($update_sdf, $filter);
} else {
#模拟
$update_sdf = array('node_url' => kernel::base_url(1) . '/index.php/openapi/virtualwms/call');
$filter = array('link_status' => 'active');
$networkModel->update($update_sdf, $filter);
}
}
base_kvstore::instance('omevirtualwms')->fetch('callback', $callback);
$this->pagedata['callback'] = $callback;
$this->page('callback_config.html');
}
/**
* show_inventory
* @param mixed $inventory_num inventory_num
* @return mixed 返回值
*/
public function show_inventory($inventory_num)
{
$mdl_apply = app::get('omestorage')->model('inventory_apply');
$mdl_apply_item = app::get('omestorage')->model('inventory_apply_items');
//申请盘点信息
$apply_info = $mdl_apply->dump(array('inventory_apply_bn' => $inventory_num), '*');
if ($apply_info) {
//申请盘点商品信息
$apply_items = $mdl_apply_item->getList('*', array('inventory_apply_id' => $apply_info['inventory_apply_id']));
$apply_info['product'] = $apply_items;
}
return $apply_info;
}
/**
* back_branch
* @return mixed 返回值
*/
public function back_branch()
{
$tt = '';
echo $tt;
exit;
}
/**
* 获取_stock
* @return mixed 返回结果
*/
public function get_stock()
{
$basicMaterialLib = kernel::single('material_basic_material');
$product = $basicMaterialLib->getMaterialStockByBn($_POST['product_bn']);
if ($product) {
echo $product['store'];
} else {
echo 'null';
}
exit;
}
//显示所有同步中的商品列表
/**
* show_goods
* @return mixed 返回值
*/
public function show_goods()
{
$titles["goods"] = "商品同步状态模拟回传";
$this->title = $titles["goods"];
$params = array(
'title' => $this->title,
'use_buildin_recycle' => false,
'use_buildin_filter' => true,
'use_buildin_selectrow' => false,
'use_buildin_export' => false,
'use_buildin_selectrow' => true,
'use_buildin_filter' => true,
'use_view_tab' => true,
);
$this->finder("omevirtualwms_mdl_goods", $params);
}
/**
* goods
* @param mixed $log_id ID
* @return mixed 返回值
*/
public function goods($log_id)
{
$this->begin('javascript:finderGroup["finderGroup["' . $_GET['finder_id'] . '"].refresh();');
$callback_params['log_id'] = $log_id;
$response = array('rsp' => 'succ', 'res' => '');
$resultObj = kernel::single('ome_rpc_result', $response);
$resultObj->set_callback_params($callback_params);
$goodsObj = new omewmsmatrix_rpc_request_goods();
$goodsObj->add_callback($resultObj);
$this->end(true, '模拟成功', 'index.php?app=omevirtualwms&ctl=admin_wms&act=show_goods');
}
//模拟直连WMS 推送交易流水单据
/**
* iostock
* @return mixed 返回值
*/
public function iostock()
{
$iotypeObj = app::get('ome')->model('iostock_type');
$branchObj = app::get('ome')->model('branch');
$type = $iotypeObj->getList();
$branch = $branchObj->getList();
$operate_time = date('Y/m/d H:i:s', time());
$this->pagedata['types'] = $type;
$this->pagedata['operate_time'] = $operate_time;
$this->pagedata['branchs'] = $branch;
$this->page('iostock.html');
}
}