Browse Source

添加日志操作

hym 3 years ago
parent
commit
2f04ae9cb5

+ 13 - 5
zoniot-common/zoniot-core-utils/src/main/java/com/zcxk/core/utils/DateUtil.java

@@ -3,10 +3,7 @@ package com.zcxk.core.utils;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -2250,5 +2247,16 @@ public class DateUtil extends DateFormatUtils {
         }
         return false;
     }
-
+    /**
+     * LocalDate转Date
+     * @param localDate
+     * @return
+     */
+    public static Date localDate2Date(LocalDateTime localDate) {
+        if(null == localDate) {
+            return null;
+        }
+        ZonedDateTime zonedDateTime = localDate.atZone(ZoneId.systemDefault());
+        return Date.from(zonedDateTime.toInstant());
+    }
 }

+ 148 - 0
zoniot-rmcp/zoniot-rmcp-api/src/main/java/com/zcxk/rmcp/api/dto/device/DeviceSyncDto.java

@@ -0,0 +1,148 @@
+package com.zcxk.rmcp.api.dto.device;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+/**
+ * @author heyumin
+ * @version 1.0
+ * @date 2021/8/23 9:37
+ */
+@Data
+public class DeviceSyncDto {
+    @ApiModelProperty(value = "主键", position = 1)
+    Long id ;
+    @NotNull(message = "{device.no.notBlank}" )
+    @ApiModelProperty(value = "节点编号", position = 2)
+    String deviceNo ;
+
+    @NotNull(message = "{device.productCategoryId.notBlank}" )
+    @ApiModelProperty(value = "产品分类ID", position = 3)
+    Integer productCategoryId;
+
+    @ApiModelProperty(value = "产品分类名称", position = 4)
+    String productCategoryName ;
+
+    @NotNull(message = "{device.productId.notBlank}" )
+    @ApiModelProperty(value = "产品ID", position = 3)
+    Integer productId;
+
+    @ApiModelProperty(value = "产品名称", position = 4)
+    String productName ;
+
+    @ApiModelProperty(value = "站点Id", position = 5)
+    @NotNull(message = "{device.siteId.notBlank}" )
+    Integer siteId;
+
+    @ApiModelProperty(value = "站点名称", position = 6)
+    String siteName ;
+
+    @NotNull(message = "{device.channelId.notBlank}" )
+    @ApiModelProperty(value = "场景ID", position = 7)
+    Integer channelId ;
+
+    @ApiModelProperty(value = "场景名称", position = 8)
+    String channelName ;
+
+    @ApiModelProperty(value = "省编码", position = 9)
+    Integer provinceId ;
+    @ApiModelProperty(value = "省名称", position = 10)
+    String provinceName ;
+
+
+    @ApiModelProperty(value = "市编码", position = 11)
+    Integer cityId ;
+    @ApiModelProperty(value = "市名称", position = 12)
+    String cityName ;
+
+
+    @ApiModelProperty(value = "区编码", position = 13)
+    Integer regionId ;
+    @ApiModelProperty(value = "区名称", position = 14)
+    String regionName ;
+
+
+    @ApiModelProperty(value = "小区ID", position = 15)
+    Integer communityId ;
+    @ApiModelProperty(value = "小区名称", position = 16)
+    String communityName ;
+
+
+    @ApiModelProperty(value = "建筑ID", position = 17)
+    Integer buildingId;
+    @ApiModelProperty(value = "建筑名称", position = 18)
+    String buildingName ;
+    @ApiModelProperty(value = "建筑单元", position = 19)
+    String buildingUnit ;
+    @ApiModelProperty(value = "建筑楼层", position = 20)
+    Integer floor ;
+
+
+    @ApiModelProperty(value = "详细安装地址", position = 21)
+    String locationDesc ;
+
+
+    @ApiModelProperty(value = "客户ID", position = 22)
+    Integer customerId;
+    @ApiModelProperty(value = "客户名称", position = 23)
+    String customerName ;
+
+
+    @ApiModelProperty(value = "项目ID", position = 24)
+    Integer projectId ;
+    @ApiModelProperty(value = "项目名称", position = 25)
+    String projectName ;
+
+
+    @ApiModelProperty(value = "厂商ID", position = 26)
+    Integer manufacturerId;
+
+    @ApiModelProperty(value = "厂商名称", position = 27)
+    String manufacturerName ;
+
+    @ApiModelProperty(value = "型号", position = 28)
+    String productModel ;
+
+
+    @ApiModelProperty(value = "设备状态  1:正常 2:故障 3:无 4: 预警 5:未启用", position = 29)
+    Integer deviceStatus ;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "最新数据接收时间", position = 30)
+    Date lastReceiveTime ;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "安装时间", position = 31)
+    Date installTime ;
+
+
+    @ApiModelProperty(value = "状态", position = 32)
+    Integer status;
+
+    @ApiModelProperty(value = "经度", position = 33)
+    Double longitude ;
+
+    @ApiModelProperty(value = "纬度", position = 34)
+    Double latitude ;
+
+    @ApiModelProperty(value = "创建人", position = 35)
+    String createBy ;
+
+    @ApiModelProperty(value = "更新人", position = 36)
+    String updateBy;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间", position = 37)
+    Date dateCreate ;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty(value = "更新时间", position = 38)
+    Date dateUpdate = new Date();
+    //数据库操作类型
+    String operationType;
+
+}

