From 07e14e6c0481dcf08d3ebbc8be4b34c9a407e8de Mon Sep 17 00:00:00 2001 From: jinqiming <45981669@qq.com> Date: Fri, 13 Nov 2020 17:10:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=92=89=E9=92=89=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysDingtalkSyncLogController.java | 126 ++++++++++ .../resources/templates/system/log/add.html | 149 ++++++++++++ .../resources/templates/system/log/edit.html | 150 ++++++++++++ .../resources/templates/system/log/log.html | 220 ++++++++++++++++++ .../common/annotation/DingTalkSyncLog.java | 41 ++++ .../common/enums/DingTalkBusinessType.java | 29 +++ .../common/enums/DingTalkListenerType.java | 10 +- .../snow/common/enums/DingTalkSyncType.java | 31 +++ .../exception/DingTalkSyncException.java | 42 ++++ .../aspectj/DingTalkSyncLogAspect.java | 193 +++++++++++++++ .../com/snow/dingtalk/common/BaseService.java | 11 +- .../dingtalk/listener/CallBackService.java | 4 + .../listener/SyncDingTalkInfoFactory.java | 2 +- .../dingtalk/listener/UserEventService.java | 2 +- .../dingtalk/service/CallBackService.java | 2 +- .../service/impl/CallBackServiceImpl.java | 81 ++----- .../service/impl/DepartmentServiceImpl.java | 21 +- .../service/impl/UserServiceImpl.java | 19 +- .../manager/factory/AsyncFactory.java | 21 ++ .../system/domain/SysDingtalkSyncLog.java | 141 +++++++++++ .../mapper/SysDingtalkSyncLogMapper.java | 61 +++++ .../service/ISysDingtalkSyncLogService.java | 61 +++++ .../impl/SysDingtalkSyncLogServiceImpl.java | 97 ++++++++ .../service/impl/SysUserServiceImpl.java | 2 +- .../system/SysDingtalkSyncLogMapper.xml | 133 +++++++++++ 25 files changed, 1563 insertions(+), 86 deletions(-) create mode 100644 snow-admin/src/main/java/com/snow/web/controller/system/SysDingtalkSyncLogController.java create mode 100644 snow-admin/src/main/resources/templates/system/log/add.html create mode 100644 snow-admin/src/main/resources/templates/system/log/edit.html create mode 100644 snow-admin/src/main/resources/templates/system/log/log.html create mode 100644 snow-common/src/main/java/com/snow/common/annotation/DingTalkSyncLog.java create mode 100644 snow-common/src/main/java/com/snow/common/enums/DingTalkBusinessType.java create mode 100644 snow-common/src/main/java/com/snow/common/enums/DingTalkSyncType.java create mode 100644 snow-common/src/main/java/com/snow/common/exception/DingTalkSyncException.java create mode 100644 snow-dingtalk/src/main/java/com/snow/dingtalk/aspectj/DingTalkSyncLogAspect.java create mode 100644 snow-system/src/main/java/com/snow/system/domain/SysDingtalkSyncLog.java create mode 100644 snow-system/src/main/java/com/snow/system/mapper/SysDingtalkSyncLogMapper.java create mode 100644 snow-system/src/main/java/com/snow/system/service/ISysDingtalkSyncLogService.java create mode 100644 snow-system/src/main/java/com/snow/system/service/impl/SysDingtalkSyncLogServiceImpl.java create mode 100644 snow-system/src/main/resources/mapper/system/SysDingtalkSyncLogMapper.xml diff --git a/snow-admin/src/main/java/com/snow/web/controller/system/SysDingtalkSyncLogController.java b/snow-admin/src/main/java/com/snow/web/controller/system/SysDingtalkSyncLogController.java new file mode 100644 index 0000000..41183a6 --- /dev/null +++ b/snow-admin/src/main/java/com/snow/web/controller/system/SysDingtalkSyncLogController.java @@ -0,0 +1,126 @@ +package com.snow.web.controller.system; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.snow.common.annotation.Log; +import com.snow.common.enums.BusinessType; +import com.snow.system.domain.SysDingtalkSyncLog; +import com.snow.system.service.ISysDingtalkSyncLogService; +import com.snow.common.core.controller.BaseController; +import com.snow.common.core.domain.AjaxResult; +import com.snow.common.utils.poi.ExcelUtil; +import com.snow.common.core.page.TableDataInfo; + +/** + * 钉钉同步日志记录Controller + * + * @author snow + * @date 2020-11-13 + */ +@Controller +@RequestMapping("/system/log") +public class SysDingtalkSyncLogController extends BaseController +{ + private String prefix = "system/log"; + + @Autowired + private ISysDingtalkSyncLogService sysDingtalkSyncLogService; + + @RequiresPermissions("system:log:view") + @GetMapping() + public String log() + { + return prefix + "/log"; + } + + /** + * 查询钉钉同步日志记录列表 + */ + @RequiresPermissions("system:log:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(SysDingtalkSyncLog sysDingtalkSyncLog) + { + startPage(); + List list = sysDingtalkSyncLogService.selectSysDingtalkSyncLogList(sysDingtalkSyncLog); + return getDataTable(list); + } + + /** + * 导出钉钉同步日志记录列表 + */ + @RequiresPermissions("system:log:export") + @Log(title = "钉钉同步日志记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(SysDingtalkSyncLog sysDingtalkSyncLog) + { + List list = sysDingtalkSyncLogService.selectSysDingtalkSyncLogList(sysDingtalkSyncLog); + ExcelUtil util = new ExcelUtil(SysDingtalkSyncLog.class); + return util.exportExcel(list, "log"); + } + + /** + * 新增钉钉同步日志记录 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存钉钉同步日志记录 + */ + @RequiresPermissions("system:log:add") + @Log(title = "钉钉同步日志记录", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(SysDingtalkSyncLog sysDingtalkSyncLog) + { + return toAjax(sysDingtalkSyncLogService.insertSysDingtalkSyncLog(sysDingtalkSyncLog)); + } + + /** + * 修改钉钉同步日志记录 + */ + @GetMapping("/edit/{logId}") + public String edit(@PathVariable("logId") Long logId, ModelMap mmap) + { + SysDingtalkSyncLog sysDingtalkSyncLog = sysDingtalkSyncLogService.selectSysDingtalkSyncLogById(logId); + mmap.put("sysDingtalkSyncLog", sysDingtalkSyncLog); + return prefix + "/edit"; + } + + /** + * 修改保存钉钉同步日志记录 + */ + @RequiresPermissions("system:log:edit") + @Log(title = "钉钉同步日志记录", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(SysDingtalkSyncLog sysDingtalkSyncLog) + { + return toAjax(sysDingtalkSyncLogService.updateSysDingtalkSyncLog(sysDingtalkSyncLog)); + } + + /** + * 删除钉钉同步日志记录 + */ + @RequiresPermissions("system:log:remove") + @Log(title = "钉钉同步日志记录", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(sysDingtalkSyncLogService.deleteSysDingtalkSyncLogByIds(ids)); + } +} diff --git a/snow-admin/src/main/resources/templates/system/log/add.html b/snow-admin/src/main/resources/templates/system/log/add.html new file mode 100644 index 0000000..9b1bea2 --- /dev/null +++ b/snow-admin/src/main/resources/templates/system/log/add.html @@ -0,0 +1,149 @@ + + + + + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + 代码生成请选择字典属性 +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+ 代码生成请选择字典属性 +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/system/log/edit.html b/snow-admin/src/main/resources/templates/system/log/edit.html new file mode 100644 index 0000000..c5dfc20 --- /dev/null +++ b/snow-admin/src/main/resources/templates/system/log/edit.html @@ -0,0 +1,150 @@ + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + 代码生成请选择字典属性 +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+ 代码生成请选择字典属性 +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/snow-admin/src/main/resources/templates/system/log/log.html b/snow-admin/src/main/resources/templates/system/log/log.html new file mode 100644 index 0000000..2b1cfff --- /dev/null +++ b/snow-admin/src/main/resources/templates/system/log/log.html @@ -0,0 +1,220 @@ + + + + + + +
+
+
+
+
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + + - + +
  • +
  • +  搜索 +  重置 +
  • +
+
+
+
+ + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/snow-common/src/main/java/com/snow/common/annotation/DingTalkSyncLog.java b/snow-common/src/main/java/com/snow/common/annotation/DingTalkSyncLog.java new file mode 100644 index 0000000..e941571 --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/annotation/DingTalkSyncLog.java @@ -0,0 +1,41 @@ +package com.snow.common.annotation; + +import com.snow.common.enums.*; +import org.springframework.web.bind.annotation.RequestParam; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author snow + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DingTalkSyncLog +{ + + /** + * 模块描述 + */ + + public DingTalkListenerType dingTalkListenerType(); + + + /** + *钉钉同步方式 + */ + public DingTalkSyncType dingTalkSyncType() default DingTalkSyncType.AUTOMATIC; + + /** + * 请求钉钉的URL + * @return + */ + public String dingTalkUrl() default""; + + /** + * 是否保存请求的参数 + */ + public boolean isSaveRequestData() default true; +} diff --git a/snow-common/src/main/java/com/snow/common/enums/DingTalkBusinessType.java b/snow-common/src/main/java/com/snow/common/enums/DingTalkBusinessType.java new file mode 100644 index 0000000..a85d9d4 --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/enums/DingTalkBusinessType.java @@ -0,0 +1,29 @@ +package com.snow.common.enums; + +/** + * 业务操作类型 + * + * @author snow + */ +public enum DingTalkBusinessType +{ + /** + * 其它 + */ + OTHER, + + /** + * 新增 + */ + INSERT, + + /** + * 修改 + */ + UPDATE, + + /** + * 删除 + */ + DELETE +} diff --git a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java index 099715f..deec905 100644 --- a/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java +++ b/snow-common/src/main/java/com/snow/common/enums/DingTalkListenerType.java @@ -13,15 +13,15 @@ public enum DingTalkListenerType { DEPARTMENT_DELETED(3,2,"部门删除"), - USER_CREATED(5,1,"用户创建"), + USER_CREATE(1,1,"用户创建"), - USER_DELETE(6,1,"用户删除"), + USER_DELETE(3,1,"用户删除"), - CALL_BACK_REGISTER(20,10, "回调注册"), + CALL_BACK_REGISTER(1,10, "回调注册"), - CALL_BACK_UPDATE(21,10, "回调更新"), + CALL_BACK_UPDATE(2,10, "回调更新"), - CALL_BACK_DELETE(22,10, "回调删除"), + CALL_BACK_DELETE(3,10, "回调删除"), CALL_BACK_FAILED_RESULT(23,10, "获取回调失败结果"), ; diff --git a/snow-common/src/main/java/com/snow/common/enums/DingTalkSyncType.java b/snow-common/src/main/java/com/snow/common/enums/DingTalkSyncType.java new file mode 100644 index 0000000..9417a60 --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/enums/DingTalkSyncType.java @@ -0,0 +1,31 @@ +package com.snow.common.enums; + +/** + * 操作状态 + * + * @author snow + */ +public enum DingTalkSyncType +{ + /** + * 自动 + */ + AUTOMATIC(1), + + /** + * 手动 + */ + MANUAL(2); + + private final Integer code; + + private DingTalkSyncType(Integer code) + { + this.code = code; + } + + public Integer getCode() + { + return code; + } +} diff --git a/snow-common/src/main/java/com/snow/common/exception/DingTalkSyncException.java b/snow-common/src/main/java/com/snow/common/exception/DingTalkSyncException.java new file mode 100644 index 0000000..9c03ddd --- /dev/null +++ b/snow-common/src/main/java/com/snow/common/exception/DingTalkSyncException.java @@ -0,0 +1,42 @@ +package com.snow.common.exception; + +/** + * @author qimingjin + * @Title: + * @Description: + * @date 2020/11/13 14:54 + */ +public class DingTalkSyncException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private String requestParam; + + protected final String message; + + public DingTalkSyncException(String requestParam,String message) + { + this.requestParam = requestParam; + this.message = message; + } + public DingTalkSyncException(String message) + { + this.message = message; + } + + public DingTalkSyncException(String requestParam,String message, Throwable e) + { + super(message, e); + this.message = message; + this.requestParam = requestParam; + } + + @Override + public String getMessage() + { + return message; + } + + public String getRequestParam() { + return requestParam; + } +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/aspectj/DingTalkSyncLogAspect.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/aspectj/DingTalkSyncLogAspect.java new file mode 100644 index 0000000..2fb1246 --- /dev/null +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/aspectj/DingTalkSyncLogAspect.java @@ -0,0 +1,193 @@ +package com.snow.dingtalk.aspectj; + +import com.snow.common.annotation.DingTalkSyncLog; +import com.snow.common.enums.BusinessStatus; +import com.snow.common.exception.DingTalkSyncException; +import com.snow.common.json.JSON; +import com.snow.common.utils.ServletUtils; +import com.snow.common.utils.StringUtils; +import com.snow.framework.manager.AsyncManager; +import com.snow.framework.manager.factory.AsyncFactory; +import com.snow.framework.util.ShiroUtils; +import com.snow.system.domain.SysDingtalkSyncLog; +import com.snow.system.domain.SysUser; +import com.taobao.api.ApiException; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 操作日志记录处理 + * + * @author snow + */ +@Aspect +@Component +public class DingTalkSyncLogAspect +{ + private static final Logger log = LoggerFactory.getLogger(DingTalkSyncLogAspect.class); + + // 配置织入点 + @Pointcut("@annotation(com.snow.common.annotation.DingTalkSyncLog)") + public void logPointCut() + { + } + + /** + * 处理完请求后执行 + * + * @param joinPoint 切点 + */ + @AfterReturning(pointcut = "logPointCut()", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Object jsonResult) + { + handleLog(joinPoint, null, jsonResult); + } + + /** + * 拦截异常操作 + * + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(value = "logPointCut()", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Exception e) + { + handleLog(joinPoint, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, final Exception e, Object jsonResult) + { + try + { + // 获得注解 + DingTalkSyncLog controllerLog = getAnnotationLog(joinPoint); + if (controllerLog == null) + { + return; + } + + // 获取当前的用户 + SysUser currentUser = ShiroUtils.getSysUser(); + // *========数据库日志=========*// + SysDingtalkSyncLog sysDingtalkSyncLog = new SysDingtalkSyncLog(); + if(StringUtils.isNotNull(currentUser)){ + sysDingtalkSyncLog.setOperName(currentUser.getUserName()); + if (StringUtils.isNotNull(currentUser.getDept()) + && StringUtils.isNotEmpty(currentUser.getDept().getDeptName())) + { + sysDingtalkSyncLog.setDeptName(currentUser.getDept().getDeptName()); + } + + // 请求的地址 + String ip = ShiroUtils.getIp(); + sysDingtalkSyncLog.setOperIp(ip); + }else { + sysDingtalkSyncLog.setOperName("无"); + sysDingtalkSyncLog.setDeptName("无"); + } + + sysDingtalkSyncLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + + // 返回参数 + sysDingtalkSyncLog.setJsonResult(StringUtils.substring(JSON.marshal(jsonResult), 0, 2000)); + + sysDingtalkSyncLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); + if (e != null) + { + if(e instanceof DingTalkSyncException){ + sysDingtalkSyncLog.setStatus(BusinessStatus.FAIL.ordinal()); + sysDingtalkSyncLog.setOperDingtalkParam(((DingTalkSyncException) e).getRequestParam()); + sysDingtalkSyncLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + }else if(e instanceof ApiException){ + sysDingtalkSyncLog.setStatus(BusinessStatus.FAIL.ordinal()); + // sysDingtalkSyncLog.setOperDingtalkParam(((ApiException) e).getErrMsg()); + sysDingtalkSyncLog.setErrorMsg(StringUtils.substring(((ApiException) e).getErrMsg(), 0, 2000)); + } + else { + sysDingtalkSyncLog.setStatus(BusinessStatus.FAIL.ordinal()); + sysDingtalkSyncLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + } + // 设置方法名称 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + + sysDingtalkSyncLog.setMethod(className + "." + methodName + "()"); + // 设置请求方式 + sysDingtalkSyncLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 处理设置注解上的参数 + getControllerMethodDescription(controllerLog,joinPoint, sysDingtalkSyncLog); + // 保存数据库 + AsyncManager.me().execute(AsyncFactory.recordDingTalkSyncOper(sysDingtalkSyncLog)); + } + catch (Exception exp) + { + // 记录本地异常日志 + log.error("==前置通知异常=="); + log.error("异常信息:{}", exp.getMessage()); + exp.printStackTrace(); + } + } + + /** + * 获取注解中对方法的描述信息 用于Service层注解 + * + * @param log 日志 + * @param sysDingtalkSyncLog 操作日志 + * @throws Exception + */ + public void getControllerMethodDescription(DingTalkSyncLog log,JoinPoint joinPoint, SysDingtalkSyncLog sysDingtalkSyncLog) throws Exception + { + sysDingtalkSyncLog.setTitle(log.dingTalkListenerType().getInfo()); + sysDingtalkSyncLog.setModuleType(log.dingTalkListenerType().getType()); + sysDingtalkSyncLog.setBusinessType(log.dingTalkListenerType().getCode()); + // 设置操作人类别 + sysDingtalkSyncLog.setOperatorType(log.dingTalkSyncType().getCode()); + // 是否需要保存request,参数和值 + if (log.isSaveRequestData()) + { + // 获取参数的信息,传入到数据库中。 + setRequestValue(sysDingtalkSyncLog,joinPoint); + } + } + + /** + * 获取请求的参数,放到log中 + * + * @param operLog 操作日志 + * @throws Exception 异常 + */ + private void setRequestValue(SysDingtalkSyncLog operLog ,JoinPoint joinPoint) throws Exception + { + //获取切面的参数 + Object[] args = joinPoint.getArgs(); + operLog.setOperSourceParam(StringUtils.substring(com.alibaba.fastjson.JSON.toJSONString(args), 0, 4000)); + } + + /** + * 是否存在注解,如果存在就获取 + */ + private DingTalkSyncLog getAnnotationLog(JoinPoint joinPoint) throws Exception + { + Signature signature = joinPoint.getSignature(); + MethodSignature methodSignature = (MethodSignature) signature; + Method method = methodSignature.getMethod(); + + if (method != null) + { + return method.getAnnotation(DingTalkSyncLog.class); + } + return null; + } +} diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseService.java index 00f9500..2de6590 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/common/BaseService.java @@ -6,13 +6,20 @@ import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.request.OapiGettokenRequest; import com.dingtalk.api.response.OapiGettokenResponse; import com.snow.common.constant.Constants; +import com.snow.common.enums.BusinessStatus; import com.snow.common.enums.BusinessType; +import com.snow.common.enums.DingTalkSyncType; +import com.snow.common.utils.ServletUtils; import com.snow.common.utils.StringUtils; import com.snow.common.utils.spring.SpringUtils; +import com.snow.framework.util.ShiroUtils; +import com.snow.system.domain.SysDingtalkSyncLog; import com.snow.system.domain.SysOperLog; +import com.snow.system.domain.SysUser; import com.snow.system.service.ISysConfigService; import com.snow.system.service.ISysOperLogService; import com.snow.system.service.impl.SysConfigServiceImpl; +import com.snow.system.service.impl.SysDingtalkSyncLogServiceImpl; import com.snow.system.service.impl.SysOperLogServiceImpl; import com.taobao.api.ApiException; @@ -32,6 +39,7 @@ public class BaseService { private SysOperLogServiceImpl iSysOperLogService=SpringUtils.getBean("sysOperLogServiceImpl"); + private SysDingtalkSyncLogServiceImpl sysDingtalkSyncLogService=SpringUtils.getBean("sysDingtalkSyncLogServiceImpl"); /** * 获取token * @return @@ -49,7 +57,7 @@ public class BaseService { OapiGettokenResponse response = client.execute(request); if(response.getErrcode()==0){ timedCache.put(TOKEN,response.getAccessToken()); - syncDingTalkErrorOperLog(BaseConstantUrl.GET_TOKEN_URL,response.getMessage(),"getDingTalkToken()", com.alibaba.fastjson.JSON.toJSONString(request)); + syncDingTalkSuccessOperLog(BaseConstantUrl.GET_TOKEN_URL,response.getMessage(),"getDingTalkToken()", com.alibaba.fastjson.JSON.toJSONString(request)); return response.getAccessToken(); }else { //记录获取token失败日志 @@ -107,5 +115,4 @@ public class BaseService { sysOperLog.setStatus(0); iSysOperLogService.insertOperlog(sysOperLog); } - } diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/CallBackService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/CallBackService.java index 0f695f1..7e316e9 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/CallBackService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/CallBackService.java @@ -2,9 +2,12 @@ package com.snow.dingtalk.listener; import com.alibaba.fastjson.JSON; import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.enums.DingTalkSyncType; import com.snow.common.utils.spring.SpringUtils; +import com.snow.dingtalk.common.BaseConstantUrl; import com.snow.dingtalk.service.impl.CallBackServiceImpl; import com.snow.system.domain.DingtalkCallBack; +import com.snow.system.domain.SysDingtalkSyncLog; import com.snow.system.event.SyncEvent; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -27,6 +30,7 @@ public class CallBackService implements ISyncDingTalkInfo { DingTalkListenerType eventType =(DingTalkListenerType) syncEvent.getT(); Integer code = eventType.getCode(); if(code.equals(DingTalkListenerType.CALL_BACK_REGISTER.getCode())){ + // new SysDingtalkSyncLog(eventType,"registerCallBack",BaseConstantUrl.REGISTER_CALL_BACK,DingTalkSyncType.AUTOMATIC.) callBackServiceImpl.registerCallBack((DingtalkCallBack) syncEvent.getSource()); } else if( code.equals(DingTalkListenerType.CALL_BACK_UPDATE.getCode())){ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/SyncDingTalkInfoFactory.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/SyncDingTalkInfoFactory.java index 13639e0..a7a02d0 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/SyncDingTalkInfoFactory.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/SyncDingTalkInfoFactory.java @@ -22,7 +22,7 @@ public class SyncDingTalkInfoFactory { if(type.equals(DingTalkListenerType.DEPARTMENT_CREATE.getType())){ return new DepartmentEventService(); } - else if(type.equals(DingTalkListenerType.USER_CREATED.getType())){ + else if(type.equals(DingTalkListenerType.USER_CREATE.getType())){ return new UserEventService(); } else if(type.equals(DingTalkListenerType.CALL_BACK_REGISTER.getType())){ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/UserEventService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/UserEventService.java index e150041..87e7e51 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/UserEventService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/listener/UserEventService.java @@ -25,7 +25,7 @@ public class UserEventService implements ISyncDingTalkInfo { log.info("调用钉钉用户回调传入的原始参数:{}"+JSON.toJSONString(syncEvent)); DingTalkListenerType eventType =(DingTalkListenerType) syncEvent.getT(); Integer code = eventType.getCode(); - if(code.equals(DingTalkListenerType.USER_CREATED.getCode())){ + if(code.equals(DingTalkListenerType.USER_CREATE.getCode())){ userService.createUser((SysUser) syncEvent.getSource()); } else if( code.equals(DingTalkListenerType.USER_DELETE.getCode())){ diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/CallBackService.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/CallBackService.java index 3b6d47e..1deec37 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/CallBackService.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/CallBackService.java @@ -21,7 +21,7 @@ public interface CallBackService { * 更新事件 * @param dingtalkCallBack */ - void updateCallBack(DingtalkCallBack dingtalkCallBack); + Boolean updateCallBack(DingtalkCallBack dingtalkCallBack); /** * 删除事件 diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/CallBackServiceImpl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/CallBackServiceImpl.java index 7325168..6cf973e 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/CallBackServiceImpl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/CallBackServiceImpl.java @@ -7,13 +7,19 @@ import com.dingtalk.api.DefaultDingTalkClient; import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.request.*; import com.dingtalk.api.response.*; +import com.snow.common.annotation.DingTalkSyncLog; import com.snow.common.constant.Constants; +import com.snow.common.enums.DingTalkBusinessType; +import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.enums.DingTalkSyncType; +import com.snow.common.exception.DingTalkSyncException; import com.snow.common.utils.StringUtils; import com.snow.dingtalk.common.BaseConstantUrl; import com.snow.dingtalk.common.BaseService; import com.snow.dingtalk.service.CallBackService; import com.snow.system.domain.DingtalkCallBack; import com.taobao.api.ApiException; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; @@ -26,11 +32,12 @@ import java.util.List; * @date 2020/11/3 11:19 */ @Service +@Slf4j public class CallBackServiceImpl extends BaseService implements CallBackService { - public static final String TOKEN="call_back_dingtalk_token"; @Override + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.CALL_BACK_REGISTER,dingTalkUrl=BaseConstantUrl.REGISTER_CALL_BACK,dingTalkSyncType=DingTalkSyncType.AUTOMATIC) public void registerCallBack(DingtalkCallBack dingtalkCallBack) { DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.REGISTER_CALL_BACK); OapiCallBackRegisterCallBackRequest request = new OapiCallBackRegisterCallBackRequest(); @@ -40,20 +47,18 @@ public class CallBackServiceImpl extends BaseService implements CallBackService request.setCallBackTag(dingtalkCallBack.getEventNameList()); try { OapiCallBackRegisterCallBackResponse response = client.execute(request,getDingTalkToken()); - if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.REGISTER_CALL_BACK,response.getMessage(),"registerCallBack()", JSON.toJSONString(request)); - }else { - //记录获取token失败日志 - syncDingTalkErrorOperLog(BaseConstantUrl.REGISTER_CALL_BACK,response.getErrmsg(),"registerCallBack()", JSON.toJSONString(request)); + if(response.getErrcode()!=0){ + throw new DingTalkSyncException(JSON.toJSONString(request),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.REGISTER_CALL_BACK,e.getMessage(),"registerCallBack()", JSON.toJSONString(request)); - e.printStackTrace(); + log.error("注册钉钉回调registerCallBack异常:{}",e.getMessage()); + throw new DingTalkSyncException(JSON.toJSONString(request),e.getErrMsg()); } } @Override - public void updateCallBack(DingtalkCallBack dingtalkCallBack) { + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.CALL_BACK_UPDATE,dingTalkUrl=BaseConstantUrl.UPDATE_CALL_BACK,dingTalkSyncType=DingTalkSyncType.AUTOMATIC) + public Boolean updateCallBack(DingtalkCallBack dingtalkCallBack) { DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.UPDATE_CALL_BACK); OapiCallBackUpdateCallBackRequest request = new OapiCallBackUpdateCallBackRequest(); request.setUrl(dingtalkCallBack.getUrl()); @@ -63,33 +68,30 @@ public class CallBackServiceImpl extends BaseService implements CallBackService try { OapiCallBackUpdateCallBackResponse response = client.execute(request,getDingTalkToken()); if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.UPDATE_CALL_BACK,response.getMessage(),"updateCallBack()", JSON.toJSONString(request)); + return response.isSuccess(); }else { - //记录获取token失败日志 - syncDingTalkErrorOperLog(BaseConstantUrl.UPDATE_CALL_BACK,response.getErrmsg(),"updateCallBack()", JSON.toJSONString(request)); + throw new DingTalkSyncException(JSON.toJSONString(request),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.UPDATE_CALL_BACK,e.getMessage(),"updateCallBack()", JSON.toJSONString(request)); - e.printStackTrace(); + log.error("更新钉钉回调updateCallBack异常:{}",e.getMessage()); + throw new DingTalkSyncException(JSON.toJSONString(request),e.getErrMsg()); } } @Override + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.CALL_BACK_DELETE,dingTalkUrl=BaseConstantUrl.DELETE_CALL_BACK,dingTalkSyncType=DingTalkSyncType.AUTOMATIC) public void deleteCallBack(DingtalkCallBack dingtalkCallBack) { DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.DELETE_CALL_BACK); OapiCallBackDeleteCallBackRequest request = new OapiCallBackDeleteCallBackRequest(); request.setHttpMethod("GET"); try { OapiCallBackDeleteCallBackResponse response = client.execute(request, getDingTalkToken()); - if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.DELETE_CALL_BACK,response.getMessage(),"deleteCallBack()", JSON.toJSONString(request)); - }else { - //记录获取token失败日志 - syncDingTalkErrorOperLog(BaseConstantUrl.DELETE_CALL_BACK,response.getErrmsg(),"deleteCallBack()", JSON.toJSONString(request)); + if(response.getErrcode()!=0){ + throw new DingTalkSyncException(JSON.toJSONString(request),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.DELETE_CALL_BACK,e.getMessage(),"deleteCallBack()", JSON.toJSONString(request)); - e.printStackTrace(); + log.error("删除钉钉回调deleteCallBack异常:{}",e.getMessage()); + throw new DingTalkSyncException(JSON.toJSONString(request),e.getErrMsg()); } } @@ -102,7 +104,7 @@ public class CallBackServiceImpl extends BaseService implements CallBackService OapiCallBackGetCallBackFailedResultResponse response = client.execute(request, getDingTalkToken()); if(response.getErrcode()==0){ List failedList = response.getFailedList(); - syncDingTalkErrorOperLog(BaseConstantUrl.CALL_BACK_FAILED_RESULT,response.getMessage(),"getCallBackFailedResult()", JSON.toJSONString(request)); + syncDingTalkSuccessOperLog(BaseConstantUrl.CALL_BACK_FAILED_RESULT,response.getMessage(),"getCallBackFailedResult()", JSON.toJSONString(request)); return failedList; }else { //记录获取token失败日志 @@ -114,40 +116,5 @@ public class CallBackServiceImpl extends BaseService implements CallBackService } return null; } - /** - * 获取token - * @return - */ - @Deprecated - public String getCallBackDingTalkToken(DingtalkCallBack dingtalkCallBack){ - //创建缓存,缓存默认是7100S - TimedCache timedCache = CacheUtil.newTimedCache(7100); - if(StringUtils.isEmpty(timedCache.get(TOKEN))){ - DefaultDingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.GET_TOKEN_URL); - OapiGettokenRequest request = new OapiGettokenRequest(); - request.setAppkey(dingtalkCallBack.getAppKey()); - request.setAppsecret(dingtalkCallBack.getAppSecret()); - request.setHttpMethod(Constants.GET); - try { - OapiGettokenResponse response = client.execute(request); - if(response.getErrcode()==0){ - timedCache.put(TOKEN,response.getAccessToken()); - syncDingTalkErrorOperLog(BaseConstantUrl.GET_TOKEN_URL,response.getMessage(),"getCallBackDingTalkToken()", JSON.toJSONString(request)); - return response.getAccessToken(); - }else { - //记录获取token失败日志 - syncDingTalkErrorOperLog(BaseConstantUrl.GET_TOKEN_URL,response.getErrmsg(),"getCallBackDingTalkToken()", JSON.toJSONString(request)); - return null; - } - } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.GET_TOKEN_URL,e.getMessage(),"getCallBackDingTalkToken()",JSON.toJSONString(request)); - e.printStackTrace(); - } - return null; - }else { - return timedCache.get(TOKEN); - } - - } } diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DepartmentServiceImpl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DepartmentServiceImpl.java index ddaf581..5f12292 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DepartmentServiceImpl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/DepartmentServiceImpl.java @@ -7,6 +7,10 @@ import com.dingtalk.api.request.OapiDepartmentCreateRequest; import com.dingtalk.api.request.OapiDepartmentListRequest; import com.dingtalk.api.response.OapiDepartmentCreateResponse; import com.dingtalk.api.response.OapiDepartmentListResponse; +import com.snow.common.annotation.DingTalkSyncLog; +import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.enums.DingTalkSyncType; +import com.snow.common.exception.DingTalkSyncException; import com.snow.common.utils.spring.SpringUtils; import com.snow.dingtalk.common.BaseConstantUrl; import com.snow.dingtalk.common.BaseService; @@ -15,6 +19,7 @@ import com.snow.dingtalk.service.DepartmentService; import com.snow.system.service.impl.SysDeptServiceImpl; import com.taobao.api.ApiException; import com.taobao.api.Constants; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; @@ -26,11 +31,13 @@ import java.util.List; * @create: 2020-10-31 12:59 **/ @Service(value = "departmentServiceImpl") +@Slf4j public class DepartmentServiceImpl extends BaseService implements DepartmentService { private SysDeptServiceImpl sysDeptServiceImpl=SpringUtils.getBean("sysDeptServiceImpl"); @Override + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.DEPARTMENT_CREATE,dingTalkUrl=BaseConstantUrl.DEPARTMENT_CREATE) public Long createDepartment(DepartmentCreateRequest departmentDTO){ DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.DEPARTMENT_CREATE); OapiDepartmentCreateRequest request = new OapiDepartmentCreateRequest(); @@ -43,16 +50,15 @@ public class DepartmentServiceImpl extends BaseService implements DepartmentServ try { OapiDepartmentCreateResponse response = client.execute(request,getDingTalkToken()); if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.DEPARTMENT_CREATE,response.getMessage(),"createDepartment",JSON.toJSONString(request)); return response.getId(); }else { - syncDingTalkErrorOperLog(BaseConstantUrl.DEPARTMENT_CREATE,response.getErrmsg(),"createDepartment",JSON.toJSONString(request)); + throw new DingTalkSyncException(JSON.toJSONString(request),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.DEPARTMENT_CREATE,e.getMessage(),"createDepartment",JSON.toJSONString(request)); e.printStackTrace(); + log.error("钉钉创建部门createDepartment异常:{}",e.getMessage()); + throw new DingTalkSyncException(JSON.toJSONString(request),e.getErrMsg()); } - return null; } @@ -66,7 +72,7 @@ public class DepartmentServiceImpl extends BaseService implements DepartmentServ try { OapiDepartmentListResponse response = client.execute(request, getDingTalkToken()); if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.DEPARTMENT_LIST,response.getMessage(),"getDingTalkDepartmentList",JSON.toJSONString(request)); + syncDingTalkSuccessOperLog(BaseConstantUrl.DEPARTMENT_LIST,response.getMessage(),"getDingTalkDepartmentList",JSON.toJSONString(request)); return response.getDepartment(); }else { syncDingTalkErrorOperLog(BaseConstantUrl.DEPARTMENT_LIST,response.getErrmsg(),"getDingTalkDepartmentList",JSON.toJSONString(request)); @@ -79,9 +85,4 @@ public class DepartmentServiceImpl extends BaseService implements DepartmentServ } - public void sycnDepartmentData(){ - List dingTalkDepartmentList = getDingTalkDepartmentList(); - - - } } diff --git a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/UserServiceImpl.java b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/UserServiceImpl.java index 0699cf4..0ec73a5 100644 --- a/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/UserServiceImpl.java +++ b/snow-dingtalk/src/main/java/com/snow/dingtalk/service/impl/UserServiceImpl.java @@ -7,6 +7,9 @@ import com.dingtalk.api.request.OapiV2UserCreateRequest; import com.dingtalk.api.request.OapiV2UserDeleteRequest; import com.dingtalk.api.response.OapiV2UserCreateResponse; import com.dingtalk.api.response.OapiV2UserDeleteResponse; +import com.snow.common.annotation.DingTalkSyncLog; +import com.snow.common.enums.DingTalkListenerType; +import com.snow.common.exception.DingTalkSyncException; import com.snow.common.utils.StringUtils; import com.snow.common.utils.spring.SpringUtils; import com.snow.dingtalk.common.BaseConstantUrl; @@ -36,6 +39,7 @@ public class UserServiceImpl extends BaseService implements UserService { private SysPostServiceImpl sysPostService=SpringUtils.getBean("sysPostServiceImpl"); @Override + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.USER_CREATE,dingTalkUrl=BaseConstantUrl.USER_CREATE) public OapiV2UserCreateResponse.UserCreateResponse createUser(SysUser sysUser) { DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.USER_CREATE); OapiV2UserCreateRequest req = new OapiV2UserCreateRequest(); @@ -73,20 +77,19 @@ public class UserServiceImpl extends BaseService implements UserService { try { response = client.execute(req, getDingTalkToken()); if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.USER_CREATE,response.getMessage(),"createUser",JSON.toJSONString(req)); OapiV2UserCreateResponse.UserCreateResponse result = response.getResult(); return result; }else { - syncDingTalkErrorOperLog(BaseConstantUrl.USER_CREATE,response.getErrmsg(),"createUser",JSON.toJSONString(req)); + throw new DingTalkSyncException(JSON.toJSONString(req),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.USER_CREATE,e.getMessage(),"createUser",JSON.toJSONString(req)); - e.printStackTrace(); + log.error("钉钉createUser异常:{}",e.getErrMsg()); + throw new DingTalkSyncException(JSON.toJSONString(req),e.getErrMsg()); } - return null; } @Override + @DingTalkSyncLog(dingTalkListenerType = DingTalkListenerType.USER_DELETE,dingTalkUrl=BaseConstantUrl.USER_DELETE) public void deleteUser(String ids) { DingTalkClient client = new DefaultDingTalkClient(BaseConstantUrl.USER_DELETE); OapiV2UserDeleteRequest req = new OapiV2UserDeleteRequest(); @@ -95,15 +98,15 @@ public class UserServiceImpl extends BaseService implements UserService { try { response = client.execute(req, getDingTalkToken()); if(response.getErrcode()==0){ - syncDingTalkErrorOperLog(BaseConstantUrl.USER_DELETE,response.getMessage(),"deleteUser",JSON.toJSONString(req)); String requestId = response.getRequestId(); log.info("dingTalk删除用户返回:{}",requestId); }else { - syncDingTalkErrorOperLog(BaseConstantUrl.USER_DELETE,response.getErrmsg(),"deleteUser",JSON.toJSONString(req)); + throw new DingTalkSyncException(JSON.toJSONString(req),response.getErrmsg()); } } catch (ApiException e) { - syncDingTalkErrorOperLog(BaseConstantUrl.USER_DELETE,e.getMessage(),"deleteUser",JSON.toJSONString(req)); + log.error("钉钉deleteUser异常:{}",e.getErrMsg()); e.printStackTrace(); + throw new DingTalkSyncException(JSON.toJSONString(req),e.getErrMsg()); } } } diff --git a/snow-framework/src/main/java/com/snow/framework/manager/factory/AsyncFactory.java b/snow-framework/src/main/java/com/snow/framework/manager/factory/AsyncFactory.java index d0640fe..65d14eb 100644 --- a/snow-framework/src/main/java/com/snow/framework/manager/factory/AsyncFactory.java +++ b/snow-framework/src/main/java/com/snow/framework/manager/factory/AsyncFactory.java @@ -5,6 +5,8 @@ import java.util.TimerTask; import com.snow.framework.shiro.session.OnlineSession; import com.snow.framework.util.LogUtils; import com.snow.framework.util.ShiroUtils; +import com.snow.system.domain.SysDingtalkSyncLog; +import com.snow.system.service.ISysDingtalkSyncLogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.snow.common.constant.Constants; @@ -81,6 +83,25 @@ public class AsyncFactory }; } + /** + * 操作日志记录 + * + * @param operLog 操作日志信息 + * @return 任务task + */ + public static TimerTask recordDingTalkSyncOper(final SysDingtalkSyncLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysDingtalkSyncLogService.class).insertSysDingtalkSyncLog(operLog); + } + }; + } /** * 记录登陆信息 * diff --git a/snow-system/src/main/java/com/snow/system/domain/SysDingtalkSyncLog.java b/snow-system/src/main/java/com/snow/system/domain/SysDingtalkSyncLog.java new file mode 100644 index 0000000..b1aa523 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/domain/SysDingtalkSyncLog.java @@ -0,0 +1,141 @@ +package com.snow.system.domain; + +import java.util.Date; +import com.snow.common.annotation.Excel; +import com.snow.common.core.domain.BaseEntity; +import com.snow.common.enums.DingTalkListenerType; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 钉钉同步日志记录对象 sys_dingtalk_sync_log + * + * @author snow + * @date 2020-11-13 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SysDingtalkSyncLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 日志主键 */ + private Long logId; + + /** 模块标题 */ + @Excel(name = "模块标题") + private String title; + + /** 模块类型(0其它 1用户 2部门 3角色 10回调) */ + @Excel(name = "模块类型", readConverterExp = "0=其它,1=用户,2=部门,3=角色,1=0回调") + private Integer moduleType; + + /** 业务类型(0其它 1新增 2修改 3删除) */ + @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除") + private Integer businessType; + + /** 方法名称 */ + @Excel(name = "方法名称") + private String method; + + /** 请求方式 */ + @Excel(name = "请求方式") + private String requestMethod; + + /** 操作类别(0其它 1自动同步 2手工同步) */ + @Excel(name = "操作类别", readConverterExp = "0=其它,1=自动同步,2=手工同步") + private Integer operatorType; + + /** 操作人员 */ + @Excel(name = "操作人员") + private String operName; + + /** 部门名称 */ + @Excel(name = "部门名称") + private String deptName; + + /** 请求URL */ + @Excel(name = "请求URL") + private String operUrl; + + /** 主机地址 */ + @Excel(name = "主机地址") + private String operIp; + + /** 操作地点 */ + @Excel(name = "操作地点") + private String operLocation; + + /** 请求原参数 */ + @Excel(name = "请求原参数") + private String operSourceParam; + + /** 请求钉钉参数 */ + @Excel(name = "请求钉钉参数") + private String operDingtalkParam; + + /** 返回参数 */ + @Excel(name = "返回参数") + private String jsonResult; + + /** 操作状态(0正常 1异常) */ + @Excel(name = "操作状态", readConverterExp = "0=正常,1=异常") + private Integer status; + + /** 错误消息 */ + @Excel(name = "错误消息") + private String errorMsg; + + /** 操作时间 */ + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date operTime; + + private DingTalkListenerType dingTalkListenerType; + + public SysDingtalkSyncLog(DingTalkListenerType dingTalkListenerType, String method, String operUrl, Integer operatorType, String operSourceParam, String operDingtalkParam, String jsonResult){ + this.dingTalkListenerType=dingTalkListenerType; + this.method= method; + this.operUrl=operUrl; + this.operatorType=operatorType; + this.operSourceParam= operSourceParam; + this.operDingtalkParam=operDingtalkParam; + this.jsonResult= jsonResult; + } + public SysDingtalkSyncLog(DingTalkListenerType dingTalkListenerType,String method,String operUrl,Integer operatorType,String operSourceParam,String operDingtalkParam,String jsonResult, String errorMsg){ + this.dingTalkListenerType=dingTalkListenerType; + this.method= method; + this.operUrl=operUrl; + this.operatorType=operatorType; + this.operSourceParam= operSourceParam; + this.operDingtalkParam=operDingtalkParam; + this.jsonResult= jsonResult; + this.errorMsg= errorMsg; + } + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("logId", getLogId()) + .append("title", getTitle()) + .append("moduleType", getModuleType()) + .append("businessType", getBusinessType()) + .append("method", getMethod()) + .append("requestMethod", getRequestMethod()) + .append("operatorType", getOperatorType()) + .append("operName", getOperName()) + .append("deptName", getDeptName()) + .append("operUrl", getOperUrl()) + .append("operIp", getOperIp()) + .append("operLocation", getOperLocation()) + .append("operSourceParam", getOperSourceParam()) + .append("operDingtalkParam", getOperDingtalkParam()) + .append("jsonResult", getJsonResult()) + .append("status", getStatus()) + .append("errorMsg", getErrorMsg()) + .append("operTime", getOperTime()) + .toString(); + } +} diff --git a/snow-system/src/main/java/com/snow/system/mapper/SysDingtalkSyncLogMapper.java b/snow-system/src/main/java/com/snow/system/mapper/SysDingtalkSyncLogMapper.java new file mode 100644 index 0000000..34ee9da --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/mapper/SysDingtalkSyncLogMapper.java @@ -0,0 +1,61 @@ +package com.snow.system.mapper; + +import java.util.List; +import com.snow.system.domain.SysDingtalkSyncLog; + +/** + * 钉钉同步日志记录Mapper接口 + * + * @author snow + * @date 2020-11-13 + */ +public interface SysDingtalkSyncLogMapper +{ + /** + * 查询钉钉同步日志记录 + * + * @param logId 钉钉同步日志记录ID + * @return 钉钉同步日志记录 + */ + public SysDingtalkSyncLog selectSysDingtalkSyncLogById(Long logId); + + /** + * 查询钉钉同步日志记录列表 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 钉钉同步日志记录集合 + */ + public List selectSysDingtalkSyncLogList(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 新增钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + public int insertSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 修改钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + public int updateSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 删除钉钉同步日志记录 + * + * @param logId 钉钉同步日志记录ID + * @return 结果 + */ + public int deleteSysDingtalkSyncLogById(Long logId); + + /** + * 批量删除钉钉同步日志记录 + * + * @param logIds 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingtalkSyncLogByIds(String[] logIds); +} diff --git a/snow-system/src/main/java/com/snow/system/service/ISysDingtalkSyncLogService.java b/snow-system/src/main/java/com/snow/system/service/ISysDingtalkSyncLogService.java new file mode 100644 index 0000000..134a12c --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/ISysDingtalkSyncLogService.java @@ -0,0 +1,61 @@ +package com.snow.system.service; + +import java.util.List; +import com.snow.system.domain.SysDingtalkSyncLog; + +/** + * 钉钉同步日志记录Service接口 + * + * @author snow + * @date 2020-11-13 + */ +public interface ISysDingtalkSyncLogService +{ + /** + * 查询钉钉同步日志记录 + * + * @param logId 钉钉同步日志记录ID + * @return 钉钉同步日志记录 + */ + public SysDingtalkSyncLog selectSysDingtalkSyncLogById(Long logId); + + /** + * 查询钉钉同步日志记录列表 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 钉钉同步日志记录集合 + */ + public List selectSysDingtalkSyncLogList(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 新增钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + public int insertSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 修改钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + public int updateSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog); + + /** + * 批量删除钉钉同步日志记录 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteSysDingtalkSyncLogByIds(String ids); + + /** + * 删除钉钉同步日志记录信息 + * + * @param logId 钉钉同步日志记录ID + * @return 结果 + */ + public int deleteSysDingtalkSyncLogById(Long logId); +} diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysDingtalkSyncLogServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysDingtalkSyncLogServiceImpl.java new file mode 100644 index 0000000..7587af8 --- /dev/null +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysDingtalkSyncLogServiceImpl.java @@ -0,0 +1,97 @@ +package com.snow.system.service.impl; + +import java.util.Date; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.snow.system.mapper.SysDingtalkSyncLogMapper; +import com.snow.system.domain.SysDingtalkSyncLog; +import com.snow.system.service.ISysDingtalkSyncLogService; +import com.snow.common.core.text.Convert; + +/** + * 钉钉同步日志记录Service业务层处理 + * + * @author snow + * @date 2020-11-13 + */ +@Service +public class SysDingtalkSyncLogServiceImpl implements ISysDingtalkSyncLogService +{ + @Autowired + private SysDingtalkSyncLogMapper sysDingtalkSyncLogMapper; + + /** + * 查询钉钉同步日志记录 + * + * @param logId 钉钉同步日志记录ID + * @return 钉钉同步日志记录 + */ + @Override + public SysDingtalkSyncLog selectSysDingtalkSyncLogById(Long logId) + { + return sysDingtalkSyncLogMapper.selectSysDingtalkSyncLogById(logId); + } + + /** + * 查询钉钉同步日志记录列表 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 钉钉同步日志记录 + */ + @Override + public List selectSysDingtalkSyncLogList(SysDingtalkSyncLog sysDingtalkSyncLog) + { + return sysDingtalkSyncLogMapper.selectSysDingtalkSyncLogList(sysDingtalkSyncLog); + } + + /** + * 新增钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + @Override + public int insertSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog) + { + + sysDingtalkSyncLog.setOperTime(new Date()); + return sysDingtalkSyncLogMapper.insertSysDingtalkSyncLog(sysDingtalkSyncLog); + } + + /** + * 修改钉钉同步日志记录 + * + * @param sysDingtalkSyncLog 钉钉同步日志记录 + * @return 结果 + */ + @Override + public int updateSysDingtalkSyncLog(SysDingtalkSyncLog sysDingtalkSyncLog) + { + return sysDingtalkSyncLogMapper.updateSysDingtalkSyncLog(sysDingtalkSyncLog); + } + + /** + * 删除钉钉同步日志记录对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteSysDingtalkSyncLogByIds(String ids) + { + return sysDingtalkSyncLogMapper.deleteSysDingtalkSyncLogByIds(Convert.toStrArray(ids)); + } + + /** + * 删除钉钉同步日志记录信息 + * + * @param logId 钉钉同步日志记录ID + * @return 结果 + */ + @Override + public int deleteSysDingtalkSyncLogById(Long logId) + { + return sysDingtalkSyncLogMapper.deleteSysDingtalkSyncLogById(logId); + } +} diff --git a/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java b/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java index ca676b9..6bea4d3 100644 --- a/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java +++ b/snow-system/src/main/java/com/snow/system/service/impl/SysUserServiceImpl.java @@ -213,7 +213,7 @@ public class SysUserServiceImpl implements ISysUserService // 新增用户与角色管理 insertUserRole(user.getUserId(), user.getRoleIds()); //同步用户数据 - SyncEvent syncEvent = new SyncEvent(user, DingTalkListenerType.USER_CREATED); + SyncEvent syncEvent = new SyncEvent(user, DingTalkListenerType.USER_CREATE); applicationContext.publishEvent(syncEvent); return rows; } diff --git a/snow-system/src/main/resources/mapper/system/SysDingtalkSyncLogMapper.xml b/snow-system/src/main/resources/mapper/system/SysDingtalkSyncLogMapper.xml new file mode 100644 index 0000000..54c6129 --- /dev/null +++ b/snow-system/src/main/resources/mapper/system/SysDingtalkSyncLogMapper.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select log_id, title, module_type, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_source_param, oper_dingtalk_param, json_result, status, error_msg, oper_time from sys_dingtalk_sync_log + + + + + + + + insert into sys_dingtalk_sync_log + + title, + module_type, + business_type, + method, + request_method, + operator_type, + oper_name, + dept_name, + oper_url, + oper_ip, + oper_location, + oper_source_param, + oper_dingtalk_param, + json_result, + status, + error_msg, + oper_time, + + + #{title}, + #{moduleType}, + #{businessType}, + #{method}, + #{requestMethod}, + #{operatorType}, + #{operName}, + #{deptName}, + #{operUrl}, + #{operIp}, + #{operLocation}, + #{operSourceParam}, + #{operDingtalkParam}, + #{jsonResult}, + #{status}, + #{errorMsg}, + #{operTime}, + + + + + update sys_dingtalk_sync_log + + title = #{title}, + module_type = #{moduleType}, + business_type = #{businessType}, + method = #{method}, + request_method = #{requestMethod}, + operator_type = #{operatorType}, + oper_name = #{operName}, + dept_name = #{deptName}, + oper_url = #{operUrl}, + oper_ip = #{operIp}, + oper_location = #{operLocation}, + oper_source_param = #{operSourceParam}, + oper_dingtalk_param = #{operDingtalkParam}, + json_result = #{jsonResult}, + status = #{status}, + error_msg = #{errorMsg}, + oper_time = #{operTime}, + + where log_id = #{logId} + + + + delete from sys_dingtalk_sync_log where log_id = #{logId} + + + + delete from sys_dingtalk_sync_log where log_id in + + #{logId} + + + + \ No newline at end of file