From a391d13fae3f0489b40c1218597a88edf2f768c1 Mon Sep 17 00:00:00 2001 From: zxc <1272811460@qq.com> Date: Mon, 8 Aug 2022 14:12:06 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=9A=82=E6=8F=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/epmet/dto/form/ReportEditFormDTO.java | 33 +++++++++++++++++++ .../IcCustomerReportController.java | 29 ++++++++++------ .../service/IcCustomerReportService.java | 11 +++++++ .../impl/IcCustomerReportServiceImpl.java | 14 ++++++++ 4 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/ReportEditFormDTO.java diff --git a/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/ReportEditFormDTO.java b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/ReportEditFormDTO.java new file mode 100644 index 0000000000..d1e72f7d15 --- /dev/null +++ b/epmet-module/oper-customize/oper-customize-client/src/main/java/com/epmet/dto/form/ReportEditFormDTO.java @@ -0,0 +1,33 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * @Author zxc + * @DateTime 2022/8/8 14:04 + * @DESC + */ +@Data +public class ReportEditFormDTO implements Serializable { + + private static final long serialVersionUID = -2157859106926125470L; + + public interface ReportEditForm{} + + /** + * 操作类型,批量操作:add;单个编辑:edit + */ + @NotBlank(message = "type不能为空", groups = ReportEditForm.class) + private String type; + + @NotBlank(message = "reportId不能为空", groups = ReportEditForm.class) + private String reportId; + + private List customerIds; + + private List categoryKeys; +} diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcCustomerReportController.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcCustomerReportController.java index bd71da40d4..922bf28af4 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcCustomerReportController.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/controller/IcCustomerReportController.java @@ -1,25 +1,21 @@ package com.epmet.controller; import com.epmet.commons.tools.annotation.LoginUser; -import com.epmet.commons.tools.aop.NoRepeatSubmit; -import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; -import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; -import com.epmet.commons.tools.validator.group.AddGroup; -import com.epmet.commons.tools.validator.group.DefaultGroup; -import com.epmet.commons.tools.validator.group.UpdateGroup; -import com.epmet.dto.IcCustomerReportDTO; -import com.epmet.dto.result.ReportResultDTO; import com.epmet.dto.form.PreviewReportFormDTO; +import com.epmet.dto.form.ReportEditFormDTO; import com.epmet.dto.result.PreviewReportResDTO; +import com.epmet.dto.result.ReportResultDTO; import com.epmet.service.IcCustomerReportService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import java.util.List; -import java.util.Map; /** @@ -61,4 +57,17 @@ public class IcCustomerReportController { ValidatorUtils.validateEntity(formDTO, PreviewReportFormDTO.AddUserInternalGroup.class); return new Result().ok(icCustomerReportService.previewReport(formDTO)); } + /** + * Desc: 报表编辑 + * @param formDTO + * @author zxc + * @date 2022/8/8 14:09 + */ + @PostMapping("edit") + public Result reportEdit(@RequestBody ReportEditFormDTO formDTO){ + ValidatorUtils.validateEntity(formDTO, ReportEditFormDTO.ReportEditForm.class); + icCustomerReportService.reportEdit(formDTO); + return new Result(); + } + } diff --git a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcCustomerReportService.java b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcCustomerReportService.java index fb1fb27de5..372dfa5bed 100644 --- a/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcCustomerReportService.java +++ b/epmet-module/oper-customize/oper-customize-server/src/main/java/com/epmet/service/IcCustomerReportService.java @@ -3,6 +3,9 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.dto.form.PreviewReportFormDTO; import com.epmet.dto.result.PreviewReportResDTO; +import com.epmet.commons.tools.page.PageData; +import com.epmet.dto.IcCustomerReportDTO; +import com.epmet.dto.form.ReportEditFormDTO; import com.epmet.dto.result.ReportResultDTO; import com.epmet.entity.IcCustomerReportEntity; @@ -30,4 +33,12 @@ public interface IcCustomerReportService extends BaseService Date: Mon, 8 Aug 2022 14:28:42 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E3=80=90=E6=8A=A5=E8=A1=A8=E3=80=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0AOP=E6=8B=A6=E6=88=AA=E5=99=A8=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E5=AF=B9=E5=BA=94=E7=9A=84=E6=B3=A8=E8=A7=A3=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=8B=A6=E6=88=AAurl=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E7=BB=99=E5=85=B7=E6=9C=89@RequestBody=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E7=9A=84=E5=85=A5=E5=8F=82=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/annotation/ReportRequest.java | 13 ++++ .../tools/aspect/ReportRequestAspect.java | 74 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/ReportRequest.java create mode 100644 epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/ReportRequest.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/ReportRequest.java new file mode 100644 index 0000000000..41a9379fe0 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/annotation/ReportRequest.java @@ -0,0 +1,13 @@ +package com.epmet.commons.tools.annotation; + +import java.lang.annotation.*; + +/** + * 标记一个接口,它会被报表服务所调用 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface ReportRequest { + +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java new file mode 100644 index 0000000000..81dc4facf1 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java @@ -0,0 +1,74 @@ +package com.epmet.commons.tools.aspect; + +import cn.hutool.core.bean.BeanUtil; +import com.epmet.commons.tools.redis.RedisUtils; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.lang.reflect.Parameter; +import java.util.Map; + +/** + * 需要被报表服务请求的api,需要加上这个注解 + * 1.该注解会取url中固定的key,去redis获取参数,给入参dto复制 + */ +@Aspect +@Component +@Order(20) +public class ReportRequestAspect { + + /** + * 从redis中取参数用 + */ + public static final String REPORT_REDIS_KEY = "paramKey"; + + @Autowired + private RedisUtils redisUtils; + + @Before("@annotation(com.epmet.commons.tools.annotation.ReportRequest)") + public void before(JoinPoint point) { + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes sra = (ServletRequestAttributes) ra; + String paramKey = sra.getRequest().getParameter(REPORT_REDIS_KEY); + if (StringUtils.isBlank(paramKey)) { + // 没有携带key参数,直接跳过 + return; + } + + Map cachedParams = redisUtils.hGetAll(paramKey); + + // 使用方法签名获取出参数class列表 + Object[] args = point.getArgs(); + MethodSignature signature = (MethodSignature) point.getSignature(); + Parameter[] parameters = signature.getMethod().getParameters(); + fillArgsToRequestBody(args, cachedParams, parameters); + } + + /** + * 将redis中取出的参数,赋值到指定的入参dto上 + * @param args + * @param storedParams + */ + private void fillArgsToRequestBody(Object[] args, Map storedParams, Parameter[] parameters) { + for (int i = 0; i < args.length; i++) { + Object arg = args[i]; + Class argClazz = arg.getClass(); + RequestBody requestBodyAnno = parameters[i].getAnnotation(RequestBody.class); + if (arg != null && requestBodyAnno != null) { + Object argBean = BeanUtil.mapToBean(storedParams, arg.getClass(), true); + BeanUtil.copyProperties(argBean, arg); + return; + } + } + } +} From ac7fc2032b0e526e3d6061008463fc092c5d11d5 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Mon, 8 Aug 2022 14:36:20 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E3=80=90=E6=8A=A5=E8=A1=A8=E3=80=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0AOP=E6=8B=A6=E6=88=AA=E5=99=A8=EF=BC=8C?= =?UTF-8?q?=E5=92=8C=E5=AF=B9=E5=BA=94=E7=9A=84=E6=B3=A8=E8=A7=A3=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=8B=A6=E6=88=AAurl=E5=8F=82=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E7=BB=99=E5=85=B7=E6=9C=89@RequestBody=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E7=9A=84=E5=85=A5=E5=8F=82=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/commons/tools/aspect/ReportRequestAspect.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java index 81dc4facf1..2c7dc898d9 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/aspect/ReportRequestAspect.java @@ -1,7 +1,10 @@ package com.epmet.commons.tools.aspect; import cn.hutool.core.bean.BeanUtil; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.redis.RedisUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; @@ -25,6 +28,7 @@ import java.util.Map; @Aspect @Component @Order(20) +@Slf4j public class ReportRequestAspect { /** @@ -46,6 +50,11 @@ public class ReportRequestAspect { } Map cachedParams = redisUtils.hGetAll(paramKey); + if (cachedParams == null || cachedParams.size() == 0) { + log.warn("【报表服务】根据paramKey:{}未获取到有效的参数缓存。", paramKey); + throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "参数失效", "参数失效"); + // redis中没有此参数 + } // 使用方法签名获取出参数class列表 Object[] args = point.getArgs();