Sfoglia il codice sorgente

管理后台初步

lyhzzz 3 anni fa
parent
commit
86cdbeeb8e
100 ha cambiato i file con 3705 aggiunte e 5 eliminazioni
  1. 81 1
      pom.xml
  2. 38 0
      src/main/java/com/cdf/CdfApplication.java
  3. 0 4
      src/main/java/com/cdf/Test.java
  4. 18 0
      src/main/java/com/cdf/aop/SysLog.java
  5. 96 0
      src/main/java/com/cdf/aop/SysLogAspect.java
  6. 95 0
      src/main/java/com/cdf/business/LoginService.java
  7. 43 0
      src/main/java/com/cdf/common/PageInfo.java
  8. 31 0
      src/main/java/com/cdf/common/ResultCode.java
  9. 82 0
      src/main/java/com/cdf/common/ResultData.java
  10. 53 0
      src/main/java/com/cdf/config/OriginFilter.java
  11. 42 0
      src/main/java/com/cdf/config/WebAppConfig.java
  12. 93 0
      src/main/java/com/cdf/controller/HotSpotController.java
  13. 25 0
      src/main/java/com/cdf/controller/LoginController.java
  14. 9 0
      src/main/java/com/cdf/controller/SceneBackController.java
  15. 71 0
      src/main/java/com/cdf/controller/ShopBackController.java
  16. 97 0
      src/main/java/com/cdf/controller/SysDeptController.java
  17. 42 0
      src/main/java/com/cdf/controller/SysLogController.java
  18. 90 0
      src/main/java/com/cdf/controller/SysMenuController.java
  19. 79 0
      src/main/java/com/cdf/controller/SysRoleController.java
  20. 64 0
      src/main/java/com/cdf/controller/SysUserController.java
  21. 55 0
      src/main/java/com/cdf/controller/UploadController.java
  22. 43 0
      src/main/java/com/cdf/controller/VideoBackController.java
  23. 47 0
      src/main/java/com/cdf/entity/Dept.java
  24. 51 0
      src/main/java/com/cdf/entity/FdkkUser.java
  25. 50 0
      src/main/java/com/cdf/entity/HotRelation.java
  26. 72 0
      src/main/java/com/cdf/entity/Log.java
  27. 52 0
      src/main/java/com/cdf/entity/Menu.java
  28. 48 0
      src/main/java/com/cdf/entity/Role.java
  29. 36 0
      src/main/java/com/cdf/entity/RoleMenu.java
  30. 54 0
      src/main/java/com/cdf/entity/Shop.java
  31. 71 0
      src/main/java/com/cdf/entity/User.java
  32. 60 0
      src/main/java/com/cdf/entity/Video.java
  33. 23 0
      src/main/java/com/cdf/exception/BusinessException.java
  34. 36 0
      src/main/java/com/cdf/exception/GlobalExceptionHandler.java
  35. 95 0
      src/main/java/com/cdf/generate/AutoGenerate.java
  36. 13 0
      src/main/java/com/cdf/httpClient/MyClient.java
  37. 52 0
      src/main/java/com/cdf/httpClient/client/FdkkClient.java
  38. 19 0
      src/main/java/com/cdf/httpClient/client/FdkkLoginAddressSource.java
  39. 19 0
      src/main/java/com/cdf/httpClient/client/FdkkSceneAddressSource.java
  40. 13 0
      src/main/java/com/cdf/httpClient/request/FdkkHotData.java
  41. 15 0
      src/main/java/com/cdf/httpClient/request/FdkkHotRequest.java
  42. 11 0
      src/main/java/com/cdf/httpClient/request/FdkkLoginRequest.java
  43. 12 0
      src/main/java/com/cdf/httpClient/response/FdkkResponse.java
  44. 65 0
      src/main/java/com/cdf/interceptor/BackUserInterceptor.java
  45. 127 0
      src/main/java/com/cdf/interceptor/SceneInterceptor.java
  46. 18 0
      src/main/java/com/cdf/mapper/IDeptMapper.java
  47. 18 0
      src/main/java/com/cdf/mapper/IFdkkUserMapper.java
  48. 18 0
      src/main/java/com/cdf/mapper/IHotRelationMapper.java
  49. 23 0
      src/main/java/com/cdf/mapper/ILogMapper.java
  50. 18 0
      src/main/java/com/cdf/mapper/IMenuMapper.java
  51. 18 0
      src/main/java/com/cdf/mapper/IRoleMapper.java
  52. 18 0
      src/main/java/com/cdf/mapper/IRoleMenuMapper.java
  53. 18 0
      src/main/java/com/cdf/mapper/IShopMapper.java
  54. 22 0
      src/main/java/com/cdf/mapper/IUserMapper.java
  55. 18 0
      src/main/java/com/cdf/mapper/IVideoMapper.java
  56. 12 0
      src/main/java/com/cdf/request/BaseRequest.java
  57. 13 0
      src/main/java/com/cdf/request/LogRequest.java
  58. 9 0
      src/main/java/com/cdf/request/LoginRequest.java
  59. 11 0
      src/main/java/com/cdf/request/RoleMenuRequest.java
  60. 14 0
      src/main/java/com/cdf/request/RoleRequest.java
  61. 10 0
      src/main/java/com/cdf/request/ShopRequest.java
  62. 12 0
      src/main/java/com/cdf/request/UserRequest.java
  63. 13 0
      src/main/java/com/cdf/response/DeptVo.java
  64. 19 0
      src/main/java/com/cdf/response/LogVo.java
  65. 22 0
      src/main/java/com/cdf/response/LoginResponse.java
  66. 16 0
      src/main/java/com/cdf/response/MenuVo.java
  67. 9 0
      src/main/java/com/cdf/response/ShopVo.java
  68. 14 0
      src/main/java/com/cdf/response/UserVo.java
  69. 16 0
      src/main/java/com/cdf/service/IDeptService.java
  70. 16 0
      src/main/java/com/cdf/service/IFdkkUserService.java
  71. 16 0
      src/main/java/com/cdf/service/IHotRelationService.java
  72. 20 0
      src/main/java/com/cdf/service/ILogService.java
  73. 16 0
      src/main/java/com/cdf/service/IMenuService.java
  74. 16 0
      src/main/java/com/cdf/service/IRoleMenuService.java
  75. 16 0
      src/main/java/com/cdf/service/IRoleService.java
  76. 16 0
      src/main/java/com/cdf/service/IShopService.java
  77. 20 0
      src/main/java/com/cdf/service/IUserService.java
  78. 16 0
      src/main/java/com/cdf/service/IVideoService.java
  79. 20 0
      src/main/java/com/cdf/service/impl/DeptServiceImpl.java
  80. 20 0
      src/main/java/com/cdf/service/impl/FdkkUserServiceImpl.java
  81. 20 0
      src/main/java/com/cdf/service/impl/HotRelationServiceImpl.java
  82. 29 0
      src/main/java/com/cdf/service/impl/LogServiceImpl.java
  83. 20 0
      src/main/java/com/cdf/service/impl/MenuServiceImpl.java
  84. 20 0
      src/main/java/com/cdf/service/impl/RoleMenuServiceImpl.java
  85. 20 0
      src/main/java/com/cdf/service/impl/RoleServiceImpl.java
  86. 20 0
      src/main/java/com/cdf/service/impl/ShopServiceImpl.java
  87. 29 0
      src/main/java/com/cdf/service/impl/UserServiceImpl.java
  88. 20 0
      src/main/java/com/cdf/service/impl/VideoServiceImpl.java
  89. 21 0
      src/main/java/com/cdf/test/Test.java
  90. 90 0
      src/main/java/com/cdf/util/Base64Converter.java
  91. 58 0
      src/main/java/com/cdf/util/IPUtils.java
  92. 112 0
      src/main/java/com/cdf/util/JwtUtil.java
  93. 32 0
      src/main/java/com/cdf/util/SecurityUtil.java
  94. 58 0
      src/main/resources/application.yaml
  95. 254 0
      src/main/resources/logback-spring.xml
  96. 5 0
      src/main/resources/mapper/DeptMapper.xml
  97. 5 0
      src/main/resources/mapper/FdkkUserMapper.xml
  98. 5 0
      src/main/resources/mapper/HotRelationMapper.xml
  99. 28 0
      src/main/resources/mapper/LogMapper.xml
  100. 0 0
      src/main/resources/mapper/MenuMapper.xml

+ 81 - 1
pom.xml

@@ -4,9 +4,89 @@
          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>org.example</groupId>
+    <groupId>com.cdf</groupId>
     <artifactId>cdf-gm</artifactId>
     <version>1.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
 
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.12.RELEASE</version>
+        <relativePath/>
+    </parent>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-db</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fdkankan</groupId>
+            <artifactId>4dkankan-utils-fyun</artifactId>
+            <version>2.0.0-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.20</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.dtflys.forest</groupId>
+            <artifactId>forest-spring-boot-starter</artifactId>
+            <version>1.5.20</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.79</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <testFailureIgnore>true</testFailureIgnore>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+
+    </build>
 </project>

+ 38 - 0
src/main/java/com/cdf/CdfApplication.java

@@ -0,0 +1,38 @@
+package com.cdf;
+
+import com.alibaba.fastjson.JSONObject;
+import com.cdf.httpClient.client.FdkkClient;
+import com.cdf.httpClient.request.FdkkLoginRequest;
+import com.cdf.httpClient.response.FdkkResponse;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.BeansException;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@MapperScan("com.cdf.**.mapper")
+@ComponentScan(basePackages = {"com.cdf.*","com.fdkankan.*"})
+public class CdfApplication implements ApplicationContextAware {
+
+    static ApplicationContext applicationContext;
+
+    public static void main(String[] args) {
+        SpringApplication.run(CdfApplication.class, args);
+        FdkkClient bean = applicationContext.getBean(FdkkClient.class);
+        FdkkResponse fdkkLogin = bean.fdkkLogin(new FdkkLoginRequest("18819272208", "75tJeDmsExMjM0NTY=WvimRBSdQWXmuYpdG6"));
+        Object data = fdkkLogin.getData();
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data));
+        System.out.println(jsonObject.get("token"));
+
+        FdkkResponse token = bean.checkToken(jsonObject.getString("token"));
+        System.out.println(token);
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        this.applicationContext = applicationContext;
+    }
+}

+ 0 - 4
src/main/java/com/cdf/Test.java

@@ -1,4 +0,0 @@
-package com.cdf;
-
-public class Test {
-}

+ 18 - 0
src/main/java/com/cdf/aop/SysLog.java

