refactor(product-model-params): 优化复制数据逻辑
- 修改ProductModelController中查询逻辑,使用batchNumber代替parentId和name进行过滤 - 移除ProductModelParamsItemMapper中未使用的getForQuotation方法及对应XML配置 - 更新ProductModelParamsMapper的getAllListByLanguage方法SQL,改为多表连接查询,支持语言过滤 - 删除ProductModelParamsMapper的copyItems声明和XML,实现由服务层自定义复制逻辑 - 实现ProductModelParamsServiceImpl中copyItems方法,完整复制旧版本数据和语言表,构建父子节点映射,保证数据一致性
This commit is contained in:
parent
fa133ab4ce
commit
ca727bacb9
|
|
@ -379,6 +379,7 @@ public class ProductModelController extends ControllerBase {
|
|||
&& productModelParamsDataService.lambdaQuery()
|
||||
.eq(ProductModelParamsData::getParamsId, request.getModelParamsId())
|
||||
.eq(ProductModelParamsData::getParentId, 0)
|
||||
.ne(ProductModelParamsData::getName, request.getIndexName())
|
||||
.eq(ProductModelParamsData::getName, request.getNewIndexName())
|
||||
.exists()
|
||||
).throwMessage("指标名称已存在");
|
||||
|
|
@ -517,11 +518,10 @@ public class ProductModelController extends ControllerBase {
|
|||
Integer oldId = request.getModelParamsId();
|
||||
request.setModelParamsId(productModelParamsService.add(info.getModelId(), info.getBatchNumber()));
|
||||
productModelParamsService.copyItems(oldId, request.getModelParamsId());
|
||||
// 在新版本中找到对应的数据记录
|
||||
// 在新版本中通过 batchNumber 找到对应的数据记录
|
||||
ProductModelParamsData newData = productModelParamsDataService.lambdaQuery()
|
||||
.eq(ProductModelParamsData::getParamsId, request.getModelParamsId())
|
||||
.eq(ProductModelParamsData::getParentId, currentData.getParentId())
|
||||
.eq(ProductModelParamsData::getName, currentData.getName())
|
||||
.eq(ProductModelParamsData::getBatchNumber, currentData.getBatchNumber())
|
||||
.one();
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(newData)).throwMessage("修改失败");
|
||||
dataId = newData.getId();
|
||||
|
|
@ -604,11 +604,10 @@ public class ProductModelController extends ControllerBase {
|
|||
Integer oldId = request.getModelParamsId();
|
||||
request.setModelParamsId(productModelParamsService.add(request.getModelId(), info.getBatchNumber()));
|
||||
productModelParamsService.copyItems(oldId, request.getModelParamsId());
|
||||
// 在新版本中找到对应的数据记录
|
||||
// 在新版本中通过 batchNumber 找到对应的数据记录
|
||||
ProductModelParamsData newData = productModelParamsDataService.lambdaQuery()
|
||||
.eq(ProductModelParamsData::getParamsId, request.getModelParamsId())
|
||||
.eq(ProductModelParamsData::getParentId, currentData.getParentId())
|
||||
.eq(ProductModelParamsData::getName, currentData.getName())
|
||||
.eq(ProductModelParamsData::getBatchNumber, currentData.getBatchNumber())
|
||||
.one();
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(newData)).throwMessage("删除失败");
|
||||
dataId = newData.getId();
|
||||
|
|
|
|||
|
|
@ -15,5 +15,4 @@ import java.util.List;
|
|||
*/
|
||||
public interface ProductModelParamsItemMapper extends BaseMapper<ProductModelParamsItem> {
|
||||
|
||||
List<ProductModelParamsItem> getForQuotation(Long configId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@ public interface ProductModelParamsMapper extends BaseMapper<ProductModelParams>
|
|||
|
||||
List<ProductModelParamVO> getAllListByLanguage(Integer modelId, String language);
|
||||
|
||||
void copyItems(Integer oldId, Integer newId);
|
||||
|
||||
List<ProductParamsItemVO> getMainListByLanguage(Integer modelId, String language);
|
||||
|
||||
List<ParamsSortListVO> getMainListForSort(Integer paramId, String language);
|
||||
|
|
|
|||
|
|
@ -202,7 +202,58 @@ public class ProductModelParamsServiceImpl extends ServiceImpl<ProductModelParam
|
|||
|
||||
@Override
|
||||
public void copyItems(Integer oldId, Integer newId) {
|
||||
baseMapper.copyItems(oldId,newId);
|
||||
// 查出旧版本所有数据
|
||||
List<ProductModelParamsData> allData = productModelParamsDataService.lambdaQuery()
|
||||
.eq(ProductModelParamsData::getParamsId, oldId)
|
||||
.list();
|
||||
if (CollectionUtil.isEmpty(allData)) {
|
||||
return;
|
||||
}
|
||||
// 分离父节点和子节点
|
||||
List<ProductModelParamsData> parents = allData.stream()
|
||||
.filter(d -> Objects.equals(d.getParentId(), 0L))
|
||||
.collect(Collectors.toList());
|
||||
List<ProductModelParamsData> children = allData.stream()
|
||||
.filter(d -> !Objects.equals(d.getParentId(), 0L))
|
||||
.collect(Collectors.toList());
|
||||
// oldParentId -> newParentId 映射
|
||||
Map<Long, Long> parentIdMapping = new HashMap<>();
|
||||
// oldDataId -> newDataId 映射(用于语言表)
|
||||
Map<Long, Long> dataIdMapping = new HashMap<>();
|
||||
// 复制父节点
|
||||
for (ProductModelParamsData parent : parents) {
|
||||
Long oldParentDataId = parent.getId();
|
||||
parent.setId(null);
|
||||
parent.setParamsId(Long.valueOf(newId));
|
||||
productModelParamsDataService.save(parent);
|
||||
parentIdMapping.put(oldParentDataId, parent.getId());
|
||||
dataIdMapping.put(oldParentDataId, parent.getId());
|
||||
}
|
||||
// 复制子节点,重映射 parentId
|
||||
for (ProductModelParamsData child : children) {
|
||||
Long oldChildDataId = child.getId();
|
||||
Long newParentId2 = parentIdMapping.get(child.getParentId());
|
||||
child.setId(null);
|
||||
child.setParamsId(Long.valueOf(newId));
|
||||
child.setParentId(newParentId2 != null ? newParentId2 : child.getParentId());
|
||||
productModelParamsDataService.save(child);
|
||||
dataIdMapping.put(oldChildDataId, child.getId());
|
||||
}
|
||||
// 复制语言表数据
|
||||
List<Long> oldDataIds = new ArrayList<>(dataIdMapping.keySet());
|
||||
if (CollectionUtil.isNotEmpty(oldDataIds)) {
|
||||
List<ProductModelParamsDataLanguage> langList = productModelParamsDataLanguageService.lambdaQuery()
|
||||
.in(ProductModelParamsDataLanguage::getParamsDataId, oldDataIds)
|
||||
.list();
|
||||
if (CollectionUtil.isNotEmpty(langList)) {
|
||||
langList.forEach(lang -> {
|
||||
lang.setId(null);
|
||||
lang.setParamsId(Long.valueOf(newId));
|
||||
lang.setParamsDataId(dataIdMapping.get(lang.getParamsDataId()));
|
||||
});
|
||||
productModelParamsDataLanguageService.saveBatch(langList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -2,12 +2,4 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.ProductModelParamsItemMapper">
|
||||
|
||||
<select id="getForQuotation" resultType="com.nflg.mobilebroken.repository.entity.ProductModelParamsItem">
|
||||
SELECT pmpi.batch_number,pmpi.language_code,pmpi.index_name,pmpi.`name`,pmpi.`value`
|
||||
FROM quotation_model_config qmc
|
||||
INNER JOIN product_model pm ON qmc.model_id=pm.batch_number AND pm.state=1
|
||||
INNER JOIN product_model_params pmp ON pm.id=pmp.model_id AND pmp.state=1
|
||||
INNER JOIN product_model_params_item pmpi ON pmp.id=pmpi.model_params_id
|
||||
WHERE qmc.id=#{configId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -3,20 +3,16 @@
|
|||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.ProductModelParamsMapper">
|
||||
|
||||
<select id="getAllListByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductModelParamVO">
|
||||
SELECT pmpi.index_name, pmpi.`name`, pmpi.`value`
|
||||
SELECT pmpd1.name as index_name, pmpd2.`name`, pmpd2.`value`
|
||||
FROM product_model_params pmp
|
||||
INNER JOIN product_model_params_item pmpi ON pmp.id = pmpi.model_params_id
|
||||
WHERE pmp.model_id = #{modelId}
|
||||
AND pmp.state = 1
|
||||
AND pmpi.language_code = #{language}
|
||||
ORDER BY pmp.id DESC
|
||||
</select>
|
||||
|
||||
<select id="copyItems">
|
||||
INSERT INTO product_model_params_item(model_params_id,language_code,index_name,batch_number,`name`,`value`,main,compare,create_by,create_time,update_by,update_time)
|
||||
SELECT #{newId},language_code,index_name,batch_number,`name`,`value`,main,compare,create_by,create_time,update_by,update_time
|
||||
FROM product_model_params_item
|
||||
WHERE model_params_id=#{oldId}
|
||||
INNER JOIN product_model_params_data pmpd1 ON pmp.id = pmpd1.params_id
|
||||
INNER JOIN product_model_params_data pmpd2 ON pmpd1.id = pmpd2.parent_id
|
||||
INNER JOIN product_model_params_data_language pmpdl1 ON pmpd1.id = pmpdl1.params_data_id
|
||||
INNER JOIN product_model_params_data_language pmpdl2 ON pmpd2.id = pmpdl2.params_data_id
|
||||
INNER JOIN language l1 ON pmpdl1.language_id = l1.id
|
||||
INNER JOIN language l2 ON pmpdl2.language_id = l2.id
|
||||
WHERE pmp.model_id = #{modelId} AND pmp.state = 1 AND l1.code = #{language} AND l2.code = #{language}
|
||||
ORDER BY pmpd1.id,pmpd2.id
|
||||
</select>
|
||||
|
||||
<select id="getMainListByLanguage" resultType="com.nflg.mobilebroken.common.pojo.vo.ProductParamsItemVO">
|
||||
|
|
|
|||
Loading…
Reference in New Issue