mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-19 19:55:28 +08:00
1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
This commit is contained in:
71
app/ome/lib/order/object/amount.php
Normal file
71
app/ome/lib/order/object/amount.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* 订单金额计算类
|
||||
*/
|
||||
class ome_order_object_amount {
|
||||
|
||||
/**
|
||||
* 重新计算订单金额(在SQL中实现减法)
|
||||
* @param int $order_id 订单ID
|
||||
* @param array $orderObjectsData 已查询好的order_object数据
|
||||
* @param bool $isSubGoodsPrice 是否减去商品优惠
|
||||
* @return array [bool, array]
|
||||
*/
|
||||
public function recalculateOrderAmount($order_id, $orderObjectsData = array(), $isSubGoodsPrice = true)
|
||||
{
|
||||
try {
|
||||
if (empty($orderObjectsData)) {
|
||||
return [true, ['msg' => '没有需要删除的订单子单数据']];
|
||||
}
|
||||
|
||||
// 在PHP中计算需要减去的金额
|
||||
$subtract_amount = 0;
|
||||
$subtract_divide_order_fee = 0;
|
||||
$subtract_pmt_goods = 0;
|
||||
$subtract_pmt_order = 0;
|
||||
$subtract_settlement_amount = 0;
|
||||
$subtract_actually_amount = 0;
|
||||
|
||||
foreach ($orderObjectsData as $objData) {
|
||||
$amount = floatval($objData['amount']);
|
||||
$divide_order_fee = floatval($objData['divide_order_fee']);
|
||||
$pmt_price = floatval($objData['pmt_price']);
|
||||
$part_mjz_discount = floatval($objData['part_mjz_discount']);
|
||||
$settlement_amount = floatval($objData['settlement_amount']);
|
||||
$actually_amount = floatval($objData['actually_amount']);
|
||||
|
||||
// 累加需要减去的金额(在PHP中计算)
|
||||
$subtract_amount += $amount;
|
||||
$subtract_divide_order_fee += $divide_order_fee;
|
||||
$subtract_pmt_goods += $pmt_price;
|
||||
$subtract_pmt_order += $part_mjz_discount;
|
||||
$subtract_settlement_amount += $settlement_amount;
|
||||
$subtract_actually_amount += $actually_amount;
|
||||
}
|
||||
|
||||
// 使用SQL直接更新订单金额(使用PHP计算的结果)
|
||||
$order_sql = "UPDATE sdb_ome_orders SET ";
|
||||
$order_sql .= "cost_item = cost_item - " . $subtract_amount . ", ";
|
||||
if ($isSubGoodsPrice) {
|
||||
$order_sql .= "pmt_goods = pmt_goods - " . $subtract_pmt_goods . ", ";
|
||||
}
|
||||
$order_sql .= "pmt_order = pmt_order - " . $subtract_pmt_order . ", ";
|
||||
$order_sql .= "total_amount = total_amount - " . $subtract_divide_order_fee . ", ";
|
||||
$order_sql .= "final_amount = final_amount - " . $subtract_divide_order_fee . ", ";
|
||||
$order_sql .= "settlement_amount = settlement_amount - " . $subtract_settlement_amount . ", ";
|
||||
$order_sql .= "actually_amount = actually_amount - " . $subtract_actually_amount . " ";
|
||||
$order_sql .= "WHERE order_id = " . intval($order_id);
|
||||
|
||||
$result = kernel::database()->exec($order_sql);
|
||||
|
||||
if ($result === false) {
|
||||
return [false, ['msg' => '更新订单金额失败:' . kernel::database()->errorinfo()]];
|
||||
}
|
||||
|
||||
return [true, ['msg' => '订单金额重新计算成功']];
|
||||
|
||||
} catch (Exception $e) {
|
||||
return [false, ['msg' => '重新计算订单金额失败:' . $e->getMessage()]];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user