@@ -0,0 +1,18 @@
+package com.cdf.aop;
+
+import java.lang.annotation.*;
+
+/**
+ * 系统日志注解
+ *
+ * @author lipengjun
+ * @email 939961241@qq.com
+ * @date 2017年3月8日 上午10:19:56
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface SysLog {
+
+    String value() default "操作日志";
+}

+ 96 - 0
src/main/java/com/cdf/aop/SysLogAspect.java

@@ -0,0 +1,96 @@
+package com.cdf.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.cdf.common.ResultCode;
+import com.cdf.entity.Log;
+import com.cdf.service.ILogService;
+import com.cdf.util.IPUtils;
+import com.cdf.util.JwtUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+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 java.lang.reflect.Method;
+import java.util.Date;
+import java.util.Enumeration;
+
+/**
+ * 系统日志,切面处理类
+ *
+ */
+@Aspect
+@Component
+@Slf4j
+public class SysLogAspect {
+    @Autowired
+    private ILogService logService;
+
+    /**
+     * 切点
+     */
+    @Pointcut("@annotation(com.cdf.aop.SysLog)")
+    public void logPointCut() {
+
+    }
+
+    /**
+     * 前置通知
+     *
+     * @param joinPoint 连接点
+     */
+    @Around("logPointCut()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        String className = joinPoint.getTarget().getClass().getName();
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        String methodName = method.getName();
+        Object[] args = joinPoint.getArgs();
+        String params = JSON.toJSONString(args[0]);
+        Object result = null;
+
+        //获取request
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        Log sysLog = new Log();
+        SysLog annotation = method.getAnnotation(SysLog.class);
+        if (annotation != null) {
+            //注解上的描述
+            sysLog.setInfo(annotation.value());
+        }
+        sysLog.setMethod(className + "." + methodName + "()");
+        sysLog.setParam(params);
+        sysLog.setIp(IPUtils.getIpAddr(request));
+
+        result = joinPoint.proceed();
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result));
+        sysLog.setResult(ResultCode.SUCCESS.msg);
+        if(jsonObject.getInteger("code") != ResultCode.SUCCESS.code){
+            sysLog.setResult(ResultCode.ERROR.msg);
+        }
+        String token = request.getHeader("token");
+        if(StringUtils.isBlank(token)){
+            token = jsonObject.getJSONObject("data").getString("token");
+        }
+        if(StringUtils.isNotBlank(token)){
+            Integer id = JwtUtil.getId(token);
+            String phone = JwtUtil.getPhone(token);
+            sysLog.setUserId(id);
+            sysLog.setPhone(phone);
+        }
+        logService.save(sysLog);
+        return result;
+    }
+
+}

+ 95 - 0
src/main/java/com/cdf/business/LoginService.java

@@ -0,0 +1,95 @@
+package com.cdf.business;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.cdf.entity.Dept;
+import com.cdf.entity.FdkkUser;
+import com.cdf.entity.Role;
+import com.cdf.entity.User;
+import com.cdf.exception.BusinessException;
+import com.cdf.httpClient.client.FdkkClient;
+import com.cdf.httpClient.request.FdkkLoginRequest;
+import com.cdf.httpClient.response.FdkkResponse;
+import com.cdf.request.LoginRequest;
+import com.cdf.common.ResultCode;
+import com.cdf.response.LoginResponse;
+import com.cdf.service.IDeptService;
+import com.cdf.service.IFdkkUserService;
+import com.cdf.service.IRoleService;
+import com.cdf.service.IUserService;
+import com.cdf.util.Base64Converter;
+import com.cdf.util.JwtUtil;
+import com.cdf.util.SecurityUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+
+@Service
+@Slf4j
+public class LoginService {
+
+    @Autowired
+    IUserService userService;
+    @Autowired
+    IFdkkUserService fdkkUserService;
+    @Resource
+    FdkkClient fdkkClient;
+    @Autowired
+    private IDeptService deptService;
+    @Autowired
+    private IRoleService roleService;
+
+    public LoginResponse  login(LoginRequest param) {
+        //对前端传的密码解密
+        String password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
+        String passwordMd5 = SecurityUtil.MD52(password);
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(User::getPhone,param.getPhone());
+        queryWrapper.eq(User::getPassword,passwordMd5);
+        List<User> userList = userService.list(queryWrapper);
+        if(userList.size() <=0){
+            throw new BusinessException(ResultCode.USER_NOT_EXIST);
+        }
+        User user = userList.get(0);
+        FdkkUser fdkkuser = fdkkUserService.getById(user.getFdkkUserId());
+        if(fdkkuser == null){
+            throw new BusinessException(ResultCode.FD_USER_NOT_EXIST);
+        }
+        LoginResponse loginResponse = new LoginResponse();
+        Dept dept = deptService.getById(user.getDeptId());
+        Role role = roleService.getById(user.getRoleId());
+        loginResponse.setUserVo(user);
+
+        loginResponse.getUserVo().setDeptName(dept.getDeptName());
+        loginResponse.getUserVo().setRoleName(role.getRoleName());
+
+        HashMap<String,Object> jwtMap = new HashMap<>();
+        jwtMap.put("id",user.getId());
+        jwtMap.put("phone",user.getPhone());
+        String token = JwtUtil.createJWT(-1, jwtMap);
+        loginResponse.setToken(token);
+        if(fdkkuser.getToken() != null){
+            FdkkResponse fdkkResponse = fdkkClient.checkToken(fdkkuser.getToken());
+            if(fdkkResponse.getCode() == 0){
+                return loginResponse;
+            }
+        }
+        //调用四维看看登录
+        String fdPassword = Base64Converter.getEncode(Base64Converter.encode(fdkkuser.getPassword()));
+        FdkkResponse fdkkResponse = fdkkClient.fdkkLogin(new FdkkLoginRequest(fdkkuser.getUserName(), fdPassword));
+        if(fdkkResponse.getCode() != 0){
+            throw new BusinessException(fdkkResponse.getCode(), fdkkResponse.getMsg());
+        }
+        log.info("调用四维看看登录结果为:{}", fdkkResponse);
+        Object data = fdkkResponse.getData();
+        JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data));
+        fdkkuser.setToken(jsonObject.getString("token"));
+        fdkkUserService.updateById(fdkkuser);
+        return loginResponse;
+    }
+
+}

+ 43 - 0
src/main/java/com/cdf/common/PageInfo.java

@@ -0,0 +1,43 @@
+package com.cdf.common;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PageInfo<T> {
+
+    private long pageNum;
+
+    private long pageSize;
+
+    private long total;
+
+    private T list;
+
+    public static PageInfo PageInfo(Page page){
+        return PageInfo.builder()
+            .pageNum(page.getCurrent())
+            .pageSize(page.getSize())
+            .total(page.getTotal())
+            .list(page.getRecords())
+            .build();
+    }
+    public static PageInfo PageInfo(Long currentPage, Long pageSize, Long total, List<?> list){
+        return PageInfo.builder()
+            .pageNum(currentPage)
+            .pageSize(pageSize)
+            .total(total)
+            .list(list)
+            .build();
+    }
+
+
+}

+ 31 - 0
src/main/java/com/cdf/common/ResultCode.java

@@ -0,0 +1,31 @@
+package com.cdf.common;
+
+public enum ResultCode {
+    SUCCESS(0,"操作成功"),
+    ERROR(-1,"操作失败"),
+
+    NOT_LOGIN(2001,"请重新登录!"),
+    USER_NOT_EXIST(2002,"用户不存在!"),
+    FD_USER_NOT_EXIST(2003,"四维用户不存在!"),
+    PHONE_EXIST(2004,"手机号码已注册!"),
+
+    NOT_RECORD(4001,"没有记录"),
+    PARAM_MISS(40002,"参数缺失!"),
+
+    NOT_DELETE_PARENT_DEPT(6001,"集团总部不可删除"),
+    NOT_DELETE_DEPT(6002,"请先删除专柜下用户"),
+
+    UPLOAD_ERROR(7001,"文件上传失败"),
+    UPLOAD_FILE_NO_EXIST(7002,"上传文件不存在"),
+    UPLOAD_FILE_TO_LONG(7003,"文件上传过大"),
+    UPLOAD_FILE_TYPE_ERROR(7004,"文件类型错误");
+
+    public int code;
+    public String msg;
+
+    ResultCode(int code ,String msg){
+        this.code = code;
+        this.msg = msg;
+    }
+
+}

+ 82 - 0
src/main/java/com/cdf/common/ResultData.java

@@ -0,0 +1,82 @@
+package com.cdf.common;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Calendar;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResultData<T> implements Serializable {
+    /**
+     * 状态码
+     */
+    private int code;
+    /**
+     * 响应信息
+     */
+    private String message;
+    /**
+     * 后端返回结果
+     */
+    private T data;
+    /**
+     * 后端返回结果
+     */
+    private Boolean success;
+    /**
+     * 响应时间戳
+     */
+    private long timestamp = Calendar.getInstance().getTimeInMillis();
+
+    public static ResultData ok() {
+        return ok(null);
+    }
+
+    public static ResultData ok(Object data) {
+        return ok(ResultCode.SUCCESS.msg, data);
+    }
+
+    public static ResultData ok(String msg, Object data) {
+        return base(ResultCode.SUCCESS.code, msg, data, true);
+    }
+
+    public static ResultData ok(int page, int pageSize, int total, Object data) {
+        return ok(new PageInfo(page, pageSize, total, data));
+    }
+
+    public static ResultData error( String msg) {
+        return error(ResultCode.ERROR.code, msg, null);
+    }
+    public static ResultData error(int code, String msg) {
+        return error(code, msg, null);
+    }
+
+    public static ResultData error(int code, String msg, Object data) {
+        return base(code, msg, data, false);
+    }
+
+    public static ResultData error(ResultCode errorCode, Object data) {
+        return base(errorCode.code, errorCode.msg, data, false);
+    }
+
+    public static ResultData error(ResultCode errorCode) {
+        return error(errorCode.code, errorCode.msg);
+    }
+    public static String errorString(ResultCode errorCode) {
+        return JSONObject.toJSONString(error(errorCode.code, errorCode.msg));
+    }
+
+    private static ResultData base(int code, String msg, Object data, Boolean success) {
+        ResultData rd = new ResultData();
+        rd.setCode(code);
+        rd.setMessage(msg);
+        rd.setData(data);
+        rd.setSuccess(success);
+        return rd;
+    }
+}

+ 53 - 0
src/main/java/com/cdf/config/OriginFilter.java

@@ -0,0 +1,53 @@
+package com.cdf.config;
+
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+@Component("originFilter")
+@ServletComponentScan
+@WebFilter(urlPatterns = "/*", filterName = "shiroLoginFilter")
+public class OriginFilter implements Filter {
+
+	private FilterConfig config = null;
+
+	@Override
+	public void init(FilterConfig config) throws ServletException {
+		this.config = config;
+	}
+
+	@Override
+	public void destroy() {
+		this.config = null;
+	}
+
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		//指定允许其他域名访问
+		response.setHeader("Access-Control-Allow-Origin", "*");
+		// 允许请求的方法
+		response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT");
+		// 多少秒内,不需要再发送预检验请求,可以缓存该结果
+		response.setHeader("Access-Control-Max-Age", "3600");
+		// 表明它允许跨域请求包含xxx头
+		response.setHeader("Access-Control-Allow-Headers",
+				"Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires,userAgent,User-Agent,version, " +
+				" Content-Type, content-type,X-E4M-With,Authorization,token,authorization");
+		response.setHeader("Access-Control-Allow-Credentials", "true");
+		if (request.getMethod().equals("OPTIONS")) {
+			response.setStatus(200);
+			response.getWriter().write("OPTIONS returns OK");
+			return;
+		}
+		filterChain.doFilter(servletRequest, response);
+	}
+}
+

