Просмотр исходного кода

一些可以框架Commmon的改动

ChenYang 1 год назад
Родитель
Сommit
33d0fafd3f
21 измененных файлов с 697 добавлено и 174 удалено
  1. 7 9
      pom.xml
  2. 26 0
      ruoyi-admin/src/main/resources/application-dev.yml
  3. 30 8
      ruoyi-admin/src/main/resources/application.yml
  4. 15 0
      ruoyi-common/pom.xml
  5. 50 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
  6. 52 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/ConvertUtils.java
  7. 12 6
      ruoyi-framework/pom.xml
  8. 2 3
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
  9. 0 132
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java
  10. 33 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
  11. 2 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
  12. 12 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/dao/BaseDao.java
  13. 109 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/service/BaseService.java
  14. 27 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/service/CrudService.java
  15. 35 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/service/bean/PageData.java
  16. 210 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/service/impl/BaseServiceImpl.java
  17. 72 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/service/impl/CrudServiceImpl.java
  18. 0 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
  19. 0 12
      warewms-ams/pom.xml
  20. 1 1
      warewms-base/pom.xml
  21. 2 2
      warewms-hard/pom.xml

+ 7 - 9
pom.xml

@@ -23,7 +23,7 @@
         <bitwalker.version>1.21</bitwalker.version>
         <swagger.version>3.0.0</swagger.version>
         <kaptcha.version>2.3.2</kaptcha.version>
-        <mybatis-spring-boot.version>2.2.0</mybatis-spring-boot.version>
+        <mybatisplus.version>3.5.2</mybatisplus.version>
         <pagehelper.boot.version>1.4.0</pagehelper.boot.version>
         <fastjson.version>1.2.79</fastjson.version>
         <oshi.version>5.8.6</oshi.version>
@@ -40,7 +40,6 @@
     <!-- 依赖声明 -->
     <dependencyManagement>
         <dependencies>
-
             <!-- SpringBoot的依赖配置-->
             <dependency>
                 <groupId>org.springframework.boot</groupId>
@@ -50,6 +49,12 @@
                 <scope>import</scope>
             </dependency>
 
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-boot-starter</artifactId>
+                <version>${mybatisplus.version}</version>
+            </dependency>
+
             <!-- 阿里数据库连接池 -->
             <dependency>
                 <groupId>com.alibaba</groupId>
@@ -64,13 +69,6 @@
                 <version>${bitwalker.version}</version>
             </dependency>
 
-            <!-- SpringBoot集成mybatis框架 -->
-            <dependency>
-                <groupId>org.mybatis.spring.boot</groupId>
-                <artifactId>mybatis-spring-boot-starter</artifactId>
-                <version>${mybatis-spring-boot.version}</version>
-            </dependency>
-
             <!-- pagehelper 分页插件 -->
             <dependency>
                 <groupId>com.github.pagehelper</groupId>

+ 26 - 0
ruoyi-admin/src/main/resources/application-dev.yml

@@ -67,3 +67,29 @@ init-task:
     autosend: false # 自动下发任务
     aciservice: false # ndc通讯
 
+#modbus:
+#    tcp-master:
+#        first: # 称重机
+#            open: true
+#            host: 192.168.100.161
+#            port: 502
+#        second: # 按钮盒
+#            open: true
+#            host: 192.168.100.151
+#            port: 502
+#        third: # 按钮盒
+#            open: true
+#            host: 192.168.100.152
+#            port: 502
+#        fourth: # 按钮盒
+#            open: true
+#            host: 192.168.100.153
+#            port: 502
+#        fifth: # 按钮盒
+#            open: true
+#            host: 192.168.100.154
+#            port: 502
+#        sixth: # 充电机
+#            open: true
+#            host: 192.168.100.160
+#            port: 8899

+ 30 - 8
ruoyi-admin/src/main/resources/application.yml

@@ -37,7 +37,7 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: prod
+    active: dev
   # 文件上传
   servlet:
     multipart:
@@ -83,13 +83,35 @@ token:
   expireTime: 3000
 
 # MyBatis配置
