guoshilong
2024-04-24 f346908a4a98a7d1f93730a24657ab60e68c7d16
每日报汛
7 files modified
9 files added
494 ■■■■■ changed files
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java 38 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java 65 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java 68 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java 36 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java 96 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java 85 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java
New file
@@ -0,0 +1,24 @@
package cn.gistack.resource.feign;
import feign.Body;
import feign.Headers;
import org.springblade.core.launch.constant.AppConstant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@FeignClient(
    value = AppConstant.APPLICATION_RESOURCE_NAME,
    fallback = IOssClientFallback.class
)
public interface IOssClient {
    String API_PREFIX = "/client";
    String UPLOAD_FILE = API_PREFIX + "uploadFile";
    @PostMapping(value = UPLOAD_FILE,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String uploadFile(@RequestParam("fileName") String fileName, @RequestPart("file") MultipartFile file) throws Exception;
}
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java
New file
@@ -0,0 +1,38 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package cn.gistack.resource.feign;
import org.springblade.core.tool.api.R;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
 * 流程远程调用失败处理类
 *
 * @author Chill
 */
@Component
public class IOssClientFallback implements IOssClient {
    @Override
    public String uploadFile(String fileName,  MultipartFile multipartFile) {
        return null;
    }
}
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java
New file
@@ -0,0 +1,65 @@
package cn.gistack.resource.vo;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
public class MyMultipartFile implements MultipartFile {
    private String contentType;
    private String originalFilename;
    private String name;
    private byte[] bytes;
    public MyMultipartFile(){}
    public MyMultipartFile(String name, String originalFilename, String contentType, byte[] bytes){
        this.bytes = bytes;
        this.name = name;
        this.originalFilename = originalFilename;
        this.contentType = contentType;
    }
    @Override
    public String getName() {
        return this.name;
    }
    @Override
    public String getOriginalFilename() {
        return this.originalFilename;
    }
    @Override
    public String getContentType() {
        return this.contentType;
    }
    @Override
    public boolean isEmpty() {
        return this.bytes == null || this.bytes.length == 0;
    }
    @Override
    public long getSize() {
        return this.bytes.length;
    }
    @Override
    public byte[] getBytes() throws IOException {
        return this.bytes;
    }
    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(this.bytes);
    }
    @Override
    @SuppressWarnings("resource")
    public void transferTo(File dest) throws IOException, IllegalStateException {
        new FileOutputStream(dest).write(bytes);
    }
}
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java
@@ -16,6 +16,7 @@
 */
