Example #1
0
 /**
  * WaveBuildAct::waveBuild()
  * 生成配货单入口
  * @param mixed $shipOrderId 发货单ID
  * @param mixed $is_wave 该发货单是否单独生成配货单
  * @return
  */
 public function waveBuild($shipOrderId, $is_wave = 0)
 {
     $shipOrderId = intval(trim($shipOrderId));
     //格式化发货单ID
     if (!$shipOrderId) {
         self::$errCode = 109;
         self::$errMsg = '发货单ID不合法!';
         return FALSE;
     }
     $order_status = WhShippingOrderModel::get_order_info('is_wave', array('id' => $shipOrderId));
     if ($order_status[0]['is_wave'] == 1) {
         self::$errCode = 110;
         self::$errMsg = '该发货单已经分配过波次!';
         return FALSE;
     }
     /** 获取订单详情**/
     $order_detail = WhShippingOrderdetailModel::getShipDetails($shipOrderId);
     if (empty($order_detail)) {
         return FALSE;
     }
     //$order_detail   =   self::sort_order_detail($order_detail);
     $order_limit = self::get_order_limit_info($order_detail);
     //获取当前订单的重量、料号数量、体积信息
     //print_r($order_limit);exit;
     $is_wave = $is_wave ? $is_wave : self::judge_single_shiporder($order_limit, 1);
     //判断是否满足单发货单生成配货单条件
     //var_dump($is_wave);exit;
     if ($is_wave === TRUE) {
         //需要生成配货单
         $is_split = self::judge_is_split($order_limit);
         //判断满足生成单个配货单的发货单是否需要拆分成多个配货单
         if ($is_split === TRUE) {
             //满足拆分
             self::split_signle_shipOrder($shipOrderId, $order_detail);
             //将一个发货单拆分成多个配货单
         } else {
             self::make_wave($shipOrderId, 0, 1, $order_detail, 1);
             //生成单独一个配货单
         }
     } else {
         //不需单独生成一个配货单
         $waveType = count($order_detail) == 1 ? 2 : 3;
         //判断单料号还是多料号
         if ($waveType == 2) {
             //单料号发货单
             $sku = $order_detail['0']['sku'];
             //判断该料号的配货单是否有未完成配货的
             $waveinfo = WhWaveInfoModel::get_wave_info('id', array('sku' => $sku, 'waveStatus' => 0, 'waveType' => 2, 'is_delete' => 0));
             $wave_id = empty($waveinfo) ? 0 : $waveinfo[0]['id'];
             //if($wave_id){
             //                    echo '<font style="color:red;">'.$shipOrderId.'---'.$wave_id.'</font>'."<br />";
             //                }
             self::make_wave($shipOrderId, $wave_id, 0, $order_detail, $waveType);
         } else {
             //多料号发货单
             self::process_multi_sku_shipOrder($shipOrderId, $order_detail);
             //处理多料号订单
         }
     }
 }
