public function act_manualSortingCheck()
 {
     $userId = $_SESSION['userId'];
     $waveId = isset($_POST['waveId']) ? $_POST['waveId'] : "";
     $where = "number='{$waveId}'";
     $waveInfo = WhWaveInfoModel::get_wave_info("*", $where);
     if (!$waveInfo) {
         self::$errCode = 502;
         self::$errMsg = "此配货单号不存在!";
         return false;
     }
     if ($waveInfo[0]['waveStatus'] != WAVE_FINISH_GET_GOODS) {
         self::$errCode = 514;
         self::$errMsg = "此配货单不在【配货完成】状态,不能进行分拣操作!";
         return false;
     }
     if ($waveInfo[0]['waveType'] == 3) {
         self::$errCode = 518;
         self::$errMsg = "此配货单属于多SKU生成的配货单,不能进行人工分拣!";
         return false;
     }
     //一个发货单对应多个配货单的时候,发货单是唯一的,
     if ($waveInfo[0]['waveType'] == 1) {
         $waveId = $waveInfo[0]['id'];
         $result = WhWaveShippingRelationModel::select_not_scanning($waveId);
         $shipOrderId = $result[0]['shipOrderId'];
         if ($result[0]['pickUserId'] != 0) {
             self::$errCode = 520;
             self::$errMsg = "此配货单已经分拣过了!";
             return false;
         }
         WhShippingOrderModel::begin();
         $update = WhWaveShippingRelationModel::update(array('pickUserId' => $userId, 'pickTime' => time()), array('is_delete' => 0, 'waveId' => $waveId));
         if (!$update) {
             self::$errCode = 519;
             self::$errMsg = "扫描该配货单失败,请联系负责人!";
             WhShippingOrderModel::rollback();
             return false;
             // $result = WhWaveShippingRelationModel::getShippingOrderIdsByWaveId($waveId);
             //$shipOrderId = $result[0]['shipOrderId'];
             //查询还没有扫描的配货单
         }
         $select_not_scanning = WhWaveShippingRelationModel::select_not_scanning_by_id($shipOrderId);
         $not_scanning_waveId = '';
         //还没有分拣的配货单
         if ($select_not_scanning) {
             foreach ($select_not_scanning as $val) {
                 $not_scanning_waveId .= $val['waveId'] . ',';
             }
             self::$errMsg = "扫描该配货单'{$waveId}'成功,对应发货单'{$shipOrderId}'的配货单'{$not_scanning_waveId}'还没有分拣!";
         } else {
             self::$errMsg = "扫描该配货单'{$waveId}'成功,对应的发货单'{$shipOrderId}'已经分拣完成,请处理完成之后拿去复核!";
             //获取一个发货单对应多个配货单的每个配货单号
             $result = OmAvailableModel::getTNameList("wh_wave_shipping_relation", "waveId", "where shipOrderId='{$shipOrderId}'  and is_delete=0 ");
             $wave_all = '';
             foreach ($result as $values) {
                 $wave_all .= $values['waveId'] . ',';
             }
             $wave_all = trim($wave_all, ',');
             //得到该发货单下所有配货单的信息
             $scan_record = OmAvailableModel::getTNameList("wh_wave_scan_record", "waveId,sku,skuAmount,amount", "where waveId in ('{$wave_all}')  and scanStatus = 1  and is_delete=0 ");
             $picklist_all = array();
             foreach ($scan_record as $record) {
                 $data = array('waveId' => $record['waveId'], 'shipOrderId' => $shipOrderId, 'sku' => $record['sku'], 'skuAmount' => $record['skuAmount'], 'amount' => $record['amount'], 'pickStatus' => 1, 'pickUserId' => intval($_SESSION['userId']), 'pickTime' => time(), 'deleteUserId' => '0', 'deleteTime' => '0', 'is_delete' => '0');
                 $picklist_all[] = $data;
             }
             if (!WhWavePickRecordModel::insert($picklist_all, true)) {
                 WhShippingOrderModel::rollback();
                 self::$errCode = 517;
                 self::$errMsg = "该配货单插入分拣记录失败!";
                 return false;
             }
             $where = "id = '{$shipOrderId}' AND orderStatus='" . PKS_WAITING_SORTING . "'";
             if (!WhShippingOrderModel::update_shipping_order($where, "orderStatus='" . PKS_WIQC . "'")) {
                 WhShippingOrderModel::rollback();
                 self::$errCode = 516;
                 self::$errMsg = "此配货单所属发货单{$shipOrderId}更新状态失败!";
                 return false;
             }
         }
         WhPushModel::pushOrderStatus($shipOrderId, 'PKS_WIQC', $_SESSION['userId'], time());
         //状态推送,需要改为待复核单(订单系统提供状态常量)
         WhShippingOrderModel::commit();
         self::$errCode = 200;
         return true;
     }
     /*
     		if(empty($waveInfo[0]['sku'])){
     			self::$errCode = 515;
     			self::$errMsg = "此配货单不属于单SKU生成的配货单,不能进行人工分拣!";
     			return false;
     		}
     */
     $waveId = $waveInfo[0]['id'];
     //echo $waveId;
     $shippOrders = WhWaveShippingRelationModel::getShippingOrderIdsByWaveId($waveId);
     //var_dump($shippOrders);
     WhShippingOrderModel::begin();
     foreach ($shippOrders as $shippOrder) {
         $shipOrderId = $shippOrder['shipOrderId'];
         $where = "id = '{$shipOrderId}' AND orderStatus='" . PKS_WAITING_SORTING . "'";
         if (!WhShippingOrderModel::update_shipping_order($where, "orderStatus='" . PKS_WIQC . "'")) {
             WhShippingOrderModel::rollback();
             self::$errCode = 516;
             self::$errMsg = "此配货单所属发货单{$shipOrderId}更新状态失败!";
             return false;
         }
     }
     $pick = WhWavePickRecordModel::find("waveId='{$waveId}'");
     if (!$pick) {
         $picklist = array();
         $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' => 1, 'pickUserId' => intval($_SESSION['userId']), 'pickTime' => time(), 'deleteUserId' => '0', 'deleteTime' => '0', 'is_delete' => '0');
             $picklist[] = $data;
         }
         if (!WhWavePickRecordModel::insert($picklist, true)) {
             WhShippingOrderModel::rollback();
             self::$errCode = 517;
             self::$errMsg = "该配货单插入分拣记录失败!";
             return false;
         } else {
             foreach ($picklist as $lists) {
                 WhPushModel::pushOrderStatus($lists['shipOrderId'], 'PKS_WIQC', $_SESSION['userId'], time());
                 //状态推送,需要改为待复核单(订单系统提供状态常量)
             }
         }
     }
     WhShippingOrderModel::commit();
     self::$errCode = 200;
     self::$errMsg = "该配货单分拣成功,请处理完成之后拿去复核!";
     return true;
 }
 private function buildWhereSql()
 {
     $sql_where_storeId = '';
     $storeId = isset($_GET['storeId']) ? intval($_GET['storeId']) : 0;
     if ($storeId != 0) {
         $sql_where_storeId = " and po.storeId={$storeId}";
     }
     $this->smarty->assign('storeId', $storeId);
     $keywords = isset($_GET['keywords']) ? trim($_GET['keywords']) : '';
     //关键字
     $sql_where_keywords = '';
     $keytype = isset($_GET['keytype']) ? intval($_GET['keytype']) : '';
     //关键字类型
     //echo $keytype;exit;
     if (!empty($keywords) && $keytype != 0) {
         //有关键字搜索条件
         $keywords = mysql_real_escape_string($keywords);
         if ($keytype == 1) {
             //按订单号搜索
             $sql_where_keywords = " and por.originOrderId='{$keywords}'";
         } elseif ($keytype == 2) {
             //按配货单号搜索
             $sql_where_keywords = " and po.id='{$keywords}'";
         } elseif ($keytype == 3) {
             //按sku搜索
             $sql_where_keywords = " and pd.sku='{$keywords}'";
         } elseif ($keytype == 4) {
             $sql_where_keywords = " and ot.tracknumber='{$keywords}'";
         } else {
             if ($keytype == 5) {
                 //按配货单号搜索
                 $wave = WhBaseModel::number_decode($keywords);
                 //获取配货单ID
                 $shipOrderIds = WhWaveShippingRelationModel::getShippingOrderIdsByWaveId($wave);
                 //获取发货单ID
                 $orderIds = array();
                 if (!empty($shipOrderIds)) {
                     $orderIds = get_filed_array('shipOrderId', $shipOrderIds);
                 } else {
                     $orderIds = array(0);
                 }
                 $orderIds = implode(',', $orderIds);
                 $sql_where_keywords = " and po.id in ({$orderIds})";
             }
         }
     }
     $this->smarty->assign('keywords', $keywords);
     $this->smarty->assign('keytype', $keytype);
     $sql_where_status = '';
     $status = intval($_GET['status']);
     //订单状态
     if (!isset($_GET['status'])) {
         $status = PKS_WGETGOODS;
     }
     if ($status != 0) {
         //状态
         $sql_where_status = " and po.orderStatus={$status}";
     }
     $this->smarty->assign('status', $status);
     $sql_where_orderstarttime = '';
     $ordertimestart = isset($_GET['startdate']) ? trim($_GET['startdate']) : '';
     //下单日期 开始
     if ($ordertimestart != 0) {
         //开始时间
         $ordertimestart_int = strtotime($ordertimestart);
         $sql_where_orderstarttime = " and po.createdTime >= {$ordertimestart_int}";
     }
     $this->smarty->assign('ordertimestart', $ordertimestart);
     $sql_where_orderendtime = '';
     $ordertimeend = isset($_GET['enddate']) ? trim($_GET['enddate']) : '';
     //下单日期 结束
     if ($ordertimeend != 0) {
         //结束时间
         $ordertimeend_int = strtotime($ordertimeend);
         //$ordertimeend_int += 86400;
         $sql_where_orderendtime = " and po.createdTime < {$ordertimeend_int}";
     }
     $this->smarty->assign('ordertimeend', $ordertimeend);
     $sql_where_goodsoutstarttime = '';
     $goodsouttimestart = isset($_GET['goodsouttimestart']) ? trim($_GET['goodsouttimestart']) : '';
     //出库日期 开始
     if ($goodsouttimestart != 0) {
         //出库开始时间
         $goodsouttimestart_int = strtotime($goodsouttimestart);
         $sql_where_goodsoutstarttime = " and po.weighTime >= {$goodsouttimestart_int}";
     }
     $this->smarty->assign('goodsouttimestart', $goodsouttimestart);
     $sql_where_goodsoutendtime = '';
     $goodsouttimeend = isset($_GET['goodsouttimeend']) ? trim($_GET['goodsouttimeend']) : '';
     //出库日期 结束
     if ($goodsouttimeend != 0) {
         //出库结束时间
         $goodsouttimeend_int = strtotime($goodsouttimeend);
         //$goodsouttimeend += 86400;
         $sql_where_goodsoutstarttime = " and po.weighTime < {$goodsouttimeend_int}";
     }
     $this->smarty->assign('goodsouttimeend', $goodsouttimeend);
     $sql_where_isnote = '';
     $isNote = intval($_GET['isNote']);
     if ($isNote) {
         //echo $isNote;exit;
         switch ($isNote) {
             case 1:
                 //有留言
                 $sql_where_isnote = ' and po.isNote=1';
                 break;
             case 2:
                 //没留言
                 $sql_where_isnote = ' and po.isNote=0';
                 break;
         }
     }
     $this->smarty->assign('isNote', $isNote);
     $sql_where_orderTypeId = '';
     /*    $orderTypeId = intval($_GET['orderTypeId']);
     		if(!isset($_GET['orderTypeId'])){
     			$orderTypeId = 1;
     		}
             switch ($orderTypeId){
                 case 1: //有留言
                     $sql_where_orderTypeId = ' and po.orderTypeId=1';
                     break;
                 case 2: //没留言
                     $sql_where_orderTypeId = ' and po.orderTypeId=2';
                     break;
             }
             $this->smarty->assign('orderTypeId', $orderTypeId);*/
     $sql_where_shiptype = '';
     $shiptype = trim($_GET['shiptype']);
     //运输方式
     if ($shiptype != 0) {
         //运输方式
         if ($shiptype == 200) {
             $nshiptype = "1,2,3";
         } else {
             if ($shiptype == 300) {
                 $nshiptype = "6,10,52,53";
             } else {
                 $nshiptype = $shiptype;
             }
         }
         $sql_where_shiptype = " and po.transportId in({$nshiptype})";
     } else {
         if (!empty($_SESSION['shippingList'])) {
             $nshiptype = implode(',', $_SESSION['shippingList']);
             $sql_where_shiptype = " and po.transportId in({$nshiptype})";
         }
     }
     $this->smarty->assign('shiptype', $shiptype);
     $sql_where_clientname = '';
     $client_name = trim($_GET['clientname']);
     if ($client_name != '') {
         //按客户id搜索
         $sql_where_clientname = " and po.platformUsername='******'";
     }
     $this->smarty->assign('clientname', $client_name);
     $sql_where_salesaccount = '';
     $salesaccount = trim($_GET['salesaccount']);
     if ($salesaccount != '') {
         //按客户id搜索
         $sql_where_salesaccount = " and po.accountId='{$salesaccount}'";
     } else {
         if (!empty($_SESSION['accountList'])) {
             $accountInfo = implode(',', $_SESSION['accountList']);
             $sql_where_salesaccount = " and po.accountId in({$accountInfo})";
         }
     }
     $this->smarty->assign('salesaccount', $salesaccount);
     $sql_where_hunhe = '';
     $hunhe = intval($_GET['hunhe']);
     //echo $hunhe;exit;
     switch ($hunhe) {
         case 2:
             //单料号
             $sql_where_hunhe = ' and po.orderAttributes=' . SOA_SINGLE;
             break;
         case 1:
             //多料号
             $sql_where_hunhe = ' and po.orderAttributes=' . SOA_MULTIY;
             break;
         case 3:
             //组合订单
             $sql_where_hunhe = ' and po.orderAttributes=' . SOA_COMBIN;
             break;
     }
     $this->smarty->assign('hunhe', $hunhe);
     $sql_where_platformName = '';
     $platformName = trim($_GET['platformName']);
     if ($platformName != '') {
         //平台
         $sql_where_platformName = " and po.platformId= {$platformName}";
     } else {
         if (!empty($_SESSION['platformList'])) {
             $platformInfo = implode(',', $_SESSION['platformList']);
             $sql_where_platformName = " and po.platformId in({$platformInfo})";
         }
     }
     $this->smarty->assign('platformName', $platformName);
     return $sql_where_storeId . $sql_where_keywords . $sql_where_status . $sql_where_orderstarttime . $sql_where_orderendtime . $sql_where_goodsoutstarttime . $sql_where_goodsoutendtime . $sql_where_isnote . $sql_where_orderTypeId . $sql_where_shiptype . $sql_where_clientname . $sql_where_salesaccount . $sql_where_hunhe . $sql_where_platformName;
 }
 /**
  * 配货收货
  * @return boolean
  * @author czq
  */
 public function act_orderPicking()
 {
     $zone = isset($_POST['zone']) ? strtoupper(trim($_POST['zone'])) : "";
     $invoiceNumber = isset($_POST['invoice']) ? trim($_POST['invoice']) : "";
     if (empty($zone)) {
         self::$errCode = 502;
         self::$errMsg = "区域不能为空";
         return false;
     }
     if (empty($invoiceNumber)) {
         self::$errCode = 502;
         self::$errMsg = "配货单号不能为空!";
         return false;
     }
     /*$start = time();*/
     $waveId = WhWaveInfoModel::number_decode($invoiceNumber);
     /*$firstF				= strpos($zone,'F');
     		$floor				= substr($zone,0,$firstF);
     		$area				= substr($zone,$firstF+1);*/
     /*$end = time();
     		echo $end - $start; echo "<br>";
     		$start = $end;*/
     $waveReceiveInfo = WhWaveReceiveRecordModel::find(array('waveId' => $waveId, 'area' => $zone));
     /*$end = time();
     		echo $end - $start; echo "<br>";
     		$start = $end;*/
     if (!$waveReceiveInfo) {
         //检查是否已经配货完成
         self::$errCode = 502;
         self::$errMsg = "此区域无需处理该配货单!";
         return false;
     }
     if ($waveReceiveInfo['scanStatus'] == 0) {
         //检查是否已经配货完成
         self::$errCode = 502;
         self::$errMsg = "此区域未配货完成!";
         return false;
     } else {
         if ($waveReceiveInfo['scanStatus'] == 2) {
             //检查是否已收货,防止重复收货
             self::$errCode = 502;
             self::$errMsg = "请不要重复收货!";
             return false;
         }
     }
     //插入记录配货表
     $receiveData = array('userId' => $_SESSION['userId'], 'time' => time(), 'scanStatus' => 2);
     WhWaveReceiveRecordModel::begin();
     if (!WhWaveReceiveRecordModel::update($receiveData, array('waveId' => $waveId, 'area' => $zone, 'is_delete' => 0))) {
         self::$errCode = 502;
         self::$errMsg = "更新收货失败!";
         WhWaveReceiveRecordModel::rollback();
         return false;
     }
     //查找是否已经全部收货
     $waveReceiveNum = WhWaveReceiveRecordModel::count(" waveId='{$waveId}' AND scanStatus !=2 AND is_delete=0 ");
     $statusMessage = '';
     if ($waveReceiveNum == 0) {
         //已经完结,更新波次为完结状态
         $waveInfoData = array('waveStatus' => WAVE_FINISH_GET_GOODS);
         if (!WhWaveInfoModel::update($waveInfoData, $waveId)) {
             self::$errCode = 502;
             self::$errMsg = "更新配货单完结状态失败!";
             WhWaveReceiveRecordModel::rollback();
             return false;
         }
         $statusMessage = '此配货单已经完结';
         //如果此波次全部已收货,那么需要把发货单的状态改为待分拣
         $shippingOrders = WhWaveShippingRelationModel::getShippingOrderIdsByWaveId($waveId);
         //更新发货单状态为待分拣
         foreach ($shippingOrders as $shipOrder) {
             if (!WhShippingOrderModel::update(array('orderStatus' => PKS_WAITING_SORTING), $shipOrder['shipOrderId'])) {
                 self::$errCode = 502;
                 self::$errMsg = '更新发货单状态失败!';
                 WhWaveReceiveRecordModel::rollback();
                 return false;
             }
         }
     }
     WhWaveReceiveRecordModel::commit();
     self::$errCode = 200;
     self::$errMsg = "收货成功!请扫描下一个配货单 " . $statusMessage;
     return true;
 }