package cn.gistack.resource.builder.oss;
import cn.gistack.common.constant.CommonConstant;
import cn.gistack.resource.rule.MyOssRule;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -94,6 +95,11 @@
     */
    public OssTemplate template(String code) {
        String tenantId = AuthUtil.getTenantId();
        if (StringUtil.isBlank(tenantId)){
            tenantId = "000000";
        }
        Oss oss = getOss(tenantId, code);
        Oss ossCached = ossPool.get(tenantId);
        OssTemplate template = templatePool.get(tenantId);
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java
New file
@@ -0,0 +1,68 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package cn.gistack.resource.feign;
import cn.gistack.resource.builder.oss.OssBuilder;
import cn.gistack.resource.builder.sms.SmsBuilder;
import lombok.AllArgsConstructor;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.sms.model.SmsCode;
import org.springblade.core.sms.model.SmsData;
import org.springblade.core.sms.model.SmsResponse;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.jackson.JsonUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Map;
import static cn.gistack.resource.utils.SmsUtil.*;
/**
 * 短信远程调用服务
 *
 * @author Chill
 */
@NonDS
@RestController
public class OssClient implements IOssClient {
    @Autowired
    private  OssBuilder ossBuilder;
    @PostMapping(value = UPLOAD_FILE)
    public String uploadFile(String fileName,  MultipartFile file) throws Exception{
//        InputStream inputStream = new ByteArrayInputStream(bytes);
        BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
        String link = bladeFile.getLink();
        if (link.indexOf("http://10.42.6.251:8082") != -1) {
            link= link.replace("http://10.42.6.251:8082", "https://sk.hubeishuiyi.cn/gminio");
        }
        return link;
    }
}
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml
@@ -6,8 +6,8 @@
oss:
  enabled: true
  name: minio
  tenant-mode: true
  endpoint: http://10.10.2.251:8082
  tenant-mode: false
  endpoint: http://10.42.6.251:8082
  access-key: minioadmin
  secret-key: Gistack@2023_hb
  bucket-name: test
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java
@@ -1,17 +1,20 @@
package cn.gistack.sm.dayReportFlood.feign;
import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
import cn.gistack.sm.message.feign.IMessageClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(
    value = "blade-sm",
    fallback = IDayReportFloodClientFallback.class
)
public interface IDayReportFloodClient {
    String API_PREFIX = "/client";
    String SAVE_DAY_REPORT_FLOOD = API_PREFIX + "saveDayReportFlood";
    @PostMapping(SAVE_DAY_REPORT_FLOOD)
    boolean save(@RequestBody DayReportFlood saveEntity);
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java
@@ -1,6 +1,7 @@
package cn.gistack.sm.dayReportFlood.feign;
import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
import cn.gistack.sm.message.entity.MessageRecord;
import cn.gistack.sm.message.feign.IMessageClient;
import org.springframework.stereotype.Component;
@@ -16,4 +17,8 @@
public class IDayReportFloodClientFallback implements IDayReportFloodClient {
    @Override
    public boolean save(DayReportFlood saveEntity) {
        return false;
    }
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java
New file
@@ -0,0 +1,19 @@
package cn.gistack.sm.sjztmd.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.core.io.InputStreamResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(
    value = "blade-sm",
    fallback = ISjztMdClientFallback.class
)
public interface ISjztMdClient {
    String API_PREFIX = "/client";
    String GENERATE_DAY_REPORT_FLOOD = API_PREFIX + "generateDayReportFlood";
    @GetMapping(GENERATE_DAY_REPORT_FLOOD)
    String generateDayReportFlood(@RequestParam("isShow") String isShow) throws Exception;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java
New file
@@ -0,0 +1,23 @@
package cn.gistack.sm.sjztmd.feign;
import org.springframework.core.io.InputStreamResource;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * @ClassName Feign失败配置
 * @Description TODO
 * @Author aix
 * @Date 2023/4/23 19:40
 * @Version 1.0
 */
@Component
public class ISjztMdClientFallback implements ISjztMdClient{
    @Override
    public String generateDayReportFlood(String isShow) {
        return null;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -76,6 +76,11 @@
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-resource-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-excel</artifactId>
        </dependency>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java
New file
@@ -0,0 +1,36 @@
package cn.gistack.sm.dayReportFlood.feign;
import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
import cn.gistack.sm.dayReportFlood.service.IDayReportFloodService;
import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
import cn.gistack.sm.sjztmd.util.MyDateUtils;
import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
import cn.gistack.sm.sjztmd.word.util.WordUtil;
import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
import cn.gistack.sm.sjztmd.word.vo.OverDetail;
import cn.gistack.sm.sjztmd.word.vo.SzInfo;
import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springframework.core.io.InputStreamResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
import java.util.List;
@NonDS
@ApiIgnore
@RestController
@AllArgsConstructor
public class DayReportFloodClientImpl implements IDayReportFloodClient {
    private final IDayReportFloodService dayReportFloodService;
    @Override
    public boolean save(DayReportFlood saveEntity) {
        return dayReportFloodService.save(saveEntity);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java
New file
@@ -0,0 +1,96 @@
package cn.gistack.sm.sjztmd.feign;
import cn.gistack.resource.feign.IOssClient;
import cn.gistack.resource.vo.MyMultipartFile;
import cn.gistack.sm.sjztmd.entity.AttResBase;
import cn.gistack.sm.sjztmd.feign.IAttResBaseClient;
import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
import cn.gistack.sm.sjztmd.service.IAttResBaseService;
import cn.gistack.sm.sjztmd.util.MyDateUtils;
import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
import cn.gistack.sm.sjztmd.word.util.WordUtil;
import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
import cn.gistack.sm.sjztmd.word.vo.OverDetail;
import cn.gistack.sm.sjztmd.word.vo.SzInfo;
import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@NonDS
@ApiIgnore
@RestController
@AllArgsConstructor
public class SjztMdClientImpl implements ISjztMdClient {
    private final ISjztmdService sjztmdService;
    private final IOssClient ossClient;
    @Override
    @GetMapping(GENERATE_DAY_REPORT_FLOOD)
    public String generateDayReportFlood(String isShow) throws Exception{
        //获取总览、大中库、明细数据
        List<TotalInfo> totalList = sjztmdService.getTotalInfo(isShow);
        List<DzkInfo> dzkList = sjztmdService.getDzkInfo(isShow);
        List<OverDetail> overDetailList = sjztmdService.getOverDetailInfo(isShow);
        List<SzInfo> szInfoList = sjztmdService.getSzInfo(isShow);
        HashMap<String,String> over10Params = new HashMap<>();
        //small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2
        over10Params.put("small_start_stag", "0.1");
        over10Params.put("mid_start_stag", "0.1");
        over10Params.put("big_start_stag", "0.1");
        HashMap<String,String> normalParams = new HashMap<>();
        //small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2
        normalParams.put("small_start_stag", "0");
        normalParams.put("mid_start_stag", "0");
        normalParams.put("big_start_stag", "0");
        List<TotalInfo> totalOverList = sjztmdService.getTotalOverInfo(isShow,normalParams);
        List<TotalInfo> totalOver10List = sjztmdService.getTotalOverInfo(isShow,over10Params);
        byte[] data =  null;
        if (MyDateUtils.isTodayInFloodSeason()){
            data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList);
        }else {
            data= WordUtil.GetNotInSeasonOverInfo(totalList,dzkList,overDetailList,szInfoList,totalOverList,totalOver10List);
        }
        // 创建响应实体并设置响应头,将输出流作为响应体返回给客户端
//        InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data));
        String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String fileName = time + "全省水库防汛情况.docx";
        MultipartFile file = new MyMultipartFile("file",fileName, "text/plain", data);
        String path = ossClient.uploadFile(fileName, file);
        return path;
    }
    private void createFile(String filePath,byte[] bytes){
        // 将byte[]写入文件
        try (FileOutputStream fos = new FileOutputStream(filePath)) {
            fos.write(bytes);
            System.out.println("文件已成功生成!");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("生成文件时发生错误。");
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java
@@ -24,8 +24,8 @@
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date startDate = sdf.parse(StringUtil.format("{}-05-01",nowYear));
            Date endDate = sdf.parse(StringUtil.format("{}-11-01",nowYear));
            Date startDate = sdf.parse(StringUtil.format("{}-04-15",nowYear));
            Date endDate = sdf.parse(StringUtil.format("{}-10-15",nowYear));
            inSeason = today.after(startDate)&&today.before(endDate);
            return inSeason;
skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml
@@ -63,6 +63,11 @@
            <artifactId>skjcmanager-user-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-resource-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java
New file
@@ -0,0 +1,85 @@
package cn.gistack.job.executor.jobhandler;
import cn.gistack.resource.feign.IOssClient;
import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
import cn.gistack.sm.dayReportFlood.feign.IDayReportFloodClient;
import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.InputStreamResource;
import org.springframework.stereotype.Component;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 每日报汛定时器
 */
@Component
public class DayReportFloodJob {
    @Autowired
    private ISjztMdClient sjztMdClient;
    @Autowired
    private IOssClient ossClient;
    @Autowired
    private IDayReportFloodClient dayReportFloodClient;
    /**
     * 南科院Arima请求预测
     *
     * @param param
     * @return
     * @throws Exception
     */
    @XxlJob("generateDayReportFloodHandle")
    public ReturnT<String> predictNkyDataJobHandler(String param) {
        XxlJobLogger.log("任务开始");
        XxlJobLogger.log("定时器执行时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
        XxlJobLogger.log("参数:" + param);
        JSONObject jsonParam = JSON.parseObject(param);
        String isShow = "";
        if (jsonParam != null) {
            isShow = jsonParam.getString("isShow");
        } else {
            isShow = "";
        }
        try {
            //获取流
            String filePath= sjztMdClient.generateDayReportFlood(isShow);
            String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            XxlJobLogger.log("地址:" + filePath);
            //保存进库中
            DayReportFlood saveEntity = new DayReportFlood();
            saveEntity.setTitle(time + "全省水库防汛情况");
            saveEntity.setContent(time + "全省水库防汛情况");
            saveEntity.setSource("系统生成");
            saveEntity.setUrls(filePath);
            boolean save = dayReportFloodClient.save(saveEntity);
            if (save) {
                XxlJobLogger.log("保存成功");
            } else {
                XxlJobLogger.log("保存失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        XxlJobLogger.log("定时器执行结束时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
        XxlJobLogger.log("结束任务...");
        return ReturnT.SUCCESS;
    }
}