-mybatis:
-  # 搜索指定包别名
-  typeAliasesPackage: com.ruoyi.**.domain
-  # 配置mapper的扫描,找到所有的mapper.xml映射文件
-  mapperLocations: classpath*:mapper/**/*Mapper.xml
-  # 加载全局的配置文件
-  configLocation: classpath:mybatis/mybatis-config.xml
+#mybatis
+mybatis-plus:
+  mapper-locations: classpath*:/mapper/**/*.xml,classpath:/META-INF/modeler-mybatis-mappings/*.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.ruoyi.**.entity,com.ruoyi.**.domain
+  global-config:
+    #数据库相关配置
+    db-config:
+      #主键类型
+      id-type: ASSIGN_ID
+    banner: false
+  #原生配置
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+    call-setters-on-nulls: true
+    jdbc-type-for-null: 'null'
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
+  configuration-properties:
+    prefix:
+    blobType: BLOB
+    boolValue: TRUE
+
+#mybatis:
+#  # 搜索指定包别名
+#  typeAliasesPackage: com.ruoyi.**.domain
+#  # 配置mapper的扫描,找到所有的mapper.xml映射文件
+##  configLocation: classpath:mybatis/mybatis-config.xml
+
 
 # PageHelper分页插件
 pagehelper:

+ 15 - 0
ruoyi-common/pom.xml

@@ -29,6 +29,11 @@
             <artifactId>spring-web</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
         <!-- spring security 安全认证 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -45,6 +50,16 @@
         <dependency>
             <groupId>com.github.pagehelper</groupId>
             <artifactId>pagehelper-spring-boot-starter</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mybatis.spring.boot</groupId>
+                    <artifactId>mybatis-spring-boot-starter</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>com.github.pagehelper</groupId>
+                    <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <!-- 自定义验证注解 -->

+ 50 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -164,4 +164,54 @@ public class Constants
      */
     public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
             "org.springframework", "org.apache", "com.ruoyi.common.utils.file" };
+
+    /**
+     *  升序
+     */
+    public static final String ASC = "asc";
+    /**
+     * 降序
+     */
+    public static final String DESC = "desc";
+    /**
+     * 创建时间字段名
+     */
+    public static final String CREATE_DATE = "create_date";
+
+    /**
+     * 创建时间字段名
+     */
+    public static final String ID = "id";
+
+    /**
+     * 数据权限过滤
+     */
+    public static final String SQL_FILTER = "sqlFilter";
+
+    /**
+     * 当前页码
+     */
+    public static final String PAGE = "page";
+    /**
+     * 每页显示记录数
+     */
+    public static final String LIMIT = "limit";
+    /**
+     * 排序字段
+     */
+    public static final String ORDER_FIELD = "orderField";
+    /**
+     * 排序方式
+     */
+    public static final String ORDER = "order";
+
+    /**
+     * 否
+     */
+    public static final String NO = "N";
+
+    /**
+     * 是
+     */
+    public static final String YES = "Y";
 }

+ 52 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/ConvertUtils.java

@@ -0,0 +1,52 @@
+package com.ruoyi.common.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 转换工具类
+ *
+ * @author chenyang
+ */
+public class ConvertUtils {
+    private static Logger logger = LoggerFactory.getLogger(ConvertUtils.class);
+
+    public static <T> T sourceToTarget(Object source, Class<T> target){
+        if(source == null){
+            return null;
+        }
+        T targetObject = null;
+        try {
+            targetObject = target.newInstance();
+            BeanUtils.copyProperties(source, targetObject);
+        } catch (Exception e) {
+            logger.error("convert error ", e);
+        }
+
+        return targetObject;
+    }
+
+    public static <T> List<T> sourceToTarget(Collection<?> sourceList, Class<T> target){
+        if(sourceList == null){
+            return null;
+        }
+
+        List targetList = new ArrayList<>(sourceList.size());
+        try {
+            for(Object source : sourceList){
+                T targetObject = target.newInstance();
+                BeanUtils.copyProperties(source, targetObject);
+                targetList.add(targetObject);
+            }
+        }catch (Exception e){
+            logger.error("convert error ", e);
+        }
+
+        return targetList;
+    }
+}

+ 12 - 6
ruoyi-framework/pom.xml

@@ -27,6 +27,12 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-aop</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
@@ -35,18 +41,18 @@
             <version>5.3.16</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.mybatis.spring.boot</groupId>
-            <artifactId>mybatis-spring-boot-starter</artifactId>
-            <version>2.1.1</version>
-        </dependency>
-
         <!-- 阿里数据库连接池 -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid-spring-boot-starter</artifactId>
         </dependency>
 
