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; }