wuweihao 5 лет назад
Родитель
Сommit
e404e7e6b8
19 измененных файлов с 446 добавлено и 45 удалено
  1. 3 0
      README.md
  2. 33 31
      xiaoan-common/src/main/java/com/xiaoan/common/model/BaseModel.java
  3. 43 0
      xiaoan-dao/src/main/java/com/xiaoan/dao/backend/IssueRepository.java
  4. 8 0
      xiaoan-dao/src/main/java/com/xiaoan/dao/backend/LogRepository.java
  5. 9 0
      xiaoan-dao/src/main/java/com/xiaoan/dao/backend/UserRepository.java
  6. 23 0
      xiaoan-domain/src/main/java/com/xiaoan/domain/backend/DataStatisticsEntity.java
  7. 41 0
      xiaoan-domain/src/main/java/com/xiaoan/domain/backend/IssueEntity.java
  8. 19 0
      xiaoan-domain/src/main/java/com/xiaoan/domain/dto/request/IssueRequest.java
  9. 40 0
      xiaoan-domain/src/main/java/com/xiaoan/domain/dto/response/IssueResponse.java
  10. 17 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/IssueService.java
  11. 2 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/LogService.java
  12. 1 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/UserService.java
  13. 57 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/IssueServiceImpl.java
  14. 6 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/LogServiceImpl.java
  15. 5 0
      xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/UserServiceImpl.java
  16. 4 0
      xiaoan-web/src/main/java/com/xiaoan/web/backend/BaseController.java
  17. 4 1
      xiaoan-web/src/main/java/com/xiaoan/web/backend/IndexController.java
  18. 107 0
      xiaoan-web/src/main/java/com/xiaoan/web/backend/IssueController.java
  19. 24 13
      xiaoan-web/src/main/java/com/xiaoan/web/backend/LogController.java

+ 3 - 0
README.md

@@ -3,4 +3,7 @@
 #### 介绍
 前后端分离的shiro 用户权限管理系统模板
 
+## 主要事项
+  修改用户名,会影响密码的,若果要修改,只能重置密码(而且要先在db手动改好用户名,再重置密码)
+
 

+ 33 - 31
xiaoan-common/src/main/java/com/xiaoan/common/model/BaseModel.java

@@ -2,10 +2,12 @@ package com.xiaoan.common.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Data;
 
 import javax.persistence.*;
 import java.util.Date;
 
