1. 【新增】售后单售后原因类型支持搜索

2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
This commit is contained in:
chenping
2026-04-01 11:59:17 +08:00
parent 9341122827
commit 61783b7d01
754 changed files with 46179 additions and 5700 deletions

View 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()]];
}
}
}