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; } }