wuweihao 4 лет назад
Родитель
Сommit
4d85469df5
31 измененных файлов с 1763 добавлено и 0 удалено
  1. 23 0
      expo_zhengzhou_api/gis_api/pom.xml
  2. 10 0
      expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/controller/ApiController.java
  3. 33 0
      expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/entity/vo/ExcelUserVo.java
  4. 8 0
      expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/mapper/UserMapper.java
  5. 2 0
      expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/service/UserService.java
  6. 40 0
      expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/service/impl/UserServiceImpl.java
  7. 31 0
      expo_zhengzhou_api/gis_application/pom.xml
  8. 1 0
      expo_zhengzhou_api/gis_application/src/main/resources/application-dev.properties
  9. 111 0
      expo_zhengzhou_api/gis_common/pom.xml
  10. 16 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/aop/WebControllerLog.java
  11. 137 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/aop/WebLogAspect.java
  12. 27 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/dto/PageDateDto.java
  13. 26 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/dto/PageDto.java
  14. 39 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/po/BaseEntity.java
  15. 43 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/po/LogEntity.java
  16. 24 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/vo/LogVo.java
  17. 35 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java
  18. 17 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/IBaseMapper.java
  19. 23 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/LogMapper.java
  20. 41 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/provider/LogProvider.java
  21. 47 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/IBaseService.java
  22. 18 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/LogService.java
  23. 205 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/impl/IBaseServiceImpl.java
  24. 34 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/impl/LogServiceImpl.java
  25. 95 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/config/Swagger2.java
  26. 69 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/config/WebMvcConfig.java
  27. 68 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/constant/ConfigConstant.java
  28. 40 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/ExcelUtils.java
  29. 194 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/PasswordUtils.java
  30. 106 0
      expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/Result.java
  31. 200 0
      expo_zhengzhou_api/pom.xml

+ 23 - 0
expo_zhengzhou_api/gis_api/pom.xml

@@ -0,0 +1,23 @@
+<?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>expo_zhengzhou_api</artifactId>
+        <groupId>com.gis</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>gis_api</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.gis</groupId>
+            <artifactId>gis_common</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>

+ 10 - 0
expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/controller/ApiController.java

@@ -30,4 +30,14 @@ public class ApiController {
 
        return entityService.saveVisit(param);
     }
+
+
+    @ApiOperation("导出Excel")
+    @PostMapping("export/excel")
+    public Result exportExcel(){
+
+        return entityService.exportExcelByDay();
+    }
+
+
 }

+ 33 - 0
expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/entity/vo/ExcelUserVo.java

@@ -0,0 +1,33 @@
+package com.gis.api.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by owen on 2021/8/26 0026 9:33
+ */
+@Data
+public class ExcelUserVo {
+
+    @ApiModelProperty(value = "名称" )
+    private String name;
+
+    @ApiModelProperty(value = "电话" )
+    private String phone;
+
+    @ApiModelProperty(value = "单位名称" )
+    private String unit;
+
+    @ApiModelProperty(value = "职务" )
+    private String job;
+
+    @ApiModelProperty(value = "展位号" )
+    private String num;
+
+    @ApiModelProperty(value = "填写时间" )
+    private Date date;
+
+
+}

+ 8 - 0
expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/mapper/UserMapper.java

@@ -1,14 +1,22 @@
 package com.gis.api.mapper;
 
 import com.gis.api.entity.po.UserEntity;
+import com.gis.api.entity.vo.ExcelUserVo;
 import com.gis.common.base.mapper.IBaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * Created by owen on 2021/7/13 0013 11:21
  */
 @Component
 @Mapper
 public interface UserMapper extends IBaseMapper<UserEntity, Long> {
+
+
+    @Select("select name, phone, unit, job, booth_num as num, create_time as date from tb_user where is_delete=0")
+    List<ExcelUserVo> exportExcelByDay();
 }

+ 2 - 0
expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/service/UserService.java

@@ -11,4 +11,6 @@ import com.gis.common.util.Result;
 public interface UserService extends IBaseService<UserEntity, Long> {
 
     Result saveVisit(UserDto param);
+
+    Result exportExcelByDay();
 }

+ 40 - 0
expo_zhengzhou_api/gis_api/src/main/java/com/gis/api/service/impl/UserServiceImpl.java

@@ -1,19 +1,28 @@
 package com.gis.api.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.gis.api.entity.dto.UserDto;
 import com.gis.api.entity.po.UserEntity;
+import com.gis.api.entity.vo.ExcelUserVo;
 import com.gis.api.mapper.UserMapper;
 import com.gis.api.service.UserService;
 import com.gis.common.base.mapper.IBaseMapper;
 import com.gis.common.base.service.impl.IBaseServiceImpl;
+import com.gis.common.util.ExcelUtils;
 import com.gis.common.util.Result;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
 /**
  * Created by owen on 2021/7/13 0013 11:24
  */
+@Slf4j
 @Service
 public class UserServiceImpl extends IBaseServiceImpl<UserEntity, Long> implements UserService {
 
@@ -33,4 +42,35 @@ public class UserServiceImpl extends IBaseServiceImpl<UserEntity, Long> implemen
         return Result.success();
     }
 
