|
@@ -73,6 +73,8 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
|
|
|
private final ProductCustomizationMapper customizationMapper;
|
|
private final ProductCustomizationMapper customizationMapper;
|
|
|
//产品分类Mapper
|
|
//产品分类Mapper
|
|
|
private final ProductCategoryMapper categoryMapper;
|
|
private final ProductCategoryMapper categoryMapper;
|
|
|
|
|
+ //获取分类绑定的商品
|
|
|
|
|
+ private final ProductCategoryBindingMapper productCategoryBindingMapper;
|
|
|
//品牌信息
|
|
//品牌信息
|
|
|
private final ProductBrandMapper brandMapper;
|
|
private final ProductBrandMapper brandMapper;
|
|
|
//单位信息
|
|
//单位信息
|
|
@@ -98,6 +100,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
|
|
|
private final ProductProgramLinkMapper productProgramLinkMapper;
|
|
private final ProductProgramLinkMapper productProgramLinkMapper;
|
|
|
private final ProductGiftCategoryMapper productGiftCategoryMapper;
|
|
private final ProductGiftCategoryMapper productGiftCategoryMapper;
|
|
|
private final ProductSpecialLinkMapper productSpecialLinkMapper;
|
|
private final ProductSpecialLinkMapper productSpecialLinkMapper;
|
|
|
|
|
+ private final ClientSiteMapper clientSiteMapper ;
|
|
|
private final ClientSiteProductMapper clientSiteProductMapper;
|
|
private final ClientSiteProductMapper clientSiteProductMapper;
|
|
|
private final ClientSiteFloorLinkMapper clientSiteFloorLinkMapper;
|
|
private final ClientSiteFloorLinkMapper clientSiteFloorLinkMapper;
|
|
|
private final ProductSelfMapper productSelfMapper;
|
|
private final ProductSelfMapper productSelfMapper;
|
|
@@ -411,7 +414,7 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
|
|
|
log.info("执行数据库降级查询...");
|
|
log.info("执行数据库降级查询...");
|
|
|
|
|
|
|
|
LambdaQueryWrapper<ProductBase> lqw = buildQueryWrapper(bo);
|
|
LambdaQueryWrapper<ProductBase> lqw = buildQueryWrapper(bo);
|
|
|
- Page<ProductBaseVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
|
|
|
+// Page<ProductBaseVo> page = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
|
|
|
|
// log.info("数据库查询完成,总记录数: {}", page.getTotal());
|
|
// log.info("数据库查询完成,总记录数: {}", page.getTotal());
|
|
|
return TableDataInfo.build();
|
|
return TableDataInfo.build();
|
|
@@ -1510,72 +1513,189 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public TableDataInfo<PcProductVo> getPcProductPage(PcProductBo bo, PageQuery pageQuery) {
|
|
public TableDataInfo<PcProductVo> getPcProductPage(PcProductBo bo, PageQuery pageQuery) {
|
|
|
- QueryWrapper<ProductBase> lqw = Wrappers.query(ProductBase.class);
|
|
|
|
|
- if(ObjectUtil.isNotEmpty( bo.getIds())){
|
|
|
|
|
- lqw.in("b.id", bo.getIds().split(","));
|
|
|
|
|
- }
|
|
|
|
|
- if (ObjectUtil.isNotEmpty(bo.getBrandIds())){
|
|
|
|
|
- lqw.in("b.brand_id", bo.getBrandIds().split(","));
|
|
|
|
|
- }
|
|
|
|
|
- if (ObjectUtil.isNotEmpty(bo.getCategoryIds())){
|
|
|
|
|
- lqw.in("b.bottom_category_id", bo.getCategoryIds().split(","));
|
|
|
|
|
- }
|
|
|
|
|
- lqw.ge(ObjectUtil.isNotEmpty(pageQuery.getFirstSeenId()) && pageQuery.getWay() == 0,"b.id", pageQuery.getFirstSeenId());
|
|
|
|
|
- lqw.gt(ObjectUtil.isNotEmpty(pageQuery.getLastSeenId()) && pageQuery.getWay() == 1,"b.id", pageQuery.getLastSeenId());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getIsSelf()), "b.is_self", bo.getIsSelf());
|
|
|
|
|
-// lqw.eq("b.product_status", 1);
|
|
|
|
|
- lqw.and(ObjectUtil.isNotEmpty(bo.getSearchKeyword())
|
|
|
|
|
- , (queryWrapper) -> queryWrapper.and(qw ->
|
|
|
|
|
- qw.like("b.item_name", bo.getSearchKeyword())
|
|
|
|
|
- .or().like("tc.category_name", bo.getSearchKeyword())
|
|
|
|
|
- .or().like("mc.category_name", bo.getSearchKeyword())
|
|
|
|
|
- .or().like("bc.category_name", bo.getSearchKeyword())
|
|
|
|
|
- .or().like("br.brand_name", bo.getSearchKeyword())
|
|
|
|
|
- )
|
|
|
|
|
- );
|
|
|
|
|
- lqw.like(StringUtils.isNotBlank(bo.getProductNo()), "b.product_no", bo.getProductNo());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getBrandId()), "b.brand_id", bo.getBrandId());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getTopCategoryId()), "b.top_category_id", bo.getTopCategoryId());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getMediumCategoryId()), "b.medium_category_id", bo.getMediumCategoryId());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getBottomCategoryId()), "b.bottom_category_id", bo.getBottomCategoryId());
|
|
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(bo.getIsCustomize()), "e.is_customize", bo.getIsCustomize());
|
|
|
|
|
- if(bo.getPriceRange() != null){
|
|
|
|
|
- //价格区间 1:1-100 2:100-500 3:500-1000 4:1000以上
|
|
|
|
|
- switch (bo.getPriceRange()) {
|
|
|
|
|
- case "1":
|
|
|
|
|
- lqw.between("p.market_price", 1, 100);
|
|
|
|
|
- case "2":
|
|
|
|
|
- lqw.between("p.market_price", 100, 500);
|
|
|
|
|
- case "3":
|
|
|
|
|
- lqw.between("p.market_price", 500, 1000);
|
|
|
|
|
- case "4":
|
|
|
|
|
- lqw.ge("p.market_price", 1000);
|
|
|
|
|
|
|
+ //获取当前登录用户的商品池
|
|
|
|
|
+ List<Long> productIds = new ArrayList<>();
|
|
|
|
|
+ Map<Long, BigDecimal> agreementPriceMap = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ //是否是大客户
|
|
|
|
|
+ if(ObjectUtil.isNotEmpty(LoginHelper.getLoginUser().getCustomerId())) {
|
|
|
|
|
+ ClientSiteVo clientSiteVo = clientSiteMapper.selectVoOne(Wrappers.lambdaQuery(ClientSite.class)
|
|
|
|
|
+ .eq(ClientSite::getClientId, LoginHelper.getLoginUser().getCustomerId())
|
|
|
|
|
+ .orderByDesc(ClientSite::getCreateTime)
|
|
|
|
|
+ .last("limit 1")
|
|
|
|
|
+ );
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(clientSiteVo)) {
|
|
|
|
|
+ Long isDiy = clientSiteVo.getIsDiy();
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(isDiy) && isDiy == 1) {
|
|
|
|
|
+ //获取协议商品池商品
|
|
|
|
|
+ List<ProtocolProducts> protocolProducts = protocolProductsMapper.selectList(Wrappers.lambdaQuery(ProtocolProducts.class)
|
|
|
|
|
+ .eq(ProtocolProducts::getCustomerId, LoginHelper.getLoginUser().getCustomerId())
|
|
|
|
|
+ .eq(ProtocolProducts::getAuditStatus, 2)
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isNotEmpty(protocolProducts)) {
|
|
|
|
|
+ agreementPriceMap = protocolProducts.stream().collect(Collectors.toMap(ProtocolProducts::getProductId, ProtocolProducts::getAgreementPrice));
|
|
|
|
|
+ productIds = protocolProducts.stream().map(ProtocolProducts::getProductId).toList();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- if(bo.getSortField() != null && bo.getSortOrder() != null){
|
|
|
|
|
- String[] sortFields = bo.getSortField().split(",");
|
|
|
|
|
- String[] sortOrders = bo.getSortOrder().split(",");
|
|
|
|
|
- for (int i = 0; i < sortFields.length; i++) {
|
|
|
|
|
- switch (sortFields[i]) {
|
|
|
|
|
- case "1":
|
|
|
|
|
- lqw.orderBy( true, sortOrders[i].equals("Asc"),"b.id");
|
|
|
|
|
- case "2":
|
|
|
|
|
- lqw.orderBy( true, sortOrders[i].equals("Asc"),"p.total_inventory");
|
|
|
|
|
- case "3":
|
|
|
|
|
- lqw.orderBy( true, sortOrders[i].equals("Asc"),"p.market_price");
|
|
|
|
|
|
|
+ }else {
|
|
|
|
|
+ //获取企业的商品池商品
|
|
|
|
|
+ if(Objects.equals(LoginHelper.getLoginUser().getUserSonType(),"3")) {
|
|
|
|
|
+ List<ClientSiteProduct> clientSiteProducts = clientSiteProductMapper.selectList();
|
|
|
|
|
+ if (CollUtil.isNotEmpty(clientSiteProducts)) {
|
|
|
|
|
+ productIds = clientSiteProducts.stream().map(ClientSiteProduct::getProductId).toList();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// //是否是企业购
|
|
|
|
|
+// QueryWrapper<ProductBase> lqw = Wrappers.query(ProductBase.class);
|
|
|
|
|
+// if(Objects.equals(LoginHelper.getLoginUser().getUserSonType(),"3")){
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(productIds) ){
|
|
|
|
|
+// lqw.in("b.id", productIds);
|
|
|
|
|
+// }else {
|
|
|
|
|
+// lqw.isNull("b.id");
|
|
|
|
|
+// }
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(bo.getTopCategoryId())){
|
|
|
|
|
+// //获取分类绑定的商品
|
|
|
|
|
+// List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+// .eq(ProductCategoryBinding::getTopCategoryId, bo.getTopCategoryId())
|
|
|
|
|
+// );
|
|
|
|
|
+// if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+// lqw.in("b.id", productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+// }else {
|
|
|
|
|
+// lqw.isNull("b.id");
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(bo.getMediumCategoryId())){
|
|
|
|
|
+// //获取分类绑定的商品
|
|
|
|
|
+// List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+// .eq(ProductCategoryBinding::getMediumCategoryId, bo.getMediumCategoryId())
|
|
|
|
|
+// );
|
|
|
|
|
+// if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+// lqw.in("b.id", productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+// }else {
|
|
|
|
|
+// lqw.isNull("b.id");
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(bo.getBottomCategoryId())){
|
|
|
|
|
+// //获取分类绑定的商品
|
|
|
|
|
+// List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+// .eq(ProductCategoryBinding::getBottomCategoryId, bo.getBottomCategoryId())
|
|
|
|
|
+// );
|
|
|
|
|
+// if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+// lqw.in("b.id", productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+// }else {
|
|
|
|
|
+// lqw.isNull("b.id");
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// if(ObjectUtil.isNotEmpty( bo.getIds())){
|
|
|
|
|
+// lqw.in("b.id", bo.getIds().split(","));
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(bo.getBrandIds())){
|
|
|
|
|
+// lqw.in("b.brand_id", bo.getBrandIds().split(","));
|
|
|
|
|
+// }
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(bo.getCategoryIds())){
|
|
|
|
|
+// lqw.in("b.bottom_category_id", bo.getCategoryIds().split(","));
|
|
|
|
|
+// }
|
|
|
|
|
+// lqw.ge(ObjectUtil.isNotEmpty(pageQuery.getFirstSeenId()) && pageQuery.getWay() == 0,"b.id", pageQuery.getFirstSeenId());
|
|
|
|
|
+// lqw.gt(ObjectUtil.isNotEmpty(pageQuery.getLastSeenId()) && pageQuery.getWay() == 1,"b.id", pageQuery.getLastSeenId());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getIsSelf()), "b.is_self", bo.getIsSelf());
|
|
|
|
|
+//// lqw.eq("b.product_status", 1);
|
|
|
|
|
+// lqw.and(ObjectUtil.isNotEmpty(bo.getSearchKeyword())
|
|
|
|
|
+// , (queryWrapper) -> queryWrapper.and(qw ->
|
|
|
|
|
+// qw.like("b.item_name", bo.getSearchKeyword())
|
|
|
|
|
+// .or().like("tc.category_name", bo.getSearchKeyword())
|
|
|
|
|
+// .or().like("mc.category_name", bo.getSearchKeyword())
|
|
|
|
|
+// .or().like("bc.category_name", bo.getSearchKeyword())
|
|
|
|
|
+// .or().like("br.brand_name", bo.getSearchKeyword())
|
|
|
|
|
+// )
|
|
|
|
|
+// );
|
|
|
|
|
+// lqw.like(StringUtils.isNotBlank(bo.getProductNo()), "b.product_no", bo.getProductNo());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getBrandId()), "b.brand_id", bo.getBrandId());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getTopCategoryId()), "b.top_category_id", bo.getTopCategoryId());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getMediumCategoryId()), "b.medium_category_id", bo.getMediumCategoryId());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getBottomCategoryId()), "b.bottom_category_id", bo.getBottomCategoryId());
|
|
|
|
|
+// lqw.eq(ObjectUtil.isNotEmpty(bo.getIsCustomize()), "e.is_customize", bo.getIsCustomize());
|
|
|
|
|
+// if(bo.getPriceRange() != null){
|
|
|
|
|
+// //价格区间 1:1-100 2:100-500 3:500-1000 4:1000以上
|
|
|
|
|
+// switch (bo.getPriceRange()) {
|
|
|
|
|
+// case "1":
|
|
|
|
|
+// lqw.between("p.market_price", 1, 100);
|
|
|
|
|
+// case "2":
|
|
|
|
|
+// lqw.between("p.market_price", 100, 500);
|
|
|
|
|
+// case "3":
|
|
|
|
|
+// lqw.between("p.market_price", 500, 1000);
|
|
|
|
|
+// case "4":
|
|
|
|
|
+// lqw.ge("p.market_price", 1000);
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// if(bo.getSortField() != null && bo.getSortOrder() != null){
|
|
|
|
|
+// String[] sortFields = bo.getSortField().split(",");
|
|
|
|
|
+// String[] sortOrders = bo.getSortOrder().split(",");
|
|
|
|
|
+// for (int i = 0; i < sortFields.length; i++) {
|
|
|
|
|
+// switch (sortFields[i]) {
|
|
|
|
|
+// case "1":
|
|
|
|
|
+// lqw.orderBy( true, sortOrders[i].equals("Asc"),"b.id");
|
|
|
|
|
+// case "2":
|
|
|
|
|
+// lqw.orderBy( true, sortOrders[i].equals("Asc"),"p.total_inventory");
|
|
|
|
|
+// case "3":
|
|
|
|
|
+// lqw.orderBy( true, sortOrders[i].equals("Asc"),"p.market_price");
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
// 使用ES分页查询
|
|
// 使用ES分页查询
|
|
|
try {
|
|
try {
|
|
|
LambdaEsQueryWrapper<ProductBaseVo> esQueryWrapper = buildEsQueryWrapperForPc(bo);
|
|
LambdaEsQueryWrapper<ProductBaseVo> esQueryWrapper = buildEsQueryWrapperForPc(bo);
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if(Objects.equals(LoginHelper.getLoginUser().getUserSonType(),"3")){
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(productIds) ){
|
|
|
|
|
+ esQueryWrapper.in(ProductBaseVo::getId, productIds);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ esQueryWrapper.eq(ProductBaseVo::getId, 0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(bo.getTopCategoryId())){
|
|
|
|
|
+ //获取分类绑定的商品
|
|
|
|
|
+ List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+ .eq(ProductCategoryBinding::getTopCategoryId, bo.getTopCategoryId())
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+ esQueryWrapper.in(ProductBaseVo::getId, productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+ }else {
|
|
|
|
|
+ esQueryWrapper.eq(ProductBaseVo::getId, 0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(bo.getMediumCategoryId())){
|
|
|
|
|
+ //获取分类绑定的商品
|
|
|
|
|
+ List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+ .eq(ProductCategoryBinding::getMediumCategoryId, bo.getMediumCategoryId())
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+ esQueryWrapper.in(ProductBaseVo::getId, productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+ }else {
|
|
|
|
|
+ esQueryWrapper.eq(ProductBaseVo::getId, 0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(bo.getBottomCategoryId())){
|
|
|
|
|
+ //获取分类绑定的商品
|
|
|
|
|
+ List<ProductCategoryBinding> productCategoryBindings = productCategoryBindingMapper.selectList(Wrappers.lambdaQuery(ProductCategoryBinding.class)
|
|
|
|
|
+ .eq(ProductCategoryBinding::getBottomCategoryId, bo.getBottomCategoryId())
|
|
|
|
|
+ );
|
|
|
|
|
+ if (CollUtil.isNotEmpty(productCategoryBindings)) {
|
|
|
|
|
+ esQueryWrapper.in(ProductBaseVo::getId, productCategoryBindings.stream().map(ProductCategoryBinding::getProductId).toList());
|
|
|
|
|
+ }else {
|
|
|
|
|
+ esQueryWrapper.eq(ProductBaseVo::getId, 0L);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
// 检查ES索引是否存在
|
|
// 检查ES索引是否存在
|
|
|
if (!esMapper.existsIndex("productbasevo")) {
|
|
if (!esMapper.existsIndex("productbasevo")) {
|
|
|
log.warn("ES索引 [productbasevo] 不存在,降级到数据库查询");
|
|
log.warn("ES索引 [productbasevo] 不存在,降级到数据库查询");
|
|
|
- return fallbackPcProductQuery(bo, pageQuery, lqw);
|
|
|
|
|
|
|
+// return fallbackPcProductQuery(bo, pageQuery, lqw);
|
|
|
|
|
+ return TableDataInfo.build();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
EsPageInfo<ProductBaseVo> esPageInfo = esMapper.pageQuery(esQueryWrapper, pageQuery.getPageNum(), pageQuery.getPageSize());
|
|
EsPageInfo<ProductBaseVo> esPageInfo = esMapper.pageQuery(esQueryWrapper, pageQuery.getPageNum(), pageQuery.getPageSize());
|
|
@@ -1588,7 +1708,8 @@ public class ProductBaseServiceImpl extends ServiceImpl<ProductBaseMapper, Produ
|
|
|
}
|
|
}
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("ES查询PC端商品列表失败,降级到数据库查询: {}", e.getMessage(), e);
|
|
log.error("ES查询PC端商品列表失败,降级到数据库查询: {}", e.getMessage(), e);
|
|
|
- return fallbackPcProductQuery(bo, pageQuery, lqw);
|
|
|
|
|
|
|
+// return fallbackPcProductQuery(bo, pageQuery, lqw);
|
|
|
|
|
+ return TableDataInfo.build();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return TableDataInfo.build();
|
|
return TableDataInfo.build();
|