+@Data
 @MappedSuperclass
 public abstract class BaseModel {
 
@@ -34,37 +36,37 @@ public abstract class BaseModel {
 //    @Column
 //    private String createBy;
 
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public int getRecStatus() {
-        return recStatus;
-    }
-
-    public void setRecStatus(int recStatus) {
-        this.recStatus = recStatus;
-    }
+//    public Long getId() {
+//        return id;
+//    }
+//
+//    public void setId(Long id) {
+//        this.id = id;
+//    }
+//
+//    public Date getCreateTime() {
+//        return createTime;
+//    }
+//
+//    public void setCreateTime(Date createTime) {
+//        this.createTime = createTime;
+//    }
+//
+//    public Date getUpdateTime() {
+//        return updateTime;
+//    }
+//
+//    public void setUpdateTime(Date updateTime) {
+//        this.updateTime = updateTime;
+//    }
+//
+//    public int getRecStatus() {
+//        return recStatus;
+//    }
+//
+//    public void setRecStatus(int recStatus) {
+//        this.recStatus = recStatus;
+//    }
 
 //    public String getCreateBy() {
 //        return createBy;

+ 43 - 0
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/IssueRepository.java

@@ -0,0 +1,43 @@
+package com.xiaoan.dao.backend;
+
+import com.xiaoan.domain.backend.IssueEntity;
+import com.xiaoan.domain.backend.LogEntity;
+import com.xiaoan.domain.dto.response.IssueResponse;
+import com.xiaoan.domain.dto.response.LogResponse;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * Created by Hb_zzZ on 2020/2/27.
+ */
+@Mapper
+@Component
+public interface IssueRepository extends IBaseRepository<IssueEntity, Long> {
+
+    /**
+     * 关联查询
+     */
+//    @Select(value = "select l.type, l.description, l.create_time, u.user_name, u.real_name from tb_log l left join tb_user u on l.user_id = u.id order by create_time desc")
+//    List<LogResponse> findAllToUserName();
+
+    @Select(value = "select l.title, l.content, l.create_time, u.user_name, u.real_name from tb_issue l left join tb_user u on l.user_id = u.id " +
+            "where (u.user_name like #{itemName} or #{itemName} is null) " +
+            "or (u.real_name like #{itemName} or #{itemName} is null) " +
+            "or (l.title like #{itemName} or #{itemName} is null) " +
+            "or (l.content like #{itemName} or #{itemName} is null) " +
+            "order by create_time desc")
+    List<IssueResponse> search(String itemName);
+
+    @Select(value = "select l.title, l.content, l.create_time, u.user_name, u.real_name from tb_issue l left join tb_user u on l.user_id = u.id " +
+            "where ((u.user_name like #{itemName} or #{itemName} is null) " +
+            "or (u.real_name like #{itemName} or #{itemName} is null) " +
+            "or (l.title like #{itemName} or #{itemName} is null) " +
+            "or (l.content like #{itemName} or #{itemName} is null)) " +
+            "and l.user_id = #{userId} " +
+            "order by create_time desc")
+    List<IssueResponse> searchByUserId(String itemName, Long userId);
+}

+ 8 - 0
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/LogRepository.java

@@ -29,4 +29,12 @@ public interface LogRepository extends IBaseRepository<LogEntity, Long> {
             "or (l.type like #{itemName} or #{itemName} is null) " +
             "order by create_time desc")
     List<LogResponse> search(String itemName);
+
+    @Select(value = "select l.type, l.description, l.create_time, u.user_name, u.real_name from tb_log l left join tb_user u on l.user_id = u.id " +
+            "where ((u.user_name like #{itemName} or #{itemName} is null) " +
+            "or (u.real_name like #{itemName} or #{itemName} is null) " +
+            "or (l.description like #{itemName} or #{itemName} is null) " +
+            "or (l.type like #{itemName} or #{itemName} is null)) " +
+            "and l.user_id = #{userId} order by create_time desc")
+    List<LogResponse> searchByUserId(String itemName, Long userId);
 }

+ 9 - 0
xiaoan-dao/src/main/java/com/xiaoan/dao/backend/UserRepository.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigInteger;
@@ -18,6 +19,7 @@ import java.util.Set;
 /**
  * Created by owen on 2020/2/18 0018 11:13
  */
+@Component
 @Mapper
 public interface UserRepository extends IBaseRepository<UserEntity, Long> {
 
@@ -43,4 +45,11 @@ public interface UserRepository extends IBaseRepository<UserEntity, Long> {
     @SelectProvider(type = UserProvider.class, method = "findAllBySearchKey")
     List<UserResponse> findAllBySearchKey(String searchKey);
 
+    /**
+     * 根据用户id查角色
+     */
+    @Select(value = "select r.role_key from " +
+            "(tb_user u left join tb_user_role ur on u.id = ur.user_id) left join tb_role r on r.id = ur.role_id  " +
+            "WHERE u.id = #{id}")
+    List<String> findRoleByUserId(Long id);
 }

+ 23 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/backend/DataStatisticsEntity.java

@@ -0,0 +1,23 @@
+package com.xiaoan.domain.backend;
+
+import com.xiaoan.common.model.BaseModel;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2020/3/4.
+ *
+ * 数据统计实体
+ */
+@Data
+@Entity
+@Table(name = "tb_data_statistics")
+public class DataStatisticsEntity extends BaseModel implements Serializable {
+
+
+
+
+}

+ 41 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/backend/IssueEntity.java

@@ -0,0 +1,41 @@
+package com.xiaoan.domain.backend;
+
+import com.xiaoan.common.model.BaseModel;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * Created by owen on 2020/3/4.
+ *
+ * 问题反馈实体
+ */
+@Data
+@Entity
+@Table(name = "tb_issue")
+public class IssueEntity extends BaseModel implements Serializable {
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 回复
+     */
+    private String reply;
+
+    /**
+     * 问题创建人
+     */
+    private Long userId;
+
+
+}

+ 19 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/dto/request/IssueRequest.java

@@ -0,0 +1,19 @@
+package com.xiaoan.domain.dto.request;
+
+import com.xiaoan.common.model.PageDto;
+import lombok.Data;
+
+/**
+ * Created by Hb_zzZ on 2020/2/27.
+ */
+@Data
+public class IssueRequest {
+
+
+    // 标题
+    private String title;
+
+    // 内容
+    private String content;
+
+}

+ 40 - 0
xiaoan-domain/src/main/java/com/xiaoan/domain/dto/response/IssueResponse.java

@@ -0,0 +1,40 @@
+package com.xiaoan.domain.dto.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by Hb_zzZ on 2020/2/28.
+ */
+@Data
+public class IssueResponse implements Serializable {
+
+    private Long id;
+
+    /**
+     * 操作者用户
+     */
+    private String userName;
+
+    /**
+     * 真名
+     */
+    private String realName;
+
+    private Date createTime;
+
+//    /**
+//     * 操作者用户
+//     */
+//    private Long userId;
+
+
+    private String title;
+
+
+    private String content;
+
+
+}

+ 17 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/IssueService.java

@@ -0,0 +1,17 @@
+package com.xiaoan.service.backend;
+
+import com.xiaoan.domain.backend.IssueEntity;
+import com.xiaoan.domain.dto.response.IssueResponse;
+import com.xiaoan.service.IBaseService;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2020/3/4 0004 17:15
+ */
+public interface IssueService extends IBaseService<IssueEntity, Long> {
+
+    List<IssueResponse> search(String itemName);
+
+    List<IssueResponse> search(String itemName, Long userId);
+}

+ 2 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/LogService.java

@@ -14,4 +14,6 @@ public interface LogService extends IBaseService<LogEntity, Long> {
     List<LogResponse> findAllToUserName();
 
     List<LogResponse> search(String itemName);
+
+    List<LogResponse> search(String itemName, Long userId);
 }

+ 1 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/UserService.java

@@ -28,4 +28,5 @@ public interface UserService extends IBaseService<UserEntity, Long> {
 
     List<UserResponse> findAllBySearchKey(UserRequest param);
 
+    List<String> findRoleByUserId(Long id);
 }

+ 57 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/IssueServiceImpl.java

@@ -0,0 +1,57 @@
+package com.xiaoan.service.backend.impl;
+
+import com.xiaoan.dao.backend.IBaseRepository;
+import com.xiaoan.dao.backend.IssueRepository;
+import com.xiaoan.dao.backend.LogRepository;
+import com.xiaoan.domain.backend.IssueEntity;
+import com.xiaoan.domain.backend.LogEntity;
+import com.xiaoan.domain.dto.response.IssueResponse;
+import com.xiaoan.domain.dto.response.LogResponse;
+import com.xiaoan.service.BaseServiceImpl;
+import com.xiaoan.service.backend.IssueService;
+import com.xiaoan.service.backend.LogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by Hb_zzZ on 2020/2/27.
+ */
+@Service
+@Transactional
+public class IssueServiceImpl extends BaseServiceImpl<IssueEntity, Long> implements IssueService {
+
+    @Autowired
+    private IssueRepository entityMapper;
+
+    @Override
+    public IBaseRepository<IssueEntity, Long> getBaseMapper() {
+        return this.entityMapper;
+    }
+
+    @Override
+    public List<IssueResponse> search(String itemName) {
+        itemName = "%" + itemName + "%";
+        return entityMapper.search(itemName);
+    }
+
+    @Override
+    public List<IssueResponse> search(String itemName, Long userId) {
+        itemName = "%" + itemName + "%";
+        return entityMapper.searchByUserId(itemName, userId);
+    }
+
+
+//    @Override
+//    public List<LogResponse> findAllToUserName() {
+//        return entityMapper.findAllToUserName();
+//    }
+//
+//    @Override
+//    public List<LogResponse> search(String itemName) {
+//        itemName = "%" + itemName + "%";
+//        return entityMapper.search(itemName);
+//    }
+}

+ 6 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/LogServiceImpl.java

@@ -39,4 +39,10 @@ public class LogServiceImpl extends BaseServiceImpl<LogEntity, Long> implements
         itemName = "%" + itemName + "%";
         return entityMapper.search(itemName);
     }
+
+    @Override
+    public List<LogResponse> search(String itemName, Long userId) {
+        itemName = "%" + itemName + "%";
+        return entityMapper.searchByUserId(itemName, userId);
+    }
 }