+    @Override
+    public Result exportExcelByDay() {
+
+
+        long start = System.currentTimeMillis();
+        List<ExcelUserVo> userList = entityMapper.exportExcelByDay();
+        long end = System.currentTimeMillis();
+        log.info("sql耗时: {}s", (end-start)/1000);
+        String time = DateUtil.format(new Date(), "yyyyMMdd_HHmmss");
+        String savePath = configConstant.serverBasePath + "/excel/" + time + ".xlsx";
+        HashMap<String, String> rowTitle = new HashMap<>();
+
+        rowTitle.put("name", "姓名");
+        rowTitle.put("phone", "电话");
+        rowTitle.put("num", "展位号");
+        rowTitle.put("unit", "单位名称");
+        rowTitle.put("job", "职务");
+        rowTitle.put("date", "填写时间");
+        ExcelUtils.createExcel(userList, savePath, rowTitle);
+
+        String domain = configConstant.serverDomain  + "/excel/" + time + ".xlsx";
+        log.info("url: {}", domain);
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("size", userList.size());
+        result.put("domain", domain);
+
+
+        return Result.success(result);
+    }
+
 }

+ 31 - 0
expo_zhengzhou_api/gis_application/pom.xml

@@ -0,0 +1,31 @@
+<?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>expo_zhengzhou_api</artifactId>
+        <groupId>com.gis</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>gis_application</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.gis</groupId>
+            <artifactId>gis_api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+        <finalName>${parent.artifactId}</finalName>
+    </build>
+</project>

+ 1 - 0
expo_zhengzhou_api/gis_application/src/main/resources/application-dev.properties

@@ -37,6 +37,7 @@ logging.level.com.gis=debug
 
 # file info
 server.file.path=F:\\test\\ngin\\${project.en}_data
+server.domain =http://192.168.0.135:${server.port}
 
 # url info
 #server.url.prefix=/data/

+ 111 - 0
expo_zhengzhou_api/gis_common/pom.xml

@@ -0,0 +1,111 @@
+<?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>expo_zhengzhou_api</artifactId>
+        <groupId>com.gis</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>gis_common</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--springboot-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <!-- JPA -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <!-- fastjson -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+
+        <!-- mysql -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!--阿里数据库连接池 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- knife4j aip 包-->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!-- 工具类 -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+
+
+        <!--tk.mybatis 依赖-->
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+        </dependency>
+
+
+        <!--分页插件-->
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
+
+        <!--excel 依赖工具包, hutool需要用的-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
+
+
+    </dependencies>
+
+
+</project>

+ 16 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/aop/WebControllerLog.java

@@ -0,0 +1,16 @@
+package com.gis.common.base.aop;
+
+import java.lang.annotation.*;
+
+/**
+ * Created by Hb_zzZ on 2020/2/27.
+ */
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface WebControllerLog {
+    String description() default "";
+
+    //是否加入数据库
+    boolean addDb() default false;
+}

+ 137 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/aop/WebLogAspect.java