+ 42 - 0
src/main/java/com/cdf/config/WebAppConfig.java

@@ -0,0 +1,42 @@
+package com.cdf.config;
+
+import com.cdf.interceptor.BackUserInterceptor;
+import com.cdf.interceptor.SceneInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+@Configuration
+public class WebAppConfig implements WebMvcConfigurer {
+
+	@Autowired
+	BackUserInterceptor backUserInterceptor;
+	@Autowired
+	SceneInterceptor sceneInterceptor;
+
+	@Override
+	public void addCorsMappings(CorsRegistry registry) {
+		registry.addMapping("/**").allowCredentials(true).allowedHeaders("*").allowedOrigins("*").allowedMethods("*");
+
+	}
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+//		registry.addInterceptor(backUserInterceptor).addPathPatterns("/**")
+//      .excludePathPatterns("/**/login/**","/**/service/**");
+		registry.addInterceptor(sceneInterceptor).addPathPatterns("/service/**")
+				.excludePathPatterns("/service/scene/edit/tag/save");
+		WebMvcConfigurer.super.addInterceptors(registry);
+	}
+
+	@Override
+	public void addResourceHandlers(ResourceHandlerRegistry registry) {
+		WebMvcConfigurer.super.addResourceHandlers(registry);
+	}
+
+}
+

+ 93 - 0
src/main/java/com/cdf/controller/HotSpotController.java

@@ -0,0 +1,93 @@
+package com.cdf.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.cdf.aop.SysLog;
+import com.cdf.common.ResultData;
+import com.cdf.entity.FdkkUser;
+import com.cdf.entity.HotRelation;
+import com.cdf.exception.BusinessException;
+import com.cdf.httpClient.client.FdkkClient;
+import com.cdf.httpClient.request.FdkkHotData;
+import com.cdf.httpClient.request.FdkkHotRequest;
+import com.cdf.httpClient.response.FdkkResponse;
+import com.cdf.service.IFdkkUserService;
+import com.cdf.service.IHotRelationService;
+import com.cdf.util.JwtUtil;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import jdk.nashorn.internal.parser.Token;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/hotSpot")
+public class HotSpotController {
+
+    @Resource
+    private UploadToOssUtil uploadToOssUtil;
+    @Value("${oss.bucket}")
+    private String bucket;
+    @Value("${fdkk.hot-path}")
+    private String hotPath;
+    @Resource
+    private FdkkClient fdkkClient;
+    @Autowired
+    private IFdkkUserService fdkkUserService;
+    @Autowired
+    private IHotRelationService hotRelationService;
+
+    @PostMapping("/save")
+    @SysLog("/热点新增编辑")
+    public FdkkResponse save(@RequestBody FdkkHotRequest fdkkHotRequest, @RequestHeader String token){
+        Integer userId = JwtUtil.getId(token);
+        FdkkUser fdkkUser = fdkkUserService.getById(userId);
+        FdkkResponse fdkkResponse = fdkkClient.hotSave(fdkkHotRequest, fdkkUser.getToken());
+        if(fdkkResponse.getCode() != 0){
+            throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg());
+        }
+        List<FdkkHotData> hotDataList = fdkkHotRequest.getHotDataList();
+        for (FdkkHotData fdkkHotData : hotDataList) {
+            List<Integer> relationIds = fdkkHotData.getRelationIds();
+            String sid = fdkkHotData.getSid();
+            Integer type = fdkkHotData.getHotType();
+            HotRelation hotRelation = new HotRelation();
+            hotRelation.setHotId(sid);
+            hotRelation.setHotType(type);
+            hotRelation.setRelationIds(JSONArray.toJSONString(relationIds));
+            hotRelation.setNum(fdkkHotRequest.getNum());
+            hotRelationService.saveOrUpdate(hotRelation);
+        }
+        return fdkkResponse;
+    }
+
+    @PostMapping("/delete")
+    @SysLog("/热点删除")
+    public ResultData delete(@RequestBody FdkkHotRequest fdkkHotRequest, @RequestHeader String token){
+        FdkkResponse fdkkResponse = fdkkClient.hotDelete(fdkkHotRequest, token);
+        if(fdkkResponse.getCode() ==0){
+            hotRelationService.removeByIds(fdkkHotRequest.getSidList());
+        }
+        return ResultData.ok();
+    }
+
+
+    @GetMapping("/list")
+    public ResultData list (@RequestParam(required = false) String num){
+        String content = uploadToOssUtil.getObjectContent(bucket, String.format(hotPath, num));
+        JSONArray jsonArray = JSONObject.parseArray(content);
+        if(jsonArray == null){
+            return ResultData.ok();
+        }
+        for (Object obj : jsonArray) {
+            JSONObject jsonObject= (JSONObject) obj;
+            String sid = jsonObject.getString("sid");
+            HotRelation hotRelation = hotRelationService.getById(sid);
+            jsonObject.put("hotRelation",hotRelation);
+        }
+        return ResultData.ok(jsonArray);
+    }
+}

+ 25 - 0
src/main/java/com/cdf/controller/LoginController.java

@@ -0,0 +1,25 @@
+package com.cdf.controller;
+
+import com.cdf.aop.SysLog;
+import com.cdf.business.LoginService;
+import com.cdf.common.ResultData;
+import com.cdf.request.LoginRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+@RestController
+@RequestMapping("/back")
+public class LoginController {
+
+    @Autowired
+    private LoginService loginService;
+
+    @PostMapping("/login")
+    @SysLog("登录")
+    ResultData login(@RequestBody LoginRequest param){
+        return ResultData.ok(loginService.login(param));
+    }
+}

+ 9 - 0
src/main/java/com/cdf/controller/SceneBackController.java

@@ -0,0 +1,9 @@
+package com.cdf.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/back/scene")
+public class SceneBackController {
+}

+ 71 - 0
src/main/java/com/cdf/controller/ShopBackController.java

@@ -0,0 +1,71 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.aop.SysLog;
+import com.cdf.common.PageInfo;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Dept;
+import com.cdf.entity.Shop;
+import com.cdf.request.ShopRequest;
+import com.cdf.request.UserRequest;
+import com.cdf.response.ShopVo;
+import com.cdf.service.IDeptService;
+import com.cdf.service.IShopService;
+import com.dtflys.forest.annotation.Post;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/back/shop")
+public class ShopBackController {
+
+    @Autowired
+    IShopService shopService;
+    @Autowired
+    IDeptService deptService;
+
+    @PostMapping("/saveOrUpdate")
+    @SysLog("店铺新增或修改")
+    public ResultData saveOrUpdate(@RequestBody Shop shop){
+        shopService.saveOrUpdate(shop);
+        return ResultData.ok();
+    }
+    @PostMapping("/list")
+    public ResultData list(@RequestBody ShopRequest param){
+        LambdaQueryWrapper<Shop> wrapper = new LambdaQueryWrapper<>();
+        if(StringUtils.isNotBlank(param.getShopName())){
+            wrapper.eq(Shop::getShopName,param.getShopName());
+        }
+        if(param.getDeptId() !=null){
+            wrapper.eq(Shop::getDeptId,param.getDeptId());
+        }
+        Page<Shop> page = shopService.page(new Page<>(param.getPage(), param.getPageSize()), wrapper);
+        List<ShopVo> pageVo = new ArrayList<>();
+        for (Shop shop : page.getRecords()) {
+            ShopVo shopVo = new ShopVo();
+            BeanUtils.copyProperties(shop,shopVo);
+            Dept dept = deptService.getById(shop.getDeptId());
+            if(dept !=null){
+                shopVo.setDeptName(dept.getDeptName());
+            }
+            pageVo.add(shopVo);
+        }
+        return ResultData.ok(PageInfo.PageInfo(page.getCurrent(),page.getSize(),page.getTotal(),pageVo));
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody ShopRequest param){
+        shopService.removeById(param.getId());
+        return ResultData.ok();
+    }
+
+}
+

+ 97 - 0
src/main/java/com/cdf/controller/SysDeptController.java

@@ -0,0 +1,97 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.cdf.aop.SysLog;
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Dept;
+import com.cdf.entity.Menu;
+import com.cdf.entity.User;
+import com.cdf.exception.BusinessException;
+import com.cdf.response.DeptVo;
+import com.cdf.response.MenuVo;
+import com.cdf.service.IDeptService;
+import com.cdf.service.IUserService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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.util.ArrayList;
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/back/dept")
+public class SysDeptController {
+
+    @Autowired
+    private IDeptService deptService;
+    @Autowired
+    private IUserService userService;
+
+    @PostMapping("/saveOrUpdate")
+    @SysLog("组织架构新增或修改")
+    public ResultData saveOrUpdate(@RequestBody Dept dept){
+        if(dept.getId().equals(dept.getParentId())){
+            throw new BusinessException(ResultCode.ERROR);
+        }
+        deptService.saveOrUpdate(dept);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/delete")
+    @SysLog("组织架构删除")
+    public ResultData delete(@RequestBody Dept param){
+        Dept dept = deptService.getById(param.getId());
+        if(dept == null ){
+            throw new BusinessException(ResultCode.NOT_RECORD);
+        }
+        if(dept.getParentId() ==null){
+            throw new BusinessException(ResultCode.NOT_DELETE_PARENT_DEPT);
+        }
+        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(User::getDeptId,dept.getId());
+        long count = userService.count(queryWrapper);
+        if(count > 0){
+            throw new BusinessException(ResultCode.NOT_DELETE_DEPT);
+        }
+        deptService.removeById(dept.getId());
+        return ResultData.ok();
+    }
+
+    @PostMapping("/allList")
+    public ResultData list(){
+        return ResultData.ok(getDeptList(null));
+
+    }
+
+    private List<DeptVo> getDeptList(Integer parentId) {
+        LambdaQueryWrapper<Dept> queryWrapper = new LambdaQueryWrapper<>();
+        if(parentId == null){
+            queryWrapper.isNull(Dept::getParentId);
+        }else {
+            queryWrapper.eq(Dept::getParentId,parentId);
+        }
+        List<Dept> list = deptService.list(queryWrapper);
+        List<DeptVo> deptVoList = new ArrayList<>();
+        if(list.size() <=0){
+            return deptVoList;
+        }
+        for (Dept dept : list) {
+            DeptVo deptVo = new DeptVo();
+            BeanUtils.copyProperties(dept,deptVo);
+            deptVoList.add(deptVo);
+        }
+        for (DeptVo deptVo : deptVoList) {
+            deptVo.setChildren(getDeptList(deptVo.getId()));
+        }
+        return deptVoList;
+    }
+
+}
+

+ 42 - 0
src/main/java/com/cdf/controller/SysLogController.java

@@ -0,0 +1,42 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Log;
+import com.cdf.entity.User;
+import com.cdf.request.LogRequest;
+import com.cdf.request.UserRequest;
+import com.cdf.response.LogVo;
+import com.cdf.service.ILogService;
+import com.cdf.service.IUserService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+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.util.ArrayList;
+import java.util.List;
+
+
+@RestController
+@RequestMapping("/back/log")
+public class SysLogController {
+
+    @Autowired
+    private ILogService logService;
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody LogRequest param){
+        PageInfo<LogVo> pageInfo = logService.getPageByParam(param);
+        return ResultData.ok(pageInfo);
+    }
+
+}
+

