public function view_waveinit() { $waveId = WhWaveInfoModel::number_decode($_POST['waveId']); //判断每个区域是否已配货完结 $list = WhWaveReceiveRecordModel::select("waveId='{$waveId}'"); if (!$list) { $result = array('status' => 'A00', 'msg' => '配货单收货记录不存在'); echo json_encode($result); exit; } else { $areas = array(); foreach ($list as $val) { if ($val['scanStatus'] < 2) { $areas[] = $val['area']; } } if ($areas) { $result = array('status' => 'A00', 'msg' => '部分区域未完成收货,暂不能执行分拣<br/>' . implode(', ', $areas)); echo json_encode($result); exit; } } //分配筒号(亮灯) $orderlist = WhWaveShippingRelationModel::select("waveId='{$waveId}' AND is_delete=0 order by shipOrderId asc"); $light = 1; $shipOrderPickData = array(); foreach ($orderlist as $val) { $data = array('pickLight' => $light, 'pickTime' => time(), 'pickUserId' => $_SESSION['userId']); WhWaveShippingRelationModel::update($data, $val['id']); //生成发货单投放记录表 $shipOrderPickData[] = array('waveId' => $waveId, 'shipOrderId' => $val['shipOrderId'], 'pickStatus' => 0, 'pickTime' => 0, 'pickUserId' => 0, 'is_delete' => 0); $light++; } //查看是否有此波次的发货单投放记录 $shipOrderPick = WhWaveShippingPickRecordModel::find(' waveId=' . $waveId); if (!$shipOrderPick) { WhWaveShippingPickRecordModel::insert($shipOrderPickData, true); } //生成分拣记录表 $pick = WhWavePickRecordModel::find("waveId='{$waveId}'"); if (!$pick) { $list = WhShippingOrderdetailModel::getShippingOrderSkuList($waveId); foreach ($list as $val) { $data = array('waveId' => $val['waveId'], 'shipOrderId' => $val['shipOrderId'], 'sku' => $val['sku'], 'skuAmount' => $val['amount'], 'amount' => 0, 'pickStatus' => 0, 'pickUserId' => 0, 'pickTime' => 0, 'deleteUserId' => '0', 'deleteTime' => '0', 'is_delete' => '0'); $picklist[] = $data; } WhWavePickRecordModel::insert($picklist, true); } //扫描配货单的时候,查看配货单是否已经配货完成 $shipOrderPicks = WhWaveShippingPickRecordModel::select(' waveId=' . $waveId . ' AND pickStatus = 0', '*'); $hasShippingPick = false; $message = '配货单筒号分配正常,可以执行分拣(当前流程是SKU分拣)'; if (count($shipOrderPicks) > 0) { $hasShippingPick = true; $message = '配货单筒号分配正常,可以执行分拣(当前流程是发货单投放)'; } $result = array('status' => 'A99', 'hasShippingPick' => $hasShippingPick, 'msg' => $message); echo json_encode($result); }
/** * 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; }
public function view_savescan() { $id = intval($_POST['id'] ? $_POST['id'] : $_GET['id']); $waveId = WhWaveInfoModel::number_decode($_POST['waveId'] ? $_POST['waveId'] : $_GET['waveId']); $neednum = $_POST['neednum'] ? $_POST['neednum'] : $_GET['neednum']; $readynum = $_POST['readynum'] ? $_POST['readynum'] : $_GET['readynum']; $sku = get_goodsSn($_POST['sku'] ? $_POST['sku'] : $_GET['sku']); $record = WhWaveScanRecordModel::find($id); if (!$readynum) { $return = array('status' => 0, 'msg' => '配货数量不能为0'); echo json_encode($return); exit; } if (!$record) { $return = array('status' => 0, 'msg' => '错误料号信息,料号不存在'); echo json_encode($return); exit; } if ($waveId != $record['waveId']) { $return = array('status' => 0, 'msg' => '配货单号与系统记录不符'); echo json_encode($return); exit; } if (strtoupper($sku) != strtoupper($record['sku'])) { $return = array('status' => 0, 'msg' => '料号与系统记录不符'); echo json_encode($return); exit; } if ($readynum > $record['skuAmount']) { $return = array('status' => 0, 'msg' => '配货数量不能大于总配货数'); echo json_encode($return); exit; } $amount = $record['amount'] + $readynum; if ($amount > $record['skuAmount']) { $return = array('status' => 0, 'msg' => '当前配货数量超过待配货数'); echo json_encode($return); exit; } $data = array('amount' => $amount, 'scanStatus' => $amount == $record['skuAmount'] ? 1 : 0); if ($data['scanStatus']) { $data['scanTime'] = time(); } $result = WhWaveScanRecordModel::update($data, $id); if ($result) { if ($data['scanStatus']) { //检查当前配货单在当前区域已否已配完 $waveId = $record['waveId']; $area = $record['area']; $wave_area = WhWaveScanRecordModel::find("waveId='{$waveId}' AND area='{$area}' AND scanStatus=0 AND is_delete=0"); if (!$wave_area) { //当前区域已配完 $update_data = array('scanStatus' => 1); WhWaveReceiveRecordModel::update($update_data, "waveId='{$waveId}' AND area='{$area}' AND is_delete=0"); $wave = WhWaveScanRecordModel::find("waveId='{$waveId}' AND scanStatus=0 AND is_delete=0"); if (!$wave) { /*//当前波次已配完 $update_data = array( 'waveStatus' => 3, ); WhWaveInfoModel::update($update_data, "id='$waveId' AND is_delete=0");*/ } } } $return = array('status' => 1, 'msg' => '配货成功'); echo json_encode($return); } else { $return = array('status' => 0, 'msg' => '配货失败,未知错误'); echo json_encode($return); } }
/** * 获取配货单的接下来的配货区域 * @return string * @author czq */ public static function act_orderPickRoute() { $invoiceNumber = isset($_POST['invoice']) ? trim($_POST['invoice']) : ""; if (empty($invoiceNumber)) { self::$errCode = 502; self::$errMsg = "配货单号不能为空!"; return false; } $waveId = WhWaveInfoModel::number_decode($invoiceNumber); //是否已完结 $waveInfo = WhWaveInfoModel::find(array('id' => $waveId, 'is_delete' => 0), 'waveStatus'); if ($waveInfo['waveStatus'] == WAVE_FINISH_GET_GOODS) { self::$errCode = 502; self::$errMsg = "此配货单已经完结!"; return false; } //只获取未配货的三个路由区域 $waveReceiveInfo = WhWaveReceiveRecordModel::getNextReceiveRoute($waveId); if (!$waveReceiveInfo) { self::$errCode = 502; self::$errMsg = "未找到收货区域!"; return false; } $str = '未收货路由(显示部分):'; $areas = array(); foreach ($waveReceiveInfo as $wave) { $areas[] = $wave['area']; } $str .= implode('=>', $areas); self::$errCode = 200; self::$errMsg = "获取收货区域成功!"; return $str; }