+ 4 - 0
zoniot-rmcp/zoniot-rmcp-sync/pom.xml

@@ -24,6 +24,10 @@
             <groupId>com.zcxk</groupId>
             <artifactId>zoniot-core-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.zcxk</groupId>
+            <artifactId>zoniot-rmcp-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>

+ 56 - 0
zoniot-rmcp/zoniot-rmcp-sync/src/main/java/com/zcxk/sync/config/RabbitConfig.java

@@ -0,0 +1,56 @@
+package com.zcxk.sync.config;
+
+import org.springframework.amqp.core.*;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class RabbitConfig {
+    @Value("${iot.device.queue.name}")
+    private  String receiveQueueName;
+    @Value("${iot.exchange.name}")
+    private  String receiveExchangeName;
+    @Value("${iot.device.routing.key}")
+    private  String receiveRoutingKey;
+    @Value("${iot.delete.device.routing.key}")
+    private  String dispathRoutingKey;
+    @Value("${iot.delete.device.queue}")
+    private  String dispathQueue;
+
+
+    @Bean
+    public Queue dispathQueue() {
+        return QueueBuilder.nonDurable(dispathQueue).build();
+    }
+    @Bean
+    public Queue receiveQueue() {
+
+        return new Queue(receiveQueueName, false, false, false, null);
+    }
+
+    @Bean
+    public Exchange exchange() {
+
+        return new TopicExchange(receiveExchangeName, false, false, null);
+    }
+
+
+    @Bean
+    public Binding receiveBinding() {
+        return new Binding(receiveQueueName,
+                Binding.DestinationType.QUEUE,
+                receiveExchangeName,
+                receiveRoutingKey,
+                null);
+    }
+    @Bean
+    public Binding dispathBinding() {
+        return new Binding(dispathQueue,
+                Binding.DestinationType.QUEUE,
+                receiveExchangeName,
+                dispathRoutingKey,
+                null);
+    }
+
+}

+ 78 - 0
zoniot-rmcp/zoniot-rmcp-sync/src/main/java/com/zcxk/sync/mq/SyncDeviceProducer.java

