ソースを参照

Merge branches 'master' and 'test' of http://gogs.efunbox.cn:/wangys/efunbox-manage

wangys 6 年 前
コミット
e90faa94c8

+ 56 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/entity/OperationLog.java

@@ -0,0 +1,56 @@
+package cn.efunbox.manage.base.entity;
+
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * OperationLog
+ * Created by xusq on 2017/11/22.
+ */
+@Data
+@ToString
+@Entity
+@Table(name="operation_log")
+@DynamicInsert
+@DynamicUpdate
+public class OperationLog implements Serializable {
+
+
+    @Id
+    @Column(name = "id")
+    private Long id;
+
+    @Column(name="user_id")
+    private String userId;
+
+    @Column(name="user_name")
+    private String userName;
+
+    @Column(name="ip")
+    private String ip;
+
+    @Column(name="request_url")
+    private String requestUrl;
+
+    @Column(name="param_json")
+    private String paramJson;
+
+    @Column(name="return_data")
+    private String returnData;
+
+    @Column(name="method_name")
+    private String methodName;
+
+    @Column(name = "gmt_created")
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date gmtCreated;
+
+
+
+}

+ 1 - 4
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/entity/User.java

@@ -8,10 +8,7 @@ import lombok.ToString;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.io.Serializable;
 
 @ToString

+ 11 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/repository/OperationLogRepository.java

@@ -0,0 +1,11 @@
+package cn.efunbox.manage.base.repository;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.common.data.BasicRepository;
+import org.springframework.stereotype.Repository;
+
+
+@Repository
+public interface OperationLogRepository extends BasicRepository<OperationLog> {
+
+}

+ 62 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/service/OperationLogService.java

@@ -0,0 +1,62 @@
+package cn.efunbox.manage.base.service;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.base.repository.OperationLogRepository;
+import cn.efunbox.manage.common.entity.page.OnePage;
+import cn.efunbox.manage.common.enums.BaseOrderEnum;
+import cn.efunbox.manage.common.helper.SortHelper;
+import cn.efunbox.manage.common.result.ApiCode;
+import cn.efunbox.manage.common.result.ApiResult;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * OperationLogService
+ * Created by xusq on 2017/11/22.
+ */
+@Slf4j
+@Service
+public class OperationLogService {
+
+    @Autowired
+    OperationLogRepository operationLogRepository;
+
+    public ApiResult<OperationLog> saveOpertionLog(OperationLog operationLog){
+
+        if (Objects.isNull(operationLog)) {
+            return ApiResult.error(ApiCode.PARAMETER_ERROR);
+        }
+
+        operationLog = operationLogRepository.save(operationLog);
+
+        if (Objects.isNull(operationLog)) {
+            return ApiResult.error(ApiCode.DATA_ERROR);
+        }
+
+        return ApiResult.ok(operationLog);
+    }
+
+
+    public ApiResult findPage(OperationLog operationLog, Integer pageSize, Integer pageNum, LinkedHashMap<String, BaseOrderEnum> sort) {
+        log.debug("日志 findPage  : baseUser={}  pageSize={}  pageNum={} sortMap={}", JSON.toJSONString(operationLog), pageSize, pageNum, JSON.toJSONString(sort));
+        //设置分页参数
+        Long count = operationLogRepository.count(operationLog);
+        OnePage page = new OnePage(count, pageNum, pageSize);
+        //如果查询结果为空不用继续下面的调用了
+        if (count == 0) {
+            return ApiResult.ok(page);
+        }
+        //查询 Page的List结果
+        List<OperationLog> data = operationLogRepository.find(operationLog, page.getStart(), page.getPageSize(), SortHelper.sortMap2Sort(sort));
+        //set结果集
+        page.setList(data);
+        return ApiResult.ok(page);
+    }
+
+}

+ 5 - 2
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/service/UserService.java

@@ -2,6 +2,7 @@ package cn.efunbox.manage.base.service;
 
 import cn.efunbox.manage.base.entity.User;
 import cn.efunbox.manage.base.vo.UserVo;
+import cn.efunbox.manage.common.entity.page.OnePage;
 import cn.efunbox.manage.common.result.ApiResult;
 
 import java.util.List;
@@ -9,9 +10,11 @@ import java.util.List;
 public interface UserService {
     ApiResult<UserVo> login(String userName, String password);
 
-    ApiResult<User> saveUser(User cmsUser);
+    ApiResult<User> saveUser(User User);
 
-    ApiResult<User> updateUser(User cmsUser);
+    ApiResult<User> updateUser(User User);
 
     ApiResult<User> deleteUserByIds(List<String> ids);
+
+    ApiResult<OnePage<User>> list(User user, Integer pageNo, Integer pageSize);
 }

+ 6 - 0
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/service/impl/ManageServiceImpl.java

