From ca4e829a60e74774f6ef87fc62d23094aadb9859 Mon Sep 17 00:00:00 2001
From: 李林 <z1292839451@163.com>
Date: 星期六, 23 十二月 2023 23:09:19 +0800
Subject: [PATCH] 第一阶段

---
 data-server/src/main/java/com/yuanchu/mom/Main.java                               |    7 
 data-server/src/main/java/com/yuanchu/mom/dto/DataReportingPageDto.java           |   23 +
 user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java                  |    8 
 framework/src/main/java/com/yuanchu/mom/common/PrintChina.java                    |   59 +++
 user-server/src/main/java/com/yuanchu/mom/dto/UserPageDto.java                    |   27 +
 pom.xml                                                                           |   19 +
 user-server/src/main/resources/mapper/RoleMapper.xml                              |    5 
 data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java |   45 +++
 user-server/src/main/java/com/yuanchu/mom/pojo/User.java                          |   69 ++++
 framework/src/main/java/com/yuanchu/mom/common/OrderBy.java                       |   22 +
 user-server/src/main/java/com/yuanchu/mom/mapper/RoleMapper.java                  |   12 
 framework/src/main/java/com/yuanchu/mom/annotation/ValueTableShow.java            |   11 
 framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java   |   20 +
 framework/src/main/java/com/yuanchu/mom/utils/QueryWrappers.java                  |   68 ++++
 user-server/src/main/java/com/yuanchu/mom/service/imp/RoleServiceImp.java         |   46 +++
 user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java         |   36 ++
 user-server/src/main/java/com/yuanchu/mom/service/UserService.java                |    9 
 framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java       |   44 +-
 framework/pom.xml                                                                 |    1 
 user-server/src/main/java/com/yuanchu/mom/service/RoleService.java                |   19 +
 system-run/src/main/resources/application-prod.yml                                |    2 
 data-server/pom.xml                                                               |   26 +
 user-server/src/main/java/com/yuanchu/mom/pojo/Role.java                          |   49 +++
 framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java                   |    2 
 user-server/src/main/resources/mapper/UserMapper.xml                              |   12 
 system-run/src/main/resources/application-dev.yml                                 |   14 
 user-server/src/main/java/com/yuanchu/mom/controller/UserController.java          |   34 ++
 user-server/src/main/java/com/yuanchu/mom/controller/RoleController.java          |   50 +++
 framework/src/main/java/com/yuanchu/mom/utils/ServletUtils.java                   |  103 ++++++
 system-run/pom.xml                                                                |    6 
 30 files changed, 803 insertions(+), 45 deletions(-)

diff --git a/data-server/pom.xml b/data-server/pom.xml
new file mode 100644
index 0000000..f0dfcfb
--- /dev/null
+++ b/data-server/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>data-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>data-server</name>
+    <description>data-server</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>framework</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/data-server/src/main/java/com/yuanchu/mom/Main.java b/data-server/src/main/java/com/yuanchu/mom/Main.java
new file mode 100644
index 0000000..de0dfc5
--- /dev/null
+++ b/data-server/src/main/java/com/yuanchu/mom/Main.java
@@ -0,0 +1,7 @@
+package com.yuanchu.mom;
+
+public class Main {
+    public static void main(String[] args) {
+        System.out.println("Hello world!");
+    }
+}
\ No newline at end of file
diff --git a/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java b/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java
new file mode 100644
index 0000000..f638998
--- /dev/null
+++ b/data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java
@@ -0,0 +1,45 @@
+package com.yuanchu.mom.controller;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.DataReportingPageDto;
+import com.yuanchu.mom.pojo.DataReporting;
+import com.yuanchu.mom.service.DataReportingService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+@RequestMapping("/dataReporting")
+@RestController
+@Api(tags = "鏁版嵁涓婃姤妯″潡")
+@AllArgsConstructor
+public class DataReportingController {
+
+    private DataReportingService dataReportingService;
+
+    @ApiOperation(value = "鑾峰彇鏁版嵁涓婃姤鍒楄〃")
+    @PostMapping("/selectDataReportingList")
+    public Result selectDataReportingList(@RequestBody Map<String, Object> data) {
+        Page page = JSON.parseObject(JSON.toJSONString(data.get("page")), Page.class);
+        DataReportingPageDto dataReportingPageDto = JSON.parseObject(JSON.toJSONString(data.get("entity")), DataReportingPageDto.class);
+        return Result.success(dataReportingService.selectUserList(page, dataReportingPageDto));
+    }
+
+    @ApiOperation(value = "淇敼鏁版嵁涓婃姤")
+    @PostMapping("/upDataReporting")
+    public Result upDataReporting(@RequestBody DataReporting dataReporting) {
+        return Result.success(dataReportingService.updateDataReporting(dataReporting));
+    }
+
+}
diff --git a/data-server/src/main/java/com/yuanchu/mom/dto/DataReportingPageDto.java b/data-server/src/main/java/com/yuanchu/mom/dto/DataReportingPageDto.java
new file mode 100644
index 0000000..f59cbd7
--- /dev/null
+++ b/data-server/src/main/java/com/yuanchu/mom/dto/DataReportingPageDto.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.annotation.ValueTableShow;
+import com.yuanchu.mom.pojo.DataReporting;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DataReportingPageDto extends DataReporting {
+
+    @ValueTableShow(21)
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    private String createUserName;
+
+    @ValueTableShow(22)
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    private String updateUserName;
+
+}
diff --git a/framework/pom.xml b/framework/pom.xml
index 4fcce66..f69481d 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -38,5 +38,6 @@
             <groupId>com.auth0</groupId>
             <artifactId>java-jwt</artifactId>
         </dependency>
