李林
2023-12-23 ca4e829a60e74774f6ef87fc62d23094aadb9859
第一阶段
已修改14个文件
已添加16个文件
848 ■■■■■ 文件已修改
data-server/pom.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data-server/src/main/java/com/yuanchu/mom/Main.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data-server/src/main/java/com/yuanchu/mom/controller/DataReportingController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data-server/src/main/java/com/yuanchu/mom/dto/DataReportingPageDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/annotation/ValueTableShow.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/common/OrderBy.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/common/PrintChina.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/QueryWrappers.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/mom/utils/ServletUtils.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-dev.yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
system-run/src/main/resources/application-prod.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/RoleController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/controller/UserController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/dto/UserPageDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/mapper/RoleMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/pojo/Role.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/pojo/User.java 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/RoleService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/UserService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/imp/RoleServiceImp.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/RoleMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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!");
    }
}
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));
    }
}
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;
}
framework/pom.xml
@@ -38,5 +38,6 @@
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
        </dependency>
    </dependencies>
</project>
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;
}
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;
}
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.*;
/*李林
* é€šè¿‡æ³¨è§£å¿«é€Ÿç”Ÿæˆtable表头*/
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;
    }
}
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())) {
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("网络连接失败,请退出后再试");
    }
}
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") + ""));
    }
}
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;
    }
}
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;
    }
}
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>
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>
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 # å¼€å¯mybatis-plus日志
    log-impl: #org.apache.ibatis.logging.stdout.StdOutImpl # å¼€å¯mybatis-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连接超时时间(单位毫秒)
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
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));
    }
}
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));
    }
}
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;
}
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> {
}
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);
}
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;
}
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;
}
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);
}
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);
}
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);
    }
}
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);
    }
}
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>
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>