diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/config/JacksonConfiguration.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/config/JacksonConfiguration.java index 899ef0c..212d81f 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/config/JacksonConfiguration.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/config/JacksonConfiguration.java @@ -17,9 +17,9 @@ package com.chushang.common.core.config; import cn.hutool.core.date.DatePattern; +import com.chushang.common.core.jackson.JavaTimeModule; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JacksonUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JacksonUtils.java new file mode 100644 index 0000000..40a714b --- /dev/null +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JacksonUtils.java @@ -0,0 +1,49 @@ +package com.chushang.common.core.jackson; + +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; + +@Slf4j +public class JacksonUtils { + + private static final ObjectMapper mapper = new ObjectMapper(); + + @SneakyThrows + public static String toJSONString(Object data) { + if (null == data) { + return ""; + } + return mapper.writeValueAsString(data); + } + + @SneakyThrows + public static T json2Bean(String jsonData, Class beanType) { + if (null == jsonData) { + return null; + } + return mapper.readValue(jsonData, beanType); + } + + @SneakyThrows + public static List json2List(String jsonData, Class beanType) { + if (null == jsonData) { + return List.of(); + } + JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, beanType); + return mapper.readValue(jsonData, javaType); + } + + @SneakyThrows + public static Map json2Map(String jsonData, Class keyType, Class valueType) { + if (null == jsonData) { + return Map.of(); + } + JavaType javaType = mapper.getTypeFactory().constructMapType(Map.class, keyType, valueType); + return mapper.readValue(jsonData, javaType); + } +} diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JavaTimeModule.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JavaTimeModule.java new file mode 100644 index 0000000..d570fc8 --- /dev/null +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/jackson/JavaTimeModule.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.chushang.common.core.jackson; + +import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.datatype.jsr310.PackageVersion; +import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +public class JavaTimeModule extends SimpleModule { + + public JavaTimeModule() { + super(PackageVersion.VERSION); + + // ======================= 时间序列化规则 =============================== + // yyyy-MM-dd HH:mm:ss + this.addSerializer(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + // yyyy-MM-dd + this.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE)); + // HH:mm:ss + this.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME)); + // Instant 类型序列化 + this.addSerializer(Instant.class, InstantSerializer.INSTANCE); + + // ======================= 时间反序列化规则 ============================== + // yyyy-MM-dd HH:mm:ss + this.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + // yyyy-MM-dd + this.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE)); + // HH:mm:ss + this.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME)); + // Instant 反序列化 + this.addDeserializer(Instant.class, InstantDeserializer.INSTANT); + } + +} diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeNode.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeNode.java index 08b897e..7663b82 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeNode.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeNode.java @@ -24,6 +24,14 @@ public class TreeNode implements Serializable { * 上级ID */ private Long parentId; + /** + * 父级名称 + */ + private String parentName; + /** + * 用于获取 name + */ + private String name; /** * 子节点列表 diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeUtils.java index 38479ff..3a96022 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeUtils.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/TreeUtils.java @@ -53,6 +53,7 @@ public class TreeUtils { for (T node : nodeMap.values()) { T parent = nodeMap.get(node.getParentId()); if (parent != null && !(node.getId().equals(parent.getId()))) { + node.setParentName(parent.getName()); parent.getChildren().add(node); continue; } diff --git a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/advice/IdempotentAdvice.java b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/advice/IdempotentAdvice.java deleted file mode 100644 index eb0d268..0000000 --- a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/advice/IdempotentAdvice.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.chushang.redis.advice; - -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.servlet.ServletUtil; -import com.alibaba.fastjson2.JSON; -import com.chushang.common.core.util.IPUtils; -import com.chushang.redis.annotation.AutoIdempotent; -import com.chushang.redis.cache.utils.RedisUtils; -import lombok.RequiredArgsConstructor; -import org.springframework.core.MethodParameter; -import org.springframework.http.HttpInputMessage; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter; - -import javax.servlet.http.HttpServletRequest; -import java.lang.reflect.Type; -import java.time.Duration; - -@RestControllerAdvice -@SuppressWarnings("all") -@RequiredArgsConstructor -public class IdempotentAdvice extends RequestBodyAdviceAdapter { - @Override - public boolean supports(MethodParameter methodParameter, Type targetType, Class> converterType) { - return methodParameter.hasMethodAnnotation(AutoIdempotent.class); - } - - @Override - public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) { - String value = JSON.toJSONString(body); - if (StrUtil.isEmpty(value)) { - return body; - } - HttpServletRequest request = IPUtils.getRequest(); - String key = StrUtil.format("{}_{}", ServletUtil.getClientIP(request), request.getRequestURI()); - AutoIdempotent idempotent = parameter.getMethodAnnotation(AutoIdempotent.class); - try { - Assert.isTrue(RedisUtils.tryLock(key, idempotent.expireTime()), "请勿重复提交"); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - return body; - } -} diff --git a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/annotation/AutoIdempotent.java b/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/annotation/AutoIdempotent.java deleted file mode 100644 index a2817b8..0000000 --- a/chushang-common/chushang-common-redis/src/main/java/com/chushang/redis/annotation/AutoIdempotent.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.chushang.redis.annotation; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * 幂等性注解 - */ -@Target({ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -public @interface AutoIdempotent { - - /** 时间(秒) */ - long expireTime() default 5; -} diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java index fa75ff5..a8d67a7 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/dto/TaskDTO.java @@ -1,5 +1,7 @@ package com.chushang.inspection.project.dto; +import cn.hutool.core.date.DatePattern; +import com.alibaba.excel.annotation.format.DateTimeFormat; import com.chushang.common.core.validator.Create; import com.chushang.common.core.validator.Update; import com.fasterxml.jackson.annotation.JsonFormat; @@ -55,12 +57,14 @@ public class TaskDTO implements Serializable { * 项目开始时间 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(DatePattern.NORM_DATETIME_MS_PATTERN) private LocalDateTime startTime; /** * 项目结束时间 */ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(DatePattern.NORM_DATETIME_MS_PATTERN) private LocalDateTime endTime; /** diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/vo/TaskVO.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/vo/TaskVO.java index dc907e3..1866cc7 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/vo/TaskVO.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/project/vo/TaskVO.java @@ -3,6 +3,7 @@ package com.chushang.inspection.project.vo; import cn.hutool.core.date.DatePattern; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.chushang.common.core.util.TreeNode; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,17 +17,18 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data public class TaskVO extends TreeNode { - + /** + * 任务id + */ + private Long taskId; /** * 任务名称 */ - private String name; - + private String taskName; /** * 任务联系人 */ private String contact; - /** * 联系电话 */ @@ -40,13 +42,11 @@ public class TaskVO extends TreeNode { /** * 项目开始时间 */ - @DateTimeFormat(DatePattern.NORM_DATETIME_MS_PATTERN) private LocalDateTime startTime; /** * 项目结束时间 */ - @DateTimeFormat(DatePattern.NORM_DATETIME_MS_PATTERN) private LocalDateTime endTime; /** @@ -90,7 +90,11 @@ public class TaskVO extends TreeNode { /** * 创建时间 */ - @DateTimeFormat(DatePattern.NORM_DATETIME_MS_PATTERN) private LocalDateTime createTime; + /** + * 所属项目id + */ + private Long projectId; + } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java index f052ca2..259f652 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/PollTaskController.java @@ -10,6 +10,7 @@ import com.chushang.inspection.project.dto.Delete; import com.chushang.inspection.project.dto.TaskDTO; import com.chushang.inspection.project.dto.TaskExcelDTO; import com.chushang.inspection.project.dto.TaskQuery; +import com.chushang.inspection.project.service.TbTemplateService; import com.chushang.inspection.project.vo.ConfigVO; import com.chushang.inspection.project.vo.TaskVO; import com.chushang.inspection.project.service.PollingTaskService; @@ -33,6 +34,8 @@ public class PollTaskController { @Resource PollingTaskService pollingTaskService; + @Resource + TbTemplateService tbTemplateService; /** @@ -150,4 +153,12 @@ public class PollTaskController { } // todo 下载导入模板 + @SysLog(value = "导入模板", businessType = BusinessType.DOWNLOAD) + @PostMapping("/down/template") +// @RequiresPermissions("task:down:template") + public AjaxResult downTemplate(@RequestParam(defaultValue = "111") String templateAlias, + @RequestParam(defaultValue = "") Long taskId) + { + return AjaxResult.success(tbTemplateService.getByAlias(templateAlias, taskId)); + } } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/TemplateController.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/TemplateController.java index 4b752db..da66105 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/TemplateController.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/controller/TemplateController.java @@ -51,4 +51,15 @@ public class TemplateController { return AjaxResult.success(tbTemplateService.updateTemplate(template)); } + + /** + * 删除模板 + */ + @SysLog(value = "模板", businessType = BusinessType.UPDATE) + @DeleteMapping(value = "/del/{templateId}") + @RequiresPermissions(value = "ins:template:del") + public AjaxResult del(@PathVariable Long templateId){ + return AjaxResult.success(tbTemplateService.removeById(templateId)); + } + } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/PollingTaskService.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/PollingTaskService.java index 27382b5..149d956 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/PollingTaskService.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/PollingTaskService.java @@ -1,15 +1,14 @@ package com.chushang.inspection.project.service; -import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.extension.service.IService; import com.chushang.common.mybatis.page.CommonParam; import com.chushang.inspection.project.dto.TaskDTO; import com.chushang.inspection.project.dto.TaskExcelDTO; import com.chushang.inspection.project.dto.TaskQuery; import com.chushang.inspection.project.po.PollingTask; +import com.chushang.inspection.project.po.Template; import com.chushang.inspection.project.vo.ConfigVO; import com.chushang.inspection.project.vo.TaskVO; -import org.springframework.cache.annotation.Cacheable; import org.springframework.web.multipart.MultipartFile; import java.util.List; diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/TbTemplateService.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/TbTemplateService.java index 37db6ce..7a7f786 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/TbTemplateService.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/TbTemplateService.java @@ -1,6 +1,8 @@ package com.chushang.inspection.project.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; +import com.chushang.common.mybatis.enums.Operator; import com.chushang.common.mybatis.utils.PageResult; import com.chushang.inspection.project.po.Template; @@ -14,4 +16,12 @@ public interface TbTemplateService extends IService