Example #2
0
 /**
  * OrderPrintAct::act_check_order()
  * 检查发货单信息
  * @return void
  */
 public function act_check_order()
 {
     $shipOrderId = intval($_REQUEST['order']);
     $is_preview = isset($_REQUEST['is_preview']) ? $_REQUEST['is_preview'] : 0;
     if (!$shipOrderId) {
         self::$errCode = '201';
         self::$errMsg = '请输入发货单';
         return FALSE;
     }
     $shipOrderInfo = WhShippingOrderModel::get_order_info(array('orderStatus', 'transportId', 'accountId'), $shipOrderId);
     if (empty($shipOrderInfo)) {
         self::$errCode = 202;
         self::$errMsg = '发货单' . $shipOrderInfo . ':没有该发货单信息!';
         return FALSE;
     }
     if (!$is_preview) {
         //打印模式
         if ($shipOrderInfo[0]['orderStatus'] != PKS_PRINT_SHIPPING_INVOICE) {
             self::$errCode = 203;
             self::$errMsg = '发货单' . $shipOrderInfo . ':不是待打印面单状态!';
             return FALSE;
         }
     }
     //得到非快递的运输方式ID
     $arr_transportId = C('flat_transport');
     $arr_transportId = array_keys($arr_transportId);
     $res = self::orderPrint($shipOrderId, $shipOrderInfo[0]['transportId'], $shipOrderInfo[0]['accountId']);
     if ($res) {
         $partion = WhOrderPartionRecordsModel::get_OrderPartionRecords($shipOrderId);
         //获取分区记录
         $partion = empty($partion) ? '' : $partion['partion'];
         self::$errCode = 200;
         self::$errMsg = $shipOrderId . '打印面单:' . $partion;
         $res = str_replace("'", '"', $res);
         if ($shipOrderInfo[0]['orderStatus'] == PKS_PRINT_SHIPPING_INVOICE && !$is_preview) {
             $status = in_array($shipOrderInfo[0]['transportId'], $arr_transportId) ? PKS_WAITING_SHIPPING_CHECKING : PKS_WAITING_LOADING;
             $info = WhShippingOrderModel::update(array('orderStatus' => $status), $shipOrderId);
             if (!$info) {
                 self::$errCode = 204;
                 self::$errMsg = '更新发货单状态失败!';
                 $res = $info;
             }
             $status = in_array($shipOrderInfo[0]['transportId'], $arr_transportId) ? 'PKS_WAITING_SHIPPING_CHECKING' : 'PKS_WAITING_LOADING';
             WhPushModel::pushOrderStatus($shipOrderId, $status, $_SESSION['userId'], time());
             //状态推送,需要改为发货组复核(订单系统提供状态常量)
         }
     } else {
         return $res;
     }
     return $res;
 }
 /**
  * pda_shippingGroupReviewAct::act_outReview()
  *  扫描口袋编号通过AJAX传递口袋编号来对该编号进行操作
  * @author cxy
  * @return boolean array
  */
 public function act_outReview()
 {
     $userId = $_SESSION['userId'];
     $packageId = intval(trim($_POST['packageid']));
     //得到发货单分区列表信息
     $get_orderPartion = WhOrderPartionPrintModel::get_OrderPartion($packageId);
     if (empty($get_orderPartion)) {
         self::$errCode = '202';
         self::$errMsg = '该口袋编号不存在分区列表中';
         return false;
     }
     if ($get_orderPartion['status'] == 0) {
         self::$errCode = '202';
         self::$errMsg = '该口袋编号还没有进行打包!';
         return false;
     }
     //得到该口袋编号下的发货单
     $all_order = WhOrderPartionRecordsModel::get_OrderPartionRecordsByPackageId($packageId);
     if ($all_order) {
         foreach ($all_order as $value) {
             $result_status = WhShippingOrderModel::get_order_info('orderStatus', array('id' => $value['shipOrderId']));
             if ($result_status[0]['orderStatus'] != PKS_WAITING_SHIPPING_CHECKING) {
                 self::$errCode = '202';
                 self::$errMsg = '该口袋编号下有发货单的状态不是在待发货组复核!';
                 return false;
             }
         }
     }
     //发货组复核信息
     $get_groupReview = WhWaveOrderPartionShippingReviewModel::get_pocket($packageId);
     if ($get_groupReview) {
         self::$errCode = '211';
         self::$errMsg = '该口袋编号已经在发货组复核中复核过了';
         return true;
     }
     //分区复核的信息
     $get_orderReview = WhWaveOrderPartionScanReviewModel::get_shippingNews($packageId);
     // print_r($get_orderReview);
     // echo $get_orderReview['review_weight'];exit;
     if ($get_orderPartion['totalWeight'] == $get_orderReview['review_weight'] && $get_orderPartion['totalNum'] == $get_orderReview['review_num']) {
         $is_error = 0;
         self::$errCode = '200';
         self::$errMsg = '请随机扫描一个订单!';
         $data = array('packageId' => $packageId, 'is_error' => $is_error, 'userId' => $userId, 'scantime' => time());
         $partion_arr = array();
         $review_arr = array();
         //分区扫描得到的发货单
         $get_orderPartion_detail = WhOrderPartionRecordsModel::get_OrderPartionRecordsByPackageId($packageId);
         //得到分区复核的发货单列表
         $get_review_detail = WhWaveOrderPartionScanReviewModel::get_shipping_review($packageId);
         foreach ($get_orderPartion_detail as $v) {
             $partion_arr[$v['shipOrderId']] = $v;
         }
         foreach ($get_review_detail as $v) {
             $review_arr[$v['shipOrderId']] = $v;
         }
         $diversity_a = array_diff_key($partion_arr, $review_arr);
         $diversity_b = array_diff_key($review_arr, $partion_arr);
         if (!empty($diversity_a) || !empty($diversity_b)) {
             self::$errCode = '500';
             self::$errMsg = '分区的发货单与分区复核的发货单不符合';
             $order_str = '';
             if ($diversity_a) {
                 foreach ($diversity_a as $k => $val) {
                     $order_str .= $k . ',';
                 }
             } elseif ($diversity_b) {
                 foreach ($diversity_b as $k => $val) {
                     $order_str .= $k . ',';
                 }
             }
             return trim($order_str, ',');
         }
         $res = array();
         WhBaseModel::begin();
         $result = WhWaveOrderPartionShippingReviewModel::insert($data);
         if ($result) {
             foreach ($get_review_detail as $ks => $val) {
                 //更新发货操作记录表
                 $update = WhWaveOrderPartionShippingReviewModel::updateOrderRecords($val['shipOrderId'], $userId);
                 if (!$update) {
                     self::$errCode = '206';
                     self::$errMsg = '更新操作记录失败,请联系负责人!';
                     WhBaseModel::rollback();
                     return false;
                 }
                 //更新发货表状态
                 $ostatus = WhWaveOrderPartionScanReviewModel::updateShippingOrderStatus($val['shipOrderId'], $status = PKS_WAITING_LOADING);
                 if (!$ostatus) {
                     self::$errCode = 608;
                     self::$errMsg = "更新发货单状态失败!";
                     WhBaseModel::rollback();
                     return false;
                 }
                 WhPushModel::pushOrderStatus($val['shipOrderId'], 'PKS_WAITING_LOADING', $_SESSION['userId'], time());
                 //状态推送,需要改为装车扫描(订单系统提供状态常量)
             }
             self::$errCode = '200';
             self::$errMsg = '该口袋编号正确,请复核下该口袋编号下的发货单!';
             $get_orderPartion['totalWeight'] = round($get_orderPartion['totalWeight'] / 1000, 3);
             $get_orderReview['review_weight'] = round($get_orderReview['review_weight'] / 1000, 3);
             $res['partion_data'] = $get_orderPartion;
             $res['review_data'] = $get_orderReview;
             $res['packageid'] = $packageId;
         } else {
             self::$errCode = '206';
             self::$errMsg = '该发货组复核口袋编号失败,请联系负责人!';
             WhBaseModel::rollback();
             return false;
         }
         WhBaseModel::commit();
         return $res;
     } else {
         self::$errCode = '201';
         self::$errMsg = '分区和分区复核的数据不一致!';
     }
     $res['partion_data'] = $get_orderPartion;
     $res['review_data'] = $get_orderReview;
     $res['packageid'] = $packageId;
     return $res;
 }