@@ -138,12 +138,18 @@ public class ManageServiceImpl implements ManageService {
 //                    productIds.add(m.getProductId());
 //                }
 //            }
+            if(Objects.nonNull(m.getProductId())){
+                productIds.add(m.getProductId());
+            }
             if(Objects.nonNull(m.getCostTypeId())){
                 costTypeIds.add(m.getCostTypeId());
             }
             if(Objects.nonNull(m.getToProjectId())){
                 projectIds.add(m.getToProjectId());
             }
+            if(Objects.nonNull(m.getToDeptId())){
+                deptIds.add(m.getToDeptId());
+            }
         });
         //部门
         List<Department> departments = departmentRepository.findByIds(deptIds);

+ 32 - 9
efunbox-base/efunbox-base-api/src/main/java/cn/efunbox/manage/base/service/impl/UserServiceImpl.java

@@ -5,6 +5,7 @@ import cn.efunbox.manage.base.enums.BaseStatusEnum;
 import cn.efunbox.manage.base.repository.UserRepository;
 import cn.efunbox.manage.base.service.UserService;
 import cn.efunbox.manage.base.vo.UserVo;
+import cn.efunbox.manage.common.entity.page.OnePage;
 import cn.efunbox.manage.common.result.ApiCode;
 import cn.efunbox.manage.common.result.ApiResult;
 import cn.efunbox.manage.common.utils.BeanUtil;
@@ -29,10 +30,10 @@ public class UserServiceImpl implements UserService {
             return ApiResult.error(ApiCode.PARAMETER_ERROR);
         }
         User User = userRepository.findByUserNameAndStatus(userName, BaseStatusEnum.NORMAL);
-        String MD5Password = User.getPassword();
         if(User==null){
             return ApiResult.error(ApiCode.NO_UID);
         }
+        String MD5Password = User.getPassword();
         if(StringUtils.isBlank(MD5Password)|| !MD5Password.equals(MD5.MD5Encode(password))){
             return ApiResult.error(ApiCode.PASSWORD_ERROR);
         }