@@ -0,0 +1,137 @@
+package com.gis.common.base.aop;
+
+import com.gis.common.base.entity.po.LogEntity;
+import com.gis.common.base.service.LogService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by owen on 2020/2/25 0025 9:24
+ *
+ * 日志aop
+ */
+@Slf4j
+@Aspect
+@Component
+public class WebLogAspect {
+
+    @Resource
+    private HttpServletRequest request;
+
+    @Autowired
+    LogService logService;
+
+    private long startTime ;
+
+
+
+    @Pointcut("execution(* com.gis.controller.*.*(..))")//切入点描述 这个是controller包的切入点
+    public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
+
+    @Before("controllerLog()") //在切入点的方法run之前要干的
+    public void logBeforeController(JoinPoint joinPoint) throws Exception {
+        startTime = System.currentTimeMillis();
+        // 记录下请求内容
+        String remoteAddr = request.getRemoteAddr();
+        log.warn("start : {}, uuid: {}" , request.getRequestURI(), startTime);
+        log.info("request Method:{}, IP:{}" , request.getMethod(),  request.getRemoteAddr());
+        log.info("request Args : {}" , Arrays.toString(joinPoint.getArgs()));
+
+
+
+        Map<String, Object> controllerLog = getControllerLog(joinPoint);
+        if (controllerLog.size() == 0) {
+            return;
+        }
+
+        String description = (String)controllerLog.get("description");
+        boolean addDb = (boolean)controllerLog.get("addDb");
+        log.info("request description:{}, addDb:{}", description, addDb);
+
+        // 获取token
+        String token = request.getHeader("token");
+        if (StringUtils.isBlank(token)) {
+            return;
+        }
+
+
+        // 日志保存db
+        if (addDb) {
+            if (StringUtils.isNotBlank(description)) {
+                // 保存数据库
+                List<String> detail = getDetail(description);
+            logService.save(new LogEntity(null, detail.get(0), detail.get(1), remoteAddr));
+            }
+
+        }
+
+
+        //下面这个getSignature().getDeclaringTypeName()是获取包+类名的   然后后面的joinPoint.getSignature.getName()获取了方法名
+//        log.info("request Class_Method : {}" , joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
+
+
+
+    }
+
+
+    //使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)
+    @AfterReturning(returning = "ret", pointcut = "controllerLog()")
+    public void doAfterReturning(Object ret) throws Throwable {
+        // 处理完请求,返回内容
+        log.warn("end:{}, uuid: {},  响应耗时:{} ms", request.getRequestURI(), startTime, (System.currentTimeMillis() - startTime));
+    }
+
+    /**
+     * 获取注解中对方法的描述信息 用于Controller层注解
+     *
+     * @param joinPoint
+     *            切点
+     * @return 方法描述
+     * @throws Exception
+     */
+    private static Map<String, Object> getControllerLog(JoinPoint joinPoint) throws Exception {
+        String targetName = joinPoint.getTarget().getClass().getName();
+        String methodName = joinPoint.getSignature().getName();
+        Object[] arguments = joinPoint.getArgs();
+        Class targetClass = Class.forName(targetName);
+        Method[] methods = targetClass.getMethods();
+        Map<String, Object> result = new HashMap<>();
+        for (Method method : methods) {
+            if (method.getName().equals(methodName)) {
+                Class[] clazzs = method.getParameterTypes();
+                if (clazzs.length == arguments.length) {
+                    WebControllerLog annotation = method.getAnnotation(WebControllerLog.class);
+                    if (annotation != null) {
+                        String description = annotation.description();
+                        boolean addDb = annotation.addDb();
+                        result.put("description", description);
+                        result.put("addDb", addDb);
+                        break;
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    private static List<String> getDetail(String str){
+        String[] split = str.split("-");
+        return Arrays.asList(split);
+    }
+
+}

+ 27 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/dto/PageDateDto.java

@@ -0,0 +1,27 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * Created by Owen on 2019/10/28 0028 12:24
+ * 有时间
+ */
+@Data
+public class PageDateDto extends PageDto {
+
+    /**
+     * 开始时间
+     * 需要用字符串接收
+     */
+    @ApiModelProperty(value = "开始时间", name = "startTime")
+    private String startTime;
+
+
+    @ApiModelProperty(value = "结束时间", name = "endTime")
+    private String endTime;
+
+
+
+}

+ 26 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/dto/PageDto.java

@@ -0,0 +1,26 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * Created by Owen on 2019/10/28 0028 12:24
+ */
+@Data
+public class PageDto {
+
+
+    @ApiModelProperty(value = "起始页码,默认1为第一页", name = "pageNum")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "每页数量", name = "pageSize")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索条件", name = "searchKey")
+    private String searchKey;
+
+
+
+
+}

+ 39 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/po/BaseEntity.java

@@ -0,0 +1,39 @@
+package com.gis.common.base.entity.po;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.*;
+import java.time.LocalDateTime;
+
+@Data
+@MappedSuperclass
+public abstract class BaseEntity {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id")
+    @ApiModelProperty(value = "对象ID")
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+//    @Temporal(TemporalType.TIMESTAMP)
+//    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改时间")
+//    @Temporal(TemporalType.TIMESTAMP)
+//    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 用来批量操作的
+     * 0代表未删除 , 1代表已经删除,默认写0
+     * 需要使用对象类型
+     */
+    @JsonIgnore
+    @JSONField(serialize = false)
+    private Integer isDelete;
+}

+ 43 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/po/LogEntity.java

@@ -0,0 +1,43 @@
+package com.gis.common.base.entity.po;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 收集日志实体类
+ */
+@NoArgsConstructor                 //无参构造
+@AllArgsConstructor                //有参构造
+@Data
+@Table(name = "tb_log")
+public class LogEntity extends BaseEntity implements Serializable {
+
+
+    private static final long serialVersionUID = -3394791736156714542L;
+
+    /**
+     * 操作者用户id
+     */
+    private Long userId;
+
+    /**
+     * 操作类型
+     */
+    private String type;
+
+    /**
+     * 操作记录
+     */
+    private String description;
+
+    /** ip */
+    private String ip;
+
+
+
+
+}

+ 24 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/entity/vo/LogVo.java

@@ -0,0 +1,24 @@
+package com.gis.common.base.entity.vo;
+
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by owen on 2020/5/12.
+ */
+@Data
+public class LogVo extends BaseEntity {
+
+
+    @ApiModelProperty(value = "操作者账号")
+    private String userName;
+
+    @ApiModelProperty(value = "操作类型")
+    private String type;
+
+    @ApiModelProperty(value = "操作记录")
+    private String description;
+
+
+}

+ 35 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java

@@ -0,0 +1,35 @@
+package com.gis.common.base.exception;
+
+public class BaseRuntimeException extends RuntimeException{
+
+    private static final long serialVersionUID = -1518945670203783450L;
+    private Integer code;
+    private String msg;
+
+    public BaseRuntimeException(String msg){
+        super(msg);
+        this.msg = msg;
+    }
+
+    public BaseRuntimeException(Integer code, String msg){
+        super(msg);
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}

+ 17 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/IBaseMapper.java

@@ -0,0 +1,17 @@
+package com.gis.common.base.mapper;
+
+import com.gis.common.base.entity.po.BaseEntity;
+import tk.mybatis.mapper.common.BaseMapper;
+import tk.mybatis.mapper.common.ConditionMapper;
+import tk.mybatis.mapper.common.IdsMapper;
+import tk.mybatis.mapper.common.special.InsertListMapper;
+
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2021/6/28 0018 11:27
+ */
+
+public interface IBaseMapper<T extends BaseEntity, ID extends Serializable> extends BaseMapper<T>,
+        ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T> {
+}

+ 23 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/LogMapper.java

@@ -0,0 +1,23 @@
+package com.gis.common.base.mapper;
+
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.po.LogEntity;
+import com.gis.common.base.entity.vo.LogVo;
+import com.gis.common.base.mapper.provider.LogProvider;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Mapper
+public interface LogMapper extends IBaseMapper<LogEntity, Long> {
+
+    /**
+     * 注意日期,需要传字符串类型
+     */
+    @SelectProvider(type = LogProvider.class, method = "findBySearchKey")
+    List<LogVo> search(PageDateDto param);
+}

+ 41 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/mapper/provider/LogProvider.java

@@ -0,0 +1,41 @@
+package com.gis.common.base.mapper.provider;
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+
+
+/**
+ * Created by owen on 2020/5/13.
+ */
+@Log4j2
+public class LogProvider {
+
+    public String findBySearchKey(PageDateDto param){
+        StringBuffer sql = new StringBuffer(
+                "select z.type, z.description, z.create_time, z.ip, u.user_name from tb_log z left join sys_user u on z.user_id = u.id where z.is_delete = '0' ");
+
+
+        if(StringUtils.isNotBlank(param.getStartTime()) && StringUtils.isNotBlank(param.getEndTime())){
+
+            sql.append(" and z.create_time >= ").append("'").append(param.getStartTime()).append("'");
+            sql.append(" and z.create_time <= ").append("'").append(param.getEndTime()).append("'");
+        }
+
+        String searchKey = param.getSearchKey();
+        if(!StringUtils.isAllBlank(searchKey)){
+            searchKey = StringUtils.trim(searchKey);
+            sql.append(" and (");
+            sql.append("  u.user_name like '%").append(searchKey).append("%'");
+//            sql.append(" or ( z.description like '%").append(searchKey).append("%' )");
+            sql.append(" )");
+        }
+
+        sql.append(" order by z.create_time desc");
+        log.info("sql: {}", sql.toString());
+        return sql.toString();
+    }
+
+
+
+}

+ 47 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/IBaseService.java

@@ -0,0 +1,47 @@
+package com.gis.common.base.service;
+
+import com.github.pagehelper.PageInfo;
+import tk.mybatis.mapper.entity.Condition;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface IBaseService<T, ID extends Serializable> {
+
+    public abstract T findById(ID id);
+
+    public abstract T findOne(T entity);
+
+    public abstract List<T> findByIds(String ids);
+
+    public abstract long count();
+
+    public abstract boolean exists(ID id);
+
+    public abstract int save(T entity);
+
+    public abstract int update(T entity);
+
+    public abstract int updateAll(T entity);
+
+    public abstract int deleteById(ID id);
+
+    public abstract int deleteByIds(String ids);
+
+    public abstract int delete(T entity);
+
+    public abstract List<T> findAll(Condition condition, String orderBy);
+
+    public abstract List<T> findAll(Condition condition);
+
+    public abstract List<T> findAll();
+
+    public abstract PageInfo<T> findAll(int pageNum, int pageSize);
+
+    public abstract PageInfo<T> findAll(int pageNum, int pageSize, String orderBy);
+
+    public abstract PageInfo<T> findAll(Condition condition, int pageNum, int pageSize);
+
+    public abstract PageInfo<T> findAll(Condition condition, int pageNum, int pageSize, String orderBy);
+
+}

+ 18 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/LogService.java

@@ -0,0 +1,18 @@
+package com.gis.common.base.service;
+
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.po.LogEntity;
+import com.gis.common.base.entity.vo.LogVo;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2020/5/12 0011 16:14
+ */
+public interface LogService extends IBaseService<LogEntity, Long> {
+
+
+    List<LogVo> search(PageDateDto param);
+}

+ 205 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/impl/IBaseServiceImpl.java

@@ -0,0 +1,205 @@
+package com.gis.common.base.service.impl;
+
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.entity.po.BaseEntity;
+import com.gis.common.base.mapper.IBaseMapper;
+import com.gis.common.base.service.IBaseService;
+import com.gis.common.constant.ConfigConstant;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+import tk.mybatis.mapper.entity.Condition;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * Created by owen on 2020/2/18 0018 11:22
+ */
+@Slf4j
+@Transactional
+public abstract class IBaseServiceImpl<T extends BaseEntity, ID extends Serializable> implements IBaseService<T, ID> {
+
+
+    @Autowired
+    public ConfigConstant configConstant;
+
+    @Resource
+    HttpServletRequest request;
+
+    public abstract IBaseMapper<T, ID> getBaseMapper();
+
+    private Class<T> entityClass;
+
+    public IBaseServiceImpl(){
+        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
+        entityClass = (Class<T>) pt.getActualTypeArguments()[0];
+    }
+
+    @Override
+    public T findById(ID id){
+        Condition condition = new Condition(entityClass);
+        condition.createCriteria().andEqualTo("id", id);
+        condition.and().andEqualTo("isDelete", 0);
+        List<T> ts = getBaseMapper().selectByCondition(condition);
+        if (ts != null && ts.size() > 0){
+            return ts.get(0);
+        }else{
+            return null;
+        }
+    }
+
+    @Override
+    public T findOne(T entity){
+        entity.setIsDelete(0);
+        return getBaseMapper().selectOne(entity);
+    }
+
+    @Override
+    public List<T> findAll(){
+        Condition condition = new Condition(entityClass);
+        condition.and().andEqualTo("isDelete", 0);
+        return getBaseMapper().selectByCondition(condition);
+    }
+
+    /**
+     * 根据主键字符串进行查询,类中只有存在一个带有@Id注解的字段
+     *
+     * @param ids 如 "1,2,3,4"
+     * @return
+     */
+    @Override
+    public List<T> findByIds(String ids){
+        return getBaseMapper().selectByIds(ids);
+    }
+
+    @Override
+    public long count(){
+        List<T> all = this.findAll();
+        if (all != null && all.size() > 0){
+            return all.size();
+        }
+        return 0;
+    }
+
+    @Override
+    public boolean exists(ID id){
+        return getBaseMapper().existsWithPrimaryKey(id);
+    }
+
+    @Override
+    public int save(T entity) {
+        //migration之后要删掉判断
+        if (entity.getCreateTime() == null){
+            entity.setCreateTime(LocalDateTime.now());
+        }
+        if (entity.getUpdateTime() == null){
+            entity.setUpdateTime(LocalDateTime.now());
+        }
+        entity.setIsDelete(0);
+        return getBaseMapper().insertSelective(entity);
+    }
+
+    @Override
+    public int update(T entity) {
+        //migration之后要删掉判断
+        if (entity.getUpdateTime() == null){
+            entity.setUpdateTime(LocalDateTime.now());
+        }
+        return getBaseMapper().updateByPrimaryKeySelective(entity);
+    }
+
+    @Override
+    public int updateAll(T entity) {
+        //migration之后要删掉判断
+        if (entity.getUpdateTime() == null){
+            entity.setUpdateTime(LocalDateTime.now());
+        }
+        return getBaseMapper().updateByPrimaryKey(entity);
+    }
+
+    @Override
+    public int deleteById(ID id) {
+        return getBaseMapper().deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public int deleteByIds(String ids){
+        return getBaseMapper().deleteByIds(ids);
+    }
+
+    @Override
+    public int delete(T entity){
+        return getBaseMapper().delete(entity);
+    }
+
+    public List<T> findAll(Condition condition){
+        condition.and().andEqualTo("isDelete", 0);
+        return getBaseMapper().selectByCondition(condition);
+    }
+
+    /**
+     *
+     * @param condition
+     * @param orderBy 数据库字段名称 , 倒序(create_time desc)
+     * @return
+     */
+    public List<T> findAll(Condition condition, String orderBy){
+        condition.and().andEqualTo("isDelete", 0);
+        if (!StringUtils.isEmpty(orderBy)){
+            PageHelper.orderBy(orderBy);
+        }
+        return getBaseMapper().selectByCondition(condition);
+    }
+
+    public PageInfo<T> findAll(int pageNum, int pageSize){
+        PageHelper.startPage(pageNum, pageSize);
+        return new PageInfo<>(this.findAll());
+    }
+
+    public PageInfo<T> findAll(int pageNum, int pageSize, String orderBy){
+        PageHelper.startPage(pageNum, pageSize);
+        if (!StringUtils.isEmpty(orderBy)){
+            PageHelper.orderBy(orderBy);
+        }
+        return new PageInfo<>(this.findAll());
+    }
+
+    public PageInfo<T> findAll(Condition condition, int pageNum, int pageSize){
+        PageHelper.startPage(pageNum, pageSize);
+        return new PageInfo<>(this.findAll(condition));
+    }
+
+    public PageInfo<T> findAll(Condition condition, int pageNum, int pageSize, String orderBy){
+        PageHelper.startPage(pageNum, pageSize);
+        if (!StringUtils.isEmpty(orderBy)){
+            PageHelper.orderBy(orderBy);
+        }
+        return new PageInfo<>(this.findAll(condition));
+    }
+
+
+    /**
+     * 设置请求分页数据
+     */
+    public void startPage(PageDto param){
+        Integer pageNum = param.getPageNum();
+        Integer pageSize = param.getPageSize();
+        if (pageNum == null || pageNum <= 0) {
+            pageNum = 0;
+        }
+        if (pageSize == null || pageSize <= 0) {
+            pageSize = 10;
+        }
+        PageHelper.startPage(pageNum, pageSize);
+    }
+
+
+}

+ 34 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/base/service/impl/LogServiceImpl.java

@@ -0,0 +1,34 @@
+package com.gis.common.base.service.impl;
+
+import com.gis.common.base.entity.dto.PageDateDto;
+import com.gis.common.base.entity.po.LogEntity;
+import com.gis.common.base.entity.vo.LogVo;
+import com.gis.common.base.mapper.IBaseMapper;
+import com.gis.common.base.mapper.LogMapper;
+import com.gis.common.base.service.LogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2020/5/12 0011 16:16
+ */
+@Service
+public class LogServiceImpl extends IBaseServiceImpl<LogEntity, Long> implements LogService {
+
+    @Autowired
+    private LogMapper entityMapper;
+
+    @Override
+    public IBaseMapper<LogEntity, Long> getBaseMapper() {
+        return this.entityMapper;
+    }
+
+
+    @Override
+    public List<LogVo> search(PageDateDto param) {
+        return entityMapper.search(param);
+    }
+}

+ 95 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/config/Swagger2.java

@@ -0,0 +1,95 @@
+package com.gis.common.config;
+
+import com.gis.common.constant.ConfigConstant;
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.SecurityReference;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by owen on 2020/2/18
+ *
+ * 集成Swagger有3步:
+ * 1.pom.xml添加依赖
+ * 2.添加Swagger2.class
+ * 3.Application.class 加上注解@EnableSwagger2 表示开启Swagger
+ * 4.http://localhost:8080/doc.html#/
+ *
+ * 2.9.2 不需要字启动类配置注解
+ */
+@Slf4j
+@Configuration
+@EnableSwagger2
+@EnableKnife4j
+public class Swagger2 {
+
+    @Autowired
+    ConfigConstant configConstant;
+
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                .apis(RequestHandlerSelectors.basePackage(configConstant.swaggerPackage))
+                .paths(PathSelectors.any())
+                .build()
+                //添加登录认证,可以使用token
+                .securityContexts(securityContexts())
+                .securitySchemes(securitySchemes())
+                ;
+    }
+
+    private ApiInfo apiInfo() {
+        return new ApiInfoBuilder()
+                .title(configConstant.swaggerTitle)
+                .description(configConstant.swaggerDescription)
+                .version(configConstant.swaggerVersion)
+                .build();
+    }
+
+    private List<ApiKey> securitySchemes() {
+        //设置请求头信息
+        List<ApiKey> result = new ArrayList<>();
+        ApiKey apiKey = new ApiKey("Authorization", "token", "header");
+        result.add(apiKey);
+        return result;
+
+    }
+
+
+    private List<SecurityContext> securityContexts() {
+
+        SecurityContext context = SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .build();
+
+        return Lists.newArrayList(context);
+
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        List<SecurityReference> result = new ArrayList<>();
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        result.add(new SecurityReference("Authorization", authorizationScopes));
+        return result;
+    }
+}

+ 69 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/config/WebMvcConfig.java

@@ -0,0 +1,69 @@
+package com.gis.common.config;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by owen on 2020/2/18 0018 12:01
+ */
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+    /**
+     * 配置全局跨域
+     */
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("*")
+                .allowCredentials(true)
+                .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
+                .maxAge(3600);
+    }
+
+
+
+    /**
+     * fastJson相关设置
+     * Dto包含json,需要配置不然会异常
+     * @return
+     */
+    @Bean
+    public HttpMessageConverters customConverters() {
+
+        FastJsonHttpMessageConverter fastJson = new FastJsonHttpMessageConverter();
+        // 创建FastJson信息转换对象
+        FastJsonConfig fastJsonConfig = new FastJsonConfig();
+
+
+        // 设置全程返回时间
+        fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 设置返回值为null是时输出,不写的话,null 字段 不返回。也可以设置返回空串, 可以同时设置多个
+        fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
+
+        fastJson.setFastJsonConfig(fastJsonConfig);
+
+        //3、中文乱码解决方案
+        List<MediaType> mediaTypeList = new ArrayList<>();
+        mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8);
+        mediaTypeList.add(MediaType.valueOf("text/html;charset=UTF-8"));
+
+        //4、将转换规则应用于转换对象
+        fastJson.setSupportedMediaTypes(mediaTypeList);
+
+        return new HttpMessageConverters(fastJson);
+    }
+
+
+
+}

+ 68 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/constant/ConfigConstant.java

@@ -0,0 +1,68 @@
+package com.gis.common.constant;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by owen on 2020/12/31 0031 14:22
+ *
+ * 全局动态参数
+ */
+@Component
+public class ConfigConstant {
+
+    /** 服务器文件地址*/
+    @Value("${server.file.path}")
+    public  String serverBasePath;
+
+    /**redis token前缀*/
+    @Value("${redis.prefix}")
+    public  String redisPrefix;
+
+//    /**允许上传的文件后缀*/
+//    @Value("${file.allow}")
+//    public String fileAllow;
+
+//    @Value("${project.en}")
+//    public String projectEn;
+
+    @Value("${server.domain}")
+    public String serverDomain;
+
+//    @Value("${oss.point}")
+//    public  String ossPoint;
+//
+//    @Value("${oss.key}")
+//    public  String ossKey;
+//
+//    @Value("${oss.secrecy}")
+//    public  String ossSecrecy;
+//
+//    @Value("${oss.bucket}")
+//    public  String ossBucket;
+//
+//    @Value("${oss.file.path}")
+//    public  String ossBasePath;
+//
+//    @Value("${oss.domain}")
+//    public  String ossDomain;
+
+
+    @Value("${swagger.package}")
+    public  String swaggerPackage;
+
+    @Value("${swagger.title}")
+    public  String swaggerTitle;
+
+    @Value("${swagger.description}")
+    public  String swaggerDescription;
+
+    @Value("${swagger.version}")
+    public  String swaggerVersion;
+
+
+
+
+
+
+}

+ 40 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/ExcelUtils.java

@@ -0,0 +1,40 @@
+package com.gis.common.util;
+
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by owen on 2021/3/8 0008 15:50
+ */
+@Slf4j
+public class ExcelUtils {
+
+    /**
+     *
+     * @param rows 每行数据
+     * @param savePath 保存地址 xxx.xlsx
+     * @param rowTitle 标题
+     */
+    public static void createExcel(List rows, String savePath, Map<String, String> rowTitle) {
+        log.info("rows size: {}", rows.size());
+        ExcelWriter writer = ExcelUtil.getWriter(savePath);
+
+        //自定义标题别名
+        if (rowTitle != null) {
+            for (Map.Entry<String, String> a : rowTitle.entrySet()) {
+                writer.addHeaderAlias(a.getKey(), a.getValue());
+            }
+        }
+
+        // 一次性写出内容,使用默认样式,强制输出标题
+        writer.write(rows, true);
+        // 关闭writer,释放内存
+        writer.close();
+        log.info("excel完成:" +  savePath);
+
+    }
+}

+ 194 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/PasswordUtils.java

@@ -0,0 +1,194 @@
+package com.gis.common.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.PBEKeySpec;
+import javax.crypto.spec.PBEParameterSpec;
+import java.security.Key;
+import java.security.SecureRandom;
+
+public class PasswordUtils {
+
+
+    /**
+     * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES
+     * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1
+     * */
+
+    /**
+     * 定义使用的算法为:PBEWITHMD5andDES算法
+     */
+    public static final String ALGORITHM = "PBEWithMD5AndDES";//加密算法
+    public static final String Salt = "63293188";//密钥
+
+    /**
+     * 定义迭代次数为1000次
+     */
+    private static final int ITERATIONCOUNT = 1000;
+
+    /**
+     * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节
+     *
+     * @return byte[] 盐值
+     */
+    public static byte[] getSalt() throws Exception {
+        // 实例化安全随机数
+        SecureRandom random = new SecureRandom();
+        // 产出盐
+        return random.generateSeed(8);
+    }
+
+    public static byte[] getStaticSalt() {
+        // 产出盐
+        return Salt.getBytes();
+    }
+
+    /**
+     * 根据PBE密码生成一把密钥
+     *
+     * @param password 生成密钥时所使用的密码
+     * @return Key PBE算法密钥
+     */
+    private static Key getPBEKey(String password) {
+        // 实例化使用的算法
+        SecretKeyFactory keyFactory;
+        SecretKey secretKey = null;
+        try {
+            keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
+            // 设置PBE密钥参数
+            PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
+            // 生成密钥
+            secretKey = keyFactory.generateSecret(keySpec);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        return secretKey;
+    }
+
+    /**
+     * 加密明文字符串
+     *
+     * @param plaintext 待加密的明文字符串
+     * @param password  生成密钥时所使用的密码
+     * @param salt      盐值
+     * @return 加密后的密文字符串
+     * @throws Exception
+     */
+    public static String encrypt(String plaintext, String password, byte[] salt) {
+
+        Key key = getPBEKey(password);
+        byte[] encipheredData = null;
+        PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATIONCOUNT);
+        try {
+            Cipher cipher = Cipher.getInstance(ALGORITHM);
+
+            cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
+
+            encipheredData = cipher.doFinal(plaintext.getBytes());
+        } catch (Exception e) {
+        }
+        return bytesToHexString(encipheredData);
+    }
+
+    /**
+     * 解密密文字符串
+     *
+     * @param ciphertext 待解密的密文字符串
+     * @param password   生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致)
+     * @param salt       盐值(如需解密,该参数需要与加密时使用的一致)
+     * @return 解密后的明文字符串
+     * @throws Exception
+     */
+    public static Boolean decrypt(String ciphertext, String password, byte[] salt) {
+
+        Key key = getPBEKey(password);
+        byte[] passDec = null;
+        PBEParameterSpec parameterSpec = new PBEParameterSpec(getStaticSalt(), ITERATIONCOUNT);
+        try {
+            Cipher cipher = Cipher.getInstance(ALGORITHM);
+
+            cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec);
+
+            passDec = cipher.doFinal(hexStringToBytes(ciphertext));
+            return true;
+        } catch (Exception e) {
+            // TODO: handle exception
+            return false;
+        }
+//        return new String(passDec);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param src 字节数组
+     * @return
+     */
+    public static String bytesToHexString(byte[] src) {
+        StringBuilder stringBuilder = new StringBuilder("");
+        if (src == null || src.length <= 0) {
+            return null;
+        }
+        for (int i = 0; i < src.length; i++) {
+            int v = src[i] & 0xFF;
+            String hv = Integer.toHexString(v);
+            if (hv.length() < 2) {
+                stringBuilder.append(0);
+            }
+            stringBuilder.append(hv);
+        }
+        return stringBuilder.toString();
+    }
+
+    /**
+     * 将十六进制字符串转换为字节数组
+     *
+     * @param hexString 十六进制字符串
+     * @return
+     */
+    public static byte[] hexStringToBytes(String hexString) {
+        if (hexString == null || hexString.equals("")) {
+            return null;
+        }
+        hexString = hexString.toUpperCase();
+        int length = hexString.length() / 2;
+        char[] hexChars = hexString.toCharArray();
+        byte[] d = new byte[length];
+        for (int i = 0; i < length; i++) {
+            int pos = i * 2;
+            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+        }
+        return d;
+    }
+
+    private static byte charToByte(char c) {
+        return (byte) "0123456789ABCDEF".indexOf(c);
+    }
+
+    public static void main(String[] args) {
+
+        String userName = "hao";
+        String password = "123456";
+
+        try {
+            byte[] salt = PasswordUtils.getStaticSalt();
+            String ciphertext = PasswordUtils.encrypt(userName, password, salt);
+            System.out.println("密文:" + ciphertext);
+            Boolean plaintext = PasswordUtils.decrypt(ciphertext, password, salt);
+            System.out.println("明文" + plaintext);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+
+
+
+
+    }
+
+
+}

+ 106 - 0
expo_zhengzhou_api/gis_common/src/main/java/com/gis/common/util/Result.java

@@ -0,0 +1,106 @@
+package com.gis.common.util;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 通用返回类
+ *
+ * @author
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Result<T> implements Serializable {
+    private static final long serialVersionUID = -1491499610244557029L;
+    public static final String SUCCESS_MSG = "操作成功";
+    public static int CODE_SUCCESS = 0;
+    public static int CODE_FAILURE = -1;
+    public static String[] NOOP = new String[]{};
+    public static LocalDateTime dataTime = LocalDateTime.now();
+
+    /**
+     * 处理状态:0: 成功, 1: 失败
+     */
+    @ApiModelProperty(value = "处理状态:0: 成功, -1: 失败", name = "code")
+    private int code;
+    /**
+     * 消息
+     */
+    @ApiModelProperty(value = "消息", name = "msg")
+    private String msg;
+    /**
+     * 返回数据
+     */
+    @ApiModelProperty(value = "返回数据", name = "data")
+    private T data;
+
+    @ApiModelProperty(value = "时间戳", name = "timestamp")
+    private LocalDateTime timestamp;
+    /**
+     * 处理成功,并返回数据
+     *
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(Object data) {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, data, dataTime);
+    }
+    /**
+     * 处理成功
+     *
+     * @return data
+     */
+    public static Result success() {
+        return new Result(CODE_SUCCESS, SUCCESS_MSG, NOOP, dataTime);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result success(String msg) {
+        return new Result(CODE_SUCCESS, msg, NOOP, dataTime);
+    }
+    /**
+     * 处理成功
+     *
+     * @param msg  消息
+     * @param data 数据对象
+     * @return data
+     */
+    public static Result success(String msg, Object data) {
+        return new Result(CODE_SUCCESS, msg, data, dataTime);
+    }
+    /**
+     * 处理失败,并返回数据(一般为错误信息)
+     *
+     * @param code 错误代码
+     * @param msg  消息
+     * @return data
+     */
+    public static Result failure(int code, String msg) {
+        return new Result(code, msg, NOOP , dataTime);
+    }
+    /**
+     * 处理失败
+     *
+     * @param msg 消息
+     * @return data
+     */
+    public static Result failure(String msg) {
+        return failure(CODE_FAILURE, msg);
+    }
+
+    @Override
+    public String toString() {
+        return "JsonResult [code=" + code + ", msg=" + msg + ", data="
+                + data + ", timestamp="+ dataTime + "]";
+    }
+}

+ 200 - 0
expo_zhengzhou_api/pom.xml

@@ -0,0 +1,200 @@
+<?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">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>com.gis</groupId>
+  <artifactId>expo_zhengzhou_api</artifactId>
+  <version>1.0.0</version>
+  <packaging>pom</packaging>
+
+  <parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>2.3.4.RELEASE</version>
+    <relativePath/> <!-- lookup parent from repository -->
+  </parent>
+
+  <modules>
+    <module>gis_common</module>
+    <module>gis_api</module>
+    <module>gis_application</module>
+  </modules>
+
+
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <java.version>1.8</java.version>
+    <spring.boot.version>2.3.4.RELEASE</spring.boot.version>
+    <gis.version>1.0.0</gis.version>
+    <druid.version>1.1.14</druid.version>
+    <hutool.version>5.3.3</hutool.version>
+    <lombok.version>1.18.2</lombok.version>
+    <fastjson.version>1.2.75</fastjson.version>
+    <lang3.version>3.7</lang3.version>
+    <knife4j.version>2.0.2</knife4j.version>
+    <mysql.version>8.0.15</mysql.version>
+    <shiro.version>1.7.1</shiro.version>
+    <jwt.version>3.2.0</jwt.version>
+    <jjwt.version>0.6.0</jjwt.version>
+    <aliyun.core.version>4.0.3</aliyun.core.version>
+    <aliyun.dysmsapi.version>1.1.0</aliyun.dysmsapi.version>
+    <aliyun.oss.version>2.5.0</aliyun.oss.version>
+    <tk.mybatis.version>2.0.2</tk.mybatis.version>
+    <tk.mapper.version>4.0.3</tk.mapper.version>
+    <pagehelper.version>1.2.5</pagehelper.version>
+    <poi.version>3.17</poi.version>
+  </properties>
+
+
+  <!--dependencyManagement用于管理依赖版本号, 必须写版本号,不然依赖不上-->
+  <dependencyManagement>
+    <dependencies>
+      <!--模块版本管理-->
+
+      <dependency>
+        <groupId>com.gis</groupId>
+        <artifactId>gis_application</artifactId>
+        <version>${gis.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>com.gis</groupId>
+        <artifactId>gis_common</artifactId>
+        <version>${gis.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>com.gis</groupId>
+        <artifactId>gis_api</artifactId>
+        <version>${gis.version}</version>
+      </dependency>
+
+
+
+
+      <!-- springboot -->
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-data-jpa</artifactId>
+        <version>${spring.boot.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-web</artifactId>
+        <version>${spring.boot.version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-test</artifactId>
+        <scope>test</scope>
+        <version>${spring.boot.version}</version>
+      </dependency>
+
+
+
+      <!--询资料发现从SpringBoot 2.3.0之后放弃了默认对javax.validation 的支持-->
+      <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-validation</artifactId>
+        <version>${spring.boot.version}</version>
+      </dependency>
+
+
+      <!-- lombok -->
+      <dependency>
+        <groupId>org.projectlombok</groupId>
+        <artifactId>lombok</artifactId>
+        <version>${lombok.version}</version>
+      </dependency>
+
+      <!-- fastjson -->
+      <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>fastjson</artifactId>
+        <version>${fastjson.version}</version>
+      </dependency>
+
+      <!--阿里数据库连接池 -->
+      <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>druid-spring-boot-starter</artifactId>
+        <version>${druid.version}</version>
+      </dependency>
+
+      <!--aliyun oss-->
+      <dependency>
+        <groupId>com.aliyun.oss</groupId>
+        <artifactId>aliyun-sdk-oss</artifactId>
+        <version>${aliyun.oss.version}</version>
+      </dependency>
+
+
+      <!-- mysql -->
+      <dependency>
+        <groupId>mysql</groupId>
+        <artifactId>mysql-connector-java</artifactId>
+        <version>${mysql.version}</version>
+      </dependency>
+
+      <!-- 工具类 -->
+      <dependency>
+        <groupId>cn.hutool</groupId>
+        <artifactId>hutool-all</artifactId>
+        <version>${hutool.version}</version>
+      </dependency>
+
+      <!-- StringUtils -->
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-lang3</artifactId>
+        <version>${lang3.version}</version>
+      </dependency>
+
+      <!-- knife4j aip 包-->
+      <dependency>
+        <groupId>com.github.xiaoymin</groupId>
+        <artifactId>knife4j-spring-boot-starter</artifactId>
+        <version>${knife4j.version}</version>
+      </dependency>
+
+
+      <!--tk.mybatis 依赖-->
+      <dependency>
+        <groupId>tk.mybatis</groupId>
+        <artifactId>mapper-spring-boot-starter</artifactId>
+        <version>${tk.mybatis.version}</version>
+        <!-- tk.mybatis 跟springboot jap 包冲突-->
+        <exclusions>
+          <exclusion>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+          </exclusion>
+        </exclusions>
+
+      </dependency>
+
+
+      <!--分页插件-->
+      <dependency>
+        <groupId>com.github.pagehelper</groupId>
+        <artifactId>pagehelper-spring-boot-starter</artifactId>
+        <version>${pagehelper.version}</version>
+      </dependency>
+
+
+      <!--excel 依赖工具包, hutool需要用的-->
+      <dependency>
+        <groupId>org.apache.poi</groupId>
+        <artifactId>poi-ooxml</artifactId>
+        <version>${poi.version}</version>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+</project>