+        <!-- SwggerUI集成 -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+        </dependency>
+
         <!-- 验证码 -->
         <dependency>
             <groupId>com.github.penggle</groupId>

+ 2 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java

@@ -1,12 +1,12 @@
 package com.ruoyi.framework.config;
 
-import java.util.TimeZone;
-import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 
+import java.util.TimeZone;
+
 /**
  * 程序注解配置
  *
@@ -16,7 +16,6 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
 // 表示通过aop框架暴露该代理对象,AopContext能够访问
 @EnableAspectJAutoProxy(exposeProxy = true)
 // 指定要扫描的Mapper类的包的路径
-@MapperScan("com.ruoyi.**.mapper")
 public class ApplicationConfig
 {
     /**

+ 0 - 132
ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java

@@ -1,132 +0,0 @@
-package com.ruoyi.framework.config;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import javax.sql.DataSource;
-import org.apache.ibatis.io.VFS;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.SqlSessionFactoryBean;
-import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import org.springframework.core.io.DefaultResourceLoader;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
-import org.springframework.core.type.classreading.MetadataReader;
-import org.springframework.core.type.classreading.MetadataReaderFactory;
-import org.springframework.util.ClassUtils;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * Mybatis支持*匹配扫描包
- * 
- * @author ruoyi
- */
-@Configuration
-public class MyBatisConfig
-{
-    @Autowired
-    private Environment env;
-
-    static final String DEFAULT_RESOURCE_PATTERN = "**/*.class";
-
-    public static String setTypeAliasesPackage(String typeAliasesPackage)
-    {
-        ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver();
-        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
-        List<String> allResult = new ArrayList<String>();
-        try
-        {
-            for (String aliasesPackage : typeAliasesPackage.split(","))
-            {
-                List<String> result = new ArrayList<String>();
-                aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
-                        + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN;
-                Resource[] resources = resolver.getResources(aliasesPackage);
-                if (resources != null && resources.length > 0)
-                {
-                    MetadataReader metadataReader = null;
-                    for (Resource resource : resources)
-                    {
-                        if (resource.isReadable())
-                        {
-                            metadataReader = metadataReaderFactory.getMetadataReader(resource);
-                            try
-                            {
-                                result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName());
-                            }
-                            catch (ClassNotFoundException e)
-                            {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
-                }
-                if (result.size() > 0)
-                {
-                    HashSet<String> hashResult = new HashSet<String>(result);
-                    allResult.addAll(hashResult);
-                }
-            }
-            if (allResult.size() > 0)
-            {
-                typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0]));
-            }
-            else
-            {
-                throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包");
-            }
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace();
-        }
-        return typeAliasesPackage;
-    }
-
-    public Resource[] resolveMapperLocations(String[] mapperLocations)
-    {
-        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
-        List<Resource> resources = new ArrayList<Resource>();
-        if (mapperLocations != null)
-        {
-            for (String mapperLocation : mapperLocations)
-            {
-                try
-                {
-                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
-                    resources.addAll(Arrays.asList(mappers));
-                }
-                catch (IOException e)
-                {
-                    // ignore
-                }
-            }
-        }
-        return resources.toArray(new Resource[resources.size()]);
-    }
-
-    @Bean
-    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
-    {
-        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
-        String mapperLocations = env.getProperty("mybatis.mapperLocations");
-        String configLocation = env.getProperty("mybatis.configLocation");
-        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
-        VFS.addImplClass(SpringBootVFS.class);
-
-        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
-        sessionFactory.setDataSource(dataSource);
-        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
-        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
-        return sessionFactory.getObject();
-    }
-}

+ 33 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java

@@ -0,0 +1,33 @@
+package com.ruoyi.framework.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * mybatis-plus配置
+ * @author chenyang
+ *
+ */
+@Configuration
+@MapperScan({"com.ruoyi.**.mapper", "com.ruoyi.**.dao"})
+public class MybatisPlusConfig {
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+        // 分页插件
+        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+        // 乐观锁
+        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+        // 防止全表更新与删除
+        mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
+
+        return mybatisPlusInterceptor;
+    }
+
+}

+ 2 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -113,6 +113,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/*/api-docs").anonymous()
                 .antMatchers("/druid/**").anonymous()
                 .antMatchers("/wcs/**").anonymous()
+                .antMatchers("/pda/qc/**").anonymous()
+
                 .antMatchers("/api/wcstask/**").permitAll()
                 .antMatchers("/test/**").permitAll()
                 .antMatchers("/api/modbus/**").permitAll()

+ 12 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/dao/BaseDao.java

@@ -0,0 +1,12 @@
+package com.ruoyi.framework.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 基础Dao
+ * @author chenyang
+ *
+ */
+public interface BaseDao<T> extends BaseMapper<T> {
+
+}