@@ -0,0 +1,78 @@
+package com.zcxk.sync.mq;
+
+import com.alibaba.fastjson.JSON;
+import com.zcxk.core.utils.DateUtil;
+import com.zcxk.core.utils.MqService;
+import com.zcxk.rmcp.api.dto.DeviceAreaDto;
+import com.zcxk.rmcp.api.dto.device.DeviceSyncDto;
+import com.zcxk.rmcp.api.dto.product.ProductVo;
+import com.zcxk.rmcp.core.dao.AreaMapper;
+import com.zcxk.rmcp.core.dao.ProductMapper;
+import com.zcxk.rmcp.core.entity.Device;
+import com.zcxk.sync.constant.MqConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author heyumin
+ * @version 1.0
+ * @date 2021/8/23 9:23
+ */
+@Component
+@Slf4j
+public class SyncDeviceProducer {
+    @Autowired
+    private MqService mqService;
+    @Resource
+    private AreaMapper areaMapper;
+    @Resource
+    private ProductMapper productMapper;
+    @Value("${iot.exchange.name}")
+    private String exchange;
+    @Value("${iot.device.routing.key}")
+    private String deviceKey;
+    @Value("${iot.delete.device.routing.key}")
+    private String deleteDeviceKey;
+
+    public void sendDeviceInfo(Device device,String opt){
+        DeviceSyncDto deviceSyncDto=new DeviceSyncDto();
+        deviceSyncDto.setOperationType(opt);
+        try {
+            setDeviceSyncDto(deviceSyncDto,device);
+            mqService.send(exchange,deviceKey, JSON.toJSONString(deviceSyncDto));
+        }catch (Exception e){
+          log.error("同步设备信息出错",e);
+        }
+
+    }
+    private void setDeviceSyncDto(DeviceSyncDto deviceSyncDto,Device device){
+
+        Double lat=device.getLat()==null?null:device.getLat().doubleValue();
+        deviceSyncDto.setLatitude(lat);
+        Double lng=device.getLng()==null?null:device.getLng().doubleValue();
+        deviceSyncDto.setLongitude(lng);
+        deviceSyncDto.setId(device.getId());
+        deviceSyncDto.setDeviceNo(device.getDeviceNo());
+        DeviceAreaDto deviceAreaDto=areaMapper.findAreas(device.getCommunityId());
+        deviceSyncDto.setCityId(deviceAreaDto.getCityId());
+        deviceSyncDto.setProvinceId(deviceAreaDto.getProvinceId());
+        deviceSyncDto.setRegionId(deviceAreaDto.getRegionId());
+        ProductVo productVo=productMapper.findProduct(device.getProductId());
+        deviceSyncDto.setProductModel(productVo.getProductModel());
+        deviceSyncDto.setManufacturerName(productVo.getManufacturerName());
+        deviceSyncDto.setProductName(productVo.getProductName());
+
+
+
+    }
+    public void deleteDeviceInfo(List<Long> ids){
+        mqService.send(exchange,deleteDeviceKey,JSON.toJSONString(ids));
+    }
+
+
+}

+ 4 - 1
zoniot-rmcp/zoniot-rmcp-web/pom.xml

@@ -70,7 +70,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/ZoniotRmcpApplication.java

@@ -6,6 +6,7 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
 import org.springframework.scheduling.annotation.EnableAsync;
@@ -24,6 +25,7 @@ import java.net.UnknownHostException;
 @MapperScan("com.zcxk.rmcp.core.dao")
 @Slf4j
 @EnableAsync
