Authored by bevishuang

Merge branch 'test6.9.17' of http://git.yoho.cn/ufo/ufo-platform into test6.9.17

package com.yoho.order.dal;
import com.yoho.order.model.OperationLog;
import com.yoho.order.model.OperationLogReq;
import java.util.List;
/**
* @Author: 杨长江
* @Date: 2019-12-10 10:52
* @Description: 操作日志持久类
*/
public interface OperationLogMapper {
/**
* 保存
* @param operationLog
*/
int save(OperationLog operationLog);
/**
* 单条查询
* @param id
* @return
*/
OperationLog detail(int id);
/**
* 分页查询
* @param req
* @return
*/
List<OperationLog> page(OperationLogReq req);
/**
* 统计
* @param req
* @return
*/
int count(OperationLogReq req);
}
... ...
package com.yoho.order.model;
import lombok.Data;
/**
* @Author: 杨长江
* @Date: 2019-12-09 19:03
* @Description: 操作日志
*/
@Data
public class OperationLog {
private int id;
private Integer uId;
/**
* 方法名称
*/
private String methodName;
/**
* 方法参数
*/
private String methodParam;
private int createTime;
/**
* 操作人
*/
private String uName;
private String ip;
}
... ...
package com.yoho.order.model;
import com.yoho.ufo.service.model.PageRequestBO;
import lombok.Data;
/**
* @Author: 杨长江
* @Date: 2019-12-10 10:44
* @Description: 日志分页查询实体
*/
@Data
public class OperationLogReq extends PageRequestBO {
/**
* 操作人
*/
private String operationName;
}
... ...
package com.yoho.order.model;
import lombok.Data;
/**
* @Author: 杨长江
* @Date: 2019-12-09 19:03
* @Description: 操作日志
*/
@Data
public class OperationLogResp {
private int id;
/**
* 方法名称
*/
private String methodName;
/**
* 方法参数
*/
private String methodParam;
private String createTimeStr;
/**
* 操作人
*/
private String uName;
private String ip;
}
... ...
<?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.yoho.order.dal.OperationLogMapper">
<resultMap id="BaseResultMap" type="com.yoho.order.model.OperationLog">
<result column="id" property="id" jdbcType="INTEGER" />
<result column="uid" property="uId" jdbcType="INTEGER" />
<result column="uname" property="uName" jdbcType="VARCHAR" />
<result column="method_name" property="methodName" jdbcType="VARCHAR" />
<result column="method_param" property="methodParam" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="INTEGER" />
<result column="ip" property="ip" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List">
id, uid, method_name, method_param, create_time, uname, ip
</sql>
<select id="page" parameterType="com.yoho.order.model.OperationLogReq" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from operation_log
where 1 = 1
<if test="operationName != null and operationName != ''">
and uname like concat('%', #{operationName,jdbcType=VARCHAR}, '%')
</if>
order by id desc
limit #{start,jdbcType=INTEGER},#{size,jdbcType=INTEGER}
</select>
<select id="detail" parameterType="int" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from operation_log
where id = #{id,jdbcType=INTEGER}
limit 1
</select>
<select id="count" parameterType="com.yoho.order.model.OperationLogReq" resultType="int">
select count(1)
from operation_log
where 1 = 1
<if test="operationName != null and operationName != ''">
and uname like concat(#{operationName,jdbcType=VARCHAR}, '%')
</if>
</select>
<insert id="save" parameterType="com.yoho.order.model.OperationLog">
insert into
operation_log(`uid`,`method_name`,`method_param`,`create_time`,`uname`,`ip`)
values(#{uId,jdbcType=INTEGER},#{methodName,jdbcType=VARCHAR},#{methodParam,jdbcType=VARCHAR},
#{createTime,jdbcType=INTEGER},#{uName,jdbcType=VARCHAR},#{ip,jdbcType=VARCHAR})
</insert>
</mapper>
\ No newline at end of file
... ...
package com.yoho.ufo.order.aop;
import com.alibaba.fastjson.JSONObject;
import com.yoho.core.common.utils.DateUtil;
import com.yoho.order.model.OperationLog;
import com.yoho.ufo.login.model.UserInfoResponseBO;
import com.yoho.ufo.order.service.IOperationLogService;
import org.aspectj.lang.JoinPoint;
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 javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @Author: 杨长江
* @Date: 2019-12-09 18:46
* @Description: 记录操作日志切面
*/
@Component
@Aspect
public class OperationLogAspect {
@Autowired
private HttpServletRequest request;
@Autowired
private IOperationLogService operationLogService;
/**
* 切RequestMapping注解的方法
*/
@Pointcut("execution(* com.yoho.ufo.order.controller.MetaConfigController.update*(..))")
private void pointcut(){}
@Before("pointcut()")
public void before(JoinPoint point){
Object[] objects = point.getArgs();
System.out.println(objects);
// 获取方法签名
MethodSignature signature = (MethodSignature)point.getSignature();
String className = signature.getMethod().getDeclaringClass().getName();
String methodName = signature.getMethod().getName();
OperationLog operationLog = new OperationLog();
operationLog.setMethodName(className + "." + methodName);
operationLog.setCreateTime(DateUtil.getCurrentTimeSecond());
operationLog.setMethodParam(getParam(request));
operationLog.setIp(request.getRemoteAddr());
operationLog.setUName(getUname(request));
operationLog.setUId(getUid(request));
operationLogService.save(operationLog);
}
/**
* 获取参数
* @param request
* @return
*/
private String getParam(HttpServletRequest request){
Map<String,Object> map = new HashMap<>(16);
map.put("id",request.getParameter("id"));
map.put("code",request.getParameter("code"));
map.put("title",request.getParameter("title"));
map.put("desc",request.getParameter("desc"));
map.put("value",request.getParameter("value"));
//这样拼接返回的不是一个json格式数据,此处不使用JSONObject序列化
//是因为json序列化会使value字段里的 " 被转义为 \",不好做json格式校验
StringBuffer stringBuffer = new StringBuffer("{");
map.forEach((key,value) -> stringBuffer.append(key).append(":").append(value).append(","));
String json = stringBuffer.substring(0,stringBuffer.length()-1);
return json + "}";
}
/**
* 获取用户名
* @param request
* @return
*/
private String getUname(HttpServletRequest request){
UserInfoResponseBO responseBO = (UserInfoResponseBO)request.getSession().getAttribute("platformUser");
if(Objects.isNull(responseBO)){
return null;
}
return responseBO.getAccount();
}
/**
* 获取userId
* @param request
* @return
*/
private Integer getUid(HttpServletRequest request){
UserInfoResponseBO responseBO = (UserInfoResponseBO)request.getSession().getAttribute("platformUser");
if(Objects.isNull(responseBO)){
return null;
}
return Integer.valueOf(responseBO.getPid());
}
}
... ...
package com.yoho.ufo.order.controller;
import com.yoho.order.model.OperationLogReq;
import com.yoho.order.model.OperationLogResp;
import com.yoho.ufo.order.service.IOperationLogService;
import com.yoho.ufo.service.model.ApiResponse;
import com.yoho.ufo.service.model.PageResponseBO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: 杨长江
* @Date: 2019-12-10 15:10
* @Description: 操作日志接口
*/
@RestController
@RequestMapping(value = "/operationLog")
public class OperationLogController {
@Autowired
private IOperationLogService operationLogService;
/**
* 分页查询
* @return
*/
@RequestMapping(value = "/queryLogList")
public ApiResponse page(OperationLogReq operationLogReq){
PageResponseBO<OperationLogResp> pageResponseBO = operationLogService.page(operationLogReq);
return new ApiResponse.ApiResponseBuilder().data(pageResponseBO).code(HttpStatus.OK.value()).build();
}
/**
* 查询单条记录
* @param id
* @return
*/
@RequestMapping(value = "/detail")
public ApiResponse detail(int id){
return operationLogService.detail(id);
}
}
... ...
package com.yoho.ufo.order.service;
import com.yoho.order.model.OperationLogReq;
import com.yoho.order.model.OperationLogResp;
import com.yoho.ufo.service.model.ApiResponse;
import com.yoho.order.model.OperationLog;
import com.yoho.ufo.service.model.PageResponseBO;
/**
* @Author: 杨长江
* @Date: 2019-12-10 09:27
* @Description: 操作日志服务类
*/
public interface IOperationLogService {
/**
* 保存
* @param operationLog
* @return
*/
void save(OperationLog operationLog);
/**
* 分页查询
* @param operationLogReq
* @return
*/
PageResponseBO<OperationLogResp> page(OperationLogReq operationLogReq);
/**
* 查询单条日志信息
* @param id
* @return
*/
ApiResponse detail(int id);
}
... ...
package com.yoho.ufo.order.service.impl;
import com.yoho.order.dal.OperationLogMapper;
import com.yoho.order.model.OperationLogReq;
import com.yoho.order.model.OperationLog;
import com.yoho.order.model.OperationLogResp;
import com.yoho.ufo.order.service.IOperationLogService;
import com.yoho.ufo.service.model.ApiResponse;
import com.yoho.ufo.service.model.PageResponseBO;
import com.yoho.ufo.util.DateUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: 杨长江
* @Date: 2019-12-10 10:49
* @Description: 说明
*/
@Service
public class OperationLogServiceImpl implements IOperationLogService {
@Autowired
private OperationLogMapper operationLogMapper;
@Override
public void save(OperationLog operationLog) {
operationLogMapper.save(operationLog);
}
@Override
public PageResponseBO<OperationLogResp> page(OperationLogReq operationLogReq) {
int count = operationLogMapper.count(operationLogReq);
if(count == 0){
return null;
}
PageResponseBO<OperationLogResp> pageResponseBO = new PageResponseBO<>();
List<OperationLog> list = operationLogMapper.page(operationLogReq);
List<OperationLogResp> operationLogRespList = new ArrayList<>(list.size());
for (OperationLog log : list) {
OperationLogResp resp = new OperationLogResp();
BeanUtils.copyProperties(log,resp);
resp.setCreateTimeStr(DateUtil.int2DateStr(log.getCreateTime(),DateUtil.DATE_TIME_FORMAT));
operationLogRespList.add(resp);
}
pageResponseBO.setTotal(count);
pageResponseBO.setList(operationLogRespList);
return pageResponseBO;
}
@Override
public ApiResponse detail(int id) {
if(id <= 0){
return new ApiResponse.ApiResponseBuilder()
.code(HttpStatus.INTERNAL_SERVER_ERROR.value())
.message("非法参数")
.build();
}
return new ApiResponse.ApiResponseBuilder()
.code(HttpStatus.OK.value())
.data(operationLogMapper.detail(id))
.build();
}
}
... ...
... ... @@ -73,6 +73,7 @@ datasources:
- com.yoho.order.dal.BuyerOrderStatusFlowMapper
- com.yoho.order.dal.BlackUserMapper
- com.yoho.order.dal.MetaConfigMapper
- com.yoho.order.dal.OperationLogMapper
ufo_resource:
servers:
... ...
... ... @@ -74,6 +74,7 @@ datasources:
- com.yoho.order.dal.BuyerOrderStatusFlowMapper
- com.yoho.order.dal.BlackUserMapper
- com.yoho.order.dal.MetaConfigMapper
- com.yoho.order.dal.OperationLogMapper
ufo_resource:
servers:
... ...
<!DOCTYPE html>
<div id="tt" class="easyui-layout" fit="true" style="overflow-y: scroll">
<form name="metaConfigEditForm" id="metaConfigEditForm" method="post" enctype="multipart/form-data">
<form name="metaConfigEditForm" id="metaConfigEditForm" method="post">
<input type="hidden" name="id" id="id"/>
<div style="margin-top: 20px;margin-left: 30px">
<table border="0" style="width:95%;margin-top:5px;line-height:30px;" id="tab">
... ...