+ 109 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/service/BaseService.java

@@ -0,0 +1,109 @@
+package com.ruoyi.framework.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+/**
+ * 基础服务接口,所有Service接口都要继承
+ *
+ * @author chenyang
+ */
+public interface BaseService<T> {
+
+    Class<T> currentModelClass();
+
+    /**
+     * <p>
+     * 插入一条记录(选择字段,策略插入)
+     * </p>
+     *
+     * @param entity 实体对象
+     */
+    boolean insert(T entity);
+
+    /**
+     * <p>
+     * 插入(批量),该方法不支持 Oracle、SQL Server
+     * </p>
+     *
+     * @param entityList 实体对象集合
+     */
+    boolean insertBatch(Collection<T> entityList);
+
+    /**
+     * <p>
+     * 插入(批量),该方法不支持 Oracle、SQL Server
+     * </p>
+     *
+     * @param entityList 实体对象集合
+     * @param batchSize  插入批次数量
+     */
+    boolean insertBatch(Collection<T> entityList, int batchSize);
+
+    /**
+     * <p>
+     * 根据 ID 选择修改
+     * </p>
+     *
+     * @param entity 实体对象
+     */
+    boolean updateById(T entity);
+
+    /**
+     * <p>
+     * 根据 whereEntity 条件,更新记录
+     * </p>
+     *
+     * @param entity        实体对象
+     * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper}
+     */
+    boolean update(T entity, Wrapper<T> updateWrapper);
+
+    /**
+     * <p>
+     * 根据ID 批量更新
+     * </p>
+     *
+     * @param entityList 实体对象集合
+     */
+    boolean updateBatchById(Collection<T> entityList);
+
+    /**
+     * <p>
+     * 根据ID 批量更新
+     * </p>
+     *
+     * @param entityList 实体对象集合
+     * @param batchSize  更新批次数量
+     */
+    boolean updateBatchById(Collection<T> entityList, int batchSize);
+
+    /**
+     * <p>
+     * 根据 ID 查询
+     * </p>
+     *
+     * @param id 主键ID
+     */
+    T selectById(Serializable id);
+
+    /**
+     * <p>
+     * 根据 ID 删除
+     * </p>
+     *
+     * @param id 主键ID
+     */
+    boolean deleteById(Serializable id);
+
+    /**
+     * <p>
+     * 删除(根据ID 批量删除)
+     * </p>
+     *
+     * @param idList 主键ID列表
+     */
+    boolean deleteBatchIds(Collection<? extends Serializable> idList);
+}

+ 27 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/service/CrudService.java

@@ -0,0 +1,27 @@
+package com.ruoyi.framework.service;
+
+import com.ruoyi.framework.service.bean.PageData;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *  CRUD基础服务接口
+ *
+ * @author chenyang
+ */
+public interface CrudService<T, D> extends BaseService<T> {
+
+    PageData<D> page(Map<String, Object> params);
+
+    List<D> list(Map<String, Object> params);
+
+    D get(Long id);
+
+    void save(D dto);
+
+    void update(D dto);
+
+    void delete(Long[] ids);
+
+}

+ 35 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/service/bean/PageData.java

@@ -0,0 +1,35 @@
+package com.ruoyi.framework.service.bean;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页工具类
+ *
+ * @author chenyang
+ */
+@Data
+@ApiModel(value = "分页数据")
+public class PageData<T> implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "总记录数")
+    private int total;
+
+    @ApiModelProperty(value = "列表数据")
+    private List<T> list;
+
+    /**
+     * 分页
+     * @param list   列表数据
+     * @param total  总记录数
+     */
+    public PageData(List<T> list, long total) {
+        this.list = list;
+        this.total = (int)total;
+    }
+}

+ 210 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/service/impl/BaseServiceImpl.java

