截单返架系统分配货位优化

来源:互联网 发布: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}>