18339543638 пре 3 година
родитељ
комит
5044c09668

+ 3 - 0
coffee-admin/src/main/resources/application.yml

@@ -3,6 +3,9 @@ spring:
     name: coffee-service
   profiles:
     active: @profiles.active@
+  jackson:
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
 
 server:
   port: 9090

+ 54 - 0
coffee-common/src/main/java/com/coffee/common/config/JacksonConfig.java

@@ -0,0 +1,54 @@
+package com.coffee.common.config;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.SerializationFeature;
+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.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+@Configuration
+public class JacksonConfig {
+
+    @Bean
+    @Order(Ordered.HIGHEST_PRECEDENCE)
+    public Jackson2ObjectMapperBuilderCustomizer customJackson() {
+        return new Jackson2ObjectMapperBuilderCustomizer() {
+            @Override
+            public void customize(Jackson2ObjectMapperBuilder builder) {
+                builder.serializerByType(LocalDateTime.class,
+                        new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                builder.serializerByType(LocalDate.class,
+                        new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                builder.serializerByType(LocalTime.class,
+                        new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
+                builder.deserializerByType(LocalDateTime.class,
+                        new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                builder.deserializerByType(Date.class,
+                        new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                builder.deserializerByType(LocalDate.class,
+                        new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                builder.deserializerByType(LocalTime.class,
+                        new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
+                builder.serializationInclusion(JsonInclude.Include.NON_NULL);
+                builder.failOnUnknownProperties(false);
+//                builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+                builder.featuresToDisable(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS);
+            }
+        };
+    }
+}

+ 9 - 1
coffee-common/src/main/java/com/coffee/common/crud/controller/BaseDeleteController.java

@@ -5,6 +5,8 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.result.R;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
@@ -23,8 +25,11 @@ public interface BaseDeleteController<E, K extends Serializable> extends BaseCur
     BaseService<? extends Mapper<E>,E,K> getService();
 
     @PostMapping("/remove")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id",required = true)
+    })
     @ApiOperation(value = "根据ID删除")
-    default R delete(@RequestParam("ids") K id) {
+    default R delete(@RequestParam("id") K id) {
         deleteAuth();
         if(StrUtil.isNullOrUndefined(String.valueOf(id))){
             return R.success();
@@ -43,6 +48,9 @@ public interface BaseDeleteController<E, K extends Serializable> extends BaseCur
      **/
 
     @PostMapping("/delete/_batch")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids",value = "主键id集合",required = true)
+    })
     @ApiOperation(value = "根据ID删除")
     default R delete(@RequestBody List<String> ids) {
         deleteAuth();

+ 7 - 3
coffee-common/src/main/java/com/coffee/common/crud/controller/BaseQueryController.java

@@ -7,8 +7,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.entity.QueryParamEntity;
 import com.coffee.common.result.R;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.Serializable;
@@ -28,7 +29,7 @@ public interface BaseQueryController<E, K extends Serializable> extends
      */
     @PostMapping("/page")
     @ApiOperation(value = "使用POST方式分页动态查询")
-    default R<IPage<E>> queryPager(@ApiParam(hidden = true)@RequestBody QueryParamEntity<E> query) {
+    default R<IPage<E>> queryPager(@RequestBody QueryParamEntity<E> query) {
         queryAuth();
         return R.success(this.getService().list(query));
 
@@ -36,7 +37,7 @@ public interface BaseQueryController<E, K extends Serializable> extends
 
     @PostMapping("/_count")
     @ApiOperation(value = "使用POST方式查询总数")
-    default R<Long> count(@ApiParam(hidden = true) @RequestBody(required = false) QueryParamEntity<E> query) {
+    default R<Long> count( @RequestBody(required = false) QueryParamEntity<E> query) {
         queryAuth();
         return R.success(ObjectUtil.isNull(query)?this.getService().count():this.getService().count(query));
     }
@@ -44,6 +45,9 @@ public interface BaseQueryController<E, K extends Serializable> extends
 
     @GetMapping("/view")
     @ApiOperation(value = "根据ID查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id",required = true)
+    })
     default R<E> getById(@RequestParam("id") K id) {
         queryAuth();
         String key=String.valueOf(id);

+ 1 - 1
coffee-common/src/main/java/com/coffee/common/entity/QueryParamEntity.java

@@ -24,7 +24,7 @@ public class QueryParamEntity<T> {
 //    @Schema(description = "指定不查询的列")
 //    private Set<String> excludes;
 
-    @ApiModelProperty(value = "where条件表达式,与terms参数不能共存.语法: name = 张三 and age > 16")
+    @ApiModelProperty(value = "查询条件")
     private Set<Term> wheres;
 
     @ApiModelProperty(value = "分页查询")

+ 2 - 2
coffee-common/src/main/java/com/coffee/common/entity/param/Term.java

@@ -24,13 +24,13 @@ public class Term implements Cloneable, Serializable {
     /**
      * 单值
      */
-    @ApiModelProperty(value = "单条件")
+    @ApiModelProperty(value = "单条件",example = "eq:相等 like:模糊查询 gt:大于 lt:小于")
     private Object value;
 
     /**
      * 多值 即用于in ,between
      */
-    @ApiModelProperty(value = "多条件")
+    @ApiModelProperty(value = "多条件",example = "btw:区间 in:区间")
     private List<Object> values;
     /**
      * 条件类型

+ 4 - 0
coffee-common/src/main/java/com/coffee/common/result/R.java

@@ -1,5 +1,6 @@
 package com.coffee.common.result;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -24,14 +25,17 @@ public class R<T> implements Serializable {
     /**
      * 状态码
      */
+    @ApiModelProperty("状态码")
     private int code;
     /**
      * 承载数据
      */
+    @ApiModelProperty("承载数据")
     private T data;
     /**
      * 返回消息
      */
+    @ApiModelProperty("返回错误消息")
     private String msg;
 
     private R(int code, T data, String msg) {

+ 28 - 6
coffee-framework/src/main/java/com/coffee/framework/config/WebAppMvcConfig.java

@@ -1,12 +1,18 @@
 package com.coffee.framework.config;
 
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
- 
-import java.time.format.DateTimeFormatter;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
  
 /**
  * @Description TODO
@@ -15,9 +21,25 @@ import java.time.format.DateTimeFormatter;
  * @Created by jianxiapc
  */
 @Configuration
-@ConditionalOnProperty(value = "spring.profiles.active",havingValue = "dev")
+@Profile("dev")
 public class WebAppMvcConfig implements WebMvcConfigurer {
- 
+    @Override
+    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
+        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+        ObjectMapper objectMapper = converter.getObjectMapper();
+        // 生成JSON时,将所有Long转换成String
+        SimpleModule simpleModule = new SimpleModule();
+        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
+        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
+        objectMapper.registerModule(simpleModule);
+        // 时间格式化
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        // 设置格式化内容
+        converter.setObjectMapper(objectMapper);
+        converters.add(0, converter);
+    }
+
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
  

+ 32 - 4
coffee-system/src/main/java/com/coffee/bus/controller/BusAlarmController.java

@@ -1,14 +1,19 @@
 package com.coffee.bus.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
 import com.coffee.bus.entity.BusDeviceAlarmEntity;
+import com.coffee.bus.enums.DeviceEnum;
 import com.coffee.bus.service.LocalBusDeviceAlarmService;
 import com.coffee.common.crud.BaseService;
 import com.coffee.common.crud.controller.BaseCrudController;
-import io.swagger.annotations.Api;
+import com.coffee.common.result.R;
+import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.util.ReflectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.lang.reflect.Field;
 
 /**
  * @author lifang
@@ -20,13 +25,36 @@ import org.springframework.web.bind.annotation.RestController;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/bus/alarm")
-@Api(tags = "设备报警管理",description = "统一权限前缀(bus:alarm),例如新增bus:alarm:add")
+@Api(tags = "设备报警管理",value = "统一权限前缀(bus:alarm),例如新增bus:alarm:add")
 public class BusAlarmController extends BaseCrudController<BusDeviceAlarmEntity, String> {
 
     private final LocalBusDeviceAlarmService deviceAlarmService;
 
+    @PutMapping("/cause/{id}")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "cause",value = "报警原因",dataTypeClass = String.class,required = true,example = "设备误报"),
+            @ApiImplicitParam(name = "id",value = "报警信息id",dataTypeClass = String.class,required = true)
+    })
+    @ApiOperation(value = "添加报警原因",notes = "权限:【bus:alarm:cause】")
+    @SaCheckPermission("bus:alarm:cause")
+    public R cause(@PathVariable("id") String id, @RequestBody String cause) {
+        deviceAlarmService.addCause(id,cause);
+        return R.success();
+    }
+
     @Override
     public BaseService<? extends Mapper<BusDeviceAlarmEntity>, BusDeviceAlarmEntity, String> getService() {
         return deviceAlarmService;
     }
+
+    public static void main(String[] args) {
+        set(DeviceEnum.net);
+    }
+
+
+    public static  void set(Object value){
+        Field ordinal = ReflectionUtils.findField(value.getClass(), "ordinal");
+        ordinal.setAccessible(true);
+        System.out.println( ReflectionUtils.getField(ordinal,value));
+    }
 }

+ 1 - 2
coffee-system/src/main/java/com/coffee/bus/entity/BusDeviceUsingEntity.java

@@ -1,6 +1,6 @@
 package com.coffee.bus.entity;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
+
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -18,7 +18,6 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 import org.apache.ibatis.type.EnumOrdinalTypeHandler;
-import org.python.antlr.ast.Str;
 
 import java.math.BigDecimal;
 import java.util.Date;

+ 13 - 0
coffee-system/src/main/java/com/coffee/bus/registry/Operator.java

@@ -1,9 +1,12 @@
 package com.coffee.bus.registry;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.coffee.common.cache.ConfigStorage;
 import com.coffee.common.cache.value.Value;
 import org.springframework.cache.support.SimpleValueWrapper;
+import org.springframework.util.ReflectionUtils;
 
+import java.lang.reflect.Field;
 import java.util.*;
 
 /**
@@ -26,6 +29,16 @@ public interface Operator<T> {
 
     List<String> getAllKeys();
 
+    default void set(String key,Object value){
+        if (value.getClass().isEnum()) {
+            Field ordinal = ReflectionUtils.findField(value.getClass(), "ordinal");
+            ordinal.setAccessible(true);
+            getConfig().setConfig(key, ReflectionUtils.getField(ordinal,value));
+        }
+
+        getConfig().setConfig(key,value);
+    };
+
     default Map<String, Value> getAll() {
         Map<String, Value> result = getConfig().getKeys(getAllKeys());
         List<String> keys = new LinkedList<>();

+ 22 - 0
coffee-system/src/main/java/com/coffee/bus/service/LocalBusDeviceAlarmService.java

@@ -1,9 +1,13 @@
 package com.coffee.bus.service;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.coffee.bus.entity.BusDeviceAlarmEntity;
 import com.coffee.bus.mapper.BusDeviceAlarmMapper;
 import com.coffee.common.crud.BaseService;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author lifang
@@ -13,6 +17,7 @@ import org.springframework.stereotype.Service;
  * @createTime 2022年03月19日 09:27:00
  */
 @Service
+@AllArgsConstructor
 public class LocalBusDeviceAlarmService extends BaseService<BusDeviceAlarmMapper, BusDeviceAlarmEntity,String> {
     @Override
     public void validateBeforeSave(BusDeviceAlarmEntity entity) {
@@ -28,4 +33,21 @@ public class LocalBusDeviceAlarmService extends BaseService<BusDeviceAlarmMapper
     public void validateBeforeDelete(String id) {
 
     }
+
+    /**
+     * 添加报警原因
+     * @param id
+     * @param cause
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void addCause(String id, String cause) {
+        BusDeviceAlarmEntity alarm = this.getById(id);
+        if(alarm==null){
+            return ;
+        }
+        if(StrUtil.isNotEmpty(alarm.getDeviceHistoryId())){
+            //todo 更新历史消息
+        }
+        this.update(new UpdateWrapper<BusDeviceAlarmEntity>().lambda().eq(BusDeviceAlarmEntity::getId,id).set(BusDeviceAlarmEntity::getCause,cause));
+    }
 }

+ 1 - 1
coffee-system/src/main/java/com/coffee/bus/websocket/listener/DeviceInfoListener.java

@@ -65,7 +65,7 @@ public class DeviceInfoListener {
         //若数据发送过快,为防止冲突,请在此加锁处理 todo
         synchronized (infoEvent.getDeviceId()){
             log.info("开始处理时间------------------------[{}]",System.currentTimeMillis());
-            /****************处理泵数据****************/
+            /****************处理泵数据 todo 后续交由上游处理****************/
             BusDeviceUsingEntity device = infoEvent.getContent();
             //1、判断该设备是否已和医院绑定并开启使用
             String deviceId = device.getDeviceId();