diff --git a/bonus-modules/bonus-smart-canteen/pom.xml b/bonus-modules/bonus-smart-canteen/pom.xml
index 79152b5d..51dee90d 100644
--- a/bonus-modules/bonus-smart-canteen/pom.xml
+++ b/bonus-modules/bonus-smart-canteen/pom.xml
@@ -19,7 +19,7 @@
         
             com.baomidou
             mybatis-plus-boot-starter
-            3.5.1
+            3.5.7
         
         
         
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/api/MgrAuthApi.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/api/MgrAuthApi.java
index 0a3185d4..f609a479 100644
--- a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/api/MgrAuthApi.java
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/api/MgrAuthApi.java
@@ -22,7 +22,6 @@ import com.bonus.canteen.core.auth.po.MgrUserAuthPO;
 import com.bonus.canteen.core.auth.role.MgrRoleTypeV2Enum;
 import com.bonus.canteen.core.auth.role.mapper.MgrRoleOrgMapper;
 import com.bonus.canteen.core.customer.dto.CustOrgTreeDTO;
-import com.bonus.canteen.core.customer.utils.SecureManager;
 import com.bonus.common.houqin.i18n.I18n;
 import com.bonus.common.security.utils.SecurityUtils;
 import com.bonus.system.api.model.LoginUser;
