diff --git a/src/main/java/com/pms/ocp/common/aspectj/OperLog.java b/src/main/java/com/pms/ocp/common/aspectj/OperLog.java new file mode 100644 index 0000000000000000000000000000000000000000..fee4561dbafb30ea8cf4fba4e1e7fdcd38d4bf83 --- /dev/null +++ b/src/main/java/com/pms/ocp/common/aspectj/OperLog.java @@ -0,0 +1,30 @@ +package com.pms.ocp.common.aspectj; + +import java.lang.annotation.*; + +/** + * @Auther: wangjian + * @Date: 2022/3/8 17:17 + * @Description: + */ + +@Target(ElementType.METHOD) //target用于标识此注解能标记在方法上还是类上 +@Retention(RetentionPolicy.RUNTIME) //retention用于决定此注解的生命周期 +@Documented +public @interface OperLog { + /** + * 日志内容 + */ + String value() default ""; + + /** + * 日志类型(1登录日志,2操作日志) + */ + int auditType() default 2; + + /** + * 操作日志类型 1查询2添加3修改4删除 + */ + int operStatus() default 0; +} + diff --git a/src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java b/src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..2fab759f31de1b55a2ff96a75d80ae26e164de98 --- /dev/null +++ b/src/main/java/com/pms/ocp/common/aspectj/OperLogAspect.java @@ -0,0 +1,183 @@ +package com.pms.ocp.common.aspectj; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.PropertyFilter; +import com.pms.ocp.model.entity.ModelNote; +import com.pms.ocp.service.ModelNoteService; +import com.sun.xml.internal.bind.v2.TODO; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.LocalVariableTableParameterNameDiscoverer; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.time.LocalDateTime; + +/** + * @Auther: wangjian + * @Date: 2022/3/8 17:21 + * @Description: + */ + +@Aspect +@Component +public class OperLogAspect { + + @Autowired + private ModelNoteService modelNoteService; + + private static Logger logger = LoggerFactory.getLogger(OperLogAspect.class); + + @Pointcut("@annotation(com.pms.ocp.common.aspectj.OperLog)") + public void logPointCut() { + } + + @Around("logPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + long beginTime = System.currentTimeMillis(); + System.out.println("日志"); + //执行方法 + Object result = point.proceed(); + //执行时长 + long time = System.currentTimeMillis() - beginTime; + + //保存日志 + saveSysLog(point, time, result); + + return result; + } + + private void saveSysLog(ProceedingJoinPoint point, long time, Object obj) { + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + ModelNote modelNote = new ModelNote(); + OperLog operLog = method.getAnnotation(OperLog.class); + if (operLog != null) { + String content = operLog.value(); + modelNote.setAuditType(operLog.auditType()); + modelNote.setAuditMessageJson(content); + } + //请求的方法名 +// String className = point.getTarget().getClass().getName(); + String methodName = signature.getName(); +// dto.setMethod(className + "." + methodName + "()"); + //设置操作类型 + if (modelNote.getAuditType() == 3) { + modelNote.setOperStatus(getOperateType(methodName, operLog.operStatus())); + } + //获取request + HttpServletRequest request = getHttpServletRequest(); + //请求的参数 + modelNote.setAuditMessageJson(getRequestParams(request, point)); +// //设置ip地址 +// dto.setIp(getIpAddr(request)); + //获取用户登录信息 +// TODO +// TUser user = (TUser) SecurityUtils.getSubject().getPrincipal(); +// if (user != null) { +// modelNote.setUserid(user.getUserName()); +// modelNote.setUsername(user.getPassWord()); +// } +// modelNote.setCostTime(time); + modelNote.setAuditCtime(LocalDateTime.now()); + + modelNoteService.createModelNote(modelNote); + } + + private int getOperateType(String methodName, int operateType) { + if (operateType >= 0) { + return operateType; + } + if (methodName.startsWith("create")) { + return 1; + } + if (methodName.startsWith("update")) { + return 2; + } + return 2; + } + + private HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + private String getRequestParams(HttpServletRequest request, JoinPoint joinPoint) { + String httpMethod = request.getMethod(); + String param = ""; + if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) || "PATCH".equals(httpMethod)) { + Object[] paramArray = joinPoint.getArgs(); + Object[] arguments = new Object[paramArray.length]; + for (int i = 0; i < paramArray.length; i++) { + if (paramArray[i] instanceof BindingResult || paramArray[i] instanceof ServletRequest || paramArray[i] instanceof ServletResponse || paramArray[i] instanceof MultipartFile) { + continue; + } + arguments[i] = paramArray[i]; + } + PropertyFilter propertyFilter = new PropertyFilter() { + @Override + public boolean apply(Object object, String name, Object value) { + if (value != null && value.toString().length() > 500) { + return false; + } + return true; + } + }; + param = JSONObject.toJSONString(arguments, propertyFilter); + } else { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + //请求的方法参数值 + Object[] args = joinPoint.getArgs(); + //请求的方法名称 + LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer(); + String[] parameterNames = u.getParameterNames(method); + if (args != null && parameterNames != null) { + for (int i = 0; i < args.length; i++) { + param += " " + parameterNames[i] + ": " + args[i]; + } + } + } + return param; + } + + public String getIpAddr(HttpServletRequest request) { + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X-FORWARDED-FOR"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + logger.error("IP error", e); + } + return ip; + } +} + diff --git a/src/main/java/com/pms/ocp/common/config/SwaggerConfig.java b/src/main/java/com/pms/ocp/common/config/SwaggerConfig.java index bd9382624a51d8feb1a237bf24ca086810341f95..b47e7a5da44ef3fd67c5a543b3a2c87eb3278b3e 100644 --- a/src/main/java/com/pms/ocp/common/config/SwaggerConfig.java +++ b/src/main/java/com/pms/ocp/common/config/SwaggerConfig.java @@ -57,9 +57,9 @@ public class SwaggerConfig { // 用ApiInfoBuilder进行定制 return new ApiInfoBuilder() // 设置标题 - .title("运营管控架构平台_接口文档") + .title("运营管控平台_接口文档") // 描述 - .description("运营管控架构平台_接口文档") + .description("关于模型库、应用库、服务库各管理接口文档") // 作者信息 .contact(new Contact("", "", "")) // 版本 diff --git a/src/main/java/com/pms/ocp/controller/ModelBaseController.java b/src/main/java/com/pms/ocp/controller/ModelBaseController.java index 0c33a09f1334916dcc104e15d5653f8eaf221ba7..5c67a401ebb2f53ca0090f648caab4b320b9d724 100644 --- a/src/main/java/com/pms/ocp/controller/ModelBaseController.java +++ b/src/main/java/com/pms/ocp/controller/ModelBaseController.java @@ -2,9 +2,11 @@ package com.pms.ocp.controller; import com.pms.ocp.common.constants.CodeEnum; import com.pms.ocp.model.entity.Model; +import com.pms.ocp.model.entity.ModelNote; import com.pms.ocp.model.entity.ModelType; import com.pms.ocp.model.vo.ResponseVO; import com.pms.ocp.service.ModelGroupService; +import com.pms.ocp.service.ModelNoteService; import com.pms.ocp.service.ModelPropertyService; import com.pms.ocp.service.ModelService; import io.swagger.annotations.Api; @@ -40,6 +42,9 @@ public class ModelBaseController { @Autowired private ModelPropertyService modelPropertyService; + @Autowired + private ModelNoteService modelNoteService; + /** * 模型分类-查询 * @@ -190,8 +195,11 @@ public class ModelBaseController { */ @ApiOperation("模型事记-查询") @GetMapping("/get/model/note") - public ResponseVO getModelNote() { - return ResponseVO.ok(); + public ResponseVO getModelNote(@RequestParam(value = "modelCode") String modelCode) { + + List modelNoteList = modelNoteService.getModelNoteList(modelCode); + + return ResponseVO.ok(modelNoteList); } /** diff --git a/src/main/java/com/pms/ocp/mapper/ModelNoteMapper.java b/src/main/java/com/pms/ocp/mapper/ModelNoteMapper.java index e58a485bdebbcbb4cdc0788417769497f81363c6..b0d7d9d18342abdc58c1ee6821c2c7b770a3adb5 100644 --- a/src/main/java/com/pms/ocp/mapper/ModelNoteMapper.java +++ b/src/main/java/com/pms/ocp/mapper/ModelNoteMapper.java @@ -2,6 +2,7 @@ package com.pms.ocp.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.pms.ocp.model.entity.Model; +import com.pms.ocp.model.entity.ModelNote; import org.apache.ibatis.annotations.Mapper; /** @@ -11,5 +12,5 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper -public interface ModelNoteMapper extends BaseMapper { +public interface ModelNoteMapper extends BaseMapper { } diff --git a/src/main/java/com/pms/ocp/model/entity/ModelNote.java b/src/main/java/com/pms/ocp/model/entity/ModelNote.java index 289d008973af357498f996a1a92d52f5b392a724..f1233f023811742f993d5d4e951d66b56e59d8a7 100644 --- a/src/main/java/com/pms/ocp/model/entity/ModelNote.java +++ b/src/main/java/com/pms/ocp/model/entity/ModelNote.java @@ -1,9 +1,112 @@ package com.pms.ocp.model.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + /** * @Auther: wangjian * @Date: 2022/2/22 16:52 - * @Description:模型事记对象 + * @Description:模型事记记录对象 */ + +@Data +@TableName("ocp_model_audit") public class ModelNote { + + @TableId(value = "obj_id", type = IdType.ASSIGN_ID) + private String objId; + + /** + * 模型代码 + */ + private int modelCode; + + /** + * 属性代码 + */ + private int propCode; + + + /** + * 事记类型 0:人工操作,1:流程管控,3:总部下发 + */ + private int auditType; + + /** + * 模型异动详情 + */ + private String auditMessageJson; + + /** + * 异动类型 0:新增,1:迭代 + */ + private int operStatus; + + /** + * 异动申请人id + */ + private String applyUserId; + + /** + * 异动申请人姓名 + */ + private String applyUserName; + + /** + * 异动时间 + */ + private long applyTime; + + /** + * 版本 + */ + private String applyVersion; + + /** + * 新增时间 + */ + private LocalDateTime auditCtime; + + /** + * 异动公司编号 + */ + private String auditCompanyCode; + + /** + * 提交人id + */ + private String auditUserId; + + /** + * 提交人姓名 + */ + private String auditUserName; + + /** + * 修改时间 + */ + private LocalDateTime auditMtime; + } + +// +// COMMENT ON COLUMN public.ocp_model_audit.obj_id IS '主键是'; +// COMMENT ON COLUMN public.ocp_model_audit.model_code IS '模型代码是'; +// COMMENT ON COLUMN public.ocp_model_audit.prop_code IS '属性代码'; +// COMMENT ON COLUMN public.ocp_model_audit.oper_status IS '异动类型0:新增,1:迭代'; +// COMMENT ON COLUMN public.ocp_model_audit.oper_target IS '操作对象0:表,1:属性'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_type IS '事记类型0:人工操作,1:流程管控,3:总部下发'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_message_json IS '模型异动详情'; +// COMMENT ON COLUMN public.ocp_model_audit.apply_user_id IS '异动申请人id'; +// COMMENT ON COLUMN public.ocp_model_audit.apply_user_name IS '异动申请人'; +// COMMENT ON COLUMN public.ocp_model_audit.apply_time IS '异动时间'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_ctime IS '申请时间'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_mtime IS '修改时间'; +// COMMENT ON COLUMN public.ocp_model_audit.apply_version IS '版本'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_company_code IS '异动公司code'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_user_id IS '提交人id'; +// COMMENT ON COLUMN public.ocp_model_audit.audit_user_name IS '提交人姓名'; diff --git a/src/main/java/com/pms/ocp/service/ModelNoteService.java b/src/main/java/com/pms/ocp/service/ModelNoteService.java index f473d0b530eddb8602c4e67362f77971dbee22e4..a83e0ad92567db37ef95b45cb5cda88b906133cd 100644 --- a/src/main/java/com/pms/ocp/service/ModelNoteService.java +++ b/src/main/java/com/pms/ocp/service/ModelNoteService.java @@ -9,6 +9,7 @@ import java.util.List; * @Date: 2022/2/22 16:08 * @Description:模型事记业务层接口 */ + public interface ModelNoteService { /** @@ -41,7 +42,7 @@ public interface ModelNoteService { * @param * @return */ - List getModelNoteList(); + List getModelNoteList(String modelCode); /** * 获取模型事记列表 diff --git a/src/main/java/com/pms/ocp/service/ModelPropertyService.java b/src/main/java/com/pms/ocp/service/ModelPropertyService.java index 7f49f8110208a1ff93861a2c587edbaef5a91557..df9e737230d9fbe29f2b02a81d457ada6a36e0c5 100644 --- a/src/main/java/com/pms/ocp/service/ModelPropertyService.java +++ b/src/main/java/com/pms/ocp/service/ModelPropertyService.java @@ -1,7 +1,6 @@ package com.pms.ocp.service; import com.pms.ocp.model.entity.ModelProperty; -import com.pms.ocp.model.entity.ModelType; import java.util.List; @@ -47,7 +46,7 @@ public interface ModelPropertyService { /** * 获取模型属性列表 * - * @param modelId + * @param * @return */ List getModelProperty(); diff --git a/src/main/java/com/pms/ocp/service/impl/ModelNoteServiceImpl.java b/src/main/java/com/pms/ocp/service/impl/ModelNoteServiceImpl.java index 15992913e444a934bd7b6a9d79e2ab1b28039108..bbb542de86f922c7914a679d2c9fb417d8489a32 100644 --- a/src/main/java/com/pms/ocp/service/impl/ModelNoteServiceImpl.java +++ b/src/main/java/com/pms/ocp/service/impl/ModelNoteServiceImpl.java @@ -1,7 +1,10 @@ package com.pms.ocp.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.pms.ocp.mapper.ModelNoteMapper; import com.pms.ocp.model.entity.ModelNote; import com.pms.ocp.service.ModelNoteService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -14,9 +17,13 @@ import java.util.List; @Service public class ModelNoteServiceImpl implements ModelNoteService { + + @Autowired + private ModelNoteMapper modelNoteMapper; + @Override public Integer createModelNote(ModelNote modelNote) { - return null; + return modelNoteMapper.insert(modelNote); } @Override @@ -30,8 +37,11 @@ public class ModelNoteServiceImpl implements ModelNoteService { } @Override - public List getModelNoteList() { - return null; + public List getModelNoteList(String modelCode) { + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(ModelNote::getModelCode, modelCode); + return modelNoteMapper.selectList(wrapper); } @Override diff --git a/src/main/java/com/pms/ocp/service/impl/ModelPropertyServiceImpl.java b/src/main/java/com/pms/ocp/service/impl/ModelPropertyServiceImpl.java index 174e0092728d0ce42009b1feb0e880e9a73b55f0..1b85388bfb757bc01a88ee793c6d5397749555ee 100644 --- a/src/main/java/com/pms/ocp/service/impl/ModelPropertyServiceImpl.java +++ b/src/main/java/com/pms/ocp/service/impl/ModelPropertyServiceImpl.java @@ -3,7 +3,6 @@ package com.pms.ocp.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.pms.ocp.model.entity.ModelProperty; import com.pms.ocp.service.ModelPropertyService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -41,6 +40,7 @@ public class ModelPropertyServiceImpl implements ModelPropertyService { /** * TODO + * * @return */ @Override diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 9880455cc14ca90ddec70d661b3667b478092fd2..87a111b11605bcdd5dc29363cb2bf109fe5a9c74 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -4,7 +4,7 @@ spring: username: ocp_user password: spaceIN511 type: com.zaxxer.hikari.HikariDataSource - jdbc-url: jdbc:postgresql://172.37.41.175:5432/pms3?currentSchema=operating_platform&stringtype=unspecified&TimeZone=Asia/Shanghai&useAffectedRows=true + url: jdbc:postgresql://172.37.41.175:5432/pms3?currentSchema=operating_platform&stringtype=unspecified&TimeZone=Asia/Shanghai&useAffectedRows=true knife4j: enable: true diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 82195aca2f50051deccd9308e614bea663072b46..7809dcba1700fa2789dccdfd1029112512af641f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -15,8 +15,10 @@ knife4j: mybatis-plus: mapper-locations: classpath:/mapper/*.xml configuration: -# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl + # log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 是否开启自动驼峰命名规则 + map-underscore-to-camel-case: true logging: level: diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 88cec2ee0629df9d2d37469741e0d298bea5063c..164fc25ce055c78b27132777effccee4d28ba0f4 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -51,7 +51,8 @@ - + +