php订单管理思路,php-下订单的管理逻辑

标签:php

我目前正在尝试在下订单的地方形成逻辑,如果在与当前库存加起来后订单已超出容量,则会出现相应的消息.另外,如果有进货订单,则在添加新订单时,它们不能超过与待处理进货订单以及当前可用库存相加的容量.但是,我的问题是,无论我投入多少,它都会持续显示“下订单的库存量已超出容量”.验证消息.我对此功能的逻辑有误吗?谢谢.

if(isset($_POST['addBtn'])){

$brand = $_POST['brand'];

$modelName = $_POST['model_name'];

$session = $_SESSION['username'];

$station = 'At Factory';

$progress = 'Awaiting';

$status = 'Awaiting';

$handler = 'Awaiting';

$request = '-';

$stock = $_POST['stock'];

$incoming = '0';

$date = date('Y-m-j H:i:s', time());

$stock = $_POST['stock'];

$incoming = '0';

$sql2 = "SELECT o.stock,m.current,m.capacity FROM orders o

INNER JOIN models m ON o.model_id=m.model_id

WHERE o.incoming = 0";

$result2 = $conn->query($sql2);

if(!$result2) die($conn->error);

$rows = $result2->num_rows;

$stok = $rows['stock'];

$cu = $rows['current'];

$ca = $rows['capacity'];

if(($stock+$cu)>$ca){

?>

×

Error! Placed order stock amount has exceeded capacity.

}elseif(($stok+$stock+$cu)>$ca){

?>

×

Error! Pending incoming stocks has exceeded capacity.

}else{

$query = "INSERT INTO orders(brand,model_id,station,progress,status,editor,time_ordered,admin,request) VALUES ('".$brand."','".$modelName."','".$station."','".$progress."','".$status."','".$handler."','".$date."','".$session."','".$request."')";

}

}

解决方法:

我相信您将需要在SQL中使用另一个WHERE子句来根据模型选择订单.

例:

$sql2 = "SELECT SUM(o.stock) as stock_sum, m.current, m.capacity FROM orders o

INNER JOIN models m ON o.model_id=m.model_id

WHERE o.incoming = 0 AND m.model_id = $modelName";

但是,如果没有订单,则可能会发生错误.例如$cu和$ca可能为空,因为您通过加入订单和模型来获得这些值.

最好的建议是使用单独的SQL来检索库存总额,并使用sql来检索模型详细信息.

标签:php

来源: https://codeday.me/bug/20191210/2105221.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对大量订单的支付状态验证,可以考虑使用缓存技术来提高验证的速度和抗并发能力。 具体实现思路如下: 1. 将订单号作为缓存的key,将支付状态作为缓存的value,将缓存的过期时间设置为支付过期时间。 2. 当需要验证某个订单的支付状态时,先从缓存中获取该订单的支付状态,如果缓存中不存在该订单的支付状态,则直接返回未支付状态。 3. 对于已经支付的订单,可以将其缓存在内存中,以避免频繁地访问数据库。 4. 对于高并发情况下的请求,可以使用分布式锁来避免订单重复处理。 下面是PHP的示例代码: ```php <?php // 验证订单支付状态 function checkPaymentStatus($orderId) { // 首先从缓存中获取订单的支付状态 $paymentStatus = getFromCache($orderId); // 如果缓存中存在该订单的支付状态,则直接返回 if ($paymentStatus !== false) { return $paymentStatus; } // 如果缓存中不存在该订单的支付状态,则查询数据库并更新缓存 $paymentStatus = getPaymentStatusFromDB($orderId); if ($paymentStatus === 'paid') { // 如果订单已经支付,则将其缓存在内存中 addToMemoryCache($orderId, $paymentStatus); } // 将订单的支付状态缓存起来,并设置缓存过期时间为支付过期时间 addToCache($orderId, $paymentStatus, $expirationTime); return $paymentStatus; } // 使用分布式锁来避免订单重复处理 function processOrder($orderId) { $lock = getDistributedLock($orderId); if ($lock->acquire()) { // 如果获取到了分布式锁,则开始处理订单 // ... $lock->release(); } else { // 如果未能获取到分布式锁,则说明有其他进程正在处理该订单,直接返回 return false; } } ?> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值