@@ -35,7 +34,6 @@ import org.springframework.util.CollectionUtils;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionHandler.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionHandler.java
new file mode 100644
index 00000000..605f0b19
--- /dev/null
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionHandler.java
@@ -0,0 +1,123 @@
+package com.bonus.canteen.core.auth.config;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.bonus.canteen.core.auth.enums.DataPermissionTypeEnum;
+import com.bonus.canteen.core.auth.enums.RoleCodeV2Enum;
+import com.bonus.common.core.exception.ServiceException;
+import com.bonus.common.security.utils.SecurityUtils;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.HexValue;
+import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
+import net.sf.jsqlparser.statement.select.PlainSelect;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+public class LeNiuDataPermissionHandler {
+   private static final Logger log = LoggerFactory.getLogger(LeNiuDataPermissionHandler.class);
+
+   public Expression getSqlSegment(PlainSelect plainSelect, String whereSegment){
+      try {
+         Expression where = plainSelect.getWhere();
+         String className = whereSegment.substring(0, whereSegment.lastIndexOf("."));
+         String methodName = whereSegment.substring(whereSegment.lastIndexOf(".") + 1);
+         Method[] methods = Class.forName(className).getMethods();
+         Method[] var7 = methods;
+         int var8 = methods.length;
+
+         for(int var9 = 0; var9 < var8; ++var9) {
+            Method m = var7[var9];
+            if (Objects.equals(m.getName(), methodName) || Objects.equals(m.getName() + "_COUNT", methodName)) {
+               LeNiuDataPermission.List permissionAnnotations = (LeNiuDataPermission.List)AnnotatedElementUtils.findMergedAnnotation(m, LeNiuDataPermission.List.class);
+               LeNiuDataPermission permissionAnnotation = (LeNiuDataPermission)AnnotatedElementUtils.findMergedAnnotation(m, LeNiuDataPermission.class);
+               if (permissionAnnotations == null && permissionAnnotation == null) {
+                  return where;
+               } else {
+                  Long userId = SecurityUtils.getUserId();
+                  String roleCode = (String)SecurityUtils.getLoginUser().getRoles().stream().findFirst().orElse(null);
+                  if (ObjectUtil.isEmpty(roleCode)) {
+                     return new HexValue(" 1 = 2 ");
+                  } else {
+                     if (permissionAnnotations != null) {
+                        LeNiuDataPermission[] var15 = permissionAnnotations.value();
+                        int var16 = var15.length;
+
+                        for(int var17 = 0; var17 < var16; ++var17) {
+                           LeNiuDataPermission permission = var15[var17];
+                           where = this.expressionLeNiuDataPermission(where, permission, userId, roleCode);
+                        }
+                     }
+
+                     if (permissionAnnotation != null) {
+                        where = this.expressionLeNiuDataPermission(where, permissionAnnotation, userId, roleCode);
+                     }
+
+                     return where;
+                  }
+               }
+            }
+         }
+
+         where = new HexValue(" 1 = 2 ");
+         return where;
+      } catch (Exception var19) {
+         log.error(var19.getMessage());
+         throw new ServiceException("系统异常");
+      }
+   }
+
+   private Expression expressionLeNiuDataPermission(Expression where, LeNiuDataPermission permission, Long userId, String roleCode) {
+      DataPermissionTypeEnum permissionType = permission.permissionType();
+      String alias = permission.alias();
+      String sql = this.getSqlByAliasAndPermissionType(userId, roleCode, permissionType, alias);
+      if (ObjectUtil.isNotEmpty(sql)) {
+         if (ObjectUtil.isNull(where)) {
+            where = new HexValue(sql);
+         } else {
+            where = new AndExpression((Expression)where, new HexValue(sql));
+         }
+      }
+
+      return (Expression)where;
+   }
+
+   private String getSqlByAliasAndPermissionType(Long userId, String roleCode, DataPermissionTypeEnum permissionType, String alias) {
+      StringBuilder sb = new StringBuilder();
+      if (roleCode.startsWith(RoleCodeV2Enum.ROLE_ADMIN.key())) {
+         if (roleCode.split("&&").length <= 1) {
+            return "";
+         }
+
+         if (!ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_AREA, permissionType)) {
+            return "";
+         }
+
+         sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_area it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("'").append(" AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".area_id = it1.data_id)");
+      } else if (roleCode.startsWith(RoleCodeV2Enum.ROLE_ORG.key())) {
+         if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_ORG, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_org it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("' AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".org_id = it1.org_id)");
+         }
+      } else if (roleCode.startsWith(RoleCodeV2Enum.ROLE_MERCHANT.key())) {
+         if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_CANTEEN, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_canteen it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("'").append(" AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".canteen_id = it1.data_id)");
+         } else if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_STALL, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_canteen it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("' AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".stall_id = it1.data_id)");
+         } else if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_CANTEEN_STALL, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_canteen it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("' AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND (").append(alias).append(".canteen_id = it1.data_id OR ").append(alias).append(".stall_id = it1.data_id ))");
+         } else if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_WAREHOUSE, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_warehouse it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("'").append(" AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".warehouse_id = it1.warehouse_id)");
+         } else if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_SUPERMARKET, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_canteen it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("'").append(" AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".supermarket_id = it1.data_id)");
+         } else if (ObjectUtil.equal(DataPermissionTypeEnum.PERMISSION_AREA, permissionType)) {
+            sb.append(" EXISTS ( ").append(" SELECT null FROM mgr_role_area it1").append(" LEFT JOIN mgr_role it2 ON it2.role_id = it1.role_id").append(" LEFT JOIN mgr_user_role it3 ON it1.role_id = it3.role_id").append(" WHERE it2.del_flag = 2 AND it2.role_code = '").append(roleCode).append("'").append(" AND it1.half_select = 1 AND it3.user_id = ").append(userId).append(" AND ").append(alias).append(".area_id = it1.data_id)");
+         }
+      } else {
+         sb.append("1 = 2");
+      }
+
+      return sb.toString();
+   }
+}
diff --git a/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionInterceptor.java b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionInterceptor.java
new file mode 100644
index 00000000..56a1f3c9
--- /dev/null
+++ b/bonus-modules/bonus-smart-canteen/src/main/java/com/bonus/canteen/core/auth/config/LeNiuDataPermissionInterceptor.java
@@ -0,0 +1,91 @@
+package com.bonus.canteen.core.auth.config;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
+import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
+import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
+import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.statement.select.PlainSelect;
+import net.sf.jsqlparser.statement.select.Select;
+import net.sf.jsqlparser.statement.select.SetOperationList;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.session.ResultHandler;
+import org.apache.ibatis.session.RowBounds;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+public class LeNiuDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor {
+   private static final Logger log = LoggerFactory.getLogger(LeNiuDataPermissionInterceptor.class);
+   private LeNiuDataPermissionHandler dataPermissionHandler;
+   private String databaseType;
+
+   public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
+      if (!InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
+         PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql);
+         mpBs.sql(this.parserSingle(mpBs.sql().replaceAll("(?m)^[ \t]*\r?\n", ""), ms.getId()));
+      }
+   }
+
+   protected void processSelect(Select select, int index, String sql, Object obj) {
+      if (select instanceof PlainSelect) {
+         this.setWhere((PlainSelect)select, (String)obj);
+      } else if (select instanceof SetOperationList) {
+         List