|
@@ -21,6 +21,7 @@ use bizGhs\stock\classes\OnStockRecordClass;
|
|
|
use bizGhs\stock\classes\StockRecordClass;
|
|
use bizGhs\stock\classes\StockRecordClass;
|
|
|
use bizHd\cg\classes\CgMergeClass;
|
|
use bizHd\cg\classes\CgMergeClass;
|
|
|
use bizHd\cg\classes\CgMergeSnClass;
|
|
use bizHd\cg\classes\CgMergeSnClass;
|
|
|
|
|
+use bizHd\cg\models\CgMerge;
|
|
|
use bizHd\cg\classes\CgRefundClass;
|
|
use bizHd\cg\classes\CgRefundClass;
|
|
|
use bizHd\cg\classes\CgTreeClass;
|
|
use bizHd\cg\classes\CgTreeClass;
|
|
|
use bizHd\cg\classes\CgXjClass;
|
|
use bizHd\cg\classes\CgXjClass;
|
|
@@ -66,12 +67,14 @@ class PurchaseClass extends BaseClass
|
|
|
const REFUND_NO = 1;
|
|
const REFUND_NO = 1;
|
|
|
const REFUND_YES = 2;
|
|
const REFUND_YES = 2;
|
|
|
|
|
|
|
|
|
|
+ //更新同一供货商、同一天的多张采购单合并 $update 0 添加 1 修改(写法对齐 OrderClass::updateMergeOrder)
|
|
|
public static function updateMergeCg($cg, $update = 0)
|
|
public static function updateMergeCg($cg, $update = 0)
|
|
|
{
|
|
{
|
|
|
$date = substr($cg->payTime, 0, 10);
|
|
$date = substr($cg->payTime, 0, 10);
|
|
|
$ghsId = $cg->ghsId ?? 0;
|
|
$ghsId = $cg->ghsId ?? 0;
|
|
|
$mainId = $cg->mainId ?? 0;
|
|
$mainId = $cg->mainId ?? 0;
|
|
|
- //找到当前订单客户的账单日期为 $date 的所有订单
|
|
|
|
|
|
|
+ $cgId = $cg->id ?? 0;
|
|
|
|
|
+ //当前零售商 + 供货商 + 账单日 下的采购单
|
|
|
$startTime = $date . ' 00:00:00';
|
|
$startTime = $date . ' 00:00:00';
|
|
|
$endTime = $date . ' 23:59:59';
|
|
$endTime = $date . ' 23:59:59';
|
|
|
$dayOrders = self::getAllByCondition([
|
|
$dayOrders = self::getAllByCondition([
|
|
@@ -79,37 +82,87 @@ class PurchaseClass extends BaseClass
|
|
|
'ghsId' => $ghsId,
|
|
'ghsId' => $ghsId,
|
|
|
'payTime' => ['between', [$startTime, $endTime]]
|
|
'payTime' => ['between', [$startTime, $endTime]]
|
|
|
], 'id ASC', 'id');
|
|
], 'id ASC', 'id');
|
|
|
- if (!empty($dayOrders)) {
|
|
|
|
|
|
|
+ if (empty($dayOrders)) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
$ids = array_column($dayOrders, 'id');
|
|
$ids = array_column($dayOrders, 'id');
|
|
|
$count = count($ids);
|
|
$count = count($ids);
|
|
|
|
|
+
|
|
|
if ($update == 0) {
|
|
if ($update == 0) {
|
|
|
if ($count <= 1) {
|
|
if ($count <= 1) {
|
|
|
//新增,如果当天只有一个订单,不需要操作
|
|
//新增,如果当天只有一个订单,不需要操作
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
+ $hasMerge = CgMergeSnClass::getByCondition(['ghsId' => $ghsId, 'mergeDate' => $date], true);
|
|
|
|
|
+ if (!empty($hasMerge)) {
|
|
|
|
|
+ $hasMergeId = $hasMerge->id ?? 0;
|
|
|
|
|
+ $cg->mergeId = $hasMergeId;
|
|
|
|
|
+ $cg->save();
|
|
|
|
|
+ CgMergeClass::add(['mergeId' => $hasMergeId, 'cgId' => $cgId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
- //修改
|
|
|
|
|
- $oldMergeId = $cg->mergeId ?? 0;
|
|
|
|
|
- $oldMerge = CgMergeSnClass::getById($oldMergeId, true);
|
|
|
|
|
- $oldDate = $oldMerge->mergeDate ?? '';
|
|
|
|
|
- if ($oldDate == $date) {
|
|
|
|
|
- //修改前后日期一样,不需要调整
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ //修改账单日:payTime 已在调用方改为新日 $date
|
|
|
|
|
+ $oldMergeId = (int)($cg->mergeId ?? 0);
|
|
|
|
|
+ if ($oldMergeId > 0) {
|
|
|
|
|
+ $oldMergeSn = CgMergeSnClass::getById($oldMergeId, true);
|
|
|
|
|
+ if (empty($oldMergeSn)) {
|
|
|
|
|
+ $cg->mergeId = 0;
|
|
|
|
|
+ $cg->save();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $oldDate = $oldMergeSn->mergeDate ?? '';
|
|
|
|
|
+ if ($oldDate == $date) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ $oldMergeList = CgMergeClass::getAllByCondition(['mergeId' => $oldMergeId], null, '*', null, true);
|
|
|
|
|
+ if (count($oldMergeList) <= 2) {
|
|
|
|
|
+ $oldMergeSn->delete();
|
|
|
|
|
+ $del = [];
|
|
|
|
|
+ foreach ($oldMergeList as $mergeRow) {
|
|
|
|
|
+ $del[] = $mergeRow->cgId;
|
|
|
|
|
+ $mergeRow->delete();
|
|
|
|
|
+ }
|
|
|
|
|
+ self::updateByIds($del, ['mergeId' => 0]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $cg->mergeId = 0;
|
|
|
|
|
+ $cg->save();
|
|
|
|
|
+ CgMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'cgId' => $cgId]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ $hasNewMerge = CgMergeSnClass::getByCondition(['ghsId' => $ghsId, 'mergeDate' => $date], true);
|
|
|
|
|
+ if (!empty($hasNewMerge)) {
|
|
|
|
|
+ $newMergeId = $hasNewMerge->id ?? 0;
|
|
|
|
|
+ $cg->mergeId = $newMergeId;
|
|
|
|
|
+ $cg->save();
|
|
|
|
|
+ CgMergeClass::add(['mergeId' => $newMergeId, 'cgId' => $cgId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- CgMergeClass::deleteByCondition(['id' => ['in', $ids]]);
|
|
|
|
|
|
|
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 指定零售商、供货商、某日多采购单:清理旧明细后新建合并主档,回写 mergeId,并写入 xhCgMerge。
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param int[] $ids 当日同供货商采购单 id 列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private static function rebuildCgMergeGroupForDay(array $ids, $date, $ghsId, $mainId)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (!empty($ids)) {
|
|
|
|
|
+ CgMerge::deleteAll(['cgId' => $ids]);
|
|
|
|
|
+ }
|
|
|
$mergeData = ['mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
|
|
$mergeData = ['mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
|
|
|
- $mergeId = orderSn::getGhsOrderMergeId($mergeData);
|
|
|
|
|
|
|
+ $mergeId = orderSn::getCgMergeId($mergeData);
|
|
|
self::updateByIds($ids, ['mergeId' => $mergeId]);
|
|
self::updateByIds($ids, ['mergeId' => $mergeId]);
|
|
|
$addData = [];
|
|
$addData = [];
|
|
|
foreach ($ids as $currentId) {
|
|
foreach ($ids as $currentId) {
|
|
|
- $addData[] = ['mergeId' => $mergeId, 'orderId' => $currentId, 'mergeDate' => $date];
|
|
|
|
|
|
|
+ $addData[] = ['mergeId' => $mergeId, 'cgId' => $currentId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
|
|
|
}
|
|
}
|
|
|
CgMergeClass::batchAdd($addData);
|
|
CgMergeClass::batchAdd($addData);
|
|
|
- return true;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//获取打包费
|
|
//获取打包费
|