截单返架系统分配货位优化
来源:互联网 发布:js 截取字符串后几位 编辑:程序博客网 时间:2024/05/21 02:03
/*
* 控制器 (Controller)
*/
class Order_OrderController extends Zend_Controller_Action {
//截单&生成反架单 public function draftStopAction() { $code = trim($this->_request->getParam('code', '')); $stoporderid = trim($this->_request->getParam('stoporderid', '')); if ($code) { $order = $this->_s->getByOrdersCode($code); //可能是物流单 if (!$order) { $ordertemp = Order_Service_OrderShip::getByfield('tracking_number', $code); if ($ordertemp) { if ($ordertemp[0]['orders_code']) { $orders_shipment = $ordertemp[0]['orders_code']; $order = Order_Service_Order::getByOrdersCode($orders_shipment); } } } } if ($stoporderid) { $order_temp = $this->_s->getByfield('order_id', $stoporderid); $order = $this->_s->getByOrdersCode($order_temp['orders_code']); } if (!$order) { $data = array( 'result' => $code . " 订单不存在", 'ask' => 0 ); die(Zend_Json::encode($data)); } $wh = User_Service_Warehouse::getWarehouses(); if ($wh['ask'] == 0) { die(json_encode(array('ask' => 0, 'result' => $wh['msg']))); } if (!in_array($order['warehouse_id'], $wh['ids'])) { $wname = $wh['ninfo'][$order['warehouse_id']]['warehouse_name']; die(json_encode(array('ask' => 0, 'result' => '你没有仓库【' . $wname . '】的权限'))); } if ($order['underreview_status'] == 3) { if ($order['orders_status'] == 0 && $order['process_status'] == 0) { $data = array( 'result' => '该订单已做截单处理', 'ask' => 0 ); die(Zend_Json::encode($data)); exit; } $row_opm_data = array(); //根据订单号找配货表 $row_opm = array(); $row_opm = Order_Service_OrderPickupMap::getByfield('orders_code', $order['orders_code']); //上面这个方法取不到值要重写一下 if ($row_opm) { foreach ($row_opm as $val) { $row_wp['product_id'] = $val['product_id']; $row_wpp = Product_Service_Product::getByProductId($val['product_id']); $row_wp['product_sku'] = $row_wpp['product_sku']; $row_wp['product_title'] = $row_wpp['product_title']; $row_wp['opm_quantity'] = $val['opm_quantity']; $row_wp['wpb_id'] = $val['wpb_id']; $row_wpb = Warehouse_Service_ProductsBatch::getByfield('wpb_id', $row_wp['wpb_id']); $row_wp['ws_code'] = $row_wpb['ws_code']; $row_wp['warehouse_id'] = $row_wpb['warehouse_id']; //查看是否有相关的货架正在盘点 $tempCondCheckWP = array( 'warehouse_id' => $row_wp['warehouse_id'], 'product_id' => $row_wp['product_id'], 'ws_code' => $row_wp['ws_code'] ); $rowResult = Warehouse_Service_Products::getByCondition($tempCondCheckWP); if ($rowResult['wp_status'] == 2) { $data = array( 'result' => '该订单的相关货架' . $row_wp['ws_code'] . '正在进行盘点,无法作截单处理!', 'ask' => 0 ); die(Zend_Json::encode($data)); } $row_opm_data[] = $row_wp; } } $result["orders"] = $order; $order['date'] = date('Y-m-d', time()); $result["product"] = $row_opm_data; //生成返架清单 $orderCodes = array($order['orders_code']); $result = Order_Service_BackPutaway::getPrintData($orderCodes); if ($result['err_orders']) { $data = array( 'result' => $result['err_orders'], 'ask' => 0 ); die(Zend_Json::encode($data)); } //截单 $stopaction = new Order_Service_OrderProccess($order['orders_code']); $result = $stopaction->stop(); //打印 $group = array(); $data = array( "warehouse_id" => $order['warehouse_id'], "orders_code" => $order['orders_code'], ); $back_putaway_item = new Order_Model_BackPutawayItem(); $bpi_id = $back_putaway_item->getByCond($data); if (!empty($bpi_id)) { foreach ($bpi_id as $value) { $ws['bp_code'] = $value['bp_code']; $ws['orders_code'] = $value['orders_code']; $ws['warehouse_id'] = $value['warehouse_id']; $ws['ws_code'] = $value['ws_code']; $ws['wpb_id'] = $value['wpb_id']; $ws['opm_quantity'] = $value['bpi_quantity']; $product_id = Product_Service_Product::getByProductId($value['product_id']); $ws['product_sku'] = $product_id['product_sku']; $ws['product_title'] = $product_id['product_title']; $group[] = $ws; } } else { $data = array( 'result' => "未获取到此订单 " . $order['orders_code'] . " 返架清单明细信息", 'ask' => 0, ); die(Zend_Json::encode($data)); } $arr["product"] = $group; $this->view->order = $order; $this->view->arr = $arr; $html = $this->view->render($this->tplDirectory . "stop-print-detail.tpl"); if ($result['ask'] == 1) { $data = array( 'result' => $code . " 订单操作成功", "html" => $html, 'ask' => 1 ); } else { $data = array( 'result' => $order['orders_code'] . "|" . $result['msg'], 'ask' => 0 ); } die(Zend_Json::encode($data)); exit; } else { $data = array( 'result' => $code . " 订单不是待截单状态", 'ask' => 0 ); die(Zend_Json::encode($data)); } die(Zend_Json::encode($data)); }
/*
* 逻辑处理(Service)
*/
class Order_Service_BackPutaway {
/*
* 生成返架清单
* $orderCodes 订单号
*/
public static function getPrintData($orderCodes) { $warehouse = User_Service_Warehouse::getWarehouses(); $warehouse_products_batch = new Warehouse_Model_ProductsBatch(); if ($warehouse['ask'] == 0) { return array('ask' => 0, 'msg' => $warehouse['msg']); } $backOrderCodes = array(); //检查订单是否可以返架 foreach ($orderCodes as $v) { $cr = self::checkOrder($v, $warehouse['ids']); if ($cr['ask'] == 0) { $errlist[] = $v . ':' . $cr['msg']; } else { $backOrderCodes[$cr['warehouse_id']][] = $v; } } $getData = array(); $result = array('data' => ''); //如果有可返架的订单 if (count($backOrderCodes) > 0) { foreach ($backOrderCodes as $warehouseID => $orders) { $category = ''; $splitArgs = 10; $orderArr = array( "orders_code" => $orders, ); $orderby = array( "ws_code asc" ); $createName = ''; $createrUser = ''; // User_Service_User::getByUserId($opRow['op_creater_id']); $createName = ''; //$createrUser['name']; $opmModel = new Product_Model_OrderPickupMap(); $resultTemp = $opmModel->getByOrders($orderArr, $orderby); $userName = ''; $date = date("Y-m-d H:i:s"); $session = new Zend_Session_Namespace('userAuth'); $user_id = $session->userID; //操作人 $bpModel = new Order_Model_BackPutaway(); $bpiModel = new Order_Model_BackPutawayItem(); $adapter = $bpModel->getAdapter(); $adapter->beginTransaction(); $getBpCode = self::generateCode(); try { //创建主表数据 $addBpRow = array( 'bp_code' => $getBpCode, 'bp_create_date' => $date, 'bp_create_user_id' => $user_id, 'warehouse_id' => $warehouseID, ); if (!$bpModel->add($addBpRow)) { throw new Exception('创建返架单失败。'); } //创建子表数据 foreach ($resultTemp as $k => $v) { $category = Product_Service_Product::getProductCategory($v['product_id']); $resultTemp[$k]['category'] = $category['poc_value_cn']; $productInfo = Product_Service_Product::getByProductId($v['product_id']); $pbRow = Product_Service_ProductBarcode::getProductById($v['product_id']); $resultTemp[$k]['product_id'] = $productInfo['product_id']; $resultTemp[$k]['op_code'] = $v['op_code']; $resultTemp[$k]['customer_id'] = $productInfo['customer_id']; $resultTemp[$k]['product_sku'] = $productInfo['product_sku']; $resultTemp[$k]['product_title'] = $productInfo['product_title_cn']; $resultTemp[$k]['opm_quantity'] = $v['opm_quantity']; $resultTemp[$k]['barcode'] = $pbRow ? $pbRow[0]['pb_code'] : ''; if ($userName == '') { $orderRow = Order_Service_Order::getByOrdersCode($v['orders_code']); $pickupUser = User_Service_User::getByUserId($orderRow['pickup_user_id']); $userName = $pickupUser['name']; } //根据配货订单表中的库存批次 ID 查询出产品上架批次表中对应数据 $wpb_id = $warehouse_products_batch->lockForUpdate($v['wpb_id']); $ws_code = ''; //如果产品上架批次表中产品 ID 等于配货订单表中的产品 ID,并且产品上架批次表中的可用数量加冻结库存大于零,那么截单使用原货位号 if ($wpb_id['product_id'] == $v['product_id'] && ($wpb_id['wpb_quantity_hold'] + $wpb_id['wpb_quantity']) > 0) { $ws_code = $v['ws_code']; } else { //如果不相等,那么根据配货订单表中的货位号查询出产品上架批次表中对应数据 $wpbInfo = $warehouse_products_batch->getByConditionBatch(array('ws_code' => $v['ws_code'], '*', '', '', '', 0)); if ($wpbInfo) { $false = true; foreach ($wpbInfo as $wpbRow) { //如果产品上架批次表中的可用数量加冻结库存大于零,并且产品上架批次表中的产品 ID 不等于配货订单表中的产品 ID,那么截单使用推荐货位号 if (($wpbRow['wpb_quantity_hold'] + $wpbRow['wpb_quantity']) > 0 && $wpbRow['product_id'] != $v['product_id']) { $false = false; break; } } if ($false) { foreach ($wpbInfo as $wpbRow) { //如果为 true 产品上架批次表中的可用数量加冻结库存大于等于零,并且产品上架批次表中的产品 ID 等于配货订单表中的产品 ID,那么截单使用原货位号 if (($wpbRow['wpb_quantity_hold'] + $wpbRow['wpb_quantity']) >= 0 && $wpbRow['product_id'] == $v['product_id']) { $ws_code = $wpbRow['ws_code']; break; } } } } else { if ($ws_code == '') { //如果货位号为空,那么根据产品上架批次表中的批次号查询出产品上架批次表中对应数据 $wpbInfo = $warehouse_products_batch->getByConditionBatch(array('putaway_lot_number' => $wpb_id['putaway_lot_number'], '*', 'wpb_quantity', '', '', 0)); if ($wpbInfo) { foreach ($wpbInfo as $wpbRow) { //如果产品上架批次表中的可用数量加冻结库存大于零,那么截单使用原货位号 if (($wpbRow['wpb_quantity_hold'] + $wpbRow['wpb_quantity']) > 0) { $ws_code = $wpbRow['ws_code']; break; } } } } } } var_dump($false); //如果货位号为空,那么推荐同类型、同仓库 ID 空货位号 if ($ws_code == '') { $pageSize = 1; $page = 1; do { //空货位类型 $warehouse_shelf_empty = new Warehouse_Model_ShelfEmpty(); $wse_id = $warehouse_shelf_empty->getByWarehouseShelfEmpty($pageSize, $page); if (!empty($wse_id)) { $ar = array( 'ws_code' => $wse_id['ws_code'], 'warehouse_id' => $wse_id['warehouse_id'] ); $warehouse_shelf = new Warehouse_Model_Shelf(); $wsCode = $warehouse_shelf->getByCondition($ar); if (!empty($wsCode)) { //原货位类型 $arr = array( 'ws_code' => $wpb_id['ws_code'], 'warehouse_id' => $wpb_id['warehouse_id'], ); $wsc_code = $warehouse_shelf->getByCondition($arr); //如果空货位类型等于原货位类型,并且空货位仓库 ID 等于原货位仓库 ID,那么就使用该推荐的货位号 if ($wsCode[0]['wsc_code'] == $wsc_code[0]['wsc_code'] && $wsCode[0]['warehouse_id'] == $wsc_code[0]['warehouse_id']) { $ws_code = $wse_id['ws_code']; //删除仓库中的空货位号被推荐的货位号 if (!$warehouse_shelf_empty->delete($wse_id['wse_id'])) { throw new Exception("删除仓库中的空货位号被推荐的货位号失败"); } break; } } } $page++; } while ($wse_id); } if (!empty($ws_code)) { $addBpiRow = array( 'bp_code' => $getBpCode, 'op_code' => $v['op_code'], 'warehouse_id' => $warehouseID, 'orders_code' => $v['orders_code'], 'product_id' => $productInfo['product_id'], 'wpb_id' => $v['wpb_id'], 'ws_code' => $ws_code, 'bpi_quantity' => $v['opm_quantity'] ); print_r($addBpiRow); if (!$bpiModel->add($addBpiRow)) { throw new Exception('添加返架明细数据失败,订单号:' . $v['orders_code']); } } else { throw new Exception("仓库中的空货位里没有此类型货位号 " . $wsc_code[0]['wsc_code']); } } $resultTemp = array_chunk($resultTemp, $splitArgs); $tmp = array(); $tmp["product_pages"] = $resultTemp; $tmp["pages"] = count($resultTemp); $tmp['date'] = $date; $tmp['bpcode'] = $getBpCode; $tmp['phname'] = $userName; $tmp['opname'] = $createName; $tmp['warehouseName'] = $warehouse['info'][$warehouseID]['warehouse_name']; $adapter->commit(); $result['data'][$warehouseID] = $tmp; } catch (Exception $e) { $adapter->rollback(); $errlist[] = $e->getMessage(); } } if (isset($errlist) && !empty($errlist)) { $result['err_orders'] = $errlist; } else { $result['err_orders'] = array(); } return $result; } else { if ($errlist) { $result['err_orders'] = $errlist; } return $result; } }
}
class Order_Service_OrderProccess {
protected $_order = null; //是否有增值服务 protected $_hsSp = false; protected $_opCode = ''; protected $_orderCode = null; /* * 截单 * 订单删除 */ public function stop() { $obj = new Order_Model_Order(); $session = new Zend_Session_Namespace('userAuth'); $user_id = isset($session->userID) ? $session->userID : 0; $dbAdapter = $obj->getAdapter(); $dbAdapter->beginTransaction(); try { switch ($this->_order['process_status']) { //orders_status 状态( 0删除,1,草稿,2已确认,3,已提交 4,On Hold,,5,已发货,6已签收), //process_status 状态(0:未提交,1:待下架, 2:下架中, 3:已下架, 4:待发货, 5:已发货,6:完成) case 1 : break; case 2 : break; case 3 : break; case 4 : if ($this->_order['problem_status'] == 0) { throw new Exception('订单不是问题单'); } break; case 5: //只有问题单才可以确认截单 if ($this->_order['problem_status'] == 0) { throw new Exception('订单不是问题单'); } break; default : throw new Exception('状态不正确'); break; } //截单确认 if ($this->_order['underreview_status'] == 3 && $this->_order['orders_status'] > 0 && $this->_order['process_status'] > 0) { $date = date("Y-m-d:H:i:s"); //计算特服单扣除的费用 $bcondition = array( 'warehouse_id' => $this->_order['warehouse_id'], 'customer_id' => $this->_order['customer_id'], 'orders_code' => $this->_order['orders_code'], 'spoStatus' => array('0'), 'spo_type' => 3 ); $this->backSpecialOrderFee($bcondition); //订单退回删除 $row_order = array( "orders_status" => 0, "process_status" => 0, 'problem_status' => 0, "import_status" => Order_Service_Order::isSelfPickup($this->_order['shipping_method']) ? 0 : 1, "last_modified_time" => $date, 'order_print_area' => 0, "print_time" => '0000-00-00 00:00:00', "pickup_user_id" => 0, "package_user_id" => 0, ); //有增值服务单时,才修改 if ($this->_hsSp) { $row_order['order_type'] = 0; $row_order['package_type'] = 1; } $this->changeStatus($row_order); //更新批次库存 if ($this->_order['process_status'] < 4 && in_array($this->_order['import_status'], array(6, 8))) { $this->wareHouseProductBatchBack(); //2013-6-19 } else { if ($this->_order['process_status'] == 4 || $this->_order['process_status'] == 5) { $result = $this->backStocketBaseOrder(); if ($result['ask'] == 0) { throw new Exception($result['msg']); } } } $returnFee = true; Common_Service_Common::logErrorByFile(var_export($this->_order, true), 'jiedan.log'); if ($this->_order['problem_status'] == 1 && $this->_order['orders_status'] == 3 && $this->_order['process_status'] == 4) { //查询问题件中的process_status状态,如果是5则不要返费,否则需要返费 $obj = new Order_Model_ProblemOrder(); $condition = array('warehouse_id' => $this->_order['warehouse_id'], 'po_action_type' => 2, 'order_code' => $this->_order['orders_code'], 'po_status' => 4, 'customer_id' => $this->_order['customer_id']); $res = $obj->getByCondition($condition, 'order_process_status', array('po_id desc'), 1, 1); Common_Service_Common::logErrorByFile(var_export($res, true), 'jiedan.log'); if ($res && $res[0]['order_process_status'] == 5) $returnFee = false; } //已出货截单返架扣除cbm if (!$returnFee) { $res = Order_Service_OrderProccess::debitCbm($this->_order); if (!$res['ask']) throw new Exception($res['msg']); } //清除下架明细 $this->clearOrderPickupMap(); //问题单扣包材 if (in_array($this->_order['process_status'], array(4, 5)) && $this->_order['problem_status'] == 1) { //扣包材费 $this->deductionPackage(); //删除订单已扫描的包材 $pkgs = Order_Service_OrderPackageMap::getByfield('orders_code', $this->_order['orders_code']); if ($pkgs) { foreach ($pkgs as $pkg) { if (!Order_Service_OrderPackageMap::delete($pkg['opmap_id'])) throw new Exception('删除订单包材失败!'); } } } //退回预扣费用 if ($returnFee) { $this->feeBack(); } //更新总冻结可用库存 $this->productStocketBack($returnFee); //删除订单运输信息 $this->clearOrderShip(); $this->createOrderLogNew($this->_order['orders_code'], $this->_order['orders_status'], $this->_order['process_status'], 0, 0, $this->_opCode . '截单确认'); //统一扣费 if (!$this->unifiedChargeBack()) { throw new Exception('返回费用失败'); } /* * 截单记录,同步至istore * 如果是STK的产品 */ if (in_array($this->_order['customer_id'], array('STK01'))) { foreach ($this->_order['order_product'] as $orderPro) { $condition = array( 'warehouse_id' => $this->_order['warehouse_id'], 'product_id' => $orderPro['product_id'], 'ref_code' => $orderPro['orders_code'], 'ie_type' => 1, 'user_id' => $user_id, 'ie_note' => json_encode(array('type' => '截单')) ); if (!Product_Service_InventoryEvent::checkData($condition)) { throw new Exception('记录截单信息失败'); } } } } } catch (Exception $e) { $dbAdapter->rollback(); return array("ask" => 0, "msg" => $e->getMessage()); //var_export($e,true));// } $dbAdapter->commit(); return array("ask" => 1, "msg" => "操作成功"); } /* * 更新冻结批次可用库存 */ public function wareHouseProductBatchBack() { $session = new Zend_Session_Namespace('userAuth'); $user_id = $session->userID; //操作人 //出货单 $model_orderPickupMap = new Order_Model_OrderPickupMap(); $orderPickupMaps = $model_orderPickupMap->getByfield("orders_code", $this->_order['orders_code']); $wpbModel = new Warehouse_Model_ProductsBatch(); foreach ($orderPickupMaps as $opm) { $data = array( "product_id" => $opm['product_id'], "orders_code" => $opm['orders_code'], ); $back_putaway_item = new Order_Model_BackPutawayItem(); $orders_code = $back_putaway_item->getByCond($data); if (empty($orders_code)) { throw new Exception("该订单号" . $this->_order['orders_code'] . "数据不存在"); } $warehouse_productBatch = $wpbModel->lockForUpdate($opm['wpb_id']); if ($orders_code[0]['ws_code'] == $opm['ws_code']) { $warehouse_productBatch_row = array( 'wpb_quantity_hold' => $warehouse_productBatch['wpb_quantity_hold'] - $opm['opm_quantity'], 'wpb_quantity' => $warehouse_productBatch['wpb_quantity'] + $opm['opm_quantity'], 'wpb_status' => 1 ); //更新批次库存 if (!Warehouse_Service_ProductsBatch :: update($warehouse_productBatch_row, $warehouse_productBatch['wpb_id'])) { throw new Exception($this->_order['orders_code'] . "更新批次库存(wpb_id:" . $opm['wpb_id'] . ")失败"); } $log = "订单回退,冻结库存-,可用库存+,可用数from " . $warehouse_productBatch['wpb_quantity'] . "to " . $warehouse_productBatch_row['wpb_quantity'] . ",冻结数from " . $warehouse_productBatch['wpb_quantity_hold'] . "to " . $warehouse_productBatch_row['wpb_quantity_hold']; $this->createUsage($opm['wpb_id'], 2, ($warehouse_productBatch['wpb_quantity'] + $warehouse_productBatch['wpb_quantity_hold']), $opm['opm_quantity'], $log); $condition = array( "product_id" => $warehouse_productBatch['product_id'], "ws_code" => $warehouse_productBatch['ws_code'], "warehouse_id" => $this->_order['warehouse_id'], ); $warehouse_product = Warehouse_Service_Products :: getByCondition($condition); if (!$warehouse_product) { throw new Exception($this->_order['orders_code'] . "货架产品(ws_code:" . $warehouse_productBatch['ws_code'] . " product_id:" . $warehouse_productBatch['product_id'] . ") 不存在 in warehouse_id", $this->_order['warehouse_id']); } $wpObj = new Warehouse_Model_Products(); $warehouse_product = $wpObj->lockForUpdateId($warehouse_product['wp_id']); //更新货架产品 数量 $warehouse_product_row = array( 'wp_quantity_hold' => $warehouse_product['wp_quantity_hold'] - $opm['opm_quantity'], 'wp_quantity' => $warehouse_product['wp_quantity'] + $opm['opm_quantity'], 'wp_status' => 1, ); if (!Warehouse_Service_Products::update($warehouse_product_row, $warehouse_product['wp_id'])) { throw new Exception($this->_order['orders_code'] . "更新货架产品(ws_code:" . $warehouse_productBatch['ws_code'] . " wp_id:" . $warehouse_product['wp_id'] . ") 数量失败"); } $container = array( 'quantity' => $opm['opm_quantity'], 'product_id' => $warehouse_productBatch['product_id'], 'ws_code' => $warehouse_productBatch['ws_code'], 'msg' => '订单回退,冻结库存-' . $opm['opm_quantity'] . ',可用库存+' . $opm['opm_quantity'] . $this->_order['orders_code'], 'type' => 2, 'warehouse_id' => $this->_order['warehouse_id'], ); $containerInfo = Order_Service_OrderProccess::updateContainerBindingHoldQuantity($container); if ($containerInfo['ask'] == 0) { throw new Exception($containerInfo['msg']); } $wp_quantity_hold = $warehouse_product['wp_quantity_hold'] - $opm['opm_quantity']; $wp_quantity = $warehouse_product['wp_quantity'] + $opm['opm_quantity']; //货架使用日志 $WarehouseProductsLog = array( 'wpl_refId' => $this->_orderCode, 'user_id' => $user_id, 'warehouse_id' => $warehouse_product['warehouse_id'], 'ws_code' => $warehouse_product['ws_code'], 'wpl_proc_type' => 4, //状态修改 'wpl_note' => '订单由下架中变为待下架,回退冻结库存和可用库存,冻结库存由' . $warehouse_product['wp_quantity_hold'] . '变为' . $wp_quantity_hold . "可用库存由" . $warehouse_product['wp_quantity'] . "变为" . $wp_quantity, ); if (!Warehouse_Service_Products::CreateWarehouseProductsLog($WarehouseProductsLog)) { throw new Exception("订单:" . $this->_orderCode . " 货架 " . $warehouse_product['ws_code'] . " 写入使用日志失败失败"); } } else { $data = array( 'warehouse_id' => $orders_code[0]['warehouse_id'], 'ws_code' => $orders_code[0]['ws_code'], 'product_id' => $orders_code[0]['product_id'], ); $wpb_id = Warehouse_Service_ProductsBatch :: getByCondition($data); if (!empty($wpb_id)) { //更新产品上架批次 $condition = array( 'wpb_quantity' => $wpb_id[0]['wpb_quantity'] + $orders_code[0]['bpi_quantity'], ); if (!Warehouse_Service_ProductsBatch::update($condition, $wpb_id[0]['wpb_id'])) { throw new Exception("订单 " . $this->_order['orders_code'] . " 更新产品上架批次数量失败"); } } else { //写入产品上架批次 $condition = array( 'ws_code' => $orders_code[0]['ws_code'], 'warehouse_id' => $orders_code[0]['warehouse_id'], 'wpb_status' => 1, 'wpb_are_type' => 0, 'receiving_code' => $warehouse_productBatch['receiving_code'], 'putaway_lot_number' => $warehouse_productBatch['putaway_lot_number'], 'rental_time' => $warehouse_productBatch['rental_time'], 'putaway_time' => $warehouse_productBatch['putaway_time'], 'insurance_times' => $warehouse_productBatch['insurance_times'], 'product_id' => $orders_code[0]['product_id'], 'wpb_quantity' => $orders_code[0]['bpi_quantity'], 'wpb_quantity_hold' => 0, 'wpb_create_time' => date("Y-m-d H:i:s"), 'wpb_last_update' => date("Y-m-d H:i:s"), 'qco_code' => $warehouse_productBatch['qco_code'], 'wpb_stock_date' => $warehouse_productBatch['wpb_stock_date'], 'wpb_from' => $warehouse_productBatch['wpb_from'], ); if (!Warehouse_Service_ProductsBatch :: create($condition)) { throw new Exception("订单 " . $this->_order['orders_code'] . " 写入产品上架批次数据失败"); } } $wp_id = Warehouse_Service_Products::getByCond($data); if (!empty($wp_id)) { //更新仓库产品信息 $conditionInfo = array( 'wp_quantity' => $wp_id[0]['wp_quantity'] + $orders_code[0]['bpi_quantity'], ); if (!Warehouse_Service_Products::update($conditionInfo, $wp_id[0]['wp_id'])) { throw new Exception("订单 " . $this->_order['orders_code'] . " 更新仓库产品信息库存失败"); } } else { //写入仓库产品信息 $orderRows = Order_Service_Order::getByOrdersCodes($this->_order['orders_code']); $conditionInfo = array( 'warehouse_id' => $orders_code[0]['warehouse_id'], 'customer_id' => $orderRows[0]['customer_id'], 'ws_code' => $orders_code[0]['ws_code'], 'product_id' => $orders_code[0]['product_id'], 'wp_quantity' => $orders_code[0]['bpi_quantity'], 'wp_quantity_hold' => 0, 'wp_status' => 1, 'wh_create_date' => date("Y-m-d H:i:s"), 'wh_last_update' => date("Y-m-d H:i:s"), 'wh_primary' => 0, ); if (!Warehouse_Service_Products::add($conditionInfo)) { throw new Exception("订单 " . $this->_order['orders_code'] . " 写入仓库产品信息数据失败"); } } //写入日志 $log = "订单回退,冻结库存,可用库存,可用数由 " . 0 . " 变为 " . $condition['wpb_quantity'] . ",冻结数由 " . 0 . " 变为 " . $condition['wpb_quantity_hold']; $this->createUsage($opm['wpb_id'], 2, ($orders_code[0]['bpi_quantity'] + $condition['wpb_quantity_hold']), $opm['opm_quantity'], $log); //写入货架使用日志 $conditionLog = array( 'warehouse_id' => $orders_code[0]['warehouse_id'], 'ws_code' => $orders_code[0]['ws_code'], 'wpl_proc_type' => 4, 'wpl_refId' => $this->_orderCode, 'user_id' => $user_id, 'wpl_note' => '订单由下架中变为待下架,回退冻结库存和可用库存,冻结库存由 ' . 0 . ' 变为 ' . $conditionInfo['wp_quantity_hold'] . " 可用库存由 " . 0 . " 变为 " . $orders_code[0]['bpi_quantity'], 'wpl_quantity' => 0, ); if (!Warehouse_Service_Products::CreateWarehouseProductsLog($conditionLog)) { throw new Exception("订单 " . $this->_orderCode . " 货架 " . $orders_code[0]['ws_code'] . " 写入货架使用日志失败"); } } } }
}
/*
* 模型层(Model)
*/
class Warehouse_Model_ShelfEmpty {
public function delete($id) { $where = $this->_table->getAdapter()->quoteInto("wse_id= ?", $id); return $this->_table->delete($where); } /* * $pageSize integer 分页数 * $page integer 显示数据 */ public function getByWarehouseShelfEmpty($pageSize, $page) { $select = $this->_table->getAdapter()->select(); $table = $this->_table->info('name'); $select->from($table, '*'); if (isset($condition["pageSize"]) && $condition["pageSize"] != '' && isset($condition["page"]) && $condition["page"] != '') { $start = ($condition["page"] - 1) * $condition["pageSize"]; $select->limit($condition["pageSize"], $start); } if ($pageSize > 0 and $page > 0) { $start = ($page - 1) * $pageSize; $select->limit($pageSize, $start); } $sql = $select->__toString(); return $this->_table->getAdapter()->fetchRow($sql); }
}
<!-- Html --><{foreach from=$arr.product item=product key=key name=product}> <tr> <td><{$product.ws_code}></td> <td><{$product.product_sku}></td> <td><{$product.product_title}></td> <td><{$product.opm_quantity}></td> </tr><{/foreach}>
阅读全文
1 0
- 截单返架系统分配货位优化
- 截单反架系统分配货位优化
- 遗传算法求解立体仓库货位优化
- 仓库管理货位系统,四种货位系统从简单到复杂的分析
- OpenERP 相同产品相同货位write方法重载优化
- WMS仓库管理系统---(12)货位库存管理
- 用友CDM系统“货位间商品移库单(一步)”表体增加“货位可用数量”字段,根据表头的选择的货位自动带出数值
- 多货位
- 用友CDM系统,将货位间商品移库单(一步)修改为内调出入库单(一步)方法使用
- C++优化内存分配
- 优化内存分配
- 学生宿舍分配方案优化
- [易飞]易飞ERP系统中,最低补量、补货位量、最小用量、领用倍量、批量之间分别代表什么意思,其中的公式计算逻辑是什么?
- 关于系统权限分配
- 系统内存分配
- 【Django】路由分配系统
- Chapter 29.优化内存分配
- 托管堆内存分配优化
- vue v-model
- C++学习之路(番外篇)
- 在linux安装JDK
- 保存文件到手机内存
- HDU 1213 How Many Tables 基础并查集★
- 截单返架系统分配货位优化
- 组合数 【nyoj-32】【stl】【dfs】
- Luogu P1563 [NOIP2016]玩具谜题
- 必备shell命令
- CentOS7 安装Mldonkey(电驴)步骤
- 相对定位 绝对定位 两张图片完全重叠的处理方法之背景图
- 从单例模式的Double-Check看指令重排
- “bc: command not found ” 解决
- 51nod1264 线段相交