+
     </dependencies>
 </project>
diff --git a/framework/src/main/java/com/yuanchu/mom/annotation/ValueTableShow.java b/framework/src/main/java/com/yuanchu/mom/annotation/ValueTableShow.java
new file mode 100644
index 0000000..7b892e9
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/annotation/ValueTableShow.java
@@ -0,0 +1,11 @@
+package com.yuanchu.mom.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ValueTableShow {
+
+    int value() default 0;
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/common/OrderBy.java b/framework/src/main/java/com/yuanchu/mom/common/OrderBy.java
new file mode 100644
index 0000000..e563f95
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/common/OrderBy.java
@@ -0,0 +1,22 @@
+package com.yuanchu.mom.common;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yuanchu.mom.annotation.ValueTableShow;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrderBy implements Serializable {
+
+    @TableField(select = false, exist = false)
+    private Map<String, String> orderBy;
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/common/PrintChina.java b/framework/src/main/java/com/yuanchu/mom/common/PrintChina.java
new file mode 100644
index 0000000..0b84598
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/common/PrintChina.java
@@ -0,0 +1,59 @@
+package com.yuanchu.mom.common;
+
+import cn.hutool.core.util.StrUtil;
+import com.yuanchu.mom.annotation.ValueTableShow;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+/*鏉庢灄
+* 閫氳繃娉ㄨВ蹇�熺敓鎴恡able琛ㄥご*/
+
+public class PrintChina {
+
+    public static <T> List<Map<String, String>> printChina(Class<T> tClass) {
+        //灏嗗疄浣撶被鐨勫睘鎬у拰娉ㄩ噴杞崲鎴愬弬鏁�
+        List<Field> fieldList = new ArrayList<>();
+        while (tClass != null){
+            fieldList.addAll(new ArrayList<>(Arrays.asList(tClass.getDeclaredFields())));
+            tClass = (Class<T>) tClass.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        ArrayList<Map<String, String>> list = new ArrayList<>();
+        for (Field field : fields) {
+            Map<String, String> soundVo = new HashMap<>();
+            boolean bool = field.isAnnotationPresent(ApiModelProperty.class);
+            boolean bool2 = field.isAnnotationPresent(ValueTableShow.class);
+            if (bool) {
+                int order;
+                if (bool2){
+                    order = field.getAnnotation(ValueTableShow.class).value();
+                }else{
+                    continue;
+                }
+                String value = field.getAnnotation(ApiModelProperty.class).value();
+                soundVo.put("label", field.getName());
+                soundVo.put("value", value);
+                soundVo.put("order", order + "");
+                if(list.size() == 0){
+                    list.add(soundVo);
+                }else{
+                    boolean isAdd = false;
+                    for (int i = 0; i < list.size(); i++) {
+                        Map<String, String> map = list.get(i);
+                        if(order < Integer.parseInt(map.get("order"))){
+                            list.add(i, soundVo);
+                            isAdd = true;
+                            break;
+                        }
+                    }
+                    if (!isAdd) list.add(soundVo);
+                }
+            }
+        }
+        return list;
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java b/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
index 525bec0..bb90e50 100644
--- a/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
+++ b/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
@@ -25,6 +25,8 @@
     @Value("${server.port}")
     private String serverPort;
 
+    private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
+
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
diff --git a/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java b/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
index cc99c2d..fe92f7e 100644
--- a/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
+++ b/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
@@ -38,7 +38,7 @@
     @ExceptionHandler(SQLException.class)
     public Result<?> handlerSQLException(SQLException e) {
         log.error(e.getMessage().toLowerCase(), e);
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏁版嵁鎿嶄綔澶辫触锛佽鑱旂郴绠$悊鍛�");
     }
 
@@ -54,14 +54,14 @@
         log.error(String.valueOf(e));
         String message = e.getCause().getMessage();
         String[] split = message.split("'");
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("閲嶅娣诲姞锛氥��" + split[1] + "銆戞搷浣滃け璐ワ紒");
     }
 
     @ExceptionHandler
     public Result<?> NullPointerException(NullPointerException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("閮ㄥ垎鍙傛暟涓虹┖锛岃妫�鏌ワ紒");
     }
 
@@ -71,7 +71,7 @@
     @ExceptionHandler(RuntimeException.class)
     public Result<?> runtimeExceptionHandler(RuntimeException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("杩愯鏃跺紓甯�");
     }
 
@@ -81,7 +81,7 @@
     @ExceptionHandler(ClassCastException.class)
     public Result<?> classCastExceptionHandler(ClassCastException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("绫诲瀷杞崲寮傚父");
     }
 
@@ -91,7 +91,7 @@
     @ExceptionHandler(FileNotFoundException.class)
     public Result<?> FileNotFoundException(FileNotFoundException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏂囦欢鏈壘鍒板紓甯�");
     }
 
@@ -101,7 +101,7 @@
     @ExceptionHandler(NumberFormatException.class)
     public Result<?> NumberFormatException(NumberFormatException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏁板瓧鏍煎紡寮傚父");
     }
 
@@ -111,7 +111,7 @@
     @ExceptionHandler(SecurityException.class)
     public Result<?> SecurityException(SecurityException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("瀹夊叏寮傚父");
     }
 
@@ -121,7 +121,7 @@
     @ExceptionHandler(TypeNotPresentException.class)
     public Result<?> TypeNotPresentException(TypeNotPresentException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("绫诲瀷涓嶅瓨鍦ㄥ紓甯�");
     }
 
@@ -131,7 +131,7 @@
     @ExceptionHandler(IOException.class)
     public Result<?> iOExceptionHandler(IOException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("IO寮傚父");
     }
 
@@ -141,7 +141,7 @@
     @ExceptionHandler(NoSuchMethodException.class)
     public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏈煡鏂规硶寮傚父");
     }
 
@@ -151,7 +151,7 @@
     @ExceptionHandler(IndexOutOfBoundsException.class)
     public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏁扮粍瓒婄晫寮傚父");
     }
 
@@ -161,7 +161,7 @@
     @ExceptionHandler(BadSqlGrammarException.class)
     public Result<?> BadSqlGrammarException(BadSqlGrammarException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("sql璇硶閿欒寮傚父");
     }
 
@@ -171,7 +171,7 @@
     @ExceptionHandler(NoSuchBeanDefinitionException.class)
     public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏃犳硶娉ㄥ叆bean");
     }
 
@@ -181,7 +181,7 @@
     @ExceptionHandler({HttpMessageNotReadableException.class})
     public Result<?> requestNotReadable(HttpMessageNotReadableException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("Http娑堟伅涓嶅彲璇�");
     }
 
@@ -191,17 +191,17 @@
     @ExceptionHandler({TypeMismatchException.class})
     public Result<?> requestTypeMismatch(TypeMismatchException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
     }
 
     /**
-     * 500閿欒
+     * 201閿欒
      */
     @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
-    public Result<?> server500(RuntimeException e) {
+    public Result<?> server201(RuntimeException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
     }
 
@@ -211,7 +211,7 @@
     @ExceptionHandler({StackOverflowError.class})
     public Result<?> requestStackOverflow(StackOverflowError e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("鏍堟孩鍑哄紓甯�");
     }
 
@@ -221,7 +221,7 @@
     @ExceptionHandler({ArithmeticException.class})
     public Result<?> arithmeticException(ArithmeticException e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("闄ゆ暟涓嶈兘涓�0寮傚父");
     }
 
@@ -271,7 +271,7 @@
     @ExceptionHandler({Exception.class})
     public Result<?> exception(Exception e) {
         e.printStackTrace();
-        response.setStatus(500);
+        response.setStatus(201);
         return Result.fail("缃戠粶杩炴帴澶辫触锛岃閫�鍑哄悗鍐嶈瘯");
     }
 }
diff --git a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
index ede59ea..1bfa037 100644
--- a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
+++ b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
@@ -1,22 +1,36 @@
 package com.yuanchu.mom.mybatis_config;
 
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.ServletUtils;
 import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.Map;
 
 @Component
 public class MyMetaObjectHandler implements MetaObjectHandler {
+
+    @Autowired
+    Jwt jwt;
+
     @Override
     public void insertFill(MetaObject metaObject) {
-        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
-        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+        this.strictInsertFill(metaObject, "createUser", Integer.class, Integer.parseInt(JSONUtil.parseObj(jwt.readJWT(ServletUtils.getRequest().getHeader("token")).get("data")).get("id") + ""));
+        this.strictInsertFill(metaObject, "updateUser", Integer.class, Integer.parseInt(JSONUtil.parseObj(jwt.readJWT(ServletUtils.getRequest().getHeader("token")).get("data")).get("id") + ""));
     }
 
     @Override
     public void updateFill(MetaObject metaObject) {
         // update鐨勬椂鍊欎娇鐢紝鏇存柊鐨勬椂鍊欏己鍒惰繘琛屽~鍏�
-        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
+        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
+        this.strictUpdateFill(metaObject, "updateUser", Integer.class, Integer.parseInt(JSONUtil.parseObj(jwt.readJWT(ServletUtils.getRequest().getHeader("token")).get("data")).get("id") + ""));
     }
 }
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/QueryWrappers.java b/framework/src/main/java/com/yuanchu/mom/utils/QueryWrappers.java
new file mode 100644
index 0000000..d61f0ca
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/QueryWrappers.java
@@ -0,0 +1,68 @@
+package com.yuanchu.mom.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import lombok.CustomLog;
+import org.springframework.stereotype.Component;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/*
+ * 鏉庢灄
+ * 鐢熸垚SQL璇彞*/
+
+@Component
+@AllArgsConstructor
+public class QueryWrappers<T> {
+
+    public static <T> QueryWrapper<T> queryWrappers(T entity) {
+        if (ObjectUtil.isEmpty(entity)) return null;
+        Class<?> aClass = entity.getClass();
+        QueryWrapper<T> wrapper = Wrappers.<T>query();
+        List<Field> fieldList = new ArrayList<>();
+        while (aClass != null) {
+            fieldList.addAll(new ArrayList<>(Arrays.asList(aClass.getDeclaredFields())));
+            aClass = aClass.getSuperclass();
+        }
+        for (Field field : fieldList) {
+            field.setAccessible(true);
+            Object value;
+            try {
+                value = field.get(entity);
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+                throw new RuntimeException("鏌ヨ鏉′欢鐢熸垚閿欒");
+            }
+//            System.out.println(field.getName() + "|" + (value == null || value.equals("")) + "|" + value);
+            if(value == null || value.equals("")){
+                continue;
+            }
+            if (!field.getName().equals("orderBy")) {
+                if(value.getClass()== LocalDateTime.class){
+                    wrapper.like(StrUtil.toUnderlineCase(field.getName()), ((LocalDateTime) value).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                }else{
+                    wrapper.like(StrUtil.toUnderlineCase(field.getName()), value);
+                }
+            } else {
+                Map<String, String> map = (Map<String, String>) value;
+                if(map.get("order")!=null){
+                    wrapper.orderBy(true, map.get("order").equals("asc"), StrUtil.toUnderlineCase(map.get("field")));
+                }
+            }
+        }
+        System.out.println(wrapper.getExpression().getSqlSegment());
+        return wrapper;
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/ServletUtils.java b/framework/src/main/java/com/yuanchu/mom/utils/ServletUtils.java
new file mode 100644
index 0000000..387f113
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/ServletUtils.java
@@ -0,0 +1,103 @@
+package com.yuanchu.mom.utils;
+
+
+import cn.hutool.core.convert.Convert;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+
+/**
+ * 瀹㈡埛绔伐鍏风被
+ *
+ * @author 寮犲
+ */
+public class ServletUtils {
+    /**
+     * 鑾峰彇String鍙傛暟
+     */
+    public static String getParameter(String name)
+    {
+        return getRequest().getParameter(name);
+    }
+
+    /**
+     * 鑾峰彇String鍙傛暟
+     */
+    public static String getParameter(String name, String defaultValue)
+    {
+        return Convert.toStr(getRequest().getParameter(name), defaultValue);
+    }
+
+    /**
+     * 鑾峰彇Integer鍙傛暟
+     */
+    public static Integer getParameterToInt(String name)
+    {
+        return Convert.toInt(getRequest().getParameter(name));
+    }
+
+    /**
+     * 鑾峰彇Integer鍙傛暟
+     */
+    public static Integer getParameterToInt(String name, Integer defaultValue)
+    {
+        return Convert.toInt(getRequest().getParameter(name), defaultValue);
+    }
+
+    /**
+     * 鑾峰彇request
+     */
+    public static HttpServletRequest getRequest()
+    {
+        return getRequestAttributes().getRequest();
+    }
+
+    /**
+     * 鑾峰彇response
+     */
+    public static HttpServletResponse getResponse()
+    {
+        return getRequestAttributes().getResponse();
+    }
+
+    /**
+     * 鑾峰彇session
+     */
+    public static HttpSession getSession()
+    {
+        return getRequest().getSession();
+    }
+
+    public static ServletRequestAttributes getRequestAttributes()
+    {
+        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
+        return (ServletRequestAttributes) attributes;
+    }
+
+    /**
+     * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风
+     *
+     * @param response 娓叉煋瀵硅薄
+     * @param string 寰呮覆鏌撶殑瀛楃涓�
+     * @return null
+     */
+    public static String renderString(HttpServletResponse response, String string)
+    {
+        try
+        {
+            response.setContentType("application/json");
+            response.setCharacterEncoding("utf-8");
+            response.getWriter().print(string);
+        }
+        catch (IOException e)
+        {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/pom.xml b/pom.xml
index c8f2aeb..9b26b37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
         <module>framework</module>
         <module>user-server</module>
         <module>system-run</module>
+        <module>data-server</module>
     </modules>
 
     <properties>
@@ -83,6 +84,24 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>${mybatis-plus.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.23</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>
diff --git a/system-run/pom.xml b/system-run/pom.xml
index f94e371..9079d88 100644
--- a/system-run/pom.xml
+++ b/system-run/pom.xml
@@ -28,6 +28,12 @@
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>data-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
         <!--druid-->
         <dependency>
             <groupId>com.alibaba</groupId>
diff --git a/system-run/src/main/resources/application-dev.yml b/system-run/src/main/resources/application-dev.yml
index e049e17..0b6562b 100644
--- a/system-run/src/main/resources/application-dev.yml
+++ b/system-run/src/main/resources/application-dev.yml
@@ -5,12 +5,12 @@
 logging:
   config: classpath:logback-spring.xml
   # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
-  file-location:
+  file-location: D:\楣撻洀鍏徃\frame-after\logs_IS_UNDEFINED
 
 # 鏁版嵁搴撳浠借矾寰�
 backup:
   # 鏁版嵁搴撳浠借矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
-  path: E:/webapp/backup
+  path: D:\楣撻洀鍏徃\frame-after
   # 鏁版嵁搴撳浠藉ぉ鏁�
   destiny: 7
   # 鏁版嵁搴撳浠藉伐鍏疯矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
@@ -26,7 +26,7 @@
   type-aliases-package: com.yuanchu.mom.pojo
   mapper-locations: classpath*:/mapper/*.xml
   configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 寮�鍚痬ybatis-plus鏃ュ織
+    log-impl: #org.apache.ibatis.logging.stdout.StdOutImpl # 寮�鍚痬ybatis-plus鏃ュ織
 
 
 # 鏁版嵁婧愰厤缃�
@@ -34,8 +34,8 @@
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://114.132.189.42:9004/oms?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
-    username: user
+    url: jdbc:mysql://127.0.0.1:3306/shengyun?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+    username: root
     password: 123456
     druid:
       #   Druid鏁版嵁婧愰厤缃�
@@ -59,9 +59,9 @@
     # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐�
     database: 0
     # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负localhost锛�
-    host: 114.132.189.42
+    host: 127.0.0.1
     # redis绔彛锛堥粯璁や负6379锛�
-    port: 9003
+    port: 6379
     # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
     password: null
     # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級
diff --git a/system-run/src/main/resources/application-prod.yml b/system-run/src/main/resources/application-prod.yml
index 4e51a05..b1e1905 100644
--- a/system-run/src/main/resources/application-prod.yml
+++ b/system-run/src/main/resources/application-prod.yml
@@ -28,7 +28,7 @@
 spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
-    driverClassName: com.mysql.jdbc.Driver
+    driverClassName: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:3306/blog_crunchy?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
     username: root
     password: 123456
diff --git a/user-server/src/main/java/com/yuanchu/mom/controller/RoleController.java b/user-server/src/main/java/com/yuanchu/mom/controller/RoleController.java
new file mode 100644
index 0000000..acf7e33
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/controller/RoleController.java
@@ -0,0 +1,50 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.pojo.Role;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.RoleService;
+import com.yuanchu.mom.service.UserService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.RedisUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequestMapping("/role")
+@RestController
+@Api(tags = "瑙掕壊妯″潡")
+@AllArgsConstructor
+public class RoleController {
+
+    private RoleService roleService;
+
+    @ApiOperation(value = "鑾峰彇瑙掕壊鍒楄〃鏋氫妇")
+    @GetMapping("/selectRoleList")
+    public Result selectUserList(){
+        return Result.success(roleService.selectList());
+    }
+
+
+    @ApiOperation(value = "鑾峰彇瑙掕壊鍒楄〃")
+    @PostMapping("/selectRoleLists")
+    public Result selectRoleList(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        Role role = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), Role.class);
+        return Result.success(roleService.selectUserList(page, role));
+    }
+
+    @ApiOperation(value = "鍒犻櫎瑙掕壊鍒楄〃")
+    @PostMapping("/delRole")
+    public Result delRole(Integer id){
+        return Result.success(roleService.delRole(id));
+    }
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java b/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
index ab1a56f..c9a93bc 100644
--- a/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
+++ b/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
@@ -1,5 +1,11 @@
 package com.yuanchu.mom.controller;
 
+import cn.hutool.json.JSON;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.common.PrintChina;
+import com.yuanchu.mom.dto.UserPageDto;
 import com.yuanchu.mom.pojo.User;
 import com.yuanchu.mom.service.UserService;
 import com.yuanchu.mom.utils.JackSonUtil;
@@ -7,8 +13,11 @@
 import com.yuanchu.mom.utils.RedisUtil;
 import com.yuanchu.mom.vo.Result;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.DigestUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
@@ -29,7 +38,7 @@
     @PostMapping("/enter")
     public Result login(String account, String password) {
         User user = userService.selectUserByPwd(account, password);
-        if (user==null) return Result.fail("鐧诲綍澶辫触");
+        if (user == null) return Result.fail("鐧诲綍澶辫触");
         String jwtToken = jwt.createJwt(user.getName(), user.getId(), 60);
         String jwtReToken = jwt.createJwt(user.getName(), user.getId(), 24 * 60);
         RedisUtil.set("" + user.getId(), jwtToken, 60);
@@ -66,4 +75,27 @@
         return Result.fail(map.get("info"));
     }
 
+    @ApiOperation(value = "鑾峰彇鐢ㄦ埛鍒楄〃")
+    @PostMapping("/selectUserList")
+    public Result selectUserList(@RequestBody Map<String, Object> data) throws Exception {
+        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
+        UserPageDto user = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), UserPageDto.class);
+        return Result.success(userService.selectUserList(page, user));
+    }
+
+    @ApiOperation(value = "淇敼鐢ㄦ埛淇℃伅")
+    @PostMapping("/updateUser")
+    public Result<?> updateUser(@RequestBody User user) {
+        if ("".equals(user.getPassword())) user.setPassword(null);
+        else user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
+        return Result.success(userService.updateUser(user));
+    }
+
+    @ApiOperation(value = "娣诲姞鐢ㄦ埛淇℃伅")
+    @PostMapping("/addUser")
+    public Result<?> addUser(@RequestBody User user) {
+        if ("".equals(user.getPassword())) user.setPassword(null);
+        else user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
+        return Result.success(userService.addUser(user));
+    }
 }
diff --git a/user-server/src/main/java/com/yuanchu/mom/dto/UserPageDto.java b/user-server/src/main/java/com/yuanchu/mom/dto/UserPageDto.java
new file mode 100644
index 0000000..9f1f95b
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/dto/UserPageDto.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.annotation.ValueTableShow;
+import com.yuanchu.mom.pojo.User;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserPageDto extends User {
+
+    @ValueTableShow(10)
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    private String createUserName;
+
+    @ValueTableShow(11)
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    private String updateUserName;
+
+    @ValueTableShow(1)
+    @ApiModelProperty(value = "瑙掕壊")
+    private String roleName;
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/mapper/RoleMapper.java b/user-server/src/main/java/com/yuanchu/mom/mapper/RoleMapper.java
new file mode 100644
index 0000000..86307a5
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/mapper/RoleMapper.java
@@ -0,0 +1,12 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.Role;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface RoleMapper extends BaseMapper<Role> {
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java b/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
index 99a6940..f1d519e 100644
--- a/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
+++ b/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
@@ -1,11 +1,19 @@
 package com.yuanchu.mom.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.dto.UserPageDto;
 import com.yuanchu.mom.pojo.User;
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface UserMapper extends BaseMapper<User> {
+
+    IPage<User> selectUserDtoPageList(IPage<UserPageDto> page, QueryWrapper<UserPageDto> ew);
+
 }
diff --git a/user-server/src/main/java/com/yuanchu/mom/pojo/Role.java b/user-server/src/main/java/com/yuanchu/mom/pojo/Role.java
new file mode 100644
index 0000000..1a61592
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/pojo/Role.java
@@ -0,0 +1,49 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yuanchu.mom.annotation.ValueTableShow;
+import com.yuanchu.mom.common.OrderBy;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Role extends OrderBy implements Serializable {
+
+    @ApiModelProperty(value = "涓婚敭")
+    private Integer id;
+
+    @ValueTableShow(1)
+    @ApiModelProperty(value = "瑙掕壊鍚嶇О")
+    private String name;
+
+    @ValueTableShow(2)
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ValueTableShow(3)
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/pojo/User.java b/user-server/src/main/java/com/yuanchu/mom/pojo/User.java
index d8ba49b..5a2384a 100644
--- a/user-server/src/main/java/com/yuanchu/mom/pojo/User.java
+++ b/user-server/src/main/java/com/yuanchu/mom/pojo/User.java
@@ -1,39 +1,90 @@
 package com.yuanchu.mom.pojo;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yuanchu.mom.annotation.ValueTableShow;
+import com.yuanchu.mom.common.OrderBy;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 @Data
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-public class User {
+@TableName("user")
+public class User extends OrderBy implements Serializable{
 
+    @ApiModelProperty(value = "涓婚敭")
     @TableId(type = IdType.AUTO)
     private Integer id;
 
+    @ValueTableShow(1)
+    @ApiModelProperty(value = "璐﹀彿")
     private String account;
 
+    @ApiModelProperty(value = "瀵嗙爜")
     private String password;
 
+    @ValueTableShow(2)
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
     private String name;
 
-    private int state;
+    @ValueTableShow(3)
+    @ApiModelProperty(value = "鐘舵��")
+    private Integer state;
 
+    @ValueTableShow(4)
+    @ApiModelProperty(value = "骞撮緞")
+    private Integer age;
+
+    @ValueTableShow(5)
+    @ApiModelProperty(value = "閭")
+    private String email;
+
+    @ValueTableShow(6)
+    @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+    private String phone;
+
+    @ValueTableShow(7)
+    @ApiModelProperty(value = "閮ㄩ棬")
+    private String department;
+
+    @ValueTableShow(8)
+    @ApiModelProperty(value = "鍏徃")
+    private String company;
+
+    @ApiModelProperty(value = "瑙掕壊涓婚敭")
+    private Integer roleId;
+
+    @ValueTableShow(9)
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
     @TableField(fill = FieldFill.INSERT)
-    private Date createTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
 
+    @ValueTableShow(10)
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
     @TableField(fill = FieldFill.INSERT_UPDATE)
-    private Date updateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
 
-    private int version;
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
 
 }
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/RoleService.java b/user-server/src/main/java/com/yuanchu/mom/service/RoleService.java
new file mode 100644
index 0000000..534f107
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/service/RoleService.java
@@ -0,0 +1,19 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.pojo.Role;
+import com.yuanchu.mom.pojo.User;
+
+import java.util.List;
+import java.util.Map;
+
+public interface RoleService {
+
+    List<Role> selectList();
+
+    Map<String, Object> selectUserList(IPage<Role> page, Role role);
+
+    int delRole(Integer id);
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/UserService.java b/user-server/src/main/java/com/yuanchu/mom/service/UserService.java
index f4e2517..e584c81 100644
--- a/user-server/src/main/java/com/yuanchu/mom/service/UserService.java
+++ b/user-server/src/main/java/com/yuanchu/mom/service/UserService.java
@@ -1,5 +1,8 @@
 package com.yuanchu.mom.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.UserPageDto;
 import com.yuanchu.mom.pojo.User;
 
 import java.util.List;
@@ -13,4 +16,10 @@
     //鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛鍚�
     String selectNameById(Integer id);
 
+    Map<String, Object> selectUserList(IPage<UserPageDto> page, UserPageDto user);
+
+    int updateUser(User user);
+
+    int addUser(User user);
+
 }
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/imp/RoleServiceImp.java b/user-server/src/main/java/com/yuanchu/mom/service/imp/RoleServiceImp.java
new file mode 100644
index 0000000..9edb882
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/service/imp/RoleServiceImp.java
@@ -0,0 +1,46 @@
+package com.yuanchu.mom.service.imp;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.common.PrintChina;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.mapper.RoleMapper;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.Role;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.RoleService;
+import com.yuanchu.mom.service.UserService;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.QueryWrappers;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@AllArgsConstructor
+public class RoleServiceImp implements RoleService {
+
+    private RoleMapper roleMapper;
+
+    @Override
+    public List<Role> selectList() {
+        return roleMapper.selectList(null);
+    }
+
+    @Override
+    public Map<String, Object> selectUserList(IPage<Role> page, Role role) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(Role.class));
+        map.put("body", roleMapper.selectPage(page, QueryWrappers.queryWrappers(role)));
+        return map;
+    }
+
+    @Override
+    public int delRole(Integer id) {
+        return roleMapper.deleteById(id);
+    }
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java b/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
index 25d8056..1ef4784 100644
--- a/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
+++ b/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
@@ -1,27 +1,42 @@
 package com.yuanchu.mom.service.imp;
 
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.extension.plugins.pagination.Page;
+import com.yuanchu.mom.common.PrintChina;
+import com.yuanchu.mom.dto.UserPageDto;
 import com.yuanchu.mom.mapper.UserMapper;
 import com.yuanchu.mom.pojo.User;
 import com.yuanchu.mom.service.UserService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.QueryWrappers;
+import com.yuanchu.mom.utils.ServletUtils;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.util.DigestUtils;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 @Service
+@AllArgsConstructor
 public class UserServiceImp implements UserService {
 
-    @Resource
     UserMapper userMapper;
+
+    Jwt jwt;
 
     @Override
     public User selectUserByPwd(String account, String password) {
         QueryWrapper<User> wrapper = new QueryWrapper<>();
-        wrapper.eq("account", account).eq("password", DigestUtils.md5DigestAsHex(password.getBytes()));
+        wrapper.eq("account", account).eq("password", DigestUtils.md5DigestAsHex(password.getBytes())).eq("state", 1);
         List<User> list = userMapper.selectList(wrapper);
         return list.size()>0?list.get(0):null;
     }
@@ -33,4 +48,21 @@
         return user.getName();
     }
 
+    @Override
+    public Map<String, Object> selectUserList(IPage<UserPageDto> page, UserPageDto user) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("head", PrintChina.printChina(UserPageDto.class));
+        map.put("body", userMapper.selectUserDtoPageList(page, QueryWrappers.queryWrappers(user)));
+        return map;
+    }
+
+    @Override
+    public int updateUser(User user) {
+        return userMapper.updateById(user);
+    }
+
+    @Override
+    public int addUser(User user) {
+        return userMapper.insert(user);
+    }
 }
diff --git a/user-server/src/main/resources/mapper/RoleMapper.xml b/user-server/src/main/resources/mapper/RoleMapper.xml
new file mode 100644
index 0000000..82c0ab5
--- /dev/null
+++ b/user-server/src/main/resources/mapper/RoleMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.mom.mapper.RoleMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/user-server/src/main/resources/mapper/UserMapper.xml b/user-server/src/main/resources/mapper/UserMapper.xml
index 7f7653f..8dc3b9d 100644
--- a/user-server/src/main/resources/mapper/UserMapper.xml
+++ b/user-server/src/main/resources/mapper/UserMapper.xml
@@ -2,4 +2,16 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yuanchu.mom.mapper.UserMapper">
 
+    <select id="selectUserDtoPageList" resultType="com.yuanchu.mom.dto.UserPageDto">
+        select * from (
+            select u1.id, u1.account, u1.name, u1.state, u1.create_time, u1.update_time, u1.create_user, u1.update_user, u1.age, u1.email, u1.phone, u1.department, u1.company, u1.role_id, u2.name create_user_name, u3.name update_user_name, r.name role_name
+            from user u1
+            left join user u2 on u2.id = u1.create_user
+            left join user u3 on u3.id = u1.update_user
+            left join role r on u1.role_id = r.id
+        ) a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3