+ 5 - 0
xiaoan-service/src/main/java/com/xiaoan/service/backend/impl/UserServiceImpl.java

@@ -67,5 +67,10 @@ public class UserServiceImpl extends BaseServiceImpl<UserEntity, Long> implement
         return userRepository.findAllBySearchKey(param.getSearchKey());
     }
 
+    @Override
+    public List<String> findRoleByUserId(Long id) {
+        return userRepository.findRoleByUserId(id);
+    }
+
 
 }

+ 4 - 0
xiaoan-web/src/main/java/com/xiaoan/web/backend/BaseController.java

@@ -17,4 +17,8 @@ public class BaseController {
         String token = request.getHeader("Authorization");
         return JWTUtil.getUsername(token);
     }
+
+    protected String getToken(){
+        return request.getHeader("Authorization");
+    }
 }

+ 4 - 1
xiaoan-web/src/main/java/com/xiaoan/web/backend/IndexController.java

@@ -71,12 +71,15 @@ public class IndexController {
 
         List<ResourceTree> resourcesTreeByUserPermission = resourceService.getResourcesTreeByUserPermission(userEntity);
 
+        // 获取用户角色
+        List<String> roles = userService.findRoleByUserId(userEntity.getId());
+
 
         // 创建新token
         HashMap<String, Object> tokenMap = new HashMap<>();
         tokenMap.put("userName", userEntity.getUserName());
         tokenMap.put("id", userEntity.getId());
-//        tokenMap.put("role", roles);
+        tokenMap.put("role", roles);
 
         String token = JWTUtil.sign(tokenMap, userEntity.getPassword());
 //

+ 107 - 0
xiaoan-web/src/main/java/com/xiaoan/web/backend/IssueController.java

@@ -0,0 +1,107 @@
+package com.xiaoan.web.backend;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.xiaoan.common.constant.MsgCode;
+import com.xiaoan.common.model.PageDto;
+import com.xiaoan.common.util.ResultJson;
+import com.xiaoan.domain.backend.IssueEntity;
+import com.xiaoan.domain.dto.request.IssueRequest;
+import com.xiaoan.domain.dto.response.IssueResponse;
+import com.xiaoan.domain.dto.response.LogResponse;
+import com.xiaoan.service.backend.IssueService;
+import com.xiaoan.service.backend.LogService;
+import com.xiaoan.web.aop.WebControllerLog;
+import com.xiaoan.web.shiro.JWTUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Created by owen on 2020/2/18 0018 12:17
+ */
+@Api(tags = "IssueController", description = "后台问题反馈")
+@RestController
+@RequestMapping("api/manage/issue")
+@Transactional
+public class IssueController extends BaseController {
+
+    @Autowired
+    private IssueService issueService;
+
+    /**
+     *
+     * @param param
+     * @return
+     */
+    @WebControllerLog(description = "问题反馈-问题搜索/列表")
+    @ApiOperation("搜索/列表共用")
+    @PostMapping("search")
+    public ResultJson search(@RequestBody PageDto param){
+
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<IssueResponse> list = null;
+        List userRole = JWTUtil.getUserRole(getToken());
+        if (userRole.contains("admin")) {
+            list = issueService.search(param.getItemName());
+        } else {
+            Long userId = JWTUtil.getUserId(getToken());
+            list = issueService.search(param.getItemName(), userId);
+        }
+
+
+        PageInfo<IssueResponse> pageInfo = new PageInfo<>(list);
+        return new ResultJson(MsgCode.SUCCESS_CODE, pageInfo);
+    }
+
+    @WebControllerLog(description = "问题反馈-提交问题")
+    @ApiOperation("提交问题")
+    @PostMapping("save")
+    public ResultJson save(@RequestBody IssueRequest param){
+        IssueEntity issueEntity = new IssueEntity();
+        BeanUtils.copyProperties(param, issueEntity);
+        Long userId = JWTUtil.getUserId(getToken());
+        issueEntity.setUserId(userId);
+        issueService.save(issueEntity);
+        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.SUCCESS_MSG);
+    }
+
+    @WebControllerLog(description = "问题反馈-回复问题")
+    @ApiOperation("回复问题")
+    @PostMapping("edit/{id}/{item}")
+    public ResultJson edit(@PathVariable Long id, @PathVariable String item){
+
+        IssueEntity entity = issueService.findById(id);
+        if (entity == null) {
+            return new ResultJson(MsgCode.FAILURE_CODE_3001, MsgCode.FAILURE_MSG_3001);
+        }
+
+        entity.setReply(item);
+        entity.setUpdateTime(new Date());
+
+        issueService.update(entity);
+
+        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.SUCCESS_MSG);
+    }
+
+    @WebControllerLog(description = "问题反馈-删除问题")
+    @ApiOperation("删除问题")
+    @PostMapping("delete/{id}")
+    public ResultJson save(@PathVariable Long id){
+        issueService.deleteById(id);
+        return new ResultJson(MsgCode.SUCCESS_CODE, MsgCode.SUCCESS_MSG);
+    }
+
+
+
+
+
+
+}