+ 90 - 0
src/main/java/com/cdf/controller/SysMenuController.java

@@ -0,0 +1,90 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Menu;
+import com.cdf.entity.RoleMenu;
+import com.cdf.entity.User;
+import com.cdf.response.MenuVo;
+import com.cdf.service.IMenuService;
+import com.cdf.service.IRoleMenuService;
+import com.cdf.service.IUserService;
+import com.cdf.util.JwtUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@RestController
+@RequestMapping("/back/menu")
+public class SysMenuController {
+
+    @Autowired
+    private IMenuService menuService;
+    @Autowired
+    private IRoleMenuService roleMenuService;
+    @Autowired
+    private IUserService userService;
+
+    @PostMapping("/saveOrUpdate")
+    public ResultData saveOrUpdate(@RequestBody Menu menu){
+        menuService.saveOrUpdate(menu);
+        return ResultData.ok();
+    }
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody Menu menu){
+        menuService.removeById(menu);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/userList")
+    public ResultData user(@RequestHeader String token){
+        Integer userId = JwtUtil.getId(token);
+        User user = userService.getById(userId);
+        LambdaQueryWrapper<RoleMenu> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoleMenu::getRoleId,user.getRoleId());
+        List<RoleMenu> list = roleMenuService.list(wrapper);
+        List<Integer> menuId = list.stream().map(RoleMenu::getMenuId).collect(Collectors.toList());
+        List<MenuVo> menuList = getMenuList(null,menuId);
+        return ResultData.ok(menuList);
+    }
+
+
+    @PostMapping("/allList")
+    public ResultData list(){
+        List<MenuVo> menuList = getMenuList(null,null);
+        return ResultData.ok(menuList);
+    }
+
+    private List<MenuVo> getMenuList(Integer parentId,List<Integer> menuIds) {
+        LambdaQueryWrapper<Menu> queryWrapper = new LambdaQueryWrapper<>();
+        if(parentId == null){
+            queryWrapper.isNull(Menu::getParentId);
+        }else {
+            queryWrapper.eq(Menu::getParentId,parentId);
+        }
+        if(menuIds != null){
+            queryWrapper.in(Menu::getId,menuIds);
+        }
+        List<Menu> list = menuService.list(queryWrapper);
+        List<MenuVo> menuVoList = new ArrayList<>();
+        if(list.size() <=0){
+            return menuVoList;
+        }
+        for (Menu menu : list) {
+            MenuVo menuVo = new MenuVo();
+            BeanUtils.copyProperties(menu,menuVo);
+            menuVoList.add(menuVo);
+        }
+        for (MenuVo menu : menuVoList) {
+            menu.setChildren(getMenuList(menu.getId(),menuIds));
+        }
+        return menuVoList;
+    }
+}
+

+ 79 - 0
src/main/java/com/cdf/controller/SysRoleController.java

@@ -0,0 +1,79 @@
+package com.cdf.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Role;
+import com.cdf.entity.RoleMenu;
+import com.cdf.exception.BusinessException;
+import com.cdf.request.RoleMenuRequest;
+import com.cdf.request.RoleRequest;
+import com.cdf.service.IRoleMenuService;
+import com.cdf.service.IRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+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.util.ArrayList;
+import java.util.List;
+
+@RestController
+@RequestMapping("/back/role")
+public class SysRoleController {
+
+    @Autowired
+    private IRoleService roleService;
+    @Autowired
+    private IRoleMenuService roleMenuService;
+
+    @PostMapping("/saveOrUpdate")
+    public ResultData saveOrUpdate(@RequestBody Role role){
+        roleService.saveOrUpdate(role);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody Role role){
+        roleService.removeById(role.getId());
+        return ResultData.ok();
+    }
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody RoleRequest param){
+        return ResultData.ok(PageInfo.PageInfo(roleService.page(new Page<>(param.getPage(),param.getPageSize()))));
+    }
+
+    @PostMapping("/saveRoleMenu")
+    public ResultData saveRoleMenu(@RequestBody RoleMenuRequest param){
+        if(param.getRoleId() == null){
+            throw new BusinessException(ResultCode.PARAM_MISS);
+        }
+        LambdaQueryWrapper<RoleMenu> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RoleMenu::getRoleId,param.getRoleId());
+        List<RoleMenu> roleMenuList = roleMenuService.list(wrapper);
+        if(roleMenuList.size() >0){
+            roleMenuService.removeByIds(roleMenuList);
+        }
+        if(param.getMenuIds() == null || param.getMenuIds().size() <=0){
+            return ResultData.ok();
+        }
+        List<RoleMenu> roleMenus = new ArrayList<>();
+        for (Integer menuId : param.getMenuIds()) {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(param.getRoleId());
+            roleMenu.setMenuId(menuId);
+            roleMenus.add(roleMenu);
+        }
+        roleMenuService.saveBatch(roleMenus);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/allList")
+    public ResultData allList(){
+        return ResultData.ok(roleService.list());
+    }
+}

+ 64 - 0
src/main/java/com/cdf/controller/SysUserController.java

@@ -0,0 +1,64 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.aop.SysLog;
+import com.cdf.common.PageInfo;
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.entity.User;
+import com.cdf.exception.BusinessException;
+import com.cdf.request.UserRequest;
+import com.cdf.response.UserVo;
+import com.cdf.service.IUserService;
+import com.cdf.util.Base64Converter;
+import com.cdf.util.SecurityUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+
+@RestController
+@RequestMapping("/back/user")
+public class SysUserController {
+
+    @Autowired
+    private IUserService userService;
+
+    @PostMapping("/saveOrUpdate")
+    @SysLog("系统用户新增修改")
+    public ResultData saveOrUpdate(@RequestBody User user){
+       if(user.getId() == null){
+           LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper();
+           queryWrapper.eq(User::getPhone,user.getPhone());
+           long count = userService.count(queryWrapper);
+           if(count >0){
+                throw  new BusinessException(ResultCode.PHONE_EXIST);
+           }
+       }
+        String password = Base64Converter.decode(Base64Converter.subText(user.getPassword()));
+        String passwordMd5 = SecurityUtil.MD52(password);
+        user.setPassword(passwordMd5);
+        user.setFdkkUserId(1);
+        userService.saveOrUpdate(user);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/list")
+    public ResultData list(@RequestBody UserRequest param){
+        PageInfo<UserVo> page = userService.getPageByParam(param);
+        return ResultData.ok(page);
+    }
+
+    @PostMapping("/delete")
+    public ResultData delete(@RequestBody UserRequest param){
+        userService.removeById(param.getId());
+        return ResultData.ok();
+    }
+
+
+}
+

+ 55 - 0
src/main/java/com/cdf/controller/UploadController.java

@@ -0,0 +1,55 @@
+package com.cdf.controller;
+
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.exception.BusinessException;
+import com.fdkankan.fyun.oss.UploadToOssUtil;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.UUID;
+
+@RestController
+@RequestMapping("/back/upload")
+public class UploadController {
+
+    @Resource
+    private UploadToOssUtil uploadToOssUtil;
+
+    @Value("${upload.file-path}")
+    private String filePath;
+    @Value("${upload.query-path}")
+    private String queryPath;
+
+
+    @PostMapping("/file")
+    public ResultData uploadVideo(@RequestParam(required = false) MultipartFile file) throws Exception {
+        if(file.isEmpty()){
+            throw new BusinessException(ResultCode.UPLOAD_FILE_NO_EXIST);
+        }
+        if(file.getSize()>20 * 1024 * 1024){
+            System.out.println(file.getSize());
+            throw new BusinessException(ResultCode.UPLOAD_FILE_TO_LONG);
+        }
+        //获取文件名
+        String fileName = file.getOriginalFilename();
+        //获取文件后缀名
+        String suffixName = fileName.substring(fileName.lastIndexOf("."));
+        //重新生成文件名
+        fileName = UUID.randomUUID().toString().replace("-","");
+        File localFile = File.createTempFile(fileName,suffixName);
+        file.transferTo(localFile);
+        String path = localFile.getPath();
+        uploadToOssUtil.upload(path,filePath + fileName + suffixName);
+        if(!uploadToOssUtil.existKey(filePath + fileName + suffixName)){
+            throw new BusinessException(ResultCode.UPLOAD_ERROR);
+        }
+        return ResultData.ok( queryPath + filePath + fileName + suffixName);
+    }
+}

+ 43 - 0
src/main/java/com/cdf/controller/VideoBackController.java

@@ -0,0 +1,43 @@
+package com.cdf.controller;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.common.ResultData;
+import com.cdf.entity.Video;
+import com.cdf.request.BaseRequest;
+import com.cdf.service.IVideoService;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+
+@RestController
+@RequestMapping("/back/video")
+public class VideoBackController {
+
+    @Autowired
+    private IVideoService videoService;
+
+    @PostMapping("/saveOrUpdate")
+    public ResultData saveOrUpdate(@RequestBody Video video){
+        videoService.saveOrUpdate(video);
+        return ResultData.ok();
+    }
+
+    @PostMapping("/list")
+    public ResultData list (@RequestBody BaseRequest param){
+        Page<Video> page = videoService.page(new Page<>(param.getPage(), param.getPageSize()));
+        return ResultData.ok(PageInfo.PageInfo(page));
+    }
+    @PostMapping("/delete")
+    public ResultData delete (@RequestBody BaseRequest param){
+        videoService.removeById(param.getId());
+        return ResultData.ok();
+    }
+
+}
+

+ 47 - 0
src/main/java/com/cdf/entity/Dept.java

@@ -0,0 +1,47 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+@TableName("t_dept")
+public class Dept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Integer id;
+
+    @TableField("dept_name")
+    private String deptName;
+
+    @TableField("parent_id")
+    private Integer parentId;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 51 - 0
src/main/java/com/cdf/entity/FdkkUser.java

@@ -0,0 +1,51 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+@TableName("t_fdkk_user")
+public class FdkkUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("user_name")
+    private String userName;
+
+    @TableField("password")
+    private String password;
+
+    @TableField("token")
+    private String token;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 50 - 0
src/main/java/com/cdf/entity/HotRelation.java

@@ -0,0 +1,50 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+@TableName("t_hot_relation")
+public class HotRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("hot_id")
+    private String hotId;
+
+    @TableField("relation_ids")
+    private String relationIds;
+
+    @TableField("num")
+    private String num;
+
+    @TableField("hot_type")
+    private Integer hotType;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 72 - 0
src/main/java/com/cdf/entity/Log.java

@@ -0,0 +1,72 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+@TableName("t_log")
+public class Log implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 请求方法
+     */
+    @TableField("method")
+    private String method;
+
+    /**
+     * 描述
+     */
+    @TableField("info")
+    private String info;
+
+    /**
+     * 参数
+     */
+    @TableField("param")
+    private String param;
+
+    @TableField("ip")
+    private String ip;
+
+    @TableField("user_id")
+    private Integer userId;
+
+    @TableField("phone")
+    private String phone;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+    @TableField("result")
+    private String result;
+
+
+}