@@ -42,21 +43,21 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
-    public ApiResult<User> saveUser(User User) {
+    public ApiResult<User> saveUser(User user) {
 
-        String userName = User.getUserName();
-        String password = User.getPassword();
-        if(User==null||StringUtils.isBlank(userName)||StringUtils.isBlank(password)){
+        String userName = user.getUserName();
+        String password = user.getPassword();
+        if(user==null||StringUtils.isBlank(userName)||StringUtils.isBlank(password)){
             return ApiResult.error(ApiCode.PARAMETER_ERROR);
         }
         User repeatUser = userRepository.findByUserNameAndStatus(userName, BaseStatusEnum.NORMAL);
         if(repeatUser!=null){
             return ApiResult.error(ApiCode.USERNAME_REPEAT);
         }
-        User.setStatus(BaseStatusEnum.NORMAL);
-        User.setPassword(MD5.getMD5Str(password));
-        userRepository.save(User);
-        return ApiResult.ok(User);
+        user.setStatus(BaseStatusEnum.NORMAL);
+        user.setPassword(MD5.getMD5Str(password));
+        userRepository.save(user);
+        return ApiResult.ok(user);
     }
 
     @Override
@@ -81,4 +82,26 @@ public class UserServiceImpl implements UserService {
         userRepository.updateStatusByIds(ids,BaseStatusEnum.DEL);
         return ApiResult.ok();
     }
+
+    @Override
+    public ApiResult<OnePage<User>> list(User user, Integer pageNo, Integer pageSize) {
+
+        long count = userRepository.count(user);
+
+        OnePage<User> onePage = new OnePage<>(count,pageNo,pageSize);
+
+        if (count == 0) {
+            return ApiResult.ok(onePage);
+        }
+
+        List<User> userList = userRepository.find(
+                user,
+                onePage.getStart(),
+                onePage.getPageSize()
+        );
+
+        onePage.setList(userList);
+
+        return ApiResult.ok(onePage);
+    }
 }

+ 61 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/assist/aspect/OperationLogAspect.java

@@ -0,0 +1,61 @@
+package cn.efunbox.manage.base.assist.aspect;
+
+import cn.efunbox.manage.base.assist.async.AsyncOperationLogHandler;
+import cn.efunbox.manage.base.entity.User;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@Aspect
+@Component
+@Order(-100)
+public class OperationLogAspect {
+
+    @Autowired
+    AsyncOperationLogHandler asyncOperationLogHandler;
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    @AfterReturning(value = "execution(* cn.efunbox.manage.base.controller..*.*(..))",returning = "retVal")
+    public void doAfter(JoinPoint joinPoint,Object retVal) throws Throwable {
+        // 接收到请求,记录请求内容
+        try {
+            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            HttpServletRequest request=attributes.getRequest();
+            if(request.getRequestURL().indexOf("/upload")!=-1){
+                log.debug("上传文件 忽略!");
+                return;
+            }
+
+            //如果是 增删改 才记录入库
+            if(request.getMethod().equals("POST")|| request.getMethod().equals("PUT")|| request.getMethod().equals("DELETE")|| request.getMethod().equals("TRACE")|| request.getMethod().equals("PATCH")){
+                String token = request.getHeader("X-Token");
+                if (StringUtils.isEmpty(token)) {
+                    log.error("user token is null !");
+                    return;
+                }
+
+                User loginUser = (User) redisTemplate.opsForValue().get(token);
+
+
+                request.setAttribute("userInfo",loginUser);
+
+                asyncOperationLogHandler.asyncHandleLog(joinPoint,request,retVal);
+            }
+        } catch (Exception e) {
+            log.error("日志记录出错!", e);
+        }
+    }
+
+}

+ 67 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/assist/async/AsyncOperationLogHandler.java

@@ -0,0 +1,67 @@
+package cn.efunbox.manage.base.assist.async;
+
+import cn.efunbox.manage.base.entity.OperationLog;
+import cn.efunbox.manage.base.entity.User;
+import cn.efunbox.manage.base.service.OperationLogService;
+import cn.efunbox.manage.common.utils.IpUtils;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.AsyncResult;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+import java.util.concurrent.Future;
+
+
+@Slf4j
+@Component
+public class AsyncOperationLogHandler {
+
+    @Autowired
+    OperationLogService operationLogService;
+
+
+    @Async("threadPoolAsyncTaskExecutor")
+    public void asyncHandleLog(JoinPoint joinPoint, HttpServletRequest request,Object retVal) {
+
+        User loginUser = (User) request.getAttribute("userInfo");
+
+        //如果用户不为空
+        if(Objects.nonNull(loginUser)) {
+            OperationLog operationLog = new OperationLog();
+            try {
+                //设置操作用户 信息
+                operationLog.setUserName(loginUser.getNickName());
+                operationLog.setUserId(loginUser.getId()+"");
+                //设置 ip
+                operationLog.setIp(IpUtils.getIp(request));
+                //设置 商户类型
+                operationLog.setMethodName(joinPoint.getSignature().getName());
+                operationLog.setRequestUrl(request.getRequestURI());
+                operationLog.setParamJson(JSON.toJSONString(joinPoint.getArgs()));
+                operationLog.setReturnData(JSON.toJSONString(retVal));
+                operationLogService.saveOpertionLog(operationLog);
+            } catch (Exception e) {
+                log.error("URL : {} 记录操作日志信息失败  message :{} ", request.getRequestURI(), e);
+            }
+        }
+        log.info("用户:{} 完成日志切面 url:{}",loginUser.getNickName(),request.getRequestURI());
+    }
+
+    @Async
+    public Future<String> asyncMethodWithReturnType() {
+        log.error("Execute method asynchronously " + Thread.currentThread().getName());
+        try {
+            Thread.sleep(5000);
+            return new AsyncResult<>("hello world !!!!");
+        } catch (final InterruptedException e) {
+
+        }
+
+        return null;
+    }
+}

+ 1 - 1
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/controller/LoginController.java

@@ -17,7 +17,7 @@ import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
 @RestController
-@RequestMapping("/")
+@RequestMapping("/user")
 public class LoginController {
 
     @Autowired

+ 2 - 2
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/controller/ManageController.java

@@ -26,8 +26,8 @@ public class ManageController {
     @Autowired
     DepartmentService departmentService;
 
-    @PostMapping("/list")
-    public ApiResult findManage(@RequestBody ManageVO manageVO){
+    @GetMapping
+    public ApiResult findManage(ManageVO manageVO){
         ApiResult<List<Department>> deptResult = departmentService.getDeptChild(manageVO.getDeptId() == null ? 0l : manageVO.getDeptId());
         List<Long> deptIds = new ArrayList<>();
         deptResult.getData().stream().forEach(department -> {

+ 51 - 0
efunbox-base/efunbox-base-web/src/main/java/cn/efunbox/manage/base/controller/UserController.java

@@ -0,0 +1,51 @@
+package cn.efunbox.manage.base.controller;
+
+import cn.efunbox.manage.base.entity.User;
+import cn.efunbox.manage.base.service.UserService;
+import cn.efunbox.manage.common.entity.page.OnePage;
+import cn.efunbox.manage.common.result.ApiResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * UserController
+ * Created by xusq on 2018/6/4.
+ */
+@Slf4j
+@RestController
+@RequestMapping("/user")
+public class UserController {
+
+
+    @Autowired
+    UserService userService;
+
+    @GetMapping("/list")
+    public ApiResult<OnePage<User>> listForCms(User user, Integer pageNo, Integer pageSize){
+
+        return userService.list(user, pageNo, pageSize);
+
+    }
+
+    @PostMapping()
+    public ApiResult save(User user){
+        return userService.saveUser(user);
+
+    }
+    @PutMapping()
+    public ApiResult update(User user){
+        return userService.updateUser(user);
+
+    }
+    @DeleteMapping()
+    public ApiResult delete(String userId){
+        List<String> ids = new ArrayList<>();
+        ids.add(userId);
+        return userService.deleteUserByIds(ids);
+
+    }
+}