Example #1
0
 function act_processPurchaseOrder()
 {
     $sku = isset($_GET['sku']) ? trim($_GET['sku']) : '';
     $num = isset($_GET['num']) ? trim($_GET['num']) : '';
     if ($sku == '' || $num == '') {
         self::$errCode = 101;
         self::$errMsg = '参数不合法';
         return false;
     }
     $now_num = $num;
     $purchase_list = self::checkPurchaseSkuIsExist($sku);
     //api拉取采购订单
     BaseModel::begin();
     //开始事务
     $rollback = false;
     if (!empty($purchase_list)) {
         /*** 计算采购成本算法 Start step1 获取原有库存成本***/
         $rtnData = ApiModel::getQtyAndPriceBySku($sku);
         //返回料号未入库的库存及成本单价
         $stockmoney = 0;
         $before_qty = 0;
         $before_price = 0;
         $skumoney = 0;
         $skuqty = 0;
         if (!empty($rtnData)) {
             $before_qty = $rtnData[0]['stock_qty'];
             $before_price = $rtnData[0]['goodsCost'];
             $stockmoney = $before_price * $before_qty;
             //未入库前库存成本
         }
         /*** 计算采购成本算法 End step1 获取原有库存成本***/
         foreach ($purchase_list as $purchase) {
             if ($now_num < 1) {
                 break;
             }
             $orderId = $purchase['id'];
             $sku_id = $purchase['sku_id'];
             $lessnum = $purchase['count'] - $purchase['stockqty'];
             $price = $purchase['price'];
             //采购成本
             $adduserid = $purchase['purchaseuser_id'];
             //采购员编号
             if ($lessnum > 0) {
                 if ($now_num < $lessnum) {
                     $total_num = $purchase['stockqty'] + $now_num;
                     $ret = OmAvailableAct::act_updateTNameRow("ph_order_detail", "SET stockqty = '{$total_num}'", "WHERE po_id = '{$orderId}' AND sku_id = '{$sku_id}'");
                     if ($ret === false) {
                         self::$errCode = 405;
                         self::$errMsg = '更新采购订单料号数量出错!';
                         $rollback = false;
                     } else {
                         $now_num = 0;
                     }
                 } else {
                     $totalCount = $purchase['count'];
                     $reach_time = time();
                     $ret = OmAvailableAct::act_updateTNameRow("ph_order_detail", "SET stockqty = '{$totalCount}', reach_time = '{$reach_time}'", "WHERE po_id = '{$orderId}' AND sku_id = '{$sku_id}'");
                     if ($ret === false) {
                         self::$errCode = 406;
                         self::$errMsg = '更新采购订单料号数量出错!';
                         $rollback = false;
                     } else {
                         $now_num = $now_num - $lessnum;
                         /*** 计算采购成本算法 Start step2 获取订单明细表已到货完成的料号***/
                         $skumoney += $price * $purchase['count'];
                         //采购订单中单个料号的采购总金额
                         $skuqty += $purchase['count'];
                         /*** 计算采购成本算法 End step2 获取订单明细表已到货完成的料号***/
                     }
                 }
                 //检测订单是否完结
                 $otherskus = self::getOrderDetailsById($orderId);
                 $status = true;
                 foreach ($otherskus as $othersku) {
                     if ($othersku['count'] != $othersku['stockqty']) {
                         $status = false;
                         break;
                     }
                 }
                 if ($status) {
                     $ret = OmAvailableAct::act_updateTNameRow("ph_order", "SET status = '4'", "WHERE id = '{$orderId}'");
                     if ($ret === false) {
                         self::$errCode = 407;
                         self::$errMsg = '更新采购订单状态出错!';
                         $rollback = false;
                     }
                 }
             }
         }
         /*** 计算采购成本算法 Start step3 重新计算料号采购成本***/
         $totalmoney = $stockmoney + $skumoney;
         $totalqty = $before_qty + $skuqty;
         $newprice = round($totalmoney / $totalqty, 2);
         //新的料号采购成本
         $rtnApiData = self::updatePcApiPrice($sku, $newprice, $adduserid);
         $errorCode = $rtnApiData['errCode'];
         if ($errCode != 200) {
             $rollback = true;
         }
         if ($rollback == false) {
             BaseModel::commit();
             BaseModel::autoCommit();
         } else {
             BaseModel::rollback();
             BaseModel::autoCommit();
         }
         /*** 计算采购成本算法 End step3 重新计算料号采购成本***/
     }
     return $now_num;
 }