+ 52 - 0
src/main/java/com/cdf/entity/Menu.java

@@ -0,0 +1,52 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-07
+ */
+@Getter
+@Setter
+@TableName("t_menu")
+public class Menu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("menu_name")
+    private String menuName;
+
+    @TableField("menu_url")
+    private String menuUrl;
+
+    @TableField("parent_id")
+    private Integer parentId;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+}

+ 48 - 0
src/main/java/com/cdf/entity/Role.java

@@ -0,0 +1,48 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Getter
+@Setter
+@TableName("t_role")
+public class Role implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("role_name")
+    private String roleName;
+
+    @TableField("role_type")
+    private Integer roleType;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 36 - 0
src/main/java/com/cdf/entity/RoleMenu.java

@@ -0,0 +1,36 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Getter
+@Setter
+@TableName("t_role_menu")
+public class RoleMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("role_id")
+    private Integer roleId;
+
+    @TableField("menu_id")
+    private Integer menuId;
+
+
+}

+ 54 - 0
src/main/java/com/cdf/entity/Shop.java

@@ -0,0 +1,54 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Getter
+@Setter
+@TableName("t_shop")
+public class Shop implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("shop_name")
+    private String shopName;
+
+    @TableField("scene_url")
+    private String sceneUrl;
+
+    @TableField("shop_logo")
+    private String shopLogo;
+
+    @TableField("dept_id")
+    private Integer deptId;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 71 - 0
src/main/java/com/cdf/entity/User.java

@@ -0,0 +1,71 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Getter
+@Setter
+@TableName("t_user")
+public class User implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("nick_name")
+    private String nickName;
+
+    /**
+     * 用户名
+     */
+    @TableField("phone")
+    private String phone;
+
+    /**
+     * 密码
+     */
+    @TableField("password")
+    private String password;
+
+    /**
+     * 四维看看用户id
+     */
+    @TableField("fdkk_user_id")
+    private Integer fdkkUserId;
+
+    @TableField("dept_id")
+    private Integer deptId;
+
+
+    @TableField("role_id")
+    private Integer roleId;
+
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 60 - 0
src/main/java/com/cdf/entity/Video.java

@@ -0,0 +1,60 @@
+package com.cdf.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Getter
+@Setter
+@TableName("t_video")
+public class Video implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 视频名称
+     */
+    @TableField("video_name")
+    private String videoName;
+
+    /**
+     * 视频链接
+     */
+    @TableField("video_url")
+    private String videoUrl;
+
+    /**
+     * 显示状态 0显示,1不显示
+     */
+    @TableField("show_status")
+    private Boolean showStatus;
+
+    @TableField("tb_status")
+    @TableLogic
+    private Boolean tbStatus;
+
+    @TableField("create_time")
+    private String createTime;
+
+    @TableField("update_time")
+    private String updateTime;
+
+
+}

+ 23 - 0
src/main/java/com/cdf/exception/BusinessException.java

@@ -0,0 +1,23 @@
+package com.cdf.exception;
+
+import com.cdf.common.ResultCode;
+import lombok.Data;
+
+/**
+ * 自定义业务异常类
+ */
+@Data
+public class BusinessException extends RuntimeException {
+    private int code;
+    private String message;
+
+    public BusinessException(ResultCode errorCode){
+        this.code = errorCode.code;
+        this.message = errorCode.msg;
+    }
+    public BusinessException(Integer code,String msg){
+        this.code = code;
+        this.message = msg;
+    }
+
+}

+ 36 - 0
src/main/java/com/cdf/exception/GlobalExceptionHandler.java

@@ -0,0 +1,36 @@
+package com.cdf.exception;
+
+import cn.hutool.core.exceptions.ExceptionUtil;
+import com.cdf.common.ResultData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 全局异常处理器
+ */
+@RestControllerAdvice
+@Slf4j
+public class GlobalExceptionHandler {
+
+    /**
+     * 处理未知异常
+     */
+    @ResponseBody
+    @ExceptionHandler(value = Exception.class)
+    public ResultData exceptionHandler(Exception e) throws Exception {
+        log.error("服务错误:", e);
+        return ResultData.error( 500, e.getMessage());
+    }
+
+    /**
+     * 处理业务异常
+     */
+    @ResponseBody
+    @ExceptionHandler(value = BusinessException.class)
+    public ResultData businessExceptionHandler(BusinessException e) {
+        log.info("业务异常code:{},message:{}", e.getCode(), e.getMessage());
+        return ResultData.error(e.getCode(), e.getMessage());
+    }
+}

+ 95 - 0
src/main/java/com/cdf/generate/AutoGenerate.java

@@ -0,0 +1,95 @@
+package com.cdf.generate;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public class AutoGenerate {
+
+
+    public static void main(String[] args) {
+        System.out.println("相对路径指定到:"+ System.getProperty("user.dir"));
+
+
+        String path =System.getProperty("user.dir") ;
+
+        generate(path,"", getTables(new String[]{
+                "t_role"
+        }));
+
+//        generate(path,"goods", getTables(new String[]{
+//                        "t_camera","t_camera_detail","t_camera_out","t_camera_space","t_camera_version",
+//                        "t_company","t_goods","t_goods_sku","t_cart","t_goods_spec",
+//                        "t_goods_spec_value","t_goods_spu_spec","t_sn_code"
+//        }));
+
+//        generate(path,"order", getTables(new String[]{
+//                        "t_increment_order","t_invoice","t_order","t_order_item",
+//                        "t_pre_sale","t_space_sdk","t_trade_log","t_commerce_order","t_download_order","t_expansion_order"
+//        }));
+//        generate(path,"order", getTables(new String[]{
+//                        "t_virtual_order"
+//        }));
+
+//        generate(path,"user", getTables(new String[]{
+//                        "t_user","t_user_increment","t_manager","t_province","t_increment_type","t_intercom_message","t_receiver_info"
+//        }));
+    }
+
+    public static List<String> getTables(String [] tableNames){
+        return new ArrayList<>(Arrays.asList(tableNames));
+    }
+
+
+    public static void  generate(String path,String moduleName,  List<String> tables){
+        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/cdf_gm",
+                "root","123456")
+                .globalConfig(builder -> {
+                    builder.author("")               //作者
+                            .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)
+                            //.enableSwagger()           //开启swagger
+                            .commentDate("yyyy-MM-dd")
+                            .dateType(DateType.ONLY_DATE)
+                            .fileOverride();            //开启覆盖之前生成的文件
+
+                })
+                .packageConfig(builder -> {
+                    builder.parent("com.cdf")
+                            .moduleName(moduleName)
+                            .entity("entity")
+                            .service("service")
+                            .serviceImpl("service.impl")
+                            .controller("controller")
+                            .mapper("mapper")
+                            .xml("test.mapper")
+                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,path+"\\src\\main\\resources\\mapper\\"+moduleName));
+                })
+                .strategyConfig(builder -> {
+                    builder.addInclude(tables)
+                            .addTablePrefix("t_")
+                            .serviceBuilder()
+                            .formatServiceFileName("I%sService")
+                            .formatServiceImplFileName("%sServiceImpl")
+                            .entityBuilder()
+                            .enableLombok()
+                            .logicDeleteColumnName("tb_status")
+                            .enableTableFieldAnnotation()
+                            .controllerBuilder()
+                            .formatFileName("%sController")
+                            .enableRestStyle()
+                            .mapperBuilder()
+                            .superClass(BaseMapper.class)
+                            .formatMapperFileName("I%sMapper")
+                            .enableMapperAnnotation()
+                            .formatXmlFileName("%sMapper");
+                })
+                // .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
+                .execute();
+    }
+}

+ 13 - 0
src/main/java/com/cdf/httpClient/MyClient.java

@@ -0,0 +1,13 @@
+package com.cdf.httpClient;
+
+import com.cdf.httpClient.request.FdkkLoginRequest;
+import com.dtflys.forest.annotation.Body;
+import com.dtflys.forest.annotation.Get;
+import com.dtflys.forest.annotation.JSONBody;
+import com.dtflys.forest.annotation.Post;
+
+public interface MyClient {
+
+    @Post("https://eur.4dkankan.com/api/sso/user/login")
+    String fdkkLogin(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+}

+ 52 - 0
src/main/java/com/cdf/httpClient/client/FdkkClient.java

@@ -0,0 +1,52 @@
+package com.cdf.httpClient.client;
+
+import com.alibaba.fastjson.JSONObject;
+import com.cdf.httpClient.request.FdkkHotRequest;
+import com.cdf.httpClient.request.FdkkLoginRequest;
+import com.cdf.httpClient.response.FdkkResponse;
+import com.dtflys.forest.annotation.*;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import java.util.Map;
+
+/**
+ * 获取四维看看相关数据
+ */
+public interface FdkkClient {
+
+    /**
+     * 登录
+     */
+    @Post("/api/sso/user/login")
+    @Address(source = FdkkLoginAddressSource.class)
+    FdkkResponse fdkkLogin(@JSONBody FdkkLoginRequest fdkkLoginRequest);
+    /**
+     * 校验token
+     */
+    @Post("/api/user/checkToken")
+    @Address(source = FdkkLoginAddressSource.class)
+    FdkkResponse checkToken(@Header("token")  String token);
+    /**
+     * 添加热点
+     */
+    @Post("/service/scene/edit/tag/save")
+    @Address(source = FdkkSceneAddressSource.class)
+    FdkkResponse hotSave(@JSONBody FdkkHotRequest fdkkHotRequest, @Header("token")  String token);
+    /**
+     * 删除热点
+     */
+    @Post("/service/scene/edit/tag/delete")
+    @Address(source = FdkkSceneAddressSource.class)
+    FdkkResponse hotDelete(@JSONBody FdkkHotRequest fdkkHotRequest, @Header("token")  String token);
+
+
+    @Post("{url}")
+    @Address(source = FdkkSceneAddressSource.class)
+    JSONObject sendPost(@Var("url") String url, @JSONBody JSONObject jsonObject, @Header("token")  String token);
+
+
+    @Get(url = "{url}")
+    @Address(source = FdkkSceneAddressSource.class)
+    JSONObject sendGet(@Var("url") String url, @Query Map<String,String> param, @Header("token")  String token);
+
+}

+ 19 - 0
src/main/java/com/cdf/httpClient/client/FdkkLoginAddressSource.java

@@ -0,0 +1,19 @@
+package com.cdf.httpClient.client;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FdkkLoginAddressSource implements AddressSource {
+
+    @Value("${fdkk.login-path}")
+    private String basePath;
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",80,basePath);
+    }
+}

+ 19 - 0
src/main/java/com/cdf/httpClient/client/FdkkSceneAddressSource.java

