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);
 }
Exemple #2
0
 /**
  * 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;
 }