|
|
@@ -15,10 +15,14 @@ use bizGhs\admin\classes\AdminClass;
|
|
|
use bizGhs\custom\classes\CustomClass;
|
|
|
use bizGhs\item\classes\CostChangeClass;
|
|
|
use bizGhs\order\classes\OrderClass;
|
|
|
+use bizGhs\order\classes\OrderMergeSnClass;
|
|
|
use bizGhs\order\traits\OrderTrait;
|
|
|
use bizGhs\product\classes\ProductClass;
|
|
|
use bizGhs\stock\classes\OnStockRecordClass;
|
|
|
use bizGhs\stock\classes\StockRecordClass;
|
|
|
+use bizHd\cg\classes\CgMergeClass;
|
|
|
+use bizHd\cg\classes\CgMergeSnClass;
|
|
|
+use bizHd\cg\models\CgMerge;
|
|
|
use bizHd\cg\classes\CgRefundClass;
|
|
|
use bizHd\cg\classes\CgTreeClass;
|
|
|
use bizHd\cg\classes\CgXjClass;
|
|
|
@@ -30,6 +34,7 @@ use common\components\IntraCityExpress;
|
|
|
use common\components\mapUtil;
|
|
|
use common\components\noticeUtil;
|
|
|
use common\components\orderSn;
|
|
|
+use common\components\stringUtil;
|
|
|
use common\components\util;
|
|
|
use bizHd\base\classes\BaseClass;
|
|
|
use common\components\lakala\Lakala;
|
|
|
@@ -64,6 +69,198 @@ class PurchaseClass extends BaseClass
|
|
|
const REFUND_NO = 1;
|
|
|
const REFUND_YES = 2;
|
|
|
|
|
|
+ //更新同一供货商、同一天的多张采购单合并 $update 0 添加 1 修改(写法对齐 OrderClass::updateMergeOrder)
|
|
|
+ public static function updateMergeCg($cg, $update = 0)
|
|
|
+ {
|
|
|
+ $date = substr($cg->payTime, 0, 10);
|
|
|
+ $ghsId = $cg->ghsId ?? 0;
|
|
|
+ $mainId = $cg->mainId ?? 0;
|
|
|
+ $cgId = $cg->id ?? 0;
|
|
|
+ //当前零售商 + 供货商 + 账单日 下的采购单
|
|
|
+ $startTime = $date . ' 00:00:00';
|
|
|
+ $endTime = $date . ' 23:59:59';
|
|
|
+ $dayOrders = self::getAllByCondition([
|
|
|
+ 'mainId' => $mainId,
|
|
|
+ 'ghsId' => $ghsId,
|
|
|
+ 'payTime' => ['between', [$startTime, $endTime]]
|
|
|
+ ], 'id ASC', 'id');
|
|
|
+ if (empty($dayOrders)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $ids = array_column($dayOrders, 'id');
|
|
|
+ $count = count($ids);
|
|
|
+
|
|
|
+ if ($update == 0) {
|
|
|
+ if ($count <= 1) {
|
|
|
+ //新增,如果当天只有一个订单,不需要操作
|
|
|
+ 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]);
|
|
|
+ self::syncCgMergeNumForMergeId($hasMergeId);
|
|
|
+ self::syncMergeRelationByCgIds([$cgId]);
|
|
|
+ } else {
|
|
|
+ self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //修改账单日:payTime 已在调用方改为新日 $date
|
|
|
+ $oldMergeId = (int)($cg->mergeId ?? 0);
|
|
|
+ if ($oldMergeId > 0) {
|
|
|
+ $oldMergeSn = CgMergeSnClass::getById($oldMergeId, true);
|
|
|
+ if (empty($oldMergeSn)) {
|
|
|
+ $cg->mergeId = 0;
|
|
|
+ $cg->mergeNum = 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, 'mergeNum' => 0]);
|
|
|
+ } else {
|
|
|
+ $cg->mergeId = 0;
|
|
|
+ $cg->mergeNum = 0;
|
|
|
+ $cg->save();
|
|
|
+ CgMergeClass::deleteByCondition(['mergeId' => $oldMergeId, 'cgId' => $cgId]);
|
|
|
+ self::syncCgMergeNumForMergeId($oldMergeId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $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]);
|
|
|
+ self::syncCgMergeNumForMergeId($newMergeId);
|
|
|
+ self::syncMergeRelationByCgIds([$cgId]);
|
|
|
+ } else {
|
|
|
+ self::rebuildCgMergeGroupForDay($ids, $date, $ghsId, $mainId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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];
|
|
|
+ $mergeId = orderSn::getCgMergeId($mergeData);
|
|
|
+ $mergeNum = count($ids);
|
|
|
+ self::updateByIds($ids, ['mergeId' => $mergeId, 'mergeNum' => $mergeNum]);
|
|
|
+ $addData = [];
|
|
|
+ foreach ($ids as $currentId) {
|
|
|
+ $addData[] = ['mergeId' => $mergeId, 'cgId' => $currentId, 'mergeDate' => $date, 'ghsId' => $ghsId, 'mainId' => $mainId];
|
|
|
+ }
|
|
|
+ CgMergeClass::batchAdd($addData);
|
|
|
+ self::syncMergeRelationByCgIds($ids);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function syncMergeRelationByOrderIds($orderIds)
|
|
|
+ {
|
|
|
+ if (empty($orderIds)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $orders = OrderClass::getByIds($orderIds, null, null, 'id,purchaseId');
|
|
|
+ if (empty($orders)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $cgIds = [];
|
|
|
+ foreach ($orders as $order) {
|
|
|
+ $purchaseId = $order['purchaseId'] ?? 0;
|
|
|
+ if (!empty($purchaseId)) {
|
|
|
+ $cgIds[] = $purchaseId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return self::syncMergeRelationByCgIds($cgIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function syncMergeRelationByCgIds($cgIds)
|
|
|
+ {
|
|
|
+ if (empty($cgIds)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $cgIds = array_values(array_unique(array_filter($cgIds)));
|
|
|
+ if (empty($cgIds)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ $cgs = self::getByIds($cgIds, null, null, 'id,saleId,mergeId');
|
|
|
+ if (empty($cgs)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ foreach ($cgs as $cg) {
|
|
|
+ $cgId = $cg['id'] ?? 0;
|
|
|
+ $orderId = $cg['saleId'] ?? 0;
|
|
|
+ $cgMergeId = $cg['mergeId'] ?? 0;
|
|
|
+ if (empty($cgId) || empty($orderId) || empty($cgMergeId)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $order = OrderClass::getById($orderId, false, 'id,mergeId');
|
|
|
+ $ghsMergeId = $order['mergeId'] ?? 0;
|
|
|
+ if (empty($ghsMergeId)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $cgMergeSn = CgMergeSnClass::getById($cgMergeId, false, 'id,salt');
|
|
|
+ $ghsMergeSn = OrderMergeSnClass::getById($ghsMergeId, false, 'id,salt');
|
|
|
+ $cgSalt = $cgMergeSn['salt'] ?? '';
|
|
|
+ $ghsSalt = $ghsMergeSn['salt'] ?? '';
|
|
|
+ if (empty($cgSalt) || empty($ghsSalt)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ CgMergeSnClass::updateById($cgMergeId, [
|
|
|
+ 'ghsMergeId' => $ghsMergeId,
|
|
|
+ 'ghsSalt' => $ghsSalt,
|
|
|
+ ]);
|
|
|
+ OrderMergeSnClass::updateById($ghsMergeId, [
|
|
|
+ 'cgMergeId' => $cgMergeId,
|
|
|
+ 'cgSalt' => $cgSalt,
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 按 xhCgMerge 明细数量,回写该合并组内所有采购单的 mergeNum */
|
|
|
+ private static function syncCgMergeNumForMergeId($mergeId)
|
|
|
+ {
|
|
|
+ $mergeId = (int)$mergeId;
|
|
|
+ if ($mergeId <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $rows = CgMergeClass::getAllByCondition(['mergeId' => $mergeId], null, 'cgId', null, true);
|
|
|
+ $mergeNum = count($rows);
|
|
|
+ if ($mergeNum === 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $cgIds = [];
|
|
|
+ foreach ($rows as $row) {
|
|
|
+ $cgIds[] = (int)(is_object($row) ? ($row->cgId ?? 0) : ($row['cgId'] ?? 0));
|
|
|
+ }
|
|
|
+ $cgIds = array_values(array_filter($cgIds));
|
|
|
+ if (!empty($cgIds)) {
|
|
|
+ self::updateByIds($cgIds, ['mergeNum' => $mergeNum]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//获取打包费
|
|
|
public static function getKmPackCost($mainId)
|
|
|
{
|
|
|
@@ -1071,6 +1268,7 @@ class PurchaseClass extends BaseClass
|
|
|
$localConfirmTime = dict::getDict('local_gys_kd_auto_set_debt_time');
|
|
|
$currentSet = $currentTime + $localConfirmTime;
|
|
|
$data['autoSetTime'] = $data['autoSetTime'] ?? date("Y-m-d H:i:s", $currentSet);
|
|
|
+ $data['salt'] = $data['salt'] ?? stringUtil::charsShuffleLowerCase(10);
|
|
|
//保存订单
|
|
|
$respond = self::add($data, true);
|
|
|
|
|
|
@@ -1102,7 +1300,7 @@ class PurchaseClass extends BaseClass
|
|
|
}
|
|
|
if (!empty($data['treeData'][$currentPtItemId])) {
|
|
|
$myTreeData = $data['treeData'][$currentPtItemId];
|
|
|
- foreach($myTreeData as $treeItem) {
|
|
|
+ foreach ($myTreeData as $treeItem) {
|
|
|
$treeNum = $treeItem['num'] ?? 0;
|
|
|
$treeParams = [
|
|
|
'orderSn' => $orderSn,
|