@@ -0,0 +1,19 @@
+package com.cdf.httpClient.client;
+
+import com.dtflys.forest.callback.AddressSource;
+import com.dtflys.forest.http.ForestAddress;
+import com.dtflys.forest.http.ForestRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class FdkkSceneAddressSource implements AddressSource {
+
+    @Value("${fdkk.scene-path}")
+    private String basePath;
+
+    @Override
+    public ForestAddress getAddress(ForestRequest forestRequest) {
+        return new ForestAddress("","",80,basePath);
+    }
+}

+ 13 - 0
src/main/java/com/cdf/httpClient/request/FdkkHotData.java

@@ -0,0 +1,13 @@
+package com.cdf.httpClient.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FdkkHotData {
+    private String sid;
+    private String hotData;
+    private Integer hotType;
+    private List<Integer> relationIds;
+}

+ 15 - 0
src/main/java/com/cdf/httpClient/request/FdkkHotRequest.java

@@ -0,0 +1,15 @@
+package com.cdf.httpClient.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FdkkHotRequest {
+
+    private String num;
+    private List<FdkkHotData> hotDataList;
+    private List<String> icons;
+
+    private List<String> sidList;
+}

+ 11 - 0
src/main/java/com/cdf/httpClient/request/FdkkLoginRequest.java

@@ -0,0 +1,11 @@
+package com.cdf.httpClient.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class FdkkLoginRequest {
+    private String phoneNum;
+    private String password;
+}

+ 12 - 0
src/main/java/com/cdf/httpClient/response/FdkkResponse.java

@@ -0,0 +1,12 @@
+package com.cdf.httpClient.response;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+@Data
+public class FdkkResponse {
+    private Integer code;
+    private String msg;
+    private Object data;
+}

+ 65 - 0
src/main/java/com/cdf/interceptor/BackUserInterceptor.java

@@ -0,0 +1,65 @@
+package com.cdf.interceptor;
+
+
+import cn.hutool.jwt.JWTUtil;
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.entity.User;
+import com.cdf.service.IUserService;
+import com.cdf.util.JwtUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class BackUserInterceptor implements HandlerInterceptor {
+
+	private static final Log log = LogFactory.getLog("programLog");
+
+	@Autowired
+	private IUserService userService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+		response.setContentType("text/html;charset=UTF-8");
+		String token = request.getHeader("token");
+		if (token == null || token.length() == 0) {
+			this.needLogin(request, response);
+			return false;
+		}
+		log.info("BackUserInterceptor|preHandle|token=" + token);
+		Integer userId = JwtUtil.getId(token);
+		User user = userService.getById(userId);
+		if(user == null ){
+			this.userNotExist(request, response);
+			return  false;
+		}
+		return true;
+	}
+
+
+	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			response.getWriter().append(ResultData.errorString(ResultCode.NOT_LOGIN));
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+	private void userNotExist(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			response.getWriter().append(ResultData.errorString(ResultCode.USER_NOT_EXIST));
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+}
+

+ 127 - 0
src/main/java/com/cdf/interceptor/SceneInterceptor.java

