/** * WaveOrderPrintingView::view_prints() * 对配货单进行打印预览 * @author cxy * @return void */ public function view_prints() { $shipOrderId = trim($_GET['shipOrderId']); $waveId = trim($_GET['waveId']); $wave = WhWaveInfoModel::find($waveId); if ($wave['waveType'] == 2) { //单料号的配货单 //if($shipOrderId !='null'){ // echo $shipOrderId; // $orderlist = WhWaveScanRecordModel::getShipOrders($waveId, $shipOrderId); // }else{ $orderlist = WhWaveScanRecordModel::getShipOrders($waveId); // } $onesku = true; } else { // if($shipOrderId !='null'){ // $orderlist = WhWaveShippingRelationModel::getShipOrders($waveId, $shipOrderId); //}else{ $orderlist = WhWaveShippingRelationModel::getShipOrders($waveId); // } $onesku = false; } if (!$orderlist) { $return = array('status' => 1, 'msg' => '该配货单下无此发货单,不能打印'); echo $return; exit; } $carries = WhBaseModel::cache('trans.carrier.info.get'); if (!$carries) { //接口获取快递运输方式 require_once WEB_PATH . "html/api/include/opensys_functions.php"; $paramArr = array('method' => 'trans.carrier.info.get', 'format' => 'json', 'v' => '1.0', 'username' => 'purchase', 'type' => 1); $result = json_decode(callOpenSystem($paramArr), true); $templist = $result['data']; if ($templist) { foreach ($templist as $val) { $carries[$val['id']] = $val; $carries['express_ids'][] = $val['id']; } } WhBaseModel::cache('trans.carrier.info.get', $carries); } foreach ($orderlist as $key => $val) { if ($val['transportId'] && in_array($val['transportId'], $carries['express_ids'])) { $val['isexpress'] = 1; $express_ordids[] = $val['shipOrderId']; } else { $val['isexpress'] = 0; $ordids[] = $val['shipOrderId']; } $orderlist[$key] = $val; } // var_dump($onesku); // print_r($orderlist); $this->smarty->assign('onesku', $onesku); $this->smarty->assign('orderlist', $orderlist); $this->smarty->display('waveOrderPrinting_startprint.htm'); }
} $wave_info = WhWaveInfoModel::get_wave_info('id, number, waveType, waveZone,startArea, printStorey', array('id in' => $ids)); if (!empty($wave_info)) { $total_nums = count($wave_info); foreach ($wave_info as $key => $wave) { $receive_info = array(); //区域路由 /*$receive_area = WhWaveReceiveRecordModel::select(array('waveId'=>$wave['id'], 'order by'=> 'id asc'), 'area'); if(!empty($receive_area)){ foreach($receive_area as $v){ $receive_info .= " {$v['area']} =>"; } $receive_info = trim($receive_info, '=>'); }*/ $page_num = 35; $scan_record = WhWaveScanRecordModel::get_scan_record_union_area($wave['id']); //获取配货记录及区域负责人id //print_r($scan_record);exit; $area_info = array_unique(get_filed_array('area', $scan_record)); $area_user = WhWaveAreaUserRelationModel::get_user_by_areaName($area_info); $area_user = reverse_array($area_user, 'user', 'area'); $note = ''; /** 获取单发货单配货备注**/ if ($wave['waveType'] == 1) { $note = WhShippingOrderNoteRecordModel::get_order_note_by_waveId($wave['id']); if (!empty($note)) { $note = get_filed_array('content', $note); $note = implode("<br />", $note); } else { $note = ''; }
/** * WaveBuildAct::make_wave() * 生成配货单 (单料号和单发货单) * @param int $shipOrderId 发货单ID * @param int $wave_id 发货单ID * @param integer $wave_status wave_id 没有传递时 生成的配货单状态 0可以继续添加 1完结配货单不许再添加 * @param array $order_detail 订单明细 * @param int $wave_type 配货单类型 1=》单个发货单 2-单料号 3-多料号 * @return bool */ public function make_wave($shipOrderId, $wave_id = 0, $wave_status = 0, $order_detail = '', $wave_type = 1) { $shipOrderId = intval(trim($shipOrderId)); $wave_id = intval(trim($wave_id)); $wave_status = intval(trim($wave_status)); //print_r($shipOrderId);exit; if (!$shipOrderId) { self::$errCode = 200; self::$errMsg = '无效发货单ID!'; return FALSE; } if (empty($order_detail)) { $order_detail = WhShippingOrderdetailModel::getShipDetails($shipOrderId); //获取订单明细 if (empty($order_detail)) { //没有订单明细则直接返回 self::$errCode = 201; self::$errMsg = '该发货单没有料号明细!'; return FALSE; } } $order_limit = self::get_order_limit_info($order_detail); //获取当前订单的重量、料号数量、体积信息 $area_info = self::get_area_info($order_detail); //获取订单区域、楼层信息 //print_r($area_info);exit; WhBaseModel::begin(); if (!$wave_id) { //不存在配货单号 $startArea = current($area_info['areas']); //print_r($startArea);exit; $startArea = WhWaveAreaInfoModel::get_area_info('areaName', $startArea); //判断配货单区域类型 $waveZone = self::judge_wave_zone($area_info['storey'], $area_info['areas']); //判断配货单区域类型 if ($waveZone === FALSE) { self::$errCode = 203; self::$errMsg = '获取配货单区域类型失败!'; return FALSE; } $data = array('storey' => implode(',', $area_info['storey']), 'startArea' => $startArea[0]['areaName'], 'totalWeight' => $order_limit['limitWeight'], 'totalVolume' => $order_limit['limitVolume'], 'totalSkus' => $order_limit['limitSkuNums'], 'totalOrders' => 1, 'waveStatus' => $wave_status, 'waveZone' => $waveZone, 'waveType' => $wave_type, 'createTime' => time(), 'printStorey' => $area_info['storey'][0]); if ($wave_type == 2) { //单料号配货单 $data['sku'] = $order_detail[0]['sku']; } //print_r($data);exit; $wave_id = WhWaveInfoModel::insert_wave_info($data); //echo '生成配货单'.$wave_id."<br />"; if ($wave_id === FALSE) { self::$errCode = 100; self::$errMsg = '生成配货单失败!'; WhBaseModel::rollback(); return FALSE; } $wave_number = WhWaveInfoModel::number_encode($wave_id); //生成配货单编号 //print_r($wave_number);exit; /** 更新配货单编号**/ $info = WhWaveInfoModel::update_wave_info(array('number' => $wave_number), array('id' => $wave_id)); if (!$info) { self::$errCode = 108; self::$errMsg = '更新配货单编号失败!'; WhBaseModel::rollback(); return FALSE; } //echo '更新配货单编号'.$wave_number."<br />"; /** end**/ } else { //已存在配货单号 $where = array('id' => $wave_id); $wave_info = WhWaveInfoModel::get_wave_info('*', $where); //获取配货单信息 if (empty($wave_info)) { self::$errCode = 101; self::$errMsg = '没有该配货单信息!'; return FALSE; } $wave_info = $wave_info[0]; if ($wave_info['waveStatus'] != 0) { self::$errCode = 102; self::$errMsg = '该配货单已不能添加订单!'; return FALSE; } $wave_type = $wave_info['waveType']; //配货单类型 单料号 多料号 $order_limit['limitSkuNums'] += $wave_info['totalSkus']; $order_limit['limitWeight'] += $wave_info['totalWeight']; $order_limit['limitVolume'] += $wave_info['totalVolume']; $order_limit['limitOrderNums'] = $wave_info['totalOrders'] + 1; $is_wave = self::judge_single_shiporder($order_limit, $wave_type); //判断加上新订单是否超过单个配货单限制 //var_dump($is_wave);exit; if ($is_wave === TRUE) { //完结配货单 $update = array('waveStatus' => 1); $where = array('id' => $wave_id); $info = WhWaveInfoModel::update_wave_info($update, $where); //超过限制则完结该配货单 return self::make_wave($shipOrderId, 0, $wave_status, $order_detail, $wave_type); //重新分配配货单 } else { /** 更新配货单信息**/ $update = array('totalSkus' => $order_limit['limitSkuNums'], 'totalWeight' => $order_limit['limitWeight'], 'totalVolume' => $order_limit['limitVolume'], 'totalOrders' => $order_limit['limitOrderNums']); $combine_area = self::combine_area_info($wave_info['startArea'], $area_info['areas']); //合并新加入订单的区域信息 //print_r($combine_area);exit; $startArea = WhWaveAreaInfoModel::get_area_info('areaName', current($combine_area)); $combine_storey = self::combine_storey_info($wave_info['storey'], $area_info['storey']); //合并楼层 $waveZone = self::judge_wave_zone($combine_storey, $combine_area); //判断配货单区域类型 $update['storey'] = implode(',', $combine_storey); $update['startArea'] = $startArea[0]['areaName']; $update['waveZone'] = $waveZone; $update['printStorey'] = $combine_storey[0]; $where = array('id' => $wave_id); $info = WhWaveInfoModel::update_wave_info($update, $where); if (!$info) { self::$errCode = 103; self::$errMsg = '更新配货单信息失败!'; WhBaseModel::rollback(); return FALSE; } //echo '更新配货单'.$wave_id."<br />"; /** 更新配货单信息end**/ } } /** 插入收货记录表数据**/ if (empty($area_info['areas'])) { self::$errCode = 111; self::$errMsg = '发货单区域信息为空!'; WhBaseModel::rollback(); return false; } $area_names = self::get_area_names($area_info['areas']); $storey = self::get_storey_list(); //获取楼层列表 //print_r($area_names);exit; $info = WhWaveReceiveRecordModel::insert_receive_data($wave_id, $area_names, $storey); //插入收获记录表区域信息 if ($info === FALSE) { self::$errCode = 104; self::$errMsg = '插入收货记录表失败!'; WhBaseModel::rollback(); return false; } //echo '插入收货记录'.json_encode($area_names)."<br />"; /** end**/ /** 插入配货记录表数据**/ $order_detail = self::merge_order_detail($order_detail); //合并同一生成时间下相同料号,相同仓位的料号信息 //print_r($order_detail);exit; $scan_details = self::process_scan_details($order_detail); //处理订单详情生成相对应配货记录 $info = WhWaveScanRecordModel::inser_scan_data($wave_id, $scan_details); if ($info === FALSE) { self::$errCode = 105; self::$errMsg = '插入配货记录表失败!'; WhBaseModel::rollback(); return false; } //echo '插入配货记录'.json_encode($scan_details)."<br />"; /** end**/ /** 插入配货单、发货单关系表**/ $info = WhWaveShippingRelationModel::insert_relation_data($wave_id, $shipOrderId); if ($info === FALSE) { self::$errCode = 106; self::$errMsg = '插入配货单关系表失败!'; WhBaseModel::rollback(); return false; } //echo '插入配货单关系'.$wave_id.'----'.$shipOrderId."<br />"; /** end**/ /** 更新发货单分配状态**/ $info = WhShippingOrderModel::update(array('is_wave' => 1), array('id' => $shipOrderId)); if ($info === FALSE) { self::$errCode = 107; self::$errMsg = '更新发货单分配状态失败!'; WhBaseModel::rollback(); return false; } //echo '更新发货单分配状态'.$shipOrderId."<br />"; /** end**/ /** 更新多料号临时存放表**/ if ($wave_type == 3) { //多料号发货单 $info = whWaveMultiShipAreaRecordModel::update(array('is_wave' => 1), array('shipOrderId' => $shipOrderId)); if ($info === FALSE) { self::$errCode = 108; self::$errMsg = '更新多料号订单临时存放表状态失败!'; WhBaseModel::rollback(); return false; } //echo '更新多料号订单临时存放表'.$shipOrderId."<br />"; } /** end**/ WhBaseModel::commit(); return TRUE; }
/** * 生成配货单明细 */ private function createWaveScanRecord($waveId) { //检查是否已生成配货单明细 $wave = WhWaveScanRecordModel::find("waveId='{$waveId}'"); if (!$wave) { $skulist = WhShippingOrderdetailModel::getShippingOrderSkuList($waveId); $list = array(); foreach ($skulist as $val) { if ($list[$val['sku']]) { $list[$val['sku']]['skuAmount'] = $list[$val['sku']]['skuAmount'] + $val['amount']; } else { $data = array('waveId' => $val['waveId'], 'sku' => $val['sku'], 'skuAmount' => $val['amount'], 'pName' => $val['pName'], 'storey' => $val['storey'], 'area' => $val['areaName']); $list[$val['sku']] = $data; } } WhWaveScanRecordModel::begin(); $result = WhWaveScanRecordModel::insert($list, true); if ($result) { WhWaveScanRecordModel::commit(); } else { WhWaveScanRecordModel::rollback(); } } }
public function view_skupick() { $waveId = $_POST['waveId'] ? $_POST['waveId'] : $_GET['waveId']; $waveId = WhWaveInfoModel::number_decode($waveId); $sku = get_goodsSn($_POST['sku'] ? $_POST['sku'] : $_GET['sku']); if ($waveId) { $wave = WhWaveInfoModel::find($waveId); } if (!$waveId || !$wave) { $msg = array('status' => 'A00', 'waveStatus' => 'A00', 'msg' => '波次配货单不存在,参数错误'); echo json_encode($msg); exit; } $recordlist = array(); $recordlist = WhWaveScanRecordModel::getRecordInfoBySku($sku, $waveId); if (!$recordlist) { $msg = array('status' => 'A00', 'waveStatus' => 'A00', 'msg' => '料号对应的发货单不存在,请确认料号输入正确'); echo json_encode($msg); exit; } $record = array(); $firstRecord = array(); foreach ($recordlist as $val) { if (!$firstRecord) { $firstRecord = $val; } if (!$val['pickStatus']) { $record = $val; break; } } if ($record['pickLight']) { if ($record && !$record['record_id']) { //料号无分拣,插入新记录 $new_record = array('waveId' => $record['waveId'], 'shipOrderId' => $record['shipOrderId'], 'sku' => $record['sku'], 'skuAmount' => $record['skuAmount'], 'amount' => '1', 'pickStatus' => $record['skuAmount'] == 1 ? 1 : 0, 'pickUserId' => intval($_SESSION['userId']), 'pickTime' => time(), 'deleteUserId' => '0', 'deleteTime' => '0', 'is_delete' => '0'); $record_id = WhWavePickRecordModel::insert($new_record); } else { if ($record) { $data = array(); $data['amount'] = $record['pickcount'] + 1; if ($data['amount'] >= $record['skuAmount']) { $data['pickStatus'] = 1; } if (!$record['pickUserId']) { $data['pickUserId'] = intval($_SESSION['userId']); $data['pickTime'] = time(); } WhWavePickRecordModel::update($data, $record['record_id']); } } $msg = array('status' => 'A' . ($record['pickLight'] >= 10 ? $record['pickLight'] : '0' . $record['pickLight']), 'pickLight' => $record['pickLight'] . '号桶', 'shipOrderId' => $record['shipOrderId'], 'waveStatus' => 'A00', 'msg' => ''); //检查当前发货单是否已完结分拣 $pickrecord = WhWavePickRecordModel::find("shipOrderId='" . $record['shipOrderId'] . "' AND pickStatus=0 AND is_delete=0"); if (!$pickrecord) { //快递小包通用待复核 $data = array('orderStatus' => PKS_WIQC); WhShippingOrderModel::update($data, "id='" . $record['shipOrderId'] . "'"); WhPushModel::pushOrderStatus($record['shipOrderId'], 'PKS_WIQC', $_SESSION['userId'], time()); } } else { if ($firstRecord) { $msg = array('status' => 'A00', 'pickLight' => $firstRecord['pickLight'] . '号桶', 'shipOrderId' => $firstRecord['shipOrderId'], 'waveStatus' => 'A00', 'msg' => '料号[' . $sku . ']已完成分拣'); } else { $msg = array('status' => 'A00', 'waveStatus' => 'A00', 'msg' => '料号[' . $sku . ']未找到对应发货单和筒号'); } } //检查当前波次是否已分拣完结 $pickstatus = WhWavePickRecordModel::checkPickStatus($waveId); if ($pickstatus === true) { /*$data = array( 'waveStatus' => 5 ); WhWaveInfoModel::update($data, $waveId);*/ //返回波次完结信息 $msg['waveStatus'] = 'A99'; $msg['msg'] = '波次配货单已分拣完结'; } echo json_encode($msg); }
/** * 获取多SKU波次对应的全部发货单 * 注:单SKU波次对应发货单调用:WhWaveScanRecordModel::getShipOrders($waveId, $shipOrderId); * @param $waveId:波次 * @param $shipOrderId:发货单号 * @author cmf */ public static function getShipOrders($waveId = '', $shipOrderId = '') { $sql = "select b.transportId, a.waveId, a.shipOrderId from wh_wave_shipping_relation a \n\t\t\t\tleft join wh_shipping_order b ON(a.shipOrderId=b.id)\n\t\t\t\twhere a.is_delete=0 AND a.waveId='{$waveId}'" . ($shipOrderId ? " AND a.shipOrderId='{$shipOrderId}'" : "") . " group by a.shipOrderId order by a.id ASC"; $list = WhWaveScanRecordModel::query($sql); return $list ? $list : array(); }
/** * WhWaveScanRecordModel::inser_scan_data() * 插入配货记录数据 * @param int $wave_id 波次ID * @param int $shipOrderId 发货单ID * @param array $scan_data 配货数据数组 * @author Gary * @return bool */ public static function inser_scan_data($wave_id, $scan_data) { self::initDB(); $wave_id = intval($wave_id); //$shipOrderId = intval($shipOrderId); if (!$wave_id || !is_array($scan_data)) { return FALSE; } $data = ''; $scan_data = array_filter($scan_data); foreach ($scan_data as $val) { //拼接配货记录 $record = WhWaveScanRecordModel::select(array('waveId' => $wave_id, 'sku' => $val['sku'], 'pName' => $val['pName'], 'is_delete' => 0), array('id', 'skuAmount')); if (!empty($record)) { $skuAmount = $record[0]['skuAmount'] + $val['skuAmount']; $info = self::update(array('skuAmount' => $skuAmount), $record[0]['id']); } else { $data = "('{$wave_id}', '{$val['sku']}', '{$val['skuAmount']}', '{$val['pName']}', '{$val['storey']}', '{$val['area']}')"; $sql = 'insert into ' . self::$tablename . ' (waveId, sku, skuAmount, pName, storey, area) values ' . $data; //echo $sql;exit; $info = self::$dbConn->query($sql); } if ($info == FALSE) { return $info; } } return $info; }