|
|
@@ -16,7 +16,9 @@ use bizHd\goods\classes\GoodsUseCaseClass;
|
|
|
use bizHd\goods\classes\KindClass;
|
|
|
use bizHd\goods\classes\UseCaseClass;
|
|
|
use bizHd\homePageConfig\classes\HomePageConfigClass;
|
|
|
+use bizHd\homePageConfig\classes\HomePageModuleClass;
|
|
|
use bizHd\homePageConfig\classes\HomePageModuleConfigClass;
|
|
|
+use bizHd\item\classes\ItemClassClass;
|
|
|
use bizHd\seckill\classes\SeckillActivityClass;
|
|
|
use bizHd\seckill\classes\SeckillGoodsClass;
|
|
|
use Yii;
|
|
|
@@ -61,7 +63,8 @@ class ShopTemplateClass extends BaseClass
|
|
|
self::copyUseCaseRelations($tplMainId, $newShop, $goodsMap, $useCaseMap);
|
|
|
$activityMap = self::copySeckillActivities($tplMainId, $tplShopId, $newShop);
|
|
|
self::copySeckillGoods($tplMainId, $tplShopId, $newShop, $activityMap, $goodsMap);
|
|
|
- self::copyHomePageConfig($tplShopId, $newShop, $goodsMap, $categoryMap, $useCaseMap);
|
|
|
+ $itemClassMap = self::buildItemClassMap($tplMainId, $newMainId);
|
|
|
+ self::copyHomePageConfig($tplShopId, $newShop, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap);
|
|
|
$transaction->commit();
|
|
|
return true;
|
|
|
} catch (\Throwable $e) {
|
|
|
@@ -157,6 +160,34 @@ class ShopTemplateClass extends BaseClass
|
|
|
return $map;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 按分类名称把模板店花材分类映射到新店已初始化的花材分类
|
|
|
+ * @param int $tplMainId
|
|
|
+ * @param int $newMainId
|
|
|
+ * @return array 旧花材分类id => 新花材分类id
|
|
|
+ */
|
|
|
+ protected static function buildItemClassMap($tplMainId, $newMainId)
|
|
|
+ {
|
|
|
+ $map = [];
|
|
|
+ $oldList = ItemClassClass::getAllByCondition(['mainId' => $tplMainId], null, 'id,name');
|
|
|
+ $newList = ItemClassClass::getAllByCondition(['mainId' => $newMainId], null, 'id,name');
|
|
|
+ $newByName = [];
|
|
|
+ foreach ($newList as $item) {
|
|
|
+ $name = trim(strval($item['name'] ?? ''));
|
|
|
+ if ($name !== '') {
|
|
|
+ $newByName[$name] = intval($item['id'] ?? 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach ($oldList as $item) {
|
|
|
+ $name = trim(strval($item['name'] ?? ''));
|
|
|
+ $oldId = intval($item['id'] ?? 0);
|
|
|
+ if ($oldId > 0 && isset($newByName[$name]) && $newByName[$name] > 0) {
|
|
|
+ $map[$oldId] = $newByName[$name];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $map;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 复制商品:先主记录再子规格,销量清零,masterId/kindId 按映射重写
|
|
|
* 商品按 mainId 归属,xhGoods 没有 shopId,不能按门店过滤
|
|
|
@@ -373,15 +404,16 @@ class ShopTemplateClass extends BaseClass
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 复制首页模块配置,并把 JSON 里引用的商品/分类/场景 ID 换成新店 ID
|
|
|
+ * 复制首页模块配置,并把 JSON 里引用的商品/分类/场景/花材分类 ID 换成新店 ID
|
|
|
* @param int $tplShopId
|
|
|
* @param array $newShop
|
|
|
* @param array $goodsMap
|
|
|
* @param array $categoryMap
|
|
|
* @param array $useCaseMap
|
|
|
+ * @param array $itemClassMap
|
|
|
* @return void
|
|
|
*/
|
|
|
- protected static function copyHomePageConfig($tplShopId, $newShop, $goodsMap, $categoryMap, $useCaseMap)
|
|
|
+ protected static function copyHomePageConfig($tplShopId, $newShop, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap)
|
|
|
{
|
|
|
$list = HomePageModuleConfigClass::getAllByCondition(['shopId' => $tplShopId], 'id ASC');
|
|
|
if (empty($list)) {
|
|
|
@@ -396,7 +428,7 @@ class ShopTemplateClass extends BaseClass
|
|
|
if (!is_array($payload)) {
|
|
|
$payload = [];
|
|
|
}
|
|
|
- $payload = self::remapHomePagePayload($moduleKey, $payload, $goodsMap, $categoryMap, $useCaseMap);
|
|
|
+ $payload = self::remapHomePagePayload($moduleKey, $payload, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap);
|
|
|
HomePageModuleConfigClass::saveConfigValue($newShop['mainId'], $newShop['shopId'], $moduleKey, $payload);
|
|
|
}
|
|
|
}
|
|
|
@@ -409,9 +441,10 @@ class ShopTemplateClass extends BaseClass
|
|
|
* @param array $goodsMap
|
|
|
* @param array $categoryMap
|
|
|
* @param array $useCaseMap
|
|
|
+ * @param array $itemClassMap
|
|
|
* @return array
|
|
|
*/
|
|
|
- protected static function remapHomePagePayload($moduleKey, $payload, $goodsMap, $categoryMap, $useCaseMap)
|
|
|
+ protected static function remapHomePagePayload($moduleKey, $payload, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap)
|
|
|
{
|
|
|
if ($moduleKey === 'banner' || $moduleKey === 'navGrid') {
|
|
|
if (empty($payload['list']) || !is_array($payload['list'])) {
|
|
|
@@ -423,14 +456,14 @@ class ShopTemplateClass extends BaseClass
|
|
|
}
|
|
|
$type = intval($item['type'] ?? 0);
|
|
|
$value = strval($item['value'] ?? '');
|
|
|
- $payload['list'][$index]['value'] = self::remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap);
|
|
|
+ $payload['list'][$index]['value'] = self::remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap);
|
|
|
}
|
|
|
return $payload;
|
|
|
}
|
|
|
if (in_array($moduleKey, ['hot', 'new', 'pullGoods'], true)) {
|
|
|
$type = intval($payload['type'] ?? 0);
|
|
|
$value = strval($payload['value'] ?? '');
|
|
|
- $payload['value'] = self::remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap);
|
|
|
+ $payload['value'] = self::remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap);
|
|
|
return $payload;
|
|
|
}
|
|
|
return $payload;
|
|
|
@@ -438,15 +471,16 @@ class ShopTemplateClass extends BaseClass
|
|
|
|
|
|
/**
|
|
|
* 把关联配置的 value(单个 ID 或逗号拼接)按 type 映射到新店
|
|
|
- * type:2 商品、3 分类、4 使用场景;未映射到的 ID 丢弃,避免新店引用模板店数据
|
|
|
+ * type:2 商品、3 分类、4 使用场景、5 花材分类;未映射到的 ID 丢弃,避免新店引用模板店数据
|
|
|
* @param int $type
|
|
|
* @param string $value
|
|
|
* @param array $goodsMap
|
|
|
* @param array $categoryMap
|
|
|
* @param array $useCaseMap
|
|
|
+ * @param array $itemClassMap
|
|
|
* @return string
|
|
|
*/
|
|
|
- protected static function remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap)
|
|
|
+ protected static function remapLinkedValue($type, $value, $goodsMap, $categoryMap, $useCaseMap, $itemClassMap)
|
|
|
{
|
|
|
$map = [];
|
|
|
if ($type === HomePageConfigClass::BANNER_TYPE_GOODS) {
|
|
|
@@ -455,6 +489,8 @@ class ShopTemplateClass extends BaseClass
|
|
|
$map = $categoryMap;
|
|
|
} elseif ($type === HomePageConfigClass::BANNER_TYPE_USE_CASE) {
|
|
|
$map = $useCaseMap;
|
|
|
+ } elseif ($type === HomePageModuleClass::LINK_ITEM_CLASS) {
|
|
|
+ $map = $itemClassMap;
|
|
|
} else {
|
|
|
return $value;
|
|
|
}
|