diff --git a/src/main/java/com/hxtec/polaris/PolarisApplication.java b/src/main/java/com/hxtec/polaris/PolarisApplication.java index 9b0870a72f43d965946087c428f6739b93f67a7c..0d23c03a84cabf14934247ba6bd54c12531f416a 100644 --- a/src/main/java/com/hxtec/polaris/PolarisApplication.java +++ b/src/main/java/com/hxtec/polaris/PolarisApplication.java @@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -17,6 +18,7 @@ import tk.mybatis.spring.annotation.MapperScan; @EnableCaching @EnableJpaAuditing @EnableScheduling +@EnableAspectJAutoProxy public class PolarisApplication { public static void main(String[] args) { diff --git a/src/main/java/com/hxtec/polaris/commons/aop/Log.java b/src/main/java/com/hxtec/polaris/commons/aop/Log.java new file mode 100644 index 0000000000000000000000000000000000000000..f8b7515ef336a99330912f221d6e12cf55bfbf06 --- /dev/null +++ b/src/main/java/com/hxtec/polaris/commons/aop/Log.java @@ -0,0 +1,20 @@ +package com.hxtec.polaris.commons.aop; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @Author yonyong + * @Description 系统操作日志 + * @Date 2019/10/30 15:39 + * @Param + * @return + **/ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Log { + String value() default ""; + String comment() default ""; +} diff --git a/src/main/java/com/hxtec/polaris/commons/aop/SystemLogAop.java b/src/main/java/com/hxtec/polaris/commons/aop/SystemLogAop.java new file mode 100644 index 0000000000000000000000000000000000000000..4f70a22e035dea316bf32d78b68ccbefc5f0d55e --- /dev/null +++ b/src/main/java/com/hxtec/polaris/commons/aop/SystemLogAop.java @@ -0,0 +1,127 @@ +package com.hxtec.polaris.commons.aop; + +import com.alibaba.fastjson.JSONObject; +import com.hxtec.polaris.entity.TblLog; +import com.hxtec.polaris.mapper.TblLogMapper; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Date; + +/** + * @Describtion 操作记录 + * @Author yonyong + * @Date 2019/10/30 15:37 + * @Version 1.0.0 + **/ +@Aspect +@Component +public class SystemLogAop { + @Resource + TblLogMapper tblLogMapper; + + @Pointcut("@annotation(com.hxtec.polaris.commons.aop.Log)") + public void pointcut(){} + + @Around("pointcut()") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + long beginTime = System.currentTimeMillis(); + //执行方法 + try{ + Object result = joinPoint.proceed(); + //执行时常(毫秒) + long time = System.currentTimeMillis()-beginTime; + //保存日志 + savaLog(joinPoint,time,"成功"); + return result; + }catch (Exception e){ + //执行时常(毫秒) + long time = System.currentTimeMillis()-beginTime; + //保存日志 + savaLog(joinPoint,time,"失败"); + throw e; + } + } + + private void savaLog(ProceedingJoinPoint joinPoint, long time,String result) throws UnknownHostException { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + TblLog tblLog = new TblLog(); + Log log = method.getAnnotation(Log.class); + if (log != null){ + //注解上的描述 + tblLog.setOperation(log.value()); + tblLog.setComment(log.comment()); + } + //请求的方法名 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = signature.getName(); + tblLog.setMethod(className+"."+methodName+"()"); + //请求的参数 + try { + Object[] args = joinPoint.getArgs(); + String paramString = null; + String params = ""; + for (int i=0; i< args.length;i++){ + if (isPrimitive(args[i])){ + paramString = args[i].toString(); + }else { + paramString = args[i].toString(); + } + if (null != paramString && paramString.length()>4999){ + paramString = paramString.substring(0,4999); + } + params = params + "参数"+String.valueOf(i+1)+":"+ JSONObject.toJSONString(paramString) + ";" ; + } + + tblLog.setParams(params); + }catch (Exception e){ + tblLog.setParams(null); + } + + //获取request + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = servletRequestAttributes.getRequest(); + //设置ip地址 + InetAddress ip4 = InetAddress.getLocalHost(); + String ip = ip4.getHostAddress(); + tblLog.setIp(ip); + + //设置用户相关信息 默认setUserid 1 setUsername yonyong + tblLog.setUserid(1); + tblLog.setUsername("yonyong"); + + //设置方法执行时间 + tblLog.setTime((int) time); + + //设置系统当前时间 + Date date = new Date(); + tblLog.setGmtcreate(date); + + //设置操作结果 + tblLog.setResult(result); + + //保存系统日志 + tblLogMapper.insert(tblLog); + } + + /**判断一个对象是否是基本类型或基本类型的封装类型*/ + private boolean isPrimitive(Object obj) { + try { + return ((Class)obj.getClass().getField("TYPE").get(null)).isPrimitive(); + } catch (Exception e) { + return false; + } + } +} diff --git a/src/main/java/com/hxtec/polaris/controller/OrderManagerController.java b/src/main/java/com/hxtec/polaris/controller/OrderManagerController.java index 6dece0a7090db80bb68a67f8a08274e3395c6059..355640710a70db1f354ad591608bbe1bcf2f86ae 100644 --- a/src/main/java/com/hxtec/polaris/controller/OrderManagerController.java +++ b/src/main/java/com/hxtec/polaris/controller/OrderManagerController.java @@ -1,5 +1,6 @@ package com.hxtec.polaris.controller; +import com.hxtec.polaris.commons.aop.Log; import com.hxtec.polaris.commons.api.vo.Result; import com.hxtec.polaris.commons.dto.OmsOrderDeliveryParam; import com.hxtec.polaris.entity.ShopLogisticCompany; @@ -36,12 +37,14 @@ public class OrderManagerController { } @PostMapping("update/close") + @Log(value = "订单关闭",comment = "管理员关闭订单") public Object closeOrder(String ids,String note){ String[] idss = ids.split(","); return Result.ok(orderManagerService.closeOrder(idss,note)); } @PostMapping("update/delivery") + @Log(value = "订单发货",comment = "管理员执行发货操作") public Object delivery(@RequestBody List deliveryParamList){ int count = orderManagerService.delivery(deliveryParamList); if (count > 0) { @@ -51,6 +54,7 @@ public class OrderManagerController { } @PostMapping("update/receiverInfo") + @Log(value = "修改收货人信息",comment = "管理员修改订单收货人信息") public Object receiverInfo(int id,String name,String phone,String postcode,String detail){ int count = orderManagerService.receiverInfo(id,name,phone,postcode,detail); if (count > 0) { @@ -70,16 +74,19 @@ public class OrderManagerController { } @PostMapping("logistic/update") + @Log(value = "更新物流公司",comment = "管理员更新物流公司") public Result updateLogistic(ShopLogisticCompany shopLogisticCompany){ return Result.ok(orderManagerService.updateLogistic(shopLogisticCompany)); } @PostMapping("logistic/add") + @Log(value = "添加物流公司",comment = "管理员添加物流公司") public Result addLogistic(ShopLogisticCompany shopLogisticCompany){ return Result.ok(orderManagerService.addLogistic(shopLogisticCompany)); } @PostMapping("logistic/delete") + @Log(value = "删除物流公司",comment = "管理员删除物流公司") public Result deleteLogistic(ShopLogisticCompany shopLogisticCompany){ return Result.ok(orderManagerService.deleteLogistic(shopLogisticCompany)); } diff --git a/src/main/java/com/hxtec/polaris/controller/TestController.java b/src/main/java/com/hxtec/polaris/controller/TestController.java new file mode 100644 index 0000000000000000000000000000000000000000..07556fd783f065715cd5e94ca4c270be0eb13dcd --- /dev/null +++ b/src/main/java/com/hxtec/polaris/controller/TestController.java @@ -0,0 +1,50 @@ +package com.hxtec.polaris.controller; + +import com.hxtec.polaris.commons.aop.Log; +import com.hxtec.polaris.commons.api.vo.Result; +import com.hxtec.polaris.commons.exception.MyException; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.FileNotFoundException; + +/** + * @Describtion 测试log + * @Author yonyong + * @Date 2020/1/2 16:58 + * @Version 1.0.0 + **/ +@RestController("test") +public class TestController { + + @RequestMapping("1") + @Log(value = "ceshi",comment = "测测试一下") + public String test1(){ + return "1"; + } + + @RequestMapping("2") + @Log(value = "ceshi",comment = "测测试自定义异常") + public String test2(){ + throw new MyException(Result.error()); + } + + @RequestMapping("3") + @Log(value = "ceshi",comment = "测测试自定义异常记录日志") + public String test3(){ + String LOG_MSG = "11122231231"; + throw new MyException(Result.error(),LOG_MSG); + } + + @RequestMapping("4") + @Log(value = "ceshi",comment = "测测试系统级运行时NPE") + public String test4(){ + throw new NullPointerException(); + } + + @RequestMapping("5") + @Log(value = "ceshi",comment = "测测试系统级io级别异常") + public String test5() throws FileNotFoundException { + throw new FileNotFoundException(); + } +} diff --git a/src/main/java/com/hxtec/polaris/entity/ShopLogisticCompany.java b/src/main/java/com/hxtec/polaris/entity/ShopLogisticCompany.java index f35d379a68e5e9bd67ba0380bdd74e327dbfc694..9d55287e9597caab1e92947daa1aeaa1f25c45d6 100644 --- a/src/main/java/com/hxtec/polaris/entity/ShopLogisticCompany.java +++ b/src/main/java/com/hxtec/polaris/entity/ShopLogisticCompany.java @@ -59,4 +59,14 @@ public class ShopLogisticCompany { public void setReaply(String reaply) { this.reaply = reaply; } + + @Override + public String toString() { + return "ShopLogisticCompany{" + + "id=" + id + + ", name='" + name + '\'' + + ", code='" + code + '\'' + + ", reaply='" + reaply + '\'' + + '}'; + } } \ No newline at end of file diff --git a/src/main/java/com/hxtec/polaris/entity/TblLog.java b/src/main/java/com/hxtec/polaris/entity/TblLog.java new file mode 100644 index 0000000000000000000000000000000000000000..85480a7d0fc25c32e47cbc217ebefaa3bdf510a9 --- /dev/null +++ b/src/main/java/com/hxtec/polaris/entity/TblLog.java @@ -0,0 +1,54 @@ +package com.hxtec.polaris.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.util.Date; + +/** + * 操作记录 + */ +@Table(name = "hx_tec_shop.tbl_log") +@Data +public class TblLog { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(name = "userId") + private Integer userid; + + private String username; + + private String operation; + + /** + * 方法执行时间 + */ + private Integer time; + + private String method; + + private String params; + + /** + * ip地址 + */ + private String ip; + + /** + * 系统当前时间 + */ + @Column(name = "gmtCreate") + private Date gmtcreate; + + /** + * 备注 + */ + private String comment; + + /** + * 操作结果 + */ + private String result; +} \ No newline at end of file diff --git a/src/main/java/com/hxtec/polaris/mapper/TblLogMapper.java b/src/main/java/com/hxtec/polaris/mapper/TblLogMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..46970743b84af815bcf48c31f5c8f93d3c54a4b1 --- /dev/null +++ b/src/main/java/com/hxtec/polaris/mapper/TblLogMapper.java @@ -0,0 +1,7 @@ +package com.hxtec.polaris.mapper; + +import com.hxtec.polaris.entity.TblLog; +import tk.mybatis.mapper.MyMapper; + +public interface TblLogMapper extends MyMapper { +} \ No newline at end of file