@@ -0,0 +1,127 @@
+package com.cdf.interceptor;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.cdf.common.ResultCode;
+import com.cdf.common.ResultData;
+import com.cdf.entity.FdkkUser;
+import com.cdf.entity.User;
+import com.cdf.httpClient.client.FdkkClient;
+import com.cdf.httpClient.response.FdkkResponse;
+import com.cdf.service.IFdkkUserService;
+import com.cdf.service.IUserService;
+import com.cdf.util.JwtUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class SceneInterceptor implements HandlerInterceptor {
+
+	private static final Log log = LogFactory.getLog("programLog");
+
+	@Autowired
+	private IUserService userService;
+	@Autowired
+	private IFdkkUserService fdkkUserService;
+	@Resource
+	FdkkClient fdkkClient;
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		response.setContentType("text/html;charset=UTF-8");
+		String token = request.getHeader("token");
+		if (token == null || token.length() == 0) {
+			this.needLogin(request, response);
+			return false;
+		}
+		Integer userId = JwtUtil.getId(token);
+		User user = userService.getById(userId);
+		if(user == null ){
+			this.userNotExist(request, response);
+			return  false;
+		}
+		FdkkUser fdkkUser = fdkkUserService.getById(user.getFdkkUserId());
+		String requestURI =   request.getRequestURI();
+		if(request.getMethod().equals("GET")){
+			HashMap<String,String> map = new HashMap<>();
+			for (String key : request.getParameterMap().keySet()) {
+				String parameter = request.getParameter(key);
+				map.put(key,parameter);
+			}
+			JSONObject send = fdkkClient.sendGet(requestURI,map, fdkkUser.getToken());
+			response.getWriter().append(JSONObject.toJSONString(send));
+			return false;
+		}
+		JSONObject send = fdkkClient.sendPost(requestURI, JSONObject.parseObject(ReadAsChars(request)), fdkkUser.getToken());
+		response.getWriter().append(JSONObject.toJSONString(send));
+		return false;
+	}
+
+
+	private void needLogin(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			response.getWriter().append(ResultData.errorString(ResultCode.NOT_LOGIN));
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+	private void userNotExist(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			response.getWriter().append(ResultData.errorString(ResultCode.USER_NOT_EXIST));
+		} catch (IOException e) {
+			log.info("LoginInterceptor|needLogin|IOException|" + e);
+			e.printStackTrace();
+		}
+	}
+
+	public static String ReadAsChars(HttpServletRequest request) throws Exception{
+
+		BufferedReader br = null;
+		StringBuilder sb = new StringBuilder("");
+		try
+		{
+			br = request.getReader();
+			String str;
+			while ((str = br.readLine()) != null)
+			{
+				sb.append(str);
+			}
+			br.close();
+		}
+		catch (IOException e)
+		{
+			e.printStackTrace();
+		}
+		finally
+		{
+			if (null != br)
+			{
+				try
+				{
+					br.close();
+				}
+				catch (IOException e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		return sb.toString();
+	}
+
+}
+

+ 18 - 0
src/main/java/com/cdf/mapper/IDeptMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.Dept;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Mapper
+public interface IDeptMapper extends BaseMapper<Dept> {
+
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IFdkkUserMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.FdkkUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Mapper
+public interface IFdkkUserMapper extends BaseMapper<FdkkUser> {
+
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IHotRelationMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.HotRelation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Mapper
+public interface IHotRelationMapper extends BaseMapper<HotRelation> {
+
+}

+ 23 - 0
src/main/java/com/cdf/mapper/ILogMapper.java

@@ -0,0 +1,23 @@
+package com.cdf.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.entity.Log;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cdf.request.LogRequest;
+import com.cdf.response.LogVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Mapper
+public interface ILogMapper extends BaseMapper<Log> {
+
+    Page<LogVo> getPageByParam(Page page,LogRequest param);
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IMenuMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.Menu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-07
+ */
+@Mapper
+public interface IMenuMapper extends BaseMapper<Menu> {
+
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IRoleMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.Role;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Mapper
+public interface IRoleMapper extends BaseMapper<Role> {
+
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IRoleMenuMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.RoleMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Mapper
+public interface IRoleMenuMapper extends BaseMapper<RoleMenu> {
+
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IShopMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.Shop;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Mapper
+public interface IShopMapper extends BaseMapper<Shop> {
+
+}

+ 22 - 0
src/main/java/com/cdf/mapper/IUserMapper.java

@@ -0,0 +1,22 @@
+package com.cdf.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.entity.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cdf.request.UserRequest;
+import com.cdf.response.UserVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Mapper
+public interface IUserMapper extends BaseMapper<User> {
+
+    Page<UserVo> getPageByParam(Page page, UserRequest param);
+}

+ 18 - 0
src/main/java/com/cdf/mapper/IVideoMapper.java

@@ -0,0 +1,18 @@
+package com.cdf.mapper;
+
+import com.cdf.entity.Video;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Mapper
+public interface IVideoMapper extends BaseMapper<Video> {
+
+}

+ 12 - 0
src/main/java/com/cdf/request/BaseRequest.java

@@ -0,0 +1,12 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class BaseRequest {
+    private Integer id;
+    private Integer page = 1;
+    private Integer pageSize = 10;
+    private String startTime;
+    private String endTime;
+}

+ 13 - 0
src/main/java/com/cdf/request/LogRequest.java

@@ -0,0 +1,13 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class LogRequest extends BaseRequest{
+    private String phone;
+    private Integer deptId;
+    private String nickName;
+    private String startTime;
+    private String endTime;
+
+}

+ 9 - 0
src/main/java/com/cdf/request/LoginRequest.java

@@ -0,0 +1,9 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class LoginRequest {
+    private String phone;
+    private String password;
+}

+ 11 - 0
src/main/java/com/cdf/request/RoleMenuRequest.java

@@ -0,0 +1,11 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleMenuRequest {
+    private Integer roleId;
+    private List<Integer> menuIds;
+}

+ 14 - 0
src/main/java/com/cdf/request/RoleRequest.java

@@ -0,0 +1,14 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class RoleRequest extends BaseRequest{
+
+    private Integer id;
+
+    private String roleName;
+
+    private Integer roleType;
+
+}

+ 10 - 0
src/main/java/com/cdf/request/ShopRequest.java

@@ -0,0 +1,10 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class ShopRequest extends BaseRequest{
+    private Integer id;
+    private String shopName;
+    private Integer deptId;
+}

+ 12 - 0
src/main/java/com/cdf/request/UserRequest.java

@@ -0,0 +1,12 @@
+package com.cdf.request;
+
+import lombok.Data;
+
+@Data
+public class UserRequest extends BaseRequest{
+
+    private Integer id;
+    private String phone;
+    private String nickName;
+    private Integer deptId;
+}

+ 13 - 0
src/main/java/com/cdf/response/DeptVo.java

@@ -0,0 +1,13 @@
+package com.cdf.response;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeptVo {
+    private Integer id;
+    private String name;
+    private Integer parentId;
+    private List<DeptVo> children;
+}

+ 19 - 0
src/main/java/com/cdf/response/LogVo.java

@@ -0,0 +1,19 @@
+package com.cdf.response;
+
+import com.cdf.entity.Log;
+import lombok.Data;
+
+@Data
+public class LogVo  {
+    private Integer id;
+    private String phone;
+    private String nickName;
+    private Integer deptId;
+    private String deptName;
+    private Integer roleId;
+    private String roleName;
+    private String info;
+    private String result;
+    private String createTime;
+
+}

+ 22 - 0
src/main/java/com/cdf/response/LoginResponse.java

@@ -0,0 +1,22 @@
+package com.cdf.response;
+
+import com.cdf.entity.User;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class LoginResponse {
+    private String token;
+    private UserVo userVo;
+
+    public void setUserVo(User user){
+        UserVo userVo = new UserVo();
+        BeanUtils.copyProperties(user,userVo);
+        this.userVo = userVo;
+    }
+
+}

+ 16 - 0
src/main/java/com/cdf/response/MenuVo.java

@@ -0,0 +1,16 @@
+package com.cdf.response;
+
+import com.cdf.entity.Menu;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MenuVo {
+
+    private Integer id;
+    private String menuName;
+    private String menuUrl;
+    private Integer parentId;
+    private List<MenuVo> children;
+}

+ 9 - 0
src/main/java/com/cdf/response/ShopVo.java

@@ -0,0 +1,9 @@
+package com.cdf.response;
+
+import com.cdf.entity.Shop;
+import lombok.Data;
+
+@Data
+public class ShopVo extends Shop {
+    private String deptName;
+}

+ 14 - 0
src/main/java/com/cdf/response/UserVo.java

@@ -0,0 +1,14 @@
+package com.cdf.response;
+
+import lombok.Data;
+
+@Data
+public class UserVo {
+    private Integer id;
+    private String nickName;
+    private String phone;
+    private Integer deptId;
+    private String deptName;
+    private Integer roleId;
+    private String roleName;
+}

+ 16 - 0
src/main/java/com/cdf/service/IDeptService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.Dept;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+public interface IDeptService extends IService<Dept> {
+
+}

+ 16 - 0
src/main/java/com/cdf/service/IFdkkUserService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.FdkkUser;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+public interface IFdkkUserService extends IService<FdkkUser> {
+
+}

+ 16 - 0
src/main/java/com/cdf/service/IHotRelationService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.HotRelation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+public interface IHotRelationService extends IService<HotRelation> {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/ILogService.java

@@ -0,0 +1,20 @@
+package com.cdf.service;
+
+import com.cdf.common.PageInfo;
+import com.cdf.entity.Log;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cdf.request.LogRequest;
+import com.cdf.response.LogVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+public interface ILogService extends IService<Log> {
+
+    PageInfo<LogVo> getPageByParam(LogRequest param);
+}

+ 16 - 0
src/main/java/com/cdf/service/IMenuService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.Menu;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-07
+ */
+public interface IMenuService extends IService<Menu> {
+
+}

+ 16 - 0
src/main/java/com/cdf/service/IRoleMenuService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.RoleMenu;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+public interface IRoleMenuService extends IService<RoleMenu> {
+
+}

+ 16 - 0
src/main/java/com/cdf/service/IRoleService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.Role;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+public interface IRoleService extends IService<Role> {
+
+}

+ 16 - 0
src/main/java/com/cdf/service/IShopService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.Shop;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+public interface IShopService extends IService<Shop> {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/IUserService.java

@@ -0,0 +1,20 @@
+package com.cdf.service;
+
+import com.cdf.common.PageInfo;
+import com.cdf.entity.User;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cdf.request.UserRequest;
+import com.cdf.response.UserVo;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+public interface IUserService extends IService<User> {
+
+    PageInfo<UserVo> getPageByParam(UserRequest param);
+}

+ 16 - 0
src/main/java/com/cdf/service/IVideoService.java

@@ -0,0 +1,16 @@
+package com.cdf.service;
+
+import com.cdf.entity.Video;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+public interface IVideoService extends IService<Video> {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/DeptServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.Dept;
+import com.cdf.mapper.IDeptMapper;
+import com.cdf.service.IDeptService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Service
+public class DeptServiceImpl extends ServiceImpl<IDeptMapper, Dept> implements IDeptService {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/FdkkUserServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.FdkkUser;
+import com.cdf.mapper.IFdkkUserMapper;
+import com.cdf.service.IFdkkUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Service
+public class FdkkUserServiceImpl extends ServiceImpl<IFdkkUserMapper, FdkkUser> implements IFdkkUserService {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/HotRelationServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.HotRelation;
+import com.cdf.mapper.IHotRelationMapper;
+import com.cdf.service.IHotRelationService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Service
+public class HotRelationServiceImpl extends ServiceImpl<IHotRelationMapper, HotRelation> implements IHotRelationService {
+
+}

+ 29 - 0
src/main/java/com/cdf/service/impl/LogServiceImpl.java

@@ -0,0 +1,29 @@
+package com.cdf.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.entity.Log;
+import com.cdf.mapper.ILogMapper;
+import com.cdf.request.LogRequest;
+import com.cdf.response.LogVo;
+import com.cdf.service.ILogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Service
+public class LogServiceImpl extends ServiceImpl<ILogMapper, Log> implements ILogService {
+
+    @Override
+    public PageInfo<LogVo> getPageByParam(LogRequest param) {
+        Page<LogVo> page = getBaseMapper().getPageByParam(new Page<>(param.getPage(),param.getPageSize()),param);
+        return PageInfo.PageInfo(page);
+    }
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/MenuServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.Menu;
+import com.cdf.mapper.IMenuMapper;
+import com.cdf.service.IMenuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-07
+ */
+@Service
+public class MenuServiceImpl extends ServiceImpl<IMenuMapper, Menu> implements IMenuService {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/RoleMenuServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.RoleMenu;
+import com.cdf.mapper.IRoleMenuMapper;
+import com.cdf.service.IRoleMenuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Service
+public class RoleMenuServiceImpl extends ServiceImpl<IRoleMenuMapper, RoleMenu> implements IRoleMenuService {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/RoleServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.Role;
+import com.cdf.mapper.IRoleMapper;
+import com.cdf.service.IRoleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Service
+public class RoleServiceImpl extends ServiceImpl<IRoleMapper, Role> implements IRoleService {
+
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/ShopServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.Shop;
+import com.cdf.mapper.IShopMapper;
+import com.cdf.service.IShopService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Service
+public class ShopServiceImpl extends ServiceImpl<IShopMapper, Shop> implements IShopService {
+
+}

+ 29 - 0
src/main/java/com/cdf/service/impl/UserServiceImpl.java

@@ -0,0 +1,29 @@
+package com.cdf.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cdf.common.PageInfo;
+import com.cdf.entity.User;
+import com.cdf.mapper.IUserMapper;
+import com.cdf.request.UserRequest;
+import com.cdf.response.UserVo;
+import com.cdf.service.IUserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-09
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl<IUserMapper, User> implements IUserService {
+
+    @Override
+    public PageInfo<UserVo> getPageByParam(UserRequest param) {
+        Page<UserVo> page = getBaseMapper().getPageByParam(new Page<>(param.getPage(),param.getPageSize()),param);
+        return PageInfo.PageInfo(page);
+    }
+}

+ 20 - 0
src/main/java/com/cdf/service/impl/VideoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.cdf.service.impl;
+
+import com.cdf.entity.Video;
+import com.cdf.mapper.IVideoMapper;
+import com.cdf.service.IVideoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2022-05-10
+ */
+@Service
+public class VideoServiceImpl extends ServiceImpl<IVideoMapper, Video> implements IVideoService {
+
+}

+ 21 - 0
src/main/java/com/cdf/test/Test.java

@@ -0,0 +1,21 @@
+package com.cdf.test;
+
+import com.cdf.util.Base64Converter;
+import com.cdf.util.SecurityUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.omg.CORBA.INTERNAL;
+
+public class Test {
+    public static void main(String[] args) {
+        String pass = "DepH29D3ExMjM0NTY=mMjpTktrQWnDJ9qFyz";
+        String password = Base64Converter.decode(Base64Converter.subText(pass));
+        System.out.println(password);
+        System.out.println(SecurityUtil.MD52(password));
+
+        String fdPassword =Base64Converter.getEncode(Base64Converter.encode("Aa123456"));
+        System.out.println(fdPassword);
+
+    }
+
+
+}

+ 90 - 0
src/main/java/com/cdf/util/Base64Converter.java

@@ -0,0 +1,90 @@
+package com.cdf.util;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+
+public class Base64Converter {
+
+    public final static Base64.Encoder encoder = Base64.getEncoder();
+    final static Base64.Decoder decoder = Base64.getDecoder();
+    static char[] arr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
+
+    /**
+     * 给字符串加密
+     * @param text
+     * @return
+     */
+    public static String encode(String text) {
+        byte[] textByte = new byte[0];
+        try {
+            textByte = text.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        String encodedText = encoder.encodeToString(textByte);
+        return encodedText;
+    }
+
+    /**
+     * 给字符串加密
+     * @param textByte
+     * @return
+     */
+    public static String encode(byte[] textByte) {
+        return encoder.encodeToString(textByte);
+    }
+
+    /**
+     * 将加密后的字符串进行解密
+     * @param encodedText
+     * @return
+     */
+    public static String decode(String encodedText) {
+        String text = null;
+        try {
+            text = new String(decoder.decode(encodedText), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return text;
+    }
+
+    /**
+     * 根据逻辑截取加密后的密码
+     * @param text
+     * @return
+     */
+    public static String subText(String text){
+        //去掉前8位字符串
+        text = text.substring(8);
+        //去掉后8位字符串
+        text = text.substring(0, text.length() - 8);
+        //最后两个字符串换到前面,并且去掉剩下的后8位字符串
+        String result = text.substring(text.length() - 2) + text.substring(0, text.length() - 10);
+        return result;
+    }
+
+
+    public static  String getEncode(String str){
+        int num = 2;
+        String front = randomWord(8);
+        String middle = randomWord(8);
+        String end = randomWord(8);
+
+        String str1 = str.substring(0, num);
+        String str2 = str.substring(num);
+
+        return front + str2 + middle + str1 + end ;
+    }
+
+    public static String randomWord ( Integer min) {
+        String str = "";
+        Integer range = min;
+        // 随机产生
+        for (int i = 0; i < range; i++) {
+            int pos = (int) Math.round(Math.random() * (arr.length - 1));
+            str += arr[pos];
+        }
+        return str;
+    }
+}

+ 58 - 0
src/main/java/com/cdf/util/IPUtils.java

@@ -0,0 +1,58 @@
+package com.cdf.util;
+
+import com.alibaba.druid.util.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * IP地址
+ *
+ * @author lipengjun
+ * @email 939961241@qq.com
+ * @date 2017年3月8日 下午12:57:02
+ */
+public class IPUtils {
+    private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
+
+    /**
+     * 获取IP地址
+     * <p>
+     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
+     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
+     */
+    public static String getIpAddr(HttpServletRequest request) {
+        String ip = null;
+        try {
+            ip = request.getHeader("x-forwarded-for");
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("Proxy-Client-IP");
+            }
+            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("WL-Proxy-Client-IP");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_CLIENT_IP");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+            }
+            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+            }
+        } catch (Exception e) {
+            logger.error("IPUtils ERROR ", e);
+        }
+
+//        //使用代理,则获取第一个IP地址
+//        if(StringUtils.isEmpty(ip) && ip.length() > 15) {
+//			if(ip.indexOf(",") > 0) {
+//				ip = ip.substring(0, ip.indexOf(","));
+//			}
+//		}
+
+        return ip;
+    }
+
+}

+ 112 - 0
src/main/java/com/cdf/util/JwtUtil.java

@@ -0,0 +1,112 @@
+package com.cdf.util;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtBuilder;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by Hb_zzZ on 2018/12/7.
+ */
+public class JwtUtil {
+
+    /**
+     * 用户登录成功后生成Jwt
+     * 使用Hs256算法  私匙使用用户密码
+     *
+     * @param ttlMillis jwt过期时间
+     * @param map      登录成功的user对象
+     * @return
+     */
+    public static String createJWT(long ttlMillis, Map<String, Object> map) {
+        //指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。
+        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+        //生成JWT的时间
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+
+        //创建payload的私有声明(根据特定的业务需要添加,如果要拿这个做验证,一般是需要和jwt的接收方提前沟通好验证方式的)
+        //生成签名的时候使用的秘钥secret,这个方法本地封装了的,一般可以从本地配置文件中读取,切记这个秘钥不能外露哦。它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。
+        String key = getKey();
+
+        //生成签发人
+        String subject = map.get("id").toString();
+        //下面就是在为payload添加各种标准声明和私有声明了
+        //这里其实就是new一个JwtBuilder,设置jwt的body
+        JwtBuilder builder = Jwts.builder()
+                //如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
+                .setClaims(map)
+                //设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。
+                .setId(UUID.randomUUID().toString())
+                //iat: jwt的签发时间
+                .setIssuedAt(now)
+                //代表这个JWT的主体,即它的所有人,这个是一个json格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。
+                .setSubject(subject)
+                //设置签名使用的签名算法和签名使用的秘钥
+                .signWith(signatureAlgorithm, key);
+        if (ttlMillis >= 0) {
+            long expMillis = nowMillis + ttlMillis;
+            Date exp = new Date(expMillis);
+            //设置过期时间
+            builder.setExpiration(exp);
+        }
+        return builder.compact();
+    }
+
+
+    /**
+     * Token的解密
+     * @param token 加密后的token
+     * @return
+     */
+    public static Claims parseJWT(String token) {
+        if(ObjectUtils.isEmpty(token)){
+           return null;
+        }
+        //签名秘钥,和生成的签名的秘钥一模一样
+        String key = getKey();
+
+        //得到DefaultJwtParser
+        Claims claims = Jwts.parser()
+                //设置签名的秘钥
+                .setSigningKey(key)
+                //设置需要解析的jwt
+                .parseClaimsJws(token).getBody();
+        return claims;
+    }
+
+
+    public static String getPhone(String token){
+        Claims claims = parseJWT(token);
+        return claims.get("phone",String.class);
+    }
+    public static Integer getId(String token){
+        Claims claims = parseJWT(token);
+        return claims.get("id",Integer.class);
+    }
+
+    public static String getKey(){
+        String property = System.getProperty("user.dir");
+        return property.substring(property.lastIndexOf('\\')+1,property.length());
+    }
+
+    public static void main(String[] args) {
+//        Map<String, String> map = new HashMap<>();
+//        map.put("id","1");
+//        map.put("username","13800138000");
+//        map.put("password","123456");
+//        String token = createJWT(-1, map);
+//        System.out.println("token:" + token);
+
+        Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMzg4ODg4ODg4OCIsInBhc3N3b3JkIjoiemZiODg4ODg4IiwiaWQiOiIxMDExIiwiaWF0IjoxNTQ2ODMxOTQzLCJqdGkiOiI3NjQwM2VhMy0xMTcyLTQ0NzYtOGU0NC05OTEwZmIxMmQ4YjciLCJ1c2VybmFtZSI6IjEzODg4ODg4ODg4In0.Yd9fTEtg2j2C7u6dNL4o0DOHn85UOfe8fbmhdnt5Hbk");
+        System.out.println(claims.get("username", String.class));
+    }
+}

+ 32 - 0
src/main/java/com/cdf/util/SecurityUtil.java

@@ -0,0 +1,32 @@
+package com.cdf.util;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class SecurityUtil {
+    public static String MD52(String md5){
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] digest = md.digest(md5.getBytes());
+            StringBuffer sb = new StringBuffer();
+            for (int i = 0; i < digest.length; i++) {
+                sb.append(Integer.toHexString((digest[i] & 0xFF) | 0x100).substring(1,3));
+            }
+            return sb.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static String MD5(String inStr){
+
+        char[] a = inStr.toCharArray();
+        for (int i = 0; i < a.length; i++){
+            a[i] = (char) (a[i] ^ 't');
+        }
+        String s = new String(a);
+        return s;
+
+    }
+}

+ 58 - 0
src/main/resources/application.yaml

@@ -0,0 +1,58 @@
+server:
+  port: 8888
+  servlet:
+    context-path: /
+  tomcat:
+    max-http-form-post-size: -1
+spring:
+  servlet:
+    multipart:
+      # 设置单个文件大小
+      max-file-size: 1024MB
+      # 设置单次请求文件的总大小
+      max-request-size: 1024MB
+  datasource:
+    name: druidDataSource
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      url: jdbc:mysql://127.0.0.1:3306/cdf_gm?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowMultiQueries=true
+      username: root
+      password: 123456
+logging:
+  config: classpath:logback-spring.xml
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
+    #log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #开启sql日志
+
+
+fdkk:
+  login-path: http://test.4dkankan.com
+  scene-path: http://v4-test.4dkankan.com
+  hot-path: scene_view_data/%s/user/hot.json
+#    type: oss      阿里云 oss
+#    type: aws      亚马逊
+#    type: local    本地化
+upload:
+  type: oss
+  file-path: cdf/file/
+  query-path: http://4dkankan.oss-cn-shenzhen.aliyuncs.com/
+
+oss:
+  point: http://oss-cn-shenzhen.aliyuncs.com
+  key: LTAIUrvuHqj8pvry
+  secrey: JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4
+  bucket: 4dkankan
+  sdk: 4dscene
+  prefix:
+    ali: https://4dkk.4dage.com/
+    sdk: https://4dscene.4dage.com/
+    url: https://4dkk.4dage.com/
+
+aws:
+  s3key: AKIAWCV5QFZ3ZNELKYUY
+  s3secrey: epS5ghyR4LJ7rxk/qJO9ZYh6m9Oz6g5haKDu4yws
+  s3bucket: 4dkankan
+
+local:
+  path: /home/4dkankan/

+ 254 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
+<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
+<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
+<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
+<configuration scan="true" scanPeriod="10 seconds">
+
+	<contextName>logback</contextName>
+	<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
+	<property name="log.path" value="/home/logs/sg" />
+
+	<!-- 彩色日志 -->
+	<!-- 彩色日志依赖的渲染类 -->
+	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+	<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
+	<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
+	<!-- 彩色日志格式 -->
+	<property name="CONSOLE_LOG_PATTERN"
+		value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
+
+	<!--输出到控制台 -->
+	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+		<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息 -->
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>info</level>
+		</filter>
+		<encoder>
+			<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+			<!-- 设置字符集 -->
+			<charset>UTF-8</charset>
+		</encoder>
+	</appender>
+	<!--输出到文件 -->
+
+	<!-- 时间滚动输出 level为 DEBUG 日志 -->
+	<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_debug.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 日志归档 -->
+			<fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录debug级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>debug</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 时间滚动输出 level为 INFO 日志 -->
+	<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_info.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset>
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- 每天日志归档路径以及格式 -->
+			<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录info级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>info</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+	<!-- 时间滚动输出 level为 WARN 日志 -->
+	<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_warn.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录warn级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>warn</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+
+
+	<!-- 时间滚动输出 level为 ERROR 日志 -->
+	<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/log_error.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<level>ERROR</level>
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	
+	<appender name="PROGRAM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/program/log_program.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/program/log-program-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	<logger name="programLog" level="INFO" additivity="true">
+        <appender-ref ref="PROGRAM_FILE"/>
+    </logger>
+
+	<appender name="VISIT_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<!-- 正在记录的日志文件的路径及文件名 -->
+		<file>${log.path}/visit/log_visit.log</file>
+		<!--日志文件输出格式 -->
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/visit/log-visit-%d{yyyy-MM-dd}.%i.log
+			</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数 -->
+			<maxHistory>15</maxHistory>
+		</rollingPolicy>
+		<!-- 此日志文件只记录ERROR级别的 -->
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+			<onMatch>ACCEPT</onMatch>
+			<onMismatch>DENY</onMismatch>
+		</filter>
+	</appender>
+	<logger name="visitLog" level="INFO" additivity="true">
+        <appender-ref ref="VISIT_FILE"/>
+    </logger>
+
+
+	<!--  连接时长  -->
+	<appender name="timeLogger" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${log.path}/timeLogger.log</file>
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>DEBUG</level>
+		</filter>
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<fileNamePattern>${log.path}/timeLogger/timeLogger-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!--日志文件保留天数-->
+			<maxHistory>10</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+			<charset>UTF-8</charset> <!-- 此处设置字符集 -->
+		</encoder>
+	</appender>
+	<logger name="timeLogger" additivity="false" level="DEBUG">
+		<appender-ref ref="timeLogger"/>
+	</logger>
+
+	<!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, 
+		DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 -->
+	<!--<logger name="org.springframework.web" level="info"/> -->
+	<!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> -->
+	<!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
+	<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
+
+	<root level="info">
+		<appender-ref ref="CONSOLE" />
+		<appender-ref ref="DEBUG_FILE" />
+		<appender-ref ref="INFO_FILE" />
+		<appender-ref ref="WARN_FILE" />
+		<appender-ref ref="ERROR_FILE" />
+	</root>
+
+	<!--生产环境:输出到文件 -->
+	<!--<springProfile name="pro"> -->
+	<!--<root level="info"> -->
+	<!--<appender-ref ref="CONSOLE" /> -->
+	<!--<appender-ref ref="DEBUG_FILE" /> -->
+	<!--<appender-ref ref="INFO_FILE" /> -->
+	<!--<appender-ref ref="ERROR_FILE" /> -->
+	<!--<appender-ref ref="WARN_FILE" /> -->
+	<!--</root> -->
+	<!--</springProfile> -->
+
+</configuration>
+
+

+ 5 - 0
src/main/resources/mapper/DeptMapper.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.cdf.mapper.IDeptMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/FdkkUserMapper.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.cdf.mapper.IFdkkUserMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/HotRelationMapper.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.cdf.mapper.IHotRelationMapper">
+
+</mapper>

+ 28 - 0
src/main/resources/mapper/LogMapper.xml

@@ -0,0 +1,28 @@
+<?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.cdf.mapper.ILogMapper">
+
+    <select id="getPageByParam" resultType="com.cdf.response.LogVo" parameterType="com.cdf.request.LogRequest">
+        select  * from t_log l
+        left join t_user u on l.user_id = u.id
+        left join t_dept d on u.dept_id = d.id
+        left join t_role r on u.role_id = r.id
+        WHERE l.tb_status = 0
+        <if test="param.phone != null and param.phone !=''">
+            and u.phone like CONCAT('%', #{param.phone},'%')
+        </if>
+        <if test="param.nickName != null and param.nickName !=''">
+            and u.nick_name like CONCAT('%', #{param.nickName},'%')
+        </if>
+        <if test="param.deptId != null ">
+            and u.dept_id =  #{param.deptId}
+        </if>
+        <if test="param.startTime != null and param.startTime != ''">
+            and l.create_time &gt;=  #{param.startTime}
+        </if>
+        <if test="param.endTime != null and param.endTime != ''">
+            and l.create_time  &lt;=   #{param.endTime}
+        </if>
+        order by l.create_time desc
+    </select>
+</mapper>

+ 0 - 0
src/main/resources/mapper/MenuMapper.xml


Some files were not shown because too many files changed in this diff