diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java new file mode 100644 index 000000000..6299cc186 --- /dev/null +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java @@ -0,0 +1,69 @@ +package com.czg.utils; + +import cn.hutool.core.util.StrUtil; +import com.mybatisflex.core.exception.FlexExceptions; +import com.mybatisflex.core.query.*; +import com.mybatisflex.core.table.TableInfo; +import com.mybatisflex.core.table.TableInfoFactory; +import com.mybatisflex.core.util.LambdaGetter; + +import java.io.Serializable; +import java.lang.invoke.SerializedLambda; +import java.lang.reflect.Method; + +import static com.mybatisflex.core.util.LambdaUtil.getFieldName; + + +/** + * 关联查询的queryWrapper + * @author Administrator + */ +public class JoinQueryWrapper extends QueryWrapper { + public JoinQueryWrapper() { + super(); + } + + private static SerializedLambda getSerializedLambda(Serializable getter) { + try { + Method method = getter.getClass().getDeclaredMethod("writeReplace"); + method.setAccessible(Boolean.TRUE); + return (SerializedLambda) method.invoke(getter); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static String getImplClassName(SerializedLambda lambda) { + String type = lambda.getInstantiatedMethodType(); + return type.substring(2, type.indexOf(";")); + } + + private static Class getImplClass0(SerializedLambda lambda) { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + String implClass = getImplClassName(lambda); + try { + return Class.forName(implClass.replace("/", "."), true, classLoader); + } catch (ClassNotFoundException e) { + throw FlexExceptions.wrap(e); + } + } + + public String getColum(LambdaGetter column) { + SerializedLambda lambda = getSerializedLambda(column); + Class entityClass = getImplClass0(lambda); + TableInfo tableInfo = TableInfoFactory.ofEntityClass(entityClass); + return tableInfo.getTableName() + "." + StrUtil.toUnderlineCase(getFieldName(column)); + } + + @Override + public JoinQueryWrapper eq(LambdaGetter column, Object value) { + eq(getColum(column), value); + return this; + } + + @Override + public JoinQueryWrapper orderBy(LambdaGetter column, Boolean asc) { + orderBy(getColum(column), asc); + return this; + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java index 68fd3e500..2fffcc28c 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java @@ -13,5 +13,5 @@ import com.mybatisflex.core.paginate.Page; */ public interface PadProductCategoryDetailMapper extends BaseMapper { Page selectPageByKeyAndShopId(); - Page selectPageByKeyAndShopId_COUNT(); + long selectPageByKeyAndShopId_COUNT(); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java index bf575329d..14d74513b 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java @@ -6,8 +6,11 @@ import com.czg.account.service.*; import com.czg.enums.StatusEnum; import com.czg.exception.ApiNotPrintException; import com.czg.service.account.mapper.PadProductCategoryDetailMapper; +import com.czg.utils.JoinQueryWrapper; import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryColumn; import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.util.LambdaUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -32,12 +35,17 @@ public class PadProdServiceImpl implements PadProdService { @Resource private PadProductCategoryDetailService padProductCategoryDetailService; + void main() { + LambdaUtil.getQueryColumn(SysUser::getId).getName(); +// new QueryWrapper().eq() + } @Override public Page pageInfo(Page objectPage, Long productCategoryId, Long shopId) { - QueryWrapper queryWrapper = new QueryWrapper().eq(PadProductCategoryDetail::getPadProductCategoryId, shopId); + JoinQueryWrapper queryWrapper = new JoinQueryWrapper().eq(PadProductCategory::getShopId, shopId); if (productCategoryId != null) { - queryWrapper.eq(PadProductCategoryDetail::getPadProductCategoryId, productCategoryId); + queryWrapper.eq(PadProductCategory::getId, productCategoryId); } + queryWrapper.orderBy(PadProductCategory::getSort, true).orderBy(PadProductCategory::getId, false); return padProductCategoryDetailMapper.xmlPaginate("selectPageByKeyAndShopId", objectPage, queryWrapper); } @@ -72,6 +80,7 @@ public class PadProdServiceImpl implements PadProdService { PadProductCategory padProductCategory = new PadProductCategory().setPadLayoutId(padDetailAddDTO.getPadLayoutId()).setProductCategoryId(padDetailAddDTO.getProductCategoryId()) .setShopId(shopId); + padProductCategory.setSort(0); padProductCategoryService.save(padProductCategory); ArrayList details = new ArrayList<>(); diff --git a/cash-service/account-service/src/main/resources/mapper/PadProductCategoryDetailMapper.xml b/cash-service/account-service/src/main/resources/mapper/PadProductCategoryDetailMapper.xml index d126b4720..839a0dcdd 100644 --- a/cash-service/account-service/src/main/resources/mapper/PadProductCategoryDetailMapper.xml +++ b/cash-service/account-service/src/main/resources/mapper/PadProductCategoryDetailMapper.xml @@ -20,7 +20,7 @@ ${qwSql} limit ${pageOffset}, ${pageSize} - SELECT count(1) FROM tb_pad_product_category LEFT JOIN tb_pad_product_category_detail