+ 24 - 13
xiaoan-web/src/main/java/com/xiaoan/web/backend/LogController.java

@@ -9,11 +9,13 @@ import com.xiaoan.common.util.ResultJson;
 import com.xiaoan.domain.backend.LogEntity;
 import com.xiaoan.domain.backend.UserEntity;
 import com.xiaoan.domain.dto.request.UserRequest;
+import com.xiaoan.domain.dto.response.IssueResponse;
 import com.xiaoan.domain.dto.response.LogResponse;
 import com.xiaoan.domain.dto.response.UserResponse;
 import com.xiaoan.service.backend.LogService;
 import com.xiaoan.service.backend.UserService;
 import com.xiaoan.web.aop.WebControllerLog;
+import com.xiaoan.web.shiro.JWTUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
@@ -37,23 +39,32 @@ public class LogController extends BaseController {
     @Autowired
     private LogService logService;
 
-    @WebControllerLog(description = "操作日志-查看日志列表")
-    @ApiOperation("分页获取日志列表")
-    @PostMapping("list")
-    public ResultJson list(@RequestBody PageDto param){
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<LogResponse> list = logService.findAllToUserName();
-        PageInfo<LogResponse> pageInfo = new PageInfo<>(list);
+//    @WebControllerLog(description = "操作日志-查看日志列表")
+//    @ApiOperation("分页获取日志列表")
+//    @PostMapping("list")
+//    public ResultJson list(@RequestBody PageDto param){
+//        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+//        List<LogResponse> list = logService.findAllToUserName();
+//        PageInfo<LogResponse> pageInfo = new PageInfo<>(list);
+//
+//        return new ResultJson(MsgCode.SUCCESS_CODE, pageInfo);
+//    }
 
-        return new ResultJson(MsgCode.SUCCESS_CODE, pageInfo);
-    }
-
-    @WebControllerLog(description = "操作日志-日志搜索")
-    @ApiOperation("搜索")
+    @WebControllerLog(description = "操作日志-日志搜索/列表")
+    @ApiOperation("搜索/列表共用")
     @PostMapping("search")
     public ResultJson search(@RequestBody PageDto param){
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<LogResponse> list = logService.search(param.getItemName());
+        List<LogResponse> list = null;
+
+        List userRole = JWTUtil.getUserRole(getToken());
+        if (userRole.contains("admin")) {
+            list = logService.search(param.getItemName());
+        } else {
+            Long userId = JWTUtil.getUserId(getToken());
+            list = logService.search(param.getItemName(), userId);
+        }
+
         PageInfo<LogResponse> pageInfo = new PageInfo<>(list);
         return new ResultJson(MsgCode.SUCCESS_CODE, pageInfo);
     }