|
|
@@ -23,7 +23,6 @@ use biz\stat\classes\StatSaleClass;
|
|
|
use bizGhs\express\services\DadaExpressServices;
|
|
|
use bizGhs\order\traits\OrderTrait;
|
|
|
use bizGhs\order\models\Order;
|
|
|
-use bizGhs\order\models\OrderMerge;
|
|
|
use bizGhs\product\classes\ProductClass;
|
|
|
use bizGhs\admin\classes\AdminClass;
|
|
|
use bizGhs\custom\classes\CustomClass;
|
|
|
@@ -3204,37 +3203,39 @@ XL;
|
|
|
$order->save();
|
|
|
OrderMergeClass::add(['mergeId' => $hasMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
|
|
|
} else {
|
|
|
- $mergeData = ['mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
- $mergeId = orderSn::getGhsOrderMergeId($mergeData);
|
|
|
- self::updateByIds($ids, ['mergeId' => $mergeId]);
|
|
|
- $addData = [];
|
|
|
- foreach ($ids as $currentId) {
|
|
|
- $addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
- }
|
|
|
- OrderMergeClass::batchAdd($addData);
|
|
|
+ self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
|
|
|
}
|
|
|
} else {
|
|
|
- //修改
|
|
|
- $oldMergeId = $order->mergeId ?? 0;
|
|
|
- $oldMerge = OrderMergeSnClass::getById($oldMergeId, true);
|
|
|
- $oldDate = $oldMerge->mergeDate ?? '';
|
|
|
- if ($oldDate == $date) {
|
|
|
- //修改前后日期一样,不需要调整
|
|
|
- return false;
|
|
|
- }
|
|
|
- $oldMergeList = OrderMergeClass::getAllByCondition(['mergeId' => $oldMergeId], null, '*', null, true);
|
|
|
- if (count($oldMergeList) <= 2) {
|
|
|
- $oldMerge->delete();
|
|
|
- $del = [];
|
|
|
- foreach ($oldMergeList as $oldMerge) {
|
|
|
- $del[] = $oldMerge->orderId;
|
|
|
- $oldMerge->delete();
|
|
|
+ //修改账单日:订单 payTime 已在调用方改为新日 $date
|
|
|
+ $oldMergeId = (int)($order->mergeId ?? 0);
|
|
|
+ if ($oldMergeId > 0) {
|
|
|
+ $oldMergeSn = OrderMergeSnClass::getById($oldMergeId, true);
|
|
|
+ if (empty($oldMergeSn)) {
|
|
|
+ // 订单仍挂着 mergeId,但主档已不存在,避免后续报错并清理脏数据
|
|
|
+ $order->mergeId = 0;
|
|
|
+ $order->save();
|
|
|
+ } else {
|
|
|
+ $oldDate = $oldMergeSn->mergeDate ?? '';
|
|
|
+ if ($oldDate == $date) {
|
|
|
+ //合并组账单日与当前一致,无需调整
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $oldMergeList = OrderMergeClass::getAllByCondition(['mergeId' => $oldMergeId], null, '*', null, true);
|
|
|
+ if (count($oldMergeList) <= 2) {
|
|
|
+ //合并组内至多 2 单:整组 dissolve(与原先「只剩一单合并无意义」一致)
|
|
|
+ $oldMergeSn->delete();
|
|
|
+ $del = [];
|
|
|
+ foreach ($oldMergeList as $mergeRow) {
|
|
|
+ $del[] = $mergeRow->orderId;
|
|
|
+ $mergeRow->delete();
|
|
|
+ }
|
|
|
+ self::updateByIds($del, ['mergeId' => 0]);
|
|
|
+ } else {
|
|
|
+ $order->mergeId = 0;
|
|
|
+ $order->save();
|
|
|
+ OrderMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'orderId' => $orderId]);
|
|
|
+ }
|
|
|
}
|
|
|
- OrderClass::updateByIds($del, ['mergeId' => 0]);
|
|
|
- } else {
|
|
|
- $order->mergeId = 0;
|
|
|
- $order->save();
|
|
|
- OrderMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'orderId' => $orderId]);
|
|
|
}
|
|
|
$hasNewMerge = OrderMergeSnClass::getByCondition(['customId' => $customId, 'mergeDate' => $date], true);
|
|
|
if (!empty($hasNewMerge)) {
|
|
|
@@ -3242,20 +3243,31 @@ XL;
|
|
|
$order->mergeId = $newMergeId;
|
|
|
$order->save();
|
|
|
OrderMergeClass::add(['mergeId' => $newMergeId, 'orderId' => $orderId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId]);
|
|
|
- }else{
|
|
|
- $mergeData = ['mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
- $mergeId = orderSn::getGhsOrderMergeId($mergeData);
|
|
|
- self::updateByIds($ids, ['mergeId' => $mergeId]);
|
|
|
- $addData = [];
|
|
|
- foreach ($ids as $currentId) {
|
|
|
- $addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
- }
|
|
|
- OrderMergeClass::batchAdd($addData);
|
|
|
+ } else {
|
|
|
+ self::rebuildOrderMergeGroupForDay($ids, $date, $customId, $mainId);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 指定客户、某日多单:新建合并主档,回写订单 mergeId,并批量写入 xhGhsOrderMerge。
|
|
|
+ *
|
|
|
+ * @param int[] $ids 当日同客户订单 id 列表
|
|
|
+ */
|
|
|
+ private static function rebuildOrderMergeGroupForDay(array $ids, $date, $customId, $mainId)
|
|
|
+ {
|
|
|
+ $mergeData = ['mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
+ $mergeId = orderSn::getGhsOrderMergeId($mergeData);
|
|
|
+ self::updateByIds($ids, ['mergeId' => $mergeId]);
|
|
|
+ $addData = [];
|
|
|
+ foreach ($ids as $currentId) {
|
|
|
+ $addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date, 'customId' => $customId, 'mainId' => $mainId];
|
|
|
+ }
|
|
|
+ OrderMergeClass::batchAdd($addData);
|
|
|
+ }
|
|
|
+
|
|
|
// 更新同天内的所有订单的 sameTimeIds
|
|
|
public static function updateSameTimeIds($order, $date)
|
|
|
{
|