@@ -0,0 +1,210 @@
+package com.ruoyi.framework.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.enums.SqlMethod;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.ConvertUtils;
+import com.ruoyi.framework.service.BaseService;
+import com.ruoyi.framework.service.bean.PageData;
+import org.apache.ibatis.binding.MapperMethod;
+import org.apache.ibatis.logging.Log;
+import org.apache.ibatis.logging.LogFactory;
+import org.apache.ibatis.session.SqlSession;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.function.BiConsumer;
+
+/**
+ * 基础服务类,所有Service都要继承
+ *
+ * @author chenyang
+ */
+public abstract class BaseServiceImpl<M extends BaseMapper<T>, T>  implements BaseService<T> {
+    @Autowired
+    protected M baseDao;
+    protected Log log = LogFactory.getLog(getClass());
+
+    /**
+     * 获取分页对象
+     * @param params      分页查询参数
+     * @param defaultOrderField  默认排序字段
+     * @param isAsc              排序方式
+     */
+    protected IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
+        //分页参数
+        long curPage = 1;
+        long limit = 10;
+
+        if(params.get(Constants.PAGE) != null){
+            curPage = Long.parseLong((String)params.get(Constants.PAGE));
+        }
+        if(params.get(Constants.LIMIT) != null){
+            limit = Long.parseLong((String)params.get(Constants.LIMIT));
+        }
+
+        //分页对象
+        Page<T> page = new Page<>(curPage, limit);
+
+        //分页参数
+        params.put(Constants.PAGE, page);
+
+        //排序字段
+        String orderField = (String)params.get(Constants.ORDER_FIELD);
+        String order = (String)params.get(Constants.ORDER);
+
+        //前端字段排序
+        if(StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)){
+            if(Constants.ASC.equalsIgnoreCase(order)) {
+                return page.addOrder(OrderItem.asc(orderField));
+            }else {
+                return page.addOrder(OrderItem.desc(orderField));
+            }
+        }
+
+        //没有排序字段,则不排序
+        if(StringUtils.isBlank(defaultOrderField)){
+            return page;
+        }
+
+        //默认排序
+        if(isAsc) {
+            page.addOrder(OrderItem.asc(defaultOrderField));
+        }else {
+            page.addOrder(OrderItem.desc(defaultOrderField));
+        }
+
+        return page;
+    }
+
+    protected <T> PageData<T> getPageData(List<?> list, long total, Class<T> target){
+        List<T> targetList = ConvertUtils.sourceToTarget(list, target);
+
+        return new PageData<>(targetList, total);
+    }
+
+    protected <T> PageData<T> getPageData(IPage page, Class<T> target){
+        return getPageData(page.getRecords(), page.getTotal(), target);
+    }
+
+    protected void paramsToLike(Map<String, Object> params, String... likes){
+        for (String like : likes){
+            String val = (String)params.get(like);
+            if (StringUtils.isNotBlank(val)){
+                params.put(like, "%" + val + "%");
+            }else {
+                params.put(like, null);
+            }
+        }
+    }
+
+    /**
+     * <p>
+     * 判断数据库操作是否成功
+     * </p>
+     * <p>
+     * 注意!! 该方法为 Integer 判断,不可传入 int 基本类型
+     * </p>
+     *
+     * @param result 数据库操作返回影响条数
+     * @return boolean
+     */
+    protected static boolean retBool(Integer result) {
+        return SqlHelper.retBool(result);
+    }
+
+    protected Class<M> currentMapperClass() {
+        return (Class<M>) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 0);
+    }
+
+    @Override
+    public Class<T> currentModelClass() {
+        return (Class<T>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1);
+    }
+
+    protected String getSqlStatement(SqlMethod sqlMethod) {
+        return SqlHelper.getSqlStatement(this.currentMapperClass(), sqlMethod);
+    }
+
+    @Override
+    public boolean insert(T entity) {
+        return BaseServiceImpl.retBool(baseDao.insert(entity));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatch(Collection<T> entityList) {
+        return insertBatch(entityList, 100);
+    }
+
+    /**
+     * 批量插入
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatch(Collection<T> entityList, int batchSize) {
+        String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE);
+        return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity));
+    }
+
+    /**
+     * 执行批量操作
+     */
+    protected <E> boolean executeBatch(Collection<E> list, int batchSize, BiConsumer<SqlSession, E> consumer) {
+        return SqlHelper.executeBatch(this.currentModelClass(), this.log, list, batchSize, consumer);
+    }
+
+
+    @Override
+    public boolean updateById(T entity) {
+        return BaseServiceImpl.retBool(baseDao.updateById(entity));
+    }
+
+    @Override
+    public boolean update(T entity, Wrapper<T> updateWrapper) {
+        return BaseServiceImpl.retBool(baseDao.update(entity, updateWrapper));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateBatchById(Collection<T> entityList) {
+        return updateBatchById(entityList, 30);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateBatchById(Collection<T> entityList, int batchSize) {
+        String sqlStatement = getSqlStatement(SqlMethod.UPDATE_BY_ID);
+        return executeBatch(entityList, batchSize, (sqlSession, entity) -> {
+            MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
+            param.put(com.baomidou.mybatisplus.core.toolkit.Constants.ENTITY, entity);
+            sqlSession.update(sqlStatement, param);
+        });
+    }
+
+    @Override
+    public T selectById(Serializable id) {
+        return baseDao.selectById(id);
+    }
+
+    @Override
+    public boolean deleteById(Serializable id) {
+        return SqlHelper.retBool(baseDao.deleteById(id));
+    }
+
+    @Override
+    public boolean deleteBatchIds(Collection<? extends Serializable> idList) {
+        return SqlHelper.retBool(baseDao.deleteBatchIds(idList));
+    }
+}

+ 72 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/service/impl/CrudServiceImpl.java

@@ -0,0 +1,72 @@
+package com.ruoyi.framework.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
+import com.ruoyi.common.utils.ConvertUtils;
+import com.ruoyi.framework.service.CrudService;
+import com.ruoyi.framework.service.bean.PageData;
+import org.springframework.beans.BeanUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *  CRUD基础服务类
+ *
+ * @author chenyang
+ */
+public abstract class CrudServiceImpl<M extends BaseMapper<T>, T, D> extends BaseServiceImpl<M, T> implements CrudService<T, D> {
+
+    protected Class<D> currentDtoClass() {
+        return (Class<D>)ReflectionKit.getSuperClassGenericType(getClass(), CrudServiceImpl.class, 2);
+    }
+
+    @Override
+    public PageData<D> page(Map<String, Object> params) {
+        IPage<T> page = baseDao.selectPage(
+            getPage(params, null, false),
+            getWrapper(params)
+        );
+
+        return getPageData(page, currentDtoClass());
+    }
+
+    @Override
+    public List<D> list(Map<String, Object> params) {
+        List<T> entityList = baseDao.selectList(getWrapper(params));
+
+        return ConvertUtils.sourceToTarget(entityList, currentDtoClass());
+    }
+
+    public abstract QueryWrapper<T> getWrapper(Map<String, Object> params);
+
+    @Override
+    public D get(Long id) {
+        T entity = baseDao.selectById(id);
+
+        return ConvertUtils.sourceToTarget(entity, currentDtoClass());
+    }
+
+    @Override
+    public void save(D dto) {
+        T entity = ConvertUtils.sourceToTarget(dto, currentModelClass());
+        insert(entity);
+
+        //copy主键值到dto
+        BeanUtils.copyProperties(entity, dto);
+    }
+
+    @Override
+    public void update(D dto) {
+        T entity = ConvertUtils.sourceToTarget(dto, currentModelClass());
+        updateById(entity);
+    }
+
+    @Override
+    public void delete(Long[] ids) {
+        baseDao.deleteBatchIds(Arrays.asList(ids));
+    }
+}

+ 0 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java

@@ -9,7 +9,6 @@ import com.ruoyi.common.core.domain.entity.SysDictType;
  * 
  * @author ruoyi
  */
-@Mapper
 public interface SysDictTypeMapper
 {
     /**

+ 0 - 12
warewms-ams/pom.xml

@@ -15,18 +15,6 @@
 
     <dependencies>
 
-        <!-- 通用工具-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-common</artifactId>
-        </dependency>
-
-        <!-- 系统模块-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-system</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>warewms-base</artifactId>

+ 1 - 1
warewms-base/pom.xml

@@ -18,7 +18,7 @@
         <!-- 通用工具-->
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-common</artifactId>
+            <artifactId>ruoyi-framework</artifactId>
         </dependency>
 
     </dependencies>

+ 2 - 2
warewms-hard/pom.xml

@@ -14,10 +14,10 @@
     <description>硬件对接</description>
 
     <dependencies>
-        <!-- 通用工具-->
+        <!-- 若依框架 -->
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-common</artifactId>
+            <artifactId>ruoyi-framework</artifactId>
         </dependency>
         <!--自定义starter组件-->
         <dependency>