public function act_orderWeighingFlat() { $orderid = isset($_POST['orderid']) ? $_POST['orderid'] : ""; $mailway = isset($_POST['channelId']) ? $_POST['channelId'] : ""; //$partionId = isset($_POST['partionId'])?$_POST['partionId']:"";//不作处理 $orderweight = isset($_POST['orderweight']) ? $_POST['orderweight'] : ""; if (!is_numeric($orderid) || empty($orderid)) { self::$errCode = 501; self::$errMsg = "错误的发货单号!"; return false; } $where = "where id={$orderid}"; $lists = orderWeighingModel::selectRecord($where); $calcweight = $lists[0]['calcWeight'] * 1000; //估算重量 $userName = $_SESSION['userCnName']; /**重量拦截的逻辑**/ $vip_users = C('weight_vip'); //获取具有VIP权限的 $lists = orderWeighingModel::selectOrderDetail($orderid); if (!in_array($userName, $vip_users)) { //判断是否具有vip操作权限 $minRate = 0.8; $maxRate = 1.2; } else { $minRate = 0.5; $maxRate = 2; } if ($calcweight < 50 && $orderweight < 50) { if (abs($orderweight - $calcweight) >= 20) { self::$errCode = 509; self::$errMsg = "该订单重量与实际不符合!系统重量为{$calcweight}称重重量为{$orderweight}"; return false; } } else { if (($orderweight < $calcweight * $minRate || $orderweight > $calcweight * $maxRate) && $calcweight != 0) { self::$errCode = 510; self::$errMsg = "该订单重量与实际不符合!系统重量为{$calcweight}称重重量为{$orderweight}"; return false; } } TransactionBaseModel::begin(); //更新状态,插入记录 $userId = $_SESSION['userId']; $msg = orderWeighingModel::insertRecord($orderid, $userId); if (!$msg) { self::$errCode = 511; self::$errMsg = "插入称重记录失败!"; TransactionBaseModel::rollback(); return false; } $msg = orderWeighingModel::updateRecord($orderid, $orderweight, $userId); if (!$msg) { self::$errCode = 512; self::$errMsg = "更新操作记录表失败!"; TransactionBaseModel::rollback(); return false; } //更新发货单实际重量和状态 $orderData = array('orderWeight' => $orderweight, 'orderStatus' => PKS_WDISTRICT); $msg = WhShippingOrderModel::update($orderData, $orderid); //orderWeighingModel::updateStatus($orderid); if (!$msg) { self::$errCode = 513; self::$errMsg = "更新发货单重量和状态失败!"; TransactionBaseModel::rollback(); return false; } //插入运输方式跟踪号申请记录表 $transportData = array('shipOrderId' => $orderid, 'createTime' => time()); $msg = WhWaveOrderTransportModel::insert($transportData); if (!$msg) { self::$errCode = 514; self::$errMsg = "插入运输方式跟踪号记录表失败!"; TransactionBaseModel::rollback(); return false; } WhPushModel::pushOrderStatus($orderid, 'PKS_WDISTRICT', $userId, time()); //状态推送 TransactionBaseModel::commit(); return true; }
if ($transport['fee'] < $shipFee) { $shipFee = $transport['fee']; $lastTransport = $transport; } } //运费最优策略,暂时只有EUB $bestTransport = getBestTransport($compareTrasprot, $lastTransport); $shipFee = $bestTransport['fee']; $transportId = $bestTransport['carrierId']; $channelId = $bestTransport['channelId']; $insertData = array('transportId' => $transportId, 'status' => 1, 'transportTime' => time()); //启用事物 WhWaveOrderTransportModel::begin(); //更新申请记录表 if (!WhWaveOrderTransportModel::update($insertData, ' shipOrderId = ' . $shipOrderId . ' AND status=0')) { $log .= "发货单:{$shipOrderId} 更新运输方式-{$transportId}记录表失败\n"; WhWaveOrderTransportModel::rollback(); continue; } //更新发货单表 $shipOrderData = array('transportId' => $transportId, 'actualShipping' => $shipFee, 'channelId' => $channelId); if (!WhShippingOrderModel::update($shipOrderData, $shipOrderId)) { $log .= "发货单:{$shipOrderId} 更新运输方式-{$transportId},运费-{$shipFee}发货单表失败\n"; WhWaveOrderTransportModel::rollback(); continue; } $log .= "发货单:{$shipOrderId} 更新运输方式 - {$transportId},运费 - {$shipFee}记录表成功\n"; WhWaveOrderTransportModel::commit(); } //写日志 write_log("transport_assign/" . date('Y-m') . "/" . date('H') . ".txt", $log);
/** * 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; }
/** * 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; }
/** * 快递复核标记为发货异常 * @return boolean * @author czq */ public function act_signUnusual() { $shipOrderId = isset($_POST['shipOrderId']) ? intval($_POST['shipOrderId']) : 0; if (empty($shipOrderId)) { self::$errCode = 0; self::$errMsg = '请输入发货单信息!'; return; } $shipOrder = WhShippingOrderModel::find(' id=' . $shipOrderId . ' AND is_delete = 0', 'id'); if (!$shipOrder) { self::$errCode = 0; self::$errMsg = '发货单' . $shipOrder . '不存在!'; return; } WhShippingOrderModel::begin(); //更新状态为 发货单异常 if (!WhShippingOrderModel::update(array('orderStatus' => PKS_UNUSUAL_SHIPPING_INVOICE), $shipOrderId)) { self::$errCode = 0; self::$errMsg = '发货单' . $shipOrder . '不存在!'; WhShippingOrderModel::rollback(); return false; } self::$errCode = 1; self::$errMsg = '发货单标记异常成功'; WhShippingOrderModel::commit(); return true; }
public function view_stoppicking() { $_POST['waveId'] = $_POST['waveId'] ? $_POST['waveId'] : $_GET['waveId']; $waveId = WhWaveInfoModel::number_decode($_POST['waveId']); if ($waveId) { $wave = WhWaveInfoModel::find($waveId); } if (!$waveId || !$wave) { $msg = array('status' => 'A00', 'waveStatus' => 'A00', 'msg' => '波次配货单不存在,参数错误'); echo json_encode($msg); } //检查当前波次是否已分拣完结 $list = WhWavePickRecordModel::getSkuPickRecord($waveId); if ($list) { //把未完结的发货记录手动完结,修改配货记录状态为手动完结 $Pickmessage = '异常发货单:<br/>'; foreach ($list as $val) { if (WhWavePickRecordModel::update(array('pickStatus' => 3), ' shipOrderId=' . $val['shipOrderId'] . ' AND pickStatus = 0 AND is_delete = 0')) { //修改配货单的状态为待复核 if (WhShippingOrderModel::update(array('orderStatus' => PKS_UNUSUAL_SHIPPING_INVOICE), ' id=' . $val['shipOrderId'])) { $Pickmessage .= "发货单:{$val['shipOrderId']}--桶号:{$val['pickLight']}<br/>"; } } } $msg = array('waveStatus' => 'A99', 'msg' => $Pickmessage); } else { $msg = array('status' => 'A00', 'waveStatus' => 'A99', 'msg' => '波次已完成分拣,不需要手动完结'); } echo json_encode($msg); }
/** * 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; }
/** * 配货收货 * @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; }
public function view_savepacket() { $packageid = intval($_POST['packageid']); $packet = WhOrderPartionPrintModel::find($packageid, 'status,partion,partitionId'); if (!$packet) { $result = array('status' => 0, 'msg' => '口袋编号不存在'); echo json_encode($result); exit; } $status = $packet['status']; $partion = $packet['partion']; $partionId = $packet['partitionId']; unset($packet); if ($status != 0) { $result = array('status' => 0, 'msg' => '该包裹已使用,请更换包裹编号!'); echo json_encode($result); exit; } if (!$_SESSION['userId']) { $result = array('status' => 0, 'msg' => '请先登录系统'); echo json_encode($result); exit; } $record = WhOrderPartionRecordsModel::getPartionRecords($partionId, $_SESSION['userId']); $totalnum = $record['totalnum']; $totalweight = $record['totalweight']; if (!$totalnum && !$totalweight) { $result = array('status' => 0, 'msg' => '该包裹分区下没有订单'); echo json_encode($result); exit; } //更新口袋分区 $data = array('packageId' => $packageid, 'modifyTime' => time()); WhOrderPartionRecordsModel::update($data, "partitionId='" . $partionId . "' AND packageId=0 AND scanUserId='" . $_SESSION['userId'] . "'"); //更新口袋打包 $packet_data = array('totalWeight' => $totalweight, 'totalNum' => $totalnum, 'status' => 1, 'modifyTime' => time()); WhOrderPartionPrintModel::update($packet_data, $packageid); $result = array('status' => 1, 'totalWeight' => round($totalweight / 1000, 3), 'totalNum' => $totalnum, 'msg' => '口袋打包成功'); //更新订单状态 $orders = WhOrderPartionRecordsModel::select("partitionId='" . $partionId . "' AND packageId='" . $packageid . "' AND scanUserId='" . $_SESSION['userId'] . "'"); foreach ($orders as $val) { $orderIds[] = $val['shipOrderId']; WhPushModel::pushOrderStatus($val['shipOrderId'], 'PKS_DISTRICT_CHECKING', $_SESSION['userId'], time()); //状态推送,需要改为待分区复核(订单系统提供状态常量) } $data = array('orderStatus' => PKS_DISTRICT_CHECKING); WhShippingOrderModel::update($data, array('id in' => $orderIds)); echo json_encode($result); }