+@EnableFeignClients
 public class ZoniotRmcpApplication {
 
     public static void main(String[] args) throws UnknownHostException {

+ 29 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/config/FeignConfig.java

@@ -0,0 +1,29 @@
+package com.zcxk.rmcp.web.config;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @description  调用其他模块接口时,带上权限认证
+ * @auto wangli
+ * @data 2020-11-17 8:52
+ */
+@Configuration
+public class FeignConfig implements RequestInterceptor {
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if(attributes != null){
+            HttpServletRequest request = attributes.getRequest();
+            if(request != null){
+                requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
+            }
+        }
+    }
+}

+ 2 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/controller/MeasurementSettlementController.java

@@ -3,6 +3,7 @@ package com.zcxk.rmcp.web.controller;
 import com.zcxk.core.common.pojo.AjaxMessage;
 import com.zcxk.core.mysql.pageing.Pagination;
 import com.zcxk.rmcp.api.dto.measurementsettlement.*;
+import com.zcxk.rmcp.web.logAdvice.LogAnnotation;
 import com.zcxk.rmcp.web.service.MeasurementSettlementService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -37,6 +38,7 @@ public class MeasurementSettlementController {
     }
     @PostMapping(value = "/add")
     @ApiOperation(value = "新增结算计划")
+    @LogAnnotation(module = "【设备管理】修改")
     public AjaxMessage<Void> addPlan(@RequestBody @Valid MeasurementSettlementDto measurementSettlementDto) {
         measurementSettlementService.addPlan(measurementSettlementDto);
         return AjaxMessage.success();

+ 16 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/logAdvice/LogAnnotation.java

@@ -0,0 +1,16 @@
+package com.zcxk.rmcp.web.logAdvice;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 日志注解
+ *
+ */
+@Target({ ElementType.TYPE,ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LogAnnotation {
+	String module() default "";
+}

+ 91 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/logAdvice/OperateLogAdvice.java

@@ -0,0 +1,91 @@
+package com.zcxk.rmcp.web.logAdvice;
+
+
+import com.zcxk.core.oauth2.pojo.LoginUser;
+import com.zcxk.core.oauth2.util.UserUtil;
+import io.swagger.annotations.ApiOperation;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * @description 统一日志处理 :通过自定义注解获取操作名称
+ * @auto wangli
+ * @data 2020-11-09 8:43
+ */
+@Aspect
+@Component
+public class OperateLogAdvice {
+
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    @Around(value = "@annotation(com.zcxk.rmcp.web.logAdvice.LogAnnotation)")
+    public Object logSave(ProceedingJoinPoint joinPoint) throws Throwable {
+        //参数存储
+        StringBuffer stringBuffer=new StringBuffer();
+        try{
+            //1.获取到所有的参数值的数组
+            Object[] args = joinPoint.getArgs();
+            Signature signature = joinPoint.getSignature();
+            MethodSignature methodSignature = (MethodSignature) signature;
+            //2.获取到方法的所有参数名称的字符串数组
+            String[] parameterNames = methodSignature.getParameterNames();
+            //拼装参数
+            for (int i =0 ,len=parameterNames.length;i < len ;i++){
+                stringBuffer.append("\r\n参数名:"+ parameterNames[i] + " = " +args[i]);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        OperateLogEntity operateLog = new OperateLogEntity();
+        LoginUser user = UserUtil.getCurrentUser();
+        if (user != null) {
+            // 设置当前登录用户
+            operateLog.setUserName(user.getUsername());
+            operateLog.setPhone(user.getPhoneNumber());
+            operateLog.setTenantId(user.getTenantId());
+            operateLog.setCompanyId(user.getCompanyId());
+            operateLog.setDepartmentId(user.getDepartmentId());
+            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+
+            String module = null;//ApiOperation注解的模块名
+            LogAnnotation logAnnotation = methodSignature.getMethod().getDeclaredAnnotation(LogAnnotation.class);
+            module = logAnnotation.module();
+            ApiOperation methodApiOperation = methodSignature.getMethod().getDeclaredAnnotation(ApiOperation.class);
+            if (methodApiOperation != null) {
+                module =methodApiOperation.value();
+            }
+
+            // 没有指定日志module ,获取方法
+            if (StringUtils.isEmpty(module)) {
+                Method method = methodSignature.getMethod();
+                module= method.getDeclaringClass().getName()+method.getName();
+            }
+            operateLog.setOperateContent(module);
+
+            try {
+                return  joinPoint.proceed();
+            } catch (Exception e) {
+                operateLog.setOperateContent(operateLog.getOperateContent()+"__操作抛出异常");
+                throw e;
+            } finally {
+                if (operateLog.getUserName() != null) {
+                    operateLog.setCreateTime(new Date());
+                    userCenterClient.insert(operateLog);
+                }
+            }
+        }else {
+            return joinPoint.proceed();
+        }
+    }
+}

+ 51 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/logAdvice/OperateLogEntity.java

@@ -0,0 +1,51 @@
+package com.zcxk.rmcp.web.logAdvice;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @description 操作日志实体类(uims_opr_log)
+ * @auto wangli
+ * @data 2020-10-26 15:53
+ */
+@Data
+public class OperateLogEntity implements Serializable {
+
+    private static final long serialVersionUID = 7048815501996712070L;
+
+    @ExcelIgnore
+    @ApiModelProperty(value = "主键id")
+    private Long id ;
+    @ExcelProperty(value = {"操作日志","用户名"},index = 2)
+    @ApiModelProperty(value = "用户名")
+    private String userName;
+    @ExcelProperty(value = {"操作日志","手机号"},index = 3)
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+    @ExcelIgnore
+    @ApiModelProperty(value = "租户标识")
+    private String tenantId;
+
+    @ExcelIgnore
+    @ApiModelProperty(value = "公司id")
+    private Integer companyId;
+    @ExcelIgnore
+    @ApiModelProperty(value = "部门id")
+    private Integer departmentId;
+    @ExcelProperty(value = {"操作日志","操作内容"},index = 4)
+    @ApiModelProperty(value = "操作内容")
+    private String operateContent;
+    @ApiModelProperty(value = "操作参数",hidden = true)
+    private String operateParameter;
+    @ExcelProperty(value = {"操作日志","创建时间"},index = 5)
+    @ApiModelProperty(value = "创建时间",example = "2020-12-12 12:12:12")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 29 - 0
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/logAdvice/UserCenterClient.java

@@ -0,0 +1,29 @@
+package com.zcxk.rmcp.web.logAdvice;
+
+
+
+import com.zcxk.core.common.pojo.AjaxMessage;
+import com.zcxk.rmcp.web.config.FeignConfig;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * @description 服务调用
+ * @auto wangli
+ * @data 2020-11-16 15:46
+ */
+@FeignClient(value = "user-center",configuration={FeignConfig.class})
+public interface UserCenterClient {
+
+    /**
+     * 日志保存(仅设备增删改)
+     * @param operateLogEntity
+     * @return
+     */
+    @PostMapping("/operateLog/insert")
+    void insert(OperateLogEntity operateLogEntity);
+}

+ 9 - 6
zoniot-rmcp/zoniot-rmcp-web/src/main/java/com/zcxk/rmcp/web/service/impl/MeasurementSettlementServiceImpl.java

@@ -93,12 +93,15 @@ public class MeasurementSettlementServiceImpl implements MeasurementSettlementSe
         String add = xxlJobUtil.add(setInfo(measurementSettlementDto));
         JSONObject jsonObject = JSON.parseObject(add);
         String taskId = jsonObject.getString("content");
-        measurementSettlement.setTaskId(Long.parseLong(taskId));
-        Integer id=measurementSettlement.getId();
-        measurementSettlement=new MeasurementSettlement();
-        measurementSettlement.setId(id);
-        measurementSettlement.setTaskId(Long.valueOf(taskId));
-        measurementSettlementMapper.update(measurementSettlement);
+        if(taskId!=null){
+            measurementSettlement.setTaskId(Long.parseLong(taskId));
+            Integer id=measurementSettlement.getId();
+            measurementSettlement=new MeasurementSettlement();
+            measurementSettlement.setId(id);
+            measurementSettlementMapper.update(measurementSettlement);
+
+        }
+
 
 
     }

+ 1 - 1
zoniot-rmcp/zoniot-rmcp-web/src/main/resources/application-dev.properties

@@ -101,7 +101,7 @@ iot.delete.device.queue=iot_device_delete_queue
 
 
 ribbon.OkToRetryOnAllOperations=false
-ribbon.ReadTimeout=5000:
+ribbon.ReadTimeout=5000
 ribbon.ConnectTimeout=3000
 xxl.job.admin.addresses=http://10.0.0.62:8080/xxl-job-admin
 xxl.job.group.id=8