/** * 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; }
* 配货单打印 * edit by Gary 2014-08 **/ @session_start(); require_once WEB_PATH . "framework.php"; Core::getInstance(); global $dbConn; $userName = $_SESSION['userName']; $ids = $_GET['ids']; $ids = explode(',', $ids); $create_time = date('Y-m-d'); $waveTypes = array(1 => '单发货单', 2 => '单料号', 3 => '多料号'); $waveZones = array(1 => '同区域', 2 => '同楼层跨区域', 3 => '跨楼层'); $color_config = self::get_color_config(); //颜色配置 $update = WhWaveInfoModel::update_wave_info(array('waveStatus' => 2), array('id in' => $ids, 'waveStatus' => 1)); if (!$update) { echo '更新配货单状态失败!请重新打印!'; exit; } $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']} =>"; }
/** * WaveInfoManageView::makeSingleWave() * 生成单料号及单发货单配货单 * @author Gary * @return void */ public function makeSingleWave($time) { $update = array('createUserId' => $_SESSION['userId'], 'createTime' => time(), 'waveStatus' => 1); $where = array('waveType in' => array(1, 2), 'createTime <=' => $time, 'createUserId' => 0, 'is_delete' => 0); $waveinfo = WhWaveInfoModel::get_wave_info('id', $where); //获取所有符合条件的配货单号 WhBaseModel::begin(); //更新配货单状态 $info = WhWaveInfoModel::update_wave_info($update, $where); if (!$info) { WhBaseModel::rollback(); return $info; } $waveIds = get_filed_array('id', $waveinfo); $waveIds = empty($waveIds) ? array(0) : $waveIds; $shipOrderIds = WhWaveShippingRelationModel::select(array('waveId in' => $waveIds), 'shipOrderId'); //print_r($waveIds);exit; $shipOrderIds = get_filed_array('shipOrderId', $shipOrderIds); $shipOrderIds = empty($shipOrderIds) ? array(0) : $shipOrderIds; $info = WhShippingOrderModel::update(array('orderStatus' => PKS_PROCESS_GET_GOODS), array('id in' => $shipOrderIds)); if (!$info) { WhBaseModel::rollback(); return $info; } $info = WhBaseModel::affected_rows(); WhBaseModel::commit(); return $info; }